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\unexpanded\def\startluasetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_lua_a\syst_setups_start_lua_b} \let\stopluasetups \relax
578\unexpanded\def\startxmlsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_xml_a\syst_setups_start_xml_b} \let\stopxmlsetups \relax
579\unexpanded\def\startrawsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_raw_a\syst_setups_start_raw_b} \let\stoprawsetups \relax
580\unexpanded\def\startlocalsetups{\begingroup\doifelsenextoptionalcs\syst_setups_start_loc_a\syst_setups_start_loc_b} \let\stoplocalsetups \relax
581\unexpanded\def\startsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_tex_a\syst_setups_start_tex_b} \let\stopsetups \relax
582
583\def\syst_setups_start_lua_indeed#1#2#3\stopluasetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
584\def\syst_setups_start_xml_indeed#1#2#3\stopxmlsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
585\def\syst_setups_start_raw_indeed#1#2#3\stoprawsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
586\def\syst_setups_start_loc_indeed#1#2#3\stoplocalsetups{\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
587\def\syst_setups_start_tex_indeed#1#2#3\stopsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
588
589\def\syst_setups_start_lua{\ifsecondargument\expandafter\syst_setups_start_lua_c\else\expandafter\syst_setups_start_lua_d\fi}
590\def\syst_setups_start_xml{\ifsecondargument\expandafter\syst_setups_start_xml_c\else\expandafter\syst_setups_start_xml_d\fi}
591\def\syst_setups_start_raw{\ifsecondargument\expandafter\syst_setups_start_raw_c\else\expandafter\syst_setups_start_raw_d\fi}
592\def\syst_setups_start_loc{\ifsecondargument\expandafter\syst_setups_start_loc_c\else\expandafter\syst_setups_start_loc_d\fi}
593\def\syst_setups_start_tex{\ifsecondargument\expandafter\syst_setups_start_tex_c\else\expandafter\syst_setups_start_tex_d\fi}
594
595
596
597\def\syst_setups_start_lua_a{\the\t_syst_setups_lua\dodoubleempty\syst_setups_start_lua}
598\def\syst_setups_start_xml_a{\the\t_syst_setups_xml\dodoubleempty\syst_setups_start_xml}
599\def\syst_setups_start_raw_a{\the\t_syst_setups_raw\dodoubleempty\syst_setups_start_raw}
600\def\syst_setups_start_loc_a{\the\t_syst_setups_loc\dodoubleempty\syst_setups_start_loc}
601\def\syst_setups_start_tex_a{\the\t_syst_setups_tex\dodoubleempty\syst_setups_start_tex}
602
603
604
605\def\syst_setups_start_lua_b#1 {\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty}
606\def\syst_setups_start_xml_b#1 {\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty}
607\def\syst_setups_start_raw_b#1 {\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty}
608\def\syst_setups_start_loc_b#1 {\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty}
609\def\syst_setups_start_tex_b#1 {\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty}
610
611\def\syst_setups_start_lua_c[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed{#1}{#2}\empty}
612\def\syst_setups_start_xml_c[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed{#1}{#2}\empty}
613\def\syst_setups_start_raw_c[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed{#1}{#2}\empty}
614\def\syst_setups_start_loc_c[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed{#1}{#2}\empty}
615\def\syst_setups_start_tex_c[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed{#1}{#2}\empty}
616
617\def\syst_setups_start_lua_d[#1][#2]{\the\t_syst_setups_lua\syst_setups_start_lua_indeed\empty{#1}\empty}
618\def\syst_setups_start_xml_d[#1][#2]{\the\t_syst_setups_xml\syst_setups_start_xml_indeed\empty{#1}\empty}
619\def\syst_setups_start_raw_d[#1][#2]{\the\t_syst_setups_raw\syst_setups_start_raw_indeed\empty{#1}\empty}
620\def\syst_setups_start_loc_d[#1][#2]{\the\t_syst_setups_loc\syst_setups_start_loc_indeed\empty{#1}\empty}
621\def\syst_setups_start_tex_d[#1][#2]{\the\t_syst_setups_tex\syst_setups_start_tex_indeed\empty{#1}\empty}
622
623\def\luasetup#1{\ctxlua{\syst_setups{#1}}}
624
625
626
627\let\systemsetupsprefix\wildcardsymbol
628
629\def\systemsetups#1{\syst_setups{\systemsetupsprefix#1}}
630
631\unexpanded\def\resetsetups[#1]
632 {\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1\endcsname
633 \dodoglobal\undefinevalue{\??setup\ifgridsnapping\v!grid\fi:#1}
634 \else
635 \dodoglobal\undefinevalue{\??setup:#1}
636 \fi}
637
638\unexpanded\def\copysetups
639 {\dodoubleargument\syst_setups_copy}
640
641\def\syst_setups_copy[#1][#2]
642 {\ifcsname\??setup:#2\endcsname
643 \expandafter\let\csname\??setup:#1\expandafter\endcsname\lastnamedcs
644 \fi}
645
646\unexpanded\def\showsetupsdefinition[#1]
647 {\showvalue{\??setup:#1}}
648
649
650
651
652
653
654
655
656
657
658
659
660
661\installcorenamespace{variables}
662
663\unexpanded\def\setvariables {\dotripleargument\syst_variables_set[\getrawparameters ]}
664\unexpanded\def\setevariables{\dotripleargument\syst_variables_set[\getraweparameters]}
665\unexpanded\def\setgvariables{\dotripleargument\syst_variables_set[\getrawgparameters]}
666\unexpanded\def\setxvariables{\dotripleargument\syst_variables_set[\getrawxparameters]}
667
668\unexpanded\def\globalsetvariables
669 {\dotripleargument\syst_variables_set[\globalgetrawparameters]}
670
671\def\syst_variables_set[#1][#2][#3]
672 {\doifelse{#2}\currentvariableclass
673 {#1[\??variables#2:][#3]}
674 {\pushmacro\currentvariableclass
675 \def\currentvariableclass{#2}
676 \getvariable{#2}\s!reset
677 #1[\??variables#2:][#3]
678 \getvariable{#2}\s!set
679 \popmacro\currentvariableclass}}
680
681\unexpanded\def\setvariable #1#2#3{\expandafter\def \csname\??variables#1:#2\endcsname{#3}}
682\unexpanded\def\setevariable#1#2#3{\expandafter\edef\csname\??variables#1:#2\endcsname{#3}}
683\unexpanded\def\setgvariable#1#2#3{\expandafter\gdef\csname\??variables#1:#2\endcsname{#3}}
684\unexpanded\def\setxvariable#1#2#3{\expandafter\xdef\csname\??variables#1:#2\endcsname{#3}}
685
686\def\getvariable#1#2
687 {\begincsname\??variables#1:#2\endcsname}
688
689\def\showvariable#1#2
690 {\showvalue{\begincsname\??variables#1:#2\endcsname}}
691
692\let\currentvariableclass\empty
693
694
695
696
697
698
699\let\m_syst_variables_temp\empty
700
701\def\checkvariables
702 {\dodoubleargument\syst_variables_check}
703
704\def\syst_variables_check
705 {\dogetparameters\syst_variables_check_value}
706
707\def\syst_variables_check_value#1#2#3
708 {\ifcsname\??variables#1:#2\endcsname
709 \edef\m_syst_variables_temp{\lastnamedcs}
710 \ifx\m_syst_variables_temp\empty
711 \expandafter\def\csname\??variables#1:#2\endcsname{#3}
712 \fi
713 \else
714 \expandafter\def\csname\??variables#1:#2\endcsname{#3}
715 \fi}
716
717
718
719
720
721
722\unexpanded\def\doifelsevariable#1#2
723 {\ifcsname\??variables#1:#2\endcsname
724 \expandafter\firstoftwoarguments
725 \else
726 \expandafter\secondoftwoarguments
727 \fi}
728
729\let\doifvariableelse\doifelsevariable
730
731\unexpanded\def\doifvariable#1#2
732 {\ifcsname\??variables#1:#2\endcsname
733 \expandafter\firstofoneargument
734 \else
735 \expandafter\gobbleoneargument
736 \fi}
737
738\unexpanded\def\doifnotvariable#1#2
739 {\ifcsname\??variables#1:#2\endcsname
740 \expandafter\gobbleoneargument
741 \else
742 \expandafter\firstofoneargument
743 \fi}
744
745
746
747
748\letvalue{\??variables:}\empty
749
750\unexpanded\def\doifelseemptyvariable#1#2
751 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
752 \ifx\m_syst_string_one\empty
753 \expandafter\firstoftwoarguments
754 \else
755 \expandafter\secondoftwoarguments
756 \fi}
757
758\let\doifemptyvariableelse\doifelseemptyvariable
759
760\unexpanded\def\doifemptyvariable#1#2
761 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
762 \ifx\m_syst_string_one\empty
763 \expandafter\firstofoneargument
764 \else
765 \expandafter\gobbleoneargument
766 \fi}
767
768\unexpanded\def\doifnotemptyvariable#1#2
769 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
770 \ifx\m_syst_string_one\empty
771 \expandafter\gobbleoneargument
772 \else
773 \expandafter\firstofoneargument
774 \fi}
775
776\def\getvariabledefault#1#2
777 {\ifcsname\??variables#1:#2\endcsname
778 \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
779 \else
780 \expandafter\firstofoneargument
781 \fi}
782
783\unexpanded\def\setupenv
784 {\dotripleargument\syst_variables_set[\getrawparameters][\s!environment]}
785
786\unexpanded\def\doifelseenv{\doifelsevariable \s!environment}
787\unexpanded\def\doifenv {\doifvariable \s!environment}
788\unexpanded\def\doifnotenv {\doifnotvariable \s!environment}
789\def\env {\getvariable \s!environment}
790\def\envvar {\getvariabledefault\s!environment}
791
792\let\doifenvelse\doifelseenv
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812\installcorenamespace{selector}
813
814\unexpanded\def\defineselector{\dodoubleargument\syst_selectors_define}
815\unexpanded\def\setupselector {\dodoubleargument\syst_selectors_setup}
816
817
818
819
820\def\syst_selectors_define[#1][{\getparameters[\??selector#1][\c!max=\plustwo,\c!n=\plusone,}
821\def\syst_selectors_setup [#1][{\getparameters[\??selector#1][}
822
823\unexpanded\def\select
824 {\directselect}
825
826
827
828
829
830
831
832
833\def\directselect#1
834 {\expandafter\filterfromnext
835 \csname\??selector\ifcsname\??selector#1\c!max\endcsname#1\fi\c!max\expandafter\endcsname
836 \csname\??selector\ifcsname\??selector#1\c!n \endcsname#1\fi\c!n \endcsname}
837
838\letvalue{\??selector\c!max}\plusone
839\letvalue{\??selector\c!n }\plusone
840
841\protect \endinput
842 |