summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/anch-pos.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/anch-pos.lmt')
-rw-r--r--tex/context/base/mkxl/anch-pos.lmt127
1 files changed, 64 insertions, 63 deletions
diff --git a/tex/context/base/mkxl/anch-pos.lmt b/tex/context/base/mkxl/anch-pos.lmt
index fdb71ceb9..4900df683 100644
--- a/tex/context/base/mkxl/anch-pos.lmt
+++ b/tex/context/base/mkxl/anch-pos.lmt
@@ -282,83 +282,84 @@ if treemode then
-- todo: use a raw collected and a weak proxy
--
setmetatableindex(collected,function(t,k)
- local prefix, one, two = lpegmatch(p_splitter,k)
- local list = rawget(t,prefix)
- if list and type(list) == "table" then
- local v = list[one] or false
- if v then
- if prefix == "p" then
- if deltapacking and type(v) == "number" then
- for i=one,1,-1 do
- local l = list[i]
- if type(l) ~= "number" then
- if not getmetatable(l) then
- checkcommondata(l,x_h_d_hs_list)
+ if k ~= true then
+ local prefix, one, two = lpegmatch(p_splitter,k)
+ local list = rawget(t,prefix)
+ if list and type(list) == "table" then
+ local v = list[one] or false
+ if v then
+ if prefix == "p" then
+ if deltapacking and type(v) == "number" then
+ for i=one,1,-1 do
+ local l = list[i]
+ if type(l) ~= "number" then
+ if not getmetatable(l) then
+ checkcommondata(l,x_h_d_hs_list)
+ end
+ v = setmetatable({ y = v }, { __index = l })
+ list[one] = v
+ break
end
- v = setmetatable({ y = v }, { __index = l })
- list[one] = v
- break
end
+ else
+ checkcommondata(v,x_h_d_hs_list)
end
- else
- checkcommondata(v,x_h_d_hs_list)
- end
- elseif prefix == "text" or prefix == "textarea" then
- if type(v) == "number" then
- for i=one,1,-1 do
- local l = list[i]
- if type(l) ~= "number" then
- if not getmetatable(l) then
- checkcommondata(l,x_y_w_h_list)
+ elseif prefix == "text" or prefix == "textarea" then
+ if type(v) == "number" then
+ for i=one,1,-1 do
+ local l = list[i]
+ if type(l) ~= "number" then
+ if not getmetatable(l) then
+ checkcommondata(l,x_y_w_h_list)
+ end
+ v = setmetatable({ p = p }, { __index = l })
+ list[one] = v
+ break
end
- v = setmetatable({ p = p }, { __index = l })
- list[one] = v
- break
end
+ else
+ checkcommondata(v,x_y_w_h_list)
end
+ elseif prefix == "columnarea" then
+ if not columndone then
+ checkcommondata(v,y_w_h_d_list)
+ end
+ elseif prefix == "syncpos" then
+ -- will become an error
+ if two then
+ -- v = syncdata[one][two] or { }
+ v = v[two] or { }
+ else
+ v = { }
+ end
+ -- for j=1,#v do
+ -- checkcommondata(v[j],x_h_d_list)
+ -- end
+ elseif prefix == "free" then
+ -- will become an error
+ elseif prefix == "page" then
+ checkcommondata(v)
else
- checkcommondata(v,x_y_w_h_list)
- end
- elseif prefix == "columnarea" then
- if not columndone then
- checkcommondata(v,y_w_h_d_list)
- end
- elseif prefix == "syncpos" then
- -- will become an error
- if two then
- -- v = syncdata[one][two] or { }
- v = v[two] or { }
- else
- v = { }
+ checkcommondata(v)
end
- -- for j=1,#v do
- -- checkcommondata(v[j],x_h_d_list)
- -- end
- elseif prefix == "free" then
- -- will become an error
- elseif prefix == "page" then
- checkcommondata(v)
else
- checkcommondata(v)
- end
- else
- if prefix == "page" then
- for i=one,1,-1 do
- local data = list[i]
- if data then
- v = setmetatableindex({ free = free or false, p = p },last)
- list[one] = v
- break
+ if prefix == "page" then
+ for i=one,1,-1 do
+ local data = list[i]
+ if data then
+ v = setmetatableindex({ free = free or false, p = p },last)
+ list[one] = v
+ break
+ end
end
end
end
+ t[k] = v
+ return v
end
- t[k] = v
- return v
- else
- t[k] = false
- return false
end
+ t[k] = false
+ return false
end)
--
setmetatableindex(tobesaved,function(t,k)