Re: [NTG-context] interfaces.definecommand fails with brackets inside string arguments

2019-07-09 Thread Hans Hagen

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
-
___
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
___


Re: [NTG-context] interfaces.definecommand fails with brackets inside string arguments

2019-07-09 Thread Taco Hoekwater


> 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

___
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
___


Re: [NTG-context] interfaces.definecommand fails with brackets inside string arguments

2019-07-09 Thread Hans Hagen

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
-
___
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
___


[NTG-context] interfaces.definecommand fails with brackets inside string arguments

2019-07-08 Thread mf

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
\startluacode
  require("int_defcmd")
\stopluacode

\starttext
  \myCommand{Simple text}.\par

  \myCommand{\blank}

  % no problems with braces inside
  \myCommand{Text with {\it braces} inside}.\par

  % this fails, because there are brackets inside
  \myCommand{\blank[10pt]}

  % this does not fail, because of the double braces
  \myCommand{{\blank[10pt]}}

\stoptext
function userdata.myCommand( content )
  context( content )
end

interfaces.definecommand {
  name = "myCommand",
  arguments = {
{ "content", "string" }
  },
  macro = userdata.myCommand
}
___
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
___