texlive[55435] trunk: pdfcrop (6jun20)

commits+karl at tug.org commits+karl at tug.org
Sat Jun 6 23:06:31 CEST 2020


Revision: 55435
          http://tug.org/svn/texlive?view=revision&revision=55435
Author:   karl
Date:     2020-06-06 23:06:31 +0200 (Sat, 06 Jun 2020)
Log Message:
-----------
pdfcrop (6jun20)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl
    trunk/Master/texmf-dist/scripts/pdfcrop/pdfcrop.pl

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/support/pdfcrop/LICENCE
    trunk/Master/texmf-dist/doc/support/pdfcrop/README.md

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/support/pdfcrop/README

Modified: trunk/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl	2020-06-06 15:29:15 UTC (rev 55434)
+++ trunk/Build/source/texk/texlive/linked_scripts/pdfcrop/pdfcrop.pl	2020-06-06 21:06:31 UTC (rev 55435)
@@ -5,16 +5,12 @@
 # pdfcrop.pl
 #
 # Copyright (C) 2002, 2004, 2005, 2008-2012 Heiko Oberdiek.
+#               2020                        Oberdiek Package Support Group
 #
 # 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.
+# conditions of the LaTeX Project Public License, version 1.3c or later.
 #
-# See file "README" for a list of files that belong to this project.
+# See file "README.md" for a list of files that belong to this project.
 #
 # This file "pdfcrop.pl" may be renamed to "pdfcrop"
 # for installation purposes.
@@ -22,10 +18,10 @@
 my $prj         = 'pdfcrop';
 my $file        = "$prj.pl";
 my $program     = uc($&) if $file =~ /^\w+/;
-my $version     = "1.38";
-my $date        = "2012/11/02";
-my $author      = "Heiko Oberdiek";
-my $copyright   = "Copyright (c) 2002-2012 by $author.";
+my $version     = "1.40";
+my $date        = "2020/06/06";
+my $author      = "Heiko Oberdiek, Oberdiek Package Support Group";
+my $copyright   = "Copyright (c) 2002-2020 by $author.";
 #
 # Reqirements: Perl5, Ghostscript
 # History:
@@ -107,7 +103,13 @@
 #                   * Fix for broken v1.36.
 # 2012/11/02 v1.38: * Fix for unsufficient cleanup, if function `cleanup' is
 #                     prematurely called in `eval' for `symlink' checking.
+# 2020/05/24 v1.39: * adapted to pdfversion 2.0, corrected luatex support,
+#                      corrected a problem with xetex.
+# 2020/06/06 v1.40: * improved ghostscript detection on windows when a bash is used
+#                      added direct pdf version support to xetex. 
 
+
+
 ### program identification
 my $title = "$program $version, $date - $copyright\n";
 
@@ -171,7 +173,7 @@
     print "* Arch name: $archname\n" if $::opt_debug;
     print "* System: $system\n" if $::opt_debug;
     my %candidates = (
-        'unix' => [qw|gs gsc|],
+        'unix' => [qw|gs gsc gswin64c gswin32c|],
         'dos' => [qw|gs386 gs|],
         'os2' => [qw|gsos2 gs|],
         'win' => [qw|gswin32c gs|],
@@ -362,6 +364,7 @@
 $::opt_bbox_even  = "";
 $::opt_initex     = 0;
 $::opt_pdfversion = "auto";
+$::opt_uncompress = 0;
 
 sub usage ($) {
     my $ret = shift;
@@ -401,13 +404,15 @@
                       with origin at the lower left corner
   --bbox-odd          Same as --bbox, but for odd pages only   ($::opt_bbox_odd)
   --bbox-even         Same as --bbox, but for even pages only  ($::opt_bbox_even)
-  --pdfversion <1.x> | auto | none
-                      Set the PDF version to 1.x, 1 < x < 8.
+  --pdfversion <x.y> | auto | none
+                      Set the PDF version to x.y, x= 1 or 2, y=0-9.
                       If `auto' is given as value, then the
                       PDF version is taken from the header
                       of the input PDF file.
                       An empty value or `none' uses the
                       default of the TeX engine.               ($::opt_pdfversion)
+  --uncompress        creates an uncompressed pdf, 
+                      useful for debugging                     ($bool[$::opt_uncompress])                     
 
 Input file: If the name is `-', then the standard input is used and
   the output file name must be explicitly given.
@@ -454,6 +459,7 @@
   "bbox-even=s" => \$::opt_bbox_even,
   "restricted" => sub { $restricted = 1; },
   "pdfversion=s" => \$::opt_pdfversion,
+  "uncompress!",
 ) or usage(1);
 !$::opt_help or usage(0);
 
@@ -471,10 +477,12 @@
 print "* Restricted mode: ", ($restricted ? "enabled" : "disabled"), "\n"
         if $::opt_debug;
 
-$::opt_pdfversion =~ /^(|none|auto|1\.([2-7]))$/
+$::opt_pdfversion =~ /^(|none|auto|(([1-2])\.(\d)))$/
         or die "!!! Error: Invalid value `$::opt_pdfversion' for option `--pdfversion'!\n";
 print "* Option `pdfversion': $::opt_pdfversion\n" if $::opt_debug;
 $::opt_pdfversion = $2 if $2;
+$::opt_pdfmajorversion = $3 if $2;
+$::opt_pdfminorversion = $4 if $2;
 $::opt_pdfversion = '' if $::opt_pdfversion eq 'none';
 
 find_ghostscript();
@@ -721,16 +729,19 @@
             or die sprintf "!!! Error: Cannot read the header of `%s' failed (%s)!\n",
                            $inputfilesafe, exterr;
     close(IN);
-    if ($buf =~ /%PDF-1.([0-7])\s/) {
+    if ($buf =~ /%PDF-((\d).(\d))\s/) {
         $::opt_pdfversion = $1;
-        print "* PDF header: %PDF-1.$::opt_pdfversion\n" if $::opt_verbose;
-        $::opt_pdfversion = 2 if $::opt_pdfversion < 2;
+        $::opt_pdfmajorversion = $2;
+        $::opt_pdfminorversion = $3;
+        print "* PDF header: %PDF-$::opt_pdfversion\n" if $::opt_verbose;
+        $::opt_pdfminorversion = 2 if ($::opt_pdfmajorversion < 2 && $::opt_pdfminorversion < 2);
+        $::opt_pdfversion = $::opt_pdfmajorversion . '.' . $::opt_pdfminorversion;
     }
     else {
         die "!!! Error: Cannot find PDF header of `$inputfilesafe'!\n";
     }
 }
-print '* Using PDF minor version: ',
+print '* Using PDF version: ',
       ($::opt_pdfversion ? $::opt_pdfversion : "engine's default"),
       "\n" if $::opt_debug;
 
@@ -819,75 +830,37 @@
 \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',
-              'pdfminorversion',
-              'pdfobjcompresslevel',
-            })
-            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 %
-      \global\let\pdfminorversion\TESTpdfminorversion %
-      \global\let\pdfobjcompresslevel\TESTpdfobjcompresslevel %
-    \else %
-      \errmessage{%
-        Missing \string\luatexversion %
-      }%
-    \fi %
-  \endgroup %
 \fi
 END_TMP
 }
