Re: [NTG-context] xml and lua again

2011-10-28 Thread Thomas A. Schmitz

On 10/27/11 13:05, Hans Hagen wrote:

With “tex.dimen[…]” you get the value in scaled points but
util-dim.lua provides some functions to convert the value in points,
centimeter etc.

\starttext
\startluacode
context.blackrule{ width = number.topoints(tex.dimen[textwidth]/2) }
\stopluacode
\stoptext


Thank you Wolfgang, that's exactly what I was looking for!


or just tex.dimen[textwidth]/2 .. sp


Wait, just so I understand: your solution would imply that 
tex.dimen[textwidth] holds a number, not a dimension, right? (Because 
you simply concatenate it with a dimension unit). Which makes sense when 
I think of it because lua has no concept of dimensions, only of strings, 
functions, tables, numbers... Whereas the Wolfgang implies that the 
result is already in sp. So who's right?


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] xml and lua again

2011-10-28 Thread luigi scarso
On Fri, Oct 28, 2011 at 8:23 AM, Thomas A. Schmitz
thomas.schm...@uni-bonn.de wrote:
 On 10/27/11 13:05, Hans Hagen wrote:

 With “tex.dimen[…]” you get the value in scaled points but
 util-dim.lua provides some functions to convert the value in points,
 centimeter etc.

 \starttext
 \startluacode
 context.blackrule{ width = number.topoints(tex.dimen[textwidth]/2) }
 \stopluacode
 \stoptext

 Thank you Wolfgang, that's exactly what I was looking for!

 or just tex.dimen[textwidth]/2 .. sp

 Wait, just so I understand: your solution would imply that
 tex.dimen[textwidth] holds a number, not a dimension, right? (Because you
 simply concatenate it with a dimension unit). Which makes sense when I think
 of it because lua has no concept of dimensions, only of strings, functions,
 tables, numbers... Whereas the Wolfgang implies that the result is already
 in sp. So who's right?
both -- where is the problem ?
 tex.dimen[textwidth]/2 .. sp gives xyzsp

number.topoints(tex.dimen[textwidth]/2) gives XYZ.ABSpt
TeX reads xyzsp and drops sp
or
TeX reads XYZ.ABC.pt and convert to xyzsp and drops sp

The problem  is that
tex.dimen[textwidth]/2 gives a number, while TeX wants a dimension there

PS
both numbers are signed ( and maybe with spaces here and there, I
don't remember)

-- 
luigi
___
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] xml and lua again

2011-10-28 Thread luigi scarso
On Fri, Oct 28, 2011 at 8:37 AM, luigi scarso luigi.sca...@gmail.com wrote:
soryy, typos

 number.topoints(tex.dimen[textwidth]/2) gives XYZ.ABSpt
number.topoints(tex.dimen[textwidth]/2) gives XYZ.ABCpt

 TeX reads XYZ.ABC.pt and convert to xyzsp and drops sp
TeX reads XYZ.ABCpt and convert to xyzsp and drops sp

-- 
luigi
___
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] xml and lua again

2011-10-28 Thread Patrick Gundlach


 
 context.blackrule{ width = number.topoints(tex.dimen[textwidth]/2) }
 
 or just tex.dimen[textwidth]/2 .. sp
 
 Wait, just so I understand: your solution would imply that 
 tex.dimen[textwidth] holds a number, not a dimension, right? (Because you 
 simply concatenate it with a dimension unit). Which makes sense when I think 
 of it because lua has no concept of dimensions, only of strings, functions, 
 tables, numbers... Whereas the Wolfgang implies that the result is already in 
 sp. So who's right?

both :)

tex.dimen holds a number, that is the size in points, multiplied by 65536/1pt, 
so for example 3pt becomes

3pt * 65536
---  = 3 * 65536 = 196608
  1pt


This number is also known sp. So if you store the number 3*65536 in 
tex.dimen[...], you can say:

