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