<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%    Copyright (C) 1991 Silvio Levy
%     
%    This file is free software: you can redistribute it and/or modify
%    it under the terms of the GNU General Public License as published by
%    the Free Software Foundation, either version 2 of the License, or
%    (at your option) any later version.
%
%    This file is distributed in the hope that it will be useful,
%    but WITHOUT ANY WARRANTY; without even the implied warranty of
%    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%    GNU General Public License for more details.
%
%    You should have received a copy of the GNU General Public License
%    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.

% This file is supposed to provide a testbed for font evaluation.
     
\tracinglostchars=0
\tolerance=1000
\raggedbottom
\nopagenumbers
\parindent=0pt
\newlinechar=`@
\input greekmacros
     
\newcount\m \newcount\n \newcount\p \newdimen\dim
\chardef\other=12
     
\def\today{\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}
\def\hours{\n=\time \divide\n 60
  \m=-\n \multiply\m 60 \advance\m \time
  \twodigits\n\twodigits\m}
\def\twodigits#1{\ifnum #1&lt;10 0\fi \number#1}
     
{\catcode`\|=0 \catcode`\\=\other
|gdef|help{|message{%
\init switches to another font;@%
\end or \bye finishes the run;@%
\table prints the font layout in tabular format;@%
\text prints a sample text, assuming TeX text font conventions;@%
\sample combines \table and \text;@%
\mixture mixes a background character with a series of others;@%
\alternation interleaves a background character with a series;@%
\alphabet prints all lowercase letters within a given background;@%
\alphabets does one \alphabet for each lowercase background letter;@%
\ALPHABET prints all uppercase letters within a given background;@%
\ALPHABETs does one \ALPHABET for each uppercase background letter;@%
\accents prints all lowercase vowels with accents and breathings;@%
\series prints a series of letters withing a given background;@%
\lowers prints a comprehensive test of lowercase;@%
\uppers prints a comprehensive test of uppercase;@%
\digits prints a comprehensive test of numerals;@%
\math prints a comprehensive test of TeX math italic;@%
\names prints a text that mixes upper and lower case;@%
\punct prints a punctuation test;@%
\bigtest combines many of the above routines;@%
\help repeats this message;@%
and you can use ordinary TeX commands (e.g., to \input a file).}}}
     
\def\setbaselineskip{\setbox0=\hbox{\n=0
\loop\char\n \ifnum \n&lt;255 \advance\n 1 \repeat}
\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }
     
\def\setchar#1{{\escapechar-1\message{\string#1 character = }%
  \def\do##1{\catcode`##1=\other}\dospecials
  \read-1 to\next
  \expandafter\finsetchar\next\next#1}}
\def\finsetchar#1#2\next#3{\global\chardef#3=`#1
  \ifnum #3=`\# \global\chardef#3=#2 \fi}
\def\promptthree{\setchar\background
  \setchar\starting \setchar\ending}
     
\def\init{\message{@Name of the font to test = }
  \read-1 to\fontname
  \font\testfont=\fontname
  \headline={\sevenrm Test of \fontname\unskip\ on \today\ at \hours\hfil
    Page \folio}
  \testfont \setbaselineskip
  \ifdim\fontdimen6\testfont&lt;10pt \rightskip=0pt plus 20pt
  \else\rightskip=0pt plus 2em \fi
  \spaceskip=\fontdimen2\testfont % space between words (\raggedright)
  \xspaceskip=\fontdimen2\testfont \advance\xspaceskip by\fontdimen7\testfont
  \message{Now type a test command (\string\help\space for help):}}
     
\def\mixture{\promptthree \domix\mixpattern}
\def\alternation{\promptthree \domix\altpattern}
\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1}
\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0}
\def\domix#1{\par\chardef\0=\background \n=\starting
  \until\ifnum\n=\ending\do\chardef\1=\n #1\par\n=\count\n \repeat}
     
