diff options
author | Reinhard Kotucha <reinhard.kotucha@web.de> | 2019-05-10 23:51:26 +0000 |
---|---|---|
committer | Reinhard Kotucha <reinhard.kotucha@web.de> | 2019-05-10 23:51:26 +0000 |
commit | e92598acb3a0a20ac8ff31928d84188de2360b7f (patch) | |
tree | efb05c3dd914979fc62f92be27b52b7d54ef3e9b /Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps | |
parent | a0dbdd61992f743553c4c357edf3af0cfc3cd0b9 (diff) |
Upgrade gs-9.26 -> gs-9.27
git-svn-id: svn://tug.org/texlive/trunk@51079 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps')
-rw-r--r-- | Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps | 253 |
1 files changed, 157 insertions, 96 deletions
diff --git a/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps b/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps index 6b0ba93e1e7..e18a7c27f31 100644 --- a/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps +++ b/Master/tlpkg/tlgs/Resource/Init/pdf_draw.ps @@ -1,4 +1,4 @@ -% Copyright (C) 2001-2018 Artifex Software, Inc. +% Copyright (C) 2001-2019 Artifex Software, Inc. % All Rights Reserved. % % This software is provided AS-IS with no warranty, either express or @@ -18,8 +18,7 @@ /.setlanguagelevel where { pop 2 .setlanguagelevel } if .currentglobal //true .setglobal -/pdfdict where { pop } { /pdfdict 100 dict def } ifelse -GS_PDF_ProcSet begin +/GS_PDF_ProcSet load begin pdfdict begin % For simplicity, we use a single interpretation dictionary for all @@ -113,7 +112,7 @@ pdfdict begin /resolvefunction { % <fndict> resolvefunction <function> .resolvefn - PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%Function: ) print dup === flush } if } if + PDFDEBUG { //pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%Function: ) print dup === flush } if } if } bind executeonly def /resolvefnproc { % <fndict> resolvefnproc <proc> @@ -427,7 +426,7 @@ end } ifelse } bind executeonly def /sethalftonephases { - /sethalftonephase where { pop aload pop sethalftonephase } { pop } ifelse + aload pop -1 2 index 2 index .setscreenphase pop pop } bind executeonly def /HT { @@ -495,7 +494,16 @@ end dup { oforce exch gsparamdict exch .knownget { exec } { pop } ifelse } forall pop - } if + } { + //pdfdict /.gs_warning_issued known not { + (\n **** Error 'gs' ignored -- ExtGState missing from Resources.\n) + pdfformaterror + ( Output may be incorrect.\n) pdfformaterror + //pdfdict /.gs_warning_issued //true .forceput + PDFSTOPONERROR { /gs /undefined signalerror } if + } if + } + ifelse } bind executeonly def % ------ Transparency support ------ % @@ -520,7 +528,7 @@ end .currentSMask //null ne { % get rid of the current SMask (Bug 695471) - false % colorspace not set + //false % colorspace not set << /Subtype /None >> % Special type for this purpose 0 0 0 0 % fake BBox .begintransparencymaskgroup @@ -609,8 +617,9 @@ def matrix currentmatrix 4 1 roll mark currentcolor counttomark dup 4 add exch roll pop currentcolorspace 4 1 roll .getuseciecolor 4 1 roll + .swapcolors mark currentcolor counttomark dup 4 add exch roll pop currentcolorspace 4 1 roll .swapcolors currentuserparams /OverrideICC get 4 1 roll - mark /OverrideICC true .dicttomark setuserparams + mark /OverrideICC //true .dicttomark setuserparams % We can't simply set the group's gstate here because % we can't use gsave/grestore. So we actually set it @@ -660,6 +669,7 @@ def .endtransparencymask PDFfile exch setfileposition mark exch /OverrideICC exch .dicttomark setuserparams + .swapcolors setcolorspace setcolor .swapcolors .setuseciecolor setcolorspace setcolor setmatrix end % restore colorspace, color and ExtGState (end) @@ -712,6 +722,19 @@ def .begintransparencygroup } bind executeonly def +/.beginpagegroup { % groupdict bbox .beginformgroup - + currentcolorspace 3 1 roll + exch mark exch % bbox mark groupdict + dup /CS knownoget { resolvecolorspace dup setgcolorspace /CS exch 3 2 roll} if + dup /I knownoget { /Isolated exch 3 2 roll } if + dup /K knownoget { /Knockout exch 3 2 roll } if + pop .dicttomark + % Stack: bbox paramdict + exch aload pop + .begintransparencypagegroup + setcolorspace +} bind executeonly def + % .paintgroupform implements the Form PaintProc in the case where the % Form XObject dictionary includes a Group key. See .paintform below. /.paintgroupform { % <resdict> <stream> <formdict> .paintgroupform - @@ -797,7 +820,7 @@ currentdict /csncompdict undef mark exch { oforce } forall .dicttomark dup dup //true resolvestream /ReusableStreamDecode filter /DataSource exch put - + dup /.hash 0 put % placeholder for use by seticc icc_profile_cache key % Check that the number of components (/N) defined in the ICCBased % dictionry matches the actual profile. Bug #696120 dup /N get @@ -1073,7 +1096,7 @@ currentdict end readonly def %% finished running the PaintProc. /.actual_pdfpaintproc { % <patdict> <resdict> .pdfpaintproc - - PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%Begin PaintProc) print dup === flush } if } if + PDFDEBUG { //pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%Begin PaintProc) print dup === flush } if } if PDFfile fileposition 3 1 roll q 1 index /PaintType oget 1 eq { @@ -1108,47 +1131,47 @@ currentdict end readonly def Q }{ (\n **** Error: File has unbalanced q/Q operators \(too many Q's\)\n Output may be incorrect.\n) - pdfdict /.Qqwarning_issued .knownget + //pdfdict /.Qqwarning_issued .knownget { { pop } { - currentglobal pdfdict gcheck .setglobal - pdfdict /.Qqwarning_issued //true .forceput + currentglobal //pdfdict gcheck .setglobal + //pdfdict /.Qqwarning_issued //true .forceput .setglobal pdfformaterror - } ifelse + } executeonly ifelse } { - currentglobal pdfdict gcheck .setglobal - pdfdict /.Qqwarning_issued //true .forceput + currentglobal //pdfdict gcheck .setglobal + //pdfdict /.Qqwarning_issued //true .forceput .setglobal pdfformaterror - } ifelse + } executeonly ifelse end } ifelse } loop { (\n **** Error: File has unbalanced q/Q operators \(too many q's\)\n Output may be incorrect.\n) - pdfdict /.Qqwarning_issued .knownget + //pdfdict /.Qqwarning_issued .knownget { { pop } { - currentglobal pdfdict gcheck .setglobal - pdfdict /.Qqwarning_issued //true .forceput + currentglobal //pdfdict gcheck .setglobal + //pdfdict /.Qqwarning_issued //true .forceput .setglobal pdfformaterror - } ifelse + } executeonly ifelse } { - currentglobal pdfdict gcheck .setglobal - pdfdict /.Qqwarning_issued //true .forceput + currentglobal //pdfdict gcheck .setglobal + //pdfdict /.Qqwarning_issued //true .forceput .setglobal pdfformaterror - } ifelse + } executeonly ifelse } if pop @@ -1156,7 +1179,7 @@ currentdict end readonly def /pdfemptycount exch def Q - PDFDEBUG { pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%End PaintProc) print dup === flush } if } if + PDFDEBUG { //pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%End PaintProc) print dup === flush } if } if PDFfile exch setfileposition } bind executeonly odef @@ -1172,13 +1195,13 @@ currentdict end readonly def %% If the name is inside_text_m then we are in a text block /inside_text_m eq }{ - pop false + pop //false } ifelse }{ - pop false + pop //false } ifelse }{ - pop false + pop //false } ifelse %% rearrange the operands, move the boolean to the back 3 1 roll @@ -1227,7 +1250,7 @@ currentdict end readonly def ] cvx put 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 + PDFDEBUG { //pdfdict /PDFSTEPcount .knownget { 1 le } { //true } ifelse { (%Pattern: ) print dup === flush } if } if } bind executeonly def /ignore_color_op ( **** Error: Ignoring a color operation in a cached context.\n Output may be incorrect.\n) readonly def @@ -1495,9 +1518,9 @@ end 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 -% 21 % ROMMRGB -% 24 % e-sYCC + 20 { /esRGBICC /ColorSpace findresource } bind executeonly % e-sRGB + 21 { /rommRGBICC /ColorSpace findresource} bind executeonly % ROMMRGB + 24 { /esRGBICC /ColorSpace findresource } bind executeonly % e-sYCC .dicttomark readonly def % Process jp2 blocks (aka boxes). All procedures have the signature @@ -1748,7 +1771,7 @@ currentdict /jp2_csp_dict .undef } if } ifelse }ifelse - /ICCProfileNError true def + /ICCProfileNError //true def }{cleartomark}ifelse } if } if @@ -1973,7 +1996,7 @@ currentdict /jp2_csp_dict .undef 2 copy % <<stream dict>> [] loopcount [] loopcount [] exch get % <<stream dict>> [] loopcount [] <<>> or -null- - dup null eq { + dup //null eq { pop exch % <<stream dict>> [] [] loopcount <</Height 5 index /Height oget % <<stream dict>> [] [] loopcount << /Height Height @@ -2208,16 +2231,24 @@ currentdict /last-ditch-bpc-csp undef PDFfile exch setfileposition 0 .endtransparencymask } ifelse - << /Subtype /Group /Isolated //true - /.image_with_SMask //true % pdfwrite needs : see gs/src/ztrans.c, gs/src/gdevpdft.c - >> 0 0 1 1 .begintransparencygroup - doimage + << /Subtype /Group /Isolated //true + /.image_with_SMask //true + % pdfwrite needs : see gs/src/ztrans.c, gs/src/gdevpdft.c + % Code to deal with a Matte in the SMask. We know the image dictionary must have an SMask + % entry if we get here, so we don't need to check its existence. Just pull it out and see if + % the SMask has a Matte entry. If it does, get the ColorSpace from the parent image and + % put a /CS key with that colour space in the Group that we manufacture. Bug #700686 + % We also need to actually set the current colour space to be the same as the group + % code only picks up the current colour space, not the space from the dictionary. + currentdict /SMask get /Matte known {/CS currentdict /ColorSpace get dup pdfopdict /cs get exec } if + >> 0 0 1 1 .begintransparencygroup + doimage .endtransparencygroup % tell the compositor we're done with the SMask. % Note that any SMask in the ExtGState should be reapplied % by the next call to setfill(stroke)state AND this relies % on our lazy evaulation of SMask groups - false << /Subtype /None >> 0 0 0 0 .begintransparencymaskgroup + //false << /Subtype /None >> 0 0 0 0 .begintransparencymaskgroup } { .currentSMask //null ne { % the image doesn't have an SMask, but the ExtGState does, force a group. @@ -2308,8 +2339,8 @@ currentdict /last-ditch-bpc-csp undef makemaskimage } if % Stack: datasource imagemask - { currentdict end setfillstate true ValidateDecode { imagemask } } - { ColorSpace setgcolorspace currentdict end setfillblend false ValidateDecode { image } } + { currentdict end setfillstate //true ValidateDecode { imagemask } } + { ColorSpace setgcolorspace currentdict end setfillblend //false ValidateDecode { image } } ifelse PDFSTOPONERROR { exec //false } { stopped } ifelse { dup type /dicttype eq { pop } if % Sometimes image fails to restore the stack @@ -2348,15 +2379,16 @@ currentdict /last-ditch-bpc-csp undef } bind executeonly def /IncrementAppearanceNumber { - pdfdict /AppearanceNumber .knownget { - 1 add pdfdict /AppearanceNumber 3 -1 roll .forceput - }{ - pdfdict /AppearanceNumber 0 .forceput - } ifelse + //pdfdict /AppearanceNumber .knownget { + 1 add //pdfdict /AppearanceNumber 3 -1 roll .forceput + } executeonly + { + //pdfdict /AppearanceNumber 0 .forceput + } executeonly ifelse }bind executeonly odef /MakeAppearanceName { - pdfdict /AppearanceNumber get + //pdfdict /AppearanceNumber get 10 string cvs dup length 10 add string dup 0 (\{FormName) putinterval dup 3 -1 roll @@ -2377,17 +2409,45 @@ currentdict /last-ditch-bpc-csp undef gsave initclip MakeNewAppearanceName .pdfFormName - pdfdict /.PreservePDFForm known {pdfdict /.PreservePDFForm get} {//false}ifelse exch - pdfdict /.PreservePDFForm true .forceput + //pdfdict /.PreservePDFForm known {//pdfdict /.PreservePDFForm get} {//false}ifelse exch + //pdfdict /.PreservePDFForm //true .forceput DoForm - pdfdict /.PreservePDFForm 3 -1 roll .forceput + //pdfdict /.PreservePDFForm 3 -1 roll .forceput grestore } bind executeonly odef +%% We don't want to do any high level forms stuff if the source +%% is PDF because : +%% 1) Transparent forms are handled separately and we don't want to ge confused +%% 2) PDF forms are too llikely to trip over the limitations in our support +%% 3) Its highly unusual to find a PDF file which uses forms sensibly. +%% +%% So we have a special PDF version of execform which doesn't do high level forms. + +pdfdict +/.PDFexecform { + % This is a separate operator so that the stacks will be restored + % properly if an error occurs. + dup /Matrix get concat + dup /BBox get aload pop + exch 3 index sub exch 2 index sub rectclip + dup /PaintProc get + 1 index /Implementation known not { + 1 index dup /Implementation //null .forceput readonly pop + } executeonly if + exec +} .bind executeonly put + +pdfdict +/PDFexecform { + gsave { //.PDFexecform exec } stopped + grestore {stop} if +} .bind executeonly put + /DoForm { %% save the current value, if its true we will set it to false later, in order %% to prevent us preserving Forms which are used *from* an annotation /Appearance. - pdfdict /.PreservePDFForm known {pdfdict /.PreservePDFForm get} {//false}ifelse exch + //pdfdict /.PreservePDFForm known {//pdfdict /.PreservePDFForm get} {//false}ifelse exch %% We may alter the Default* colour spaces, if the Resources %% ColorSpace entry contains one of them. But we don't want that @@ -2502,15 +2562,16 @@ currentdict /last-ditch-bpc-csp undef pdfemptycount countdictstack 3 -1 roll /pdfemptycount count 4 sub store - pdfdict /.PreservePDFForm known {pdfdict /.PreservePDFForm get}{//false} ifelse + //pdfdict /.PreservePDFForm known {//pdfdict /.PreservePDFForm get}{//false} ifelse { %% We must *not* preserve any subsidiary forms (curently at least) as PDF %% form preservation doesn't really work. This is used just for Annotation %% Appearances currently, and if they should happen to use a form, we do not %% want to preserve it. - pdfdict /.PreservePDFForm false .forceput + //pdfdict /.PreservePDFForm //false .forceput /q cvx /execform cvx 5 -2 roll - }{ + } executeonly + { /q cvx /PDFexecform cvx 5 -2 roll } ifelse @@ -2540,7 +2601,7 @@ currentdict /last-ditch-bpc-csp undef saved_DCMYK /DefaultCMYK exch /ColorSpace defineresource pop end } if - pdfdict /.PreservePDFForm 3 -1 roll .forceput + //pdfdict /.PreservePDFForm 3 -1 roll .forceput } bind executeonly odef /_dops_save 1 array def @@ -2699,13 +2760,13 @@ drawopdict begin % Start by getting the object number for a Form XObject dup Page /XObject obj_get dup 0 eq not { % Now get the recording dictionary and see if that object number has been seen - pdfdict /Recursive_XObject_D get 1 index known { + //pdfdict /Recursive_XObject_D get 1 index known { ( **** Error: Recursive XObject detected, ignoring ") print 1 index 256 string cvs print (", object number ) print 256 string cvs print (\n) print ( Output may be incorrect.\n) pdfformaterror //false }{ % We haven't seen it yet, so record it. - pdfdict /Recursive_XObject_D get 1 index null put + //pdfdict /Recursive_XObject_D get 1 index //null put 3 1 roll //true }ifelse @@ -2743,7 +2804,7 @@ drawopdict begin ( Output may be incorrect.\n) pdfformaterror } ifelse PDFfile exch setfileposition - pdfdict /Recursive_XObject_D get exch undef + //pdfdict /Recursive_XObject_D get exch undef }{ % Otherwise ignore it and tidy up the stacks pop pop @@ -2938,27 +2999,27 @@ end /annotsetcolor { % <annot> annotsetcolor bool /C knownoget { dup length 4 eq { - aload pop setcmykcolor true + aload pop setcmykcolor //true }{ dup length 3 eq { - aload pop setrgbcolor true + aload pop setrgbcolor //true }{ dup length 1 eq { - aload pop setgray true + aload pop setgray //true } { dup length 0 eq { pop - false + //false }{ ( **** Error: invalid color specified for annotation /C entry) - pdfformaterror false + pdfformaterror //false ( Output may be incorrect.\n) pdfformaterror } ifelse } ifelse } ifelse } ifelse } - { 0 setgray true} ifelse + { 0 setgray //true} ifelse } bind executeonly def % Set an annotation color. @@ -2967,27 +3028,27 @@ end /annotsetinteriorcolor { % <annot> annotsetcolor bool /IC knownoget { dup length 4 eq { - aload pop setcmykcolor true + aload pop setcmykcolor //true }{ dup length 3 eq { - aload pop setrgbcolor true + aload pop setrgbcolor //true }{ dup length 1 eq { - aload pop setgray true + aload pop setgray //true } { dup length 0 eq { pop - false + //false }{ ( **** Error: invalid color specified for annotation /C entry) - pdfformaterror false + pdfformaterror //false ( Output may be incorrect.\n) pdfformaterror } ifelse } ifelse } ifelse } ifelse } - { 0 setgray true} ifelse + { 0 setgray //true} ifelse } bind executeonly def % Draw the border. Currently, we ignore requests for beveling, and we @@ -4244,28 +4305,28 @@ currentdict /set_bc_color undef dup /C knownoget { dup length 4 eq { - aload pop setcmykcolor true + aload pop setcmykcolor //true }{ dup length 3 eq { - aload pop setrgbcolor true + aload pop setrgbcolor //true }{ dup length 1 eq { - aload pop setgray true + aload pop setgray //true } { dup length 0 eq { pop - false + //false }{ ( **** Error: invalid color specified for FreeText annotation /C entry) pdfformaterror ( Output may be incorrect.\n) pdfformaterror - false + //false } ifelse } ifelse } ifelse } ifelse }{ - false + //false } ifelse {dup annotrect %% Somewhat horrifyingly, rectfill maps directly to the device fill_rectangle @@ -4362,7 +4423,7 @@ currentdict /set_bc_color undef %% Heuristic to determine the height (ascender to descender) of the text %% for when we move down a line. gsave - /..TextHeight (Hy) false charpath pathbbox exch pop exch sub exch pop def + /..TextHeight (Hy) //false charpath pathbbox exch pop exch sub exch pop def grestore %% and use it immediatley to start the text one line down %% @@ -4806,9 +4867,9 @@ currentdict /drawannottypes undef /preserveannottypes 20 dict begin -/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 +/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 @@ -4817,10 +4878,10 @@ currentdict /drawannottypes undef ApplyCTMToQuadPoints put } if - loadannot /ANN pdfmark false + loadannot /ANN pdfmark //false } bind executeonly def -/Ink {mark exch loadannot /ANN pdfmark false} bind executeonly def +/Ink {mark exch loadannot /ANN pdfmark //false} bind executeonly def /Line { mark exch dup /L .knownget { @@ -4828,11 +4889,11 @@ currentdict /drawannottypes undef 5 -1 roll astore 1 index /L 3 -1 roll put } if - loadannot /ANN pdfmark false + loadannot /ANN pdfmark //false } bind executeonly def /Link { - /NO_PDFMARK_DESTS where {pop NO_PDFMARK_DESTS not}{true}ifelse + /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 @@ -4916,14 +4977,14 @@ currentdict /drawannottypes undef } stopped {cleartomark} if } ifelse }{pop} ifelse - false + //false } bind executeonly def -/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 +/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 @@ -4932,7 +4993,7 @@ currentdict /drawannottypes undef ApplyCTMToQuadPoints put } if - loadannot /ANN pdfmark false + loadannot /ANN pdfmark //false } bind executeonly def /Squiggly { @@ -4942,11 +5003,11 @@ currentdict /drawannottypes undef ApplyCTMToQuadPoints put } if - loadannot /ANN pdfmark false + loadannot /ANN pdfmark //false } bind executeonly def -/Text {mark exch loadannot /ANN pdfmark false} bind executeonly def -/TrapNet {mark exch loadannot /ANN pdfmark false} bind executeonly def +/Text {mark exch loadannot /ANN pdfmark //false} bind executeonly def +/TrapNet {mark exch loadannot /ANN pdfmark //false} bind executeonly def /Underline { mark exch @@ -4955,7 +5016,7 @@ currentdict /drawannottypes undef ApplyCTMToQuadPoints put } if - loadannot /ANN pdfmark false + loadannot /ANN pdfmark //false } bind executeonly def %% Widget annotations are only used with AcroForms, and since we don't preserve AcroForms @@ -4963,7 +5024,7 @@ currentdict /drawannottypes undef %% 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} bind executeonly def +/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 |