-if ($::opt_tex eq 'pdftex' or $::opt_tex eq 'luatex') {
+
+my $uncompress = $::opt_uncompress ? '0 ' : '9 ';
+if ($::opt_tex eq 'pdftex') {
+ print TMP "\\pdfcompresslevel=$uncompress "; 
     print TMP <<'END_TMP_HEAD';
 \pdfoutput=1 %
-\pdfcompresslevel=9 %
 \csname pdfmapfile\endcsname{}
-\def\setpdfversion#1{%
+\def\setpdfversion#1#2{%
   \IfUndefined{pdfobjcompresslevel}{%
   }{%
-    \ifnum#1<5 %
-      \pdfobjcompresslevel=0 %
-    \else
-      \pdfobjcompresslevel=2 %
-    \fi
+    \ifnum#1=1 %
+     \ifnum#2<5
+       \pdfobjcompresslevel=0 %
+     \else
+       \pdfobjcompresslevel=2 %
+     \fi
+   \fi 
   }%
   \IfUndefined{pdfminorversion}{%
     \IfUndefined{pdfoptionpdfminorversion}{%
     }{%
-      \pdfoptionpdfminorversion=#1\relax
+      \pdfoptionpdfminorversion=#2\relax
     }%
   }{%
-    \pdfminorversion=#1\relax
+    \pdfminorversion=#2\relax
+    \IfUndefined{pdfmajorversion}{%
+      \ifnum#2=0 \pdfminorversion=5\fi}
+      {\pdfmajorversion=#1\relax}%
   }%
 }
 \def\page #1 [#2 #3 #4 #5]{%
@@ -943,13 +916,89 @@
   }%
 }
 END_TMP_HEAD
-    print TMP "\\setpdfversion{$::opt_pdfversion}\n" if $::opt_pdfversion;
+    print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion;
 }
