From 7b271baae19db1528fbe6621bdf50af89a5a336b Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 22 Feb 2019 20:29:46 +0100 Subject: 2019-02-22 19:43:00 --- tex/context/base/mkiv/strc-blk.mkiv | 128 +++++++++++++++++++++++++++++------- 1 file changed, 104 insertions(+), 24 deletions(-) (limited to 'tex/context/base/mkiv/strc-blk.mkiv') diff --git a/tex/context/base/mkiv/strc-blk.mkiv b/tex/context/base/mkiv/strc-blk.mkiv index c42bb25ec..e52198721 100644 --- a/tex/context/base/mkiv/strc-blk.mkiv +++ b/tex/context/base/mkiv/strc-blk.mkiv @@ -34,48 +34,125 @@ \appendtoks \clf_definestructureblock{\currentblock}% - \setuevalue{\e!begin\currentblock}{\dodoubleempty\strc_blocks_begin[\currentblock]}% - \setuevalue{\e!end \currentblock}{}% + \setuevalue{\e!begin\currentblock}{\strc_blocks_begin{\currentblock}}% + \letvalue {\e!end \currentblock}\donothing \to \everydefineblock -\unexpanded\def\strc_blocks_begin[#1][#2]% - {\normalexpanded{\buff_pickup{@block@}{\e!begin#1}{\e!end#1}} - {}% before - {\clf_savestructureblock{#1}{#2}{@block@}}% - \plusone}% after +% The naive way: +% +% \unexpanded\def\strc_blocks_begin#1% +% {\dotripleempty\strc_blocks_begin_indeed[#1]} +% +% \unexpanded\def\strc_blocks_begin_indeed[#1][#2][#3]% +% {\normalexpanded{\buff_pickup{\??block}{\e!begin#1}{\e!end#1}} +% {}% +% {\clf_savestructureblock{#1}{#2}{#3}{\??block}}% +% \plusone}% +% +% We need to prevent too much lookahead which will gobble newlines +% that are needed for buffers. See blocks-002.tex as example. + +% maybe: systemmode "block:" + +\let\m_block \empty +\let\m_subblock\empty + +\unexpanded\def\strc_blocks_begin#1% + {\edef\m_block {#1}% + \let \m_subblock\empty + \doifelsenextoptionalcs\strc_blocks_begin_yes\strc_blocks_begin_nop} + +\unexpanded\def\strc_blocks_begin_yes[#1]% + {\doifelseassignmentcs{#1}% + \strc_blocks_begin_indeed + \strc_blocks_begin_tagged + {#1}} + +\unexpanded\def\strc_blocks_begin_tagged#1% + {\edef\m_subblock{#1}% + \doifelsenextoptionalcs\strc_blocks_begin_yes_yes\strc_blocks_begin_nop} + +\unexpanded\def\strc_blocks_begin_yes_yes[#1]% + {\strc_blocks_begin_indeed{#1}} + +\unexpanded\def\strc_blocks_begin_nop + {\strc_blocks_begin_indeed{}} + +\unexpanded\def\strc_blocks_begin_indeed#1% + {\normalexpanded{\buff_pickup{\??block}{\e!begin\m_block}{\e!end\m_block}}% + {}% + {\clf_savestructureblock{\m_block}{\m_subblock}{#1}{\??block}}% + \plusone} \let\strc_blocks_setup\relax +\newconstant \c_strc_blocks_index +\newconditional\c_strc_blocks_display + \unexpanded\def\dostarthiddenblock % called at lua end - {\startnointerference - \dostartnormalblock} + {\begingroup + \visiblefalse % blocks float + \startnointerference + \strc_start_block} \unexpanded\def\dostophiddenblock % called at lua end - {\dostopnormalblock - \stopnointerference} + {\strc_stop_block + \stopnointerference + \endgroup} + +\unexpanded\def\dostartnormalblock % called at lua end + {\begingroup + \visibletrue + \strc_start_block} -\unexpanded\def\dostartnormalblock#1% called at lua end - {\bgroup - \visibletrue % will change - \edef\currentblock{#1}% +\unexpanded\def\dostopnormalblock % called at lua end + {\strc_stop_block + \endgroup} + +\def\strc_start_block#1#2% + {\edef\currentblock{#2}% + \c_strc_blocks_index#1\relax \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 + \edef\p_alternative{\blockparameter\c!alternative}% + \ifx\p_alternative\v!text + \setfalse\c_strc_blocks_display + \else + \settrue\c_strc_blocks_display + \fi + \ifconditional\c_strc_blocks_display + \blockparameter\c!before + \fi + \begingroup + \usesetupsparameter\blockparameter\relax + \dostarttagged\t!block\currentblock + \useblockstyleandcolor\c!style\c!color + \blockparameter\c!inner % old + \ifconditional\c_strc_blocks_display + \usealignparameter\blockparameter + \else + \blockparameter\c!left + \fi \ignorespaces} -\unexpanded\def\dostopnormalblock % called at lua end +\def\strc_stop_block {\removeunwantedspaces - \blockparameter\c!after - \par % todo: alternative = text, paragraph - \egroup} + \ifconditional\c_strc_blocks_display + \par + \else + \blockparameter\c!right + \fi + \dostoptagged + \endgroup + \ifconditional\c_strc_blocks_display + \blockparameter\c!after + \fi} \def\strc_blocks_set_state[#1][#2][#3]% state name tag {\clf_setstructureblockstate{#1}{#2}{#3}} \def\strc_blocks_select[#1][#2][#3][#4]% state name tag setups - {\bgroup + {\begingroup \doifelseassignment{#3} {\getparameters[\??blocktemp][\c!criterium=\v!text,#3]% \def\strc_blocks_setup{\setupcurrentblock[#3]}% @@ -83,7 +160,10 @@ {\getparameters[\??blocktemp][\c!criterium=\v!text,#4]% \def\strc_blocks_setup{\setupcurrentblock[#4]}% \clf_selectstructureblock{#1}{#2}{#3}{\csname\??blocktemp\c!criterium\endcsname}}% - \egroup} + \endgroup} + +\def\blockuservariable#1% + {\clf_structureblockuservariable\c_strc_blocks_index{#1}} % hide : save, if [+] also hidden execute % keep : save and normal execute -- cgit v1.2.3