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.xxxxx("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=-"7FFFFFFF
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 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
___________________________________________________________________________________