+elsif  ($::opt_tex eq 'luatex')
+  {
+    print TMP "\\pdfvariable compresslevel=$uncompress "; 
+    print TMP <<'END_TMP_HEAD';
+\outputmode=1 %
+\pdfextension mapfile {}
+\def\setpdfversion#1#2{%
+    \ifnum#1=1 %
+     \ifnum#2<5
+       \pdfvariable objcompresslevel=0 %
+     \else
+       \pdfvariable objcompresslevel=2 %
+     \fi
+    \fi  
+    \pdfvariable minorversion= #2
+    \pdfvariable majorversion= #1 
+}
+\def\page #1 [#2 #3 #4 #5]{%
+  \count0=#1\relax
+  \setbox0=\hbox{%
+    \saveimageresource page #1 mediabox{\pdffile}%
+    \useimageresource\lastsavedimageresourceindex
+  }%
+  \pdfvariable horigin=-#2bp\relax
+  \pdfvariable vorigin=#3bp\relax
+  \pagewidth=#4bp\relax
+  \advance\pagewidth by -#2bp\relax
+  \pageheight=#5bp\relax
+  \advance\pageheight by -#3bp\relax
+  \ht0=\pageheight
+  \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}%
+  \saveimageresource page #1 mediabox{\pdffile}%
+  \setbox0=\hbox{%
+    \kern -#2bp\relax
+    \lower #3bp\hbox{\useimageresource\lastsavedimageresourceindex}%
+  }%
+  \wd0=\imagewidth\relax
+  \ht0=\imageheight\relax
+  \dp0=0pt\relax
+  \pdfvariable horigin=#6pt\relax
+  \pdfvariable vorigin=#7bp\relax
+  \pagewidth=\imagewidth
+  \advance\pagewidth by #6bp\relax
+  \advance\pagewidth by #8bp\relax
+  \pageheight=\imageheight\relax
+  \advance\pageheight by #7bp\relax
+  \advance\pageheight by #9bp\relax
+  \saveboxresource0\relax
+  \shipout\hbox{\useboxresource\lastsavedboxresourceindex}%
+}%
+\def\pageinclude#1{%
+  \pdfvariable horigin=0pt\relax
+  \pdfvariable vorigin=0pt\relax
+  \saveimageresource page #1 mediabox{\pdffile}%
+  \setbox0=\hbox{\useimageresource\lastsavedimageresourceindex}%
+  \pagewidth=\wd0\relax
+  \pageheight=\ht0\relax
+  \advance\pageheight by \dp0\relax
+  \shipout\hbox{%
+    \raise\dp0\box0\relax
+  }%
+}
+END_TMP_HEAD
+    print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion;    
+}  
 else { # XeTeX
     print TMP <<'END_TMP_HEAD';
 \expandafter\ifx\csname XeTeXpdffile\endcsname\relax
   \errmessage{XeTeX not found or too old!}%
 \fi
+\def\setpdfversion#1#2{%
+  \special{pdf:majorversion #1}%
+  \special{pdf:minorversion #2}}
+  
 \def\page #1 [#2 #3 #4 #5]{%
   \count0=#1\relax
   \setbox0=\hbox{%
@@ -990,6 +1039,7 @@
   }%
 }
 END_TMP_HEAD
+print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion; 
 }
 
 print "* Running ghostscript for BoundingBox calculation ...\n"
@@ -1183,15 +1233,15 @@
     read PDF, $header, 9
             or die sprintf "!!! Error: Cannot read header of `%s' (%s)!\n",
                            "$tmp.pdf", exterr;
-    $header =~ /^%PDF-1\.(\d)\s$/ or die "!!! Error: Cannot find header of `$tmp.pdf'!\n";
+    $header =~ /^%PDF-(\d\.\d)\s$/ or die "!!! Error: Cannot find header of `$tmp.pdf'!\n";
     if ($1 ne $::opt_pdfversion) {
-        seek PDF, 7, 0
+        seek PDF, 5, 0
                 or die sprintf "!!! Error: Cannot seek in `%s' (%s)!\n",
                                "$tmp.pdf", exterr;
         print PDF $::opt_pdfversion
                 or die sprintf "!!! Error: Cannot write in `%s' (%s)!\n",
                                "$tmp.pdf", exterr;
-        print "* PDF version correction in output file: 1.$::opt_pdfversion\n"
+        print "* PDF version correction in output file: $::opt_pdfversion\n"
                 if $::opt_debug;
     }
     close(PDF);

Added: trunk/Master/texmf-dist/doc/support/pdfcrop/LICENCE
===================================================================
--- trunk/Master/texmf-dist/doc/support/pdfcrop/LICENCE	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/pdfcrop/LICENCE	2020-06-06 21:06:31 UTC (rev 55435)
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c  2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+    Everyone is allowed to distribute verbatim copies of this
+    license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute.  This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but 
+it is written in such a way that you can use it even if your work is 
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work.  If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+   `Work'
+    Any work being distributed under this License.
+    
+   `Derived Work'
+    Any work that under any applicable law is derived from the Work.
+
+   `Modification' 
+    Any procedure that produces a Derived Work under any applicable
+    law -- for example, the production of a file containing an
+    original file associated with the Work or a significant portion of
+    such a file, either verbatim or with modifications and/or
+    translated into another language.
+
+   `Modify'
+    To apply any procedure that produces a Derived Work under any
+    applicable law.
+    
+   `Distribution'
+    Making copies of the Work available from one person to another, in
+    whole or in part.  Distribution includes (but is not limited to)
+    making any electronic components of the Work accessible by
+    file transfer protocols such as FTP or HTTP or by shared file
+    systems such as Sun's Network File System (NFS).
+
+   `Compiled Work'
+    A version of the Work that has been processed into a form where it
+    is directly usable on a computer system.  This processing may
+    include using installation facilities provided by the Work,
+    transformations of the Work, copying of components of the Work, or
+    other activities.  Note that modification of any installation
+    facilities provided by the Work constitutes modification of the Work.
+
+   `Current Maintainer'
+    A person or persons nominated as such within the Work.  If there is
+    no such explicit nomination then it is the `Copyright Holder' under
+    any applicable law.
+
+   `Base Interpreter' 
+    A program or process that is normally needed for running or
+    interpreting a part or the whole of the Work.    
+
+    A Base Interpreter may depend on external components but these
+    are not considered part of the Base Interpreter provided that each
+    external component clearly identifies itself whenever it is used
+    interactively.  Unless explicitly specified when applying the
+    license to the Work, the only applicable Base Interpreter is a
+    `LaTeX-Format' or in the case of files belonging to the 
+    `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1.  Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope.  In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2.  You may distribute a complete, unmodified copy of the Work as you
+received it.  Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3.  You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4.  If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work.  You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work.  Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5.  If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6.  If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition.  Only
+the Current Maintainer is allowed to add such statements of exemption 
+to a component of the Work. 
+
+  a. If a component of this Derived Work can be a direct replacement
+     for a component of the Work when that component is used with the
+     Base Interpreter, then, wherever this component of the Work
+     identifies itself to the user when used interactively with that
+     Base Interpreter, the replacement component of this Derived Work
+     clearly and unambiguously identifies itself as a modified version
+     of this component to the user when used interactively with that
+     Base Interpreter.
+     
+  b. Every component of the Derived Work contains prominent notices
+     detailing the nature of the changes to that component, or a
+     prominent reference to another file that is distributed as part
+     of the Derived Work and that contains a complete and accurate log
+     of the changes.
+  
+  c. No information in the Derived Work implies that any persons,
+     including (but not limited to) the authors of the original version
+     of the Work, provide any support, including (but not limited to)
+     the reporting and handling of errors, to recipients of the
+     Derived Work unless those persons have stated explicitly that
+     they do provide such support for the Derived Work.
+
+  d. You distribute at least one of the following with the Derived Work:
+
+       1. A complete, unmodified copy of the Work; 
+          if your distribution of a modified component is made by
+          offering access to copy the modified component from a
+          designated place, then offering equivalent access to copy
+          the Work from the same or some similar place meets this
+          condition, even though third parties are not compelled to
+          copy the Work along with the modified component;
+
+       2. Information that is sufficient to obtain a complete,
+          unmodified copy of the Work.
+
+7.  If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8.  The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9.  Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+     
+10. a. A Derived Work may be distributed under a different license
+       provided that license itself honors the conditions listed in
+       Clause 6 above, in regard to the Work, though it does not have
+       to honor the rest of the conditions in this license.
+      
+    b. If a Derived Work is distributed under a different license, that
+       Derived Work must provide sufficient documentation as part of
+       itself to allow each recipient of that Derived Work to honor the 
+       restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12.  Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work.  Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose.  The entire risk as to the quality and performance
+of the Work is with you.  Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1.  Make a reasonable attempt to trace the Current Maintainer (and
+     the Copyright Holder, if the two differ) through the means of
+     an Internet or similar search.
+
+ 2.  If this search is successful, then enquire whether the Work
+     is still maintained.
+
+  a. If it is being maintained, then ask the Current Maintainer
+     to update their communication data within one month.
+     
+  b. If the search is unsuccessful or no action to resume active
+     maintenance is taken by the Current Maintainer, then announce
+     within the pertinent community your intention to take over
+     maintenance.  (If the Work is a LaTeX work, this could be
+     done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+     maintenance of the Work to you, then this takes effect
+     immediately upon announcement.
+     
+  b. If the Current Maintainer is not reachable and the Copyright
+     Holder agrees that maintenance of the Work be passed to you,
+     then this takes effect immediately upon announcement.  
+    
+ 4.  If you make an `intention announcement' as described in 2b. above
+     and after three months your intention is challenged neither by
+     the Current Maintainer nor by the Copyright Holder nor by other
+     people, then you may arrange for the Work to be changed so as
+     to name you as the (new) Current Maintainer.
+     
+ 5.  If the previously unreachable Current Maintainer becomes
+     reachable once more within three months of a change completed
+     under the terms of 3b) or 4), then that Current Maintainer must
+     become or remain the Current Maintainer upon request provided
+     they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer.  You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license.  These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license.  You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license.  It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate.  Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component.  While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community.  It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one.  Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified.  Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+  %% pig.dtx
+  %% Copyright 2005 M. Y. Name
+  %
+  % 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 M. Y. Name.
+  %
+  % This work consists of the files pig.dtx and pig.ins
+  % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.  
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+   The LPPL requires that distributions of the Work contain all the
+   files of the Work.  It is therefore important that you provide a
+   way for the licensee to determine which files constitute the Work.
+   This could, for example, be achieved by explicitly listing all the
+   files of the Work near the copyright notice of each file or by
+   using a line such as:
+
+    % This work consists of all files listed in manifest.txt.
+   
+   in that place.  In the absence of an unequivocal list it might be
+   impossible for the licensee to determine what is considered by you
+   to comprise the Work and, in such a case, the licensee would be
+   entitled to make reasonable conjectures as to which files comprise
+   the Work.
+

