-- 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,
    },
}
