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