diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2014-12-14 21:21:55 +0100 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2014-12-14 21:21:55 +0100 |
commit | d2a1af0a62a2540c8b88345b8d1e84ba61a8a49f (patch) | |
tree | e07b58121d10fe123fc2b31d9a75d47dd347a17d | |
parent | ca673f7b14af906606a188fd98978d3501842f63 (diff) | |
download | luaotfload-d2a1af0a62a2540c8b88345b8d1e84ba61a8a49f.tar.gz |
[main, aux] add a callback that installs a .resources table in fonts that it
Fixes https://github.com/lualatex/luaotfload/issues/253
Sort of.
In order to not interfere with the other callbacks which expect a sane
environment this hack got added by means of another callback that is
called whenever a defined font lacks essential subtables. This means
that the user must consider cases like numbers and partially defined
fonts. It’s best to keep both cases separate so those who aren’t
concerned with workarounds for weird fonts can stick with the clean
interface.
-rw-r--r-- | src/luaotfload-auxiliary.lua | 29 | ||||
-rw-r--r-- | src/luaotfload-main.lua | 25 |
2 files changed, 45 insertions, 9 deletions
diff --git a/src/luaotfload-auxiliary.lua b/src/luaotfload-auxiliary.lua index 7ea747e..b3fa795 100644 --- a/src/luaotfload-auxiliary.lua +++ b/src/luaotfload-auxiliary.lua @@ -129,6 +129,35 @@ luatexbase.add_to_callback( "luaotfload.patch_font", patch_cambria_domh, "luaotfload.aux.patch_cambria_domh") + + +--[[doc-- + + Add missing field to fonts that lack it. Addresses issue + https://github.com/lualatex/luaotfload/issues/253 + + This is considered a hack, especially since importing the + unicode-math package fixes the problem quite nicely. + +--doc]]-- + +--- fontobj -> unit +local fixup_fontdata = function (data) + + local t = type (data) + --- Some OT fonts like Libertine R lack the resources table, causing + --- the fontloader to nil-index. + if t == "table" then + if data and not data.resources then data.resources = { } end + end + +end + +luatexbase.add_to_callback( + "luaotfload.patch_font_unsafe", + fixup_fontdata, + "luaotfload.aux.fixup_fontdata") + --[[doc-- diff --git a/src/luaotfload-main.lua b/src/luaotfload-main.lua index d3c4552..a090cce 100644 --- a/src/luaotfload-main.lua +++ b/src/luaotfload-main.lua @@ -354,7 +354,7 @@ else--- the loading sequence is known to change, so this might have to load_fontloader_module "font-otf" load_fontloader_module "font-otb" load_fontloader_module "luatex-fonts-inj" --> since 2014-01-07, replaces node-inj.lua - load_fontloader_module "font-ota" + load_fontloader_module "luatex-fonts-ota" load_fontloader_module "luatex-fonts-otn" --> since 2014-01-07, replaces font-otn.lua load_fontloader_module "font-otp" --> since 2013-04-23 load_fontloader_module "luatex-fonts-lua" @@ -657,14 +657,19 @@ end --[[doc-- - We create a callback for patching fonts on the fly, to be used by - other packages. - It initially contains the empty function that we are going to + We create callbacks for patching fonts on the fly, to be used by + other packages. In addition to the regular \identifier{patch_font} + callback there is an unsafe variant \identifier{patch_font_unsafe} + that will be invoked even if the target font lacks certain essential + tfmdata tables. + + The callbacks initially contain the empty function that we are going to override below. --doc]]-- -create_callback("luaotfload.patch_font", "simple", dummy_function) +create_callback("luaotfload.patch_font", "simple", dummy_function) +create_callback("luaotfload.patch_font_unsafe", "simple", dummy_function) --[[doc-- @@ -681,14 +686,16 @@ do local read = fonts.definers.read local patch = function (specification, size, id) - local tfmdata = read (specification, size, id) - if type (tfmdata) == "table" and tfmdata.shared then + local fontdata = read (specification, size, id) + if type (fontdata) == "table" and fontdata.shared then --- We need to test for the “shared” field here --- or else the fontspec capheight callback will --- operate on tfm fonts. - call_callback ("luaotfload.patch_font", tfmdata, specification) + call_callback ("luaotfload.patch_font", fontdata, specification) + else + call_callback ("luaotfload.patch_font_unsafe", fontdata, specification) end - return tfmdata + return fontdata end local mk_info = function (name) |