summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/core-env.mkiv
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-04-08 00:43:40 +0000
committerKarl Berry <karl@freefriends.org>2013-04-08 00:43:40 +0000
commit824f7b0903de8ad7f6ee3d7656005e4c59155e06 (patch)
treeabfc8673ef9916f3ab7074e811207384c301492b /Master/texmf-dist/tex/context/base/core-env.mkiv
parent689aefb0727676ed3cddf331337b4be226495e72 (diff)
context import for TL13, from www.pragma-ade.com/context/beta/cont-tmf.zip
git-svn-id: svn://tug.org/texlive/trunk@29731 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-env.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/base/core-env.mkiv152
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