On 11/16/2021 9:09 PM, Jairo A. del Rio via ntg-context wrote:
If I understand it correctly, you may need something like this...?
% Protection is key \protected\def\inner[#1]{\empty} % \outer is (or was) already defined in \CONTEXT % Please use another name \def\Outer{\inner[123] and \inner[some text] etc.} \startluacode local implement = interfaces.implement local argument = tokens.scanners.argument local function parseinner() local r = {} local str = argument() str = str:gsub("\\inner%s*(%b[])",function(s)r[#r+1] = s:sub(2,#s-1)end) context(table.concat(r," ")) -- Change " " by another spacer if needed end implement{name = "parseinner", public = true, actions = parseinner} \stopluacode \starttext \parseinner{\Outer} \stoptext
However, this will only work with very simple cases (no nesting, etc.). Hope this helps. well, if we start talking weird code ...
\starttext \tolerant\def\MyInnerOuter#1\MyInner[#2]#3\MyDone\ignorearguments{#2} \def\MyOuter#1{\MyInnerOuter#1\MyDone\ignorearguments} whatever: \MyOuter{\MyInner[oeps]}\par whatever: \MyOuter{\InnerMy[oeps]}\par \edef\ItWorksA{\MyOuter{\MyInner[oeps]}} \edef\ItWorksB{\MyOuter{\InnerMy[oeps]}} whatever: \meaningless\ItWorksA\par whatever: \meaningless\ItWorksB\par \stoptext (1) we're tolerant so no problem when no match (2) the ignore hack quits scanning because tex will keep looking it's pretty fast and needs no lua magic, only a twisted mind Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------