Re: [NTG-context] Attributes

2014-04-24 Thread Hans Hagen

On 4/24/2014 1:39 AM, Stéphane Goujet wrote:

On Wed, 23 Apr 2014, Hans Hagen wrote:

On 4/23/2014 3:07 PM, Stéphane Goujet wrote:

There is still the problem that node.has_attribute does not return
 nil when I expect it should, but that is luatex problem (a check that
 a parameter is really an integer should be performed before calling
 lua_tointeger), so I will change mailing-list in order to report it.

that interface is unlikely to change (e.g. because of performance
reasons)


   Er... well, the other parameter is already checked, with a
check_isnode() which is heavier than a lua_isnumber() or lua_isnil(). It
is possible that the former one is not inlined when the other ones are
(I did not verify either of these hypotheses).

   Anyway, if you do not want to make this change in the code, you
should change the specification, because now, Luatex reference manual
says It returns the value, or, if no match is found, nil, whereas when
we supply an attribute number which is nil or not a number (therefore it
cannot ever match), it returns a non-nil value (which, moreover, means
true).
   Something like adding If id is nil or if id is not an integer, the
result is unspecified, perhaps.


I've added a tracker item and will look at it later (no more changed at 
this moment to the code as we're closing in on release i.e. texlive code 
freeze).


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] Attributes

2014-04-24 Thread Stéphane Goujet

On Thu, 24 Apr 2014, Hans Hagen wrote:

I've added a tracker item and will look at it later (no more changed at this 
moment to the code as we're closing in on release i.e. texlive code freeze).


  All right.


Goodbye,
  Stéphane.
___
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] Attributes

2014-04-23 Thread Hans Hagen

On 4/22/2014 8:10 PM, Stéphane Goujet wrote:

On Tue, 22 Apr 2014, Hans Hagen wrote:


On 4/20/2014 3:14 PM, Stéphane Goujet wrote:

I would like to know what is the recommended way to use
attributes in
 Context.
 What is the Context way to declare and set attributes? Is it something
 like this?
 \defineattribute[myattr]
 \dosetattribute{myattr}{1}

And how do I then access them from Lua? Should it look like
 has_attribute(mynode, attributes.myattr)
or
 has_attribute(mynode, attributes.x(myattr))
or something else?


attributes.names[...]
attributes.numbers[...]


   Please have a look at my example (it is a bit long because it shows
various possibilities) and its result.
When I have not yet done a \defineattribute[myattr], node.has_attribute
returns 0 when I thought it should return nil.
   When I do \defineattribute[...], every attribute seems to get the
same number (1024), but now node.has_attribute returns nil ...


change this is syst-ini.mkiv:

\normalprotected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register}



=
Example
=
\starttext

\startluacode
 mycallback=function(head)
 if attributes.names==nil then
 print No attribute names at all
 end
 if attributes.numbers==nil then
 print No attribute numbers at all
 end
 for mynode in node.traverse_id(node.id(glyph), head) do
 if string.match(0ABCDEabcdefg,
unicode.utf8.char(mynode.char)) then
 print (Glyph = ..unicode.utf8.char(mynode.char))
 if attributes.numbers[myattr]==nil then
 print No attribute number for myattr
 else
 print (myattr : number =
..(attributes.numbers[myattr]))
 end
 if attributes.numbers[myattrb]==nil then
 print No attribute number for myattrb
 else
 print (myattrb : number =
..(attributes.numbers[myattrb]))
 end
 if node.has_attribute(mynode,
attributes.numbers[myattr]) then
 print (Attribute myattr =
..(node.has_attribute(mynode, attributes.numbers[myattr])))
 else
 print No attribute myattr
 end
 if node.has_attribute(mynode,
attributes.numbers[myattrb]) then
 print (Attribute myattrb =
..(node.has_attribute(mynode, attributes.numbers[myattrb])))
 else
 print No attribute myattrb
 end
 if node.has_attribute(mynode, 111) then
 print (Attribute 111 =
..(node.has_attribute(mynode, 111)))
 else
 print No attribute 111
 end
 end
 end
 return head
 end

 nodes.tasks.appendaction(processors, before, mycallback)
