ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
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
___________________________________________________________________________________

  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).