diff options
Diffstat (limited to 'tex/context/base/strc-blk.mkiv')
-rw-r--r-- | tex/context/base/strc-blk.mkiv | 96 |
1 files changed, 55 insertions, 41 deletions
diff --git a/tex/context/base/strc-blk.mkiv b/tex/context/base/strc-blk.mkiv index 1dd144aa9..3bd5d04ed 100644 --- a/tex/context/base/strc-blk.mkiv +++ b/tex/context/base/strc-blk.mkiv @@ -22,78 +22,92 @@ % todo: prefix numbers (needs further integration elsewhere) % check functionality % alternative files (needs further integration elsewhere) -% -% order matters: \c!before (think of: \c!before=\startitemize) -% -% no \endgroups -\installcorenamespace {block} -\installcorenamespace {blocktemp} +\def\namedblockparameter#1#2{\ifcsname\??tb#1#2\endcsname\csname\??tb#1#2\endcsname\fi} -\installcommandhandler \??block {block} \??block +\unexpanded\def\setupblockparameters{\dodoubleargument \dosetupblock} % fast one (for compatibility) +\unexpanded\def\setupblock {\dodoubleargumentwithset\dosetupblock} % handles set -\appendtoks - \ctxcommand{definestructureblock("\currentblock")}% - \setuevalue{\e!begin\currentblock}{\dodoubleempty\strc_blocks_begin[\currentblock]}% - \setuevalue{\e!end \currentblock}{}% -\to \everydefineblock +\def\dosetupblock[#1]{\getparameters[\??tb#1]} % [#1][#2]} -\unexpanded\def\strc_blocks_begin[#1][#2]% +\unexpanded\def\defineblock[#1]% + {\processcommalist[#1]\dodefineblock} + +\def\dodefineblock#1% + {\getparameters + [\??tb#1] + [\c!before=\blank, + \c!after=\blank, + \c!inner=, + \c!style=, + \c!file=]% todo + \ctxcommand{definestructureblock("#1")}% + \setuvalue{\e!begin#1}{\dodoubleempty\dobeginofblock[#1]}% + \letvalue{\e!end#1}\relax} + +\def\dobeginofblock[#1][#2]% {\normalexpanded{\buff_pickup{@block@}{\e!begin#1}{\e!end#1}} {}% before {\ctxcommand{savestructureblock("#1","#2","@block@")}}}% after -\let\strc_blocks_setup\relax - -\unexpanded\def\dostarthiddenblock % called at lua end +\def\dostarthiddenblock {\startnointerference \dostartnormalblock} -\unexpanded\def\dostophiddenblock % called at lua end +\def\dostophiddenblock {\dostopnormalblock \stopnointerference} -\unexpanded\def\dostartnormalblock#1% called at lua end +% order matters: \c!before (think of: \c!before=\startitemize) + +% no \endgroups + +\let\doblocksetups\gobbleoneargument + +\def\dostartnormalblock#1% name {\bgroup - \visibletrue % will change + \visibletrue \edef\currentblock{#1}% - \strc_blocks_setup - \let\strc_blocks_setup\relax - \blockparameter\c!before - \useblockstyleandcolor\c!style\c!color % maybe moev one line up (font spacing) - \blockparameter\c!inner % better \c!setups + \doblocksetups\currentblock + \let\doblocksetups\gobbleoneargument + \namedblockparameter\currentblock\c!before + \dousestylehashparameter{\??tb\currentblock}\c!style + \dousecolorhashparameter{\??tb\currentblock}\c!color + \namedblockparameter\currentblock\c!inner \ignorespaces} -\unexpanded\def\dostopnormalblock % called at lua end +\def\dostopnormalblock {\removeunwantedspaces - \blockparameter\c!after + \namedblockparameter\currentblock\c!after \par % todo: alternative = text, paragraph \egroup} -\def\strc_blocks_set_state[#1][#2][#3]% state name tag +\def\dosetblockstate[#1][#2][#3]% state name tag {\ctxcommand{setstructureblockstate("#1","#2","#3")}} -\def\strc_blocks_select[#1][#2][#3][#4]% state name tag setups +\def\doselectblocks[#1][#2][#3][#4]% state name tag setups {\bgroup \doifassignmentelse{#3} - {\getparameters[\??blocktemp][\c!criterium=\v!text,#3]% - \def\strc_blocks_setup{\setupcurrentblock[#3]}% - \ctxcommand{selectstructureblock("#1","#2","","\csname\??blocktemp\c!criterium\endcsname")}} - {\getparameters[\??blocktemp][\c!criterium=\v!text,#4]% - \def\strc_blocks_setup{\setupcurrentblock[#4]}% - \ctxcommand{selectstructureblock("#1","#2","#3","\csname\??blocktemp\c!criterium\endcsname")}}% + {\getparameters[\??tb\??tb][\c!criterium=\v!text,#3]% + \def\doblocksetups##1{\getparameters[\??tb##1][#3]}% + \ctxcommand{selectstructureblock("#1","#2","","\@@tb@@tbcriterium")}} + {\getparameters[\??tb\??tb][\c!criterium=\v!text,#4]% + \def\doblocksetups##1{\getparameters[\??tb##1][#4]}% + \ctxcommand{selectstructureblock("#1","#2","#3","\@@tb@@tbcriterium")}}% \egroup} -% hide : save, if [+] also hidden execute -% keep : save and normal execute +% hide: save, if [+] also hidden execute +% keep: save and normal execute + +\def\hideblocks{\dotripleempty\dosetblockstate[hide]} +\def\keepblocks{\dotripleempty\dosetblockstate[keep]} + % use : normal execute unless [-] % process: hidden execute unless [-] % select : idem use -\unexpanded\def\hideblocks {\dotripleempty \strc_blocks_set_state[hide]} -\unexpanded\def\keepblocks {\dotripleempty \strc_blocks_set_state[keep]} -\unexpanded\def\useblocks {\doquadrupleempty\strc_blocks_select [use]} -\unexpanded\def\processblocks{\doquadrupleempty\strc_blocks_select [process]} -\unexpanded\def\selectblocks {\doquadrupleempty\strc_blocks_select [use]} +\def\useblocks {\doquadrupleempty\doselectblocks[use]} +\def\processblocks{\doquadrupleempty\doselectblocks[process]} +\def\selectblocks {\doquadrupleempty\doselectblocks[use]} \protect \endinput |