my width is \directlua{ tex.dimen[...] / 2}sp (results to my width is 
196608sp, which you can use as an argument to whatever needs a length)

or

my width is \directlua{  number_to_points(tex.dimen[...]) } where 
number_to_points is something like

number_to_points = function (amount_in_sp) 
  in_pt = tostring(amount_in_sp / 65536) 
  return in_pt .. pt
end

which gives 3pt. 

Patrick

___
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] xml and lua again

2011-10-28 Thread Thomas A. Schmitz

On 10/28/11 08:44, Patrick Gundlach wrote:





context.blackrule{ width = number.topoints(tex.dimen[textwidth]/2) }


or just tex.dimen[textwidth]/2 .. sp


Wait, just so I understand: your solution would imply that 
tex.dimen[textwidth] holds a number, not a dimension, right? (Because you 
simply concatenate it with a dimension unit). Which makes sense when I think of it 
because lua has no concept of dimensions, only of strings, functions, tables, numbers... 
Whereas the Wolfgang implies that the result is already in sp. So who's right?


both :)

tex.dimen holds a number, that is the size in points, multiplied by 65536/1pt, 
so for example 3pt becomes

3pt * 65536
---  = 3 * 65536 = 196608
   1pt


This number is also known sp. So if you store the number 3*65536 in 
tex.dimen[...], you can say:

my width is \directlua{ tex.dimen[...] / 2}sp (results to my width is 
196608sp, which you can use as an argument to whatever needs a length)

or

my width is \directlua{  number_to_points(tex.dimen[...]) } where 
number_to_points is something like

number_to_points = function (amount_in_sp)
   in_pt = tostring(amount_in_sp / 65536)
   return in_pt .. pt
end

which gives 3pt.

Patrick



Luigi, Patrick,

thanks for your explanations! The point of my question was: can I feed 
the content of tex.dimen[textwidth] directly back to TeX, and the 
answer to this appears to be no; you need to add some unit to it 
(otherwise, you get an error message). Which was a bit confusing to me 
at first, because the name tex.dimen implies that it holds a real 
dimension, like \newdim does.


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] xml and lua again

2011-10-28 Thread Wolfgang Schuster

Am 28.10.2011 um 08:55 schrieb Thomas A. Schmitz:

 Luigi, Patrick,
 
 thanks for your explanations! The point of my question was: can I feed the 
 content of tex.dimen[textwidth] directly back to TeX, and the answer to 
 this appears to be no; you need to add some unit to it (otherwise, you get 
 an error message). Which was a bit confusing to me at first, because the name 
 tex.dimen implies that it holds a real dimension, like \newdim does.


You can get the same value in TeX when you print the value of a dimension with 
\number:

\starttext

\scratchdimen=3pt

\number\scratchdimen

\ctxlua{context(tex.dimen[scratchdimen])}

\stoptext

Wolfgang

___
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] xml and lua again

2011-10-28 Thread Hans Hagen

Hi Thomas,


thanks for your explanations! The point of my question was: can I feed
the content of tex.dimen[textwidth] directly back to TeX, and the
answer to this appears to be no; you need to add some unit to it
(otherwise, you get an error message). Which was a bit confusing to me
at first, because the name tex.dimen implies that it holds a real
dimension, like \newdim does.


Just switch to philosopher mode for a while and ask yourself what 
implications that would have in the rather fuzzy world of printing.


What is a 'real' dimension? What we call points (pt) is in other 
application also called points but happens to be basepoints in our 
universe (bp). Also, imagine that in good american tradition the 
dimension would have been inches while we all moved on to meters ...


So, Knuth foresaw this (and also wanted predictable calculations and 
wanted to avoid unportable floating points) so he came up with his own 
unit: scaled points. So, a \dimen is just a \count but consider it 
tagged to show you pt for convenience when printed (\the) and the parser 
permits you to enter these numbers as pt/bp/dd/cc/cm/mm etc.


