| #!/depot/gnu/plat/bin/perl -i | 
 |  | 
 | # read the labels, then reverse the mappings | 
 | require "labels.pl"; | 
 |  | 
 | %nodes = (); | 
 | # sort so that we get a consistent assignment for nodes with multiple labels  | 
 | foreach $label (sort keys %external_labels) { | 
 |   $nodes{$external_labels{$label}} = $label; | 
 | } | 
 |  | 
 | # 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=\"([^\#\"]*)html[\#\"]/) { | 
 |     @parts = split(/HREF\=\"/); | 
 |     shift @parts; | 
 |     for $node (@parts) { | 
 |       $node =~ s/[\#\"].*$//g; | 
 |       chop($node); | 
 |       if (defined($nodes{$node})) { | 
 | 	$label = $nodes{$node}; | 
 | 	if (s/HREF=\"$node([\#\"])/HREF=\"$label.html$1/g) { | 
 | 	  s/HREF=\"$label.html#SECTION\d+/HREF=\"$label.html/g; | 
 | 	  $newnames{$node} = "$label.html"; | 
 | 	} | 
 |       } | 
 |     } | 
 |   } | 
 |   print; | 
 | } | 
 |  | 
 | foreach $oldname (keys %newnames) { | 
 | # or ln -s | 
 |   system("mv $oldname $newnames{$oldname}"); | 
 | } |