mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 18:28:49 +00:00 
			
		
		
		
	 d7bc0fec38
			
		
	
	
		d7bc0fec38
		
	
	
	
	
		
			
			SF bug #217195. Not sure if chomp() is correct, but chop() definitely has problems. This change seems to have no ill effects. Backport candidate if Fred agrees.
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
| #! /usr/bin/env perl
 | |
| 
 | |
| # On Cygwin, we actually have to generate a temporary file when doing
 | |
| # the inplace edit, or we'll get permission errors.  Not sure who's
 | |
| # bug this is, except that it isn't ours.  To deal with this, we
 | |
| # generate backups during the edit phase and remove them at the end.
 | |
| #
 | |
| use English;
 | |
| $INPLACE_EDIT = '.bak';
 | |
| 
 | |
| # read the labels, then reverse the mappings
 | |
| require "labels.pl";
 | |
| 
 | |
| %nodes = ();
 | |
| my $key;
 | |
| # sort so that we get a consistent assignment for nodes with multiple labels 
 | |
| foreach $label (sort keys %external_labels) {
 | |
|   #
 | |
|   # If the label can't be used as a filename on non-Unix platforms,
 | |
|   # skip it.  Such labels may be used internally within the documentation,
 | |
|   # but will never be used for filename generation.
 | |
|   #
 | |
|   if ($label =~ /^([-.a-zA-Z0-9]+)$/) {
 | |
|     $key = $external_labels{$label};
 | |
|     $key =~ s|^/||;
 | |
|     $nodes{$key} = $label;
 | |
|   }
 | |
| }
 | |
| 
 | |
| # This adds the "internal" labels added for indexing.  These labels will not
 | |
| # be used for file names.
 | |
| require "intlabels.pl";
 | |
| foreach $label (keys %internal_labels) {
 | |
|   $key = $internal_labels{$label};
 | |
|   $key =~ s|^/||;
 | |
|   if (defined($nodes{$key})) {
 | |
|     $nodes{$label} = $nodes{$key};
 | |
|   }
 | |
| }
 | |
| 
 | |
| # collect labels that have been used
 | |
| %newnames = ();
 | |
| 
 | |
| while (<>) {
 | |
|   # don't want to do one s/// per line per node
 | |
|   # so look for lines with hrefs, then do s/// on nodes present
 | |
|   if (/(HREF|href)=[\"\']node\d+\.html[\#\"\']/) {
 | |
|     @parts = split(/(HREF|href)\=[\"\']/);
 | |
|     shift @parts;
 | |
|     for $node (@parts) {
 | |
|       $node =~ s/[\#\"\'].*$//g;
 | |
|       chomp($node);
 | |
|       if (defined($nodes{$node})) {
 | |
| 	$label = $nodes{$node};
 | |
| 	if (s/(HREF|href)=([\"\'])$node([\#\"\'])/href=$2$label.html$3/g) {
 | |
| 	  s/(HREF|href)=([\"\'])$label.html/href=$2$label.html/g;
 | |
| 	  $newnames{$node} = "$label.html";
 | |
| 	}
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   print;
 | |
| }
 | |
| 
 | |
| foreach $oldname (keys %newnames) {
 | |
|   rename($oldname, $newnames{$oldname});
 | |
| }
 | |
| 
 | |
| foreach $filename (glob('*.bak')) {
 | |
|   unlink($filename);
 | |
| }
 |