\count`w=`a\count`a=`b\count`b=`g\count`g=`d\count`d=`e\count`e=`z
\count`z=`h\count`h=`j\count`j=`i\count`i=`k\count`k=`l\count`l=`m
\count`m=`n\count`n=`x\count`x=`o\count`o=`p\count`p=`r\count`r=`c
\count`c=`t\count`t=`u\count`u=`f\count`f=`q\count`q=`y\count`y=`w
\count`W=`A\count`A=`B\count`B=`G\count`G=`D\count`D=`E\count`E=`Z
\count`Z=`H\count`H=`J\count`J=`I\count`I=`K\count`K=`L\count`L=`M
\count`M=`N\count`N=`X\count`X=`O\count`O=`P\count`P=`R\count`R=`S
\count`S=`T\count`T=`U\count`U=`F\count`F=`Q\count`Q=`Y\count`Y=`W
\count`0=`1\count`1=`2\count`2=`3\count`3=`4\count`4=`5
\count`5=`6\count`6=`7\count`7=`8\count`8=`9\count`9=`0
     
\long\def\until#1\do#2\repeat{\def\body{#2}\def\cond{#1}\etareti}
\def\etareti{\cond\let\next=\relax\else\let\next=\etareti\fi\body\next}
     
\def\alphabet{\setchar\background \dosseries{`a}{`w}}
\def\ALPHABET{\setchar\background \doseries{`A}{`W}}
\def\series{\promptthree \doseries\starting\ending}
\def\doseries#1#2{\def\!{\discretionary{\background}{\background}{\background}}
  \!\n=#1\until\ifnum\n=#2\do\char\n\!\n=\count\n \repeat\par}
\def\dosseries#1#2{\def\!{\discretionary{\background}{\background}{\background}}
  \!\n=#1\until\ifnum\n=#2\do\char\n\!\n=\count\n \repeat s\par}
     
\def\lowers{\docomprehensive hs{`a}{`w}}
\def\uppers{\docomprehensive HO{`A}{`W}}
\def\digits{\docomprehensive H0{`0}{`9}}
\def\docomprehensive#1#2#3#4{\par\n=#3
  \until\ifnum\n=#4\do\line{\altr#1\hfil\altr#2}\n=\count\n\repeat}
\def\altr#1{\setbox0=\hbox{#1}\setbox2=\hbox{#1\char\n}%
  \dim=.5\hsize \advance\dim-\wd0 \divide\dim\wd2 \multiply\dim\wd2
  \xleaders\box2\hskip\dim\box0}
\def\alphabets{\m=`a\until\ifnum\m=`w
  \do\chardef\background=\m{\dosseries{`a}{`w}}\m=\count\m \repeat}
\def\ALPHABETS{\m=`A\until\ifnum\m=`W
  \do\chardef\background=\m{\doseries{`A}{`W}}\m=\count\m \repeat}
     
\def\separator{\vfil\penalty-100\vfilneg
  \medskip\leaders\hrule height.4pt\vskip.4pt\medskip}
     
\def\bigtest{%
\sample\vfil\break
\accents\separator
\names\separator
\punct\separator
\alphabets\separator
\lowers\separator
\uppers\separator
\digits}
     
