1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Core Macros Environments}
15
16\registerctxluafile{coreenv}{}
17
18\unprotect
19
20\ifdefined\wildcardsymbol \else \def\wildcardsymbol{*} \fi
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44\let\systemmodeprefix\wildcardsymbol
45
46
47
48\installcorenamespace{modestack}
49
50\setnewconstant\disabledmode \zerocount
51\setnewconstant\enabledmode \plusone
52\setnewconstant\preventedmode\plustwo
53
54
55
56\def\??mode{mode>}
57
58\def\syst_modes_new#1
59 {\expandafter\newcount\csname\??mode#1\endcsname}
60
61\unexpanded\def\newmode#1
62 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi}
63
64\unexpanded\def\setmode#1
65 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
66 \lastnamedcs\enabledmode}
67
68\unexpanded\def\resetmode#1
69 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
70 \lastnamedcs\disabledmode}
71
72\unexpanded\def\globalsetmode#1
73 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
74 \global\lastnamedcs\enabledmode}
75
76\unexpanded\def\globalresetmode#1
77 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
78 \global\lastnamedcs\disabledmode}
79
80\unexpanded\def\newsystemmode#1
81 {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi}
82
83\unexpanded\def\setsystemmode#1
84 {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
85 \lastnamedcs\enabledmode}
86
87\unexpanded\def\resetsystemmode#1
88 {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
89 \lastnamedcs\disabledmode}
90
91\unexpanded\def\globalsetsystemmode#1
92 {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
93 \global\lastnamedcs\enabledmode}
94
95\unexpanded\def\globalresetsystemmode#1
96 {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
97 \global\lastnamedcs\disabledmode}
98
99
100
101
102
103
104
105
106
107\pushoverloadmode
108
109\newsystemmode{trialtypesetting}
110
111\expandafter\let\csname\??mode\systemmodeprefix trialtypesetting\endcsname\trialtypesettingstate
112
113\popoverloadmode
114
115\appendtoks
116 \trialtypesettingstate\enabledmode
117 \luacopyinputnodes\plusone
118\to \everysettrialtypesetting
119
120\appendtoks
121 \trialtypesettingstate\disabledmode
122 \luacopyinputnodes\zerocount
123\to \everyresettrialtypesetting
124
125
126
127\let\syst_mode_prefix\relax
128
129\unexpanded\def\preventmode{\unprotect\syst_modes_prevent}
130\unexpanded\def\enablemode {\unprotect\syst_modes_enable }
131\unexpanded\def\disablemode{\unprotect\syst_modes_disable}
132
133\unexpanded\def\globalpreventmode{\let\syst_mode_prefix\global\unprotect\syst_modes_prevent}
134\unexpanded\def\globalenablemode {\let\syst_mode_prefix\global\unprotect\syst_modes_enable }
135\unexpanded\def\globaldisablemode{\let\syst_mode_prefix\global\unprotect\syst_modes_disable}
136
137
138
139
140
141\def\syst_modes_prevent[#1]{\protect\fastprocesscommacommand[#1]\syst_modes_prevent_indeed\let\syst_mode_prefix\relax}
142\def\syst_modes_enable [#1]{\protect\fastprocesscommacommand[#1]\syst_modes_enable_indeed \let\syst_mode_prefix\relax}
143\def\syst_modes_disable[#1]{\protect\fastprocesscommacommand[#1]\syst_modes_disable_indeed\let\syst_mode_prefix\relax}
144
145\def\syst_modes_prevent_indeed#1
146 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
147 \syst_mode_prefix\lastnamedcs\preventedmode}
148
149\def\syst_modes_enable_indeed#1
150 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
151 \ifnum\lastnamedcs=\preventedmode\else
152 \syst_mode_prefix\lastnamedcs\enabledmode
153 \fi}
154
155\def\syst_modes_disable_indeed#1
156 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
157 \ifnum\lastnamedcs=\preventedmode\else
158 \syst_mode_prefix\lastnamedcs\disabledmode
159 \fi}
160
161
162
163
164
165
166
167\unexpanded\def\definemode
168 {\unprotect
169 \dodoubleempty\syst_modes_define}
170
171\def\syst_modes_define[#1][#2]
172 {\protect
173 \edef\m_modes_asked{#2}
174
175 \fastprocesscommacommand[#1]\syst_modes_define_indeed}
176
177\def\syst_modes_define_indeed#1
178 {\ifcsname\??mode#1\endcsname
179
180 \else
181 \syst_modes_new{#1}
182 \fi
183 \ifx\m_modes_asked\v!keep
184
185 \else
186 \lastnamedcs\ifx\m_modes_asked\v!yes\enabledmode\else\disabledmode\fi
187 \fi}
188
189
190
191\def\booleanmodevalue#1
192 {\ifcsname\??mode#1\endcsname
193 \ifcase\lastnamedcs
194 \s!false
195 \or
196 \s!true
197 \else
198 \s!false
199 \fi
200 \else
201 \s!false
202 \fi}
203
204
205
206\newconditional\c_checked_mode
207
208
209
210\def\syst_modes_check_indeed#1
211 {\ifcsname\??mode#1\endcsname
212 \ifcase\lastnamedcs\else
213 \let\syst_modes_check_step\gobbleoneargument
214 \fi
215 \fi}
216
217\def\syst_modes_check_nop#1#2#3
218 {\let\syst_modes_check_step\syst_modes_check_indeed
219
220 \fastprocesscommacommand[#3]\syst_modes_check_step
221 \ifx\syst_modes_check_step\gobbleoneargument
222 \expandafter#1
223 \else
224 \expandafter#2
225 \fi}
226
227\def\syst_modes_check_yes#1#2#3
228 {\ifcase\lastnamedcs
229 \expandafter#2
230 \or
231 \expandafter#1
232 \else
233 \expandafter#2
234 \fi}
235
236\def\syst_modes_check_lr#1#2#3
237 {\ifcsname\??mode#3\endcsname
238 \expandafter\syst_modes_check_yes
239 \else
240 \expandafter\syst_modes_check_nop
241 \fi#1#2{#3}}
242
243\def\syst_modes_check_ss#1#2[#3]
244 {\ifcsname\??mode#3\endcsname
245 \expandafter\syst_modes_check_yes
246 \else
247 \expandafter\syst_modes_check_nop
248 \fi#1#2{#3}}
249
250
251
252\def\syst_modes_check_all_indeed#1
253 {\ifcsname\??mode#1\endcsname
254 \ifcase\lastnamedcs
255 \let\syst_modes_check_all_step\gobbleoneargument
256 \or
257
258 \else
259 \let\syst_modes_check_all_step\gobbleoneargument
260 \fi
261 \else
262 \let\syst_modes_check_all_step\gobbleoneargument
263 \fi}
264
265\def\syst_modes_check_all_lr#1#2#3
266 {\let\syst_modes_check_all_step\syst_modes_check_all_indeed
267 \fastprocesscommacommand[#3]\syst_modes_check_all_step
268 \ifx\syst_modes_check_all_step\gobbleoneargument
269 \expandafter#2
270 \else
271 \expandafter#1
272 \fi}
273
274\def\syst_modes_check_all_ss#1#2[#3]
275 {\let\syst_modes_check_all_step\syst_modes_check_all_indeed
276 \fastprocesscommacommand[#3]\syst_modes_check_all_step
277 \ifx\syst_modes_check_all_step\gobbleoneargument
278 \expandafter#2
279 \else
280 \expandafter#1
281 \fi}
282
283\unexpanded\def\doifelsemode {\syst_modes_check_lr\firstoftwoarguments\secondoftwoarguments}
284\unexpanded\def\doifmode {\syst_modes_check_lr\firstofoneargument\gobbleoneargument}
285\unexpanded\def\doifnotmode {\syst_modes_check_lr\gobbleoneargument\firstofoneargument}
286\unexpanded\def\startmode {\syst_modes_check_ss\donothing\syst_modes_stop_yes}
287\unexpanded\def\startnotmode {\syst_modes_check_ss\syst_modes_stop_nop\donothing}
288\unexpanded\def\doifelseallmodes{\syst_modes_check_all_lr\firstoftwoarguments\secondoftwoarguments}
289\unexpanded\def\doifallmodes {\syst_modes_check_all_lr\firstofoneargument\gobbleoneargument}
290\unexpanded\def\doifnotallmodes {\syst_modes_check_all_lr\gobbleoneargument\firstofoneargument}
291\unexpanded\def\startallmodes {\syst_modes_check_all_ss\donothing\syst_modes_stop_all_yes}
292\unexpanded\def\startnotallmodes{\syst_modes_check_all_ss\syst_modes_stop_all_nop\donothing}
293
294\let\doifmodeelse \doifelsemode
295\let\doifallmodeselse \doifelseallmodes
296
297\unexpanded\def\stopmode {}
298\unexpanded\def\stopnotmode {}
299\unexpanded\def\stopallmodes {}
300\unexpanded\def\stopnotallmodes {}
301
302\def\syst_modes_stop_yes #1\stopmode {}
303\def\syst_modes_stop_nop #1\stopnotmode {}
304\def\syst_modes_stop_all_yes#1\stopallmodes {}
305\def\syst_modes_stop_all_nop#1\stopnotallmodes{}
306
307
308
309\unexpanded\def\pushmode[#1]
310 {\ifcsname\??mode#1\endcsname\else\syst_modes_new{#1}\fi
311 \expandafter\edef\csname\??modestack#1\expandafter\endcsname\expandafter{\number\lastnamedcs}
312 \expandafter\pushmacro\lastnamedcs}
313
314\unexpanded\def\popmode[#1]
315 {\ifcsname\??modestack#1\endcsname
316 \expandafter\popmacro\lastnamedcs
317 \csname\??mode#1\endcsname\csname\??modestack#1\endcsname\relax
318 \fi}
319
320\def\pushsystemmode#1
321 {\ifcsname\??mode\systemmodeprefix#1\endcsname\else\syst_modes_new{\systemmodeprefix#1}\fi
322 \expandafter\edef\csname\??modestack\systemmodeprefix#1\expandafter\endcsname\expandafter{\number\lastnamedcs}
323 \expandafter\pushmacro\lastnamedcs}
324
325\def\popsystemmode#1
326 {\ifcsname\??modestack\systemmodeprefix#1\endcsname
327 \expandafter\popmacro\lastnamedcs
328 \csname\??mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax
329 \fi}
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372\newconditional\c_syst_modes_set_done
373
374\unexpanded\def\startmodeset
375 {\pushmacro\c_syst_modes_set_done
376 \setfalse\c_syst_modes_set_done
377 \doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit}
378
379\def\syst_modes_set_start[#1]
380 {\edef\m_mode_case{#1}
381 \ifx\m_mode_case\s!default
382 \ifconditional\c_syst_modes_set_done
383 \doubleexpandafter\syst_modes_set_quit
384 \else
385 \doubleexpandafter\syst_modes_set_yes
386 \fi
387 \else
388 \singleexpandafter\syst_modes_set_check
389 \fi}
390
391\def\syst_modes_set_check
392 {\syst_modes_check_lr\syst_modes_set_yes\syst_modes_set_nop\m_mode_case}
393
394\def\syst_modes_set_yes#1
395 {\settrue\c_syst_modes_set_done
396 #1
397 \doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit}
398
399\def\syst_modes_set_nop#1
400 {\doifelsenextoptionalcs\syst_modes_set_start\syst_modes_set_quit}
401
402\def\syst_modes_set_quit#1\stopmodeset
403 {\popmacro\c_syst_modes_set_done}
404
405\let\stopmodeset\relax
406
407
408
409\enablemode[mkiv] \newsystemmode{mkiv} \setsystemmode{mkiv}
410
411
412
413\installcorenamespace{setup}
414
415\unexpanded\def\startsetups{}
416\unexpanded\def\stopsetups {}
417
418\unexpanded\def\setups{\doifelsenextbgroup\syst_setups_a\syst_setups_b}
419\unexpanded\def\setup {\doifelsenextbgroup\syst_setups \syst_setups_c}
420
421\def\syst_setups_a #1{\processcommacommand[#1]\syst_setups}
422\def\syst_setups_b[#1]{\processcommacommand[#1]\syst_setups}
423\def\syst_setups_c[#1]{\syst_setups{#1}}
424
425\letvalue{\??setup:\??empty}\gobbleoneargument
426
427\def\syst_setups#1
428 {\csname\??setup
429 \ifgridsnapping
430 \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else:\ifcsname\??setup:#1\endcsname#1\else\??empty\fi\fi
431 \else
432 :\ifcsname\??setup:#1\endcsname#1\else\??empty\fi
433 \fi
434 \endcsname\empty}
435
436
437
438\def\fastsetup #1{\csname\??setup:#1\endcsname\empty}
439\def\fastsetupwithargument #1{\csname\??setup:#1\endcsname}
440\def\fastsetupwithargumentswapped#1#2{\csname\??setup:#2\endcsname{#1}}
441
442
443
444
445\let\m_syst_setups_asked\empty
446
447\def\doprocesslocalsetups#1
448 {\edef\m_syst_setups_asked{#1}
449 \ifx\m_syst_setups_asked\empty\else
450 \expandafter\syst_setups_process_local
451 \fi}
452
453\unexpanded\def\usesetupsparameter#1
454 {\edef\m_syst_setups_asked{#1\c!setups}
455 \ifx\m_syst_setups_asked\empty\else
456 \expandafter\syst_setups_process_local
457 \fi}
458
459
460
461
462
463
464\def\syst_setups_process_local
465 {\clf_autosetups{\m_syst_setups_asked}
466 \relax}
467
468\def\autosetups#1
469 {\clf_autosetups{#1}}
470
471\edef\setupwithargument#1
472 {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\??empty\noexpand\fi\endcsname}
473
474\edef\setupwithargumentswapped#1#2
475 {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#2\endcsname#2\noexpand\else\??empty\noexpand\fi\endcsname{#1}}
476
477\let\directsetup\syst_setups
478\let\texsetup \syst_setups
479
480\unexpanded\def\doifelsesetups#1
481 {\ifcsname\??setup:#1\endcsname
482 \expandafter\firstoftwoarguments
483 \else
484 \expandafter\secondoftwoarguments
485 \fi}
486
487\let\doifsetupselse\doifelsesetups
488
489\unexpanded\def\doifsetups#1
490 {\ifcsname\??setup:#1\endcsname
491 \expandafter\firstofoneargument
492 \else
493 \expandafter\gobbleoneargument
494 \fi}
495
496\unexpanded\def\doifnotsetups#1
497 {\ifcsname\??setup:#1\endcsname
498 \expandafter\gobbleoneargument
499 \else
500 \expandafter\firstofoneargument
501 \fi}
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553\newtoks\t_syst_setups_tex \appendtoks
554 \catcode\endoflineasciicode \ignorecatcode
555\to \t_syst_setups_tex
556
557\newtoks\t_syst_setups_loc \appendtoks
558 \catcode\endoflineasciicode \ignorecatcode
559\to \t_syst_setups_loc
560
561\newtoks\t_syst_setups_raw \appendtoks
562
563\to \t_syst_setups_raw
564
565\newtoks\t_syst_setups_xml \appendtoks
566 \catcode\endoflineasciicode\ignorecatcode
567 \catcode\barasciicode \othercatcode
568\to \t_syst_setups_xml
569
570\newtoks\t_syst_setups_lua \appendtoks
571 \obeylualines
572 \obeyluatokens
573\to \t_syst_setups_lua
574
575
576
577\let\syst_setups_def\def
578
579\unexpanded\def\pushglobalsetups{\let\syst_setups_def\gdef}
580\unexpanded\def\popglobalsetups {\let\syst_setups_def\def }
581
582\unexpanded\def\startluasetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_lua_a\syst_setups_start_lua_b} \let\stopluasetups \relax
583\unexpanded\def\startxmlsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_xml_a\syst_setups_start_xml_b} \let\stopxmlsetups \relax
584\unexpanded\def\startrawsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_raw_a\syst_setups_start_raw_b} \let\stoprawsetups \relax
585\unexpanded\def\startlocalsetups{\begingroup\doifelsenextoptionalcs\syst_setups_start_loc_a\syst_setups_start_loc_b} \let\stoplocalsetups \relax
586\unexpanded\def\startsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_tex_a\syst_setups_start_tex_b} \let\stopsetups \relax
587
588\def\syst_setups_start_lua_indeed#1#2#3\stopluasetups {\endgroup\dodoglobal\expandafter\syst_setups_def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
589\def\syst_setups_start_xml_indeed#1#2#3\stopxmlsetups {\endgroup\dodoglobal\expandafter\syst_setups_def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
590\def\syst_setups_start_raw_indeed#1#2#3\stoprawsetups {\endgroup\dodoglobal\expandafter\syst_setups_def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
591\def\syst_setups_start_loc_indeed#1#2#3\stoplocalsetups{\endgroup\dodoglobal\expandafter\syst_setups_def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
592\def\syst_setups_start_tex_indeed#1#2#3\stopsetups {\endgroup\dodoglobal\expandafter\syst_setups_def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
593
594\def\syst_setups_start_lua{\ifsecondargument\expandafter\syst_setups_start_lua_c\else\expandafter\syst_setups_start_lua_d\fi}
595\def\syst_setups_start_xml{\ifsecondargument\expandafter\syst_setups_start_xml_c\else\expandafter\syst_setups_start_xml_d\fi}
596\def\syst_setups_start_raw{\ifsecondargument\expandafter\syst_setups_start_raw_c\else\expandafter\syst_setups_start_raw_d\fi}
597\def\syst_setups_start_loc{\ifsecondargument\expandafter\syst_setups_start_loc_c\else\expandafter\syst_setups_start_loc_d\fi}
598\def\syst_setups_start_tex{\ifsecondargument\expandafter\syst_setups_start_tex_c\else\expandafter\syst_setups_start_tex_d\fi}
599
600
601
602\def\syst_setups_start_lua_a{\the\t_syst_setups_lua\dodoubleempty\syst_setups_start_lua}
603\def\syst_setups_start_xml_a{\the\t_syst_setups_xml\dodoubleempty\syst_setups_start_xml}
604\def\syst_setups_start_raw_a{\the\t_syst_setups_raw\dodoubleempty\syst_setups_start_raw}
605\def\syst_setups_start_loc_a{\the\t_syst_setups_loc\dodoubleempty\syst_setups_start_loc}
606\def\syst_setups_start_tex_a{\the\t_syst_setups_tex\dodoubleempty\syst_setups_start_tex}
607
608
609
610\def\syst_setups_start_lua_b#1 {\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty}
611\def\syst_setups_start_xml_b#1 {\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty}
612\def\syst_setups_start_raw_b#1 {\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty}
613\def\syst_setups_start_loc_b#1 {\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty}
614\def\syst_setups_start_tex_b#1 {\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty}
615
616\def\syst_setups_start_lua_c[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed{#1}{#2}\empty}
617\def\syst_setups_start_xml_c[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed{#1}{#2}\empty}
618\def\syst_setups_start_raw_c[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed{#1}{#2}\empty}
619\def\syst_setups_start_loc_c[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed{#1}{#2}\empty}
620\def\syst_setups_start_tex_c[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed{#1}{#2}\empty}
621
622\def\syst_setups_start_lua_d[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty}
623\def\syst_setups_start_xml_d[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty}
624\def\syst_setups_start_raw_d[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty}
625\def\syst_setups_start_loc_d[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty}
626\def\syst_setups_start_tex_d[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty}
627
628\def\luasetup#1{\ctxlua{\syst_setups{#1}}}
629
630
631
632\let\systemsetupsprefix\wildcardsymbol
633
634\def\systemsetups#1{\syst_setups{\systemsetupsprefix#1}}
635
636\unexpanded\def\resetsetups[#1]
637 {\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1\endcsname
638 \dodoglobal\undefinevalue{\??setup\ifgridsnapping\v!grid\fi:#1}
639 \else
640 \dodoglobal\undefinevalue{\??setup:#1}
641 \fi}
642
643\unexpanded\def\copysetups
644 {\dodoubleargument\syst_setups_copy}
645
646\def\syst_setups_copy[#1][#2]
647 {\ifcsname\??setup:#2\endcsname
648 \expandafter\let\csname\??setup:#1\expandafter\endcsname\lastnamedcs
649 \fi}
650
651\unexpanded\def\showsetupsdefinition[#1]
652 {\showvalue{\??setup:#1}}
653
654
655
656
657
658
659
660
661
662
663
664
665
666\installcorenamespace{variables}
667
668\unexpanded\def\setvariables {\dotripleargument\syst_variables_set[\getrawparameters ]}
669\unexpanded\def\setevariables{\dotripleargument\syst_variables_set[\getraweparameters]}
670\unexpanded\def\setgvariables{\dotripleargument\syst_variables_set[\getrawgparameters]}
671\unexpanded\def\setxvariables{\dotripleargument\syst_variables_set[\getrawxparameters]}
672
673\unexpanded\def\globalsetvariables
674 {\dotripleargument\syst_variables_set[\globalgetrawparameters]}
675
676\def\syst_variables_set[#1][#2][#3]
677 {\doifelse{#2}\currentvariableclass
678 {#1[\??variables#2:][#3]}
679 {\pushmacro\currentvariableclass
680 \def\currentvariableclass{#2}
681 \getvariable{#2}\s!reset
682 #1[\??variables#2:][#3]
683 \getvariable{#2}\s!set
684 \popmacro\currentvariableclass}}
685
686\unexpanded\def\setvariable #1#2#3{\expandafter\def \csname\??variables#1:#2\endcsname{#3}}
687\unexpanded\def\setevariable#1#2#3{\expandafter\edef\csname\??variables#1:#2\endcsname{#3}}
688\unexpanded\def\setgvariable#1#2#3{\expandafter\gdef\csname\??variables#1:#2\endcsname{#3}}
689\unexpanded\def\setxvariable#1#2#3{\expandafter\xdef\csname\??variables#1:#2\endcsname{#3}}
690
691\def\getvariable#1#2
692 {\begincsname\??variables#1:#2\endcsname}
693
694\def\showvariable#1#2
695 {\showvalue{\begincsname\??variables#1:#2\endcsname}}
696
697\let\currentvariableclass\empty
698
699
700
701
702
703
704\let\m_syst_variables_temp\empty
705
706\def\checkvariables
707 {\dodoubleargument\syst_variables_check}
708
709\def\syst_variables_check
710 {\dogetparameters\syst_variables_check_value}
711
712\def\syst_variables_check_value#1#2#3
713 {\ifcsname\??variables#1:#2\endcsname
714 \edef\m_syst_variables_temp{\lastnamedcs}
715 \ifx\m_syst_variables_temp\empty
716 \expandafter\def\csname\??variables#1:#2\endcsname{#3}
717 \fi
718 \else
719 \expandafter\def\csname\??variables#1:#2\endcsname{#3}
720 \fi}
721
722
723
724
725
726
727\unexpanded\def\doifelsevariable#1#2
728 {\ifcsname\??variables#1:#2\endcsname
729 \expandafter\firstoftwoarguments
730 \else
731 \expandafter\secondoftwoarguments
732 \fi}
733
734\let\doifvariableelse\doifelsevariable
735
736\unexpanded\def\doifvariable#1#2
737 {\ifcsname\??variables#1:#2\endcsname
738 \expandafter\firstofoneargument
739 \else
740 \expandafter\gobbleoneargument
741 \fi}
742
743\unexpanded\def\doifnotvariable#1#2
744 {\ifcsname\??variables#1:#2\endcsname
745 \expandafter\gobbleoneargument
746 \else
747 \expandafter\firstofoneargument
748 \fi}
749
750
751
752
753\letvalue{\??variables:}\empty
754
755\unexpanded\def\doifelseemptyvariable#1#2
756 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
757 \ifx\m_syst_string_one\empty
758 \expandafter\firstoftwoarguments
759 \else
760 \expandafter\secondoftwoarguments
761 \fi}
762
763\let\doifemptyvariableelse\doifelseemptyvariable
764
765\unexpanded\def\doifemptyvariable#1#2
766 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
767 \ifx\m_syst_string_one\empty
768 \expandafter\firstofoneargument
769 \else
770 \expandafter\gobbleoneargument
771 \fi}
772
773\unexpanded\def\doifnotemptyvariable#1#2
774 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
775 \ifx\m_syst_string_one\empty
776 \expandafter\gobbleoneargument
777 \else
778 \expandafter\firstofoneargument
779 \fi}
780
781\def\getvariabledefault#1#2
782 {\ifcsname\??variables#1:#2\endcsname
783 \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
784 \else
785 \expandafter\firstofoneargument
786 \fi}
787
788\unexpanded\def\setupenv
789 {\dotripleargument\syst_variables_set[\getrawparameters][\s!environment]}
790
791\unexpanded\def\doifelseenv{\doifelsevariable \s!environment}
792\unexpanded\def\doifenv {\doifvariable \s!environment}
793\unexpanded\def\doifnotenv {\doifnotvariable \s!environment}
794\def\env {\getvariable \s!environment}
795\def\envvar {\getvariabledefault\s!environment}
796
797\let\doifenvelse\doifelseenv
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817\installcorenamespace{selector}
818
819\unexpanded\def\defineselector{\dodoubleargument\syst_selectors_define}
820\unexpanded\def\setupselector {\dodoubleargument\syst_selectors_setup}
821
822
823
824
825\def\syst_selectors_define[#1][{\getparameters[\??selector#1][\c!max=\plustwo,\c!n=\plusone,}
826\def\syst_selectors_setup [#1][{\getparameters[\??selector#1][}
827
828\unexpanded\def\select
829 {\directselect}
830
831
832
833
834
835
836
837
838\def\directselect#1
839 {\expandafter\filterfromnext
840 \csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\expandafter\endcsname
841 \csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname}
842
843\letvalue{\??selector\c!max}\plusone
844\letvalue{\??selector\c!n }\plusone
845
846\protect \endinput
847 |