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 | 261 |
1 files changed, 201 insertions, 60 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-env.mkiv b/Master/texmf-dist/tex/context/base/core-env.mkiv index d927ff3ad50..2451b59501a 100644 --- a/Master/texmf-dist/tex/context/base/core-env.mkiv +++ b/Master/texmf-dist/tex/context/base/core-env.mkiv @@ -13,6 +13,8 @@ \writestatus{loading}{ConTeXt Core Macros / Environments} +\registerctxluafile{core-env}{1.001} + \unprotect %D Modes: @@ -39,68 +41,109 @@ %D considered a permanent disabling on forehand. \def\@mode@{@md@} +\def\@mode@{mode} \def\systemmodeprefix{*} -\def\disabledmode {0} % no chardefs -\def\enabledmode {1} -\def\preventedmode{2} +% todo: check prevent mode, also at the lua end + +\setnewconstant\disabledmode \zerocount +\setnewconstant\enabledmode \plusone +\setnewconstant\preventedmode\plustwo % fast internal ones -\def\setmode #1{\@EA\let\csname\@mode@#1\endcsname\enabledmode } -\def\resetmode#1{\@EA\let\csname\@mode@#1\endcsname\disabledmode} +\def\donewmode#1% + {\@EA\newcount\csname\@mode@#1\endcsname} + +\def\newmode#1% + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi} + +\def\setmode#1% + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \csname\@mode@#1\endcsname\enabledmode} + +\def\resetmode#1% + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \csname\@mode@#1\endcsname\disabledmode} + +\def\newsystemmode#1% + {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi} + +\def\setsystemmode#1% + {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi + \csname\@mode@\systemmodeprefix#1\endcsname\enabledmode} + +\def\resetsystemmode#1% + {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi + \csname\@mode@\systemmodeprefix#1\endcsname\disabledmode} + +% \def\dosetsystemmode#1% +% {\csname\@mode@\systemmodeprefix#1\endcsname\enabledmode} +% +% \def\doresetsystemmode#1% +% {\csname\@mode@\systemmodeprefix#1\endcsname\disabledmode} + +% demo: trialtypesetting is a systemmode as well as an if + +\newsystemmode{trialtypesetting} + +\expandafter\let\expandafter\@@trialtypesetting\csname\@mode@\systemmodeprefix trialtypesetting\endcsname % private ! -\def\setsystemmode #1{\@EA\let\csname\@mode@\systemmodeprefix#1\endcsname\enabledmode } -\def\resetsystemmode#1{\@EA\let\csname\@mode@\systemmodeprefix#1\endcsname\disabledmode} +\appendtoks + \@@trialtypesetting\enabledmode +\to \everysettrialtypesetting + +\appendtoks + \@@trialtypesetting\disabledmode +\to \everyresettrialtypesetting % user ones -\def\preventmode{\unprotect\dopreventmode} -\def\enablemode {\unprotect\doenablemode } -\def\disablemode{\unprotect\dodisablemode} +\unexpanded\def\preventmode{\unprotect\dopreventmode} +\unexpanded\def\enablemode {\unprotect\doenablemode } +\unexpanded\def\disablemode{\unprotect\dodisablemode} + +\let\definemode\disablemode % nicer \def\dopreventmode[#1]{\protect\rawprocesscommacommand[#1]\dodopreventmode} \def\doenablemode [#1]{\protect\rawprocesscommacommand[#1]\dodoenablemode } \def\dodisablemode[#1]{\protect\rawprocesscommacommand[#1]\dododisablemode} \def\dodopreventmode#1% - {\@EA\let\csname\@mode@#1\endcsname\preventedmode} + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \csname\@mode@#1\endcsname\preventedmode} -\def\dodoenablemode#1% mode can be relax - {\ifcase0\csname\@mode@#1\endcsname\relax - \@EA\let\csname\@mode@#1\endcsname\enabledmode +\def\dodoenablemode#1% we can speed it up by moving the new outside + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \ifnum\csname\@mode@#1\endcsname=\preventedmode \else + \csname\@mode@#1\endcsname\enabledmode \fi} \def\dododisablemode#1% - {\ifcase0\csname\@mode@#1\endcsname\or - \@EA\let\csname\@mode@#1\endcsname\disabledmode + {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi + \ifnum\csname\@mode@#1\endcsname=\preventedmode \else + \csname\@mode@#1\endcsname\disabledmode \fi} % handy for mp -\def\booleanmodevalue#1% can be \relax - {\expandafter\ifx\csname\@mode@#1\endcsname\relax - fals% - \else\ifnum0\csname\@mode@#1\endcsname=0 - fals% - \else - tru% - \fi\fi e} +\def\booleanmodevalue#1% + {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname fals\else tru\fi\else fals\fi e} % check macros \newif\ifcheckedmode \def\dodocheckformode#1% - {\ifcase0\csname\@mode@#1\endcsname\or\checkedmodetrue\fi} + {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname\else\checkedmodetrue\fi\fi} \def\docheckformode#1#2#3% will be sped up with a quit {\protect\checkedmodefalse\rawprocesscommacommand[#3]\dodocheckformode \ifcheckedmode\@EA#1\else\@EA#2\fi} \def\dodocheckforallmodes#1% - {\ifcase0\csname\@mode@#1\endcsname\relax\checkedmodefalse\or\or\checkedmodefalse\fi} + {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname\checkedmodefalse\fi\else\checkedmodefalse\fi} \def\docheckforallmodes#1#2#3% will be sped up with a quit {\protect\checkedmodetrue\rawprocesscommacommand[#3]\dodocheckforallmodes @@ -164,14 +207,14 @@ %D Lets now set a mode: -\enablemode[mkiv] \setsystemmode{mkiv} +\enablemode[mkiv] \newsystemmode{mkiv} \setsystemmode{mkiv} %D Setups: \unexpanded\def\startsetups{} % to please dep checker \unexpanded\def\stopsetups {} % to please dep checker -\expanded +\expanded % will become obsolete {\long\def\@EA\noexpand\csname\e!start\v!setups\endcsname {\begingroup\noexpand\doifnextoptionalelse {\noexpand\dostartsetupsA\@EA\noexpand\csname\e!stop\v!setups\endcsname} @@ -197,6 +240,15 @@ \fi \endcsname\empty} % takes one argument +% We can consider: +% +% \setvalue{\??su->\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. + % the next one is meant for \c!setups situations, hence the check for % a shortcut @@ -206,47 +258,136 @@ \dodoprocesslocalsetups \fi} +% \def\dodoprocesslocalsetups +% {\@EA\processcommalist\@EA[\tobeprocessedsetups]\dosetups} + +% setups=S1 +% setups=lua(S2) +% setups=S3 +% setups={S1,lua(S2),xml(test{123}),S3} + \def\dodoprocesslocalsetups - {\@EA\processcommalist\@EA[\tobeprocessedsetups]\dosetups} + {\ctxcommand{autosetups("\tobeprocessedsetups")}} + +\def\autosetups#1% + {\ctxcommand{autosetups("#1")}} \edef\setupwithargument#1% saves a few expansions {\noexpand\csname\??su:\noexpand\ifcsname\??su:#1\endcsname#1\noexpand\else\letterpercent\noexpand\fi\endcsname} \let\directsetup\dosetups +\let\texsetup \dosetups % nicer than \directsetup and more en par with xmlsetup and luasetup \def\doifsetupselse#1% to be done: grid - {\doifdefinedelse{\??su:#1}} - -\chardef\setupseolmode\plusone - -\unexpanded\def\startsetups {\xxstartsetups\plusone \stopsetups } \let\stopsetups \relax -\unexpanded\def\startlocalsetups{\xxstartsetups\plusone \stoplocalsetups} \let\stoplocalsetups\relax -\unexpanded\def\startrawsetups {\xxstartsetups\zerocount\stoprawsetups } \let\stoprawsetups \relax -\unexpanded\def\startxmlsetups {\xxstartsetups\plustwo \stopxmlsetups } \let\stopxmlsetups \relax - -\def\xxstartsetups#1#2% - {\begingroup\let\setupseolmode#1\doifnextoptionalelse{\dostartsetupsA#2}{\dostartsetupsB#2}} - -\def\dostartsetupsA#1% [ ] delimited - {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\or\catcode`\^^M\@@ignore\catcode`\|\@@other\fi - \dotripleempty\dostartsetups[#1]} - -\def\dostartsetupsB#1#2 % space delimited - {\ifcase\setupseolmode\or\catcode`\^^M\@@ignore\or\catcode`\^^M\@@ignore\catcode`\|\@@other\fi - \dodostartsetups#1\empty{#2}} - -\def\dostartsetupsC[#1][#2][#3]{\dodostartsetups#1{#2}{#3}} % [..] [..] -\def\dostartsetupsD[#1][#2][#3]{\dodostartsetups#1\empty{#2}} % [..] - -\def\dostartsetups - {\ifthirdargument\@EA\dostartsetupsC\else\@EA\dostartsetupsD\fi} + {\doifdefinedelse{\??su:#1}} % doto: ifcsname -\long\def\dodostartsetups#1#2#3% - {\long\def\dododostartsetups##1#1% - {\endgroup - \dodoglobal % bah - \long\expandafter\def\csname\??su#2:#3\expandafter\endcsname\expandafter####\expandafter1\expandafter{##1}}% - \dododostartsetups\empty} % the empty trick prevents the { } in {arg} from being eaten up +% \startluasetups oeps +% tex.print("DONE") +% a = 1 +% b = 1 +% \stopluasetups +% +% \luasetup{oeps} +% +% \startsetups xxx +% ziezo +% \stopsetups +% +% \directsetup{xxx} +% +% \startxmlsetups zzz +% [[#1]] +% \stopxmlsetups +% +% \xmlsetup{123}{zzz} +% +% \startbuffer[what] +% tex.print("DONE") +% \stopbuffer +% +% \startbuffer +% tex.print("MORE") +% \stopbuffer +% +% \ctxluabuffer[what] +% +% \ctxluabuffer + +\newtoks\everydefinesetups \appendtoks + \catcode\endoflineasciicode \ignorecatcode +\to \everydefinesetups + +\newtoks\everydefinelocalsetups \appendtoks + \catcode\endoflineasciicode \ignorecatcode +\to \everydefinelocalsetups + +\newtoks\everydefinerawsetups \appendtoks + % nothing +\to \everydefinerawsetups + +\newtoks\everydefinexmlsetups \appendtoks + \catcode\endoflineasciicode\ignorecatcode + \catcode\barasciicode \othercatcode +\to \everydefinexmlsetups + +\newtoks\everydefineluasetups \appendtoks + \obeylualines + \obeyluatokens +\to \everydefineluasetups + +\unexpanded\def\startluasetups {\begingroup\doifnextoptionalelse\dostartluasetupsA \dostartluasetupsB } +\unexpanded\def\startxmlsetups {\begingroup\doifnextoptionalelse\dostartxmlsetupsA \dostartxmlsetupsB } +\unexpanded\def\startrawsetups {\begingroup\doifnextoptionalelse\dostartrawsetupsA \dostartrawsetupsB } +\unexpanded\def\startlocalsetups{\begingroup\doifnextoptionalelse\dostartlocalsetupsA\dostartlocalsetupsB} +\unexpanded\def\startsetups {\begingroup\doifnextoptionalelse\dostartsetupsA \dostartsetupsB } + +\let\stopluasetups \relax +\let\stopxmlsetups \relax +\let\stoprawsetups \relax +\let\stoplocalsetups \relax +\let\stopsetups \relax + +\def\dodostartluasetups #1#2#3\stopluasetups {\endgroup\dodoglobal\long\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}} +\def\dodostartxmlsetups #1#2#3\stopxmlsetups {\endgroup\dodoglobal\long\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}} +\def\dodostartrawsetups #1#2#3\stoprawsetups {\endgroup\dodoglobal\long\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}} +\def\dodostartlocalsetups #1#2#3\stoplocalsetups{\endgroup\dodoglobal\long\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}} +\def\dodostartsetups #1#2#3\stopsetups {\endgroup\dodoglobal\long\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}} + +\def\dostartluasetups {\ifsecondargument\@EA\dostartluasetupsC \else\@EA\dostartluasetupsD \fi} +\def\dostartxmlsetups {\ifsecondargument\@EA\dostartxmlsetupsC \else\@EA\dostartxmlsetupsD \fi} +\def\dostartrawsetups {\ifsecondargument\@EA\dostartrawsetupsC \else\@EA\dostartrawsetupsD \fi} +\def\dostartlocalsetups {\ifsecondargument\@EA\dostartlocalsetupsC\else\@EA\dostartlocalsetupsD\fi} +\def\dostartsetups {\ifsecondargument\@EA\dostartsetupsC \else\@EA\dostartsetupsD \fi} + +\def\dostartluasetupsA {\the\everydefineluasetups \dodoubleempty\dostartluasetups} % [ ] delimited +\def\dostartxmlsetupsA {\the\everydefinexmlsetups \dodoubleempty\dostartxmlsetups} % [ ] delimited +\def\dostartrawsetupsA {\the\everydefinerawsetups \dodoubleempty\dostartrawsetups} % [ ] delimited +\def\dostartlocalsetupsA {\the\everydefinelocalsetups\dodoubleempty\dostartlocalsetups} % [ ] delimited +\def\dostartsetupsA {\the\everydefinesetups \dodoubleempty\dostartsetups} % [ ] delimited + +% empty preserves inner {} (is removed by the \@EA{#3}) + +\def\dostartluasetupsB #1 {\the\everydefineluasetups \dodostartluasetups \empty{#1}\empty} % space delimited +\def\dostartxmlsetupsB #1 {\the\everydefinexmlsetups \dodostartxmlsetups \empty{#1}\empty} % space delimited +\def\dostartrawsetupsB #1 {\the\everydefinerawsetups \dodostartrawsetups \empty{#1}\empty} % space delimited +\def\dostartlocalsetupsB #1 {\the\everydefinelocalsetups\dodostartlocalsetups\empty{#1}\empty} % space delimited +\def\dostartsetupsB #1 {\the\everydefinesetups \dodostartsetups \empty{#1}\empty} % space delimited + +\def\dostartluasetupsC [#1][#2]{\the\everydefineluasetups \dodostartluasetups {#1}{#2}\empty} % [..] [..] +\def\dostartxmlsetupsC [#1][#2]{\the\everydefinexmlsetups \dodostartxmlsetups {#1}{#2}\empty} % [..] [..] +\def\dostartrawsetupsC [#1][#2]{\the\everydefinerawsetups \dodostartrawsetups {#1}{#2}\empty} % [..] [..] +\def\dostartlocalsetupsC[#1][#2]{\the\everydefinelocalsetups\dodostartlocalsetups{#1}{#2}\empty} % [..] [..] +\def\dostartsetupsC [#1][#2]{\the\everydefinesetups \dodostartsetups {#1}{#2}\empty} % [..] [..] + +\def\dostartluasetupsD [#1][#2]{\the\everydefineluasetups \dodostartluasetups \empty{#1}\empty} % [..] +\def\dostartxmlsetupsD [#1][#2]{\the\everydefinexmlsetups \dodostartxmlsetups \empty{#1}\empty} % [..] +\def\dostartrawsetupsD [#1][#2]{\the\everydefinerawsetups \dodostartrawsetups \empty{#1}\empty} % [..] +\def\dostartlocalsetupsD[#1][#2]{\the\everydefinelocalsetups\dodostartlocalsetups\empty{#1}\empty} % [..] +\def\dostartsetupsD [#1][#2]{\the\everydefinesetups \dodostartsetups \empty{#1}\empty} % [..] + +\def\luasetup#1{\ctxlua{\dosetups{#1}}} + +% % % % \def\systemsetupsprefix{*} |