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\letcsname\??setup:\??empty\endcsname\gobbleoneargument
404
405\permanent\def\syst_setups#1
406 {\begincsname\??setup
407 \ifgridsnapping
408 \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else:\ifcsname\??setup:#1\endcsname#1\else\??empty\fi\fi
409 \else
410 :\ifcsname\??setup:#1\endcsname#1\else\??empty\fi
411 \fi
412 \endcsname\empty}
413
414
415
416\permanent\def\fastsetup #1{\begincsname\??setup:#1\endcsname\empty}
417\permanent\def\fastsetupwithargument #1{\begincsname\??setup:#1\endcsname}
418\permanent\def\fastsetupwithargumentswapped#1#2{\begincsname\??setup:#2\endcsname{#1}}
419
420
421
422
423\lettonothing\m_syst_setups_asked
424
425\permanent\protected\def\doprocesslocalsetups#1
426 {\edef\m_syst_setups_asked{#1}
427 \ifempty\m_syst_setups_asked\else
428 \expandafter\syst_setups_process_local
429 \fi}
430
431\permanent\protected\def\usesetupsparameter#1
432 {\edef\m_syst_setups_asked{#1\c!setups}
433 \ifempty\m_syst_setups_asked\else
434 \expandafter\syst_setups_process_local
435 \fi}
436
437
438
439
440
441
442\def\syst_setups_process_local
443 {\clf_autosetups{\m_syst_setups_asked}
444 \relax}
445
446\permanent\def\autosetups#1{\clf_autosetups{#1}}
447
448
449
450
451
452
453
454
455
456
457
458
459
460\permanent\edef\setupwithargument #1{\noexpand\futurecsname\noexpand\gobbleoneargument\??setup:#1\endcsname}
461\permanent\edef\setupwithargumentswapped#1#2{\noexpand\futurecsname\noexpand\gobbleoneargument\??setup:#2\endcsname{#1}}
462
463\aliased\let\directsetup\syst_setups
464\aliased\let\texsetup \syst_setups
465
466\permanent\protected\def\doifelsesetups#1
467 {\ifcsname\??setup:#1\endcsname
468 \expandafter\firstoftwoarguments
469 \else
470 \expandafter\secondoftwoarguments
471 \fi}
472
473\aliased\let\doifsetupselse\doifelsesetups
474
475\permanent\protected\def\doifsetups#1
476 {\ifcsname\??setup:#1\endcsname
477 \expandafter\firstofoneargument
478 \else
479 \expandafter\gobbleoneargument
480 \fi}
481
482\permanent\protected\def\doifnotsetups#1
483 {\ifcsname\??setup:#1\endcsname
484 \expandafter\gobbleoneargument
485 \else
486 \expandafter\firstofoneargument
487 \fi}
488
489
490
491
492
493
494
495
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\newtoks\t_syst_setups_tex \appendtoks
540 \catcode\endoflineasciicode \ignorecatcode
541\to \t_syst_setups_tex
542
543\newtoks\t_syst_setups_loc \appendtoks
544 \catcode\endoflineasciicode \ignorecatcode
545\to \t_syst_setups_loc
546
547\newtoks\t_syst_setups_raw \appendtoks
548
549\to \t_syst_setups_raw
550
551\newtoks\t_syst_setups_xml \appendtoks
552 \catcode\endoflineasciicode\ignorecatcode
553 \catcode\barasciicode \othercatcode
554\to \t_syst_setups_xml
555
556\newtoks\t_syst_setups_lua \appendtoks
557 \obeyluatokens
558\to \t_syst_setups_lua
559
560
561
562\permanent\protected\def\startluasetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_lua_yes\syst_setups_start_lua_nop} \permanent\protected\lettonothing\stopluasetups
563\permanent\protected\def\startxmlsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_xml_yes\syst_setups_start_xml_nop} \permanent\protected\lettonothing\stopxmlsetups
564\permanent\protected\def\startrawsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_raw_yes\syst_setups_start_raw_nop} \permanent\protected\lettonothing\stoprawsetups
565\permanent\protected\def\startlocalsetups{\begingroup\doifelsenextoptionalcs\syst_setups_start_loc_yes\syst_setups_start_loc_nop} \permanent\protected\lettonothing\stoplocalsetups
566\permanent\protected\def\startsetups {\begingroup\doifelsenextoptionalcs\syst_setups_start_tex_yes\syst_setups_start_tex_nop} \permanent\protected\lettonothing\stopsetups
567
568
569
570
571
572
573
574
575
576
577
578
579
580\let\syst_setups_defcsname\defcsname
581
582\permanent\protected\def\pushglobalsetups{\let\syst_setups_defcsname\gdefcsname}
583\permanent\protected\def\popglobalsetups {\let\syst_setups_defcsname\defcsname }
584
585\def\syst_setups_start_lua_two#1#2#L\startluasetups #R\stopluasetups #{\endgroup\instance\syst_setups_defcsname\??setup#1:#2\endcsname##1{#3}}
586\def\syst_setups_start_xml_two#1#2#L\startxmlsetups #R\stopxmlsetups #{\endgroup\instance\syst_setups_defcsname\??setup#1:#2\endcsname##1{#3}}
587\def\syst_setups_start_raw_two#1#2#L\startrawsetups #R\stoprawsetups #{\endgroup\instance\syst_setups_defcsname\??setup#1:#2\endcsname##1{#3}}
588\def\syst_setups_start_loc_two#1#2#L\startlocalsetups#R\stoplocalsetups#{\endgroup\instance\syst_setups_defcsname\??setup#1:#2\endcsname##1{#3}}
589\def\syst_setups_start_tex_two#1#2#L\startsetups #R\stopsetups #{\endgroup\instance\syst_setups_defcsname\??setup#1:#2\endcsname##1{#3}}
590
591\tolerant\def\syst_setups_start_lua_yes[#1]#*[#2]
592 {\expand\t_syst_setups_lua
593 \ifarguments\expandafter\syst_setups_start_lua_one
594 \or \expandafter\syst_setups_start_lua_one
595 \else \expandafter\syst_setups_start_lua_two
596 \fi{#1}{#2}}
597
598\tolerant\def\syst_setups_start_xml_yes[#1]#*[#2]
599 {\expand\t_syst_setups_xml
600 \ifarguments\expandafter\syst_setups_start_xml_one
601 \or \expandafter\syst_setups_start_xml_one
602 \else \expandafter\syst_setups_start_xml_two
603 \fi{#1}{#2}}
604
605\tolerant\def\syst_setups_start_raw_yes[#1]#*[#2]
606 {\expand\t_syst_setups_raw
607 \ifarguments\expandafter\syst_setups_start_raw_one
608 \or \expandafter\syst_setups_start_raw_one
609 \else \expandafter\syst_setups_start_raw_two
610 \fi{#1}{#2}}
611
612\tolerant\def\syst_setups_start_loc_yes[#1]#*[#2]
613 {\expand\t_syst_setups_loc
614 \ifarguments\expandafter\syst_setups_start_loc_one
615 \or \expandafter\syst_setups_start_loc_one
616 \else \expandafter\syst_setups_start_loc_two
617 \fi{#1}{#2}}
618
619\tolerant\def\syst_setups_start_tex_yes[#1]#*[#2]
620 {\expand\t_syst_setups_tex
621 \ifarguments\expandafter\syst_setups_start_tex_one
622 \or \expandafter\syst_setups_start_tex_one
623 \else \expandafter\syst_setups_start_tex_two
624 \fi{#1}{#2}}
625
626\def\syst_setups_start_lua_nop#1 {\expand\t_syst_setups_lua\syst_setups_start_lua_two{}{#1}}
627\def\syst_setups_start_xml_nop#1 {\expand\t_syst_setups_xml\syst_setups_start_xml_two{}{#1}}
628\def\syst_setups_start_raw_nop#1 {\expand\t_syst_setups_raw\syst_setups_start_raw_two{}{#1}}
629\def\syst_setups_start_loc_nop#1 {\expand\t_syst_setups_loc\syst_setups_start_loc_two{}{#1}}
630\def\syst_setups_start_tex_nop#1 {\expand\t_syst_setups_tex\syst_setups_start_tex_two{}{#1}}
631
632\def\syst_setups_start_lua_one#1#2{\syst_setups_start_lua_two{}{#1}}
633\def\syst_setups_start_xml_one#1#2{\syst_setups_start_xml_two{}{#1}}
634\def\syst_setups_start_raw_one#1#2{\syst_setups_start_raw_two{}{#1}}
635\def\syst_setups_start_loc_one#1#2{\syst_setups_start_loc_two{}{#1}}
636\def\syst_setups_start_tex_one#1#2{\syst_setups_start_tex_two{}{#1}}
637
638\permanent\def\luasetup#1{\ctxlua{\syst_setups{#1}}}
639
640
641
642\aliased\let\systemsetupsprefix\wildcardsymbol
643
644\permanent\def\systemsetups#1{\syst_setups{\systemsetupsprefix#1}}
645
646\permanent\tolerant\protected\def\resetsetups[#1]#;#2
647 {\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1#2\endcsname
648 \dodoglobal\undefinevalue{\??setup\ifgridsnapping\v!grid\fi:#1#2}
649 \else
650 \dodoglobal\undefinevalue{\??setup:#1#2}
651 \fi}
652
653\permanent\tolerant\protected\def\copysetups[#1]#*[#2]
654 {\ifcsname\??setup:#2\endcsname
655 \letcsname\??setup:#1\expandafter\endcsname\lastnamedcs
656 \fi}
657
658\permanent\protected\def\showsetupsdefinition[#1]
659 {\showvalue{\??setup:#1}}
660
661
662
663
664
665
666
667
668
669
670
671
672
673\installcorenamespace{variables}
674
675\permanent\protected\def\setvariables {\syst_variables_set\getparameters }
676\permanent\protected\def\setevariables{\syst_variables_set\geteparameters}
677\permanent\protected\def\setgvariables{\syst_variables_set\getgparameters}
678\permanent\protected\def\setxvariables{\syst_variables_set\getxparameters}
679
680\mutable\lettonothing\currentvariableclass
681
682\tolerant\def\syst_variables_set#1#*[#2]#*[#S#3]
683 {\ifcstok{#2}\currentvariableclass
684 #1[\??variables#2:][#3]
685 \else
686 \pushmacro\currentvariableclass
687 \cdef\currentvariableclass{#2}
688 \getvariable{#2}\s!reset
689 #1[\??variables#2:][#3]
690 \getvariable{#2}\s!set
691 \popmacro\currentvariableclass
692 \fi}
693
694\permanent\protected\def\setvariable #1#2#3{\defcsname \??variables#1:#2\endcsname{#3}}
695\permanent\protected\def\setevariable#1#2#3{\edefcsname\??variables#1:#2\endcsname{#3}}
696\permanent\protected\def\setgvariable#1#2#3{\defcsname \??variables#1:#2\endcsname{#3}}
697\permanent\protected\def\setxvariable#1#2#3{\xdefcsname\??variables#1:#2\endcsname{#3}}
698
699\permanent \def\getvariable #1#2{\begincsname\??variables#1:#2\endcsname}
700\permanent\protected\def\showvariable#1#2{\showvalue{\begincsname\??variables#1:#2\endcsname}}
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722\permanent\protected\def\checkvariables[#1]#*[#S#2]
723 {\cdef\m_syst_parameter{#1}
724 \syst_variables_check_value#2\ignorearguments\ignorearguments}
725
726\tolerant\def\syst_variables_check_value#*#1=#S#2,#M,
727 {\ifarguments
728 \expandafter\gobbleoneargument
729 \or
730 \mult_interfaces_get_parameters_error_indeed\m_syst_parameter{#1}
731 \orunless\ifcsname\??variables\m_syst_parameter:#1\endcsname
732 \defcsname\??variables\m_syst_parameter:#1\endcsname{#2}
733 \orelse\ifempty{\lastnamedcs}
734 \defcsname\??variables\m_syst_parameter:#1\endcsname{#2}
735 \fi
736 \syst_variables_check_value}
737
738
739
740
741
742
743\permanent\protected\def\doifelsevariable#1#2
744 {\ifcsname\??variables#1:#2\endcsname
745 \expandafter\firstoftwoarguments
746 \else
747 \expandafter\secondoftwoarguments
748 \fi}
749
750\aliased\let\doifvariableelse\doifelsevariable
751
752\permanent\protected\def\doifvariable#1#2
753 {\ifcsname\??variables#1:#2\endcsname
754 \expandafter\firstofoneargument
755 \else
756 \expandafter\gobbleoneargument
757 \fi}
758
759\permanent\protected\def\doifnotvariable#1#2
760 {\ifcsname\??variables#1:#2\endcsname
761 \expandafter\gobbleoneargument
762 \else
763 \expandafter\firstofoneargument
764 \fi}
765
766
767
768
769\letcsname\??variables:\endcsname\empty
770
771\permanent\protected\def\doifelseemptyvariable#1#2
772 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
773 \ifempty\m_syst_string_one
774 \expandafter\firstoftwoarguments
775 \else
776 \expandafter\secondoftwoarguments
777 \fi}
778
779\aliased\let\doifemptyvariableelse\doifelseemptyvariable
780
781\permanent\protected\def\doifemptyvariable#1#2
782 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
783 \ifempty\m_syst_string_one
784 \expandafter\firstofoneargument
785 \else
786 \expandafter\gobbleoneargument
787 \fi}
788
789\permanent\protected\def\doifnotemptyvariable#1#2
790 {\edef\m_syst_string_one{\begincsname\??variables#1:#2\endcsname}
791 \ifempty\m_syst_string_one
792 \expandafter\gobbleoneargument
793 \else
794 \expandafter\firstofoneargument
795 \fi}
796
797\permanent\def\getvariabledefault#1#2
798 {\ifcsname\??variables#1:#2\endcsname
799 \expandafter\expandafter\expandafter\lastnamedcs\expandafter\gobbleoneargument
800 \else
801 \expandafter\firstofoneargument
802 \fi}
803
804\permanent\tolerant\protected\def\setupenv
805 {\syst_variables_set\getparameters[\s!environment]}
806
807\permanent\protected\def\doifelseenv{\doifelsevariable \s!environment}
808\permanent\protected\def\doifenv {\doifvariable \s!environment}
809\permanent\protected\def\doifnotenv {\doifnotvariable \s!environment}
810\permanent \def\env {\getvariable \s!environment}
811\permanent \def\envvar {\getvariabledefault\s!environment}
812
813\aliased\let\doifenvelse\doifelseenv
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833\installcorenamespace{selector}
834
835\permanent\tolerant\protected\def\defineselector[#1]#*[#2]{\getparameters[\??selector#1][\c!max=\plusone,\c!n=\plusone,#2]}
836\permanent\tolerant\protected\def\setupselector [#1]#*[#2]{\getparameters[\??selector#1][#2]}
837
838\permanent\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\permanent\protected\let\select\directselect
844
845\letcsname\??selector\c!max\endcsname\plusone
846\letcsname\??selector\c!n \endcsname\plusone
847
848\protect \endinput
849 |