X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fltj-ruby.lua;h=6ab3d1c10fdc4dfaa493feb8f535395b3667cdae;hb=3fae82d64b193c794fdf2f1262d80bddc98ce5a8;hp=897a39005c5cac3c51baf988a99d39c998192d1b;hpb=c72bf6803b32910786d62b8cd329acbaedbcc157;p=luatex-ja%2Fluatexja.git diff --git a/src/ltj-ruby.lua b/src/ltj-ruby.lua index 897a390..6ab3d1c 100644 --- a/src/ltj-ruby.lua +++ b/src/ltj-ruby.lua @@ -3,7 +3,7 @@ -- luatexbase.provides_module({ name = 'luatexja.ruby', - date = '2018/02/18', + date = '2018/09/29', description = 'Ruby annotation', }) luatexja.ruby = {} @@ -67,6 +67,7 @@ luatexja.userid_table.RUBY_PRE = luatexbase.newuserwhatsitid('ruby_pre', 'luate luatexja.userid_table.RUBY_POST = luatexbase.newuserwhatsitid('ruby_post', 'luatexja') local RUBY_PRE = luatexja.userid_table.RUBY_PRE local RUBY_POST = luatexja.userid_table.RUBY_POST +local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG ---------------------------------------------------------------- -- TeX interface 0 @@ -118,7 +119,8 @@ end -- 実行回数 + ルビ中身 から uniq_id を作る関数 -local old_break_info = {} -- public, 前 run 時の分割情報 +luatexja.ruby.old_break_info = {} -- public, 前 run 時の分割情報 +local old_break_info = luatexja.ruby.old_break_info local cache_handle function luatexja.ruby.read_old_break_info() if tex.jobname then @@ -143,6 +145,9 @@ end local concat do local node_prev = node.direct.getprev + local function get_attr_icflag(p) + return (has_attr(p, attr_icflag) or 0) % PROCESSED_BEGIN_FLAG + end function concat(f, b) if f then if b then @@ -150,6 +155,8 @@ do if getid(nh)==id_whatsit and getsubtype(nh)==sid_user then nh=node_next(nh); node_free(node_prev(nh)) end + set_attr(nh, attr_icflag, + get_attr_icflag(nh) + PROCESSED_BEGIN_FLAG) setfield(node_tail(h), 'next', nh) setfield(f, 'head', nil); node_free(f) setfield(b, 'head', nil); node_free(b) @@ -201,7 +208,7 @@ do local hh, hd = getfield(box, 'height'), getfield(box, 'depth') local hx = h while hx do - local hic = has_attr(hx, attr_icflag) + local hic = has_attr(hx, attr_icflag) or 0 if (hic == KANJI_SKIP) or (hic == KANJI_SKIP_JFM) or (hic == XKANJI_SKIP) or (hic == XKANJI_SKIP_JFM) or ((hic<=FROM_JFM+63) and (hic>=FROM_JFM)) then @@ -251,6 +258,7 @@ local function texiface_low(rst, rtlr, rtlp) setfield(w, 'value', to_node(wv)) setfield(wv, 'type', 100) setfield(wv, 'value', floor(#rtlr)) + setfield(wv, 'user_id', RUBY_PRE) -- dummy set_attr(wv, attr_ruby, rst.rubyzw) set_attr(wv, attr_ruby_maxmargin, rst.maxmargin) set_attr(wv, attr_ruby_maxprep, rst.pre)