summaryrefslogtreecommitdiff
path: root/tex/context/base/node-acc.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/node-acc.lua')
-rw-r--r--tex/context/base/node-acc.lua120
1 files changed, 41 insertions, 79 deletions
diff --git a/tex/context/base/node-acc.lua b/tex/context/base/node-acc.lua
index 59fa031bf..81ae496b2 100644
--- a/tex/context/base/node-acc.lua
+++ b/tex/context/base/node-acc.lua
@@ -11,27 +11,10 @@ local nodes, node = nodes, node
local nodecodes = nodes.nodecodes
local tasks = nodes.tasks
-local nuts = nodes.nuts
-local tonut = nodes.tonut
-local tonode = nodes.tonode
-
-local getid = nuts.getid
-local getfield = nuts.getfield
-local getattr = nuts.getattr
-local getlist = nuts.getlist
-local getchar = nuts.getchar
-local getnext = nuts.getnext
-
-local setfield = nuts.setfield
-local setattr = nuts.setattr
-
-local traverse_nodes = nuts.traverse
-local traverse_id = nuts.traverse_id
-local copy_node = nuts.copy
-local free_nodelist = nuts.flush_list
-local insert_after = nuts.insert_after
-
-local new_gluespec = nuts.pool.gluespec -- temp hack
+local traverse_nodes = node.traverse
+local traverse_id = node.traverse_id
+local copy_node = node.copy
+local free_nodelist = node.flush_list
local glue_code = nodecodes.glue
local kern_code = nodecodes.kern
@@ -46,72 +29,57 @@ local threshold = 65536
-- todo: nbsp etc
-- todo: collapse kerns
--- p_id
-
local function injectspaces(head)
- local p, p_id
+ local p
local n = head
while n do
- local id = getid(n)
+ local id = n.id
if id == glue_code then -- todo: check for subtype related to spacing (13/14 but most seems to be 0)
- -- if getfield(getfield(n,"spec"),"width") > 0 then -- threshold
--- if p and p_id == glyph_code then
- if p and getid(p) == glyph_code then
+ -- if n.spec.width > 0 then -- threshold
+ if p and p.id == glyph_code then
local g = copy_node(p)
- local c = getfield(g,"components")
+ local c = g.components
if c then -- it happens that we copied a ligature
free_nodelist(c)
- setfield(g,"components",nil)
- setfield(g,"subtype",256)
+ g.components = nil
+ g.subtype = 256
end
- local a = getattr(n,a_characters)
- -- local s = copy_node(getfield(n,"spec"))
- -- this will be fixed in luatex but for now a temp hack (zero test)
- local s = getfield(n,"spec")
- s = s == 0 and new_gluespec(0) or copy_node(s)
- --
- setfield(g,"char",32)
- setfield(n,"spec",s)
- -- insert_after(p,p,g)
- setfield(p,"next",g)
- setfield(g,"prev",p)
- setfield(g,"next",n)
- setfield(n,"prev",g)
- setfield(s,"width",getfield(s,"width") - getfield(g,"width"))
+ local a = n[a_characters]
+ local s = copy_node(n.spec)
+ g.char, n.spec = 32, s
+ p.next, g.prev = g, p
+ g.next, n.prev = n, g
+ s.width = s.width - g.width
if a then
- setattr(g,a_characters,a)
+ g[a_characters] = a
end
- setattr(s,a_characters,0)
- setattr(n,a_characters,0)
+ s[a_characters] = 0
+ n[a_characters] = 0
end
-- end
elseif id == hlist_code or id == vlist_code then
- injectspaces(getlist(n),attribute)
+ injectspaces(n.list,attribute)
-- elseif id == kern_code then -- the backend already collapses
-- local first = n
-- while true do
- -- local nn = getnext(n)
- -- if nn and getid(nn) == kern_code then
+ -- local nn = n.next
+ -- if nn and nn.id == kern_code then
-- -- maybe we should delete kerns but who cares at this stage
- -- setfield(first,"kern",getfield(first,"kern") + getfield(nn,"kern")
- -- setfield(nn,"kern",0)
+ -- first.kern = first.kern + nn.kern
+ -- nn.kern = 0
-- n = nn
-- else
-- break
-- end
-- end
end
- p_id = id
p = n
- n = getnext(n)
+ n = n.next
end
- return head, true -- always done anyway
+ return head, true
end
-nodes.handlers.accessibility = function(head)
- local head, done = injectspaces(tonut(head))
- return tonode(head), done
-end
+nodes.handlers.accessibility = injectspaces
-- todo:
@@ -122,18 +90,16 @@ end
-- local function compact(n)
-- local t = { }
-- for n in traverse_id(glyph_code,n) do
--- t[#t+1] = utfchar(getchar(n)) -- check for unicode
+-- t[#t+1] = utfchar(n.char) -- check for unicode
-- end
-- return concat(t,"")
-- end
--
-- local function injectspans(head)
--- local done = false
--- for n in traverse_nodes(tonuts(head)) do
--- local id = getid(n)
+-- for n in traverse_nodes(head) do
+-- local id = n.id
-- if id == disc then
--- local r = getfield(n,"replace")
--- local p = getfield(n,"pre")
+-- local r, p = n.replace, n.pre
-- if r and p then
-- local str = compact(r)
-- local hsh = hyphenated[str]
@@ -142,14 +108,13 @@ end
-- hyphenated[str] = hsh
-- codes[hsh] = str
-- end
--- setattr(n,a_hyphenated,hsh)
--- done = true
+-- n[a_hyphenated] = hsh
-- end
-- elseif id == hlist_code or id == vlist_code then
--- injectspans(getlist(n))
+-- injectspans(n.list)
-- end
-- end
--- return tonodes(head), done
+-- return head, true
-- end
--
-- nodes.injectspans = injectspans
@@ -157,22 +122,19 @@ end
-- tasks.appendaction("processors", "words", "nodes.injectspans")
--
-- local function injectspans(head)
--- local done = false
--- for n in traverse_nodes(tonut(head)) do
--- local id = getid(n)
+-- for n in traverse_nodes(head) do
+-- local id = n.id
-- if id == disc then
--- local a = getattr(n,a_hyphenated)
+-- local a = n[a_hyphenated]
-- if a then
-- local str = codes[a]
-- local b = new_pdfliteral(format("/Span << /ActualText %s >> BDC", lpdf.tosixteen(str)))
-- local e = new_pdfliteral("EMC")
--- insert_before(head,n,b)
--- insert_after(head,n,e)
--- done = true
+-- node.insert_before(head,n,b)
+-- node.insert_after(head,n,e)
-- end
-- elseif id == hlist_code or id == vlist_code then
--- injectspans(getlist(n))
+-- injectspans(n.list)
-- end
-- end
--- return tonodes(head), done
-- end