OSDN Git Service

Merge branch 'kitagawa_test' into kitagawa_nfss
[luatex-ja/luatexja.git] / src / ltj-lotf_aux.lua
index 131e342..04cae9d 100644 (file)
@@ -24,15 +24,15 @@ function aux.enable_feature(id, name)
   local t = getfont(id)
   if t and t.shared and t.shared.features then
     t.shared.features[name] = true
-  elseif t and t.hb then -- HARFLOAD
-    local hb, tf = require("harf-base"), t.hb.spec.features
+  elseif t and t.hb then -- HARF
+    local hb, tf = luaotfload.harfbuzz, t.hb.spec.hb_features
     tf[#tf+1] = hb.Feature.new(name)
   end
 end
 function aux.specified_feature(id, name)
   local t = getfont(id)
   return t and (t.shared and t.shared.features and t.shared.features[name])
-         or (t.hb and t.hb.spec and t.hb.spec.options and t.hb.spec.options[name]) -- HARFLOAD
+         or (t.hb and t.hb.spec and t.hb.spec.features.raw and t.hb.spec.features.raw[name]) -- HARF
 end
 
 
@@ -46,18 +46,32 @@ end
 aux.get_cidinfo = get_cidinfo
 end
 
+local function get_asc_des(id)
+  local t, v = getfont(id), font_metric_table[id]
+  local a, d
+  if t and t.shared and t.shared.rawdata then
+    local u = t.units
+    local t2 = t.shared.rawdata.metadata
+    if t2 then
+      a, d = t2.ascender and t2.ascender/u, t2.descender and -t2.descender/u
+    end
+  elseif t.hb then -- HARF
+    local hbfont, u = t.hb.shared.font, t.hb.shared.upem
+    local h = hbfont:get_h_extents()
+    if h and u then 
+       a, d = h.ascender and h.ascender/u, h.descender and -h.descender/u
+    end
+  end
+  v.ascender, v.descender =  (a or 0.88)*t.size, (d or 0.12)*t.size
+end
 local function get_ascender(id) -- scaled points
-  if font_metric_table[id].ascender then return font_metric_table[id].ascender end
-  local t = getfont(id)
-  local a = t and t.parameters and t.parameters.ascender or t.size*0.88
-  font_metric_table[id].descender = a; return a
+  if not font_metric_table[id].ascender then get_asc_des(id) end
+  return font_metric_table[id].ascender
 end
 
 local function get_descender(id) -- scaled points
-  if font_metric_table[id].descender then return font_metric_table[id].descender end
-  local t = getfont(id)
-  local a = t and t.parameters and t.parameters.descender or t.size*0.12
-  font_metric_table[id].descender = a; return a
+  if not font_metric_table[id].descender then get_asc_des(id) end
+  return font_metric_table[id].descender
 end
 aux.get_ascender, aux.get_descender = get_ascender, get_descender
 
@@ -66,9 +80,10 @@ local dummy_vht, dummy_vorg = {}, {}
 setmetatable(dummy_vht, {__index = function () return 1 end } )
 setmetatable(dummy_vorg, {__index = function () return 0.88 end } )
 local function get_vmet_table(tfmdata, dest)
-   if (not tfmdata) or (not tfmdata.shared) then
+   if (not tfmdata) or (not tfmdata.shared) or (not tfmdata.shared.rawdata) then
      dest = dest or {}
      dest.vorigin, dest.vheight = dummy_vorg, dummy_vht
+     dest.ind_to_uni = {}
      return dest
    end
    local rawdata = tfmdata.shared.rawdata
@@ -101,7 +116,7 @@ end
 local function loop_over_duplicates(id, func)
 -- func: return non-nil iff abort this fn
   local t = (type(id)=="table") and id or getfont(id)
-  if t and t.resources and t.resources.duplicates then
+  if t and t.resources and t.resources.duplicates then -- HARF: not executed
     for i,v in pairs(t.resources.duplicates) do
       func(i,v)
     end
@@ -114,7 +129,7 @@ local function loop_over_feat(id, feature_name, func, universal)
 -- func: return non-nil iff abort this fn
 -- universal: true iff look up all (script, lang) pair
   local t = (type(id)=="table") and id or getfont(id)
-  if t and t.resources and t.resources.sequences then
+  if t and t.resources and t.resources.sequences then -- HARF: not executed
     for _,i in pairs(t.resources.sequences) do
       if i.order[1] and feature_name[i.order[1]] then
         local f = i.features and i.features[i.order[1]]