summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/mult-aux.mkxl
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2020-11-06 20:46:53 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2020-11-06 20:46:53 +0100
commitd8b32263856c2f951bedec7f89adad3a412b7499 (patch)
treec95527f9a0d47bd44e498ae6b1c632fd956b6f07 /tex/context/base/mkiv/mult-aux.mkxl
parentc8e4762108bce6354ba48c34fe0b4c6f2ff6dcee (diff)
downloadcontext-d8b32263856c2f951bedec7f89adad3a412b7499.tar.gz
2020-11-06 20:26:00
Diffstat (limited to 'tex/context/base/mkiv/mult-aux.mkxl')
-rw-r--r--tex/context/base/mkiv/mult-aux.mkxl65
1 files changed, 36 insertions, 29 deletions
diff --git a/tex/context/base/mkiv/mult-aux.mkxl b/tex/context/base/mkiv/mult-aux.mkxl
index da86888c5..1b7a760cd 100644
--- a/tex/context/base/mkiv/mult-aux.mkxl
+++ b/tex/context/base/mkiv/mult-aux.mkxl
@@ -273,9 +273,8 @@
\def\mult_interfaces_detokenize{\expandafter\expandafter\expandafter\detokenize\expandafter\expandafter\expandafter}
-\protected\def\mult_interfaces_install_parameter_handler#1#2#3#4#5#6#7#8#9% inlining \csname*\endcsname is more efficient (#3 and #6 only)
- {\ifx#2\relax\mutable\let#2\empty\fi % it is hardly faster but produces less expansion tracing
- \frozen\def#3##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}%
+\protected\def\mult_interfaces_install_parameter_handler#1#2#3#4#5#6#7#8#9%
+ {\frozen\def#3##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}%
\frozen\def#4##1##2{\ifcsname##1:##2\endcsname##1:##2\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}%
\frozen\edef#5##1##2{\noexpand\ifx##1\relax\??empty\noexpand\else\noexpand#4##1{##2}\noexpand\fi}% is {} needed around ##1 ?
\frozen\def#6##1##2{\csname\ifcsname#1##1:##2\endcsname#1##1:##2\else\expandafter#5\csname#1##1:\s!parent\endcsname{##2}\fi\endcsname}%
@@ -285,7 +284,8 @@
\frozen\def#9##1##2{\expandafter\let\expandafter##1\csname\ifcsname#1#2:##2\endcsname#1#2:##2\else\expandafter#5\csname#1#2:\s!parent\endcsname{##2}\fi\endcsname}}
\permanent\protected\def\installparameterhandler#1#2%
- {\normalexpanded
+ {\mutable\letcsname current#2\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_parameter_handler
{\noexpand#1}% \??aa
\expandafter\noexpand\csname current#2\endcsname
@@ -309,8 +309,7 @@
\expandafter\noexpand\csname root#2parameter\endcsname}}
\protected\def\mult_interfaces_install_parameter_hash_handler#1#2#3#4#5#6#7#8#9%
- {\ifx#2\relax\mutable\let#2\empty\fi
- \frozen\def#3##1{#1#4{#1#2}{##1}:}% leading #1 was missing .. is this one used?
+ {\frozen\def#3##1{#1#4{#1#2}{##1}:}% leading #1 was missing .. is this one used?
\frozen\def#4##1##2{\ifcsname##1:##2\endcsname##1\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}%
\frozen\def#5##1##2{\ifx##1\relax\else#4##1{##2}\fi}%
\frozen\def#6{#1#2:}%
@@ -319,7 +318,8 @@
\frozen\protected\def#9##1{\edefcsname#1##1:\s!parent\endcsname{#1#2}}}
\permanent\protected\def\installparameterhashhandler#1#2%
- {\letcsname#2namespace\endcsname#1%
+ {\mutable\letcsname current#2\endcsname\empty
+ \letcsname#2namespace\endcsname#1%
\normalexpanded
{\mult_interfaces_install_parameter_hash_handler
{\noexpand#1}% \??aa
@@ -338,15 +338,15 @@
% \startinterface english
\protected\def\mult_interfaces_install_parameter_set_handler#1#2#3#4#5#6%
- {\ifx#2\relax\mutable\let#2\empty\fi
- \frozen\protected\def#3##1{\defcsname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate)
+ {\frozen\protected\def#3##1{\defcsname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate)
\frozen\protected\def#4##1{\edefcsname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate)
\frozen\protected\def#5##1{\letcsname#1#2:##1\endcsname}% ##1 ##2
\frozen\protected\def#6##1{\letcsname#1#2:##1\endcsname\empty}}% ##1
% \stopinterface
\permanent\protected\def\installparametersethandler#1#2%
- {\normalexpanded
+ {\mutable\letcsname current#2\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_parameter_set_handler
{\noexpand#1}% \??aa
\expandafter\noexpand\csname current#2\endcsname
@@ -390,13 +390,16 @@
\edefcsname#1#4:\s!parent\endcsname{#2}%
\fi}
-\def\mult_interfaces_chain#1#2{\ifcsname#1#2:\s!chain\endcsname\lastnamedcs\space\fi}
-\def\getparentchain #1#2{\begincsname#1#2:\s!chain\endcsname}
-\def\getcurrentparentchain#1#2{\begincsname#1#2:\s!chain\endcsname}
+ \def\mult_interfaces_chain#1#2{\ifcsname#1#2:\s!chain\endcsname\lastnamedcs\space\fi}
+\permanent\def\getparentchain #1#2{\begincsname#1#2:\s!chain\endcsname}
+\permanent\def\getcurrentparentchain#1#2{\begincsname#1#2:\s!chain\endcsname}
+
+% we could have a \setcurrent... macro and then always make them a frozen
+% but it might have a little impact on performance ... something to leave
+% to when we're done with the transition (it's kind of massive)
\protected\def\mult_interfaces_install_define_handler#1#2#3#4#5#6#7#8% why is \expanded still needed in clones
- {\ifx#4\relax\mutable\let#4\empty\fi % see \defineregister
- \newtoks#5%
+ {\newtoks#5%
\newtoks#6%
\frozen\tolerant\protected\def#2[##1]##*[##2]##*[##3]% [child][parent][settings] | [child][settings] | [child][parent] | [child]
{\let#8#4%
@@ -446,7 +449,9 @@
\let#4#8}}
\permanent\protected\def\installdefinehandler#1#2#3%
- {\normalexpanded
+ {\mutable\letcsname current#2\endcsname\empty
+ \mutable\letcsname current#2parent\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_define_handler
{\noexpand#1}% \??aa
\expandafter\noexpand\csname define#2\endcsname
@@ -458,10 +463,9 @@
\expandafter\noexpand\csname saved_defined_#2\endcsname}}
\protected\def\mult_interfaces_install_setup_handler#1#2#3#4#5#6#7#8%
- {\ifx#3\relax\mutable\let#3\empty\fi
- \protected\def#5{\mult_interfaces_get_parameters{#1#3:}}% no every ! don't change it
- \newtoks#4%
+ {\newtoks#4%
\newtoks#7%
+ \frozen\protected\def#5{\mult_interfaces_get_parameters{#1#3:}}% no every ! don't change it
\frozen\tolerant\protected\def#2[##1]##*[##2]% maybe helper
{\let#6#3%
\ifnum\lastarguments=\plustwo
@@ -479,7 +483,8 @@
\the#7}}
\permanent\protected\def\installsetuphandler#1#2%
- {\normalexpanded
+ {\mutable\letcsname current#2\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_setup_handler
{\noexpand#1}% \??aa
\expandafter\noexpand\csname setup#2\endcsname
@@ -496,15 +501,13 @@
\let\doingrootsetroot \plusfour % \setuplayout
\protected\def\mult_interfaces_install_switch_setup_handler_a#1#2#3%
- {\ifx#2\relax\mutable\let#2\empty\fi
- \frozen\protected\def#3{\mult_interfaces_get_parameters{#1#2:}}}
+ {\frozen\protected\def#3{\mult_interfaces_get_parameters{#1#2:}}}
\protected\def\mult_interfaces_install_switch_setup_handler_b#1#2#3#4#5#6#7#8#9%
{\newtoks#5%
\newconstant#2%
\newtoks#8%
\newtoks#9%
- \ifx#6\relax\let#6\empty\fi
\frozen\tolerant\protected\def#4[##1]##*[##2]% maybe helper
{\ifarguments
% \setuplayout
@@ -555,7 +558,9 @@
\the#9}}
\permanent\protected\def\installswitchsetuphandler#1#2%
- {\normalexpanded
+ {\mutable\letcsname current#2\endcsname\empty
+ \mutable\letcsname previous#2\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_switch_setup_handler_a
{\noexpand#1}% \??aa
\expandafter\noexpand\csname current#2\endcsname
@@ -572,9 +577,8 @@
\expandafter\noexpand\csname everysetup#2root\endcsname}}
\protected\def\mult_interfaces_install_auto_setup_handler#1#2#3#4#5#6#7#8%
- {\ifx#3\relax\mutable\let#3\empty\fi
+ {\newtoks#4%
\frozen\protected\def#5{\mult_interfaces_get_parameters{#1#3:}}%
- \newtoks#4%
\frozen\tolerant\protected\def#2[##1]##*[##2]##*[##3]%
{\let#7#3%
\ifarguments
@@ -602,7 +606,8 @@
\let#3#7}}
\permanent\protected\def\installautosetuphandler#1#2%
- {\normalexpanded
+ {\mutable\letcsname current#2\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_auto_setup_handler
{\noexpand#1}% \??aa
\expandafter\noexpand\csname setup#2\endcsname
@@ -668,7 +673,8 @@
\frozen\def#5##1{\begincsname#1##1\endcsname}}
\permanent\protected\def\installdirectparameterhandler#1#2%
- {\normalexpanded
+ {\mutable\letcsname current#2\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_direct_parameter_handler
{\noexpand#1}%
\expandafter\noexpand\csname current#2\endcsname
@@ -777,7 +783,8 @@
\endgroup}}
\permanent\protected\def\installactionhandler#1%
- {\normalexpanded
+ {\mutable\letcsname current#1\endcsname\empty
+ \normalexpanded
{\mult_interfaces_install_action_handler
{#1}%
\expandafter\noexpand\csname current#1\endcsname