%D \module %D [ file=strc-blk, %D version=2008.10.20, %D title=\CONTEXT\ Structure Macros, %D subtitle=Blockmoves, %D author=Hans Hagen, %D date=\currentdate, %D copyright=PRAGMA-ADE / Hans Hagen] %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 Structure Macros / Blockmoves} \registerctxluafile{strc-blk}{1.001} \unprotect % we run on top of buffers and sections % % todo: prefix numbers (needs further integration elsewhere) % check functionality % alternative files (needs further integration elsewhere) \def\blockparameter#1#2{\ifcsname\??tb#1#2\endcsname\csname\??tb#1#2\endcsname\fi} \unexpanded\def\setupblockparameters{\dodoubleargument \dosetupblock} % fast one (for compatibility) \unexpanded\def\setupblock {\dodoubleargumentwithset\dosetupblock} % handles set \def\dosetupblock[#1]{\getparameters[\??tb#1]} % [#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 \ctxlua{structure.blocks.define("#1")}% \setvalue{\e!begin#1}{\dodoubleempty\dobeginofblock[#1]}% \letvalue{\e!end#1}\relax} \long\def\dobeginofblock[#1][#2]% {\normalexpanded{\noexpand\dodowithbuffer{@block@}{\e!begin#1}{\e!end#1}} {}{\ctxlua{structure.blocks.save("#1","#2","@block@")}}}% before after \def\dostarthiddenblock {\startnointerference \dostartnormalblock} \def\dostophiddenblock {\dostopnormalblock \stopnointerference} % order matters: \c!before (think of: \c!before=\startitemize) % no \endgroups \let\doblocksetups\gobbleoneargument \def\dostartnormalblock#1% name {\bgroup \visibletrue \edef\currentblock{#1}% \doblocksetups\currentblock \let\doblocksetups\gobbleoneargument \blockparameter\currentblock\c!before \dosetfontattribute{\??tb\currentblock}\c!style \dosetcolorattribute{\??tb\currentblock}\c!color \blockparameter\currentblock\c!inner \ignorespaces} \def\dostopnormalblock {\removeunwantedspaces \blockparameter\currentblock\c!after \par % todo: alternative = text, paragraph \egroup} \def\dosetblockstate[#1][#2][#3]% state name tag {\ctxlua{structure.blocks.setstate("#1","#2","#3")}} \def\doselectblocks[#1][#2][#3][#4]% state name tag setups {\bgroup \doifassignmentelse{#3} {\getparameters[\??tb\??tb][\c!criterium=\v!text,#3]% \def\doblocksetups##1{\getparameters[\??tb##1][#3]}% \ctxlua{structure.blocks.select("#1","#2","","\@@tb@@tbcriterium")}} {\getparameters[\??tb\??tb][\c!criterium=\v!text,#4]% \def\doblocksetups##1{\getparameters[\??tb##1][#4]}% \ctxlua{structure.blocks.select("#1","#2","#3","\@@tb@@tbcriterium")}}% \egroup} % 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 \def\useblocks {\doquadrupleempty\doselectblocks[use]} \def\processblocks{\doquadrupleempty\doselectblocks[process]} \def\selectblocks {\doquadrupleempty\doselectblocks[use]} \protect \endinput