- do
- local w_acc, h_before = 0, 0
- local x = getlist(after); local xn = node_next(x)
- while x do
- local w, h, d
- if xn then w, h, d = rangedimensions(after,x,xn)
- else w, h,d = rangedimensions(after,x) end
- if mirrored then h=d end
- if h~=h_before then
- h_before = h; t[w_acc] = t[w_acc] or {}
- if t[w_acc][2] then t[w_acc][2]=max(t[w_acc][2],h)
- else t[w_acc][2]=h end
- end
- w_acc = w_acc + w
- x = xn; if x then xn = node_next(x) end
+ package[2]=nil; package[1]=nil; package.flatten, package.insert=nil, nil
+ bd[#bd]=nil
+ return bd
+ end
+ function init_range()
+ return {{},{}, insert=insert, flatten=flatten}
+ end
+end
+
+-- -----------------------------------
+luatexja.adjust.step_factor = 0.5
+do
+ local insert = table.insert
+ local rangedimensions, max = node.direct.rangedimensions, math.max
+ local function profile_inner(box, range, ind, vmirrored, adj)
+ local w_acc, d_before = getfield(box,'shift'), 0
+ local x = getlist(box); local xn = node_next(x)
+ while x do
+ local w, h, d
+ if xn then w, h, d= rangedimensions(box,x,xn)
+ else w, h, d= rangedimensions(box,x) end
+ if vmirrored then h=d end
+ local w_new = w_acc + w
+ if w>=0 then
+ range:insert(ind, h, w_acc-adj, w_new)
+ else
+ range:insert(ind, h, w_new-adj, w_acc)