[NTG-context] Sending data from lua to context and back to lua

Hans Hagen pragma at wxs.nl
Thu Feb 8 16:25:47 CET 2018


On 2/8/2018 3:34 PM, Rudolf Bahr wrote:
> On Thu, Feb 08, 2018 at 09:30:48AM +0100, Thomas A. Schmitz wrote:
>> On 02/07/2018 06:39 PM, Rudolf Bahr wrote:
>>> Sometimes the necessity could arise to send data from lua to context
>>> and answers back to lua. I tried this by using "read" and
>>> "immediate\write" commands in context. These commands are described
>>> in chapter 21 and 22 of Donald E. Knuth's "The TeXbook".
>>>
>>> My question is: Do there exist better and more simple solutions?
>>
>> You can print (typeset) information from inside lua code with the "context"
>> function. Have you seen the manual cld-mkiv.pdf? It's in the minimals.
>>
>> Thomas
> 
> Yes, thank you. I tried "context()" several times, but without success.
> Could be, that I have a false meaning how to use it: If I transfer data
> from context to lua and vice versa then in my imagination there must be
> variables in both languages  where the sent data is to be found.
> 
> With the use of "\immediate\write" and "\read" in context and the read and write
> functions in lua I know exactly from where to where the data goes. How to do
> the same with "context()"?
I have no clue what you want to achieve but Thomas means:

\setupwhitespace[line]

\starttext

\startluacode
     context("Here is lua.")
     context.par()
     context("I'm sending some picture names to Context in order to get 
back their sizes.")

     local imageA = "2007-01-01---Intro.png"
     local imageB = "2007-01-01---Neujahrsballade---1.png"
     local imageC = "2007-01-01---Neujahrsballade---2.png"

     local f = io.open("contextin.txt", "w")
     f:write(imageA,"\n",imageB,"\n",imageC)
     f:close()
\stopluacode

\openin15=contextin.txt
\read15 to \zeileA
\read15 to \zeileB
\read15 to \zeileC
\closein15

Here is \CONTEXT\ and what I got from Lua:

\startlines
\zeileA
\zeileB
\zeileC
\stoplines

Now I'm working ... and write my answers to a file for lua:

\startlines
\zeileA\ width=3000pt height=2000pt
\zeileB\ width=1200pt height=900pt
\zeileC\ width=1600pt height=1200pt
\stoplines

\immediate\openout7=contextout.txt
\immediate\write7{\zeileA\ width=3000pt height=2000pt \\}
\immediate\write7{\zeileB\ width=1200pt height=900pt  \\}
\immediate\write7{\zeileC\ width=1600pt height=1200pt \\}
\immediate\closeout7

\startluacode
     context("Here is lua again and what I got back from Context:")
     context.par()
     context(io.loaddata("contextout.txt"))
\stopluacode

\stoptext


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------


More information about the ntg-context mailing list