diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-env.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/core-env.mkiv | 152 |
1 files changed, 108 insertions, 44 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-env.mkiv b/Master/texmf-dist/tex/context/base/core-env.mkiv index 1819d084d0a..0332631dc2f 100644 --- a/Master/texmf-dist/tex/context/base/core-env.mkiv +++ b/Master/texmf-dist/tex/context/base/core-env.mkiv @@ -54,42 +54,44 @@ % fast internal ones +\def\??mode{mode>} % special namespace, also used at lua end + \def\syst_modes_new#1% - {\expandafter\newcount\csname\s!mode#1\endcsname} + {\expandafter\newcount\csname\??mode#1\endcsname} \unexpanded\def\newmode#1% - {\ifcsname\s!mode#1\endcsname\else\syst_modes_new{#1}\fi} + {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi} \unexpanded\def\setmode#1% - {\ifcsname\s!mode#1\endcsname\else\syst_modes_new{#1}\fi - \csname\s!mode#1\endcsname\enabledmode} + {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi + \csname\??mode#1\endcsname\enabledmode} \unexpanded\def\resetmode#1% - {\ifcsname\s!mode#1\endcsname\else\syst_modes_new{#1}\fi - \csname\s!mode#1\endcsname\disabledmode} + {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi + \csname\??mode#1\endcsname\disabledmode} \unexpanded\def\newsystemmode#1% - {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi} + {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi} \unexpanded\def\setsystemmode#1% - {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi - \csname\s!mode\systemmodeprefix#1\endcsname\enabledmode} + {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi + \csname\??mode\systemmodeprefix#1\endcsname\enabledmode} \unexpanded\def\resetsystemmode#1% - {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi - \csname\s!mode\systemmodeprefix#1\endcsname\disabledmode} + {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi + \csname\??mode\systemmodeprefix#1\endcsname\disabledmode} % \def\dosetsystemmode#1% -% {\csname\s!mode\systemmodeprefix#1\endcsname\enabledmode} +% {\csname\??mode\systemmodeprefix#1\endcsname\enabledmode} % % \def\doresetsystemmode#1% -% {\csname\s!mode\systemmodeprefix#1\endcsname\disabledmode} +% {\csname\??mode\systemmodeprefix#1\endcsname\disabledmode} % demo: trialtypesetting is a systemmode as well as an if \newsystemmode{trialtypesetting} % the name of \@@trialtypesetting might change (also at the lua end) -\expandafter\let\expandafter\@@trialtypesetting\csname\s!mode\systemmodeprefix trialtypesetting\endcsname % private ! +\expandafter\let\expandafter\@@trialtypesetting\csname\??mode\systemmodeprefix trialtypesetting\endcsname % private ! \appendtoks \@@trialtypesetting\enabledmode @@ -101,36 +103,42 @@ % user ones +\let\syst_mode_prefix\relax + \unexpanded\def\preventmode{\unprotect\syst_modes_prevent} \unexpanded\def\enablemode {\unprotect\syst_modes_enable } \unexpanded\def\disablemode{\unprotect\syst_modes_disable} +\unexpanded\def\globalpreventmode{\let\syst_mode_prefix\global\unprotect\syst_modes_prevent} +\unexpanded\def\globalenablemode {\let\syst_mode_prefix\global\unprotect\syst_modes_enable } +\unexpanded\def\globaldisablemode{\let\syst_mode_prefix\global\unprotect\syst_modes_disable} + \let\definemode\disablemode % nicer -\def\syst_modes_prevent[#1]{\protect\rawprocesscommacommand[#1]\syst_modes_prevent_indeed} -\def\syst_modes_enable [#1]{\protect\rawprocesscommacommand[#1]\syst_modes_enable_indeed } -\def\syst_modes_disable[#1]{\protect\rawprocesscommacommand[#1]\syst_modes_disable_indeed} +\def\syst_modes_prevent[#1]{\protect\rawprocesscommacommand[#1]\syst_modes_prevent_indeed\let\syst_mode_prefix\relax} +\def\syst_modes_enable [#1]{\protect\rawprocesscommacommand[#1]\syst_modes_enable_indeed \let\syst_mode_prefix\relax} +\def\syst_modes_disable[#1]{\protect\rawprocesscommacommand[#1]\syst_modes_disable_indeed\let\syst_mode_prefix\relax} \def\syst_modes_prevent_indeed#1% - {\ifcsname\s!mode#1\endcsname\else\syst_modes_new{#1}\fi - \csname\s!mode#1\endcsname\preventedmode} + {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi + \syst_mode_prefix\csname\??mode#1\endcsname\preventedmode} \def\syst_modes_enable_indeed#1% we can speed it up by moving the new outside - {\ifcsname\s!mode#1\endcsname\else\syst_modes_new{#1}\fi - \ifnum\csname\s!mode#1\endcsname=\preventedmode \else - \csname\s!mode#1\endcsname\enabledmode + {\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 \fi} \def\syst_modes_disable_indeed#1% - {\ifcsname\s!mode#1\endcsname\else\syst_modes_new{#1}\fi - \ifnum\csname\s!mode#1\endcsname=\preventedmode \else - \csname\s!mode#1\endcsname\disabledmode + {\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 \fi} % handy for mp \def\booleanmodevalue#1% - {\ifcsname\s!mode#1\endcsname\ifcase\csname\s!mode#1\endcsname\s!false\else\s!true\fi\else\s!false\fi} + {\ifcsname\??mode#1\endcsname\ifcase\csname\??mode#1\endcsname\s!false\else\s!true\fi\else\s!false\fi} % check macros @@ -141,8 +149,8 @@ \newconditional\c_checked_mode \def\syst_modes_check_indeed#1% - {\ifcsname\s!mode#1\endcsname - \ifcase\csname\s!mode#1\endcsname\else + {\ifcsname\??mode#1\endcsname + \ifcase\csname\??mode#1\endcsname\else \let\syst_modes_check_step\gobbleoneargument \fi \fi} @@ -157,8 +165,8 @@ \fi} \def\syst_modes_check_all_indeed#1% - {\ifcsname\s!mode#1\endcsname - \ifcase\csname\s!mode#1\endcsname + {\ifcsname\??mode#1\endcsname + \ifcase\csname\??mode#1\endcsname \let\syst_modes_check_all_step\gobbleoneargument \fi \else @@ -198,25 +206,25 @@ %D Pushing/popping: \unexpanded\def\pushmode[#1]% - {\ifcsname\s!mode#1\endcsname\else\syst_modes_new{#1}\fi - \expandafter\edef\csname\??modestack#1\endcsname{\number\csname\s!mode#1\endcsname}% + {\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\s!mode#1\endcsname\csname\??modestack#1\endcsname\relax + \csname\??mode#1\endcsname\csname\??modestack#1\endcsname\relax \fi} \def\pushsystemmode#1% - {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi - \expandafter\edef\csname\??modestack\systemmodeprefix#1\endcsname{\number\csname\s!mode\systemmodeprefix#1\endcsname}% + {\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\s!mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax + \csname\??mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax \fi} %D Here is a relatively new variant of mode checking: @@ -344,22 +352,31 @@ % the next one is meant for \c!setups situations, hence the check for % a shortcut -\def\doprocesslocalsetups#1% - {\edef\tobeprocessedsetups{#1}% - \ifx\tobeprocessedsetups\empty\else - \dodoprocesslocalsetups +\let\m_syst_setups_asked\empty + +\def\doprocesslocalsetups#1% sort of public, fast local variant + {\edef\m_syst_setups_asked{#1}% + \ifx\m_syst_setups_asked\empty\else + \expandafter\syst_setups_process_local + \fi} + +\unexpanded\def\usesetupsparameter#1% + {\edef\m_syst_setups_asked{#1\c!setups}% + \ifx\m_syst_setups_asked\empty\else + \expandafter\syst_setups_process_local \fi} -% \def\dodoprocesslocalsetups -% {\expandafter\processcommalist\expandafter[\tobeprocessedsetups]\syst_setups} +% \def\syst_setups_process_local +% {\expandafter\processcommalist\expandafter[\m_syst_setups_asked]\syst_setups} % setups=S1 % setups=lua(S2) % setups=S3 % setups={S1,lua(S2),xml(test{123}),S3} -\def\dodoprocesslocalsetups - {\ctxcommand{autosetups("\tobeprocessedsetups")}} +\def\syst_setups_process_local + {\ctxcommand{autosetups("\m_syst_setups_asked")}% + \relax} % let's prevent lookahead \def\autosetups#1% {\ctxcommand{autosetups("#1")}} @@ -625,4 +642,51 @@ \def\env {\getvariable \s!environment} \def\envvar {\getvariabledefault\s!environment} +%D \macros +%D {defineselector,setupselector,select,directselect} +%D +%D \starttyping +%D \defineselector[caption][max=2,n=2] +%D +%D \start +%D \setupselector[caption][n=1] +%D \placelist[figure][criterium=all] +%D \stop +%D +%D \starttext +%D \placefigure +%D {\select{caption}{zapf}{\input zapf \relax}} +%D {} +%D \stoptext +%D \stoptyping + +\installcorenamespace{selector} + +\unexpanded\def\defineselector{\dodoubleargument\syst_selectors_define} +\unexpanded\def\setupselector {\dodoubleargument\syst_selectors_setup} + +% \def\syst_selectors_define[#1][#2]{\getparameters[\??selector#1][\c!max=\plusone,\c!n=\plusone,#2]} +% \def\syst_selectors_setup [#1][#2]{\getparameters[\??selector#1][#2]} + +\def\syst_selectors_define[#1][{\getparameters[\??selector#1][\c!max=\plustwo,\c!n=\plusone,} +\def\syst_selectors_setup [#1][{\getparameters[\??selector#1][} + +\unexpanded\def\select % unexpandable + {\directselect} + +% \def\directselect#1% expandable +% {\filterfromnext % maybe add an \expanded +% {\csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\endcsname}% +% {\csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname}} +% +% this is more efficient when the arguments are used a few times (or passed along): + +\def\directselect#1% expandable + {\expandafter\filterfromnext + \csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\expandafter\endcsname + \csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname} + +\letvalue{\??selector\c!max}\plusone +\letvalue{\??selector\c!n }\plusone + \protect \endinput |