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