ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Reading ConTeXt metadata values into Lua
@ 2021-10-16  4:00 Ramkumar KB via ntg-context
  2021-10-16  8:33 ` Wolfgang Schuster via ntg-context
  0 siblings, 1 reply; 4+ messages in thread
From: Ramkumar KB via ntg-context @ 2021-10-16  4:00 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Ramkumar KB


[-- Attachment #1.1: Type: text/plain, Size: 884 bytes --]

Hello All,

I was trying to read the value of '\totalnumberofpages' into lua to do
something with it. As an example, see below.

Now, as I understand it, my example would not work as TeX gets the first go
at this and therefore the variable 'pages' is the string
'\totalnumberofpages' and not the actual value itself. And Lua cannot
process this "calculation".

I tried to go thru the manual -  *cld-mkiv.pdf  *- in the distro but could
not catch on how to read a metadata value (not print). I am sure that I am
missing a small trick somewhere (or is it something more involved?).

\startluacode
function myFancyCalculations(pages)
  -- some fancy stuff but as an example
local myCal = tonumber(pages) + 1
return myCal
\stopluacode

\starttext

\blah

\ctxlua{context(myFancyCalculations("\\totalnumberofpages"))}

\stoptext

Thank you in advance for any tips.

best regards,
Ramkumar

[-- Attachment #1.2: Type: text/html, Size: 2284 bytes --]

[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

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

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

* Re: Reading ConTeXt metadata values into Lua
  2021-10-16  4:00 Reading ConTeXt metadata values into Lua Ramkumar KB via ntg-context
@ 2021-10-16  8:33 ` Wolfgang Schuster via ntg-context
  2021-10-16  8:59   ` Hans Hagen via ntg-context
  0 siblings, 1 reply; 4+ messages in thread
From: Wolfgang Schuster via ntg-context @ 2021-10-16  8:33 UTC (permalink / raw)
  To: mailing list for ConTeXt users, Ramkumar KB via ntg-context
  Cc: Wolfgang Schuster


[-- Attachment #1.1: Type: text/plain, Size: 1717 bytes --]

Ramkumar KB via ntg-context schrieb am 16.10.2021 um 06:00:
> Hello All,
>
> I was trying to read the value of '\totalnumberofpages' into lua to do 
> something with it. As an example, see below.
>
> Now, as I understand it, my example would not work as TeX gets the 
> first go at this and therefore the variable 'pages' is the string 
> '\totalnumberofpages' and not the actual value itself. And Lua cannot 
> process this "calculation".
>
> I tried to go thru the manual - *cld-mkiv.pdf *- in the distro but 
> could not catch on how to read a metadata value (not print). I am sure 
> that I am missing a small trick somewhere (or is it something more 
> involved?).
>
> \startluacode
> function myFancyCalculations(pages)
>   -- some fancy stuff but as an example
> local myCal = tonumber(pages) + 1
> return myCal
> \stopluacode
> \starttext
>
> \blah
>
> \ctxlua{context(myFancyCalculations("\\totalnumberofpages"))}
>
> \stoptext

Everything gets easier when you use the Lua functions to access the 
counter values but be aware the values can be wrong when you're at a 
page break.

\startbuffer[pagenumber]
\startluacode
context.starttabulate()
     context.NC()
         context("Current page")
     context.EQ()
         context(structures.counters.get("realpage",1,"number"))
     context.NC()
     context.NR()
     context.NC()
         context("Last page")
     context.EQ()
         context(structures.counters.get("realpage",1,"last"))
     context.NC()
     context.NR()
context.stoptabulate()
\stopluacode
\stopbuffer

\starttext

\dorecurse
     {\randomnumber{5}{10}}
     {\getbuffer[pagenumber]
      \page}

\stoptext

Wolfgang


[-- Attachment #1.2: Type: text/html, Size: 3276 bytes --]

[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

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

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

* Re: Reading ConTeXt metadata values into Lua
  2021-10-16  8:33 ` Wolfgang Schuster via ntg-context
@ 2021-10-16  8:59   ` Hans Hagen via ntg-context
  2021-10-17  8:06     ` Ramkumar KB via ntg-context
  0 siblings, 1 reply; 4+ messages in thread
From: Hans Hagen via ntg-context @ 2021-10-16  8:59 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Hans Hagen

On 10/16/2021 10:33 AM, Wolfgang Schuster via ntg-context wrote:
> Ramkumar KB via ntg-context schrieb am 16.10.2021 um 06:00:
>> Hello All,
>>
>> I was trying to read the value of '\totalnumberofpages' into lua to do 
>> something with it. As an example, see below.
>>
>> Now, as I understand it, my example would not work as TeX gets the 
>> first go at this and therefore the variable 'pages' is the string 
>> '\totalnumberofpages' and not the actual value itself. And Lua cannot 
>> process this "calculation".
>>
>> I tried to go thru the manual - *cld-mkiv.pdf *- in the distro but 
>> could not catch on how to read a metadata value (not print). I am sure 
>> that I am missing a small trick somewhere (or is it something more 
>> involved?).
>>
>> \startluacode
>> function myFancyCalculations(pages)
>>   -- some fancy stuff but as an example
>> local myCal = tonumber(pages) + 1
>> return myCal
>> \stopluacode
>> \starttext
>>
>> \blah
>>
>> \ctxlua{context(myFancyCalculations("\\totalnumberofpages"))}
>>
>> \stoptext
> 
> Everything gets easier when you use the Lua functions to access the 
> counter values but be aware the values can be wrong when you're at a 
> page break.
> 
> \startbuffer[pagenumber]
> \startluacode
> context.starttabulate()
>      context.NC()
>          context("Current page")
>      context.EQ()
>          context(structures.counters.get("realpage",1,"number"))
>      context.NC()
>      context.NR()
>      context.NC()
>          context("Last page")
>      context.EQ()
>          context(structures.counters.get("realpage",1,"last"))
>      context.NC()
>      context.NR()
> context.stoptabulate()
> \stopluacode
> \stopbuffer
> 
> \starttext
> 
> \dorecurse
>      {\randomnumber{5}{10}}
>      {\getbuffer[pagenumber]
>       \page}
> 
> \stoptext

