1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Structure Macros Blockmoves}
15
16\registerctxluafile{strcblk}{}
17
18\unprotect
19
20
21
22
23
24
25
26
27
28
29
30\installcorenamespace {block}
31\installcorenamespace {blocktemp}
32
33\installcommandhandler \??block {block} \??block
34
35\appendtoks
36 \clf_definestructureblock{\currentblock}
37 \setuevalue{\e!begin\currentblock}{\strc_blocks_begin{\currentblock}}
38 \letvalue {\e!end \currentblock}\donothing
39\to \everydefineblock
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57\let\m_block \empty
58\let\m_subblock\empty
59
60\unexpanded\def\strc_blocks_begin#1
61 {\edef\m_block {#1}
62 \let \m_subblock\empty
63 \doifelsenextoptionalcs\strc_blocks_begin_yes\strc_blocks_begin_nop}
64
65\unexpanded\def\strc_blocks_begin_yes[#1]
66 {\doifelseassignmentcs{#1}
67 \strc_blocks_begin_indeed
68 \strc_blocks_begin_tagged
69 {#1}}
70
71\unexpanded\def\strc_blocks_begin_tagged#1
72 {\edef\m_subblock{#1}
73 \doifelsenextoptionalcs\strc_blocks_begin_yes_yes\strc_blocks_begin_nop}
74
75\unexpanded\def\strc_blocks_begin_yes_yes[#1]
76 {\strc_blocks_begin_indeed{#1}}
77
78\unexpanded\def\strc_blocks_begin_nop
79 {\strc_blocks_begin_indeed{}}
80
81\unexpanded\def\strc_blocks_begin_indeed#1
82 {\normalexpanded{\buff_pickup{\??block}{\e!begin\m_block}{\e!end\m_block}}
83 {}
84 {\clf_savestructureblock{\m_block}{\m_subblock}{#1}{\??block}}
85 \plusone}
86
87\let\strc_blocks_setup\relax
88
89\newconstant \c_strc_blocks_index
90\newconditional\c_strc_blocks_display
91
92\unexpanded\def\dostarthiddenblock
93 {\begingroup
94 \visiblefalse
95 \startnointerference
96 \strc_start_block}
97
98\unexpanded\def\dostophiddenblock
99 {\strc_stop_block
100 \stopnointerference
101 \endgroup}
102
103\unexpanded\def\dostartnormalblock
104 {\begingroup
105 \visibletrue
106 \strc_start_block}
107
108\unexpanded\def\dostopnormalblock
109 {\strc_stop_block
110 \endgroup}
111
112\def\strc_start_block#1#2
113 {\edef\currentblock{#2}
114 \c_strc_blocks_index#1\relax
115 \strc_blocks_setup
116 \let\strc_blocks_setup\relax
117 \edef\p_alternative{\blockparameter\c!alternative}
118 \ifx\p_alternative\v!text
119 \setfalse\c_strc_blocks_display
120 \else
121 \settrue\c_strc_blocks_display
122 \fi
123 \ifconditional\c_strc_blocks_display
124 \blockparameter\c!before
125 \fi
126 \begingroup
127 \usesetupsparameter\blockparameter\relax
128 \dostarttagged\t!block\currentblock
129 \useblockstyleandcolor\c!style\c!color
130 \blockparameter\c!inner
131 \ifconditional\c_strc_blocks_display
132 \usealignparameter\blockparameter
133 \else
134 \blockparameter\c!left
135 \fi
136 \ignorespaces}
137
138\def\strc_stop_block
139 {\removeunwantedspaces
140 \ifconditional\c_strc_blocks_display
141 \par
142 \else
143 \blockparameter\c!right
144 \fi
145 \dostoptagged
146 \endgroup
147 \ifconditional\c_strc_blocks_display
148 \blockparameter\c!after
149 \fi}
150
151\def\strc_blocks_set_state[#1][#2][#3]
152 {\clf_setstructureblockstate{#1}{#2}{#3}}
153
154\def\strc_blocks_select[#1][#2][#3][#4]
155 {\begingroup
156 \doifelseassignment{#3}
157 {\getparameters[\??blocktemp][\c!criterium=\v!text,#3]
158 \def\strc_blocks_setup{\setupcurrentblock[#3]}
159 \clf_selectstructureblock{#1}{#2}{}{\csname\??blocktemp\c!criterium\endcsname}}
160 {\getparameters[\??blocktemp][\c!criterium=\v!text,#4]
161 \def\strc_blocks_setup{\setupcurrentblock[#4]}
162 \clf_selectstructureblock{#1}{#2}{#3}{\csname\??blocktemp\c!criterium\endcsname}}
163 \endgroup}
164
165\def\blockuservariable#1
166 {\clf_structureblockuservariable\c_strc_blocks_index{#1}}
167
168
169
170
171
172
173
174\unexpanded\def\hideblocks {\dotripleempty \strc_blocks_set_state[hide]}
175\unexpanded\def\keepblocks {\dotripleempty \strc_blocks_set_state[keep]}
176\unexpanded\def\useblocks {\doquadrupleempty\strc_blocks_select [use]}
177\unexpanded\def\processblocks{\doquadrupleempty\strc_blocks_select [process]}
178\unexpanded\def\selectblocks {\doquadrupleempty\strc_blocks_select [use]}
179
180\unexpanded\def\doifelseblocksempty{\clf_doifelsestructureblocksempty}
181
182\protect \endinput
183 |