diff options
Diffstat (limited to 'macros/luatex/generic/luatexja/src/luatexja.lua')
-rw-r--r-- | macros/luatex/generic/luatexja/src/luatexja.lua | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/macros/luatex/generic/luatexja/src/luatexja.lua b/macros/luatex/generic/luatexja/src/luatexja.lua index 878f791181..f375d727df 100644 --- a/macros/luatex/generic/luatexja/src/luatexja.lua +++ b/macros/luatex/generic/luatexja/src/luatexja.lua @@ -12,6 +12,34 @@ luatexja.load_lua = load_lua function luatexja.load_module(name) require('ltj-' .. name.. '.lua') end do + local dnode = node.direct + local getfield, traverse = dnode.getfield, dnode.traverse + local node_new, set_attr, get_attr = dnode.new, dnode.set_attribute, dnode.get_attribute + local set_attrlist, get_attrlist = dnode.setattributelist, dnode.getattributelist + local unset_attr = dnode.unset_attribute + local attr_icflag = luatexbase.attributes['ltj@icflag'] + local function node_inherit_attr(n, b, a) + if b or a then + local attrlist = get_attrlist(b or a) + local nic = get_attr(n, attr_icflag) + set_attrlist(n, attrlist); set_attr(n, attr_icflag, nic) + if b and a then + for na in traverse(attrlist) do + local id = getfield(na, 'number') + if id and id~=attr_icflag and getfield(na, 'value')~=get_attr(a, id) then + unset_attr(n, id) + end + end + end + end + return n + end + luatexja.node_inherit_attr = node_inherit_attr + luatexja.dnode_new = function (id, subtype, b, a) + return node_inherit_attr(node_new(id, subtype), b, a) + end +end +do local setfield = node.direct.setfield luatexja.setglue = node.direct.setglue or function(g,w,st,sh,sto,sho) |