At the lua end all are just integers (with some limited size but that 
might change as Taco and I want to play a bit with adding a couple of 
bytes and see to what extent that will break things).


In metapost the internal unit is bp (because it targets at postscript) 
and there cm, mm etc are just variables that one multiplies with so 
there you can change the universe by just saying in := cm.


Skips are another story (not to speak of boxes as we do have a dimendef 
but not a boxdef of inserts which are yet another class of animals).


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] xml and lua again

2011-10-28 Thread Hans Hagen

On 28-10-2011 10:35, Wolfgang Schuster wrote:


Am 28.10.2011 um 08:55 schrieb Thomas A. Schmitz:


Luigi, Patrick,

thanks for your explanations! The point of my question was: can I feed the content of 
tex.dimen[textwidth] directly back to TeX, and the answer to this appears to be no; 
you need to add some unit to it (otherwise, you get an error message). Which was a bit confusing to me at 
first, because the name tex.dimen implies that it holds a real dimension, like \newdim does.



You can get the same value in TeX when you print the value of a dimension with 
\number:

\starttext

\scratchdimen=3pt

\number\scratchdimen

\ctxlua{context(tex.dimen[scratchdimen])}

\stoptext


which also means that you can say \scratchcounter=\scratchdimen and test 
dimens as if they are numbers ... this is why we can have


\let\ifzeropt\ifcase

which probably no one ever noticed in the source.

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] xml and lua again

2011-10-28 Thread Thomas A. Schmitz

On 10/28/11 10:56, Hans Hagen wrote:

Just switch to philosopher mode for a while and ask yourself what
implications that would have in the rather fuzzy world of printing.

What is a 'real' dimension? What we call points (pt) is in other
application also called points but happens to be basepoints in our
universe (bp). Also, imagine that in good american tradition the
dimension would have been inches while we all moved on to meters ...

So, Knuth foresaw this (and also wanted predictable calculations and
wanted to avoid unportable floating points) so he came up with his own
unit: scaled points. So, a \dimen is just a \count but consider it
tagged to show you pt for convenience when printed (\the) and the parser
permits you to enter these numbers as pt/bp/dd/cc/cm/mm etc.

At the lua end all are just integers (with some limited size but that
might change as Taco and I want to play a bit with adding a couple of
bytes and see to what extent that will break things).

In metapost the internal unit is bp (because it targets at postscript)
and there cm, mm etc are just variables that one multiplies with so
there you can change the universe by just saying in := cm.

Skips are another story (not to speak of boxes as we do have a dimendef
but not a boxdef of inserts which are yet another class of animals).


Thanks for this philosophical explanation - I guess I'll have to reread 
these passages in the TeX book. I'm looking forward to your experiments :-)


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] xml and lua again

2011-10-28 Thread luigi scarso
On Fri, Oct 28, 2011 at 10:56 AM, Hans Hagen pra...@wxs.nl wrote:
 Hi Thomas,

 thanks for your explanations! The point of my question was: can I feed
 the content of tex.dimen[textwidth] directly back to TeX, and the
 answer to this appears to be no; you need to add some unit to it
 (otherwise, you get an error message). Which was a bit confusing to me
 at first, because the name tex.dimen implies that it holds a real
 dimension, like \newdim does.

 Just switch to philosopher mode for a while and ask yourself what
 implications that would have in the rather fuzzy world of printing.

 What is a 'real' dimension? What we call points (pt) is in other application
 also called points but happens to be basepoints in our universe (bp). Also,
 imagine that in good american tradition the dimension would have been inches
 while we all moved on to meters ...

 So, Knuth foresaw this (and also wanted predictable calculations and wanted
 to avoid unportable floating points) so he came up with his own unit: scaled
 points.
just to see the floating point in action:
\starttext
\startluacode
context(collectgarbage('count'), KB are ,collectgarbage('count')*1024, byte)
\stopluacode
\stoptext


