The way I've been defining key-value macros is to first pass them to Lua, handle the parsing there thanks to `utilities.parsers.settings_to_hash` and then assign the resulting Lua table to ConTeXt variables.
This worked fine up to now, but I'm having problems with the following MWE: ``` \def\style#1[#2] { \ctxlua{userdata.style([==[#2]==])} \placestyle } \startluacode userdata = userdata or {} userdata.style = function(keyvals) local style = { color = nil, text = nil, } args = utilities.parsers.settings_to_hash(keyvals) for k, v in pairs(args) do style[k] = v end context.setvariables({'style'}, style) end \stopluacode \define\placestyle{ \doiftext {\getvariable{style}{text}} {\color[\getvariable{style}{color}]{\getvariable{style}{text}}} } \starttext \style[ text={Some red text}, color=red, ] \style[ color=blue, ] \stoptext ``` Here I assign a default value of `nil` to every key, and then check if the `text` variable is empty before printing it. I would expect the second macro not to print anything since its `text` should be nil, instead both macros print 'Some red text', the first one in red and the second one in blue. I have attached a screenshot of the output. What am I doing wrong?
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___________________________________________________________________________________