OSDN Git Service

ltj-otf.lua etc.: update \CID for luaotfload v2.7
[luatex-ja/luatexja.git] / src / ltj-jfont.lua
index d357231..5b9cbe4 100644 (file)
@@ -31,7 +31,6 @@ local id_glyph = node.id('glyph')
 local id_kern = node.id('kern')
 local cat_lp = luatexbase.catcodetables['latex-package']
 local FROM_JFM     = luatexja.icflag_table.FROM_JFM
-local tokenlib = luatexja.token
 ------------------------------------------------------------------------
 -- LOADING JFM
 ------------------------------------------------------------------------
@@ -368,18 +367,18 @@ do
    end
 
    -- define_font callback
-   local otfl_fdr = fonts.definers.read
+   local otfl_fdr
    local ltjr_font_callback = ltjr.font_callback
    function luatexja.font_callback(name, size, id)
       local new_name = is_def_jfont and extract_metric(name) or name
       is_def_jfont = false
-      --local res =  otfl_fdr(new_name, size, id)
       local res =  ltjr_font_callback(new_name, size, id, otfl_fdr)
       luatexbase.call_callback('luatexja.define_font', res, new_name, size, id)
       -- this callback processes variation selector, so we execute it always
       return res
    end
    luatexbase.create_callback('luatexja.define_font', 'simple', function (n) return n end)
+   otfl_fdr= luatexbase.remove_from_callback('define_font', 'luaotfload.define_font')
    luatexbase.add_to_callback('define_font',luatexja.font_callback,"luatexja.font_callback", 1)
 end
 
@@ -684,11 +683,8 @@ do
 
    local sort = table.sort
    local function add_fl_table(dest, glyphs, unitable, asc_des, units)
-      local tg, glyphmin, glyphmax = glyphs.glyphs, 0, glyphs.glyphmax
-      for _,v in pairs(fields(glyphs)) do
-        if v=='glyphmin' then glyphmin, glyphmax = glyphs.glyphmin, glyphmax+1; break end
-      end
-      for i = glyphmin, glyphmax-1 do
+      local tg, glyphmin, glyphmax = glyphs.glyphs, glyphs.glyphmin, glyphs.glyphmax
+      for i = glyphmin, glyphmax do
         local gv = tg[i]
         if gv then
            if gv.altuni then
@@ -696,20 +692,22 @@ do
                  local bu, vsel = at.unicode, at.variant
                  if vsel then
                     if vsel>=0xE0100 then vsel = vsel - 0xE0100 end
-                    dest = dest or {}; dest[bu] = dest[bu] or {}
                     local uniq_flag = true
-                    for i,_ in pairs(dest[bu]) do
-                       if i==vs then uniq_flag = false; break end
-                    end
+                     if dest and dest[bu] then
+                       for i,_ in pairs(dest[bu]) do
+                          if i==vsel then uniq_flag = false; break end
+                       end
+                     end
                     if uniq_flag then
-                       dest[bu][vsel] = unitable[gv.name]
+                       dest = dest or {}; dest[bu] = dest[bu] or {}
+                       dest[bu][vsel] = unitable[i]
                     end
                  end
               end
            end
            -- vertical metric
            local vw, tsb, vk = glyph_vmetric(gv)
-           local gi = unitable[gv.name]
+           local gi = unitable[i]
            if gi and vw and vw~=asc_des then
               -- We do not use tsidebearing, since (1) fontloader does not read VORG table
               -- and (2) 'tsidebearing' doea not appear in the returned table by fontloader.fields.
@@ -745,19 +743,34 @@ do
    end
    prepare_fl_data = function (dest, id)
       local fl = fontloader.open(id.filename)
-      local unicodes = id.resources.unicodes
+      local ind_to_uni, unicodes = {}, {}
+      for i,v in pairs(id.characters) do
+         ind_to_uni[v.index] = i
+      end
+      
       if fl.glyphs then
+        local tg, glyphmin, glyphmax = fl.glyphs, fl.glyphmin, fl.glyphmax
+         for i = glyphmin, glyphmax do
+            if tg[i] and tg[i].name then unicodes[tg[i].name] = ind_to_uni[i] end
+         end
         dest = add_fl_table(dest, fl, unicodes,
                             fl.ascent + fl.descent, fl.units_per_em)
       end
       if fl.subfonts then
          for _,v in pairs(fl.subfonts) do
+           local tg, glyphmin, glyphmax = v.glyphs, v.glyphmin, v.glyphmax
+            for i = glyphmin, glyphmax do
+               if tg[i] and tg[i].name then unicodes[tg[i].name] = ind_to_uni[i] end
+            end
+         end
+         for _,v in pairs(fl.subfonts) do
             dest = add_fl_table(dest, v, unicodes,
                                fl.ascent + fl.descent, fl.units_per_em)
          end
-      end
-      fontloader.close(fl); collectgarbage("collect")
-      return dest
+     end
+     if dest then dest.unicodes = unicodes end
+     fontloader.close(fl); collectgarbage("collect")
+     return dest
    end
    -- supply vkern table
    supply_vkern_table = function(id, bname)
@@ -778,12 +791,12 @@ end
 
 --
 do
-   local cache_ver = 6
+   local cache_ver = 9
    local checksum = file.checksum
 
    local function prepare_extra_data_base(id)
-      if not id then return end
-      local bname = file.nameonly(id.filename or '')
+      if (not id) or (not id.filename) then return end
+      local bname = file.nameonly(id.filename)
       if not font_extra_basename[bname] then
         -- if the cache is present, read it
         local newsum = checksum(id.filename) -- MD5 checksum of the fontfile
@@ -810,7 +823,7 @@ do
       end
    end
    local function prepare_extra_data_font(id, res)
-      if type(res)=='table' and res.shared then
+      if type(res)=='table' and res.shared and res.filename then
         font_extra_info[id] = font_extra_basename[file.nameonly(res.filename)]
       end
    end