[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