summaryrefslogtreecommitdiff
path: root/tex/context/base/back-exp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/back-exp.lua')
-rw-r--r--tex/context/base/back-exp.lua92
1 files changed, 55 insertions, 37 deletions
diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua
index 18a339247..dedfc22c0 100644
--- a/tex/context/base/back-exp.lua
+++ b/tex/context/base/back-exp.lua
@@ -95,10 +95,22 @@ local a_reference = attributes.private('reference')
local a_textblock = attributes.private("textblock")
-local traverse_id = node.traverse_id
-local traverse_nodes = node.traverse
-local slide_nodelist = node.slide
-local locate_node = nodes.locate
+local nuts = nodes.nuts
+local tonut = nuts.tonut
+
+local getnext = nuts.getnext
+local getsubtype = nuts.getsubtype
+local getfont = nuts.getfont
+local getchar = nuts.getchar
+local getlist = nuts.getlist
+local getid = nuts.getid
+local getfield = nuts.getfield
+local getattr = nuts.getattr
+
+local setattr = nuts.setattr
+
+local traverse_id = nuts.traverse_id
+local traverse_nodes = nuts.traverse
local references = structures.references
local structurestags = structures.tags
@@ -1826,25 +1838,25 @@ end
local function collectresults(head,list) -- is last used (we also have currentattribute)
local p
for n in traverse_nodes(head) do
- local id = n.id -- 14: image, 8: literal (mp)
+ local id = getid(n) -- 14: image, 8: literal (mp)
if id == glyph_code then
- local at = n[a_tagged]
+ local at = getattr(n,a_tagged)
if not at then
-- we need to tag the pagebody stuff as being valid skippable
--
-- report_export("skipping character: %C (no attribute)",n.char)
else
-- we could add tonunicodes for ligatures (todo)
- local components = n.components
+ local components = getfield(n,"components")
if components then -- we loose data
collectresults(components,nil)
else
- local c = n.char
+ local c = getchar(n)
if last ~= at then
local tl = taglist[at]
pushcontent()
currentnesting = tl
- currentparagraph = n[a_taggedpar]
+ currentparagraph = getattr(n,a_taggedpar)
currentattribute = at
last = at
pushentry(currentnesting)
@@ -1853,13 +1865,13 @@ local function collectresults(head,list) -- is last used (we also have currentat
end
-- We need to intercept this here; maybe I will also move this
-- to a regular setter at the tex end.
- local r = n[a_reference]
+ local r = getattr(n,a_reference)
if r then
referencehash[tl[#tl]] = r -- fulltag
end
--
elseif last then
- local ap = n[a_taggedpar]
+ local ap = getattr(n,a_taggedpar)
if ap ~= currentparagraph then
pushcontent(currentparagraph,ap)
pushentry(currentnesting)
@@ -1874,7 +1886,7 @@ local function collectresults(head,list) -- is last used (we also have currentat
report_export("%w<!-- processing glyph %C tagged %a) -->",currentdepth,c,at)
end
end
- local s = n[a_exportstatus]
+ local s = getattr(n,a_exportstatus)
if s then
c = s
end
@@ -1883,7 +1895,7 @@ local function collectresults(head,list) -- is last used (we also have currentat
report_export("%w<!-- skipping last glyph -->",currentdepth)
end
elseif c == 0x20 then
- local a = n[a_characters]
+ local a = getattr(n,a_characters)
nofcurrentcontent = nofcurrentcontent + 1
if a then
if trace_export then
@@ -1894,7 +1906,7 @@ local function collectresults(head,list) -- is last used (we also have currentat
currentcontent[nofcurrentcontent] = " "
end
else
- local fc = fontchar[n.font]
+ local fc = fontchar[getfont(n)]
if fc then
fc = fc and fc[c]
if fc then
@@ -1919,20 +1931,23 @@ local function collectresults(head,list) -- is last used (we also have currentat
end
elseif id == disc_code then -- probably too late
if keephyphens then
- local pre = n.pre
- if pre and not pre.next and pre.id == glyph_code and pre.char == hyphencode then
+ local pre = getfield(n,"pre")
+ if pre and not getnext(pre) and getid(pre) == glyph_code and getchar(pre) == hyphencode then
nofcurrentcontent = nofcurrentcontent + 1
currentcontent[nofcurrentcontent] = hyphen
end
end
- collectresults(n.replace,nil)
+ local replace = getfield(n,"replace")
+ if replace then
+ collectresults(replace,nil)
+ end
elseif id == glue_code then
-- we need to distinguish between hskips and vskips
- local ca = n[a_characters]
+ local ca = getattr(n,a_characters)
if ca == 0 then
-- skip this one ... already converted special character (node-acc)
elseif ca then
- local a = n[a_tagged]
+ local a = getattr(n,a_tagged)
if a then
local c = specialspaces[ca]
if last ~= a then
@@ -1942,13 +1957,13 @@ local function collectresults(head,list) -- is last used (we also have currentat
end
pushcontent()
currentnesting = tl
- currentparagraph = n[a_taggedpar]
+ currentparagraph = getattr(n,a_taggedpar)
currentattribute = a
last = a
pushentry(currentnesting)
-- no reference check (see above)
elseif last then
- local ap = n[a_taggedpar]
+ local ap = getattr(n,a_taggedpar)
if ap ~= currentparagraph then
pushcontent(currentparagraph,ap)
pushentry(currentnesting)
@@ -1969,11 +1984,11 @@ local function collectresults(head,list) -- is last used (we also have currentat
currentcontent[nofcurrentcontent] = c
end
else
- local subtype = n.subtype
+ local subtype = getsubtype(n)
if subtype == userskip_code then
- if n.spec.width > threshold then
+ if getfield(getfield(n,"spec"),"width") > threshold then
if last and not somespace[currentcontent[nofcurrentcontent]] then
- local a = n[a_tagged]
+ local a = getattr(n,a_tagged)
if a == last then
if trace_export then
report_export("%w<!-- injecting spacing 5a -->",currentdepth)
@@ -2000,7 +2015,7 @@ local function collectresults(head,list) -- is last used (we also have currentat
end
elseif subtype == spaceskip_code or subtype == xspaceskip_code then
if not somespace[currentcontent[nofcurrentcontent]] then
- local a = n[a_tagged]
+ local a = getattr(n,a_tagged)
if a == last then
if trace_export then
report_export("%w<!-- injecting spacing 7 (stay in element) -->",currentdepth)
@@ -2029,7 +2044,7 @@ local function collectresults(head,list) -- is last used (we also have currentat
nofcurrentcontent = nofcurrentcontent - 1
end
elseif not somespace[r] then
- local a = n[a_tagged]
+ local a = getattr(n,a_tagged)
if a == last then
if trace_export then
report_export("%w<!-- injecting spacing 1 (end of line, stay in element) -->",currentdepth)
@@ -2057,9 +2072,9 @@ local function collectresults(head,list) -- is last used (we also have currentat
end
end
elseif id == hlist_code or id == vlist_code then
- local ai = n[a_image]
+ local ai = getattr(n,a_image)
if ai then
- local at = n[a_tagged]
+ local at = getattr(n,a_tagged)
if nofcurrentcontent > 0 then
pushcontent()
pushentry(currentnesting) -- ??
@@ -2072,18 +2087,21 @@ local function collectresults(head,list) -- is last used (we also have currentat
currentparagraph = nil
else
-- we need to determine an end-of-line
- collectresults(n.list,n)
+ local list = getlist(n)
+ if list then
+ collectresults(list,n)
+ end
end
elseif id == kern_code then
- local kern = n.kern
+ local kern = getfield(n,"kern")
if kern > 0 then
local limit = threshold
- if p and p.id == glyph_code then
+ if p and getid(p) == glyph_code then
limit = fontquads[p.font] / 4
end
if kern > limit then
if last and not somespace[currentcontent[nofcurrentcontent]] then
- local a = n[a_tagged]
+ local a = getattr(n,a_tagged)
if a == last then
if not somespace[currentcontent[nofcurrentcontent]] then
if trace_export then
@@ -2123,7 +2141,7 @@ function nodes.handlers.export(head) -- hooks into the page builder
end
-- continueexport()
restart = true
- collectresults(head)
+ collectresults(tonut(head))
if trace_export then
report_export("%w<!-- stop flushing page -->",currentdepth)
end
@@ -2133,12 +2151,12 @@ end
function builders.paragraphs.tag(head)
noftextblocks = noftextblocks + 1
- for n in traverse_id(hlist_code,head) do
- local subtype = n.subtype
+ for n in traverse_id(hlist_code,tonut(head)) do
+ local subtype = getsubtype(n)
if subtype == line_code then
- n[a_textblock] = noftextblocks
+ setattr(n,a_textblock,noftextblocks)
elseif subtype == glue_code or subtype == kern_code then
- n[a_textblock] = 0
+ setattr(n,a_textblock,0)
end
end
return false