\def\math{\message{(Sorry, that's not here yet.)}}
     
\def\oct#1{\hbox{\tenrm\'{}\kern-.2em\tenit#1\/\kern.05em}} % octal constant
\def\hex#1{\hbox{\tenrm\H{}\tentt#1}} % hexadecimal constant
\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
 \m=\n \divide\m by 64 \xdef\0{\the\m}%
 \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
 \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
 \global\p=\lastpenalty}} % \p=1 if none of the characters exist
\def\oddline{\cr
  \noalign{\nointerlineskip}
  \multispan{19}\hrulefill&amp;
  \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
  \noalign{\nointerlineskip}}
\newif\ifskipping
\def\evenline{\loop\skippingfalse
 \ifnum\n&lt;256 \m=\n \divide\m 16 \chardef\next=\m
 \expandafter\setdigs\meaning\next \testrow
 \ifnum\p=1 \skippingtrue \fi\fi
 \ifskipping \global\advance\n 16 \repeat
 \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
 \next}
\def\morechart{\cr\noalign{\hrule}
 \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
 \chartline \evenline}
\def\chartline{&amp;\oct{\0\1x}&amp;&amp;\:&amp;&amp;\:&amp;&amp;\:&amp;&amp;\:&amp;&amp;\:&amp;&amp;\:&amp;&amp;\:&amp;&amp;\:&amp;&amp;}
\def\chartstrut{\lower4.5pt\vbox to14pt{}}
\def\table{$$\global\n=0
  \halign to\hsize\bgroup
    \chartstrut##\tabskip0pt plus10pt&amp;
    &amp;\hfil##\hfil&amp;\vrule##\cr
    \lower6.5pt\null
    &amp;&amp;&amp;\oct0&amp;&amp;\oct1&amp;&amp;\oct2&amp;&amp;\oct3&amp;&amp;\oct4&amp;&amp;\oct5&amp;&amp;\oct6&amp;&amp;\oct7&amp;\evenline}
\def\endchart{\cr\noalign{\hrule}
  \raise11.5pt\null&amp;&amp;&amp;\hex 8&amp;&amp;\hex 9&amp;&amp;\hex A&amp;&amp;\hex B&amp;
  &amp;\hex C&amp;&amp;\hex D&amp;&amp;\hex E&amp;&amp;\hex F&amp;\cr\egroup$$\par}
\def\:{\setbox0=\hbox{\char\n}%
  \ifdim\ht0&gt;7.5pt\reposition
  \else\ifdim\dp0&gt;2.5pt\reposition\fi\fi
  \box0\global\advance\n 1 }
\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
  \advance\dim 2pt \dp0=\dim}
