summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua')
-rw-r--r--Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua43
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,
}