From 9f6f4506ffe2ff0ca58a3bcb6e17b344bda94be5 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 17 Apr 2014 22:57:36 +0000 Subject: resolve symlink (not in Makefiles yet) git-svn-id: svn://tug.org/texlive/trunk@33491 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/scripts/psutils/psjoin.pl | 220 ++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100755 Master/texmf-dist/scripts/psutils/psjoin.pl (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/scripts/psutils/psjoin.pl b/Master/texmf-dist/scripts/psutils/psjoin.pl new file mode 100755 index 00000000000..21dfaffeef3 --- /dev/null +++ b/Master/texmf-dist/scripts/psutils/psjoin.pl @@ -0,0 +1,220 @@ +#!/usr/bin/env perl +# +# psjoin - concatenate PostScript files +# +# version 0.2, 2002-07-18 +# version 0.3, 2003-11-30 +# version 0.31, 2013-10-20 +# +# versions up to 0.3 by Tom Sato , http://homepage3.nifty.com/tsato/ +# versions from 0.31 by Reuben Thomas + +use strict; +use warnings; + +use Getopt::Long; + +my $version = 0.31; + +sub usage { + my ($exit_code) = @_; + print STDERR < \$force_even, + "save|s" => \$force_save, + "strip|p" => \$dont_strip, + "help|h" => \$help_flag, + "version|V" => \$version_flag, + ) or usage(1); + +if ($help_flag) { + usage(0); +} elsif ($version_flag) { + print "psjoin (version $version)\n"; + print "(c) Tom Sato and Reuben Thomas \n"; + exit 0; +} + +if ($force_save) { + $save = "/#psjoin-save# save def %psjoin\n"; + $restore = "#psjoin-save# restore %psjoin\n"; +} +my (@prolog, $prolog_inx, @trailer, @comments, @pages); +if ($dont_strip) { + $prolog_inx = 9999; + $prolog[$prolog_inx] = "% [ psjoin: don't strip ]\n"; + $trailer[$prolog_inx] = "% [ psjoin: don't strip ]\n"; +} else { + for (my $i = 0; $i <= $#ARGV; $i++) { + open(IN, $ARGV[$i]) || die "$0: can't open \"$ARGV[$i]\" ($!)"; + + my $in_comment = 1; + my $in_prolog = 1; + my $in_trailer = 0; + $comments[$i] = ""; + $prolog[$i] = ""; + $trailer[$i] = ""; + $pages[$i] = 0; + while () { + next if /^%%BeginDocument/ .. /^%%EndDocument/; + + if ($in_comment) { + next if /^%!PS-Adobe-/; + next if /^%%Title/; + next if /^%%Pages/; + next if /^%%Creator/; + $in_comment = 0 if /^%%EndComments/; + $comments[$i] .= $_; + next; + } elsif ($in_prolog) { + if (/^%%Page:/) { + $in_prolog = 0; + } else { + $prolog[$i] .= $_; + next; + } + } + + $in_trailer = 1 if /^%%Trailer/; + if ($in_trailer) { + $trailer[$i] .= $_; + next; + } + + $pages[$i]++ if /^%%Page:/; + } + close(IN); + + if ($prolog[$i]) { + for (my $j = 0; $j < $i; $j++) { + if ($prolog[$j] eq $prolog[$i]) { + $pages[$j] += $pages[$i]; + last; + } + } + } + } + + my $largest = 0; + $prolog_inx = 0; + for (my $i = 0; $i <= $#ARGV; $i++) { + my $size = length($prolog[$i]) * $pages[$i]; + if ($largest < $size) { + $largest = $size; + $prolog_inx = $i; + } + } +} + +print <) { + if (/^%%BeginDocument/ .. /^%%EndDocument/) { + # s/^(%[%!])/% \1/; + print $_; + } else { + if ($in_comment) { + $in_comment = 0 if /^%%EndComments/; + } elsif ($in_prolog) { + if (/^%%Page:/) { + $in_prolog = 0; + } else { + next; + } + } + $in_trailer = 1 if !$dont_strip && /^%%Trailer/; + next if $in_trailer; + + if (/^%%Page:/) { + if ($saved) { + print $trailer[$i]; + print $restore; + $saved = 0; + } + + $pages++; + $total_pages++; + print "\n"; + print "%%Page: ($i-$pages) $total_pages\n"; + if ($prolog[$i] ne $prolog[$prolog_inx]) { + print $save; + print $prolog[$i]; + $saved = 1; + } elsif ($force_save) { + print $save; + } + } else { + s/^(%[%!])/% $1/; + print $_; + } + } + } + close(IN); + + if ($force_even && $pages % 2 != 0) { + $pages++; + $total_pages++; + print <