mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00

Allow colons in the labels used for internal references, but do not expose them when generating filename.
62 lines
1.6 KiB
Perl
Executable file
62 lines
1.6 KiB
Perl
Executable file
#! /usr/bin/env perl
|
|
|
|
use English;
|
|
$INPLACE_EDIT = '';
|
|
|
|
# read the labels, then reverse the mappings
|
|
require "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)=[\"\']([^\#\"\']*)html[\#\"\']/) {
|
|
@parts = split(/(HREF|href)\=[\"\']/);
|
|
shift @parts;
|
|
for $node (@parts) {
|
|
$node =~ s/[\#\"\'].*$//g;
|
|
chop($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});
|
|
}
|