From 215aeff4092b7483f4ac024d19984a37c381ba52 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Wed, 21 Jul 2021 20:14:30 +0200 Subject: 2021-07-21 19:53:00 --- tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/lpdf-tag.lmt | 50 ++++++++++++++++++++++++++----------- tex/context/base/mkxl/page-lin.mklx | 12 +++++---- tex/context/base/mkxl/strc-tag.mkxl | 2 ++ 5 files changed, 46 insertions(+), 22 deletions(-) (limited to 'tex/context/base/mkxl') diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 8c029b2e4..70b47d75d 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.07.16 21:58} +\newcontextversion{2021.07.21 19:51} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 9b1e70180..67ecc671c 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2021.07.16 21:58} +\immutable\edef\contextversion{2021.07.21 19:51} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/lpdf-tag.lmt b/tex/context/base/mkxl/lpdf-tag.lmt index 21f5b246d..8c76ca694 100644 --- a/tex/context/base/mkxl/lpdf-tag.lmt +++ b/tex/context/base/mkxl/lpdf-tag.lmt @@ -81,6 +81,8 @@ local parent_ref -- delayed local root -- delayed local names = { } local tree = { } +local firstintree = false +local lastintree = false local elements = { } local structurestags = structures.tags @@ -137,9 +139,14 @@ local function finishstructure() if root and #structure_kids > 0 then local nums = pdfarray() local n = 0 - for i=1,#tree do - n = n + 1 ; nums[n] = i - 1 - n = n + 1 ; nums[n] = pdfreference(pdfflushobject(tree[i])) + for i=firstintree,lastintree do + local ti = tree[i] + if ti then + n = n + 1 ; nums[n] = i - 1 + n = n + 1 ; nums[n] = pdfreference(pdfflushobject(ti)) + else + report_tags("beware: missing page %i in tree", i) + end end local parenttree = pdfdictionary { Nums = nums @@ -191,6 +198,19 @@ local function initializepage() pagenum = texgetcount("realpageno") pageref = pdfreference(pdfpagereference(pagenum)) list = pdfarray() + -- hm, can be later than 1 + if not firstintree then + if pagenum > 1 then + report_tags("beware: first page in tree is %i", pagenum) + end + firstintree = pagenum + lastintree = pagenum + end + if pagenum > lastintree then + lastintree = pagenum + else + report_tags("beware: page order problem in tree at page %i", pagenum) + end tree[pagenum] = list -- we can flush after done, todo end @@ -382,19 +402,19 @@ function nodeinjections.addtags(head) for n, id in nextnode, head do if id == glyph_code then -- maybe also disc -if getchar(n) ~= 0 then - local at = getattr(n,a_tagged) or false -- false: pagebody or so, so artifact - -- if not at then - -- range = nil - -- elseif ... - if last ~= at then - range = { at, "glyph", n, n, list } -- attr id start stop list - ranges[#ranges+1] = range - last = at - elseif range then - range[4] = n -- stop + if getchar(n) ~= 0 then + local at = getattr(n,a_tagged) or false -- false: pagebody or so, so artifact + -- if not at then + -- range = nil + -- elseif ... + if last ~= at then + range = { at, "glyph", n, n, list } -- attr id start stop list + ranges[#ranges+1] = range + last = at + elseif range then + range[4] = n -- stop + end end -end elseif id == hlist_code or id == vlist_code then local at = getattr(n,a_image) if at then diff --git a/tex/context/base/mkxl/page-lin.mklx b/tex/context/base/mkxl/page-lin.mklx index 3b3a3d71b..5a1dc2e60 100644 --- a/tex/context/base/mkxl/page-lin.mklx +++ b/tex/context/base/mkxl/page-lin.mklx @@ -344,7 +344,9 @@ \def\page_lines_add_numbers_to_box#box#column#max#nesting% {\bgroup - \strc_tags_enable_indeed + \ifconditional\c_strc_tags_enabled + \strc_tags_enable_indeed + \fi \b_page_lines_number #box\relax \c_page_lines_column #column\relax \c_page_lines_last_column#max\relax @@ -466,13 +468,13 @@ \dostoptagged}% \dostoptagged} -\setuvalue{\??linenumberinghandler\v!left}% +\protected\defcsname\??linenumberinghandler\v!left\endcsname {\page_line_handle_left\p_align\leftmarginwidth\leftmargindistance} -\setuvalue{\??linenumberinghandler\v!right}% +\protected\defcsname\??linenumberinghandler\v!right\endcsname {\page_line_handle_right\p_align\rightmarginwidth\rightmargindistance} -\setuvalue{\??linenumberinghandler\v!inner}% +\protected\defcsname\??linenumberinghandler\v!inner\endcsname {\ifodd\realpageno \ifx\p_align\v!inner \page_line_handle_left\v!flushleft\leftmarginwidth\leftmargindistance @@ -491,7 +493,7 @@ \fi \fi} -\setuvalue{\??linenumberinghandler\v!outer}% +\protected\defcsname\??linenumberinghandler\v!outer\endcsname {\ifodd\realpageno \ifx\p_align\v!inner \page_line_handle_right\v!flushleft\leftmarginwidth\leftmargindistance diff --git a/tex/context/base/mkxl/strc-tag.mkxl b/tex/context/base/mkxl/strc-tag.mkxl index 96371b6b5..55f8125f8 100644 --- a/tex/context/base/mkxl/strc-tag.mkxl +++ b/tex/context/base/mkxl/strc-tag.mkxl @@ -335,6 +335,8 @@ {\enforced\let\getelementtag \donothing \enforced\let\setupelementuserproperties\gobbletwooptionals} +\strc_tags_disable + %D The triggers: \newtoks\everyenableelements -- cgit v1.2.3