%D \module %D [ file=s-fnt-25, %D version=2009.01.25, %D title=\CONTEXT\ Style File, %D subtitle=Math Glyph Checking, %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. \def\enableshowmathfontvirtual {\ctxlua{fonts.tfm.auto_cleanup=false}} \def\showmathfontcharacters {\dodoubleempty\doshowmathfontcharacters} \def\doshowmathfontcharacters[#1][#2]% {\begingroup \dontcomplain \doifelsenothing{#1} {\definedfont[MathRoman*math-text]} {\definedfont[#1]}% \doifelsenothing{#2} {\ctxlua{document.showmathfont(font.current())}} {\def\dodoshowmathfontcharacters##1{\ctxlua{document.showmathfont(font.current(),##1)}}% \processcommalist[#2]\dodoshowmathfontcharacters}% \endgroup} \def\startmathfontlist {\startpacked} \def\stopmathfontlist {\stoppacked} \def\startmathfontlistentry {\blank \begingroup} \def\stopmathfontlistentry {\endgroup \blank} \def\mathfontlistentryhexdectit#1#2#3% {#1: \char#2\enspace\ruledhbox{\char#2}\enspace#3\par \advance\leftskip 1em\relax} \def\mathfontlistentrywdhtdpic#1#2#3#4% {width: #1, height: #2, depth: #3, italic: #4\par} \def\mathfontlistentryresource#1% {virtual: #1\par} \def\mathfontlistentrynext#1#2% {#1~\ruledhbox{\char#2}} \def\mathfontlistentrynextlist#1% {next: #1\par} \def\fontlistentryvariants#1#2% {#1~\ruledhbox{\char#2}} \def\mathfontlistentryvariantslist#1% {variants: #1\par} \def\mathfontlistentrynextvariantslist#1#2% {next: #1 => variants: #2\par} \def\mathfontlistentryclassname#1#2% {mathclass: #1, mathname: #2\par} \def\mathfontlistentrysymbol#1#2% {mathsymbol: #1~\ruledhbox{\char#2}\par} \startluacode local concat = table.concat local format, lower = string.format, string.lower function document.showmathfont(id,slot) local data = characters.data local tfmdata = fonts.identifiers[id] local characters = tfmdata.characters local sorted = (slot and { slot }) or table.sortedkeys(characters) local virtual, names = tfmdata.type == "virtual", { } if virtual then for k, v in ipairs(tfmdata.fonts) do local name = fonts.identifiers[v.id].name names[k] = (name and file.basename(name)) or v.id end end local round = math.round local limited = true for _, s in next, sorted do if not limited or s < 0xF0000 then local char = characters[s] if char then local info = data[s] local cnext, cvert_variants, choriz_variants = char.next, char.vert_variants, char.horiz_variants context.startmathfontlistentry() context.mathfontlistentryhexdectit(format("U+%05X",s),s,lower(info.description or "no description, private to font")) context.mathfontlistentrywdhtdpic(round(char.width or 0),round(char.height or 0),round(char.depth or 0),round(char.italic or 0)) if virtual then local commands = char.commands if commands then local t = { } for i=1,#commands do local ci = commands[i] if ci[1] == "slot" then local fnt, idx = ci[2], ci[3] t[#t+1] = format("%s/%0X",names[fnt] or fnt,idx) end end if #t > 0 then context.mathfontlistentryresource(concat(t,", ")) end end end if info.mathclass then context.mathfontlistentryclassname(info.mathclass,info.mathname or "no name") end if info.mathspec then for i=1,#info.mathspec do context.mathfontlistentryclassname(info.mathspec[i].class,info.mathspec[i].name or "no name") end end if info.mathsymbol then context.mathfontlistentrysymbol(format("U+%05X",info.mathsymbol),info.mathsymbol) end if cnext then local t, done = { }, { } while cnext do if done[cnext] then t[#t+1] = "CYCLE" break else done[cnext] = true t[#t+1] = context.nested.mathfontlistentrynext(format("U+%05X",cnext),cnext) cnext = characters[cnext] cvert_variants = cnext.vert_variants or cvert_variants choriz_variants = cnext.horiz_variants or choriz_variants if cnext then cnext = cnext.next end end end cnext = t end if cvert_variants then local t = { } for k, v in next, cvert_variants do t[#t+1] = context.nested.fontlistentryvariants(format("U+%05X",v.glyph),v.glyph) end cvert_variants = t end if choriz_variants then local t = { } for k, v in next, choriz_variants do t[#t+1] = context.nested.fontlistentryvariants(format("U+%05X",v.glyph),v.glyph) end choriz_variants = t end local cvariants = choriz_variants or cvert_variants if cvariants and cnext then context.mathfontlistentrynextvariantslist(concat(cnext," => "),concat(cvariants," => ")) else if cnext then context.mathfontlistentrynextlist(concat(cnext," => ")) end if cvariants then context.mathfontlistentryvariantslist(concat(cvariants," ")) end end context.stopmathfontlistentry() end end end end \stopluacode \endinput \starttext \setupbodyfont[cambria, 12pt] \showmathfontcharacters % \setupbodyfont[lmvirtual,12pt] \showmathfontcharacters % \setupbodyfont[pxvirtual,12pt] \showmathfontcharacters % \setupbodyfont[txvirtual,12pt] \showmathfontcharacters % \setupbodyfont[palatino, 10pt] \showmathfontcharacters % \setupbodyfont[mathtimes,12pt] \showmathfontcharacters % \setupbodyfont[stix, 12pt] \showmathfontcharacters % \setupbodyfont[xits, 12pt] \showmathfontcharacters % \setupbodyfont[lucida, 12pt] \showmathfontcharacters \stoptext