[latex3-commits] [git/LaTeX3-latex3-luaotfload] harfnode-dev: Normalize Script/Language name (b78cdfb)
Marcel Fabian Krüger
tex at 2krueger.de
Sat Oct 19 04:56:12 CEST 2019
Repository : https://github.com/latex3/luaotfload
On branch : harfnode-dev
Link : https://github.com/latex3/luaotfload/commit/b78cdfb898c49abcdff1dd78de074904a01a2753
>---------------------------------------------------------------
commit b78cdfb898c49abcdff1dd78de074904a01a2753
Author: Marcel Fabian Krüger <tex at 2krueger.de>
Date: Sat Oct 19 04:17:07 2019 +0200
Normalize Script/Language name
>---------------------------------------------------------------
b78cdfb898c49abcdff1dd78de074904a01a2753
src/luaotfload-auxiliary.lua | 36 ++++++++++++++++--------------------
src/luaotfload-harf-define.lua | 11 +++++++++--
2 files changed, 25 insertions(+), 22 deletions(-)
diff --git a/src/luaotfload-auxiliary.lua b/src/luaotfload-auxiliary.lua
index 15272d7..19cf1f4 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
@@ -523,20 +524,14 @@ function aux.provides_language(font_id, asked_script, 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 +625,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