diff options
Diffstat (limited to 'tex/context/base/grph-inc.mkiv')
-rw-r--r-- | tex/context/base/grph-inc.mkiv | 302 |
1 files changed, 187 insertions, 115 deletions
diff --git a/tex/context/base/grph-inc.mkiv b/tex/context/base/grph-inc.mkiv index cc3989491..32fba6c04 100644 --- a/tex/context/base/grph-inc.mkiv +++ b/tex/context/base/grph-inc.mkiv @@ -11,6 +11,8 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +% todo: messages + \writestatus{loading}{ConTeXt Graphic Macros / Figure Inclusion} \registerctxluafile{grph-inc}{1.001} @@ -30,11 +32,13 @@ \ifdefined\dotagfigure \else \let\dotagfigure\relax \fi -\installcorenamespace{externalfigures} +\installcorenamespace{externalfigure} \installcorenamespace{externalfigureinstance} \installcorenamespace{externalfigurecollection} -\installframedcommandhandler \??externalfigures {externalfigures} \??externalfigures +\installframedcommandhandler \??externalfigure {externalfigure} \??externalfigure + +\let\setupexternalfigures\setupexternalfigure \setupexternalfigures[% we really need the defaults \c!method =, @@ -60,8 +64,8 @@ \c!hfactor =, \c!wfactor =, \c!factor =, - \c!maxwidth =\externalfiguresparameter\c!width, - \c!maxheight =\externalfiguresparameter\c!height, + \c!maxwidth =\externalfigureparameter\c!width, + \c!maxheight =\externalfigureparameter\c!height, \c!xscale =, \c!yscale =, \c!scale =, @@ -137,93 +141,179 @@ % % \defineexternalfigure[name][settings] -\unexpanded\def\defineexternalfigure - {\dodoubleargument\grph_include_define} +%D Defining is persistent, i.e.\ when you redefine an instance, +%D the already set parameters need to be set again or otherwise +%D the old values will be used. + +\newconditional\c_grph_include_trace_inheritance + +\installtextracker + {graphics.inheritance} + {\settrue \c_grph_include_trace_inheritance} + {\setfalse\c_grph_include_trace_inheritance} + +\installcorenamespace{externalfiguredefinition} + +% \unexpanded\def\defineexternalfigure +% {\dodoubleargument\grph_include_define} +% +% \def\grph_include_define[#1][#2]% +% {\setvalue{\??externalfiguredefinition#1}{\setupcurrentexternalfigure[#2]}} -\def\grph_include_define[#1][#2]% - {\setvalue{\??externalfigureinstance#1}{\grph_include_use[#1][][][#2]}} +\let\defineexternalfigures\defineexternalfigure -\def\useexternalfigure +\unexpanded\def\useexternalfigure {\doquadrupleempty\grph_include_use} +% label file parent settings +% label file settings +% label file parent + \def\grph_include_use[#1][#2][#3][#4]% {\doifelsenothing{#1} {\doifsomething{#2} {\doifassignmentelse{#3} {\grph_include_use_indeed{#2}{#2}{#3}{#4}} - {\grph_include_use_indeed{#2}{#2}{}{#4}}}} + {\grph_include_use_indeed{#2}{#2}\empty{#4}}}} {\doifelsenothing{#2} {\doifassignmentelse{#3} - {\grph_include_use_indeed{#1}{#1}{}{#3}} + {\grph_include_use_indeed{#1}{#1}\empty{#3}} {\grph_include_use_indeed{#1}{#1}{#3}{#4}}} {\doifassignmentelse{#3} - {\grph_include_use_indeed{#1}{#2}{}{#3}} + {\grph_include_use_indeed{#1}{#2}\empty{#3}} {\grph_include_use_indeed{#1}{#2}{#3}{#4}}}}} \def\grph_include_use_indeed#1#2#3#4% - {\setvalue{\??externalfigureinstance#1}{\grph_include_place[#1][#2][#3][#4]}% + {\setvalue{\??externalfigureinstance#1}{\grph_include_setup{#2}{#3}{#4}}% \grph_include_analyze_collection[#2][#4]} -\def\grph_include_place[#1][#2][#3][#4][#5]% - {\doifsomething{#2}% catches \defineexternalfigure dummies - {\ifcsname\??externalfigureinstance#2\endcsname - \doifelse{#1}{#2} - {\grph_include_place_indeed[#1][#2][#3][#4][#5]} - {\csname\??externalfigureinstance#2\endcsname[#5]}% - \else - \grph_include_place_indeed[#1][#2][#3][#4][#5]% - \fi}} +% inclusion -\def\grph_include_place_indeed[#1][#2][#3][#4][#5]% - {\bgroup - \advance\c_grph_include_nesting\plusone - \edef\currentexternalfigures{\the\c_grph_include_nesting}% - \checkexternalfiguresparent % each inherits from the root - % - \dostarttagged\t!image\empty - % +\unexpanded\def\externalfigure + {\dotripleempty\grph_include_figure} + +\def\grph_include_figure[#1][#2][#3]% + {\docheckassignment{#2}% + \ifassignment + \grph_include_place[#1][][#2]% + \else + \grph_include_place[#1][#2][#3]% + \fi} + +% todo: chain them + +\def\grph_include_setup#1#2#3% name parent settings + {\edef\m_grph_include_name {#1}% + \edef\m_grph_include_parent{#2}% + \ifx\m_grph_include_name\empty \else + \let\p_grph_include_name\m_grph_include_name + \fi + \ifx\m_grph_include_parent\empty \else + \grph_include_inherit_from_parent\m_grph_include_parent + \fi + \setupcurrentexternalfigure[#3]} + +% \def\grph_include_inherit_from_parent#1% +% {\ifcsname\??externalfiguredefinition#1\endcsname +% \ifconditional\c_grph_include_trace_inheritance\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from definition: #1}\fi +% \csname\??externalfiguredefinition#1\endcsname +% \fi +% \ifcsname\??externalfigureinstance#1\endcsname +% \ifconditional\c_grph_include_trace_inheritance\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from instance: #1}\fi +% \csname\??externalfigureinstance#1\endcsname +% \fi} + +\def\grph_include_inherit_from_parent#1% + {%\ifcsname\??externalfiguredefinition#1\endcsname + % \ifconditional\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from definition: #1}\fi + % \csname\??externalfiguredefinition#1\endcsname + %\fi + \ifcsname\??externalfigure#1:\s!parent\endcsname + \let\currentexternalfigure#1% + \fi + \ifcsname\??externalfigureinstance#1\endcsname + \ifconditional\c_grph_include_trace_inheritance\writestatus\m!figures{inheriting from instance: #1}\fi + \csname\??externalfigureinstance#1\endcsname + \fi} + +\newtoks\t_grph_include_local_settings + +\appendtoks \let\textunderscore\letterunderscore % {\string _} % space needed as _ is now letter in unprotected mode (probably no longer needed) % \dontcomplain \restorecatcodes \forgetall +\to \t_grph_include_local_settings + +\def\grph_include_place_inherit + {\ifconditional\c_grph_include_trace_inheritance + \writestatus\m!figures{label: \p_grph_include_label, name: \p_grph_include_name, parent: \p_grph_include_parent}% + \fi + \ifx\p_grph_include_parent\empty + % nothing to be done + \else\ifx\p_grph_include_parent\p_grph_include_label + % redundant + \else + \grph_include_inherit_from_parent\p_grph_include_parent + \fi\fi + \ifx\p_grph_include_label\empty + % nothing to be done + \else + \grph_include_inherit_from_parent\p_grph_include_label + \fi} + +\def\grph_include_place[#1][#2][#3]% [label][file][settings] | [file][settings] | [file][parent][settings] + {\bgroup + \advance\c_grph_include_nesting\plusone + \edef\currentexternalfigure{\the\c_grph_include_nesting}% + \checkexternalfigureparent % each inherits from the root % \the\everyexternalfigureresets % - \doifelsenothing{#3} % inherit from parent ... needs checking - {\setupcurrentexternalfigures[#4,#5]} - {\ifcsname\??externalfigureinstance#3\endcsname - \pushmacro\grph_include_place - \def\grph_include_place[##1][##2][##3][##4]{\setupcurrentexternalfigures[##4,#4,#5]}% - \csname\??externalfigureinstance#3\endcsname - \popmacro\grph_include_place - \else - \setupcurrentexternalfigures[#4,#5]% - \fi}% + \edef\p_grph_include_label{#1}% + \let\p_grph_include_name\p_grph_include_label + \docheckassignment{#2}% + \ifassignment + % [label] [settings] + \let\p_grph_include_parent\p_grph_include_label + \grph_include_place_inherit + \setupcurrentexternalfigure[#2]% + \else + % [label] [parent] [settings] + \edef\p_grph_include_parent{#2}% + \ifx\p_grph_include_parent\empty + \let\p_grph_include_parent\p_grph_include_label + \fi + \grph_include_place_inherit + \setupcurrentexternalfigure[#3]% + \fi % \the\everyexternalfigurechecks % + \the\t_grph_include_local_settings + \dostarttagged\t!image\empty \ctxlua{figures.push { - name = "#2", - label = "#1", % todo: \externalfiguresparameter\c!label - page = "\externalfiguresparameter\c!page", - size = "\externalfiguresparameter\c!size", - object = "\externalfiguresparameter\c!object", - prefix = "\externalfiguresparameter\c!prefix", - cache = "\externalfiguresparameter\c!cache", - format = "\externalfiguresparameter\c!method", - preset = "\externalfiguresparameter\c!prefix", - controls = "\externalfiguresparameter\c!controls", - resources = "\externalfiguresparameter\c!resources", - preview = "\externalfiguresparameter\c!preview", - display = "\externalfiguresparameter\c!display", - mask = "\externalfiguresparameter\c!mask", - conversion = "\externalfiguresparameter\c!conversion", - resolution = "\externalfiguresparameter\c!resolution", - color = "\internalspotcolorparent{\externalfiguresparameter\c!color}", % hack is needed - ["repeat"] = "\externalfiguresparameter\c!repeat", - width = "\externalfiguresparameter\c!width", % can be crap - height = "\externalfiguresparameter\c!height", % can be crap + name = "\p_grph_include_name", + label = "\p_grph_include_label", + page = "\externalfigureparameter\c!page", + size = "\externalfigureparameter\c!size", + object = "\externalfigureparameter\c!object", + prefix = "\externalfigureparameter\c!prefix", + cache = "\externalfigureparameter\c!cache", + format = "\externalfigureparameter\c!method", + preset = "\externalfigureparameter\c!prefix", + controls = "\externalfigureparameter\c!controls", + resources = "\externalfigureparameter\c!resources", + preview = "\externalfigureparameter\c!preview", + display = "\externalfigureparameter\c!display", + mask = "\externalfigureparameter\c!mask", + conversion = "\externalfigureparameter\c!conversion", + resolution = "\externalfigureparameter\c!resolution", + color = "\internalspotcolorparent{\externalfigureparameter\c!color}", % hack is needed + ["repeat"] = "\externalfigureparameter\c!repeat", + width = "\externalfigureparameter\c!width", % can be crap + height = "\externalfigureparameter\c!height", % can be crap } }% \ctxlua{figures.identify()}% % also mode: checkpresense only @@ -249,7 +339,6 @@ \grph_include_finalize \fi \ctxlua{figures.pop()}% - % \dotagfigure \naturalvbox attr \imageattribute 2 {\box\foundexternalfigure}% \dostoptagged @@ -264,21 +353,21 @@ \definescale % some day we will inherit [\v!figure] - [\c!hfactor =\externalfiguresparameter\c!hfactor, - \c!wfactor =\externalfiguresparameter\c!wfactor, - \c!factor =\externalfiguresparameter\c!factor, - \c!maxwidth =\externalfiguresparameter\c!maxwidth , - \c!maxheight =\externalfiguresparameter\c!maxheight, - \c!equalwidth =\externalfiguresparameter\c!equalwidth , - \c!equalheight=\externalfiguresparameter\c!equalheight, - \c!xscale =\externalfiguresparameter\c!xscale, - \c!yscale =\externalfiguresparameter\c!yscale, - \c!scale =\externalfiguresparameter\c!scale, - \c!sx =\externalfiguresparameter\c!sx, - \c!sy =\externalfiguresparameter\c!sy, - \c!width =\externalfiguresparameter\c!width, - \c!height =\externalfiguresparameter\c!height, - \c!lines =\externalfiguresparameter\c!lines] + [\c!hfactor =\externalfigureparameter\c!hfactor, + \c!wfactor =\externalfigureparameter\c!wfactor, + \c!factor =\externalfigureparameter\c!factor, + \c!maxwidth =\externalfigureparameter\c!maxwidth , + \c!maxheight =\externalfigureparameter\c!maxheight, + \c!equalwidth =\externalfigureparameter\c!equalwidth , + \c!equalheight=\externalfigureparameter\c!equalheight, + \c!xscale =\externalfigureparameter\c!xscale, + \c!yscale =\externalfigureparameter\c!yscale, + \c!scale =\externalfigureparameter\c!scale, + \c!sx =\externalfigureparameter\c!sx, + \c!sy =\externalfigureparameter\c!sy, + \c!width =\externalfigureparameter\c!width, + \c!height =\externalfigureparameter\c!height, + \c!lines =\externalfigureparameter\c!lines] %D You can register additional suffixes with the following command: %D @@ -298,7 +387,7 @@ %D macro picks up the list. \unexpanded\def\setfigurepathlist - {\ctxlua{figures.setpaths("\externalfiguresparameter\c!location",\!!bs\externalfiguresparameter\c!directory\!!es)}} + {\ctxlua{figures.setpaths("\externalfigureparameter\c!location",\!!bs\externalfigureparameter\c!directory\!!es)}} %D Variables: @@ -347,23 +436,6 @@ \let\figurescalexscale \figurexscale \let\figurescaleyscale \figureyscale -%D The main command: - -\unexpanded\def\externalfigure - {\dotripleempty\grph_include_set_type_synonym} - -\def\grph_include_set_type_synonym[#1][#2][#3]% [label][file][settings] | [file][settings] | [file][parent][settings] - {\bgroup % also catched #1 == empty ... scales nicer now - \ifcsname\??externalfigureinstance#1\endcsname - \doifassignmentelse{#2} - {\csname\??externalfigureinstance#1\endcsname[#2]}% - {\csname\??externalfigureinstance#1\endcsname[#3]}% - \else - \useexternalfigure[\s!dummy][#1][#2][#3]% - \csname\??externalfigureinstance\s!dummy\endcsname[]% [] is dummy arg 5 - \fi - \egroup} - %D Calculating: % \enabletrackers[figures.conversion] @@ -388,7 +460,7 @@ \appendtoks \ctxlua { % figures.defaultwidth .. maybe a dimen some day - figures.setpaths("\externalfiguresparameter\c!location","\externalfiguresparameter\c!directory") ; + figures.setpaths("\externalfigureparameter\c!location","\externalfigureparameter\c!directory") ; figures.defaultwidth = \number\dimexpr\defaultfigurewidth \relax ; figures.defaultheight = \number\dimexpr\defaultfigureheight\relax ; figures.boxnumber = \number\foundexternalfigure ; @@ -396,22 +468,22 @@ \to \everyexternalfigureresets \appendtoks - \edef\p_option{\externalfiguresparameter\c!option}% + \edef\p_option{\externalfigureparameter\c!option}% \ifx\p_option\v!frame \setfalse\c_grph_include_skip - \letexternalfiguresparameter\c!frame\v!on + \letexternalfigureparameter\c!frame\v!on \else\ifx\p_option\v!empty \settrue\c_grph_include_skip - \letexternalfiguresparameter\c!frame\v!off + \letexternalfigureparameter\c!frame\v!off \else \setfalse\c_grph_include_skip \fi\fi % fake color in gray bitmaps, assumes that % a transparent color is used - \edef\p_foregroundcolor{\externalfiguresparameter\c!foregroundcolor}% + \edef\p_foregroundcolor{\externalfigureparameter\c!foregroundcolor}% \ifx\p_foregroundcolor\empty \else - \setexternalfiguresparameter\c!background{\v!foreground,\v!color}% - \letexternalfiguresparameter\c!backgroundcolor\p_foregroundcolor + \setexternalfigureparameter\c!background{\v!foreground,\v!color}% + \letexternalfigureparameter\c!backgroundcolor\p_foregroundcolor \fi \to \everyexternalfigurechecks @@ -458,7 +530,7 @@ \def\grph_include_finalize {\global\setbox\foundexternalfigure\vbox {\ifcase\figurestatus - \letexternalfiguresparameter\c!frame\v!on + \letexternalfigureparameter\c!frame\v!on \fi \ifconditional\c_grph_include_flush \ifconditional\c_grph_include_level % probably background @@ -484,17 +556,17 @@ \grph_include_replacement\figurelabel\figurefileoriginal{unknown}% \else \the\externalfigurepostprocessors - \edef\p_reset{\externalfiguresparameter\c!reset}% + \edef\p_reset{\externalfigureparameter\c!reset}% \ifx\p_reset\v!yes \wd\foundexternalfigure\figurewidth \ht\foundexternalfigure\figureheight \dp\foundexternalfigure\zeropoint \box\foundexternalfigure \else - \letexternalfiguresparameter\c!offset\v!overlay - \letexternalfiguresparameter\c!width \figurewidth - \letexternalfiguresparameter\c!height\figureheight - \inheritedexternalfiguresframed{\vfilll\box\foundexternalfigure}% + \letexternalfigureparameter\c!offset\v!overlay + \letexternalfigureparameter\c!width \figurewidth + \letexternalfigureparameter\c!height\figureheight + \inheritedexternalfigureframed{\vfilll\box\foundexternalfigure}% \fi \fi\fi \fi @@ -550,21 +622,21 @@ \appendtoks \setfigurepathlist % the path may be used elsewhere too (as in x-res-04) -\to \everysetupexternalfigures +\to \everysetupexternalfigure \appendtoks - \ctxcommand{setfigurelookuporder("\externalfiguresparameter\c!order")}% -\to \everysetupexternalfigures + \ctxcommand{setfigurelookuporder("\externalfigureparameter\c!order")}% +\to \everysetupexternalfigure \definecolor[missingfigurecolor][s=.8] \def\grph_include_replacement#1#2#3% {\bgroup - \letexternalfiguresparameter\c!width\figurewidth - \letexternalfiguresparameter\c!height\figureheight - \letexternalfiguresparameter\c!background\v!color - \setexternalfiguresparameter\c!backgroundcolor{missingfigurecolor}% - \inheritedexternalfiguresframed + \letexternalfigureparameter\c!width\figurewidth + \letexternalfigureparameter\c!height\figureheight + \letexternalfigureparameter\c!background\v!color + \setexternalfigureparameter\c!backgroundcolor{missingfigurecolor}% + \inheritedexternalfigureframed {\tt\tfxx \nohyphens name: \expanded{\verbatimstring{#1}}\\% file: \expanded{\verbatimstring{#2}}\\% |