As addendum ... The problem in general with macros is that one doesn't 
really knows by looking at the name what actually happens when it 
expands, which can be a lot. Now, because \totalnumberofpages is 
supposed to 'return' a number and not typeset something styled (which 
itself involved macro expansion) you can actually do this:

\startluacode
local n = tokens.getters.macro("totalnumberofpages",true)
print(">>>",type(n),n)
\stopluacode

but beware of the fact that you actually get back a string:

\startluacode
local n = tokens.getters.macro("totalnumberofpages",true)
print(">>>",type(n),n)
local n = tonumber(n)
print(">>>",type(n),n)
\stopluacode

etc etc

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
___________________________________________________________________________________

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

* Re: Reading ConTeXt metadata values into Lua
  2021-10-16  8:59   ` Hans Hagen via ntg-context
@ 2021-10-17  8:06     ` Ramkumar KB via ntg-context
  0 siblings, 0 replies; 4+ messages in thread
From: Ramkumar KB via ntg-context @ 2021-10-17  8:06 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Ramkumar KB


[-- Attachment #1.1: Type: text/plain, Size: 3923 bytes --]

Hans / Wolfgang,

Thank you for your quick feedback and the tips. Yes, this works for now.

In general, I will try to avoid going into such "deep-end" APIs (at least
for now, until such time I read all the manuals in depth!). IMHO, the
standard ConTeXt system is itself quite powerful for 98% of the Typesetting
usecases.

best regards,
Ramkumar


On Sat, Oct 16, 2021 at 4:59 PM Hans Hagen via ntg-context <
ntg-context@ntg.nl> wrote:

> On 10/16/2021 10:33 AM, Wolfgang Schuster via ntg-context wrote:
> > Ramkumar KB via ntg-context schrieb am 16.10.2021 um 06:00:
> >> Hello All,
> >>
> >> I was trying to read the value of '\totalnumberofpages' into lua to do
> >> something with it. As an example, see below.
> >>
> >> Now, as I understand it, my example would not work as TeX gets the
> >> first go at this and therefore the variable 'pages' is the string
> >> '\totalnumberofpages' and not the actual value itself. And Lua cannot
> >> process this "calculation".
> >>
> >> I tried to go thru the manual - *cld-mkiv.pdf *- in the distro but
> >> could not catch on how to read a metadata value (not print). I am sure
> >> that I am missing a small trick somewhere (or is it something more
> >> involved?).
> >>
> >> \startluacode
> >> function myFancyCalculations(pages)
> >>   -- some fancy stuff but as an example
> >> local myCal = tonumber(pages) + 1
> >> return myCal
> >> \stopluacode
> >> \starttext
> >>
> >> \blah
> >>
> >> \ctxlua{context(myFancyCalculations("\\totalnumberofpages"))}
> >>
> >> \stoptext
> >
> > Everything gets easier when you use the Lua functions to access the
> > counter values but be aware the values can be wrong when you're at a
> > page break.
> >
> > \startbuffer[pagenumber]
> > \startluacode
> > context.starttabulate()
> >      context.NC()
> >          context("Current page")
> >      context.EQ()
> >          context(structures.counters.get("realpage",1,"number"))
> >      context.NC()
> >      context.NR()
> >      context.NC()
> >          context("Last page")
> >      context.EQ()
> >          context(structures.counters.get("realpage",1,"last"))
> >      context.NC()
> >      context.NR()
> > context.stoptabulate()
> > \stopluacode
> > \stopbuffer
> >
> > \starttext
> >
> > \dorecurse
> >      {\randomnumber{5}{10}}
> >      {\getbuffer[pagenumber]
> >       \page}
> >
> > \stoptext
>
> As addendum ... The problem in general with macros is that one doesn't
> really knows by looking at the name what actually happens when it
> expands, which can be a lot. Now, because \totalnumberofpages is
> supposed to 'return' a number and not typeset something styled (which
> itself involved macro expansion) you can actually do this:
>
> \startluacode
> local n = tokens.getters.macro("totalnumberofpages",true)
> print(">>>",type(n),n)
> \stopluacode
>
> but beware of the fact that you actually get back a string:
>
> \startluacode
> local n = tokens.getters.macro("totalnumberofpages",true)
> print(">>>",type(n),n)
> local n = tonumber(n)
> print(">>>",type(n),n)
> \stopluacode
>
> etc etc
>
> 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
>
> ___________________________________________________________________________________
>

[-- Attachment #1.2: Type: text/html, Size: 5818 bytes --]

[-- Attachment #2: Type: text/plain, Size: 493 bytes --]

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

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

end of thread, other threads:[~2021-10-17  8:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-16  4:00 Reading ConTeXt metadata values into Lua Ramkumar KB via ntg-context
2021-10-16  8:33 ` Wolfgang Schuster via ntg-context
2021-10-16  8:59   ` Hans Hagen via ntg-context
2021-10-17  8:06     ` Ramkumar KB via ntg-context

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).