module("luaotfload", package.seeall) luaotfload.module = { name = "luaotfload-legacy", version = 1.31, date = "2013/04/25", description = "Unsupported Luaotfload", author = "Elie Roux & Hans Hagen", copyright = "Elie Roux", license = "GPL v2" } local error, warning, info, log = luatexbase.provides_module(luaotfload.module) --[[doc-- This used to be a necessary initalization in order not to rebuild an existing font. Maybe 600 should be replaced by |\pdfpkresolution| or |texconfig.pk_dpi| (and it should be replaced dynamically), but we don't have access (yet) to the |texconfig| table, so we let it be 600. Anyway, it does still work fine even if |\pdfpkresolution| is changed. --doc]]-- kpse.init_prog("", 600, "/") --[[doc-- The minimal required \luatex version. We are tolerant folks. --doc]]-- local luatex_version = 60 if tex.luatexversion < luatex_version then warning("LuaTeX v%.2f is old, v%.2f is required, v0.76 recommended.", tex.luatexversion/100, luatex_version /100) end --[[doc-- \subsection{Module loading} We load the outdated \context files with this function. It automatically adds the |otfl-| prefix to it, so that we call it with the actual \context name. --doc]]-- function luaotfload.loadmodule(tofind) local found = kpse.find_file(tofind,"tex") if found then log("loading file %s.", found) dofile(found) else error("file %s not found.", tofind) end end local loadmodule = luaotfload.loadmodule --[[doc-- Keep away from these lines! --doc]]-- loadmodule"luaotfload-legacy-merged.lua" if not fonts then loadmodule("otfl-luat-dum.lua") -- not used in context at all loadmodule("otfl-luat-ovr.lua") -- override some luat-dum functions loadmodule("otfl-data-con.lua") -- maybe some day we don't need this one loadmodule("otfl-font-ini.lua") loadmodule("otfl-node-dum.lua") loadmodule("otfl-node-inj.lua") --[[doc-- By default \context takes some private attributes for internal use. To avoide attribute clashes with other packages, we override the function that allocates new attributes, making it a wraper around |luatexbase.new_attribute()|. We also prefix attributes with |otfl@| to avoid possiple name clashes. --doc]]-- loadmodule("luaotfload-legacy-attributes.lua") -- patch attributes --[[doc-- Font handling modules. --doc]]-- loadmodule("otfl-font-tfm.lua") loadmodule("otfl-font-cid.lua") loadmodule("otfl-font-ott.lua") loadmodule("otfl-font-map.lua") loadmodule("otfl-font-otf.lua") loadmodule("otfl-font-otd.lua") loadmodule("otfl-font-oti.lua") loadmodule("otfl-font-otb.lua") loadmodule("otfl-font-otn.lua") loadmodule("otfl-font-ota.lua") loadmodule("otfl-font-otc.lua") loadmodule("otfl-font-def.lua") --[[doc-- \textsf{old luaotfload} specific modules. --doc]]-- loadmodule("otfl-font-xtx.lua") loadmodule("otfl-font-dum.lua") loadmodule("otfl-font-clr.lua") end loadmodule"luaotfload-legacy-database.lua" --- unmerged coz needed in db script --[[doc-- This is a patch for |otfl-font-def.lua|, that defines a reader for ofm fonts, this is necessary if we set the forced field of the specification to |ofm|. --doc]]-- if fonts and fonts.tfm and fonts.tfm.readers then fonts.tfm.readers.ofm = fonts.tfm.readers.tfm end --[[doc-- \subsection{Post-processing TFM table} Here we do some final touches to the loaded TFM table before passing it to the \tex end. First we create a callback for patching fonts on the fly, to be used by other packages. --doc]]-- luatexbase.create_callback("luaotfload.patch_font", "simple", function() end) --[[doc-- then define a function where font manipulation will take place. --doc]]-- local function def_font(...) local fontdata = fonts.define.read(...) if type(fontdata) == "table" and fontdata.shared then --[[doc-- Then we populate |MathConstants| table, which is required for OpenType math. Note: actually it isn’t, but you’re asking for it by using outdated code. --doc]]-- local otfdata = fontdata.shared.otfdata if otfdata.metadata.math then local mc = { } for k,v in next, otfdata.metadata.math do if k:find("Percent") then -- keep percent values as is mc[k] = v else mc[k] = v / fontdata.units * fontdata.size end end -- for \overwithdelims mc.FractionDelimiterSize = 1.01 * fontdata.size mc.FractionDelimiterDisplayStyleSize = 2.39 * fontdata.size fontdata.MathConstants = mc end --[[doc-- Execute any registered font patching callbacks. --doc]]-- luatexbase.call_callback("luaotfload.patch_font", fontdata) end return fontdata end --[[doc-- \subsection{\context override} We have a unified function for both file and name resolver. This line is commented as it makes database reload too often. This means that in some cases, a font in the database will not be found if it's not in the texmf tree. A similar thing will reappear in next version. --doc]]-- --fonts.define.resolvers.file = fonts.define.resolvers.name --[[doc-- Overriding some defaults set in \context code. --doc]]-- fonts.mode = "node" --[[doc-- The following features are useful in math (e.g. in XITS Math font), but \textsf{luaotfload} does not recognize them in |base| mode. --doc]]-- local register_base_sub = fonts.otf.features.register_base_substitution local gsubs = { "ss01", "ss02", "ss03", "ss04", "ss05", "ss06", "ss07", "ss08", "ss09", "ss10", "ss11", "ss12", "ss13", "ss14", "ss15", "ss16", "ss17", "ss18", "ss19", "ss20", } for _,v in next, gsubs do register_base_sub(v) end --[[doc-- Finally we register the callbacks --doc]]-- luatexbase.add_to_callback("pre_linebreak_filter", nodes.simple_font_handler, "luaotfload.pre_linebreak_filter") luatexbase.add_to_callback("hpack_filter", nodes.simple_font_handler, "luaotfload.hpack_filter") luatexbase.reset_callback("define_font") luatexbase.add_to_callback("define_font", def_font, "luaotfload.define_font", 1) luatexbase.add_to_callback("find_vf_file", fonts.vf.find, "luaotfload.find_vf_file") --[[doc-- XXX: see https://github.com/wspr/unicode-math/issues/185 \luatex does not provide interface to accessing |(Script)ScriptPercentScaleDown| math constants, so we emulate \xetex behaviour by setting |\fontdimen10| and |\fontdimen11|. Note: actually, it does now, but not unless you update. --doc]]-- local function set_sscale_diments(fontdata) local mc = fontdata.MathConstants if mc then if mc["ScriptPercentScaleDown"] then fontdata.parameters[10] = mc.ScriptPercentScaleDown else -- resort to plain TeX default fontdata.parameters[10] = 70 end if mc["ScriptScriptPercentScaleDown"] then fontdata.parameters[11] = mc.ScriptScriptPercentScaleDown else -- resort to plain TeX default fontdata.parameters[11] = 50 end end end luatexbase.add_to_callback("luaotfload.patch_font", set_sscale_diments, "unicodemath.set_sscale_diments") -- vim:ts=2:sw=2:expandtab:ft=lua