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