ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Dig out contents of the TeX macro using Lua
@ 2015-07-14 20:41 Jaroslav Hajtmar
  2015-07-15  7:01 ` Hans Hagen
  0 siblings, 1 reply; 2+ messages in thread
From: Jaroslav Hajtmar @ 2015-07-14 20:41 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hello ConTeXist.
I hope that my crazy questions not much bother.
This time I needed to get to the fair value of the parameter, delivering 
to lua function over the content macros.
Obviously it's my misunderstanding of the functioning of expansion in 
case maker with optional parameters, or you really can not explain the 
functioning of the transmission values. It seems that is passed to a 
sort of reference as to the actual contents of the macro perhaps can not 
even get through Lua. Or did they?
The following minimal example, perhaps explain what going on.

The question ultimately: Is there any alternative how using Lua somehow 
easily evaluate the macro content? For example to determine whether two 
different macros have the same content?

Jaroslav Hajtmar

here is minimal example:

\starttext

This works as expected:

\def\makrowithAAAAcontent{AAAA}

\edef\testparameter#1{%
\startluacode
local parameter='#1'
if parameter=='AAAA' then context('TRUE. ') else context('FALSE. ') end
context('Parameter '..parameter..' has length '..string.len(parameter))
\stopluacode
}%

\type{\makrowithAAAAcontent} -- \makrowithAAAAcontent

Test is \testparameter{BBBB}

Test is \testparameter{AAAA} % OK

Test is \testparameter{\makrowithAAAAcontent} % OK

But what about with this: ???


% initialize values
\startluacode
A={}
for i=1,50 do A[i]='Record '..tostring(i) end
A[25]='AAAA'
\stopluacode


\def\makrowithAAAAcontent{AAAA}

\def\lastname{\dosingleempty\dolastname}%
\def\dolastname[#1]{\doifsomethingelse{#1}{\ctxlua{context(A[#1])}}{\makrowithAAAAcontent}}%


\type{\lastname} - \lastname

\type{\lastname[2]} - \lastname[2]

\type{\lastname[5]} - \lastname[5]

\type{\lastname[25]} - \lastname[25]





\edef\readandprocessparameters#1#2{%
\startluacode
local parameter1='#1'
if parameter1=='AAAA' then context('Test '..parameter1..' = AAAA is 
TRUE. ') else context('Test '..parameter1..' = AAAA is FALSE. ') end
context('Parameter 1 = '..parameter1..' has length 
'..string.len(parameter1))
context('\\crlf')
local parameter2='#2'
if parameter2=='AAAA' then context('Test '..parameter2..' = AAAA is 
TRUE. ') else context('Test '..parameter2..' = AAAA is FALSE. ') end
context('Parameter 2 = '..parameter2..' has length 
'..string.len(parameter2))
context('\\crlf')
\stopluacode
}%


\readandprocessparameters{AAAA}{BBBB}

%Test is \readandprocessparameters{\lastname[25]}{\lastname} % Crashed

\readandprocessparameters{\\lastname[25]}{\\lastname}

\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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Dig out contents of the TeX macro using Lua
  2015-07-14 20:41 Dig out contents of the TeX macro using Lua Jaroslav Hajtmar
@ 2015-07-15  7:01 ` Hans Hagen
  0 siblings, 0 replies; 2+ messages in thread
From: Hans Hagen @ 2015-07-15  7:01 UTC (permalink / raw)
  To: hajtmar, mailing list for ConTeXt users

On 7/14/2015 10:41 PM, Jaroslav Hajtmar wrote:
> Hello ConTeXist.
> I hope that my crazy questions not much bother.
> This time I needed to get to the fair value of the parameter, delivering
> to lua function over the content macros.
> Obviously it's my misunderstanding of the functioning of expansion in
> case maker with optional parameters, or you really can not explain the
> functioning of the transmission values. It seems that is passed to a
> sort of reference as to the actual contents of the macro perhaps can not
> even get through Lua. Or did they?
> The following minimal example, perhaps explain what going on.

Tex has tokens so "foo" is three tokens "f" "o" "o" and not a string. 
This means that you need to turn tokens into a string (using the 
(new)token library). It means that you need to be well aware of tex's 
internals and the way it deals with input -> tokenization -> expansion 
etc etc.

> The question ultimately: Is there any alternative how using Lua somehow
> easily evaluate the macro content? For example to determine whether two
> different macros have the same content?

just avoid storing stuff in macros .. .as most you do seem to be lua, 
keep your data in lua. If you put something in a token register you can 
consult it as string but even then it cannot be what you expect as 
embedded macros don't get expanded (for good reason as they can be 
anything).

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | 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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-07-15  7:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-14 20:41 Dig out contents of the TeX macro using Lua Jaroslav Hajtmar
2015-07-15  7:01 ` Hans Hagen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).