collectgarbage('count')  returns the total memory in use by Lua (in Kbytes).


 At the lua end all are just integers (with some limited size but that might
 change as Taco and I want to play a bit with adding a couple of bytes and
 see to what extent that will break things).
hm, I'm bit loss here.
In CWEB I see
define max_dimen0x3FFF
so I suppose that it's a kind of int
But the type of tex.dimen is number as is the type of math.sqrt(2) as
we can see in
context(type(tex.dimen['textwidth']))
context(type(math.sqrt(2)))

i.e it's a Lua number -- a floating point.
So a kind of conversion can happen between a  floating point and a sp
number (which has a limited range)
Of course Lua has its routines, but probably they differs from TeX
If I recall correctly, both use 32 bits, but if you extend to lets say
48 bit then the TeX routines are not good anymore.

Well, I'm not sure it's right, of course.



-- 
luigi
___
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] xml and lua again

2011-10-28 Thread Hans Hagen



i.e it's a Lua number -- a floating point.
So a kind of conversion can happen between a  floating point and a sp
number (which has a limited range)
Of course Lua has its routines, but probably they differs from TeX
If I recall correctly, both use 32 bits, but if you extend to lets say
48 bit then the TeX routines are not good anymore.

Well, I'm not sure it's right, of course.


The lua numbers have enough precision to cast on the tex numbers (with 
rounding) but in practice I don't care too much. As we have standardized 
floats the behaviour is predictable. We could probably go completely 
float at the tex end but too many datastructures expect an integer so 
it's not worth the trouble.


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] xml and lua again

2011-10-27 Thread Thomas A. Schmitz

On 10/25/2011 12:27 PM, Thomas A. Schmitz wrote:

Wolfgang, Hans,

thanks a lot, this works now. Will now try and move the code to a
ctxluafile and see if I can make it work again. If not, I'll be back; no
good deed goes unpunished...

Thomas


OK, I'm slowly making progress processing xml in lua. One naive question 
now: how can I have access to and manipulate the textwidth dimension? In 
other words, given


0.4\textwidth

what would be the equivalent in lua code? I tried

0.4 * tex.dimen.textwidth

or

0.4 * tex.dimen[textwidth]

