%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 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.

%D This module is sort of obsolete as other moduels give nicer overviews.

\startluacode
    moduledata.fonts          = moduledata.fonts          or { }
    moduledata.fonts.complete = moduledata.fonts.complete or { }

    local fontdata = fonts.hashes.identifiers

    local context = context
    local escaped = context.escaped

    function moduledata.fonts.complete.all()
        local tfmdata = fontdata[true]
        if tfmdata then
            local NC, NR, HL, char, bold, tttf = context.NC, context.NR, context.HL, context.char, context.bold, context.tttf
            local descriptions = tfmdata.descriptions or { }
            local data = characters.data
         -- context.setuptabulate { header = "repeat" }
         -- context.starttabulatehead()
         --     NC() bold("unicode")
         --     NC() bold("visual")
         --     NC() bold("index")
         --     NC() bold("tounicode")
         --     NC() bold("unicodes")
         --     NC() bold("glyph")
         --     NC() bold("adobe")
         --     NC() bold("context")
         --     NC() NR()
         -- context.stoptabulatehead()
            context.starttabulate { "|l|c|p(8em)|l|l|p|p|p|" }
            NC() bold("unicode")
            NC() bold("visual")
            NC() bold("unicodes")
            NC() bold("tounicode")
            NC() bold("index")
            NC() bold("glyph")
            NC() bold("adobe")
            NC() bold("context")
            NC() NR()
            for unicode, chr in fonts.iterators.characters(tfmdata) do
                local des, dat = descriptions[unicode], data[unicode]
                local index     = chr.index or 0
                local tounicode = chr.tounicode
                local isunicode = chr.unicode
                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
                NC()
                    tttf()
                    context("%05X",unicode)
                NC()
                    char(unicode)
                NC()
                    if isunicode then
                        tttf()
                        if type(isunicode) == "table" then
                            for i=1,#isunicode do
                                if i > 1 then
                                    if i % 2 ~= 0 then
                                        context.crlf()
                                    else
                                        context.space()
                                    end
                                end
                                context("%05X",isunicode[i])
                            end
                        else
                            context("%05X",isunicode)
                        end
                    end
                NC()
                    if tounicode then
                        tttf()
                        context(tounicode)
                    end
                NC()
                    tttf()
                    context("%05X",index)
                NC()
                if gname ~= "" then
                    tttf()
                    escaped(gname)
                end
                NC()
                if aname ~= "" then
                    tttf()
                    context(aname)
                end
                NC()
                if cname ~= "" then
                    tttf()
                    context(cname)
                end
                NC() NR()
            end
            context.stoptabulate()
        else
            context("problems")
        end
    end

    function moduledata.fonts.complete.glyphs()
        local tfmdata = fontdata[true]
        if tfmdata then
            for unicode, chr in fonts.iterators.characters(tfmdata) do
                context.showglyph(unicode)
            end
        end
    end
\stopluacode

\unexpanded\def\ShowCompleteFont#1#2#3%
  {\begingroup
   \page
   \font\TestFont=#1 at #2
   \setuplayout[style=\TestFont]
   \setupheadertexts[]
   \setupfootertexts[#1\space\endash\space\pagenumber]
   \setuplayout[width=middle,height=middle,topspace=1cm,backspace=1cm]
   \TestFont
   \nonknuthmode
   \startcolumns[n=#3]
       \TestFont
       \ctxlua { moduledata.fonts.complete.all() }
   \stopcolumns
   \page
   \endgroup}

\unexpanded\def\ShowAllGlyphs#1#2#3%
  {\begingroup
   \page
   \def\showglyph##1{\dontleavehmode\strut\char##1\relax\par}
   \font\TestFontA=#1 at 12pt
   \font\TestFontB=#1 at #2
   \setuplayout[style=\TestFontA]
   \setupheadertexts[]
   \setupfootertexts[#1\space\endash\space\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 { moduledata.fonts.complete.glyphs() }
   \stopcolumns
   \page
   \endgroup}

\continueifinputfile{s-fonts-complete.mkiv}

\usemodule[art-01] \setuplayout[overview] \setupbodyfont[8pt]

\starttext

% \ShowCompleteFont{name:dejavusansmono}{10pt}{1}
% \ShowCompleteFont{name:dejavuserif}{10pt}{2}
% \ShowCompleteFont{name:officinasansbookitcregular}{10pt}{2}
% \ShowCompleteFont{name:officinaserifbookitcregular}{10pt}{2}
% \ShowCompleteFont{name:serpentineserifeflight}{10pt}{2}
% \ShowCompleteFont{name:lmroman10-regular}{10pt}{1}
% \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{pirat.ttf}{12pt}{1}

\setuplayout[overview][footer=1cm] \setuplayout[overview]%  \setupheadertexts[aegean.ttf]

\ShowCompleteFont{file:aegean}               {8pt}{1}
% \ShowCompleteFont{file:tsukurimashouminchops}{8pt}{1}
% \ShowCompleteFont{file:tsukurimashoumincho}  {8pt}{1}
% \ShowCompleteFont{file:tsukurimashoukakups}  {8pt}{1}
% \ShowCompleteFont{file:tsukurimashoukaku}    {8pt}{1}
% \ShowCompleteFont{file:akkadian}             {8pt}{1}

\stoptext
