%D \module
%D   [      file=s-math-extensibles.mkiv,
%D        version=2013.02.03,
%D          title=\CONTEXT\ Style File,
%D       subtitle=Math Stackers Checking,
%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 provides a macro that will typeset a table of (horizontal)
%D extensibles including some tracing. You can set up the \type {demo}
%D stacker category to tweak things.
%D
%D \starttyping
%D \showmathextensibles[alternative=a|b]
%D \stoptyping

\startmodule[math-extensibles]

\unprotect

\definemathstackers
  [demo]
  [math]
  [\c!offset=\v!max]

\installcorenamespace{modulemathextensibles}
\installcorenamespace{modulemathextensiblesalternative}

\installdirectsetuphandler \??modulemathextensibles {modulemathextensibles}

\setupmodulemathextensibles
  [\c!alternative=\v!a]

\unexpanded\def\showmathextensibles
  {\dosingleempty\module_math_extensibles_show_all}

\def\module_math_extensibles_show_all[#1]%
  {\begingroup
   \setupcurrentmodulemathextensibles[#1]%
   \expandnamespacevalue\??modulemathextensiblesalternative\c!alternative\v!a
   \endgroup}

\def\modulemathextensiblesalternativea#1#2#3%
  {\NC U+#1
   \NC \filledhboxm{\math{\char"#1}}
   \NC \hbox{\math{\mathstacker[demo]{"#1}{top}{bottom}}}
   \NC \hbox{\math{\mathstacker[demo]{"#1}{}{bottom}}}
   \NC \hbox{\math{\mathstacker[demo]{"#1}{top}{}}}
   \NC \nohyphens \veryraggedright #2
   \NC\NR}

\setvalue{\??modulemathextensiblesalternative\v!a}%
  {\enabletrackers[math.stackers.texts]
   \starttabulate[|Tl|l|l|l|l|Tp|]
   \ctxlua { moduledata.math.extensibles.show {
        command = "modulemathextensiblesalternativea",
   } }
   \stoptabulate
   \disabletrackers[math.stackers.texts]}

\def\modulemathextensiblesalternativeb#1#2#3%
  {\NC U+#1
   \NC \math{\char"#1}
   \NC \nohyphens \veryraggedright #3
   \NC \NR}

\setvalue{\??modulemathextensiblesalternative\v!b}%
  {\enabletrackers[math.stackers.texts]
   \starttabulate[|Tl|l|Tp|]
   \ctxlua { moduledata.math.extensibles.show {
        command = "modulemathextensiblesalternativeb",
        sparse  = true,
   } }
   \stoptabulate
   \disabletrackers[math.stackers.texts]}

\startluacode
    moduledata.math             = moduledata.math             or { }
    moduledata.math.extensibles = moduledata.math.extensibles or { }

    function moduledata.math.extensibles.show(settings)
        local command = settings.command
        local sparse  = settings.sparse
        for k, v in table.sortedhash(characters.data) do
            local mathextensible = v.mathextensible
            if mathextensible == "r" or mathextensible == "l" or mathextensible == "h" then
                local names = { }
                local mathname = v.mathname
                if mathname then
                    names[#names+1] = v.mathclass .. ":"  .. mathname
                end
                local mathspec = v.mathspec
                if mathspec then
                    for i=1,#mathspec do
                        local v = mathspec[i]
                        names[#names+1] = v.class .. ":"  .. v.name
                    end
                end
                local mathfiller = v.mathfiller
                if mathfiller then
                    names[#names+1] = "filler:" .. mathfiller
                end
                if not sparse or #names > 0 then
                    context[command](string.format("%04X",k),v.description,table.concat(names," "))
                end
            end
        end
    end
\stopluacode

\protect

\stopmodule

\continueifinputfile{s-math-extensibles.mkiv}

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

\setuphead[chapter][style=\bfc]
\setuphead[section][style=\bfa]

\starttext

    \dowith {a,b} {

        \page                          \title {Latin Modern} \showmathextensibles[alternative=#1]
        \page \setupbodyfont[pagella]  \title {Pagella}      \showmathextensibles[alternative=#1]
        \page \setupbodyfont[termes]   \title {Termes}       \showmathextensibles[alternative=#1]
        \page \setupbodyfont[dejavu]   \title {Xits}         \showmathextensibles[alternative=#1]
        \page \setupbodyfont[cambria]  \title {Cambria}      \showmathextensibles[alternative=#1]
        \page \setupbodyfont[lucidaot] \title {Lucida}       \showmathextensibles[alternative=#1]

    }

\stoptext

% This could also be some tracer

\definefontfeature[mathextra][goodies=] % or use the raw unpatched font


\def\Test#1%
  {\left(
   \scratchdimen\Umathaxis\displaystyle
   \blackrule
     [height=\dimexpr#1ex+\scratchdimen\relax,
      depth=\dimexpr#1ex-\scratchdimen\relax]
   \right)}


\startbuffer[p]
%   \Umathconnectoroverlapmin\allmathstyles \zeropoint
%   \Umathconnectoroverlapmin\allmathstyles 2pt % \zeropoint
    \Umathdelimitershortfall \allmathstyles \zeropoint
    \showboxes
    \showglyphs
    \Test{4.0}
    \Test{4.5}
    \Test{5.0}
    \Test{8.0}
    \quad
    \dorecurse{\mathvariantcount `(} {
        \char\mathvariantcode `( #1
    }
\stopbuffer

\startbuffer[p]
    \showboxes
    \showglyphs
    \overparent{\blackrule[color=darkgray,width=1em,height=2ex]}\quad
    \overparent{\blackrule[color=darkgray,width=2em,height=2ex]}\quad
    \overparent{\blackrule[color=darkgray,width=4em,height=2ex]}\quad
    \overparent{\blackrule[color=darkgray,width=8em,height=2ex]}
\stopbuffer

\startbuffer
    \hpack\bgroup
    $
        \getbuffer[p]
    $
    \egroup
\stopbuffer

\def\TestFont#1%
  {\dontleavehmode
   \begingroup
   \hbox to 5.5em{\hss\type{#1}:}\quad
   \switchtobodyfont[#1]\getbuffer
   \endgroup
   \par}

\starttext
    \startTEXpage[offset=1dk]
%     \TestFont{modern}
%     \TestFont{pagella}
%     \TestFont{termes}
%     \TestFont{bonum}
    \TestFont{lucida}
%     \TestFont{cambria}
    \TestFont{ebgaramond}
%     \TestFont{xits}
    \stopTEXpage
\stoptext
