diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2013-05-16 15:56:00 +0200 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2013-05-16 15:56:00 +0200 |
commit | 52711d3284f2d0de886fc3ab2d693a2ad69589d7 (patch) | |
tree | 4f32cac836a09135628303c2103ad4e0d7c1511c /luaotfload-auxiliary.lua | |
parent | d26a285e185facdfdbbf7aa52a485663f3036c21 (diff) | |
download | luaotfload-52711d3284f2d0de886fc3ab2d693a2ad69589d7.tar.gz |
add unsafe glyph checker
Diffstat (limited to 'luaotfload-auxiliary.lua')
-rw-r--r-- | luaotfload-auxiliary.lua | 28 |
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] |