1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Structure Macros Section Block Environments}
15
16\unprotect
17
18
19
20
21
22
23
24
25
26
27
28
29
30\installcorenamespace{sectionblock}
31
32\installcommandhandler \??sectionblock {sectionblock} \??sectionblock
33
34\setupsectionblock
35 [\c!number=\v!yes,
36 \c!page=\v!right]
37
38\newtoks\everybeforesectionblock
39\newtoks\everyaftersectionblock
40
41\let\strc_sectionblock_define_normal\definesectionblock
42
43\unexpanded\def\definesectionblock
44 {\dotripleargument\strc_sectionblock_define}
45
46\def\strc_sectionblock_define[#1][#2][#3]
47 {\strc_sectionblock_define_normal[#1][#3]
48
49 \strc_sectionblock_set_environment{#1}\empty
50 \setuvalue{\e!start#2}{\startsectionblock[#1]}
51 \setuvalue{\e!stop #2}{\stopsectionblock}}
52
53\ifdefined \resetallstructuremarks \else
54 \let\resetallstructuremarks\relax
55\fi
56
57\def\strc_sectionblock_handle_page
58 {\edef\p_strc_sectionblock_page{\sectionblockparameter\c!page}
59 \ifx\p_strc_sectionblock_page\empty \else
60 \page[\p_strc_sectionblock_page]
61 \fi}
62
63\appendtoks
64 \strc_sectionblock_handle_page
65 \resetallstructuremarks
66 \strc_sectionblock_get_environment\currentsectionblock
67 \sectionblockparameter\c!before
68 \dostarttagged\t!division\currentsectionblock
69\to \everybeforesectionblock
70
71\appendtoks
72 \sectionblockparameter\c!after
73 \strc_sectionblock_handle_page
74 \dostoptagged
75 \resetallstructuremarks
76\to \everyaftersectionblock
77
78\unexpanded\def\setsectionblock
79 {\dodoubleempty\strc_sectionblock_set}
80
81\def\strc_sectionblock_set[#1][#2]
82 {\edef\currentsectionblock{#1}
83 \setupcurrentsectionblock[#2]
84 \clf_setsectionblock{#1}
85 bookmark {\sectionblockparameter\c!bookmark}
86 \relax}
87
88\let\currentsectionblock\empty
89
90\unexpanded\def\startsectionblock
91 {\dodoubleempty\strc_sectionblock_start}
92
93\unexpanded\def\strc_sectionblock_start[#1][#2]
94 {
95 \begingroup
96 \edef\currentsectionblock{#1}
97 \setupcurrentsectionblock[#2]
98 \clf_pushsectionblock{#1}
99 bookmark {\sectionblockparameter\c!bookmark}
100 \relax
101
102 \setsystemmode\currentsectionblock
103 \the\everybeforesectionblock\relax
104 \showmessage\m!structures1\currentsectionblock}
105
106\unexpanded\def\stopsectionblock
107 {\showmessage\m!structures2\currentsectionblock
108 \the\everyaftersectionblock\relax
109 \clf_popsectionblock
110 \endgroup}
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132\installcorenamespace{sectionblockenvironment}
133
134\unexpanded\def\strc_sectionblock_set_environment#1#2
135 {\setvalue{\??sectionblockenvironment#1}{#2}}
136
137\unexpanded\def\strc_sectionblock_get_environment#1
138 {\csname\??sectionblockenvironment#1\endcsname}
139
140\unexpanded\setvalue{\e!start\v!sectionblockenvironment}
141 {\dosingleargument\strc_sectionblock_environment_start}
142
143\letvalue{\e!stop\v!sectionblockenvironment}\relax
144
145\def\strc_sectionblock_environment_start[#1]
146 {\grabuntil{\e!stop\v!sectionblockenvironment}{\strc_sectionblock_set_environment{#1}}}
147
148\protect \endinput
149 |