but couldn't make that work. Also tried grepping the 
tex/context/base/*.lua files for width, but couldn't find anything 
immediately obvious.


Thanks!

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] xml and lua again

2011-10-27 Thread Wolfgang Schuster

Am 27.10.2011 um 11:23 schrieb Thomas A. Schmitz:

 On 10/25/2011 12:27 PM, Thomas A. Schmitz wrote:
 Wolfgang, Hans,
 
 thanks a lot, this works now. Will now try and move the code to a
 ctxluafile and see if I can make it work again. If not, I'll be back; no
 good deed goes unpunished...
 
 Thomas
 
 OK, I'm slowly making progress processing xml in lua. One naive question now: 
 how can I have access to and manipulate the textwidth dimension? In other 
 words, given
 
 0.4\textwidth
 
 what would be the equivalent in lua code? I tried
 
 0.4 * tex.dimen.textwidth
 
 or
 
 0.4 * tex.dimen[textwidth]
 
 but couldn't make that work. Also tried grepping the tex/context/base/*.lua 
 files for width, but couldn't find anything immediately obvious.


With “tex.dimen[…]” you get the value in scaled points but util-dim.lua 
provides some functions to convert the value in points, centimeter etc.

\starttext
\startluacode
context.blackrule{ width = number.topoints(tex.dimen[textwidth]/2) }
\stopluacode
\stoptext

Wolfgang

___
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] xml and lua again

2011-10-27 Thread Thomas A. Schmitz

On 10/27/2011 11:53 AM, Wolfgang Schuster wrote:

With “tex.dimen[…]” you get the value in scaled points but util-dim.lua 
provides some functions to convert the value in points, centimeter etc.

\starttext
\startluacode
context.blackrule{ width = number.topoints(tex.dimen[textwidth]/2) }
\stopluacode
\stoptext


Thank you Wolfgang, that's exactly what I was looking for!

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] xml and lua again

2011-10-27 Thread Hans Hagen

On 27-10-2011 12:32, Thomas A. Schmitz wrote:

On 10/27/2011 11:53 AM, Wolfgang Schuster wrote:

With “tex.dimen[…]” you get the value in scaled points but
util-dim.lua provides some functions to convert the value in points,
centimeter etc.

\starttext
\startluacode
context.blackrule{ width = number.topoints(tex.dimen[textwidth]/2) }
\stopluacode
\stoptext


Thank you Wolfgang, that's exactly what I was looking for!


or just tex.dimen[textwidth]/2 .. sp


-
  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] xml and lua again

2011-10-25 Thread Thomas A. Schmitz

On 10/24/11 8:48 PM, Hans Hagen wrote:

sure, oryou can play with

if xml.filter(t,.[@frame=on]) then

the x-*.lua show some tricks



OK, I'm in my stubborn mode then: why doesn't this work:

\startbuffer[test]
a
  nattable frame=on
tr
  td1/td
  td2/td
  td3/td
  td4/td
/tr
tr
  td5/td
  td6/td
  td7/td
  td8/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
  if xml.attribute(t, /, frame, off) == on then
  context(Yes, the frame is really on!)
  else
  context(Nope, sorry, it's still off.)
  end
  context(true)
  context.placefigure( { here }, none , function()
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

I get a lua error here.

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] xml and lua again

2011-10-25 Thread Wolfgang Schuster

Am 25.10.2011 um 11:43 schrieb Thomas A. Schmitz:

 On 10/24/11 8:48 PM, Hans Hagen wrote:
 sure, oryou can play with
 
 if xml.filter(t,.[@frame=on]) then
 
 the x-*.lua show some tricks
 
 
 OK, I'm in my stubborn mode then: why doesn't this work:
 
 […]
 
 \startxmlsetups xml:nattable
\startluacode
  if xml.attribute(t, /, frame, off) == on then
  context(Yes, the frame is really on!)
  else
  context(Nope, sorry, it's still off.)
  end

 if xml.attribute(lxml.id(#1), /, frame, off) == on then %
   context(Yes, the frame is really on!)
 else %
   context(Nope, sorry, it's still off.)
 end %

Wolfgang
___
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] xml and lua again

2011-10-25 Thread Hans Hagen

On 25-10-2011 11:43, Thomas A. Schmitz wrote:


\startxmlsetups xml:nattable
\startluacode
if xml.attribute(t, /, frame, off) == on then
context(Yes, the frame is really on!)
else
context(Nope, sorry, it's still off.)
end
context(true)
context.placefigure( { here }, none , function()
context.bTABLE()
context.xmlflush(#1)
context.eTABLE()
end)
\stopluacode
\stopxmlsetups


see Wolfgangs answer

anyway, best move the lua code and wrap it in a function 
document.MyWhatever ... now its get defined each time


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] xml and lua again

2011-10-25 Thread Thomas A. Schmitz

On 10/25/11 12:17 PM, Hans Hagen wrote:


see Wolfgangs answer

anyway, best move the lua code and wrap it in a function
document.MyWhatever ... now its get defined each time

Hans


Wolfgang, Hans,

thanks a lot, this works now. Will now try and move the code to a 
ctxluafile and see if I can make it work again. If not, I'll be back; no 
good deed goes unpunished...


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] xml and lua again

2011-10-24 Thread Hans Hagen

On 22-10-2011 18:46, Thomas A. Schmitz wrote:

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
td1/td
td2/td
td3/td
td4/td
/tr
tr
td5/td
td6/td
td7/td
td8/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 } )
but that doesn't work. Any suggestions?


why so complex

\startbuffer[test]
a
  nattable frame=on
tr
  td1/td
  td2/td
  td3/td
  td4/td
/tr
tr
  td5/td
  td6/td
  td7/td
  td8/td
/tr
  /nattable
  nattable frame=off
tr
  td1/td
  td2/td
  td3/td
  td4/td
/tr
tr
  td5/td
  td6/td
  td7/td
  td8/td
/tr
  /nattable
  nattable frame=no
tr
  td1/td
  td2/td
  td3/td
  td4/td
/tr
tr
  td5/td
  td6/td
  td7/td
  td8/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

\xmlmapvalue {nattable:frame} {on}  {on}
\xmlmapvalue {nattable:frame} {yes} {on}
\xmlmapvalue {nattable:frame} {off} {off}
\xmlmapvalue {nattable:frame} {no}  {off}

\startxmlsetups xml:nattable
\placefigure
[here,none]
{}
{

\setupTABLE[frame=\xmlval{nattable:frame}{\xmlatt{#1}{frame}}{on}]
\bTABLE
\xmlflush{#1}
\eTABLE
}
\stopxmlsetups

\startxmlsetups xml:tr
\bTR
\xmlflush{#1}
\eTR
\stopxmlsetups

\startxmlsetups xml:td
\bTD
\xmlflush{#1}
\eTD
\stopxmlsetups

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

In x-cals.lua / mkiv you can see an example of pure lua solution. It 
boils down to applying a function the the whole table element.


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] xml and lua again

2011-10-24 Thread Thomas A. Schmitz

On 10/24/2011 12:17 PM, Hans Hagen wrote:

why so complex


Hi Hans,

yes, I'm aware that this procedure is quite silly for this example, this 
was just for myself, for educational purposes. As soon as the setup 
becomes more complex, I thought it might be easier to collect and 
process the options in lua than in tex (as I have done before), but I'm 
running against a wall here (see my exchange with Peter about goat milk 
yesterday). So the real question is: how can I collect data such as an 
attribute value to process it with lua, say in the form


   if lxml.att(t, frame) == on then
  context(Yes, the frame is really on!)
   else
  context(Nope, sorry, it's still off.)
   end

I don't really understand what kind of object a call such as lxml.att(t, 
frame) produces.


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] xml and lua again

2011-10-24 Thread Hans Hagen

On 24-10-2011 14:18, Thomas A. Schmitz wrote:

On 10/24/2011 12:17 PM, Hans Hagen wrote:

why so complex


Hi Hans,

yes, I'm aware that this procedure is quite silly for this example, this
was just for myself, for educational purposes. As soon as the setup
becomes more complex, I thought it might be easier to collect and
process the options in lua than in tex (as I have done before), but I'm
running against a wall here (see my exchange with Peter about goat milk
yesterday). So the real question is: how can I collect data such as an
attribute value to process it with lua, say in the form

if lxml.att(t, frame) == on then
context(Yes, the frame is really on!)
else
context(Nope, sorry, it's still off.)
end

I don't really understand what kind of object a call such as lxml.att(t,
frame) produces.


all lxml.* calls print something to tex, so when you're at the lua end 
and want to stay there you should use the xml.* methods; also, when you 
have an element, say e then there is an e.at table that has all 
attributes



-
  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] xml and lua again

2011-10-24 Thread Thomas A. Schmitz

On 10/24/2011 02:26 PM, Hans Hagen wrote:

if lxml.att(t, frame) == on then
context(Yes, the frame is really on!)
else
context(Nope, sorry, it's still off.)
end

I don't really understand what kind of object a call such as lxml.att(t,
frame) produces.


all lxml.* calls print something to tex, so when you're at the lua end
and want to stay there you should use the xml.* methods; also, when you
have an element, say e then there is an e.at table that has all attributes


OK, excuse me for being particularly thick today: there doesn't seem to 
be xml.att, only xml.attribute, so it should be something like:


function tableinit(t)
   if xml.attribute(t, /, frame, off) == on then
  context(Yes, the framestate is really on!)
   else
  context(Nope, sorry, it's still off.)
   end
end

(if I understand the definition of xml.attribute correctly: 
id,pattern,a,default)?


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] xml and lua again

2011-10-24 Thread Hans Hagen

On 24-10-2011 19:00, Thomas A. Schmitz wrote:

On 10/24/2011 02:26 PM, Hans Hagen wrote:

if lxml.att(t, frame) == on then
context(Yes, the frame is really on!)
else
context(Nope, sorry, it's still off.)
end

I don't really understand what kind of object a call such as lxml.att(t,
frame) produces.


all lxml.* calls print something to tex, so when you're at the lua end
and want to stay there you should use the xml.* methods; also, when you
have an element, say e then there is an e.at table that has all
attributes


OK, excuse me for being particularly thick today: there doesn't seem to
be xml.att, only xml.attribute, so it should be something like:

function tableinit(t)
if xml.attribute(t, /, frame, off) == on then
context(Yes, the framestate is really on!)
else
context(Nope, sorry, it's still off.)
end
end

(if I understand the definition of xml.attribute correctly:
id,pattern,a,default)?


sure, oryou can play with

if xml.filter(t,.[@frame=on]) then

the x-*.lua show some tricks


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] xml and lua again

2011-10-23 Thread Peter Rolf
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
   td1/td
   td2/td
   td3/td
   td4/td
 /tr
 tr
   td5/td
   td6/td
   td7/td
   td8/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
___


Re: [NTG-context] xml and lua again

2011-10-23 Thread Thomas A. Schmitz

Hi Peter,

thanks for your reply, and I'll keep the bit about goat milk in mind :-).



frame= .. tostring(framestate)


It has the advantage of making the example compile. It has the drawback 
of not doing anything :-)



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.


OK, that sounds like very good advice - I'll see if I can manage to 
apply this for xml style sheets.


Thanks a lot, and best wishes

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] xml and lua again

2011-10-23 Thread Peter Rolf
Am 23.10.2011 16:37, schrieb Thomas A. Schmitz:
 Hi Peter,
 
 thanks for your reply, and I'll keep the bit about goat milk in mind :-).
 
 
 frame= .. tostring(framestate)
 
 It has the advantage of making the example compile. It has the drawback
 of not doing anything :-)

(sadly) true :-)

I will look into it. Looks like I need a big glass of goat milk before
(can't wait for the moon)...

 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.
 
 OK, that sounds like very good advice - I'll see if I can manage to
 apply this for xml style sheets.
 
 Thanks a lot, and best wishes
 
 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] xml and lua again

2011-10-23 Thread Peter Rolf
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
   td1/td
   td2/td
   td3/td
   td4/td
 /tr
 tr
   td5/td
   td6/td
   td7/td
   td8/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(type(framestate))

Here is the problem. The function lxml.att() only prints the attribute,
but returns nothing (framestate = nil). I looked into an old example of
mine where I played with attributes, but it's totally outdated (uses
xml.filters, now mkii only).

Sorry, no solution (goat milk was out).

Peter


[lxml-tex.lua]

function lxml.attribute(id,pattern,a,default)
local collected = xmlapplylpath(getid(id),pattern)
if collected then
attribute(collected,a,default)
end
end

local function attribute(collected,a,default)
if collected and #collected  0 then
local at = collected[1].at
local str = (at and at[a]) or default
if str and str ~=  then
contextsprint(notcatcodes,str)
end
elseif default then
contextsprint(notcatcodes,default)
end
end


   context(framestate)

does nothing


   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 } )
 but that doesn't work. Any suggestions?
 
 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
 ___
 
 

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


[NTG-context] xml and lua again

2011-10-22 Thread 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
  td1/td
  td2/td
  td3/td
  td4/td
/tr
tr
  td5/td
  td6/td
  td7/td
  td8/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 } )
but that doesn't work. Any suggestions?

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
___