summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/pack-rul.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/pack-rul.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/pack-rul.lua85
1 files changed, 18 insertions, 67 deletions
diff --git a/Master/texmf-dist/tex/context/base/pack-rul.lua b/Master/texmf-dist/tex/context/base/pack-rul.lua
index c91dec09cc2..a990936e7d2 100644
--- a/Master/texmf-dist/tex/context/base/pack-rul.lua
+++ b/Master/texmf-dist/tex/context/base/pack-rul.lua
@@ -15,66 +15,9 @@ local hpack, free, copy, traverse_id = node.hpack, node.free, node.copy_list, no
local texdimen, texcount = tex.dimen, tex.count
local hlist_code = nodes.nodecodes.hlist
+local box_code = nodes.listcodes.box
local node_dimensions = node.dimensions
--- function commands.doreshapeframedbox(n)
--- local box = texbox[n]
--- local noflines = 0
--- local firstheight = nil
--- local lastdepth = nil
--- local lastlinelength = 0
--- local minwidth = 0
--- local maxwidth = 0
--- local totalwidth = 0
--- if box.width ~= 0 then
--- local list = box.list
--- if list then
--- for h in traverse_id(hlist_code,list) do -- no dir etc needed
--- if not firstheight then
--- firstheight = h.height
--- end
--- lastdepth = h.depth
--- noflines = noflines + 1
--- local l = h.list
--- if l then
--- local p = hpack(copy(l))
--- lastlinelength = p.width
--- if lastlinelength > maxwidth then
--- maxwidth = lastlinelength
--- end
--- if lastlinelength < minwidth or minwidth == 0 then
--- minwidth = lastlinelength
--- end
--- totalwidth = totalwidth + lastlinelength
--- free(p)
--- end
--- end
--- if firstheight then
--- if maxwidth ~= 0 then
--- for h in traverse_id(hlist_code,list) do
--- local l = h.list
--- if l then
--- -- if h.width ~= maxwidth then -- else no display math handling (uses shift)
--- h.list = hpack(l,maxwidth,'exactly',h.dir)
--- h.shift = 0 -- needed for display math
--- h.width = maxwidth
--- -- end
--- end
--- end
--- end
--- box.width = maxwidth
--- end
--- end
--- end
--- -- print("reshape", noflines, firstheight or 0, lastdepth or 0)
--- texsetcount("global","framednoflines", noflines)
--- texsetdimen("global","framedfirstheight", firstheight or 0)
--- texsetdimen("global","framedlastdepth", lastdepth or 0)
--- texsetdimen("global","framedminwidth", minwidth)
--- texsetdimen("global","framedmaxwidth", maxwidth)
--- texsetdimen("global","framedaveragewidth", noflines > 0 and totalwidth/noflines or 0)
--- end
-
function commands.doreshapeframedbox(n)
local box = texbox[n]
local noflines = 0
@@ -95,7 +38,11 @@ function commands.doreshapeframedbox(n)
noflines = noflines + 1
local l = h.list
if l then
- lastlinelength = node_dimensions(l)
+ if h.subtype == box_code then -- maybe more
+ lastlinelength = h.width
+ else
+ lastlinelength = node_dimensions(l) -- used to be: hpack(copy(l)).width
+ end
if lastlinelength > maxwidth then
maxwidth = lastlinelength
end
@@ -110,14 +57,18 @@ function commands.doreshapeframedbox(n)
for h in traverse_id(hlist_code,list) do
local l = h.list
if l then
- -- if h.width ~= maxwidth then -- else no display math handling (uses shift)
- -- challenge: adapt glue_set
- -- h.glue_set = h.glue_set * h.width/maxwidth -- interesting ... doesn't matter much
- -- h.width = maxwidth
- h.list = hpack(l,maxwidth,'exactly',h.dir)
- h.shift = 0 -- needed for display math
- h.width = maxwidth
- -- end
+ if h.subtype == box_code then
+ -- explicit box, no 'line'
+ else
+ -- if h.width ~= maxwidth then -- else no display math handling (uses shift)
+ -- challenge: adapt glue_set
+ -- h.glue_set = h.glue_set * h.width/maxwidth -- interesting ... doesn't matter much
+ -- h.width = maxwidth
+ h.list = hpack(l,maxwidth,'exactly',h.dir)
+ h.shift = 0 -- needed for display math
+ h.width = maxwidth
+ -- end
+ end
end
end
end