grph-fig.mkxl /size: 13 Kb    last modification: 2021-10-28 13:51
1%D \module
2%D   [       file=grph-fig,
3%D        version=2006.08.26, % overhaul of 1997.03.31
4%D          title=\CONTEXT\ Graphic Macros,
5%D       subtitle=Figure Inclusion,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14% This is (yet) untested in LMTX!
15
16\unprotect
17
18%D Used in the styledesign manual:
19%
20% beware in mkiv we don't have the typeset- prefix
21%
22% \setbuffer[typeset-b]\endbuffer
23% \setbuffer[typeset-a]\endbuffer
24%
25% todo:
26%
27% \appendtoks \setbuffer[typeset-b]\endbuffer\to \everystarttext
28% \appendtoks \setbuffer[typeset-a]\endbuffer\to \everystarttext
29
30% we could use \typesetbuffer[*] to access the last one
31
32\newconstant\c_grph_buffers_mode
33
34\mutable\let\lasttypesetbuffer\empty
35
36\permanent\protected\def\typesetbuffer    {\bgroup\setconstant\c_grph_buffers_mode\plusone  \grph_buffers_typeset}
37\permanent\protected\def\typesetbufferonly{\bgroup\setconstant\c_grph_buffers_mode\zerocount\grph_buffers_typeset}
38
39\tolerant\permanent\protected\def\grph_buffers_typeset[#1]#*[#2]%
40  {\ifparameters
41     \grph_buffers_typeset_indeed\jobname\empty
42   \or
43     \ifhastok={#1}%
44       \grph_buffers_typeset_indeed\jobname{#1}%
45     \else
46       \grph_buffers_typeset_indeed{#1}\empty
47     \fi
48   \or
49     \grph_buffers_typeset_indeed{#1}{#2}%
50   \fi}
51
52\def\grph_buffers_typeset_indeed#1#2% we could use the via files
53  {\doifnot{#1}{*}{\xdef\lasttypesetbuffer{\clf_typesetbuffer{#1}}}%
54   \ifcase\c_grph_buffers_mode
55     % typesetonly
56   \or
57     \externalfigure[\lasttypesetbuffer][#2]%
58   \fi
59   \egroup}
60
61\tolerant\permanent\protected\def\runbuffer[#1]#*[#2]%
62  {\xdef\lasttypesetbuffer{\clf_runbuffer{#1}{#2}}}
63
64% For manuals and such:
65%
66% \definetypesetting [name] [options]   [settings-a]
67%
68% \typesetfile       [name] [file]      [settings-b]
69% \typesetfile       [file] [options]   [settings-b]
70% \typesetfile       [file] [settings-b]
71% \typesetfile       [file]
72%
73% \enabletrackers[files.run]
74% \starttext
75%     \typesetfile[oepsoeps.tex][width=10cm,frame=on]
76% \stoptext
77
78\installcorenamespace{typesettingfile}
79
80\tolerant\permanent\protected\def\definetypesetting[#1]#*[#2]#*[#3]% <name> options settings-a
81  {\ifparameter#1\or
82     \frozen\instance\protected\defcsname\??typesettingfile#1\endcsname{\grph_typesetting_process_indeed{#2}{#3}}%
83   \fi}
84
85\tolerant\permanent\protected\def\typesetfile[#1]#*[#2]#*[#3]% <name> filename settings-b | filename options settings
86  {\ifcsname\??typesettingfile#1\endcsname
87     \lastnamedcs{#2}{#3}%
88   \orelse\ifparameter#3\or
89     \grph_typesetting_process_indeed{#2}{#3}{#1}{}%
90   \orelse\ifparameter#2\or % filename settings
91     \grph_typesetting_process_indeed{}{#2}{#1}{}%
92   \fi}
93
94\defineexternalfigure[typesetting] % so one can set a frame and such
95
96\def\grph_typesetting_process_indeed#1#2#3#4% options settings-a filename settings-b
97  {\begingroup
98   \edef\m_typesetting_name{\clf_runcontextjob{#3}{#1}}%
99   \ifempty\m_typesetting_name \else
100     \normalexpanded{\externalfigure[\m_typesetting_name][typesetting]}[#2,#4]%
101   \fi
102   \endgroup}
103
104%D Whatever ... hardly used ... but historic ... needs checking ... will probably
105%D become m-fig-nn.mkiv .. or I will extend it cq. clean it up when I needed it.
106%D After all, it's documented in old manuals.
107
108\newcount\c_grph_steps_reference
109\newdimen\d_grph_steps_x
110\newdimen\d_grph_steps_y
111\newbox  \b_grph_steps_colorbar
112
113\ifdefined\referring\else \mutable\let\referring\relax \fi
114\ifdefined\marking  \else \mutable\let\marking  \relax \fi
115\ifdefined\remark   \else \mutable\let\remark   \relax \fi
116\ifdefined\colorbar \else \mutable\let\colorbar \relax \fi
117
118\tolerant\protected\def\grph_steps_place_figure#1#2#3#4[#5]%
119  {\hpack
120     {\setbox\scratchbox\hpack
121        {\useexternalfigure[\s!dummy][#2][#3,#5]%
122         \externalfigure[\s!dummy]}%
123      \grph_steps_calculate
124      \startpositioning
125        \enforced\let\referring\grph_steps_one_referring
126        \enforced\let\marking  \grph_steps_one_marking
127        \enforced\let\remark   \grph_steps_one_remark
128        \enforced\let\colorbar \grph_steps_one_colorbar
129        \position(0,0){\box\scratchbox}%
130        \linewidth\onepoint
131        \setuppositioning
132          [\c!unit=pt,%
133           \c!xscale=\withoutpt\the\d_grph_steps_x,%
134           \c!yscale=\withoutpt\the\d_grph_steps_y,%
135           \c!factor=1]%
136        \ignorespaces#4%
137        \enforced\let\referring\grph_steps_two_referring
138        \enforced\let\marking  \grph_steps_two_marking
139        \enforced\let\remark   \grph_steps_two_remark
140        \enforced\let\colorbar \grph_steps_two_colorbar
141        \ignorespaces#4\removeunwantedspaces % or just grab #4 unspaced
142      \stoppositioning
143      \ifvoid\b_grph_steps_colorbar\else\box\b_grph_steps_colorbar\fi}} % not really needed
144
145\protected\def\grph_steps_one_referring(#1,#2)#*(#3,#4)#*[#5]%
146  {\position(#1,#2){\grph_steps_goto(#3,#4){\externalfigureparameter\c!frames}[#5]}}
147
148\protected\def\grph_steps_one_marking(#1,#2)#*(#3,#4)#*[#5]%
149  {\position(#1,#2){\grph_steps_this_is(#3,#4){\externalfigureparameter\c!frames}[#5]}}
150
151\protected\def\grph_steps_one_remark   (#-,#-)#*(#-,#-)#*[#-]#*#:#-{}% (x,y)(h,b)[...]{tekst}
152\protected\def\grph_steps_one_colorbar #-[#-]{}
153\protected\def\grph_steps_two_referring(#-,#-)#*(#-,#-)#*[#-]{}
154
155\let\grph_steps_two_marking\grph_steps_two_referring
156
157\protected\def\grph_steps_two_remark
158  {\grph_steps_comment\v!no}
159
160\protected\def\grph_steps_two_colorbar#1[#2]
161  {\begingroup
162   \global\setbox\b_grph_steps_colorbar\vpack % \vbox ?
163     {\forgetall
164      \processcommalist[#2]\grph_colorbar_make_step}%
165   \global\setbox\b_grph_steps_colorbar\vpack
166     {\hskip2\emwidth\box\b_grph_steps_colorbar}%
167   \global\wd\b_grph_steps_colorbar\zeropoint
168   \endgroup}
169
170\protected\def\grph_colorbar_make_step#1%
171  {\blackrule[\c!color=#1,\c!width=2\emwidth,\c!height=\exheight,\c!depth=\zeropoint]%
172   \endgraf}
173
174\permanent\protected\def\startfigure[#1]#*[#2]#*[#3]#:#4\stopfigure
175  {\doifelse{\externalfigureparameter\c!option}\v!test
176     {\grph_steps_test_figure{#1}{#2}{#3}{#4}%
177      \letexternalfigureparameter\c!frames\v!on}%
178     {\letexternalfigureparameter\c!frames\v!off}%
179   \setvalue{\??externalfigureinstance#1}%
180     {\grph_steps_place_figure{#1}{#2}{#3}{#4}}}
181
182\permanent\protected\lettonothing\stopfigure
183
184\ifdefined\referring \else \let\referring\relax \fi
185\ifdefined\marking   \else \let\marking  \relax \fi
186\ifdefined\remark    \else \let\remark   \relax \fi
187\ifdefined\colorbar  \else \let\colorbar \relax \fi
188
189\protected\def\grph_steps_test_figure#1#2#3#4%
190  {\begingroup
191     \setbox\scratchbox\hpack
192       {\useexternalfigure[\s!dummy][#2][\c!wfactor=\v!max]%
193        \externalfigure[\s!dummy]}%
194     \let\referring\grph_steps_three_referring
195     \let\marking  \grph_steps_three_marking
196     \let\remark   \grph_steps_three_remark
197     \let\colorbar \grph_steps_three_colorbar
198     \c_grph_steps_reference\zerocount
199     \setbox\scratchboxone\vpack
200       {\hsize240\points
201        \startpositioning
202          \grph_steps_calculate
203          \position(0,0)
204            {\box\scratchbox}%
205          \position(0,0)
206            {\basegrid
207               [\c!nx=\externalfigureparameter\c!xmax,%
208                \c!dx=\withoutpt\the\d_grph_steps_x,%
209                \c!ny=\externalfigureparameter\c!ymax,%
210                \c!dy=\withoutpt\the\d_grph_steps_y,%
211                \c!xstep=1,%
212                \c!ystep=1,%
213                \c!scale=1,%
214                \c!offset=\v!no,%
215                \c!unit=pt]}%
216          \setuppositioning
217            [\c!unit=pt,%
218             \c!xscale=\withoutpt\the\d_grph_steps_x,%
219             \c!yscale=\withoutpt\the\d_grph_steps_y,%
220             \c!factor=1]%
221          \linewidth\onepoint
222          \ignorespaces#4\removeunwantedspaces % or just grab #4 unspaced
223        \stoppositioning
224        \vfill}%
225     \c_grph_steps_reference\zerocount
226     \enforced\let\referring\grph_steps_four_referring
227     \enforced\let\marking  \grph_steps_four_marking
228     \enforced\let\remark   \grph_steps_four_remark
229     \enforced\let\colorbar \grph_steps_four_colorbar
230     \setbox\scratchboxtwo\vbox % \vpack ?
231       {\forgetall
232        \begingroup
233        \tfa\doifelsenothing{#1}{#2}{#1}%
234        \endgroup
235        \blank
236        \tfxx#4%
237        \vfilll}%
238     \ifdim\ht\scratchboxone>\ht\scratchboxtwo
239       \ht\scratchboxtwo\ht\scratchboxone
240     \else
241       \ht\scratchboxone\ht\scratchboxtwo
242     \fi
243     \hpack
244       {\hskip3\emwidth
245        \tpack{\vskip12\points\box\scratchboxone\vskip6\points}%
246        \tpack{\vskip12\points\box\scratchboxtwo\vskip6\points}}%
247   \endgroup}
248
249\definesystemconstant{vwa}
250\definesystemconstant{vwb}
251
252\tolerant\protected\def\grph_steps_three_referring(#1,#2)#*(#3,#4)#*[#5]%
253  {\advance\c_grph_steps_reference\plusone
254   \position(#1,#2)
255     {\hbox{\the\c_grph_steps_reference}}%
256   \position(#1,#2)
257     {\gotosomeinternal\s!vwb{#5}\realfolio
258        {\grph_steps_marker(#3,#4)\v!on{\thisissomeinternal\s!vwa{#5}}}}}
259
260\protected\def\grph_steps_three_remark
261  {\grph_steps_comment\v!yes}
262
263\let\grph_steps_three_marking \grph_steps_three_referring
264\let\grph_steps_three_colorbar\grph_steps_one_colorbar
265
266\protected\def\grph_steps_four_referring{\grph_steps_text{\normalstartimath\rightarrow\normalstopimath}}
267\protected\def\grph_steps_four_marking  {\grph_steps_text{\normalstartimath\leftarrow \normalstopimath}}
268
269\let\grph_steps_four_remark  \grph_steps_one_remark
270\let\grph_steps_four_colorbar\grph_steps_one_colorbar
271
272% Helpers:
273
274\def\grph_steps_calculate
275  {\ifnum0\externalfigureparameter\c!xmax=\zerocount
276     \ifnum0\externalfigureparameter\c!ymax=\zerocount
277       \setexternalfigureparameter\c!ymax{24}%
278     \fi
279     \d_grph_steps_y\figureheight
280     \divide\d_grph_steps_y \externalfigureparameter\c!ymax
281     \d_grph_steps_x\d_grph_steps_y
282     \scratchdimen\figurewidth
283     \advance\scratchdimen\d_grph_steps_y
284     \divide \scratchdimen\d_grph_steps_y
285     \setexternalfigureparameter\c!xmax{\number\scratchdimen}%
286   \else
287     \d_grph_steps_x\figurewidth  \divide\d_grph_steps_x \externalfigureparameter\c!xmax\relax
288     \d_grph_steps_y\figureheight \divide\d_grph_steps_y \externalfigureparameter\c!ymax\relax
289   \fi}
290
291\tolerant\def\grph_steps_comment#1(#2,#3)#*(#4,#5)#*[#6]#*#:#7% {kader}(x,y)(h,b)[...]{tekst}
292  {\position(#2,#3)%
293     {\setnostrut
294      \framed[\c!width=#4\d_grph_steps_x,\c!height=#5\d_grph_steps_y,\c!offset=\v!none,\c!frame=#1,#6]{#7}}}
295
296% \def\grph_steps_figure#1%
297%   {\position(0,0){\getvalue{#1}}}
298
299\def\grph_steps_goto(#1,#2)#3[#4]%    (h,b)kader[ref]
300  {\gotobox{\vpack{\grph_steps_area(#1,#2)#3{}}}[#4]}
301
302\tolerant\def\grph_steps_text#1(#2,#3)#*(#4,#5)#*[#6]%
303  {\advance\c_grph_steps_reference\plusone
304   \hbox % \hpack ?
305     {\quad
306      \thisissomeinternal\s!vwb{#6}%
307      \gotosomeinternal\s!vwa{#6}\realfolio{\hbox to 1.5\emwidth{\the\c_grph_steps_reference\hfill}}%
308      \quad#1 (#2,#3) (#4,#5) [#6]\hfill}%
309   \endgraf}
310
311\def\grph_steps_this_is(#1,#2)#3[#4]%
312  {\grph_steps_area(#1,#2){#3}{\dosetdirectpagereference{#4}}}
313
314\def\grph_steps_area(#1,#2)#3#4% (h,b){kader}{tekst}
315  {\bgroup
316   \setnostrut
317   \framed[\c!width=#1\d_grph_steps_x,\c!height=#2\d_grph_steps_y,\c!offset=\zeropoint,\c!frame=#3]{#4}%
318   \egroup}
319
320\def\grph_steps_marker(#1,#2)#3#4% (h,b){kader}{tekst}
321  {\framed[\c!width=#1\d_grph_steps_x,\c!height=#2\d_grph_steps_y,\c!offset=\v!none,\c!frame=#3]{#4}}
322
323\protect \endinput
324
325% \startbuffer
326% \definecolor [blue]   [c=1,m=.38,y=0,k=.64]
327% \definecolor [yellow] [c=0,m=.28,y=1,k=.06]
328%
329% \definespotcolor [blue-100]   [blue]   [p=1]
330% \definespotcolor [yellow-100] [yellow] [p=1]
331%
332% \definemultitonecolor [combicolor]   [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1]
333%
334% \definemultitonecolor [combicolor-b] [blue=1]   [c=1,m=.38,y=0,k=.64] % force multitone
335% \definemultitonecolor [combicolor-y] [yellow=1] [c=0,m=.28,y=1,k=.06] % force multitone
336%
337% \useexternalfigure[demo-a][mill.png]     [object=no,width=.2\textwidth]
338% \useexternalfigure[demo-b][hacker-bw.jpg][object=no,width=.2\textwidth]
339%
340% \startbaselinecorrection \startcombination[4*1]
341%   {\externalfigure[demo-a]}                     {no color}
342%   {\externalfigure[demo-a][color=combicolor]}   {indexed duotone}
343%   {\externalfigure[demo-a][color=combicolor-b]} {spot color}
344%   {\externalfigure[demo-a][color=combicolor-y]} {spot color}
345% \stopcombination \stopbaselinecorrection
346%
347% \startbaselinecorrection \startcombination[4*1]
348%   {\externalfigure[demo-b]}                     {no color}
349%   {\externalfigure[demo-b][color=combicolor]}   {indexed duotone}
350%   {\externalfigure[demo-b][color=combicolor-b]} {spot color}
351%   {\externalfigure[demo-b][color=combicolor-y]} {spot color}
352% \stopcombination \stopbaselinecorrection
353%
354% \startbaselinecorrection \startcombination[4*1]
355%   {\externalfigure[demo-a]}                     {no color}
356%   {\externalfigure[demo-a][color=combicolor]}   {indexed duotone}
357%   {\externalfigure[demo-a][color=blue-100]}     {spot color}
358%   {\externalfigure[demo-a][color=yellow-100]}   {spot color}
359% \stopcombination \stopbaselinecorrection
360%
361% \startbaselinecorrection \startcombination[4*1]
362%   {\externalfigure[demo-b]}                     {no color}
363%   {\externalfigure[demo-b][color=combicolor]}   {indexed duotone}
364%   {\externalfigure[demo-b][color=blue-100]}     {spot color}
365%   {\externalfigure[demo-b][color=yellow-100]}   {spot color}
366% \stopcombination \stopbaselinecorrection
367% \stopbuffer
368%
369% \getbuffer \typebuffer
370