mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	 fe3db7d6f0
			
		
	
	
		fe3db7d6f0
		
	
	
	
	
		
			
			to do the inplace-edit with a backup file. A quick test leads me to believe this is sufficient to allow building the documentation on Cygwin; a full test is in progress.
		
			
				
	
	
		
			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;
 | |
|       chop($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);
 | |
| }
 |