\stopluacode

0

\attribute111=-1
A

\attribute111=200
B

\attribute111=202
C

\attribute111=-1
D

\attribute111=-7FFF
E

\defineattribute[myattr]
\defineattribute[myattrb]
a

\doresetattribute{myattr}
b

\dosetattribute{myattr}{500}
c

\dosetattribute{myattr}{502}
d

\doresetattribute{myattr}
e


\stoptext
==


==
Result :
==
Glyph = 0
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
No attribute 111
Glyph = A
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = -1
Glyph = B
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = 200
Glyph = C
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = 202
Glyph = D
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = -1
Glyph = E
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
No attribute 111
Glyph = a
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = b
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = c
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = d
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = e
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
==

Goodbye,
   Stéphane.


___
If your question is of interest to others as 

Re: [NTG-context] Attributes

2014-04-23 Thread Stéphane Goujet



On Wed, 23 Apr 2014, Hans Hagen wrote:


On 4/22/2014 8:10 PM, Stéphane Goujet wrote:

Please have a look at my example (it is a bit long because it shows
 various possibilities) and its result.
 When I have not yet done a \defineattribute[myattr],
 node.has_attribute
 returns 0 when I thought it should return nil.
When I do \defineattribute[...], every attribute seems to get the
 same number (1024), but now node.has_attribute returns nil ...


change this is syst-ini.mkiv:

\normalprotected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register}


  Thank you, it seems to work much better !

  There is still the problem that node.has_attribute does not return 
nil when I expect it should, but that is luatex problem (a check 
that a parameter is really an integer should be performed before calling 
lua_tointeger), so I will change mailing-list in order to report it.



Faithfully yours,
  Stéphane Goujet.___
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] Attributes

2014-04-23 Thread Hans Hagen

On 4/23/2014 3:07 PM, Stéphane Goujet wrote:



On Wed, 23 Apr 2014, Hans Hagen wrote:


On 4/22/2014 8:10 PM, Stéphane Goujet wrote:

Please have a look at my example (it is a bit long because it shows
 various possibilities) and its result.
 When I have not yet done a \defineattribute[myattr],
 node.has_attribute
 returns 0 when I thought it should return nil.
When I do \defineattribute[...], every attribute seems to get the
 same number (1024), but now node.has_attribute returns nil ...


change this is syst-ini.mkiv:

\normalprotected\def\newattribute{\syst_basics_allocate\c_syst_last_allocated_attribute\attribute\attributedef\c_syst_max_allocated_register}



   Thank you, it seems to work much better !

   There is still the problem that node.has_attribute does not return
nil when I expect it should, but that is luatex problem (a check that
a parameter is really an integer should be performed before calling
lua_tointeger), so I will change mailing-list in order to report it.


that interface is unlikely to change (e.g. because of performance 
reasons) ... you'd better check at your end


btw, you can try: mynode[123] which is more efficient

-
  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] Attributes

2014-04-23 Thread Stéphane Goujet

On Wed, 23 Apr 2014, Hans Hagen wrote:

On 4/23/2014 3:07 PM, Stéphane Goujet wrote:

There is still the problem that node.has_attribute does not return
 nil when I expect it should, but that is luatex problem (a check that
 a parameter is really an integer should be performed before calling
 lua_tointeger), so I will change mailing-list in order to report it.

that interface is unlikely to change (e.g. because of performance reasons)


  Er... well, the other parameter is already checked, with a 
check_isnode() which is heavier than a lua_isnumber() or lua_isnil(). It 
is possible that the former one is not inlined when the other ones are (I 
did not verify either of these hypotheses).


  Anyway, if you do not want to make this change in the code, you should 
change the specification, because now, Luatex reference manual says It 
returns the value, or, if no match is found, nil, whereas when we supply 
an attribute number which is nil or not a number (therefore it cannot ever 
match), it returns a non-nil value (which, moreover, means true).
  Something like adding If id is nil or if id is not an integer, the 
result is unspecified, perhaps.



Goodbye,
  Stéphane.
___
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] Attributes

2014-04-22 Thread Hans Hagen

