%D \module
%D   [      file=s-fnt-01,
%D        version=2006.10.10, % guess
%D          title=\CONTEXT\ Style File,
%D       subtitle=Listing Glyphs in Large Fonts,
%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
local format, sprint = string.format, tex.sprint

function fonts.otf.show_all()
    local tfmdata = fonts.ids[font.current()]
    if tfmdata and tfmdata.shared then
        local otfdata = tfmdata.shared.otfdata
        if otfdata and otfdata.luatex then
            local unicodes = otfdata.luatex.unicodes
            sprint(tex.ctxcatcodes,format("\\starttabulate[|l|r|c|]"))
            for i, name in ipairs(table.sortedkeys(unicodes)) do
                local unicode = unicodes[name]
                if unicode >= 0 then
                    sprint(tex.ctxcatcodes,format("\\NC %s \\NC %s \\NC \\char%s \\NC\\NR",name,unicode,unicode))
                end
            end
            sprint(tex.ctxcatcodes,format("\\stoptabulate"))
        end
    end
end

function fonts.show_all()
    local tfmdata = fonts.ids[font.current()]
    if tfmdata then
        local chars = tfmdata.characters
        local descs = tfmdata.descriptions or { }
        local data = characters.data
        sprint(tex.ctxcatcodes,format("\\setuptabulate[header=repeat]"))
        sprint(tex.ctxcatcodes,format("\\starttabulatehead"))
        sprint(tex.ctxcatcodes,"\\NC\\bf unicode\\NC\\bf visual\\NC\\bf index\\NC\\bf glyph\\NC\\bf adobe\\NC\\bf context\\NC\\NR")
        sprint(tex.ctxcatcodes,"\\HL")
        sprint(tex.ctxcatcodes,format("\\stoptabulatehead"))
        sprint(tex.ctxcatcodes,format("\\starttabulate[|l|c|l|p|p|p|]"))
        for k, unicode in ipairs(table.sortedkeys(chars)) do
            if unicode >= 0 then
                local chr, des, dat = chars[unicode], descs[unicode], data[unicode]
                local index = chr.index or 0
                local cname = (dat and dat.contextname) or ""
                local aname = (dat and dat.adobename) or ""
                local gname = (des and des.name) or ""
                local mname = dat and dat.mathname
                if type(mname) ~= "string" then
                    mname = ""
                end
                local mspec = dat and dat.mathspec
                if mspec then
                    for m=1,#mspec do
                        local n = mspec[m].name
                        if n then
                            if mname == "" then
                                mname = n
                            else
                                mname = mname .. " " .. n
                            end
                        end
                    end
                end
                if mname ~= "" then
                    mname = "m: " .. mname
                    if cname ~= "" then
                        cname = cname .. " " .. mname
                    else
                        cname = mname
                    end
                end
                sprint(tex.ctxcatcodes,format("\\NC\\tttf U+%05X\\NC\\char%s\\NC\\tttf %05X\\NC\\tttf %s\\NC\\tttf %s\\NC\\tttf %s\\NC\\NR",unicode,unicode,index,gname,aname,cname))
            end
        end
        sprint(tex.ctxcatcodes,format("\\stoptabulate"))
    else
        sprint(tex.ctxcatcodes,"problems")
    end
end

function fonts.show_glyphs()
    local tfmdata = fonts.ids[font.current()]
    if tfmdata then
        local chars = tfmdata.characters
        for k, v in ipairs(table.sortedkeys(chars)) do
            if v >=0 then
                sprint(tex.ctxcatcodes,format("\\dontleavehmode{\\strut\\char%s}\\endgraf",v))
            end
        end
    end
end
\stopluacode

\def\ShowCompleteFont#1#2#3%
  {\bgroup
   \page
   \font\TestFont=#1 at #2
   \setuplayout[style=\TestFont]
   \setupheadertexts[]
   \setupfootertexts[#1 -- \pagenumber]
   \setupfootertexts[pagenumber]
   \setuplayout[width=middle,height=middle,topspace=1cm,backspace=1cm]
   \TestFont
   \nonknuthmode
   \startcolumns[n=#3]
   \TestFont
   \ctxlua { fonts.show_all() }
   \stopcolumns
   \page
   \egroup}

\def\ShowAllGlyphs#1#2#3%
  {\bgroup
   \page
   \font\TestFontA=#1 at 12pt
   \font\TestFontB=#1 at #2
   \setuplayout[style=\TestFontA]
   \setupheadertexts[]
   \setupfootertexts[#1 -- \pagenumber]
   \setuplayout[width=middle,height=middle,topspace=1cm,backspace=1cm,header=1cm,footer=2cm]
   \TestFontB \setupinterlinespace[line=1.2\dimexpr#2\relax] \raggedcenter
   \nonknuthmode
   \startcolumns[n=#3]
   \TestFontB
   \ctxlua { fonts.show_glyphs() }
   \stopcolumns
   \page
   \egroup}

\endinput

\starttext

% \ShowCompleteFont{name:dejavusansmono}{10pt}{2}
% \ShowCompleteFont{name:dejavuserif}{10pt}{2}
% \ShowCompleteFont{name:officinasansbookitcregular}{10pt}{2}
% \ShowCompleteFont{name:officinaserifbookitcregular}{10pt}{2}
% \ShowCompleteFont{name:serpentineserifeflight}{10pt}{2}
% \ShowCompleteFont{name:lmtypewriter10-regular}{10pt}{2}
% \ShowCompleteFont{lt55485}{10pt}{2}
% \ShowCompleteFont{lmr10}{10pt}{2}
% \ShowCompleteFont{lbr}{10pt}{2}
% \ShowCompleteFont{name:Cambria}{10pt}{2}
% \ShowCompleteFont{name:CambriaMath}{10pt}{2}
% \ShowCompleteFont{name:texgyrepagella-regular}{10pt}{2}
% \ShowCompleteFont{name:texgyrechorus-mediumitalic}{10pt}{2}
% \ShowAllGlyphs   {name:texgyrepagella-regular}    {48pt}{2}
% \ShowAllGlyphs   {name:texgyrechorus-mediumitalic}{48pt}{2}
% \ShowCompleteFont{name:euler10-regular}{10pt}{2}

% \ShowCompleteFont{name:palatinosansinformalcombold}{20pt}{2}
% \ShowCompleteFont{name:palatinonovaregular}{11pt}{2}
% \ShowCompleteFont{name:optimanovaltregular}{11pt}{2}

\stoptext
