summaryrefslogtreecommitdiff
path: root/tex/context/base/colo-run.tex
blob: 0b44f2ee5ffce53ee4702f8733f3e9057d6a1a65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
%D \module
%D   [       file=colo-run,
%D        version=1997.04.01,
%D          title=\CONTEXT\ Color Macros,
%D       subtitle=Runtime loaded commands,
%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.

\unprotect

% temp hack (not do be documented)

% \gdef\doformatcolorP#1:#2:#3:#4:#5:#6\od % was undefined in colo-ini
%   {#1\colorformatseparator
%    \dodoformatcolor{#2}\colorformatseparator
%    \dodoformatcolor{#3}\colorformatseparator
%    \dodoformatcolor{#4}\colorformatseparator}

% \gdef\doformatgrayP#1:#2:#3:#4:#5:#6\od
%   {todo}

% so far

\gdef\showpalet
  {\dodoubleargument\doshowpalet}

\gdef\doshowpalet[#1][#2]%
  {\doifdefined{\??pa#1}
     {\doifinsetelse\v!vertical{#2}
        {\showverticalpalet[#1][#2]}
        {\showhorizontalpalet[#1][#2]}}}

\gdef\showverticalpalet[#1][#2]%
  {\localvbox
     {\offinterlineskip
      \setuppalet[#1]
      \def\rule
        {\vrule\!!width3em\!!height\strutht\!!depth\strutdp}
      \tabskip\zeropoint
      \def\doshowpalet##1%
        {\doifinsetelse\v!number{#2}{##1\hskip.5em}{}&
         \color[##1]{\rule}\graycolor[##1]{\rule}&
         \doifinset\v!value{#2}{\hskip.5em\colorvalue{##1}}\crcr}
      \halign
        {\hss##&\hss##\hss&##\cr
         &\doifinset{\v!name}{#2}{\strut#1}&\cr%
         \processpalet[#1]\doshowpalet\crcr}}}

\gdef\showhorizontalpalet[#1][#2]%
  {\localvbox
     {\offinterlineskip
      \setuppalet[#1]
      \tabskip\zeropoint
      \!!widtha\zeropoint
      \doifinset\v!number{#2}
        {\def\doshowpalet##1%
           {\setbox0\hbox{##1}%
            \ifdim\!!widtha<\wd0\!!widtha\wd0\fi}%
         \processpalet[#1]\doshowpalet}%
      \advance\!!widtha 1em
      \ifdim\!!widtha<5em
        \!!widtha5em
      \fi
      \halign
        {##&&\hbox to \!!widtha{\hss##\hss}\cr
         \doifinset\v!number{#2}
           {\def\doshowpalet##1{&\strut##1}%
            \processpalet[#1]\doshowpalet}\cr
         \doifinset\v!name{#2}{#1\hskip.5em}%
         \def\doshowpalet##1%
           {&\strut\color[##1]{\vrule\!!width\!!widtha\!!height\strutht\!!depth\zeropoint}}%
         \processpalet[#1]\doshowpalet\crcr
         \noalign{\vskip-\strutdepth}%
         \def\doshowpalet##1%
           {&\graycolor[##1]{\vrule\!!width\!!widtha\!!height\zeropoint\!!depth\strutdp}}%
         \processpalet[#1]\doshowpalet\crcr
         \doifinset\v!value{#2}
           {\def\doshowpalet##1%
             {&\vbox
                {\hsize\!!widtha
                 \vskip.25ex
                 \everypar{\strut}
                 \veryraggedcenter
                 \let\colorformatseparator=\endgraf
                 \colorvalue{##1}}}%
            \processpalet[#1]\doshowpalet}%
         \crcr}}}

\gdef\processpalet[#1]%
  {\expanded{\globalprocesscommalist[\getvalue{\??pa#1}]}}

\gdef\showcolorgroup
  {\dodoubleargument\doshowcolorgroup}

\gdef\doshowcolorgroup[#1][#2]%
  {\doifdefined{\??cr#1:1}
     {\doifinsetelse\v!vertical{#2}
        {\showverticalcolorgroup[#1][#2]}
        {\showhorizontalcolorgroup[#1][#2]}}}

\gdef\showhorizontalcolorgroup[#1][#2]%
  {\localvbox
     {\offinterlineskip
      \setuppalet
      \tabskip\zeropoint
      \def\rule
        {\vrule\!!width4em\!!height\strutht\!!depth\strutdp}
      \def\colorformatseparator{\strut\cr}
      \def\dodoshowgroup##1%
        {\halign
           {\hss####\hss\cr
            \doifinset\v!number{#2}{\strut##1}\cr
            \color[#1:##1]{\vrule\!!width4em\!!height\strutht\!!depth\zeropoint}\cr
            \graycolor[#1:##1]{\vrule\!!width4em\!!height\zeropoint\!!depth\strutdp}\cr
            \doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}
      \def\doshowgroup##1%
        {\doifdefined{\??cr#1:##1}
           {\vbox{\dodoshowgroup{##1}}}}
      \hbox
        {\doifinset\v!name{#2}
           {\strut
            \doifinsetelse\v!value{#2}
              {\raise3\lineheight\hbox{#1\hskip.5em}}
              {#1}%
            \hskip.5em}%
         \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4%
         \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}}

\gdef\showverticalcolorgroup[#1][#2]%
  {\localvbox
     {\offinterlineskip
      \setuppalet
      \tabskip\zeropoint
      \def\rule
        {\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}
      \def\doshowgroup##1%
        {\doifdefined{\??cr#1:##1}
           {\doifinset\v!number{#2}{##1\hskip.5em}&
            \color[#1:##1]{\rule}\graycolor[#1:##1]{\rule}&
            \doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}
      \halign
        {\hss##&\hss##\hss&##\hss\cr
         &\doifinset\v!name{#2}{\strut#1}&\crcr
         \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4%
         \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}}

\gdef\showcolor
  {\dosingleempty\doshowcolor}

\gdef\doshowcolor[#1]%
  {\bgroup
     \iffirstargument
       \let\colorlist\empty
       \let\colorstyle\empty
       \setupcolor[#1]%
     \fi
     \setupwhitespace[\v!none]
     \def\rule
       {\vrule\!!width4em\!!height\strutht\!!depth\strutdp}
     \def\docommand##1%
       {\hbox
          {\graycolor[##1]{\rule}\quad
           \color[##1]{\rule}\quad
           \grayvalue{##1}\quad
           \hbox to 12em{\colorvalue{##1}\hss}%
           \strut##1}
        \endgraf}
     \processcommacommand[\colorlist]\docommand
   \egroup}

\gdef\comparepalet
  {\dosingleargument\docomparepalet}

\gdef\docomparepalet[#1]%
  {\doifdefined{\??pa#1}
     {\hbox
        {\dodocomparepalet\color[#1]%
         \quad
         \dodocomparepalet\graycolor[#1]}}}

\gdef\dodocomparepalet#1[#2]%
  {\localvbox
     {\offinterlineskip
      \setuppalet[#2]
      \getcommacommandsize[\getvalue{\??pa#2}]
      \!!widtha2em\relax
      \hsize\commalistsize\!!widtha
      \def\rule%
        {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
      \def\dododocomparepalet##1%
        {\hbox
           {\setbox0\hbox
              {#1[##1]{\vrule\!!width\hsize\!!height3ex}}%
            \wd0\zeropoint
            \box0
            \hbox to \hsize
              {\def\dododocomparepalet####1%
                 {\hbox to \!!widtha
                    {\hss#1[####1]{\rule}\hss}}%
               \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}}
         \endgraf}
      \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}}

\gdef\comparecolorgroup
  {\dosingleargument\docomparecolorgroup}

\gdef\docomparecolorgroup[#1]%
  {\doifdefined{\??cr#1:1}
     {\hbox
        {\dodocomparecolorgroup\color[#1]%
         \quad
         \dodocomparecolorgroup\graycolor[#1]}}}

\gdef\dodocomparecolorgroup#1[#2]%
  {\localvbox
     {\!!counta\zerocount
      \dorecurse{15}
        {\doifdefined{\??cr#2:\recurselevel}{\advance\!!counta\plusone}}
      \!!widtha2em\relax
      \hsize\!!counta\!!widtha
      \def\rule
        {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
      \def\dododocomparecolorgroup##1%
        {\hbox to \hsize
           {\setbox0\hbox
              {#1[#2:##1]{\vrule\!!width\hsize\!!height3ex}}%
            \wd0\zeropoint
            \box0
            \hbox to \hsize
              {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\rule}\hss}}}
         \endgraf}
      \dorecurse\!!counta{\dododocomparecolorgroup\recurselevel}}}

% \def\execcolorRCSP#1:{\csname execcolor#1\endcsname} -> \execcolorR

\gdef\dogetcolorcomponents#1%
  {\doifelsenothing{#1}
     {\global\globalscratchtoks{\TB}}
     {\startnointerference
      \localcolortrue
      \def\doexeccolorR    ##1:##2:##3:##4:##5\od{\global\globalscratchtoks{\NC\Od#1 \NC\Nm #1 \NC a=\Do##4 \enspace t=\Do##5 \NC r=\Do##1 \enspace g=\Do##2 \enspace b=\Do##3 \NC\NR}}%
      \def\doexeccolorC##1:##2:##3:##4:##5:##6\od{\global\globalscratchtoks{\NC\Od#1 \NC\Nm #1 \NC a=\Do##5 \enspace t=\Do##6 \NC c=\Do##1 \enspace m=\Do##2 \enspace y=\Do##3 \enspace k=\Do##4 \NC\NR}}%
      \def\doexeccolorS            ##1:##2:##3\od{\global\globalscratchtoks{\NC\Od#1 \NC\Nm #1 \NC a=\Do##2 \enspace t=\Do##3 \NC s=\Do##1 \NC\NR}}%
     %\def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\global\globalscratchtoks{\NC\Od#1 \NC\Nm #1 \NC a=\Do##5 \enspace t=\Do##6 \NC p=\Do##4 \enspace f=\Do##2 \enspace d=\Do##3 \enspace n=##1 \NC\NR}}%
      \def\doexeccolorP##1:##2:##3:##4:##5:##6\od{\global\globalscratchtoks{\NC\Od#1 \NC\Nm #1 \NC a=\Do##5 \enspace t=\Do##6 \NC p=\Do##4 \enspace n=##1 \NC\NR}}%
      \let\doexeccolorPindex\doexeccolorP
      \backgroundline[#1]{}%
      \stopnointerference}%
   \appendetoks\the\globalscratchtoks\to\scratchtoks}

\newdimen\colorcomponentwidth % for my eyes only

\gdef\showcolorcomponents[#1]%
  {\bgroup
   \def\Od##1 {\backgroundline[##1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}}%
   \def\Do##1 {\twodigitrounding{##1}}%
   \def\Nm##1 {\ifdim\colorcomponentwidth>\zeropoint\hbox to \colorcomponentwidth\fi{##1}}%
   \scratchtoks\emptytoks
   \appendtoks\starttabulate[|l|l|l|p|]\to\scratchtoks
   \appendtoks\NC color \NC name \NC transparency \NC specification \NC\NR\TB\to\scratchtoks
   \processcommacommand[#1]\dogetcolorcomponents
   \appendtoks\stoptabulate\to\scratchtoks
   \tt\the\scratchtoks
   \egroup}

\protect \endinput