summaryrefslogtreecommitdiff
path: root/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/generic/luatexja/src/ltj-lineskip.lua')
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-lineskip.lua32
1 files changed, 18 insertions, 14 deletions
diff --git a/macros/luatex/generic/luatexja/src/ltj-lineskip.lua b/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
index f8b97c144b..107ee804a8 100644
--- a/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
+++ b/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
@@ -6,24 +6,26 @@ luatexja.load_module 'direction'; local ltjd = luatexja.direction
luatexja.lineskip = luatexja.lineskip or {}
local to_direct = node.direct.todirect
+local to_node = node.direct.tonode
local ltjl = luatexja.lineskip
local id_glue = node.id 'glue'
local id_penalty = node.id 'penalty'
local id_hlist = node.id 'hlist'
-local setfield = node.direct.setfield
-local getfield = node.direct.getfield
local getlist = node.direct.getlist
local node_new = node.direct.new
local node_prev = node.direct.getprev
local node_next = node.direct.getnext
local getid = node.direct.getid
local getsubtype = node.direct.getsubtype
+local getdepth = node.direct.getdepth
+local getheight = node.direct.getheight
local texget = tex.get
local node_getglue = node.getglue
local setglue = node.direct.setglue
+local setsubtype = node.direct.setsubtype
local function copy_glue (new_glue, old_glue_name, subtype, new_w)
- setfield(new_glue, 'subtype', subtype)
+ setsubtype(new_glue, subtype)
local w,st,sp,sto,spo = texget(old_glue_name, true)
setglue(new_glue, new_w or w, st, sp, sto, spo)
end
@@ -57,11 +59,11 @@ local function adjust_glue(nh)
local p, n = node_prev(x), node_next(x)
if p then
local pid = getid(p)
- while (id_glue<=pid) and (pid<=id_penalty) and node_prev(p) do
+ while (id_glue<=pid) and (pid<=id_penalty) and node_prev(p) do
p = node_prev(p); pid = getid(p)
end
if pid==id_hlist and getid(n)==id_hlist then
- local normal = bw - getfield(p, 'depth') - getfield(n, 'height')
+ local normal = bw - getdepth(p) - getheight(n)
local lmin, adj = ltj_profiler(p, n, false, bw)
ltj_skip(lmin or normal, x, adj, normal, bw)
end
@@ -77,17 +79,20 @@ do
local p_dummy = ltjl.p_dummy
local make_dir_whatsit = luatexja.direction.make_dir_whatsit
local get_dir_count = luatexja.direction.get_dir_count
-local node_write = node.direct.write
+local getwhd = node.direct.getwhd
+local setnext = node.direct.setnext
+local getnest = tex.getnest
local function dir_adjust_append_vlist(b, loc, prev, mirrored)
local old_b = to_direct(b)
- local new_b = loc=='box' and
+ local new_b = loc=='box' and
make_dir_whatsit(old_b, old_b, get_dir_count(), 'append_vlist') or old_b
+ local _, ht, dp = getwhd(new_b)
if prev > -65536000 then
local bw = texget('baselineskip', false)
- local normal = bw - prev - getfield(new_b, mirrored and 'depth' or 'height')
+ local normal = bw - prev - (mirrored and dp or ht)
local lmin, adj = nil, 0
- local tail = to_direct(tex.nest[tex.nest.ptr].tail)
+ local tail = to_direct(getnest().tail)
if p_dummy~=ltj_profiler then
while tail and (id_glue<=getid(tail)) and (getid(tail)<=id_penalty) do
tail = node_prev(tail)
@@ -95,17 +100,16 @@ local function dir_adjust_append_vlist(b, loc, prev, mirrored)
end
if tail then
if getid(tail)==id_hlist and getid(new_b)==id_hlist then
- if getfield(tail, 'depth')==prev then
+ if getdepth(tail)==prev then
lmin, adj = ltj_profiler(tail, new_b, mirrored, bw)
end
end
end
local g = node_new(id_glue)
- ltj_skip(lmin or normal, g, adj, normal, bw, loc); node_write(g)
+ ltj_skip(lmin or normal, g, adj, normal, bw, loc)
+ setnext(g, new_b); return to_node(g), (mirrored and ht or dp)
+ else return to_node(new_b), (mirrored and ht or dp)
end
- node_write(new_b)
- tex.prevdepth = getfield(new_b, mirrored and 'height' or 'depth')
- return nil -- do nothing on tex side
end
ltjb.add_to_callback('append_to_vlist_filter', dir_adjust_append_vlist, 'ltj.lineskip', 10000)
end