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; |
Jeremy Hylton | daa2d5d | 1998-02-18 13:53:48 +0000 | [diff] [blame] | 52 | chop($node); |
| 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 | } |