From: Hironori Kitagawa Date: Sun, 11 Oct 2015 23:00:46 +0000 (+0900) Subject: small optimize X-Git-Tag: 20151025.0~8 X-Git-Url: http://git.osdn.jp/view?a=commitdiff_plain;h=cd47cbb8581fedb03c2f9b7cb1607b68c858a2a0;p=luatex-ja%2Fluatexja.git small optimize --- diff --git a/doc/luatexja.dtx b/doc/luatexja.dtx index 1994d0a..2dacc77 100644 --- a/doc/luatexja.dtx +++ b/doc/luatexja.dtx @@ -24,6 +24,7 @@ %%%%%%%% fonts \usepackage{luatexja-otf} \directlua{luatexja.otf.enable_ivs()} +\expandafter\let\csname xetex_suppressfontnotfounderror:D\endcsname\suppressfontnotfounderror \usepackage[match]{luatexja-fontspec} \usepackage[kozuka-pr6n]{luatexja-preset} \usepackage{unicode-math} @@ -5051,7 +5052,7 @@ This callback is called when \LuaTeX-ja is trying to encapsule a その\textit{glyph\_node}をカプセル化しようとする際に呼び出される. % \begin{lstlisting}[numbers=left] -function ( shift_info,
jfont_info, char_class) +function (
shift_info,
jfont_info,
char_type) return
new_shift_info end \end{lstlisting} @@ -5090,7 +5091,7 @@ Then, the position of glyphs is shifted up by (和文OpenTypeフォントの標準値) \item 実フォント側の数値:$(\hbox{高さ})=28y$, $(\hbox{深さ})=5y$(和文TrueTypeフォントの標準値) \end{itemize} -となっていたとする.すると,実際の文字の出力位置は,以下の量だけ上にぜらされることとなる: +となっていたとする.すると,実際の文字の出力位置は,以下の量だけ上にずらされることとなる: % \[ \frac{88x}{88x+12x} (28y+5y) - 28y = \frac{26}{25}y= 1.04y. diff --git a/src/ltj-jfmglue.lua b/src/ltj-jfmglue.lua index a3b4a51..11f648b 100644 --- a/src/ltj-jfmglue.lua +++ b/src/ltj-jfmglue.lua @@ -319,9 +319,9 @@ local function calc_np_aux_glyph_common(lp) Np.first= (Np.first or lp) if getfield(lp, 'lang') == lang_ja then Np.id = id_jglyph - local m, cls = set_np_xspc_jachar(Np, lp) + local m, mc, cls = set_np_xspc_jachar(Np, lp) local npi, npf - lp, head, npi, npf = capsule_glyph(lp, m, cls, head, tex_dir, lp) + lp, head, npi, npf = capsule_glyph(lp, m, mc[cls], head, tex_dir) Np.first = (Np.first~=Np.nuc) and Np.first or npf or npi Np.nuc = npi return true, check_next_ickern(lp); @@ -567,6 +567,7 @@ do c = c or c_glyph local cls = slow_find_char_class(c, m, c_glyph) Nx.met, Nx.class, Nx.char = m, cls, c; + local mc = m.char_type; Nx.char_type = mc if cls~=0 then set_attr(x, attr_jchar_class, cls) end if c~=c_glyph then set_attr(x, attr_jchar_code, c) end Nx.pre = table_current_stack[PRE + c] or 0 @@ -574,12 +575,13 @@ do Nx.xspc = table_current_stack[XSP + c] or 3 Nx.kcat = table_current_stack[KCAT + c] or 0 Nx.auto_kspc, Nx.auto_xspc = (has_attr(x, attr_autospc)==1), (has_attr(x, attr_autoxspc)==1) - return m, cls + return m, mc, cls end function set_np_xspc_jachar_hbox(Nx, x) local m = ltjf_font_metric_table[getfont(x)] local c = has_attr(x, attr_jchar_code) or getchar(x) Nx.met, Nx.char = m, c; Nx.class = has_attr(x, attr_jchar_class) or 0; + local mc = m.char_type; Nx.char_type = mc Nx.pre = table_current_stack[PRE + c] or 0 Nx.post = table_current_stack[POST + c] or 0 Nx.xspc = table_current_stack[XSP + c] or 3 @@ -682,9 +684,9 @@ local function handle_penalty_suppress(post, pre, g) end -- 和文文字間の JFM glue を node 化 -local function new_jfm_glue(m, bc, ac) +local function new_jfm_glue(mc, bc, ac) -- bc, ac: char classes - local g = m.char_type[bc][ac] + local g = mc[bc][ac] if g then if g[1] then local f = node_new(id_glue) @@ -832,23 +834,24 @@ do calc_ja_ja_glue = function () local qm, pm = Nq.met, Np.met - if (qm.char_type==pm.char_type) and (qm.var==pm.var) then - local g, _, kn, kp, kh = new_jfm_glue(qm, Nq.class, Np.class) + 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) else local npn, nqn = Np.nuc, Nq.nuc local gb, db, bn, bp, bh - = new_jfm_glue(qm, Nq.class, + = new_jfm_glue(qmc, Nq.class, slow_find_char_class(Np.char, qm, getchar(npn))) local ga, da, an, ap, ah - = new_jfm_glue(pm, + = new_jfm_glue(pmc, slow_find_char_class(Nq.char, pm, getchar(nqn)), Np.class) local g = calc_ja_ja_aux(gb, ga, db, da) local k - if (pm.char_type==qm.char_type) and (qm.var==pm.var) then + 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) @@ -913,7 +916,7 @@ end local function get_OA_skip(is_kanji) local pm = Np.met local g, _, kn, kp, kh = new_jfm_glue( - pm, + pm.char_type, fast_find_char_class((Nq.id == id_math and -1 or 'jcharbdd'), pm), Np.class) local k @@ -928,7 +931,7 @@ end local function get_OB_skip(is_kanji) local qm = Nq.met local g, _, kn, kp, kh = new_jfm_glue( - qm, Nq.class, + qm.char_type, Nq.class, fast_find_char_class((Np.id == id_math and -1 or'jcharbdd'), qm)) local k if is_kanji==0 then @@ -1051,7 +1054,7 @@ local function handle_list_tail(mode) -- the current list is the contents of a hbox local npi, pm = Np.id, Np.met if npi == id_jglyph or (npi==id_pbox and pm) then - local g = new_jfm_glue(pm, Np.class, fast_find_char_class('boxbdd', pm)) + local g = new_jfm_glue(pm.char_type, Np.class, fast_find_char_class('boxbdd', pm)) if g then set_attr(g, attr_icflag, BOXBDD) head = insert_after(head, Np.last, g) @@ -1065,7 +1068,7 @@ local function handle_list_head(par_indented) local npi, pm = Np.id, Np.met if npi == id_jglyph or (npi==id_pbox and pm) then if non_ihb_flag then - local g = new_jfm_glue(pm, fast_find_char_class(par_indented, pm), Np.class) + local g = new_jfm_glue(pm.char_type, fast_find_char_class(par_indented, pm), Np.class) if g then set_attr(g, attr_icflag, BOXBDD) if getid(g)==id_glue and #Bp==0 then diff --git a/src/ltj-math.lua b/src/ltj-math.lua index 15813fc..3ea3d4c 100644 --- a/src/ltj-math.lua +++ b/src/ltj-math.lua @@ -152,7 +152,7 @@ function (p, sty) set_attr(r, attr_ykblshift, 0) -- ltj-setwidth 内で実際の位置補正はおこなうので,補正量を退避 local met = ltjf_font_metric_table[f] - r = capsule_glyph_math(r, met, ltjf_find_char_class(pc, met)); + r = capsule_glyph_math(r, met, met.char_type[ltjf_find_char_class(pc, met)]); setfield(q, 'head', r); node_free(p); p=q; set_attr(r, attr_yablshift, k) end diff --git a/src/ltj-setwidth.lua b/src/ltj-setwidth.lua index 1d4da31..390b1ca 100644 --- a/src/ltj-setwidth.lua +++ b/src/ltj-setwidth.lua @@ -65,7 +65,7 @@ local ltjw = {} --export luatexja.setwidth = ltjw luatexbase.create_callback("luatexja.set_width", "data", - function (fstable, fmtable, jchar_class) + function (fstable, fmtable, char_data) return fstable end) local call_callback = luatexbase.call_callback @@ -75,14 +75,13 @@ local fshift = { down = 0, left = 0} local min, max = math.min, math.max -- 和文文字の位置補正(横) -local function capsule_glyph_yoko(p, met, class, head, dir) - local char_data = met.char_type[class] +local function capsule_glyph_yoko(p, met, char_data, head, dir) if not char_data then return node_next(p), head, p end -- f*: whd specified in JFM local fwidth, pwidth = char_data.width, getfield(p, 'width') fwidth = (fwidth ~= 'prop') and fwidth or pwidth fshift.down = char_data.down; fshift.left = char_data.left - fshift = call_callback("luatexja.set_width", fshift, met, class) + fshift = call_callback("luatexja.set_width", fshift, met, char_data) local fheight, fdepth = char_data.height, char_data.depth local kbl = has_attr(p, attr_ykblshift) or 0 -- @@ -133,8 +132,7 @@ end luatexja.setwidth.capsule_glyph_yoko = capsule_glyph_yoko -- 和文文字の位置補正(縦) -local function capsule_glyph_tate(p, met, class, head, dir) - local char_data = met.char_type[class] +local function capsule_glyph_tate(p, met, char_data, head, dir) if not char_data then return node_next(p), head end local ascent, descent = met.ascent, met.descent local fwidth, pwidth = char_data.width @@ -150,7 +148,7 @@ local function capsule_glyph_tate(p, met, class, head, dir) end fwidth = (fwidth ~= 'prop') and fwidth or pwidth fshift.down = char_data.down; fshift.left = char_data.left - fshift = call_callback("luatexja.set_width", fshift, met, class) + fshift = call_callback("luatexja.set_width", fshift, met, char_data) local fheight, fdepth = char_data.height, char_data.depth local y_shift @@ -186,16 +184,15 @@ local function capsule_glyph_tate(p, met, class, head, dir) end luatexja.setwidth.capsule_glyph_tate = capsule_glyph_tate -local function capsule_glyph_math(p, met, class) - local char_data = met.char_type[class] +local function capsule_glyph_math(p, met, char_data) if not char_data then return nil end local fwidth, pwidth = char_data.width, getfield(p, 'width') fwidth = (fwidth ~= 'prop') and fwidth or pwidth fshift.down = char_data.down; fshift.left = char_data.left - fshift = call_callback("luatexja.set_width", fshift, met, class) + fshift = call_callback("luatexja.set_width", fshift, met, char_data) local fheight, fdepth = char_data.height, char_data.depth - local y_shift, ca - = - getfield(p, 'yoffset') + (has_attr(p,attr_ykblshift) or 0), char_data.align + local y_shift + = - getfield(p, 'yoffset') + (has_attr(p,attr_ykblshift) or 0) setfield(p, 'yoffset', -fshift.down) setfield(p, 'xoffset', getfield(p, 'xoffset') + char_data.align*(fwidth-pwidth) - fshift.left) local box = node_new(id_hlist); diff --git a/src/luatexja.lua b/src/luatexja.lua index 2125969..940ed21 100644 --- a/src/luatexja.lua +++ b/src/luatexja.lua @@ -1,5 +1,6 @@ require('lualibs') +tableunpack = table.unpack ------------------------------------------------------------------------ -- naming: