-- There can be multiple treatments.lfg files in the tree and all are loaded in -- the order specified by tree order access. The first treatment of a file -- always wins, so one can overload. These files are not (to be) loaded with -- font definitions. (Experiment as part of writing the font manual.) -- -- So there are several ways to fix a font: add a patcher to a goodie file and -- load that one. Such a patch can end up in the cached file. Treatments are -- applied at runtime. An experimental auto-loaded goodie approach is not yet -- enabled and will never be if treatments can do the job. local report = fonts.treatments.report local fix_unifraktur = { comment = "suspicious x height", fixes = function(data) local pfminfo = data.metadata.pfminfo if pfminfo then local os2_xheight = pfminfo.os2_xheight if os2_xheight and os2_xheight < 350 then report("suspicious x-height %a, nilling",os2_xheight) pfminfo.os2_xheight_original = os2_xheight pfminfo.os2_xheight = nil end end end, } local fix_lmmonoregular = { -- -- there are now some extra safeguards for idris -- comment = "wrong widths of some glyphs", fixes = function(data) report("fixing some wrong widths") local unicodes = data.resources.unicodes local descriptions = data.descriptions local function getdescription(name) local unicode = unicodes[name] if not unicode then report("no valid unicode for %a",name) return end local description = descriptions[unicode] if not description then report("no glyph names %a in font",name) return end return description end local zero = getdescription("zero") if not zero then return end local defaultwidth = zero.width local function setwidth(name) local data = getdescription(name) if data then data.width = defaultwidth end end setwidth("six") setwidth("nine") setwidth("caron") setwidth("perthousand") setwidth("numero") setwidth("caron.cap") setwidth("six.taboldstyle") setwidth("nine.taboldstyle") setwidth("dollar.oldstyle") end } return { name = "treatments", version = "1.00", comment = "Goodies that deals with some general issues.", author = "Hans Hagen", copyright = "ConTeXt development team", treatments = { -- we need to complete this list in order to be able to warn -- users not to include these files unless permitted ["adobeheitistd-regular.otf"] = { comment = "this font is part of acrobat", ignored = false, -- included = false, -- not yet }, -- just an experiment .. normally no big deal but I ran into -- such case ["crap.ttf"] = { comment = "a text file with suffix ttf", -- used in test file ignored = true, }, ["lingoes.ttf"] = { comment = "bugged file", ignored = true, }, -- harmless example -- ["copperplatethirtythreebc.ttf"] = { -- comment = "hangs and has no hyphen", -- ignored = true, -- }, -- ["latinmodern-math.otf"] = { -- comment = "experimental", -- }, ["lmmono12regular.otf"] = fix_lmmonoregular, ["unifrakturcook.ttf"] = fix_unifraktur, ["unifrakturmaguntia.ttf"] = fix_unifraktur, }, }