X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fltj-jfmglue.lua;h=d3f9d99aa28a1606fe9090c5ccc838ebb03b9c43;hb=b16374e058aa3e885729b62150152cf0c62c3c7c;hp=fcdcc787d63971ae6c129bb307d432ed23471102;hpb=73ac7883b7e637830a510add0150ee7c856dacf3;p=luatex-ja%2Fluatexja.git diff --git a/src/ltj-jfmglue.lua b/src/ltj-jfmglue.lua index fcdcc78..d3f9d99 100644 --- a/src/ltj-jfmglue.lua +++ b/src/ltj-jfmglue.lua @@ -1,24 +1,23 @@ -- --- luatexja/ltj-jfmglue.lua +-- ltj-jfmglue.lua -- luatexbase.provides_module({ name = 'luatexja.jfmglue', - date = '2016/04/03', - description = 'Insertion process of JFM glues and kanjiskip', + date = '2020/01/23', + description = 'Insertion process of JFM glues, [x]kanjiskip and others', }) -module('luatexja.jfmglue', package.seeall) -local err, warn, info, log = luatexbase .errwarinf(_NAME) +luatexja.jfmglue = luatexja.jfmglue or {} luatexja.load_module('base'); local ltjb = luatexja.base luatexja.load_module('stack'); local ltjs = luatexja.stack luatexja.load_module('jfont'); local ltjf = luatexja.jfont luatexja.load_module('direction'); local ltjd = luatexja.direction -luatexja.load_module('setwidth'); local ltjw = luatexja.setwidth +luatexja.load_module('setwidth'); local ltjw = luatexja.setwidth +luatexja.load_module('lotf_aux'); local ltju = luatexja.lotf_aux local pairs = pairs -local nullfunc = function(n) return n end -local to_node = node.direct.tonode -local to_direct = node.direct.todirect +--local to_node = node.direct.tonode +--local to_direct = node.direct.todirect local setfield = node.direct.setfield local setglue = luatexja.setglue @@ -32,9 +31,10 @@ local if_lang_ja do local lang_ja = luatexja.lang_ja local getlang = node.direct.getlang + -- glyph with font number 0 (\nullfont) is always considered an ALchar node if_lang_ja = getlang - and function (n) return getlang(n)==lang_ja end - or function (n) return getfield(n,'lang')==lang_ja end + and function (n) return (getlang(n)==lang_ja)and(getfont(n)~=0) end + or function (n) return (getfield(n,'lang')==lang_ja)and(getfont(n)~=0) end end local has_attr = node.direct.has_attribute @@ -88,7 +88,7 @@ local list_dir local capsule_glyph local tex_dir local attr_ablshift -local set_np_xspc_jachar +local set_np_xspc_jachar, set_np_xspc_alchar local set_np_xspc_jachar_hbox local ltjs_orig_char_table = ltjs.orig_char_table @@ -127,22 +127,27 @@ end -- penalty 値の計算 -local function add_penalty(p,e) - local pp = getfield(p, 'penalty') - if pp>=10000 then - if e<=-10000 then setfield(p, 'penalty', 0) end - elseif pp<=-10000 then - if e>=10000 then setfield(p, 'penalty', 0) end - else - pp = pp + e - if pp>=10000 then setfield(p, 'penalty', 10000) - elseif pp<=-10000 then setfield(p, 'penalty', -10000) - else setfield(p, 'penalty', pp) end +local add_penalty +do +local setpenalty = node.direct.setpenalty or function(n, a) setfield(n,'penalty',a) end +local getpenalty = node.direct.getpenalty or function(n) return getfield(n,'penalty') end +function add_penalty(p,e) + local pp = getpenalty(p) + if (pp>-10000) and (pp<10000) then + if e>=10000 then setpenalty(p, 10000) + elseif e<=-10000 then setpenalty(p, -10000) + else + pp = pp + e + if pp>=10000 then setpenalty(p, 10000) + elseif pp<=-10000 then setpenalty(p, -10000) + else setpenalty(p, pp) end + end end end +end -- 「異なる JFM」の間の調整方法 -diffmet_rule = math.two_paverage +luatexja.jfmglue.diffmet_rule = math.two_paverage function math.two_add(a,b) return a+b end function math.two_average(a,b) return (a+b)*0.5 end function math.two_paverage(a,b) return (a+b)/2 end @@ -160,6 +165,7 @@ local non_ihb_flag -- JFM グルー挿入抑止用 flag -------------------- hlist 内の文字の検索 local first_char, last_char, find_first_char +local check_box_high do local ltjd_glyph_from_packed = ltjd.glyph_from_packed local function check_box(box_ptr, box_end) @@ -207,6 +213,7 @@ local function check_box(box_ptr, box_end) if getfield(p, 'shift')==0 then last_char = nil if check_box(getlist(p), nil) then found_visible_node = true end + find_first_char = false else find_first_char = false; last_char = nil end @@ -229,7 +236,7 @@ local function check_box(box_ptr, box_end) return found_visible_node end -function check_box_high(Nx, box_ptr, box_end) +check_box_high = function (Nx, box_ptr, box_end) first_char = nil; last_char = nil; find_first_char = true if check_box(box_ptr, box_end) then local first_char = first_char @@ -262,30 +269,33 @@ luatexbase.create_callback("luatexja.jfmglue.whatsit_after", "data", -- calc next Np local calc_np -do +do -- 001 ----------------------------------------------- local traverse = node.direct.traverse local function check_next_ickern(lp) - if lp and getid(lp) == id_kern and ( getsubtype(lp)==3 or ITALIC == get_attr_icflag(lp)) then - set_attr(lp, attr_icflag, IC_PROCESSED); - Np.last = lp; return node_next(lp) - else - Np.last = Np.nuc; return lp + local lx = Np.nuc + while lp and getid(lp) == id_kern and ( getsubtype(lp)==0 or + getsubtype(lp)==3 or ITALIC == get_attr_icflag(lp)) do + set_attr(lp, attr_icflag, IC_PROCESSED); + lx, lp = lp, node_next(lp) end + Np.last = lx; return lp end local function calc_np_pbox(lp, last) - local first, lpa, nc = (not Np.first), KINSOKU, nil + local first, nc = (not Np.first), nil + --local lpa = get_attr_icflag(lp)==PACKED and PACKED or KINSOKU -- KINSOKU: dummy + local lpa = get_attr_icflag(lp) Np.first = Np.first or lp; Np.id = id_pbox set_attr(lp, attr_icflag, get_attr_icflag(lp)); while lp ~=last and (lpa>=PACKED) and (lpa=2 do - x = f(xc); xc, xs = getfield(x, 'components'), getsubtype(x) + x = f(xc); + if getid(x)==id_disc then x, xc, xs = nil, getfield(x,'replace'), 2 + else xc, xs = getcomponents(x), getsubtype(x) end end - c = getchar(x) + c = x and getchar(x) or c Nx.pre = table_current_stack[PRE + c] or 0 Nx.post = table_current_stack[POST + c] or 0 else @@ -641,7 +681,7 @@ end -------------------- 最下層の処理 -luatexbase.create_callback('luatexja.adjust_jfmglue', 'simple', nullfunc) +luatexbase.create_callback('luatexja.adjust_jfmglue', 'simple', function(n) return n end) -- change penalties (or create a new penalty, if needed) local function handle_penalty_normal(post, pre, g) @@ -715,7 +755,7 @@ local function new_jfm_glue(mc, bc, ac) return node_copy(g[1]), g.ratio, false, false, false else local f = node_new(id_glue) - set_attr(f, attr_icflag, g.priority) + set_attr(f, attr_icflag, g.priority) setglue(f, g.width, g.stretch, g.shrink) return f, g.ratio, g.kanjiskip_natural, g.kanjiskip_stretch, g.kanjiskip_shrink end @@ -742,58 +782,52 @@ do local bk_ak = 2*id_kern - id_kern local function blend_diffmet(b, a, rb, ra) - return round(diffmet_rule((1-rb)*b+rb*a, (1-ra)*b+ra*a)) + return round(luatexja.jfmglue.diffmet_rule((1-rb)*b+rb*a, (1-ra)*b+ra*a)) end + local blend_diffmet_inf + do + local abs, log, log264, floor = math.abs, math.log, math.log(2)*64, math.floor + blend_diffmet_inf = function (b, a, bo, ao, rb, ra) + local nb, na = (bo and b*2.0^(64*bo) or 0), (ao and a*2.0^(64*ao) or 0) + local r = luatexja.jfmglue.diffmet_rule((1-rb)*nb+rb*na, (1-ra)*nb+ra*na) + local ro = (r~=0) and floor(log(abs(r))/log264+0.0625) or 0 + return round(r/2.^(64*ro)), ro + end + end + local getglue = luatexja.getglue calc_ja_ja_aux = function (gb, ga, db, da) - if diffmet_rule ~= math.two_pleft and diffmet_rule ~= math.two_pright - and diffmet_rule ~= math.two_paverage then + if luatexja.jfmglue.diffmet_rule ~= math.two_pleft and diffmet_rule ~= math.two_pright + and luatexja.jfmglue.diffmet_rule ~= math.two_paverage then db, da = 0, 1 end if not gb then - if ga then - gb = node_new(id_kern, 1); setfield(gb, 'kern', 0) + if ga then gb = node_new(id_kern, 1); setfield(gb, 'kern', 0) else return nil end elseif not ga then ga = node_new(id_kern, 1); setfield(ga, 'kern', 0) end - - local k = 2*getid(gb) - getid(ga) - if k == bg_ag then - -- 両方とも glue. - setglue(gb, blend_diffmet( - getfield(gb, 'width'), getfield(ga, 'width'), db, da), - blend_diffmet( - getfield(gb, 'stretch'), getfield(ga, 'stretch'), db, da), - -blend_diffmet( - -getfield(gb, 'shrink'), -getfield(ga, 'shrink'), db, da)) - node_free(ga) - return gb - elseif k == bk_ak then - -- 両方とも kern. - setfield(gb, 'kern', blend_diffmet( - getfield(gb, 'kern'), getfield(ga, 'kern'), db, da)) - node_free(ga) - return gb - elseif k == bk_ag then - -- gb: kern, ga: glue - setglue(ga, blend_diffmet( - getfield(gb, 'kern'), getfield(ga, 'width'), db, da), - blend_diffmet( - 0, getfield(ga, 'stretch'), db, da), - -blend_diffmet( - 0, -getfield(ga, 'shrink'), db, da)) - node_free(gb) - return ga, 0, 0, 0 + local gbw, gaw, gbst, gast, gbsto, gasto, gbsh, gash, gbsho, gasho + if getid(gb)==id_glue then + gbw, gbst, gbsh, gbsto, gbsho = getglue(gb) else - -- gb: glue, ga: kern - setglue(gb, blend_diffmet( - getfield(gb, 'width'), getfield(ga, 'kern'), db, da), - blend_diffmet( - getfield(gb, 'stretch'), 0, db, da), - -blend_diffmet( - -getfield(gb, 'shrink'), 0, db, da)) - node_free(ga) - return gb + gbw = getfield(gb, 'kern') + end + if getid(ga)==id_glue then + gaw, gast, gash, gasto, gasho = getglue(ga) + else + gaw = getfield(ga, 'kern') + end + if not (gbst or gast) then -- 両方とも kern + setfield(gb, 'kern', blend_diffmet(gbw, gaw, db, da)) + node_free(ga); return gb + else + local gr = gb + if not gbst then gr = ga; node_free(gb) else node_free(ga) end + gbw = blend_diffmet(gbw or 0, gaw or 0, db, da) -- 結果の自然長 + gbst, gbsto = blend_diffmet_inf(gbst, gast, gbsto, gasto, db, da) -- 伸び + gbsh, gbsho = blend_diffmet_inf(-(gbsh or 0), -(gash or 0), gbsho, gasho, db, da) -- -(縮み) + setglue(gr, gbw, gbst, -gbsh, gbsto, gbsho) + return gr end end end @@ -801,13 +835,17 @@ end local null_skip_table = {0, 0, 0} -- get kanjiskip local get_kanjiskip, kanjiskip_jfm_flag +local get_kanjiskip_low local calc_ja_ja_glue do local KANJI_SKIP = luatexja.icflag_table.KANJI_SKIP local KANJI_SKIP_JFM = luatexja.icflag_table.KANJI_SKIP_JFM get_kanjiskip_low = function(flag, qm, bn, bp, bh) - if flag or (qm.with_kanjiskip and (bn or bp or bh)) then + -- flag = false: kanjiskip そのもの(パラメータ or JFM) + -- ノード kanji_skip のコピーで良い場合は nil が帰る + -- flag = true: JFM グルーに付随する kanjiskip 自然長/伸び/縮み分 + if qm.with_kanjiskip and (bn or bp or bh) then if kanjiskip_jfm_flag then local g = node_new(id_glue); local bk = qm.kanjiskip or null_skip_table @@ -817,14 +855,14 @@ do set_attr(g, attr_icflag, KANJI_SKIP_JFM) return g elseif flag then - return node_copy(kanji_skip) - else - local g = node_new(id_glue); + local g = node_new(id_glue) + local st = bp and (bp*getfield(kanji_skip, 'stretch')) or 0 + local sh = bh and (bh*getfield(kanji_skip, 'shrink')) or 0 setglue(g, bn and (bn*getfield(kanji_skip, 'width')) or 0, - bp and (bp*getfield(kanji_skip, 'stretch')) or 0, - bh and (bh*getfield(kanji_skip, 'shrink')) or 0, - 0, 0) + st, sh, + (st==0) and 0 or getfield(kanji_skip, 'stretch_order'), + (sh==0) and 0 or getfield(kanji_skip, 'shrink_order')) set_attr(g, attr_icflag, KANJI_SKIP_JFM) return g end @@ -832,16 +870,24 @@ do end get_kanjiskip = function() - if Np.auto_kspc or Nq.auto_kspc then + if Np.auto_kspc==0 or Nq.auto_kspc==0 then + return nil + elseif Np.auto_kspc or Nq.auto_kspc then local pm, qm = Np.met, Nq.met if (pm.char_type==qm.char_type) and (qm.var==pm.var) then - return get_kanjiskip_low(true, qm, 1, 1, 1) + return get_kanjiskip_low(false, qm, 1, 1, 1) or node_copy(kanji_skip) else - local gb = get_kanjiskip_low(true, qm, 1, 1, 1) - local ga = get_kanjiskip_low(true, pm, 1, 1, 1) - return calc_ja_ja_aux(gb, ga, 0, 1) + local gb = get_kanjiskip_low(false, qm, 1, 1, 1) + if gb then + return calc_ja_ja_aux(gb, + get_kanjiskip_low(false, pm, 1, 1, 1) or node_copy(kanji_skip), 0, 1) + else + local ga = get_kanjiskip_low(false, pm, 1, 1, 1) + return (ga and calc_ja_ja_aux(node_copy(kanji_skip), ga, 0, 1)) + or node_copy(kanji_skip) + end end - else + else local g = node_new(id_glue) set_attr(g, attr_icflag, kanjiskip_jfm_flag and KANJI_SKIP_JFM or KANJI_SKIP) return g @@ -853,7 +899,7 @@ do local qmc, pmc = qm.char_type, pm.char_type if (qmc==pmc) and (qm.var==pm.var) then local g, _, kn, kp, kh = new_jfm_glue(qmc, Nq.class, Np.class) - return g, (Np.auto_kspc or Nq.auto_kspc) and get_kanjiskip_low(false, qm, kn, kp, kh) + return g, (Np.auto_kspc or Nq.auto_kspc) and get_kanjiskip_low(true, qm, kn, kp, kh) else local npn, nqn = Np.nuc, Nq.nuc local gb, db, bn, bp, bh @@ -867,11 +913,11 @@ do Np.class) local g = calc_ja_ja_aux(gb, ga, db, da) local k - if (pmc==qmc) and (qm.var==pm.var) then - gb = get_kanjiskip_low(false, qm, bn, bp, bh) - ga = get_kanjiskip_low(false, pm, an, ap, ah) - k = calc_ja_ja_aux(gb, ga, db, da) - end + --if (pmc==qmc) and (qm.var==pm.var) then + gb = get_kanjiskip_low(true, qm, bn, bp, bh) + ga = get_kanjiskip_low(true, pm, an, ap, ah) + k = calc_ja_ja_aux(gb, ga, db, da) + --end return g, k end end @@ -882,6 +928,7 @@ end -- get xkanjiskip local get_xkanjiskip, xkanjiskip_jfm_flag local get_xkanjiskip_normal, get_xkanjiskip_jfm +local get_xkanjiskip_low do local XKANJI_SKIP = luatexja.icflag_table.XKANJI_SKIP local XKANJI_SKIP_JFM = luatexja.icflag_table.XKANJI_SKIP_JFM @@ -904,7 +951,8 @@ do bn and (bn*getfield(xkanji_skip, 'width')) or 0, bp and (bp*getfield(xkanji_skip, 'stretch')) or 0, bh and (bh*getfield(xkanji_skip, 'shrink')) or 0, - 0, 0) + bp and getfield(xkanji_skip, 'stretch_order') or 0, + bh and getfield(xkanji_skip, 'shrink_order') or 0) set_attr(g, attr_icflag, XKANJI_SKIP_JFM) return g end @@ -912,7 +960,9 @@ do end get_xkanjiskip = function(Nn) - if (Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc) then + if Np.auto_xspc==0 or Nq.auto_xspc==0 then + return nil + elseif (Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc) then return get_xkanjiskip_low(true, Nn.met, 1, 1, 1) else local g = node_new(id_glue) @@ -924,18 +974,44 @@ end -------------------- 隣接した「塊」間の処理 +local function combine_spc(name) + return (Np[name] or Nq[name]) and ((Np[name]~=0) and (Nq[name]~=0)) +end + +-- NA, NB: alchar or math +local function get_NA_skip() + local pm = Np.met + local g, _, kn, kp, kh = new_jfm_glue( + pm.char_type, + fast_find_char_class( + (Nq.id == id_math and -1 or (Nq.xspc>=2 and 'alchar' or 'nox_alchar')), pm), + Np.class) + local k = ((Nq.xspc>=2) and (Np.xspc%2==1) and combine_spc('auto_xspc')) + and get_xkanjiskip_low(false, pm, kn, kp, kh) + return g, k +end +local function get_NB_skip() + local qm = Nq.met + local g, _, kn, kp, kh = new_jfm_glue( + qm.char_type, Nq.class, + fast_find_char_class( + (Np.id == id_math and -1 or (Np.xspc%2==1 and 'alchar' or 'nox_alchar')), qm) + ) + local k = ((Nq.xspc>=2) and (Np.xspc%2==1) and combine_spc('auto_xspc')) + and get_xkanjiskip_low(false, qm, kn, kp, kh) + return g, k +end + local function get_OA_skip(is_kanji) local pm = Np.met local g, _, kn, kp, kh = new_jfm_glue( pm.char_type, - fast_find_char_class((Nq.id == id_math and -1 or 'jcharbdd'), pm), + fast_find_char_class( + (((Nq.id==id_glue)or(Nq.id==id_kern)) and 'glue' or 'jcharbdd'), pm), Np.class) local k if is_kanji==0 then - k = (Np.auto_kspc or Nq.auto_kspc) and get_kanjiskip_low(false, pm, kn, kp, kh) - elseif is_kanji==1 then - k = ((Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc)) - and get_xkanjiskip_low(false, pm, kn, kp, kh) + k = combine_spc('auto_kspc') and get_kanjiskip_low(true, pm, kn, kp, kh) end return g, k end @@ -943,13 +1019,11 @@ local function get_OB_skip(is_kanji) local qm = Nq.met local g, _, kn, kp, kh = new_jfm_glue( qm.char_type, Nq.class, - fast_find_char_class((Np.id == id_math and -1 or'jcharbdd'), qm)) + fast_find_char_class( + (((Np.id==id_glue)or(Np.id==id_kern)) and 'glue' or 'jcharbdd'), qm)) local k if is_kanji==0 then - k = (Np.auto_kspc or Nq.auto_kspc) and get_kanjiskip_low(false, qm, kn, kp, kh) - elseif is_kanji==1 then - k = ((Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc)) - and get_xkanjiskip_low(false, qm, kn, kp, kh) + k = combine_spc('auto_kspc') and get_kanjiskip_low(true, qm, kn, kp, kh) end return g, k end @@ -970,7 +1044,7 @@ local function handle_np_jachar(mode) handle_penalty_normal(0, Np.pre, g); real_insert(g); real_insert(k) elseif Nq.pre then local g, k - if non_ihb_flag then g, k = get_OA_skip(1) end -- O_A->X + if non_ihb_flag then g, k = get_NA_skip() end -- N_A->X if not g then g = get_xkanjiskip(Np) end handle_penalty_normal((qid==id_hlist and 0 or Nq.post), Np.pre, g); real_insert(g); real_insert(k) @@ -991,7 +1065,7 @@ end -- jachar .. (anything) local function handle_nq_jachar() if Np.pre then - local g = non_ihb_flag and get_OB_skip(1) or get_xkanjiskip(Nq) -- O_B->X + local g = non_ihb_flag and get_NB_skip() or get_xkanjiskip(Nq) -- N_B->X handle_penalty_normal(Nq.post, (Np.id==id_hlist and 0 or Np.pre), g); real_insert(g) else local g =non_ihb_flag and (get_OB_skip()) -- O_B @@ -1028,6 +1102,7 @@ end -- Nq が前側のクラスタとなることによる修正 +local adjust_nq do local adjust_nq_aux = { [id_glyph] = function() after_alchar(Nq) end, -- after_alchar(Nq) @@ -1040,7 +1115,7 @@ do end, } - function adjust_nq() + adjust_nq=function() local x = adjust_nq_aux[Nq.id] if x then x() end end @@ -1178,8 +1253,10 @@ end -------------------- 外部から呼ばれる関数 -- main interface -function main(ahead, mode, dir) +function luatexja.jfmglue.main(ahead, mode, dir) if not ahead then return ahead end + --luatexja.ext_show_node_list(to_node(ahead ), '>B ', print) + --print() head = ahead; local lp, last, par_indented, TEMP = init_var(mode,dir) lp = calc_np(last, lp) @@ -1203,19 +1280,21 @@ function main(ahead, mode, dir) end handle_list_tail(mode, last) end + --luatexja.ext_show_node_list(to_node(ahead ), '>A ', print) + --print() return cleanup(mode, TEMP) end end do - local IHB = luatexja.userid_table.IHB + local IHB = luatexja.userid_table.IHB local BPAR = luatexja.userid_table.BPAR local BOXB = luatexja.userid_table.BOXB local node_prev = node.direct.getprev local node_write = node.direct.write -- \inhibitglue - function create_inhibitglue_node() + function luatexja.jfmglue.create_inhibitglue_node() local tn = node_new(id_whatsit, sid_user) setfield(tn, 'user_id', IHB) setfield(tn, 'type', 100) @@ -1225,7 +1304,7 @@ do -- Node for indicating beginning of a paragraph -- (for ltjsclasses) - function create_beginpar_node() + function luatexja.jfmglue.create_beginpar_node() local tn = node_new(id_whatsit, sid_user) setfield(tn, 'user_id', BPAR) setfield(tn, 'type', 100) @@ -1234,7 +1313,7 @@ do end -- Node for indicating a head/end of a box - function create_boxbdd_node() + function luatexja.jfmglue.create_boxbdd_node() local tn = node_new(id_whatsit, sid_user) setfield(tn, 'user_id', BOXB) setfield(tn, 'type', 100) @@ -1251,10 +1330,10 @@ do Np.first = lp; Np.nuc = lp; Np.last = lp if Nq then if Nq.met then - Np.class = fast_find_char_class('parbdd', Nq.met) + Np.class = fast_find_char_class('boxbdd', Nq.met) end Np.met = Nq.met; Np.pre = 0; Np.post = 0; Np.xspc = 0 - Np.auto_xspc = false + Np.auto_xspc, Np.auto_kspc = 0, 0 end return Np else @@ -1271,7 +1350,7 @@ do Nq.class = fast_find_char_class('parbdd', Np.met) end Nq.met = Np.met; Nq.pre = 0; Nq.post = 0; Nq.xspc = 0 - Nq.auto_xspc = false + Nq.auto_xspc, Nq.auto_kspc = 0, 0 end head = node_remove(head, y) node_free(y) @@ -1283,7 +1362,7 @@ do Nq.class = fast_find_char_class('boxbdd', Np.met) end Nq.met = Np.met; Nq.pre = 0; Nq.post = 0; Nq.xspc = 0 - Nq.auto_xspc = false + Nq.auto_xspc, Nq.auto_kspc = 0, 0 end head = node_remove(head, y) node_free(y) @@ -1297,3 +1376,6 @@ do "luatexja.beginpar.np_info_after", 1) end + +luatexja.jfmglue.after_hlist = after_hlist +luatexja.jfmglue.check_box_high = check_box_high