summaryrefslogtreecommitdiff
path: root/tex/context/base/colo-ini.mkii
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-01-12 17:15:07 +0100
commit8d8d528d2ad52599f11250cfc567fea4f37f2a8b (patch)
tree94286bc131ef7d994f9432febaf03fe23d10eef8 /tex/context/base/colo-ini.mkii
parentf5aed2e51223c36c84c5f25a6cad238b2af59087 (diff)
downloadcontext-8d8d528d2ad52599f11250cfc567fea4f37f2a8b.tar.gz
2016-01-12 16:26:00
Diffstat (limited to 'tex/context/base/colo-ini.mkii')
-rw-r--r--tex/context/base/colo-ini.mkii2794
1 files changed, 0 insertions, 2794 deletions
diff --git a/tex/context/base/colo-ini.mkii b/tex/context/base/colo-ini.mkii
deleted file mode 100644
index 56b9d14da..000000000
--- a/tex/context/base/colo-ini.mkii
+++ /dev/null
@@ -1,2794 +0,0 @@
-%D \module
-%D [ file=colo-ini,
-%D version=2007.08.08,
-%D title=\CONTEXT\ Color Macros,
-%D subtitle=Initialization,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-%D We need to clean this up further but first we hav eto make sure that mkiv
-%D code works ok.
-
-\writestatus{loading}{ConTeXt Color Macros / Initialization}
-
-%D This module implements color. Since \MKII\ and \MKIV\ use a completely
-%D different approach, this module only implements a few generic mechanisms.
-
-\unprotect
-
-\chardef\colorversion=1 % temp, needed for tracing purposes, mkiv transition
-
-%D We use a couple of local registers. That way we don't have
-%D to group when converting colors. By the way, this is not
-%D really faster. We can sqeeze half a second runtime for 50K
-%D switches on a 1G machine, but the macros will become rather
-%D ugly then. To mention one such improvement: no colon
-%D after the key character (.25 sec).
-
-\newdimen\colordimen
-\newcount\colorcount
-
-%D When typesetting for paper, we prefer using the \cap{CMYK}
-%D color space, but for on||screen viewing we prefer \cap{RGB}
-%D (the previous implementation supported only this scheme).
-%D Independant of such specifications, we support some automatic
-%D conversions:
-%D
-%D \startitemize[packed]
-%D \item convert all colors to \cap{RGB}
-%D \item convert all colors to \cap{CMYK}
-%D \item convert all colors to gray scales
-%D \stopitemize
-%D
-%D We also support optimization of colors to gray scales.
-%D
-%D \startitemize[continue]
-%D \item reduce gray colors to gray scales
-%D \item reduce \cap{CMY} components to \cap{K}
-%D \stopitemize
-%D
-%D These options are communicated by means of:
-
-\newif\ifRGBsupported
-\newif\ifCMYKsupported
-\newif\ifSPOTsupported
-\newif\ifpreferGRAY
-\newif\ifGRAYprefered
-\newif\ifreduceCMYK
-\newif\ifconverttoGRAY
-\newif\ifweightGRAY \weightGRAYtrue
-
-\newif\ifconvertMPcolors
-\newif\ifreduceMPcolors
-\newif\ifforcegrayMPcolors
-
-%D The last boolean controls reduction of \cap{CMYK} to
-%D \cap{CMY} colors. When set to true, the black component
-%D is added to the other ones.
-%D
-%D Prefering gray is not the same as converting to gray.
-%D Conversion treats each color components in a different way,
-%D while prefering is just a reduction and thus a
-%D space||saving option.
-
-\newif\iffreezecolors \freezecolorsfalse
-\newif\ifincolor % true if colors enabled
-\newif\iflocalcolor
-
-\let\colorlist \empty
-\let\currentspotcolor \empty
-\let\allspotcolors \empty
-\let\usedspotcolors \empty
-\let\usedcolorchannels\empty
-\let\currentpalet \empty
-
-%D \macros
-%D {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor}
-%D
-%D \startbuffer
-%D \definecolor [blue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m
-%D \definecolor [yellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m
-%D
-%D \definespotcolor [blue-100] [blue] [p=1]
-%D \definespotcolor [yellow-100] [yellow] [p=1]
-%D
-%D \definemultitonecolor [pdftoolscolor] [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1]
-%D
-%D \useexternalfigure[demofig][mill.png][object=no]
-%D
-%D \startcombination[4*1]
-%D {\externalfigure[demofig]} {no color}
-%D {\externalfigure[demofig][color=pdftoolscolor]} {indexed duotone}
-%D {\externalfigure[demofig][color=blue-100]} {spot color}
-%D {\externalfigure[demofig][color=yellow-100]} {spot color}
-%D \stopcombination
-%D \stopbuffer
-%D
-%D \getbuffer \typebuffer
-
-\def\definecolor {\dodoubleargument\dodefinecolor}
-\def\defineglobalcolor {\dodoubleargument\dodefineglobalcolor}
-\def\definenamedcolor {\dodoubleargument\dodefinenamedcolor}
-\def\definespotcolor {\dotripleargument\dodefinespotcolor}
-\def\definemultitonecolor{\doquadrupleempty\dodefinemultitonecolor}
-
-% check: registerusedspotcolors
-% check: registerusedcolorchannels
-
-%D \macros
-%D {doifcolorelse, doifcolor}
-%D
-%D Switching to a color is done by means of the following
-%D command. Later on we will explain the use of palets. We
-%D define ourselves a color conditional first.
-
-\ifx\doifcolorelse\undefined
- \let\doifcolorelse\secondoftwoarguments
- \let\doifcolor \gobbleoneargument
-\fi
-
-%D \macros
-%D {localstartcolor,localstopcolor}
-%D
-%D Simple color support, that is without nesting, is provided
-%D by:
-
-\ifx\localstartcolor\undefined
- \let\localstartcolor\undefined
- \let\localstopcolor \undefined
-\fi
-
-%D \macros
-%D {faststartcolor,faststopcolor}
-%D
-%D No checking for arguments and such:
-
-\ifx\faststartcolor\undefined
- \def\faststartcolor[#1]{}
- \def\faststopcolor {}
-\fi
-
-%D These local ones may go away in future versions.
-
-%D \macros
-%D {startcolor,stopcolor}
-%D
-%D The more save method, the one that saves the current color
-%D state and returns to this state afterward, is activated by:
-%D
-%D \showsetup{startcolor}
-
-\ifx\startcolor\undefined
- \let\startcolor\undefined
- \let\stopcolor \undefined
-\fi
-
-%D \macros
-%D {startcurrentcolor,stopcurrentcolor}
-
-\def\startcurrentcolor{\startcolor[\outercolorname]}
-\def\stopcurrentcolor {\stopcolor}
-
-%D \macros
-%D {color,graycolor}
-%D
-%D This leaves the simple color command:
-%D
-%D \showsetup{color}
-%D \showsetup{graycolor}
-
-\ifx\color\undefined
- \def\color [#1]{}
- \def\graycolor[#1]{}
- \def\gray {\graycolor}
-\fi
-
-%D \macros
-%D {localstartraster,localstopraster,
-%D startraster,stopraster,raster}
-%D
-%D The previous conversions are not linear and treat each color
-%D component according to human perception curves. Pure gray
-%D (we call them rasters) has equal color components. In
-%D \CONTEXT\ rasters are only used as backgrounds and these
-%D don't cross page boundaries in the way color does. Therefore
-%D we don't need stacks and marks. Just to be compatible with
-%D color support we offer both 'global' and 'local' commands.
-
-\ifx\startraster\undefined
- \def\startraster [#1]{}
- \def\stopraster {}
- \def\raster [#1]{}
- \def\localstartraster[#1]{}
- \def\localstopraster {}
-\fi
-
-%D \macros
-%D {colorvalue, grayvalue}
-%D
-%D We can typeset the color components using \type{\colorvalue} and
-%D \type{\grayvalue}. The commands:
-%D
-%D \startbuffer
-%D color value of SomeKindOfRed: \colorvalue{SomeKindOfRed} \crlf
-%D gray value of SomeKindOfRed: \grayvalue{SomeKindOfRed}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D show us:
-%D
-%D \startvoorbeeld
-%D \getbuffer
-%D \stopvoorbeeld
-
-\def\colorformatseparator{ }
-
-\ifx\colorvalue\undefined
- \let\colorvalue\gobbleoneargument
- \let\grayvalue \gobbleoneargument
-\fi
-
-% check: \currentcolorname
-% check: \outercolorname
-
-%D \macros
-%D {setupcolor}
-%D
-%D Color definitions can be grouped in files with the name:
-%D
-%D \starttyping
-%D \f!colorprefix-identifier.tex
-%D \stoptyping
-%D
-%D where \type{\f!colorprefix} is \unprotect {\tttf \f!colorprefix}.
-%D Loading such a file is done by \protect
-%D
-%D \showsetup{setupcolor}
-%D
-%D Some default colors are specified in \type{colo-rgb.tex},
-%D which is loaded into the format by:
-%D
-%D \starttyping
-%D \setupcolor[rgb]
-%D \stoptyping
-
-\let\colorstyle\empty
-
-\def\setupcolor
- {\dosingleargument\dosetupcolor}
-
-\def\dosetupcolor[#1]%
- {\doifnot{#1}\colorstyle
- {\def\colorstyle{#1}%
- \processcommalist[#1]\dodosetupcolor}}
-
-\def\dodosetupcolor#1%
- {\makeshortfilename[\truefilename{\f!colorprefix#1}]%
- \startreadingfile
- \readsysfile{\shortfilename.\mksuffix}
- {\showmessage\m!colors4\colorstyle}
- {\readsysfile{\shortfilename.tex}
- {\showmessage\m!colors4\colorstyle}
- {\showmessage\m!colors5\colorstyle}}%
- \stopreadingfile}
-
-\let\usecolors\setupcolor
-
-% check: \chardef\currentcolorchannel=0
-% check: \startcolormode
-% check: \newif\iffilterspotcolor \filterspotcolorfalse
-% check: \newif\ifdoingspotcolor \doingspotcolorfalse
-% check: \registercolorchannel
-
-%D \macros
-%D {definetransparency}
-%D
-%D This command numbers to names:
-
-\def\definetransparency
- {\dodoubleargument\dodefinetransparency}
-
-\def\setupcolors
- {\dosingleargument\dosetupcolors}
-
-\def\resetcolorsplitting
- {\chardef\currentcolorchannel\zerocount
- \let\currentspotcolor\empty
- \filterspotcolorfalse}
-
-\def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplit\fi}
-\def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplit-\fi}
-
-\def\setcolorsplitting
- {\resetsystemmode{\v!color\colorsplitsuffix}%
- \resetcolorsplitting
- \processaction
- [\@@clsplit]
- [ c=>\chardef\currentcolorchannel1,%
- m=>\chardef\currentcolorchannel2,%
- y=>\chardef\currentcolorchannel3,%
- k=>\chardef\currentcolorchannel4,%
- r=>\chardef\currentcolorchannel5,%
- g=>\chardef\currentcolorchannel6,%
- b=>\chardef\currentcolorchannel7,%
- s=>\chardef\currentcolorchannel8,%
- \v!no=>,% \currentcolorchannel0,% all colors
- \s!default=>,% \currentcolorchannel0,% all colors
- \s!unknown=>\filterspotcolortrue
- \edef\currentspotcolor{\commalistelement}]%
- \setsystemmode{\v!color\colorsplitsuffix}%
- \iffilterspotcolor \let\@@clrgb\v!no \fi}
-
-\ifx\dosetupcolormodel\undefined
- \let\dosetupcolormodel\relax
-\fi
-
-\def\dosetupcolors[#1]% some no longer make sense in MkIV
- {\getparameters[\??cl][#1]%
- \doifelse\@@clspot\v!yes
- \SPOTsupportedtrue
- \SPOTsupportedfalse
- \doifelsenothing\@@clsplit
- \resetcolorsplitting
- \setcolorsplitting
- \doifelse\@@clreduction\v!yes
- \reduceCMYKtrue
- \reduceCMYKfalse
- \doifelse\@@clexpansion\v!yes
- \freezecolorstrue
- \freezecolorsfalse
- \doifelse\@@clcriterium\v!all
- \hidesplitcolortrue
- \hidesplitcolorfalse
- \doifelse\@@clrgb\v!no
- {\ifRGBsupported \ifproductionrun\showmessage\m!colors {9}\v!rgb \fi\RGBsupportedfalse \fi}
- {\ifRGBsupported \else\ifproductionrun\showmessage\m!colors{10}\v!rgb \fi\RGBsupportedtrue \fi}%
- \doifelse\@@clcmyk\v!no
- {\ifCMYKsupported \ifproductionrun\showmessage\m!colors {9}\v!cmyk \fi\CMYKsupportedfalse\fi}
- {\ifCMYKsupported\else\ifproductionrun\showmessage\m!colors{10}\v!cmyk \fi\CMYKsupportedtrue \fi}%
- \doifelse\@@clmpcmyk\v!no
- {\ifMPcmykcolors \ifproductionrun\showmessage\m!colors {9}{\v!mp\v!cmyk}\fi\MPcmykcolorsfalse \fi}
- {\ifMPcmykcolors \else\ifproductionrun\showmessage\m!colors{10}{\v!mp\v!cmyk}\fi\MPcmykcolorstrue \fi}%
- \doifelse\@@clmpspot\v!no
- {\ifMPspotcolors \ifproductionrun\showmessage\m!colors {9}{\v!mp\v!spot}\fi\MPspotcolorsfalse \fi}
- {\ifMPspotcolors \else\ifproductionrun\showmessage\m!colors{10}{\v!mp\v!spot}\fi\MPspotcolorstrue \fi}%
- \preferGRAYfalse
- \processaction
- [\@@clconversion]
- [ \v!yes=>\preferGRAYtrue,
- \v!always=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]%
- \ifRGBsupported
- \converttoGRAYfalse
- \forcegrayMPcolorsfalse
- \else\ifCMYKsupported
- \converttoGRAYfalse
- \forcegrayMPcolorsfalse
- \convertMPcolorstrue
- \ifreduceCMYK
- \reduceMPcolorstrue
- \fi
- \else
- \ifconverttoGRAY\else\showmessage\m!colors{11}\empty\fi
- \converttoGRAYtrue
- \forcegrayMPcolorstrue
- \convertMPcolorsfalse
- \reduceMPcolorsfalse
- \fi\fi
- \processaction
- [\@@clstate]
- [ \v!global=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
- \incolortrue\localcolorfalse,
- \v!local=>\ifincolor\else\showmessage\m!colors2\colorstyle\fi
- \incolortrue\localcolortrue,
- \v!start=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
- \incolortrue\localcolorfalse
- \let\@@clstate\v!global,
- \v!stop=>\incolorfalse\localcolorfalse
- \forcegrayMPcolorstrue]%
- \dosetupcolormodel
- \initializemaintextcolor}
-
-%D \macros
-%D {startregistercolor,stopregistercolor,permitcolormode}
-%D
-%D If you only want to register a color, the switch \type
-%D {\ifpermitcolormode} can be used. That way the nested
-%D colors know where to go back to.
-
-\ifx\startregistercolor\undefined
- \def\startregistercolor[#1]{}
- \def\stopregistercolor {}
-\fi
-
-%D We use these macros for implementing text colors
-%D (actually, the first application was in foreground
-%D colors).
-%D
-%D \starttyping
-%D \starttextcolor[red]
-%D \dorecurse{10}{\input tufte \color[green]{oeps} \par}
-%D \stoptextcolor
-%D \stoptyping
-%D
-%D This is more efficient than the alternative:
-%D
-%D \starttyping
-%D \setupbackgrounds[text][foregroundcolor=red]
-%D \startregistercolor[red]
-%D \dorecurse{10}{\input tufte \color[green]{oeps} \par}
-%D \stopregistercolor
-%D \stoptyping
-
-\def\maintextcolor {}
-\def\defaulttextcolor {black}
-\def\@@themaintextcolor{themaintextcolor}
-
-\ifx\initializemaintextcolor\undefined
- \def\starttextcolor [#1]{}
- \def\stoptextcolor {}
- \def\initializemaintextcolor {}
-\fi
-
-\ifx\restoretextcolor\undefined % to be redone
- \let\restoretextcolor \firstofoneargument
- \let\localstarttextcolor\relax
- \let\localstoptextcolor \relax
-\fi
-
-%D In this documentation we will not go into too much details
-%D on palets. Curious users can find more information on this
-%D topic in \from[use of color].
-%D
-%D At the moment we implemented color in \CONTEXT\ color
-%D printing was not yet on the desktop. In spite of this lack our
-%D graphics designer made colorfull illustrations. When printed
-%D on a black and white printer, distinctive colors can come
-%D out equally gray. We therefore decided to use only colors
-%D that were distinctive in colors as well as in black and
-%D white print.
-%D
-%D Although none of the graphic packages we used supported
-%D logical colors and global color redefition, we build this
-%D support into \CONTEXT. This enabled us to experiment and
-%D also prepared us for the future.
-
-%D \macros
-%D {definepalet}
-%D
-%D Colors are grouped in palets. The colors in such a palet can
-%D have colorful names, but best is to use names that specify
-%D their use, like {\em important} or {\em danger}. As a sort
-%D of example \CONTEXT\ has some palets predefined,
-%D like:\footnote{At the time I wrote the palet support, I was
-%D reading 'A hort history of time' of S.~Hawkins, so that's
-%D why we stuck to quarks.}
-%D
-%D \starttyping
-%D \definepalet
-%D [alfa]
-%D [ top=rood:7,
-%D bottom=groen:6,
-%D up=blauw:5,
-%D down=cyaan:4,
-%D strange=magenta:3,
-%D charm=geel:2]
-%D \stoptyping
-%D
-%D It's formal definition is:
-%D
-%D \showsetup{definepalet}
-%D
-%D Visualized, such a palet looks like:
-%D
-%D \startbuffer[palet]
-%D \showpalet [alfa] [horizontal,name,number,value]
-%D \stopbuffer
-%D
-%D \startlinecorrection
-%D \getbuffer[palet]
-%D \stoplinecorrection
-%D
-%D This bar shows both the color and gray alternatives of the
-%D palet components (not visible in black and white print).
-%D
-%D When needed, one can copy a palet by saying:
-%D
-%D \starttyping
-%D \definepalet [TEXcolorpretty] [colorpretty]
-%D \stoptyping
-%D
-%D This saves us some typing in for instance the modules that
-%D deal with pretty verbatim typesetting.
-
-\def\definepalet
- {\dodoubleargument\dodefinepalet}
-
-\def\dodefinepalet[#1][#2]%
- {\doifassignmentelse{#2}
- {%\showmessage\m!colors6{#1}%
- \letvalue{\??pa#1}\empty
- \setevalue{\??pa\??pa#1}{#2}%
- \def\dodododefinepalet[##1=##2]%
- {\doifvaluesomething{\??pa#1}
- {\setevalue{\??pa#1}{\csname\??pa#1\endcsname,}}%
- \setevalue{\??pa#1}{\csname\??pa#1\endcsname##1}%
- \dodefinepaletcolor{#1}{##1}{##2}}%
- \def\dododefinepalet##1%
- {\dodododefinepalet[##1]}%
- \processcommalist[#2]\dododefinepalet}
- {\doifdefined{\??pa#2}
- {\expanded{\dodefinepalet[#1][\csname\??pa\??pa#2\endcsname]}}}}
-
-\ifx\dodefinepaletcolor\undefined
- \let\dodefinepaletcolor\gobblethreearguments
-\fi
-
-\let\paletsize\!!zerocount
-
-\def\getpaletsize[#1]%
- {\getcommacommandsize[\csname\??pa\??pa#1\endcsname]%
- \edef\paletsize{\number\commalistsize}}
-
-%D Instead of refering to colors, one can also directly specify
-%D a color:
-%D
-%D \starttyping
-%D \definepalet[test][xx=green]
-%D \definepalet[test][xx={y=.4}]
-%D \stoptyping
-
-%D \macros
-%D {setuppalet}
-%D
-%D Colors are taken from the current palet, if defined.
-%D Setting the current palet is done by:
-%D
-%D \showsetup{setuppalet}
-
-\let\currentpalet\empty
-
-\def\setuppalet
- {\dosingleempty\dosetuppalet}
-
-\def\dosetuppalet[#1]%
- {\edef\currentpalet{#1}%
- \ifx\currentpalet\empty
- % seems to be a reset
- \else\ifcsname\??pa\currentpalet\endcsname
- \edef\currentpalet{#1:}%
- \else
- \showmessage\m!colors7\currentpalet
- \let\currentpalet\empty
- \fi\fi}
-
-%D \macros
-%D {showpalet}
-%D
-%D The previous visualization was typeset with:
-%D
-%D \typebuffer[palet]
-%D
-%D This commands is defined as:
-%D
-%D \showsetup{showpalet}
-
-\fetchruntimecommand \showpalet {\f!colorprefix\s!run}
-
-%D \macros
-%D {showcolorcomponents}
-%D
-%D \starttyping
-%D \showcolorcomponents[color-1,color-2]
-%D \stoptyping
-
-\fetchruntimecommand \showcolorcomponents {\f!colorprefix\s!run}
-
-%D \macros
-%D {definecolorgroup}
-%D
-%D The naming of the colors in this palet suggests some
-%D ordening, which in turn is suported by color grouping.
-%D
-%D \starttyping
-%D \definecolorgroup
-%D [red]
-%D [1.00:0.90:0.90,
-%D 1.00:0.80:0.80,
-%D 1.00:0.70:0.70,
-%D 1.00:0.55:0.55,
-%D 1.00:0.40:0.40,
-%D 1.00:0.25:0.25,
-%D 1.00:0.15:0.15,
-%D 0.90:0.00:0.00]
-%D \stoptyping
-%D
-%D In such a color group colors are numbered from~$1$ to~$n$.
-%D
-%D \showsetup{definecolorgroup}
-%D
-%D This kind of specification is not only more compact than
-%D defining each color separate, it also loads faster and takes
-%D less bytes.
-
-\def\definecolorgroup
- {\dotripleempty\dodefinecolorgroup}
-
-\def\dododefinecolorgroupgray [#1][#2:#3]{\definecolor [#1:\the\colorcount][s=#2]}
-\def\dododefinecolorgrouprgb [#1][#2:#3:#4:#5]{\definecolor [#1:\the\colorcount][r=#2,g=#3,b=#4]}
-\def\dododefinecolorgroupcmyk[#1][#2:#3:#4:#5:#6]{\definecolor [#1:\the\colorcount][c=#2,m=#3=,y=#4,k=#5]}
-\def\dododefinecolorgroupspot [#1][#2:#3:#4]{\definespotcolor[#1:\the\colorcount][#2][p=#3]}
-
-\def\dododefinecolorgroup#1#2%
- {\advance\colorcount\plusone
- \getvalue{dododefinecolorgroup\currentcolorspace}[#1][#2:0:0:0:0]}
-
-\def\dodefinecolorgroup[#1][#2][#3]% obsolete, just use palets
- {\ifthirdargument
- \doifelsenothing{#2}{\let\currentcolorspace\v!rgb}{\def\currentcolorspace{#2}}%
- \colorcount\zerocount
- \processcommalist[#3]{\dododefinecolorgroup{#1}}%
- \else
- \doifinstringelse{:}{#2}
- {\definecolorgroup[#1][\v!rgb][#2]}
- {\doloop
- {\doifdefinedelse{\??cr#2:\recurselevel}
- {\setevalue{\??cr#1:\recurselevel}{\csname\??cr#2:\recurselevel\endcsname}}
- {\exitloop}}}%
- \fi}
-
-%D \macros
-%D {showcolorgroup}
-%D
-%D We can show the group by:
-%D
-%D \startbuffer
-%D \showcolorgroup [blue] [horizontal,name,number,value]
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D or in color:
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-%D
-%D which uses:
-%D
-%D \showsetup{showcolorgroup}
-
-\fetchruntimecommand \showcolorgroup {\f!colorprefix\s!run}
-
-%D There are ten predefined color groups, like
-%D \color[green]{\em groen}, \color[red]{\em rood},
-%D \color[blue]{\em blauw}, \color[cyan]{\em cyaan},
-%D \color[magenta]{\em magenta} and \color[yellow]{\em geel}.
-%D
-%D \startlinecorrection
-%D \hbox to \hsize
-%D {\hss
-%D \showcolorgroup [red] [vertical,name,number]\hss
-%D \showcolorgroup [green] [vertical,name]\hss
-%D \showcolorgroup [blue] [vertical,name]\hss
-%D \showcolorgroup [cyan] [vertical,name]\hss
-%D \showcolorgroup [magenta][vertical,name]\hss
-%D \showcolorgroup [yellow] [vertical,name]\hss}
-%D \stoplinecorrection
-%D
-%D These groups are used to define palets {\em alfa} upto {\em
-%D zeta}. As long as we don't use colors from the same row, we
-%D get ourselves distinctive palets. By activating such a palet
-%D one gains access to its members {\em top} to {\em charm} (of
-%D course one should use more suitable names than these).
-%D
-%D \startlinecorrection
-%D \hbox to \hsize
-%D {\showpalet [alfa] [vertical,name,number]\hss
-%D \showpalet [beta] [vertical,name]\hss
-%D \showpalet [gamma] [vertical,name]\hss
-%D \showpalet [delta] [vertical,name]\hss
-%D \showpalet [epsilon] [vertical,name]\hss
-%D \showpalet [zeta] [vertical,name]}
-%D \stoplinecorrection
-%D
-%D By using the keyword \type {value} the individual color
-%D components are shown too. When printed in color, these
-%D showcases show both the colors and the gray value.
-
-%D \macros
-%D {comparepalet}
-%D
-%D There are some more testing macros available:
-%D
-%D \startbuffer
-%D \comparepalet [alfa]
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D shows the palet colors against a background:
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-%D
-%D The formal definition is:
-%D
-%D \showsetup{comparepalet}
-
-\fetchruntimecommand \comparepalet {\f!colorprefix\s!run}
-
-%D \macros
-%D {comparecolorgroup}
-%D
-%D The similar command:
-%D
-%D \startbuffer
-%D \comparecolorgroup [blue]
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D shows color groups:
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-%D
-%D this commands are defined as:
-%D
-%D \showsetup{comparecolorgroup}
-
-\fetchruntimecommand \comparecolorgroup {\f!colorprefix\s!run}
-
-%D \macros
-%D {showcolor}
-%D
-%D But let's not forget that we also have the more traditional
-%D non||related colors. These show up after:
-%D
-%D \starttyping
-%D \showcolor [name]
-%D \stoptyping
-%D
-%D Where \type{name} for instance can be \type{rgb}.
-%D
-%D \showsetup{showcolor}
-
-\fetchruntimecommand \showcolor {\f!colorprefix\s!run}
-
-%D It would make sense to put the following code in \type
-%D {colo-mps}, but it it rather low level.
-
-%D \macros
-%D {negatecolorcomponent,negatedcolorcomponent}
-%D
-%D These speak for themselves. See \type {colo-ext} for usage.
-
-\def\negatecolorcomponent#1% #1 = \macro
- {\scratchdimen\onepoint\advance\scratchdimen-#1\onepoint
- \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi
- \edef#1{\withoutpt\the\scratchdimen}}
-
-\let\negatedcolorcomponent\firstofoneargument
-
-\def\negatedcolorcomponent#1%
- {\ifdim\dimexpr\onepoint-#1\onepoint\relax<\zeropoint
- \!!zerocount
- \else
- \expandafter\withoutpt\the\dimexpr\onepoint-#1\onepoint\relax
- \fi}
-
-\def\negatecolorcomponent#1% #1 = \macro
- {\edef#1{\negatedcolorcomponent{#1}}}
-
-%D \macros
-%D {ifMPgraphics, ifMPcmykcolors, MPcolor}
-%D
-%D A very special macro is \type{\MPcolor}. This one can be
-%D used to pass a \CONTEXT\ color to \METAPOST.
-%D
-%D \starttyping
-%D \MPcolor{my own red}
-%D \stoptyping
-%D
-%D This macro returns a \METAPOST\ triplet \type{(R,G,B)}.
-%D Unless \CMYK\ color support is turned on with \type
-%D {MPcmyk}, only \cap{RGB} colors and gray scales are
-%D supported.
-
-\newif\ifMPcmykcolors % \MPcmykcolorsfalse
-\newif\ifMPspotcolors % \MPspotcolorsfalse
-
-\ifx\MPcolor\undefined
- \def\MPcolor#1{(0,0,0)}
-\fi
-
-%D \macros
-%D {PDFcolor,FDFcolor}
-%D
-%D Similar alternatives are avaliable for \PDF:
-
-%D For the moment we keep the next downward compatibility
-%D switch, i.e.\ expanded colors. However, predefined colors
-%D and palets are no longer expanded (which is what I wanted
-%D in the first place).
-%D
-%D Well, in case we want to do color separation and use CMYK
-%D colors only, this is dangerous since unwanted remapping may
-%D take place. Especially when we redefine already defined
-%D colors in another color space (e.g. darkgreen is
-%D predefined in RGB color space, so a redefinition in CMYK
-%D coordinates before RGB mode is disabled, would give
-%D unexpected results due to the already frozen color spec.)
-%D
-%D So, from now on, colors are not frozen any more!
-
-\chardef\currentcolorchannel=0
-
-\newif\iffilterspotcolor \filterspotcolorfalse
-\newif\ifdoingspotcolor \doingspotcolorfalse
-
-\def\registercolorchannel#1%
- {\ifdoingspotcolor \else
- \global\expandafter\chardef\csname\??cs#1\endcsname\zerocount
- \fi}
-
-\newif\ifhidesplitcolor \hidesplitcolortrue
-
-%D The next macro is for instance used in figure splitting:
-
-\def\doifseparatingcolorselse
- {\iffilterspotcolor
- \@EA\firstoftwoarguments
- \else\ifcase\currentcolorchannel
- \@EAEAEA\secondoftwoarguments
- \else
- \@EAEAEA\firstoftwoarguments
- \fi\fi}
-
-\def\doifcolorchannelelse#1%
- {\doifseparatingcolorselse
- {\doifelsenothing{#1}
- \secondoftwoarguments
- {\doifelse{#1}\@@clsplit
- \firstoftwoarguments
- \secondoftwoarguments}}
- \secondoftwoarguments}
-
-\def\resetcolorseparation
- {\filterspotcolorfalse
- \chardef\currentcolorchannel\zerocount}
-
-%D These can be used in selecting specific files (like
-%D figuredatabases).
-
-% we already have:
-%
-% \def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplitsen\fi}
-% \def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplitsen-\fi}
-
-\def\colorchannelprefix{\doifseparatingcolorselse\@@clsplit\empty-}
-\def\colorchannelsuffix{-\doifseparatingcolorselse\@@clsplit\empty}
-
-%D We now define the low level macros:
-
-\chardef\colorversion=1
-
-%D Color support is not present in \TEX. Colorful output can
-%D however be accomplished by using specials. This also means
-%D that this support depends on the \DVI\ driver used. At the
-%D moment this module was written, still no decent standard on
-%D color specials has been agreed upon. We therefore decided to
-%D implement a mechanism that is as independant as possible of
-%D drivers.
-%D
-%D Color support shares with fonts that is must be implemented
-%D in a way that permits processing of individual \DVI\ pages.
-%D Furthermore it should honour grouping. The first condition
-%D forces us to use a scheme that keeps track of colors at
-%D page boundaries. This can be done by means of \TEX's
-%D marking mechanism (\type{\mark}).
-%D
-%D When building pages, \TEX\ periodically looks at the
-%D accumulated typeset contents and breaks the page when
-%D suitable. At that moment, control is transfered to the
-%D output routine. This routine takes care of building the
-%D pagebody and for instance adds headers and footers. The page
-%D can be broken in the middle of some colored text, but
-%D headers and footers are often in black upon white or
-%D background. If colors are applied there, they definitely
-%D are used local, which means that they don't cross page
-%D borders.
-%D
-%D Boxes are handled as a whole, which means that when we
-%D apply colors inside a box, those colors don't cross page
-%D boundaries, unless of course boxes are split or unboxed.
-%D Especially in interactive texts, colors are often used in
-%D such a local way: in boxes (buttons and navigational tools)
-%D or in the pagebody (backgrounds).
-%D
-%D So we can distinguish local colors, that don't cross
-%D pages from global colors, of which we can end many pages
-%D later. The color macros will treat both types in a different
-%D way, thus gaining some speed.
-%D
-%D This module also deals with gray scales. Because similar
-%D colors can end up in the same gray scale when printed in
-%D black and white, we also implement a palet system that deals
-%D with these matters. Because of fundamental differences
-%D between color and gray scale printing, in \CONTEXT\ we also
-%D differ between these. For historic reasons |<|we first
-%D implemented gray scales using patterns of tiny periods|>|
-%D and therefore called them {\em rasters}. So don't be
-%D surprised if this term shows up.
-
-%D \macros
-%D {definecolor}
-%D
-%D We will enable users to specify colors in \cap{RGB} and
-%D \cap{CMYK} color spaces or gray scales using
-%D
-%D \showsetup{definecolor}
-%D
-%D For example:
-%D
-%D \starttyping
-%D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05]
-%D \stoptyping
-%D
-%D Such color specifications are saved in a macro in the
-%D following way:
-%D
-%D \starttyping
-%D \setvalue{\??cr name}{R:r:g:b}
-%D \setvalue{\??cr name}{C:c:m:y:k}
-%D \setvalue{\??cr name}{S:s}
-%D \stoptyping
-%D
-%D Gray scales are specified with the \type{s} parameter,
-%D where the \type {s} is derived from {\em screen}.
-%D
-%D Starting with \PDF\ 1.4 (2001) \CONTEXT\ supports
-%D transparent colors. The transparency factor is represented
-%D by a \type {t} and the transparency method by an \type {a}
-%D (alternative). Later we will implement more control
-%D (probably by symbolic methods. So, currently the data is
-%D stored as follows:
-%D
-%D \starttyping
-%D \setvalue{\??cr name}{R:r:g:b:a:t}
-%D \setvalue{\??cr name}{C:c:m:y:k:a:t}
-%D \setvalue{\??cr name}{S:s:a:t}
-%D \stoptyping
-
-% r g b : rbg
-% c m y k : cmyk
-% s : gray
-% p n d f : spot
-% h : hexadecimal
-% t a : transparency
-% e : equivalent (spotcolors)
-
-\def\@@cl@@z{0}
-\def\@@cl@@o{1}
-
-\def\@@resetcolorparameters
- {\let\@@cl@@r\@@cl@@z \let\@@cl@@g\@@cl@@z \let\@@cl@@b\@@cl@@z
- \let\@@cl@@c\@@cl@@z \let\@@cl@@m\@@cl@@z \let\@@cl@@y\@@cl@@z \let\@@cl@@k\@@cl@@z
- \let\@@cl@@s\@@cl@@z
- \let\@@cl@@p\@@cl@@o \let\@@cl@@n\empty \let\@@cl@@d\empty \let\@@cl@@f\@@cl@@o
- \let\@@cl@@h\empty
- \let\@@cl@@e\empty
- \let\@@cl@@t\@@cl@@z \let\@@cl@@a\@@cl@@z}
-
-\@@resetcolorparameters
-
-\def\@@cl@@A{\@@cl@@a} % a hook for symbolic conversion, see below
-
-%D Handling a few nested \type{\cs}'s is no problem (\type
-%D {\@EA\@EAEAEA\@EA}) but we need a full expansion, so I
-%D tried one of the fully expandable primitives using a sort
-%D of delimited thing. I tried \type {\number} first, but this
-%D does not work, but \type {\romannumeral} does. Actually,
-%D \type{\romannumeral0} returns nothing, so it's a perfect
-%D candidate for this kind of hackery. This reminds me that I
-%D have to look into David Kastrup's Euro\TeX\ 2002 article
-%D because he is using \type {\romannumeral} for loops
-%D (repetitive \quote {m} stuff).
-
-% \def\x{\y}\def\y{\z}\def\z{0:1:1:1}
-%
-% \def\bla #1:#2:#3\end{}
-%
-% \@EA\bla\romannumeral\x\end
-
-\def\colorXpattern{0S:\@@cl@@z:\@@cl@@z:\@@cl@@z}
-\def\colorZpattern{0S:\@@cl@@z:\@@cl@@A:\@@cl@@t}
-\def\colorSpattern{0S:\@@cl@@s:\@@cl@@A:\@@cl@@t}
-\def\colorCpattern{0C:\@@cl@@c:\@@cl@@m:\@@cl@@y:\@@cl@@k:\@@cl@@A:\@@cl@@t}
-\def\colorRpattern{0R:\@@cl@@r:\@@cl@@g:\@@cl@@b:\@@cl@@A:\@@cl@@t}
-
-%def\colorPpattern{0P:\@@cl@@n:\@@cl@@p:\@@cl@@A:\@@cl@@t}
-
-\def\colorPpattern{0P:\@@cl@@n:\@@cl@@f:\@@cl@@d:\@@cl@@p:\@@cl@@A:\@@cl@@t}
-
-%D The extra 0 catches empty colors specs (needed for the
-%D \type {\MPcolor} and \type {\PDFcolor} conversion (\type
-%D {\@@cr} equals \type {\relax}!).
-
-\def\handlecolorwith#1{\@EA#1\romannumeral0}
-
-%D Next comes the main definition macro.
-
-\def\dodefinecolor {\dododefinecolor\relax \setvalue \setevalue1}
-\def\dodefineglobalcolor{\dododefinecolor\doglobal\setgvalue\setxvalue1}
-\def\dodefinenamedcolor {\dododefinecolor\doglobal\setvalue \setevalue0}
-
-\let\colorlist\empty % not really used, only for colo-run
-\setfalse\collectcolorsinlist
-\def\collectcolorinlist#1{\doglobal\addtocommalist{#1}\colorlist}
-
-\def\dododefinecolor#1#2#3#4[#5][#6]% #2==set(g)value #3==set[e|x]value
- {\ifconditional\collectcolorsinlist\collectcolorinlist{#5}\fi
- \doifassignmentelse{#6}
- {\@@resetcolorparameters
- \getparameters[\??cl @@][#6]%
- \ifx\@@cl@@h\empty
- \doifelse{\@@cl@@r\@@cl@@g\@@cl@@b}{\@@cl@@z\@@cl@@z\@@cl@@z}
- {\doifelse{\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k}{\@@cl@@z\@@cl@@z\@@cl@@z\@@cl@@z}
- {\doifelse\@@cl@@s\@@cl@@z
- {\showmessage\m!colors8{{[#6]},#5}%
- #3{\??cr#5}{\colorZpattern}}
- {#3{\??cr#5}{\colorSpattern}}}
- {#3{\??cr#5}{\colorCpattern}}}
- {#3{\??cr#5}{\colorRpattern}}%
- \else
- \setxvalue{\??cr#5}{\colorHpattern}%
- \fi
- % new: e=external spot color name
- \ifx\@@cl@@e\empty \else
- \doregisterspotcolorname{#5}\@@cl@@e
- \fi}
- {\doifelsenothing\currentpalet
- \donefalse
- {\doifdefinedelse{\??cr\currentpalet#6}\donetrue\donefalse}%
- \ifdone
- \doifnot{#5}{#6}
- {#2{\??cr#5}{\paletcolorspec{#6}}}%
- \else
- \doifdefinedelse{\??cr#6}
- {\doifelse{#5}{#6}
- {% this way we can freeze \definecolor[somecolor][somecolor]
- % and still prevent cyclic definitions
- \iffreezecolors#3{\??cr#5}{\csname\??cr#6\endcsname}\fi}
- {\iffreezecolors\@EA#3\else\@EA#2\fi{\??cr#5}{\csname\??cr#6\endcsname}}}
- {\showmessage\m!colors3{#5 (def)}}%
- \fi}%
- \ifcase#4\or
- \unexpanded#2{#5}{\switchtocolor[#5]}% \unexpanded toegevoegd
- \fi}
-
-\def\paletcolorspec#1%
- {\csname\??cr\currentpalet#1\endcsname}
-
-%D Hex color support is not enabled by default. You need to say \type
-%D {\setupcolor [hex]} to get this working.
-
-\ifx\colorHpattern\undefined \let\colorHpattern\colorZpattern \fi
-
-%D New and experimental.
-
-\def\dodefinespotcolor[#1][#2][#3]% todo: always global
- {\doifnot{#1}{#2}
- {\@@resetcolorparameters
- \ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
- \edef\@@cl@@n{#2}%
- \getparameters[\??cl @@][#3]%
- \doifnothing\@@cl@@p{\let\@@cl@@p\!!plusone}%
- \ifx\@@cl@@e\empty \else
- \doregisterspotcolorname{#2}\@@cl@@e
- \fi
- \doglobal\addtocommalist{#2}\allspotcolors
- \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue
- \setgvalue{#1}{\switchtocolor[#1]}}} % was \setvalue
-
-\def\registerusedspotcolors
- {\ifx\allspotcolors\empty \else
- \bgroup
- \let\usedspotcolors\empty
- \def\docommand##1%
- {\doifdefined{\??cs##1}{\addtocommalist{##1}\usedspotcolors}}%
- \processcommacommand[\allspotcolors]\docommand
- \savecurrentvalue\usedspotcolors\usedspotcolors
- \egroup
- \fi}
-
-\def\registerusedcolorchannels
- {\bgroup
- \doifdefinedelse{\??cs c}
- {\def\usedcolorchannels{c,m,y,k}}%
- {\let\usedcolorchannels\empty}%
- \doifdefined{\??cs r}
- {\addtocommalist{r,g,b}\usedcolorchannels}%
- \doifdefined{\??cs s}
- {\ExpandBothAfter\doifnotinset{k}\usedcolorchannels
- {\addtocommalist{s}\usedcolorchannels}}%
- \savecurrentvalue\usedcolorchannels\usedcolorchannels
- \egroup}
-
-\prependtoks
- \registerusedspotcolors
- \registerusedcolorchannels
-\to \everylastshipout
-
-\def\registerusedspotcolor#1%
- {\global\@EA\chardef\csname\??cs#1\endcsname\zerocount}
-
-%D On top of spotcolors, we define multitone colors. You'd better know
-%D what you're doing because invalid definitions will lead to invalid
-%D documents (i.e.\ resources).
-
-% \definecolor [darkblue] [c=.5,m=.5]
-% \definecolor [darkyellow] [y=.5]
-%
-% \definemultitonecolor [whatever] [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25] [a=1,t=.5]
-% \definemultitonecolor [another] [darkblue=.5,darkyellow=.5] [c=.25,m=.25,y=.25]
-
-\def\dodefinemultitonecolor[#1][#2][#3][#4]%
- {\let\@@cl@@cl@@D\empty % n's
- \let\@@cl@@cl@@P\empty % p's
- \let\@@cl@@cl@@N\empty % name
- \scratchcounter\zerocount
- \processcommacommand[#2]\dododefinemultitonecolor
- \bgroup
- \lccode`\.=`\_%
- \lccode`\,=`\_%
- \lccode`\:=`\_%
- \lccode`\;=`\_%
- \lccode`\+=`\_%
- \lccode`\-=`\_%
- \lccode`\*=`\_%
- \lccode`\/=`\_%
-% \lccode`\_=`\_%
- % not needed, other attribute in driver:
- %
- % \@@resetcolorparameters
- % \getparameters[#4]%
- % \ifx\@@cl@@t\@@cl@@z\else
- % \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@t_\@@cl@@a}%
- % \fi
- \lowercase\@EA{\@EA\xdef\@EA\@@cleancolor\@EA{\@@cl@@cl@@N}}%
- \egroup
- \setxvalue{\??cl\@@cleancolor\s!check}{\noexpand\docheckmultitonecolor{\@@cl@@cl@@D}}%
- \expanded{\defineglobalcolor[\@@cleancolor][#3,#4]}%
- \expanded{\definespotcolor[#1][\@@cleancolor][#4,f=\the\scratchcounter,p={\@@cl@@cl@@P},d={\@@cl@@cl@@D}]}}
-
-\def\docheckmultitonecolor#1%
- {\flushatshipout
- {\let\checkmultitonecolor\gobbleoneargument
- \def\docommand##1{\hbox{\definecolor[\s!dummy-100][##1][p=1]\color[\s!dummy-100]}}%
- \processcommalist[#1]\docommand}}
-
-\def\checkmultitonecolor#1%
- {\csname\??cl#1\s!check\endcsname\letgvalue{\??cl#1\s!check}\relax}
-
-\def\dodefinespotcolor[#1][#2][#3]% todo: always global (REDEFINED)
- {\doifnot{#1}{#2}
- {\@@resetcolorparameters
- \ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
- \edef\@@cl@@n{#2}%
- \getparameters[\??cl @@][#3]%
- \doifnothing \@@cl@@p{\let\@@cl@@p\!!plusone}%
- \doifsomething\@@cl@@e{\doregisterspotcolorname{#2}\@@cl@@e}%
- \doglobal\addtocommalist{#2}\allspotcolors
- \setxvalue{\??cr#1}{\colorPpattern}% was \setevalue
- \setgvalue{#1}{\switchtocolor[#1]}}}% was \setvalue
-
-\def\dododefinemultitonecolor#1%
- {\advance\scratchcounter\plusone
- \splitstring#1\at=\to\!!stringa\and\!!stringb
- \ifx\@@cl@@cl@@D\empty
- \let\@@cl@@cl@@D\!!stringa
- \let\@@cl@@cl@@P\!!stringb
- \normalizecolor\!!stringb
- \edef\@@cl@@cl@@N{\!!stringa_\!!stringb}%
- \else
- \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\!!stringa}%
- \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\!!stringb}%
- \normalizecolor\!!stringb
- \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\!!stringa_\!!stringb}%
- \fi}
-
-% \def\dododefinemultitonecolor#1% a/b safe
-% {\advance\scratchcounter\plusone
-% \splitstring#1\at=\to\@@cl@@one\and\@@cl@@two
-% \ifx\@@cl@@cl@@D\empty
-% \let\@@cl@@cl@@D\@@cl@@one
-% \let\@@cl@@cl@@P\@@cl@@two
-% \normalizecolor\@@cl@@two
-% \edef\@@cl@@cl@@N{\@@cl@@one_\@@cl@@two}%
-% \else
-% \edef\@@cl@@cl@@D{\@@cl@@cl@@D,\@@cl@@one}%
-% \edef\@@cl@@cl@@P{\@@cl@@cl@@P,\@@cl@@two}%
-% \normalizecolor\@@cl@@two
-% \edef\@@cl@@cl@@N{\@@cl@@cl@@N_\@@cl@@one_\@@cl@@two}%
-% \fi}
-
-%D The names of colors are stored in a comma separated list
-%D only for the purpose of showing them with \type {\showcolor}.
-%D
-%D \startbuffer
-%D \definecolor [SomeKindOfRed] [r=.8,g=.05,b=.05]
-%D \stopbuffer
-%D
-%D \typebuffer
-%D \getbuffer
-%D
-%D This color shows up as \color [SomeKindOfRed] {some kind
-%D of red}.
-%D
-%D \starttyping
-%D \setupcolors[state=start]
-%D
-%D \definecolor[mygreen][green]
-%D \definecolor[green][g=.5]
-%D
-%D \startcolor[mygreen]test\stopcolor
-%D
-%D \setupcolors[expansion=no]
-%D
-%D \definecolor[mygreen][green]
-%D \definecolor[green][g=.5]
-%D
-%D \startcolor[mygreen]test\stopcolor
-%D \stoptyping
-
-%D \macros
-%D {startcolormode,stopcolormode,permitcolormode}
-%D
-%D We use \type{\stopcolormode} to reset the color in
-%D whatever color space and do so by calling the corresponding
-%D special. Both commands can be used for fast color
-%D switching, like in colored verbatim,
-
-\newif\ifpermitcolormode \permitcolormodetrue
-
-\def\dowithcolor#1#2% #1=\action #2=color
- {\ifincolor\ifpermitcolormode
- \ifcsname\??cr\currentpalet#2\endcsname
- \handlecolorwith#1\csname\??cr\currentpalet#2\endcsname\od
- \else\ifcsname\??cr#2\endcsname
- \handlecolorwith#1\csname\??cr#2\endcsname\od
- \fi\fi
- \fi\fi}
-
-\def\startcolormode % includes \ifincolor\ifpermitcolormode
- {%\dostoptransparency % needed for: {test \trans test \notrans test}
- \conditionalstoptransparency
- \dowithcolor\execcolorRCSP}
-
-\def\stopcolormode
- {\ifincolor\ifpermitcolormode
- \supportedstoptransparency
- \dostopcolormode
- \fi\fi}
-
-\def\restorecolormode
- {\ifincolor\ifpermitcolormode
- \supportedstoptransparency
- \dostopcolormode
- \ifx\maintextcolor\empty \else
- \startcolormode\maintextcolor
- \fi
- \fi\fi}
-
-%D Color modes are entered using the next set of commands.
-%D The \type{\stop} alternatives are implemented in a way
-%D that permits non||grouped use.
-%D
-%D The, for this module redundant, check if we are in color
-%D mode is needed when we use these macros in other modules.
-
-\def\execcolorRCSP#1:%
- {\csname execcolor#1\endcsname}
-
-\def\execcolorR
- {\iffilterspotcolor
- \@EA\noexeccolorR
- \else
- \@EA\doexeccolorR
- \fi}
-
-\def\execcolorC
- {\iffilterspotcolor
- \@EA\noexeccolorC
- \else
- \@EA\doexeccolorC
- \fi}
-
-\def\execcolorS
- {\iffilterspotcolor
- \@EA\noexeccolorS
- \else
- \@EA\doexeccolorS
- \fi}
-
-\def\execcolorP
- {\iffilterspotcolor
- \@EA\doexeccolorPP
- \else\ifcase\currentcolorchannel
- \@EAEAEA\doexeccolorP
- \else
- \@EAEAEA\noexeccolorP
- \fi\fi}
-
-\def\doexeccolorR#1:#2:#3:%
- {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}%
- \ifpreferGRAY\ifx\@@cl@@r\@@cr@@g\ifx\@@cl@@r\@@cl@@b
- \GRAYpreferedtrue
- \fi\fi\fi
- \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
- \ifGRAYprefered
- \registercolorchannel\c!s
- \let\@@cl@@s\@@cl@@r
- \normalizeGRAY
- \doexeccolorgray
- \else\ifRGBsupported
- \registercolorchannel\c!r
- \normalizeRGB
- \doexeccolorrgb
- \else\ifCMYKsupported
- \registercolorchannel\c!c
- \convertRGBtoCMYK\@@cl@@r\@@cl@@g\@@cl@@b
- \normalizeCMYK
- \doexeccolorcmyk
- \else
- \registercolorchannel\c!s
- \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b
- \normalizeGRAY
- \doexeccolorgray
- \fi\fi\fi
- \exectransparency}
-
-\def\doexeccolorC#1:#2:#3:#4:%
- {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}%
- \ifpreferGRAY\ifx\@@cl@@k\@@cl@@z\ifx\@@cl@@c\@@cr@@m\ifx\@@cl@@c\@@cl@@y
- \GRAYpreferedtrue
- \fi\fi\fi\fi
- \ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
- \ifGRAYprefered
- \registercolorchannel\c!s
- \let\@@cl@@s\@@cl@@c
- \normalizeGRAY
- \doexeccolorgray
- \else\ifCMYKsupported
- \registercolorchannel\c!c
- \ifreduceCMYK
- \convertCMYKtoCMY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
- \fi
- \normalizeCMYK
- \doexeccolorcmyk
- \else\ifRGBsupported
- \registercolorchannel\c!r
- \convertCMYKtoRGB\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
- \normalizeRGB
- \doexeccolorrgb
- \else
- \registercolorchannel\c!s
- \convertCMYKtoGRAY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
- \normalizeGRAY
- \doexeccolorgray
- \fi\fi\fi
- \exectransparency}
-
-\def\doexeccolorS#1:%
- {\edef\@@cl@@s{#1}%
- \registercolorchannel\c!s
- \normalizeGRAY
- \doexeccolorgray
- \exectransparency}
-
-% \def\doexeccolorP#1:#2:%
-% {\edef\@@cl@@n{#1}%
-% \edef\@@cl@@p{#2}%
-% \registerusedspotcolor\@@cl@@n
-% \ifSPOTsupported
-% \dowithcolor\registerspotcolor\@@cl@@n
-% \dostartspotcolormode\@@cl@@n\@@cl@@p
-% \else
-% \doingspotcolortrue
-% \let\spotcolorfactor\@@cl@@p
-% \factorizecolortrue % using counter and array
-% \dowithcolor\execcolorRCSP\@@cl@@n
-% \factorizecolorfalse
-% \let\spotcolorfactor\@@cl@@o
-% \doingspotcolorfalse
-% \fi
-% \exectransparency}
-
-\def\doexeccolorP#1:#2:#3:#4:%
- {\edef\@@cl@@n{#1}% name
- \edef\@@cl@@f{#2}% fractions
- \edef\@@cl@@d{#3}% definitions
- \edef\@@cl@@p{#4}%
- \ifx\@@cl@@d\empty
- \let\@@cl@@d\@@cl@@n
- \fi
- \registerusedspotcolor\@@cl@@n
- \ifSPOTsupported
- \checkmultitonecolor\@@cl@@n
- \dowithcolor\registerspotcolor\@@cl@@n
- \dostartspotcolormode\@@cl@@n\@@cl@@p
- \else
- \doingspotcolortrue
- \normalizespotcolor\@@cl@@p
- \let\spotcolorfactor\@@cl@@p
- \factorizecolortrue % using counter and array
- \dowithcolor\execcolorRCSP\@@cl@@n
- \factorizecolorfalse
- \let\spotcolorfactor\@@cl@@o
- \doingspotcolorfalse
- \fi
- \exectransparency}
-
-\def\doexeccolorPindex#1:#2:#3:#4:%
- {\edef\@@cl@@n{#1}%
- \edef\@@cl@@f{#2}%
- \edef\@@cl@@d{#3}%
- \edef\@@cl@@p{#4}%
- \ifx\@@cl@@d\empty
- \let\@@cl@@d\@@cl@@n
- \fi
- \ifSPOTsupported
- \checkmultitonecolor\@@cl@@n
- \dowithcolor\registerindexcolor\@@cl@@n
- \fi
- \noexectransparency}
-
-\def\doexeccolorPP#1:#2:%
- {\edef\@@cl@@n{#1}%
- \edef\@@cl@@p{#2}%
- \registerusedspotcolor\@@cl@@n
- \ifx\@@cl@@n\currentspotcolor
- \normalizeSPOT
- \dostartgraycolormode\@@cl@@p % was spotcolormode
- \else
- \dovidecolor\@@cl@@p\@@cl@@o
- \fi
- \exectransparency}
-
-\def\doexeccolorrgb
- {\ifcase\currentcolorchannel
- \dostartrgbcolormode\@@cl@@r\@@cl@@g\@@cl@@b
- \or \or \or \or
- \or \dostartgraycolormode\@@cl@@r
- \or \dostartgraycolormode\@@cl@@g
- \or \dostartgraycolormode\@@cl@@b
- \fi}
-
-\def\doexeccolorcmyk
- {\ifcase\currentcolorchannel
- \dostartcmykcolormode\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
- \or \negatecolorcomponent\@@cl@@c\dostartgraycolormode\@@cl@@c
- \or \negatecolorcomponent\@@cl@@m\dostartgraycolormode\@@cl@@m
- \or \negatecolorcomponent\@@cl@@y\dostartgraycolormode\@@cl@@y
- \or \negatecolorcomponent\@@cl@@k\dostartgraycolormode\@@cl@@k
- \fi}
-
-\def\doexeccolorgray
- {\ifcase\currentcolorchannel
- \dostartgraycolormode\@@cl@@s
- \or \or \or
- \or \dostartgraycolormode\@@cl@@s
- \or \or \or
- \or \dostartgraycolormode\@@cl@@s
- \fi}
-
-%D When filtering colors, we need to either erase
-%D the background, or ignore the foreground.
-
-% \newif\ifhidesplitcolor \hidesplitcolortrue
-%
-% \def\noexeccolor#1\od
-% {\dostartgraycolormode\@@cl@@o}
-%
-% \let\noexeccolorS\noexeccolor
-% \let\noexeccolorP\noexeccolor
-
-%D Well, here comes some real trickery. When we have the 100\%
-%D spot color or black color, we don't want to erase the
-%D background. So, instead we hide the content by giving it
-%D zero transparency.
-
-% todo : #1#2#3 met #2 > of < and #3 een threshold
-
-\def\dohidecolor#1#2%
- {\ifhidesplitcolor
- \ifx#1#2%
- \dostartgraycolormode\@@cl@@o
- \else
- \doregisternonecolor
- \dostartnonecolormode
- \fi
- \else
- \dostartgraycolormode\@@cl@@o
- \fi}
-
-\def\dovidecolor#1#2%
- {\ifhidesplitcolor
- \ifx#1#2%
- \doregisternonecolor
- \dostartnonecolormode
- \else
- \dostartgraycolormode\@@cl@@o
- \fi
- \else
- \dostartgraycolormode\@@cl@@o
- \fi}
-
-% \def\fullytransparentcolor % fails on floats
-% {\dostartgraycolormode\@@cl@@o % better than z
-% %\global\@EA\chardef\csname\@@currenttransparent\endcsname\plusone
-% %\global\intransparenttrue
-% \dostarttransparency10}
-
-\def\noexeccolorR#1:#2:#3:#4\od
- {\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}%
- \dohidecolor\@@cl@@s\@@cl@@o}
-
-\def\noexeccolorC#1:#2:#3:#4:#5\od
- {\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}%
- \dohidecolor\@@cl@@s\@@cl@@o}
-
-\def\noexeccolorS#1:#2\od
- {\edef\@@cl@@s{#1}%
- \dohidecolor\@@cl@@s\@@cl@@o}
-
-\def\noexeccolorP#1:#2:#3:#4:#5\od
- {\edef\@@cl@@p{#4}%
- \dohidecolor\@@cl@@p\@@cl@@z}
-
-%D For the sake of postprocessing (i.e.\ color separation)
-%D we can normalize colors, which comes down to giving equal
-%D values an equal accuracy and format. This feature is
-%D turned off by default due to a speed penalty. This macro
-%D also handles spot color percentages.
-
-\newif\iffactorizecolor
-\newif\ifnormalizecolor
-
-\def\spotcolorfactor{1}
-
-% \def\normalizecolor#1%
-% {\colordimen#1\thousandpoint
-% \colordimen\spotcolorfactor\colordimen
-% \colorcount\colordimen
-% \advance\colorcount \medcard
-% \divide\colorcount \maxcard
-% \edef#1{\realcolorvalue\colorcount}}
-
-\def\normalizecolor#1%
- {\colorcount\numexpr(\dimexpr\spotcolorfactor\dimexpr#1\thousandpoint\relax\relax+\medcard)/\maxcard\relax
- \edef#1{\realcolorvalue\colorcount}}
-
-% \def\normalizespotcolor#1%
-% {\colordimen-#1\thousandpoint
-% \advance\colordimen\thousandpoint
-% \colorcount\colordimen
-% \advance\colorcount \medcard
-% \divide\colorcount \maxcard
-% \edef#1{\realcolorvalue\colorcount}}
-
-\def\normalizespotcolor#1%
- {\colorcount\numexpr(\dimexpr\thousandpoint-#1\thousandpoint\relax+\medcard)/\maxcard\relax
- \edef#1{\realcolorvalue\colorcount}}
-
-\def\donormalizeRGB
- {\normalizecolor\@@cl@@r
- \normalizecolor\@@cl@@g
- \normalizecolor\@@cl@@b}
-
-\def\normalizeRGB
- {\ifnormalizecolor
- \donormalizeRGB
- \else\iffactorizecolor
- \donormalizeRGB
- \fi\fi}
-
-\def\donormalizeCMYK
- {\normalizecolor\@@cl@@c
- \normalizecolor\@@cl@@m
- \normalizecolor\@@cl@@y
- \normalizecolor\@@cl@@k}
-
-\def\normalizeCMYK
- {\ifnormalizecolor
- \donormalizeCMYK
- \else\iffactorizecolor
- \donormalizeCMYK
- \fi\fi}
-
-\def\donormalizeGRAY
- {\normalizecolor\@@cl@@s}
-
-\def\normalizeGRAY
- {\ifnormalizecolor
- \donormalizeGRAY
- \else\iffactorizecolor
- \donormalizeGRAY
- \fi\fi}
-
-\def\normalizeSPOT
- {\normalizespotcolor\@@cl@@p}
-
-%D We need to register spot colors (i.e.\ resources need to
-%D be created.
-
-\def\registerspotcolor#1:%
- {\ifcsname\??cl:\c!p:\@@cl@@n\endcsname
- \@EA\dontregisterspotcolor
- \else
- \letgvalue{\??cl:\c!p:\@@cl@@n}\empty
- %\@EA\@EA\csname registerspotcolor#1\endcsname
- \csname registerspotcolor#1\@EA\endcsname
- \fi}
-
-% todo: convert to rgb if needed, will will do this in mkiv
-
-\def\dontregisterspotcolor #1\od{}
-\def\registerspotcolorR #1:#2:#3:#4\od{\doregisterrgbspotcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}}
-\def\registerspotcolorC#1:#2:#3:#4:#5\od{\doregistercmykspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}}
-\def\registerspotcolorS #1:#2\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}}
-\def\registerspotcolorP #1:#2:#3\od{\doregistergrayspotcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}}
-
-%D Experimental feature:
-
-% \definecolor [darkblue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m
-% \definecolor [darkyellow] [c=0,m=.28,y=1,k=.06] % pantone pms 124 uncoated m
-%
-% \definecolor [darkblue-50] [darkblue] [p=.5]
-% \definecolor [darkyellow-50] [darkyellow] [p=.5]
-% \definecolor [darkblue-80] [darkblue] [p=.8]
-% \definecolor [darkyellow-80] [darkyellow] [p=.8]
-%
-% \definecolor [darkblue,darkyellow] [r=.8]
-% \definecolor [darkdull-5030] [darkblue,darkyellow] [p={.5,.3}]
-%
-% \setupcolors[state=start]
-%
-% \blackrule[width=4cm,height=3cm,color=darkblue-50]
-% \blackrule[width=4cm,height=3cm,color=darkblue-80]
-% \blackrule[width=4cm,height=3cm,color=darkyellow-50]
-% \blackrule[width=4cm,height=3cm,color=darkyellow-80]
-% \blackrule[width=4cm,height=3cm,color=darkdull-5030]
-
-%D Experimental too (special purpose code).
-
-\def\registerindexcolor#1:%
- {\ifcsname\??cl:i:\@@cl@@n\endcsname
- \@EA\dontregisterindexcolor
- \else
- \letgvalue{\??cl:i:\@@cl@@n}\empty % signal
- \showmessage\m!colors{12}\@@cl@@n
- \@EA\@EA\csname registerindexcolor#1\endcsname
- \fi}
-
-\let\dontregisterindexcolor\dontregisterspotcolor
-
-\def\registerindexcolorR #1:#2:#3:#4\od{\doregisterrgbindexcolor \@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}}
-\def\registerindexcolorC#1:#2:#3:#4:#5\od{\doregistercmykindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}{#2}{#3}{#4}}
-\def\registerindexcolorS #1:#2\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#1}}
-\def\registerindexcolorP #1:#2:#3\od{\doregistergrayindexcolor\@@cl@@n\@@cl@@f\@@cl@@d\@@cl@@p{#2}}
-
-\def\predefinecolor[#1]%
- {\bgroup
- \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
- \egroup}
-
-\def\predefineindexcolor[#1]%
- {\bgroup
- \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% real ones
- \let\doexeccolorP\doexeccolorPindex
- \flushatshipout{\hbox{\localcolortrue\color[#1]{}}}% index one
- \egroup}
-
-% \def\checkpredefinedcolor[#1]%
-% {\ifcase\internalspotcolorsize{#1}\relax
-% \@EA\predefinecolor\or\@EA\predefinecolor\else\@EA\predefineindexcolor
-% \fi[#1]}
-
-\let\checkpredefinedcolor\predefineindexcolor % we need an index in order to negate bitmaps
-
-%D Transparency is handled similar for all three color modes. We
-%D can turn transparency off with the following switch:
-
-\newif\iftransparencysupported \transparencysupportedtrue % only mkii
-
-\def\exectransparency
- {\iftransparencysupported
- \expandafter\doexectransparency
- \else
- \expandafter\noexectransparency
- \fi}
-
-\def\doexectransparency#1:#2\od
- {\ifcase#1\space
- \global\intransparentfalse
- \else
- \global\intransparentfalse
- %\dostarttransparency{#1}{#2}%
- \supportedstarttransparency{#1}{#2}%
- \global\intransparenttrue
- \fi}
-
-\def\noexectransparency#1\od
- {}
-
-%D Experimental: minimize transparency resets.
-
-\newif\ifintransparent
-\newif\ifoptimizetransparency \optimizetransparencytrue % under test
-
-\let\supportedstoptransparency\relax
-
-\def\conditionalstoptransparency
- {\ifoptimizetransparency
- \ifintransparent
- \global\intransparentfalse
- \supportedstoptransparency
- \fi
- \else
- \supportedstoptransparency
- \fi}
-
-\def\supportedstarttransparency
- {\iftransparencysupported
- \globallet\supportedstoptransparency\dostoptransparency
- \expandafter\dostarttransparency
- \else
- \expandafter\gobbletwoarguments
- \fi}
-
-%D We now use the \type {\@@cl@@A} hook to implement
-%D symbolic names. These are converted into numbers
-%D at definition time (which saves runtime).
-
-\def\dodefinetransparency[#1][#2]%
- {\@EA\chardef\csname\??cl-#1\endcsname#2\relax}
-
-\def\transparencynumber#1%
- {\number\executeifdefined{\??cl-#1}{#1}}
-
-%D Now we hook 'm into the patterns:
-
-\def\@@cl@@A{\transparencynumber\@@cl@@a}
-
-%D The next macro can be used to return to the (normal)
-%D page color. This macro is used in the same way as
-%D \type {\color}.
-
-\def\startregistercolor[#1]%
- {\permitcolormodefalse\startcolor[#1]\permitcolormodetrue}
-
-\def\stopregistercolor
- {\permitcolormodefalse\stopcolor\permitcolormodetrue}
-
-\def\starttextcolor[#1]%
- {\doifsomething{#1}
- {\bgroup
- \def\stoptextcolor % also goes ok with \page after
- {\let\maintextcolor\empty % this one because the top of
- \stopregistercolor % page sets the color right (side
- \egroup}% % effect)
- \def\starttextcolor[##1]%
- {\bgroup
- % \@@themaintextcolor==##1 is catched in \definecolor
- \definecolor[\@@themaintextcolor][##1]%
- \let\stoptextcolor\egroup}%
- \startregistercolor[\@@themaintextcolor]%
- \definecolor[\@@themaintextcolor][#1]%
- \let\maintextcolor\@@themaintextcolor}}
-
-\let\stoptextcolor\relax
-
-%D The following hook permits proper support at the text
-%D level. This definition actually belongs in another
-%D module. (May need a different \MKIV\ implementation.)
-
-% \ifx\initializemaintextcolor\undefined
-
- \let\@@clprevcolor\empty
-
- \def\initializemaintextcolor
- {% saveguard for setting text color to empty after
- % it has been set
- \doifnothing\@@cltextcolor
- {\ifx\@@clprevcolor\empty\else
- \let\@@cltextcolor\defaulttextcolor
- \fi}%
- \doifelsenothing\@@cltextcolor
- {\let\maintextcolor\empty}
- {\edef\@@clprevcolor{\@@cltextcolor}%
- \let\maintextcolor\@@themaintextcolor
- \doifelsenothing\@@cltextcolor % another saveguard
- {\definecolor[\@@themaintextcolor][\defaulttextcolor]}%
- {\definecolor[\@@themaintextcolor][\@@cltextcolor]}%
- \doinitializemaintextcolor}}
-
- \def\doinitializemaintextcolor
- {\appendtoks\starttextcolor[\@@themaintextcolor]\to\everystarttext
- \appendtoks\stoptextcolor \to\everystoptext
- \let\doinitializemaintextcolor\relax}
-
-% \fi
-
-\def\localstarttextcolor
- {\ifx\maintextcolor\empty
- \startcolormode\defaulttextcolor
- \else
- \startcolormode\maintextcolor
- \fi}
-
-% \def\localstoptextcolor
-% {\stopcolormode}
-%
-% better:
-
-\def\localstoptextcolor
- {\restorecolormode}
-
-\def\restoretextcolor
- {\ifx\maintextcolor\empty
- \expandafter\dorestoretextcolor
- \else
- % obey main text color
- \fi}
-
-\def\dorestoretextcolor
- {\color[\defaulttextcolor]}
-
-%D We use some reserved names for local color components.
-%D Consistent use of these scratch variables saves us
-%D unneccessary hash entries.
-%D
-%D \starttyping
-%D \@@cl@@r \@@cl@@g \@@cl@@b
-%D \@@cl@@c \@@cl@@m \@@cl@@y \@@cl@@k
-%D \@@cl@@s
-%D \stoptyping
-%D
-%D We implement several conversion routines.
-%D
-%D \starttyping
-%D \convertRGBtoCMYK {r} {g} {b}
-%D \convertRGBtoGRAY {r} {g} {b}
-%D \convertCMYKtoRGB {c} {m} {y} {k}
-%D \convertCMYKtoGRAY {c} {m} {y} {k}
-%D \convertCMYKtoCMY {c} {m} {y} {k}
-%D \stoptyping
-%D
-%D The relation between \cap{Gray}, \cap{RGB} and \cap{CMYK}
-%D is:
-%D
-%D \placeformula[-]
-%D \startformula
-%D G = .30r + .59g + .11b
-%D = 1.0 - \min(1.0,\ .30c + .59m + .11y + k)
-%D \stopformula
-%D
-%D When converting from \cap{CMYK} to \cap{RGB} we use the
-%D formula:
-%D
-%D \placeformula[-]
-%D \startformula
-%D \eqalign
-%D {r &= 1.0 - \min(1.0,\ c+k) \cr
-%D g &= 1.0 - \min(1.0,\ m+k) \cr
-%D b &= 1.0 - \min(1.0,\ y+k)}
-%D \stopformula
-%D
-%D In the conversion routine the color components are calculated
-%D in three digits precision.
-
-\def\realcolorvalue#1%
- {\ifnum#1>\zerocount % important, first encountered in --modu supp-mpe
- \ifnum#1<\plusten 0.00\the#1\else
- \ifnum#1<\plushundred 0.0\the#1\else
- \ifnum#1<\plusthousand 0.\the#1\else
- 1\fi\fi\fi
- \else 0\fi}
-
-% \def\doconvertCMYKtoRGB#1\k#2\to#3%
-% {\ifdim#2\points>#1\points% >= problem, repaired 2/12/2002
-% \let#3\@@cl@@z % k >= color
-% \else
-% \colordimen\onepoint
-% \advance\colordimen -#1\points
-% \advance\colordimen -#2\points
-% \multiply\colordimen \plusthousand
-% \colorcount\colordimen
-% \advance\colorcount \medcard
-% \divide\colorcount \maxcard
-% \edef#3{\realcolorvalue\colorcount}%
-% \fi}
-
-\def\doconvertCMYKtoRGB#1\k#2\to#3%
- {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr\onepoint-#1\points-#2\points\relax\relax+\medcard)/\maxcard\relax
- \ifnum\colorcount>\zeropoint
- \edef#3{\realcolorvalue\colorcount}%
- \else
- \let#3\@@cl@@z
- \fi}
-
-\def\convertCMYKtoRGB#1#2#3#4%
- {\doconvertCMYKtoRGB#1\k#4\to\@@cl@@r
- \doconvertCMYKtoRGB#2\k#4\to\@@cl@@g
- \doconvertCMYKtoRGB#3\k#4\to\@@cl@@b}
-
-% \def\doconvertRGBtoCMYK#1\to#2%
-% {\colordimen#1\points
-% \multiply\colordimen \plusthousand
-% \colorcount\colordimen
-% \advance\colorcount \medcard
-% \divide\colorcount \maxcard
-% \colorcount-\colorcount
-% \advance\colorcount \plusthousand
-% \edef#2{\realcolorvalue\colorcount}}
-
-\def\doconvertRGBtoCMYK#1\to#2%
- {\colorcount\numexpr\plusthousand-(\dimexpr\plusthousand\dimexpr#1\points\relax\relax+\medcard)/\maxcard\relax
- \edef#2{\realcolorvalue\colorcount}}
-
-\def\convertRGBtoCMYK#1#2#3%
- {\doconvertRGBtoCMYK#1\to\@@cl@@c
- \doconvertRGBtoCMYK#2\to\@@cl@@m
- \doconvertRGBtoCMYK#3\to\@@cl@@y
- \let\@@cl@@k\@@cl@@z}
-
-%D The following switch is mainly meant for (hidden)
-%D documentation purposes.
-
-\def\nGRAYfactor{333.333}
-\def\rGRAYfactor{\ifweightGRAY300\else\nGRAYfactor\fi}
-\def\gGRAYfactor{\ifweightGRAY590\else\nGRAYfactor\fi}
-\def\bGRAYfactor{\ifweightGRAY110\else\nGRAYfactor\fi}
-
-% \def\convertRGBtoGRAY#1#2#3%
-% {\colordimen#1\points
-% \colordimen\rGRAYfactor\colordimen
-% \colorcount\colordimen
-% \colordimen#2\points
-% \colordimen\gGRAYfactor\colordimen
-% \advance\colorcount \colordimen
-% \colordimen#3\points
-% \colordimen\bGRAYfactor\colordimen
-% \advance\colorcount \colordimen
-% \advance\colorcount \medcard
-% \divide\colorcount \maxcard
-% \edef\@@cl@@s{\realcolorvalue\colorcount}}
-
-\def\convertRGBtoGRAY#1#2#3%
- {\colorcount\numexpr
- (\dimexpr\rGRAYfactor\dimexpr#1\points\relax\relax+
- \dimexpr\gGRAYfactor\dimexpr#2\points\relax\relax+
- \dimexpr\bGRAYfactor\dimexpr#3\points\relax\relax+
- \medcard)/\maxcard
- \relax
- \edef\@@cl@@s{\realcolorvalue\colorcount}}
-
-\def\convertCMYKtoGRAY#1#2#3#4%
- {\convertCMYKtoRGB{#1}{#2}{#3}{#4}%
- \convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b}
-
-% \def\doconvertCMYKtoCMY#1\k#2\to#3%
-% {\colordimen#1\points
-% \advance\colordimen #2\points\relax
-% \ifdim\colordimen>\onepoint
-% \colordimen\onepoint
-% %\else
-% % \colordimen\colordimen
-% \fi
-% \multiply\colordimen \plusthousand
-% \colorcount\colordimen
-% \advance\colorcount \medcard
-% \divide\colorcount \maxcard
-% \edef#3{\realcolorvalue\colorcount}}
-
-\def\doconvertCMYKtoCMY#1\k#2\to#3%
- {\colorcount\numexpr(\dimexpr\plusthousand\dimexpr#1\points+#2\points\relax\relax+\medcard)/\maxcard\relax
- \ifnum\colorcount>\plusthousand
- \let#3\@@cl@@o
- \else
- \edef#3{\realcolorvalue\colorcount}%
- \fi}
-
-\def\convertCMYKtoCMY#1#2#3#4%
- {\doconvertCMYKtoCMY#1\k#4\to\@@cl@@c
- \doconvertCMYKtoCMY#2\k#4\to\@@cl@@m
- \doconvertCMYKtoCMY#3\k#4\to\@@cl@@y
- \let\@@cl@@k\@@cl@@z}
-
-%D Before we present the color macros, we first define the
-%D setup command. This command takes care of setting up the
-%D booleans that control local and global behavior (more on
-%D that later) and conversion to other color spaces.
-
-\let\currentspotcolor \empty
-\let\previousspotcolor\empty
-
-%D The tests depend on the use of constants. If we use the \MKIV\
-%D method we can share more.
-
-\def\doifcolorelse#1%
- {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
-
-\def\doifcolor#1%
- {\ifcsname\??cr\ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi#1\endcsname
- \expandafter\firstofoneargument
- \else
- \expandafter\gobbleoneargument
- \fi}
-
-%D There are a couple of different color switching macros,
-%D the local ones can be used to speed up things (only in \MKII).
-
-\def\localstartcolor
- {\ifincolor
- \localcolortrue
- \expandafter\doglobalstartcolor
- \else
- \expandafter\noglobalstartcolor
- \fi}
-
-\def\localstopcolor
- {\ifincolor
- \doglobalstopcolor
- \else
- \noglobalstopcolor
- \fi}
-
-\unexpanded\def\startcolor
- {\ifincolor
- \expandafter\doglobalstartcolor
- \else
- \expandafter\noglobalstartcolor
- \fi}
-
-\unexpanded\def\stopcolor
- {\ifincolor
- \doglobalstopcolor
- \else
- \noglobalstopcolor
- \fi}
-
-%D This macros call the global color switching ones. Starting
-%D a global, i.e. a possible page boundary crossing, color
-%D mode also sets a \type{\mark} in \TEX's internal list.
-
-\newcount\colorlevel
-
-\letvalue{\??cl0C}\empty % saved color
-\letvalue{\??cl0S}\empty % stop command
-
-%D We keep a positive color stack for foreground colors, and
-%D a negative one for backgrounds. Not that brilliant a
-%D solution, but it suits. The signs are swapped when the
-%D page ornaments are typeset.
-
-\let\@@colorplus \plusone
-\let\@@colorminus\minusone
-
-\def\@@currentcolorname {\??cl\the\colorlevel C}
-\def\@@currentcolorstop {\??cl\the\colorlevel S}
-%def\@@currenttransparent{\??cl\the\colorlevel T}
-
-\letvalue{\??cl*\s!black}\s!black
-
-\def\currentcolorname
- {\csname
- \ifcsname\@@currentcolorname\endcsname
- \expandafter\ifx\csname\@@currentcolorname\endcsname\empty
- \??cl*\s!black
- \else
- \@@currentcolorname
- \fi
- \else
- \??cl*\s!black
- \fi
- \endcsname}
-
-\def\outercolorname
- {\ifcsname\@@currentcolorname\endcsname
- \expandafter\ifx\csname\@@currentcolorname\endcsname\empty
- \s!black
- \else
- currentcolor%
- \fi
- \else
- \s!black
- \fi}
-
-% not the following, because we need a different tag in order to trick the stack
-%
-% \def\outercolorname{\executeifdefined\@@currentcolorname\s!black}
-%
-% \def\startcurrentcolor{\expanded{\startcolor[\s!black]\noexpand\startcolor[\outercolorname]}}
-% \def\stopcurrentcolor {\stopcolor\stopcolor}
-%
-% test case:
-%
-% \setupcolors[state=start,textcolor=red]
-% \starttext
-% red
-% \color[green]{green
-% \startMPcode
-% label(\sometxt{green\color[blue]{blue}green}, origin) withcolor red;
-% draw fullcircle scaled 1cm xscaled 2;
-% \stopMPcode
-% green}
-% red
-% \stoptext
-
-\def\dodoglobalstartcolor
- {\global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
- \global\advance\colorlevel \@@colorplus
- \global\@EA\let\csname\@@currentcolorname\endcsname\@@askedcolor
- %\debuggerinfo\m!colors
- % {start \@@askedcolor\space at level \the\colorlevel}%
- \ifx\@@askedcolor\empty
- \global\@EA\let\csname\@@currentcolorname\endcsname\@@currentcolor
- \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
- \else\ifx\@@askedcolor\@@currentcolor
- \global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
- \else
- \doifcolorelse\@@askedcolor
- {%\docolormark\@@askedcolor
- \ifpermitcolormode\docolormark\@@askedcolor\fi
- \global\@EA\let\csname\@@currentcolorstop\endcsname\dodoglobalstopcolor
- \startcolormode\@@askedcolor}
- {\global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
- \showmessage\m!colors3\@@askedcolor\empty}%
- \fi\fi}
-
-\def\doglobalstartcolor[#1]%
- {\edef\@@askedcolor{#1}%
- \ifcase\colorlevel\relax
- \ifx\@@askedcolor\empty
- \global\@EA\let\csname\@@currentcolorstop\endcsname\empty
- \else
- \dodoglobalstartcolor
- \fi
- \else
- \dodoglobalstartcolor
- \fi
- \ignorespaces}
-
-\def\noglobalstartcolor[#1]%
- {}
-
-\def\dodoglobalstopcolor
- {\ifcase\colorlevel \else
- \donoglobalstopcolor
- \global\@EA\let\@EA\@@previouscolor\csname\@@currentcolorname\endcsname
- \ifcase\colorlevel\relax
- \ifpermitcolormode
- \docolormark\empty
- \conditionalstoptransparency
- \dostopcolormode
- \fi
- \else % let's do a bit redundant testing here
- \docolormark\@@previouscolor
- \ifx\@@previouscolor\empty
- \ifpermitcolormode
- \conditionalstoptransparency
- \dostopcolormode
- \fi
- \else
- \doifcolorelse\@@previouscolor
- {\ifx\@@currentcolor\@@previouscolor\else
- % alternatively we could let \startcolormode handle this
- \ifpermitcolormode
- \conditionalstoptransparency % really needed
- % more safe but less efficient: \dostopcolormode
- \fi
- \startcolormode\@@previouscolor
- \fi}
- {\ifpermitcolormode
- \conditionalstoptransparency
- \dostopcolormode
- \fi}%
- \fi
- \fi
- \fi}
-
-\def\donoglobalstopcolor
- {\ifcase\colorlevel \else
- \global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
- %\debuggerinfo{\m!colors}
- % {stop \@@currentcolor\normalspace at level \the\colorlevel}%
- \global\advance\colorlevel \@@colorminus
- \fi}
-
-\def\doglobalstopcolor
- {\csname\@@currentcolorstop\endcsname}
-
-\let\noglobalstopcolor\relax
-
-\let\faststartcolor\doglobalstartcolor
-\let\faststopcolor \doglobalstopcolor
-
-%D We don't use grouping and save each stop alternative. This
-%D permits be especially useful in for instance local color
-%D support in verbatim. Using \type{\bgroup}||\type{\egroup}
-%D pairs could interfere with calling commands
-
-%D This color mechanism takes care of nested colors, like in:
-%D
-%D \startbuffer
-%D \color[green]{groen \color[green]{groen \color[red]{rood}} groen}
-%D \color[green]{groen \color[]{groen \color[red]{rood}} groen}
-%D \color[green]{groen \color[red]{rood \color[red]{rood}} groen}
-%D \color[green]{groen \color[green]{groen \color[]{groen}} groen}
-%D \color[green]{groen \color[red]{rood} groen}
-%D \color[green]{groen \color[]{groen} groen}
-%D \color[]{zwart \color[red]{rood} zwart}
-%D \color[]{zwart}
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D or
-%D
-%D \startvoorbeeld
-%D \startlines
-%D \getbuffer
-%D \stoplines
-%D \stopvoorbeeld
-%D
-%D Crossing page boundaries is of course also handled.
-%D Undefined or empty color specifications are treated as
-%D efficient as possible.
-%D
-%D \startbuffer
-%D \startcolor[green]
-%D [green] \input tufte [green] \par
-%D \startcolor[]
-%D [green] \input knuth [green] \par
-%D \startcolor[red]
-%D [red] \input tufte [red] \par
-%D \startcolor[yellow]
-%D [yellow] \input knuth [yellow] \par
-%D \stopcolor
-%D [red] \input tufte [red] \par
-%D \stopcolor
-%D [green] \input knuth [green] \par
-%D \stopcolor
-%D [green] \input tufte [green] \par
-%D \stopcolor
-%D \stopbuffer
-%D
-%D \startpacked
-%D \getbuffer
-%D \stoppacked
-%D
-%D These quotes are typeset by saying:
-%D
-%D \typebuffer
-
-%D We already mentioned that colors interfere with building
-%D the pagebody. This means that when the page is composed,
-%D the colors temporary have to be reset. After the page is
-%D shipped out, we have to revive the current color.
-%D
-%D We use \type{\mark}s to keep track of colors across page
-%D boundaries. Unfortunately standard \TEX\ supports only one mark,
-%D and using this one for color support only would be a waste.
-%D We therefore use an adapted version of J.~Fox's multiple mark
-%D mechanism as (re|)|implemented in \module{supp-mrk}.
-
-\doifdefinedelse{rawnewmark}
- {\rawnewmark\colormark}
- {\let\colormark\gobbleoneargument}
-
-%D Using this mark mechanism with lots of colors has one
-%D major drawback: \TEX's memory tends to overflow when
-%D very colorful text is stored in a global box. Even worse is that
-%D the processing time grows considerably. We therefore support
-%D local as well as global color switching.
-%D
-%D Of the next macros, \type {\popcolor} is to be used after
-%D the actual \type {\shipout} and \type {\startcolorpage} and
-%D \type {\stopcolorpage} are called when entering and leaving
-%D the \type {\pagebody} builder. In case of emergencies
-%D \type {\pushcolor} can be used to undo the current color,
-%D for instance when insertions are appended to the page.
-%D
-%D Out of efficiency we only use marks when needed. The next
-%D macro tries to find out if indeed a mark should be set.
-%D This macro uses the boolean \type {\ifinpagebody}, which can
-%D be defined and set in the module that handles the pagebody.
-
-\def\docolormark#1%
- {\iflocalcolor \else \ifinpagebody \else \ifinframed \else
- \dodocolormark{#1}%
- \fi \fi \fi}
-
-\let\lastcolormark=\empty
-
-\def\dodocolormark#1%
- {\edef\newcolormark{#1}%
- \ifx\newcolormark\lastcolormark\else
- \global\let\lastcolormark\newcolormark
- \@EA\rawsetmark\@EA\colormark\@EA{\lastcolormark}%
- \fi}
-
-%D \macros
-%D {pushcolor, popcolor}
-%D
-%D Pushing the current state in the output routine simply comes
-%D to resetting the color to black, while popping restores the
-%D color state to that of before the break.
-
-\def\topofpagecolor{\rawgetbotmark\colormark} % see postponing
-
-\def\pushcolor
- {\stopcolormode}
-
-\def\popcolor
- {\doifsomething{\rawgetbotmark\colormark}
- {%\debuggerinfo\m!colors{popping \getbotmark\colormark}%
- \startcolormode{\rawgetbotmark\colormark}}}
-
-\def\popsplitcolor
- {\getsplitmarks\colormark % hier wel
- \doifsomething{\rawgetsplitbotmark\colormark}
- {%\debuggerinfo\m!colors{split popping \getsplitbotmark\colormark}%
- \startcolormode{\rawgetsplitbotmark\colormark}}}
-
-\appendtoks\pushcolor \to\everypushproperties
-\appendtoks\popcolor \to\everypopproperties
-\appendtoks\popsplitcolor\to\everypopsplitproperties
-
-% Private macro: only needed in test cases (like multiple
-% seperations in one file); no user command!
-
-\def\resynccolor
- {\ifcase\pagetotal % \ifdim\pagetotal=\zeropoint
- \popcolor
- \else\ifx\@@currentcolor\empty
- \ifx\maintextcolor\empty\else
- \startcolormode\maintextcolor
- \fi
- \else
- \startcolormode\@@currentcolor
- \fi\fi}
-
-% weird stuff
-
-\def\pushpostponedpagecolor
- {\edef\savedtopofpagecolor{\topofpagecolor}%
- \doifsomething\savedtopofpagecolor\restorecolormode} % \stopcolormode
-
-\def\poppostponedpagecolor
- {\doifsomething\savedtopofpagecolor\startcolormode\savedtopofpagecolor}
-
-%D \macros
-%D {startcolorpage, stopcolorpage}
-%D
-%D Local use can be forced with the next two macros. Nesting
-%D is still supported but colors are no longer marked.
-%D
-%D The next implementation makes (simple) color separation more
-%D easy. It also supports nested colors in page backgrounds
-%D and texts.
-
-\def\startcolorpage
- {\bgroup
- \let\@@colorplus \minusone
- \let\@@colorminus\plusone
- \let\docolormark\gobbleoneargument
- \edef\savedcolorlevel{\the\colorlevel}%
- \global\colorlevel\zerocount % before \localstartcolor of
- \ifx\maintextcolor\empty % course, ugly bug removed
- \localstartcolor[\defaulttextcolor]%
- \else
- \localstartcolor[\maintextcolor]%
- \fi}
-
-\def\stopcolorpage
- {\localstopcolor
- \global\colorlevel\savedcolorlevel
- \egroup}
-
-\appendtoks \startcolorpage\to\everystarttextproperties
-\prependtoks\stopcolorpage \to\everystoptextproperties
-
-%D We want color support to be similar to font support and
-%D therefore implement \type{\color} using grouping.
-%D
-%D When \type {\somecolor} is issued, we can savely assume
-%D grouping. Using \type {\groupedcommand} here (i.e.\ the
-%D definition of \type {\color}) is unsafe because in
-%D interferes with for instance switching attributes.
-
-\unexpanded\def\color[#1]%
- {\groupedcommand{\startcolor[#1]}\stopcolor}
-
-%D This implementation enables use of defined colors like:
-%D
-%D \starttyping
-%D Look at the {\brightgreen bright} side of life and get
-%D yourself no \red{red} head!
-%D \stoptyping
-
-%D Also wrong, test in combinations: \type{...{}{\red test}}
-%D
-%D \def\switchtocolor[#1]%
-%D {\startcolor[#1]\aftergroup\stopcolor}
-
-\def\switchtocolor[#1]% grouping is realy needed, else migration
- {\bgroup\startcolor[#1]\aftergroup\stopcolor\aftergroup\egroup}
-
-\unexpanded\def\color[#1]%
- {\groupedcommand{\startcolor[#1]}\stopcolor}
-
-\unexpanded\def\graycolor[#1]% not \gray because this is a color
- {\groupedcommand{\RGBsupportedfalse\CMYKsupportedfalse\SPOTsupportedfalse\startcolor[#1]}\stopcolor}
-
-\unexpanded\def\colored[#1]%
- {\groupedcommand{\definecolor[@colored@][#1]\startcolor[@colored@]}\stopcolor}
-
-%D We can speed the following macros a bit up, but this
-%D hardly pays off; they are only used in the manual.
-
-\def\realcolorformat#1%
- {\ifnum#1<\plusten 0.00\the#1\else
- \ifnum#1<\plushundred 0.0\the#1\else
- \ifnum#1<\plusthousand 0.\the#1\else
- 1.000\fi\fi\fi}
-
-\def\dodoformatcolor#1%
- {\colordimen#1\points\relax
- \ifdim\colordimen>\onepoint
- \colordimen\onepoint
- \fi
- \multiply\colordimen \plusthousand
- \colorcount\colordimen
- \advance\colorcount \medcard
- \divide\colorcount \maxcard \relax
- \realcolorformat\colorcount}
-
-\def\doformatcolorR#1:#2:#3:#4:#5\od
- {\dodoformatcolor{#1}\colorformatseparator
- \dodoformatcolor{#2}\colorformatseparator
- \dodoformatcolor{#3}}
-
-\def\doformatcolorC#1:#2:#3:#4:#5:#6\od
- {\dodoformatcolor{#1}\colorformatseparator
- \dodoformatcolor{#2}\colorformatseparator
- \dodoformatcolor{#3}\colorformatseparator
- \dodoformatcolor{#4}}
-
-\def\doformatcolorS#1:#2:#3\od
- {\dodoformatcolor{#1}}
-
-\def\doformatcolorP#1:#2:#3:#4:#5:#6\od
- {#1\colorformatseparator
- \dodoformatcolor{#2}\colorformatseparator
- \dodoformatcolor{#3}\colorformatseparator
- \dodoformatcolor{#4}\colorformatseparator}
-
-\def\doformatcolor#1:%
- {\csname doformatcolor#1\endcsname}
-
-\def\colorvalue
- {\dowithcolor\doformatcolor}
-
-\def\doformatgrayR#1:#2:#3:#4:#5\od
- {\convertRGBtoGRAY{#1}{#2}{#3}%
- \dodoformatcolor\@@cl@@s}
-
-\def\doformatgrayC#1:#2:#3:#4:#5:#6\od
- {\convertCMYKtoGRAY{#1}{#2}{#3}{#4}%
- \dodoformatcolor\@@cl@@s}
-
-\def\doformatgrayS#1:#2:#3\od
- {\dodoformatcolor{#1}}
-
-% \def\doformatgrayP#1:#2:#3:#4:#5:#6\od
-% {\convertSPOTtoGRAY{#1}{#2}{#3}{#4}%
-% \dodoformatcolor\@@cl@@s}
-
-\def\doformatgrayP#1:#2:#3:#4:#5:#6\od
- {todo}
-
-\def\doformatgray#1:%
- {\csname doformatgray#1\endcsname}
-
-\def\grayvalue
- {\dowithcolor\doformatgray}
-
-%D \macros
-%D {localstartraster,localstopraster,
-%D startraster,stopraster}
-%D
-%D The previous conversions are not linear and treat each color
-%D component according to human perception curves. Pure gray
-%D (we call them rasters) has equal color components. In
-%D \CONTEXT\ rasters are only used as backgrounds and these
-%D don't cross page boundaries in the way color does. Therefore
-%D we don't need stacks and marks. Just to be compatible with
-%D color support we offer both 'global' and 'local' commands.
-%D
-%D \starttyping
-%D \def\localstartraster[#1]%
-%D {\doifelsenothing{#1}
-%D {\dostartgraymode\@@rsscreen}
-%D {\dostartgraymode{#1}}}
-%D
-%D \def\localstopraster
-%D {\dostopgraymode}
-%D
-%D \let\startraster\localstartraster
-%D \let\stopraster \localstopraster
-%D \stoptyping
-%D
-%D The next alternative is slower, since it works on top of the
-%D color (stack) mechanism, but it does provide nesting.
-
-\def\dosetrastercolor#1%
- {\edef\@@cl@@s{#1}%
- \ifx\@@cl@@s\empty
- \let\@@cl@@s\@@rsscreen
- \fi
- \let\@@cl@@t\@@cl@@z % else we get rogue
- \let\@@cl@@a\@@cl@@z % transpancies
- \setevalue{\??cr\??rs}{\colorSpattern}}
-
-% beware, don't add extra grouping, else color in tables
-% fails
-
-\def\localstartraster[#1]%
- {\ifincolor\dosetrastercolor{#1}\localstartcolor[\??rs]\fi}
-
-\def\startraster[#1]%
- {\ifincolor\dosetrastercolor{#1}\startcolor[\??rs]\fi}
-
-\def\localstopraster{\ifincolor\localstopcolor\fi}
-\def\stopraster {\ifincolor\stopcolor\fi}
-
-\def\raster[#1]{\groupedcommand{\startraster[#1]}{\stopraster}}
-
-%D Palets use an auxiliary macro:
-
-\def\dodefinepaletcolor#1#2#3%
- {\doifassignmentelse{#3}
- {% == \definepalet[test][xx={y=.4}]
- \definecolor[\??pa#1:#2][#3]%
- \iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr\??pa#1:#2\endcsname}}
- {% == \definepalet[test][xx=green]
- \doifdefinedelse{\??cr#3}
- {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi{\??cr#1:#2}{\csname\??cr#3\endcsname}}
- {\letvalue{\??cr#1:#2}\colorXpattern}}}
-
-%D \MP\ related conversions:
-
-\def\scaledMPcolor#1#2%
- {\ifMPgraphics
- \handlecolorwith\doMPcolor
- \csname\??cr
- \ifcsname\??cr\currentpalet#2\endcsname\currentpalet\fi
- #2\endcsname
- :::::::\end#1\end
- \else
- #2%
- \fi}
-
-\def\MPcolor{\scaledMPcolor1}
-
-%D Before we had transparency available, the following
-%D conversion macro was available:
-%D
-%D \starttyping
-%D \def\doMPcolor#1:#2:#3:#4:#5:#6:#7:#8\end
-%D {\if #1R(#2,#3,#4)%
-%D \else\if#1C\ifMPcmykcolors cmyk(#2,#3,#4,#5)\else(1-#2-#5,1-#3-#5,1-#4-#5)\fi
-%D \else\if#1S(#2,#2,#2)%
-%D \else (0,0,0)%
-%D \fi\fi\fi}
-%D \stoptyping
-%D
-%D In order to be useful, this macro is to be fully
-%D expandabele.
-
-\def\doMPcolor#1:% #1 can be \relax ! ! ! i.e. an empty color
- {\csname MPc\@EA\ifx\csname MPc\string#1\endcsname\relax B\else#1\fi\endcsname}
-
-\def\MPcR{\doMPrgb}
-\def\MPcC{\ifMPcmykcolors\@EA\doMPcmykY\else\@EA\doMPcmykN\fi}
-\def\MPcS{\doMPgray}
-\def\MPcP{\ifMPspotcolors\@EA\doMPspotY\else\@EA\doMPspotN\fi}
-\def\MPcB{\doMPblack}
-
-\def\transparentMP {transparent}
-\def\cmykMP {scaledcmyk}
-\def\cmykASrgbMP {scaledcmykasrgb} % not really needed any more
-\def\rgbMP {scaledrgb}
-\def\grayMP {scaledgray}
-\def\spotMP {spotcolor}
-
-\def\doMPtransparent#1#2:#3:#4\end
- {\ifcase#2\space(#1)\else\transparentMP(#2,#3,(#1))\fi}
-
-\def\doMPgray#1:#2\end#3\end
- {\doMPtransparent{\grayMP(#1,#3)}#2\end}
-
-\def\doMPrgb#1:#2:#3:#4\end#5\end
- {\doMPtransparent{\rgbMP(#1,#2,#3,#5)}#4\end}
-
-\def\doMPcmykY#1:#2:#3:#4:#5\end#6\end
- {\doMPtransparent{\cmykMP(#1,#2,#3,#4,#6)}#5\end}
-
-\def\doMPcmykN#1:#2:#3:#4:#5\end#6\end
- {\doMPtransparent{\cmykASrgbMP(#1,#2,#3,#4,#6)}#5\end}
-
-\def\doMPspotY#1:#2:#3:#4:#5\end#6\end % best make #3 same as #1 when empty
- {\doMPtransparent{multitonecolor("#1",#2,"#3","#4")}#5\end}
-
-\def\doMPspotN#1:#2:#3:#4:#5\end#6\end
- {\scaledMPcolor{#4}{#1}}
-
-\def\doMPblack#1\end#2\end
- {\unknownMPcolor}
-
-\def\unknownMPcolor
- {(0,0,0)}
-
-\let\processMP\spotMP % for some time, will become obsolete, brrr
-
-%D \PDF\ related conversions:
-
-\def\PDFcolor #1{\handlecolorwith\doPDFcolor \csname\??cr#1\endcsname:::::::\end}
-\def\PDFcolorvalue#1{\handlecolorwith\doPDFcolorvalue\csname\??cr#1\endcsname:::::::\end}
-\def\FDFcolor #1{\handlecolorwith\doFDFcolor \csname\??cr#1\endcsname:::::::\end}
-
-\def\doPDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
- {\if #1R#2 #3 #4 rg%
- \else\if#1C#2 #3 #4 #5 k%
- \else\if#1S#2 g%
- \else\if#1P#5 g%
- \else 0 g%
- \fi\fi\fi\fi}
-
-\def\doPDFcolorvalue#1:#2:#3:#4:#5:#6:#7:#8\end
- {\if #1R#2 #3 #4%
- \else\if#1C#2 #3 #4 #5%
- \else\if#1S#2%
- \else\if#1P#5%
- \else 0%
- \fi\fi\fi\fi}
-
-\def\doFDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
- {[\if #1R#2 #3 #4%
- \else\if#1C#2 #3 #4 #5%
- \else\if#1S#2%
- \else\if#1P#5%
- \else 0%
- \fi\fi\fi\fi]}
-
-\def\internalspotcolorname#1{\handlecolorwith\dointernalspotcolorname\csname\??cr#1\endcsname:::::::\end}
-\def\internalspotcolorsize#1{\handlecolorwith\dointernalspotcolorsize\csname\??cr#1\endcsname:::::::\end}
-
-\def\dointernalspotcolorname#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3 #1\else#2\fi\else#1\fi}
-\def\dointernalspotcolorsize#1:#2:#3:#4:#5:#6:#7:#8\end{\if#1P\ifcase0#3 0\else#3\fi\else 0\fi}
-
-%D Because it's a persitent issue, we also provide
-
-\def\pgf@context@registercolor#1%
- {\handlecolorwith\pgf@context@registercolor@indeed\csname\??cr#1\endcsname:::::::>#1\end}
-
-\def\pgf@context@registercolor@indeed#1:#2:#3:#4:#5:#6>#7\end
- {\setevalue{\string\color@#7}{\noexpand\xcolor@{}{}%
- \if#1R{rgb}{#2,#3,#4}\else
- \if#1C{cmyk}{#2,#3,#4,#5}\else
- \if#1S{gray}{#2}\else
- {gray}{0}\fi\fi\fi}}
-
-%D Slow but ok \unknown
-
-\def\colorcomponents#1% might be broken
- {\startnointerference
- \localcolortrue
- \globallet\thecolorcomponents\empty
- \def\doexeccolorR ##1:##2:##3:##4:##5\od{\gdef\thecolorcomponents{r=\twodigitrounding{##1} g=\twodigitrounding{##2} b=\twodigitrounding{##3}}}%
- \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{c=\twodigitrounding{##1} m=\twodigitrounding{##2} y=\twodigitrounding{##3} k=\twodigitrounding{##4}}}%
- \def\doexeccolorS ##1:##2:##3\od{\gdef\thecolorcomponents{s=\twodigitrounding{##1}}}%
- \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thecolorcomponents{p=\twodigitrounding{##4} n=##1}}%
- \let\doexeccolorPindex\doexeccolorP
- \backgroundline[#1]{}%
- \stopnointerference
- \thecolorcomponents}
-
-\def\transparencycomponents#1%
- {\startnointerference
- \localcolortrue
- \globallet\thetransparencycomponents\empty
- \def\doexeccolorR ##1:##2:##3:##4:##5\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##4} t=\twodigitrounding{##5}}}%
- \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}%
- \def\doexeccolorS ##1:##2:##3\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##2} t=\twodigitrounding{##3}}}%
- \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\gdef\thetransparencycomponents{a=\twodigitrounding{##5} t=\twodigitrounding{##6}}}%
- \let\doexeccolorPindex\doexeccolorP
- \backgroundline[#1]{}%
- \stopnointerference
- \thetransparencycomponents}
-
-%D \macros
-%D {everyshapebox}
-%D
-%D A terrible hack, needed because we cannot have marks in
-%D shape boxes.
-
-\appendtoks \localcolortrue \to \everyshapebox
-
-%D \macros
-%D {forcecolorhack}
-%D
-%D Awful \unknown
-
-\let\forcecolorhack\relax
-
-%D We default to the colors defined in \module{colo-rgb} and
-%D support both \cap{RGB} and \cap{CMYK} output. As you can
-%D see, color support is turned off by default. Reduction of
-%D gray colors to gray scales is turned on.
-
-\definecolor[black][s=0]
-\definecolor[white][s=1]
-
-\definetransparency [none] [0]
-\definetransparency [normal] [1]
-\definetransparency [multiply] [2]
-\definetransparency [screen] [3]
-\definetransparency [overlay] [4]
-\definetransparency [softlight] [5]
-\definetransparency [hardlight] [6]
-\definetransparency [colordodge] [7]
-\definetransparency [colorburn] [8]
-\definetransparency [darken] [9]
-\definetransparency [lighten] [10]
-\definetransparency [difference] [11]
-\definetransparency [exclusion] [12]
-\definetransparency [hue] [13]
-\definetransparency [saturation] [14]
-\definetransparency [color] [15]
-\definetransparency [luminosity] [16]
-
-\setupcolors
- [\c!state=\v!stop,
- \c!conversion=\v!yes,
- \c!reduction=\v!no,
- \c!rgb=\v!yes,
- \c!cmyk=\v!yes,
- \c!spot=\v!yes,
- \c!mp\c!cmyk=\@@clcmyk,
- \c!mp\c!spot=\@@clspot,
- \c!expansion=\v!no,
- \c!textcolor=,
- \c!split=\v!no,
- \c!criterium=\v!all]
-
-\setupcolor
- [\v!rgb]
-
-\protect \endinput