Re: [NTG-context] processing xml with lua

2013-03-05 Thread Thomas A. Schmitz

On 03/05/2013 11:11 AM, Hans Hagen wrote:

\startluacode
local lookuptable = { }
function xml.functions.lookup(t)
 local mytype  = xml.text(t, "c")
 local myvalue = lookuptable[mytype]
 if not myvalue then
 myvalue = xml.first(t, "d")
 lookuptable[mytype] = myvalue
 context("registered: ")
 else
 context("reused: ")
 end
 -- each found node gets an id
 lxml.flush(lxml.id(myvalue))
 context(" or ")
 -- in tex mode a to-tex serializer is the default
 xml.cprint(myvalue)
end
\stopluacode

One place to look for tricks is in x-mathml.mkiv / lua (I know, I should
finish that manual).

Hans


Beautiful! Thanks a lot, that's just what I needed. And yes, in the 
medium-to-long run, finishing the manual will save you from being 
pestered with my questions... :-)


Thomas
___
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
___


Re: [NTG-context] processing xml with lua

2013-03-05 Thread Hans Hagen

On 3/5/2013 10:16 AM, Thomas A. Schmitz wrote:

On 03/05/2013 09:58 AM, Hans Hagen wrote:

 lookuptable[mytype] = mytype .. " = " .. myvalue
 inspect(lookuptable)

the .. triggers a tostring on myvalue which in turn serializes the xml

 lookuptable[mytype] = { mytype = myvalue }

would keep myvalue as xml node


Hans, thanks a lot, the explanation makes sense, but your suggestion is
not yet clear enough for me: how would I then process the node?

context(lookuptable[mytype]["mytype"])

gives again the serialized xml.


\startluacode
local lookuptable = { }
function xml.functions.lookup(t)
local mytype  = xml.text(t, "c")
local myvalue = lookuptable[mytype]
if not myvalue then
myvalue = xml.first(t, "d")
lookuptable[mytype] = myvalue
context("registered: ")
else
context("reused: ")
end
-- each found node gets an id
lxml.flush(lxml.id(myvalue))
context(" or ")
-- in tex mode a to-tex serializer is the default
xml.cprint(myvalue)
end
\stopluacode

One place to look for tricks is in x-mathml.mkiv / lua (I know, I should 
finish that manual).


Hans

-
  Hans Hagen | PRAGMA ADE
  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
 | 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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___


Re: [NTG-context] processing xml with lua

2013-03-05 Thread Thomas A. Schmitz

On 03/05/2013 09:58 AM, Hans Hagen wrote:

 lookuptable[mytype] = mytype .. " = " .. myvalue
 inspect(lookuptable)

the .. triggers a tostring on myvalue which in turn serializes the xml

 lookuptable[mytype] = { mytype = myvalue }

would keep myvalue as xml node


Hans, thanks a lot, the explanation makes sense, but your suggestion is 
not yet clear enough for me: how would I then process the node?


context(lookuptable[mytype]["mytype"])

gives again the serialized xml.

Thomas
___
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
___


Re: [NTG-context] processing xml with lua

2013-03-05 Thread Hans Hagen

On 3/5/2013 9:47 AM, Thomas A. Schmitz wrote:

Hi,

may I ask another question about my new favorite topic? No? Anyway: here
comes. While processing xml, I would like to store the content of a node
in a lua table and retrieve it later. The example is silly, but
demonstrates my problem. Is there a way to have ConTeXt process and
typeset the value in lines 3 and 4? As you can see, it typesets the raw
xml instead of processing it. (I suspect I'm still a bit lost regarding
the difference between xml... and lxml... functions, but I couldn't hit
the right combination here).


lookuptable[mytype] = mytype .. " = " .. myvalue
inspect(lookuptable)

the .. triggers a tostring on myvalue which in turn serializes the xml

lookuptable[mytype] = { mytype = myvalue }

would keep myvalue as xml node



Thanks, and all best

Thomas

\startbuffer[test]

   Fruit Apple
   Vegetable Carot
   Fruit
   Vegetable

\stopbuffer

\startxmlsetups xml:testsetups
 \xmlsetsetup{\xmldocument}{a|b|c|d}{xml:*}
\stopxmlsetups

\xmlregistersetup{xml:testsetups}