\def\centerlargechars{
  \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
     
\begingreek
     
\def\accents{\longseries a\shortseries e\longseries h\mediumseries i
\shortseries o\mediumseries u\longseries w \rseries}
\def\longseries#1{#1 `#1 '#1 ~#1 #1| `#1| '#1| ~#1| &lt;#1 &lt;`#1 &lt;'#1 &lt;~#1 &lt;#1|
  &lt;`#1| &lt;'#1| &lt;~#1| &gt;#1 &gt;`#1 &gt;'#1 &gt;~#1 &gt;#1| &gt;`#1| &gt;'#1| &gt;~#1| \par}
\def\shortseries#1{#1 `#1 '#1 &lt;#1 &lt;`#1 &lt;'#1 &gt;#1 &gt;`#1 &gt;'#1 \par}
\def\mediumseries#1{#1 `#1 '#1 ~#1 %
  &lt;#1 &lt;`#1 &lt;'#1 &lt;~#1 &gt;#1 &gt;`#1 &gt;'#1 &gt;~#1 "#1 "`#1 "'#1 "~#1 \par}
\def\rseries{r &lt;r &gt;r\par}
\def\names{ &gt;Afrod'ith Beatr'ikh Gi'wrgos Dhm'htrhs E&gt;ugen'ia
   Zw'h &lt;Hrakl~hs Je'ofilos &gt;Iw'anna K'wstas Louk~as
   Mar'ia N'ikh Xanjo'ula O&gt;id'ipous Pl'atwn Rox'anh S'ilbio
   Thl'emaqos &lt;Upat'ia F'ilippos Qar'a Yuq'h &gt;Wrig'enhs\par}
\def\punct{{\hyphenpenalty=10000\par\dopunct{ka'i}\dopunct{t~hs}\dopunct{&lt;'ena}
  \dopunct{&lt;ELLAS}\par}}
\def\dopunct#1{#1, #1: #1; ''#1'' #1? #1! ((#1)) (#1) [#1] #1* #1.\par}
     
\def\from#1{{\sevenrm\unskip\nobreak\hfil\penalty50\hskip2em\hbox{}
  \nobreak\hfil (From #1)\parfillskip=0pt\finalhyphendemerits=0 \par}}
     
\def\text{{\advance\baselineskip-4pt
\setbox0=\hbox{abcdefghijklmnopqrstuvwxyz}
\ifdim\hsize\gt2\wd0 \ifdim 15pc\gt2\wd0 \hsize=15pc \else \hsize=2\wd0 \fi\fi
T`h stigm`h to'uth ni'wjw p'oso bar'u ''nai t`o
must'hrio t~hs xomol'oghshs.  &lt;Ws t'wra, kane`is
d`en x'erei p~ws p'erasa t`a du`o qr'onia mou
st`o &lt;'Agion &gt;'Oros.  O&lt;i f'iloi mou jarro~un p`ws
p~hga n`a d~w buzantin`a kon'ismata &gt;`h &gt;ap`o
mustikop'ajeia n`a z'hsw mi`a perasm'enh &gt;epoq'h.
Ka`i t'wra, n'a, ntr'epomai n`a mil'hsw.
     
P~ws n`a t`o p~w?  Jumo~umai &lt;'ena &gt;anoixi'atiko
deilin'o, po`u kat'ebaina t`on Ta"'ugeto, mi`a xafnik`h
j'uella m`e k'uklwse kont`a sto'us Pentaulo'us.  T'oso
fober`os &gt;anemoc'ifounas, po`u &gt;'epesa katag~hs gi`a n`a m`hn
gkremist~w.  O&lt;i &gt;astrap`es m'' &gt;'exwsan &lt;olo~uje ki &gt;'ekleisa
t`a m'atia m`hn tuflwj~w, ka`i kat'aqama, p'istoma, per'imena.
&lt;'Olo t`o pan'uyhlo boun`o &gt;'etreme, ka`i du`o &gt;'elata d'ipla mou
tsak'isthkan &gt;ap'' t`h m'esh ka`i br'onthxan q'amou.
&gt;'Eniwja t`o jei'afi to~u kerauno~u st`on &gt;a'era, ka`i xafnik`a
x'espase &lt;h mp'ora, &gt;'epesen &lt;o &gt;'anemos, ka`i qontr'es, jerm`es
st'ales broq`h qt'uphsan t`a dentr`a ka`i t`o q~wma.
T`o jum'ari, &lt;h jro'umpa, t`o fask'omhlo, t`o flisko'uni,
qtuphm'ena &gt;ap'' t`o ner'o, t'inaxan t`is murwdi'es tous
ki &lt;'olh &lt;h g~hs m'urise.
\from{Kazantzakis' ``Symposium''}
     
\medskip
&gt;All'' &gt;ako'usontai, &gt;e'anper e&gt;~u dok~h|s l'egein.  t'ode d'e sou
&gt;enen'ohsa &lt;'ama l'egontos, ka`i pr`os &gt;emaut`on skop~w; e&gt;i
&lt;'oti m'alist'a me E&gt;uj'ufrwn did'axeien, &lt;ws o&lt;i jeo`i &lt;'apantes
t`on toio~uton j'anaton &lt;hgo~untai &gt;'adikon e&gt;~inai, t'i m~allon &gt;eg`w
mem'ajhka par'' E&gt;uj'ufronos, t'i pot'' &gt;est`in t`o &lt;'osi'on te ka`i
t`o &gt;an'osion? jeomis`es m`en g`ar to~uto t`o &gt;'ergon, &lt;ws &gt;'eoiken,
e&gt;'ih &gt;'an; &gt;all`a g`ar o&gt;u to'utw| &gt;ef'anh &gt;'arti &lt;wrism'ena t`o
&lt;'osion ka`i m'h; t`o g`ar jeomis`es &gt;`on ka`i jeofil`es &gt;ef'anh.
&lt;wste to'utou m`en &gt;af'ihm'i se, &gt;~w E&gt;uj'ufron; e&gt;i bo'ulei, p'antes
a&gt;ut`o &lt;hge'isjwn jeo`i &gt;'adikon ka`i p'antes miso'untwn.  &gt;all''
&gt;~ara to~uto n~un &gt;epanorj'wmeja &gt;en t~w| l'ogw|, &lt;ws &lt;`o m`en &gt;`an
p'antes o&lt;i jeo`i mis~wsin, &gt;an'osi'on &gt;estin, &lt;`o d'' &gt;`an fil~wsin,
&lt;'osion; &lt;`o d'' &gt;`an o&lt;i m`en fil~wsin, o&lt;i d`e mis~wsin, o&gt;ud'etera
&gt;`h amf'otera? &gt;~ar'' o&lt;'utw bo'ulei &lt;hm~in &lt;wr'isjai n~un per`i to~u
&lt;os'iou ka`i to~u &gt;anos'iou?
\from{Plato's ``Euthyphro''}
     
}}
     
\def\sample{\text\table}
     
\init
</pre></body></html>