diff options
Diffstat (limited to 'tex/context/base/grph-fig.mkiv')
-rw-r--r-- | tex/context/base/grph-fig.mkiv | 729 |
1 files changed, 449 insertions, 280 deletions
diff --git a/tex/context/base/grph-fig.mkiv b/tex/context/base/grph-fig.mkiv index 864bd29fb..1908e6445 100644 --- a/tex/context/base/grph-fig.mkiv +++ b/tex/context/base/grph-fig.mkiv @@ -11,198 +11,351 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +% ex => ef with proper parent + +\writestatus{loading}{ConTeXt Graphic Macros / Figure Handling} + \unprotect -%D Used in the styledesign manual: -% -% beware in mkiv we don't have the typeset- prefix -% -% \setbuffer[typeset-b]\endbuffer -% \setbuffer[typeset-a]\endbuffer -% -% todo: -% -% \appendtoks \setbuffer[typeset-b]\endbuffer\to \everystarttext -% \appendtoks \setbuffer[typeset-a]\endbuffer\to \everystarttext +\unexpanded\def\setupexternalfigures + {\dosingleempty\dosetupexternalfigures} -\newcount\c_grph_buffers_n +\def\dosetupexternalfigures[#1]% + {\getparameters[\??ef][#1]% local settings + \getparameters[\??ex][#1]% global settings + \setfigurepathlist} % the path may be used elsewhere too (as in x-res-04) -\let\m_grph_buffers_filename\empty +\presetlocalframed[\??ef] -\unexpanded\def\typesetbuffer - {\dodoubleempty\grph_buffers_typeset} +\newconditional\externalfigurelevel % true=background false=normal +\newconditional\externalfigureflush % true=place false=ignore -\def\grph_buffers_typeset[#1][#2]% beware: this will mix up the mp graphics - {\ifsecondargument - \grph_buffers_typeset_indeed[#1][#2]% - \else\iffirstargument - \doifassignmentelse{#1} - {\grph_buffers_typeset_indeed[\jobname][#1]}% - {\grph_buffers_typeset_indeed[#1][]}% - \else - \grph_buffers_typeset_indeed[\jobname][] - \fi\fi} +\setfalse\externalfigurelevel +\settrue \externalfigureflush -\def\grph_buffers_typeset_indeed[#1][#2]% we could use the via files +\installcorenamespace{externalfigures} + +\def\doplaceexternalfigure[#1][#2][#3][#4][#5]% + {\doifsomething{#2}% catches \defineexternalfigure dummies + {\ifcsname\??externalfigures#2\endcsname + \doifelse{#1}{#2} + {\dodoplaceexternalfigure[#1][#2][#3][#4][#5]} + {\getvalue{\??externalfigures#2}[#5]}% + \else + \dodoplaceexternalfigure[#1][#2][#3][#4][#5]% + \fi}} + +\ifdefined\dotagfigure \else \let\dotagfigure\relax \fi + +\def\dodoplaceexternalfigure[#1][#2][#3][#4][#5]% {\bgroup - \global\advance\c_grph_buffers_n\plusone - \edef\m_grph_buffers_filename{\jobname-buffer-\the\c_grph_buffers_n}% - \ctxcommand{runbuffer("\m_grph_buffers_filename.tmp","#1",true)}% - \externalfigure[\m_grph_buffers_filename.pdf][#2]% + \dostarttagged\t!image\empty + \let\textunderscore\letterunderscore % {\string _} % space needed as _ is now letter in unprotected mode + \calculateexternalfigure[][#1][#2][#3][#4][#5]% [] is dummy dwcomp + \dotagfigure + \naturalvbox attr \imageattribute 2 {\box\foundexternalfigure}% + \dostoptagged \egroup} -% For manuals and such: +\def\externalfigurereplacement#1#2#3% + {\normalexpanded{\localframed + [\??ef] + [\c!width=\figurewidth, + \c!height=\figureheight, + \c!background=\v!color, + \c!backgroundcolor=missingfigurecolor, + \c!frame=\@@efframe]}% we need to expand this in order to prevent a loop + {\tt\tfxx \nohyphens + name: \expanded{\verbatimstring{#1}}\\% + file: \expanded{\verbatimstring{#2}}\\% + state: \expanded{\verbatimstring{#3}}}} + +\definecolor[missingfigurecolor][s=.8] + +\def\externalfigureplaceholder#1#2#3% + {\localframed + [\??ef] + [\c!width=#2, + \c!height=#3, + \c!frame=\v!on]% + {\tt\tfxx \nohyphens + name: \expanded{\verbatimstring{#1}}\\% + state: \expanded{\verbatimstring{placeholder}}}} + +% new: more convenient/efficient than % -% \definetypesetting [name] [options] [settings-a] +% \use..[a][a][setting] \externalfigure[b][a] % -% \typesetfile [name] [file] [settings-b] -% \typesetfile [file] [options] [settings-b] -% \typesetfile [file] [settings-b] -% \typesetfile [file] +% is equivalent to: % -% \enabletrackers[files.run] +% \def..[a][setting] \externalfigure[b][a] +% +% see x-res modules for usage: +% +% \defineexternalfigure[name][settings] + +\unexpanded\def\defineexternalfigure + {\dodoubleargument\dodefineexternalfigure} + +\def\dodefineexternalfigure[#1][#2]% + {\setvalue{\??externalfigures#1}{\doplaceexternalfigure[#1][][][#2]}} + +% \useexternalfigure[alpha][koe] +% \useexternalfigure[beta] [koe] [breedte=1cm] +% \useexternalfigure[gamma][koe][alpha] +% \useexternalfigure[delta][koe][alpha][breedte=2cm] +% +% volle breedte: \externalfigure[koe] \par +% 3cm breed: \externalfigure[koe] [breedte=3cm] \par +% volle breedte: \externalfigure[alpha] \par +% 1cm breed: \externalfigure[beta] \par +% volle breedte: \externalfigure[gamma] \par +% 2cm breed: \externalfigure[delta] \par +% 4cm breed: \externalfigure[beta] [breedte=4cm] \par +% 5cm breed: \externalfigure[gamma][breedte=5cm] \par + +% \defineexternalfigure[a][width=10cm] +% \defineexternalfigure[b][width=5cm] +% \externalfigure[cow][a] +% \externalfigure[cow][b][height=8cm] + +% \useexternalfigure[x][cow][width=10cm,height=1cm] +% \externalfigure[x] +% \externalfigure[x][width=3cm] + +\def\useexternalfigure + {\doquadrupleempty\douseexternalfigure} + +% [label] [filename] +% [label] [filename] [parent] +% [label] [filename] [parent] [settings] +% [label] [filename] [settings] + +\def\useexternalfigure + {\doquadrupleempty\douseexternalfigure} + +\def\douseexternalfigure[#1][#2][#3][#4]% + {\doifelsenothing{#1} + {\doifsomething{#2} + {\doifassignmentelse{#3} + {\dodouseexternalfigure{#2}{#2}{#3}{#4}} + {\dodouseexternalfigure{#2}{#2}{}{#4}}}} + {\doifelsenothing{#2} + {\doifassignmentelse{#3} + {\dodouseexternalfigure{#1}{#1}{}{#3}} + {\dodouseexternalfigure{#1}{#1}{#3}{#4}}} + {\doifassignmentelse{#3} + {\dodouseexternalfigure{#1}{#2}{}{#3}} + {\dodouseexternalfigure{#1}{#2}{#3}{#4}}}}} + +\def\dodouseexternalfigure#1#2#3#4% + {\setvalue{\??externalfigures#1}{\doplaceexternalfigure[#1][#2][#3][#4]}% + \doanalyzeexternalfigurecollection[#2][#4]} + +\newconditional\inexternalfigurecollection +\newdimen\xexternalfigurecollectionminwidth +\newdimen\xexternalfigurecollectionmaxwidth +\newdimen\xexternalfigurecollectionminheight +\newdimen\xexternalfigurecollectionmaxheight + +\def\doanalyzeexternalfigurecollection[#1][#2]% + {\ifconditional\inexternalfigurecollection + \setfalse\inexternalfigurecollection + \getfiguredimensions[#1][#2]% + \settrue\inexternalfigurecollection + \scratchdimen\naturalfigurewidth + \ifdim\scratchdimen>\xexternalfigurecollectionmaxwidth \xexternalfigurecollectionmaxwidth \scratchdimen \fi + \ifdim\scratchdimen<\xexternalfigurecollectionminwidth \xexternalfigurecollectionminwidth \scratchdimen \fi + \scratchdimen\naturalfigureheight + \ifdim\scratchdimen>\xexternalfigurecollectionmaxheight \xexternalfigurecollectionmaxheight\scratchdimen \fi + \ifdim\scratchdimen<\xexternalfigurecollectionminheight \xexternalfigurecollectionminheight\scratchdimen \fi + \fi} + +\unexpanded\def\startexternalfigurecollection[#1]% + {\begingroup + \def\currentexternalfigurecollection{#1}% + \settrue\inexternalfigurecollection + \xexternalfigurecollectionminwidth \maxdimen + \xexternalfigurecollectionmaxwidth \zeropoint + \xexternalfigurecollectionminheight\maxdimen + \xexternalfigurecollectionmaxheight\zeropoint} + +\unexpanded\def\stopexternalfigurecollection + {\setxvalue{\??ef:c:\currentexternalfigurecollection:\c!minwidth }{\the\xexternalfigurecollectionminwidth }% + \setxvalue{\??ef:c:\currentexternalfigurecollection:\c!maxwidth }{\the\xexternalfigurecollectionmaxwidth }% + \setxvalue{\??ef:c:\currentexternalfigurecollection:\c!minheight}{\the\xexternalfigurecollectionminheight}% + \setxvalue{\??ef:c:\currentexternalfigurecollection:\c!maxheight}{\the\xexternalfigurecollectionmaxheight}% + \endgroup} + +\def\externalfigurecollectionparameter#1#2% + {\csname\ifcsname\??ef:c:#1:#2\endcsname\??ef:c:#1:#2\else\s!empty\fi\endcsname} + +\def\externalfigurecollectionminwidth #1{\externalfigurecollectionparameter{#1}\c!minwidth } +\def\externalfigurecollectionmaxwidth #1{\externalfigurecollectionparameter{#1}\c!maxwidth } +\def\externalfigurecollectionminheight#1{\externalfigurecollectionparameter{#1}\c!minheight} +\def\externalfigurecollectionmaxheight#1{\externalfigurecollectionparameter{#1}\c!maxheight} + +\let\efcparameter\externalfigurecollectionparameter +\let\efcminwidth \externalfigurecollectionminwidth +\let\efcmaxwidth \externalfigurecollectionmaxwidth +\let\efcminheight\externalfigurecollectionminheight +\let\efcmaxheight\externalfigurecollectionmaxheight + +% \startexternalfigurecollection[name] +% \useexternalfigure[cow] [cow.pdf] +% \useexternalfigure[mill][mill.png] +% \stopexternalfigurecollection % \starttext -% \typesetfile[oepsoeps.tex][width=10cm,frame=on] +% \bTABLE +% \bTR +% \bTD \externalfigure[cow] [height=\externalfigurecollectionmaxheight{name}] \eTD +% \bTD \externalfigure[mill][height=\externalfigurecollectionmaxheight{name}] \eTD +% \eTR +% \eTABLE % \stoptext -\installcorenamespace{typesettingfile} +\def\dosetefparameters#1#2#3% parent_id use_settings current_settings + {\doifelsenothing{#1} % inherit from parent + {\getparameters[\??ef][#2,#3]} + {\ifcsname\??externalfigures#1\endcsname + \pushmacro\doplaceexternalfigure + \def\doplaceexternalfigure[##1][##2][##3][##4]{\getparameters[\??ef][##4,#2,#3]}% + \getvalue{\??externalfigures#1}% + \popmacro\doplaceexternalfigure + \else + \getparameters[\??ef][#2,#3]% + \fi}} + +\unexpanded\def\externalfigure + {\dotripleempty\doexternalfigure} + +% \def\doexternalfigure[#1][#2][#3]% [label][file][settings] | [file][settings] | [file][parent][settings] +% {\bgroup +% \doifelsenothing{#1} +% {\framed[\c!width=\defaultfigurewidth,\c!height=\defaultfigureheight]{external\\figure\\no name}} +% {\ifcsname\??externalfigures#1\endcsname +% \doifassignmentelse{#2} +% {\getvalue{\??externalfigures#1}[#2]}% +% {\getvalue{\??externalfigures#1}[#3]}% +% \else +% \useexternalfigure[\s!dummy][#1][#2][#3]% +% \getvalue{\??externalfigures\s!dummy}[]% [] is dummy arg 5 +% \fi}% +% \globallet\currentresourcecomment\empty +% \egroup} + +\def\doexternalfigure[#1][#2][#3]% [label][file][settings] | [file][settings] | [file][parent][settings] + {\bgroup % also catched #1 == empty ... scales nicer now + \ifcsname\??externalfigures#1\endcsname + \doifassignmentelse{#2} + {\getvalue{\??externalfigures#1}[#2]}% + {\getvalue{\??externalfigures#1}[#3]}% + \else + \useexternalfigure[\s!dummy][#1][#2][#3]% + \getvalue{\??externalfigures\s!dummy}[]% [] is dummy arg 5 + \fi + \globallet\currentresourcecomment\empty + \egroup} -\unexpanded\def\definetypesetting{\dotripleempty\grph_typesetting_define} -\unexpanded\def\typesetfile {\dotripleempty\grph_typesetting_process} +\def\resourcecomment#1% + {\gdef\currentresourcecomment{#1}} -\def\grph_typesetting_define[#1][#2][#3]% <name> options settings-a - {\doifsomething{#1}{\setuvalue{\??typesettingfile#1}{\grph_typesetting_process_indeed{#2}{#3}}}} +\unexpanded\def\startresourcecomment#1\stopresourcecomment + {\gdef\currentresourcecomment{#1}} -\def\grph_typesetting_process[#1][#2][#3]% <name> filename settings-b | filename options settings - {\ifcsname\??typesettingfile#1\endcsname - \csname\??typesettingfile#1\endcsname{#2}{#3}% - \else\ifthirdargument % filename options settings - \grph_typesetting_process_indeed{#2}{#3}{#1}{}% - \else\ifsecondargument % filename settings - \grph_typesetting_process_indeed{}{#2}{#1}{}% - \fi\fi\fi} +\let\currentresourcecomment\empty -\def\grph_typesetting_process_indeed#1#2#3#4% options settings-a filename settings-b - {\begingroup - \edef\m_typesetting_name{\cldcontext{job.files.context("#3","#1")}}% - \ifx\m_typesetting_name\empty \else - \expanded{\externalfigure[\m_typesetting_name]}[#2,#4]% - \fi - \endgroup} +\unexpanded\def\showexternalfigures % maybe run time command is better, but no core-run, unless figs-run ... + {%\writestatus\m!system{for \string\showexternalfigures\space see \truefilename{x-res-20}.tex} + \usemodule[res-20]% + \showexternalfigures} % so for the moment we do it this way -%D Whatever ... hardly used ... but historic ... needs checking ... -%D will probably become m-fig-nn.mkiv .. or I will extend it cq. clean -%D it up when I needed it. After all, it's documented in old manuals. +\unexpanded\def\overlayfigure#1% + {\externalfigure[#1][\c!width=\overlaywidth,\c!height=\overlayheight]} -\newcount\c_grph_steps_reference -\newdimen\d_grph_steps_x -\newdimen\d_grph_steps_y -\newbox \b_grph_steps_colorbar +%D Whatever -\let\placestopfigure\relax +\newbox\colorbarbox + +\unexpanded\def\makecolorbar[#1]% + {\def\docommand##1% + {\color[##1] + {\blackrule + [\c!width=2em, + \c!height=1ex, + \c!depth=\!!zeropoint]}% + \endgraf}% + \global\setbox\colorbarbox\vbox + {\forgetall + \processcommalist[#1]\docommand}% + \global\setbox\colorbarbox\vbox + {\hskip2em\box\colorbarbox}% + \wd\colorbarbox\zeropoint} \unexpanded\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]% {\hbox - {\setbox\scratchbox\hbox + {\setbox0\hbox {\useexternalfigure[\s!dummy][#2][#3,#5]% \externalfigure[\s!dummy]}% - \grph_steps_calculate + \calculateefsteps \startpositioning - \let\referring\grph_steps_one_referring - \let\marking \grph_steps_one_marking - \let\remark \grph_steps_one_remark - \let\colorbar \grph_steps_one_colorbar - \position(0,0){\box\scratchbox}% + \def\referring(##1,##2)##3(##4,##5)##6[##7]% + {\position(##1,##2){\efgoto(##4,##5){\@@exframes}[##7]}}% + \def\marking(##1,##2)##3(##4,##5)##6[##7]% + {\position(##1,##2){\efthisis(##4,##5){\@@exframes}[##7]}}% + \def\remark{\efnocomment}% + \def\colorbar##1[##2]{}% + \position(0,0){\box0}% \linewidth\onepoint \setuppositioning [\c!unit=pt, - \c!xscale=\withoutpt\the\d_grph_steps_x, - \c!yscale=\withoutpt\the\d_grph_steps_y, + \c!xscale=\withoutpt\the\efxsteps, + \c!yscale=\withoutpt\the\efysteps, \c!factor=1]% \ignorespaces#4% - \let\referring\grph_steps_two_referring - \let\marking \grph_steps_two_marking - \let\remark \grph_steps_two_remark - \let\colorbar \grph_steps_two_colorbar + \def\referring(##1,##2)##3(##4,##5)##6[##7]% + {}% + \let\marking\referring + \def\remark{\efcomment\v!no}% + \def\colorbar##1[##2]{\makecolorbar[##2]}% \ignorespaces#4% \stoppositioning - \ifvoid\b_grph_steps_colorbar\else\box\b_grph_steps_colorbar\fi}} % not really needed - -\unexpanded\def\grph_steps_one_referring(#1,#2)#3(#4,#5)#6[#7]% - {\position(#1,#2){\grph_steps_goto(#4,#5){\externalfigureparameter\c!frames}[#7]}} - -\unexpanded\def\grph_steps_one_marking(#1,#2)#3(#4,#5)#6[#7]% - {\position(#1,#2){\grph_steps_this_is(#4,#5){\externalfigureparameter\c!frames}[#7]}} - -\unexpanded\def\grph_steps_one_remark(#1,#2)#3(#4,#5)% (x,y)(h,b)[...]{tekst} - {\def\grph_steps_no_comment_indeed[##1]##2{}% - \dosingleempty\grph_steps_no_comment_indeed} - -\unexpanded\def\grph_steps_one_colorbar#1[#2]% - {} - -\unexpanded\def\grph_steps_two_referring(#1,#2)#3(#4,#5)#6[#7]% - {} - -\let\grph_steps_two_marking\grph_steps_two_referring - -\unexpanded\def\grph_steps_two_remark - {\grph_steps_comment\v!no} - -\unexpanded\def\grph_steps_two_colorbar#1[#2] - {\begingroup - \global\setbox\b_grph_steps_colorbar\vbox - {\forgetall - \processcommalist[#2]\grph_colorbar_make_step}% - \global\setbox\b_grph_steps_colorbar\vbox - {\hskip2\emwidth\box\b_grph_steps_colorbar}% - \global\wd\b_grph_steps_colorbar\zeropoint - \endgroup} + \box\colorbarbox}} -\unexpanded\def\grph_colorbar_make_step#1% - {\blackrule[\c!color=#1,\c!width=2\emwidth,\c!height=\exheight,\c!depth=\zeropoint]% - \endgraf} - -\unexpanded\def\startfigure % could be done nicer - {\grabuntil{\e!stop\v!figure}\grph_steps_figure_process} - -\let\stopfigure\relax - -\def\grph_steps_figure_process#1% - {\dotripleargument\grph_steps_figure_process_indeed#1\stopfigure} - -\def\grph_steps_figure_process_indeed[#1][#2][#3]#4\stopfigure - {\doifelse{\externalfigureparameter\c!option}\v!test +\def\dodostartfigure[#1][#2][#3]#4\stopfigure + {\doifelse\v!test\@@exoption {\teststartfigure[#1][#2][#3]#4\teststopfigure - \letexternalfigureparameter\c!frames\v!on} - {\letexternalfigureparameter\c!frames\v!off}% - \setvalue{\??externalfigureinstance#1}% - {\dosingleempty{\placestartfigure[#1][#2][#3]#4\placestopfigure}}} + \let\@@exframes\v!on} + {\let\@@exframes\v!off}% + \setvalue{\??externalfigures#1}% + {\dosingleempty{\placestartfigure[#1][#2][#3]#4\placestopfigure}}% + }% no longer \doifundefined{#1}{\setvalue{#1}{\getexternalfigure{#1}}}} -\let\teststopfigure\relax +% De onderstaande macro mag niet zondermeer worden aangepast +% en is afgestemd op gebruik in de handleiding. -\unexpanded\def\teststartfigure[#1][#2][#3]#4\teststopfigure +\def\teststartfigure[#1][#2][#3]#4\teststopfigure% {\begingroup - \setbox\scratchbox\hbox + \setbox0\hbox {\useexternalfigure[\s!dummy][#2][\c!wfactor=\v!max]% \externalfigure[\s!dummy]}% - \let\referring\grph_steps_three_referring - \let\marking \grph_steps_three_marking - \let\remark \grph_steps_three_remark - \let\colorbar \grph_steps_three_colorbar - \c_grph_steps_reference\zerocount + \def\referring{\efmark}% + \def\marking{\efmark}% + \def\remark{\efcomment\v!yes}% + \def\colorbar##1[##2]{}% + \efreference\zerocount \setbox0\vbox - {\hsize240\points + {\hsize240pt \startpositioning - \grph_steps_calculate + \calculateefsteps \position(0,0) - {\box\scratchbox}% + {\box0}% \position(0,0) {\basegrid - [\c!nx=\externalfigureparameter\c!xmax, - \c!dx=\withoutpt\the\d_grph_steps_x, - \c!ny=\externalfigureparameter\c!ymax, - \c!dy=\withoutpt\the\d_grph_steps_y, + [\c!nx=\@@exxmax, + \c!dx=\withoutpt\the\efxsteps, + \c!ny=\@@exymax, + \c!dy=\withoutpt\the\efysteps, \c!xstep=1, \c!ystep=1, \c!scale=1, @@ -210,18 +363,18 @@ \c!unit=pt]}% \setuppositioning [\c!unit=pt, - \c!xscale=\withoutpt\the\d_grph_steps_x, - \c!yscale=\withoutpt\the\d_grph_steps_y, + \c!xscale=\withoutpt\the\efxsteps, + \c!yscale=\withoutpt\the\efysteps, \c!factor=1]% \linewidth\onepoint \ignorespaces#4\relax \stoppositioning \vfill}% - \c_grph_steps_reference\zerocount - \let\referring\grph_steps_four_referring - \let\marking \grph_steps_four_marking - \let\remark \grph_steps_four_remark - \let\colorbar \grph_steps_four_colorbar + \efreference\zerocount + \def\referring{\eftext{$\rightarrow$}}% + \def\marking{\eftext{$\leftarrow$}}% + \def\remark{\efnocomment}% + \def\colorbar##1[##2]{}% \setbox2\vbox {{\tfa\doifelsenothing{#1}{#2}{#1}} \blank @@ -233,149 +386,165 @@ \ht0\ht2 \fi \hbox - {\hskip3\emwidth - \vtop{\vskip12\points\box0\vskip6\points}% - \vtop{\vskip12\points\box2\vskip6\points}}% + {\hskip3em + \vtop{\vskip12pt\box0\vskip6pt}% + \vtop{\vskip12pt\box2\vskip6pt}}% \endgroup} -\unexpanded\def\grph_steps_three_referring(#1,#2)#3(#4,#5)#6[#7]% - {\advance\c_grph_steps_reference\plusone - \position(#1,#2) - {\hbox{\the\c_grph_steps_reference}}% - \position(#1,#2) - {\gotosomeinternal\s!vwb{#7}\realfolio - {\grph_steps_marker(#4,#5)\v!on{\thisissomeinternal\s!vwa{#7}}}}} - -\unexpanded\def\grph_steps_three_remark - {\grph_steps_comment\v!yes} +\def\dodostartfigure[#1][#2][#3]#4\stopfigure + {\doifelse\v!test\@@exoption + {\teststartfigure[#1][#2][#3]#4\teststopfigure + \let\@@exframe\v!on} + {\let\@@exframe\v!off}% + \setvalue{\??externalfigures#1}% + {\def\next{\placestartfigure[#1][#2][#3]#4\placestopfigure}% + \dosingleempty\next}% + }% no longer: \doifundefined{#1}{\setvalue{#1}{\getexternalfigure{#1}}}} -\let\grph_steps_three_marking \grph_steps_three_referring -\let\grph_steps_three_colorbar\grph_steps_one_colorbar +\long\def\dostartfigure#1% + {\dotripleargument\dodostartfigure#1\stopfigure} -\unexpanded\def\grph_steps_four_referring - {\grph_steps_text{$\rightarrow$}} +\unexpanded\def\startfigure + {\grabuntil{\e!stop\v!figure}\dostartfigure} + +%D NEW: used in styledesign manual -\unexpanded\def\grph_steps_four_marking - {\grph_steps_text{$\leftarrow$}} +% beware in mkiv we don't have the typeset- prefix +% +% \setbuffer[typeset-b]\endbuffer +% \setbuffer[typeset-a]\endbuffer +% +% todo: +% +% \appendtoks \setbuffer[typeset-b]\endbuffer\to \everystarttext +% \appendtoks \setbuffer[typeset-a]\endbuffer\to \everystarttext -\let\grph_steps_four_remark \grph_steps_one_remark -\let\grph_steps_four_colorbar\grph_steps_one_colorbar +\newcount\noftypesetbuffers -% Helpers: +\def\typesetbuffer + {\dodoubleempty\dotypesetbuffer} -\def\grph_steps_calculate - {\ifnum0\externalfigureparameter\c!xmax=\zerocount - \ifnum0\externalfigureparameter\c!ymax=\zerocount - \setexternalfigureparameter\c!ymax{24}% - \fi - \d_grph_steps_y\figureheight - \divide\d_grph_steps_y \externalfigureparameter\c!ymax - \d_grph_steps_x\d_grph_steps_y - \scratchdimen\figurewidth - \advance\scratchdimen\d_grph_steps_y - \divide \scratchdimen\d_grph_steps_y - \setexternalfigureparameter\c!xmax{\number\scratchdimen}% +\def\dotypesetbuffer[#1][#2]% beware: this will mix up the mp graphics + {\ifsecondargument + \dodotypesetbuffer[#1][#2]% + \else\iffirstargument + \doifassignmentelse{#1} + {\dodotypesetbuffer[\jobname][#1]}% + {\dodotypesetbuffer[#1][]}% \else - \d_grph_steps_x\figurewidth \divide\d_grph_steps_x \externalfigureparameter\c!xmax\relax - \d_grph_steps_y\figureheight \divide\d_grph_steps_y \externalfigureparameter\c!ymax\relax - \fi} + \dodotypesetbuffer[\jobname][] + \fi\fi} -\def\grph_steps_comment#1(#2,#3)#4(#5,#6)% {kader}(x,y)(h,b)[...]{tekst} - {\def\grph_steps_comment_indeed[##1]##2% - {\position(#2,#3)% - {\setnostrut - \framed - [\c!width=#5\d_grph_steps_x, - \c!height=#6\d_grph_steps_y, - \c!offset=\v!none, - \c!frame=#1, - ##1]% - {##2}}}% - \dosingleempty\grph_steps_comment_indeed} - -% \def\grph_steps_figure#1% -% {\position(0,0){\getvalue{#1}}} - -\def\grph_steps_goto(#1,#2)#3[#4]% (h,b)kader[ref] - {\gotobox{\vbox{\grph_steps_area(#1,#2)#3{}}}[#4]} - -\def\grph_steps_text#1(#2,#3)#4(#5,#6)#7[#8]% - {\advance\c_grph_steps_reference\plusone - \hbox - {\quad - \thisissomeinternal\s!vwb - {#8}% - \gotosomeinternal\s!vwa{#8}\realfolio - {\hbox to 1.5em{\the\c_grph_steps_reference\presetgoto\hfill}}% - \quad#1 (#2,#3) (#5,#6) [#8]\hfill}% - \endgraf} - -\def\grph_steps_this_is(#1,#2)#3[#4]% - {\grph_steps_area(#1,#2){#3}{\pagereference[#4]}} - -\def\grph_steps_area(#1,#2)#3#4% (h,b){kader}{tekst} +\def\dodotypesetbuffer[#1][#2]% {\bgroup - \setnostrut - \framed - [\c!width=#1\d_grph_steps_x, - \c!height=#2\d_grph_steps_y, - \c!offset=\zeropoint, - \c!frame=#3] - {#4}% + \global\advance\noftypesetbuffers\plusone + \edef\bufferfilename{\jobname-buffer-\the\noftypesetbuffers}% + \ctxcommand{runbuffer("\bufferfilename.tmp","#1",true)}% + \externalfigure[\bufferfilename.pdf][#2]% \egroup} -\def\grph_steps_marker(#1,#2)#3#4% (h,b){kader}{tekst} - {\framed - [\c!width=#1\d_grph_steps_x, - \c!height=#2\d_grph_steps_y, - \c!offset=\v!none, - \c!frame=#3]% - {#4}} - -\protect \endinput +\def\dodotypesetbufferindeed#1% + {} -% \startbuffer -% \definecolor [blue] [c=1,m=.38,y=0,k=.64] -% \definecolor [yellow] [c=0,m=.28,y=1,k=.06] -% -% \definespotcolor [blue-100] [blue] [p=1] -% \definespotcolor [yellow-100] [yellow] [p=1] -% -% \definemultitonecolor [combicolor] [blue=.12,yellow=.28] [c=.1,m=.1,y=.3,k=.1] +% for me only (manuals and such) % -% \definemultitonecolor [combicolor-b] [blue=1] [c=1,m=.38,y=0,k=.64] % force multitone -% \definemultitonecolor [combicolor-y] [yellow=1] [c=0,m=.28,y=1,k=.06] % force multitone -% -% \useexternalfigure[demo-a][mill.png] [object=no,width=.2\textwidth] -% \useexternalfigure[demo-b][hacker-bw.jpg][object=no,width=.2\textwidth] -% -% \startbaselinecorrection \startcombination[4*1] -% {\externalfigure[demo-a]} {no color} -% {\externalfigure[demo-a][color=combicolor]} {indexed duotone} -% {\externalfigure[demo-a][color=combicolor-b]} {spot color} -% {\externalfigure[demo-a][color=combicolor-y]} {spot color} -% \stopcombination \stopbaselinecorrection -% -% \startbaselinecorrection \startcombination[4*1] -% {\externalfigure[demo-b]} {no color} -% {\externalfigure[demo-b][color=combicolor]} {indexed duotone} -% {\externalfigure[demo-b][color=combicolor-b]} {spot color} -% {\externalfigure[demo-b][color=combicolor-y]} {spot color} -% \stopcombination \stopbaselinecorrection -% -% \startbaselinecorrection \startcombination[4*1] -% {\externalfigure[demo-a]} {no color} -% {\externalfigure[demo-a][color=combicolor]} {indexed duotone} -% {\externalfigure[demo-a][color=blue-100]} {spot color} -% {\externalfigure[demo-a][color=yellow-100]} {spot color} -% \stopcombination \stopbaselinecorrection +% \definetypesetting [name] [options] [settings-a] % -% \startbaselinecorrection \startcombination[4*1] -% {\externalfigure[demo-b]} {no color} -% {\externalfigure[demo-b][color=combicolor]} {indexed duotone} -% {\externalfigure[demo-b][color=blue-100]} {spot color} -% {\externalfigure[demo-b][color=yellow-100]} {spot color} -% \stopcombination \stopbaselinecorrection -% \stopbuffer +% \typesetfile [name] [file] [settings-b] +% \typesetfile [file] [options] [settings-b] +% \typesetfile [file] [settings-b] +% \typesetfile [file] % -% \getbuffer \typebuffer +% \enabletrackers[files.run] +% \starttext +% \typesetfile[oepsoeps.tex][width=10cm,frame=on] +% \stoptext + +\installcorenamespace{typesettingfile} + +\unexpanded\def\definetypesetting{\dotripleempty\dodefinetypesetting} +\unexpanded\def\typesetfile {\dotripleempty\dotypesetfile} + +\def\dodefinetypesetting[#1][#2][#3]% <name> options settings-a + {\doifsomething{#1}{\setvalue{\??typesettingfile#1}{\dodotypesetfile{#2}{#3}}}} + +\def\dotypesetfile[#1][#2][#3]% <name> filename settings-b | filename options settings + {\ifcsname\??typesettingfile#1\endcsname + \csname\??typesettingfile#1\endcsname{#2}{#3}% + \else\ifthirdargument % filename options settings + \dodotypesetfile{#2}{#3}{#1}{}% + \else\ifsecondargument % filename settings + \dodotypesetfile{}{#2}{#1}{}% + \fi\fi\fi} + +\def\dodotypesetfile#1#2#3#4% options settings-a filename settings-b + {\edef\typesetfilename{\ctxlua{tex.write(job.files.context("#3","#1"))}}% + \expanded{\externalfigure[\typesetfilename]}[#2,#4]} + +\setupexternalfigures + [\c!option=, + \c!object=\v!yes, % we only check for no + \c!reset=\v!no, + \c!interaction=\v!none, + \c!maxwidth=\@@efwidth, + \c!maxheight=\@@efheight, + \c!bodyfont=\bodyfontsize, + \c!directory=, + \c!radius=.5\bodyfontsize, + \c!corner=\v!rectangular, + \c!frame=\v!off, + \c!background=, % new + \c!splitcolor=\s!white, + \c!conversion=, + \c!resolution=, + \c!prefix=, + \c!cache=, +% \c!grid=, + \c!equalwidth=, + \c!equalheight=, + \c!location={\v!local,\v!global}] + +\setupexternalfigures + [\c!frames=\v!off, + \c!ymax=24, + \c!xmax=] + +\useexternalfigure + [buffer] [\jobname.buffer] [\c!object=\v!no] + +\protect \endinput + +% alternative for positioning + +% \definelayer[figure][width=\overlaywidth,height=\overlayheight] +% \defineoverlay[figure][{\directsetup{figure}\tightlayer[figure]}] + +% \setupcolors[state=start] + +% \starttext + +% \startsetups figure +% \setlayerframed[figure][preset=rightbottom,x=.25\layerwidth,y=.25\layerheight]{HERE} +% \setlayerframed[figure][preset=leftbottom, x=.15\layerwidth,y=.35\layerheight]{THERE} +% \stopsetups + +% \externalfigure[cow][background={foreground,figure},width=4cm,height=8cm] + +% \startsetups figure +% \setlayerframed[figure][preset=righttop,x=.25\layerwidth,y=.25\layerheight]{MORE} +% \setlayerframed[figure][preset=middle,foregroundcolor=green]{EVEN MORE} +% \stopsetups + +% \externalfigure[cow][background={foreground,figure},width=14cm,height=2cm] + +% \defineexternalfigure[whatever][background={foreground,figure}] + +% \startsetups figure +% \setlayerframed[figure][preset=righttop,x=.25\layerwidth,y=.25\layerheight]{\red MORE} +% \setlayerframed[figure][preset=middle,foregroundcolor=green]{EVEN MORE} +% \stopsetups + +% \externalfigure[cow][whatever][width=14cm,height=4cm] + +% \stoptext + |