if not modules then modules = { } end modules['s-fonts-goodies'] = {
    version   = 1.001,
    comment   = "companion to s-fonts-goodies.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

moduledata.fonts         = moduledata.fonts         or { }
moduledata.fonts.goodies = moduledata.fonts.goodies or { }

local NC, NR, HL = context.NC, context.NR, context.HL

local function initialized(specification)
    specification = interfaces.checkedspecification(specification)
    local name = specification.name
    if name then
        local goodies = fonts.goodies.load(name)
        if goodies then
            return specification, goodies
        end
    end
end

function moduledata.fonts.goodies.showstylistics(specification)
    local specification, goodies = initialized(specification)
    if goodies then
        local stylistics = goodies.stylistics
        if stylistics then
            context.starttabulate { "|Tl|Tpl|" }
            HL()
            NC() context.bold("feature")
            NC() context.bold("meaning")
            NC() NR()
            HL()
            for feature, meaning in table.sortedpairs(stylistics) do
                NC() context(feature)
                NC() context(string.lower(meaning))
                NC() NR()
            end
            HL()
            context.stoptabulate()
        end
    end
end

function moduledata.fonts.goodies.showfeaturesets(specification)
    local specification, goodies = initialized(specification)
    if goodies then
        local featuresets = goodies.featuresets
        if featuresets then
            context.starttabulate { "|Tl|Tpl|" }
            HL()
            NC() context.bold("featureset")
            NC() context.bold("definitions")
            NC() NR()
            HL()
            for featureset, definitions in table.sortedpairs(featuresets) do
                NC() context.type(featureset) NC()
                for k, v in table.sortedpairs(definitions) do
                    context("%s=%S",k,v)
                    context.quad()
                end
                NC() NR()
            end
            HL()
            context.stoptabulate()
        end
    end
end

function moduledata.fonts.goodies.showcolorschemes(specification)
    local specification, goodies = initialized(specification)
    if goodies then
        local colorschemes = goodies.colorschemes
        if colorschemes then
            context.starttabulate { "|Tl|Tpl|" }
            HL()
            NC() context.bold("colorscheme")
            NC() context.bold("numbers")
            NC() NR()
            HL()
            for colorscheme, numbers in table.sortedpairs(colorschemes) do
                NC() context.type(colorscheme) NC()
                for i=1,#numbers do
                    context(i)
                    context.quad()
                end
                NC() NR()
            end
            HL()
            context.stoptabulate()
        end
    end
end

function moduledata.fonts.goodies.showfiles(specification)
    local specification, goodies = initialized(specification)
    if goodies then
        local files = goodies.files
        if files and files.list then
            for filename, specification in table.sortedpairs(files.list) do
                context.start()
                context.dontleavehmode()
                context.definedfont{ filename .. "*default" }
                context("%s-%s-%s-%s-%s",
                    specification.name    or files.name,
                    specification.weight  or "normal",
                    specification.style   or "normal",
                    specification.width   or "normal",
                    specification.variant or "normal")
                context.par()
                context.stop()
            end
        end
    end
end