diff options
-rw-r--r-- | src/luaotfload-loaders.lua | 57 |
1 files changed, 36 insertions, 21 deletions
diff --git a/src/luaotfload-loaders.lua b/src/luaotfload-loaders.lua index 061789c..f722d85 100644 --- a/src/luaotfload-loaders.lua +++ b/src/luaotfload-loaders.lua @@ -12,12 +12,7 @@ if not lualibs then error "this module requires Luaotfload" end if not luaotfload then error "this module requires Luaotfload" end -local logreport = luaotfload.log and luaotfload.log.report or print -local add_to_callback = luatexbase.add_to_callback -local create_callback = luatexbase.create_callback -local reset_callback = luatexbase.reset_callback -local call_callback = luatexbase.call_callback -local dummy_function = function () end +local logreport = luaotfload.log and luaotfload.log.report or print local install_formats = function () local fonts = fonts @@ -29,7 +24,11 @@ local install_formats = function () if not readers or not handlers or not formats then return false end local aux = function (which, reader) - if not which or type (which) ~= "string" then return false end + if not which or type (which) ~= "string" + or not reader or type (reader) ~= "function" then + logreport ("both", 2, "main", "error installing reader for “%s”", which) + return false + end formats [which] = "type1" readers [which] = reader handlers [which] = { } @@ -51,7 +50,7 @@ end --doc]]-- -local definers = { } --- (string, spec -> size -> id -> tmfdata) hash_t +local definers --- (string, spec -> size -> id -> tmfdata) hash_t do local read = fonts.definers.read @@ -61,7 +60,7 @@ do --- 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", fontdata, specification) + luatexbase.call_callback ("luaotfload.patch_font", fontdata, specification) else call_callback ("luaotfload.patch_font_unsafe", fontdata, specification) end @@ -91,10 +90,12 @@ do end end - definers.patch = patch - definers.generic = read - definers.info_patch = mk_info "patch" - definers.info_generic = mk_info "generic" + definers = { + patch = patch, + generic = read, + info_patch = mk_info "patch", + info_generic = mk_info "generic", + } end --[[doc-- @@ -110,18 +111,32 @@ end --doc]]-- +local install_callbacks = function () + local create_callback = luatexbase.create_callback + local dummy_function = function () end + create_callback ("luaotfload.patch_font", "simple", dummy_function) + create_callback ("luaotfload.patch_font_unsafe", "simple", dummy_function) + luatexbase.reset_callback "define_font" + local definer = config.luaotfload.run.definer + luatexbase.add_to_callback ("define_font", + definers[definer or "patch"], + "luaotfload.define_font", + 1) + return true +end + return { install = function () + local ret = true if not install_formats () then logreport ("both", 0, "main", "error initializing OFM/PF{A,B} loaders") + ret = false end - create_callback("luaotfload.patch_font", "simple", dummy_function) - create_callback("luaotfload.patch_font_unsafe", "simple", dummy_function) - - reset_callback "define_font" - local definer = config.luaotfload.run.definer - add_to_callback ("define_font", definers[definer or "patch"], - "luaotfload.define_font", 1) + if not install_callbacks () then + logreport ("both", 0, "main", "error installing font loader callbacks") + ret = false + end + return ret end } --- vim:tw=71:sw=2:ts=2:expandtab +-- vim:tw=79:sw=2:ts=2:expandtab |