Difference between revisions of "XML Lua"

From Wiki
Jump to navigation Jump to search
Line 9: Line 9:
  
 
== The xml file ==
 
== The xml file ==
Here is the xml file that we will be processing, a price list for cars. Prices are given in Euros; this used to be a currency in some countries in Europe:
+
Here is the prices.xml file that we will be processing, a price list for cars. Prices are given in Euros; this used to be a currency in some countries in Europe:
  
 
<xmlcode>
 
<xmlcode>
Line 27: Line 27:
 
</list>
 
</list>
 
</xmlcode>
 
</xmlcode>
 +
 +
== The ConTeXt style file ==
 +
Next, we write the environment file which we will use to process our list. As an exercise, we will use Lua for all xml elements (though this doesn't make sense in most cases). If you have already read the [http://pragma-ade.com/show-man-43.htm manual], most of this will be familiar. The first line connects our environment with the Lua file where all the Lua code will go. The last lines set up a table, since this is how we want to display the information:
 +
 +
<texcode>
 +
\registerctxluafile{l-prices}{1.001}
 +
 +
\startxmlsetups xml:pricesetups
 +
\xmlsetsetup{#1}{list|
 +
item|
 +
model|
 +
price}{xml:*}
 +
\stopxmlsetups
 +
 +
\xmlregistersetup{xml:pricesetups}
 +
 +
\startxmlsetups xml:list
 +
\xmlfunction{#1}{list}
 +
\stopxmlsetups
 +
 +
\startxmlsetups xml:item
 +
\xmlfunction{#1}{item}
 +
\stopxmlsetups
 +
 +
\startxmlsetups xml:model
 +
\xmlfunction{#1}{model}
 +
\stopxmlsetups
 +
 +
\startxmlsetups xml:price
 +
\xmlfunction{#1}{price}
 +
\stopxmlsetups
 +
 +
\setupTABLE [column] [1]        [style=bold,width=0.3\textwidth]
 +
\setupTABLE [column] [2,3,4]    [style=italic,width=0.2\textwidth]
 +
</texcode>

Revision as of 08:15, 28 March 2013

General

If you process xml with ConTeXt Mkiv, you have the power of the Lua language at your fingertips. All \xml... commands have their Lua counterparts. Unfortunately, this is not yet fully documented, so this wiki page is a place-holder until Hans finishes this section in Mkiv manual.

A few general observations to help you getting started:

  • There are two sets of Lua commands: the xml... commands allow you to work with the content of your xml elements within Lua; lxml... commands pass the content to ConTeXt and typeset it.
  • Both commands receive the content as a Lua table.

Now let's get started with a silly example to show you what we can do in Lua.

The xml file

Here is the prices.xml file that we will be processing, a price list for cars. Prices are given in Euros; this used to be a currency in some countries in Europe:

<list>
  <item>
    <model>Volkswagen</model>
    <price>12000</price>
  </item>
  <item>
    <model>Mercedes</model>
    <price>35000</price>
  </item>
  <item>
    <model>Ferrari</model>
    <price>150000</price>
  </item>
</list>

The ConTeXt style file

Next, we write the environment file which we will use to process our list. As an exercise, we will use Lua for all xml elements (though this doesn't make sense in most cases). If you have already read the manual, most of this will be familiar. The first line connects our environment with the Lua file where all the Lua code will go. The last lines set up a table, since this is how we want to display the information:

\registerctxluafile{l-prices}{1.001}

\startxmlsetups xml:pricesetups
	\xmlsetsetup{#1}{list|
			 item|
			 model|
			 price}{xml:*}
\stopxmlsetups

\xmlregistersetup{xml:pricesetups}

\startxmlsetups xml:list
	\xmlfunction{#1}{list}
\stopxmlsetups

\startxmlsetups xml:item
	\xmlfunction{#1}{item}
\stopxmlsetups

\startxmlsetups xml:model
	\xmlfunction{#1}{model}
\stopxmlsetups

\startxmlsetups xml:price
	\xmlfunction{#1}{price}
\stopxmlsetups

\setupTABLE [column] [1]         [style=bold,width=0.3\textwidth]
\setupTABLE [column] [2,3,4]     [style=italic,width=0.2\textwidth]