From a924c7fa71a6a8d8023a536ff84bbbb27b596145 Mon Sep 17 00:00:00 2001 From: Hironori Kitagawa Date: Fri, 18 Mar 2016 16:28:42 +0900 Subject: [PATCH] LuaTeX 0.89 separated \/ and explicit \kern --- src/ltj-jfmglue.lua | 17 +++++++++++------ src/ltj-jfont.lua | 18 +++++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/ltj-jfmglue.lua b/src/ltj-jfmglue.lua index a63c270..7edd5bc 100644 --- a/src/ltj-jfmglue.lua +++ b/src/ltj-jfmglue.lua @@ -283,8 +283,8 @@ do local traverse = Dnode.traverse local function check_next_ickern(lp) - if lp and getid(lp) == id_kern and ITALIC == get_attr_icflag(lp) then - set_attr(lp, attr_icflag, IC_PROCESSED) + 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 @@ -366,7 +366,7 @@ local function calc_np_aux_glyph_common(lp) lx = node_next(node_next(lx)) elseif ls==0 then Np.last = lx - elseif (ls==1 and lai==ITALIC) then + elseif (ls==3) or (lai==ITALIC) then Np.last = lx; set_attr(lx, attr_icflag, IC_PROCESSED) else lp=lx; break @@ -519,7 +519,11 @@ local calc_np_auxtable = { end, } calc_np_auxtable[id_rule] = calc_np_auxtable.box_like -calc_np_auxtable[13] = calc_np_auxtable.box_like +if status.luatex_version>=85 then + calc_np_auxtable[15] = calc_np_auxtable.box_like +else + calc_np_auxtable[13] = calc_np_auxtable.box_like +end calc_np_auxtable[id_ins] = calc_np_auxtable.skip calc_np_auxtable[id_mark] = calc_np_auxtable.skip calc_np_auxtable[id_adjust] = calc_np_auxtable.skip @@ -541,7 +545,7 @@ function calc_np(last, lp) for k = 1,#Bp do Bp[k] = nil end while lp ~= last do local lpa = has_attr(lp, attr_icflag) or 0 - -- unbox 由来ノードの検出 + -- unbox 由来ノードの検出 if lpa>=PACKED then if lpa%PROCESSED_BEGIN_FLAG == BOXBDD then local lq = node_next(lp) @@ -1196,7 +1200,8 @@ function main(ahead, mode, dir) lp = calc_np(last, lp) if Np then handle_list_head(par_indented) - lp = calc_np(last,lp); while Np do + lp = calc_np(last,lp); + while Np do adjust_nq(); local pid, pm = Np.id, Np.met -- 挿入部 diff --git a/src/ltj-jfont.lua b/src/ltj-jfont.lua index 3679ad1..f097736 100644 --- a/src/ltj-jfont.lua +++ b/src/ltj-jfont.lua @@ -950,7 +950,17 @@ do local ensure_tex_attr = ltjb.ensure_tex_attr local node_write = Dnode.write local font = font - local ITALIC = luatexja.icflag_table.ITALIC + local new_ic_kern + if status.luatex_version>=89 then + new_ic_kern = function(g) return node_new(id_kern,3) end + else + local ITALIC = luatexja.icflag_table.ITALIC + new_ic_kern = function() + local g = node(id_kern) + setfield(g, 'subtype', 1); set_attr(g, attr_icflag, ITALIC) + return g + end + end -- EXT: italic correction function append_italic() local p = to_direct(tex.nest[tex.nest.ptr].tail) @@ -960,16 +970,14 @@ do local j = font_metric_table[ has_attr(p, (get_dir_count()==dir_tate) and attr_curtfnt or attr_curjfnt) ] - local g = node_new(id_kern) - setfield(g, 'subtype', 1); set_attr(g, attr_icflag, ITALIC) + local g = new_ic_kern() setfield(g, 'kern', j.char_type[find_char_class(getchar(p), j)].italic) node_write(g); ensure_tex_attr(attr_icflag, 0) else local f = getfont(p) local h = font_getfont(f) or font.fonts[f] if h then - local g = node_new(id_kern) - setfield(g, 'subtype', 1); set_attr(g, attr_icflag, ITALIC) + local g = new_ic_kern() if h.characters[getchar(p)] and h.characters[getchar(p)].italic then setfield(g, 'kern', h.characters[getchar(p)].italic) node_write(g); ensure_tex_attr(attr_icflag, 0) -- 2.11.0