summaryrefslogtreecommitdiff
path: root/tex/context/base/grph-fig.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/grph-fig.mkiv')
-rw-r--r--tex/context/base/grph-fig.mkiv729
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
+