s-fonts-show.mkxl /size: 20 Kb    last modification: 2023-12-21 09:45
1%D \module
2%D   [       file=font-run,
3%D        version=1998.09.11, % (second)
4%D        version=2001.02.20, % (third)
5%D          title=\CONTEXT\ Font Macros,
6%D       subtitle=Runtime Macros,
7%D         author=Hans Hagen,
8%D           date=\currentdate,
9%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
10%C
11%C This module is part of the \CONTEXT\ macro||package and is
12%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
13%C details.
14
15%D [This code is hooked into the core macros and saves some format
16%D space. It needs a cleanup as it's real old derioved \MKII\ code]
17%D
18%D Better use \type{\bTABLE...\eTABLE}.
19
20\unprotect
21
22\gdef\module_fonts_show_prepare#1%
23  {\iftok{#1}\emptytoks
24     \edef\m_module_fonts_show_title{\the\bodyfontsize}%
25   \else
26     \switchtobodyfont[#1]%
27     \edef\m_module_fonts_show_title{#1}%
28   \fi
29   \ifempty\fontclass
30     \edef\m_module_fonts_show_title{[\m_module_fonts_show_title]}%
31   \orelse\ifx\fontclass\m_module_fonts_show_title
32     \edef\m_module_fonts_show_title{[\m_module_fonts_show_title]}%
33   \else
34     \edef\m_module_fonts_show_title{[\fontclass]\space[\m_module_fonts_show_title]}%
35   \fi}
36
37\permanent\protected\tolerant\gdef\showbodyfont[#1]%
38  {\ifinsidefloat\else\startbaselinecorrection\fi
39   \vbox
40     {\module_fonts_show_prepare{#1}%
41      \def\next##1##2##3##4%
42        {\bTR
43           \bTD{##4}\type{##1}\eTD
44           \bTD{##4}##1##3{\tf   ##2}\eTD
45           \bTD{##4}##1##3{\tf   ##2}\eTD
46           \bTD{##4}##1##3{\bf   ##2}\eTD
47           \bTD{##4}##1##3{\sl   ##2}\eTD
48           \bTD{##4}##1##3{\it   ##2}\eTD
49           \bTD{##4}##1##3{\bs   ##2}\eTD
50           \bTD{##4}##1##3{\bi   ##2}\eTD
51           \bTD{##4}##1##3{\tfx  ##2}\eTD
52           \bTD{##4}##1##3{\tfxx ##2}\eTD
53           \bTD{##4}##1##3{\tfa  ##2}\eTD
54           \bTD{##4}##1##3{\tfb  ##2}\eTD
55           \bTD{##4}##1##3{\tfc  ##2}\eTD
56           \bTD{##4}##1##3{\tfd  ##2}\eTD
57         \eTR}%
58      \bTABLE[\c!align=\v!middle,\c!loffset=.5ex,\c!roffset=.5ex]
59         \bTR\bTD[\c!nx=14,\c!offset=1ex]\tttf{\m_module_fonts_show_title}\eTD\eTR
60         \next{}{}\type{}%
61         \next\rm{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
62         \next\ss{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
63         \next\tt{\languageparameter\c!text}\relax{\tfd\setstrut\strut}%
64         \next\mr{\languageparameter\c!text}\mathematics{\tfd\setstrut\strut}%
65      \eTABLE}%
66   \ifinsidefloat\else\stopbaselinecorrection\fi}
67
68\permanent\protected\tolerant\gdef\showbodyfontenvironment[#1]%
69  {\ifinsidefloat\else\startbaselinecorrection\fi
70   \vbox
71     {\module_fonts_show_prepare{#1}%
72      \def\next##1##2%
73        {\bTR
74           \bTD##1\bodyfontsizevariable{##2}\s!text\eTD
75           \bTD##1\bodyfontsizevariable{##2}\s!script\eTD
76           \bTD##1\bodyfontsizevariable{##2}\s!scriptscript\eTD
77           \bTD##1\bodyfontsizevariable{##2}\s!x\eTD
78           \bTD##1\bodyfontsizevariable{##2}\s!xx\eTD
79           \bTD##1\bodyfontsizevariable{##2}\v!small\eTD
80           \bTD##1\bodyfontsizevariable{##2}\v!big\eTD
81          %\bTD##1\bodyfontsizevariable{##2}\c!interlinespace\eTD
82         \eTR}%
83      \def\nextone{\next\relax}%
84      \bTABLE[\c!align=\v!middle,\c!loffset=.5ex,\c!roffset=.5ex]
85        \bTR\bTD[\c!nx=7,\c!offset=1ex]\tttf{\m_module_fonts_show_title}\eTD\eTR
86        \next{\tttf\thirdofthreearguments}\relax
87        \processbodyfontenvironmentlist{nextone}
88      \eTABLE}%
89   \ifinsidefloat\else\stopbaselinecorrection\fi}
90
91\permanent\protected\tolerant\gdef\showfont[#1]#*[#2]%
92  {\bgroup
93   \iftok{#1}\emptytoks\else
94     \definedfont[#1]%
95     \ifdim40\emwidth>\hsize
96       \glyphscale750\relax
97     \fi
98   \fi
99   \integerdef\c_module_fonts_font_id\fontid\font
100   \ifempty{#2}%
101     \module_fonts_show_font_indeed{#1}\zerocount
102   \orelse\ifcstok{#2}\v!all
103     \dostepwiserecurse\zerocount{255}\plusone
104       {\scratchcounterone  \recurselevel
105        \scratchcountertwo  \numexpr\scratchcounterone*256\relax
106        \scratchcounterthree\numexpr\scratchcountertwo+255\relax
107        \doloop
108          {\iffontchar\font\scratchcountertwo
109             \module_fonts_show_font_indeed{#1}\scratchcounterone
110             \exitloop
111           \orelse\ifnum\scratchcountertwo=\scratchcounterthree
112             \exitloop
113           \else
114             \advanceby\scratchcountertwo\plusone
115           \fi}}%
116   \else
117     \processcommalist[#2]{\module_fonts_show_font_indeed{#1}}%
118   \fi
119   \egroup}
120
121\gdef\module_fonts_show_font_indeed#1#2% made some 50% faster but still slow
122  {\bgroup
123   \ifinsidefloat\else\startbaselinecorrection\fi
124   \vbox\bgroup
125   \scratchdimenone  2.5\emwidth
126   \scratchdimentwo  2.4\emwidth
127   \scratchdimenthree2.3\emwidth
128   \scratchcounterfour#2\relax
129   \forgetall
130   \startoverlay % easier in cld
131     {\vbox
132        {\tf
133         \setstrut
134         \setfontid\c_module_fonts_font_id
135         \offinterlineskip
136         \protected\def\wrapbox##1%
137           {\vpack to \scratchdimenone
138              {\vss
139               \hpack to \scratchdimenone
140                 {\setfontid\c_module_fonts_font_id
141                  \ifzeropt\interwordspace
142                    \setbox##1\hpack{\raise.5\dp##1\hpack{\lower.5\ht##1\copy##1}}%
143                    \ht##1\zeropoint
144                    \dp##1\zeropoint
145                  \else
146                    \ht##1\strutht
147                    \dp##1\strutdp
148                    \strut
149                  \fi
150                  \hss\copy##1\hss}
151               \vss}}%
152         \protected\def\textbox##1%
153           {\vpack to \scratchdimentwo
154              {\hsize\scratchdimenthree
155               ##1%
156               \par}}%
157         \protected\def\scratchnum
158           {\blue
159            \tinyfont
160            \hfill
161            \number\scratchcounter
162            \vfill
163            \octnumber\scratchcounter
164            \hfill
165            \lchexnumbers\scratchcounter}%
166         \setbox\scratchboxone\hpack{\tf\textbox{}}%
167         \setbox\scratchboxtwo\hpack{\tf\gray\vrule\s!width\exheight\s!height.5\exheight\s!depth.5\exheight}%
168         \setbox\scratchboxtwo\wrapbox\scratchboxtwo
169         \setbox\scratchboxthree\hpack
170           {\startoverlay
171              {\box\scratchboxtwo}
172              {\box\scratchboxone}
173            \stopoverlay}%
174         \dostepwiserecurse\zerocount{15}\plusone
175           {\scratchcounterone\recurselevel
176            \hpack
177              {\dostepwiserecurse\zerocount{15}\plusone
178                 {\scratchcountertwo  \recurselevel
179                  \scratchcounterthree\numexpr\scratchcounterone*16+\scratchcountertwo\relax
180                  \scratchcounterthree\numexpr\scratchcounterfour*256+\scratchcounterthree\relax
181                  \iffontchar\font\scratchcounterthree
182                    \setbox\scratchbox\ruledhpack{\char\scratchcounterthree}%
183                    \bgroup
184                    \tf
185                    \startoverlay
186                      {\wrapbox\scratchbox}
187                      {\textbox\scratchnum}
188                    \stopoverlay
189                    \egroup
190                  \else
191                    \copy\scratchboxthree
192                  \fi}}}%
193          \par}}
194     {\tf\basegrid[\c!nx=16,\c!ny=16,\c!dx=2.5,\c!dy=2.5,\c!unit=em]}
195   \stopoverlay
196   \nointerlineskip
197   \vskip2\points
198   % the \noexpand before \blank is needed for non etex
199   \edef\theshowfontspecs{name: {\noexpand\black\fontname\font}\quad plane: \the\scratchcounterfour\enspace"\hexnumber\scratchcounterfour}%
200   \tf % also sets em
201   \hbox to 40\emwidth{\blue\hfill\tinyfont\setstrut\strut\theshowfontspecs}
202   \egroup
203   \ifinsidefloat\else\stopbaselinecorrection\fi
204   \egroup}
205
206% \showfontstyle[modern][rm][tf][all] % #2, #3 and #4 can be 'all'
207%
208% no lists any more, so no 'all' any longer
209% no need to clean this up
210
211\permanent\protected\tolerant\gdef\showfontstyle[#1]#*[#2]#*[#3]#*[#4]
212  {\bgroup
213   \edef\m_module_fonts_show_styles      {\iftok{#2}\emptytoks\s!rm,\s!ss,\s!tt,\s!mm\else#2\fi}%
214   \edef\m_module_fonts_show_alternatives{\iftok{#3}\emptytoks\s!tf,\s!bf,\s!it,\s!sl,\s!bs,\s!bi\else#3\fi}%
215   \iftok{#1}\emptytoks\else
216     \switchtobodyfont[#1]
217   \fi
218   \raggedright
219   \protected\def\dododocommand##1%
220     {\dostepwiserecurse\zerocount{255}\plusone
221        {\scratchcounter\numexpr##1*256+\recurselevel\relax
222         \iffontchar\font\scratchcounter\relax
223           \char\scratchcounter
224           \space
225         \fi}}%
226   \protected\def\dodocommand##1##2%
227     {\starttextrule{\tttf #1 ##1 ##2}
228      \nobreak\getvalue{##2}%
229      \ifempty{#4}%
230        \dododocommand\zerocount
231      \orelse\ifcstok{#4}\v!all
232        \dostepwiserecurse\zerocount{255}\plusone
233          {\normalexpanded{\dododocommand{\recurselevel}}}%
234      \else
235        \processcommalist[#4]{\dododocommand}%
236      \fi
237      \par \nobreak
238      \stoptextrule}
239   \protected\def\docommand##1%
240     {\getvalue{##1}%
241      \processcommacommand[\m_module_fonts_show_alternatives]{\dodocommand{##1}}}
242   \processcommacommand[\m_module_fonts_show_styles]\docommand
243   \egroup}
244
245\permanent\protected\gdef\showligature#1%
246  {\hbox{\type{#1}\enspace\showglyphs#1}}
247
248\permanent\protected\tolerant\gdef\showligatures[#1]% we keep it around for compatibility reasons
249  {\bgroup
250   \def\module_fonts_show_ligature##1{\hbox{\showglyphs##1}}%
251   \ifempty{#1}\else
252     \definedfont[#1*default]%
253   \fi
254   \starttabulate[|*{7}{c|}]
255     \NC\type{ff}
256     \NC\type{fi}
257     \NC\type{fl}
258     \NC\type{ffi}
259     \NC\type{ffl}
260     \NC\type{--}
261     \NC\type{---}
262     \NC\NR
263     \NC\module_fonts_show_ligature{ff}
264     \NC\module_fonts_show_ligature{fi}
265     \NC\module_fonts_show_ligature{fl}
266     \NC\module_fonts_show_ligature{ffi}
267     \NC\module_fonts_show_ligature{ffl}
268     \NC\module_fonts_show_ligature{--}
269     \NC\module_fonts_show_ligature{---}
270     \NC\NR
271   \stoptabulate
272   \egroup}
273
274\permanent\protected\gdef\showkerning
275  {\groupedcommandcs\showfontkerns\relax}
276
277\permanent\gdef\module_fonts_char_ratio#1#2%
278  {\ifzeropt\nextboxhtdp\else
279     \cldcontext{\number#1/\number\nextboxhtdp}%
280   \fi}
281
282\permanent\protected\gdef\showcharratio
283  {\dowithnextboxcontent
284     {\switchtobodyfont[10pt]}%
285     {\starttabulate[|l|l|l|]
286        \NC height \NC \the\nextboxht \NC \module_fonts_char_ratio\nextboxht \NC \NR
287        \NC depth  \NC \the\nextboxdp \NC \module_fonts_char_ratio\nextboxdp \NC \NR
288      \stoptabulate}
289     \hbox}
290
291\permanent\protected\gdef\showfontparameters
292  {\starttabulate[|tl|l|]
293     \NC \type {\slantperpoint}    \NC \the\fontslantperpoint   \font \NC\NR
294     \NC \type {\interwordspace}   \NC \the\fontinterwordspace  \font \NC\NR
295     \NC \type {\interwordstretch} \NC \the\fontinterwordstretch\font \NC\NR
296     \NC \type {\interwordshrink}  \NC \the\fontinterwordshrink \font \NC\NR
297     \NC \type {\exheight}         \NC \the\fontexheight        \font \NC\NR
298     \NC \type {\emwidth}          \NC \the\fontemwidth         \font \NC\NR
299     \NC \type {\extraspace}       \NC \the\fontextraspace      \font \NC\NR
300   \stoptabulate}
301
302\protected\gdef\module_fonts_show_minimal_baseline#1% to be used in a 10 column tabulate
303  {\setbox\scratchbox\ruledhbox{#1}%
304   \normalexpanded {
305     \NC \ruledhbox{#1}%
306     \NC ->
307     \NC \the\htdp\scratchbox
308     \NC =
309     \NC \the\ht\scratchbox
310     \NC +
311     \NC \the\dp\scratchbox
312     \NC \ifcmpdim\htdp\scratchbox\baselineskip <\or=\or>\fi
313     \NC \the\baselineskip
314     \NC (\ifdim\htdp\scratchbox>\baselineskip not \fi ok)
315     \NC \NR}}
316
317\permanent\protected\gdef\showminimalbaseline
318  {\starttabulate[|l|T|T|T|T|T|T|T|T|T|]
319     \module_fonts_show_minimal_baseline{\hbox to \emwidth{\hss\showstruts\strut\hss}}%
320     \module_fonts_show_minimal_baseline{(/)}%
321     \module_fonts_show_minimal_baseline{\normalstartimath\frac{1}{2}x\normalsuperscript2\normalsubscript3\normalstopimath}
322   \stoptabulate}
323
324\permanent\protected\tolerant\gdef\showfontstrip[#1]%
325  {\bgroup
326   \def\module_fonts_show_strip_a##1##2%
327     {\tttf\string##1}
328   \def\module_fonts_show_strip_b##1##2%
329     {\ruledhbox{\switchtobodyfont[#1]##1{##2}}}
330   \def\module_fonts_show_strip_c##1##2%
331     {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
332      \tt\tfx\the\ht\scratchbox}%
333   \def\module_fonts_show_strip_d##1##2%
334     {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
335      \tt\tfx\the\wd\scratchbox}%
336   \def\module_fonts_show_strip_indeed##1##2##3%
337     {\NC##2\rm{##3}\NC
338         ##2\ss{##3}\NC
339         ##2\tt{##3}\NC
340         ##2\mathematics{##3}\NC
341         \tttf##1\NR}
342   \starttabulate[|c|c|c|c|c|]
343     \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_a\empty
344     \TB
345     \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{xxxx}
346     \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{12345}
347     \module_fonts_show_strip_indeed\relax\module_fonts_show_strip_b{(Agw)}
348     \TB
349     \module_fonts_show_strip_indeed{(x height)}\module_fonts_show_strip_c{x}
350     \module_fonts_show_strip_indeed{(m  width)}\module_fonts_show_strip_d{m}
351   \stoptabulate
352   \egroup}
353
354%D This is now moved here as there is no reason to have it in the core. Some of
355%D the helpers might move to a more protected namespace.
356
357\newbox\otfcollector
358
359\permanent\protected\gdef\startotfcollecting{\ctxlua{nodes.tracers.steppers.start()}}
360\permanent\protected\gdef\stopotfcollecting {\ctxlua{nodes.tracers.steppers.stop()}}
361\permanent\protected\gdef\resetotfcollecting{\ctxlua{nodes.tracers.steppers.reset()}}
362
363% \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{الضَّرَّ} \page
364% \page \showotfcomposition{arabtype*arab-default at 48pt}{-1}{لِلّٰهِ} \page
365
366\permanent\protected\gdef\showotfstepglyphs#1%
367  {\ctxlua{nodes.tracers.steppers.glyphs(\number\otfcollector,#1)}%
368   \unhbox\otfcollector}
369
370\permanent\protected\gdef\otfstepspace
371  {\removeunwantedspaces
372   \hskip.5\emwidth \s!plus .125\emwidth \s!minus .125\emwidth\relax}
373
374\permanent\protected\gdef\otfstepcharcommand#1#2#3% font char class
375  {\otfstepspace
376   \iftok{#3}{mark}\expandafter\underbar\fi{U+\hexnumber{#2}}:%
377   \setbox\scratchbox\hbox{\ctxlua{nodes.tracers.fontchar(#1,#2)}}%
378   \ifzeropt\wd\scratchbox
379     \scratchwidth.125\onepoint
380     \scratchdistance\dimexpr(\emwidth/2-\scratchwidth)\relax
381     \kern\scratchdistance
382     \ruledhbox to \scratchwidth{\hss\box\scratchbox\hss}%
383     \kern-\scratchwidth
384     \hskip\scratchdistance
385   \else
386     \ruledhbox{\box\scratchbox}%
387   \fi
388   \otfstepspace}
389
390\permanent\protected\gdef\otfstepfontcommand#1#2#3% id font size
391  {\begingroup
392   \tttf #1: #2 @ \the\dimexpr#3\scaledpoint\relax
393   \endgroup}
394
395\permanent\protected\gdef\otfstepmessagecommand#1#2%
396  {\begingroup
397   \tttf\language\minusone
398   \veryraggedright
399   \forgetparindent
400   \forgeteverypar
401   \hangindent\emwidth
402   \hangafter\plusone
403   \dontleavehmode\detokenize{#1}\removeunwantedspaces
404   \ifempty{#2}\else,\space\detokenize{#2}\fi\endgraf
405   \endgroup
406   \blank}
407
408\permanent\protected\gdef\showotfstepfont
409  {\ctxlua{nodes.tracers.steppers.font("otfstepfontcommand")}}
410
411\permanent\protected\gdef\showotfstepchars#1%
412  {\ctxlua{nodes.tracers.steppers.codes(#1,"otfstepcharcommand","otfstepspace")}}
413
414\permanent\protected\gdef\showotfstepmessages#1%
415  {\ctxlua{nodes.tracers.steppers.messages(#1,"otfstepmessagecommand",true)}}
416
417\permanent\protected\gdef\showotfstepfeatures
418  {\ctxlua{nodes.tracers.steppers.features()}}
419
420\permanent\protected\gdef\otfnoffeaturesteps
421  {\ctxlua{nodes.tracers.steppers.nofsteps()}}
422
423\newconstant\showotfstepsmode  \showotfstepsmode\plusfour
424
425\protected\gdef\showotfsteps_n
426  {\blank
427   \begingroup
428     \advanceby\leftskip6\emwidth
429     \showotfstepmessages\recurselevel
430     \par
431   \endgroup
432   \blank
433   \dontleavehmode
434   \hbox to \hsize \bgroup
435     \hbox to 6\emwidth \bgroup
436       \bf
437       \ifnum\recurselevel=\scratchcounter result\else step \recurselevel\fi
438       \hss
439     \egroup
440     \vtop \bgroup
441       \hsize\dimexpr\hsize-6\emwidth\relax
442       \resetallattributes
443       \lefttoright
444       \dontleavehmode
445       \ifnum\recurselevel=\scratchcounter
446         \ruledhbox{\box\otfcompositionbox}%
447       \else
448         \ruledhbox{\showotfstepglyphs\recurselevel}%
449       \fi
450       \quad
451       \showotfstepchars\recurselevel
452       \hfill
453       \par
454     \egroup
455   \egroup
456   \blank}
457
458\permanent\protected\gdef\showotfsteps
459  {\begingroup
460   \veryraggedright
461   \forgetparindent
462   \forgeteverypar
463   \tt
464   \lefttoright
465   \hbox to \hsize \bgroup
466     \hbox to 6\emwidth{\bf font\hss}%
467     \vtop \bgroup
468       \hsize\dimexpr\hsize-6\emwidth\relax
469       \language\minusone
470       \bf
471       \showotfstepfont
472     \egroup
473   \egroup
474   \blank
475   \hbox to \hsize \bgroup
476     \hbox to 6\emwidth{\bf features\hss}%
477     \vtop \bgroup
478       \hsize\dimexpr\hsize-6\emwidth\relax
479       \language\minusone
480       \showotfstepfeatures
481     \egroup
482   \egroup
483   \blank
484   \scratchcounter\otfnoffeaturesteps\relax
485   \dorecurse\scratchcounter
486     {\ifcase\showotfstepsmode
487      \or % 1 = only first
488        \ifnum\recurselevel=\plusone
489          \showotfsteps_n
490        \fi
491      \or % 2 = only last
492        \ifnum\recurselevel=\scratchcounter
493          \showotfsteps_n
494        \fi
495      \or % 3 = first and last
496        \ifnum\recurselevel=\plusone
497          \showotfsteps_n
498        \orelse\ifnum\recurselevel=\scratchcounter
499          \showotfsteps_n
500        \fi
501      \else % everything
502        \showotfsteps_n
503      \fi}%
504   \endgroup}
505
506\permanent\protected\gdef\startotfsample
507  {\enabletrackers[otf.sample.silent]% beware, kind of global
508   \startotfcollecting
509   \begingroup
510   \veryraggedright
511   \forgetparindent
512   \forgeteverypar}
513
514\permanent\protected\gdef\stopotfsample
515  {\endgroup
516   \stopotfcollecting
517   \disabletrackers[otf.sample]% beware, kind of global: otf.sample
518   \showotfsteps
519   \resetotfcollecting}
520
521\newbox\otfcompositionbox
522
523% this should go in spac-ali:
524
525\installcorenamespace{otfcompositiondir}
526
527\gletcsname\??otfcompositiondir  -1\endcsname\righttoleft
528\gletcsname\??otfcompositiondir r2l\endcsname\righttoleft
529\gletcsname\??otfcompositiondir l2r\endcsname\lefttoright
530\gletcsname\??otfcompositiondir  +1\endcsname\lefttoright
531\gletcsname\??otfcompositiondir   1\endcsname\lefttoright
532
533\permanent\protected\gdef\setotfcompositiondirection#1%
534 {\begincsname\??otfcompositiondir#1\endcsname}
535
536\permanent\protected\gdef\showotfcomposition#1#2#3% {font*features at size}, rl=-1, text
537  {\begingroup
538   \forgetparindent
539   \forgeteverypar
540 % \setupcolors[\c!state=\v!start]%
541   \setupalign[\v!verytolerant,\v!flushleft]%
542   \startotfsample
543   \nohyphens
544   \global\setbox\otfcompositionbox\hbox{\definedfont[#1]\relax\setotfcompositiondirection{#2}\relax#3}%
545   \stopotfsample
546   \endgroup}
547
548%D \startbuffer
549%D \startotfcompositionlist{Serif*default @ 11pt}{l2r}%
550%D     \showotfcompositionsample{effe}
551%D \stopotfcompositionlist
552%D \stopbuffer
553%D
554%D \typebuffer \getbuffer
555
556\permanent\protected\gdef\showotfcompositionlist#1#2#3%
557  {\begingroup
558   \definedfont[#1]%
559   \setbox\scratchbox\hbox\bgroup
560     \setotfcompositiondirection{#2}%
561     #3%
562   \egroup
563   \strut
564   \def|##1|{\kern\onepoint\string|\kern\onepoint##1\kern\onepoint\string|\kern\onepoint}%
565   \cldcontext{nodes.listtoutf(tex.box[\number\scratchbox].list,"{\\kern\\onepoint}",true)}%
566   \endgroup}
567
568\mutable\glet\showotfcompositionsample\gobbleoneargument
569
570\permanent\protected\gdef\startotfcompositionlist#1#2#3\stopotfcompositionlist
571  {\begingroup
572   \protected\def\showotfcompositionsample##1%
573     {\NC\type{##1}%
574      \NC\showotfcompositionlist{Mono}{#2}{##1}%
575      \NC\showotfcompositionlist{#1}{#2}{##1}%
576      \NC\definedfont[#1]##1%
577      \NC\NR}%
578   \starttabulate[|||||]%
579     #3%
580   \stoptabulate
581   \endgroup}
582
583\aliased\glet\stopotfcompositionlist\relax
584
585%D Till here.
586
587\permanent\protected\def\showbodyfontstate
588  {\dontleavehmode
589   \start
590   \infofont
591   [fontclass: \fontclass,\space
592    fontbody:  \fontbody ,\space
593    fontface:  \fontface ,\space
594    fontsize:  \fontsize ]%
595   \stop}
596
597\protect
598
599\continueifinputfile{s-fonts-show.mkxl}
600
601\setupwhitespace[big]
602
603\dontcomplain
604
605\starttext
606
607\startsubject[title=\type{\showkerning}]
608    \showkerning{Just a small sentence with hopefully some kerns.}
609\stopsubject
610
611\startsubject[title=\type{\showcharratio}]
612    \showcharratio{testg}
613\stopsubject
614
615\startsubject[title=\type{\showfontparameters}]
616    \showfontparameters
617\stopsubject
618
619\startsubject[title=\type{\showminimalbaseline}]
620    \showminimalbaseline
621\stopsubject
622
623\startsubject[title=\type{\showfontstrip}]
624    \showfontstrip
625\stopsubject
626
627\startsubject[title=\type{\showbodyfont}]
628    \showbodyfont
629\stopsubject
630
631\startsubject[title=\type{\showbodyfontenvironment}]
632    \showbodyfontenvironment
633\stopsubject
634
635\startsubject[title=\type{\showligature}]
636    \showligature{fi}
637    \showligature{fx}
638\stopsubject
639
640\startsubject[title=\type{\showligatures}]
641    \showligatures
642\stopsubject
643
644\startsubject[title=\type{\showfontstyle}]
645    \showfontstyle[][rm][tf][all]
646\stopsubject
647
648\startsubject[title=\type{\showfont}]
649    \showfont
650\stopsubject
651
652\startsubject[title=\type{\showbodyfontstate}]
653    \showbodyfontstate
654\stopsubject
655
656\page
657
658\startsubject[title=\type{\showotfcomposition}]
659    \showotfcomposition{arabtype*arabic at 48pt}{-1}{الضَّرَّ}
660    \page
661    \showotfcomposition{arabtype*arabic at 48pt}{-1}{لِلّٰهِ}
662    \page
663\stopsubject
664
665\stoptext
666