summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/strc-blk.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/strc-blk.mkiv')
-rw-r--r--tex/context/base/mkiv/strc-blk.mkiv100
1 files changed, 100 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/strc-blk.mkiv b/tex/context/base/mkiv/strc-blk.mkiv
new file mode 100644
index 000000000..fe259d223
--- /dev/null
+++ b/tex/context/base/mkiv/strc-blk.mkiv
@@ -0,0 +1,100 @@
+%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 \& \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 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)
+%
+% order matters: \c!before (think of: \c!before=\startitemize)
+%
+% no \endgroups
+
+\installcorenamespace {block}
+\installcorenamespace {blocktemp}
+
+\installcommandhandler \??block {block} \??block
+
+\appendtoks
+ \clf_definestructureblock{\currentblock}%
+ \setuevalue{\e!begin\currentblock}{\dodoubleempty\strc_blocks_begin[\currentblock]}%
+ \setuevalue{\e!end \currentblock}{}%
+\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
+
+\let\strc_blocks_setup\relax
+
+\unexpanded\def\dostarthiddenblock % called at lua end
+ {\startnointerference
+ \dostartnormalblock}
+
+\unexpanded\def\dostophiddenblock % called at lua end
+ {\dostopnormalblock
+ \stopnointerference}
+
+\unexpanded\def\dostartnormalblock#1% called at lua end
+ {\bgroup
+ \visibletrue % will change
+ \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
+ \ignorespaces}
+
+\unexpanded\def\dostopnormalblock % called at lua end
+ {\removeunwantedspaces
+ \blockparameter\c!after
+ \par % todo: alternative = text, paragraph
+ \egroup}
+
+\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
+ \doifelseassignment{#3}
+ {\getparameters[\??blocktemp][\c!criterium=\v!text,#3]%
+ \def\strc_blocks_setup{\setupcurrentblock[#3]}%
+ \clf_selectstructureblock{#1}{#2}{}{\csname\??blocktemp\c!criterium\endcsname}}
+ {\getparameters[\??blocktemp][\c!criterium=\v!text,#4]%
+ \def\strc_blocks_setup{\setupcurrentblock[#4]}%
+ \clf_selectstructureblock{#1}{#2}{#3}{\csname\??blocktemp\c!criterium\endcsname}}%
+ \egroup}
+
+% hide : save, if [+] also hidden execute
+% keep : save and normal execute
+% 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]}
+
+\protect \endinput