diff options
Diffstat (limited to 'tex/context/base/node-nut.lua')
-rw-r--r-- | tex/context/base/node-nut.lua | 56 |
1 files changed, 54 insertions, 2 deletions
diff --git a/tex/context/base/node-nut.lua b/tex/context/base/node-nut.lua index 4732b09eb..2b4e9968c 100644 --- a/tex/context/base/node-nut.lua +++ b/tex/context/base/node-nut.lua @@ -129,7 +129,7 @@ nuts.getfield = direct.getfield nuts.getnext = direct.getnext nuts.getprev = direct.getprev nuts.getid = direct.getid -nuts.getattr = direct.getfield +nuts.getattr = direct.has_attribute or direct.getfield nuts.getchar = direct.getchar nuts.getfont = direct.getfont nuts.getsubtype = direct.getsubtype @@ -141,7 +141,7 @@ nuts.getleader = direct.getleader -- setters nuts.setfield = direct.setfield -nuts.setattr = direct.setfield +nuts.setattr = direct.set_attribute or setfield nuts.getbox = direct.getbox nuts.setbox = direct.setbox @@ -648,3 +648,55 @@ nuts.untracedslide = untracedslide nuts.nestedtracedslide = nestedtracedslide -- nuts.slide = tracedslide + +-- this might move + +local propertydata = direct.get_properties_table and direct.get_properties_table() + +local getattr = nuts.getattr +local setattr = nuts.setattr + +if propertydata then + + nodes.properties = { + data = propertydata, + } + + direct.set_properties_mode(true,false) + -- direct.set_properties_mode(true,true) + + -- experimental code with respect to copying attributes has been removed + -- as it doesn't pay of (most attributes are only accessed once anyway) + + nuts.getprop = function(n,k) + local p = propertydata[n] + if p then + return p[k] + end + end + + nuts.setprop = function(n,k,v) + if v then + local p = propertydata[n] + if p then + p[k] = v + else + propertydata[n] = { [k] = v } + end + end + end + + nodes.setprop = nodes.setproperty + nodes.getprop = nodes.getproperty + +else + + -- for testing and simple cases + + nuts.getprop = getattr + nuts.setprop = setattr + + nodes.setprop = getattr + nodes.getprop = setattr + +end |