interfaces.definecommand fails with brackets inside string arguments
Hello list, i've played a bit with interfaces.definecommand, that lets you define TeX macros from lua (see the "ConTeXt Lua Documents", 7.3 User interfacing). I found that the commands defined by interfaces.definecommand fail when you pass string arguments that contain brackets. I think cldf-int.lua needs a patch to support those kind of arguments. In the meantime it's possible to bypass the problem passing arguments with brackets inside double braces, as in the MWE attached. Best wishes, Massimiliano
On 7/8/2019 5:18 PM, mf wrote:
Hello list, i've played a bit with interfaces.definecommand, that lets you define TeX macros from lua (see the "ConTeXt Lua Documents", 7.3 User interfacing).
I found that the commands defined by interfaces.definecommand fail when you pass string arguments that contain brackets.
I think cldf-int.lua needs a patch to support those kind of arguments.
In the meantime it's possible to bypass the problem passing arguments with brackets inside double braces, as in the MWE attached. catched in next beta
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 8 Jul 2019, at 17:18, mf
wrote: Hello list, i've played a bit with interfaces.definecommand, that lets you define TeX macros from lua (see the "ConTeXt Lua Documents", 7.3 User interfacing).
I found that the commands defined by interfaces.definecommand fail when you pass string arguments that contain brackets.
I think cldf-int.lua needs a patch to support those kind of arguments.
FYI, it fails because definecommand() creates a \myCommand that is equivalent to this: \def\myCommand#1{\ctxlua {_clmm_('myCommand',[[#1]])}} The [[…]] is the lua multi-line string syntax, like /* */ in C. So if the #1 expands into \blank[line], that produces [[\blank[line]]] resulting in a trailing extra ‘]’, which is a lua syntax error.
In the meantime it's possible to bypass the problem passing arguments with brackets inside double braces, as in the MWE attached.
Adding a space at the end also works, but a core patch makes sense to me. Taco
On 7/9/2019 10:37 AM, Taco Hoekwater wrote:
On 8 Jul 2019, at 17:18, mf
wrote: Hello list, i've played a bit with interfaces.definecommand, that lets you define TeX macros from lua (see the "ConTeXt Lua Documents", 7.3 User interfacing).
I found that the commands defined by interfaces.definecommand fail when you pass string arguments that contain brackets.
I think cldf-int.lua needs a patch to support those kind of arguments.
FYI, it fails because definecommand() creates a \myCommand that is equivalent to this:
\def\myCommand#1{\ctxlua {_clmm_('myCommand',[[#1]])}}
The [[…]] is the lua multi-line string syntax, like /* */ in C.
So if the #1 expands into \blank[line], that produces [[\blank[line]]] resulting in a trailing extra ‘]’, which is a lua syntax error.
In the meantime it's possible to bypass the problem passing arguments with brackets inside double braces, as in the MWE attached.
Adding a space at the end also works, but a core patch makes sense to me.
i'll re-implment it in a more modern way 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 -----------------------------------------------------------------
participants (3)
-
Hans Hagen
-
mf
-
Taco Hoekwater