diff options
-rw-r--r-- | luaotfload-auxiliary.lua | 62 | ||||
-rw-r--r-- | luaotfload.dtx | 24 |
2 files changed, 71 insertions, 15 deletions
diff --git a/luaotfload-auxiliary.lua b/luaotfload-auxiliary.lua index 844c170..5ed7bb9 100644 --- a/luaotfload-auxiliary.lua +++ b/luaotfload-auxiliary.lua @@ -36,6 +36,68 @@ local stringbyte = string.byte ----------------------------------------------------------------------- --[[doc-- + +The font object (tfmdata) structure has changed since version 1.x, so +in case other packages haven’t been updated we put fallbacks in place +where they’d expect them. Specifically we have in mind: + + · fontspec + · unicode-math + · microtype (most likely fixed till TL2013) + +--doc]]-- + +--- fontobj -> fontobj +local add_fontdata_fallbacks = function (fontdata) + if type(fontdata) == "table" then + local fontparameters = fontdata.parameters + local metadata + if not fontdata.shared then --- that would be a tfm + --- we can’t really catch everything that + --- goes wrong; for some reason, fontspec.lua + --- just assumes it always gets an otf object, + --- so its capheight callback, which does not + --- bother to do any checks, will access + --- fontdata.shared no matter what ... + fontdata.units = fontdata.units_per_em + else --- otf + metadata = fontdata.shared.rawdata.metadata + fontdata.units = fontparameters.units + local resources = fontdata.resources + fontdata.size = fontparameters.size + --- for legacy fontspec.lua and unicode-math.lua + fontdata.shared.otfdata = metadata + fontdata.shared.otfdata.metadata = metadata --- brr, that’s meta indeed + --- for microtype.lua + fontdata.shared.otfdata.luatex = { + unicodes = resources.unicodes, + features = resources.features, + } + end + end + return fontdata +end + +luatexbase.add_to_callback( + "luaotfload.patch_font", + add_fontdata_fallbacks, + "luaotfload.fontdata_fallbacks") + +--[[doc-- + +Additionally, the font registry is expected at fonts.identifiers, but +in the meantime it has been migrated to fonts.hashes.identifiers. +We’ll make luaotfload satisfy those assumptions. (Maybe it’d be more +appropriate to use font.getfont() since Hans made it a harmless wrapper +[1].) + +[1] http://www.ntg.nl/pipermail/ntg-context/2013/072166.html + +--doc]]-- + +fonts.identifiers = fonts.hashes.identifiers + +--[[doc-- This sets two dimensions apparently relied upon by the unicode-math package. --doc]]-- diff --git a/luaotfload.dtx b/luaotfload.dtx index fd71485..6daeece 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -1180,8 +1180,9 @@ local luaotfload = luaotfload config = config or { } config.luaotfload = config.luaotfload or { } -config.luaotfload.resolver = config.luaotfload.resolver or "normal" -config.luaotfload.definer = config.luaotfload.definer or "patch" +config.luaotfload.resolver = config.luaotfload.resolver or "normal" +config.luaotfload.definer = config.luaotfload.definer or "patch" +config.luaotfload.loglevel = config.luaotfload.loglevel or 1 --luaotfload.prefer_merge = config.luaotfload.prefer_merge or true luaotfload.module = { @@ -1419,6 +1420,7 @@ tex.attribute[0] = 0 % \begin{macrocode} loadmodule"merged.lua" +---loadmodule"font-odv.lua" --- <= Devanagari support from Context if fonts then @@ -1518,20 +1520,9 @@ add_to_callback("find_vf_file", loadmodule"lib-dir.lua" --- required by luaofload-database.lua loadmodule"override.lua" --- “luat-ovr” -logs.set_loglevel(config.luaotfload.loglevel or 2) +logs.set_loglevel(config.luaotfload.loglevel) % \end{macrocode} -% \CONTEXT does not support ofm, these lines were added in order to make it -% work. However they do not seem necessary so they are commented for now. -% -% \begin{macrocode} --- if fonts and fonts.readers.tfm then --- fonts.readers.ofm = fonts.readers.tfm --- fonts.handlers.ofm = fonts.handlers.tfm --- empty anyways --- fonts.formats.ofm = fonts.formats.tfm --- “type1” --- --- fonts.readers.sequence[#fonts.readers.sequence+1] = "ofm" ---end -% \end{macrocode} % Now we load the modules written for \identifier{luaotfload}. % % \begin{macrocode} @@ -1658,7 +1649,10 @@ local read_font_file = fonts.definers.read --- spec -> size -> id -> tmfdata local patch_defined_font = function (specification, size, id) local tfmdata = read_font_file(specification, size, id) - if type(tfmdata) == "table" then + if type(tfmdata) == "table" and tfmdata.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) end return tfmdata |