summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-03-06 21:58:15 +0000
committerKarl Berry <karl@freefriends.org>2021-03-06 21:58:15 +0000
commit974640d66e61e81cb197ad96fdff7b08343e4c5a (patch)
tree2e1f75f32f312b7f24ba82b4590ae230bcd6f399 /Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl
parentb4fa72e61230aca75f7f6fbf988821f71edfb6b2 (diff)
context
git-svn-id: svn://tug.org/texlive/trunk@58167 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl')
-rw-r--r--Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl658
1 files changed, 658 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl b/Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl
new file mode 100644
index 00000000000..42b5af125f7
--- /dev/null
+++ b/Master/texmf-dist/tex/context/modules/mkxl/s-fonts-show.mkxl
@@ -0,0 +1,658 @@
+%D \module
+%D [ file=font-run,
+%D version=1998.09.11, % (second)
+%D version=2001.02.20, % (third)
+%D title=\CONTEXT\ Font Macros,
+%D subtitle=Runtime Macros,
+%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 code is hooked into the core macros and saves some format
+%D space. It needs a cleanup as it's real old derioved \MKII\ code]
+%D
+%D Better use \type{\bTABLE...\eTABLE}.
+
+\unprotect
+
+\gdef\module_fonts_show_prepare#1%
+ {\iftok{#1}\emptytoks
+ \edef\m_module_fonts_show_title{\the\bodyfontsize}%
+ \else
+ \switchtobodyfont[#1]%
+ \edef\m_module_fonts_show_title{#1}%
+ \fi
+ \ifempty\fontclass
+ \edef\m_module_fonts_show_title{[\m_module_fonts_show_title]}%
+ \orelse\ifx\fontclass\m_module_fonts_show_title
+ \edef\m_module_fonts_show_title{[\m_module_fonts_show_title]}%
+ \else
+ \edef\m_module_fonts_show_title{[\fontclass]\space[\m_module_fonts_show_title]}%
+ \fi}
+
+\permanent\protected\tolerant\gdef\showbodyfont[#1]%
+ {\ifinsidefloat\else\startbaselinecorrection\fi
+ \vbox
+ {\module_fonts_show_prepare{#1}%
+ \def\next##1##2##3##4%
+ {\bTR
+ \bTD{##4}\type{##1}\eTD
+ \bTD{##4}##1##3{\tf ##2}\eTD
+ \bTD{##4}##1##3{\tf ##2}\eTD
+ \bTD{##4}##1##3{\bf ##2}\eTD
+ \bTD{##4}##1##3{\sl ##2}\eTD
+ \bTD{##4}##1##3{\it ##2}\eTD
+ \bTD{##4}##1##3{\bs ##2}\eTD
+ \bTD{##4}##1##3{\bi ##2}\eTD
+ \bTD{##4}##1##3{\tfx ##2}\eTD
+ \bTD{##4}##1##3{\tfxx ##2}\eTD
+ \bTD{##4}##1##3{\tfa ##2}\eTD
+ \bTD{##4}##1##3{\tfb ##2}\eTD
+ \bTD{##4}##1##3{\tfc ##2}\eTD
+ \bTD{##4}##1##3{\tfd ##2}\eTD
+ \eTR}%
+ \bTABLE[\c!align=\v!middle,\c!loffset=.5ex,\c!roffset=.5ex]
+ \bTR\bTD[\c!nx=14,\c!offset=1ex]\tttf{\m_module_fonts_show_title}\eTD\eTR
+ \next{}{}\type{}%
+ \next\rm{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
+ \next\ss{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
+ \next\tt{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
+ \next\mr{\languageparameter\c!text}\mathematics{\tfd\setstrut\strut}%
+ \eTABLE}%
+ \ifinsidefloat\else\stopbaselinecorrection\fi}
+
+\permanent\protected\tolerant\gdef\showbodyfontenvironment[#1]%
+ {\ifinsidefloat\else\startbaselinecorrection\fi
+ \vbox
+ {\module_fonts_show_prepare{#1}%
+ \def\next##1##2%
+ {\bTR
+ \bTD##1\bodyfontsizevariable{##2}\s!text\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!script\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!scriptscript\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!x\eTD
+ \bTD##1\bodyfontsizevariable{##2}\s!xx\eTD
+ \bTD##1\bodyfontsizevariable{##2}\v!small\eTD
+ \bTD##1\bodyfontsizevariable{##2}\v!big\eTD
+ %\bTD##1\bodyfontsizevariable{##2}\c!interlinespace\eTD
+ \eTR}%
+ \def\nextone{\next\relax}%
+ \bTABLE[\c!align=\v!middle,\c!loffset=.5ex,\c!roffset=.5ex]
+ \bTR\bTD[\c!nx=7,\c!offset=1ex]\tttf{\m_module_fonts_show_title}\eTD\eTR
+ \next{\tttf\thirdofthreearguments}\relax
+ \processbodyfontenvironmentlist{nextone}
+ \eTABLE}%
+ \ifinsidefloat\else\stopbaselinecorrection\fi}
+
+\permanent\protected\tolerant\gdef\showfont[#1]#*[#2]%
+ {\bgroup
+ \iftok{#1}\emptytoks\else
+ \definedfont[#1]%
+ \ifdim40\emwidth>\hsize
+ \glyphscale750\relax
+ \fi
+ \fi
+ \integerdef\c_module_fonts_font_id\fontid\font
+ \doifelsenothing{#2}
+ {\module_fonts_show_font_indeed{#1}\zerocount}
+ {\doifelse{#2}\v!all
+ {\dostepwiserecurse\zerocount{255}\plusone
+ {\scratchcounterone \recurselevel
+ \scratchcountertwo \numexpr\scratchcounterone*256\relax
+ \scratchcounterthree\numexpr\scratchcountertwo+255\relax
+ \doloop
+ {\iffontchar\font\scratchcountertwo
+ \module_fonts_show_font_indeed{#1}\scratchcounterone
+ \exitloop
+ \orelse\ifnum\scratchcountertwo=\scratchcounterthree
+ \exitloop
+ \else
+ \advance\scratchcountertwo\plusone
+ \fi}}}
+ {\processcommalist[#2]{\module_fonts_show_font_indeed{#1}}}}%
+ \egroup}
+
+\gdef\module_fonts_show_font_indeed#1#2% made some 50% faster but still slow
+ {\bgroup
+ \ifinsidefloat\else\startbaselinecorrection\fi
+ \vbox\bgroup
+ \scratchdimenone 2.5\emwidth
+ \scratchdimentwo 2.4\emwidth
+ \scratchdimenthree2.3\emwidth
+ \scratchcounterfour#2\relax
+ \forgetall
+ \startoverlay % easier in cld
+ {\vbox
+ {\tf
+ \setstrut
+ \setfontid\c_module_fonts_font_id
+ \offinterlineskip
+ \unexpanded\def\wrapbox##1%
+ {\vpack to \scratchdimenone
+ {\vss
+ \hpack to \scratchdimenone
+ {\setfontid\c_module_fonts_font_id
+ \ifzeropt\interwordspace
+ \setbox##1\hpack{\raise.5\dp##1\hpack{\lower.5\ht##1\copy##1}}%
+ \ht##1\zeropoint
+ \dp##1\zeropoint
+ \else
+ \ht##1\strutht
+ \dp##1\strutdp
+ \strut
+ \fi
+ \hss\copy##1\hss}
+ \vss}}%
+ \unexpanded\def\textbox##1%
+ {\vpack to \scratchdimentwo
+ {\hsize\scratchdimenthree
+ ##1%
+ \par}}%
+ \unexpanded\def\scratchnum
+ {\blue
+ \tinyfont
+ \hfill
+ \number\scratchcounter
+ \vfill
+ \octnumber\scratchcounter
+ \hfill
+ \lchexnumbers\scratchcounter}%
+ \setbox\scratchboxone\hpack{\tf\textbox{}}%
+ \setbox\scratchboxtwo\hpack{\tf\gray\vrule\s!width\exheight\s!height.5\exheight\s!depth.5\exheight}%
+ \setbox\scratchboxtwo\wrapbox\scratchboxtwo
+ \setbox\scratchboxthree\hpack
+ {\startoverlay
+ {\box\scratchboxtwo}
+ {\box\scratchboxone}
+ \stopoverlay}%
+ \dostepwiserecurse\zerocount{15}\plusone
+ {\scratchcounterone\recurselevel
+ \hpack
+ {\dostepwiserecurse\zerocount{15}\plusone
+ {\scratchcountertwo \recurselevel
+ \scratchcounterthree\numexpr\scratchcounterone*16+\scratchcountertwo\relax
+ \scratchcounterthree\numexpr\scratchcounterfour*256+\scratchcounterthree\relax
+ \iffontchar\font\scratchcounterthree
+ \setbox\scratchbox\ruledhpack{\char\scratchcounterthree}%
+ \bgroup
+ \tf
+ \startoverlay
+ {\wrapbox\scratchbox}
+ {\textbox\scratchnum}
+ \stopoverlay
+ \egroup
+ \else
+ \copy\scratchboxthree
+ \fi}}}%
+ \par}}
+ {\tf\basegrid[\c!nx=16,\c!ny=16,\c!dx=2.5,\c!dy=2.5,\c!unit=em]}
+ \stopoverlay
+ \nointerlineskip
+ \vskip2\points
+ % the \noexpand before \blank is needed for non etex
+ \edef\theshowfontspecs{name: {\noexpand\black\fontname\font}\quad plane: \the\scratchcounterfour\enspace"\hexnumber\scratchcounterfour}%
+ \tf % also sets em
+ \hbox to 40\emwidth{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs}
+ \egroup
+ \ifinsidefloat\else\stopbaselinecorrection\fi
+ \egroup}
+
+% \showfontstyle[modern][rm][tf][all] % #2, #3 and #4 can be 'all'
+%
+% no lists any more, so no 'all' any longer
+% no need to clean this up
+
+\permanent\protected\tolerant\gdef\showfontstyle[#1]#*[#2]#*[#3]#*[#4]
+ {\bgroup
+ \edef\m_module_fonts_show_styles {\iftok{#2}\emptytoks\s!rm,\s!ss,\s!tt,\s!mm\else#2\fi}%
+ \edef\m_module_fonts_show_alternatives{\iftok{#3}\emptytoks\s!tf,\s!bf,\s!it,\s!sl,\s!bs,\s!bi\else#3\fi}%
+ \iftok{#1}\emptytoks\else
+ \switchtobodyfont[#1]
+ \fi
+ \raggedright
+ \protected\def\dododocommand##1%
+ {\dostepwiserecurse\zerocount{255}\plusone
+ {\scratchcounter\numexpr##1*256+\recurselevel\relax
+ \iffontchar\font\scratchcounter\relax
+ \char\scratchcounter
+ \space
+ \fi}}%
+ \protected\def\dodocommand##1##2%
+ {\starttextrule{\tttf #1 ##1 ##2}
+ \nobreak\getvalue{##2}%
+ \doifelsenothing{#4}
+ {\dododocommand\zerocount}
+ {\doifelse{#4}\v!all
+ {\dostepwiserecurse\zerocount{255}\plusone{\normalexpanded{\dododocommand{\recurselevel}}}}
+ {\processcommalist[#4]{\dododocommand}}}%
+ \par \nobreak
+ \stoptextrule}
+ \protected\def\docommand##1%
+ {\getvalue{##1}%
+ \processcommacommand[\m_module_fonts_show_alternatives]{\dodocommand{##1}}}
+ \processcommacommand[\m_module_fonts_show_styles]\docommand
+ \egroup}
+
+\permanent\protected\gdef\showligature#1%
+ {\hbox{\type{#1}\enspace\showglyphs#1}}
+
+\permanent\protected\tolerant\gdef\showligatures[#1]% we keep it around for compatibility reasons
+ {\bgroup
+ \def\module_fonts_show_ligature##1{\hbox{\showglyphs##1}}%
+ \doifsomething{#1}{\definedfont[#1*default]}%
+ \starttabulate[|*{7}{c|}]
+ \NC\type{ff}
+ \NC\type{fi}
+ \NC\type{fl}
+ \NC\type{ffi}
+ \NC\type{ffl}
+ \NC\type{--}
+ \NC\type{---}
+ \NC\NR
+ \NC\module_fonts_show_ligature{ff}
+ \NC\module_fonts_show_ligature{fi}
+ \NC\module_fonts_show_ligature{fl}
+ \NC\module_fonts_show_ligature{ffi}
+ \NC\module_fonts_show_ligature{ffl}
+ \NC\module_fonts_show_ligature{--}
+ \NC\module_fonts_show_ligature{---}
+ \NC\NR
+ \stoptabulate
+ \egroup}
+
+\permanent\protected\gdef\showkerning
+ {\groupedcommandcs\showfontkerns\relax}
+
+\permanent\gdef\module_fonts_char_ratio#1#2%
+ {\ifzeropt\nextboxhtdp\else
+ \cldcontext{\number#1/\number\nextboxhtdp}%
+ \fi}
+
+\permanent\protected\gdef\showcharratio
+ {\dowithnextboxcontent
+ {\switchtobodyfont[10pt]}%
+ {\starttabulate[|l|l|l|]
+ \NC height \NC \the\nextboxht \NC \module_fonts_char_ratio\nextboxht \NC \NR
+ \NC depth \NC \the\nextboxdp \NC \module_fonts_char_ratio\nextboxdp \NC \NR
+ \stoptabulate}
+ \hbox}
+
+\permanent\protected\gdef\showfontparameters
+ {\starttabulate[|tl|l|]
+ \NC \type {\slantperpoint} \NC \the\fontslantperpoint \font \NC\NR
+ \NC \type {\interwordspace} \NC \the\fontinterwordspace \font \NC\NR
+ \NC \type {\interwordstretch} \NC \the\fontinterwordstretch\font \NC\NR
+ \NC \type {\interwordshrink} \NC \the\fontinterwordshrink \font \NC\NR
+ \NC \type {\exheight} \NC \the\fontexheight \font \NC\NR
+ \NC \type {\emwidth} \NC \the\fontemwidth \font \NC\NR
+ \NC \type {\extraspace} \NC \the\fontextraspace \font \NC\NR
+ \stoptabulate}
+
+\unexpanded\gdef\module_fonts_show_minimal_baseline#1% to be used in a 10 column tabulate
+ {\setbox\scratchbox\ruledhbox{#1}%
+ \normalexpanded {
+ \NC \ruledhbox{#1}%
+ \NC ->
+ \NC \the\htdp\scratchbox
+ \NC =
+ \NC \the\ht\scratchbox
+ \NC +
+ \NC \the\dp\scratchbox
+ \NC \ifcmpdim\htdp\scratchbox\baselineskip <\or=\or>\fi
+ \NC \the\baselineskip
+ \NC (\ifdim\htdp\scratchbox>\baselineskip not \fi ok)
+ \NC \NR}}
+
+\permanent\protected\gdef\showminimalbaseline
+ {\starttabulate[|l|T|T|T|T|T|T|T|T|T|]
+ \module_fonts_show_minimal_baseline{\hbox to \emwidth{\hss\showstruts\strut\hss}}%
+ \module_fonts_show_minimal_baseline{(/)}%
+ \module_fonts_show_minimal_baseline{\normalstartimath\frac{1}{2}x\normalsuperscript2\normalsubscript3\normalstopimath}
+ \stoptabulate}
+
+\permanent\protected\tolerant\gdef\showfontstrip[#1]%
+ {\bgroup
+ \def\module_fonts_show_strip_a##1##2%
+ {\tttf\string##1}
+ \def\module_fonts_show_strip_b##1##2%
+ {\ruledhbox{\switchtobodyfont[#1]##1{##2}}}
+ \def\module_fonts_show_strip_c##1##2%
+ {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
+ \tt\tfx\the\ht\scratchbox}%
+ \def\module_fonts_show_strip_d##1##2%
+ {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
+ \tt\tfx\the\wd\scratchbox}%
+ \def\module_fonts_show_strip_indeed##1##2##3%
+ {\NC##2\rm{##3}\NC
+ ##2\ss{##3}\NC
+ ##2\tt{##3}\NC
+ ##2\mathematics{##3}\NC
+ \tttf##1\NR}
+ \starttabulate[|c|c|c|c|c|]
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_a\empty
+ \TB
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{xxxx}
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{12345}
+ \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{(Agw)}
+ \TB
+ \module_fonts_show_strip_indeed{(x height)}\module_fonts_show_strip_c{x}
+ \module_fonts_show_strip_indeed{(m width)}\module_fonts_show_strip_d{m}
+ \stoptabulate
+ \egroup}
+
+%D This is now moved here as there is no reason to have it in the core. Some of
+%D the helpers might move to a more protected namespace.
+
+\newbox\otfcollector
+
+\permanent\protected\gdef\startotfcollecting{\ctxlua{nodes.tracers.steppers.start()}}
+\permanent\protected\gdef\stopotfcollecting {\ctxlua{nodes.tracers.steppers.stop()}}
+\permanent\protected\gdef\resetotfcollecting{\ctxlua{nodes.tracers.steppers.reset()}}
+
+% \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{الضَّرَّ} \page
+% \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{لِلّٰهِ} \page
+
+\permanent\protected\gdef\showotfstepglyphs#1%
+ {\ctxlua{nodes.tracers.steppers.glyphs(\number\otfcollector,#1)}%
+ \unhbox\otfcollector}
+
+\permanent\protected\gdef\otfstepspace
+ {\removeunwantedspaces
+ \hskip.5\emwidth \s!plus .125\emwidth \s!minus .125\emwidth\relax}
+
+\permanent\protected\gdef\otfstepcharcommand#1#2#3% font char class
+ {\otfstepspace
+ \doif{#3}{mark}{\underbar}{U+\hexnumber{#2}}:%
+ \setbox\scratchbox\hbox{\ctxlua{nodes.tracers.fontchar(#1,#2)}}%
+ \ifzeropt\wd\scratchbox
+ \scratchwidth.125\onepoint
+ \scratchdistance\dimexpr(\emwidth/2-\scratchwidth)\relax
+ \kern\scratchdistance
+ \ruledhbox to \scratchwidth{\hss\box\scratchbox\hss}%
+ \kern-\scratchwidth
+ \hskip\scratchdistance
+ \else
+ \ruledhbox{\box\scratchbox}%
+ \fi
+ \otfstepspace}
+
+\permanent\protected\gdef\otfstepfontcommand#1#2#3% id font size
+ {\begingroup
+ \tttf #1: #2 @ \the\dimexpr#3\scaledpoint\relax
+ \endgroup}
+
+\permanent\protected\gdef\otfstepmessagecommand#1#2%
+ {\begingroup
+ \tttf\language\minusone
+ \veryraggedright
+ \forgetparindent
+ \forgeteverypar
+ \hangindent\emwidth
+ \hangafter\plusone
+ \dontleavehmode\detokenize{#1}\removeunwantedspaces
+ \doifsomething{#2}{,\space\detokenize{#2}}\endgraf
+ \endgroup
+ \blank}
+
+\permanent\protected\gdef\showotfstepfont
+ {\ctxlua{nodes.tracers.steppers.font("otfstepfontcommand")}}
+
+\permanent\protected\gdef\showotfstepchars#1%
+ {\ctxlua{nodes.tracers.steppers.codes(#1,"otfstepcharcommand","otfstepspace")}}
+
+\permanent\protected\gdef\showotfstepmessages#1%
+ {\ctxlua{nodes.tracers.steppers.messages(#1,"otfstepmessagecommand",true)}}
+
+\permanent\protected\gdef\showotfstepfeatures
+ {\ctxlua{nodes.tracers.steppers.features()}}
+
+\permanent\protected\gdef\otfnoffeaturesteps
+ {\ctxlua{nodes.tracers.steppers.nofsteps()}}
+
+\newconstant\showotfstepsmode \showotfstepsmode\plusfour
+
+\protected\gdef\showotfsteps_n
+ {\blank
+ \begingroup
+ \advance\leftskip6\emwidth
+ \showotfstepmessages\recurselevel
+ \par
+ \endgroup
+ \blank
+ \dontleavehmode
+ \hbox to \hsize \bgroup
+ \hbox to 6\emwidth \bgroup
+ \bf
+ \ifnum\recurselevel=\scratchcounter result\else step \recurselevel\fi
+ \hss
+ \egroup
+ \vtop \bgroup
+ \hsize\dimexpr\hsize-6\emwidth\relax
+ \resetallattributes
+ \lefttoright
+ \dontleavehmode
+ \ifnum\recurselevel=\scratchcounter
+ \ruledhbox{\box\otfcompositionbox}%
+ \else
+ \ruledhbox{\showotfstepglyphs\recurselevel}%
+ \fi
+ \quad
+ \showotfstepchars\recurselevel
+ \hfill
+ \par
+ \egroup
+ \egroup
+ \blank}
+
+\permanent\protected\gdef\showotfsteps
+ {\begingroup
+ \veryraggedright
+ \forgetparindent
+ \forgeteverypar
+ \tt
+ \lefttoright
+ \hbox to \hsize \bgroup
+ \hbox to 6\emwidth{\bf font\hss}%
+ \vtop \bgroup
+ \hsize\dimexpr\hsize-6\emwidth\relax
+ \language\minusone
+ \bf
+ \showotfstepfont
+ \egroup
+ \egroup
+ \blank
+ \hbox to \hsize \bgroup
+ \hbox to 6\emwidth{\bf features\hss}%
+ \vtop \bgroup
+ \hsize\dimexpr\hsize-6\emwidth\relax
+ \language\minusone
+ \showotfstepfeatures
+ \egroup
+ \egroup
+ \blank
+ \scratchcounter\otfnoffeaturesteps\relax
+ \dorecurse\scratchcounter
+ {\ifcase\showotfstepsmode
+ \or % 1 = only first
+ \ifnum\recurselevel=\plusone
+ \showotfsteps_n
+ \fi
+ \or % 2 = only last
+ \ifnum\recurselevel=\scratchcounter
+ \showotfsteps_n
+ \fi
+ \or % 3 = first and last
+ \ifnum\recurselevel=\plusone
+ \showotfsteps_n
+ \orelse\ifnum\recurselevel=\scratchcounter
+ \showotfsteps_n
+ \fi
+ \else % everything
+ \showotfsteps_n
+ \fi}%
+ \endgroup}
+
+\permanent\protected\gdef\startotfsample
+ {\enabletrackers[otf.sample.silent]% beware, kind of global
+ \startotfcollecting
+ \begingroup
+ \veryraggedright
+ \forgetparindent
+ \forgeteverypar}
+
+\permanent\protected\gdef\stopotfsample
+ {\endgroup
+ \stopotfcollecting
+ \disabletrackers[otf.sample]% beware, kind of global: otf.sample
+ \showotfsteps
+ \resetotfcollecting}
+
+\newbox\otfcompositionbox
+
+% this should go in spac-ali:
+
+\installcorenamespace{otfcompositiondir}
+
+\gletcsname\??otfcompositiondir -1\endcsname\righttoleft
+\gletcsname\??otfcompositiondir r2l\endcsname\righttoleft
+\gletcsname\??otfcompositiondir l2r\endcsname\lefttoright
+\gletcsname\??otfcompositiondir +1\endcsname\lefttoright
+\gletcsname\??otfcompositiondir 1\endcsname\lefttoright
+
+\permanent\protected\gdef\setotfcompositiondirection#1%
+ {\begincsname\??otfcompositiondir#1\endcsname}
+
+\permanent\protected\gdef\showotfcomposition#1#2#3% {font*features at size}, rl=-1, text
+ {\begingroup
+ \forgetparindent
+ \forgeteverypar
+ % \setupcolors[\c!state=\v!start]%
+ \setupalign[\v!verytolerant,\v!flushleft]%
+ \startotfsample
+ \nohyphens
+ \global\setbox\otfcompositionbox\hbox{\definedfont[#1]\relax\setotfcompositiondirection{#2}\relax#3}%
+ \stopotfsample
+ \endgroup}
+
+%D \startbuffer
+%D \startotfcompositionlist{Serif*default @ 11pt}{l2r}%
+%D \showotfcompositionsample{effe}
+%D \stopotfcompositionlist
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\permanent\protected\gdef\showotfcompositionlist#1#2#3%
+ {\begingroup
+ \definedfont[#1]%
+ \setbox\scratchbox\hbox\bgroup
+ \setotfcompositiondirection{#2}%
+ #3%
+ \egroup
+ \strut
+ \def|##1|{\kern\onepoint\string|\kern\onepoint##1\kern\onepoint\string|\kern\onepoint}%
+ \cldcontext{nodes.listtoutf(tex.box[\number\scratchbox].list,"{\\kern\\onepoint}",true)}%
+ \endgroup}
+
+\mutable\glet\showotfcompositionsample\gobbleoneargument
+
+\permanent\protected\gdef\startotfcompositionlist#1#2#3\stopotfcompositionlist
+ {\begingroup
+ \protected\def\showotfcompositionsample##1%
+ {\NC\type{##1}%
+ \NC\showotfcompositionlist{Mono}{#2}{##1}%
+ \NC\showotfcompositionlist{#1}{#2}{##1}%
+ \NC\definedfont[#1]##1%
+ \NC\NR}%
+ \starttabulate[|||||]%
+ #3%
+ \stoptabulate
+ \endgroup}
+
+\aliased\glet\stopotfcompositionlist\relax
+
+%D Till here.
+
+\permanent\protected\def\showbodyfontstate
+ {\dontleavehmode
+ \start
+ \infofont
+ [fontclass: \fontclass,\space
+ fontbody: \fontbody ,\space
+ fontface: \fontface ,\space
+ fontsize: \fontsize ]%
+ \stop}
+
+\protect
+
+\continueifinputfile{s-fonts-show.mkxl}
+
+\setupwhitespace[big]
+
+\dontcomplain
+
+\starttext
+
+\startsubject[title=\type{\showkerning}]
+ \showkerning{Just a small sentence with hopefully some kerns.}
+\stopsubject
+
+\startsubject[title=\type{\showcharratio}]
+ \showcharratio{testg}
+\stopsubject
+
+\startsubject[title=\type{\showfontparameters}]
+ \showfontparameters
+\stopsubject
+
+\startsubject[title=\type{\showminimalbaseline}]
+ \showminimalbaseline
+\stopsubject
+
+\startsubject[title=\type{\showfontstrip}]
+ \showfontstrip
+\stopsubject
+
+\startsubject[title=\type{\showbodyfont}]
+ \showbodyfont
+\stopsubject
+
+\startsubject[title=\type{\showbodyfontenvironment}]
+ \showbodyfontenvironment
+\stopsubject
+
+\startsubject[title=\type{\showligature}]
+ \showligature{fi}
+ \showligature{fx}
+\stopsubject
+
+\startsubject[title=\type{\showligatures}]
+ \showligatures
+\stopsubject
+
+\startsubject[title=\type{\showfontstyle}]
+ \showfontstyle[][rm][tf][all]
+\stopsubject
+
+\startsubject[title=\type{\showfont}]
+ \showfont
+\stopsubject
+
+\startsubject[title=\type{\showbodyfontstate}]
+ \showbodyfontstate
+\stopsubject
+
+\page
+
+\startsubject[title=\type{\showotfcomposition}]
+ \showotfcomposition{arabtype*arabic at 48pt}{-1}{الضَّرَّ}
+ \page
+ \showotfcomposition{arabtype*arabic at 48pt}{-1}{لِلّٰهِ}
+ \page
+\stopsubject
+
+\stoptext