summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Gesang <phg42.2a@gmail.com>2013-05-16 15:56:00 +0200
committerPhilipp Gesang <phg42.2a@gmail.com>2013-05-16 15:56:00 +0200
commit52711d3284f2d0de886fc3ab2d693a2ad69589d7 (patch)
tree4f32cac836a09135628303c2103ad4e0d7c1511c
parentd26a285e185facdfdbbf7aa52a485663f3036c21 (diff)
downloadluaotfload-52711d3284f2d0de886fc3ab2d693a2ad69589d7.tar.gz
add unsafe glyph checker
-rw-r--r--luaotfload-auxiliary.lua28
1 files changed, 25 insertions, 3 deletions
diff --git a/luaotfload-auxiliary.lua b/luaotfload-auxiliary.lua
index c8f1299..f0d5a04 100644
--- a/luaotfload-auxiliary.lua
+++ b/luaotfload-auxiliary.lua
@@ -230,6 +230,8 @@ luatexbase.add_to_callback(
--- glyphs
-----------------------------------------------------------------------
+local agl = fonts.encodings.agl
+
--- int -> int -> bool
local font_has_glyph = function (font_id, codepoint)
local fontdata = fonts.hashes.identifiers[font_id]
@@ -241,6 +243,20 @@ end
aux.font_has_glyph = font_has_glyph
+--- undocumented
+
+local raw_slot_of_name = function (font_id, glyphname)
+ local fontdata = font.fonts[font_id]
+ if fontdata.type == "virtual" then --- get base font for glyph idx
+ local codepoint = agl.unicodes[glyphname]
+ local glyph = fontdata.characters[codepoint]
+ if fontdata.characters[codepoint] then
+ return codepoint
+ end
+ end
+ return false
+end
+
--[[doc--
This one is approximately “name_to_slot” from the microtype package;
@@ -249,10 +265,14 @@ aux.font_has_glyph = font_has_glyph
http://www.adobe.com/devnet/opentype/archives/glyph.html
+ The “unsafe” switch triggers a fallback lookup in the raw fonts
+ table. As some of the information is stored as references, this may
+ have unpredictable side-effects.
+
--doc]]--
---- int -> string -> (int | false)
-local slot_of_name = function (font_id, glyphname)
+--- int -> string -> bool -> (int | false)
+local slot_of_name = function (font_id, glyphname, unsafe)
local fontdata = identifiers[font_id]
if fontdata then
local unicode = fontdata.resources.unicodes[glyphname]
@@ -261,6 +281,8 @@ local slot_of_name = function (font_id, glyphname)
else
return unicode[1] --- for multiple components
end
+ elseif unsafe == true then -- for Robert
+ return raw_slot_of_name(font_id, glyphname)
end
return false
end
@@ -283,7 +305,7 @@ local indices
--- int -> (string | false)
local name_of_slot = function (codepoint)
if not indices then --- this will load the glyph list
- local unicodes = fonts.encodings.agl.unicodes
+ local unicodes = agl.unicodes
indices = table.swapped(unicodes)
end
local glyphname = indices[codepoint]