diff options
Diffstat (limited to 'tex/context/base/mkxl/strc-usr.mkxl')
| -rw-r--r-- | tex/context/base/mkxl/strc-usr.mkxl | 53 | 
1 files changed, 34 insertions, 19 deletions
diff --git a/tex/context/base/mkxl/strc-usr.mkxl b/tex/context/base/mkxl/strc-usr.mkxl index 28d398194..9ecb80ebd 100644 --- a/tex/context/base/mkxl/strc-usr.mkxl +++ b/tex/context/base/mkxl/strc-usr.mkxl @@ -91,21 +91,16 @@  \installcommandhandler \????userdata            {userdata}            \????userdata  \installcommandhandler \????userdataalternative {userdataalternative} \????userdataalternative +\appendtoks +    \frozen\protected\instance\edefcsname\e!start\currentuserdata\endcsname{\userdata_start_instance{\currentuserdata}}% +    \frozen\protected\instance\letcsname \e!stop \currentuserdata\endcsname\userdata_stop_instance +\to \everydefineuserdata +  \permanent\protected\def\startuserdata    {\begingroup     \let\currentuserdata\empty     \doifelsenextoptionalcs\userdata_start_delayed\userdata_start_indeed} -% This variant works only when the userdata instance exists while the assignment check -% can also be used with undefined instances which falls back to the global settings. -% -% \def\userdata_start_delayed[#1]% -%   {\ifcsname\nameduserdatahash{\detokenize\expandafter{\normalexpanded{#1}}}\s!parent\endcsname -%      \expandafter\userdata_start_delayed_name -%    \else -%      \expandafter\userdata_start_delayed_parameters -%    \fi[#1]} -  \def\userdata_start_delayed[#1]%    {\doifelseassignmentcs{#1}%       \userdata_start_delayed_parameters @@ -121,15 +116,29 @@     \checkuserdataparent     \doifelsenextoptionalcs\userdata_start_delayed_parameters\userdata_start_indeed} +\protected\tolerant\def\userdata_start_instance#1#*[#2]% +  {\begingroup +   \edef\currentuserdata{#1}% +   \setupcurrentuserdata[#2]% +   \grabbufferdatadirect +   % {\s!userdata:\currentuserdata}% +     {\s!userdata}% unnested, as before +     {\e!start\currentuserdata}% +     {\e!stop \currentuserdata}} +  \def\userdata_start_indeed -  {\grabbufferdatadirect\s!userdata{\csstring\startuserdata}{\csstring\stopuserdata}} +  {\grabbufferdatadirect +   % {\s!userdata:\currentuserdata}% +     {\s!userdata}% unnested, as before +     {\csstring\startuserdata}% +     {\csstring\stopuserdata}}  \permanent\protected\def\stopuserdata -  {\userdataparameter\c!before % HH: moved, so we obey the outer spacing -   \dostarttagged\t!userdata\currentuserdata % HH: added, maybe move up ? +  {\userdataparameter\c!before +   \dostarttagged\t!userdata\currentuserdata     \begingroup     \useuserdatastyleandcolor\c!style\c!color -   \usealignparameter\userdataparameter % HH: added +   \usealignparameter\userdataparameter     \edef\currentuserdataalternative{\userdataparameter\c!alternative}%     \ifcsname\currentuserdataalternativehash\s!parent\endcsname \else       \let\currentuserdataalternative\s!default @@ -139,14 +148,20 @@     \directsetup\p_renderingsetup     \endgroup     \dostoptagged -   \userdataparameter\c!after % HH: moved +   \userdataparameter\c!after     \endgroup} -\permanent\protected\def\getuserdata -  {\getbufferdata[\s!userdata]} +\aliased\let\userdata_stop_instance\stopuserdata + +% kind of nested, when we need it: +% +% \permanent\tolerant\protected\def\getuserdata      [#1]{\normalexpanded{\getbufferdata[\s!userdata:\ifparameter#1\or#1\else\currentuserdata\fi]}} +% \permanent\tolerant\protected\def\getinlineuserdata[#1]{\normalexpanded{\inlinebuffer [\s!userdata:\ifparameter#1\or#1\else\currentuserdata\fi]}} + +% unnested, as before: -\permanent\protected\def\getinlineuserdata -  {\inlinebuffer[\s!userdata]} +\permanent\tolerant\protected\def\getuserdata      [#1]{\getbufferdata[\s!userdata]} +\permanent\tolerant\protected\def\getinlineuserdata[#1]{\inlinebuffer [\s!userdata]}  \defineuserdataalternative    [\s!default]  | 
