% engine=luatex

%D \module
%D   [      file=s-sys-01,
%D        version=2008.03.32,
%D          title=\CONTEXT\ Style File,
%D       subtitle=Generate List of Math Symbol,
%D         author=Hans Hagen,
%D           date=\currentdate,
%D      copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%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
function showmath()
    local slots  = mathematics.slots.traditional
    local escape = characters.filters.utf.private.escape
    local data   = characters.data
    tex.sprint(tex.ctxcatcodes,"\\starttabulate[|T|c|T|T|T|T||||]")
    local texsprint =  tex.sprint
%  -- function texsprint(a,b) print(b) end
    for _, v in ipairs(table.sortedkeys(slots)) do
        local t, d, u = slots[v], data[v], escape(utf.char(v))
        local class, name, description = d.mathclass or "", d.mathname or "" , d.description or ""
        if class == "accent" then
            u = ""
        end
        if t[3] and t[4] then
            texsprint(tex.ctxcatcodes,string.format(
                "\\NC 0x%04X\\NC $%s$\\NC %s\\NC 0x%04X\\NC %s\\NC 0x%04X\\NC %s\\NC %s\\NC %s\\NC\\NR",
                v,u,t[1],t[2],t[3],t[4],class,name,description))
        else
            texsprint(tex.ctxcatcodes,string.format(
                "\\NC 0x%04X\\NC $%s$\\NC %s\\NC 0x%04X\\NC\\NC\\NC %s\\NC %s\\NC %s\\NC\\NR",
                v,u,t[1],t[2],class,name,description))
        end
    end
    tex.sprint(tex.ctxcatcodes,"\\stoptabulate")
end
\stopluacode

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

\setupbodyfont
  [9pt]

\setupfootertexts
  []
  [math characters -- \pagenumber]

\starttext
\ctxlua{showmath()}
\stoptext
