%D \module
%D   [      file=s-mat-20.mkiv,
%D        version=2012.12.05,
%D          title=\CONTEXT\ Style File,
%D       subtitle=Math Tracing Macros,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\startluacode

local tables = utilities.tables.definedtable("math","tracing","spacing","tables")

tables.styleaxis = {
    "ord", "op", "bin", "rel", "open", "close", "punct", "inner",
}

tables.parameters = {
    "quad", "axis", "operatorsize",
    "overbarkern", "overbarrule", "overbarvgap",
    "underbarkern", "underbarrule", "underbarvgap",
    "radicalkern", "radicalrule", "radicalvgap",
    "radicaldegreebefore", "radicaldegreeafter", "radicaldegreeraise",
    "stackvgap", "stacknumup", "stackdenomdown",
    "fractionrule", "fractionnumvgap", "fractionnumup",
    "fractiondenomvgap", "fractiondenomdown", "fractiondelsize",
    "limitabovevgap", "limitabovebgap", "limitabovekern",
    "limitbelowvgap", "limitbelowbgap", "limitbelowkern",
    "underdelimitervgap", "underdelimiterbgap",
    "overdelimitervgap", "overdelimiterbgap",
    "subshiftdrop", "supshiftdrop", "subshiftdown",
    "subsupshiftdown", "subtopmax", "supshiftup",
    "supbottommin", "supsubbottommax", "subsupvgap",
    "spaceafterscript", "connectoroverlapmin",
}

tables.styles = {
    "display",
    "text",
    "script",
    "scriptscript",
}

function tables.stripmu(str)
    str = string.gsub(str,"mu","")
    str = string.gsub(str," ","")
    str = string.gsub(str,"plus","+")
    str = string.gsub(str,"minus","-")
    return str
end

function tables.strippt(old)
    local new = string.gsub(old,"pt","")
    if new ~= old then
        new = string.format("%0.4f",tonumber(new))
    end
    return new
end

function tables.showspacing()

    local styles    = tables.styles
    local styleaxis = tables.styleaxis

    context.starttabulate { "|Tl|Tl|" .. string.rep("Tc|",(#styles*2)) }
        context.HL()
        context.NC()
        context.NC()
        context.NC()
        for i=1,#styles do
            context.bold(styles[i])
            context.NC()
            context.bold("(cramped)")
            context.NC()
        end
        context.NR()
        context.HL()
        for i=1,#styleaxis do
         -- print(key,tex.getmath(key,"text"))
            local one = styleaxis[i]
            for j=1,#styleaxis do
                local two = styleaxis[j]
                context.NC()
                if j == 1 then
                    context.bold(one)
                end
                context.NC()
                context.bold(two)
                context.NC()
                for i=1,#styles do
                    context("\\ctxlua{context(math.tracing.spacing.tables.stripmu('\\the\\Umath%s%sspacing\\%sstyle'))}",one,two,styles[i])
                    context.NC()
                    context("\\ctxlua{context(math.tracing.spacing.tables.stripmu('\\the\\Umath%s%sspacing\\cramped%sstyle'))}",one,two,styles[i])
                    context.NC()
                end
                context.NR()
            end
        end
    context.stoptabulate()
end

function tables.showparameters()

    local styles     = tables.styles
    local parameters = tables.parameters

    context.starttabulate { "|l|" .. string.rep("Tc|",(#styles*2)) }
        context.HL()
        context.NC()
        context.NC()
        for i=1,#styles do
            context.bold(styles[i])
            context.NC()
            context.bold("(cramped)")
            context.NC()
        end
        context.NR()
        context.HL()
        for i=1,#parameters do
            local parameter = parameters[i]
         -- print(parameter,tex.getmath(parameter,"text"))
            context.NC()
            context.type(parameter)
            context.NC()
            for i=1,#styles do
                context("\\ctxlua{context(math.tracing.spacing.tables.strippt('\\the\\Umath%s\\%sstyle'))}",parameter,styles[i])
                context.NC()
                context("\\ctxlua{context(math.tracing.spacing.tables.strippt('\\the\\Umath%s\\cramped%sstyle'))}",parameter,styles[i])
                context.NC()
            end
            context.NR()
        end
    context.stoptabulate()

end

\stopluacode

\continueifinputfile{s-mat-20.mkiv}

\setuplayout
  [width=middle,
   height=middle,
   backspace=1cm,
   topspace=1cm,
   footer=0pt,
   header=0pt]

\setupbodyfont
  [dejavu,8pt]

\starttext

    \ctxlua{math.tracing.spacing.tables.showspacing()}
  % \ctxlua{math.tracing.spacing.tables.showparameters()}

\stoptext
