diff options
Diffstat (limited to 'tex/context/base/mkiv/core-env.mkxl')
-rw-r--r-- | tex/context/base/mkiv/core-env.mkxl | 770 |
1 files changed, 0 insertions, 770 deletions
diff --git a/tex/context/base/mkiv/core-env.mkxl b/tex/context/base/mkiv/core-env.mkxl deleted file mode 100644 index e1a96b35f..000000000 --- a/tex/context/base/mkiv/core-env.mkxl +++ /dev/null @@ -1,770 +0,0 @@ -%D \module -%D [ file=core-env, % was core-new -%D version=1995.01.01, % wrong -%D title=\CONTEXT\ Core Macros, -%D subtitle=New ones, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -\writestatus{loading}{ConTeXt Core Macros / Environments} - -\registerctxluafile{core-env}{autosuffix} - -\unprotect - -%D Modes: -%D -%D \starttyping -%D \enablemode[screen,paper,bound] -%D -%D \doifmodeelse {paper} {this} {that} -%D \doifmode {paper,screen} {this} -%D \doifnotmode {paper,bound} {that} -%D -%D \startmode [list] -%D \stopmode -%D -%D \startnotmode [list] -%D \stopnotmode -%D \stoptyping -%D -%D system modes have a * as prefix -%D -%D Sometimes, we want to prevent a mode for being set. Think of situations where a -%D style enables a mode, but an outer level style does not want that. Preventing can -%D be considered a permanent disabling on forehand. - -\aliased\let\systemmodeprefix\wildcardsymbol - -% we will have \installcorenamespace{mode} but need some hackery at the lua end then - -% TODO: make them mutable, also at the lua end - -\installcorenamespace{modestack} - -\immutable\def\??mode{mode>} % special namespace, also used at lua end - -\permanent\protected\def\newmode #1{\ifcsname \??mode#1\endcsname\else\resetmode{#1}\fi} -\permanent\protected\def\setmode #1{\expandafter \integerdef\csname\??mode#1\endcsname\plusone} -\permanent\protected\def\resetmode #1{\expandafter \integerdef\csname\??mode#1\endcsname\zerocount} -\permanent\protected\def\globalsetmode #1{\global\expandafter\integerdef\csname\??mode#1\endcsname\plusone} -\permanent\protected\def\globalresetmode #1{\global\expandafter\integerdef\csname\??mode#1\endcsname\zerocount} - -\permanent\protected\def\newsystemmode #1{\ifcsname \??mode\systemmodeprefix#1\endcsname\else\resetsystemmode{#1}\fi} -\permanent\protected\def\setsystemmode #1{\expandafter \integerdef\csname\??mode\systemmodeprefix#1\endcsname\plusone} -\permanent\protected\def\resetsystemmode #1{\expandafter \integerdef\csname\??mode\systemmodeprefix#1\endcsname\zerocount} -\permanent\protected\def\globalsetsystemmode #1{\global\expandafter\integerdef\csname\??mode\systemmodeprefix#1\endcsname\plusone} -\permanent\protected\def\globalresetsystemmode#1{\global\expandafter\integerdef\csname\??mode\systemmodeprefix#1\endcsname\zerocount} - -\expandafter \appendtoks - \expandafter\integerdef\csname\??mode\systemmodeprefix trialtypesetting\endcsname\plusone - \luacopyinputnodes\plusone -\to \everysettrialtypesetting - -\expandafter \appendtoks - \expandafter\integerdef\csname\??mode\systemmodeprefix trialtypesetting\endcsname\zerocount - \luacopyinputnodes\zerocount -\to \everyresettrialtypesetting - -\pushoverloadmode \newsystemmode{trialtypesetting} \popoverloadmode - -\the\everyresettrialtypesetting - -% user ones - -\mutable\let\syst_mode_prefix\relax - -\protected\def\preventmode{\unprotect\syst_modes_prevent} -\protected\def\enablemode {\unprotect\syst_modes_enable } -\protected\def\disablemode{\unprotect\syst_modes_disable} - -\protected\def\globalpreventmode{\let\syst_mode_prefix\global\unprotect\syst_modes_prevent} -\protected\def\globalenablemode {\let\syst_mode_prefix\global\unprotect\syst_modes_enable } -\protected\def\globaldisablemode{\let\syst_mode_prefix\global\unprotect\syst_modes_disable} - -\def\syst_modes_prevent[#1]{\protect\fastprocesscommacommand[#1]\syst_modes_prevent_indeed\let\syst_mode_prefix\relax} -\def\syst_modes_enable [#1]{\protect\fastprocesscommacommand[#1]\syst_modes_enable_indeed \let\syst_mode_prefix\relax} -\def\syst_modes_disable[#1]{\protect\fastprocesscommacommand[#1]\syst_modes_disable_indeed\let\syst_mode_prefix\relax} - -\def\syst_modes_prevent_indeed#1% - {\ifcsname\??mode#1\endcsname\else\setmode{#1}\fi - \syst_mode_prefix\expandafter\integerdef\lastnamedcs\plustwo} - -\def\syst_modes_enable_indeed#1% we can speed it up by moving the new outside - {\ifcsname\??mode#1\endcsname\else\setmode{#1}\fi - \ifnum\lastnamedcs=\plustwo\else - \syst_mode_prefix\expandafter\integerdef\lastnamedcs\plusone - \fi} - -\def\syst_modes_disable_indeed#1% - {\ifcsname\??mode#1\endcsname\else\setmode{#1}\fi - \ifnum\lastnamedcs=\plustwo\else - \syst_mode_prefix\expandafter\integerdef\lastnamedcs\zerocount - \fi} - -%D If you do a lot of mode testing, it makes sense to define modes (or disable them -%D explicitly if unset. This makes testing twice as fast. Often one enables modes -%D beforehand, in which case \type {\definemode} would reset the mode. The optional -%D second argument \type {keep} will prevent changing the already set mode but defines -%D it when undefined. - -\permanent\protected\def\definemode - {\unprotect - \syst_modes_define} - -\tolerant\def\syst_modes_define[#1]#*[#2]% - {\protect - \edef\m_modes_asked{#2}% - \fastprocesscommacommand[#1]\syst_modes_define_indeed} - -\def\syst_modes_define_indeed#1% - {\ifcsname\??mode#1\endcsname - % already set - \else - \newmode{#1}% - \fi - \ifx\m_modes_asked\v!keep - % not changes, disabled when undefined - \orelse\ifx\m_modes_asked\v!yes - \setmode{#1}% - \else - \resetmode{#1}% - \fi} - -% handy for mp - -\def\booleanmodevalue#1% - {\ifcsname\??mode#1\endcsname - \ifcase\lastnamedcs - \s!false - \or - \s!true - \else - \s!false - \fi - \else - \s!false - \fi} - -% check macros - -\newconditional\c_checked_mode - -% one - -\def\syst_modes_check_indeed#1% - {\ifcsname\??mode#1\endcsname - \ifcase\lastnamedcs\else - \let\syst_modes_check_step\gobbleoneargument - \fi - \fi} - -\def\syst_modes_check_nop#1#2#3% - {\let\syst_modes_check_step\syst_modes_check_indeed - \fastprocesscommacommand[#3]\syst_modes_check_step - \ifx\syst_modes_check_step\gobbleoneargument - \expandafter#1% - \else - \expandafter#2% - \fi} - -\def\syst_modes_check_yes#1#2#3% - {\ifcase\lastnamedcs - \expandafter#2% - \or - \expandafter#1% - \else - \expandafter#2% - \fi} - -\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 - \expandafter\syst_modes_check_nop - \fi#1#2{#3}} - -% all - -\def\syst_modes_check_all_indeed#1% - {\ifcsname\??mode#1\endcsname - \ifcase\lastnamedcs - \let\syst_modes_check_all_step\gobbleoneargument - \or - % enabled - \else - \let\syst_modes_check_all_step\gobbleoneargument - \fi - \else - \let\syst_modes_check_all_step\gobbleoneargument - \fi} - -\def\syst_modes_check_all_lr#1#2#3% - {\let\syst_modes_check_all_step\syst_modes_check_all_indeed - \fastprocesscommacommand[#3]\syst_modes_check_all_step - \ifx\syst_modes_check_all_step\gobbleoneargument - \expandafter#2% - \else - \expandafter#1% - \fi} - -\def\syst_modes_check_all_ss#1#2[#3]% - {\let\syst_modes_check_all_step\syst_modes_check_all_indeed - \fastprocesscommacommand[#3]\syst_modes_check_all_step - \ifx\syst_modes_check_all_step\gobbleoneargument - \expandafter#2% - \else - \expandafter#1% - \fi} - -\permanent\protected\def\doifelsemode {\syst_modes_check_lr \firstoftwoarguments \secondoftwoarguments} -\permanent\protected\def\doifmode {\syst_modes_check_lr \firstofoneargument \gobbleoneargument} -\permanent\protected\def\doifnotmode {\syst_modes_check_lr \gobbleoneargument \firstofoneargument} -\permanent\protected\def\startmode {\syst_modes_check_ss \donothing \syst_modes_stop_yes} -\permanent\protected\def\startnotmode {\syst_modes_check_ss \syst_modes_stop_nop \donothing} -\permanent\protected\def\doifelseallmodes{\syst_modes_check_all_lr\firstoftwoarguments \secondoftwoarguments} -\permanent\protected\def\doifallmodes {\syst_modes_check_all_lr\firstofoneargument \gobbleoneargument} -\permanent\protected\def\doifnotallmodes {\syst_modes_check_all_lr\gobbleoneargument \firstofoneargument} -\permanent\protected\def\startallmodes {\syst_modes_check_all_ss\donothing \syst_modes_stop_all_yes} -\permanent\protected\def\startnotallmodes{\syst_modes_check_all_ss\syst_modes_stop_all_nop\donothing} - -\aliased\let\doifmodeelse \doifelsemode -\aliased\let\doifallmodeselse\doifelseallmodes - -\permanent\protected\def\stopmode {} % no relax -\permanent\protected\def\stopnotmode {} % no relax -\permanent\protected\def\stopallmodes {} % no relax -\permanent\protected\def\stopnotallmodes{} % no relax - -\def\syst_modes_stop_yes #1\stopmode {} -\def\syst_modes_stop_nop #1\stopnotmode {} -\def\syst_modes_stop_all_yes#1\stopallmodes {} -\def\syst_modes_stop_all_nop#1\stopnotallmodes{} - -%D Pushing/popping: - -\permanent\protected\def\pushmode[#1]{\expandafter\pushmacro\csname\??mode#1\endcsname} -\permanent\protected\def\popmode [#1]{\expandafter\popmacro \csname\??mode#1\endcsname} - -\permanent\protected\def\pushsystemmode#1{\expandafter\pushmacro\csname\??mode\systemmodeprefix#1\endcsname} -\permanent\protected\def\popsystemmode #1{\expandafter\popmacro \csname\??mode\systemmodeprefix#1\endcsname} - -%D Here is a relatively new variant of mode checking: -%D -%D \starttyping -%D \enablemode[two] -%D -%D \startmodeset -%D [one] {1} -%D [two] {2} -%D [two] {2} -%D [three] {3} -%D [default] {?} -%D \stopmodeset -%D -%D \startmodeset -%D [one] {1} -%D [three] {3} -%D [default] {?} -%D \stopmodeset -%D -%D \startmodeset -%D [one] { -%D \input tufte -%D } -%D [two] { -%D \startmodeset -%D [one] {1} -%D [two] {2} -%D [two] {2} -%D [three] {3} -%D [default] {?} -%D \stopmodeset -%D } -%D [three] { -%D \input zapf -%D } -%D [default] { -%D \input ward -%D } -%D \stopmodeset -%D \stoptyping - -\newconditional\c_syst_modes_set_done % conditionals can be pushed/popped - -\installmacrostack\c_syst_modes_set_done - -\permanent\protected\def\startmodeset - {\push_macro_c_syst_modes_set_done - \setfalse\c_syst_modes_set_done - \doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit} - -\aliased\let\stopmodeset\relax - -\def\syst_modes_set_start[#1]% - {\edef\m_mode_case{#1}% - \unless\ifx\m_mode_case\s!default - \expandafter\syst_modes_set_check - \orelse\ifconditional\c_syst_modes_set_done - \expandafter\syst_modes_set_quit - \else - \expandafter\syst_modes_set_yes - \fi} - -\def\syst_modes_set_check - {\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 - #1% - \doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit} - -\def\syst_modes_set_nop#1% - {\doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit} - -\def\syst_modes_set_quit#-\stopmodeset - {\pop_macro_c_syst_modes_set_done} - -%D Lets now set a mode: - -\enablemode[mkiv] \newsystemmode{mkiv} \setsystemmode{mkiv} - -%D Setups: - -\installcorenamespace{setup} % we can probably get rid of some :'s later on - -% \protected\def\startsetups{} % to please dep checker -% \protected\def\stopsetups {} % to please dep checker -% -% \protected\def\setups{\doifelsenextbgroup\syst_setups_a\syst_setups_b} % {..} or [..] -% \protected\def\setup {\doifelsenextbgroup\syst_setups \syst_setups_c} % {..} or [..] -% -% \def\syst_setups_a #1{\processcommacommand[#1]\syst_setups} % {..} -% \def\syst_setups_b[#1]{\processcommacommand[#1]\syst_setups} % [..] -% \def\syst_setups_c[#1]{\syst_setups{#1}} % [..] - -\permanent\protected\tolerant\def\setups[#1]#;#2{\processcommacommand[#1#2]\syst_setups} % {..} or [..] -\permanent\protected\tolerant\def\setup [#1]#;#2{\syst_setups{#1#2}} % {..} or [..] - -\letvalue{\??setup:\??empty}\gobbleoneargument - -\permanent\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\??empty\fi\fi - \else - :\ifcsname\??setup:#1\endcsname#1\else\??empty\fi - \fi - \endcsname\empty} % takes one argument - -% no checking and we assume it being defined: - -\permanent\def\fastsetup #1{\csname\??setup:#1\endcsname\empty} -\permanent\def\fastsetupwithargument #1{\csname\??setup:#1\endcsname} % swapped per 2015-08-30 -\permanent\def\fastsetupwithargumentswapped#1#2{\csname\??setup:#2\endcsname{#1}}% swapped per 2015-09-05 - -% the next one is meant for \c!setups situations, hence the check for -% a shortcut - -\let\m_syst_setups_asked\empty - -\permanent\protected\def\doprocesslocalsetups#1% sort of public, fast local variant - {\edef\m_syst_setups_asked{#1}% - \ifempty\m_syst_setups_asked\else - \expandafter\syst_setups_process_local - \fi} - -\permanent\protected\def\usesetupsparameter#1% - {\edef\m_syst_setups_asked{#1\c!setups}% - \ifempty\m_syst_setups_asked\else - \expandafter\syst_setups_process_local - \fi} - -% setups=S1 -% setups=lua(S2) -% setups=S3 -% setups={S1,lua(S2),xml(test{123}),S3} - -\def\syst_setups_process_local - {\clf_autosetups{\m_syst_setups_asked}% - \relax} % let's prevent lookahead - -\permanent\def\autosetups#1{\clf_autosetups{#1}} % todo: public implementor - -\permanent\edef\setupwithargument#1% saves a few expansions - {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\??empty\noexpand\fi\endcsname} - -\permanent\edef\setupwithargumentswapped#1#2% saves a few expansions (can be \let) - {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#2\endcsname#2\noexpand\else\??empty\noexpand\fi\endcsname{#1}} - -\aliased\let\directsetup\syst_setups -\aliased\let\texsetup \syst_setups % nicer than \directsetup and more en par with xmlsetup and luasetup - -\permanent\protected\def\doifelsesetups#1% to be done: grid - {\ifcsname\??setup:#1\endcsname - \expandafter\firstoftwoarguments - \else - \expandafter\secondoftwoarguments - \fi} - -\aliased\let\doifsetupselse\doifelsesetups - -\permanent\protected\def\doifsetups#1% to be done: grid - {\ifcsname\??setup:#1\endcsname - \expandafter\firstofoneargument - \else - \expandafter\gobbleoneargument - \fi} - -\permanent\protected\def\doifnotsetups#1% to be done: grid - {\ifcsname\??setup:#1\endcsname - \expandafter\gobbleoneargument - \else - \expandafter\firstofoneargument - \fi} - -% maybe some day: -% -% \protected\def\fastsetupfallback#1#2% -% {\ifcsname\??setup:#1\endcsname -% \expandafter\lastnamedcs -% \else -% \csname\??setup:#2\expandafter\endcsname -% \fi} -% -% or -% -% \protected\def\fastsetupfallback#1#2#3% prefix preferred fallback -% {\ifcsname\??setup:#1#2\endcsname -% \expandafter\lastnamedcs -% \else -% \csname\??setup:#1#3\expandafter\endcsname -% \fi} - -% \startluasetups oeps -% context("DONE") -% a = 1 -% b = 1 -% \stopluasetups -% -% \luasetup{oeps} -% -% \startsetups xxx -% ziezo -% \stopsetups -% -% \directsetup{xxx} -% -% \startxmlsetups zzz -% [[#1]] -% \stopxmlsetups -% -% \xmlsetup{123}{zzz} -% -% \startbuffer[what] -% context("DONE") -% \stopbuffer -% -% \startbuffer -% context("MORE") -% \stopbuffer -% -% \ctxluabuffer[what] -% -% \ctxluabuffer - -\newtoks\t_syst_setups_tex \appendtoks - \catcode\endoflineasciicode \ignorecatcode -\to \t_syst_setups_tex - -\newtoks\t_syst_setups_loc \appendtoks - \catcode\endoflineasciicode \ignorecatcode -\to \t_syst_setups_loc - -\newtoks\t_syst_setups_raw \appendtoks - % nothing -\to \t_syst_setups_raw - -\newtoks\t_syst_setups_xml \appendtoks - \catcode\endoflineasciicode\ignorecatcode - \catcode\barasciicode \othercatcode -\to \t_syst_setups_xml - -\newtoks\t_syst_setups_lua \appendtoks - \obeylualines - \obeyluatokens -\to \t_syst_setups_lua - -% Is doglobal still relevant? Maybe always global? Or never? Anyway, it will become obsolete. - -\permanent\protected\def\startluasetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_lua_yes\syst_setups_start_lua_nop} \aliased\let\stopluasetups \relax -\permanent\protected\def\startxmlsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_xml_yes\syst_setups_start_xml_nop} \aliased\let\stopxmlsetups \relax -\permanent\protected\def\startrawsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_raw_yes\syst_setups_start_raw_nop} \aliased\let\stoprawsetups \relax -\permanent\protected\def\startlocalsetups{\begingroup\doifelsenextoptionalcs\syst_setups_start_loc_yes\syst_setups_start_loc_nop} \aliased\let\stoplocalsetups\relax -\permanent\protected\def\startsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_tex_yes\syst_setups_start_tex_nop} \aliased\let\stopsetups \relax - -\def\syst_setups_start_lua_two#1#2#+\stopluasetups {\endgroup\dodoglobal\defcsname\??setup#1:#2\endcsname##1{#3}} -\def\syst_setups_start_xml_two#1#2#+\stopxmlsetups {\endgroup\dodoglobal\defcsname\??setup#1:#2\endcsname##1{#3}} -\def\syst_setups_start_raw_two#1#2#+\stoprawsetups {\endgroup\dodoglobal\defcsname\??setup#1:#2\endcsname##1{#3}} -\def\syst_setups_start_loc_two#1#2#+\stoplocalsetups{\endgroup\dodoglobal\defcsname\??setup#1:#2\endcsname##1{#3}} -\def\syst_setups_start_tex_two#1#2#+\stopsetups {\endgroup\dodoglobal\defcsname\??setup#1:#2\endcsname##1{#3}} - -\tolerant\def\syst_setups_start_lua_yes[#1]#*[#2]% - {\the\t_syst_setups_lua - \ifarguments\expandafter\syst_setups_start_lua_one - \or \expandafter\syst_setups_start_lua_one - \else \expandafter\syst_setups_start_lua_two - \fi{#1}{#2}} - -\tolerant\def\syst_setups_start_xml_yes[#1]#*[#2]% - {\the\t_syst_setups_xml - \ifarguments\expandafter\syst_setups_start_xml_one - \or \expandafter\syst_setups_start_xml_one - \else \expandafter\syst_setups_start_xml_two - \fi{#1}{#2}} - -\tolerant\def\syst_setups_start_raw_yes[#1]#*[#2]% - {\the\t_syst_setups_raw - \ifarguments\expandafter\syst_setups_start_raw_one - \or \expandafter\syst_setups_start_raw_one - \else \expandafter\syst_setups_start_raw_two - \fi{#1}{#2}} - -\tolerant\def\syst_setups_start_loc_yes[#1]#*[#2]% - {\the\t_syst_setups_loc - \ifarguments\expandafter\syst_setups_start_loc_one - \or \expandafter\syst_setups_start_loc_one - \else \expandafter\syst_setups_start_loc_two - \fi{#1}{#2}} - -\tolerant\def\syst_setups_start_tex_yes[#1]#*[#2]% - {\the\t_syst_setups_tex - \ifarguments\expandafter\syst_setups_start_tex_one - \or \expandafter\syst_setups_start_tex_one - \else \expandafter\syst_setups_start_tex_two - \fi{#1}{#2}} - -\def\syst_setups_start_lua_nop#1 {\the\t_syst_setups_lua\syst_setups_start_lua_two{}{#1}} % space delimited -\def\syst_setups_start_xml_nop#1 {\the\t_syst_setups_xml\syst_setups_start_xml_two{}{#1}} % space delimited -\def\syst_setups_start_raw_nop#1 {\the\t_syst_setups_raw\syst_setups_start_raw_two{}{#1}} % space delimited -\def\syst_setups_start_loc_nop#1 {\the\t_syst_setups_loc\syst_setups_start_loc_two{}{#1}} % space delimited -\def\syst_setups_start_tex_nop#1 {\the\t_syst_setups_tex\syst_setups_start_tex_two{}{#1}} % space delimited - -\def\syst_setups_start_lua_one#1#2{\syst_setups_start_lua_two{}{#1}} % [..] -\def\syst_setups_start_xml_one#1#2{\syst_setups_start_xml_two{}{#1}} % [..] -\def\syst_setups_start_raw_one#1#2{\syst_setups_start_raw_two{}{#1}} % [..] -\def\syst_setups_start_loc_one#1#2{\syst_setups_start_loc_two{}{#1}} % [..] -\def\syst_setups_start_tex_one#1#2{\syst_setups_start_tex_two{}{#1}} % [..] - -\def\luasetup#1{\ctxlua{\syst_setups{#1}}} - -%D System setups: - -\aliased\let\systemsetupsprefix\wildcardsymbol - -\permanent\def\systemsetups#1{\syst_setups{\systemsetupsprefix#1}} - -\permanent\protected\def\resetsetups[#1]% see x-fo for usage - {\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1\endcsname - \dodoglobal\undefinevalue{\??setup\ifgridsnapping\v!grid\fi:#1}% - \else - \dodoglobal\undefinevalue{\??setup:#1}% - \fi} - -\permanent\tolerant\protected\def\copysetups[#1]#*[#2]% - {\ifcsname\??setup:#2\endcsname - \letcsname\??setup:#1\expandafter\endcsname\lastnamedcs - \fi} - -\permanent\protected\def\showsetupsdefinition[#1]% - {\showvalue{\??setup:#1}} % temp hack for debugging - -%D \macros -%D {setvariables,getvariable,getvariabledefault} -%D -%D \starttyping -%D \setvariables[xx][title=] -%D \setvariables[xx][title=test test] -%D \setvariables[xx][title=test $x=1$ test] % fatal error reported -%D \setvariables[xx][title=test {$x=1$} test] -%D \setvariables[xx][title] % fatal error reported -%D \setvariables[xx][titletitel=e] -%D \stoptyping - -\installcorenamespace{variables} - -\permanent\protected\def\setvariables {\syst_variables_set[\getrawparameters ]} -\permanent\protected\def\setevariables{\syst_variables_set[\getraweparameters]} -\permanent\protected\def\setgvariables{\syst_variables_set[\getrawgparameters]} -\permanent\protected\def\setxvariables{\syst_variables_set[\getrawxparameters]} - -\tolerant\def\syst_variables_set[#1]#*[#2]#*[#3]% tricky, test on s-pre-60 - {\doifelse{#2}\currentvariableclass - {#1[\??variables#2:][#3]}% - {\pushmacro\currentvariableclass - \def\currentvariableclass{#2}% - \getvariable{#2}\s!reset - #1[\??variables#2:][#3]% - \getvariable{#2}\s!set - \popmacro\currentvariableclass}} - -\permanent\protected\def\setvariable #1#2#3{\defcsname \??variables#1:#2\endcsname{#3}} -\permanent\protected\def\setevariable#1#2#3{\edefcsname \??variables#1:#2\endcsname{#3}} -\permanent\protected\def\setgvariable#1#2#3{\global\defcsname \??variables#1:#2\endcsname{#3}} -\permanent\protected\def\setxvariable#1#2#3{\global\edefcsname\??variables#1:#2\endcsname{#3}} - -\permanent \def\getvariable #1#2{\begincsname\??variables#1:#2\endcsname} -\permanent\protected\def\showvariable#1#2{\showvalue{\begincsname\??variables#1:#2\endcsname}} - -\let\currentvariableclass\empty - -%D \macros -%D {checkvariables} -%D -%D I'll probably forget that this on exists. - -\let\m_syst_variables_temp\empty - -\permanent\tolerant\def\checkvariables[#1]#*[#2]% - {\dogetparameters\syst_variables_check_value[#1][#2]} - -\def\syst_variables_check_value#1#2#3% - {\ifcsname\??variables#1:#2\endcsname - \edef\m_syst_variables_temp{\lastnamedcs}% - \ifempty\m_syst_variables_temp - \defcsname\??variables#1:#2\endcsname{#3}% - \fi - \else - \defcsname\??variables#1:#2\endcsname{#3}% - \fi} - -%D \macros -%D {doifelsevariable,doifvariable,doifnotvariable} -%D -%D A few trivial macros: - -\permanent\protected\def\doifelsevariable#1#2% - {\ifcsname\??variables#1:#2\endcsname - \expandafter\firstoftwoarguments - \else - \expandafter\secondoftwoarguments - \fi} - -\aliased\let\doifvariableelse\doifelsevariable - -\permanent\protected\def\doifvariable#1#2% - {\ifcsname\??variables#1:#2\endcsname - \expandafter\firstofoneargument - \else - \expandafter\gobbleoneargument - \fi} - -\permanent\protected\def\doifnotvariable#1#2% - {\ifcsname\??variables#1:#2\endcsname - \expandafter\gobbleoneargument - \else - \expandafter\firstofoneargument - \fi} - -%D A few more (we could use a public test variable so that we only need to expand -%D once, assuming expandable variables): - -\letvalue{\??variables:}\empty - -\permanent\protected\def\doifelseemptyvariable#1#2% - {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}% - \ifempty\m_syst_string_one - \expandafter\firstoftwoarguments - \else - \expandafter\secondoftwoarguments - \fi} - -\aliased\let\doifemptyvariableelse\doifelseemptyvariable - -\permanent\protected\def\doifemptyvariable#1#2% - {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}% - \ifempty\m_syst_string_one - \expandafter\firstofoneargument - \else - \expandafter\gobbleoneargument - \fi} - -\permanent\protected\def\doifnotemptyvariable#1#2% - {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}% - \ifempty\m_syst_string_one - \expandafter\gobbleoneargument - \else - \expandafter\firstofoneargument - \fi} - -\permanent\def\getvariabledefault#1#2% #3% can be command - {\ifcsname\??variables#1:#2\endcsname - \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument - \else - \expandafter\firstofoneargument - \fi} - -\permanent\tolerant\protected\def\setupenv[#1]% - {\syst_variables_set[\getrawparameters][\s!environment][#1]} - -\permanent\protected\def\doifelseenv{\doifelsevariable \s!environment} -\permanent\protected\def\doifenv {\doifvariable \s!environment} -\permanent\protected\def\doifnotenv {\doifnotvariable \s!environment} -\permanent \def\env {\getvariable \s!environment} -\permanent \def\envvar {\getvariabledefault\s!environment} - -\aliased\let\doifenvelse\doifelseenv - -%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} - -\permanent\tolerant\protected\def\defineselector[#1]#*[#2]{\getparameters[\??selector#1][\c!max=\plusone,\c!n=\plusone,#2]} -\permanent\tolerant\protected\def\setupselector [#1]#*[#2]{\getparameters[\??selector#1][#2]} - -\permanent\protected\let\select\directselect % we promote to protected - -% \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): - -\permanent\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 % \aliased ? -\letvalue{\??selector\c!n }\plusone % \aliased ? - -\protect \endinput |