1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus
{
loading
}{
ConTeXt
Structure
Macros
Blockmoves
}
15
16\registerctxluafile
{
strc
blk
}{}
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\protect
\endinput
181