As the subject of this question suggests, this is really more of a question about expansion control (a topic that is still a bit obscure to me). Suppose I have a macro \inner that expects a single argument or an assignment of parameters in brackets. For my purposes, I don't want this macro to do anything when it is typeset, so I'll just define it as empty:___________________________________________________________________________________```\def\inner[#1]\empty```Now suppose I have another macro \outer that invokes this macro with some specific input and sets some plain text after it:```
\def\outer{\inner[123] etc.}
```
What I'd like to do is parse the argument of \inner in \outer. I was hoping that a string search in Lua would work, but I'm not having any luck. A minimal (non)-working example is included below:
```\def\inner[#1]\empty
\def\outer{\inner[123] etc.}
\startluacode
local userdata = userdata or {}
function userdata.parseinner(str)
local innerparams = ""
if string.find(str, "\\inner(%b[])") then
i, j = string.find(str, "\\inner(%b[])")
innerparams = string.sub(str, i+1, j-1) -- we just want the content inside the brackets
end
context(innerparams)
return
end
\stopluacode
\def\parseinner#1{\ctxlua{userdata.parseinner([==[#1]==])}}
\starttext
Testing:\blank
\parseinner{\outer}
\stoptext
```
My problem is that when I pass \outer to the \parseinner macro, it gets fully expanded, so there isn't anything left to match "\\inner%b[]". Is there a way to expand \outer when I pass it to the \parseinner macro without also expanding the \inner macro inside it? Or is there some other preferred way of doing this?Joey
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
___________________________________________________________________________________