From 0ec122c100e39ea118fdb2c4b6223ece8053f439 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 3 Oct 2022 03:03:44 +0000 Subject: CTAN sync 202210030303 --- .../luatex/generic/luatexja/src/ltj-lineskip.lua | 32 ++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'macros/luatex/generic/luatexja/src/ltj-lineskip.lua') 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 -- cgit v1.2.3