summaryrefslogtreecommitdiff
path: root/tex/context/base/strc-blk.mkiv
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
committerMarius <mariausol@gmail.com>2010-07-04 15:32:09 +0300
commit85b7bc695629926641c7cb752fd478adfdf374f3 (patch)
tree80293f5aaa7b95a500a78392c39688d8ee7a32fc /tex/context/base/strc-blk.mkiv
downloadcontext-85b7bc695629926641c7cb752fd478adfdf374f3.tar.gz
stable 2010-05-24 13:10
Diffstat (limited to 'tex/context/base/strc-blk.mkiv')
-rw-r--r--tex/context/base/strc-blk.mkiv112
1 files changed, 112 insertions, 0 deletions
diff --git a/tex/context/base/strc-blk.mkiv b/tex/context/base/strc-blk.mkiv
new file mode 100644
index 000000000..8aa856840
--- /dev/null
+++ b/tex/context/base/strc-blk.mkiv
@@ -0,0 +1,112 @@
+%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