OSDN Git Service

Merge branch 'master' into kitagawa_test
[luatex-ja/luatexja.git] / src / ltj-otf.lua
index ea92d60..75494d6 100644 (file)
@@ -158,15 +158,10 @@ local function extract(head)
    return to_node(head)
 end
 
-luatexbase.add_to_callback('hpack_filter', extract,
-                          'ltj.otf',
-   luatexbase.priority_in_callback('pre_linebreak_filter',
-                                  'ltj.main'))
-luatexbase.add_to_callback('pre_linebreak_filter', extract,
-                          'ltj.otf',
-   luatexbase.priority_in_callback('pre_linebreak_filter',
-                                  'ltj.main'))
-
+ltjb.add_to_callback('hpack_filter', extract,'ltj.otf',
+  luatexbase.priority_in_callback('hpack_filter', 'ltj.main'))
+ltjb.add_to_callback('pre_linebreak_filter', extract,'ltj.otf',
+  luatexbase.priority_in_callback('pre_linebreak_filter', 'ltj.main'))
 -- additional callbacks
 -- 以下は,LuaTeX-ja に用意された callback のサンプルになっている.
 --   JFM の文字クラスの指定の所で,"AJ1-xxx" 形式での指定を可能とした.
@@ -209,7 +204,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
 -- 組版時
@@ -231,13 +226,13 @@ do
       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
                   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)
@@ -273,22 +268,26 @@ do
         ltjb.package_warning('luatexja-otf',
                              'luatexja.otf.enable_ivs() was already called, so this call is ignored', '')
       else
-        luatexbase.add_to_callback('hpack_filter',
-                                   do_ivs_repr, 'ltj.do_ivs', 
-                                   luatexbase.priority_in_callback('hpack_filter',
-                                                                   'ltj.set_stack_level')+1)
-        luatexbase.add_to_callback('pre_linebreak_filter',
-                                   do_ivs_repr, 'ltj.do_ivs', 
-                                   luatexbase.priority_in_callback('pre_linebreak_filter',
-                                                                   'ltj.set_stack_level')+1)
+        ltjb.add_to_callback('hpack_filter', do_ivs_repr, 'ltj.do_ivs',
+            luatexbase.priority_in_callback('hpack_filter', 'luaotfload.node_processor'))
+        ltjb.add_to_callback('pre_linebreak_filter', do_ivs_repr, 'ltj.do_ivs',
+            luatexbase.priority_in_callback('pre_linebreak_filter', 'luaotfload.node_processor'))
         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,
 }