Deleted: trunk/Master/texmf-dist/doc/support/pdfcrop/README
===================================================================
--- trunk/Master/texmf-dist/doc/support/pdfcrop/README	2020-06-06 15:29:15 UTC (rev 55434)
+++ trunk/Master/texmf-dist/doc/support/pdfcrop/README	2020-06-06 21:06:31 UTC (rev 55435)
@@ -1,259 +0,0 @@
-README for pdfcrop 2012/11/02 v1.38
-
-TABLE OF CONTENTS
-=================
-A. Description
-B. Copyright, Disclaimer, License
-C. Files
-D. Requirements
-E. Installation
-F. User Interface
-G. Restricted Mode
-H. Author
-I. Acknowledgement
-J. Questions, Suggested Improvements
-K. Known Problems
-L. History
-M. ToDo
-
-A. DESCRIPTION
-==============
-PDFCROP takes a PDF file as input, calculates the BoundingBox
-for each page by the help of ghostscript and generates a output
-PDF file with removed margins.
-
-B. COPYRIGHT, DISCLAIMER, LICENSE
-=================================
-Copyright (C) 2002, 2004, 2005, 2008-2012 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.
-
-C. FILES
-========
-The project `pdfcrop' consists of two files:
-pdfcrop.pl: This perl script is the main program. The extension
-            `.pl' may be omitted.
-README:     Documentation, the file you are reading.
-
-Following temporary files are produced if `pdfcrop' is invoked:
-tmp-pdfcrop-*.tex:  input file for pdfTeX
-tmp-pdfcrop-*.log:  log file of pdfTeX run
-tmp-pdfcrop-*.pdf:  result after pdfTeX run
-
-D. REQUIREMENTS
-===============
-* Perl5 (version 5 of the perl interpreter)
-* Ghostscript (>= 8.0 if PDF file contains rotated pages)
-* pdfTeX, version >= 1.0 (because of page selecting and \pdfximage syntax)
-  or XeTeX or LuaTeX.
-
-E. INSTALLATION
-===============
-
-1. Perl script `pdfcrop.pl':
-
-   TDS 1.1 location (TDS means "texmf" tree, see CTAN:tds/tds.pdf):
-   * TDS:scripts/pdfcrop/pdfcrop.pl
-   * and a directory that is part of PATH contains a wrapper script
-     or link with name "pdfcrop".
-
-   Unix
-   * It is allowed to rename `pdfcrop.pl' to `pdfcrop':
-       mv pdfcrop.pl pdfcrop
-   * Ensure that the execute permission is set:
-       chmod +x pdfcrop
-   * Move the file to a directory where the shell can find it
-     (environment variable PATH, e.g. /usr/local/bin/).
-
-   Dos/Windows
-   * See requirements. I do not expect that the perl script
-     run under DOS.
-
-2. Restricted program version `rpdfcrop'
-
-   Generate links or install `pdfcrop.pl' again under the
-   name `rpdfcrop'.
-
-   Prefer `rpdfcrop' if you want to add pdfcrop to the
-   programs that may be executed in TeX's restricted
-   shell escape mode. (This feature is added in TeX Live 2009.)
-   For TeX Live (since 2009) see entry for `shell_escape_commands'
-   in the configuration file `texmf.cnf'.
-
-3. Documentation `README':
-
-   Copy it to an appropriate place, for example
-   `/usr/local/share/doc/pdfcrop/README'.
-   It is allowed to rename it to `pdfcrop.txt'.
-
-   TDS location:
-     somewhere below texmf/doc/... (?)
-   Examples:
-     TDS:doc/support/pdfcrop/README
-     TDS:doc/scripts/pdfcrop/README
-     TDS:doc/scripts/pdfcrop.txt
-   TeXLive 2008 and 2009 put it in
-     TDS:doc/support/pdfcrop/README
-
-F. USER INTERFACE
-=================
-* ToDo: User manual
-* Online help:
-    pdfcrop --help
-* Ghostscript's calculation of the bounding box is faster,
-  if --resolution 72 is used instead of ghostscript's implicite
-  default setting of 4000 DPI (hint from Ionut Georgescu).
-  Of course the calculation with higher resolution settings are
-  more accurate.
-
-G. RESTRICTED MODE
-==================
-Restricted mode is enabled if:
-* option `--restricted' is used,
-* the program is called under the name `rpdfcrop'
-* or the called program name contains `restricted'.
-This mode sets restrictions for the following options:
-* --pdftexcmd: if used, the value must be empty or `pdftex'.
-* --xetexcmd: if used, the value must be empty or `xetex'.
-* --luatexcmd: if used, the value must be empty or `luatex'.
-* --gscmd: if used, the value must
-  * be empty or
-  * be one of the standard names (gs, gswin32c, mgs, gs386 gsos2) or
-  * consists of `gs', followed by a version number and an
-    optional `c' (Ghostscript's convention for `console version').
-
-H. AUTHOR
-=========
-Heiko Oberdiek
-Email: heiko.oberdiek at googlemail.com
-
-I. ACKNOWLEDGEMENT
-==================
-Anthony Williams
-Scott Pakin <pakin at uiuc.edu>
-Ionut Georgescu
-Yves J\"ager
-R (Chandra) Chandrasekhar
-Christian Stapfer
-David Menestrina
-Karl Berry
-
-J. QUESTIONS, SUGGESTED IMPROVEMENTS
-====================================
-If you have questions, problems with `pdfcrop', error reports,
-if you have improvements or want to have additional features,
-please send them to the author.
-
-My environment for developing and testing:
-* linux, SuSE 9.0
-* perl v5.8.1
-* pdfTeX 3.141592-1.40.x
-* Ghostscript 8.x
-
-K. KNOWN PROBLEMS
-=================
-* pdfcrop relies on Ghostscript for the calculation of the
-  Bounding Box. If Ghostscript returns wrong values or
-  cannot process the pdf file, it sometimes helps to try
-  another version of Ghostscript.
-* XeTeX (and pdfTeX < 1.10a) does not allow the setting of the
-  PDF version in a direct way. Thus pdfcrop fixes the PDF version
-  afterwards in the PDF header. Therefore XeTeX warnings as
-    ** WARNING ** Version of PDF file (1.6) is newer
-                  than version limit specification.
-  can be safely ignored.
-
-L. 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, --xetexcmds.
-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/17 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).
-2010/01/09 v1.23: * Options --bbox-odd and --bbox-even added.
-2010/08/16 v1.24: * Workaround added for buggy ghostscript ports
-                    that print the BoundingBox data twice.
-2010/08/26 v1.25: * Fix for the case that the PDF file contains
-                    an entry /CropBox different to /MediaBox.
-                  * \pageinclude implemented for XeTeX.
-                  * XeTeX: --clip does not die, but this option
-                    is ignored, because XeTeX always clip.
-2010/08/26 v1.26: * XeTeX's \XeTeXpdffile expects keyword
-                    `media', not `mediabox'.
-                  * New option --pdfversion.
-                    Default is `auto' that means the PDF version
-                    is inherited from the input file. Before
-                    pdfcrop has used the TeX engine's default.
-                  * Option --luatex fixed (extra empty page at end).
-2010/09/03 v1.27: * Workaround of v1.24 fixed.
-2010/09/06 v1.28: * The Windows registry is searched if Ghostscript
-                    is not found via PATH.
-                  * Windows only: support of spaces in command
-                    names in unrestricted mode.
-2010/09/06 v1.29: * Find the latest Ghostscript version in registry.
-2010/09/15 v1.30: * Warning of pdfTeX because of \pdfobjcompresslevel
-                    avoided when reducing \pdfminorversion.
-                  * Fix for TeX syntax characters in input file names.
-2010/09/17 v1.31: * Passing the input file name via hex string to TeX.
-                  * Again input file names restricted for Ghostscript
-                    command line, switch then to symbol link/copy
-                    method.
-2011/08/10 v1.32: * Detection for gswin64c.exe added.
-2012/02/01 v1.33: * Input file can be `-' (standard input).
-2012/04/18 v1.34: * Format of option --version changed
-                    from naked version number to a line with
-                    program name, date and version.
-2012/10/15 v1.35: * Additional debug infos added for Perl version.
-2012/10/16 v1.36: * More error codes added.
-2012/10/16 v1.37: * Extended error messages if available.
-                  * Fix for broken v1.36.
-2012/11/02 v1.38: * Fix for unsufficient cleanup, if function `cleanup' is
-                    prematurely called in `eval' for `symlink' checking.
-
-
-M. TODO
-=======
-* Description of user interface.
-* Documentation in other formats, eg. man or info pages.
-* Improved error checking.
-* Units support for option --margins.

