summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/math-spa.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/math-spa.lmt')
-rw-r--r--tex/context/base/mkxl/math-spa.lmt28
1 files changed, 20 insertions, 8 deletions
diff --git a/tex/context/base/mkxl/math-spa.lmt b/tex/context/base/mkxl/math-spa.lmt
index d2927ff58..a575b1714 100644
--- a/tex/context/base/mkxl/math-spa.lmt
+++ b/tex/context/base/mkxl/math-spa.lmt
@@ -41,6 +41,7 @@ local getnormalizedline = node.direct.getnormalizedline
local getbox = nuts.getbox
local setoffsets = nuts.setoffsets
local addxoffset = nuts.addxoffset
+local setattrlist = nuts.setattrlist
local nextglue = nuts.traversers.glue
local nextlist = nuts.traversers.list
@@ -48,7 +49,9 @@ local nextboundary = nuts.traversers.boundary
local nextnode = nuts.traversers.node
local insertafter = nuts.insertafter
+local insertbefore = nuts.insertbefore
local newkern = nuts.pool.kern
+local newstrutrule = nuts.pool.strutrule
local texsetdimen = tex.setdimen
local texgetdimen = tex.getdimen
@@ -68,6 +71,10 @@ local d_strc_math_first_height = texisdimen("d_strc_math_first_height")
local d_strc_math_last_depth = texisdimen("d_strc_math_last_depth")
local d_strc_math_indent = texisdimen("d_strc_math_indent")
+local report = logs.reporter("mathalign")
+
+local trace = false trackers.register("mathalign",function(v) trace = v end )
+
local function moveon(s)
for n, id, subtype in nextnode, getnext(s) do
s = n
@@ -138,15 +145,20 @@ stages[1] = function(specification,stage)
p = getprev(p)
end
end
- -- we use a hangindent so we need to treat the first one
- local f = found[1]
- local delta = f[2] - max
- if delta ~= 0 then
- insertafter(head,moveon(head),newkern(-delta))
- end
- for i=2,#found do
+ for i=1,#found do
local f = found[i]
- insertafter(head,moveon(f[3]),newkern(-f[2])) -- check head
+ local w = f[2]
+ local d = i == 1 and (max-w) or -w
+ local k = newkern(d)
+ local r = newstrutrule(0,2*65536,2*65536)
+ local s = moveon(f[3])
+ if trace then
+ report("row %i, width %p, delta %p",i,w,d)
+ end
+ setattrlist(r,head)
+ setattrlist(k,head)
+ insertbefore(head,s,r)
+ insertafter(head,r,k)
end
end
texsetdimen("global",d_strc_math_indent,max)