OSDN Git Service

"TateFeatures={RawFeatures=+vrt2}" does not work in IPA fonts
[luatex-ja/luatexja.git] / src / ltj-rmlgbm.lua
index 25eafdc..f79c445 100644 (file)
@@ -5,7 +5,7 @@ luatexja.load_module('base');      local ltjb = luatexja.base
 
 local cidfont_data = {}
 local cache_chars = {}
-local cache_ver = '3'
+local cache_ver = '4'
 
 local cid_reg, cid_order, cid_supp, cid_name
 local cid_replace = {
@@ -138,29 +138,30 @@ do
          ttu[cid_order .. '.' .. i] = cidmo[i]
       end
 
-      -- 縦書用字形
-      tt, cidm = {}, {}
-      for i = 0,kx[2] do cidm[i] = -1 end
-      open_cmap_file(kx[1] .. "-V", increment, tonumber, entry)
-      local ttv = {}
-      for i,v in pairs(tt) do ttv[i] =  cidmo[v.index] end
-
       -- shared
       k.shared = {
          otfdata = {
             cidinfo= k.cidinfo, verbose = false,
             shared = { featuredata = {}, },
-           luatex = { features = {},
+           luatex = { features = {},
                       defaultwidth=1000,
                     },
          },
          dynamics = {}, features = {}, processes = {},
-        ltj_vert_table = ttv
-      }
+         --rawdata = { descriptions = {} },
+     }
       k.resources = { unicodes = ttu, }
       k.descriptions = {}
       cache_chars[cid_name]  = { [655360] = k.characters }
 
+      -- 縦書用字形
+      tt, cidm = {}, {}
+      for i = 0,kx[2] do cidm[i] = -1 end
+      open_cmap_file(kx[1] .. "-V", increment, tonumber, entry)
+      for i,v in pairs(tt) do
+         ttv[i] =  cidmo[v.index]
+      end
+
       -- tounicode エントリ
       local cidp = {nil, nil}; tt, ttu, cidm = {}, {}, {}
       open_cmap_file(cid_name .. "-UCS2",
@@ -217,13 +218,13 @@ end
 local definers = fonts.definers
 local function mk_rml(name, size, id)
    local specification = definers.analyze(name,size)
-   specification = definers.resolve(specification)
+   --specification = definers.resolve(specification) (not needed)
    specification.detail = specification.detail or ''
 
    local fontdata = {}
    local cachedata = {}
    local s = cidfont_data[cid_name]
-   luatexja.rmlgbm.vert_addfunc(id, s.shared.ltj_vert_table)
+   luatexja.rmlgbm.vert_addfunc(id)
    for k, v in pairs(s) do
       fontdata[k] = v
       cachedata[k] = v
@@ -296,25 +297,25 @@ local function mk_rml(name, size, id)
 end
 
 local function font_callback(name, size, id, fallback)
-   local p = utf.find(name, ":") or utf.len(name)+1
-   if utf.sub(name, 1, p-1) == 'psft' then
+   local p = name:find(":") or name:len()+1
+   if name:sub(1, p-1) == 'psft' then
       local s = "Adobe-Japan1-6"
-      local basename = utf.sub(name,p+1)
-      local p = utf.find(basename, ":")
-      local q = utf.find(basename, "/[BI][BI]?")
+      local basename = name:sub(p+1)
+      local p = basename:find(":")
+      local q = basename:find("/[BI][BI]?")
       if q and p and q<=p then
-        basename = utf.gsub(basename, '/[BI][BI]?', '', 1)
-        p = utf.find(basename, ":")
+        basename = basename:gsub('/[BI][BI]?', '', 1)
+        p = basename:find(":")
       end
       if p then
-        local xname = utf.sub(basename, p+1)
+        local xname = basename:sub(p+1)
         p = 1
         while p do
-           local q = utf.find(xname, ";", p+1) or utf.len(xname)+1
-           if utf.sub(xname, p, p+3)=='cid=' and q>p+4 then
-              s = utf.sub(xname, p+4, q-1)
+           local q = xname:find(";", p+1) or xname:len()+1
+           if xname:sub(p, p+3)=='cid=' and q>p+4 then
+              s = xname:sub(p+4, q-1)
            end
-           if utf.len(xname)+1==q then p = nil else p = q + 1 end
+           if xname:len()+1==q then p = nil else p = q + 1 end
         end
       end
       cid_reg, cid_order = string.match(s, "^(.-)%-(.-)%-(%d-)$")
@@ -335,7 +336,11 @@ local function font_callback(name, size, id, fallback)
       end
       return mk_rml(basename, size, id)
    else
-      return fallback(name, size, id)
+      local tfmdata=fallback(name, size, id)
+      if type (tfmdata) == "table" and tfmdata.shared then
+        luatexbase.call_callback("luaotfload.patch_font", tfmdata, name)
+      end
+      return tfmdata
    end
 end
 
@@ -347,5 +352,3 @@ luatexja.rmlgbm = {
 
 cid_reg, cid_order, cid_name, cid_supp = 'Adobe', 'Japan1', 'Adobe-Japan1'
 read_cid_font()
-
-