Added: trunk/Master/texmf-dist/doc/support/pdfcrop/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/support/pdfcrop/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/support/pdfcrop/README.md	2020-06-06 21:06:31 UTC (rev 55435)
@@ -0,0 +1,261 @@
+# pdfcrop
+
+Version: 2020/06/06 v1.40
+
+
+## TABLE OF CONTENTS
+
+1. Description
+2. Copyright, Disclaimer, License
+3. Files
+4. Requirements
+5. Installation
+6. User Interface
+7. Restricted Mode
+8. Author
+9. Acknowledgement
+9. Questions, Suggested Improvements
+9. Known Problems
+9. History
+9. ToDo
+
+## 1\. DESCRIPTION
+
+PDFCROP takes a PDF file as input, calculates the BoundingBox
+for each page by the help of ghostscript and generates a output
+PDF file with removed margins.
+
+## 2\. COPYRIGHT, DISCLAIMER, LICENSE
+
+Copyright (C) 2002, 2004, 2005, 2008-2012 Heiko Oberdiek.
+              2020                        Oberdiek Package Support Group
+
+LaTeX Project Public License, version 1.3c or later.
+
+## 3\. FILES
+
+The project `pdfcrop` consists of two files:
+
+`pdfcrop.pl`: This perl script is the main program. The extension
+            `.pl` may be omitted.\
+`README.md`:  Documentation, the file you are reading.
+
+Following temporary files are produced if `pdfcrop` is invoked:
+
+`tmp-pdfcrop-*.tex`:  input file for pdfTeX, luatex or xetex\
+`tmp-pdfcrop-*.log`:  log file of pdfTeX, luatex or xetex run\
+`tmp-pdfcrop-*.pdf`:  result after pdfTeX, luatex or xetex run
+
+The temporary files are deleted after the run unless the `--debug` option is
+used.
+
+## 4\. REQUIREMENTS
+
+* Perl5 (version 5 of the perl interpreter)
+* Ghostscript (>= 8.0 if PDF file contains rotated pages)
+* pdfTeX, version >= 1.0 (because of page selecting and \pdfximage syntax)
+  or XeTeX or LuaTeX.
+
+## 5\. INSTALLATION
+
+Normally `pdfcrop` will be installed by the TeX system. 
+
+If a manual installation is needed
+
+### 1\. Perl script `pdfcrop.pl`:
+
+TDS 1.1 location (TDS means "texmf" tree, see CTAN:tds/tds.pdf):
+* TDS:scripts/pdfcrop/pdfcrop.pl
+* and a directory that is part of PATH contains a wrapper script
+     or link with name "pdfcrop".
+
+Unix
+* It is allowed to rename `pdfcrop.pl` to `pdfcrop`:
+    mv pdfcrop.pl pdfcrop
+* Ensure that the execute permission is set:
+    chmod +x pdfcrop
+* Move the file to a directory where the shell can find it
+  (environment variable PATH, e.g. /usr/local/bin/).
+
+Dos/Windows
+   * See requirements. I do not expect that the perl script
+     runs under DOS.
+
+### 2\. Restricted program version `rpdfcrop`
+
+   Generate links or install `pdfcrop.pl` again under the
+   name `rpdfcrop`.
+
+   Prefer `rpdfcrop` if you want to add pdfcrop to the
+   programs that may be executed in TeX's restricted
+   shell escape mode. (This feature is added in TeX Live 2009.)
+   For TeX Live (since 2009) see entry for `shell_escape_commands`
+   in the configuration file `texmf.cnf`.
+
+### 3\. Documentation `README.md`:
+
+   Copy it to an appropriate place, for example
+   `/usr/local/share/doc/pdfcrop/README.md`.
+   It is allowed to rename it to `pdfcrop.txt` or `pdfcrop.md`.
+
+   TDS location:\
+     somewhere below texmf/doc/... (?)
+     
+   Examples:\
+     `TDS:doc/support/pdfcrop/README.md`\
+     `TDS:doc/scripts/pdfcrop/README.md`\
+     `TDS:doc/scripts/pdfcrop.txt`
+     
+   TeXLive 2020 put it in\ 
+     `TDS:doc/support/pdfcrop/README.md`
+
+## 6\. USER INTERFACE
+
+* ToDo: User manual
+* Online help:
+    `pdfcrop --help`
+* Ghostscript's calculation of the bounding box is faster,
+  if `--resolution 72` is used instead of ghostscript's implicite
+  default setting of 4000 DPI (hint from Ionut Georgescu).
+  Of course the calculation with higher resolution settings are
+  more accurate.
+
+## 7\. RESTRICTED MODE
+
+Restricted mode is enabled if:
+
+* option `--restricted` is used,
+* the program is called under the name `rpdfcrop`
+* or the called program name contains `restricted`.
+
+This mode sets restrictions for the following options:
+
+* `--pdftexcmd`: if used, the value must be empty or `pdftex`.
+* `--xetexcmd`: if used, the value must be empty or `xetex`.
+* `--luatexcmd`: if used, the value must be empty or `luatex`.
+* `--gscmd`: if used, the value must
+  * be empty or
+  * be one of the standard names (gs, gswin32c, mgs, gs386, gsos2) or
+  * consists of `gs`, followed by a version number and an
+      optional `c` (Ghostscript's convention for `console version`).
+
+## 8\. AUTHORS
+
+Heiko Oberdiek\
+Email: heiko.oberdiek at googlemail.com\
+Oberdiek Package Support Group\
+[https://github.com/ho-tex/pdfcrop]
+
+## 9\. ACKNOWLEDGEMENT
+
+Anthony Williams\
+Scott Pakin <pakin at uiuc.edu>\
+Ionut Georgescu\
+Yves Jäger\
+R (Chandra) Chandrasekhar\
+Christian Stapfer\
+David Menestrina\
+Karl Berry
+
+## 10. QUESTIONS, SUGGESTED IMPROVEMENTS
+
+If you have questions, problems with `pdfcrop`, error reports,
+if you have improvements or want to have additional features,
+please send them to the author or add an issue to
+https://github.com/ho-tex/pdfcrop
+
+My environment for developing and testing:
+* linux, SuSE 9.0
+* perl v5.8.1
+* pdfTeX 3.141592-1.40.x
+* Ghostscript 8.x
+
+## 11. KNOWN PROBLEMS
+
+* pdfcrop relies on Ghostscript for the calculation of the
+  Bounding Box. If Ghostscript returns wrong values or
+  cannot process the pdf file, it sometimes helps to try
+  another version of Ghostscript.
+* Older XeTeX (and pdfTeX < 1.10a) does not allow the setting of the
+  PDF version in a direct way. In this cases pdfcrop tries to fix the PDF version
+  afterwards in the PDF header and XeTeX warnings as the following can be safely ignored.
+  
+        ** WARNING ** Version of PDF file (1.6) is newer
+                  than version limit specification.
+   
+  
+
+## 12. HISTORY
+
+|Version         | Notes |
+|----------------|-------|
+|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`, `--xetexcmds`.|
+|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/17 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`, `--pdftexcmd`, `--xetexcmd`.|
+|--               | \* 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).|
+|2010/01/09 v1.23:| \* Options `--bbox`-odd and --bbox-even added.|
+|2010/08/16 v1.24:| \* Workaround added for buggy ghostscript ports that print the BoundingBox data twice.|
+|2010/08/26 v1.25:| \* Fix for the case that the PDF file contains an entry /CropBox different to /MediaBox.|
+|--               | \* \pageinclude implemented for XeTeX. |
+|--               | \* XeTeX: `--clip` does not die, but this option is ignored, because XeTeX always clip.|
+|2010/08/26 v1.26:| \* XeTeX's \XeTeXpdffile expects keyword `media`, not `mediabox`.|
+|--               | \* New option `--pdfversion`.|
+|--               |  Default is `auto` that means the PDF version is inherited from the input file. Before pdfcrop has used the TeX engine's default.|
+|--               | \* Option `--luatex` fixed (extra empty page at end).|
+|2010/09/03 v1.27:| \* Workaround of v1.24 fixed.|
+|2010/09/06 v1.28:| \* The Windows registry is searched if Ghostscript is not found via PATH.
+|--               | \* Windows only: support of spaces in command names in unrestricted mode.|
+|2010/09/06 v1.29:| \* Find the latest Ghostscript version in registry.|
+|2010/09/15 v1.30:| \* Warning of pdfTeX because of \pdfobjcompresslevel avoided when reducing \pdfminorversion.|
+|--               | \* Fix for TeX syntax characters in input file names.|
+|2010/09/17 v1.31:| \* Passing the input file name via hex string to TeX.|
+|--               |  \* Again input file names restricted for Ghostscript command line, switch then to symbol link/copy method.|
+|2011/08/10 v1.32:| \* Detection for gswin64c.exe added.|
+|2012/02/01 v1.33:| \* Input file can be `-` (standard input).|
+|2012/04/18 v1.34:| \* Format of option `--version` changed from naked version number to a line with program name, date and version.|
+|2012/10/15 v1.35:| \* Additional debug infos added for Perl version.|
+|2012/10/16 v1.36:| \* More error codes added.|
+|2012/10/16 v1.37:| \* Extended error messages if available.|
+|--               | \* Fix for broken v1.36.|
+|2012/11/02 v1.38:| \* Fix for unsufficient cleanup, if function `cleanup` is prematurely called in `eval` for `symlink` checking.|
+|2020/05/24 v1.39:| \* adapted to pdfversion 2.0,|
+|--               | \*  corrected luatex support|
+|--               | \*  corrected a problem with xetex.|
+|2020/06/06 v1.40:| \* improved ghostscript detection on windows when a bash is used|
+|--               | \* added direct pdfversion support to xetex.| 
+                      
+
+## 13. TODO
+
+* Description of user interface.
+* Documentation in other formats, eg. man or info pages.
+* Improved error checking.
+* Units support for option `--margins`.


Property changes on: trunk/Master/texmf-dist/doc/support/pdfcrop/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/scripts/pdfcrop/pdfcrop.pl
===================================================================
--- trunk/Master/texmf-dist/scripts/pdfcrop/pdfcrop.pl	2020-06-06 15:29:15 UTC (rev 55434)
+++ trunk/Master/texmf-dist/scripts/pdfcrop/pdfcrop.pl	2020-06-06 21:06:31 UTC (rev 55435)
@@ -5,16 +5,12 @@
 # pdfcrop.pl
 #
 # Copyright (C) 2002, 2004, 2005, 2008-2012 Heiko Oberdiek.
+#               2020                        Oberdiek Package Support Group
 #
 # 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.
+# conditions of the LaTeX Project Public License, version 1.3c or later.
 #
-# See file "README" for a list of files that belong to this project.
+# See file "README.md" for a list of files that belong to this project.
 #
 # This file "pdfcrop.pl" may be renamed to "pdfcrop"
 # for installation purposes.
@@ -22,10 +18,10 @@
 my $prj         = 'pdfcrop';
 my $file        = "$prj.pl";
 my $program     = uc($&) if $file =~ /^\w+/;
-my $version     = "1.38";
-my $date        = "2012/11/02";
-my $author      = "Heiko Oberdiek";
-my $copyright   = "Copyright (c) 2002-2012 by $author.";
+my $version     = "1.40";
+my $date        = "2020/06/06";
+my $author      = "Heiko Oberdiek, Oberdiek Package Support Group";
+my $copyright   = "Copyright (c) 2002-2020 by $author.";
 #
 # Reqirements: Perl5, Ghostscript
 # History:
@@ -107,7 +103,13 @@
 #                   * Fix for broken v1.36.
 # 2012/11/02 v1.38: * Fix for unsufficient cleanup, if function `cleanup' is
 #                     prematurely called in `eval' for `symlink' checking.
+# 2020/05/24 v1.39: * adapted to pdfversion 2.0, corrected luatex support,
+#                      corrected a problem with xetex.
+# 2020/06/06 v1.40: * improved ghostscript detection on windows when a bash is used
+#                      added direct pdf version support to xetex. 
 
+
+
 ### program identification
 my $title = "$program $version, $date - $copyright\n";
 
@@ -171,7 +173,7 @@
     print "* Arch name: $archname\n" if $::opt_debug;
     print "* System: $system\n" if $::opt_debug;
     my %candidates = (
-        'unix' => [qw|gs gsc|],
+        'unix' => [qw|gs gsc gswin64c gswin32c|],
         'dos' => [qw|gs386 gs|],
         'os2' => [qw|gsos2 gs|],
         'win' => [qw|gswin32c gs|],
@@ -362,6 +364,7 @@
 $::opt_bbox_even  = "";
 $::opt_initex     = 0;
 $::opt_pdfversion = "auto";
+$::opt_uncompress = 0;
 
 sub usage ($) {
     my $ret = shift;
@@ -401,13 +404,15 @@
                       with origin at the lower left corner
   --bbox-odd          Same as --bbox, but for odd pages only   ($::opt_bbox_odd)
   --bbox-even         Same as --bbox, but for even pages only  ($::opt_bbox_even)
-  --pdfversion <1.x> | auto | none
-                      Set the PDF version to 1.x, 1 < x < 8.
+  --pdfversion <x.y> | auto | none
+                      Set the PDF version to x.y, x= 1 or 2, y=0-9.
                       If `auto' is given as value, then the
                       PDF version is taken from the header
                       of the input PDF file.
                       An empty value or `none' uses the
                       default of the TeX engine.               ($::opt_pdfversion)
+  --uncompress        creates an uncompressed pdf, 
+                      useful for debugging                     ($bool[$::opt_uncompress])                     
 
 Input file: If the name is `-', then the standard input is used and
   the output file name must be explicitly given.
@@ -454,6 +459,7 @@
   "bbox-even=s" => \$::opt_bbox_even,
   "restricted" => sub { $restricted = 1; },
   "pdfversion=s" => \$::opt_pdfversion,
+  "uncompress!",
 ) or usage(1);
 !$::opt_help or usage(0);
 
@@ -471,10 +477,12 @@
 print "* Restricted mode: ", ($restricted ? "enabled" : "disabled"), "\n"
         if $::opt_debug;
 
-$::opt_pdfversion =~ /^(|none|auto|1\.([2-7]))$/
+$::opt_pdfversion =~ /^(|none|auto|(([1-2])\.(\d)))$/
         or die "!!! Error: Invalid value `$::opt_pdfversion' for option `--pdfversion'!\n";
 print "* Option `pdfversion': $::opt_pdfversion\n" if $::opt_debug;
 $::opt_pdfversion = $2 if $2;
+$::opt_pdfmajorversion = $3 if $2;
+$::opt_pdfminorversion = $4 if $2;
 $::opt_pdfversion = '' if $::opt_pdfversion eq 'none';
 
 find_ghostscript();
@@ -721,16 +729,19 @@
             or die sprintf "!!! Error: Cannot read the header of `%s' failed (%s)!\n",
                            $inputfilesafe, exterr;
     close(IN);
-    if ($buf =~ /%PDF-1.([0-7])\s/) {
+    if ($buf =~ /%PDF-((\d).(\d))\s/) {
         $::opt_pdfversion = $1;
-        print "* PDF header: %PDF-1.$::opt_pdfversion\n" if $::opt_verbose;
-        $::opt_pdfversion = 2 if $::opt_pdfversion < 2;
+        $::opt_pdfmajorversion = $2;
+        $::opt_pdfminorversion = $3;
+        print "* PDF header: %PDF-$::opt_pdfversion\n" if $::opt_verbose;
+        $::opt_pdfminorversion = 2 if ($::opt_pdfmajorversion < 2 && $::opt_pdfminorversion < 2);
+        $::opt_pdfversion = $::opt_pdfmajorversion . '.' . $::opt_pdfminorversion;
     }
     else {
         die "!!! Error: Cannot find PDF header of `$inputfilesafe'!\n";
     }
 }
-print '* Using PDF minor version: ',
+print '* Using PDF version: ',
       ($::opt_pdfversion ? $::opt_pdfversion : "engine's default"),
       "\n" if $::opt_debug;
 
@@ -819,75 +830,37 @@
 \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',
-              'pdfminorversion',
-              'pdfobjcompresslevel',
-            })
-            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 %
-      \global\let\pdfminorversion\TESTpdfminorversion %
-      \global\let\pdfobjcompresslevel\TESTpdfobjcompresslevel %
-    \else %
-      \errmessage{%
-        Missing \string\luatexversion %
-      }%
-    \fi %
-  \endgroup %
 \fi
 END_TMP
 }
