1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Buffer Macros Buffers}
15
16\registerctxluafile{buffini}{}
17
18\unprotect
19
20
21
22
23\let\currentbuffer\empty
24
25 \def\doifelsebuffer #1{\clf_doifelsebuffer {#1}}
26\unexpanded\def\doifelsebufferempty#1{\clf_doifelsebufferempty{#1}}
27
28\let\doifbufferelse\doifelsebuffer
29
30\unexpanded\def\resetbuffer
31 {\dosingleempty\buff_reset}
32
33\def\buff_reset[#1]
34 {\clf_erasebuffer{#1}}
35
36\setuvalue{\e!start\v!buffer}
37 {\begingroup
38 \obeylines
39 \dodoubleempty\buff_start}
40
41\def\buff_start[#1][#2]
42 {\buff_start_indeed{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}}
43
44
45
46
47
48
49
50\def\buff_start_indeed#1#2#3#4
51 {\edef\p_strip{\namedbufferparameter{#1}\c!strip}
52 \normalexpanded{\buff_pickup
53 {#2}
54 {#3}
55 {#4}
56 {}
57 {\buff_stop{#4}}
58 \ifx\p_strip\v!no\zerocount\else\plusone\fi}}
59
60\unexpanded\def\grabbufferdata
61 {\begingroup
62 \obeylines
63 \doquadrupleempty\buff_grab_direct_indeed}
64
65\unexpanded\def\grabbufferdatadirect
66 {\begingroup
67 \buff_start_indeed\empty}
68
69\def\buff_grab_direct_indeed
70 {\iffourthargument
71 \expandafter\buff_grab_direct_indeed_a
72 \else
73 \expandafter\buff_grab_direct_indeed_b
74 \fi}
75
76\def\buff_grab_direct_indeed_a[#1][#2][#3][#4]{\buff_start_indeed {#1}{#2}{#3}{#4}}
77\def\buff_grab_direct_indeed_b[#1][#2][#3][#4]{\buff_start_indeed\empty{#1}{#2}{#3}}
78
79\let\buff_finish\relax
80\let\buff_gobble\relax
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108\unexpanded\def\buff_pickup#1#2#3#4#5#6
109 {\begingroup
110 #4
111 \begingroup
112 \scratchcounter\catcodetable
113 \clf_erasebuffer{#1}
114 \setcatcodetable\vrbcatcodes
115 \unexpanded\def\dofinishpickupbuffer
116 {\endgroup
117 \endgroup
118 #5}
119
120
121
122
123 \clf_pickupbuffer
124 {#1}
125 {#2}
126 {#3}
127 {\string\dofinishpickupbuffer}
128 \scratchcounter
129 \ifnum#6=\plusone\s!true\else\s!false\fi
130
131 \expandafter\relax\string}
132
133\unexpanded\def\buff_stop#1
134 {\endgroup
135 \begincsname#1\endcsname}
136
137
138
139\unexpanded\def\setbuffer
140 {\dosingleempty\buff_set}
141
142\let\endbuffer\relax
143
144\def\buff_set[#1]#2\endbuffer
145 {\clf_assignbuffer{#1}{\detokenize{#2}}\catcodetable\relax}
146
147
148
149
150
151\installcorenamespace{buffer}
152
153\installcommandhandler \??buffer {buffer} \??buffer
154
155\setupbuffer
156 [\c!before=,
157 \c!after=]
158
159\newcount\c_buff_n_of_defined
160
161\let\currentdefinedbuffer\s!dummy
162
163\appendtoks
164 \global\advance\c_buff_n_of_defined\plusone
165 \setexpandedbufferparameter\c!number{\number\c_buff_n_of_defined}
166 \edef\currentdefinedbuffer{def\number\c_buff_n_of_defined}
167 \setuevalue{\e!start\currentbuffer}{\buff_start_defined{\currentbuffer}{\currentdefinedbuffer}{\e!start\currentbuffer}{\e!stop\currentbuffer}}
168 \setuevalue{\e!get \currentbuffer}{\buff_get_stored {\currentbuffer}{\currentdefinedbuffer}}
169\to \everydefinebuffer
170
171\unexpanded\def\buff_start_defined
172 {\begingroup
173 \buff_start_indeed}
174
175\def\thebuffernumber #1{\namedbufferparameter{#1}\c!number}
176\def\thedefinedbuffer#1{def\namedbufferparameter{#1}\c!number}
177
178\unexpanded\def\getbuffer
179 {\dosingleempty\buff_get}
180
181\unexpanded\def\buff_get[#1]
182 {\namedbufferparameter\empty\c!before\relax
183 \doifelsenothing{#1}
184 {\buff_get_stored_indeed\empty}
185 {\processcommalist[#1]\buff_get_stored_indeed}
186 \namedbufferparameter\empty\c!after\relax}
187
188
189
190
191
192
193
194
195
196
197\unexpanded\def\buff_get_stored#1#2
198 {\namedbufferparameter{#1}\c!before\relax
199 \buff_get_stored_indeed{#2}
200 \namedbufferparameter{#1}\c!after\relax}
201
202\unexpanded\def\buff_get_stored_indeed#1
203 {\clf_getbuffer{#1}}
204
205\unexpanded\def\getdefinedbuffer[#1]
206 {\buff_get_stored{#1}{\thedefinedbuffer{#1}}}
207
208\unexpanded\def\inlinebuffer
209 {\dosingleempty\buff_get_inline}
210
211\unexpanded\def\buff_get_inline[#1]
212 {\doifelsenothing{#1}
213 {\buff_get_stored_inline_indeed\empty}
214 {\processcommalist[#1]\buff_get_stored_inline_indeed}}
215
216\unexpanded\def\buff_get_stored_inline_indeed#1
217 {\ignorespaces\clf_getbuffer{#1}\removeunwantedspaces}
218
219\def\rawbuffer#1
220 {\clf_getbuffer{#1}}
221
222\definebuffer
223 [\v!hiding]
224
225\setupbuffer
226 [\v!hiding]
227 [\c!before=,
228 \c!after=]
229
230\unexpanded\def\processTEXbuffer
231 {\dosingleempty\buff_process_tex}
232
233\def\buff_process_tex[#1]
234 {\pushcatcodetable
235 \catcodetable\ctxcatcodes
236 \buff_get_stored_indeed{#1}
237 \popcatcodetable}
238
239
240
241
242
243
244
245
246
247
248\installcorenamespace{savebuffer}
249\installcorenamespace{savebuffercounter}
250
251\installcommandhandler \??savebuffer {savebuffer} \??savebuffer
252
253\setupsavebuffer
254 [\c!list=,
255 \c!file=,
256 \c!directory=,
257 \c!prefix=\v!yes]
258
259\unexpanded\def\savebuffer
260 {\dodoubleempty\buff_save}
261
262\def\buff_save[#1][#2]
263 {\begingroup
264 \doifelseassignment{#1}
265 {\setupcurrentsavebuffer[#1]}
266 {\setupcurrentsavebuffer[\c!list={#1},\c!file=#2]}
267 \clf_savebuffer
268 {\savebufferparameter\c!list}
269 {\savebufferparameter\c!file}
270 {\savebufferparameter\c!prefix}
271 {\savebufferparameter\c!option}
272 {\savebufferparameter\c!directory}
273 \endgroup}
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296\appendtoks
297 \ifcsname\e!stop\currentsavebuffer\endcsname\else
298 \definebuffer[\currentsavebuffer]
299 \expandafter\newcount\csname\??savebuffercounter\currentsavebuffer\endcsname
300 \setuevalue{\e!stop\currentsavebuffer}{\buff_stop_save_buffer{\currentsavebuffer}}
301 \setsavebufferparameter\c!file{\currentsavebuffer.tex}
302 \fi
303\to \everydefinesavebuffer
304
305\protected\def\buff_stop_save_buffer#1
306 {\edef\currentsavebuffer{#1}
307 \global\advance\csname\??savebuffercounter\currentsavebuffer\endcsname\plusone
308 \clf_savebuffer
309 {\thedefinedbuffer{\currentsavebuffer}}
310 {\savebufferparameter\c!file}
311 {\savebufferparameter\c!prefix}
312 {\ifnum\csname\??savebuffercounter\currentsavebuffer\endcsname>\plusone\v!append\fi}
313 {\savebufferparameter\c!directory}}
314
315
316
317
318
319
320
321
322
323
324
325
326\unexpanded\def\ctxluabuffer {\dosingleempty\buff_ctxlua}
327\unexpanded\def\mkvibuffer {\dosingleempty\buff_mkvi}
328
329
330\def\buff_ctxlua[#1]{\clf_getbufferctxlua{#1}}
331\def\buff_mkvi [#1]{\clf_getbuffermkvi {#1}}
332
333
334
335\unexpanded\def\doprocesstexbuffer#1{\buff_process_tex[#1]}
336
337\let\dostartbuffer\grabbufferdata
338
339
340
341\def\getbufferdata[#1]{\buff_get_stored_indeed{#1}}
342
343\protect \endinput
344 |