summaryrefslogtreecommitdiff
path: root/Build/source/texk
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-09-08 23:09:42 +0000
committerKarl Berry <karl@freefriends.org>2010-09-08 23:09:42 +0000
commit09c06007c38c5bd1bfe5a3b367fe3a273277da8d (patch)
tree6eec50f8ad3b635e9d549d2ddd061baba211af86 /Build/source/texk
parentee2de76f7db0b19a657a7f3b9ba8768bc8e69e37 (diff)
pdfcrop 1.29 (26aug10ff.)
git-svn-id: svn://tug.org/texlive/trunk@19616 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk')
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl756
1 files changed, 0 insertions, 756 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl b/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl
index 16ff326b71d..e69de29bb2d 100755
--- a/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl
+++ b/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl
@@ -1,756 +0,0 @@
-eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q'
- if 0;
-use strict;
-$^W=1; # turn warning on
-#
-# pdfcrop.pl
-#
-# Copyright (C) 2002, 2004, 2005, 2008, 2009 Heiko Oberdiek.
-#
-# This program may be distributed and/or modified under the
-# conditions of the LaTeX Project Public License, either version 1.2
-# 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.2 or later is part of all distributions of LaTeX
-# version 1999/12/01 or later.
-#
-# See file "README" for a list of files that belong to this project.
-#
-# This file "pdfcrop.pl" may be renamed to "pdfcrop"
-# for installation purposes.
-#
-my $file = "pdfcrop.pl";
-my $program = uc($&) if $file =~ /^\w+/;
-my $version = "1.22";
-my $date = "2009/12/29";
-my $author = "Heiko Oberdiek";
-my $copyright = "Copyright (c) 2002-2009 by $author.";
-#
-# Reqirements: Perl5, Ghostscript
-# History:
-# 2002/10/30 v1.0: First release.
-# 2002/10/30 v1.1: Option --hires added.
-# 2002/11/04 v1.2: "nul" instead of "/dev/null" for windows.
-# 2002/11/23 v1.3: Use of File::Spec module's "devnull" call.
-# 2002/11/29 v1.4: Option --papersize added.
-# 2004/06/24 v1.5: Clear map file entries so that pdfTeX
-# does not touch the fonts.
-# 2004/06/26 v1.6: Use mgs.exe instead of gswin32c.exe for MIKTEX.
-# 2005/03/11 v1.7: Support of spaces in file names
-# (open("-|") is used for ghostscript call).
-# 2008/01/09 v1.8: Fix for moving the temporary file to the output
-# file across file system boundaries.
-# 2008/04/05 v1.9: Options --resolution and --bbox added.
-# 2008/07/16 v1.10: Support for XeTeX added with new options
-# --pdftex, --xetex, and --xetexcmd.
-# 2008/07/22 v1.11: Workaround for open("-|").
-# 2008/07/23 v1.12: Workarounds for the workaround (error detection, ...).
-# 2008/07/24 v1.13: open("-|")/workaround removed.
-# Input files with unsafe file names are linked/copied
-# to temporary file with safe file name.
-# 2008/09/12 v1.14: Error detection for invalid Bounding Boxes.
-# 2009/07/14 v1.15: Fix for negative coordinates in Bounding Boxes
-# (David Menestrina).
-# 2009/07/16 v1.16: Security fixes:
-# * -dSAFER added for Ghostscript,
-# * -no-shell-escape added for pdfTeX/XeTeX.
-# 2009/07/17 v1.17: Security fixes:
-# * Backticks and whitespace are forbidden
-# for options --(gs|pdftex|xetex)cmd.
-# * Validation of options --papersize and --resolution.
-# 2009/07/18 v1.18: * Restricted mode added.
-# * Option --version added.
-# 2009/09/24 v1.19: * Ghostscript detection rewritten.
-# * Cygwin: `gs' is preferred to `gswin32c'.
-# 2009/10/06 v1.20: * File name sanitizing in .tex file.
-# 2009/12/21 v1.21: * Option --ini added for IniTeX mode.
-# * Option --luatex and --luatexcmd added for LuaTeX.
-# 2009/12/29 v1.22: * Syntax description for option --bbox fixed
-# (Lukas Prochazka).
-
-### program identification
-my $title = "$program $version, $date - $copyright\n";
-
-### error strings
-my $Error = "!!! Error:"; # error prefix
-
-### make ENV safer
-delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
-
-### string constants for Ghostscript run
-# get Ghostscript command name
-$::opt_gscmd = '';
-sub find_ghostscript () {
- return if $::opt_gscmd;
- my $system = 'unix';
- $system = "dos" if $^O =~ /dos/i;
- $system = "os2" if $^O =~ /os2/i;
- $system = "win" if $^O =~ /mswin32/i;
- $system = "cygwin" if $^O =~ /cygwin/i;
- $system = "miktex" if defined($ENV{"TEXSYSTEM"}) and
- $ENV{"TEXSYSTEM"} =~ /miktex/i;
- print "* System: $system\n" if $::opt_debug;
- my %candidates = (
- 'unix' => [qw|gs gsc|],
- 'dos' => [qw|gs386 gs|],
- 'os2' => [qw|gsos2 gs|],
- 'win' => [qw|gswin32c gs|],
- 'cygwin' => [qw|gs gswin32c|],
- 'miktex' => [qw|mgs gswin32c gs|]
- );
- my %ext = (
- 'unix' => '',
- 'dos' => '.exe',
- 'os2' => '.exe',
- 'win' => '.exe',
- 'cygwin' => '.exe',
- 'miktex' => '.exe'
- );
- my $candidates_ref = $candidates{$system};
- my $ext = $ext{$system};
- use File::Spec;
- my @path = File::Spec->path();
- my $found = 0;
- foreach my $candidate (@$candidates_ref) {
- foreach my $dir (@path) {
- my $file = File::Spec->catfile($dir, "$candidate$ext");
- if (-x $file) {
- $::opt_gscmd = $candidate;
- $found = 1;
- print "* Found ($candidate): $file\n" if $::opt_debug;
- last;
- }
- print "* Not found ($candidate): $file\n" if $::opt_debug;
- }
- last if $found;
- }
- if ($found) {
- print "* Autodetected ghostscript command: $::opt_gscmd\n" if $::opt_debug;
- }
- else {
- $::opt_gscmd = $$candidates_ref[0];
- print "* Default ghostscript command: $::opt_gscmd\n" if $::opt_debug;
- }
-}
-
-# Windows detection (no SIGHUP)
-my $Win = 0;
-$Win = 1 if $^O =~ /mswin32/i;
-$Win = 1 if $^O =~ /cygwin/i;
-
-# restricted mode
-my $restricted = 0;
-if ($0 =~ /rpdfcrop/ or $0 =~ /restricted/) {
- $restricted = 1;
-}
-
-# "null" device
-use File::Spec::Functions qw(devnull);
-my $null = devnull();
-
-### variables
-my $inputfile = "";
-my $outputfile = "";
-my $tmp = "tmp-\L$program\E-$$";
-
-### paper sizes
-
-my @papersizes = qw[
- 11x17 ledger legal letter lettersmall
- archE archD archC archB archA
- a0 a1 a2 a3 a4 a4small a5 a6 a7 a8 a9 a10
- isob0 isob1 isob2 isob3 isob4 isob5 isob6
- c0 c1 c2 c3 c4 c5 c6
- jisb0 jisb1 jisb2 jisb3 jisb4 jisb5 jisb6
- b0 b1 b2 b3 b4 b5
- flsa flse halfletter
-];
-my %papersizes;
-foreach (@papersizes) {
- $papersizes{$_} = 1;
-}
-
-### option variables
-my @bool = ("false", "true");
-$::opt_version = 0;
-$::opt_help = 0;
-$::opt_debug = 0;
-$::opt_verbose = 0;
-$::opt_pdftexcmd = "pdftex";
-$::opt_xetexcmd = "xetex";
-$::opt_luatexcmd = "luatex";
-$::opt_tex = "pdftex";
-$::opt_margins = "0 0 0 0";
-$::opt_clip = 0;
-$::opt_hires = 0;
-$::opt_papersize = "";
-$::opt_resolution = "";
-$::opt_bbox = "";
-$::opt_initex = 0;
-
-sub usage ($) {
- my $ret = shift;
- find_ghostscript();
- my $usage = <<"END_OF_USAGE";
-${title}Syntax: \L$program\E [options] <input[.pdf]> [output file]
-Function: Margins are calculated and removed for each page in the file.
-Options: (defaults:)
- --help print usage
- --version print version number
- --(no)verbose verbose printing ($bool[$::opt_verbose])
- --(no)debug debug informations ($bool[$::opt_debug])
- --gscmd <name> call of ghostscript ($::opt_gscmd)
- --pdftex | --xetex | --luatex
- use pdfTeX | use XeTeX | use LuaTeX ($::opt_tex)
- --pdftexcmd <name> call of pdfTeX ($::opt_pdftexcmd)
- --xetexcmd <name> call of XeTeX ($::opt_xetexcmd)
- --luatexcmd <name> call of LuaTeX ($::opt_luatexcmd)
- --margins "<left> <top> <right> <bottom>" ($::opt_margins)
- add extra margins, unit is bp. If only one number is
- given, then it is used for all margins, in the case
- of two numbers they are also used for right and bottom.
- --(no)clip clipping support, if margins are set ($bool[$::opt_clip])
- (not available for --xetex)
- --(no)hires using `%%HiResBoundingBox' ($bool[$::opt_hires])
- instead of `%%BoundingBox'
- --(no)ini use iniTeX variant of the TeX compiler ($bool[$::opt_initex])
-Expert options:
- --restricted turn on restricted mode ($bool[$restricted])
- --papersize <foo> parameter for gs's -sPAPERSIZE=<foo>,
- use only with older gs versions <7.32 ($::opt_papersize)
- --resolution <xres>x<yres> ()
- --resolution <res> pass argument to ghostscript's option -r
- Example: --resolution 72
- --bbox "<left> <bottom> <right> <top>" ()
- override bounding box found by ghostscript
- with origin at the lower left corner
-Examples:
- \L$program\E --margins 10 input.pdf output.pdf
- \L$program\E --margins '5 10 5 20' --clip input.pdf output.pdf
-In case of errors:
- Try option --verbose first to get more information.
-In case of bugs:
- Please, use option --debug for bug reports.
-END_OF_USAGE
- if ($ret) {
- die $usage;
- }
- else {
- print $usage;
- exit(0);
- }
-}
-
-### process options
-my @OrgArgv = @ARGV;
-use Getopt::Long;
-GetOptions(
- "help!",
- "version!",
- "debug!",
- "verbose!",
- "gscmd=s",
- "pdftexcmd=s",
- "xetexcmd=s",
- "luatexcmd=s",
- "pdftex" => sub { $::opt_tex = 'pdftex'; },
- "xetex" => sub { $::opt_tex = 'xetex'; },
- "luatex" => sub { $::opt_tex = 'luatex'; },
- "initex!",
- "margins=s",
- "clip!",
- "hires!",
- "papersize=s",
- "resolution=s",
- "bbox=s",
- "restricted" => sub { $restricted = 1; },
-) or usage(1);
-!$::opt_help or usage(0);
-
-if ($::opt_version) {
- print "$version\n";
- exit(0);
-}
-
-$::opt_verbose = 1 if $::opt_debug;
-
-@ARGV >= 1 or usage(1);
-
-print $title;
-
-find_ghostscript();
-
-if ($::opt_bbox) {
- $::opt_bbox =~ s/^\s+//;
- $::opt_bbox =~ s/\s+$//;
- $::opt_bbox =~ s/\s+/ /;
- if ($::opt_bbox =~ /^-?\d*\.?\d+ -?\d*\.?\d+ -?\d*\.?\d+ -?\d*\.?\d+$/) {
- print "* Explicite Bounding Box: $::opt_bbox\n" if $::opt_debug;
- }
- else {
- die "$Error Parse error (option --bbox \"$::opt_bbox\")!\n";
- }
-}
-
-@ARGV <= 2 or die "$Error Too many files!\n";
-
-### input file
-$inputfile = shift @ARGV;
-
-if (! -f $inputfile) {
- if (-f "$inputfile.pdf") {
- $inputfile .= ".pdf";
- }
- else {
- die "$Error Input file `$inputfile' not found!\n";
- }
-}
-
-print "* Input file: $inputfile\n" if $::opt_debug;
-
-### output file
-if (@ARGV) {
- $outputfile = shift @ARGV;
-}
-else {
- $outputfile = $inputfile;
- $outputfile =~ s/\.pdf$//i;
- $outputfile .= "-crop.pdf";
-}
-
-print "* Output file: $outputfile\n" if $::opt_debug;
-
-if (($::opt_tex eq 'xetex') && $::opt_clip) {
- die "$Error No clipping support for XeTeX!\n";
-}
-
-### margins
-my ($llx, $lly, $urx, $ury) = (0, 0, 0, 0);
-if ($::opt_margins =~
- /^\s*([\-\.\d]+)\s+([\-\.\d]+)\s+([\-\.\d]+)\s+([\-\.\d]+)\s*$/) {
- ($llx, $lly, $urx, $ury) = ($1, $2, $3, $4);
-}
-else {
- if ($::opt_margins =~ /^\s*([\-\.\d]+)\s+([\-\.\d]+)\s*$/) {
- ($llx, $lly, $urx, $ury) = ($1, $2, $1, $2);
- }
- else {
- if ($::opt_margins =~ /^\s*([\-\.\d]+)\s*$/) {
- ($llx, $lly, $urx, $ury) = ($1, $1, $1, $1);
- }
- else {
- die "$Error Parse error (option --margins)!\n";
- }
- }
-}
-print "* Margins: $llx $lly $urx $ury\n" if $::opt_debug;
-
-### papersize validation (security)
-if ($::opt_papersize ne '') {
- $::opt_papersize =~ /^[0-9A-Za-z]+$/
- or die "$Error Invalid papersize ($::opt_papersize)!\n";
- $papersizes{$::opt_papersize}
- or die "$Error Unknown papersize ($::opt_papersize),"
- . " see ghostscript's documentation for option `-r'!\n";
-}
-
-### resolution validation (security)
-if ($::opt_resolution ne '') {
- $::opt_resolution =~ /^\d+(x\d+)?$/
- or die "$Error Invalid resolution ($::opt_resolution),"
- . " see ghostscript's documentation!\n";
-}
-
-### command name validation (security)
-my %cmd = (
- 'gscmd' => \$::opt_gscmd,
- 'pdftexcmd' => \$::opt_pdftexcmd,
- 'luatexcmd' => \$::opt_luatexcmd,
- 'xetexcmd' => \$::opt_xetexcmd
-);
-foreach my $cmd (keys %cmd) {
- my $val = ${$cmd{$cmd}};
- next unless $val;
- $val =~ s/^\s+//;
- $val =~ s/\s+$//;
- next unless $val;
- if ($val =~ /`/) {
- die "$Error Forbidden backtick for option `--$cmd' ($val)!\n";
- }
- if ($val =~ /\s/) {
- die "$Error Forbidden whitespace for option `--$cmd' ($val)!\n";
- }
-}
-if ($restricted) {
- if ($::opt_pdftexcmd and $::opt_pdftexcmd ne 'pdftex') {
- die "$Error pdfTeX program name must not be changed in restricted mode!\n";
- }
- if ($::opt_xetexcmd and $::opt_xetexcmd ne 'xetex') {
- die "$Error XeTeX program name must not be changed in restricted mode!\n";
- }
- if ($::opt_luatexcmd and $::opt_luatexcmd ne 'luatex') {
- die "$Error LuaTeX program name must not be changed in restricted mode!\n";
- }
- if ($::opt_gscmd) {
- $::opt_gscmd =~ /^(gs|mgs|gswin32c|gs386|gsos2)$/
- or $::opt_gscmd =~ /^gs[\-_]?(\d|\d[\.-_]?\d\d)c?$/
- or die "$Error: Invalid Ghostscript program name in restricted mode!\n";
- }
-}
-
-### cleanup system
-my @unlink_files = ();
-my $exit_code = 1;
-sub clean {
- print "* Cleanup\n" if $::opt_debug;
- if ($::opt_debug) {
- print "* Temporary files: @unlink_files\n";
- }
- else {
- for (; @unlink_files>0; ) {
- unlink shift @unlink_files;
- }
- }
-}
-sub cleanup {
- clean();
- exit($exit_code);
-}
-$SIG{'INT'} = \&cleanup;
-$SIG{'__DIE__'} = \&clean;
-
-### Calculation of BoundingBoxes
-
-# use safe file name for use within cmd line of gs (unknown shell: space, ...)
-# and pdfTeX (dollar, ...)
-my $inputfilesafe = $inputfile;
-if ($inputfile =~ /[\s\$~'"]/) {
- $inputfilesafe = "$tmp-img.pdf";
- push @unlink_files, $inputfilesafe;
- my $symlink_exists = eval { symlink("", ""); 1 };
- print "* Input file name `$inputfile' contains special characters.\n"
- . "* " . ($symlink_exists ? "Link" : "Copy")
- . " input file to temporary file `$inputfilesafe'.\n"
- if $::opt_verbose;
- if ($symlink_exists) {
- symlink($inputfile, $inputfilesafe)
- or die "$Error Link from `$inputfile' to"
- . " `$inputfilesafe' failed: $!\n";
- }
- else {
- use File::Copy;
- copy($inputfile, $inputfilesafe)
- or die "$Error Copy from `$inputfile' to"
- . " `$inputfilesafe' failed: $!\n";
- }
-}
-
-my @gsargs = (
- "-sDEVICE=bbox",
- "-dBATCH",
- "-dNOPAUSE"
-);
-push @gsargs, "-sPAPERSIZE=$::opt_papersize" if $::opt_papersize;
-push @gsargs, "-r$::opt_resolution" if $::opt_resolution;
-push @gsargs,
- "-c",
- "save",
- "pop",
- "-f",
- $inputfilesafe
-;
-
-my $tmpfile = "$tmp.tex";
-push @unlink_files, $tmpfile;
-open(TMP, ">$tmpfile") or
- die "$Error Cannot write tmp file `$tmpfile'!\n";
-print TMP <<'END_TMP';
-\catcode`\{=1 %
-\catcode`\}=2 %
-\catcode`\#=6 %
-END_TMP
-print TMP "\\def\\pdffile{$inputfilesafe}\n";
-print TMP <<'END_TMP';
-\def\stripprefix#1>{}
-\def\onelevelsanitize#1{%
- \edef#1{\expandafter\stripprefix\meaning#1}%
-}
-\onelevelsanitize\pdffile
-END_TMP
-if ($::opt_tex eq 'luatex') {
- print TMP <<'END_TMP';
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname directlua\endcsname\relax
- \errmessage{LuaTeX not found!}%
-\else
- \begingroup
- \newlinechar=10 %
- \endlinechar=\newlinechar %
- \ifnum0%
- \directlua{%
- if tex.enableprimitives then
- tex.enableprimitives('TEST', {
- 'luatexversion',
- 'pdfoutput',
- 'pdfcompresslevel',
- 'pdfhorigin',
- 'pdfvorigin',
- 'pdfpagewidth',
- 'pdfpageheight',
- 'pdfmapfile',
- 'pdfximage',
- 'pdflastximage',
- 'pdfrefximage'
- })
- tex.print('1')
- end
- }%
- \ifx\TESTluatexversion\UnDeFiNeD\else 1\fi %
- =11 %
- \global\let\luatexversion\luatexversion
- \global\let\pdfoutput\TESTpdfoutput
- \global\let\pdfcompresslevel\TESTpdfcompresslevel
- \global\let\pdfhorigin\TESTpdfhorigin
- \global\let\pdfvorigin\TESTpdfvorigin
- \global\let\pdfpagewidth\TESTpdfpagewidth
- \global\let\pdfpageheight\TESTpdfpageheight
- \global\let\pdfmapfile\TESTpdfmapfile
- \global\let\pdfximage\TESTpdfximage
- \global\let\pdflastximage\TESTpdflastximage
- \global\let\pdfrefximage\TESTpdfrefximage
- \else %
- \errmessage{%
- Missing \string\luatexversion %
- }%
- \fi %
- \endgroup %
-\fi
-END_TMP
-}
-if ($::opt_tex eq 'pdftex' or $::opt_tex eq 'luatex') {
- print TMP <<'END_TMP_HEAD';
-\pdfoutput=1 %
-\pdfcompresslevel=9 %
-\csname pdfmapfile\endcsname{}
-\def\page #1 [#2 #3 #4 #5]{%
- \count0=#1\relax
- \setbox0=\hbox{%
- \pdfximage page #1{\pdffile}%
- \pdfrefximage\pdflastximage
- }%
- \pdfhorigin=-#2bp\relax
- \pdfvorigin=#3bp\relax
- \pdfpagewidth=#4bp\relax
- \advance\pdfpagewidth by -#2bp\relax
- \pdfpageheight=#5bp\relax
- \advance\pdfpageheight by -#3bp\relax
- \ht0=\pdfpageheight
- \shipout\box0\relax
-}
-\def\pageclip #1 [#2 #3 #4 #5][#6 #7 #8 #9]{%
- \count0=#1\relax
- \dimen0=#4bp\relax \advance\dimen0 by -#2bp\relax
- \edef\imagewidth{\the\dimen0}%
- \dimen0=#5bp\relax \advance\dimen0 by -#3bp\relax
- \edef\imageheight{\the\dimen0}%
- \pdfximage page #1{\pdffile}%
- \setbox0=\hbox{%
- \kern -#2bp\relax
- \lower #3bp\hbox{\pdfrefximage\pdflastximage}%
- }%
- \wd0=\imagewidth\relax
- \ht0=\imageheight\relax
- \dp0=0pt\relax
- \pdfhorigin=#6pt\relax
- \pdfvorigin=#7bp\relax
- \pdfpagewidth=\imagewidth
- \advance\pdfpagewidth by #6bp\relax
- \advance\pdfpagewidth by #8bp\relax
- \pdfpageheight=\imageheight\relax
- \advance\pdfpageheight by #7bp\relax
- \advance\pdfpageheight by #9bp\relax
- \pdfxform0\relax
- \shipout\hbox{\pdfrefxform\pdflastxform}%
-}%
-\def\pageinclude#1{%
- \pdfhorigin=0pt\relax
- \pdfvorigin=0pt\relax
- \pdfximage page #1{\pdffile}%
- \setbox0=\hbox{\pdfrefximage\pdflastximage}%
- \pdfpagewidth=\wd0\relax
- \pdfpageheight=\ht0\relax
- \advance\pdfpageheight by \dp0\relax
- \shipout\hbox{%
- \raise\dp0\box0\relax
- }%
-}
-END_TMP_HEAD
-}
-else { # XeTeX
- print TMP <<'END_TMP_HEAD';
-\expandafter\ifx\csname XeTeXpdffile\endcsname\relax
- \errmessage{XeTeX not found or too old!}%
-\fi
-\def\page #1 [#2 #3 #4 #5]{%
- \count0=#1\relax
- \setbox0=\hbox{%
- \XeTeXpdffile "\pdffile" page #1%
- }%
- \pdfpagewidth=#4bp\relax
- \advance\pdfpagewidth by -#2bp\relax
- \pdfpageheight=#5bp\relax
- \advance\pdfpageheight by -#3bp\relax
- \shipout\hbox{%
- \kern-1in%
- \kern-#2bp%
- \vbox{%
- \kern-1in%
- \kern#3bp%
- \ht0=\pdfpageheight
- \box0 %
- }%
- }%
-}
-END_TMP_HEAD
-}
-
-print "* Running ghostscript for BoundingBox calculation ...\n"
- if $::opt_verbose;
-print "* Ghostscript call: $::opt_gscmd @gsargs\n" if $::opt_debug;
-
-my @bbox;
-if ($::opt_bbox) {
- $::opt_bbox =~ /([-\d\.]+) ([-\d\.]+) ([-\d\.]+) ([-\d\.]+)/;
- @bbox = ($1, $2, $3, $4);
-}
-my $page = 0;
-my $gs_pipe = "$::opt_gscmd -dSAFER @gsargs 2>&1";
-$gs_pipe .= " 1>$null" unless $::opt_verbose;
-$gs_pipe .= "|";
-
-open(GS, $gs_pipe) or
- die "$Error Cannot call ghostscript ($::opt_gscmd)!\n";
-my $bb = ($::opt_hires) ? "%%HiResBoundingBox" : "%%BoundingBox";
-while (<GS>) {
- print $_ if $::opt_verbose;
- next unless
- /^$bb:\s*(-?[\.\d]+) (-?[\.\d]+) (-?[\.\d]+) (-?[\.\d]+)/o;
- @bbox = ($1, $2, $3, $4) unless $::opt_bbox;
- $page++;
-
- my $empty = 0;
- $empty = 1 if $bbox[0] >= $bbox[2];
- $empty = 1 if $bbox[1] >= $bbox[3];
- if ($empty) {
- print <<"END_WARNING";
-
-!!! Warning: Empty Bounding Box is returned by Ghostscript!
-!!! Page $page: @bbox
-!!! Either there is a problem with the page or with Ghostscript.
-!!! Recovery is tried by embedding the page in its original size.
-
-END_WARNING
- print TMP "\\pageinclude{$page}\n";
- next;
- }
-
- print "* Page $page: @bbox\n" if $::opt_verbose;
-
- my @bb = ($bbox[0] - $llx, $bbox[1] - $ury,
- $bbox[2] + $urx, $bbox[3] + $lly);
-
- $empty = 0;
- $empty = 1 if $bb[0] >= $bb[2];
- $empty = 1 if $bb[1] >= $bb[3];
- if ($empty) {
- print <<"END_WARNING";
-
-!!! Warning: The final Bounding Box is empty!
-!!! Page: $page: @bb
-!!! Probably caused by too large negative margin values.
-!!! Recovery by ignoring margin values.
-
-END_WARNING
- print TMP "\\page $page [@bbox]\n";
- # clipping shouldn't make a difference
- next;
- }
- if ($::opt_clip) {
- print TMP "\\pageclip $page [@bbox][$llx $lly $urx $ury]\n";
- }
- else {
- print TMP "\\page $page [@bb]\n";
- }
-}
-close(GS);
-
-if ($? & 127) {
- die sprintf "$Error Ghostscript died with signal %d!\n",
- ($? & 127);
-}
-elsif ($? != 0) {
- die sprintf "$Error Ghostscript exited with error code %d!\n",
- $? >> 8;
-}
-
-print TMP "\\csname \@\@end\\endcsname\n\\end\n";
-close(TMP);
-
-if ($page == 0) {
- die "$Error Ghostscript does not report bounding boxes!\n";
-}
-
-### Run pdfTeX/XeTeX
-
-push @unlink_files, "$tmp.log";
-my $cmd;
-my $texname;
-if ($::opt_tex eq 'pdftex') {
- $cmd = $::opt_pdftexcmd;
- $texname = 'pdfTeX';
-}
-elsif ($::opt_tex eq 'luatex') {
- $cmd =$::opt_luatexcmd;
- $texname = 'LuaTeX';
-}
-else {
- $cmd = $::opt_xetexcmd;
- $texname = 'XeTeX';
-}
-$cmd .= ' -no-shell-escape';
-if ($::opt_initex) {
- $cmd .= ' --ini --etex';
-}
-if ($::opt_verbose) {
- $cmd .= " -interaction=nonstopmode $tmp";
-}
-else {
- $cmd .= " -interaction=batchmode $tmp";
-}
-print "* Running $texname ...\n" if $::opt_verbose;
-print "* $texname call: $cmd\n" if $::opt_debug;
-if ($::opt_verbose) {
- system($cmd);
-}
-else {
- `$cmd`;
-}
-if ($?) {
- die "$Error $texname run failed!\n";
-}
-
-### Move temp file to output
-if (!rename("$tmp.pdf", $outputfile)) {
- use File::Copy;
- move "$tmp.pdf", $outputfile or
- die "$Error Cannot move `$tmp.pdf' to `$outputfile'!\n";
-}
-
-print "==> $page page", (($page == 1) ? "" : "s"),
- " written on `$outputfile'.\n";
-
-$exit_code = 0;
-cleanup();
-
-__END__