blob: 6491b20482204b2fd0daa1074945ea0bbc527275 [file] [log] [blame]
Fred Drake25437691998-03-19 05:17:49 +00001#! /usr/bin/env perl
2
Fred Drakefe3db7d2002-05-02 20:42:30 +00003# 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 Drake25437691998-03-19 05:17:49 +00008use English;
Fred Drakefe3db7d2002-05-02 20:42:30 +00009$INPLACE_EDIT = '.bak';
Jeremy Hyltondaa2d5d1998-02-18 13:53:48 +000010
11# read the labels, then reverse the mappings
12require "labels.pl";
13
14%nodes = ();
Fred Drakee8179301998-02-26 18:49:58 +000015my $key;
Jeremy Hylton9caa1101998-02-18 16:10:22 +000016# sort so that we get a consistent assignment for nodes with multiple labels
17foreach $label (sort keys %external_labels) {
Fred Drake9a374182001-05-29 19:53:46 +000018 #
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 Hyltondaa2d5d1998-02-18 13:53:48 +000028}
29
Fred Drake19e2ce51998-03-27 05:24:53 +000030# This adds the "internal" labels added for indexing. These labels will not
31# be used for file names.
32require "intlabels.pl";
33foreach $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 Hyltondaa2d5d1998-02-18 13:53:48 +000041# collect labels that have been used
42%newnames = ();
43
44while (<>) {
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 Drakef015d9a2001-06-23 04:35:09 +000047 if (/(HREF|href)=[\"\']node\d+\.html[\#\"\']/) {
Fred Drakeba828782000-04-03 04:19:14 +000048 @parts = split(/(HREF|href)\=[\"\']/);
Jeremy Hyltondaa2d5d1998-02-18 13:53:48 +000049 shift @parts;
50 for $node (@parts) {
Fred Drakeba828782000-04-03 04:19:14 +000051 $node =~ s/[\#\"\'].*$//g;
Neal Norwitzd7bc0fe2002-10-18 02:05:47 +000052 chomp($node);
Jeremy Hyltondaa2d5d1998-02-18 13:53:48 +000053 if (defined($nodes{$node})) {
54 $label = $nodes{$node};
Fred Drakeba828782000-04-03 04:19:14 +000055 if (s/(HREF|href)=([\"\'])$node([\#\"\'])/href=$2$label.html$3/g) {
56 s/(HREF|href)=([\"\'])$label.html/href=$2$label.html/g;
Jeremy Hyltondaa2d5d1998-02-18 13:53:48 +000057 $newnames{$node} = "$label.html";
58 }
59 }
60 }
61 }
62 print;
63}
64
65foreach $oldname (keys %newnames) {
Fred Drakeaf06a0b1998-08-11 18:17:47 +000066 rename($oldname, $newnames{$oldname});
Jeremy Hyltondaa2d5d1998-02-18 13:53:48 +000067}
Fred Drakefe3db7d2002-05-02 20:42:30 +000068
69foreach $filename (glob('*.bak')) {
70 unlink($filename);
71}