On 4/20/2014 3:14 PM, Stéphane Goujet wrote:

Hello,

   I would like to know what is the recommended way to use attributes in
Context.

   I manage to use use them with numbers, i.e. :
in Context : \attribute123=1
in Lua : has_attribute(my_node, 123)

   But I would like to make that cleaner and use named attributes.
What is the Context way to declare and set attributes? Is it something
like this?
\defineattribute[myattr]
\dosetattribute{myattr}{1}

   And how do I then access them from Lua? Should it look like
has_attribute(mynode, attributes.myattr)
   or
has_attribute(mynode, attributes.x(myattr))
   or something else?


attributes.names[...]
attributes.numbers[...]

-
  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] Attributes

2014-04-22 Thread Stéphane Goujet

On Tue, 22 Apr 2014, Hans Hagen wrote:


On 4/20/2014 3:14 PM, Stéphane Goujet wrote:

I would like to know what is the recommended way to use attributes in
 Context.
 What is the Context way to declare and set attributes? Is it something
 like this?
 \defineattribute[myattr]
 \dosetattribute{myattr}{1}

And how do I then access them from Lua? Should it look like
 has_attribute(mynode, attributes.myattr)
or
 has_attribute(mynode, attributes.x(myattr))
or something else?


attributes.names[...]
attributes.numbers[...]


  Please have a look at my example (it is a bit long because it shows 
various possibilities) and its result.

   When I have not yet done a \defineattribute[myattr], node.has_attribute
returns 0 when I thought it should return nil.
  When I do \defineattribute[...], every attribute seems to get the same 
number (1024), but now node.has_attribute returns nil ...


=
Example
=
\starttext

\startluacode
mycallback=function(head)
if attributes.names==nil then
print No attribute names at all
end
if attributes.numbers==nil then
print No attribute numbers at all
end
for mynode in node.traverse_id(node.id(glyph), head) do
			if string.match(0ABCDEabcdefg, 
unicode.utf8.char(mynode.char)) then
print (Glyph = 
..unicode.utf8.char(mynode.char))

if attributes.numbers[myattr]==nil then
	print No attribute number for 
myattr

else
	print (myattr : number = 
..(attributes.numbers[myattr]))

end
if attributes.numbers[myattrb]==nil then
	print No attribute number for 
myattrb

else
	print (myattrb : number = 
..(attributes.numbers[myattrb]))

end
if node.has_attribute(mynode, 
attributes.numbers[myattr]) then
	print (Attribute myattr = 
..(node.has_attribute(mynode, attributes.numbers[myattr])))

else
print No attribute myattr
end
if node.has_attribute(mynode, 
attributes.numbers[myattrb]) then
	print (Attribute myattrb = 
..(node.has_attribute(mynode, attributes.numbers[myattrb])))

else
print No attribute myattrb
end
if node.has_attribute(mynode, 111) then
	print (Attribute 111 = 
..(node.has_attribute(mynode, 111)))

else
print No attribute 111
end
end
end
return head
end

nodes.tasks.appendaction(processors, before, mycallback)
\stopluacode

0

\attribute111=-1
A

\attribute111=200
B

\attribute111=202
C

\attribute111=-1
D

\attribute111=-7FFF
E

\defineattribute[myattr]
\defineattribute[myattrb]
a

\doresetattribute{myattr}
b

\dosetattribute{myattr}{500}
c

\dosetattribute{myattr}{502}
d

\doresetattribute{myattr}
e


\stoptext
==


==
Result :
==
Glyph = 0
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
No attribute 111
Glyph = A
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = -1
Glyph = B
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = 200
Glyph = C
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = 202
Glyph = D
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
Attribute 111 = -1
Glyph = E
No attribute number for myattr
No attribute number for myattrb
Attribute myattr = 0
Attribute myattrb = 0
No attribute 111
Glyph = a
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = b
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = c
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = d
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
Glyph = e
myattr : number = 1024
myattrb : number = 1024
No attribute myattr
No attribute myattrb
No attribute 111
==

Goodbye,
  Stéphane.___
If your question is of interest to others as well, please add an entry