From: "Stéphane Goujet" <stephane.goujet@wanadoo.fr>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: Attributes
Date: Tue, 22 Apr 2014 20:10:49 +0200 (CEST) [thread overview]
Message-ID: <alpine.LNX.2.00.1404221954040.8109@zbox.seix> (raw)
In-Reply-To: <53565AFF.4070304@wxs.nl>
[-- Attachment #1: Type: TEXT/PLAIN, Size: 4516 bytes --]
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.
[-- Attachment #2: Type: text/plain, Size: 485 bytes --]
___________________________________________________________________________________
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
___________________________________________________________________________________
next prev parent reply other threads:[~2014-04-22 18:10 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-20 13:14 Attributes Stéphane Goujet
2014-04-22 12:05 ` Attributes Hans Hagen
2014-04-22 18:10 ` Stéphane Goujet [this message]
2014-04-23 9:00 ` Attributes Hans Hagen
2014-04-23 13:07 ` Attributes Stéphane Goujet
2014-04-23 17:08 ` Attributes Hans Hagen
2014-04-23 23:39 ` Attributes Stéphane Goujet
2014-04-24 8:00 ` Attributes Hans Hagen
2014-04-24 11:58 ` Attributes Stéphane Goujet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.LNX.2.00.1404221954040.8109@zbox.seix \
--to=stephane.goujet@wanadoo.fr \
--cc=ntg-context@ntg.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).