OSDN Git Service

Merge branch 'master' into kitagawa_test
[luatex-ja/luatexja.git] / src / ltj-otf.lua
index 6e0711b..75494d6 100644 (file)
@@ -47,7 +47,7 @@ local attr_yablshift = luatexbase.attributes['ltj@yablshift']
 local attr_ykblshift = luatexbase.attributes['ltj@ykblshift']
 local attr_tablshift = luatexbase.attributes['ltj@tablshift']
 local attr_tkblshift = luatexbase.attributes['ltj@tkblshift']
-local lang_ja = token.create('ltj@@japanese')[2]
+local lang_ja = luatexja.lang_ja
 local identifiers = fonts.hashes.identifiers
 
 local ltjf_font_metric_table = ltjf.font_metric_table
@@ -158,16 +158,10 @@ local function extract(head)
    return to_node(head)
 end
 
-luatexbase.add_to_callback('hpack_filter', extract,
-                          'ltj.hpack_filter_otf',
-   luatexbase.priority_in_callback('pre_linebreak_filter',
-                                  'ltj.pre_linebreak_filter'))
-luatexbase.add_to_callback('pre_linebreak_filter', extract,
-                          'ltj.pre_linebreak_filter_otf',
-   luatexbase.priority_in_callback('pre_linebreak_filter',
-                                  'ltj.pre_linebreak_filter'))
-
-
+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" 形式での指定を可能とした.
@@ -210,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
 -- 組版時
@@ -222,23 +216,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 +248,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 +259,8 @@ do
         else
            p = node_next(p)
          end
-      end
-      return to_node(head)
+     end
+     return to_node(head)
    end
 
    enable_ivs = function ()
@@ -274,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,'do_ivs', 
-                                   luatexbase.priority_in_callback('hpack_filter',
-                                                                   'ltj.hpack_filter_pre')+1)
-        luatexbase.add_to_callback('pre_linebreak_filter',
-                                   do_ivs_repr, 'do_ivs', 
-                                   luatexbase.priority_in_callback('pre_linebreak_filter',
-                                                                   'ltj.pre_linebreak_filter_pre')+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,
 }