summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/supp-mpe.tex
diff options
context:
space:
mode:
authorTaco Hoekwater <taco@elvenkind.com>2009-08-23 11:11:32 +0000
committerTaco Hoekwater <taco@elvenkind.com>2009-08-23 11:11:32 +0000
commit8fc3039c82d48605b5ca8b2eda3f4fdd755681e1 (patch)
tree3cd9bbdd599bc4d1ac0409e167fee2136e4c0ec9 /Master/texmf-dist/tex/context/base/supp-mpe.tex
parent850fc99b7cd3ae7a20065531fe866ff7bae642ec (diff)
this is context 2009.08.19 17:10
git-svn-id: svn://tug.org/texlive/trunk@14827 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/supp-mpe.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/supp-mpe.tex1370
1 files changed, 0 insertions, 1370 deletions
diff --git a/Master/texmf-dist/tex/context/base/supp-mpe.tex b/Master/texmf-dist/tex/context/base/supp-mpe.tex
deleted file mode 100644
index 35a940edc6e..00000000000
--- a/Master/texmf-dist/tex/context/base/supp-mpe.tex
+++ /dev/null
@@ -1,1370 +0,0 @@
-%D \module
-%D [ file=supp-mpe,
-%D version=1999.07.10,
-%D title=\CONTEXT\ Support Macros,
-%D subtitle=METAPOST Special Extensions,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-% fuzzy and complicating is the fact that we need to support
-% context as well as mptopdf, so we cannot fall back on the
-% special drivers and color module (although there may be
-% good reasons to use a smaller context instead); also,
-% shading is handled here while it should move to the special
-% driver - to do!
-
-%D This module is still experimental and deals with some
-%D extensions to \METAPOST. When using \POSTSCRIPT\ output,
-%D these extensions can be supplied by means of proper
-%D preamble definitions, but when producing \PDF\ we have to
-%D set up the appropriate datastructures ourselves. It acts as
-%D a plug in into \type {supp-pdf}. As soon as we need more
-%D extensions, we will generalize these macro. Some
-%D definitions will move to the special drivers.
-
-%D For usage in plain \TEX, say something:
-%D
-%D \starttyping
-%D \input supp-pdf
-%D \input supp-mpe
-%D
-%D \MPcmykcolorstrue
-%D \MPspotcolorstrue
-%D \chardef\makeMPintoPDFobject\plusone
-%D \stoptyping
-
-\ifx\writestatus\undefined
- \immediate\write16{[Loading MPS to PDF extensions.]}
-\else
- \writestatus{loading}{Context Support Macros / MPS extensions}
-\fi
-
-%D We implement extensions by using the \METAPOST\ special
-%D mechanism. Opposite to \TEX's specials, the \METAPOST\ ones
-%D are flushed before or after the graphic data, but thereby
-%D are no longer connected to a position.
-%D
-%D We implement specials by overloading the \type {fill}
-%D operator. By counting the fills, we can let the converter
-%D treat the appropriate fill in a special way. The
-%D specification of the speciality can have two forms,
-%D determined by the setting of a boolean variable:
-%D
-%D \starttyping
-%D _inline_specials_ := false ; % comment like code (default)
-%D _inline_specials_ := true ; % command like code
-%D \stoptyping
-%D
-%D When the specification is embedded as comment, it looks
-%D like:
-%D
-%D \starttyping
-%D %%MetaPostSpecial <size> <data> <number> <identifier>
-%D \stoptyping
-%D
-%D The in||line alternative is more tuned for \POSTSCRIPT,
-%D since it permits us to define a macro \type {special}.
-%D
-%D \starttyping
-%D inline : <data> <number> <identifier> <size> special
-%D \stoptyping
-%D
-%D The \type {identifier} determines what to do, and the data
-%D can be used to accomplish this. A type~2 shading function
-%D has identifier~2. Alltogether, the number of parameters is
-%D specified in \type {size}. The \type {number} is the number
-%D of the fill that needs the special treatment. For a type~2
-%D and~3 shaded fill, the datablock contains the following
-
-%D data:
-%D
-%D \starttyping
-%D from to n inner_r g b x y outer_r g b x y
-%D from to n inner_r g b x y radius outer_r g b x y radius
-%D \stoptyping
-%D
-%D The implementation below saves the data on the stack in
-%D a way similar to the macros in \type {supp-pdf.tex}, and
-%D just overload a few already defined handlers. That way,
-%D the existing macros are still generic. \footnote {Actually,
-%D the macros here are just as generic.}
-%D
-%D Currently the only extension concerns shading, which is
-%D accomplished by handling yet another value of \type
-%D {\finiMPpath}. The recource disctionary is stored and
-%D later picked up by the general \CONTEXT\ figure inclusion
-%D macros.
-
-\unprotect
-
-%D The \type {%%MetaPostSpecials: version.revision signal} line
-%D triggers this module into handling color specifications kind
-%D of special. We need this safeguard for non||special
-%D usage.
-
-\chardef\MPspecialversion = 0 % specials when >1
-\chardef\MPspecialrevision = 0 % specials when >1
-\chardef\MPspecialsignal = 0 % passed on by graphic
-
-\chardef\inlineMPspecials = 1 % only needed for stack resetting
-
-%D This macro handles the special definitions that are
-%D passed as comment.
-
-\def\dohandleMPspecialcomment#1
- {\setMPargument{#1}%
- \advance\scratchcounter \minusone
- \ifcase\scratchcounter
- \handleMPspecialcommand
- \donetrue
- \doresetMPstack
- \let\handleMPsequence\dohandleMPsequence
- \expandafter\handleMPsequence
- \else
- \expandafter\dohandleMPspecialcomment
- \fi}
-
-\def\handleMPspecialcomment #1 % number of arguments
- {\doresetMPstack
- \scratchcounter#1\relax
- \ifcase\scratchcounter % when zero, inline shading is used
- \chardef\inlineMPspecials\plusone
- \let\handleMPsequence\dohandleMPsequence
- \expandafter\handleMPsequence
- \else
- \chardef\inlineMPspecials\zerocount
- \expandafter\dohandleMPspecialcomment
- \fi}
-
-%D When defined inline, we use another macro to handle the
-%D definitions. Actually, this macro is called by the
-%D previous ones.
-
-\def\handleMPspecialcommand
- {\ifcase\inlineMPspecials\or
- \advance\nofMParguments \minusone % pop the size
- \fi
- \ifundefined\MPspecial
- \message{[unknown \MPspecial]}%
- \else
- \csname\MPspecial\endcsname
- \fi
- \ifcase\inlineMPspecials
- \doresetMPstack % 0
- \else
- \resetMPstack % 1
- \fi}
-
-%D This macro triggers special support. Currently, the
-%D version and revision number are not used. Any version number
-%D greater than zero will enable special support.
-
-\newconditional\manyMPspecials % \settrue\manyMPspecials
-
-\def\handleMPspecialscomment #1.#2 #3 % version.revision signal #4=div=1000|10000
- {\doresetMPstack
- \chardef\MPspecialversion #1%
- \chardef\MPspecialrevision#2%
- \chardef\MPspecialsignal #3%
- \let\handleMPsequence\dohandleMPsequence
- \ifnum#1=\plusone
- \expandafter\handleMPsequence
- \else
- \expandafter\handleMPspecialscommentx
- \fi}
-
-\def\handleMPspecialscommentx #1 % version 2
-% {\doifelsedoifelse{#1}{10000}{\settrue\manyMPspecials}{\setfalse\manyMPspecials}% local
- {\ifnum10000=0#1\relax
- \settrue \manyMPspecials
- \else
- \setfalse\manyMPspecials
- \fi
- \setMPextensions
- \handleMPsequence}
-
-% one can say (in meta-ini):
-%
-% \prependtoks
-% _special_div_ := 1000\ifconditional\manyMPspecials0\fi ;
-% \to \MPextensions
-
-%D In case of \PDF, we need to prepare resourcs.
-
-\newtoks\MPstartresources
-\newtoks\MPstopresources
-
-\def\startMPresources
- {\the\MPstartresources
- \ifx\currentPDFresources\empty\else
- \message{[unused resources]}%
- \fi
- \global\let\currentPDFresources\empty}
-
-\def\stopMPresources
- {\let\currentPDFresources\empty
- \the\MPstopresources}
-
-%D Since colors are not subjected to transformations, we can
-%D only use colors as signal. In our case, we use a dummy colored
-%D path with a red color component of \type {0.n}, so \type
-%D {0.001} is the first path and \type {0.010} the tenth. Since
-%D \METAPOST strips trailing zeros, we have to padd the string.
-
-\newif\ifMPcmykcolors
-\newif\ifMPspotcolors
-
-\ifx\normalhandleMPrgbcolor\undefined % in case we reload this module
-
- \let\normalhandleMPrgbcolor \handleMPrgbcolor
- \let\normalhandleMPcmykcolor\handleMPcmykcolor
- \let\normalhandleMPgraycolor\handleMPgraycolor
- \let\normalhandleMPspotcolor\handleMPspotcolor
-
-\fi
-
-%D When we are using \CONTEXT, we will fall back to the
-%D better color conversion routines. This also has the advantage
-%D that we don't have to parse and convert the file. In this
-%D alternative, \type {\!MP} is not (yet) supported. Because
-%D we can (for efficiency reasons) turn off strokecolor,
-%D something we cannot do in \METAPOST\ converted code.
-
-\newif\ifPDFMPstrokecolor \PDFMPstrokecolortrue
-
-%D [This code should move to meta-ini.]
-
-\ifCONTEXT % we can use this for a better xgstate handling
-
- \def\checkPDFMPstrokecolor
- {\ifPDFMPstrokecolor \PDFstrokecolortrue \fi}
-
- \def\normalhandleMPrgbcolor
- {{\checkPDFMPstrokecolor\execcolorR\gMPa1:\gMPa2:\gMPa3:0:0\od}}
-
- \def\normalhandleMPcmykcolor
- {{\checkPDFMPstrokecolor\execcolorC\gMPa1:\gMPa2:\gMPa3:\gMPa4:0:0\od}}
-
- \def\normalhandleMPgraycolor
- {{\checkPDFMPstrokecolor\execcolorS\gMPa1:0:0\od}}
-
-% \def\normalhandleMPspotcolor
-% {{\checkPDFMPstrokecolor\execcolorP\gMPa1:\gMPa2:0:0\od}}
-
- \def\normalhandleMPspotcolor % ???
- {{\checkPDFMPstrokecolor\execcolorP\gMPa1:\gMPa2:\gMPa3:\gMPa4:0:0\od}}
-
-\fi
-
-% In the previous macros we use the special drivers. A more
-% direct approach would have been:
-%
-% \def\doPDFstartrgbcolormode#1#2#3%
-% {\PDFcode{#1 #2 #3 rg #1 #2 #3 RG}}
-%
-% \def\doPDFstartcmykcolormode#1#2#3#4%
-% {\PDFcode{#1 #2 #3 #4 k #1 #2 #3 #4 K}}
-%
-% \def\doPDFstartgraycolormode#1%
-% {\PDFcode{#1 g #1 G}}
-%
-% \appendtoks
-% \let\dostartrgbcolormode \doPDFstartrgbcolormode
-% \let\dostartcmykcolormode\doPDFstartcmykcolormode
-% \let\dostartgraycolormode\doPDFstartgraycolormode
-% \to \everyMPtoPDFconversion
-
-%D Now we can handle special color signals. We only do this
-%D when special are detected.
-
-% \def\MPrgbnumber#1{\expandafter\doMPrgbnumber#1000.0000\relax}
-% \def\doMPrgbnumber#1.#2#3#4#5\relax{#2#3#4}
-
-%D We cannot use \type {\everyMPtoPDFconversion} because in \MPTOPDF\
-%D we don't have the \type {\appendtoks} macro available.
-
-\def\setMPextensions
- {\ifconditional\manyMPspecials
- \def\MPrgbnumber##1{\expandafter\doMPrgbnumber##10000.00000\relax}%
- \def\doMPrgbnumber##1.##2##3##4##5##6\relax{##2##3##4##5}%
- \else
- \def\MPrgbnumber##1{\expandafter\doMPrgbnumber##1000.0000\relax}%
- \def\doMPrgbnumber##1.##2##3##4##5\relax{##2##3##4}%
- \fi}
-
-%D The naive case looks like:
-%D
-%D \starttyping
-%D \def\handleMPrgbcolor%
-%D {\setMPcolor
-%D \ifcase\MPspecialversion
-%D \resetMPcolor\normalhandleMPrgbcolor
-%D \else\ifnum\MPrgbnumber\lastMPrvalue=\MPspecialsignal
-%D % consider it to be a signal
-%D \else
-%D \resetMPcolor\normalhandleMPrgbcolor
-%D \fi\fi}
-%D \stoptyping
-%D
-%D However, since we want \CMYK\ support, we will use the
-%D following implementation:
-
-% \def\setMPcolor
-% {\edef\lastMPrvalue{\gMPa1}%
-% \edef\lastMPgvalue{\gMPa2}%
-% \edef\lastMPbvalue{\gMPa3}}
-%
-% speed up (hardly called, so no let is needed)
-
-\def\setMPcolor
- {\edef\lastMPrvalue{\csname\@@MP01\endcsname}%
- \edef\lastMPgvalue{\csname\@@MP02\endcsname}%
- \edef\lastMPbvalue{\csname\@@MP03\endcsname}}
-
-\def\zeroMPrgbvalue{0.0}
-
-\def\resetMPcolor
- {\let\lastMPrvalue\zeroMPrgbvalue
- \let\lastMPgvalue\zeroMPrgbvalue
- \let\lastMPbvalue\zeroMPrgbvalue}
-
-\resetMPcolor
-
-\def\@@MPSK{@MPSK@}
-\def\@@MPSP{@MPSP@}
-
-\def\interceptMPcmykcolor % todo : \ifMPcmykcolors
- {\ifcase\MPrgbnumber\lastMPgvalue
- % cannot happen
- \or
- % 1 == cmyk color spec
- \ifMPcmykcolors \dointerceptMPcmykcolor \fi
- \or
- % 2 == spot color
- \ifMPspotcolors \dointerceptMPspotcolor \fi
- \or
- % 3 == rgb transparency
- \invokeMPtransparencyspecial
- \or
- % 4 == cmyk transparency
- \ifMPcmykcolors \invokeMPtransparencyspecial \fi
- \or
- % 5 == spot transparency
- \ifMPspotcolors \invokeMPtransparencyspecial \fi
- \else
- % \writestatus{MPtoPDF}{unknown direct special}%
- \fi}
-
-% ifcsname
-
-\def\dointerceptMPcmykcolor
- {\revokeMPtransparencyspecial
- \@EA\ifx\csname\@@MPSK\number\MPrgbnumber\lastMPbvalue\endcsname\relax\else
- \@EA\@EA\@EA\setMPcmyk\csname\@@MPSK\number\MPrgbnumber\lastMPbvalue\endcsname
- \normalhandleMPcmykcolor
- \fi}
-
-\def\dointerceptMPspotcolor
- {\revokeMPtransparencyspecial
- \@EA\ifx\csname\@@MPSP\number\MPrgbnumber\lastMPbvalue\endcsname\relax\else
- \@EA\@EA\@EA\setMPspot\csname\@@MPSP\number\MPrgbnumber\lastMPbvalue\endcsname
- \normalhandleMPspotcolor
- \fi}
-
-\def\handleMPrgbcolor
- {\resetMPcolor
- \ifcase\MPspecialversion
- \normalhandleMPrgbcolor
- \else
- \setMPcolor
- \ifnum\MPrgbnumber\lastMPrvalue=\MPspecialsignal\relax
- \interceptMPcmykcolor
- \else
- \revokeMPtransparencyspecial
- \normalhandleMPrgbcolor
- \fi
- \fi}
-
-\def\handleMPgraycolor
- {\resetMPcolor
- \ifcase\MPspecialversion \else \revokeMPtransparencyspecial \fi
- \normalhandleMPgraycolor}
-
-\def\handleMPcmykcolor
- {\resetMPcolor
- \ifcase\MPspecialversion \else \revokeMPtransparencyspecial \fi
- \normalhandleMPcmykcolor}
-
-%D Specials are define and recalled using:
-
-\def\MPspecial
- {MP special \gMPs\nofMParguments}
-
-\def\defineMPspecial#1#2%
- {\setvalue{MP special #1}{#2}}
-
-%D The path processing macro is slightly extended.
-
-\newtoks \invokeMPspecials
-
-\def\finishMPpath
- {\PDFcode
- {\ifcase\finiMPpath W n\or S\or f\or B\else W n\fi
- \extraMPpathcode}}
-
-\def\processMPpath
- {\checkMPpath % !
- \ifcase\nofMPsegments\else
- \let\extraMPpathcode\empty
- \ifcase\MPspecialversion\else
- \ifnum\MPrgbnumber\lastMPrvalue=\MPspecialsignal
- \ifnum\MPrgbnumber\lastMPgvalue>10 % really needed
- \scratchcounter\MPrgbnumber\lastMPbvalue
- \edef\currentMPspecial{\the\scratchcounter}%
-\let\previousMPcolorspec\currentMPcolorspec
-\edef\currentMPcolorspec{\lastMPrvalue\lastMPgvalue\lastMPbvalue}%
-\ifx\previousMPcolorspec\currentMPcolorspec \else
- \revokeMPtransparencyspecial
-\fi
- \ifnum\finiMPpath=2 % to outer level
- \the\invokeMPspecials
- \fi
- \fi
- \fi
- \fi
- \flushMPpath
- \closeMPpath
- \finishMPpath
- \fi
- \let\handleMPsequence\dohandleMPsequence
- \resetMPstack
- \nofMPsegments0
- \handleMPsequence}
-
-%D Shading is an example of a more advanced graphic feature,
-%D but users will seldom encounter those complications. Here
-%D we only show a few simple examples, but many other
-%D alternatives are possible by setting up the functions built
-%D in \PDF\ in the appropriate way.
-%D
-%D Shading has to do with interpolation between two or more
-%D points or user supplied ranges. In \PDF, the specifications
-%D of a shade has to be encapsulated in objects and passed on
-%D as resources. This is a \PDF\ level 1.3. feature. One can
-%D simulate three dimensional shades as well and define simple
-%D functions using a limited set of \POSTSCRIPT\ primitives.
-%D Given the power of \METAPOST\ and these \PDF\ features, we
-%D can achieve superb graphic effects.
-%D
-%D Since everything is hidden in \TEX\ and \METAPOST\ graphics,
-%D we can stick to high level \CONTEXT\ command, as shown in
-%D the following exmples.
-%D
-%D \startbuffer
-%D \startuniqueMPgraphic{CircularShade}
-%D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
-%D circular_shade(p,0,.2red,.9red) ;
-%D \stopuniqueMPgraphic
-%D
-%D \startuniqueMPgraphic{LinearShade}
-%D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
-%D linear_shade(p,0,.2blue,.9blue) ;
-%D \stopuniqueMPgraphic
-%D
-%D \startuniqueMPgraphic{DuotoneShade}
-%D path p ; p := unitsquare xscaled \overlaywidth yscaled \overlayheight ;
-%D linear_shade(p,2,.5green,.5red) ;
-%D \stopuniqueMPgraphic
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \getbuffer
-%D
-%D These graphics can be hooked into the overlay mechanism,
-%D which is available in many commands.
-%D
-%D \startbuffer
-%D \defineoverlay[demo 1][\uniqueMPgraphic{CircularShade}]
-%D \defineoverlay[demo 2][\uniqueMPgraphic {LinearShade}]
-%D \defineoverlay[demo 3][\uniqueMPgraphic {DuotoneShade}]
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \getbuffer
-%D
-%D These backgrounds can for instance be applied to \type
-%D {\framed}:
-%D
-%D \startbuffer
-%D \setupframed[width=3cm,height=2cm,frame=off]
-%D \startcombination[3*1]
-%D {\framed[background=demo 1]{\bfd \white Demo 1}} {}
-%D {\framed[background=demo 2]{\bfd \white Demo 2}} {}
-%D {\framed[background=demo 3]{\bfd \white Demo 3}} {}
-%D \stopcombination
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-%D
-%D There are a few more alternatives, determined by the second
-%D parameter passed to \type {circular_shade} and alike.
-%D
-%D \def\SomeShade#1#2#3#4#5%
-%D {\startuniqueMPgraphic{Shade-#1}
-%D width := \overlaywidth ;
-%D height := \overlayheight ;
-%D path p ; p := unitsquare xscaled width yscaled height ;
-%D #2_shade(p,#3,#4,#5) ;
-%D \stopuniqueMPgraphic
-%D \defineoverlay[Shade-#1][\uniqueMPgraphic{Shade-#1}]%
-%D \framed[backgroundachtergrond=Shade-#1,width=2cm,height=2cm,frame=off]{}}
-%D
-%D \startlinecorrection
-%D \startcombination[5*1]
-%D {\SomeShade{10}{circular}{0}{.3blue}{.9blue}} {circular 0}
-%D {\SomeShade{11}{circular}{1}{.3blue}{.9blue}} {circular 1}
-%D {\SomeShade{12}{circular}{2}{.3blue}{.9blue}} {circular 2}
-%D {\SomeShade{13}{circular}{3}{.3blue}{.9blue}} {circular 3}
-%D {\SomeShade{14}{circular}{4}{.3blue}{.9blue}} {circular 4}
-%D \stopcombination
-%D \stoplinecorrection
-%D
-%D \blank
-%D
-%D \startlinecorrection
-%D \startcombination[5*1]
-%D {\SomeShade{20}{circular}{0}{.9green}{.3green}} {circular 0}
-%D {\SomeShade{21}{circular}{1}{.9green}{.3green}} {circular 1}
-%D {\SomeShade{22}{circular}{2}{.9green}{.3green}} {circular 2}
-%D {\SomeShade{23}{circular}{3}{.9green}{.3green}} {circular 3}
-%D {\SomeShade{24}{circular}{4}{.9green}{.3green}} {circular 4}
-%D \stopcombination
-%D \stoplinecorrection
-%D
-%D \blank
-%D
-%D \startlinecorrection
-%D \startcombination[4*1]
-%D {\SomeShade{30}{linear}{0}{.3red}{.9red}} {linear 0}
-%D {\SomeShade{31}{linear}{1}{.3red}{.9red}} {linear 1}
-%D {\SomeShade{32}{linear}{2}{.3red}{.9red}} {linear 2}
-%D {\SomeShade{33}{linear}{3}{.3red}{.9red}} {linear 3}
-%D \stopcombination
-%D \stoplinecorrection
-%D
-%D These macros closely cooperate with the \METAPOST\ module
-%D \type {mp-spec.mp}, which is part of the \CONTEXT\
-%D distribution.
-%D
-%D The low level (\PDF) implementation is based on the \TEX\
-%D based \METAPOST\ to \PDF\ converter. Shading is supported
-%D by overloading the \type {fill} operator as implemented
-%D earlier. In \PDF\ type~2 and~3 shading functions are
-%D specified in terms of:
-%D
-%D \starttabulate[|Tl|l|]
-%D \NC /Domain \NC sort of meeting range \NC \NR
-%D \NC /C0 \NC inner shade \NC \NR
-%D \NC /C1 \NC outer shade \NC \NR
-%D \NC /N \NC smaller values, bigger inner circles \NC \NR
-%D \stoptabulate
-
-\newcount\currentPDFshade % 0 % global (document wide) counter
-\let\currentMPshades\empty
-
-\def\startMPshading#1%
- {\edef\currentMPspecial{\gMPs{#1}}}
-
-\def\stopMPshading
- {\global\advance\currentPDFshade \plusone
- \setxvalue{obj:Sh:\currentMPspecial}%
- {/Sh\the\currentPDFshade\space\the\pdflastobj\space0 R }%
- \setxvalue{mps:Sh:\currentMPspecial}%
- {\the\currentPDFshade}}
-
-\appendtoks
- \global\let\currentMPshades\empty
-\to \MPstartresources
-
-\appendtoks
- \ifx\currentMPshades\empty \else
- \xdef\currentPDFresources{\currentPDFresources
- /Shading <<\currentMPshades>>}%
- \fi
-\to \MPstopresources
-
-\def\invokeMPshadespecial
- {\ifundefined{mps:Sh:\currentMPspecial}\else
- \edef\currentMPshade{\getvalue{obj:Sh:\currentMPspecial}}%
- \doifinstringelse\currentMPshade\currentMPshades \donothing
- {\xdef\currentMPshades{\currentMPshades\currentMPshade}}%
- \def\extraMPpathcode{/Sh\getvalue{mps:Sh:\currentMPspecial} sh Q}%
- \chardef\finiMPpath\zerocount
- \PDFcode{q /Pattern cs}%
- \fi}
-
-\appendtoks \invokeMPshadespecial \to \invokeMPspecials
-
-%D We need to convert the \CMYK\ specials into colors, because
-%D we have to do it twice, we define a macro.
-
-% \def\checkMPshadingcolor#1#2#3#4#5%
-% {\edef\tempMPrvalue{\csname\@@MP0#1\endcsname}%
-% \edef\tempMPgvalue{\csname\@@MP0#2\endcsname}%
-% \edef\tempMPbvalue{\csname\@@MP0#3\endcsname}%
-% \edef#5%
-% {\ifx\tempMPrvalue\tempMPgvalue
-% \ifx\tempMPrvalue\tempMPbvalue
-% \ifx\tempMPgvalue\tempMPbvalue
-% \tempMPbvalue
-% \fi
-% \fi
-% \fi}%
-% \edef#4% todo : spotcolors
-% {\ifnum\MPrgbnumber\tempMPrvalue=\MPspecialsignal\space
-% \ifMPcmykcolors\getvalue{\@@MPSK\number\MPrgbnumber\tempMPbvalue}\fi
-% \fi}}
-
-\def\checkMPshadingcolor#1#2#3#4#5%
- {\edef\tempMPrvalue{\csname\@@MP0#1\endcsname}%
- \edef\tempMPgvalue{\csname\@@MP0#2\endcsname}%
- \edef\tempMPbvalue{\csname\@@MP0#3\endcsname}%
- \global\let\MPresolvedspace\MPgrayspace
- \global\let\MPresolvedcolor\!!zerocount
- \ifnum\MPrgbnumber\tempMPrvalue=\MPspecialsignal\relax
- \ifcase\MPrgbnumber\tempMPgvalue
- \or % 1 = cmyk
- \ifMPcmykcolors
- \expanded{\resolveMPcmykcolor\getvalue{\@@MPSK\number\MPrgbnumber\tempMPbvalue}}\end
- \fi
- \or % 2 = spot
- \ifMPspotcolors
- \expanded{\resolveMPspotcolor\getvalue{\@@MPSP\number\MPrgbnumber\tempMPbvalue}}\end
- \fi
- \or
- % 3 = rgb transparency
- % to do
- \or
- % 4 == cmyk transparency
- % \ifMPcmykcolors
- % to do
- % \fi
- \or
- % 5 == spot transparency
- % \ifMPspotcolors
- % to do
- % \fi
- \fi
- \else
- \ifx\tempMPrvalue\tempMPgvalue
- \ifx\tempMPrvalue\tempMPbvalue
- \expanded{\resolveMPgraycolor\tempMPbvalue}\end
- \else
- \expanded{\resolveMPrgbcolor\tempMPrvalue\space\tempMPgvalue\space\tempMPbvalue}\end
- \fi
- \else
- \expanded{\resolveMPrgbcolor\tempMPrvalue\space\tempMPgvalue\space\tempMPbvalue}\end
- \fi
- \fi
- \let#4\MPresolvedcolor
- \let#5\MPresolvedspace}
-
-%D We also need to make sure that we have two \RGB\ or
-%D \CMYK colors, since we have to set the colorspace.
-
-\def\setMPshadingcolors#1#2#3#4#5#6% color space
- {\checkMPshadingcolor{#1}{#2}{#3}\MPshadeAc\MPshadeAs
- \checkMPshadingcolor{#4}{#5}{#6}\MPshadeBc\MPshadeBs
- \ifx\MPshadeAs\MPshadeBs
- \let\MPshadeA\MPshadeAc
- \let\MPshadeB\MPshadeBc
- \let\MPshadeC\MPshadeAs
- \else\ifx\MPshadeAs\MPgrayspace
- \ifx\MPshadeBs\MPrgbspace
- \edef\MPshadeA{\MPshadeAc\space\MPshadeAc\space\MPshadeAc}%
- \else
- \negatecolorcomponent\MPshadeAc
- \edef\MPshadeA{0 0 0 \MPshadeAc}%
- \fi
- \let\MPshadeB\MPshadeBc
- \let\MPshadeC\MPshadeBs
- \else\ifx\MPshadeBs\MPgrayspace
- \let\MPshadeA\MPshadeAc
- \ifx\MPshadeAs\MPrgbspace
- \edef\MPshadeB{\MPshadeBc\space\MPshadeBc\space\MPshadeBc}%
- \else
- \negatecolorcomponent\MPshadeBc
- \edef\MPshadeB{0 0 0 \MPshadeBc}%
- \fi
- \let\MPshadeC\MPshadeAs
- \else
- % different color spaces
- \def\MPshadeA{1}%
- \def\MPshadeB{1}%
- \let\MPshadeC\MPgrayspace
- \fi\fi\fi}
-
-\let\MPshadeA\MPcmykWhite
-\let\MPshadeB\MPcmykBlack
-\let\MPshadeC\MPgrayspace
-
-%D The reason why this macro is a bit complicates is that we
-%D handle black and white situations (otherwise we would have
-%D to use \CMYK\ b/w in case of a \CMYK\ shade).
-
-%D Here are the special handlers:
-
-\defineMPspecial{30}
- {\startMPshading{14}% type 2
- \setMPshadingcolors{4}{5}{6}{9}{10}{11}%
- \immediate\pdfobj
- {<</FunctionType 2
- /Domain [\gMPs1 \gMPs2]
- /C0 [\MPshadeA]
- /C1 [\MPshadeB]
- /N \gMPs3>>}%
- \immediate\pdfobj
- {<</ShadingType 2
- /ColorSpace /\MPshadeC\space
- /Function \the\pdflastobj\space 0 R
- /Coords [\gMPs7 \gMPs8 \gMPs{12} \gMPs{13}]
- /Extend [true true]>>}%
- \stopMPshading}
-
-\defineMPspecial{31}
- {\startMPshading{16}% type 3
- \setMPshadingcolors{4}{5}{6}{10}{11}{12}%
- \immediate\pdfobj
- {<</FunctionType 2
- /Domain [\gMPs1 \gMPs2]
- /C0 [\MPshadeA]
- /C1 [\MPshadeB]
- /N \gMPs3>>}%
- \immediate\pdfobj
- {<</ShadingType 3
- /ColorSpace /\MPshadeC\space
- /Function \the\pdflastobj\space 0 R
- /Coords [\gMPs7 \gMPs8 \gMPs9 \gMPs{13} \gMPs{14} \gMPs{15}]
- /Extend [true true]>>}%
- \stopMPshading}
-
-%D Figure inclusion is kind of strange to \METAPOST, but when
-%D Santiago Muelas started discussing this with me, I was able
-%D to cook up a solution using specials.
-
-\def\invokeMPfigurespecial%
- {\getvalue{mps:gr:\currentMPspecial}} % or \relax
-
-\appendtoks \invokeMPfigurespecial \to \invokeMPspecials
-
-\defineMPspecial{10}
- {\setxvalue{mps:gr:\gMPs8}%
- {\noexpand\handleMPfigurespecial
- {\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}{\gMPs7}%
- \noexpand\setxvalue{mps:gr:\gMPs8}{}}}
-
-% \def\handleMPfigurespecial#1#2#3#4#5#6#7%
-% {\vbox to 0pt
-% {\vss
-% \hbox to 0pt
-% {\pdfliteral{q #1 #2 #3 #4 #5 #6 cm}%
-% \pdfimage width 1bp height 1bp {#7}% maybe 10 is better
-% \pdfliteral{Q}%
-% \hss}}}
-%
-% better, since xform reuse
-
-\def\handleMPfigurespecial#1#2#3#4#5#6#7% todo : combine with ext fig
- {\vbox to \zeropoint
- {\vss
- \hbox to \zeropoint
- {\ifcase\pdfoutput\or % will be hooked into the special driver
- \doiffileelse{#7}
- {\doifundefinedelse{mps:x:#7}
- {\immediate\pdfximage\!!width\onebasepoint\!!height\onebasepoint{#7}%
- \setxvalue{mps:x:#7}{\pdfrefximage\the\pdflastximage}}%
- {\message{[reusing figure #7]}}%
- \PDFcode{q #1 #2 #3 #4 #5 #6 cm}%
- \rlap{\getvalue{mps:x:#7}}%
- \PDFcode{Q}}
- {\message{[unknown figure #7]}}%
- \fi
- \hss}}}
-
-%D An example of using both special features is the
-%D following.
-%D
-%D \starttyping
-%D \startMPpage
-%D externalfigure "hakker1b.png" scaled 22cm rotated 10 shifted (-2cm,0cm);
-%D externalfigure "hakker1b.png" scaled 10cm rotated -10 ;
-%D externalfigure "hakker1b.png" scaled 7cm rotated 45 shifted (8cm,12cm) ;
-%D path p ; p := unitcircle xscaled 15cm yscaled 20cm;
-%D path q ; q := p rotatedaround(center p,90) ;
-%D path r ; r := buildcycle(p,q) ; clip currentpicture to r ;
-%D path s ; s := boundingbox currentpicture enlarged 5mm ;
-%D picture c ; c := currentpicture ; currentpicture := nullpicture ;
-%D circular_shade(s,0,.2red,.9red) ;
-%D addto currentpicture also c ;
-%D \stopMPpage
-%D \stoptyping
-
-%D This is some experimental hyperlink driver that I wrote
-%D for Mark Wicks.
-
-\defineMPspecial{20}
- {\setxvalue{mps:hl:\gMPs6}%
- {\noexpand\handleMPhyperlink
- {\gMPs1}{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}%
- \noexpand\setxvalue{mps:hl:\gMPs6}{}}}
-
-\def\handleMPhyperlink#1#2#3#4#5%
- {%\ifcase\pdfoutput\or
- \setbox\scratchbox\hbox
- {\setbox\scratchbox\null
- \scratchdimen#1\onebasepoint\scratchdimen-\scratchdimen
- \advance\scratchdimen#3\onebasepoint
- \wd\scratchbox\scratchdimen
- \scratchdimen#2\onebasepoint\scratchdimen-\scratchdimen
- \advance\scratchdimen#4\onebasepoint
- \ht\scratchbox\scratchdimen
- \incolorfalse
- \gotobox{\box\scratchbox}[#5]}%
- \setbox\scratchbox\hbox
- {\scratchdimen\MPxoffset\onebasepoint\advance\scratchdimen#1\onebasepoint
- \hskip\scratchdimen
- \scratchdimen\MPyoffset\onebasepoint\advance\scratchdimen#2\onebasepoint
- \raise\scratchdimen\box\scratchbox}%
- \smashbox\scratchbox
- \box\scratchbox
- }%\fi}
-
-\def\invokeMPhyperlinkspecial%
- {\getvalue{mps:hl:\currentMPspecial}} % or \relax
-
-\appendtoks \invokeMPhyperlinkspecial \to \invokeMPspecials
-
-%D Special number~1 is dedicated to \CMYK\ support. If you
-%D want to know why: look at this:
-%D
-%D \startbuffer[mp]
-%D fill fullcircle xyscaled (3cm,1cm) withcolor \MPcolor{test} ;
-%D \stopbuffer
-%D
-%D \startbuffer[cmyk]
-%D \startcombination[4*1]
-%D {\definecolor[test][c=1,y=.3,k=.3] \processMPbuffer[mp]} {c=1 y=.3 k=.3}
-%D {\definecolor[test][c=.9,y=.15] \processMPbuffer[mp]} {c=.9 y=.15}
-%D {\definecolor[test][c=.25,y=.8] \processMPbuffer[mp]} {c=.25 y=.8}
-%D {\definecolor[test][c=.45,y=.1] \processMPbuffer[mp]} {c=.45 y=.1}
-%D \stopcombination
-%D \stopbuffer
-%D
-%D \placefigure
-%D {\CMYK\ support disabled,
-%D conversion to \RGB.}
-%D {\setupcolors[cmyk=nee,state=start]\getbuffer[cmyk]}
-%D
-%D \placefigure
-%D {\CMYK\ support enabled,
-%D no support in \METAPOST.}
-%D {\setupcolors[cmyk=ja,mpcmyk=nee,state=start]\getbuffer[cmyk]}
-%D
-%D \placefigure
-%D {\CMYK\ support enabled,
-%D no conversion to \RGB,
-%D support in \METAPOST}
-%D {\setupcolors[cmyk=ja,state=start]\getbuffer[cmyk]}
-
-\defineMPspecial{1}
- {\ifMPcmykcolors
- \setxvalue{\@@MPSK\gMPs1}{\gMPs2 \gMPs3 \gMPs4 \gMPs5 }%
- \fi}
-
-\def\setMPcmyk#1 #2 #3 #4 %
- {\setvalue{\@@MP01}{#1}%
- \setvalue{\@@MP02}{#2}%
- \setvalue{\@@MP03}{#3}%
- \setvalue{\@@MP04}{#4}}
-
-%\defineMPspecial{2}
-% {\ifMPspotcolors
-% \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 }%
-% \fi}
-
-% \defineMPspecial{2}
-% {\ifMPspotcolors
-% \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 }%
-% \checkMPspot{\gMPs2}{\gMPs3}%
-% \fi}
-%
-% \def\setMPspot#1 #2 %
-% {\setvalue{\@@MP01}{#1}%
-% \setvalue{\@@MP02}{#2}}
-%
-% \def\checkMPspot#1#2%
-% {\expanded{\resolveMPspotcolor#1 #2}\end
-% \ifx\MPspotspace\MPresolvedspace
-% \edef\MPspotspacespec{/\MPspotspace\space}%
-% \doifinstringelse\MPspotspacespec\currentMPcolorspaces
-% \donothing\registerMPcolorspace
-% \fi}
-
-\defineMPspecial{2}
- {\ifMPspotcolors
- \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 \gMPs4 \gMPs5 }% space is essential
- \checkMPspot{\gMPs2}{\gMPs3}{\gMPs4}{\gMPs5}%
- \fi}
-
-\def\setMPspot#1 #2 #3 #4 %
- {\setvalue{\@@MP01}{#1}%
- \setvalue{\@@MP02}{#2}%
- \setvalue{\@@MP03}{#3}%
- \setvalue{\@@MP04}{#4}}
-
-\def\checkMPspot#1#2#3#4%
- {\expanded{\resolveMPspotcolor#1 #2 #3 #4}\end
- \ifx\MPspotspace\MPresolvedspace
- \edef\MPspotspacespec{/\MPspotspace\space}%
- \doifinstringelse\MPspotspacespec\currentMPcolorspaces
- \donothing\registerMPcolorspace
- \fi}
-
-%D This special (number 50) passes positions to a tex file.
-%D This method uses a two||pass approach an (mis|)|used the
-%D context positioning macros. In \type {core-pos} we will
-%D implement the low level submacro needed.
-%D
-%D \startbuffer
-%D \definelayer[test]
-%D
-%D \setlayer
-%D [test]
-%D [x=\MPx{somepos-1},y=\MPy{somepos-1}]
-%D {Whatever we want here!}
-%D
-%D \setlayer
-%D [test]
-%D [x=\MPx{somepos-2},y=\MPy{somepos-2}]
-%D {Whatever we need there!}
-%D
-%D \startuseMPgraphic{oeps}
-%D draw fullcircle scaled 6cm withcolor red ;
-%D register ("somepos-1",1cm,2cm,center currentpicture) ;
-%D register ("somepos-2",4cm,3cm,(-1cm,-2cm)) ;
-%D \stopuseMPgraphic
-%D
-%D \framed[background=test,offset=overlay]{\useMPgraphic{oeps}}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D Here the width and height are not realy used, but one can
-%D imagine situations where tex has to work with values
-%D calculated by \METAPOST.
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-%D
-%D Later we will implement a more convenient macro:
-%D
-%D \starttyping
-%D \setMPlayer [test] [somepos-1] {Whatever we want here!}
-%D \setMPlayer [test] [somepos-2] {Whatever we need there!}
-%D \stoptyping
-
-\ifx\dosavepositionwhd\undefined
- \let\dosavepositionwhd\gobblesevenarguments
-\fi
-
-\defineMPspecial{50} % x y width height label
- {\bgroup
- \scratchdimen\MPllx\onebasepoint\scratchdimen-\scratchdimen
- % \scratchdimen-\MPllx\onebasepoint % moet ook werken
- \advance\scratchdimen\gMPs1\onebasepoint
- \edef\x{\number\scratchdimen}%
- \scratchdimen\gMPs2\onebasepoint
- \scratchdimen-\scratchdimen
- \advance\scratchdimen\MPury\onebasepoint
- \edef\y{\number\scratchdimen}%
- \scratchdimen\gMPs3\onebasepoint
- \edef\w{\number\scratchdimen}%
- \scratchdimen\gMPs4\onebasepoint
- \edef\h{\number\scratchdimen}%
- \dosavepositionwhd{\gMPs5}0\x\y\w\h0%
- \egroup}
-
-%D Transparency support used specials 60 (rgb) and 61
-%D (cmyk).
-%D
-%D \startbuffer
-%D u := 2cm ; path p ; p := fullcircle scaled u shifted (u/4,0);
-%D
-%D fill p rotated 90 withcolor transparent(1,.5,yellow) ;
-%D fill p rotated 210 withcolor transparent(1,.5,green) ;
-%D fill p rotated 330 withcolor transparent(1,.5,blue) ;
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D \startlinecorrection \processMPbuffer \stoplinecorrection
-%D
-%D One can also communicate colors between \CONTEXT\ and
-%D \METAPOST:
-%D
-%D \startbuffer
-%D \definecolor[tcyan] [c=1,k=.2,t=.5]
-%D \definecolor[tmagenta][m=1,k=.2,t=.5]
-%D \definecolor[tyellow] [y=1,k=.2,t=.5]
-%D \stopbuffer
-%D
-%D \typebuffer \getbuffer
-%D
-%D \startbuffer
-%D u := 2cm ; path p ; p := fullcircle scaled u shifted (u/4,0);
-%D
-%D fill p rotated 90 withcolor \MPcolor{tcyan} ;
-%D fill p rotated 210 withcolor \MPcolor{tmagenta} ;
-%D fill p rotated 330 withcolor \MPcolor{tyellow} ;
-%D \stopbuffer
-%D
-%D \startlinecorrection \processMPbuffer \stoplinecorrection
-%D
-%D We save all the three components needed in one macro,
-%D just to save hash space.
-
-\def\@@MPST{@MPST@}
-
-\def\assignMPStransparency#1#2#3%
- {\edef\PDFtransparencyidentifier{#1}%
- \edef\PDFtransparencyreference {#2}%
- \edef\PDFtransparencycolorspecs{#3}}
-
-% \def\PDFtransparencyspec
-% {\ifx\MPresolvedspace\MPgrayspace
-% \MPresolvedcolor\space g \MPresolvedcolor\space G%
-% \else\ifx\MPresolvedspace\MPrgbspace
-% \MPresolvedcolor\space rg \MPresolvedcolor\space RG%
-% \else\ifx\MPresolvedspace\MPcmykspace
-% \MPresolvedcolor\space k \MPresolvedcolor\space K%
-% \else\ifx\MPresolvedspace\empty\else
-% /\MPresolvedspace\space cs \MPresolvedcolor\space sc
-% /\MPresolvedspace\space CS \MPresolvedcolor\space SC%
-% \fi\fi\fi\fi}
-
-\def\PDFtransparencyspec % todo
- {\ifx\MPresolvedspace\MPgrayspace
- \MPresolvedcolor\space g
- \MPresolvedcolor\space G%
- \else\ifx\MPresolvedspace\MPrgbspace
- \MPresolvedcolor\space rg
- \MPresolvedcolor\space RG%
- \else\ifx\MPresolvedspace\MPcmykspace
- \MPresolvedcolor\space k
- \MPresolvedcolor\space K%
- \else\ifx\MPresolvedspace\empty\else
- /\MPresolvedspace\space cs
- /\MPresolvedspace\space CS
- \PDFgetspotcolorspec\MPresolvedcolor
- \fi\fi\fi\fi}
-
-\defineMPspecial{3} % rgb
- {\edef\currentMPspecial{\gMPs6}%
- \presetPDFtransparency{\gMPs1}{\gMPs2}%
- \expanded{\resolveMPrgbcolor\gMPs3 \gMPs4 \gMPs5}\end
- \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
- {\noexpand\assignMPStransparency
- {\PDFtransparencyidentifier}%
- {\PDFtransparencyreference}%
- {\PDFtransparencyspec}}}
-
-\defineMPspecial{4} % cmyk
- {\edef\currentMPspecial{\gMPs7}%
- \presetPDFtransparency{\gMPs1}{\gMPs2}%
- \expanded{\resolveMPcmykcolor\gMPs3 \gMPs4 \gMPs5 \gMPs6}\end
- \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
- {\noexpand\assignMPStransparency
- {\PDFtransparencyidentifier}%
- {\PDFtransparencyreference}%
- {\PDFtransparencyspec}}}
-
-% \defineMPspecial{5} % spot
-% {\edef\currentMPspecial{\gMPs5}%
-% \presetPDFtransparency{\gMPs1}{\gMPs2}%
-% \checkMPspot{\gMPs3}{\gMPs4}%
-% \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
-% {\noexpand\assignMPStransparency
-% {\PDFtransparencyidentifier}%
-% {\PDFtransparencyreference}%
-% {\PDFtransparencyspec}}}
-
-\defineMPspecial{5} % spot
- {\edef\currentMPspecial{\gMPs7}%
- \presetPDFtransparency{\gMPs1}{\gMPs2}%
- \checkMPspot{\gMPs3}{\gMPs4}{\gMPs5}{\gMPs6}%
- \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
- {\noexpand\assignMPStransparency
- {\PDFtransparencyidentifier}%
- {\PDFtransparencyreference}%
- {\PDFtransparencyspec}}}
-
-% beware: for the moment only supported in pdftex; needs a cleanup!
-
-\def\registerMPcolorspace
- {\doifobjectreferencefoundelse{PDFCS}\MPspotspace
- {\doPDFgetobjectreference{PDFCS}\MPspotspace\PDFobjectreference
- \xdef\currentMPcolorspaces
- {\currentMPcolorspaces\MPspotspacespec\PDFobjectreference\space}}
- \donothing}
-
-%D We need to add resource specifications!
-
-\appendtoks
- \global\let\currentMPcolorspaces\empty
-\to \MPstartresources
-
-\appendtoks
- \ifx\currentMPcolorspaces\empty \else
- \xdef\currentPDFresources{\currentPDFresources
- /ColorSpace <<\currentMPcolorspaces>>}%
- \fi
-\to \MPstopresources
-
-%D For efficiency reasons, we fall back on the allocation
-%D mechanisms already present. For use within \MPTOPDF, we
-%D provide a fall back routine.
-
-\let\currentMPtransparencies\empty
-
-% \def\invokeMPtransparencyspecial
-% {\doifdefined{\@@MPST\currentMPspecial}
-% {\getvalue{\@@MPST\currentMPspecial}%
-% \doifinstringelse
-% {\PDFtransparencyidentifier}{\currentMPtransparencies}
-% {}
-% {\xdef\currentMPtransparencies
-% {\currentMPtransparencies
-% \PDFtransparencyidentifier\space
-% \PDFtransparencyreference\space}}%
-% \def\extraMPpathcode{ Q}%
-% \PDFcode{q
-% \PDFtransparencycolorspecs\space
-% \PDFtransparencyidentifier\space gs}}}
-
-% this one triggers a new graphic state
-
-\def\invokeMPtransparencyspecial
- {\scratchcounter\MPrgbnumber\lastMPbvalue
- \edef\currentMPspecial{\the\scratchcounter}%
- \ifundefined{\@@MPST\currentMPspecial}\else
- \getvalue{\@@MPST\currentMPspecial}%
- \doifinstringelse\PDFtransparencyidentifier\currentMPtransparencies
- \donothing\registerMPtransparencyresource % slow
- \PDFcode
- {\PDFtransparencycolorspecs\space
- \PDFtransparencyidentifier\space gs}%
- % potential optimization
- % \setevalue{\@@MPST\currentMPspecial}%
- % {\PDFcode
- % {\PDFtransparencycolorspecs\space
- % \PDFtransparencyidentifier\space gs}}%
- % \getvalue{\@@MPST\currentMPspecial}%
- \let\revokeMPtransparencyspecial\dorevokeMPtransparencyspecial
- \fi}
-
-% this one does a reset
-
-\let\revokeMPtransparencyspecial\relax
-
-\appendtoks
- \revokeMPtransparencyspecial
-\to \MPstopresources
-
-\def\dorevokeMPtransparencyspecial % only called if state is set
- {\ifx\PDFtransparencyresetidentifier\empty\else
- \doifinstringelse\PDFtransparencyresetidentifier\currentMPtransparencies
- \donothing\registerMPtransparencyresetresource
- \PDFcode{\PDFtransparencyresetidentifier\space gs}%
- % potential optimization
- % \def\dorevokeMPtransparencyspecial
- % {\PDFcode
- % {\PDFtransparencycolorspecs\space
- % \PDFtransparencyidentifier\space gs}}%
- \let\dorevokeMPtransparencyspecial\dodorevokeMPtransparencyspecial
- \let\revokeMPtransparencyspecial\relax % invoke sets it
- \fi}
-
-% and this one a simplified reset
-
-% \def\dodorevokeMPtransparencyspecial % used after first invocation
-% {\getvalue{\@@MPST0}%
-% \PDFcode{\PDFtransparencyidentifier\space gs}}
-
-\def\dodorevokeMPtransparencyspecial % used after first invocation
- {\PDFcode{\PDFtransparencyresetidentifier\space gs}%
- \let\revokeMPtransparencyspecial\relax} % invoke sets it
-
-% add a resource entry
-
-\def\registerMPtransparencyresource
- {\xdef\currentMPtransparencies
- {\currentMPtransparencies
- \PDFtransparencyidentifier\space
- \PDFtransparencyreference\space}}
-
-\def\registerMPtransparencyresetresource
- {\xdef\currentMPtransparencies
- {\currentMPtransparencies
- \PDFtransparencyresetidentifier\space
- \PDFtransparencyresetreference\space}}
-
-\appendtoks \invokeMPtransparencyspecial \to \invokeMPspecials
-
-\ifCONTEXT \else
-
- \def\@@MPSTN{@MPSTN@}
- \def\@@MPSTO{@MPSTO@}
-
- \newcount\PDFcurrenttransparency
-
- \let\PDFtransparencyresetidentifier\empty
- \let\PDFtransparencyresetreference \empty
-
- \let\PDFtransparencyidentifier\empty
- \let\PDFtransparencyreference \empty
-
- \def\initializePDFtransparency
- {\global\let\initializePDFtransparency\relax
- \presetPDFtransparency{1}{1}%
- \xdef\PDFtransparencyresetidentifier{/Tr0}%
- \xdef\PDFtransparencyresetreference{\the\pdflastobj\space 0 R}}
-
- \def\presetPDFtransparency#1#2%
- {\initializePDFtransparency
- \@EA\ifx\csname\@@MPSTO#1:#2\endcsname\relax
- \global\advance\PDFcurrenttransparency \plusone
- \immediate\pdfobj{\PDFtransparencydictionary{#1}{#2}{}}%
- \setxvalue{\@@MPSTN#1:#2}{\the\PDFcurrenttransparency}%
- \setxvalue{\@@MPSTO#1:#2}{\the\pdflastobj}%
- \fi
- \edef\PDFtransparencyidentifier{/Tr\getvalue{\@@MPSTN#1:#2}}%
- \edef\PDFtransparencyreference{\getvalue{\@@MPSTO#1:#2} 0 R}}
-
- \def\PDFtransparencydictionary#1#2#3% type fraction extras
- {<</Type /ExtGState
- /ca #2 /CA #2
- /BM /\ifcase#1 Normal\or Normal\or Multiply\or Screen\or
- Overlay\or SoftLight\or HardLight\or ColorDodge\or
- ColorBurn\or Darken\or Lighten\or Difference\or
- Exclusion\else Compatible\fi
- #3>>}
-
-\fi
-
-\appendtoks
- \global\let\currentMPtransparencies\empty
-\to \MPstartresources
-
-\appendtoks
- \ifx\currentMPtransparencies\empty \else
- \xdef\currentPDFresources{\currentPDFresources
- /ExtGState <<\currentMPtransparencies>>}%
- \fi
-\to \MPstopresources
-
-%D In all cases, we need to keep track of the resources
-%D used.
-
-%D A few auxiliary macros:
-
-\def\MPgrayspace{DeviceGray}
-\def\MPrgbspace {DeviceRGB}
-\def\MPcmykspace{DeviceCMYK}
-\let\MPspotspace\MPgrayspace
-
-\def\MPcmykBlack{0 0 0 0}
-\def\MPcmykWhite{0 0 0 1}
-
-\ifCONTEXT
-
- \def\startMPcolorresolve
- {\bgroup
- \def\dostartgraycolormode##1%
- {\global\let\MPresolvedspace\MPgrayspace
- \xdef\MPresolvedcolor{##1}}%
- \def\dostartrgbcolormode ##1##2##3%
- {\global\let\MPresolvedspace\MPrgbspace
- \xdef\MPresolvedcolor{##1 ##2 ##3}}%
- \def\dostartcmykcolormode##1##2##3##4%
- {\global\let\MPresolvedspace\MPcmykspace
- \xdef\MPresolvedcolor{##1 ##2 ##3 ##4}}%
- \def\dostartspotcolormode##1##2%
- {\global\let\MPspotspace\empty
- \xdef\MPresolvedspace{##1}%
- \xdef\MPresolvedcolor{##2}%
- \global\let\MPspotspace\MPresolvedspace}% signal
- \dostartgraycolormode\!!zerocount} % kind of hackery initialization
-
- \let\stopMPcolorresolve\egroup
-
- \def\resolveMPrgbcolor#1 #2 #3\end
- {\startMPcolorresolve
- \execcolorR#1:#2:#3:0:0\od
- \stopMPcolorresolve}
-
- \def\resolveMPcmykcolor#1 #2 #3 #4\end
- {\startMPcolorresolve
- \execcolorC#1:#2:#3:#4:0:0\od
- \stopMPcolorresolve}
-
- \def\resolveMPgraycolor#1\end
- {\startMPcolorresolve
- \execcolorS#1:0:0\od
- \stopMPcolorresolve}
-
-% \def\resolveMPspotcolor#1 #2\end
-% {\startMPcolorresolve
-% \execcolorP#1:#2:0:0\od
-% \stopMPcolorresolve}
-
- \def\resolveMPspotcolor#1 #2 #3 #4\end
- {\startMPcolorresolve
- \ifnum#2>\plusone
- \checkmultitonecolor{#1}%
- \fi
- \execcolorP#1:#2:#3:#4:0:0\od
- \stopMPcolorresolve}
-
-\else
-
- \def\resolveMPspotcolor#1 #2\end
- {\global\let\MPresolvedspace\MPgrayspace
- \xdef\MPresolvedcolor{0}}
-
- \def\resolveMPrgbcolor#1 #2 #3\end
- {\global\let\MPresolvedspace\MPrgbspace
- \xdef\MPresolvedcolor{#1 #2 #3}}
-
- \def\resolveMPcmykcolor#1 #2 #3 #4\end
- {\global\let\MPresolvedspace\MPcmykspace
- \xdef\MPresolvedcolor{#1 #2 #3 #4}}
-
- \def\resolveMPgraycolor#1\end
- {\global\let\MPresolvedspace\MPgrayspace
- \xdef\MPresolvedcolor{#1}} % should be inverted
-
-\fi
-
-\protect \endinput