%D \module %D [ file=mult-chk, %D version=2009.04.13, %D title=\CONTEXT\ Multilingual Macros, %D subtitle=Checking, %D author=Hans Hagen, %D date=\currentdate, %D copyright=\PRAGMA] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Multilingual Macros / Checking} %D This is very experimental code that eventually might be used %D once we have split the whole code base. %D \startbuffer %D \getcheckedparameters[MyTest][MyNamespace][a=1,b=2,c=3,d=4,crap=whatever] %D %D \MyNamespacea\quad %D \MyNamespaceb\quad %D \MyNamespacec\quad %D \MyNamespaced\quad %D crap is \ifdefined\MyNamespacecrap\else un\fi defined %D \stopbuffer %D %D \enablecheckparameters %D %D \setvalidparameterkeys[MyTest][a,b,c,d] \getbuffer \par %D \addvalidparameterkeys[MyTest][crap] \getbuffer \par \unprotect \registerctxluafile{mult-chk}{1.001} \def\setvalidparameterkeys{\dodoubleargument\dosetvalidparameterkeys} \def\addvalidparameterkeys{\dodoubleargument\doaddvalidparameterkeys} \def\dosetvalidparameterkeys[#1][#2]{\ctxlua{interfaces.setvalidkeys("#1",\!!bs#2\!!es)}} \def\doaddvalidparameterkeys[#1][#2]{\ctxlua{interfaces.addvalidkeys("#1",\!!bs#2\!!es)}} \def\getcheckedparametersyes[#1]#2[#3]#4[#5% {\if\noexpand#5]% \expandafter\gobblethreearguments \else \let\setsomevalue\dosetvalue \expandafter\dogetcheckedparametersyes \fi{#1}{#3}#5} \def\dogetcheckedparametersyes#1#2#3]% {\ctxlua{_gcp_("#1","#2",\!!bs\detokenize{#3}\!!es)}} \def\getcheckedparametersnop[#1]#2[#3]#4[#5% {\if\noexpand#5]% \expandafter\gobbletwoarguments \else \let\setsomevalue\dosetvalue \expandafter\dogetcheckedparametersnop \fi{#3}#5} \def\dogetcheckedparametersnop#1#2]% {\def\p!dogetparameter{\p!doassign#1}% \xprocesscommaitem#2,],\@relax@} \def\disablecheckparameters{\let\getcheckedparameters\getcheckedparametersnop} \def\enablecheckparameters {\let\getcheckedparameters\getcheckedparametersyes} \disablecheckparameters \protect \endinput \starttext \testfeatureonce{10000}{\getcheckedparameters[test][xx][a=b,c= d, e = f]} % 0.20 seconds \enablecheckparameters \testfeatureonce{10000}{\getcheckedparameters[test][xx][a=b,c= d, e = f]} % 0.35 seconds \getcheckedparameters[test][xx][a=a] \getcheckedparameters[test][xx][b= b] \getcheckedparameters[test][xx][c = c] \getcheckedparameters[test][xx][d = d d , e = e ,f = f ] \getcheckedparameters[test][xx][g={oeps {oeps}}] \getcheckedparameters[test][xx][crap=whatever] \startlines [a:\getvalue{xxa}][a] [b:\getvalue{xxb}][b] [c:\getvalue{xxc}][c] [d:\getvalue{xxd}][d d ] [e:\getvalue{xxe}][e ] [f:\getvalue{xxf}][f ] [g:\getvalue{xxg}][\detokenize\expandafter{\xxg}] \stoplines \setvalidparameterkeys[test][crap] \getcheckedparameters[test][xx][crap=whatever] \stoptext