\startxmlsetups xml:a
 \xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:b
 \xmlfunction{#1}{lookup} \par
\stopxmlsetups

\startxmlsetups xml:e
 {\bgroup\em \xmlflush{#1}\egroup}
\stopxmlsetups

\startxmlsetups xml:q
 \quotation{\xmlflush{#1}}
\stopxmlsetups

\startluacode
lookuptable = { }
function xml.functions.lookup(t)
   mytype = xml.text(t, "c")
   myvalue = xml.text(t, "d")
   if not lookuptable[mytype] then
 context("New Type: ") context(mytype) context("; its value is: ")
lxml.text(t, "d")
 lookuptable[mytype] = mytype .. " = " .. myvalue
   else
 context("This Type is already known: ") context(lookuptable[mytype])
   end
end
\stopluacode

\starttext
\xmlprocessbuffer{main}{test}{}

\stoptext
___

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
___




--

-
  Hans Hagen | PRAGMA ADE
  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
 | 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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___


Re: [NTG-context] processing xml with lua

2013-03-05 Thread Thomas A. Schmitz

Hi,

may I ask another question about my new favorite topic? No? Anyway: here 
comes. While processing xml, I would like to store the content of a node 
in a lua table and retrieve it later. The example is silly, but 
demonstrates my problem. Is there a way to have ConTeXt process and 
typeset the value in lines 3 and 4? As you can see, it typesets the raw 
xml instead of processing it. (I suspect I'm still a bit lost regarding 
the difference between xml... and lxml... functions, but I couldn't hit 
the right combination here).


Thanks, and all best

Thomas

\startbuffer[test]

  Fruit Apple
  Vegetable Carot
  Fruit
  Vegetable

\stopbuffer

\startxmlsetups xml:testsetups
\xmlsetsetup{\xmldocument}{a|b|c|d}{xml:*}
\stopxmlsetups

\xmlregistersetup{xml:testsetups}

\startxmlsetups xml:a
\xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:b
\xmlfunction{#1}{lookup} \par
\stopxmlsetups

\startxmlsetups xml:e
{\bgroup\em \xmlflush{#1}\egroup}
\stopxmlsetups

\startxmlsetups xml:q
\quotation{\xmlflush{#1}}
\stopxmlsetups

\startluacode
lookuptable = { }
function xml.functions.lookup(t)
  mytype = xml.text(t, "c")
  myvalue = xml.text(t, "d")
  if not lookuptable[mytype] then
context("New Type: ") context(mytype) context("; its value is: ") 
lxml.text(t, "d")

lookuptable[mytype] = mytype .. " = " .. myvalue
  else
context("This Type is already known: ") context(lookuptable[mytype])
  end
end
\stopluacode

\starttext
\xmlprocessbuffer{main}{test}{}

\stoptext
___
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
___


Re: [NTG-context] processing xml with lua

2013-02-26 Thread Schmitz Thomas A.

On Feb 26, 2013, at 1:54 PM, Hans Hagen  wrote:

> you go up to the parent of sections which to far up, try:
> 
>  section = xml.attribute(r, "..", "label", "X")
> 
> or
> 
>  section = xml.filter(r, "../attribute(label)")
> 
> 

Mojca, Hans,

thanks, that is exactly right! I wasn't too sure about ../../section, but now 
it makes sense. I have to study xpath a bit more, I guess.

All best

Thomas
___
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
___


Re: [NTG-context] processing xml with lua

2013-02-26 Thread Hans Hagen

On 2/26/2013 1:23 PM, Schmitz Thomas A. wrote:

Hi all,

one of my favorite topics… Here is a minimal example which shows something that I don't understand: when I process the 
subsection with the lua code, I want to get the value of the current section's "label" attribute in 
xml.attribute(r, "../../section", "label", "X"). So i was expecting that lua would go up 
(../../) and fetch the current section's label. But if you run the example, you see that it actually always gets the 
first section's label (value is always 1). How can I get the current section's label with a lua function?


you go up to the parent of sections which to far up, try:

  section = xml.attribute(r, "..", "label", "X")

or

  section = xml.filter(r, "../attribute(label)")


THanks and all best

Thomas

\startbuffer[test]

   
 
   
 text 1.1
   
 
   
   
 
   
 text 3.1
   
 
 
   
 text 3.5
   
 
   

\stopbuffer

\startxmlsetups xml:testsetups
\xmlsetsetup{\xmldocument}{chapter|section|subsection|content}{xml:*}
\stopxmlsetups

\xmlregistersetup{xml:testsetups}

\startxmlsetups xml:chapter
\xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:section
\xmlflush{#1} \par
\stopxmlsetups

\startxmlsetups xml:subsection
\xmlfunction{#1}{test}
\stopxmlsetups

\startluacode
outfile = io.open('temp.tmp', 'w')
function xml.functions.test(r)
   content = xml.text(r, "content")
   section = xml.attribute(r, "../../section", "label", "X")
   context("This ") context(content) context(" is in section ") context(section)
end
\stopluacode

\starttext
\xmlprocessbuffer{main}{test}{}

\enabletrackers[context.trace]

\xmlshow{main}
\stoptext

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




--

-
  Hans Hagen | PRAGMA ADE
  Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
 | 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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___