diff options
author | Taco Hoekwater <taco@elvenkind.com> | 2009-08-23 11:11:32 +0000 |
---|---|---|
committer | Taco Hoekwater <taco@elvenkind.com> | 2009-08-23 11:11:32 +0000 |
commit | 8fc3039c82d48605b5ca8b2eda3f4fdd755681e1 (patch) | |
tree | 3cd9bbdd599bc4d1ac0409e167fee2136e4c0ec9 /Master/texmf-dist/tex/context/base/supp-mpe.tex | |
parent | 850fc99b7cd3ae7a20065531fe866ff7bae642ec (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.tex | 1370 |
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 |