| Fred Drake | 2543769 | 1998-03-19 05:17:49 +0000 | [diff] [blame] | 1 | #! /usr/bin/env perl | 
 | 2 |  | 
| Fred Drake | fe3db7d | 2002-05-02 20:42:30 +0000 | [diff] [blame] | 3 | # On Cygwin, we actually have to generate a temporary file when doing | 
 | 4 | # the inplace edit, or we'll get permission errors.  Not sure who's | 
 | 5 | # bug this is, except that it isn't ours.  To deal with this, we | 
 | 6 | # generate backups during the edit phase and remove them at the end. | 
 | 7 | # | 
| Fred Drake | 2543769 | 1998-03-19 05:17:49 +0000 | [diff] [blame] | 8 | use English; | 
| Fred Drake | fe3db7d | 2002-05-02 20:42:30 +0000 | [diff] [blame] | 9 | $INPLACE_EDIT = '.bak'; | 
| Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 10 |  | 
 | 11 | # read the labels, then reverse the mappings | 
 | 12 | require "labels.pl"; | 
 | 13 |  | 
 | 14 | %nodes = (); | 
| Fred Drake | e817930 | 1998-02-26 18:49:58 +0000 | [diff] [blame] | 15 | my $key; | 
| Jeremy Hylton | 9caa110 | 1998-02-18 16:10:22 +0000 | [diff] [blame] | 16 | # sort so that we get a consistent assignment for nodes with multiple labels  | 
 | 17 | foreach $label (sort keys %external_labels) { | 
| Fred Drake | 9a37418 | 2001-05-29 19:53:46 +0000 | [diff] [blame] | 18 |   # | 
 | 19 |   # If the label can't be used as a filename on non-Unix platforms, | 
 | 20 |   # skip it.  Such labels may be used internally within the documentation, | 
 | 21 |   # but will never be used for filename generation. | 
 | 22 |   # | 
 | 23 |   if ($label =~ /^([-.a-zA-Z0-9]+)$/) { | 
 | 24 |     $key = $external_labels{$label}; | 
 | 25 |     $key =~ s|^/||; | 
 | 26 |     $nodes{$key} = $label; | 
 | 27 |   } | 
| Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 28 | } | 
 | 29 |  | 
| Fred Drake | 19e2ce5 | 1998-03-27 05:24:53 +0000 | [diff] [blame] | 30 | # This adds the "internal" labels added for indexing.  These labels will not | 
 | 31 | # be used for file names. | 
 | 32 | require "intlabels.pl"; | 
 | 33 | foreach $label (keys %internal_labels) { | 
 | 34 |   $key = $internal_labels{$label}; | 
 | 35 |   $key =~ s|^/||; | 
 | 36 |   if (defined($nodes{$key})) { | 
 | 37 |     $nodes{$label} = $nodes{$key}; | 
 | 38 |   } | 
 | 39 | } | 
 | 40 |  | 
| Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 41 | # collect labels that have been used | 
 | 42 | %newnames = (); | 
 | 43 |  | 
 | 44 | while (<>) { | 
 | 45 |   # don't want to do one s/// per line per node | 
 | 46 |   # so look for lines with hrefs, then do s/// on nodes present | 
| Fred Drake | f015d9a | 2001-06-23 04:35:09 +0000 | [diff] [blame] | 47 |   if (/(HREF|href)=[\"\']node\d+\.html[\#\"\']/) { | 
| Fred Drake | ba82878 | 2000-04-03 04:19:14 +0000 | [diff] [blame] | 48 |     @parts = split(/(HREF|href)\=[\"\']/); | 
| Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 49 |     shift @parts; | 
 | 50 |     for $node (@parts) { | 
| Fred Drake | ba82878 | 2000-04-03 04:19:14 +0000 | [diff] [blame] | 51 |       $node =~ s/[\#\"\'].*$//g; | 
| Neal Norwitz | d7bc0fe | 2002-10-18 02:05:47 +0000 | [diff] [blame] | 52 |       chomp($node); | 
| Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 53 |       if (defined($nodes{$node})) { | 
 | 54 | 	$label = $nodes{$node}; | 
| Fred Drake | ba82878 | 2000-04-03 04:19:14 +0000 | [diff] [blame] | 55 | 	if (s/(HREF|href)=([\"\'])$node([\#\"\'])/href=$2$label.html$3/g) { | 
 | 56 | 	  s/(HREF|href)=([\"\'])$label.html/href=$2$label.html/g; | 
| Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 57 | 	  $newnames{$node} = "$label.html"; | 
 | 58 | 	} | 
 | 59 |       } | 
 | 60 |     } | 
 | 61 |   } | 
 | 62 |   print; | 
 | 63 | } | 
 | 64 |  | 
 | 65 | foreach $oldname (keys %newnames) { | 
| Fred Drake | af06a0b | 1998-08-11 18:17:47 +0000 | [diff] [blame] | 66 |   rename($oldname, $newnames{$oldname}); | 
| Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 67 | } | 
| Fred Drake | fe3db7d | 2002-05-02 20:42:30 +0000 | [diff] [blame] | 68 |  | 
 | 69 | foreach $filename (glob('*.bak')) { | 
 | 70 |   unlink($filename); | 
 | 71 | } |