From 330909ad62342ff873dc758b909968c66d0252a4 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sun, 16 May 2021 11:46:45 +0200 Subject: 2021-05-15 22:44:00 --- tex/context/base/mkiv/node-aux.lua | 90 ++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 42 deletions(-) (limited to 'tex/context/base/mkiv/node-aux.lua') diff --git a/tex/context/base/mkiv/node-aux.lua b/tex/context/base/mkiv/node-aux.lua index d3c537a3b..5a98b2ea3 100644 --- a/tex/context/base/mkiv/node-aux.lua +++ b/tex/context/base/mkiv/node-aux.lua @@ -53,11 +53,11 @@ local traversers = nuts.traversers local nextnode = traversers.node local nextglyph = traversers.glyph -local flush_node = nuts.flush -local flush_list = nuts.flush_list +local flushnode = nuts.flush +local flushlist = nuts.flushlist local hpack_nodes = nuts.hpack -local unset_attribute = nuts.unset_attribute -local first_glyph = nuts.first_glyph +local unsetattribute = nuts.unsetattribute +local firstglyph = nuts.firstglyph local copy_node = nuts.copy local find_tail = nuts.tail local getbox = nuts.getbox @@ -85,7 +85,7 @@ local report_error = logs.reporter("node-aux:error") -- function tex.takebox(id) -- local box = tex.getbox(id) -- if box then --- local copy = node.copy(box) +-- local copy = nodes.copy(box) -- local list = box.list -- copy.list = list -- box.list = nil @@ -129,7 +129,7 @@ end function nuts.takelist(n) local l = getlist(n) setlist(n) - flush_node(n) + flushnode(n) return l end @@ -142,7 +142,7 @@ local function repackhlist(list,...) local temp, b = hpack_nodes(list,...) list = getlist(temp) setlist(temp) - flush_node(temp) + flushnode(temp) return list, b end @@ -153,50 +153,59 @@ function nodes.repackhlist(list,...) return tonode(list), b end -local function set_attributes(head,attr,value) - for n, id in nextnode, head do - setattr(n,attr,value) - if id == hlist_node or id == vlist_node then - set_attributes(getlist(n),attr,value) - end - end -end +if not nuts.setattributes then -local function set_unset_attributes(head,attr,value) - for n, id in nextnode, head do - if not getattr(n,attr) then + local function setattributes(head,attr,value) + for n, id in nextnode, head do setattr(n,attr,value) - end - if id == hlist_code or id == vlist_code then - set_unset_attributes(getlist(n),attr,value) + if id == hlist_node or id == vlist_node then + setattributes(getlist(n),attr,value) + end end end + + nuts .setattributes = setattributes + nodes.setattributes = vianuts(setattributes) + end -local function unset_attributes(head,attr) - for n, id in nextnode, head do - setattr(n,attr,unsetvalue) - if id == hlist_code or id == vlist_code then - unset_attributes(getlist(n),attr) +if not nuts.setunsetattributes then + + local function setunsetattributes(head,attr,value) + for n, id in nextnode, head do + if not getattr(n,attr) then + setattr(n,attr,value) + end + if id == hlist_code or id == vlist_code then + setunsetattributes(getlist(n),attr,value) + end end end + + nuts .setunsetattributes = setunsetattributes + nodes.setunsetattributes = vianuts(setunsetattributes) + end --- for old times sake +if not nuts.unsetattributes then -nuts.setattribute = nuts.setattr nodes.setattribute = nodes.setattr -nuts.getattribute = nuts.getattr nodes.getattribute = nodes.getattr -nuts.unsetattribute = nuts.unset_attribute nodes.unsetattribute = nodes.unset_attribute -nuts.has_attribute = nuts.has_attribute nodes.has_attribute = nodes.has_attribute -nuts.firstglyph = nuts.first_glyph nodes.firstglyph = nodes.first_glyph + local function unsetattributes(head,attr) + for n, id in nextnode, head do + setattr(n,attr,unsetvalue) + if id == hlist_code or id == vlist_code then + unsetattributes(getlist(n),attr) + end + end + end + + nuts .unsetattributes = unsetattributes + nodes.unsetattributes = vianuts(unsetattributes) -nuts.setattributes = set_attributes nodes.setattributes = vianuts(set_attributes) -nuts.setunsetattributes = set_unset_attributes nodes.setunsetattributes = vianuts(set_unset_attributes) -nuts.unsetattributes = unset_attributes nodes.unsetattributes = vianuts(unset_attributes) +end function nuts.firstcharacter(n,untagged) -- tagged == subtype > 255 if untagged then - return first_glyph(n) + return firstglyph(n) else for g in nextglyph ,n do return g @@ -370,7 +379,7 @@ local function rehpack(n,width) local set, order, sign = getboxglue(temp) setboxglue(n,set,order,sign) setlist(temp) - flush_node(temp) + flushnode(temp) return n end @@ -406,7 +415,7 @@ do local getsubtype = nodes.getsubtype - function nodes.start_of_par(n) + function nodes.startofpar(n) local s = getsubtype(n) return s == hmodepar_code or s == vmodepar_code end @@ -423,8 +432,6 @@ if not nuts.getnormalizedline then local getlist = nuts.getlist local getwidth = nuts.getwidth - local direct = node.direct - local nodecodes = nodes.nodecodes local skipcodes = nodes.skipcodes @@ -438,7 +445,7 @@ if not nuts.getnormalizedline then local indentskip_code = skipcodes.indentskip local parfillskip_code = skipcodes.parfillskip - local find_node = direct.find_node or function(h,t,s) + nuts.findnode = node.direct.find_node or function(h,t,s) if h then if s then for node, subtype in traversers[t] do @@ -454,7 +461,6 @@ if not nuts.getnormalizedline then end end - nuts.find_node = find_node function nuts.getnormalizedline(h) if getid(h) == hlist_code and getsubtype(h) == line_code then -- cgit v1.2.3