grph-fig.mkxl /size: 13 Kb    last modification: 2023-12-21 09:44
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\lettonothing\lasttypesetbuffer
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]#*[#S#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  {\iftok{#1}{*}\else
54     \xdef\lasttypesetbuffer{\clf_typesetbuffer{#1}}%
55   \fi
56   \ifcase\c_grph_buffers_mode
57     % typesetonly
58   \or
59     \externalfigure[\lasttypesetbuffer][#2]%
60   \fi
61   \egroup}
62
63\tolerant\permanent\protected\def\runbuffer[#1]#*[#S#2]%
64  {\xdef\lasttypesetbuffer{\clf_runbuffer{#1}{#2}}}
65
66% For manuals and such:
67%
68% \definetypesetting [name] [options]   [settings-a]
69%
70% \typesetfile       [name] [file]      [settings-b]
71% \typesetfile       [file] [options]   [settings-b]
72% \typesetfile       [file] [settings-b]
73% \typesetfile       [file]
74%
75% \enabletrackers[files.run]
76% \starttext
77%     \typesetfile[oepsoeps.tex][width=10cm,frame=on]
78% \stoptext
79
80\installcorenamespace{typesettingfile}
81
82\tolerant\permanent\protected\def\definetypesetting[#1]#*[#2]#*[#S#3]% <name> options settings-a
83  {\ifparameter#1\or
84     \frozen\instance\protected\defcsname\??typesettingfile#1\endcsname{\grph_typesetting_process_indeed{#2}{#3}}%
85   \fi}
86
87\tolerant\permanent\protected\def\typesetfile[#1]#*[#S#2]#*[#S#3]% <name> filename settings-b | filename options settings
88  {\ifcsname\??typesettingfile#1\endcsname
89     \lastnamedcs{#2}{#3}%
90   \orelse\ifparameter#3\or
91     \grph_typesetting_process_indeed{#2}{#3}{#1}{}%
92   \orelse\ifparameter#2\or % filename settings
93     \grph_typesetting_process_indeed{}{#2}{#1}{}%
94   \fi}
95
96\defineexternalfigure[typesetting] % so one can set a frame and such
97
98\def\grph_typesetting_process_indeed#1#2#3#4% options settings-a filename settings-b
99  {\begingroup
100   \edef\m_typesetting_name{\clf_runcontextjob{#3}{#1}}%
101   \ifempty\m_typesetting_name \else
102     \normalexpanded{\externalfigure[\m_typesetting_name][typesetting]}[#2,#4]%
103   \fi
104   \endgroup}
105
106%D Whatever ... hardly used ... but historic ... needs checking ... will probably
107%D become m-fig-nn.mkiv .. or I will extend it cq. clean it up when I needed it;
108%D after all, it's documented in old manuals.
109%D
110%D \stoptyping
111%D \startfigure[mycow][t:/sources/cow.pdf][width=4cm]
112%D   % one can also use layers
113%D \stopfigure
114%D
115%D \externalfigure[mycow]
116%D \stoptyping
117
118\newinteger  \c_grph_steps_reference
119\newdimension\d_grph_steps_x
120\newdimension\d_grph_steps_y
121\newbox      \b_grph_steps_colorbar
122
123\ifdefined\referring\else \mutable\let\referring\relax \fi
124\ifdefined\marking  \else \mutable\let\marking  \relax \fi
125\ifdefined\remark   \else \mutable\let\remark   \relax \fi
126\ifdefined\colorbar \else \mutable\let\colorbar \relax \fi
127
128\tolerant\protected\def\grph_steps_place_figure#1#2#3#4#5%
129  {\hbox\bgroup
130     \setbox\scratchbox\hbox % somehow a space creeps in
131       {% we can use \nospaces\plusone
132        \useexternalfigure[\s!dummy][#2][#3,#5]%
133        \externalfigure[\s!dummy]}%
134     \setbox\scratchbox\hbox
135       {\externalfigure[#2][#3,#5]}%
136     \grph_steps_calculate
137     \startpositioning
138       \enforced\let\referring\grph_steps_one_referring
139       \enforced\let\marking  \grph_steps_one_marking
140       \enforced\let\remark   \grph_steps_one_remark
141       \enforced\let\colorbar \grph_steps_one_colorbar
142       \position(0,0){\box\scratchbox}%
143       \linewidth\onepoint
144       \setuppositioning
145         [\c!unit=pt,%
146          \c!xscale=\toscaled\d_grph_steps_x,%
147          \c!yscale=\toscaled\d_grph_steps_y,%
148          \c!factor=1]%
149       \ignorespaces#4%
150       \enforced\let\referring\grph_steps_two_referring
151       \enforced\let\marking  \grph_steps_two_marking
152       \enforced\let\remark   \grph_steps_two_remark
153       \enforced\let\colorbar \grph_steps_two_colorbar
154       \ignorespaces#4\removeunwantedspaces % or just grab #4 unspaced
155     \stoppositioning
156     \ifvoid\b_grph_steps_colorbar\else\box\b_grph_steps_colorbar\fi
157   \egroup}
158
159\protected\def\grph_steps_one_referring(#1,#2)#*(#3,#4)#*[#S#5]%
160  {\position(#1,#2){\grph_steps_goto(#3,#4){\externalfigureparameter\c!frames}[#5]}}
161
162\protected\def\grph_steps_one_marking(#1,#2)#*(#3,#4)#*[#S#5]%
163  {\position(#1,#2){\grph_steps_this_is(#3,#4){\externalfigureparameter\c!frames}[#5]}}
164
165\protected\def\grph_steps_one_remark   (#-,#-)#*(#-,#-)#*[#-]#*#:#-{}% (x,y)(h,b)[...]{tekst}
166\protected\def\grph_steps_one_colorbar #-[#-]{}
167\protected\def\grph_steps_two_referring(#-,#-)#*(#-,#-)#*[#-]{}
168
169\let\grph_steps_two_marking\grph_steps_two_referring
170
171\protected\def\grph_steps_two_remark
172  {\grph_steps_comment\v!no}
173
174\protected\def\grph_steps_two_colorbar#1[#2]
175  {\begingroup
176   \global\setbox\b_grph_steps_colorbar\vpack % \vbox ?
177     {\forgetall
178      \processcommalist[#2]\grph_colorbar_make_step}%
179   \global\setbox\b_grph_steps_colorbar\vpack
180     {\hskip2\emwidth\box\b_grph_steps_colorbar}%
181   \global\wd\b_grph_steps_colorbar\zeropoint
182   \endgroup}
183
184\protected\def\grph_colorbar_make_step#1%
185  {\blackrule[\c!color=#1,\c!width=2\emwidth,\c!height=\exheight,\c!depth=\zeropoint]%
186   \endgraf}
187
188\permanent\protected\def\startfigure[#1]#*[#2]#*[#3]#:#4\stopfigure
189  {\ifcstok{\externalfigureparameter\c!option}\v!test
190     \grph_steps_test_figure{#1}{#2}{#3}{#4}%
191     \letexternalfigureparameter\c!frames\v!on
192   \else
193     \letexternalfigureparameter\c!frames\v!off
194   \fi
195   \tolerant\defcsname\??externalfigureinstance#1\endcsname[##1]%
196     {\grph_steps_place_figure{#1}{#2}{#3}{#4}{##1}%
197     % this is a dirty hack but ok for an old macro
198     \enforced\let\figurestatus\plusone}}
199
200\permanent\protected\lettonothing\stopfigure
201
202\ifdefined\referring \else \let\referring\relax \fi
203\ifdefined\marking   \else \let\marking  \relax \fi
204\ifdefined\remark    \else \let\remark   \relax \fi
205\ifdefined\colorbar  \else \let\colorbar \relax \fi
206
207\protected\def\grph_steps_test_figure#1#2#3#4%
208  {\begingroup
209     \setbox\scratchbox\hpack
210       {\useexternalfigure[\s!dummy][#2][\c!wfactor=\v!max]%
211        \externalfigure[\s!dummy]}%
212     \let\referring\grph_steps_three_referring
213     \let\marking  \grph_steps_three_marking
214     \let\remark   \grph_steps_three_remark
215     \let\colorbar \grph_steps_three_colorbar
216     \c_grph_steps_reference\zerocount
217     \setbox\scratchboxone\vpack
218       {\hsize240\points
219        \startpositioning
220          \grph_steps_calculate
221          \position(0,0)
222            {\box\scratchbox}%
223          \position(0,0)
224            {\basegrid
225               [\c!nx=\externalfigureparameter\c!xmax,%
226                \c!dx=\toscaled\d_grph_steps_x,%
227                \c!ny=\externalfigureparameter\c!ymax,%
228                \c!dy=\toscaled\d_grph_steps_y,%
229                \c!xstep=1,%
230                \c!ystep=1,%
231                \c!scale=1,%
232                \c!offset=\v!no,%
233                \c!unit=pt]}%
234          \setuppositioning
235            [\c!unit=pt,%
236             \c!xscale=\toscaled\d_grph_steps_x,%
237             \c!yscale=\toscaled\d_grph_steps_y,%
238             \c!factor=1]%
239          \linewidth\onepoint
240          \ignorespaces#4\removeunwantedspaces % or just grab #4 unspaced
241        \stoppositioning
242        \vfill}%
243     \c_grph_steps_reference\zerocount
244     \enforced\let\referring\grph_steps_four_referring
245     \enforced\let\marking  \grph_steps_four_marking
246     \enforced\let\remark   \grph_steps_four_remark
247     \enforced\let\colorbar \grph_steps_four_colorbar
248     \setbox\scratchboxtwo\vbox % \vpack ?
249       {\forgetall
250        \begingroup
251        \tfa\ifempty{#1}#1\else#2\fi
252        \endgroup
253        \blank
254        \tfxx#4%
255        \vfilll}%
256     \ifdim\ht\scratchboxone>\ht\scratchboxtwo
257       \ht\scratchboxtwo\ht\scratchboxone
258     \else
259       \ht\scratchboxone\ht\scratchboxtwo
260     \fi
261     \hpack
262       {\hskip3\emwidth
263        \tpack{\vskip12\points\box\scratchboxone\vskip6\points}%
264        \tpack{\vskip12\points\box\scratchboxtwo\vskip6\points}}%
265   \endgroup}
266
267\definesystemconstant{vwa}
268\definesystemconstant{vwb}
269
270\tolerant\protected\def\grph_steps_three_referring(#1,#2)#*(#3,#4)#*[#5]%
271  {\advanceby\c_grph_steps_reference\plusone
272   \position(#1,#2)
273     {\hbox{\the\c_grph_steps_reference}}%
274   \position(#1,#2)
275     {\gotosomeinternal\s!vwb{#5}\realfolio
276        {\grph_steps_marker(#3,#4)\v!on{\thisissomeinternal\s!vwa{#5}}}}}
277
278\protected\def\grph_steps_three_remark
279  {\grph_steps_comment\v!yes}
280
281\let\grph_steps_three_marking \grph_steps_three_referring
282\let\grph_steps_three_colorbar\grph_steps_one_colorbar
283
284\protected\def\grph_steps_four_referring{\grph_steps_text{\normalstartimath\rightarrow\normalstopimath}}
285\protected\def\grph_steps_four_marking  {\grph_steps_text{\normalstartimath\leftarrow \normalstopimath}}
286
287\let\grph_steps_four_remark  \grph_steps_one_remark
288\let\grph_steps_four_colorbar\grph_steps_one_colorbar
289
290% Helpers:
291
292\def\grph_steps_calculate
293  {\ifnum0\externalfigureparameter\c!xmax=\zerocount
294     \ifnum0\externalfigureparameter\c!ymax=\zerocount
295       \setexternalfigureparameter\c!ymax{24}%
296     \fi
297     \d_grph_steps_y\figureheight
298     \divideby\d_grph_steps_y \externalfigureparameter\c!ymax
299     \d_grph_steps_x\d_grph_steps_y
300     \scratchdimen\figurewidth
301     \advanceby\scratchdimen\d_grph_steps_y
302     \divideby \scratchdimen\d_grph_steps_y
303     \setexternalfigureparameter\c!xmax{\number\scratchdimen}%
304   \else
305     \d_grph_steps_x\figurewidth  \divideby\d_grph_steps_x \externalfigureparameter\c!xmax\relax
306     \d_grph_steps_y\figureheight \divideby\d_grph_steps_y \externalfigureparameter\c!ymax\relax
307   \fi}
308
309\tolerant\def\grph_steps_comment#1(#2,#3)#*(#4,#5)#*[#S#6]#*#:#7% {kader}(x,y)(h,b)[...]{tekst}
310  {\position(#2,#3)%
311     {\setnostrut
312      \framed[\c!width=#4\d_grph_steps_x,\c!height=#5\d_grph_steps_y,\c!offset=\v!none,\c!frame=#1,#6]{#7}}}
313
314% \def\grph_steps_figure#1%
315%   {\position(0,0){\getvalue{#1}}}
316
317\def\grph_steps_goto(#1,#2)#3[#4]%    (h,b)kader[ref]
318  {\gotobox{\vpack{\grph_steps_area(#1,#2)#3{}}}[#4]}
319
320\tolerant\def\grph_steps_text#1(#2,#3)#*(#4,#5)#*[#6]%
321  {\advanceby\c_grph_steps_reference\plusone
322   \hbox % \hpack ?
323     {\quad
324      \thisissomeinternal\s!vwb{#6}%
325      \gotosomeinternal\s!vwa{#6}\realfolio{\hbox to 1.5\emwidth{\the\c_grph_steps_reference\hfill}}%
326      \quad#1 (#2,#3) (#4,#5) [#6]\hfill}%
327   \endgraf}
328
329\def\grph_steps_this_is(#1,#2)#3[#4]%
330  {\grph_steps_area(#1,#2){#3}{\dosetdirectpagereference{#4}}}
331
332\def\grph_steps_area(#1,#2)#3#4% (h,b){kader}{tekst}
333  {\bgroup
334   \setnostrut
335   \framed[\c!width=#1\d_grph_steps_x,\c!height=#2\d_grph_steps_y,\c!offset=\zeropoint,\c!frame=#3]{#4}%
336   \egroup}
337
338\def\grph_steps_marker(#1,#2)#3#4% (h,b){kader}{tekst}
339  {\framed[\c!width=#1\d_grph_steps_x,\c!height=#2\d_grph_steps_y,\c!offset=\v!none,\c!frame=#3]{#4}}
340
341\protect \endinput
342
343% \startbuffer
344% \definecolor [blue]   [c=1,m=.38,y=0,k=.64]
345% \definecolor [yellow] [c=0,m=.28,y=1,k=.06]
346%
347% \definespotcolor [blue-100]   [blue]   [p=1]
348% \definespotcolor [yellow-100] [yellow] [p=1]
349%
350% \definemultitonecolor [combicolor]   [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1]
351%
352% \definemultitonecolor [combicolor-b] [blue=1]   [c=1,m=.38,y=0,k=.64] % force multitone
353% \definemultitonecolor [combicolor-y] [yellow=1] [c=0,m=.28,y=1,k=.06] % force multitone
354%
355% \useexternalfigure[demo-a][mill.png]     [object=no,width=.2\textwidth]
356% \useexternalfigure[demo-b][hacker-bw.jpg][object=no,width=.2\textwidth]
357%
358% \startbaselinecorrection \startcombination[4*1]
359%   {\externalfigure[demo-a]}                     {no color}
360%   {\externalfigure[demo-a][color=combicolor]}   {indexed duotone}
361%   {\externalfigure[demo-a][color=combicolor-b]} {spot color}
362%   {\externalfigure[demo-a][color=combicolor-y]} {spot color}
363% \stopcombination \stopbaselinecorrection
364%
365% \startbaselinecorrection \startcombination[4*1]
366%   {\externalfigure[demo-b]}                     {no color}
367%   {\externalfigure[demo-b][color=combicolor]}   {indexed duotone}
368%   {\externalfigure[demo-b][color=combicolor-b]} {spot color}
369%   {\externalfigure[demo-b][color=combicolor-y]} {spot color}
370% \stopcombination \stopbaselinecorrection
371%
372% \startbaselinecorrection \startcombination[4*1]
373%   {\externalfigure[demo-a]}                     {no color}
374%   {\externalfigure[demo-a][color=combicolor]}   {indexed duotone}
375%   {\externalfigure[demo-a][color=blue-100]}     {spot color}
376%   {\externalfigure[demo-a][color=yellow-100]}   {spot color}
377% \stopcombination \stopbaselinecorrection
378%
379% \startbaselinecorrection \startcombination[4*1]
380%   {\externalfigure[demo-b]}                     {no color}
381%   {\externalfigure[demo-b][color=combicolor]}   {indexed duotone}
382%   {\externalfigure[demo-b][color=blue-100]}     {spot color}
383%   {\externalfigure[demo-b][color=yellow-100]}   {spot color}
384% \stopcombination \stopbaselinecorrection
385% \stopbuffer
386%
387% \getbuffer \typebuffer
388