summaryrefslogtreecommitdiff
path: root/tex/context/base/core-env.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/core-env.mkiv')
-rw-r--r--tex/context/base/core-env.mkiv211
1 files changed, 93 insertions, 118 deletions
diff --git a/tex/context/base/core-env.mkiv b/tex/context/base/core-env.mkiv
index 6217bb3c3..752eca784 100644
--- a/tex/context/base/core-env.mkiv
+++ b/tex/context/base/core-env.mkiv
@@ -62,22 +62,22 @@
\unexpanded\def\setmode#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \csname\??mode#1\endcsname\enabledmode}
+ \lastnamedcs\enabledmode}
\unexpanded\def\resetmode#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \csname\??mode#1\endcsname\disabledmode}
+ \lastnamedcs\disabledmode}
\unexpanded\def\newsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi}
\unexpanded\def\setsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
- \csname\??mode\systemmodeprefix#1\endcsname\enabledmode}
+ \lastnamedcs\enabledmode}
\unexpanded\def\resetsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
- \csname\??mode\systemmodeprefix#1\endcsname\disabledmode}
+ \lastnamedcs\disabledmode}
% \def\dosetsystemmode#1%
% {\csname\??mode\systemmodeprefix#1\endcsname\enabledmode}
@@ -117,18 +117,18 @@
\def\syst_modes_prevent_indeed#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \syst_mode_prefix\csname\??mode#1\endcsname\preventedmode}
+ \syst_mode_prefix\lastnamedcs\preventedmode}
\def\syst_modes_enable_indeed#1% we can speed it up by moving the new outside
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
\ifnum\csname\??mode#1\endcsname=\preventedmode \else
- \syst_mode_prefix\csname\??mode#1\endcsname\enabledmode
+ \syst_mode_prefix\lastnamedcs\enabledmode
\fi}
\def\syst_modes_disable_indeed#1%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
\ifnum\csname\??mode#1\endcsname=\preventedmode \else
- \syst_mode_prefix\csname\??mode#1\endcsname\disabledmode
+ \syst_mode_prefix\lastnamedcs\disabledmode
\fi}
%D If you do a lot of mode testing, it makes sense to define modes (or disable them
@@ -162,7 +162,8 @@
\def\booleanmodevalue#1%
{\ifcsname\??mode#1\endcsname
- \ifcase\csname\??mode#1\endcsname
+ %\ifcase\csname\??mode#1\endcsname
+ \ifcase\lastnamedcs
\s!false
\or
\s!true
@@ -175,36 +176,13 @@
% check macros
-% For some reason the older version had an unprotect for grabbing the
-% mode list (only) which does not really make sense any more so that
-% has been removed. One should (un)protect at the outer level instead.
-
\newconditional\c_checked_mode
% one
-% \def\syst_modes_check_indeed#1%
-% {\ifcsname\??mode#1\endcsname
-% \ifcase\csname\??mode#1\endcsname\else
-% \let\syst_modes_check_step\gobbleoneargument
-% \fi
-% \fi}
-%
-% \def\syst_modes_check#1#2#3%
-% {\let\syst_modes_check_step\syst_modes_check_indeed
-% \rawprocesscommacommand[#3]\syst_modes_check_step
-% \ifx\syst_modes_check_step\gobbleoneargument
-% \expandafter#1%
-% \else
-% \expandafter#2%
-% \fi}
-
-% modes .. twice as fast on defined modes .. we could use definers and make it even faster
-% if needed
-
\def\syst_modes_check_indeed#1%
{\ifcsname\??mode#1\endcsname
- \ifcase\csname\??mode#1\endcsname\else
+ \ifcase\lastnamedcs\else
\let\syst_modes_check_step\gobbleoneargument
\fi
\fi}
@@ -219,7 +197,7 @@
\fi}
\def\syst_modes_check_yes#1#2#3%
- {\ifcase\csname\??mode#3\endcsname
+ {\ifcase\lastnamedcs
\expandafter#2%
\or
\expandafter#1%
@@ -227,7 +205,14 @@
\expandafter#2%
\fi}
-\def\syst_modes_check#1#2#3%
+\def\syst_modes_check_lr#1#2#3%
+ {\ifcsname\??mode#3\endcsname
+ \expandafter\syst_modes_check_yes
+ \else
+ \expandafter\syst_modes_check_nop
+ \fi#1#2{#3}}
+
+\def\syst_modes_check_ss#1#2[#3]%
{\ifcsname\??mode#3\endcsname
\expandafter\syst_modes_check_yes
\else
@@ -238,7 +223,7 @@
\def\syst_modes_check_all_indeed#1%
{\ifcsname\??mode#1\endcsname
- \ifcase\csname\??mode#1\endcsname
+ \ifcase\lastnamedcs
\let\syst_modes_check_all_step\gobbleoneargument
\or
% enabled
@@ -249,7 +234,7 @@
\let\syst_modes_check_all_step\gobbleoneargument
\fi}
-\def\syst_modes_check_all#1#2#3%
+\def\syst_modes_check_all_lr#1#2#3%
{\let\syst_modes_check_all_step\syst_modes_check_all_indeed
\rawprocesscommacommand[#3]\syst_modes_check_all_step
\ifx\syst_modes_check_all_step\gobbleoneargument
@@ -258,16 +243,25 @@
\expandafter#1%
\fi}
-\unexpanded\def\doifelsemode {\syst_modes_check\firstoftwoarguments\secondoftwoarguments}
-\unexpanded\def\doifmode {\syst_modes_check\firstofoneargument\gobbleoneargument}
-\unexpanded\def\doifnotmode {\syst_modes_check\gobbleoneargument\firstofoneargument}
-\unexpanded\def\startmode [#1]{\syst_modes_check\donothing\syst_modes_stop_yes{#1}}
-\unexpanded\def\startnotmode [#1]{\syst_modes_check\syst_modes_stop_nop\donothing{#1}}
-\unexpanded\def\doifelseallmodes {\syst_modes_check_all\firstoftwoarguments\secondoftwoarguments}
-\unexpanded\def\doifallmodes {\syst_modes_check_all\firstofoneargument\gobbleoneargument}
-\unexpanded\def\doifnotallmodes {\syst_modes_check_all\gobbleoneargument\firstofoneargument}
-\unexpanded\def\startallmodes [#1]{\syst_modes_check_all\donothing\syst_modes_stop_all_yes{#1}}
-\unexpanded\def\startnotallmodes[#1]{\syst_modes_check_all\syst_modes_stop_all_nop\donothing{#1}}
+\def\syst_modes_check_all_ss#1#2[#3]%
+ {\let\syst_modes_check_all_step\syst_modes_check_all_indeed
+ \rawprocesscommacommand[#3]\syst_modes_check_all_step
+ \ifx\syst_modes_check_all_step\gobbleoneargument
+ \expandafter#2%
+ \else
+ \expandafter#1%
+ \fi}
+
+\unexpanded\def\doifelsemode {\syst_modes_check_lr\firstoftwoarguments\secondoftwoarguments}
+\unexpanded\def\doifmode {\syst_modes_check_lr\firstofoneargument\gobbleoneargument}
+\unexpanded\def\doifnotmode {\syst_modes_check_lr\gobbleoneargument\firstofoneargument}
+\unexpanded\def\startmode {\syst_modes_check_ss\donothing\syst_modes_stop_yes}
+\unexpanded\def\startnotmode {\syst_modes_check_ss\syst_modes_stop_nop\donothing}
+\unexpanded\def\doifelseallmodes{\syst_modes_check_all_lr\firstoftwoarguments\secondoftwoarguments}
+\unexpanded\def\doifallmodes {\syst_modes_check_all_lr\firstofoneargument\gobbleoneargument}
+\unexpanded\def\doifnotallmodes {\syst_modes_check_all_lr\gobbleoneargument\firstofoneargument}
+\unexpanded\def\startallmodes {\syst_modes_check_all_ss\donothing\syst_modes_stop_all_yes}
+\unexpanded\def\startnotallmodes{\syst_modes_check_all_ss\syst_modes_stop_all_nop\donothing}
\let\doifmodeelse \doifelsemode
\let\doifallmodeselse \doifelseallmodes
@@ -284,25 +278,47 @@
%D Pushing/popping:
+% \unexpanded\def\pushmode[#1]%
+% {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
+% \expandafter\edef\csname\??modestack#1\endcsname{\number\csname\??mode#1\endcsname}%
+% \expandafter\pushmacro\csname\??modestack#1\endcsname}
+%
+% \unexpanded\def\popmode[#1]%
+% {\ifcsname\??modestack#1\endcsname
+% \expandafter\popmacro\csname\??modestack#1\endcsname
+% \csname\??mode#1\endcsname\csname\??modestack#1\endcsname\relax
+% \fi}
+%
+% \def\pushsystemmode#1%
+% {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
+% \expandafter\edef\csname\??modestack\systemmodeprefix#1\endcsname{\number\csname\??mode\systemmodeprefix#1\endcsname}%
+% \expandafter\pushmacro\csname\??modestack\systemmodeprefix#1\endcsname}
+%
+% \def\popsystemmode#1%
+% {\ifcsname\??modestack\systemmodeprefix#1\endcsname
+% \expandafter\popmacro\csname\??modestack\systemmodeprefix#1\endcsname
+% \csname\??mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax
+% \fi}
+
\unexpanded\def\pushmode[#1]%
{\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
- \expandafter\edef\csname\??modestack#1\endcsname{\number\csname\??mode#1\endcsname}%
- \expandafter\pushmacro\csname\??modestack#1\endcsname}
+ \expandafter\edef\csname\??modestack#1\expandafter\endcsname\expandafter{\number\lastnamedcs}%
+ \expandafter\pushmacro\lastnamedcs}
\unexpanded\def\popmode[#1]%
{\ifcsname\??modestack#1\endcsname
- \expandafter\popmacro\csname\??modestack#1\endcsname
+ \expandafter\popmacro\lastnamedcs
\csname\??mode#1\endcsname\csname\??modestack#1\endcsname\relax
\fi}
\def\pushsystemmode#1%
{\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
- \expandafter\edef\csname\??modestack\systemmodeprefix#1\endcsname{\number\csname\??mode\systemmodeprefix#1\endcsname}%
- \expandafter\pushmacro\csname\??modestack\systemmodeprefix#1\endcsname}
+ \expandafter\edef\csname\??modestack\systemmodeprefix#1\expandafter\endcsname\expandafter{\number\lastnamedcs}%
+ \expandafter\pushmacro\lastnamedcs}
\def\popsystemmode#1%
{\ifcsname\??modestack\systemmodeprefix#1\endcsname
- \expandafter\popmacro\csname\??modestack\systemmodeprefix#1\endcsname
+ \expandafter\popmacro\lastnamedcs
\csname\??mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax
\fi}
@@ -367,7 +383,7 @@
\fi}
\def\syst_modes_set_check
- {\syst_modes_check\syst_modes_set_yes\syst_modes_set_nop\m_mode_case}
+ {\syst_modes_check_lr\syst_modes_set_yes\syst_modes_set_nop\m_mode_case}
\def\syst_modes_set_yes#1%
{\settrue\c_syst_modes_set_done
@@ -408,68 +424,17 @@
\def\syst_setups_b[#1]{\processcommacommand[#1]\syst_setups} % [..]
\def\syst_setups_c[#1]{\syst_setups{#1}} % [..]
-\letvalue{\??setup:\letterpercent}\gobbleoneargument
-
-% \def\syst_setups#1% the grid option will be extended to other main modes
-% {\csname\??setup
-% \ifgridsnapping
-% \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi\fi
-% \else
-% \ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi
-% \fi
-% \endcsname\empty} % takes one argument
+\letvalue{\??setup:\??empty}\gobbleoneargument
\def\syst_setups#1% the grid option will be extended to other main modes
{\csname\??setup
\ifgridsnapping
- \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else:\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi\fi
+ \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else:\ifcsname\??setup:#1\endcsname#1\else\??empty\fi\fi
\else
- :\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi
+ :\ifcsname\??setup:#1\endcsname#1\else\??empty\fi
\fi
\endcsname\empty} % takes one argument
-% not faster but less tracing sometimes:
-%
-% \def\syst_setups% the grid option will be extended to other main modes
-% {\csname\??setup\ifgridsnapping\expandafter\syst_setups_grid\else\expandafter\syst_setups_normal\fi}
-%
-% \def\syst_setups_grid#1%
-% {\ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi\fi\endcsname\empty} % takes one argument
-%
-% \def\syst_setups_normal#1%
-% {:\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi\endcsname\empty} % takes one argument
-%
-% only makes sense with many setups
-%
-% \def\syst_setups% the grid option will be extended to other main modes
-% {\ifgridsnapping
-% \expandafter\syst_setups_grid
-% \else
-% \expandafter\syst_setups_normal
-% \fi}
-%
-% \def\syst_setups_normal#1% the grid option will be extended to other main modes
-% {\csname\??setup
-% :\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi
-% \endcsname\empty} % takes one argument
-%
-% \def\syst_setups_grid#1% the grid option will be extended to other main modes
-% {\csname\??setup
-% \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else:\ifcsname\??setup:#1\endcsname#1\else\letterpercent\fi\fi
-% \endcsname\empty} % takes one argument
-%
-% \let\directsetup\syst_setups
-% \let\texsetup \syst_setups % nicer than \directsetup and more en par with xmlsetup and luasetup
-
-% We can consider:
-%
-% \setvalue{\??setup->\v!auto}#1{\ctxcommand{autosetup("#1")}}
-%
-% ":\letterpercent" => "->\v!auto" with "\endcsname{#1}"
-%
-% but it won't work out well with multiple setups (intercepted at the
-% lua end) that then get only one argument.
-
% no checking and we assume it being defined:
\def\fastsetup #1{\csname\??setup:#1\endcsname\empty}
@@ -509,10 +474,10 @@
{\clf_autosetups{#1}}
\edef\setupwithargument#1% saves a few expansions
- {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\letterpercent\noexpand\fi\endcsname}
+ {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\??empty\noexpand\fi\endcsname}
\edef\setupwithargumentswapped#1#2% saves a few expansions (can be \let)
- {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#2\endcsname#2\noexpand\else\letterpercent\noexpand\fi\endcsname{#1}}
+ {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#2\endcsname#2\noexpand\else\??empty\noexpand\fi\endcsname{#1}}
\let\directsetup\syst_setups
\let\texsetup \syst_setups % nicer than \directsetup and more en par with xmlsetup and luasetup
@@ -697,10 +662,13 @@
\unexpanded\def\setgvariable#1#2#3{\expandafter\gdef\csname\??variables#1:#2\endcsname{#3}}
\unexpanded\def\setxvariable#1#2#3{\expandafter\xdef\csname\??variables#1:#2\endcsname{#3}}
+% \def\getvariable#1#2%
+% {\csname
+% \ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi
+% \endcsname}
+
\def\getvariable#1#2%
- {\csname
- \ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi
- \endcsname}
+ {\begincsname\??variables#1:#2\endcsname}
\def\showvariable#1#2%
{\showvalue{\ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi}}
@@ -764,7 +732,8 @@
\letvalue{\??variables:}\empty
\unexpanded\def\doifelseemptyvariable#1#2%
- {\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ %{\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}%
\ifx\m_syst_string_one\empty
\expandafter\firstoffourarguments
\else
@@ -774,7 +743,8 @@
\let\doifemptyvariableelse\doifelseemptyvariable
\unexpanded\def\doifemptyvariable#1#2%
- {\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ %{\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}%
\ifx\m_syst_string_one\empty
\expandafter\firstofoneargument
\else
@@ -782,16 +752,21 @@
\fi}
\unexpanded\def\doifnotemptyvariable#1#2%
- {\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ %{\edef\m_syst_string_one{\csname\??variables\ifcsname\??variables#1:#2\endcsname#1:#2\else:\fi\endcsname}%
+ {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}%
\ifx\m_syst_string_one\empty
\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
\fi}
-
-\def\getvariabledefault#1#2% #3% can be command, so no ifcsname here
- {\executeifdefined{\??variables#1:#2}}% {#3}
+\def\getvariabledefault#1#2% #3% can be command
+ %{\executeifdefined{\??variables#1:#2}}% {#3}
+ {\ifcsname\??variables#1:#2\endcsname
+ \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
\unexpanded\def\setupenv
{\dotripleargument\syst_variables_set[\getrawparameters][\s!environment]}