texlive[48659] Master: Upgrade gs-9.23 -> gs-9.25
commits+reinhardk at tug.org
commits+reinhardk at tug.org
Fri Sep 14 00:22:19 CEST 2018
Revision: 48659
http://tug.org/svn/texlive?view=revision&revision=48659
Author: reinhardk
Date: 2018-09-14 00:22:18 +0200 (Fri, 14 Sep 2018)
Log Message:
-----------
Upgrade gs-9.23 -> gs-9.25
Modified Paths:
--------------
trunk/Master/tlpkg/tlgs/README.TEXLIVE
trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps
trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps
trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps
trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps
trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps
trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps
trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps
trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps
trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps
trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps
trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps
trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps
trunk/Master/tlpkg/tlgs/Resource/Init/pdf_rbld.ps
trunk/Master/tlpkg/tlgs/Resource/Init/pdf_sec.ps
trunk/Master/tlpkg/tlgs/bin/gsdll32.dll
trunk/Master/tlpkg/tlgs/bin/gsdll32.lib
trunk/Master/tlpkg/tlgs/bin/gswin32.exe
trunk/Master/tlpkg/tlgs/bin/gswin32c.exe
trunk/Master/tlpkg/tlgs/lib/ps2epsi.ps
Added Paths:
-----------
trunk/Master/source/ghostscript-9.25.tar.xz
Removed Paths:
-------------
trunk/Master/source/ghostscript-9.23.tar.xz
Deleted: trunk/Master/source/ghostscript-9.23.tar.xz
===================================================================
(Binary files differ)
Added: trunk/Master/source/ghostscript-9.25.tar.xz
===================================================================
(Binary files differ)
Index: trunk/Master/source/ghostscript-9.25.tar.xz
===================================================================
--- trunk/Master/source/ghostscript-9.25.tar.xz 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/source/ghostscript-9.25.tar.xz 2018-09-13 22:22:18 UTC (rev 48659)
Property changes on: trunk/Master/source/ghostscript-9.25.tar.xz
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/x-xz
\ No newline at end of property
Modified: trunk/Master/tlpkg/tlgs/README.TEXLIVE
===================================================================
--- trunk/Master/tlpkg/tlgs/README.TEXLIVE 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/README.TEXLIVE 2018-09-13 22:22:18 UTC (rev 48659)
@@ -1,5 +1,5 @@
-This directory contains a subset of the Ghostscript 9.23 distribution
+This directory contains a subset of the Ghostscript 9.25 distribution
for Windows. The only purpose of this package is to support programs
shipped with TeX Live. It's not intended for general use.
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_dps.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -70,7 +70,7 @@
% Save a copy of the initial gstate.
//systemdict /savedinitialgstate gstate readonly .forceput
.setglobal
-} .bind def
+} .bind executeonly def % must be bound and hidden for .forceput
% Initialize local dictionaries and gstate when creating a new context.
% Note that until this completes, we are in the anomalous situation of
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_fntem.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -408,7 +408,7 @@
exit
} loop
exch setglobal
-} bind def
+} .bind executeonly def % must be bound and hidden for .forceput
currentdict end /ProcSet defineresource pop
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_init.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -29,7 +29,7 @@
% Interpreter library version number
% NOTE: the interpreter code requires that the first non-comment token
% in this file be an integer, and that it match the compiled-in version!
-923
+925
% Check the interpreter revision.
dup revision ne
@@ -767,23 +767,6 @@
{ /run .systemvar exec } .execasresource
} bind def
-% Define procedures for getting and setting the current device resolution.
-
-/gsgetdeviceprop % <device> <propname> gsgetdeviceprop <value>
- { 2 copy mark exch //null .dicttomark .getdeviceparams
- dup mark eq % if true, not found
- { pop dup /undefined signalerror }
- { 5 1 roll pop pop pop pop }
- ifelse
- } bind def
-/gscurrentresolution % - gscurrentresolution <[xres yres]>
- { currentdevice /HWResolution gsgetdeviceprop
- } bind def
-/gssetresolution % <[xres yres]> gssetresolution -
- { 2 array astore mark exch /HWResolution exch
- currentdevice copydevice putdeviceprops setdevice
- } bind def
-
% Define auxiliary procedures needed for the above.
/shellarguments % -> shell_arguments true (or) false
{ /ARGUMENTS where
@@ -898,7 +881,7 @@
{ not exch pop exit } { pop } ifelse
}
for exch pop .quit
- } bind def
+ } bind executeonly def
/.errorhandler % <command> <errorname> .errorhandler -
{ % Detect an internal 'stopped'.
1 .instopped { //null eq { pop pop stop } if } if
@@ -943,7 +926,7 @@
$error /globalmode get $error /.nosetlocal get and .setglobal
$error /.inerror //false put
stop
- } bind def
+ } bind executeonly def
% Define the standard handleerror. We break out the printing procedure
% (.printerror) so that it can be extended for binary output
% if the Level 2 facilities are present.
@@ -993,7 +976,7 @@
ifelse % newerror
end
flush
- } bind def
+ } bind executeonly def
/.printerror_long % long error printout,
% $error is on the dict stack
{ % Push the (anonymous) stack printing procedure.
@@ -1070,7 +1053,7 @@
{ (Current file position is ) print position = }
if
- } bind def
+ } bind executeonly def
% Define a procedure for clearing the error indication.
/.clearerror
{ $error /newerror //false put
@@ -1077,7 +1060,7 @@
$error /errorname //null put
$error /errorinfo //null put
0 .setoserrno
- } bind def
+ } bind executeonly def
% Define $error. This must be in local VM.
.currentglobal //false .setglobal
@@ -1103,11 +1086,15 @@
/errordict ErrorNames length 3 add dict
.forcedef % errordict is local, systemdict is global
.setglobal % back to global VM
-% For greater Adobe compatibility, we put all non-standard errors in a
-% separate dictionary, gserrordict. It does not need to be in local VM,
-% because PostScript programs do not access it.
+% gserrordict contains all the default error handling methods, but unlike
+% errordict it is noaccess after creation (also it is in global VM).
+% When running 'SAFER', we'll ignore the contents of errordict, which
+% may have been tampered with by the running job, and always use gserrordict
+% gserrordict also contains any non-standard errors, for better compatibility
+% with Adobe.
+%
% NOTE: the name gserrordict is known to the interpreter.
-/gserrordict 5 dict def
+/gserrordict ErrorNames length 3 add dict def
% Register an error in errordict. We make this a procedure because we only
% register the Level 1 errors here: the rest are registered by "feature"
% files. However, ErrorNames contains all of the error names regardless of
@@ -1136,8 +1123,11 @@
} bind def
end % errordict
-% Put non-standard errors in gserrordict.
-gserrordict /unknownerror errordict /unknownerror get put
+% Put all the default handlers in gserrordict
+gserrordict
+errordict {2 index 3 1 roll put} forall
+noaccess pop
+% remove the non-standard errors from errordict
errordict /unknownerror .undef
% Define a stable private copy of handleerror that we will always use under
% JOBSERVER mode.
@@ -1521,6 +1511,14 @@
dup 150 lt //systemdict /DITHERPPI known not and
} bind def
+/.gsgetdeviceprop % <device> <propname> gsgetdeviceprop <value>
+ { 2 copy mark exch //null .dicttomark .getdeviceparams
+ dup mark eq % if true, not found
+ { pop dup /undefined signalerror }
+ { 5 1 roll pop pop pop pop }
+ ifelse
+ } bind def
+
% The following implementation uses LL2 extensions, but only in stopped
% contexts so that with LL1, the .set??reshalftone will be used.
%
@@ -1528,7 +1526,7 @@
% false
/.getdefaulthalftone {
% try the device to see if it has a default halftone
- { currentdevice /HalftoneDefault gsgetdeviceprop } .internalstopped
+ { currentdevice /HalftoneDefault //.gsgetdeviceprop exec } .internalstopped
{ pop pop //false } % no device property
{ dup type /dicttype eq { //true } { pop //false } ifelse }
ifelse
@@ -1541,6 +1539,7 @@
}
if
} bind def
+currentdict /.gsgetdeviceprop .forceundef
/.setdefaulthalftone {
.getdefaulthalftone
@@ -2012,15 +2011,30 @@
.currentglobal //true .setglobal
/SAFETY 2 dict
dup /safe //false put
- dup /tempfiles 10 dict readonly put
+ dup /tempfiles 10 dict noaccess put
readonly def
.setglobal
+/tempfilepaths
+[
+ (TMPDIR) getenv not
+ {
+ (TEMP) getenv not
+ {
+ (TMP) getenv not
+ {
+ (/temp) (/tmp)
+ } if
+ } if
+ } if
+] def
+
/.locksafe_userparams {
SAFETY /safe get not {
<<
/PermitFileReading [
currentuserparams /PermitFileReading get aload pop
+ //tempfilepaths (*) .generate_dir_list_templates
/FONTPATH .systemvar (*) .generate_dir_list_templates
% Library files :
/LIBPATH .systemvar (*) .generate_dir_list_templates
@@ -2035,7 +2049,19 @@
[ currentsystemparams /GenericResourceDir get] (*) .file_name_separator (*)
concatstrings concatstrings .generate_dir_list_templates
} if
+ currentuserparams /ICCProfilesDir known {
+ [currentuserparams /ICCProfilesDir get] (*)
+ .generate_dir_list_templates
+ } if
]
+ /PermitFileWriting [
+ currentuserparams /PermitFileWriting get aload pop
+ //tempfilepaths (*) .generate_dir_list_templates
+ ]
+ /PermitFileControl [
+ currentuserparams /PermitFileControl get aload pop
+ //tempfilepaths (*) .generate_dir_list_templates
+ ]
/LockFilePermissions //true
>> setuserparams
}
@@ -2042,6 +2068,8 @@
if
} bind def
+currentdict /tempfilepaths undef
+
/.locksafe {
.locksafe_userparams
systemdict /getenv {pop //false} .forceput
@@ -2103,152 +2131,146 @@
.locksafeglobal
} bind executeonly odef
-/deletefile {
- dup { deletefile } stopped {
- pop //deletefile $error /errorname get signalerror
- } {
- % deletefile succeeded. Remove from tempfile list if present
- //SAFETY /tempfiles get exch cvn 2 copy known {
- .forceundef
- } {
- pop pop
- }
- ifelse
- }
- ifelse
-} .bind executeonly odef
-
-% If a file is opened with .tempfile with SAFER not (yet) set,
-% the file can be deleted later, even if SAFER is set.
-/.tempfile {
- .tempfile % filename file
- //SAFETY /tempfiles get 2 .argindex //true .forceput
-} .bind executeonly odef
-
% If we are running in SAFER mode, lock things down
SAFER { .setsafeglobal } if
+/SAFERUndefinePostScriptOperators {
+ [
+ % Used by our own test suite files
+ /.pushpdf14devicefilter % transparency-example.ps
+ /.poppdf14devicefilter % transparency-example.ps
+ /.setopacityalpha % transparency-example.ps
+ /.setshapealpha % transparency-example.ps
+ /.endtransparencygroup % transparency-example.ps
+ /.setdotlength % Bug687720.ps
+ /.sort /.setdebug /.mementolistnewblocks /getenv
+
+ /.makeoperator /.setCPSImode % gs_cet.ps, this won't work on cluster with -dSAFER
+
+ /unread
+ ]
+ {systemdict exch .forceundef} forall
+
+ //systemdict /SAFERUndefinePostScriptOperators .forceundef
+} .bind executeonly def % must be bound and hidden for .forceundef
+
/UndefinePostScriptOperators {
-%% This list is of Display PostScript operators. We believe that Display PostScript
-%% was never fully implemented and the only known user, GNUStep, is no longer
-%% using it. So lets remove it.
-[
-/condition /currentcontext /detach /.fork /join /.localfork /lock /monitor /notify
-/wait /yield /.currentscreenphase /.setscreenphase /.image2 /eoviewclip /initviewclip
-/viewclip /viewclippath /defineusername
-%% NeXT DPS extensions
-/currentalpha /setalpha /.alphaimage /composite /compositerect /dissolve /sizeimagebox /.sizeimageparams
-]
-{systemdict exch .forceundef} forall
+ %% This list is of Display PostScript operators. We believe that Display PostScript
+ %% was never fully implemented and the only known user, GNUStep, is no longer
+ %% using it. So lets remove it.
+ [
+ /condition /currentcontext /detach /.fork /join /.localfork /lock /monitor /notify
+ /wait /yield /.currentscreenphase /.setscreenphase /.image2 /eoviewclip /initviewclip
+ /viewclip /viewclippath /defineusername
+ %% NeXT DPS extensions
+ /currentalpha /setalpha /.alphaimage /composite /compositerect /dissolve /sizeimagebox /.sizeimageparams
+ ]
+ {systemdict exch .forceundef} forall
-%% This list is of operators which no longer appear to be used, and which we do not believe
-%% to have any real use. For now we will undefine the operstors so they cannot easily be used
-%% but can be easily restored (just delete the name from the list in the array). In future
-%% we may remove the operator and the code implementation entirely.
-[
-/.bitadd /.charboxpath /.cond /.countexecstack /.execstack /.runandhide /.popdevicefilter
-/.execfile /.filenamesplit /.file_name_parent
-/.setdefaultmatrix /.isprocfilter /.unread /.psstringencode
-/.buildsampledfunction /.isencapfunction /.currentaccuratecurves /.currentcurvejoin /.currentdashadapt /.currentdotlength
-/.currentlimitclamp /.dotorientation /.setaccuratecurves /.setcurvejoin /.setdashadapt /.setdotorientation
-/.setlimitclamp /.currentscreenlevels /.dashpath /.pathbbox /.identeq /.identne /.tokenexec /.forgetsave /.pantonecallback
+ %% This list is of operators which no longer appear to be used, and which we do not believe
+ %% to have any real use. For now we will undefine the operstors so they cannot easily be used
+ %% but can be easily restored (just delete the name from the list in the array). In future
+ %% we may remove the operator and the code implementation entirely.
+ [
+ /.bitadd /.charboxpath /.cond /.countexecstack /.execstack /.runandhide /.popdevicefilter
+ /.execfile /.filenamesplit /.file_name_parent
+ /.setdefaultmatrix /.isprocfilter /.unread /.psstringencode
+ /.buildsampledfunction /.isencapfunction /.currentaccuratecurves /.currentcurvejoin /.currentdashadapt /.currentdotlength
+ /.currentlimitclamp /.dotorientation /.setaccuratecurves /.setcurvejoin /.setdashadapt /.setdotorientation
+ /.setlimitclamp /.currentscreenlevels /.dashpath /.pathbbox /.identeq /.identne /.tokenexec /.forgetsave /.pantonecallback
-%% Used by our own test suite files
-%%/.setdotlength % Bug687720.ps
-]
-{systemdict exch .forceundef} forall
+ %% Used by our own test suite files
+ %%/.setdotlength % Bug687720.ps
+ ]
+ {systemdict exch .forceundef} forall
-%% This list of operators are used internally by various parts of the Ghostscript startup code.
-%% Since each operator is a potential security vulnerability, and any operator listed here
-%% is not required once the initislisation is complete and functions are bound, we undefine
-%% the ones that aren't needed at runtime.
-[
-/.callinstall /.callbeginpage /.callendpage
-/.currentstackprotect /.setstackprotect /.errorexec /.finderrorobject /.installsystemnames /.bosobject /.fontbbox
-/.type1execchar /.type2execchar /.type42execchar /.setweightvector /.getuseciecolor /processcolors /.includecolorspace
-/.execn /.instopped /.stop /.stopped /.setcolorrendering /.setdevicecolorrendering /.buildcolorrendering1 /.builddevicecolorrendering1
-/.TransformPQR_scale_WB0 /.TransformPQR_scale_WB1 /.TransformPQR_scale_WB2 /.currentoverprintmode /.copydevice2
-/.devicename /.doneshowpage /.getbitsrect /.getdevice /.getdefaultdevice /.getdeviceparams /.gethardwareparams
-/makewordimagedevice /.outputpage /.putdeviceparams /.setdevice /.currentshowpagecount
-/.setpagedevice /.currentpagedevice /.knownundef /.setmaxlength /.rectappend /.initialize_dsc_parser /.parse_dsc_comments
-/.fillCIDMap /.fillIdentityCIDMap /.buildcmap /.filenamelistseparator /.libfile /.getfilename
-/.file_name_combine /.file_name_is_absolute /.file_name_separator /.file_name_directory_separator /.file_name_current /.filename
-/.peekstring /.writecvp /.subfiledecode /.setupUnicodeDecoder /.jbig2makeglobalctx /.registerfont /.parsecff
-/.getshowoperator /.getnativefonts /.beginform /.endform /.get_form_id /.repeatform /.reusablestream /.rsdparams
-/.buildfunction /.currentfilladjust2 /.setfilladjust2 /.sethpglpathmode /.currenthpglpathmode
-/.currenthalftone /.sethalftone5 /.image1 /.imagemask1 /.image3 /.image4
-/.getiodevice /.getdevparms /.putdevparams /.bbox_transform /.matchmedia /.matchpagesize /.defaultpapersize
-/.oserrno /.setoserrno /.oserrorstring /.getCPSImode
-/.getscanconverter /.setscanconverter /.type1encrypt /.type1decrypt/.languagelevel /.setlanguagelevel /.eqproc /.fillpage /.buildpattern1 /.saslprep
-/.buildshading1 /.buildshadin2 /.buildshading3 /.buildshading4 /.buildshading5 /.buildshading6 /.buildshading7 /.buildshadingpattern
-/.argindex /.bytestring /.namestring /.stringbreak /.stringmatch /.globalvmarray /.globalvmdict /.globalvmpackedarray /.globalvmstring
-/.localvmarray /.localvmdict /.localvmpackedarray /.localvmstring /.systemvmarray /.systemvmdict /.systemvmpackedarray /.systemvmstring /.systemvmfile /.systemvmlibfile
-/.systemvmSFD /.settrapparams /.currentsystemparams /.currentuserparams /.getsystemparam /.getuserparam /.setsystemparams /.setuserparams
-/.checkpassword /.locale_to_utf8 /.currentglobal /.gcheck /.imagepath
+ %% This list of operators are used internally by various parts of the Ghostscript startup code.
+ %% Since each operator is a potential security vulnerability, and any operator listed here
+ %% is not required once the initialisation is complete and functions are bound, we undefine
+ %% the ones that aren't needed at runtime.
+ [
+ /.callinstall /.callbeginpage /.callendpage
+ /.currentstackprotect /.setstackprotect /.errorexec /.finderrorobject /.installsystemnames /.bosobject /.fontbbox
+ /.type1execchar /.type2execchar /.type42execchar /.setweightvector /.getuseciecolor /processcolors /.includecolorspace
+ /.execn /.instopped /.stop /.stopped /.setcolorrendering /.setdevicecolorrendering /.buildcolorrendering1 /.builddevicecolorrendering1
+ /.TransformPQR_scale_WB0 /.TransformPQR_scale_WB1 /.TransformPQR_scale_WB2 /.currentoverprintmode /.copydevice2
+ /.devicename /.doneshowpage /.getbitsrect /.getdevice /.getdefaultdevice /.getdeviceparams /.gethardwareparams
+ /makewordimagedevice /.outputpage /.putdeviceparams /.setdevice /.currentshowpagecount
+ /.setpagedevice /.currentpagedevice /.knownundef /.setmaxlength /.rectappend /.initialize_dsc_parser /.parse_dsc_comments
+ /.fillCIDMap /.fillIdentityCIDMap /.buildcmap /.filenamelistseparator /.libfile /.getfilename
+ /.file_name_combine /.file_name_is_absolute /.file_name_separator /.file_name_directory_separator /.file_name_current /.filename
+ /.peekstring /.writecvp /.subfiledecode /.setupUnicodeDecoder /.jbig2makeglobalctx /.registerfont /.parsecff
+ /.getshowoperator /.getnativefonts /.beginform /.endform /.get_form_id /.repeatform /.reusablestream /.rsdparams
+ /.buildfunction /.currentfilladjust2 /.setfilladjust2 /.sethpglpathmode /.currenthpglpathmode
+ /.currenthalftone /.sethalftone5 /.image1 /.imagemask1 /.image3 /.image4
+ /.getiodevice /.getdevparms /.putdevparams /.bbox_transform /.matchmedia /.matchpagesize /.defaultpapersize
+ /.oserrno /.setoserrno /.oserrorstring /.getCPSImode
+ /.getscanconverter /.setscanconverter /.type1encrypt /.type1decrypt/.languagelevel /.setlanguagelevel /.eqproc /.fillpage /.buildpattern1 /.saslprep
+ /.buildshading1 /.buildshading2 /.buildshading3 /.buildshading4 /.buildshading5 /.buildshading6 /.buildshading7 /.buildshadingpattern
+ /.shfill /.argindex /.bytestring /.namestring /.stringbreak /.stringmatch /.globalvmarray /.globalvmdict /.globalvmpackedarray /.globalvmstring
+ /.localvmarray /.localvmdict /.localvmpackedarray /.localvmstring /.systemvmarray /.systemvmdict /.systemvmpackedarray /.systemvmstring /.systemvmfile /.systemvmlibfile
+ /.systemvmSFD /.settrapparams /.currentsystemparams /.currentuserparams /.getsystemparam /.getuserparam /.setsystemparams /.setuserparams
+ /.checkpassword /.locale_to_utf8 /.currentglobal /.gcheck /.imagepath
-% Used by a free user in the Library of Congress. Apparently this is used to
-% draw a partial page, which is then filled in by the results of a barcode
-% scanner and SQL database lookup. Its not clear to us exactly why this needs to be
-% done as a partial page, but its easiest to restore the operator, and it seems like
-% its a reasonably safe operator to restore, for the *very* few devices on which
-% it will have any effect. Currently this uses the 'sync_outptu' device method
-% to transfer the partial page, in future we may use a spec_op instead.
-%/flushpage
+ % Used by a free user in the Library of Congress. Apparently this is used to
+ % draw a partial page, which is then filled in by the results of a barcode
+ % scanner and SQL database lookup. Its not clear to us exactly why this needs to be
+ % done as a partial page, but its easiest to restore the operator, and it seems like
+ % its a reasonably safe operator to restore, for the *very* few devices on which
+ % it will have any effect. Currently this uses the 'sync_output' device method
+ % to transfer the partial page, in future we may use a spec_op instead.
+ %/flushpage
-% Used by our own test suite files
-%/.fileposition %image-qa.ps
-%/.makeoperator /.setCPSImode % gs_cet.ps
+ % Used by our own test suite files
+ %/.fileposition %image-qa.ps
+ %/.makeoperator /.setCPSImode % gs_cet.ps
-% Either our code uses these in ways which mean they can't be undefined, or they are used directly by
-% test files/utilities, or engineers expressed a desire to keep them visible.
-%
-%/currentdevice /.sort /.buildfont0 /.buildfont1 /.buildfont2 /.buildfont3 /.buildfont4 /.buildfont9 /.buildfont10 /.buildfont11
-%/.buildfotn32 /.buildfont42 /.type9mapcid /.type11mapcid /.swapcolors
-%/currentdevice /.quit /.setuseciecolor /.needinput /.setoverprintmode /.special_op /.dicttomark /.knownget
-%/.FAPIavailable /.FAPIpassfont /.FAPIrebuildfont /.FAPIBuildGlyph /.FAPIBuildChar /.FAPIBuildGlyph9
-%/.tempfile /.numicc_components /.set_outputintent /.max /.min /.shfill /.vmreclaim /.getpath /.setglobal
-%/.setdebug /.mementolistnewblocks /getenv
-]
-{systemdict exch .forceundef} forall
+ % Either our code uses these in ways which mean they can't be undefined, or they are used directly by
+ % test files/utilities, or engineers expressed a desire to keep them visible.
+ %
+ %/currentdevice /.sort /.buildfont0 /.buildfont1 /.buildfont2 /.buildfont3 /.buildfont4 /.buildfont9 /.buildfont10 /.buildfont11
+ %/.buildfotn32 /.buildfont42 /.type9mapcid /.type11mapcid /.swapcolors
+ %/currentdevice /.quit /.setuseciecolor /.needinput /.setoverprintmode /.special_op /.dicttomark /.knownget
+ %/.FAPIavailable /.FAPIpassfont /.FAPIrebuildfont /.FAPIBuildGlyph /.FAPIBuildChar /.FAPIBuildGlyph9
+ %/.tempfile /.numicc_components /.set_outputintent /.max /.min /.vmreclaim /.getpath /.setglobal
+ %/.setdebug /.mementolistnewblocks /getenv
+ ]
+ {systemdict exch .forceundef} forall
-//systemdict /UndefinePostScriptOperators .forceundef
-} bind def
+ //systemdict /UndefinePostScriptOperators .forceundef
+} .bind executeonly def % must be bound and hidden for .forceundef
/UndefinePDFOperators {
-%% This list of operators are used internally by various parts of the Ghostscript PDF interpreter.
-%% Since each operator is a potential security vulnerability, and any operator listed here
-%% is not required once the initislisation is complete and functions are bound, we undefine
-%% the ones that aren't needed at runtime.
-[
-/.pdfawidthshow /.pdfwidthshow /.currentblackptcomp /.setblackptcomp
-/.setfillcolor /.setfillcolorspace /.setstrokecolor /.setstrokecolorspace /.currentrenderingintent /.setrenderingintent
-/.currenttextrenderingmode /.settextspacing /.currenttextspacing /.settextleading /.currenttextleading
-/.settextrise /.currenttextrise /.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling
-/.settextlinematrix /.currenttextlinematrix /.currenttextmatrix /.settextmatrix /.currentblendmode
-/.currentopacityalpha /.currentshapealpha /.currenttextknockout
-/.pushextendedgstate /.popextendedgstate /.begintransparencytextgroup
-/.endtransparencytextgroup /.begintransparencymaskgroup /.begintransparencymaskimage /.endtransparencymask /.image3x
-/.abortpdf14devicefilter /.pdfinkpath /.pdfFormName /.setstrokeconstantalpha
-/.setfillconstantalpha /.setalphaisshape /.currentalphaisshape
-/.settextspacing /.currenttextspacing /.settextleading /.currenttextleading /.settextrise /.currenttextrise
-/.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling /.setPDFfontsize /.currentPDFfontsize
+ %% This list of operators are used internally by various parts of the Ghostscript PDF interpreter.
+ %% Since each operator is a potential security vulnerability, and any operator listed here
+ %% is not required once the initislisation is complete and functions are bound, we undefine
+ %% the ones that aren't needed at runtime.
+ %% This function is only called if DELAYBIND is true. It is a copy of the code at the end of pdf_main.ps
+ %% and must be maintained in parallel with it.
+ [
+ /.pdfawidthshow /.pdfwidthshow /.currentblackptcomp /.setblackptcomp
+ /.setfillcolor /.setfillcolorspace /.setstrokecolor /.setstrokecolorspace /.currentrenderingintent /.setrenderingintent
+ /.currenttextrenderingmode /.settextspacing /.currenttextspacing /.settextleading /.currenttextleading
+ /.settextrise /.currenttextrise /.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling
+ /.settextlinematrix /.currenttextlinematrix /.currenttextmatrix /.settextmatrix /.currentblendmode
+ /.currentopacityalpha /.currentshapealpha /.currenttextknockout
+ /.pushextendedgstate /.popextendedgstate /.begintransparencytextgroup
+ /.endtransparencytextgroup /.begintransparencymaskgroup /.begintransparencymaskimage /.endtransparencymask /.image3x
+ /.abortpdf14devicefilter /.pdfinkpath /.pdfFormName /.setstrokeconstantalpha
+ /.setfillconstantalpha /.setalphaisshape /.currentalphaisshape
+ /.settextspacing /.currenttextspacing /.settextleading /.currenttextleading /.settextrise /.currenttextrise
+ /.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling /.setPDFfontsize /.currentPDFfontsize
+ /.setdistillerparams
-% Used by our own test suite files
-%/.pushpdf14devicefilter % transparency-example.ps
-%/.poppdf14devicefilter % transparency-example.ps
-%/.setopacityalpha % transparency-example.ps
-%/.setshapealpha % transparency-example.ps
-%/.endtransparencygroup % transparency-example.ps
+ % undefining these causes errors/incorrect output
+ %/.settextrenderingmode /.setblendmode /.begintransparencygroup /.settextknockout /check_r6_password /.setstrokeoverprint /.setfilloverprint
+ %/.currentstrokeoverprint /.currentfilloverprint /.currentfillconstantalpha /.currentstrokeconstantalpha
+ ]
+ {systemdict exch .forceundef} forall
+ //systemdict /UndefinePDFOperators .forceundef
+} .bind executeonly def % must be bound and hidden for .forceundef
-% undefining these causes errors/incorrect output
-%/.settextrenderingmode /.setblendmode /.begintransparencygroup /.settextknockout /check_r6_password /.setstrokeoverprint /.setfilloverprint
-%/.currentstrokeoverprint /.currentfilloverprint /.currentfillconstantalpha /.currentstrokeconstantalpha
-]
-{systemdict exch .forceundef} forall
-//systemdict /UndefinePDFOperators .forceundef
-} bind def
-
% If we delayed binding, make it possible to do it later.
/.bindnow {
currentuserparams /IdiomRecognition .knownget {
@@ -2262,8 +2284,11 @@
//systemdict /.delaybind {} .forceput % reclaim the space
//systemdict /.bindnow .forceundef % ditto
put
-% //systemdict /UndefinePostScriptOperators get exec
-% //systemdict /UndefinePDFOperators get exec
+ SAFER {
+ //systemdict /SAFERUndefinePostScriptOperators get exec
+ } if
+ //systemdict /UndefinePostScriptOperators get exec
+ //systemdict /UndefinePDFOperators get exec
//systemdict /.forcecopynew .forceundef % remove temptation
//systemdict /.forcedef .forceundef % ditto
//systemdict /.forceput .forceundef % ditto
@@ -2375,6 +2400,9 @@
%% If we are using DELAYBIND we have to defer the undefinition
%% until .bindnow.
DELAYBIND not {
+ SAFER {
+ //systemdict /SAFERUndefinePostScriptOperators get exec
+ } if
//systemdict /UndefinePostScriptOperators get exec
//systemdict /UndefinePDFOperators .forceundef
} if
@@ -2385,6 +2413,7 @@
{ pop NOGC not { 2 .vmreclaim 0 vmreclaim } if
} if
DELAYBIND not {
+ systemdict /.bindnow .undef % We only need this for DELAYBIND
systemdict /.forcecopynew .undef % remove temptation
systemdict /.forcedef .undef % ditto
systemdict /.forceput .undef % ditto
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_lev2.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -163,7 +163,8 @@
% Set them again to the new values. From here on, we are safe,
% since a context switch will consult userparams.
.setuserparams
-} .bind def
+} .bind executeonly def % must be bound and hidden for .forceput
+
/setuserparams { % <dict> setuserparams -
.setuserparams2
} .bind odef
@@ -1072,10 +1073,10 @@
% the values given into an array. This is consistent with what we see when
% testing with Adobe Distiller 6.0.
% <cyan> <magenta> <yellow> <black> <key> findcmykcustomcolor <array>
-/findcmykcustomcolor { 5 array astore } bind def
+/findcmykcustomcolor { 5 array astore } bind executeonly def
% The following isn't documented by Adobe, but was found in Adobe Illustrator (R)
% Version 7.0 Full Prolog
-/findrgbcustomcolor { 4 array astore } bind def
+/findrgbcustomcolor { 4 array astore } bind executeonly def
% Build a tint transform function for use by setcustomcolor. This function
% is for a Separation color space which has either a DeviceCMYK base color space
@@ -1104,7 +1105,7 @@
]
} ifelse
cvx bind exch pop % Make executable and remove the input array
-} bind def
+} bind executeonly def
% Construct the colorspace array to be used by setcolorspace from the array
% result of either findcmykcustomcolor or findrgbcustomcolor.
@@ -1124,7 +1125,7 @@
]
} ifelse
exch pop % remove the input array
-} bind def
+} bind executeonly def
% Set a custom color based upon a tint and array which describes the custom
% color. See findcmykcustomcolor. First we create and then set a Separation
@@ -1133,14 +1134,51 @@
% for some reason, so an alternate operational mode is tolerated:
% null setcustomcolor -
/setcustomcolor % <array> <tint> setcustomcolor -
-{ dup //null ne {
+{
+ dup //null eq {
+ pop pop
+ }{
+ % Check that the tint is a number between 0 and 1
+ dup type dup /integertype eq exch /realtype eq or not {
+ /setcustomcolor /typecheck cvx signalerror
+ } if
+ dup 1 le not {
+ /setcustomcolor /rangecheck cvx signalerror
+ } if
+ dup 0 ge not {
+ /setcustomcolor /rangecheck cvx signalerror
+ } if
+
+ % The array is supposed to be the result of fundcmykcustomcolor. Our
+ % implementation just pushes all the arguments into the array and that's
+ % what buildcolorspacearray expects. So check that now.
+ % Starting with the first N-1 elemenst which must be numbers where 0 <= x <= 1
+ 1 index
+ 0 1 2 index length 2 sub
+ {
+ 1 index exch get dup
+ type dup /integertype eq exch /realtype eq or not {
+ /setcustomcolor /typecheck cvx signalerror
+ } if
+ dup
+ 1 le not {
+ /setcustomcolor /rangecheck cvx signalerror
+ } if
+ 0 ge not {
+ /setcustomcolor /rangecheck cvx signalerror
+ } if
+ } for
+
+ % Finally, check the last element of the array, which must be a string.
+ dup length 1 sub get type /stringtype eq not {
+ /setcustomcolor /typecheck cvx signalerror
+ } if
+
exch //buildcolorspacearray exec
setcolorspace % Set the Separation color space as current
setcolor % Set the tint as the current color
- }
- { pop pop } % 'null' as the tint is ignored. pop tint and array
- ifelse
-} bind def
+ } ifelse
+} bind executeonly def
% This proc is supposed to implement a version of overprinting. TN 5044 says
% that this proc is not used by any shipping host-based application. We have
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_ll3.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -440,6 +440,11 @@
/shfill .systemvar /undefined signalerror
} ifelse
} bind def
+
+/.buildshading_and_shfill {
+ .buildshading .shfill
+} bind def
+
systemdict /.reuseparamdict undef
/.buildpattern2 { % <template> <matrix> .buildpattern2
@@ -464,7 +469,7 @@
% Currently, .shfill requires that the color space
% in the pattern be the current color space.
% Disable overprintmode for shfill
- { dup gsave 0 .setoverprintmode .buildshading .shfill } stopped
+ { dup gsave 0 .setoverprintmode .buildshading_and_shfill } stopped
grestore {
/$error .systemvar /errorinfo 2 copy known {
pop pop
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_pdfwr.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -197,7 +197,7 @@
/ColorConversionStrategy /UseDeviceIndependentColor
/ColorImageDownsampleType /Average
/ColorImageResolution 300
- /CompatibilityLevel 1.5
+ /CompatibilityLevel 1.7
/CreateJobTicket //true
/DoThumbnails //false
/EmbedAllFonts //true
@@ -224,7 +224,7 @@
/ColorConversionStrategy /LeaveColorUnchanged
/ColorImageDownsampleType /Bicubic
/ColorImageResolution 300
- /CompatibilityLevel 1.5
+ /CompatibilityLevel 1.7
/CreateJobTicket //true
/DoThumbnails //true
/EmbedAllFonts //true
@@ -660,8 +660,7 @@
{
pop
} ifelse
-}
-bind def
+} .bind executeonly def % must be bound and hidden for .forceput
% Use the DSC processing hook to pass DSC comments to the driver.
% We use a pseudo-parameter named DSC whose value is an array:
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_setpd.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -95,12 +95,22 @@
{ % Since setpagedevice doesn't create new device objects,
% we must (carefully) reinstall the old parameters in
% the same device.
- .currentpagedevice pop //null currentdevice //null .trysetparams
+ .currentpagedevice pop //null currentdevice //null
+ { .trysetparams } .internalstopped
+ {
+ //null
+ } if
dup type /booleantype eq
{ pop pop }
- { % This should never happen!
+ {
SETPDDEBUG { (Error in .trysetparams!) = pstack flush } if
- cleartomark pop pop pop
+ {cleartomark pop pop pop} .internalstopped pop
+ % if resetting the entire device state failed, at least put back the
+ % security related key
+ currentdevice //null //false mark /.LockSafetyParams
+ currentpagedevice /.LockSafetyParams .knownget not
+ {systemdict /SAFER .knownget not {//false} } if
+ .putdeviceparamsonly
/.installpagedevice cvx /rangecheck signalerror
}
ifelse pop pop
@@ -107,15 +117,19 @@
% A careful reading of the Red Book reveals that an erasepage
% should occur, but *not* an initgraphics.
erasepage .beginpage
- } bind def
+ } bind executeonly def
/.uninstallpagedevice
- { 2 .endpage { .currentnumcopies //false .outputpage } if
+ {
+ {2 .endpage { .currentnumcopies //false .outputpage } if} .internalstopped pop
nulldevice
} bind def
(%grestorepagedevice) cvn
- { .uninstallpagedevice grestore .installpagedevice
+ {
+ .uninstallpagedevice
+ grestore
+ .installpagedevice
} bind def
(%grestoreallpagedevice) cvn
@@ -204,8 +218,8 @@
mark
% First put the device's default page size in slot 0
% This satifies those that have devices built with a4 as the default
- 0 mark /PageSize currentdevice /PageSize gsgetdeviceprop .dicttomark
-
+ 0 mark /PageSize /GetDeviceParam .special_op
+ not {/setpagedevice .systemvar /configurationerror signalerror} if .dicttomark
% Only populate the other entries if we aren't FIXEDMEDIA
FIXEDMEDIA not {
statusdict /.pagetypenames get {
@@ -624,7 +638,7 @@
{ 4 index 3 1 roll .forceput }
{ 3 index exch .undef }
ifelse
- } .bind
+ } .bind executeonly % must be bound and hidden for .forceput
7 { % For PageSize only, just impose the request.
1 index /PageSize eq
{ pop pop 1 index /PageSize 7 put }
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/gs_typ32.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -85,7 +85,7 @@
{ dup /FontType 32 .forceput
dup /CharStrings 20 dict .forceput
1 index exch .buildfont32 exch pop
-} bind def
+} .bind executeonly def % must be bound and hidden for .forceput
end % .cidfonttypes
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_base.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -28,14 +28,14 @@
% Define the name interpretation dictionary for reading values.
/valueopdict mark
- (<<) cvn { mark } bind % don't push an actual mark!
+ (<<) cvn { mark } bind executeonly % don't push an actual mark!
(>>) cvn { { .dicttomark } stopped {
( **** Error: File has an unbalanced >> \(close dictionary\).\n)
pdfformaterror
( Output may be incorrect.\n) pdfformaterror
} if
- } bind
- ([) cvn { mark } bind % ditto
+ } bind executeonly
+ ([) cvn { mark } bind executeonly % ditto
(]) cvn dup load
% /true true % see .pdfexectoken below
% /false false % ibid.
@@ -62,7 +62,7 @@
pop
} ifelse
} if
-} bind def
+} bind executeonly def
/name#escape % <post> <(#)> <pre> name#escape <string>
{ exch pop
1 index 2 () /SubFileDecode filter dup (x) readhexstring
@@ -77,7 +77,7 @@
exch 2 1 index length 2 sub getinterval
} ifelse
(#) search { name#escape } if concatstrings
-} bind def
+} bind executeonly def
/num-chars-dict mark (0123456789-.) {dup} forall .dicttomark readonly def
@@ -124,7 +124,7 @@
pop pop count exch sub { pop } repeat % pop all the operands
} if
( Output may be incorrect.\n) pdfformaterror
-} bind def
+} bind executeonly def
currentdict /num-chars-dict .undef
@@ -218,7 +218,7 @@
} ifelse
} ifelse
} ifelse
-} bind def
+} bind executeonly def
/PDFScanRules_true << /PDFScanRules //true >> def
/PDFScanRules_null << /PDFScanRules //null >> def
/.pdfrun { % <file> <opdict> .pdfrun -
@@ -278,7 +278,7 @@
.packtomark cvx % file { { {cnt <<>> file ... } loop } stopped /PDFsource PDFsource store {...} if}
/PDFsource 3 -1 roll store % {...}
exec
-} bind def
+} bind executeonly def
% Execute a file, like .pdfrun, for a marking context.
% This temporarily rebinds LocalResources and DefaultQstate.
@@ -289,7 +289,7 @@
3 .execn
/DefaultQstate exch store
/LocalResources exch store
-} bind def
+} bind executeonly def
% Get the depth of the PDF operand stack. The caller sets pdfemptycount
% before calling .pdfrun or .pdfruncontext. It is initially set by
@@ -298,7 +298,7 @@
% of .pdfrun{context} which have not been checked for opstack depth.
/.pdfcount { % - .pdfcount <count>
count pdfemptycount sub
-} bind def
+} bind executeonly def
% Read a token, but simply return false (no token read) in the case of an
% error. This is messy because 'token' either may or may not pop its operand
@@ -306,12 +306,12 @@
% on whether the source is a file or a string. To avoid closing the file
% check for '{' before trying 'token'.
/token_nofail_dict mark
- ( ) { dup ( ) readstring pop pop } bind
+ ( ) { dup ( ) readstring pop pop } bind executeonly
(\t) 1 index
(\r) 1 index
(\n) 1 index
(\000) 1 index
- ({) { //null //true exit } bind
+ ({) { //null //true exit } bind executeonly
.dicttomark def
/token_nofail { % <file|string> token_nofail false
@@ -341,7 +341,7 @@
ifelse
} ifelse
} ifelse
-} bind def
+} bind executeonly def
currentdict /token_nofail_dict .undef
@@ -384,7 +384,7 @@
/GlobalObjects 20 dict def
.setglobal
/IsGlobal 0 string def
-} bind def
+} bind executeonly def
% Grow the tables to a specified size.
/growPDFobjects { % <minsize> growPDFobjects -
@@ -401,7 +401,7 @@
dup IsGlobal exch string dup 3 1 roll copy pop /IsGlobal exch def
} if
pop
-} bind def
+} bind executeonly def
% We represent an unresolved object reference by a procedure of the form
% {obj# gen# resolveR}. This is not a possible PDF object, because PDF has
@@ -429,7 +429,7 @@
} { % Else object is not executable.
exch pop //true % Therefore it must have been resolved.
} ifelse
-} bind def
+} bind executeonly def
/oforce /exec load def
/oget { % <array> <index> oget <object>
% <dict> <key> oget <object>
@@ -437,15 +437,15 @@
% object back into the referring slot. In order to support
% PDF linearization, we no longer do this.
get oforce
-} bind def
+} bind executeonly def
/oforce_array { % <array> oforce_array <array>
[ exch { oforce } forall ]
-} bind def
+} bind executeonly def
/oforce_elems { % <array> oforce_elems <first> ... <last>
{ oforce } forall
-} bind def
+} bind executeonly def
%% Safe recursion maintain a dicitonary in which we record all the object numbers
%% of objects which we resolve. Whenever it resolves a new one, it checks all the
@@ -485,11 +485,11 @@
<< exch 2 index <<>> copy exch { 3 -1 roll exch safe_recursive 3 -1 roll oforce 3 1 roll exch } forall pop>>
} if
} ifelse
-} bind def
+} bind executeonly def
/oforce_recursive {
<< >> exch safe_recursive exch pop
-} bind def
+} bind executeonly def
% A null value in a dictionary is equivalent to an omitted key;
% we must check for this specially.
@@ -501,12 +501,12 @@
} {
//false
} ifelse
-} bind def
+} bind executeonly def
% See /knownoget above.
/oknown { % <dict> <key> oknown <bool>
.knownget { oforce //null ne } { //false } ifelse
-} bind def
+} bind executeonly def
/knownogetdict { % <dict> <key> knownogetdict <dict> true
% <dict> <key> knownogetdict false
@@ -513,7 +513,7 @@
//knownoget exec dup {
1 index type /dicttype ne { pop pop //false } if
} if
-} bind def
+} bind executeonly def
% PDF 1.1 defines a 'foreign file reference', but not its meaning.
% Per the specification, we convert these to nulls.
@@ -520,7 +520,7 @@
/F { % <file#> <object#> <generation#> F <object>
% Some PDF 1.1 files use F as a synonym for f!
.pdfcount 3 lt { f } { pop pop pop //null } ifelse
-} bind def
+} bind executeonly def
% Verify the generation number for a specified object
% Note: The values in Generations is the generation number plus 1.
@@ -550,7 +550,7 @@
% Ghostscript tolerant of of bad generation numbers.
//true
} ifelse
-} bind def
+} bind executeonly def
/R { % <object#> <generation#> R <object>
%% Parameter validation; this should not be required but we have found files
%% (Bug 697351) which are corrupted in ways that mean we see a 'R' in a stream
@@ -567,7 +567,7 @@
( **** Error: indirect object reference \(R\) encountered with invalid arguments.) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
} ifelse
-} bind def
+} bind executeonly def
% If we encounter an object definition while reading sequentially,
% we just store it away and keep going.
@@ -578,7 +578,7 @@
/obj { % <object#> <generation#> obj <object>
PDFfile objopdict .pdfrun
-} bind def
+} bind executeonly def
/endobj { % <object#> <generation#> <object> endobj <object>
@@ -631,7 +631,7 @@
pop pop //null
} ifelse
}ifelse
-} bind def
+} bind executeonly def
% When resolving an object reference in an object stream, we stop at
% the end of file. Note: Objects in an object stream do not have either
@@ -638,12 +638,12 @@
% a starting 'obj' or and ending 'endobj'.
/resolveobjstreamopdict mark
valueopdict { } forall
- (%%EOF) cvn { exit } bind
+ (%%EOF) cvn { exit } bind executeonly
/endobj { % bug 689795
( **** Error: Objects in an object stream should not have 'endobj'.\n)
pdfformaterror
( Output may be incorrect.\n) pdfformaterror
- } bind
+ } bind executeonly
.dicttomark readonly def
% Note: This version of this function is not currently being used.
@@ -722,7 +722,7 @@
Objects exch 2 index exch put % Put object into Objects array
} if
pop pop pop pop % Clear stack
-} bind def
+} bind executeonly def
/no_debug_dict <<
/PDFDEBUG //false
@@ -792,7 +792,7 @@
pop % Remove loop index
} for
pop pop pop pop pop % Remove strm# objstream, N, (obj#], and [objects]
-} bind def
+} bind executeonly def
currentdict /no_debug_dict undef
@@ -803,7 +803,7 @@
( **** Error: Encountered 'xref' while expecting 'endobj'.\n) pdfformaterror
( Treating this as a missing 'endobj', output may be incorrect.\n) pdfformaterror
endobj exit
- } bind
+ } bind executeonly
/endstream { endobj exit } bind
/endobj { endobj exit } bind
/endjobj { % Bug 689876.
@@ -810,12 +810,12 @@
( **** Error: Operator 'endobj' is misspelled as 'endjobj'.\n) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
endobj exit
- } bind
+ } bind executeonly
/enbobj { % Bug 690397.
( **** Error: Operator 'endobj' is misspelled as 'enbobj'.\n) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
endobj exit
- } bind
+ } bind executeonly
/obj {
% OmniForm generates PDF file with endobj missing in some
% objects. AR ignores this. So we have to do it too.
@@ -822,7 +822,7 @@
( **** Error: Encountered 'obj' while expecting 'endobj'.\n) pdfformaterror
( Treating this as a missing 'endobj', output may be incorrect.\n) pdfformaterror
pop pop endobj exit
- } bind
+ } bind executeonly
.dicttomark readonly def
/resolveR { % <object#> <generation#> resolveR <object>
@@ -896,7 +896,7 @@
}
{exch pop}
ifelse
-} bind def
+} bind executeonly def
% ================================ Streams ================================ %
@@ -1010,11 +1010,11 @@
} if
} ifelse
cvx
-} bind def
+} bind executeonly def
/endstream {
exit
-} bind def
+} bind executeonly def
% Contrary to the published PDF (1.3) specification, Acrobat Reader
% accepts abbreviated filter names everywhere, not just for in-line images,
@@ -1053,7 +1053,7 @@
% No filters: ignore parameters, if any.
pop //null { }
} ifelse
-} bind def
+} bind executeonly def
/filtername { % <filtername> filtername <filtername'>
//unabbrevfilterdict 1 index .knownget { exch pop } if
dup /Filter resourcestatus { pop pop } {
@@ -1067,7 +1067,7 @@
% provide a filter that returns EOF (no data)
/.EOFDecode
} ifelse
-} bind def
+} bind executeonly def
/pdf_rules_dict << /PDFRules //true >> readonly def
@@ -1084,7 +1084,7 @@
//pdf_rules_dict exch
} ifelse
} if
-} bind def
+} bind executeonly def
currentdict /pdf_rules_dict undef
@@ -1114,7 +1114,7 @@
} ifelse
} ifelse
forall exch pop
-} bind def
+} bind executeonly def
% JBIG2 streams have an optional 'globals' stream obj for
% sharing redundant data between page images. Here we resolve
@@ -1136,7 +1136,7 @@
1 index exch
/.jbig2globalctx exch put
} if
-} bind def
+} bind executeonly def
% Resolve a stream dictionary to a PostScript stream.
% Streams with no filters require special handling:
@@ -1197,17 +1197,17 @@
} ifelse
% Stack: readdata? dict file
exch pop exch pop
-} bind def
+} bind executeonly def
% ============================ Name/number trees ============================ %
/nameoget { % <nametree> <key> nameoget <obj|null>
exch /Names exch .treeget
-} bind def
+} bind executeonly def
/numoget { % <numtree> <key> numoget <obj|null>
exch /Nums exch .treeget
-} bind def
+} bind executeonly def
/.treeget { % <key> <leafkey> <tree> .treeget <obj|null>
dup /Kids knownoget {
@@ -1215,7 +1215,7 @@
} {
exch oget .leafget
} ifelse
-} bind def
+} bind executeonly def
/.branchget { % <key> <leafkey> <kids> .branchget <obj|null>
dup length 0 eq {
@@ -1237,7 +1237,7 @@
} ifelse
} ifelse
} ifelse
-} bind def
+} bind executeonly def
/.leafget { % <key> <pairs> .leafget <obj|null>
dup length 2 eq {
@@ -1249,7 +1249,57 @@
3 index gt { 0 exch } { 1 index length 1 index sub } ifelse
getinterval .leafget
} ifelse
-} bind def
+} bind executeonly def
+% The following variants return tree entry whose key is closest but
+% less or equal to the given key.
+
+/numogetle { % <numtree> <key> numogetle <key obj true|false>
+ exch /Nums exch .treegetle
+} bind executeonly def
+
+/.treegetle { % <key> <leafkey> <tree> .treegetle <key obj true|false>
+ dup /Kids knownoget {
+ exch pop .branchgetle
+ } {
+ exch oget .leafgetle
+ } ifelse
+} bind executeonly def
+
+/.branchgetle { % <key> <leafkey> <kids> .branchgetle <key obj true|false>
+ dup length 0 eq {
+ pop pop pop false
+ } {
+ dup length -1 bitshift 2 copy oget
+ dup /Limits oget aload pop
+ % Stack: key leafkeyb kids mid kids[mid] min max
+ 6 index ge {
+ 5 index le {
+ exch pop exch pop .treegetle
+ } {
+ pop 0 exch getinterval .branchgetle
+ } ifelse
+ } {
+ pop 2 index length 2 index sub 1 gt {
+ pop 1 index length 1 index sub getinterval .branchgetle
+ } {
+ exch pop exch pop .treegetle
+ } ifelse
+ } ifelse
+ } ifelse
+} bind executeonly def
+
+/.leafgetle { % <key> <pairs> .leafget <obj|null>
+ dup length 2 eq {
+ dup 0 get
+ 2 index le { exch pop aload pop true } { pop pop false } ifelse
+ } {
+ dup length -1 bitshift -2 and 2 copy oget
+ % Stack: key pairs mid pairs[mid]
+ 3 index gt { 0 exch } { 1 index length 1 index sub } ifelse
+ getinterval .leafgetle
+ } ifelse
+} bind executeonly def
+
end % pdfdict
.setglobal
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -68,7 +68,7 @@
% Stack: filepos fndict data
exch dup /DataSource 4 -1 roll put
exch PDFfile exch setfileposition
-} bdef
+} bind executeonly def
/.resolvefn2 {
dup length dict .copydict
@@ -75,7 +75,7 @@
dup /C0 2 copy knownoget { put } { pop pop } ifelse
dup /C1 2 copy knownoget { put } { pop pop } ifelse
dup /N 2 copy knownoget { put } { pop pop } ifelse
-} bdef
+} bind executeonly def
/.resolvefn3 {
dup length dict .copydict
@@ -85,7 +85,7 @@
oforce .resolvefn
} forall
counttomark -1 roll astore exch pop put
-} bdef
+} bind executeonly def
/.resolvefn4 {
PDFfile fileposition exch % filepos fndict
@@ -102,7 +102,7 @@
.bind
1 index /Function 3 -1 roll put
exch PDFfile exch setfileposition
-} bdef
+} bind executeonly def
/.resolvefn { % <fndict> .resolvefn <fndict'>
dup length dict .copydict
@@ -109,24 +109,24 @@
dup /Domain 2 copy knownoget { put } { pop pop } ifelse
dup /Range 2 copy knownoget { put } { pop pop } ifelse
dup /FunctionType oget //fnrdict exch get exec
-} bdef
+} bind executeonly def
/resolvefunction { % <fndict> resolvefunction <function>
.resolvefn
PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%Function: ) print dup === flush } if } if
-} bdef
+} bind executeonly def
/resolvefnproc { % <fndict> resolvefnproc <proc>
resolvefunction .buildfunction
-} bdef
+} bind executeonly def
/resolveidfnproc { % <fndict> resolveidfnproc <proc>
dup /Identity eq { pop { } } { resolvefnproc } ifelse
-} bdef
+} bind executeonly def
/resolvedefaultfnproc { % <fndict> <default> resolved'fnproc <proc>
1 index /Default eq { exch pop } { pop resolveidfnproc } ifelse
-} bdef
+} bind executeonly def
%% A BBox where width or height (or both) is 0 should still paint one pixel
%% See the ISO 32000-2:2017 spec, section 8.7.4.3, p228 'BBox' and 8.7.3.1
@@ -140,7 +140,7 @@
2 index 0.000001 add exch pop
}if
5 -1 roll astore
-}bind def
+}bind executeonly def
% ---------------- Shadings ---------------- %
@@ -159,15 +159,15 @@
} repeat
5 -1 roll
astore
- } bind
+ } bind executeonly
/BBox {
dup dup dup aload pop normrect_elems
5 -1 roll astore
FixPatternBBox
- } bind
+ } bind executeonly
/ColorSpace {
resolvecolorspace
- } bind
+ } bind executeonly
/Function {
dup type /dicttype eq {
resolvefunction
@@ -174,10 +174,10 @@
} {
[ exch { oforce resolvefunction } forall ]
} ifelse
- } bind
+ } bind executeonly
/Extend {
mark exch {oforce} forall ]
- } bind
+ } bind executeonly
.dicttomark readonly def
/resolveshading { % <shadingstream> resolveshading <shading>
@@ -201,7 +201,7 @@
exch PDFfile exch setfileposition
dup 3 1 roll /.shading_dict exch put
} ifelse
-} bdef
+} bind executeonly def
/resolvesh { % <shname> resolvesh <shading>
% <shname> resolvesh <null>
Page /Shading rget {
@@ -218,7 +218,7 @@
} {
//null
}ifelse
-} bdef
+} bind executeonly def
% ---------------- Halftones ---------------- %
@@ -229,7 +229,7 @@
} {
1 sub dup mul exch 1 sub dup mul add 1 sub
} ifelse
- } bind
+ } bind executeonly
/Diamond {
abs exch abs 2 copy add .75 le {
dup mul exch dup mul add 1 exch sub
@@ -240,7 +240,7 @@
1 sub dup mul exch 1 sub dup mul add 1 sub
} ifelse
} ifelse
- } bind
+ } bind executeonly
/Ellipse {
abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt {
pop dup mul exch .75 div dup mul add 4 div 1 exch sub
@@ -252,27 +252,27 @@
.5 exch sub exch pop exch pop
} ifelse
} ifelse
- } bind
- /EllipseA { dup mul .9 mul exch dup mul add 1 exch sub } bind
- /InvertedEllipseA { dup mul .9 mul exch dup mul add 1 sub } bind
- /EllipseB { dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub } bind
- /EllipseC { dup mul .9 mul exch dup mul add 1 exch sub } bind
- /InvertedEllipseC { dup mul .9 mul exch dup mul add 1 sub } bind
- /Line { exch pop abs neg } bind
- /LineX { pop } bind
- /LineY { exch pop } bind
- /Square { abs exch abs 2 copy lt { exch } if pop neg } bind
- /Cross { abs exch abs 2 copy gt { exch } if pop neg } bind
- /Rhomboid { abs exch abs 0.9 mul add 2 div } bind
- /DoubleDot { 2 {360 mul sin 2 div exch } repeat add } bind
- /InvertedDoubleDot { 2 {360 mul sin 2 div exch } repeat add neg } bind
- /SimpleDot { dup mul exch dup mul add 1 exch sub } bind
- /InvertedSimpleDot { dup mul exch dup mul add 1 sub } bind
- /CosineDot { 180 mul cos exch 180 mul cos add 2 div } bind
- /Double { exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add } bind
+ } bind executeonly
+ /EllipseA { dup mul .9 mul exch dup mul add 1 exch sub } bind executeonly
+ /InvertedEllipseA { dup mul .9 mul exch dup mul add 1 sub } bind executeonly
+ /EllipseB { dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub } bind executeonly
+ /EllipseC { dup mul .9 mul exch dup mul add 1 exch sub } bind executeonly
+ /InvertedEllipseC { dup mul .9 mul exch dup mul add 1 sub } bind executeonly
+ /Line { exch pop abs neg } bind executeonly
+ /LineX { pop } bind executeonly
+ /LineY { exch pop } bind executeonly
+ /Square { abs exch abs 2 copy lt { exch } if pop neg } bind executeonly
+ /Cross { abs exch abs 2 copy gt { exch } if pop neg } bind executeonly
+ /Rhomboid { abs exch abs 0.9 mul add 2 div } bind executeonly
+ /DoubleDot { 2 {360 mul sin 2 div exch } repeat add } bind executeonly
+ /InvertedDoubleDot { 2 {360 mul sin 2 div exch } repeat add neg } bind executeonly
+ /SimpleDot { dup mul exch dup mul add 1 exch sub } bind executeonly
+ /InvertedSimpleDot { dup mul exch dup mul add 1 sub } bind executeonly
+ /CosineDot { 180 mul cos exch 180 mul cos add 2 div } bind executeonly
+ /Double { exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add } bind executeonly
/InvertedDouble {
exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add neg
- } bind
+ } bind executeonly
.dicttomark readonly def
/.resolveht1 {
@@ -309,13 +309,13 @@
} if
} ifelse
} forall .dicttomark
-} bdef
+} bind executeonly def
/.resolveht5 {
mark exch {
oforce dup type /dicttype eq { resolvehalftone } if
} forall .dicttomark
-} bdef
+} bind executeonly def
/.resolveht6 {
%% resolvestream will reposition PDFfile. If we are in the middle
@@ -332,7 +332,7 @@
1 index exch /TransferFunction exch put
} if
exch PDFfile exch setfileposition
-} bdef
+} bind executeonly def
/htrdict mark
1 //.resolveht1
@@ -357,7 +357,7 @@
( Output may be incorrect.\n) pdfformaterror
gsave .setdefaulthalftone currenthalftone grestore
} ifelse
-} bdef
+} bind executeonly def
% ---------------- Graphics state management ---------------- %
@@ -364,8 +364,8 @@
/cmmatrix matrix def
drawopdict begin
% Graphics state stack
- /q { q } def
- /Q { Q } def
+ /q { q } executeonly def
+ /Q { Q } executeonly def
% Graphics state setting
/cm { //cmmatrix astore
.getpath
@@ -380,15 +380,15 @@
currentdict /qTextSaveMatrix .knownget {
//cmmatrix exch dup concatmatrix pop
} if
- } bdef
+ } bind executeonly def
- /i { 1 .min setflat } bdef
+ /i { 1 .min setflat } bind executeonly def
/J { setlinecap } bind 0 get def
/d { setdash } bind 0 get def
/j { setlinejoin } bind 0 get def
/w { setlinewidth } bind 0 get def
- /M { 1 .max setmiterlimit } bdef
- /gs { gs } def
+ /M { 1 .max setmiterlimit } bind executeonly def
+ /gs { gs } executeonly def
end
% Each entry in this dictionary is
@@ -395,10 +395,10 @@
% <gsres> <value> -proc- <gsres>
/gsbg {
/BGDefault load resolvedefaultfnproc setblackgeneration
-} bdef
+} bind executeonly def
/gsucr {
/UCRDefault load resolvedefaultfnproc setundercolorremoval
-} bdef
+} bind executeonly def
/gstr {
dup type /arraytype eq {
{ oforce /TRDefault load resolvedefaultfnproc } forall
@@ -406,17 +406,17 @@
} {
/TRDefault load resolvedefaultfnproc settransfer
} ifelse
-} bdef
+} bind executeonly def
/gsparamdict mark
- /SA { setstrokeadjust }
- /OP { 1 index /op known not { dup op } if OP }
+ /SA { setstrokeadjust } executeonly
+ /OP { 1 index /op known not { dup op } if OP } executeonly
% The PDF 1.3 specification says that the name /Default is only
% recognized for {BG,UCR,TR}2. However, PDF 1.3 files produced
% by Adobe Acrobat Distiller 4.0 for Windows use the name /Default
% with the older keys, so we have to implement this.
- /BG { 1 index /BG2 known { pop } { gsbg } ifelse }
- /UCR { 1 index /UCR2 known { pop } { gsucr } ifelse }
- /TR { 1 index /TR2 known { pop } { gstr } ifelse }
+ /BG { 1 index /BG2 known { pop } { gsbg } ifelse } executeonly
+ /UCR { 1 index /UCR2 known { pop } { gsucr } ifelse } executeonly
+ /TR { 1 index /TR2 known { pop } { gstr } ifelse } executeonly
% Some functions used to implement phases of HT and HTP
/sethalftones {
@@ -425,10 +425,10 @@
} {
resolvehalftone sethalftone
} ifelse
- } bdef
+ } bind executeonly def
/sethalftonephases {
/sethalftonephase where { pop aload pop sethalftonephase } { pop } ifelse
- } bdef
+ } bind executeonly def
/HT {
dup sethalftones .swapcolors sethalftones .swapcolors
@@ -442,34 +442,34 @@
/dup /Default eq { oforce gsparamdict /TR get exec } { pop } ifelse
} if
} ifelse
- }
+ } executeonly
/HTP {
% HTP may be present even if this isn't a DPS interpreter.
dup sethalftonephases .swapcolors sethalftonephases .swapcolors
- }
+ } executeonly
% PDF 1.3
% The font is an indirect reference, not a resource name
/Font { aload pop exch oforce resourcefont exch Tf }
- /LW { setlinewidth }
- /LC { setlinecap }
- /LJ { setlinejoin }
- /ML { 1 .max setmiterlimit }
- /D { aload pop setdash }
- /RI { ri }
- /op { op }
- /OPM { OPM }
- /BG2 { gsbg }
- /UCR2 { gsucr }
- /TR2 { gstr }
- /FL { 1 .min setflat }
+ /LW { setlinewidth } executeonly
+ /LC { setlinecap } executeonly
+ /LJ { setlinejoin } executeonly
+ /ML { 1 .max setmiterlimit } executeonly
+ /D { aload pop setdash } executeonly
+ /RI { ri } executeonly
+ /op { op } executeonly
+ /OPM { OPM } executeonly
+ /BG2 { gsbg } executeonly
+ /UCR2 { gsucr } executeonly
+ /TR2 { gstr } executeonly
+ /FL { 1 .min setflat } executeonly
/SM {
% SM may be present even if this is only a Level 2 interpreter.
/setsmoothness where { pop setsmoothness } { pop } ifelse
- }
+ } executeonly
% PDF 1.4
% All of these require the "transparency" feature in the interpreter.
- /ca { ca }
- /CA { CA }
+ /ca { ca } executeonly
+ /CA { CA } executeonly
/SMask {
{gssmask} PDFSTOPONERROR { exec //false } { stopped } ifelse
{
@@ -476,17 +476,17 @@
pop (\n **** Error in SMask during ExtGState. Ignoring the mask, output may be incorrect.\n)
pdfformaterror
} if
- }
- /AIS { AIS }
- /BM { BM }
- /TK { TK }
- /UseBlackPtComp { UseBlackPtComp }
+ } executeonly
+ /AIS { AIS } executeonly
+ /BM { BM } executeonly
+ /TK { TK } executeonly
+ /UseBlackPtComp { UseBlackPtComp } executeonly
/HTO {
% PDF 2.0, supposed to be 'similar' to halftone phase but using a different
% co-ordiate system. Treat the same for now and fix if anyone ever complains.
aload pop transform cvi exch cvi exch 2 array astore
dup sethalftonephases .swapcolors sethalftonephases .swapcolors
- }
+ } executeonly
.dicttomark readonly def
/gs { % <gsres> gs -
Page /ExtGState rget {
@@ -496,7 +496,7 @@
oforce exch gsparamdict exch .knownget { exec } { pop } ifelse
} forall pop
} if
-} bdef
+} bind executeonly def
% ------ Transparency support ------ %
@@ -583,7 +583,7 @@
exit
} loop
SMask
-} bdef
+} bind executeonly def
% Functions specific to the Device* colorspaces to force the switch to
% the Device* colorspace so that the SMask will not get a CIEBased* colorspace
@@ -592,7 +592,7 @@
/forceDefaultCS <<
{
currentcolorspace setcolorspace % this will switch to Device colorspace
- } bind
+ } bind executeonly
/DeviceGray exch
/DeviceRGB 1 index
/DeviceCMYK 1 index
@@ -664,7 +664,7 @@
setmatrix
end % restore colorspace, color and ExtGState (end)
.currentSMask /Processed //true put % special setting to tell us it has been rendered
-} bdef
+} bind executeonly def
% Paint a Form+Group XObject, either for a transparency mask or for a Do.
/.execgroup { % [colour values] <colour space> <resdict> <stream> .execgroup -
@@ -699,7 +699,7 @@
.pdfruncontext
end grestore
/pdfemptycount exch store
-} bdef
+} bind executeonly def
/.beginformgroup { % groupdict bbox .beginformgroup -
exch mark exch % bbox mark groupdict
@@ -710,7 +710,7 @@
% Stack: bbox paramdict
exch aload pop
.begintransparencygroup
-} bdef
+} bind executeonly def
% .paintgroupform implements the Form PaintProc in the case where the
% Form XObject dictionary includes a Group key. See .paintform below.
@@ -725,7 +725,7 @@
.beginformgroup
.execgroup
.endtransparencygroup
-} bdef
+} bind executeonly def
% Make an ImageType 103 (soft-masked) image.
/makesoftmaskimage { % <datasource> <imagemask> <SMask> makesoftmaskimage
@@ -759,7 +759,7 @@
.currentalphaisshape
{ /ShapeMaskDict } { /OpacityMaskDict } ifelse exch def
/ColorSpace DataDict /ColorSpace get def
-} bdef
+} bind executeonly def
% ---------------- Color setting ---------------- %
@@ -769,17 +769,17 @@
% The keys here are resolved (PostScript, not PDF) color space names.
/csncompdict 9 dict begin
- /DeviceGray { pop 1 } bdef
- /DeviceRGB { pop 3 } bdef
- /DeviceCMYK { pop 4 } bdef
+ /DeviceGray { pop 1 } bind executeonly def
+ /DeviceRGB { pop 3 } bind executeonly def
+ /DeviceCMYK { pop 4 } bind executeonly def
/CIEBasedA //DeviceGray def
/CIEBasedABC //DeviceRGB def
/CalGray //DeviceGray def
/CalRGB //DeviceRGB def
/Lab //DeviceRGB def
- /ICCBased { 1 oget /N oget } bdef
+ /ICCBased { 1 oget /N oget } bind executeonly def
/Separation //DeviceGray def
- /DeviceN { 1 oget length } bdef
+ /DeviceN { 1 oget length } bind executeonly def
/Indexed //DeviceGray def
currentdict end readonly def
@@ -787,7 +787,7 @@
/csncomp {
dup dup type /arraytype eq { 0 oget } if
//csncompdict exch get exec
-} bdef
+} bind executeonly def
currentdict /csncompdict undef
@@ -832,26 +832,26 @@
} {
pop % remove colorspace dictionary
} ifelse
-} bdef
+} bind executeonly def
/csrdict 13 dict begin
- /DeviceGray { } bdef
- /DeviceRGB { } bdef
- /DeviceCMYK { } bdef
+ /DeviceGray { } bind executeonly def
+ /DeviceRGB { } bind executeonly def
+ /DeviceCMYK { } bind executeonly def
- /CalGray { 1 oget [ exch /CalGray exch ] } bdef
- /CalRGB { 1 oget [ exch /CalRGB exch ] } bdef
- /Lab { 1 oget [ exch /Lab exch ] } bdef
+ /CalGray { 1 oget [ exch /CalGray exch ] } bind executeonly def
+ /CalRGB { 1 oget [ exch /CalRGB exch ] } bind executeonly def
+ /Lab { 1 oget [ exch /Lab exch ] } bind executeonly def
/CalCMYK {
pop /DeviceCMYK % not defined by Adobe
- } bdef
+ } bind executeonly def
/ICCBased {
dup 1 get type /dicttype ne { % don't resolve more than once
ICCBased-resolve
} if
- } bdef
+ } bind executeonly def
/Separation {
aload pop exch oforce resolvecolorspace
@@ -863,7 +863,7 @@
3 -1 roll oforce 3 1 roll
4 array astore
- } bdef
+ } bind executeonly def
/DeviceN {
[ exch aload pop ] % Copy into a new array
@@ -890,7 +890,7 @@
} if
4 exch put % Put resolved or new attributes dict
} if
- } bdef
+ } bind executeonly def
/Indexed {
aload pop
@@ -959,7 +959,7 @@
} if
} if
} if pop
- } bdef
+ } bind executeonly def
/I { % Bug 689815
( **** Error: The name /Indexed cannot be abbreviated to /I in the color space\n)
@@ -967,7 +967,7 @@
( Output may be incorrect.\n) pdfformaterror
dup 0 /Indexed put
//Indexed exec
- } bdef
+ } bind executeonly def
/Pattern {
dup type /nametype ne {
@@ -976,7 +976,7 @@
/Pattern exch 2 array astore
} if
} if
- } bdef
+ } bind executeonly def
currentdict end readonly def
@@ -984,7 +984,7 @@
% <csname> cssubst false
dup resolvecolorspace
dup 1 index ne { exch pop //true } { pop pop //false } ifelse
-} bdef
+} bind executeonly def
/csnames mark
/DeviceGray dup /DeviceRGB dup /DeviceCMYK dup /Pattern dup
@@ -1012,7 +1012,7 @@
} ifelse
} ifelse
} ifelse
-} bdef
+} bind executeonly def
/resolvecolorspace { % <cspace> resolvecolorspace <cspace'>
dup type /dicttype eq {
@@ -1043,7 +1043,7 @@
} ifelse
} ifelse
} if
-} bdef
+} bind executeonly def
/scresolve { % <c0> ... scresolve <multi>
% We can't really make sc[n] and SC[N] work, because
@@ -1061,7 +1061,7 @@
} {
.pdfcount 1 gt
} ifelse
-} bdef
+} bind executeonly def
%% Bug #696017 When we begin a text block, we switch to a special set of marking operations
%% for paths, these ops don't use the current CTM, but the 'SavedTextMatrix', in order to
@@ -1158,19 +1158,24 @@
Q
PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%End PaintProc) print dup === flush } if } if
PDFfile exch setfileposition
-} bdef
+} bind executeonly def
/.pdfpaintproc {
%% Get the /m from pdfopdict (must be present)
%% and check its a packedarray
pdfopdict /m get dup type /packedarraytype eq {
- %% get the initial element of the packedarray
- %% and check its a name
- 0 get dup type /nametype eq {
- %% If the name is inside_text_m then we are in a text block
- /inside_text_m eq
+ %% The non-text version of /m is executeonly, so if we can't read it, its not a text block.
+ dup rcheck {
+ %% get the initial element of the packedarray
+ %% and check its a name
+ 0 get dup type /nametype eq {
+ %% If the name is inside_text_m then we are in a text block
+ /inside_text_m eq
+ }{
+ pop false
+ } ifelse
}{
- pop false
+ pop false
} ifelse
}{
pop false
@@ -1184,7 +1189,7 @@
{
switch_to_text_marking_ops
} if
-}bdef
+}bind executeonly def
/resolvepattern { % <patternstreamdict> resolvepattern <patterndict>
% Don't do the resolvestream now: just capture the data
@@ -1223,7 +1228,7 @@
dup /BBox 2 copy knownoget { normrect FixPatternBBox put } { pop pop } ifelse
dup /.pattern_uses_transparency 1 index patternusestransparency put
PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%Pattern: ) print dup === flush } if } if
-} bdef
+} bind executeonly def
/ignore_color_op ( **** Error: Ignoring a color operation in a cached context.\n Output may be incorrect.\n) readonly def
@@ -1233,7 +1238,7 @@
} {
/DeviceGray cssubst { cs sc1 } { g } ifelse
} ifelse
- } bdef
+ } bind executeonly def
/rg { .incachedevice {
pop pop pop //ignore_color_op pdfformaterror
@@ -1240,7 +1245,7 @@
} {
/DeviceRGB cssubst { cs sc* } { rg } ifelse
} ifelse
- } bdef
+ } bind executeonly def
/k { .incachedevice {
pop pop pop pop //ignore_color_op pdfformaterror
@@ -1247,7 +1252,7 @@
} {
k
} ifelse
- } bdef
+ } bind executeonly def
/cs { .incachedevice {
pop //ignore_color_op pdfformaterror
@@ -1254,7 +1259,7 @@
} {
csresolve { cs } if
} ifelse
- } bdef
+ } bind executeonly def
/sc { .incachedevice {
.pdfcount { pop } repeat //ignore_color_op pdfformaterror
@@ -1266,7 +1271,7 @@
{ sc*_and_set } { sc1_and_set } ifelse
} ifelse
} ifelse
- } bdef
+ } bind executeonly def
/scn /sc load def
@@ -1275,7 +1280,7 @@
} {
/DeviceGray cssubst { CS SC1 } { G } ifelse
} ifelse
- } bdef
+ } bind executeonly def
/RG { .incachedevice {
pop pop pop //ignore_color_op pdfformaterror
@@ -1282,7 +1287,7 @@
} {
/DeviceRGB cssubst { CS SC* } { RG } ifelse
} ifelse
- } bdef
+ } bind executeonly def
/K { .incachedevice {
pop pop pop pop //ignore_color_op pdfformaterror
@@ -1289,7 +1294,7 @@
} {
K
} ifelse
- } bdef
+ } bind executeonly def
/CS { .incachedevice {
pop //ignore_color_op pdfformaterror
@@ -1296,7 +1301,7 @@
} {
csresolve { CS } if
} ifelse
- } bdef
+ } bind executeonly def
/ri { .incachedevice {
pop //ignore_color_op pdfformaterror
@@ -1303,7 +1308,7 @@
} {
ri
} ifelse
- } bdef
+ } bind executeonly def
/SC { .incachedevice {
.pdfcount { pop } repeat //ignore_color_op pdfformaterror
@@ -1315,7 +1320,7 @@
{ SC*_and_set } { SC1_and_set } ifelse
}ifelse
} ifelse
- } bdef
+ } bind executeonly def
/SCN /SC load def
end
@@ -1326,9 +1331,9 @@
drawopdict begin
% Path construction
- /m { { moveto } stopped { count pdfemptycount sub 2 .min { pop } repeat 0 0 moveto } if } bdef
- /l { { lineto } stopped { count pdfemptycount sub 2 .min { pop } repeat } if } bdef
- /c { { curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bdef
+ /m { { moveto } stopped { count pdfemptycount sub 2 .min { pop } repeat 0 0 moveto } if } bind executeonly def
+ /l { { lineto } stopped { count pdfemptycount sub 2 .min { pop } repeat } if } bind executeonly def
+ /c { { curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bind executeonly def
/v { count pdfemptycount sub 4 ge {
{ currentpoint 6 2 roll curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if
@@ -1335,27 +1340,27 @@
} {
count pdfemptycount sub { pop } repeat
} ifelse
- } bdef
- /y { { 2 copy curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bdef
+ } bind executeonly def
+ /y { { 2 copy curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bind executeonly def
/re {
4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
closepath
- } bdef
+ } bind executeonly def
/h { closepath } bind 0 get def
% Path painting and clipping
- /n { n } def
- /S { S } def
- /s { s } def
- /f { f } def
- /f* { f* } def
- /B { B } def
- /b { b } def
- /B* { B* } def
- /b* { b* } def
- /W { W } def
- /W* { W* } def
+ /n { n } executeonly def
+ /S { S } executeonly def
+ /s { s } executeonly def
+ /f { f } executeonly def
+ /f* { f* } executeonly def
+ /B { B } executeonly def
+ /b { b } executeonly def
+ /B* { B* } executeonly def
+ /b* { b* } executeonly def
+ /W { W } executeonly def
+ /W* { W* } executeonly def
/sh_save 1 array def
/sh_group << /Subtype /Group /Isolated //true >> readonly def
@@ -1365,15 +1370,14 @@
{ dup /.shading .knownget {
exch pop
} {
- .buildshading
+ .buildshading_and_shfill
} ifelse
- .shfill
} stopped {
pop
( **** Error: Ignoring invalid smooth shading object, output may be incorrect.\n)
pdfformaterror
} if
- } bdef
+ } bind executeonly def
/sh {
OFFlevels length 0 eq {
@@ -1417,7 +1421,7 @@
} {
pop
} ifelse
- } bdef
+ } bind executeonly def
currentdict dup /sh_save undef /sh_group undef
end
@@ -1424,22 +1428,22 @@
% ---------------- XObjects ---------------- %
/xobjectprocs mark % <dict> -proc- -
- /Image { DoImage }
- /Form { DoForm }
- /PS { DoPS }
+ /Image { DoImage } executeonly
+ /Form { DoForm } executeonly
+ /PS { DoPS } executeonly
.dicttomark readonly def
% Note that the keys in defaultdecodedict are resolved (PostScript, not PDF)
% color space names.
/defaultdecodedict mark
- /DeviceGray { pop //01_1 } bind
- /DeviceRGB { pop //01_3 } bind
- /DeviceCMYK { pop //01_4 } bind
- /CIEBasedA { 1 get /RangeA knownoget not { //01_1 } if } bind
- /CIEBasedABC { 1 get /RangeABC knownoget not { //01_3 } if } bind
- /CalGray { pop //01_1 } bind
- /CalRGB { pop //01_3 } bind
- /Lab { 1 get /Range knownoget not { [-100 100 -100 100] } {aload pop 0 100 6 2 roll 6 array astore}ifelse } bind
+ /DeviceGray { pop //01_1 } bind executeonly
+ /DeviceRGB { pop //01_3 } bind executeonly
+ /DeviceCMYK { pop //01_4 } bind executeonly
+ /CIEBasedA { 1 get /RangeA knownoget not { //01_1 } if } bind executeonly
+ /CIEBasedABC { 1 get /RangeABC knownoget not { //01_3 } if } bind executeonly
+ /CalGray { pop //01_1 } bind executeonly
+ /CalRGB { pop //01_3 } bind executeonly
+ /Lab { 1 get /Range knownoget not { [-100 100 -100 100] } {aload pop 0 100 6 2 roll 6 array astore}ifelse } bind executeonly
/ICCBased {
1 oget dup /Range knownoget {
exch pop
@@ -1446,14 +1450,14 @@
}{
/N get [ exch {0 1} repeat ] readonly
} ifelse
- } bind
- /Separation { pop //01_1 } bind
+ } bind executeonly
+ /Separation { pop //01_1 } bind executeonly
/DeviceN {
1 oget length [ exch {0 1} repeat ] readonly
- } bind
+ } bind executeonly
/Indexed {
pop [ 0 1 BitsPerComponent bitshift 1 sub ]
- } bind
+ } bind executeonly
.dicttomark readonly def
/checkaltimage { % <resdict> checkaltimage <resdict[']>
@@ -1472,23 +1476,23 @@
} forall
} if
} if
-} bdef
+} bind executeonly def
% <string> <index> getu16 <integer>
/getu16 {
2 copy get 8 bitshift 3 1 roll 1 add get add
-} bind def
+} bind executeonly def
% <string> <index> getu32 <integer>
/getu32 {
2 copy getu16 16 bitshift 3 1 roll 2 add getu16 add
-} bind def
+} bind executeonly def
/jp2_csp_dict mark
12 { /DeviceCMYK } % CMYK
14 { [ /Lab << /WhitePoint [ 0.9505 1 1.0890 ] readonly >> ] } % LAB, WhitePoint == D65
- 16 { /sRGBICC /ColorSpace findresource } bind
- 17 { /sGrayICC /ColorSpace findresource } bind
+ 16 { /sRGBICC /ColorSpace findresource } bind executeonly
+ 17 { /sGrayICC /ColorSpace findresource } bind executeonly
18 3 index % YCC is converted to RGB
% 19 % CIEJab not supportec by PDF 1.7
% 20 % e-sRGB
@@ -1502,7 +1506,7 @@
/jp2h { % descend into a sub-stream, don't return.
() /SubFileDecode filter 0
- } bdef
+ } bind executeonly def
/ihdr {
14 sub % file len-14
@@ -1519,7 +1523,7 @@
dup 12 eq { pop 16 } if
/BitsPerComponent exch def % file len-14
} {pop} ifelse
- } bdef
+ } bind executeonly def
%% if the ihdr has a BPC of 255 then we get a bpcc box which
%% gives the bpc for each component individually. We cannot
@@ -1540,7 +1544,7 @@
pop
/BitsPerComponent BitsPerComponent 1 add def
- } bdef
+ } bind executeonly def
/colr {
currentdict /ColorSpace known not {
@@ -1569,7 +1573,7 @@
} ifelse
} ifelse
} if
- } bdef
+ } bind executeonly def
% Palette colors are decoded by the library.
/pclr {
@@ -1577,7 +1581,7 @@
1 index (1234) readstring pop
3 get 16#7F and 1 add
/BitsPerComponent exch def
- } bdef
+ } bind executeonly def
/cdef {
pop
@@ -1593,7 +1597,7 @@
} ifelse
} repeat
0
- } bdef
+ } bind executeonly def
currentdict end readonly def
@@ -1635,7 +1639,7 @@
} ifelse
} loop
pop
-} bind def
+} bind executeonly def
currentdict /jp2_tag_dict .undef
currentdict /jp2_csp_dict .undef
@@ -1677,7 +1681,7 @@
} ifelse
1 index exch
/DecodeParms exch put % <resdict>
-} bdef
+} bind executeonly def
/last-ditch-bpc-csp {
currentdict /BitsPerComponent oknown not {
@@ -1749,7 +1753,7 @@
} if
} if
/ColorSpace exch def
-} bdef
+} bind executeonly def
/get-smask-in-data { % <dict> -> <int>
/SMaskInData knownoget {
@@ -1759,7 +1763,7 @@
} {
0
} ifelse
-} bdef
+} bind executeonly def
/makeimagedict { % <resdict> <newdict> makeimagedict <imagemask?>
% On return, newdict' is currentdict
@@ -1770,7 +1774,7 @@
/BitsPerComponent 2 copy knownoget { cvi def } { pop } ifelse
/Interpolate 2 copy knownoget { def } { pop } ifelse
makeimagekeys
-} bdef
+} bind executeonly def
/makeimagekeys { % <resdict> makeimagekeys <imagemask>
% newdict is currentdict
@@ -2034,7 +2038,7 @@
//false resolvestream /DataSource exch def
//false
} ifelse
-} bdef
+} bind executeonly def
currentdict /add-to-last-param undef
currentdict /last-ditch-bpc-csp undef
@@ -2072,7 +2076,7 @@
} if
1 index /Mask knownoget { 1 index exch /Mask exch put } if
makeimagedict doimagesmask
-} bdef
+} bind executeonly def
/makemaskimage { % <datasource> <imagemask> <Mask> makemaskimage
% <datasource> <imagemask>, updates currentdict =
% imagedict
@@ -2174,7 +2178,7 @@
/MaskDict exch def
/ColorSpace DataDict /ColorSpace get def
} ifelse
-} bdef
+} bind executeonly def
/doimagesmask { % <imagemask> doimagesmask -
PDFusingtransparency {
@@ -2224,7 +2228,7 @@
{ doimage }
ifelse
} ifelse
-} bdef
+} bind executeonly def
% For development needs we define a special option for running with a new handler
% for images with a soft mask.
@@ -2231,7 +2235,7 @@
//systemdict /NEW_IMAGE3X .knownget not { //false } if {
/doimagesmask { % <imagemask> doimagesmask -
doimage
- } bdef
+ } bind executeonly def
} if
/ValidateDecode { % <<image dict>> -imagemask- ValidateDecode <<image dict>>
@@ -2270,7 +2274,7 @@
} {
exch pop
}ifelse
-}bdef
+}bind executeonly def
/doimage { % <imagemask> doimage -
% imagedict is currentdict, gets popped from dstack
@@ -2332,7 +2336,7 @@
.endtransparencygroup
OPsavedict dup /saveOA get .setopacityalpha /saveBM get .setblendmode
} if
-} bdef
+} bind executeonly def
/.paintform { % <formdict> <resdict> <stream> .paintform -
1 index /FormResDict gput % For broken forms that inherit resources from the context.
@@ -2341,7 +2345,7 @@
} {
pop pdfopdict .pdfruncontext
} ifelse
-} bdef
+} bind executeonly def
/IncrementAppearanceNumber {
pdfdict /AppearanceNumber .knownget {
@@ -2349,7 +2353,7 @@
}{
pdfdict /AppearanceNumber 0 .forceput
} ifelse
-}bdef
+}bind executeonly def
/MakeAppearanceName {
pdfdict /AppearanceNumber get
@@ -2358,12 +2362,12 @@
dup 3 -1 roll
9 exch putinterval
dup dup length 1 sub (\}) putinterval
-} bdef
+} bind executeonly def
/MakeNewAppearanceName {
IncrementAppearanceNumber
MakeAppearanceName
-}bdef
+}bind executeonly def
/DoAppearance {
%% Might need to rethink this. The problem is that if the page has a CropBox, we apply
@@ -2378,7 +2382,7 @@
DoForm
pdfdict /.PreservePDFForm 3 -1 roll .forceput
grestore
-} bdef
+} bind executeonly def
/DoForm {
%% save the current value, if its true we will set it to false later, in order
@@ -2537,7 +2541,7 @@
end
} if
pdfdict /.PreservePDFForm 3 -1 roll .forceput
-} bdef
+} bind executeonly def
/_dops_save 1 array def
@@ -2550,7 +2554,7 @@
}
{ pop }
ifelse
-} bdef
+} bind executeonly def
currentdict /_dops_save undef
@@ -2563,7 +2567,7 @@
pop
} ifelse
} forall
- } bdef
+ } bind executeonly def
/AnyOn {
//false exch {
oforce dup type /dicttype eq {
@@ -2572,13 +2576,13 @@
pop
} ifelse
} forall
- } bdef
+ } bind executeonly def
/AnyOff {
//AllOn exec not
- } bdef
+ } bind executeonly def
/AllOff {
//AnyOn exec not
- } bdef
+ } bind executeonly def
currentdict end readonly def
% Check whether OCG or OCMD is visible
@@ -2654,7 +2658,7 @@
} {
/OFF known not % OFF is inserted by process_trailer_attrs
} ifelse
-} bdef
+} bind executeonly def
drawopdict begin
/Do { % /Name
@@ -2744,7 +2748,7 @@
% Otherwise ignore it and tidy up the stacks
pop pop
} ifelse
- } bdef
+ } bind executeonly def
end
currentdict /xobjectprocs .undef
@@ -2778,12 +2782,12 @@
.dicttomark readonly def
/unabbrevvalue { % <obj> unabbrevvalue <obj'>
oforce //unabbrevtypedict 1 index type .knownget { exec } if
-} bdef
+} bind executeonly def
/is_space_dict << 0 0 9 9 10 10 12 12 13 13 32 32 >> readonly def
drawopdict begin
- /BI { mark } bdef
+ /BI { mark } bind executeonly def
/ID {
gsave
%% Bug 696547, related to Bug 695897 (see /Do above) This file has an inline image inside
@@ -2852,7 +2856,7 @@
} ifelse
} loop
grestore
- } bdef
+ } bind executeonly def
end
currentdict /is_space_dict undef
@@ -2861,26 +2865,26 @@
drawopdict begin
% Text control
- /BT { BT } def
- /ET { ET } def
- /Tc { Tc } def
- /TL { TL } def
- /Tr { Tr } def
- /Ts { Ts } def
- /Tw { Tw } def
- /Tz { Tz } def
+ /BT { BT } executeonly def
+ /ET { ET } executeonly def
+ /Tc { Tc } executeonly def
+ /TL { TL } executeonly def
+ /Tr { Tr } executeonly def
+ /Ts { Ts } executeonly def
+ /Tw { Tw } executeonly def
+ /Tz { Tz } executeonly def
% Text positioning
- /Td { Td } def
- /TD { TD } def
- /Tm { Tm } def
- /T* { T* } def
+ /Td { Td } executeonly def
+ /TD { TD } executeonly def
+ /Tm { Tm } executeonly def
+ /T* { T* } executeonly def
% Text painting
- /Tj { Tj } def
- /' { ' } def
- /" { " } def
- /TJ { TJ } def
+ /Tj { Tj } executeonly def
+ /' { ' } executeonly def
+ /" { " } executeonly def
+ /TJ { TJ } executeonly def
- /Tform { Tform } def % Text formatting and painting for AcroForm
+ /Tform { Tform } executeonly def % Text formatting and painting for AcroForm
% without appearance streams.
end
@@ -2892,7 +2896,7 @@
( **** Error: invalid operator QBT processed as Q BT .\n)
pdfformaterror % Bug 690089
( Output may be incorrect.\n) pdfformaterror
- } def
+ } executeonly def
/. {
0.
@@ -2899,7 +2903,7 @@
( **** Error: invalid operator . processed as number 0. .\n)
pdfformaterror % Bug 690730
( Output may be incorrect.\n) pdfformaterror
- } def
+ } executeonly def
end
% ============================== Annotations ============================== %
@@ -2919,7 +2923,7 @@
dup /Parent oknown not {
2 copy exch /ParentField exch put
} if
-} bdef
+} bind executeonly def
% Get and normalize an annotation's rectangle.
/annotrect { % <annot> annotrect <x> <y> <w> <h>
@@ -2926,7 +2930,7 @@
/Rect oget oforce_recursive aload pop
exch 3 index sub dup 0 lt { dup 5 -1 roll add 4 1 roll neg } if
exch 2 index sub dup 0 lt { dup 4 -1 roll add 3 1 roll neg } if
-} bdef
+} bind executeonly def
% Set an annotation color.
% If the /C array is empty we don't want to draw the annotation
@@ -2955,7 +2959,7 @@
} ifelse
}
{ 0 setgray true} ifelse
-} bdef
+} bind executeonly def
% Set an annotation color.
% If the /C array is empty we don't want to draw the annotation
@@ -2984,7 +2988,7 @@
} ifelse
}
{ 0 setgray true} ifelse
-} bdef
+} bind executeonly def
% Draw the border. Currently, we ignore requests for beveling, and we
% don't round the corners of rectangles.
@@ -3005,7 +3009,7 @@
} {
pop pop pop
}ifelse
-} bdef
+} bind executeonly def
% Draw an annotation border.
/drawborder { % <annot> drawborder -
@@ -3049,7 +3053,7 @@
1 {} strokeborder
} ifelse
grestore
-} bdef
+} bind executeonly def
% stroke the path of an annotation border.
/strokeborderpath { % <annot> strokeborderpath -
@@ -3098,7 +3102,7 @@
} ifelse
pop
grestore
-} bdef
+} bind executeonly def
/fillborderpath { % <annot> fillborderpath -
gsave
@@ -3106,7 +3110,7 @@
annotsetinteriorcolor
{fill} if
grestore
-}bdef
+}bind executeonly def
%
% The PDF annotation F (flags) integer is bit encoded.
@@ -3135,12 +3139,12 @@
} {
pop pop //false % Hidden
} ifelse
-} bdef
+} bind executeonly def
/set_bc_color <<
- 1 { 0 get oforce setgray } bind
- 3 { { oforce } forall setrgbcolor } bind
- 4 { { oforce } forall setcmykcolor } bind
+ 1 { 0 get oforce setgray } bind executeonly
+ 3 { { oforce } forall setrgbcolor } bind executeonly
+ 4 { { oforce } forall setcmykcolor } bind executeonly
>> readonly def
% Get an inherited attribute from a node through /Parent and /ParentField
@@ -3164,7 +3168,7 @@
} ifelse
} ifelse
} loop
- } bind def
+ } bind executeonly def
% <annot> foo <annot>
/make_tx_da {
@@ -3218,7 +3222,7 @@
/File File 0 Length getinterval def
closefile % <annot>
end
-} bdef
+} bind executeonly def
/can-regenerate-ap { % <annot> -> <bool>
//false exch
@@ -3239,7 +3243,7 @@
} if
} if
pop
-} bdef
+} bind executeonly def
/drawwidget { % <scalefactor_x> <scalefactor_y> <annot> drawwidget -
@@ -3359,7 +3363,7 @@
} if
} ifelse
pop pop pop
-} bdef
+} bind executeonly def
currentdict /set_bc_color undef
@@ -3409,7 +3413,7 @@
( Output may be incorrect.\n) pdfformaterror
pop 1 1
} ifelse
-} bdef
+} bind executeonly def
% Draw an annotation.
/drawannottypes 20 dict begin
@@ -3433,13 +3437,13 @@
% } ifelse
.begintransparencygroup
} if
- }bdef
+ }bind executeonly def
/endannottransparency {
PDFusingtransparency {
.endtransparencygroup
} if
- }bdef
+ }bind executeonly def
% x0 y0 x1 y1 x2 y2 x3 y3 -> x0 y0 x1-x0 y1-y0 x2-x0 y2-y0
/quadpoints2basis {
@@ -3482,7 +3486,7 @@
4 index sub exch % x0 y0 x2-x0 y2-y0 y1-y0 x1
5 index sub exch % x0 y0 x2-x0 y2-y0 x1-x0 y1-y0
4 2 roll % x0 y0 x1-x0 y1-y0 x2-x0 y2-y0
- } bdef
+ } bind executeonly def
/Square {
dup /AP oknown {
@@ -3506,7 +3510,7 @@
//endannottransparency exec
grestore
}ifelse
- } bdef
+ } bind executeonly def
%% Width Height drawellipse -
/drawellipse {
@@ -3525,7 +3529,7 @@
% Stack: yrad xrad xmag ymag
exch neg 4 1 roll 3 -1 roll neg 3 1 roll exch neg exch
neg 1 index 0 curveto % xmag neg yrad neg xrad neg ymag neg 0 curveto
-}bdef
+}bind executeonly def
/Circle {
dup /AP oknown {
@@ -3542,7 +3546,7 @@
grestore
//false
} ifelse
- } bdef
+ } bind executeonly def
/Polygon {
dup /AP oknown {
@@ -3591,7 +3595,7 @@
//false
grestore
} ifelse
- } bdef
+ } bind executeonly def
/LineEnd_dict 10 dict begin
%% Stack contains <annot>
@@ -3624,7 +3628,7 @@
dup neg lineto
closepath
strokeborderpath
- } bdef
+ } bind executeonly def
/Circle {
dup
/BS knownoget {
@@ -3647,7 +3651,7 @@
0 moveto
0 0 3 -1 roll 0 360 arc
strokeborderpath
- } bdef
+ } bind executeonly def
/Diamond {
dup
/BS knownoget {
@@ -3675,7 +3679,7 @@
0 lineto
closepath
strokeborderpath
- } bdef
+ } bind executeonly def
/OpenArrow {
dup
gsave
@@ -3692,7 +3696,7 @@
dup 6 mul neg exch 4 mul lineto
strokeborderpath
grestore
- } bdef
+ } bind executeonly def
/ClosedArrow {
dup
gsave
@@ -3718,8 +3722,8 @@
dup /CA knownoget {.setopacityalpha} if
fillborderpath
grestore
- } bdef
- /None {} bdef
+ } bind executeonly def
+ /None {} bind executeonly def
/Butt {
dup
/BS knownoget {
@@ -3732,7 +3736,7 @@
}ifelse
3 mul dup neg 0 exch moveto 0 exch lineto
strokeborderpath
- } bdef
+ } bind executeonly def
/ROpenArrow {
gsave
dup
@@ -3750,7 +3754,7 @@
dup 6 mul neg exch 4 mul lineto
strokeborderpath
grestore
- } bdef
+ } bind executeonly def
/RClosedArrow {
gsave
dup
@@ -3777,7 +3781,7 @@
dup /CA knownoget {.setopacityalpha} if
fillborderpath
grestore
- } bdef
+ } bind executeonly def
/Slash {
gsave
dup
@@ -3793,7 +3797,7 @@
3 mul dup neg 0 exch moveto 0 exch lineto
strokeborderpath
grestore
- } bdef
+ } bind executeonly def
currentdict end readonly def
@@ -3837,7 +3841,7 @@
//false
grestore
} ifelse
- } bdef
+ } bind executeonly def
/PolyLine {
dup /AP oknown {
@@ -3895,7 +3899,7 @@
//false
grestore
} ifelse
- } bdef
+ } bind executeonly def
/Link { % <annot> -> <false>
//startannottransparency exec
@@ -3908,7 +3912,7 @@
( Output may be incorrect.\n) pdfformaterror
}ifelse
//endannottransparency exec
- } bdef
+ } bind executeonly def
/Ink { % <annot> -> <annot> <true>
% <annot> -> <false>
@@ -3960,7 +3964,7 @@
//endannottransparency exec
//false
} ifelse
- } bdef
+ } bind executeonly def
/Underline {
dup /AP oknown {
@@ -3999,7 +4003,7 @@
} if
//false
} ifelse
- } bdef
+ } bind executeonly def
/StrikeOut {
dup /AP oknown {
@@ -4038,7 +4042,7 @@
} if
//false
} ifelse
- } bdef
+ } bind executeonly def
% Connect 2 points with an arc that has max distance from the line
% segment to the ark equal 1/4 of the radius.
@@ -4058,7 +4062,7 @@
atan % x0 y0 x1 y1 xc yc r a1 a2
exch arcn % x0 y0 x1 y1
pop pop pop pop
- } bind def
+ } bind executeonly def
/emptydict 0 dict readonly def
@@ -4093,7 +4097,7 @@
} if
//false
% } ifelse
- } bdef
+ } bind executeonly def
currentdict /emptydict undef
currentdict /highlight-arc undef
@@ -4153,7 +4157,7 @@
//endannottransparency exec
//false
} ifelse
- } bdef
+ } bind executeonly def
/Text {
dup /AP oknown {
@@ -4195,7 +4199,7 @@
//endannottransparency exec
//false
} ifelse
- } bdef
+ } bind executeonly def
/FreeText {
dup /AP knownoget {
@@ -4382,7 +4386,7 @@
{
//true
} ifelse
- } bdef
+ } bind executeonly def
/frame {
{ 255 div } forall setrgbcolor
@@ -4406,7 +4410,7 @@
}
gsave 1 -1 translate 0.75 setgray dup exec grestore
exec
- } bdef
+ } bind executeonly def
% (text) y h -> -
/text {
@@ -4425,7 +4429,7 @@
PDFusingtransparency {
.endtransparencytextgroup
} if
- } bdef
+ } bind executeonly def
/red <ef4023> readonly def
/green <3fae49> readonly def
@@ -4435,44 +4439,44 @@
/Approved {
//green //frame exec
(APPROVED) 13 30 //text exec
- } bdef
+ } bind executeonly def
/AsIs {
//red //frame exec
(AS IS) 13 30 //text exec
- } bdef
+ } bind executeonly def
/Confidential {
//red //frame exec
(CONFIDENTIAL) 17 20 //text exec
- } bdef
+ } bind executeonly def
/Departmental {
//blue //frame exec
(DEPARTMENTAL) 17 20 //text exec
- } bdef
+ } bind executeonly def
/Draft {
//red //frame exec
(DRAFT) 13 30 //text exec
- } bdef
+ } bind executeonly def
/Experimental {
//blue //frame exec
(EXPERIMENTAL) 17 20 //text exec
- } bdef
+ } bind executeonly def
/Expired {
//red //frame exec
(EXPIRED) 13 30 //text exec
- } bdef
+ } bind executeonly def
/Final {
//red //frame exec
(FINAL) 13 30 //text exec
- } bdef
+ } bind executeonly def
/ForComment {
//green //frame exec
(FOR COMMENT) 17 20 //text exec
- } bdef
+ } bind executeonly def
/ForPublicRelease {
//green //frame exec
(FOR PUBLIC) 26 18 //text exec
(RELEASE) 8.5 18 //text exec
- } bdef
+ } bind executeonly def
/NotApproved {
//red //frame exec
(NOT APPROVED) 17 20 //text exec
@@ -4481,15 +4485,15 @@
//red //frame exec
(NOT FOR) 26 18 //text exec
(PUBLIC RELEASE) 8.5 18 //text exec
- } bdef
+ } bind executeonly def
/Sold {
//blue //frame exec
(SOLD) 13 30 //text exec
- } bdef
+ } bind executeonly def
/TopSecret {
//red //frame exec
(TOP SECRET) 14 26 //text exec
- } bdef
+ } bind executeonly def
currentdict end readonly def
{/text/frame/red/green/blue} {currentdict exch undef} forall
@@ -4524,7 +4528,7 @@
//endannottransparency exec
//false
} ifelse
- } bdef
+ } bind executeonly def
/Popup {
dup /Open oknown {
@@ -4613,7 +4617,7 @@
} {
pop //false
}ifelse
- } bdef
+ } bind executeonly def
/Redact {
%% Redact annotations are part of a process, a Redact annotation is only present
@@ -4625,7 +4629,7 @@
} {
//false
} ifelse
- } bdef
+ } bind executeonly def
currentdict /startannottransparency undef
currentdict /endannottransparency undef
@@ -4650,7 +4654,7 @@
}
{pop pop //true}
ifelse
-} bind def
+} bind executeonly def
/drawannot { % <annot> drawannot -
dup annotvisible {
@@ -4681,7 +4685,7 @@
} ifelse
grestore
} if pop % annotvisible
-} bdef
+} bind executeonly def
currentdict /drawannottypes undef
% Draw an annotation.
@@ -4739,6 +4743,7 @@
dup {oforce} stopped not {exch pop} if
2 index 3 1 roll put
} forall
+ Removepdfobj#
} if
dup type /arraytype eq {
0 1 2 index length 1 sub{
@@ -4748,7 +4753,7 @@
} if
} if
} forall
-} bdef
+} bind executeonly def
/ApplyCTMToQuadPoints {
@@ -4781,13 +4786,13 @@
exch pop % the mark
grestore
-} bdef
+} bind executeonly def
/preserveannottypes 20 dict begin
-/Circle {mark exch loadannot /ANN pdfmark false} bdef
-/FileAttachment {mark exch loadannot /ANN pdfmark false} bdef
-/FreeText {mark exch loadannot /ANN pdfmark false} bdef
+/Circle {mark exch loadannot /ANN pdfmark false} bind executeonly def
+/FileAttachment {mark exch loadannot /ANN pdfmark false} bind executeonly def
+/FreeText {mark exch loadannot /ANN pdfmark false} bind executeonly def
/Highlight {
mark exch
@@ -4797,9 +4802,9 @@
put
} if
loadannot /ANN pdfmark false
-} bdef
+} bind executeonly def
-/Ink {mark exch loadannot /ANN pdfmark false} bdef
+/Ink {mark exch loadannot /ANN pdfmark false} bind executeonly def
/Line {
mark exch dup /L .knownget {
@@ -4808,15 +4813,101 @@
1 index /L 3 -1 roll put
} if
loadannot /ANN pdfmark false
-} bdef
+} bind executeonly def
-/Link {mark exch {drawannot} PDFSTOPONERROR {exec}{stopped {(Error: Ignoring invalid annotation, output may be incorrect.\n) pdfformaterror} if} ifelse cleartomark false} bdef
+/Link {
+ /NO_PDFMARK_DESTS where {pop NO_PDFMARK_DESTS not}{true}ifelse
+ {
+ mark exch
+ dup /BS knownoget { << exch { oforce } forall >> /BS exch 3 -1 roll } if
+ dup /F knownoget { /F exch 3 -1 roll } if
+ dup /C knownoget { /Color exch 3 -1 roll } if
+ dup /Rect knownoget { /Rect exch 3 -1 roll } if
+ dup /Border knownoget {
+ dup type /arraytype eq {
+ dup length 3 lt
+ } {
+ //true
+ } ifelse {
+ pop [ 0 0 0 ] % Following AR5 use invisible border.
+ } if
+ /Border exch 3 -1 roll
+ } if
+ dup /A knownoget {
+ dup /URI known {
+ /A mark 3 2 roll % <<>> /A [ <<action>>
+ { oforce } forall
+ .dicttomark
+ 3 2 roll
+ } {
+ dup /S knownoget {
+ %% Because we process GoTo Destinations into absolute references in the PDF file
+ %% we need to resolve the /D or /Dest. However, we must *not* do this for
+ %% GoToR Destinations because (obviously) those are in a different file and
+ %% we cannot resolve them into absolute references. We don't need to anyway
+ %% because that file must already have a named destination.
+ dup /GoTo eq {
+ pop
+ dup /D knownoget {
+ exch pop exch dup length dict copy dup /Dest 4 -1 roll put
+ } if
+ }{
+ dup /GoToR eq {
+ pop /A mark % <<..action dict..>> /A [
+ 3 2 roll % /A [ <<..action dict..>>
+ { oforce } forall
+ .dicttomark
+ 3 2 roll
+ }{
+ dup /Launch eq {
+ pop /A mark % <<..action dict..>> /A [
+ 3 2 roll % /A [ <<..action dict..>>
+ { oforce } forall
+ .dicttomark
+ 3 2 roll
+ }{
+ /Named eq {
+ /N knownoget {
+ namedactions exch .knownget {
+ exec {
+ pop
+ ( **** Warning: Ignoring a named action pointing out of the document page range.\n)
+ pdfformatwarning
+ } {
+ /Page exch 3 -1 roll
+ } ifelse
+ } if
+ } if
+ } if
+ }ifelse
+ } ifelse
+ } ifelse
+ } if
+ } ifelse
+ } if
+ { linkdest } stopped {
+ cleartomark
+ ( **** Warning: Link annotation points out of the document page range.\n)
+ pdfformatwarning
+ } {
+ pop
+ {
+ %% Need to remove any '/.gs.pdfobj# key/value pairs from any dictionaries
+ counttomark array astore dup length 1 sub 0 1 3 -1 roll {
+ dup 2 index exch get Removepdfobj# 2 index 3 1 roll put
+ } for aload pop
+ /LNK pdfmark
+ } stopped {cleartomark} if
+ } ifelse
+ }{pop} ifelse
+ false
+} bind executeonly def
-/Movie {mark exch loadannot /ANN pdfmark false} bdef
-/Popup {mark exch loadannot /ANN pdfmark false} bdef
-/Sound {mark exch loadannot /ANN pdfmark false} bdef
-/Square {mark exch loadannot /ANN pdfmark false} bdef
-/Stamp {mark exch loadannot /ANN pdfmark false} bdef
+/Movie {mark exch loadannot /ANN pdfmark false} bind executeonly def
+/Popup {mark exch loadannot /ANN pdfmark false} bind executeonly def
+/Sound {mark exch loadannot /ANN pdfmark false} bind executeonly def
+/Square {mark exch loadannot /ANN pdfmark false} bind executeonly def
+/Stamp {mark exch loadannot /ANN pdfmark false} bind executeonly def
/StrikeOut {
mark exch
@@ -4826,7 +4917,7 @@
put
} if
loadannot /ANN pdfmark false
-} bdef
+} bind executeonly def
/Squiggly {
mark exch
@@ -4836,10 +4927,10 @@
put
} if
loadannot /ANN pdfmark false
-} bdef
+} bind executeonly def
-/Text {mark exch loadannot /ANN pdfmark false} bdef
-/TrapNet {mark exch loadannot /ANN pdfmark false} bdef
+/Text {mark exch loadannot /ANN pdfmark false} bind executeonly def
+/TrapNet {mark exch loadannot /ANN pdfmark false} bind executeonly def
/Underline {
mark exch
@@ -4849,7 +4940,7 @@
put
} if
loadannot /ANN pdfmark false
-} bdef
+} bind executeonly def
%% Widget annotations are only used with AcroForms, and since we don't preserve AcroForms
%% we don't want to preserve widget annotations either, because the consumer of the new
@@ -4856,11 +4947,16 @@
%% PDF won't know what values they should take. So we draw widget annotations instead. If we
%% ever preserve AcroForms then we should alter this to preserve Widgets as well.
%% simply chane "drawannot" to "mark exch loadannot /ANN pdfmark"
-/Widget {mark exch {drawannot} PDFSTOPONERROR {exec}{stopped {(Error: Ignoring invalid annotation, output may be incorrect.\n) pdfformaterror} if} ifelse cleartomark false} bdef
+/Widget {mark exch {drawannot} PDFSTOPONERROR {exec}{stopped {(Error: Ignoring invalid annotation, output may be incorrect.\n) pdfformaterror} if} ifelse cleartomark false} bind executeonly def
currentdict end readonly def
/preserveannot { % <annot> preserveannot -
+
+ dup /.gs.pdfobj# known {
+ dup /.gs.pdfobj# undef
+ } if
+
dup annotvisible {
gsave
dup dup /Subtype knownoget {
@@ -4888,7 +4984,7 @@
} ifelse
grestore
} if pop % annotvisible
-} bdef
+} bind executeonly def
currentdict /preserveannottypes undef
currentdict /.PDFDrawAnnotType? undef
@@ -4902,7 +4998,7 @@
} {
oget
} ifelse
-} bdef
+} bind executeonly def
% All procedures have the signature:
% <acroform> <field> <annot|field> foo <acroform> <field> <annot|field>
@@ -4936,7 +5032,7 @@
} ifelse
} ifelse
} ifelse
-} bdef
+} bind executeonly def
/Tx {
dup /AP known {
@@ -4984,7 +5080,7 @@
dup 1 1 3 -1 roll drawwidget
} if
} ifelse
-} bdef
+} bind executeonly def
/Ch {
dup /AP known 3 index /NeedAppearances knownoget not { //true } if not and {
@@ -5032,11 +5128,11 @@
dup 1 1 3 -1 roll drawwidget
} if
} ifelse
-} bdef
+} bind executeonly def
/Sig {
(Sig is not yet implemened ) //== exec
-} bdef
+} bind executeonly def
currentdict end def
@@ -5050,7 +5146,7 @@
} if
} if
pop pop
-} bdef
+} bind executeonly def
% We distinguish 4 types of nodes on the form field tree:
% - non-terminal field - has a kid that refers to the parent (or anywhere else)
@@ -5077,7 +5173,7 @@
} {
draw_terminal_field % merged annotation % -
} ifelse
-} bdef
+} bind executeonly def
/draw_acro_form { % <form> draw_acro_form -
dup /Fields knownoget {
@@ -5084,7 +5180,7 @@
{ oforce draw_form_field } forall
} if
pop
-} bdef
+} bind executeonly def
currentdict /draw_terminal_field_dict undef
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_font.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -68,7 +68,7 @@
{ 3 copy put pop 1 add }
ifelse
} forall pop
-} bdef
+} bind executeonly def
/good_encoding_names <<
/MacRomanEncoding 0 /MacExpertEncoding 0 /WinAnsiEncoding 0
@@ -130,7 +130,7 @@
( Output may be incorrect.\n) pdfformaterror
}
ifelse
- } bdef
+ } bind executeonly def
currentdict /good_encoding_names undef
currentdict /known_symbolic_fonts undef
@@ -146,7 +146,7 @@
} if
} if
pop
-} bind def
+} bind executeonly def
% Define a font using it's FontName as the key.
% Adjust a font according to the Encoding and Widths in the font resource.
@@ -166,7 +166,7 @@
/Helvetica findfont
}if
} if
-} bind def
+} bind executeonly def
% Get the (possibly modified) encoding of a font.
/getfontencoding { % <font-resource> <font> getfontencoding
@@ -213,7 +213,7 @@
} ifelse
} ifelse
} ifelse
-} bdef
+} bind executeonly def
% Returns true if the current glyph is in the Differences array at
% the specified index value. This is needed because the Widths
@@ -240,7 +240,7 @@
% stack: true false index glyphname
% or : false index glyphname at_index
pop pop pop
-} bdef
+} bind executeonly def
/unique_name { % <dict> </root> unique_name </unique>
%
@@ -262,7 +262,7 @@
pop
} for
exch pop cvn % /root0
-} bdef
+} bind executeonly def
% Get the metrics of a font, if specified.
/getfontmetrics { % <font-resource> <font> <Encoding|null> getfontmetrics
@@ -397,7 +397,7 @@
} {
//null //null
} ifelse
-} bdef
+} bind executeonly def
currentdict /unique_name undef
currentdict /match_in_diff undef
@@ -408,13 +408,13 @@
pop
dup userdict exch /.lastToUnicode exch put
exch pop
- } bdef
+ } bind executeonly def
/CIDSystemInfo
{
( **** Warning: ToUnicode CMap has invalid syntax near CIDSystemInfo.\n) pdfformatwarning
/CIDSystemInfo
- } bdef % A work around a bug in Altona.Page_3.2002-09-27.pdf - a slash is missed.
+ } bind executeonly def % A work around a bug in Altona.Page_3.2002-09-27.pdf - a slash is missed.
/CMapName
{
@@ -421,7 +421,7 @@
( **** Warning: ToUnicode CMap has no CMapName.\n\
See the comment to revision 6201 in gs/doc/ps2pdf.htm#Problems .\n) pdfformatwarning
/CMap1 % arbitrary, PDF defineresource tolerates non-unique names
- } bdef % A work around incorrect ToUnicode CMap generated by GS before rev. 6201.
+ } bind executeonly def % A work around incorrect ToUnicode CMap generated by GS before rev. 6201.
% Split large ranges into smaller chunks to stay withing the limits
% of various PS% objects and speed up operand stack manipulation,
@@ -448,7 +448,7 @@
mark
} ifelse
} loop
- } bdef
+ } bind executeonly def
currentdict end readonly def
/string2number % <string> string2number <number>
@@ -457,7 +457,7 @@
3 2 roll 256 mul add exch % v+n*256 ()
} for
pop % N
-} bind def
+} bind executeonly def
/copy&def % <key> <value> <bool> copy&def -
{
@@ -474,7 +474,7 @@
setglobal
} if
def
-} bind def
+} bind executeonly def
/.convert_ToUnicode-into-g2u % <GlyphNames2Unicode> <Encoding|null> <CMap> .convert_ToUnicode-into-g2u -
{
@@ -578,7 +578,7 @@
CMAPDEBUG {
(.convert_ToUnicode-into-g2u end) =
} if
-} bind def
+} bind executeonly def
/.DoToUnicode?
{
@@ -585,7 +585,7 @@
/IgnoreToUnicode where
{/IgnoreToUnicode get not}
{//true} ifelse
-} bind def
+} bind executeonly def
/.processToUnicode % <font-resource> <font-dict> <encoding|null> .processToUnicode -
{
@@ -718,7 +718,7 @@
{pop pop pop}
ifelse
-} bind def
+} bind executeonly def
currentdict /.DoToUnicode? .forceundef
@@ -768,7 +768,7 @@
4 2 roll .growput
} ifelse
} ifelse
-} bind def
+} bind executeonly def
% Add original font to cache to prevent adjustfont to accumulate changes.
/pdfaddcachedfont { % <font_name> pdfaddcachedfont <font>
@@ -776,7 +776,7 @@
dup gcheck { //.pdforigfontcache_g } {.pdforigfontcache_l} ifelse
4 2 roll % font d name font
put % font
-} bind def
+} bind executeonly def
/.remove_font_name_prefix { % <name> .remove_font_name_prefix <name>
dup .namestring (+) search {
@@ -792,7 +792,7 @@
} {
pop
} ifelse
-} bind def
+} bind executeonly def
% Find a font (except for embedded ones), and adjust its encoding if necessary.
/.pdfdfndict mark
@@ -965,18 +965,18 @@
} ifelse
} ifelse
exch pop
-} bdef
+} bind executeonly def
% ---------------- Type 1 fonts ---------------- %
/buildType1 % <Type1-font-resource> buildType1 <font>
{ dup /BaseFont get pdffindfont
- } bdef
+ } bind executeonly def
% Read an embedded Type 1 font.
/readfontfilter { % <proc> readfontfilter <filter>
0 () /SubFileDecode filter
-} bdef
+} bind executeonly def
% Adobe Acrobat doesn't skip space characters after eexec
/eexec_pdf_param_dict mark
@@ -1051,12 +1051,12 @@
} ifelse
} if
prev_definefont
- } bdef
+ } bind executeonly def
/undef_proc_warning {
/Repaired //true store % flag that we have warnings
UndefProcList exch 2 copy .knownget { 1 add } { 1 } ifelse put
- } bdef
+ } bind executeonly def
/missing-type1-procs 6 dict begin
/-| { string currentfile exch readstring pop /-| //undef_proc_warning exec } executeonly bdef
@@ -1080,7 +1080,7 @@
currentfile flushfile % Skip the trailer after return from eexec, bug 690701.
{ currentdict end //missing-type1-procs eq { exit } if } loop
{ stop } if
- } bdef
+ } bind executeonly def
/readonly-op-dict <<
/stringtype 0
@@ -1094,7 +1094,7 @@
( **** Warning: Type 1 font applies operator readonly to an invalid object type.\n)
pdfformatwarning
} if
- } bdef
+ } bind executeonly def
/prev_get /get load def
@@ -1110,7 +1110,7 @@
prev_get
} ifelse
} ifelse
- } bdef
+ } bind executeonly def
/prev_begin /begin load def
@@ -1117,7 +1117,7 @@
/begin {
dup //systemdict eq { pop 0 dict } if
prev_begin
- } bdef
+ } bind executeonly def
{ /undef_proc_warning /missing-type1-procs /readonly-op-dict }
{ currentdict exch undef } forall
@@ -1152,7 +1152,7 @@
PDFfile file-position setfileposition
count stack-count sub { pop } repeat
topFontDict end end
- } bdef
+ } bind executeonly def
% ---------------- Type 3 fonts ---------------- %
@@ -1241,7 +1241,7 @@
} bdef
dup currentdict Encoding .processToUnicode
currentdict end .completefont exch pop
-} bdef
+} bind executeonly def
/.adjustcharwidth { % <wx> <wy> .adjustcharwidth <wx'> <wy'>
% Enforce the metrics, in glyph space, to the values found in the PDF Font object
% - force wy == 0 (assumed, and not stored in the PDF font)
@@ -1258,7 +1258,7 @@
exch pop Widths CharCode FirstChar sub get exch
} if end
} if
-} bdef
+} bind executeonly def
% ---------------- TrueType fonts ---------------- %
@@ -1318,7 +1318,7 @@
} {
pdffindfont
} ifelse
-} bdef
+} bind executeonly def
% Read an embedded TrueType font.
/readtruetype { % <font-resource> <stream-dict> readtruetype <font>
@@ -1328,6 +1328,18 @@
% Stack: filepos fontres stream
1 index /CIDSystemInfo oknown {
1 index /CIDSystemInfo get dup type /packedarraytype eq {exec}if
+ dup /Registry known not {
+ ( **** Warning: a CIDFont's CIDSystemInfo is missing the required Registry entry\n) pdfformatwarning
+ dup /Registry (Adobe) put
+ } if
+ dup /Ordering known not {
+ ( **** Warning: a CIDFont's CIDSystemInfo is missing the required Ordering entry\n) pdfformatwarning
+ dup /Ordering (Identity) put
+ } if
+ dup /Supplement known not {
+ ( **** Warning: a CIDFont's CIDSystemInfo is missing the required Supplement entry\n) pdfformatwarning
+ dup /Supplement 0 put
+ } if
3 1 roll
1 index /Subtype knownoget {
/CIDFontType2 ne {
@@ -1371,7 +1383,7 @@
PDFfile 3 -1 roll setfileposition
% Ignore both the Encoding and the Widths.
exch pop
-} bdef
+} bind executeonly def
% ---------------- Type 0 fonts ---------------- %
@@ -1413,7 +1425,7 @@
end % CMap
end % CIDInit ProcSet
exch .setglobal
-} bdef
+} bind executeonly def
/CMap_read_dict 3 dict begin
/defineresource % <name> <dict> <cat-name> defineresource <dict>
@@ -1421,13 +1433,13 @@
pop
/.last_CMap_def 1 index store
exch pop
- } bdef
+ } bind executeonly def
/CIDSystemInfo
{
( **** Error: CMap has invalid syntax near CIDSystemInfo.\n) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
/CIDSystemInfo
- } bdef % A work around a bug in Altona.Page_3.2002-09-27.pdf - a slash is missed.
+ } bind executeonly def % A work around a bug in Altona.Page_3.2002-09-27.pdf - a slash is missed.
/CMapName
{
( **** Error: CMap has no CMapName.\n\
@@ -1434,7 +1446,7 @@
See the comment to revision 6201 in gs/doc/ps2pdf.htm#Problems .\n) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
/CMap1 % arbitrary, PDF defineresource tolerates non-unique names
- } bdef % A work around incorrect ToUnicode CMap generated by GS before rev. 6201.
+ } bind executeonly def % A work around incorrect ToUnicode CMap generated by GS before rev. 6201.
currentdict end readonly def
% Read an embedded stream that we *hope* is a PostScript CMap. According
@@ -1451,7 +1463,7 @@
currentdict end
dup /CMapName get exch
/CMap defineresource end
-} bdef
+} bind executeonly def
% Read embedded CMap stream.
% if the <wmode> parameter is null, it indicates there is no WMode, and we
@@ -1475,7 +1487,7 @@
{ currentdict end //CMap_read_dict eq { exit } if } loop
dup /.last_CMap_def undef
/CMap defineresource
-} bdef
+} bind executeonly def
currentdict /CMap_read_dict undef
@@ -1536,7 +1548,7 @@
pop
} ifelse
} if exch pop
-} bdef
+} bind executeonly def
% ---------------- CIDFontType0/2 fonts ---------------- %
@@ -1589,7 +1601,7 @@
dup /CDevProc 1 index /CIDWProc load /exec load 3 packedarray cvx put
exch pop
-} bdef
+} bind executeonly def
/.pdfMakeInternalMTXArray { % <mtx_array> <item_size> .pdfConvertInternalW <mtx_array'>
% convert /W or /W2 to internal expression
@@ -1645,10 +1657,10 @@
[ { putMTXEntry Mi1 type get exec i Msize ge { exit } if } loop ]
end
-} def
+} executeonly def
-/.pdfMakeInternalW { dup length 0 gt { oforce_recursive 1 .pdfMakeInternalMTXArray } if } def
-/.pdfMakeInternalW2 { dup length 0 gt { oforce_recursive 3 .pdfMakeInternalMTXArray } if } def
+/.pdfMakeInternalW { dup length 0 gt { oforce_recursive 1 .pdfMakeInternalMTXArray } if } executeonly def
+/.pdfMakeInternalW2 { dup length 0 gt { oforce_recursive 3 .pdfMakeInternalMTXArray } if } executeonly def
/.pdfGetMTXByCID { % <internalMTXArray> <cid>
% .pdfGetMTXByCID
@@ -1668,7 +1680,7 @@
{ exit } if
} forall
dup type /arraytype eq { exch pop //true } { pop //false } ifelse
-} def
+} executeonly def
% Apply the [D]W[2] metrics to a character before displaying.
/CIDWProc { % <w0x> <w0y> <llx> <lly> <urx> <ury>
@@ -1776,7 +1788,7 @@
11 -1 roll pop
% Stack: <w0x'> <w0y'> <llx> <lly> <urx> <ury> <w1x'> <w1y'> <vx'> <vy'>
end % recover currentdict
-} def
+} executeonly def
% <string> <match> tailmatch ==> <pre> true
% ==> <string> false
@@ -1789,7 +1801,7 @@
} {
pop //false
} ifelse
-} bind def
+} bind executeonly def
/makeboldfont {
16 dict begin
@@ -1830,7 +1842,7 @@
currentdict
end
dup /CIDFontName get exch /CIDFont defineresource
-} bind def
+} bind executeonly def
% <CIDFont-resource> <CIDFontName> findCIDFont <CIDFont-resource> <font>
% CIDFont-resource is not modified.
@@ -2014,15 +2026,15 @@
} if
/findresource cvx /undefined signalerror
} loop
-} bdef
+} bind executeonly def
/buildCIDType0 { % <CIDFontType0-font-resource> buildCIDType0 <font>
dup /BaseFont get findCIDFont exch pop
-} bdef
+} bind executeonly def
/buildCIDType2 { % <CIDFontType2-font-resource> buildCIDType2 <font>
dup /BaseFont get findCIDFont exch pop
-} bdef
+} bind executeonly def
/processCIDToGIDMap { % <fontres> <cidfont> processCIDToGIDMap <fontres> <cidfont>
1 index /CIDToGIDMap knownoget {
@@ -2055,7 +2067,7 @@
} ifelse
3 2 roll PDFfile exch setfileposition
} if
-} bdef
+} bind executeonly def
% Adjust a CIDFontType0 DW[2] in the font resource.
/adjustCIDType0 { % <font-resource> <font> adjustfont <font'>
@@ -2067,7 +2079,7 @@
addCIDmetrics
dup /CIDFontName get exch /CIDFont defineresource
} ifelse
-} bind def
+} bind executeonly def
% Adjust a CIDFontType2 DW[2] and CIDToGIDMap in the font resource.
/adjustCIDType2 { % <font-resource> <font> adjustfont <font'>
@@ -2082,7 +2094,7 @@
} if
dup /CIDFontName get exch /CIDFont defineresource
} ifelse
-} bind def
+} bind executeonly def
% ---------------- Other embedded fonts ---------------- %
@@ -2108,7 +2120,7 @@
closefile closefile pop
PDFfile 3 -1 roll setfileposition
pop pop
-} bdef
+} bind executeonly def
% Read an embedded CFF CIDFont.
/readCIDFontType0C { % <font-resource> <stream-dict> readCIDFontType0C <font>
@@ -2126,7 +2138,7 @@
% Use the FontName, rather than the BaseFont, here.
dup /FontDescriptor oget /FontName oget /CIDFont findresource
addCIDmetrics dup /CIDFontName get exch /CIDFont defineresource
-} bdef
+} bind executeonly def
% Read an embedded OpenType font.
/readOTTOfont { % <font-resource> <stream-dict> readOTTOfont <font>
@@ -2184,7 +2196,7 @@
closefile closefile pop pop % font res pos
PDFfile exch setfileposition % font res
pop % font
-} bdef
+} bind executeonly def
% ---------------- Font lookup ---------------- %
@@ -2216,10 +2228,10 @@
% Bind a proc and define n names
% /name ... /name {proc} n bndef -
/bndef
- { exch bind exch
+ { exch bind executeonly exch
{ dup 3 1 roll def } repeat
pop
- } bdef
+ } bind executeonly def
% <res> run-fonttypeproc <font>
/run-fonttypeproc {
@@ -2232,7 +2244,7 @@
2 copy /Subtype exch put
} if
//fonttypeprocs exch get exec
-} bdef
+} bind executeonly def
% Prototype for all procedures: <res> <desc> <stream> foo <font>
/font_tag_dict 13 dict begin
@@ -2241,7 +2253,7 @@
/no_stream
{ pop pop
run-fonttypeproc
- } bdef
+ } bind executeonly def
/bad_stream
{ ( **** Error: Error reading font stream, attempting to load the font using its name\n)
@@ -2248,12 +2260,12 @@
pdfformaterror
( Output may be incorrect.\n) pdfformaterror
//no_stream exec
- } bdef
+ } bind executeonly def
<8001> % PFB
{ dup /PFB //true put
exch pop readtype1
- } bdef
+ } bind executeonly def
(%!PS) (%!Fo) % Type1
{ exch pop readtype1
@@ -2276,7 +2288,7 @@
(OTTO)
{ exch pop
readOTTOfont
- } bdef
+ } bind executeonly def
currentdict end readonly def
currentdict /bndef undef
@@ -2311,7 +2323,7 @@
16#7FFFFFFF and
xor % object_number CRC<newhash>
xor % final hashed value
-}bind def
+}bind executeonly def
% Either patch or create a new XUID based on the existing
% XUID or UniqueID and incorporating the PDF object number
@@ -2344,7 +2356,7 @@
.completefont
} ifelse
} ifelse
-} bind def
+} bind executeonly def
/resourcefont % <font-resource> resourcefont <font>
{
@@ -2489,7 +2501,7 @@
dup 3 1 roll /PSFont exch put
} ifelse
dup checkGlyphNames2Unicode
-} bdef
+} bind executeonly def
currentdict /font_tag_dict .undef
currentdict /fonttypeprocs .undef
@@ -2499,7 +2511,7 @@
/d0 {
currentcolor currentcolorspace .swapcolors setcolorspace setcolor .swapcolors
.adjustcharwidth setcharwidth
- } bdef
+ } bind executeonly def
/d1 {
2 copy % ... llx lly urx ury | urx ury
0 ne exch 0 ne % ... llx lly urx ury | ury!=0 urx!=0
@@ -2511,7 +2523,7 @@
} {
6 -2 roll .adjustcharwidth 6 2 roll setcachedevice
} ifelse
- } bdef
+ } bind executeonly def
/Tf {
1 index Page /Font rget {
dup type /dicttype eq {
@@ -2550,7 +2562,7 @@
Tf
} ifelse
} ifelse
- } bdef
+ } bind executeonly def
end
end % pdfdict
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_main.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -30,7 +30,7 @@
currentdevice //.writepdfmarkdict .getdeviceparams
mark eq { //false } { pop pop //true } ifelse
systemdict /DOPDFMARKS known or
-} bind def
+} bind executeonly def
% For simplicity, we use a single interpretation dictionary for all
% PDF graphics execution, even though this is too liberal.
@@ -37,21 +37,21 @@
/pdfopdict mark
objopdict { } forall
drawopdict { } forall
- /endstream { exit } bind
- (%%EOF) cvn { exit } bind % for filters
+ /endstream { exit } bind executeonly
+ (%%EOF) cvn { exit } bind executeonly % for filters
/obj { ( **** Error: Content stream is not terminated by 'endstream'.\n)
pdfformaterror
( Output may be incorrect.\n) pdfformaterror
- } bind
+ } bind executeonly
% PDF 1.1 operators
- /BX { /BXlevel BXlevel 1 add store } bind
- /EX { /BXlevel BXlevel 1 sub store } bind
- /PS { cvx exec } bind
+ /BX { /BXlevel BXlevel 1 add store } bind executeonly
+ /EX { /BXlevel BXlevel 1 sub store } bind executeonly
+ /PS { cvx exec } bind executeonly
% PDF 1.2 operators
/BMC {
/BMClevel BMClevel 1 add store
pop
- } bind
+ } bind executeonly
/BDC {
/BMClevel BMClevel 1 add store
exch /OC eq {
@@ -69,7 +69,7 @@
} {
pop
} ifelse
- } bind
+ } bind executeonly
/EMC {
OFFlevels BMClevel
2 copy known {
@@ -77,7 +77,7 @@
} if
1 sub /BMClevel exch store
pop
- } bind
+ } bind executeonly
/MP { pop } bind
/DP { pop pop } bind
/- { 0 % Bug 690016
@@ -84,12 +84,121 @@
( **** Error: Invalid operator '-' is assumed to be the number 0.\n)
pdfformaterror
( Output may be incorrect.\n) pdfformaterror
- } bind
+ } bind executeonly
/Recursive_XObject_D 1 dict def
.dicttomark readonly def
+
+% This dictionaty encapsulates all that is needed to generate pagelabel pdfmarks.
+%
+% This is provided by Leon Bottou for the benefit of the djvudigital device
+% which is a device developed and maintained outside of Artifex, and which is
+% not a contributed device.
+%
+% This device does not cope with the method used by pdfwrite to pass the pagelabels
+% number tree as a 'blob' of data, but requires that the page labels be passed using
+% a PAGELABEL pdfmark.
+%
+% We don't want to do that with pdfwrite because there is no mechanism in pdfmark syntax
+% to pass a tree, which means we'd have to laboriously disassemble the pdfmarks for the
+% page labels and rebuild a number tree for it. This would mean pattern matching each
+% string passed via PAGELABEL to see if it could be defined as a continuation
+% of the preceding string, uing prefixes. Its much easier for us just to pass the tree.
+%
+% Note that this code simply translates the PageLabels Number tree into a number of
+% individual PAGELABEL pdfmarks, if used for pdfwrite this would result in a number
+% tree which consists solely of leaf nodes, where each node has a string for its label.
+% This can be considerably more verbose than the shorthand possible with a Page Label
+% dictionary.
+%
+/pagelabeldict mark
+ % (TEXT) .toLower (text)
+ /.toLower {
+ dup length 1 sub -1 0 {
+ 1 index exch 2 copy get 2#00100000 or put
+ } for
+ } bind executeonly
+ % int .cvAlpha (int in alphabetic base 26)
+ /.cvAlpha {
+ [ exch % construct an array of ASCII values, in reverse
+ { % the remainder stays on the top of stack
+ dup 0 eq { pop exit } if % quit if the value is zero
+ dup 26 mod dup 0 eq { 26 add } if % so that the division is correct
+ dup 64 add 3 1 roll sub 26 idiv % save the ASCII value and iterate
+ } loop ]
+ dup length dup string 3 1 roll
+ dup -1 1 { % put the letters in a string
+ 4 copy sub exch 4 -1 roll 1 sub get put
+ } for pop pop
+ } bind executeonly
+ % int .cvRoman (int in capital Roman numerals)
+ % convert a positive integer to capital Roman numerals
+ % return a decimal string if >= 4000
+ /.cvRoman {
+ dup 255 string cvs % start with the decimal representation
+ exch 4000 lt { % convert only if Roman numerals can represent this
+ dup length
+ [ [ () (I) (II) (III) (IV) (V) (VI) (VII) (VIII) (IX) ]
+ [ () (X) (XX) (XXX) (XL) (L) (LX) (LXX) (LXXX) (XC) ]
+ [ () (C) (CC) (CCC) (CD) (D) (DC) (DCC) (DCCC) (CM) ]
+ [ () (M) (MM) (MMM) ] ] % Roman equivalents
+ () % append the Roman equivalent of each decimal digit to this string
+ 2 index -1 1 {
+ 2 index 1 index 1 sub get
+ 5 index 5 index 4 -1 roll sub get
+ 48 sub get concatstrings
+ } for
+ 4 1 roll pop pop pop
+ } if
+ } bind executeonly
+ % style printers
+ /PageStyle <<
+ /D { 255 string cvs } bind executeonly
+ /R { .cvRoman } executeonly
+ /r { .cvRoman .toLower } executeonly
+ /A { .cvAlpha } executeonly
+ /a { .cvAlpha .toLower } executeonly >>
+ % check whether we want to generate pdfmarks
+ /wantpagelabelmarks {
+ % WantsPageLabels means that pagelabels will be passed
+ % using .pdfpagelabels and not using pdfmarks
+ /WantsPageLabels /GetDeviceParam .special_op
+ {pop pop false}{true} ifelse
+
+ %% This is truly ugly.....
+ %% GSView 5 redefines pdfmark and processes it itself. However if it gets
+ %% a pdfmark it cannot cope with, it simply fails. Its not prepared to cope
+ %% with PAGELABEL pdfmarks, so we don't want to send it to them. There's no
+ %% way for us to fix GSView 5, its long out of any kind of support, but we do
+ %% try not to break it. We happen to know that GSView 5 installs a GSview
+ %% dictionary in userdict, so this test simply ensures we don't emit PAGELABEL
+ %% pdfmarks if that dictioanry is present.
+ userdict /GSview known {pop false} if
+ } bind executeonly
+ % generate pagelabel pdfmark
+ /dopagelabel { % -- dopagelabel --
+ << /S null /P () /O 0 >> begin
+ wantpagelabelmarks {
+ Trailer /Root knownoget {
+ oforce /PageLabels knownoget {
+ oforce Page# 1 sub
+ numogetle
+ { oforce
+ dup /S knownoget not { //false } if /S exch def
+ dup /P knownoget not { 0 string } if /P exch def
+ /St knownoget not { 1 } if exch sub /O exch def
+ } if
+ P Page# 1 sub O add PageStyle S knownoget { exec concatstrings } if
+ mark /Label 3 -1 roll /PAGELABEL pdfmark
+ } if
+ } if
+ } if
+ end
+ } bind executeonly
+.dicttomark readonly def
+
% ======================== Main program ======================== %
end % pdfdict
@@ -199,7 +308,7 @@
pdfdict begin
pdfopen begin
/CumulativePageCount currentpagedevice /PageCount get def
-} bind def
+} bind executeonly def
/runpdfpagerange { % - runpdfpagerange <firstpage#> <lastpage#>
<</DisablePageHandler true>> setpagedevice
@@ -386,7 +495,7 @@
} ifelse
} ifelse
}ifelse
-} bind def
+} bind executeonly def
/dopdfpages { % firstpage# lastpage# dopdfpages -
<< /PDFScanRules //true >> setuserparams % set scanning rules for PDF vs. PS
@@ -412,7 +521,7 @@
% imaged is a PS file.
currentpagedevice /PageSpotColors known { << /PageSpotColors -1 >> setpagedevice } if
<< /PDFScanRules //null >> setuserparams % restore scanning rules for PS
-} bind def
+} bind executeonly def
/runpdfend {
RepairedAnError
@@ -428,7 +537,7 @@
PDFTopSave restore
end % userdict
2 vmreclaim % couldn't hurt
-} bind def
+} bind executeonly def
% Copy stream to an external temporary file and
% return the file name as PS name.
@@ -459,7 +568,7 @@
} {
closefile
} ifelse
-} bind def
+} bind executeonly def
% Recursively enumerate /Names entries
% <node> pdf_collection_names /temp_file_name ...
@@ -488,7 +597,7 @@
} forall
} if
} ifelse
-} bind def
+} bind executeonly def
% Copy selected subfiles to temporary files and return the file names
% as a PostScript names to protect them from restore.
@@ -508,7 +617,7 @@
pop
} ifelse
} if
-} bind def
+} bind executeonly def
/runpdf { % <file> runpdf -
%% Get the PDF filename (it *must* be a file even if it came from stdin it gets
@@ -551,7 +660,7 @@
} forall
pop
} ifelse
-} bind def
+} bind executeonly def
currentdict /pdf_collection_files .undef
@@ -560,7 +669,7 @@
% It is OK to use { (%stdin) run } here, because a startjob cannot occur.
/.runstdin {
{ (%stdin) run } execute0
-} bind def
+} bind executeonly def
end % userdict
pdfdict begin
@@ -577,14 +686,14 @@
% they are invalid, the PDF file is probably unreadable anyway.
/traileropdict mark
- (<<) cvn { /dictlevelcount dictlevelcount 1 add store mark } bind
+ (<<) cvn { /dictlevelcount dictlevelcount 1 add store mark } bind executeonly
(>>) cvn { { .dicttomark } stopped {
( **** Warning: File has unbalanced >> in trailer.\n) pdfformatwarning
} if
/dictlevelcount dictlevelcount 1 sub def
dictlevelcount 0 eq { exit } if
- } bind
- ([) cvn { mark } bind % ditto
+ } bind executeonly
+ ([) cvn { mark } bind executeonly % ditto
(]) cvn dup load
% /true true % see .pdfexectoken in pdf_base.ps
% /false false % ibid.
@@ -596,7 +705,7 @@
( **** Error: indirect object reference \(R\) encountered with invalid arguments.) pdfformaterror
( Output may be incorrect.\n) pdfformaterror
} ifelse
- } bind % see Objects below
+ } bind executeonly % see Objects below
.dicttomark readonly def
% After reading entry count: skip whitespace, exit on a digit
@@ -777,7 +886,7 @@
pdfformatwarning
} if
PDFfile traileropdict .pdfrun
- } bind def
+ } bind executeonly def
currentdict /xref-char-dict undef
@@ -784,15 +893,15 @@
% This dicitonary is used to read the xref dictionary. It should work for
% reading any dictionary. dictlevelcount must contain 0.
/xrefopdict mark
- (<<) cvn { /dictlevelcount dictlevelcount 1 add def mark } bind
+ (<<) cvn { /dictlevelcount dictlevelcount 1 add def mark } bind executeonly
(>>) cvn { .dicttomark /dictlevelcount dictlevelcount 1 sub def
- dictlevelcount 0 eq { exit} if } bind
- ([) cvn { mark } bind % ditto
+ dictlevelcount 0 eq { exit} if } bind executeonly
+ ([) cvn { mark } bind executeonly % ditto
(]) cvn dup load
% /true true % see .pdfexectoken in pdf_base.ps
% /false false % ibid.
% /null null % ibid.
- /R { /resolveR cvx 3 packedarray cvx } bind % see Objects below
+ /R { /resolveR cvx 3 packedarray cvx } bind executeonly % see Objects below
.dicttomark readonly def
% Get a variable length positive integer value from a stream. A value
@@ -800,7 +909,7 @@
/getintn { % <stream> <count> getintn int
0 exch { 256 mul 1 index read pop add } repeat
exch pop % Discard stream
-} bind def
+} bind executeonly def
% This array contains handlers for processing the different types of
% entries in the XRef stream.
@@ -813,7 +922,7 @@
% (obj num: ) print 2 index pdfstring cvs print ( ) print
% (loc: ) print 1 index pdfstring cvs print ( ) print
% (gen: ) print dup === flush
- } bind % Do nothing for free xref entries
+ } bind executeonly % Do nothing for free xref entries
% XRef entry type 1 - normal or n type xref entry
{ % field 2 = obj loc, field 3 = gen num
% (normal ) print
@@ -823,7 +932,7 @@
0 3 1 roll % set stream number = 0
//false setxrefentry
3 -1 roll pop % remove stream number
- } bind
+ } bind executeonly
% XRef entry type 2 - compressed object type xref entry
{ % field 2 = object stream num, field 3 = index into object stream
% (Compressed objects: ) print
@@ -831,7 +940,7 @@
% (field 2: ) print 1 index pdfstring cvs print ( ) print
% (field 3: ) print dup === flush
0 //false setxrefentry pop % set generation number = 0
- } bind
+ } bind executeonly
] def
% Read the PDF 1.5 version of the xref table.
@@ -913,7 +1022,7 @@
pop % Remove Index array pair loc
} for % Loop through Index array entries
pop pop % Remove Index array and xref stream
- } bind def
+ } bind executeonly def
% Read the cross-reference table.
% <pos> is the position either from the startxref statement or the /Prev
@@ -967,7 +1076,7 @@
}
{ readpdf15xref } % otherwise assume PDF 1.5 xref stream
ifelse
- } bind def
+ } bind executeonly def
% Open a PDF file and read the header, trailer, and cross-reference.
/pdfopen { % <file> pdfopen <dict>
@@ -997,7 +1106,7 @@
pdfopenfile begin
pdfopencache
currentdict end
-} bind def
+} bind executeonly def
/process_trailer_attrs { % - process_trailer_attrs -
writeoutputintents
@@ -1216,7 +1325,7 @@
} ifelse
} if
} if
-} bind def
+} bind executeonly def
% Verify that each entry in the xref table is pointing at an object with
% the correct object number and generation number.
@@ -1278,7 +1387,7 @@
/PageCount pdfpagecount def
/PageNumbers PageCount 65534 .min dict def
/PageIndex PageCount 65534 .min array def
-} bind def
+} bind executeonly def
/pdfopenfile { % <file> pdfopenfile <dict>
pdfdict readonly pop % can't do it any earlier than this
@@ -1441,7 +1550,7 @@
verify_page_tree
currentdict end
- } bind def
+ } bind executeonly def
%% Executing token on a file will close the file if we reach EOF while
%% processing. When repairing broken files (or searching for startxref
@@ -1468,7 +1577,7 @@
} {
token
} ifelse
-} bind def
+} bind executeonly def
% Look for the last (startxref) from the current position
% of the file. Return the position after (startxref) if found or -1 .
@@ -1478,7 +1587,7 @@
bytesavailable 9 lt { exit } if
pop dup fileposition
} loop
-} bind def
+} bind executeonly def
% Search for the last 'startxfer' and read a following token, which
% must be a number. Don't pay any attention to %%EOF because it's
@@ -1510,7 +1619,7 @@
( Output may be incorrect.\n) pdfformaterror
/findxref cvx /syntaxerror signalerror
} if
-} bind def
+} bind executeonly def
/stderrfile (%stderr) (w) file def
/stdoutfile (%stdout) (w) file def
@@ -1517,23 +1626,23 @@
/stderrprint { % <string> stderrprint -
//stderrfile dup 3 -1 roll writestring flushfile
-} bind def
+} bind executeonly def
/stdoutprint { % <string> stderrprint -
//stdoutfile dup 3 -1 roll writestring flushfile
-} bind def
+} bind executeonly def
/pdfformaterror { % <string> pdfformaterror -
stdoutprint
/Repaired //true store
/RepairedAnError //true store
-} bind def
+} bind executeonly def
/pdfformatwarning { % <string> pdfformaterror -
QUIET not {stdoutprint}{pop}ifelse
/Repaired //true store
PDFSTOPONWARNING {/warning cvx /undefined signalerror} if
-} bind def
+} bind executeonly def
/knownoget_safe
{ 2 copy knownoget { 3 1 roll pop pop //true } { pop pop //false } ifelse
@@ -1559,7 +1668,7 @@
stderrprint
( <<<<\n) stderrprint
} ifelse
-} bind def
+} bind executeonly def
% The UndefProcList collects noisy warnings.
% This gets rid of many multiple warnings from pdf_font.ps
/printCollectedWarnings {
@@ -1571,7 +1680,7 @@
} forall
(\n) stderrprint
} if
-} bind def
+} bind executeonly def
/printrepaired {
QUIET not
@@ -1587,7 +1696,7 @@
( **** specification.\n\n)
stdoutprint
} if
-} bind def
+} bind executeonly def
/printrepairederror {
QUIET not
@@ -1596,7 +1705,7 @@
( **** The rendered output from this file may be incorrect.\n)
stdoutprint
} if
-} bind def
+} bind executeonly def
% Write the outline structure for a file. Uses linkdest (below).
% omit links to pages that don't exist.
@@ -1677,7 +1786,7 @@
/First knownoget
{ { dup writeoutline /Next knownoget not { exit } if } loop }
if
- } bind def
+ } bind executeonly def
% Close a PDF file.
/pdfclose % <dict> pdfclose -
@@ -1684,7 +1793,7 @@
{ begin
PDFfile closefile
end
- } bind def
+ } bind executeonly def
% ======================== Page accessing ======================== %
@@ -1730,7 +1839,7 @@
ifelse
}
ifelse
- } bind def
+ } bind executeonly def
/obj_get {
LocalResources 1 index knownoget {
@@ -1754,7 +1863,7 @@
pop pop pop 0
}ifelse
}ifelse
-}bind def
+}bind executeonly def
% Get the value of a resource on a given page.
/rget { % <resname> <pagedict> <restype> rget <value> -true-
@@ -1790,7 +1899,7 @@
pop pop pop pop
} ifelse
} ifelse
-} bind def
+} bind executeonly def
% Get the total number of pages in the document.
/pdfpagecount % - pdfpagecount <int>
@@ -1835,7 +1944,7 @@
}{
0
} ifelse
- } bind def
+ } bind executeonly def
% Check for loops in the 'page tree' but accept an acyclic graph.
% - verify_page_tree -
@@ -1864,7 +1973,7 @@
end
} if
} if
-} bind def
+} bind executeonly def
/pdffindpage? { % <int> pdffindpage? 1 null (page not found)
% <int> pdffindpage? 1 noderef (page found)
@@ -1886,7 +1995,7 @@
% Stack: index null|noderef
dup //null eq { pop pop 1 //null exit } if
} loop
-} bind def
+} bind executeonly def
% Find the N'th page of the document by iterating through the Pages tree.
% The first page is numbered 1.
@@ -1901,10 +2010,10 @@
{ pop pop pop } % don't store more than 65534 pagenumbers
ifelse
exch pop
-} bind def
+} bind executeonly def
/pdffindpage { % <int> pdffindpage <pagedict>
pdffindpageref oforce
-} bind def
+} bind executeonly def
% Find the N'th page of the document.
% The first page is numbered 1.
@@ -1917,7 +2026,7 @@
{ exch pop oforce }
{ pop pdffindpage }
ifelse
- } bind def
+ } bind executeonly def
% Find the page number of a page object (inverse of pdfgetpage).
/pdfpagenumber % <pagedict> pdfpagenumber <int>
@@ -1931,7 +2040,7 @@
for exch pop
}
ifelse
- } bind def
+ } bind executeonly def
% Arrange the four elements that define a rectangle into a 'normal' order.
/normrect_elems % <x1> <y1> <x2> <y2> normrect_elems <llx> <lly> <urx> <ury>
@@ -1949,7 +2058,7 @@
2 copy gt { exch } if % <x2> <x1> <lly> <ury>
4 2 roll 2 copy lt { exch } if % <lly> <ury> <urx> <llx>
4 1 roll exch % <llx> <lly> <urx> <ury>
-} bind def
+} bind executeonly def
% Arrange a rectangle into a 'normal' order. I.e the lower left corner
% followed by the upper right corner.
@@ -1956,7 +2065,7 @@
/normrect % <rect> normrect <rect>
{
aload pop normrect_elems 4 array astore
-} bind def
+} bind executeonly def
/fix_empty_rect_elems % </Name> <x1> <y1> <x2> <y2> fix_empty_rect_elems <x1> <y1> <x2'> <y2'>
{ dup 3 index eq { //true } { 1 index 4 index eq } ifelse {
@@ -1968,11 +2077,11 @@
} {
5 -1 roll pop
} ifelse
-} bind def
+} bind executeonly def
/boxrect % <llx> <lly> <urx> <ury> boxrect <x> <y> <w> <h>
{ exch 3 index sub exch 2 index sub
- } bind def
+ } bind executeonly def
/resolvedest { % <name|string|other> resolvedest <other|null>
dup type /nametype eq {
Trailer /Root oget /Dests knownoget {
@@ -1993,12 +2102,12 @@
} ifelse
} if
} ifelse
-} bind def
+} bind executeonly def
% Procedures to do the necessary transformations of view destinations
% <PDF2PS_matrix> <rot> <view> -- <view'>
/viewdestprocs 8 dict dup begin
- /Fit { exch pop exch pop } bind def
+ /Fit { exch pop exch pop } bind executeonly def
/FitH {
aload length 2 lt {
1 array astore
@@ -2008,7 +2117,7 @@
4 -1 roll transform exch pop
2 array astore
} ifelse
- } bind def
+ } bind executeonly def
/FitV {
aload length 2 lt {
1 array astore
@@ -2018,7 +2127,7 @@
4 -1 roll transform pop
2 array astore
} ifelse
- } bind def
+ } bind executeonly def
/FitB /Fit load def
/FitBH /FitH load def
/FitBV /FitV load def
@@ -2051,7 +2160,7 @@
2 { 3 -1 roll //null eq { pop //null } if exch } repeat % put the nulls back
3 -1 roll
4 array astore
- } bind def
+ } bind executeonly def
/FitR {
exch pop
aload pop
@@ -2058,7 +2167,7 @@
2 { 5 index transform 4 2 roll } repeat normrect_elems
5 array astore
exch pop
- } bind def
+ } bind executeonly def
end readonly def
/linkdest { % <link|outline> linkdest
@@ -2109,102 +2218,31 @@
ifelse
}
if
-} bind def
+} bind executeonly def
+
+
+%% Used to recursively check dictionaries for any /.gs.pdfobj# keys
+%% and remove them if so
+%% -any- /Removepdfobj# -any-
+
+/Removepdfobj#
+{
+ dup type /dicttype eq {
+ dup /.gs.pdfobj# known {
+ dup /.gs.pdfobj# undef
+ } if
+ dup {Removepdfobj# 2 index 3 1 roll put} forall
+ } if
+}bind executeonly def
+
% <pagedict> mark ... -proc- <page#> <error>
/namedactions 8 dict dup begin
- /FirstPage { 1 /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add //false } def
- /LastPage { pdfpagecount /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add //false } def
- /NextPage { counttomark 2 add index pdfpagenumber 1 add dup pdfpagecount gt exch /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add exch} bind def
- /PrevPage { counttomark 2 add index pdfpagenumber 1 sub dup 1 lt exch /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add exch} bind def
+ /FirstPage { 1 /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add //false } bind executeonly def
+ /LastPage { pdfpagecount /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add //false } bind executeonly def
+ /NextPage { counttomark 2 add index pdfpagenumber 1 add dup pdfpagecount gt exch /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add exch} bind executeonly def
+ /PrevPage { counttomark 2 add index pdfpagenumber 1 sub dup 1 lt exch /CumulativePageCount where {pop CumulativePageCount}{0}ifelse add exch} bind executeonly def
end readonly def
% <pagedict> <annotdict> -proc- -
-/annottypes 5 dict dup begin
- /Text {
- mark exch
- { /Rect /Open /Contents /F}
- { 2 copy knownoget { 3 -1 roll } { pop } ifelse }
- forall pop {/ANN pdfmark} stopped {cleartomark} if
- } bind def
- /Link {
- /NO_PDFMARK_DESTS where {pop NO_PDFMARK_DESTS not}{true}ifelse
- {
- mark exch
- dup /BS knownoget { << exch { oforce } forall >> /BS exch 3 -1 roll } if
- dup /F knownoget { /F exch 3 -1 roll } if
- dup /C knownoget { /Color exch 3 -1 roll } if
- dup /Rect knownoget { /Rect exch 3 -1 roll } if
- dup /Border knownoget {
- dup type /arraytype eq {
- dup length 3 lt
- } {
- //true
- } ifelse {
- pop [ 0 0 0 ] % Following AR5 use invisible border.
- } if
- /Border exch 3 -1 roll
- } if
- dup /A knownoget {
- dup /URI known {
- /A mark 3 2 roll % <<>> /A [ <<action>>
- { oforce } forall
- .dicttomark
- 3 2 roll
- } {
- dup /S knownoget {
- %% Because we process GoTo Destinations into absolute references in the PDF file
- %% we need to resolve the /D or /Dest. However, we must *not* do this for
- %% GoToR Destinations because (obviously) those are in a different file and
- %% we cannot resolve them into absolute references. We don't need to anyway
- %% because that file must already have a named destination.
- dup /GoTo eq {
- pop
- dup /D knownoget {
- exch pop exch dup length dict copy dup /Dest 4 -1 roll put
- } if
- }{
- dup /GoToR eq {
- pop /A mark % <<..action dict..>> /A [
- 3 2 roll % /A [ <<..action dict..>>
- { oforce } forall
- .dicttomark
- 3 2 roll
- }{
- dup /Launch eq {
- pop /A mark % <<..action dict..>> /A [
- 3 2 roll % /A [ <<..action dict..>>
- { oforce } forall
- .dicttomark
- 3 2 roll
- }{
- /Named eq {
- /N knownoget {
- namedactions exch .knownget {
- exec {
- pop
- ( **** Warning: Ignoring a named action pointing out of the document page range.\n)
- pdfformatwarning
- } {
- /Page exch 3 -1 roll
- } ifelse
- } if
- } if
- } if
- }ifelse
- } ifelse
- } ifelse
- } if
- } ifelse
- } if
- { linkdest } stopped {
- cleartomark
- ( **** Warning: Link annotation points out of the document page range.\n)
- pdfformatwarning
- } {
- pop {/LNK pdfmark} stopped {cleartomark} if
- } ifelse
- }{pop} ifelse
- } bind def
-end readonly def
% **** The following procedure should not be changed to allow clients
% **** to directly interface with the constituent procedures. GSview
@@ -2216,14 +2254,14 @@
pdfshowpage_init % <pagedict>
pdfshowpage_setpage % <pagedict>
pdfshowpage_finish % -
- } bind def
+ } bind executeonly def
/pdfpagecontents % <pagedict> pdfpagecontents <contents>
- { } bind def
+ { } bind executeonly def
/pdfshowpage_init % <pagedict> pdfshowpage_init <pagedict>
{ /DSCPageCount DSCPageCount 1 add store
- } bind def
+ } bind executeonly def
/get_media_box { % <pagedict> get_media_box <box> <bool>
/MediaBox pget {
@@ -2234,7 +2272,7 @@
( Output may be incorrect.\n) pdfformaterror
[ 0 0 currentpagedevice /PageSize get aload pop ] //false
} ifelse
-} bind def
+} bind executeonly def
/get_any_box { % <pagedict> get_any_box <box name> <box>
//systemdict /UseBleedBox .knownget dup { and } if {
@@ -2325,7 +2363,7 @@
} ifelse
4 array astore % /SomeBox [mX0 mY0 mX1 mY1]
} ifelse
-} bind def
+} bind executeonly def
% Compute the matrix that transforms the PDF->PS "default" user space
/pdf_PDF2PS_matrix { % <pdfpagedict> -- matrix
@@ -2405,7 +2443,7 @@
% stack: savedCTM <pdfpagedict>
pop
matrix currentmatrix exch setmatrix
-} bind def
+} bind executeonly def
% Cache the matrix that transforms the PDF->PS "default" user space
% into <pdfpagedict> under the key //PDF2PS_matrix_key, then return it
@@ -2417,13 +2455,13 @@
dup dup pdf_PDF2PS_matrix //PDF2PS_matrix_key exch put
//PDF2PS_matrix_key get
} ifelse
-} bind def
+} bind executeonly def
currentdict /PDF2PS_matrix_key undef
/.pdfshowpage_Install { % <pagedict> [<prevproc>] .pdfshowpage_Install -
0 get exec
pdf_cached_PDF2PS_matrix concat
-} bind def
+} bind executeonly def
/pdfshowpage_setpage { % <pagedict> pdfshowpage_setpage <pagedict>
6 dict begin % for setpagedevice
@@ -2524,7 +2562,7 @@
/Install exch def
% Stack: pagedict currentpagedict
pop currentdict end setpagedevice
-} bind def
+} bind executeonly def
/.free_page_resources { % - .free_page_resources -
Page /Resources pget {
@@ -2538,7 +2576,7 @@
} forall
} if
} if
-} bind def
+} bind executeonly def
/pdfshowpage_finish { % <pagedict> pdfshowpage_finish -
save /PDFSave exch store
@@ -2551,6 +2589,9 @@
.writepdfmarks {
+ % Pagelabel
+ pagelabeldict begin dopagelabel end
+ % Copy the boxes.
% Copy the boxes.
{ /CropBox /BleedBox /TrimBox /ArtBox } {
2 copy pget {
@@ -2563,20 +2604,6 @@
pop
} ifelse
} forall
-
- % Copy annotations and links.
- dup /Annots knownoget {
- 0 1 2 index length 1 sub
- { 1 index exch oget
- dup type /dicttype eq {
- dup /Subtype oget annottypes exch .knownget { exec } { pop } ifelse
- } {
- pop
- } ifelse
- }
- for pop
- } if
-
} if % end .writepdfmarks
% Display the actual page contents.
@@ -2688,7 +2715,7 @@
.setglobal
/RepairedAnError exch def
/Repaired exch def
-} bind def
+} bind executeonly def
% Display the contents of a page (including annotations).
/showpagecontents { % <pagedict> showpagecontents -
@@ -2746,7 +2773,7 @@
//systemdict /ShowAcroForm .knownget { //true eq } { //false } ifelse {
Trailer /Root oget /AcroForm knownoget { draw_acro_form } if
} if
-} bind def
+} bind executeonly def
/processcolorspace { % - processcolorspace <colorspace>
% The following is per the PLRM3.
@@ -2754,7 +2781,7 @@
exch pop exch pop
dup type /nametype ne { cvn } if
dup { setcolorspace } .internalstopped { pop /DeviceRGB } if
-} bind def
+} bind executeonly def
% ------ Transparency support ------ %
@@ -2795,7 +2822,7 @@
% Also check for transparency in the annotation (if not in resources).
{ pop //true } { annotsusetransparency } ifelse
} ifelse
-} bind def
+} bind executeonly def
% Check if transparency is specified in an ExtGState dict
/extgstateusestransparency { % <gstate dict> extgstateusestransparency <bool>
@@ -2813,7 +2840,7 @@
pop exit
} loop
} ifelse
-} bind def
+} bind executeonly def
% Check if transparency is used in a Pattern
/patternusestransparency { % <Pattern dict> patternusestransparency <bool>
@@ -2827,7 +2854,7 @@
} loop
}
ifelse
-} bind def
+} bind executeonly def
% Check the Resources of a page or Form. Check for loops in the resource chain.
/resourceusestransparency { % <dict> <dict> resourceusestransparency <bool>
@@ -2895,7 +2922,7 @@
pop //false exit
} loop
exch pop
-} bind def
+} bind executeonly def
% Check if the annotations on a page use transparency
/annotsusetransparency { % <page dict> annotsusetransparency <bool>
@@ -2932,7 +2959,7 @@
} ifelse
} forall % For all annots on the page
} if
-} bind def
+} bind executeonly def
% Add a color name to our spot color list. Ignore /All and /None
/putspotcolor { % <name> <spotcolordict> putspotcolor -
@@ -2939,7 +2966,7 @@
% The 'name' could be a string. If so then convert to a name.
exch dup type /stringtype eq { cvn } if
dup dup /None eq exch /All eq or { pop pop } { 0 put } ifelse
-} bind def
+} bind executeonly def
% Determine which spot colors are used within a color space Note: This
% dict will include all colors used in Separation or DeviceN color spaces.
@@ -2964,7 +2991,7 @@
} ifelse
} if
pop pop
-} bind def
+} bind executeonly def
% Check the Resources of a page, form, or annotation. Determine which spot
% colors are used within the resource Note: The spot color dict will include
@@ -3039,7 +3066,7 @@
} if
exit
} loop
-} bind def
+} bind executeonly def
% Determine which spot colors are used within the annotations. Note: This
% dict will include all colors used in Separation or DeviceN color spaces.
@@ -3058,7 +3085,7 @@
pop
} ifelse
} forall
-} bind def
+} bind executeonly def
% Determine spot colors are used within a page. We are creating a dict to
% hold the spot color names as keys. Using a dict avoids having to worry
@@ -3093,7 +3120,7 @@
3 -1 roll
/Annots knownoget { annotsspotcolors } if
pop % Discard reference loop dict
-} bind def
+} bind executeonly def
% Determine how many (if any) spot colors are used by a page.
% Note: This count does not include Cyan, Magenta, Yellow, or Black
@@ -3104,7 +3131,7 @@
[ /Cyan /Magenta /Yellow /Black ]
{ 2 index exch known { 1 sub } if } forall
exch pop % Remove spot color dict
-} bind def
+} bind executeonly def
% ------ ColorSpace substitution support ------ %
@@ -3134,7 +3161,7 @@
} ifelse
} if
} if
-} bind def
+} bind executeonly def
%% <loopdict> <Objectdict> <calling obj_num> pdfform_detect_cspacesub <boolean>
%%
@@ -3218,7 +3245,7 @@
} loop
%% remove and discard the loopdict
exch pop
-} bind def
+} bind executeonly def
%
% <pagedict> pdfshowpage_detect_cspacesub <pagedict> <boolean>
@@ -3236,7 +3263,7 @@
/HighLevelDevice /GetDeviceParam .special_op {
exch pop not exch pop
}if
-} bind def
+} bind executeonly def
%
% <pagedict> pdfshowpage_setcspacesub <pagedict>
@@ -3309,7 +3336,7 @@
pop
} ifelse
} if
-} bind def
+} bind executeonly def
% Write OutputIntents to device if the device handles it
/writeoutputintents {
@@ -3370,7 +3397,7 @@
pop pop
} if
} if
-} bind def
+} bind executeonly def
end % pdfdict
.setglobal
@@ -3393,6 +3420,7 @@
/.setfillconstantalpha /.setalphaisshape /.currentalphaisshape
/.settextspacing /.currenttextspacing /.settextleading /.currenttextleading /.settextrise /.currenttextrise
/.setwordspacing /.currentwordspacing /.settexthscaling /.currenttexthscaling
+/.setdistillerparams
% Used by our own test suite files
%/.pushpdf14devicefilter % transparency-example.ps
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_ops.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -22,7 +22,7 @@
% to think this interpreter is a distiller.
% (If this interpreter really is a distiller, don't do this.)
systemdict /pdfmark known not
- { userdict /pdfmark { cleartomark } bind put } if
+ { userdict /pdfmark { cleartomark } bind executeonly put } if
userdict /GS_PDF_ProcSet 256 dict dup begin
@@ -71,10 +71,10 @@
20 dict copy dup begin
1 packedarray cvx executeonly /self exch def
graphicsbeginpage textbeginpage
-} bdef
+} bind executeonly def
/endpage { % - endpage -
showpage end
-} bdef
+} bind executeonly def
/graphicsbeginpage {
initgraphics
@@ -82,7 +82,7 @@
currentdict /ClipRect knownoget { aload pop rectclip } if
0 g 0 G //false op //false OP 0 OPM
1 ca 1 CA //null SMask //false AIS /Compatible BM //true TK
-} bdef
+} bind executeonly def
% We must allow /Show to be set, otherwise a text operation can
% end up in infinite recursion with showfirst calling Show, and
@@ -102,7 +102,7 @@
exch currentdict //nodict eq { /self dup load end 5 dict begin def } if
def
} ifelse
- } bdef
+ } bind executeonly def
currentdict /gput_always_allow .undef
/q {
@@ -139,7 +139,7 @@
}ifelse
} ifelse
PDFusingtransparency { .pushextendedgstate } if
-} bdef
+} bind executeonly def
% Some PDF files have excess Q operators!
/Q {
@@ -193,12 +193,12 @@
pdfformaterror
} ifelse
} if
-} bdef
+} bind executeonly def
% Save PDF gstate
/qstate { % - qstate <qstate>
gstate
-} bdef
+} bind executeonly def
% Set PDF gstate
/setqstate { % <qstate> setqstate -
@@ -209,11 +209,11 @@
exch setgstate matrix currentmatrix matrix setmatrix
exch newpath uappend setmatrix
} ifelse
-} bdef
+} bind executeonly def
% ---------------- Color setting ---------------- %
-/nullpatternproc { pop } bdef
+/nullpatternproc { pop } bind executeonly def
/nullpattern mark
/PatternType 1 /PaintType 1 /TilingType 3 /BBox [0 0 1 1]
/XStep 1 /YStep 1 /PaintProc //nullpatternproc
@@ -264,33 +264,33 @@
DefaultQstate exch put
} if
} ifelse
-} bdef
+} bind executeonly def
/CSdict mark
- /DeviceGray { 0 } bind
- /DeviceRGB { [0 0 0] cvx } bind
- /DeviceCMYK { [0 0 0 1] cvx } bind
- /CIEBasedA { 0 } bind
- /CIEBasedABC { [0 0 0] cvx } bind
- /CalGray { pop /DeviceGray 0 } bind
- /CalRGB { pop /DeviceRGB [0 0 0] cvx } bind
- /Lab {[0 0 0] cvx } bind
- /ICCBased { [ 1 index 1 oget /N get { 0 } repeat ] cvx } bind
- /Separation { 1 } bind
+ /DeviceGray { 0 } bind executeonly
+ /DeviceRGB { [0 0 0] cvx } bind executeonly
+ /DeviceCMYK { [0 0 0 1] cvx } bind executeonly
+ /CIEBasedA { 0 } bind executeonly
+ /CIEBasedABC { [0 0 0] cvx } bind executeonly
+ /CalGray { pop /DeviceGray 0 } bind executeonly
+ /CalRGB { pop /DeviceRGB [0 0 0] cvx } bind executeonly
+ /Lab {[0 0 0] cvx } bind executeonly
+ /ICCBased { [ 1 index 1 oget /N get { 0 } repeat ] cvx } bind executeonly
+ /Separation { 1 } bind executeonly
/DeviceN { % What is the correct value??
[ 1 index 1 get length { 1 } repeat ] cvx
- } bind
- /Indexed { 0 } bind
- /Pattern { //nullpattern matrix makepattern } bind
+ } bind executeonly
+ /Indexed { 0 } bind executeonly
+ /Pattern { //nullpattern matrix makepattern } bind executeonly
.dicttomark readonly def
-/ri {//.renderingintentdict exch .knownget { .setrenderingintent } if } bdef
-/g {/DeviceGray .setfillcolorspace .setfillcolor } bdef
-/G {/DeviceGray .setstrokecolorspace .setstrokecolor} bdef
-/rg {/DeviceRGB .setfillcolorspace .setfillcolor} bdef
-/RG {/DeviceRGB .setstrokecolorspace .setstrokecolor} bdef
-/k {/DeviceCMYK .setfillcolorspace .setfillcolor} bdef
-/K {/DeviceCMYK .setstrokecolorspace .setstrokecolor} bdef
+/ri {//.renderingintentdict exch .knownget { .setrenderingintent } if } bind executeonly def
+/g {/DeviceGray .setfillcolorspace .setfillcolor } bind executeonly def
+/G {/DeviceGray .setstrokecolorspace .setstrokecolor} bind executeonly def
+/rg {/DeviceRGB .setfillcolorspace .setfillcolor} bind executeonly def
+/RG {/DeviceRGB .setstrokecolorspace .setstrokecolor} bind executeonly def
+/k {/DeviceCMYK .setfillcolorspace .setfillcolor} bind executeonly def
+/K {/DeviceCMYK .setstrokecolorspace .setstrokecolor} bind executeonly def
/cs {dup dup type /nametype ne { 0 get } if
dup /ICCBased eq {
1 index 1 get /OrigN .knownget not {1 index 1 get /N get} if mark
@@ -325,7 +325,7 @@
} {
//CSdict exch get exec exch .setfillcolorspace exec .setfillcolor
} ifelse
-} bdef
+} bind executeonly def
/CS {dup dup type /nametype ne { 0 get } if
dup /ICCBased eq {
1 index 1 get /OrigN .knownget not {1 index 1 get /N get} if mark
@@ -359,11 +359,11 @@
} {
//CSdict exch get exec exch .setstrokecolorspace exec .setstrokecolor
} ifelse
-} bdef
-/sc {.setfillcolor} bdef
-/SC {.setstrokecolor} bdef
-/sc* {.setfillcolor} bdef
-/SC* {.setstrokecolor} bdef
+} bind executeonly def
+/sc {.setfillcolor} bind executeonly def
+/SC {.setstrokecolor} bind executeonly def
+/sc* {.setfillcolor} bind executeonly def
+/SC* {.setstrokecolor} bind executeonly def
/sc*_and_set {
dup type /dicttype eq
{
@@ -376,7 +376,7 @@
} ifelse
} if
.setfillcolor
-} bdef
+} bind executeonly def
/SC*_and_set {
dup type /dicttype eq
{
@@ -389,9 +389,9 @@
} ifelse
} if
.setstrokecolor
-} bdef
-/sc1 {.setfillcolor} bdef
-/SC1 {.setstrokecolor} bdef
+} bind executeonly def
+/sc1 {.setfillcolor} bind executeonly def
+/SC1 {.setstrokecolor} bind executeonly def
/sc1_and_set {
dup type /dicttype eq
{
@@ -404,7 +404,7 @@
} ifelse
} if
.setfillcolor
-} bdef
+} bind executeonly def
/SC1_and_set {
dup type /dicttype eq
{
@@ -417,9 +417,9 @@
} ifelse
} if
.setstrokecolor
-} bdef
-/csput {dup dup type /nametype ne { 0 get } if //CSdict exch get exec exch 2 copy .setfillcolorspace exec .setfillcolor .setstrokecolorspace exec .setstrokecolor} bdef
-/csset {dup dup type /nametype ne { 0 get } if //CSdict exch get exec exch} bdef
+} bind executeonly def
+/csput {dup dup type /nametype ne { 0 get } if //CSdict exch get exec exch 2 copy .setfillcolorspace exec .setfillcolor .setstrokecolorspace exec .setstrokecolor} bind executeonly def
+/csset {dup dup type /nametype ne { 0 get } if //CSdict exch get exec exch} bind executeonly def
% ---------------- Color setting ---------------- %
@@ -427,14 +427,14 @@
% ---------------- Overprint/transparency setting ---------------- %
/op { .setfilloverprint
-} bdef % NB pdf_draw:gsparamdict handled /OP with no /op
+} bind executeonly def % NB pdf_draw:gsparamdict handled /OP with no /op
/OP { .setstrokeoverprint
-} bdef
+} bind executeonly def
/OPM {
/.setoverprintmode where { pop dup .setoverprintmode .swapcolors .setoverprintmode .swapcolors } { pop } ifelse
-} bdef
-/ca { .setfillconstantalpha } bdef
-/CA { .setstrokeconstantalpha } bdef
+} bind executeonly def
+/ca { .setfillconstantalpha } bind executeonly def
+/CA { .setstrokeconstantalpha } bind executeonly def
/SMask {
dup type /booleantype eq {
.currentSMask type /dicttype eq {
@@ -451,8 +451,8 @@
%% a gsave, so we haven't copied it to /self, if we don't do that here
%% then transparent annotations cause an invalid access error.
currentdict //nodict eq {/self dup load end 5 dict begin def} if
-} bdef
-/AIS { .setalphaisshape } bdef
+} bind executeonly def
+/AIS { .setalphaisshape } bind executeonly def
/BM {
/.setblendmode where {
pop [ exch dup type /nametype ne { aload pop } if /Normal ] {
@@ -461,15 +461,15 @@
} {
pop
} ifelse
-} bdef
+} bind executeonly def
/TK {
/.settextknockout where { pop .settextknockout } { pop } ifelse
-} bdef
+} bind executeonly def
/UseBlackPtComp {
%% Our implementation of black point compensation uses 0 or 1, not a boolean
/.setblackptcomp where {pop false eq {0}{1}ifelse .setblackptcomp }{ pop } ifelse
-} bdef
+} bind executeonly def
% ---------------- Color installation ---------------- %
@@ -488,7 +488,7 @@
} {
pop pop
} ifelse
-} bdef
+} bind executeonly def
/.settransparencymask { % <paramdict> <masknum> .settransparencymask -
exch dup type /dicttype ne {
PDFusingtransparency {
@@ -507,24 +507,24 @@
dup /Draw get exec
} ifelse
} ifelse
-} bdef
+} bind executeonly def
% (Non-mask) images must execute setfillblend.
/setfillblend {
.currentfillconstantalpha
.currentSMask .settransparencyparams
-} def
+} bind executeonly def
/setfillstate {
setfillblend
-} def
+} bind executeonly def
/setstrokestate {
.currentstrokeconstantalpha
.currentSMask .settransparencyparams
-} def
+} bind executeonly def
/Cdict 15 dict dup begin % <color...> <colorspace> -proc- -
- /DeviceGray { pop setgray } bdef
- /DeviceRGB { pop setrgbcolor } bdef
- /DeviceCMYK { pop setcmykcolor } bdef
- /CIEBasedA { setgcolorspace setcolor } bdef
+ /DeviceGray { pop setgray } bind executeonly def
+ /DeviceRGB { pop setrgbcolor } bind executeonly def
+ /DeviceCMYK { pop setcmykcolor } bind executeonly def
+ /CIEBasedA { setgcolorspace setcolor } bind executeonly def
/CIEBasedABC /CIEBasedA load def
/CIEBasedDEF /CIEBasedA load def
/CIEBasedDEFG /CIEBasedA load def
@@ -580,7 +580,7 @@
cleartomark pop
}
ifelse
- } bdef
+ } bind executeonly def
/Separation /CIEBasedA load def
/DeviceN /CIEBasedA load def
/Indexed /CIEBasedA load def
@@ -632,7 +632,7 @@
} if
} ifelse
setcolor
- } bdef
+ } bind executeonly def
end def
/setgcolor % (null | <color...>) <colorspace> setgcolor -
{ 1 index //null eq
@@ -639,23 +639,23 @@
{ pop pop }
{ dup 0 get //Cdict exch get exec }
ifelse
- } bdef
+ } bind executeonly def
% Compare the old and new color spaces in an attempt to avoid expensive
% reloads of CIEBased color spaces.
/PCSdict 15 dict dup begin % <colorspace> -proc- <colorspace|pdfcspace>
- /CIEBasedA { dup 1 get /PDFColorSpace .knownget { exch pop } if } bdef
+ /CIEBasedA { dup 1 get /PDFColorSpace .knownget { exch pop } if } bind executeonly def
/CIEBasedABC /CIEBasedA load def
/CIEBasedDEF /CIEBasedA load def
/CIEBasedDEFG /CIEBasedA load def
/Indexed {
dup 1 get dup pdfcolorspace 2 copy ne { 3 1 roll } if pop pop
- } bdef
+ } bind executeonly def
end def
/pdfcolorspace { % <colorspace> pdfcolorspace <colorspace|pdfcspace>
dup type /arraytype eq {
//PCSdict 1 index 0 get .knownget { exec } if
} if
-} bdef
+} bind executeonly def
/setgcolorspace { % <colorspace> setgcolorspace -
dup pdfcolorspace currentcolorspace pdfcolorspace eq {
pop
@@ -662,7 +662,7 @@
} {
setcolorspace
} ifelse
-} bdef
+} bind executeonly def
/OPsavedict 2 dict def % for saveOP, saveBM
@@ -685,7 +685,7 @@
} {
pop //false
} ifelse
-} bdef
+} bind executeonly def
/fsexec % <fillop|strokeop> fsexec -
{
@@ -713,7 +713,7 @@
} {
cvx exec
} ifelse
-} bdef
+} bind executeonly def
% ---------------- Path painting and clipping ---------------- %
@@ -734,9 +734,9 @@
currentdict /qTextSaveMatrix get setmatrix
} if
} ifelse
-} bind def
+} bind executeonly def
-/normal_m { { moveto } stopped { count pdfemptycount sub 2 .min { pop } repeat 0 0 moveto } if } bdef
+/normal_m { { moveto } stopped { count pdfemptycount sub 2 .min { pop } repeat 0 0 moveto } if } bind executeonly def
/inside_text_m {
{
matrix currentmatrix 3 1 roll
@@ -745,9 +745,9 @@
setmatrix
}
stopped { count pdfemptycount sub 2 .min { pop } repeat 0 0 moveto } if
-} bdef
+} bind executeonly def
-/normal_l { { lineto } stopped { count pdfemptycount sub 2 .min { pop } repeat } if } bdef
+/normal_l { { lineto } stopped { count pdfemptycount sub 2 .min { pop } repeat } if } bind executeonly def
/inside_text_l {
{
matrix currentmatrix 3 1 roll
@@ -756,9 +756,9 @@
setmatrix
}
stopped { count pdfemptycount sub 2 .min { pop } repeat } if
-} bdef
+} bind executeonly def
-/normal_c { { curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bdef
+/normal_c { { curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bind executeonly def
/inside_text_c {
{
matrix currentmatrix 7 1 roll
@@ -767,7 +767,7 @@
setmatrix
}
stopped { count pdfemptycount sub 6 .min { pop } repeat } if
-} bdef
+} bind executeonly def
/normal_v { count pdfemptycount sub 4 ge {
{ currentpoint 6 2 roll curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if
@@ -774,7 +774,7 @@
} {
count pdfemptycount sub { pop } repeat
} ifelse
- } bdef
+ } bind executeonly def
/inside_text_v { count pdfemptycount sub 4 ge {
{
matrix currentmatrix 5 1 roll
@@ -785,9 +785,9 @@
} {
count pdfemptycount sub { pop } repeat
} ifelse
- } bdef
+ } bind executeonly def
-/normal_y { { 2 copy curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bdef
+/normal_y { { 2 copy curveto } stopped { count pdfemptycount sub 6 .min { pop } repeat } if } bind executeonly def
/inside_text_y {
{
matrix currentmatrix 5 1 roll
@@ -796,12 +796,12 @@
setmatrix
}
stopped { count pdfemptycount sub 6 .min { pop } repeat } if
-} bdef
+} bind executeonly def
/normal_re {
4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
closepath
- } bdef
+ } bind executeonly def
/inside_text_re {
matrix currentmatrix 5 1 roll
check_and_set_saved_matrix
@@ -808,7 +808,7 @@
4 2 roll moveto exch dup 0 rlineto 0 3 -1 roll rlineto neg 0 rlineto
closepath
setmatrix
- } bdef
+ } bind executeonly def
/S {
OFFlevels length 0 eq {
@@ -816,7 +816,7 @@
} {
newpath
} ifelse
-} bdef
+} bind executeonly def
/f {
OFFlevels length 0 eq {
@@ -824,7 +824,7 @@
} {
newpath
} ifelse
-} bdef
+} bind executeonly def
/f* {
OFFlevels length 0 eq {
@@ -832,11 +832,11 @@
} {
newpath
} ifelse
-} bdef
+} bind executeonly def
-/n { newpath } bdef % don't allow n to get bound in
+/n { newpath } bind executeonly def % don't allow n to get bound in
-/s { closepath S } bdef
+/s { closepath S } bind executeonly def
/B {
OFFlevels length 0 eq {
@@ -860,9 +860,9 @@
} {
newpath
} ifelse
-} bdef
+} bind executeonly def
-/b { closepath B } bdef
+/b { closepath B } bind executeonly def
/B* {
OFFlevels length 0 eq {
@@ -886,16 +886,16 @@
} {
newpath
} ifelse
-} bdef
+} bind executeonly def
-/b* { closepath B* } bdef
+/b* { closepath B* } bind executeonly def
% Clipping:
/Wdict 8 dict dup begin
-/S { OFFlevels length 0 eq { gsave setstrokestate .swapcolors stroke .swapcolors grestore } if n } bdef
-/f { OFFlevels length 0 eq { gsave setfillstate fill grestore } if n } bdef
-/f* { OFFlevels length 0 eq { gsave setfillstate eofill grestore } if n } bdef
+/S { OFFlevels length 0 eq { gsave setstrokestate .swapcolors stroke .swapcolors grestore } if n } bind executeonly def
+/f { OFFlevels length 0 eq { gsave setfillstate fill grestore } if n } bind executeonly def
+/f* { OFFlevels length 0 eq { gsave setfillstate eofill grestore } if n } bind executeonly def
/B {
OFFlevels length 0 eq {
PDFusingtransparency {
@@ -920,8 +920,8 @@
} ifelse
} if
n
-} bdef
-/b { closepath B } bdef
+} bind executeonly def
+/b { closepath B } bind executeonly def
/B* {
OFFlevels length 0 eq {
PDFusingtransparency {
@@ -943,16 +943,16 @@
} ifelse
} if
n
-} bdef
-/b { closepath B* } bdef
-/n { end { currentpoint } stopped not { pop pop clip } if newpath } bdef
+} bind executeonly def
+/b { closepath B* } bind executeonly def
+/n { end { currentpoint } stopped not { pop pop clip } if newpath } bind executeonly def
end readonly def
-/W { //Wdict begin } bdef
+/W { //Wdict begin } bind executeonly def
/W*dict 8 dict dup begin
Wdict { def } forall
-/n { end { currentpoint } stopped not { pop pop eoclip } if newpath } bdef
+/n { end { currentpoint } stopped not { pop pop eoclip } if newpath } bind executeonly def
end readonly def
-/W* { //W*dict begin } bdef
+/W* { //W*dict begin } bind executeonly def
% ---------------- Text control ---------------- %
/textbeginpage
@@ -961,7 +961,7 @@
/FontMatrixNonHV //false def
/Show { showfirst } def
/TextFillStateNeeded //true def
- } bdef
+ } bind executeonly def
/TestDegenerateCTM {
matrix currentmatrix
@@ -977,7 +977,7 @@
}{
false
} ifelse
-} bdef
+} bind executeonly def
% Contrary to the statement in the PDF manual, BT and ET *can* be nested,
% if the CharProc for a Type 3 font does a BT/ET itself.
@@ -1001,7 +1001,7 @@
1 scale } if
.currenttextrise 0 ne { 0 .currenttextrise
translate } if
-} bdef
+} bind executeonly def
/settextstate {
% The text state can be set even outside BT/ET.
@@ -1021,7 +1021,23 @@
6 array astore
setmatrix settextmatrix
} if
-} bdef
+ currentdict /qTextSaveMatrix known {
+ qTextSaveMatrix
+ aload pop
+ 5 index 0 ne 3 index 0 ne and
+ 5 index 0 ne 5 index 0 ne and or not {
+ (\n **** Error: Invalid (0 scaling) text matrix for Tm ****\n)
+ pdfformaterror
+ ( Output may be incorrect.\n) pdfformaterror
+ % handle invalid scale by using a really small value
+ 2 -6 roll pop pop pop pop
+ 0.00000001 0 0 0.00000001
+ 6 -2 roll
+ }if
+ 6 array astore
+ setmatrix settextmatrix
+ } if
+} bind executeonly def
/settextposition {
% Update the TextMatrix translation.
gsave TextSaveMatrix setmatrix
@@ -1046,8 +1062,14 @@
( Ignroing error, output may be incorrect.\n) pdfformaterror
grestore
} ifelse
-} bdef
+} bind executeonly def
+%% Do not make the procedures here executeonly. The /m procedure is
+%% tested in /.pdf_paintproc in pdf_draw.ps, we need to be able to
+%% read the name of the procedure from here in order to determine
+%% whether we are inside a text block. The procedures themselves
+%% are already executeonly anyway.
+
/switch_to_text_marking_ops {
pdfopdict /m {inside_text_m} bind .forceput
pdfopdict /l {inside_text_l} bind .forceput
@@ -1055,7 +1077,7 @@
pdfopdict /v {inside_text_v} bind .forceput
pdfopdict /y {inside_text_y} bind .forceput
pdfopdict /re {inside_text_re} bind .forceput
-} bdef
+} bind executeonly def
/switch_to_normal_marking_ops {
pdfopdict /m {normal_m} bind .forceput
@@ -1064,7 +1086,7 @@
pdfopdict /v {normal_v} bind .forceput
pdfopdict /y {normal_y} bind .forceput
pdfopdict /re {normal_re} bind .forceput
-} bdef
+} bind executeonly def
/BT {
currentdict /TextSaveMatrix known {
@@ -1106,7 +1128,7 @@
.begintransparencytextgroup
} if
-} bdef
+} bind executeonly def
/ET_NO_TXT_KO {
currentdict /TextSaveMatrix known {
@@ -1131,7 +1153,7 @@
currentdict /qTextSaveMatrix known not {
switch_to_normal_marking_ops
} if
-} bdef
+} bind executeonly def
/ET {
//ET_NO_TXT_KO exec
@@ -1139,13 +1161,13 @@
PDFusingtransparency .currenttextknockout and {
.endtransparencytextgroup
} if
-} bdef
+} bind executeonly def
-/Tc { .settextspacing { showfirst } /Show gput } bdef
-/TL { .settextleading } bdef
-/Tr { .settextrenderingmode { showfirst } /Show gput } bdef
-/Ts { .settextrise settextstate } bdef
-/Tw { .setwordspacing { showfirst } /Show gput } bdef
+/Tc { .settextspacing { showfirst } /Show gput } bind executeonly def
+/TL { .settextleading } bind executeonly def
+/Tr { .settextrenderingmode { showfirst } /Show gput } bind executeonly def
+/Ts { .settextrise settextstate } bind executeonly def
+/Tw { .setwordspacing { showfirst } /Show gput } bind executeonly def
/Tz {
dup 0 eq {
(\n **** Error: Invalid 0.0 horizontal text scaling given for Tz\n)
@@ -1155,7 +1177,7 @@
}{
100 div
}ifelse .settexthscaling %/TextHScaling gput
- settextstate} bdef
+ settextstate} bind executeonly def
% ---------------- Font control ---------------- %
@@ -1175,7 +1197,7 @@
} {
//false
} ifelse
-} bdef
+} bind executeonly def
% Worker procedure for recursive checking of font matrices
/?FontMatrixNonHV { % {self} ?horz <<font>> -- {self} ?horz ?nonhv
2 copy //?FontMatrixNonHV exec { % check the font's own FontMatrix
@@ -1203,7 +1225,7 @@
%stack: {testproc} ?nonhv {self} ?horz
4 2 roll exch pop
} ifelse
-} bdef
+} bind executeonly def
% Main procedure
/?FontMatrixNonHV { % <<rootfont>> -- ?nonhv
//?FontMatrixNonHV exch
@@ -1213,7 +1235,7 @@
% call the worker procedure
//?FontMatrixNonHV exec
exch pop exch pop
-} bdef
+} bind executeonly def
/Tf { % <font> <scale> Tf -
dup .setPDFfontsize
@@ -1233,7 +1255,7 @@
pop
} ifelse
setfont
-} bdef
+} bind executeonly def
% Copy a font, removing its FID. If changed is true, also remove
% the UniqueID and XUID, if any. If the original dictionary doesn't have
@@ -1277,7 +1299,7 @@
{dup 3 -1 roll /.OrigUniqueIDXUID exch put}
ifelse
-} bdef
+} bind executeonly def
% Insert a new Encoding or Metrics into a font if necessary.
% Return a possibly updated font, and a flag to indicate whether
@@ -1289,7 +1311,7 @@
} {
pop //false
} ifelse
-} bdef
+} bind executeonly def
/.updatefontencoding { % <font> <Encoding|null> .updatefontencoding
% <font'> <copied>
@@ -1298,7 +1320,7 @@
} {
pop //false
} ifelse
-} bdef
+} bind executeonly def
% Duplicate keys in CharString dictionary according to GlyphMap: <</new_glyph /old_glyph>>
% We have to do this because PDF fonts can associate multiple widths with the same glyph
@@ -1329,7 +1351,7 @@
} {
pop //false
} ifelse
-} bdef
+} bind executeonly def
/.updatefont { % <font> <Encoding|null> <Metrics|null> <GlyphMap|null>
% .updatefont <font'> <copied>
@@ -1340,7 +1362,7 @@
3 1 roll exch % bool bool <font> <Metrics|null>
.updatefontmetrics % bool bool <font> bool
4 2 roll or or % <font> is_copied
-} bdef
+} bind executeonly def
% ---------------- Text positioning ---------------- %
@@ -1370,9 +1392,9 @@
matrix .currenttextlinematrix .settextmatrix
settextstate
-} bdef
-/TD { dup neg .settextleading Td } bdef
-/T* { 0 .currenttextleading neg Td } bdef
+} bind executeonly def
+/TD { dup neg .settextleading Td } bind executeonly def
+/T* { 0 .currenttextleading neg Td } bind executeonly def
/Tm {
5 index 0 ne 3 index 0 ne and
5 index 0 ne 5 index 0 ne and or not {
@@ -1387,27 +1409,27 @@
matrix .currenttextlinematrix astore .settextlinematrix
matrix .currenttextlinematrix .settextmatrix
settextstate
-} bdef
+} bind executeonly def
% ---------------- Text painting ---------------- %
/Vexch {
rootfont /WMode knownoget { 1 eq { exch } if } if
-} bind def
+} bind executeonly def
/textrenderingprocs [ % (0 is handled specially)
% Painting-only modes
- { tf } { tS } { tB } { tn }
+ { tf } executeonly { tS } executeonly { tB } executeonly { tn }
% Clipping modes
- { gsave tf grestore tW }
- { gsave tS grestore tW }
- { gsave tB grestore tW }
- { tW }
+ { gsave tf grestore tW } executeonly
+ { gsave tS grestore tW } executeonly
+ { gsave tB grestore tW } executeonly
+ { tW } executeonly
] readonly def
/pdfwrite_textrenderingprocs [
% Tr 0 - Fill
- { setfillstate show } bind
+ { setfillstate show } bind executeonly
% Tr 1 - Stroke
{ currentlinewidth exch setstrokestate
% Need to set the stroke width to a value which gives the correct
@@ -1415,7 +1437,11 @@
% CTM, so we need to calculate the stroke width which would result
% if the CTM had been unity.
currentlinewidth dup
- matrix defaultmatrix idtransform TextSaveMatrix dtransform
+ currentdict /qTextSaveMatrix known {
+ matrix defaultmatrix idtransform qTextSaveMatrix dtransform
+ }{
+ matrix defaultmatrix idtransform TextSaveMatrix dtransform
+ } ifelse
abs 2 copy exch abs eq {
pop
}{
@@ -1423,7 +1449,7 @@
% we can ignore it. (wrong answer, but consistent)
pop pop currentlinewidth
}ifelse setlinewidth
- show setlinewidth} bind
+ show setlinewidth} bind executeonly
% Tr 2 - Fill then Stroke
{ currentlinewidth exch setstrokestate
% Need to set the stroke width to a value which gives the correct
@@ -1431,7 +1457,11 @@
% CTM, so we need to calculate the stroke width which would result
% if the CTM had been unity.
currentlinewidth dup
- matrix defaultmatrix idtransform TextSaveMatrix dtransform
+ currentdict /qTextSaveMatrix known {
+ matrix defaultmatrix idtransform qTextSaveMatrix dtransform
+ }{
+ matrix defaultmatrix idtransform TextSaveMatrix dtransform
+ } ifelse
abs 2 copy exch abs eq {
pop
}{
@@ -1439,9 +1469,9 @@
% we can ignore it. (wrong answer, but consistent)
pop pop currentlinewidth
}ifelse setlinewidth
- setfillstate show setlinewidth} bind
+ setfillstate show setlinewidth} bind executeonly
% Tr 3 - Neither fill nor stroke
- { setfillstate show } bind
+ { setfillstate show } bind executeonly
%
% pdfwrite emits all text inside a gsave/grestore pair. As
% a result we can't preserve any of the 'clip' modes, as the
@@ -1450,7 +1480,7 @@
%
% Tr 4 - Fill, add to clip
{ gsave 0 .settextrenderingmode
- setfillstate dup show grestore //true charpath } bind
+ setfillstate dup show grestore //true charpath } bind executeonly
% Tr 5 - Stroke, add to clip
{ gsave 1 .settextrenderingmode
currentlinewidth dup
@@ -1463,11 +1493,15 @@
pop pop currentlinewidth
}ifelse setlinewidth
setstrokestate dup show grestore
- //true charpath} bind
+ //true charpath} bind executeonly
% Tr 6 - Fill, stroke, add to clip
{ gsave 2 .settextrenderingmode
currentlinewidth dup
- matrix defaultmatrix idtransform TextSaveMatrix dtransform
+ currentdict /qTextSaveMatrix known {
+ matrix defaultmatrix idtransform qTextSaveMatrix dtransform
+ }{
+ matrix defaultmatrix idtransform TextSaveMatrix dtransform
+ } ifelse
abs 2 copy exch abs eq {
pop
}{
@@ -1476,9 +1510,9 @@
pop pop currentlinewidth
}ifelse setlinewidth
setstrokestate setfillstate dup show grestore
- //true charpath} bind
+ //true charpath} bind executeonly
% Tr 7 - Add to clip
- { //true charpath} bind
+ { //true charpath} bind executeonly
] readonly def
/setstrokeforTrpreservation {
@@ -1509,12 +1543,12 @@
setlinewidth
} if
} if
-} bind def
+} bind executeonly def
% conditionally set fillstate to avoid multiple operations during text operators
/settextfillstate {
TextFillStateNeeded { setfillstate //false /TextFillStateNeeded gput } if
-} bind def
+} bind executeonly def
% If current path is not known to be valid, use the clip path
/TextTransSetup { % showarg path_valid TextTransSetup false showarg
@@ -1537,7 +1571,7 @@
} {
pop % discard path_valid boolean
} ifelse
-} bind def
+} bind executeonly def
/TextTransTeardown { % stack: path_valid
.currentblendmode /CompatibleOverprint eq {
@@ -1548,7 +1582,7 @@
.currentSMask //null ne {
.endtransparencygroup
} if
-} bind def
+} bind executeonly def
/setshowstate
{
@@ -1744,8 +1778,8 @@
ifelse
}
ifelse /Show gput
- } bdef
-/showfirst { setshowstate Show } def
+ } bind executeonly def
+/showfirst { setshowstate Show } executeonly def
/Tj {
{
@@ -1758,9 +1792,9 @@
gsave nulldevice exec grestore
} ifelse
//true /TextFillStateNeeded gput
-} bdef
-/' { T* Tj } bdef
-/" { exch Tc exch Tw T* Tj } bdef
+} bind executeonly def
+/' { T* Tj } bind executeonly def
+/" { exch Tc exch Tw T* Tj } bind executeonly def
/TJ {
{ 0 0 moveto {
dup type /stringtype eq {
@@ -1778,7 +1812,7 @@
gsave nulldevice exec grestore
} ifelse
//true /TextFillStateNeeded gput
-} bdef
+} bind executeonly def
% NB: We don't need clippath when filling or stroking
/tf {
@@ -1786,7 +1820,7 @@
//true /TextFillStateNeeded gput
settextfillstate //true TextTransSetup currentpoint fill TextTransTeardown moveto
} if
-} bdef
+} bind executeonly def
/tn { currentpoint newpath moveto } bdef % Obsolete, never used.
% For stroking characters, temporarily restore the graphics CTM so that
% the line width will be transformed properly.
@@ -1800,12 +1834,14 @@
{
.currentPDFfontsize 0 eq not {
setstrokestate //true TextTransSetup
- currentpoint //Tmatrix currentmatrix TextSaveMatrix setmatrix .swapcolors stroke TextTransTeardown .swapcolors
+ currentpoint //Tmatrix currentmatrix TextSaveMatrix setmatrix
+ currentdict /qTextSaveMatrix known {qTextSaveMatrix setmatrix} if
+ .swapcolors stroke TextTransTeardown .swapcolors
setmatrix moveto
} if
} ifelse
//true /TextFillStateNeeded gput
- } bdef
+ } bind executeonly def
% Handle transparency the same as /B operator
/tB {
@@ -1825,11 +1861,11 @@
gsave tf grestore tS
} ifelse
//true /TextFillStateNeeded gput
-} bdef
+} bind executeonly def
% This does the wrong thing if there have been multiple text operations
% within a single BT/ET pair, but it's a start.
-/tW { } bdef
+/tW { } bind executeonly def
%% split a string containing \r or \n into multiple strings)
%% \r\n is also handled.
@@ -1869,7 +1905,7 @@
} {
pop pop pop
} ifelse
-} bind def
+} bind executeonly def
% Text formatting and painting for the AcroForm field without appearance streams.
/Tform { % <MaxLen> (V) <Ff> <Q> Tform -
@@ -1995,7 +2031,7 @@
Show % -
} ifelse
} ifelse
-} bdef
+} bind executeonly def
end readonly put % GS_PDF_ProcSet
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_rbld.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_rbld.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_rbld.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -87,7 +87,7 @@
% Set error flag if we have equal object and generation numbers
Generations 4 index get 1 index eq { /dup_obj_gen_num //true def } if
} 8 -1 roll { ifelse } { pop if } ifelse % Run 'else' only when rebuilding.
-} bind def
+} bind executeonly def
% Print the contents of the xref array. This actually consists of three
% arrays (Objects, Generations, and ObjectStream).
@@ -102,7 +102,7 @@
Objects exch get === % print object location
} for
flush
-} bind def
+} bind executeonly def
% Get token from string and check its type
% <string> <type> typed_token <false> % no token or not match
@@ -121,7 +121,7 @@
} {
pop //false % no token - pop type, set exit status
} ifelse % check if we got token
-} bind def
+} bind executeonly def
% Allocate space for post_eof_count to be bound into procedures below.
/post_eof_count 0 def
@@ -153,7 +153,7 @@
} {
pop 0 % no xref, should not happen, report it upstrem
} ifelse
-} bind def
+} bind executeonly def
%% Searches backwards from a specified point looking for a 'trailer' keyword.
@@ -197,7 +197,7 @@
}if
pop % renove the zero leaving the new start position
} loop
-} bind def
+} bind executeonly def
% We want the location of the trailer dictionary at the end of file.
% We will read the last block of data and search for the final occurance
@@ -223,7 +223,7 @@
} {
pop pop 0
} ifelse
-} bind def
+} bind executeonly def
% We want to find the trailer dictionary. There is a trailer dictionary
% for each xref object list. We only want the trailer dictionary associated
@@ -309,7 +309,7 @@
/Trailer exch def
pop
} ifelse
-} bind def
+} bind executeonly def
% This routine will determine if there is stuff after the %%EOF. There is
% supposed to be only a line termination. However many real life files
@@ -343,7 +343,7 @@
% Can't even find startxref, assume it's all objects
pop 0
} ifelse
-} bind def
+} bind executeonly def
% This routine will scan a file searaching for object locations to build
% an alternate version of the data in the xref tables.
@@ -422,7 +422,7 @@
pdfformatwarning
} if
currentdict /Orig_Objects undef
-} bind def
+} bind executeonly def
% Print warning message because we found a problem while reading the xref
% tables
@@ -436,7 +436,7 @@
( **** Ghostscript will attempt to recover the data.\n)
pdfformaterror
( **** However, the output may be incorrect.\n) pdfformaterror
-} bind def
+} bind executeonly def
% Attempt to recover the XRef data. This is called if we have a failure
% while reading the normal XRef tables. This routine usually works
@@ -445,4 +445,4 @@
{ print_xref_warning % Print warning message
count pdfemptycount sub { pop } repeat % remove anything left by readxref
search_objects % Search for objects
-} bind def
+} bind executeonly def
Modified: trunk/Master/tlpkg/tlgs/Resource/Init/pdf_sec.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/Resource/Init/pdf_sec.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/Resource/Init/pdf_sec.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -51,7 +51,7 @@
1 dict begin
/Key exch def
currentdict end /ArcfourDecode filter
-} bind def
+} bind executeonly def
% <ciphertext> <key> arc4decode <plaintext>
/arc4decode {
@@ -60,7 +60,7 @@
} {
1 index length string 3 1 roll arc4decodefilter exch readstring pop
} ifelse
-} bind def
+} bind executeonly def
% take a stream and aes decrypt it.
% <stream> <key> aesdecodefilter <stream>
@@ -69,7 +69,7 @@
/Key exch def
currentdict end
/AESDecode filter
-} bind def
+} bind executeonly def
% AES decrypt a string, returning a string. The second argument can
% be a dictionary of the form << /Key key /Padding false >>, which
@@ -92,24 +92,24 @@
exch readstring pop
} ifelse
-} bind def
+} bind executeonly def
/md5 {
16 string dup /MD5Encode filter dup 4 3 roll writestring closefile
-} bind def
+} bind executeonly def
/md5_trunk {
md5 0 pdf_key_length getinterval
-} bind def
+} bind executeonly def
/sha256 {
32 string dup /SHA256Encode filter dup 4 3 roll writestring closefile
-} bind def
+} bind executeonly def
% <string> contains_non_ascii <bool>
/contains_non_ascii {
//false exch { 128 ge { pop //true exit } if } forall
-} bind def
+} bind executeonly def
/pdf_padding_string
<28bf4e5e4e758a41 64004e56fffa0108
@@ -122,7 +122,7 @@
pdf_padding_string
0 32 3 index length sub getinterval
concatstrings
-} bind def
+} bind executeonly def
/pdf_xorbytes { % <iter-num> <key> pdf_xorbytes <xored-key>
dup length dup string
@@ -133,7 +133,7 @@
3 copy put pop pop
} for
3 1 roll pop pop
-} bind def
+} bind executeonly def
% Get length of encryption key in bytes
/pdf_key_length { % pdf_key_length <key_length>
@@ -142,7 +142,7 @@
{ pop 5 } % If V == 1 then always use 40 bits
{ /Length knownoget { -3 bitshift } { 5 } ifelse }
ifelse
-} bind def
+} bind executeonly def
% Algorithm 3.2
/pdf_compute_encryption_key { % <password> pdf_compute_encryption_key <key>
@@ -198,7 +198,7 @@
} ifelse
% Step 9 - Done in md5_trunk.
-} bind def
+} bind executeonly def
% Algorithm 3.4
/pdf_gen_user_password_R2 { % <filekey> pdf_gen_user_password_R2 <U>
@@ -205,7 +205,7 @@
% Step 2.
pdf_padding_string exch arc4decode
-} bind def
+} bind executeonly def
% Algorithm 3.5
/pdf_gen_user_password_R3 { % <filekey> pdf_gen_user_password_R3 <U>
@@ -230,7 +230,7 @@
} for
exch pop
-} bind def
+} bind executeonly def
/pdf_gen_user_password { % <password> pdf_gen_user_password <filekey> <U>
% common Step 1 of Algorithms 3.4 and 3.5.
@@ -253,7 +253,7 @@
} ifelse
} ifelse
} ifelse
-} bind def
+} bind executeonly def
% Algorithm 3.6
% <password> pdf_check_pre_r5_user_password <filekey> true
@@ -268,7 +268,7 @@
} {
pop //false
} ifelse
-} bind def
+} bind executeonly def
% Compute an owner key, ie the result of step 4 of Algorithm 3.3
/pdf_owner_key % <password> pdf_owner_key <owner-key>
@@ -285,7 +285,7 @@
} if
% Step 4 - Done in md5_trunk.
-} bind def
+} bind executeonly def
% Algorithm 3.7
% <password> pdf_check_pre_r5_owner_password <filekey> true
@@ -308,7 +308,7 @@
% <result-of-step-3>
pdf_check_pre_r5_user_password
-} bind def
+} bind executeonly def
% Algorithm 3.2a
% <password> pdf_check_r5_password <filekey> true
@@ -377,7 +377,7 @@
} if
end
-} bind def
+} bind executeonly def
% <password> pdf_check_password <filekey> true
% <password> pdf_check_password false
@@ -443,7 +443,7 @@
} ifelse
} ifelse
} ifelse
-} bind def
+} bind executeonly def
% Process the encryption information in the Trailer.
/pdf_process_Encrypt {
@@ -511,7 +511,7 @@
% /pdf_process_Encrypt cvx /invalidfileaccess signalerror
% }
% if
-} bind def
+} bind executeonly def
% Calculate the key used to decrypt an object (to pass to .decpdfrun or
% put into a stream dictionary).
@@ -554,7 +554,7 @@
} ifelse
md5 0 FileKey length 5 add 2 index length .min getinterval
} ifelse
-} bind def
+} bind executeonly def
% As .pdfrun, but decrypt strings with key <key>.
/PDFScanRules_true << /PDFScanRules //true >> def
@@ -653,7 +653,7 @@
/PDFsource PDFsource
{ store { stop } if } aload pop .packtomark cvx
/PDFsource 3 -1 roll store exec
- } bind def
+ } bind executeonly def
currentdict /PDFScanRules_true undef
currentdict /PDFScanRules_null undef
@@ -719,7 +719,7 @@
} { % Else file is not encrypted
PDFfile resolveopdict .pdfrun
} ifelse % Ifelse encrypted
-} bind def
+} bind executeonly def
% Prefix a decryption filter to a stream if needed.
% Stack: readdata? dict parms file/string filternames
@@ -745,7 +745,7 @@
ifelse
exch
} if
- } bind def
+ } bind executeonly def
end % pdfdict
.setglobal
Modified: trunk/Master/tlpkg/tlgs/bin/gsdll32.dll
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tlgs/bin/gsdll32.lib
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tlgs/bin/gswin32.exe
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tlgs/bin/gswin32c.exe
===================================================================
(Binary files differ)
Modified: trunk/Master/tlpkg/tlgs/lib/ps2epsi.ps
===================================================================
--- trunk/Master/tlpkg/tlgs/lib/ps2epsi.ps 2018-09-13 21:00:00 UTC (rev 48658)
+++ trunk/Master/tlpkg/tlgs/lib/ps2epsi.ps 2018-09-13 22:22:18 UTC (rev 48659)
@@ -84,7 +84,6 @@
userdict /showpage { ps2edict begin epsipage end } bind put
userdict /setfont { ps2edict begin epsisetfont end } bind put
userdict /setpagedevice /pop load put
- //systemdict /.setsafe known { .setsafe } if
} bind def
/epsifontdict 100 dict def
More information about the tex-live-commits
mailing list