diff options
author | Karl Berry <karl@freefriends.org> | 2016-01-31 23:45:28 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-01-31 23:45:28 +0000 |
commit | 326c162a7ec8088d104101b4739c727d824ae5f7 (patch) | |
tree | b361de0cef7c47e209b56e053f1ec957a38526fb /Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua | |
parent | a05d0c546c309991c96cf6aed49902bf5d60f66c (diff) |
luatexja (31jan16)
git-svn-id: svn://tug.org/texlive/trunk@39527 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua')
-rw-r--r-- | Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua b/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua index 94f4c613342..ed1a1975320 100644 --- a/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua +++ b/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua @@ -159,14 +159,13 @@ local function extract(head) end luatexbase.add_to_callback('hpack_filter', extract, - 'ltj.hpack_filter_otf', + 'ltj.otf', luatexbase.priority_in_callback('pre_linebreak_filter', - 'ltj.pre_linebreak_filter')) + 'ltj.main')) luatexbase.add_to_callback('pre_linebreak_filter', extract, - 'ltj.pre_linebreak_filter_otf', + 'ltj.otf', luatexbase.priority_in_callback('pre_linebreak_filter', - 'ltj.pre_linebreak_filter')) - + 'ltj.main')) -- additional callbacks -- 以下は,LuaTeX-ja に用意された callback のサンプルになっている. @@ -210,7 +209,7 @@ luatexbase.add_to_callback("luatexja.find_char_class", cid_set_char_class, "ltj.otf.find_char_class", 1) -------------------- IVS -local enable_ivs +local enable_ivs, disable_ivs do local is_ivs_enabled = false -- 組版時 @@ -222,23 +221,23 @@ do return p end - local function do_ivs_repr(head) - head = to_direct(head) + local function do_ivs_repr(h) + local head = to_direct(h) local p, r = head - local is_dir_tate = ltjs.list_dir == dir_tate + local is_dir_tate = (ltjs.list_dir == dir_tate) local attr_ablshift = is_dir_tate and attr_tablshift or attr_yablshift local attr_kblshift = is_dir_tate and attr_tkblshift or attr_ykblshift local attr_curfnt = is_dir_tate and attr_curtfnt or attr_curjfnt while p do local pid = getid(p) if pid==id_glyph then - local pf = getfont(p) local q = node_next(p) -- the next node of p if q and getid(q)==id_glyph then local qc = getchar(q) if (qc>=0xFE00 and qc<=0xFE0F) or (qc>=0xE0100 and qc<0xE01F0) then - -- q is a variation selector + -- q is a variation selector if qc>=0xE0100 then qc = qc - 0xE0100 end + local pf = getfont(p) local pt = ltjf_font_extra_info[pf] pt = pt and pt[getchar(p)]; pt = pt and pt[qc] head, r = node_remove(head,q) @@ -254,7 +253,7 @@ do head = node_insert_after(head, p, np) head = node_remove(head,p) node_free(p) - end + end p = r else p = q @@ -265,8 +264,8 @@ do else p = node_next(p) end - end - return to_node(head) + end + return to_node(head) end enable_ivs = function () @@ -275,21 +274,29 @@ do 'luatexja.otf.enable_ivs() was already called, so this call is ignored', '') else luatexbase.add_to_callback('hpack_filter', - do_ivs_repr,'do_ivs', + do_ivs_repr, 'ltj.do_ivs', luatexbase.priority_in_callback('hpack_filter', - 'ltj.hpack_filter_pre')+1) + 'ltj.set_stack_level')+1) luatexbase.add_to_callback('pre_linebreak_filter', - do_ivs_repr, 'do_ivs', + do_ivs_repr, 'ltj.do_ivs', luatexbase.priority_in_callback('pre_linebreak_filter', - 'ltj.pre_linebreak_filter_pre')+1) + 'ltj.set_stack_level')+1) is_ivs_enabled = true end end + disable_ivs = function () + if is_ivs_enabled then + luatexbase.remove_from_callback('hpack_filter', 'ltj.do_ivs') + luatexbase.remove_from_callback('pre_linebreak_filter', 'ltj.do_ivs') + is_ivs_enabled = false + end + end end luatexja.otf = { append_jglyph = append_jglyph, enable_ivs = enable_ivs, -- 隠し機能: IVS + disable_ivs = disable_ivs, -- 隠し機能: IVS cid = cid, } |