diff options
author | Norbert Preining <norbert@preining.info> | 2020-09-29 03:02:54 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-09-29 03:02:54 +0000 |
commit | d043a18e288914d3c46a1b10af1f30ce2df00588 (patch) | |
tree | 888d8c0677d7b328602f1ec5c09d324a325043ec /graphics/pgf/base/tex/pgfsys-dvips.def | |
parent | 34310603e5253ef5742542e3f0123b341a70ee20 (diff) |
CTAN sync 202009290302
Diffstat (limited to 'graphics/pgf/base/tex/pgfsys-dvips.def')
-rw-r--r-- | graphics/pgf/base/tex/pgfsys-dvips.def | 503 |
1 files changed, 495 insertions, 8 deletions
diff --git a/graphics/pgf/base/tex/pgfsys-dvips.def b/graphics/pgf/base/tex/pgfsys-dvips.def index 4cb4d51b8b..70f5ba2887 100644 --- a/graphics/pgf/base/tex/pgfsys-dvips.def +++ b/graphics/pgf/base/tex/pgfsys-dvips.def @@ -1,4 +1,7 @@ -% Copyright 2006 by Till Tantau +% Copyright 2019 by Till Tantau +% +% PS-3 shadings, image and opacity masks (fadings), transparency groups, +% blend modes copyright 2020 by Alexander Grahn % % This file may be distributed and/or modified % @@ -33,9 +36,9 @@ \pgfsys@begin@idscope% \pgfsys@invoke{pgfs}% \special{ps::[end]}% - \wd#1=0pt% - \ht#1=0pt% - \dp#1=0pt% + \wd#1=0pt + \ht#1=0pt + \dp#1=0pt \box#1 \special{ps::[begin]}% \pgfsys@invoke{pgfr}% @@ -79,13 +82,36 @@ /pgfc{newpath @endspecial pgfpd}bind def %close /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def% save delta /pgfpd{/delta globaldict /pgfdelta get def}bind def % put delta - /.setopacityalpha where {pop} {/.setopacityalpha{pop}def} ifelse % install .setopacityalpha + /.setblendmode where {pop} {/.setblendmode{pop}def} ifelse % install .setblendmode + /.setfillconstantalpha where {% + pop /.setopacityalpha {.setfillconstantalpha} def% + } {% + /.setopacityalpha where {pop} {/.setopacityalpha {pop} def} ifelse% install .setopacityalpha (fallback) + } ifelse /.pgfsetfillopacityalpha{/pgffoa exch def - /pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def - /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def}bind def - /.pgfsetstrokeopacityalpha{/pgfsoa exch def /pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def}bind def + /.setfillconstantalpha where {pop pgffoa .setfillconstantalpha} {% + /pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def + /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def% + } ifelse% + } bind def + /.pgfsetstrokeopacityalpha{/pgfsoa exch def + /.setstrokeconstantalpha where {pop pgfsoa .setstrokeconstantalpha} {% + /pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def% + } ifelse% + }bind def /pgffoa 1 def /pgfsoa 1 def + % mandatory, transparency-related per-page operations, see + % https://www.ghostscript.com/doc/current/Language.htm#Transparency + % (bop-hook & eop-hook automatically executed if defined in userdict, see texdoc dvips) + /.pushpdf14devicefilter where {pop + [userdict /bop-hook known {userdict /bop-hook get aload pop} if + {0 .pushpdf14devicefilter} aload pop] cvx userdict exch /bop-hook exch put + [userdict /eop-hook known {userdict /eop-hook get aload pop} if + {.poppdf14devicefilter} aload pop] cvx userdict exch /eop-hook exch put% + } if + % keeps printers from choking on pdfmark operator + systemdict /pdfmark known not {userdict /pdfmark systemdict /cleartomark get put} if end }% } @@ -138,6 +164,467 @@ \fi + +% Path usage: +\def\pgfsys@discardpath{% + \ifpgfsys@@clipnext% + \ifpgfsys@eorule% + \pgfsysprotocol@literal{% + /pgfsmaskinplace dup where {exch get}{pop false} ifelse not {eoclip} if}% + \else% + \pgfsysprotocol@literal{% + /pgfsmaskinplace dup where {exch get}{pop false} ifelse not {clip} if}% + \fi% + \pgfsys@@clipnextfalse% + \fi% + \pgfsysprotocol@literal{newpath}} + + +% +% Blending +% + +\def\pgfsys@blend@mode#1{% + \expandafter\ifx\csname pgf@sys@pdf@bm@#1\endcsname\relax% + \expandafter\let\expandafter\pgf@temp\csname pgf@sys@pdf@blend@mode@map@#1\endcsname% + \expandafter\xdef\csname pgf@sys@pdf@bm@#1\endcsname{/\pgf@temp}% + \ifx\pgf@temp\relax% + \pgferror{Unknown blend mode '#1'}% + \def\pgf@temp{Normal}% + \fi% + \fi% + \pgfsysprotocol@literal{\csname pgf@sys@pdf@bm@#1\endcsname\space .setblendmode}% +} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@normal\endcsname{Normal} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@multiply\endcsname{Multiply} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@screen\endcsname{Screen} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@overlay\endcsname{Overlay} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@darken\endcsname{Darken} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@lighten\endcsname{Lighten} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@color dodge\endcsname{ColorDodge} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@color burn\endcsname{ColorBurn} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@hard light\endcsname{HardLight} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@soft light\endcsname{SoftLight} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@difference\endcsname{Difference} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@exclusion\endcsname{Exclusion} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@saturation\endcsname{Saturation} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@color\endcsname{Color} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@hue\endcsname{Hue} +\expandafter\def\csname pgf@sys@pdf@blend@mode@map@luminosity\endcsname{Luminosity} + + +% +% Shadings +% + +\def\pgfsys@horishading#1#2#3{% + {% + \pgf@parsefunc{#3}% + \pgf@xb=\pgf@max + \pgfmathsetlength\pgf@y{#2}% + \pgf@yb=\pgf@y + \pgf@sys@bp@correct{\pgf@xb}% + \pgf@sys@bp@correct{\pgf@yb}% + \xdef\pgfutil@tempa{\hbox to \the\pgf@max{% + \noexpand\vrule width0pt height\the\pgf@y% + \noexpand\pgfsys@beginpurepicture% + \noexpand\pgfsys@outerinvoke{ + \pgf@sys@tonumber{\pgf@yb} \pgf@sys@tonumber{\pgf@xb} 0 0 pgfe << + /PatternType 2 + /Shading << + /ShadingType 2 + /ColorSpace \pgf@shading@device\space + /Domain [\pgf@pdfparseddomain] + /Coords [\pgf@doma\space0 \pgf@domb\space0] + /Function \pgf@pdfparsedfunction + >> + >> matrix makepattern setpattern fill + }% + \hss% + \noexpand\pgfsys@endpurepicture% + }}% + }% + \global\expandafter\let\csname @pgfshading#1!\endcsname\pgfutil@tempa% +} +\def\pgfsys@vertshading#1#2#3{% + {% + \pgf@parsefunc{#3}% + \pgfmathsetlength\pgf@x{#2}% + \pgf@xb=\pgf@x + \pgf@yb=\pgf@max + \pgf@sys@bp@correct{\pgf@xb}% + \pgf@sys@bp@correct{\pgf@yb}% + \xdef\pgfutil@tempa{\hbox to \the\pgf@x{% + \noexpand\vrule width0pt height\the\pgf@max% + \noexpand\pgfsys@beginpurepicture% + \noexpand\pgfsys@outerinvoke{ + \pgf@sys@tonumber{\pgf@yb} \pgf@sys@tonumber{\pgf@xb} 0 0 pgfe << + /PatternType 2 + /Shading << + /ShadingType 2 + /ColorSpace \pgf@shading@device\space + /Domain [\pgf@pdfparseddomain] + /Coords [0 \pgf@doma\space0 \pgf@domb] + /Function \pgf@pdfparsedfunction + >> + >> matrix makepattern setpattern fill + }% + \hss% + \noexpand\pgfsys@endpurepicture% + }}% + }% + \global\expandafter\let\csname @pgfshading#1!\endcsname\pgfutil@tempa% +} +\def\pgfsys@radialshading#1#2#3{% + {% + \pgf@parsefunc{#3}% + \pgf@process{#2}% + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}% + \advance\pgf@xa by \pgf@x + \advance\pgf@ya by \pgf@y + \pgf@sys@bp@correct{\pgf@x}% + \pgf@sys@bp@correct{\pgf@y}% + \pgf@sys@bp@correct{\pgf@xa}% + \pgf@sys@bp@correct{\pgf@ya}% + \pgf@max=2\pgf@max + \xdef\pgfutil@tempa{\hbox to \the\pgf@max{% + \noexpand\vrule width0pt height\the\pgf@max% + \noexpand\pgfsys@beginpurepicture% + \noexpand\pgfsys@outerinvoke{ + << + /ShadingType 3 + /ColorSpace \pgf@shading@device\space + /Domain [\pgf@pdfparseddomain] + /Coords [\pgf@sys@tonumber{\pgf@xa} \pgf@sys@tonumber{\pgf@ya} \pgf@doma\space + \pgf@sys@tonumber{\pgf@x} \pgf@sys@tonumber{\pgf@y} \pgf@domb] + /Function \pgf@pdfparsedfunction + /Extend [true false] + >> shfill + }% + \hss% + \noexpand\pgfsys@endpurepicture% + }}% + }% + \global\expandafter\let\csname @pgfshading#1!\endcsname\pgfutil@tempa% +} +\def\pgfsys@functionalshading#1#2#3#4{% + {% + \pgf@process{#2}% + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + \pgf@process{#3}% + \pgf@xb=\pgf@x + \pgf@yb=\pgf@y + \advance\pgf@x by-\pgf@xa + \advance\pgf@y by-\pgf@ya + \pgf@sys@bp@correct{\pgf@xa}% + \pgf@sys@bp@correct{\pgf@ya}% + \pgf@sys@bp@correct{\pgf@xb}% + \pgf@sys@bp@correct{\pgf@yb}% + \pgf@xc=-\pgf@xa + \pgf@yc=-\pgf@ya + \xdef\pgfutil@tempa{% + \hbox to\the\pgf@x{\vbox to\the\pgf@y{\vfil + \noexpand\pgfsys@beginpurepicture% + \noexpand\pgfsys@invoke{% + % patch coords + /pgfpatchllx \pgf@sys@tonumber{\pgf@xa} def + /pgfpatchlly \pgf@sys@tonumber{\pgf@ya} def + % shading patch width and height + /pgfpatchX \pgf@sys@tonumber{\pgf@xb} pgfpatchllx sub def + /pgfpatchY \pgf@sys@tonumber{\pgf@yb} pgfpatchlly sub def + % number of samples in each direction (with samples spaced by approx. 1bp) + /pgfsamplesx pgfpatchX round cvi 1 add def + /pgfsamplesy pgfpatchY round cvi 1 add def + % exact sample distance in each direction, in bp + /pgfpatchdx pgfpatchX pgfsamplesx 1 sub div def + /pgfpatchdy pgfpatchY pgfsamplesy 1 sub div def + % + pgfpatchllx neg pgfpatchlly neg translate + /pgfproc {#4} bind def + % + % sampling procedure; repeatedly called by /ReusableStreamDecode filter; + % on each call, /pgfsamplingproc puts one colour sample (rgb, cmyk or gray) + % on the operand stack which is then consumed by the filter + userdict /pgfsampleidx 0 put % internal index; updated on each call + /pgfsamplingproc { + pgfsampleidx pgfsamplesx pgfsamplesy mul eq { + () % push empty string on the stack to signal end-of-data + } { + pgfcolorsample\pgf@shading@model\space % -str- + pgfsampleidx pgfsamplesx mod pgfpatchdx mul pgfpatchllx add % -str- x + pgfsampleidx pgfsamplesx idiv pgfpatchdy mul pgfpatchlly add % -str- x y + pgfproc % -str- <colour> + pgfwritesample\pgf@shading@model\space % -str- + /pgfsampleidx pgfsampleidx 1 add store % (update index) + } ifelse + } bind def + % + pgfpatchY pgfpatchX pgfpatchllx pgfpatchlly pgfe << + /PatternType 2 + /Shading << + /ShadingType 1 + /Domain [0 1 0 1] + /Matrix [pgfpatchX 0 0 pgfpatchY pgfpatchllx pgfpatchlly] + /ColorSpace \pgf@shading@device\space + /Function << + /FunctionType 0 + /Order 1 + /Domain [0 1 0 1] + /Range pgfrange\pgf@shading@model + /BitsPerSample pgfchanneldepth\pgf@shading@model % bits per channel, actually + /Size [pgfsamplesx pgfsamplesy] + /DataSource /pgfsamplingproc load /ReusableStreamDecode filter + >> + >> + >> matrix makepattern setpattern fill + }% + \noexpand\pgfsys@endpurepicture% + }\hss}% + }% + }% + \global\expandafter\let\csname @pgfshading#1!\endcsname\pgfutil@tempa% +} + +% helpers for converting FunctionType-4 to FunctionType-0, i. e. sampled, functions; +% FunctionType-4 functions are not defined in PostScript-3 +% +% These are the different colour models we are going to use: +% +-------+-------------------+-----------+------------------+ +% | model | channel depth/bit | max value | sample size/byte | +% +-------+-------------------+-----------+------------------+ +% | cmyk | 8 | 255 | 4 | +% | rgb | 8 | 255 | 3 | +% | gray | 24 | 16777215 | 3 | +% +-------+-------------------+-----------+------------------+ +\expandafter\gdef\expandafter\pgfsys@atbegindocument\expandafter{\pgfsys@atbegindocument% + \pgf@sys@postscript@header{ + % + % -str- c m y k pgfwritesamplecmyk ==> -str- + % -str- r g b pgfwritesamplergb ==> -str- + % -str- gray pgfwritesamplegray ==> -str- + % writes a single colour sample into the /pgfcolorsample* string; + % colour components (c,m,y,k; r,g,b; gray) between 0.0 to 1.0 + % + /pgfwritesamplecmyk { + 4 index 0 5 index pgfcheckcolorrange 255 mul round cvi put + 4 index 1 4 index pgfcheckcolorrange 255 mul round cvi put + 4 index 2 3 index pgfcheckcolorrange 255 mul round cvi put + 4 index 3 2 index pgfcheckcolorrange 255 mul round cvi put + pop pop pop pop + } bind def + % + /pgfwritesamplergb { + 3 index 0 4 index pgfcheckcolorrange 255 mul round cvi put + 3 index 1 3 index pgfcheckcolorrange 255 mul round cvi put + 3 index 2 2 index pgfcheckcolorrange 255 mul round cvi put + pop pop pop + } bind def + % + /pgfwritesamplegray { + % grayvalue between 0 and 16777215 (24 bit) + pgfcheckcolorrange 16777215 mul round cvi % -str- gray24 + 1 index 0 2 index -16 bitshift put % high byte + 1 index 1 2 index 65535 and -8 bitshift put % middle byte + 1 index 2 2 index 255 and put % low byte + pop + } bind def + % + % <colour component> pgfcheckcolorrange ==> <something between 0.0 and 1.0> + % truncates value to the allowed range (user-defined Type-4 functions may + % happen to provide values outside this range) + /pgfcheckcolorrange { + dup 0.0 lt {pop 0.0} if + dup 1.0 gt {pop 1.0} if + } bind def + % + %colour depths per channel (bit) + /pgfchanneldepthcmyk 8 def + /pgfchanneldepthrgb 8 def + /pgfchanneldepthgray 24 def + % + % allocate strings as buffers for storing a single colour sample + /pgfcolorsamplecmyk 4 string def + /pgfcolorsamplergb 3 string def + /pgfcolorsamplegray 3 string def + % + %/Range array in the FunctionType 0 dictionary + /pgfrangecmyk [0 1 0 1 0 1 0 1] def + /pgfrangergb [0 1 0 1 0 1] def + /pgfrangegray [0 1] def + }% +} + + +% +% Opacity masks +% + +\def\pgfsys@fadingfrombox#1#2{% + \ifcsname pgfsmaskxform@#1\endcsname + \pgfwarning{Fading '#1' already defined.\MessageBreak Going to replace it with new definition}% + \fi% + \global\advance\pgf@objectcount\@ne% + {% + \pgf@x=-.5\wd#2% + \pgf@y=-.5\ht#2% + \advance\pgf@y by.5\dp#2% + \expandafter\xdef\csname pgfsmasktrans@#1\endcsname{% + \noexpand\pgftransformcm{1}{0}{0}{1}{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}% + \edef\@tempa{\noexpand\pgfutil@insertatbegincurrentpagefrombox{% + % box coordinates (reference point and top) needed for distilling + \pgfsys@outerinvoke{currentpoint /pgf@refy exch def /pgf@refx exch def}% + \hbox to 0pt {\hbox to \ifdim\ht#2>\ht\strutbox\ht#2\else\ht\strutbox\fi{\hss\pgfsys@outerinvoke{% + /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def% + }}\hss}% + \pgfsys@outerinvoke{gsave + % translate box to upper left page corner, so we have the whole clipping path (i. e. + % page area) available for distilling, as outlying parts get clipped + clippath pathbbox newpath pop pop translate pgf@refx neg pgf@top neg translate + % translate origin (0,0) to the reference point + gsave pgf@refx pgf@refy translate + mark /_objdef {pgfsmaskxform@\the\pgf@objectcount} + /BBox [clippath pathbbox newpath] /BP pdfmark grestore% + }% + \wd#2=0pt + \ht#2=0pt + \dp#2=0pt + \box#2% + \pgfsys@outerinvoke{mark /EP pdfmark grestore}% + }}\@tempa% + \expandafter\xdef\csname pgfsmaskxform@#1\endcsname{\the\pgf@objectcount}% + }% +} +\def\pgfsys@usefading#1#2#3#4#5#6#7{% + \ifcsname pgfsmaskxform@#1\endcsname% + {% + \pgftransformreset% + \pgftransformcm{#2}{#3}{#4}{#5}{\pgfpoint{#6}{#7}}% + \csname pgfsmasktrans@#1\endcsname% + {% + \pgflowlevelsynccm% + \pgfsys@outerinvoke{% + /.begintransparencymaskgroup where {pop + /pgf@sys@currentcolorspace currentcolorspace def + /pgf@sys@currentcolor [currentcolor] cvx def + /pgf@sys@OverrideICC currentuserparams /OverrideICC get def % Chr. Liddell + <</OverrideICC true>> setuserparams % of Artifex + /DeviceGray setcolorspace + true <</Subtype/Luminosity>> clippath pathbbox newpath .begintransparencymaskgroup + gsave + 72 Resolution div 72 VResolution div scale + 1 DVImag div 1 DVImag div neg scale + mark {pgfsmaskxform@\csname pgfsmaskxform@#1\endcsname} /SP pdfmark + grestore + 0 .endtransparencymask + <</OverrideICC pgf@sys@OverrideICC>> setuserparams % restore orig. settings + pgf@sys@currentcolorspace setcolorspace + pgf@sys@currentcolor setcolor + /pgfsmaskinplace true def + } if% + }% + }% + \pgftransforminvert% + \pgflowlevelsynccm% + }% + \else + \pgferror{Undefined fading '#1'}% + \fi% +} +\def\pgfsys@clipfading{% + \pgfsyssoftpath@invokecurrentpath% + \pgfsys@clipnext% + \pgfsys@discardpath% +} + + +% +% Transparency groups +% +\def\pgfsys@transparencygroupfrombox#1{% + \global\advance\pgf@objectcount\@ne% + \pgfsys@outerinvoke{% + mark /_objdef {pgfxform@\the\pgf@objectcount} /BBox [clippath pathbbox newpath] /BP pdfmark + gsave + /pgf@sys@foa pgffoa def /pgf@sys@soa pgfsoa def + /.setstrokeconstantalpha where + {pop 1 .pgfsetfillopacityalpha 1 .pgfsetstrokeopacityalpha} if% + }% + \wd#1=0pt + \ht#1=0pt + \dp#1=0pt + \hskip\pgf@picminx\box#1% + \pgfsys@outerinvoke{% + /pgffoa pgf@sys@foa def /pgfsoa pgf@sys@soa def + grestore + mark /EP pdfmark + mark {pgfxform@\the\pgf@objectcount} << /Group << /S /Transparency + /I \ifpgfsys@transparency@group@isolated true \else false \fi + /K \ifpgfsys@transparency@group@knockout true \else false \fi >> >> /PUT pdfmark% + }% + \setbox#1=\hbox{\pgfsys@outerinvoke{mark {pgfxform@\the\pgf@objectcount} /SP pdfmark}}% +} + + +% +% Image inclusion, adding SMask reference and image interpolation if mandated +% + +\def\pgfsys@defineimage{% + \ifx\pgf@imagewidth\pgfutil@empty\else\edef\pgf@imagewidth{width=\pgf@imagewidth,}\fi% + \ifx\pgf@imageheight\pgfutil@empty\else\edef\pgf@imageheight{height=\pgf@imageheight,}\fi% + \begingroup% + \def\pgf@imageaddedkeys{}\def\@tempa{true}% + \ifx\pgf@imageinterpolate\@tempa\def\pgf@imageaddedkeys{/Interpolate true}\fi% + \ifx\pgf@imagemask\pgfutil@empty\else\edef\pgf@imageaddedkeys{\pgf@imageaddedkeys /SMask {\pgf@imagemask}}\fi% + \edef\@tempa{% + \ifx\pgf@imageaddedkeys\pgfutil@empty\else% + \noexpand\pgfsys@outerinvoke{% + save /pgfparent [(img) cvx cvn rand] cvx def %random name for current image + mark /_objdef /pgfparent load /NI pdfmark + % sometimes, image metadata contain embedded pdfmarks that prevent us from + % writing to the image dictionary ourselves, so we disable them temporarily + save /pdfmark /cleartomark load def + }% + \fi% + \noexpand\includegraphics[\pgf@imageheight\pgf@imagewidth]{\pgf@filename}% + \ifx\pgf@imageaddedkeys\pgfutil@empty\else% + \noexpand\pgfsys@outerinvoke{% + % empty image dummy, in case the provided file is not a valid raster image + 0 0 1 [1 0 0 1 0 0] {} image restore + mark /pgfparent load <<\pgf@imageaddedkeys>> /PUT pdfmark restore + }% + \fi% + }% + \expandafter\endgroup% + \expandafter\def\expandafter\pgf@image\expandafter{\@tempa}% +} + + +% +% Image masks +% + +\def\pgfsys@definemask{% + \global\advance\pgf@objectcount\@ne% + \ifx\pgf@maskmatte\pgfutil@empty% + \else% + \edef\pgf@maskmatte{/Matte [\pgf@maskmatte]}% + \fi% + \pgfsys@outerinvoke{% + mark /_objdef {pgfmask\the\pgf@objectcount} /NI pdfmark + 1 dict begin /pdfmark /cleartomark load def + }% + \special{psfile=\pgf@filename\space hsize=0 vsize=0}% + \pgfsys@outerinvoke{% + 0 0 1 [1 0 0 1 0 0] {} image + end mark {pgfmask\the\pgf@objectcount} <</Decode [1 0] \pgf@maskmatte>> /PUT pdfmark + }% + \edef\pgf@mask{pgfmask\the\pgf@objectcount}% +} + \endinput %%% Local Variables: |