-if ($::opt_tex eq 'pdftex' or $::opt_tex eq 'luatex') {
+
+my $uncompress = $::opt_uncompress ? '0 ' : '9 ';
+if ($::opt_tex eq 'pdftex') {
+ print TMP "\\pdfcompresslevel=$uncompress "; 
     print TMP <<'END_TMP_HEAD';
 \pdfoutput=1 %
-\pdfcompresslevel=9 %
 \csname pdfmapfile\endcsname{}
-\def\setpdfversion#1{%
+\def\setpdfversion#1#2{%
   \IfUndefined{pdfobjcompresslevel}{%
   }{%
-    \ifnum#1<5 %
-      \pdfobjcompresslevel=0 %
-    \else
-      \pdfobjcompresslevel=2 %
-    \fi
+    \ifnum#1=1 %
+     \ifnum#2<5
+       \pdfobjcompresslevel=0 %
+     \else
+       \pdfobjcompresslevel=2 %
+     \fi
+   \fi 
   }%
   \IfUndefined{pdfminorversion}{%
     \IfUndefined{pdfoptionpdfminorversion}{%
     }{%
-      \pdfoptionpdfminorversion=#1\relax
+      \pdfoptionpdfminorversion=#2\relax
     }%
   }{%
-    \pdfminorversion=#1\relax
+    \pdfminorversion=#2\relax
+    \IfUndefined{pdfmajorversion}{%
+      \ifnum#2=0 \pdfminorversion=5\fi}
+      {\pdfmajorversion=#1\relax}%
   }%
 }
 \def\page #1 [#2 #3 #4 #5]{%
@@ -943,13 +916,89 @@
   }%
 }
 END_TMP_HEAD
-    print TMP "\\setpdfversion{$::opt_pdfversion}\n" if $::opt_pdfversion;
+    print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion;
 }
