summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/grph-fig.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/grph-fig.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/base/grph-fig.mkiv160
1 files changed, 137 insertions, 23 deletions
diff --git a/Master/texmf-dist/tex/context/base/grph-fig.mkiv b/Master/texmf-dist/tex/context/base/grph-fig.mkiv
index 415a2aa7623..e10dc0a32c6 100644
--- a/Master/texmf-dist/tex/context/base/grph-fig.mkiv
+++ b/Master/texmf-dist/tex/context/base/grph-fig.mkiv
@@ -15,7 +15,7 @@
\unprotect
-\def\setupexternalfigures
+\unexpanded\def\setupexternalfigures
{\dosingleempty\dosetupexternalfigures}
\def\dosetupexternalfigures[#1]%
@@ -87,7 +87,7 @@
%
% \defineexternalfigure[name][settings]
-\def\defineexternalfigure
+\unexpanded\def\defineexternalfigure
{\dodoubleargument\dodefineexternalfigure}
\def\dodefineexternalfigure[#1][#2]%
@@ -130,19 +130,99 @@
\def\useexternalfigure
{\doquadrupleempty\douseexternalfigure}
+% \def\douseexternalfigure[#1][#2][#3][#4]%
+% {\doifelsenothing{#1}
+% {\doifsomething{#2}
+% {\doifassignmentelse{#3}
+% {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][#3][#4]}}
+% {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][][#4]}}}}
+% {\doifelsenothing{#2}
+% {\doifassignmentelse{#3}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][][#3]}}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][#3][#4]}}}
+% {\doifassignmentelse{#3}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][][#3]}}
+% {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][#3][#4]}}}}}
+
\def\douseexternalfigure[#1][#2][#3][#4]%
{\doifelsenothing{#1}
{\doifsomething{#2}
{\doifassignmentelse{#3}
- {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][#3][#4]}}
- {\setvalue{\??ef\??ef#2}{\doplaceexternalfigure[#2][#2][][#4]}}}}
+ {\dodouseexternalfigure{#2}{#2}{#3}{#4}}
+ {\dodouseexternalfigure{#2}{#2}{}{#4}}}}
{\doifelsenothing{#2}
{\doifassignmentelse{#3}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][][#3]}}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#1][#3][#4]}}}
+ {\dodouseexternalfigure{#1}{#1}{}{#3}}
+ {\dodouseexternalfigure{#1}{#1}{#3}{#4}}}
{\doifassignmentelse{#3}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][][#3]}}
- {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][#3][#4]}}}}}
+ {\dodouseexternalfigure{#1}{#2}{}{#3}}
+ {\dodouseexternalfigure{#1}{#2}{#3}{#4}}}}}
+
+\def\dodouseexternalfigure#1#2#3#4%
+ {\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[#1][#2][#3][#4]}%
+ \doanalyseexternalfigurecollection[#2][#4]}
+
+\newconditional\inexternalfigurecollection
+\newdimen\xexternalfigurecollectionminwidth
+\newdimen\xexternalfigurecollectionmaxwidth
+\newdimen\xexternalfigurecollectionminheight
+\newdimen\xexternalfigurecollectionmaxheight
+
+\def\doanalyseexternalfigurecollection[#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
+% \bTABLE
+% \bTR
+% \bTD \externalfigure[cow] [height=\externalfigurecollectionmaxheight{name}] \eTD
+% \bTD \externalfigure[mill][height=\externalfigurecollectionmaxheight{name}] \eTD
+% \eTR
+% \eTABLE
+% \stoptext
\def\dosetefparameters#1#2#3% parent_id use_settings current_settings
{\doifelsenothing{#1} % inherit from parent
@@ -173,7 +253,7 @@
\long\def\resourcecomment#1%
{\long\gdef\currentresourcecomment{#1}}
-\long\def\startresourcecomment#1\stopresourcecomment
+\long\unexpanded\def\startresourcecomment#1\stopresourcecomment
{\long\gdef\currentresourcecomment{#1}}
\let\currentresourcecomment\empty
@@ -290,7 +370,7 @@
{\hskip2em\box\colorbarbox}%
\global\wd\colorbarbox\zeropoint}
-\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]%
+\unexpanded\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]%
{\hbox
{\setbox0\hbox
{\useexternalfigure[\s!dummy][#2][#3,#5]%
@@ -402,11 +482,13 @@
\long\def\dostartfigure#1%
{\dotripleargument\dodostartfigure#1\stopfigure}
-\def\startfigure
+\unexpanded\def\startfigure
{\grabuntil{\e!stop\v!figure}\dostartfigure}
%D NEW: used in styledesign manual
+% beware in mkiv we don't have the typeset- prefix
+%
% \setbuffer[typeset-b]\endbuffer
% \setbuffer[typeset-a]\endbuffer
%
@@ -431,32 +513,64 @@
\dodotypesetbuffer[\jobname][]
\fi\fi}
-\def\dodotypesetbuffer[#1][#2]% beware: this will mix up the mp graphics
+% \def\dodotypesetbuffer[#1][#2]%
+% {\bgroup
+% \global\advance\noftypesetbuffers\plusone
+% \edef\bufferfilename{\jobname-buffer-\the\noftypesetbuffers}%
+% \doifmode{*\v!first}
+% {\ctxlua{buffers.save("\bufferfilename.tmp","#1",true)}%
+% \executesystemcommand{context \bufferfilename.tmp}}%
+% \externalfigure[\bufferfilename.pdf][#2]%
+% \egroup}
+
+\def\dodotypesetbuffer[#1][#2]%
{\bgroup
\global\advance\noftypesetbuffers\plusone
\edef\bufferfilename{\jobname-buffer-\the\noftypesetbuffers}%
- \ctxlua{buffers.save("\bufferfilename.tmp","#1",true)}%
- \executesystemcommand{context \bufferfilename.tmp}%
+ \ctxlua{buffers.run("\bufferfilename.tmp","#1",true)}%
\externalfigure[\bufferfilename.pdf][#2]%
\egroup}
+
+\def\dodotypesetbufferindeed#1%
+ {}
% for me only (manuals and such)
+%
+% \definetypesetting [name] [options] [settings-a]
+%
+% \typesetfile [name] [file] [settings-b]
+% \typesetfile [file] [options] [settings-b]
+% \typesetfile [file] [settings-b]
+% \typesetfile [file]
+%
+% \enabletrackers[files.run]
+% \starttext
+% \typesetfile[oepsoeps.tex][width=10cm,frame=on]
+% \stoptext
\definesystemvariable{tz}
-\def\definetypesetting{\dotripleempty\dodefinetypesetting}
+\unexpanded\def\definetypesetting{\dotripleempty\dodefinetypesetting}
\def\typesetfile {\dotripleempty\dotypesetfile}
-\def\dodefinetypesetting[#1][#2][#3]%
- {\doifsomething{#1}{\setvalue{\??tz#1}{\dodotypesetfile{#2}{#3}}}}
+\unexpanded\def\definetypesetting{\dotripleempty\dodefinetypesetting}
+\def\typesetfile {\dotripleempty\dotypesetfile}
-\def\dotypesetfile[#1][#2][#3]%
- {\executeifdefined{\??tz#1}\gobbletwoarguments{#2}{#3}}
+\def\dodefinetypesetting[#1][#2][#3]% <name> options settings-a
+ {\doifsomething{#1}{\setvalue{\??tz#1}{\dodotypesetfile{#2}{#3}}}}
-\def\dodotypesetfile#1#2#3#4% args settings file settings
- {\doifmode{*\v!first}{\executesystemcommand{texmfstart texexec.pl --batch --pdf #1 #3}}%
- \doglobal\beforesplitstring#3\at.\to\typesetfilename
- \externalfigure[\typesetfilename.pdf][#2,#4]}
+\def\dotypesetfile[#1][#2][#3]% <name> filename settings-b | filename options settings
+ {\ifcsname\??tz#1\endcsname
+ \csname\??tz#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(jobfiles.run("#3","#1"))}}%
+ \expanded{\externalfigure[\typesetfilename]}[#2,#4]}
\setupexternalfigures
[\c!option=,