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.lua36
1 files changed, 24 insertions, 12 deletions
diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua
index 83c7b6198..28cb5c18c 100644
--- a/tex/context/base/back-exp.lua
+++ b/tex/context/base/back-exp.lua
@@ -740,6 +740,7 @@ end
local function collapsetree()
for k, v in next, treehash do
local d = v[1].data
+ local nd = #d
for i=2,#v do
local vi = v[i]
local vd = vi.data
@@ -753,26 +754,35 @@ local function collapsetree()
-- experiment, should be improved
-- can be simplified ... lpn instead of done
if done then
- d[#d+1] = joiner_1
+ nd = nd + 1
+ d[nd] = joiner_1
else
done = true
local pn = vi.parnumber
if not pn then
- d[#d+1], lpn = joiner_2, nil
+ nd = nd + 1
+ d[nd] = joiner_2
+ lpn = nil
elseif not lpn then
- d[#d+1], lpn = joiner_3, pn
+ nd = nd + 1
+ d[nd] = joiner_3
+ lpn = pn
elseif pn and pn ~= lpn then
- d[#d+1], lpn = makebreaknode(vi), pn
+ nd = nd + 1
+ d[nd] = makebreaknode(vi)
+ lpn = pn
else
- -- d[#d+1] = joiner_4 -- we need to be more clever
+ -- nd = nd + 1
+ -- d[nd] = joiner_4 -- we need to be more clever
end
end
else
-- lpn = nil
end
-if vdj ~= "" then
- d[#d+1] = vdj -- hm, any?
-end
+ if vdj ~= "" then
+ nd = nd + 1
+ d[nd] = vdj -- hm, any?
+ end
vd[j] = false
end
v[i].collapsed = true
@@ -784,19 +794,21 @@ local function prunetree(tree)
if not tree.collapsed then
local data = tree.data
if data then
- local p = { }
+ local p, np = { }, 0
for i=1,#data do
local d = data[i]
if type(d) == "table" then
if not d.collapsed then
prunetree(d)
- p[#p+1] = d
+ np = np + 1
+ p[np] = d
end
elseif type(d) == "string" then
- p[#p+1] = d
+ np = np + 1
+ p[np] = d
end
end
- tree.data = #p > 0 and p
+ tree.data = np > 0 and p
end
end
end