[latex3-commits] [git/LaTeX3-latex3-luaotfload] harfnode-dev: Use Unicode values whenever possible (fd700e8)
Marcel Fabian Krüger
tex at 2krueger.de
Mon Oct 7 12:30:39 CEST 2019
Repository : https://github.com/latex3/luaotfload
On branch : harfnode-dev
Link : https://github.com/latex3/luaotfload/commit/fd700e82976a41852dd2eecc10ea400d4f5ced69
>---------------------------------------------------------------
commit fd700e82976a41852dd2eecc10ea400d4f5ced69
Author: Marcel Fabian Krüger <tex at 2krueger.de>
Date: Thu Sep 19 10:46:20 2019 +0200
Use Unicode values whenever possible
>---------------------------------------------------------------
fd700e82976a41852dd2eecc10ea400d4f5ced69
src/harf/harf-load.lua | 6 +++++-
src/harf/harf-luaotfload.lua | 3 ++-
src/harf/harf-node.lua | 11 +++++++++--
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/harf/harf-load.lua b/src/harf/harf-load.lua
index 72af885..85bf9ab 100644
--- a/src/harf/harf-load.lua
+++ b/src/harf/harf-load.lua
@@ -96,8 +96,11 @@ local function loadfont(spec)
local unicodes = hbface:collect_unicodes()
local characters = {}
+ local nominals = {}
for _, uni in next, unicodes do
- characters[uni] = hbfont:get_nominal_glyph(uni)
+ local glyph = hbfont:get_nominal_glyph(uni)
+ characters[uni] = glyph
+ nominals[glyph] = uni
end
local xheight, capheight = 0, 0
@@ -140,6 +143,7 @@ local function loadfont(spec)
capheight = capheight,
slant = slant,
glyphs = glyphs,
+ nominals = nominals,
unicodes = characters,
psname = hbface:get_name(hb.ot.NAME_ID_POSTSCRIPT_NAME),
fullname = hbface:get_name(hb.ot.NAME_ID_FULL_NAME),
diff --git a/src/harf/harf-luaotfload.lua b/src/harf/harf-luaotfload.lua
index 9ab56bc..2e45cff 100644
--- a/src/harf/harf-luaotfload.lua
+++ b/src/harf/harf-luaotfload.lua
@@ -150,11 +150,12 @@ aux.slot_of_name = function(fontid, glyphname, unsafe)
local hbdata = fontdata and fontdata.hb
if hbdata then
local hbshared = hbdata.shared
+ local nominals = hbshared.nominals
local hbfont = hbshared.font
local gid = hbfont:get_glyph_from_name(glyphname)
if gid ~= nil then
- return gid + harf.CH_GID_PREFIX
+ return nominals[gid] or gid + harf.CH_GID_PREFIX
end
return nil
end
diff --git a/src/harf/harf-node.lua b/src/harf/harf-node.lua
index 6e97e03..c175982 100644
--- a/src/harf/harf-node.lua
+++ b/src/harf/harf-node.lua
@@ -526,6 +526,7 @@ local function tonodes(head, current, run, glyphs, color)
local characters = fontdata.characters
local hbdata = fontdata.hb
local hbshared = hbdata.shared
+ local nominals = hbshared.nominals
local hbfont = hbshared.font
local fontglyphs = hbshared.glyphs
local rtl = dir:is_backward()
@@ -542,7 +543,7 @@ local function tonodes(head, current, run, glyphs, color)
for i, glyph in next, glyphs do
local index = glyph.cluster + 1
local gid = glyph.codepoint
- local char = hb.CH_GID_PREFIX + gid
+ local char = nominals[gid] or hb.CH_GID_PREFIX + gid
local n = nodes[index]
local id = getid(n)
local nchars, nglyphs = glyph.nchars, glyph.nglyphs
@@ -858,13 +859,19 @@ local function set_tounicode()
if hbdata and fontid == pdf.getfontname(fontid) then
local characters = fontdata.characters
local newcharacters = {}
- local glyphs = hbdata.shared.glyphs
+ local hbshared = hbdata.shared
+ local glyphs = hbshared.glyphs
+ local nominals = hbshared.nominals
for gid = 0, #glyphs do
local glyph = glyphs[gid]
if glyph.used then
local tounicode = glyph.tounicode or "FFFD"
local character = characters[gid + hb.CH_GID_PREFIX]
newcharacters[gid + hb.CH_GID_PREFIX] = character
+ local unicode = nominals[gid]
+ if unicode then
+ newcharacters[unicode] = character
+ end
character.tounicode = tounicode
character.used = true
end
More information about the latex3-commits
mailing list