From ab56ea38d2f4f5b521ef097bac92812f6070ef55 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 27 Jul 2017 17:53:52 +0200 Subject: 2017-07-27 16:23:00 --- tex/context/base/mkiv/lpdf-tag.lua | 46 ++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 14 deletions(-) (limited to 'tex/context/base/mkiv/lpdf-tag.lua') diff --git a/tex/context/base/mkiv/lpdf-tag.lua b/tex/context/base/mkiv/lpdf-tag.lua index e33c8a811..9d33df6f3 100644 --- a/tex/context/base/mkiv/lpdf-tag.lua +++ b/tex/context/base/mkiv/lpdf-tag.lua @@ -55,7 +55,8 @@ local tonut = nuts.tonut local tonode = nuts.tonode local nodepool = nuts.pool -local pdfliteral = nodepool.pdfliteral +local pdfpageliteral = nodepool.pdfpageliteral +local register = nodepool.register local getid = nuts.getid local getattr = nuts.getattr @@ -67,10 +68,9 @@ local setfield = nuts.setfield local setlink = nuts.setlink local setlist = nuts.setlist +local copy_node = nuts.copy local traverse_nodes = nuts.traverse local tosequence = nuts.tosequence -local insert_before = nuts.insert_before -local insert_after = nuts.insert_after local structure_stack = { } local structure_kids = pdfarray() @@ -312,8 +312,14 @@ end -- no need to adapt head, as we always operate on lists +local EMCliteral = nil + function nodeinjections.addtags(head) + if not EMCliteral then + EMCliteral = register(pdfpageliteral("EMC")) + end + local last = nil local ranges = { } local range = nil @@ -321,8 +327,9 @@ function nodeinjections.addtags(head) local function collectranges(head,list) for n in traverse_nodes(head) do - local id = getid(n) -- 14: image, 8: literal (mp) + local id = getid(n) if id == glyph_code then + -- maybe also disc local at = getattr(n,a_tagged) if not at then range = nil @@ -344,8 +351,7 @@ function nodeinjections.addtags(head) end last = nil else - local nl = getlist(n) - collectranges(nl,n) + collectranges(getlist(n),n) end end end @@ -383,7 +389,6 @@ function nodeinjections.addtags(head) local taglist = specification.taglist local noftags = #taglist local common = 0 - if top then for i=1,noftags >= noftop and noftop or noftags do if top[i] == taglist[i] then @@ -412,12 +417,12 @@ function nodeinjections.addtags(head) prev = prv end end - if prev then - literal = pdfliteral(makecontent(prev,id,specification)) + literal = pdfpageliteral(makecontent(prev,id,specification)) elseif ignore then - literal = pdfliteral(makeignore(specification)) + literal = pdfpageliteral(makeignore(specification)) end + if literal then local prev = getprev(start) if prev then @@ -427,14 +432,27 @@ function nodeinjections.addtags(head) if list and getlist(list) == start then setlist(list,literal) end + local literal = copy_node(EMCliteral) -- use insert instead: - local literal = pdfliteral("EMC") local next = getnext(stop) if next then setlink(literal,next) end setlink(stop,literal) end + +-- if literal then +-- if list and getlist(list) == start then +-- setlink(literal,start) +-- setlist(list,literal) +-- else +-- setlink(getprev(start),literal,start) +-- end +-- -- use insert instead: +-- local literal = copy_node(EMCliteral) +-- setlink(stop,literal,getnext(stop)) +-- end + top = taglist noftop = noftags end @@ -558,9 +576,9 @@ end -- end -- -- if r > 0 then --- local literal = pdfliteral(concat(result,"\n")) +-- local literal = pdfpageliteral(concat(result,"\n")) -- -- use insert instead: --- local literal = pdfliteral(result) +-- local literal = pdfpageliteral(result) -- local prev = getprev(start) -- if prev then -- setlink(prev,literal) @@ -582,7 +600,7 @@ end -- for i=1,noftop do -- result[i] = "EMC" -- end --- local literal = pdfliteral(concat(result,"\n")) +-- local literal = pdfpageliteral(concat(result,"\n")) -- -- use insert instead: -- local next = getnext(last) -- if next then -- cgit v1.2.3