OSDN Git Service

Merge branch 'kitagawa_test' into cjascale
[luatex-ja/luatexja.git] / src / ltj-jfont.lua
index 3b217a6..e18fece 100644 (file)
@@ -3,7 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.jfont',
-  date = '2017/08/09',
+  date = '2017/09/04',
   description = 'Loader for Japanese fonts',
 })
 module('luatexja.jfont', package.seeall)
@@ -365,11 +365,19 @@ do
 end
 
 do
+   local gmatch = string.gmatch
    -- extract jfm_file_name and jfm_var
    -- normalize position of 'jfm=' and 'jfmvar=' keys
    local function extract_metric(name)
-      local is_braced = name:match('^{(.*)}$')
-      name= is_braced or name
+      do
+         local nametemp
+        nametemp = name:match('^{(.*)}$')
+        if nametemp then name = nametemp
+         else
+           nametemp = name:match('^"(.*)"$')
+           name = nametemp or name
+         end
+      end
       jfm_file_name = ''; jfm_var = ''; jfm_ksp = true
       local tmp, index = name:sub(1, 5), 1
       if tmp == 'file:' or tmp == 'name:' or tmp == 'psft:' then
@@ -378,7 +386,7 @@ do
       local p = name:find(":", index); index = p and (p+1) or index
       while index do
         local l = name:len()+1
-        local q = name:find(";", index+1) or l
+        local q = name:find(";", index) or l
         if name:sub(index, index+3)=='jfm=' and q>index+4 then
            jfm_file_name = name:sub(index+4, q-1)
            if l~=q then
@@ -408,16 +416,17 @@ do
            name = name .. 'jfmvar=' .. jfm_var
         end
       end
-      for x in string.gmatch (name, "[:;]([+%%-]?)ltjks") do
+      for x in gmatch (name, "[:;]([+%%-]?)ltjks") do
         jfm_ksp = not (x=='-')
       end
       if jfm_dir == 'tate' then
         is_vert_enabled = (not name:match('[:;]%-vert')) and (not  name:match('[:;]%-vrt2'))
-         auto_enable_vrt2 = (not name:match('vert') and not name:match('vrt2'))
+        auto_enable_vrt2 
+          = (not name:match('[:;][+%-]?vert')) and (not name:match('[:;][+%-]?vrt2'))
       else
         is_vert_enabled, auto_enable_vrt2 = nil, nil
       end
-      return is_braced and ('{' .. name .. '}') or name
+      return name
    end
 
    -- define_font callback
@@ -744,7 +753,7 @@ do
            if i.order[1]== 'vert' and i.type == 'gsub_single' and i.steps then
               for _,j in pairs(i.steps) do
                  if type(j)=='table' then 
-                    if type(j,coverage)=='table' then
+                    if type(j.coverage)=='table' then
                        for i,_ in pairs(j.coverage) do rot[i]=nil end
                     end
                  end
@@ -850,12 +859,21 @@ do
    end
    prepare_fl_data = function (dest, id)
       local t = fontloader.info(id.filename)
+      if not t then return dest end
       local fl
-      if t.filename then
+      if t.fontname then
         fl = fontloader.open(id.filename)
       else
-        fl = fontloader.open(id.filename, id.fullname)
+        fl = fontloader.open(id.filename, id.fontname) -- マニュアルにはこっちで書いてあるが?
+       if not fl then
+          local index
+         for i,v in ipairs(t) do
+            if v.fontname == id.fontname then index=i; break end
+          end  
+         fl = fontloader.open(id.filename, index)
+        end
       end
+      if not fl then fontloader.close(fl); return dest end
       local ind_to_uni, unicodes = {}, {}
       for i,v in pairs(id.characters) do
          ind_to_uni[v.index] = i
@@ -931,7 +949,7 @@ do
            font_extra_basename[bname] = dat or {}
            ltjb.save_cache( v,
                             {
-                               chksum = checksum(id.filename),
+                               chksum = newsum,
                                version = cache_ver,
                                dat,
                             })