On Fri, 2017-07-21 at 11:25 +0000, Jaroslav Hajtmar wrote:
> Hello ConTeXist.
> Is there any way to evaluate of contents of two macros as I am showing in my 
> minimal example? 
> I know, that problem is in expansion, but I dont know to resolve it.
> My minimal example consist of piece lua code, because I am solving my problem 
> in mixed codes (TeX
> & Lua)

Something similar has been asked before and it is not possible.  The 
interfaces.definecommand
function defines a new macro using \protected\def.  To compare as equal in a 
\doif context, both
operands have to _expand_ to the same thing (here 123).  Here \mymacro is not 
expandable and thus
only \doifelse{\mymacro}{\mymacro} will ever compare true.

Furthermore, scanning for optional arguments (i.e. [...]) is inherently 
non-expandable.  To get
something expandable you must at least switch to mandatory arguments (i.e. 
{...}).  Still, using
interfaces.definecommand will still not be possible.  I believe that scanning 
arguments is better
done on the macro level than in Lua, but that's just my opinion.

> Thanx for help.
> Jaroslav Hajtmar
>  
>  
> \starttext
>  
> \startluacode
>                 interfaces.definecommand ("domymacro", {
>                     arguments = { { "option", "string" }  },
>                     macro = function (opt_1)
>                        if #opt_1>0 then
>                                context(opt_1)
>                                else
>                                context("123")
>                                end
>                     end
>                                })
>                 interfaces.definecommand("mymacro", {
>                     macro = function ()
>                       context.dosingleempty()
>                       context["domymacro"]()
>                     end
>                                })
> \stopluacode
>  
> \def\myothermacro{123}
>  
> \hairline
>  
> \mymacro[123]
>  
> \mymacro
>  
> \myothermacro
>  
> \hairline
>  
> \doifelse{\mymacro}{\mymacro[123]}{equal content}{not equal content}
>  
> \doifsamestringelse{\mymacro}{\mymacro[123]}{equal content}{not equal content}
>  
> \doifinstringelse{\mymacro}{\mymacro[123]}{equal content}{not equal content}
>  
> \doifincsnameelse{\mymacro}{\mymacro[123]}{equal content}{not equal content}
>  
>  
> \hairline
>  
> \doifelse{\mymacro}{\myothermacro}{equal content}{not equal content}
>  
> \doifsamestringelse{\mymacro}{\myothermacro}{equal content}{not equal content}
>  
> \doifinstringelse{\mymacro}{\myothermacro}{equal content}{not equal content}
>  
> \doifincsnameelse{\mymacro}{\myothermacro}{equal content}{not equal content}
>  
>  
>  
> \stoptext
>  
>  
>  
> ___________________________________________________________________________________
> 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
> ___________________________________________________________________________________
___________________________________________________________________________________
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
___________________________________________________________________________________

Reply via email to