+elsif  ($::opt_tex eq 'luatex')
+  {
+    print TMP "\\pdfvariable compresslevel=$uncompress "; 
+    print TMP <<'END_TMP_HEAD';
+\outputmode=1 %
+\pdfextension mapfile {}
+\def\setpdfversion#1#2{%
+    \ifnum#1=1 %
+     \ifnum#2<5
+       \pdfvariable objcompresslevel=0 %
+     \else
+       \pdfvariable objcompresslevel=2 %
+     \fi
+    \fi  
+    \pdfvariable minorversion= #2
+    \pdfvariable majorversion= #1 
+}
+\def\page #1 [#2 #3 #4 #5]{%
+  \count0=#1\relax
+  \setbox0=\hbox{%
+    \saveimageresource page #1 mediabox{\pdffile}%
+    \useimageresource\lastsavedimageresourceindex
+  }%
+  \pdfvariable horigin=-#2bp\relax
+  \pdfvariable vorigin=#3bp\relax
+  \pagewidth=#4bp\relax
+  \advance\pagewidth by -#2bp\relax
+  \pageheight=#5bp\relax
+  \advance\pageheight by -#3bp\relax
+  \ht0=\pageheight
+  \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}%
+  \saveimageresource page #1 mediabox{\pdffile}%
+  \setbox0=\hbox{%
+    \kern -#2bp\relax
+    \lower #3bp\hbox{\useimageresource\lastsavedimageresourceindex}%
+  }%
+  \wd0=\imagewidth\relax
+  \ht0=\imageheight\relax
+  \dp0=0pt\relax
+  \pdfvariable horigin=#6pt\relax
+  \pdfvariable vorigin=#7bp\relax
+  \pagewidth=\imagewidth
+  \advance\pagewidth by #6bp\relax
+  \advance\pagewidth by #8bp\relax
+  \pageheight=\imageheight\relax
+  \advance\pageheight by #7bp\relax
+  \advance\pageheight by #9bp\relax
+  \saveboxresource0\relax
+  \shipout\hbox{\useboxresource\lastsavedboxresourceindex}%
+}%
+\def\pageinclude#1{%
+  \pdfvariable horigin=0pt\relax
+  \pdfvariable vorigin=0pt\relax
+  \saveimageresource page #1 mediabox{\pdffile}%
+  \setbox0=\hbox{\useimageresource\lastsavedimageresourceindex}%
+  \pagewidth=\wd0\relax
+  \pageheight=\ht0\relax
+  \advance\pageheight by \dp0\relax
+  \shipout\hbox{%
+    \raise\dp0\box0\relax
+  }%
+}
+END_TMP_HEAD
+    print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion;    
+}  
 else { # XeTeX
     print TMP <<'END_TMP_HEAD';
 \expandafter\ifx\csname XeTeXpdffile\endcsname\relax
   \errmessage{XeTeX not found or too old!}%
 \fi
+\def\setpdfversion#1#2{%
+  \special{pdf:majorversion #1}%
+  \special{pdf:minorversion #2}}
+  
 \def\page #1 [#2 #3 #4 #5]{%
   \count0=#1\relax
   \setbox0=\hbox{%
@@ -990,6 +1039,7 @@
   }%
 }
 END_TMP_HEAD
+print TMP "\\setpdfversion{$::opt_pdfmajorversion}{$::opt_pdfminorversion}\n" if $::opt_pdfversion; 
 }
 
 print "* Running ghostscript for BoundingBox calculation ...\n"
@@ -1183,15 +1233,15 @@
     read PDF, $header, 9
             or die sprintf "!!! Error: Cannot read header of `%s' (%s)!\n",
                            "$tmp.pdf", exterr;
-    $header =~ /^%PDF-1\.(\d)\s$/ or die "!!! Error: Cannot find header of `$tmp.pdf'!\n";
+    $header =~ /^%PDF-(\d\.\d)\s$/ or die "!!! Error: Cannot find header of `$tmp.pdf'!\n";
     if ($1 ne $::opt_pdfversion) {
-        seek PDF, 7, 0
+        seek PDF, 5, 0
                 or die sprintf "!!! Error: Cannot seek in `%s' (%s)!\n",
                                "$tmp.pdf", exterr;
         print PDF $::opt_pdfversion
                 or die sprintf "!!! Error: Cannot write in `%s' (%s)!\n",
                                "$tmp.pdf", exterr;
-        print "* PDF version correction in output file: 1.$::opt_pdfversion\n"
+        print "* PDF version correction in output file: $::opt_pdfversion\n"
                 if $::opt_debug;
     }
     close(PDF);



More information about the tex-live-commits mailing list.