71 lines · 1.9 KB · Perl
RawDownload
#! /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 mappingsrequire "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;      chomp($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);}