diff options
-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) |