-- Bah, I really hate these patches especially because one needs to make
-- sure that they are still valid when the font gets updated. So, let's
-- do it runtime (not in the cached copy) and issue a warning every run.
-- As we cannot rely on version numbers (if we have more patches) we
-- check for values instead.
--
-- This font also has inconsistent italics in smaller sizes which we can
-- fix in a more general way but I'm not sure if we want that.

local function fix_italic(target,original,name,value,factor)
    local m = target.parameters.mathsize
    if m then
        local u = type(name) == "number" and name or original.resources.unicodes[name]
        if u then
            local c = target.characters[u]
            if c then
                local i = c.italic
                if i then
                    local d = original.descriptions[u]
                    if d and d.math.italic == value then
                        if m then
                            logs.report("patching font","fixing italic correction of %U at math size %i by %0.3f",u,m,factor)
                            c.italic = factor * i
                        end
                    end
                end
            end
        end
    end
end

return {
    name = "stix-two-math",
    version = "1.00",
    comment = "Goodies that complement stix two opentype.",
    author = "Hans Hagen",
    copyright = "ConTeXt development team",
    mathematics = {
        -- these tags are suggestions and can still change
        alternates = {
            calligraphic = { feature = 'ss01', value = 1, comment = "Mathematical Alternative Calligraphic Characters" },
            italic       = { feature = 'ss02', value = 1, comment = "Mathematical Alternative Lowercase Italic" },
            barred       = { feature = 'ss03', value = 1, comment = "Mathematical Alternative Barred Characters" }, -- hbar, lambdabar etc
            primes       = { feature = 'ss04', value = 1, comment = "Mathematical Alternative Primes" },            -- larger/lower primes, minute etc
            arrow        = { feature = 'ss05', value = 1, comment = "Mathematical Alternative Smaller Arrows" },
            narrower     = { feature = 'ss06', value = 1, comment = "Mathematical Alternative Narrower Elements" }, -- narrower/shorter element etc
            small        = { feature = 'ss07', value = 1, comment = "Mathematical Alternative Smaller Operators" },
            upright      = { feature = 'ss08', value = 1, comment = "Mathematical Alternative Upright Symbols" },   -- upright integrals etc.
            negated      = { feature = 'ss09', value = 1, comment = "Mathematical Alternative Negated Symbols" },
            relation     = { feature = 'ss10', value = 1, comment = "Mathematical Alternative Relations" },
            negatedset   = { feature = 'ss09', value = 1, comment = "Mathematical Alternative Negated Set Symbols" },
         -- todo         = { feature = 'ss14', value = 1, comment = "" },
            circled      = { feature = 'ss16', value = 1, comment = "Mathematical Alternative Circled Operators" },
        },
        tweaks = {
            aftercopying = {
                function(target,original)
                    fix_italic(target,original,"uni222B.updsp",80,3.5)
                    fix_italic(target,original,"uni222B.up",   80,2.5)
                end,
            },
        },
    },
}


