summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/hyperref/psdmapshortnames.pl
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/hyperref/psdmapshortnames.pl
Initial commit
Diffstat (limited to 'macros/latex/contrib/hyperref/psdmapshortnames.pl')
-rw-r--r--macros/latex/contrib/hyperref/psdmapshortnames.pl133
1 files changed, 133 insertions, 0 deletions
diff --git a/macros/latex/contrib/hyperref/psdmapshortnames.pl b/macros/latex/contrib/hyperref/psdmapshortnames.pl
new file mode 100644
index 0000000000..4af924c932
--- /dev/null
+++ b/macros/latex/contrib/hyperref/psdmapshortnames.pl
@@ -0,0 +1,133 @@
+#!/usr/bin/env perl
+use strict;
+$^W=1;
+
+# File: psdmapshortnames.pl
+# Date: 2012-07-12
+# Copyright (c) 2012 by Heiko Oberdiek.
+#
+# This file is part of the `Hyperref Bundle'.
+# -------------------------------------------
+#
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3
+# of this license or (at your option) any later version.
+# The latest version of this license is in
+# http://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of LaTeX
+# version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status `maintained'.
+#
+# The Current Maintainer of this work is Heiko Oberdiek.
+#
+# The list of all files belonging to the `Hyperref Bundle' is
+# given in the file `manifest.txt'.
+
+my $file_org = 'hyperref.dtx';
+my $file_bak = 'hyperref.dtx.bak';
+my $file_tmp = 'hyperref.dtx.tmp';
+
+my @lines_map;
+my $cmd_map = 'psdmapshortnames';
+my $found_map_beg = 0;
+my $found_map_end = 0;
+
+my @lines_alias;
+my $cmd_alias = 'psdaliasnames';
+my $found_alias_beg = 0;
+my $found_alias_end = 0;
+
+open(IN, '<', $file_org) or die "!!! Error: Cannot open `$file_org'!\n";
+binmode(IN);
+unlink $file_tmp if -f $file_tmp;
+open(OUT, '>', $file_tmp) or die "!!! Error: Cannot open `$file_org'!\n";
+binmode(OUT);
+
+while (<IN>) {
+ print OUT;
+ if (/^\\newcommand\*\{\\$cmd_map\}\{\%\s*$/) {
+ $found_map_beg = 1;
+ print OUT @lines_map;
+ while (<IN>) {
+ if (/^\}\% \\$cmd_map$/) {
+ print OUT;
+ $found_map_end = 1;
+ last;
+ }
+ if (/^\}/) {
+ print OUT;
+ last;
+ }
+ }
+ }
+ if (/^\\DeclareTextCommand\{\\text(\w+)\}\{PU\}\{[\\\d\w]+\}\%\*/) {
+ my $name = $1;
+ push @lines_map, " \\let\\$name\\text$name\n";
+ }
+
+ if (/^\\newcommand\*\{\\$cmd_alias\}\{\%\s*$/) {
+ $found_alias_beg = 1;
+ print OUT @lines_alias;
+ while (<IN>) {
+ if (/^\}\% \\$cmd_alias$/) {
+ print OUT;
+ $found_alias_end = 1;
+ last;
+ }
+ if (/^\}/) {
+ print OUT;
+ last;
+ }
+ }
+ }
+ if (/^%\* \\([A-Za-z@]+)\s+->\s+\\(\w+)(\s|$)/) {
+ my $name_old = $1;
+ my $name_new = $2;
+ push @lines_alias, " \\let\\$name_new\\$name_old\n";
+ }
+}
+
+close(IN);
+close(OUT);
+
+$found_map_beg or die "!!! Error: Definition for \\$cmd_map not found!\n";
+$found_map_end or die "!!! Error: End of \\$cmd_map not found!\n";
+
+$found_alias_beg or die "!!! Error: Definition for \\$cmd_alias not found!\n";
+$found_alias_end or die "!!! Error: End of \\$cmd_alias not found!\n";
+
+my $count_map = @lines_map;
+print "* $count_map map entries found.\n";
+
+my $count_alias = @lines_alias;
+print "* $count_alias alias entries found.\n";
+
+use Digest::MD5;
+
+open(IN, '<', $file_org) or die "!!! Error: Cannot open `$file_org'!\n";
+binmode(IN);
+my $md5_org = Digest::MD5->new->addfile(*IN)->hexdigest;
+close(IN);
+print "* 0x$md5_org = md5($file_org)\n";
+
+open(IN, '<', $file_tmp) or die "!!! Error: Cannot open `$file_tmp'!\n";
+binmode(IN);
+my $md5_tmp = Digest::MD5->new->addfile(*IN)->hexdigest;
+close(IN);
+print "* 0x$md5_tmp = md5($file_tmp)\n";
+
+if ($md5_org eq $md5_tmp) {
+ print "* Done, nothing to do.\n";
+ exit(0);
+}
+
+unlink $file_bak if -f $file_bak;
+rename $file_org, $file_bak or die "!!! Error: Moving `$file_org' to `$file_bak' failed!\n";
+print "* $file_org -> $file_bak\n";
+rename $file_tmp, $file_org or die "!!! Error: Moving `$file_tmp' to `$file_org' failed!\n";
+print "* $file_tmp -> $file_org\n";
+
+print "* Done.\n";
+
+__END__