mult-chk.mkiv /size: 3383 b    last modification: 2021-10-28 13:50
1%D \module
2%D   [       file=mult-chk,
3%D        version=2009.04.13,
4%D          title=\CONTEXT\ Multilingual Macros,
5%D       subtitle=Checking,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Multilingual Macros / Checking}
15
16%D This is very experimental code that eventually might be used
17%D once we have split the whole code base.
18
19%D \startbuffer
20%D     \getcheckedparameters[MyTest][MyNamespace][a=1,b=2,c=3,d=4,crap=whatever]
21%D
22%D     \MyNamespacea\quad
23%D     \MyNamespaceb\quad
24%D     \MyNamespacec\quad
25%D     \MyNamespaced\quad
26%D     crap is \ifdefined\MyNamespacecrap\else un\fi defined
27%D \stopbuffer
28%D
29%D \enablecheckparameters
30%D
31%D \setvalidparameterkeys[MyTest][a,b,c,d] \getbuffer \par
32%D \addvalidparameterkeys[MyTest][crap]    \getbuffer \par
33
34\unprotect
35
36\registerctxluafile{mult-chk}{}
37
38\protected\def\setvalidparameterkeys{\dodoubleargument\mult_checkers_set_valid_parameter_keys}
39\protected\def\addvalidparameterkeys{\dodoubleargument\mult_checkers_add_valid_parameter_keys}
40
41\def\mult_checkers_set_valid_parameter_keys[#1][#2]{\clf_setvalidinterfacekeys{#1}{#2}}
42\def\mult_checkers_add_valid_parameter_keys[#1][#2]{\clf_addvalidinterfacekeys{#1}{#2}}
43
44\def\mult_checkers_get_checked_parameters_yes[#1]#2[#3]#4[#5%
45  {\if\noexpand#5]%
46     \expandafter\gobblethreearguments
47   \else
48     \let\setsomevalue\dosetvalue % used at the lua end
49     \expandafter\mult_checkers_get_checked_parameters_yes_indeed
50   \fi{#1}{#3}#5}
51
52\def\mult_checkers_get_checked_parameters_yes_indeed#1#2#3]%
53  {\clf_getcheckedinterfaceparameters{#1}{#2}{\detokenize{#3}}}
54
55\def\mult_checkers_get_checked_parameters_nop[#1]#2[#3]#4[#5%
56  {\if\noexpand#5]%
57     \expandafter\gobbletwoarguments
58   \else
59     \let\setsomevalue\dosetvalue % used at the lua end
60     \expandafter\mult_checkers_get_checked_parameters_nop_indeed
61   \fi{#3}#5}
62
63\def\mult_checkers_get_checked_parameters_nop_indeed#1#2]% needs checking with adapted syst-aux.mkiv
64  {\def\syst_helpers_get_parameters_assign{\syst_helpers_get_parameters_assign_indeed#1}% will change
65   \syst_helpers_process_comma_item#2,],^^^^0004}
66
67\protected\def\disablecheckparameters{\let\getcheckedparameters\mult_checkers_get_checked_parameters_nop}
68\protected\def\enablecheckparameters {\let\getcheckedparameters\mult_checkers_get_checked_parameters_yes}
69
70\disablecheckparameters
71
72\protect \endinput
73
74\starttext
75
76\testfeatureonce{10000}{\getcheckedparameters[test][xx][a=b,c= d, e = f]} % 0.20 seconds
77
78\enablecheckparameters
79
80\testfeatureonce{10000}{\getcheckedparameters[test][xx][a=b,c= d, e = f]} % 0.35 seconds
81
82\getcheckedparameters[test][xx][a=a]
83\getcheckedparameters[test][xx][b= b]
84\getcheckedparameters[test][xx][c = c]
85\getcheckedparameters[test][xx][d = d d , e = e ,f = f ]
86\getcheckedparameters[test][xx][g={oeps {oeps}}]
87\getcheckedparameters[test][xx][crap=whatever]
88
89\startlines
90[a:\getvalue{xxa}][a]
91[b:\getvalue{xxb}][b]
92[c:\getvalue{xxc}][c]
93[d:\getvalue{xxd}][d d ]
94[e:\getvalue{xxe}][e ]
95[f:\getvalue{xxf}][f ]
96[g:\getvalue{xxg}][\detokenize\expandafter{\xxg}]
97\stoplines
98
99\setvalidparameterkeys[test][crap]
100
101\getcheckedparameters[test][xx][crap=whatever]
102
103\stoptext
104