From: Peter Rolf <indiego@gmx.net>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Cc: "Thomas A. Schmitz" <thomas.schmitz@uni-bonn.de>
Subject: Re: xml and lua again
Date: Sun, 23 Oct 2011 16:04:36 +0200 [thread overview]
Message-ID: <4EA41EF4.6090704@gmx.net> (raw)
In-Reply-To: <4EA2F34E.6080202@uni-bonn.de>
Hi Thomas,
Am 22.10.2011 18:46, schrieb Thomas A. Schmitz:
> Hi all,
>
> again, I'm playing a bit with processing my xml in lua. I want a simple
> interface for processing tables (I don't need all the power and
> complexity of cals tables and want to learn something in the process).
> And I thought that collecting the setups in lua might be the easiest
> way, but so far, I haven't been successful. Here's an example:
>
> \startbuffer[test]
> <a>
> <nattable frame="on">
> <tr>
> <td>1</td>
> <td>2</td>
> <td>3</td>
> <td>4</td>
> </tr>
> <tr>
> <td>5</td>
> <td>6</td>
> <td>7</td>
> <td>8</td>
> </tr>
> </nattable>
> </a>
> \stopbuffer
>
> \startxmlsetups xml:testsetups
> \xmlsetsetup{main}{a|nattable|tr|td|}{xml:*}
> \stopxmlsetups
>
> \xmlregistersetup{xml:testsetups}
>
> \startxmlsetups xml:a
> \xmlflush{#1}
> \stopxmlsetups
>
> \startxmlsetups xml:nattable
> \startluacode
> framestate = lxml.att("#1", "frame")
> context(framestate)
> context(true)
> context.placefigure( { "here" }, "none" , function()
> context.setupTABLE( { "frame=on" } )
> context.bTABLE()
> context.xmlflush("#1")
> context.eTABLE()
> end)
> \stopluacode
> \stopxmlsetups
>
> \startxmlsetups xml:tr
> \startluacode
> context.bTR()
> context.xmlflush("#1")
> context.eTR()
> \stopluacode
> \stopxmlsetups
>
> \startxmlsetups xml:td
> \startluacode
> context.bTD()
> context.xmlflush("#1")
> context.eTD()
> \stopluacode
> \stopxmlsetups
>
> \starttext
> \xmlprocessbuffer{main}{test}{}
> \stoptext
>
> question: I have the value "on" in the lua variable "framestate." But
> how can I pass this on to the line
> context.setupTABLE( { "frame=on" } )?
> I tried something like
> context.setupTABLE( { "frame=" .. framestate } )
"frame=" .. tostring(framestate)
seems to work. Anyhow, if you are planning to do some more complex
stuff, you should separate the lua from the tex code.
The advantages are
- no catcode limitations
Then you can use nice stuff like
string.format("frame=%s",framestate)
- in case of lua errors you get the real line number
- lua syntax check is possible
Load the lua code at the beginning of your tex file with
\registerctxluafile{filename_without_suffix}{version number or empty}
One last but important tip: if you get lua errors like 'undefined
whatever', check your lua file with 'luatexc -p foo.lua' (lua compiler).
A single syntax error in the lua file and all of its content is ignored!
Can be quite frustrating to find the error cause, if all of your lua
code is undefined right from the beginning.
Best wishes, Peter
PS: lua programming is most efficient when done in direct moon light,
while drinking a glass of fresh goat milk! Mh, can't find the link to
this interesting statistic right now... so you just have to believe me
and give it a try.. :-)
___________________________________________________________________________________
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
___________________________________________________________________________________
next prev parent reply other threads:[~2011-10-23 14:04 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-22 16:46 Thomas A. Schmitz
2011-10-23 14:04 ` Peter Rolf [this message]
2011-10-23 14:37 ` Thomas A. Schmitz
2011-10-23 15:25 ` Peter Rolf
2011-10-23 18:15 ` Peter Rolf
2011-10-24 10:17 ` Hans Hagen
2011-10-24 12:18 ` Thomas A. Schmitz
2011-10-24 12:26 ` Hans Hagen
2011-10-24 17:00 ` Thomas A. Schmitz
2011-10-24 18:48 ` Hans Hagen
2011-10-25 9:43 ` Thomas A. Schmitz
2011-10-25 10:10 ` Wolfgang Schuster
2011-10-25 10:17 ` Hans Hagen
2011-10-25 10:27 ` Thomas A. Schmitz
2011-10-27 9:23 ` Thomas A. Schmitz
2011-10-27 9:53 ` Wolfgang Schuster
2011-10-27 10:32 ` Thomas A. Schmitz
2011-10-27 11:05 ` Hans Hagen
2011-10-28 6:23 ` Thomas A. Schmitz
2011-10-28 6:37 ` luigi scarso
2011-10-28 6:43 ` luigi scarso
2011-10-28 6:44 ` Patrick Gundlach
2011-10-28 6:55 ` Thomas A. Schmitz
2011-10-28 8:35 ` Wolfgang Schuster
2011-10-28 8:59 ` Hans Hagen
2011-10-28 8:56 ` Hans Hagen
2011-10-28 10:48 ` Thomas A. Schmitz
2011-10-28 11:23 ` luigi scarso
2011-10-28 11:42 ` Hans Hagen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EA41EF4.6090704@gmx.net \
--to=indiego@gmx.net \
--cc=ntg-context@ntg.nl \
--cc=thomas.schmitz@uni-bonn.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).