[latex3-commits] [git/LaTeX3-latex3-luaotfload] harfnode-dev: Normalize Script/Language name (7df7cd2)

Marcel Fabian Krüger tex at 2krueger.de
Sat Oct 19 04:33:24 CEST 2019


Repository : https://github.com/latex3/luaotfload
On branch  : harfnode-dev
Link       : https://github.com/latex3/luaotfload/commit/7df7cd2f15124614271291c79cb065036b9a26b0

>---------------------------------------------------------------

commit 7df7cd2f15124614271291c79cb065036b9a26b0
Author: Marcel Fabian Krüger <tex at 2krueger.de>
Date:   Sat Oct 19 04:17:07 2019 +0200

    Normalize Script/Language name


>---------------------------------------------------------------

7df7cd2f15124614271291c79cb065036b9a26b0
 src/luaotfload-auxiliary.lua   | 44 +++++++++++++++++++++++-------------------
 src/luaotfload-harf-define.lua | 11 +++++++++--
 2 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/src/luaotfload-auxiliary.lua b/src/luaotfload-auxiliary.lua
index 15272d7..f1c83b6 100644
--- a/src/luaotfload-auxiliary.lua
+++ b/src/luaotfload-auxiliary.lua
@@ -460,13 +460,14 @@ function aux.provides_script(font_id, asked_script)
   end
   local hbface = get_hbface(tfmdata)
   if hbface then
-    local script = harf.Tag.new(asked_script)
+    local script = harf.Tag.new(asked_script == "dflt" and "DFLT"
+                                                        or asked_script)
     for _, tag in next, { GSUBtag, GPOStag } do
-      local scripts = hbface:ot_layout_get_script_tags(tag) or {}
-      for i = 1, #scripts do
-        if script == scripts[i] then return true end
+      if hbface:ot_layout_find_script(tag, script) then
+        return true
       end
     end
+    return false
   else
     local features = get_features (tfmdata)
     if features == false then
@@ -519,24 +520,26 @@ function aux.provides_language(font_id, asked_script, asked_language)
   end
   local hbface = get_hbface(tfmdata)
   if hbface then
+    local script = harf.Tag.new(asked_script)
+    for _, tag in next, { GSUBtag, GPOStag } do
+      if hbface:ot_layout_find_script(tag, script) then
+        return true
+      end
+    end
+    return false
+  else
     asked_language  = stringupper(asked_language)
     if asked_language == "DFLT" then
       return aux.provides_script(font_id, asked_script)
     end
-    local script = harf.Tag.new(asked_script)
-    -- HarfBuzz expects "DFLT" in lower-case
-    local language = harf.Tag.new(asked_language)
-    local feature = harf.Tag.new(feature)
-
+    local script = harf.Tag.new(asked_script == "dflt" and "DFLT"
+                                                        or asked_script)
+    local language = harf.Tag.new(asked_language == "DFLT" and "dflt"
+                                                            or asked_language)
     for _, tag in next, { GSUBtag, GPOStag } do
-      local scripts = hbface:ot_layout_get_script_tags(tag) or {}
-      for i = 1, #scripts do
-        if script == scripts[i] then
-          local languages = hbface:ot_layout_get_language_tags(tag, i - 1) or {}
-          for j = 1, #languages do
-            if language == languages[j] then return true end
-          end
-        end
+      local _, script_idx = hbface:ot_layout_find_script(tag, script)
+      if hbface:ot_layout_find_language(tag, script_idx, language) then
+        return true
       end
     end
     return false
@@ -630,9 +633,10 @@ function aux.provides_feature(font_id,        asked_script,
   local hbface = get_hbface(tfmdata)
   if hbface then
     asked_language  = stringupper(asked_language)
-    local script = harf.Tag.new(asked_script)
-    -- HarfBuzz expects "DFLT" in lower-case
-    local language = harf.Tag.new(asked_language == "DFLT" and "dflt" or asked_language)
+    local script = harf.Tag.new(asked_script == "dflt" and "DFLT"
+                                                        or asked_script)
+    local language = harf.Tag.new(asked_language == "DFLT" and "dflt"
+                                                            or asked_language)
     local feature = harf.Tag.new(feature)
 
     for _, tag in next, { GSUBtag, GPOStag } do
diff --git a/src/luaotfload-harf-define.lua b/src/luaotfload-harf-define.lua
index 310893a..d67bf45 100644
--- a/src/luaotfload-harf-define.lua
+++ b/src/luaotfload-harf-define.lua
@@ -18,6 +18,9 @@ do -- block to avoid to many local variables error
  end  
 end
 
+local stringlower = string.lower
+local stringupper = string.upper
+
 local hb = luaotfload.harfbuzz
 
 local hbfonts = {}
@@ -350,10 +353,14 @@ fonts.readers.harf = function(spec)
   spec.hb_features = hb_features
 
   if rawfeatures.language then
-    spec.language = hb.Language.new(rawfeatures.language)
+    local language = stringupper(rawfeatures.language)
+    spec.language = hb.Language.new(language == "DFLT" and "dflt"
+                                                  or script)
   end
   if rawfeatures.script then
-    spec.script = hb.Script.new(rawfeatures.script)
+    local script = stringlower(rawfeatures.script)
+    spec.script = hb.Script.new(script == "dflt" and "DFLT"
+                                                  or script)
   end
   for key, val in next, rawfeatures do
     if key:len() == 4 then





More information about the latex3-commits mailing list