summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/fonts/auncial-new/aunclmft.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/fonts/auncial-new/aunclmft.dtx')
-rw-r--r--Master/texmf-dist/source/fonts/auncial-new/aunclmft.dtx2173
1 files changed, 2173 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/fonts/auncial-new/aunclmft.dtx b/Master/texmf-dist/source/fonts/auncial-new/aunclmft.dtx
new file mode 100644
index 00000000000..a4388d51794
--- /dev/null
+++ b/Master/texmf-dist/source/fonts/auncial-new/aunclmft.dtx
@@ -0,0 +1,2173 @@
+% \iffalse meta-comment
+%
+% aunclmft.dtx
+%
+% Author: Peter Wilson (Herries Press) herries dot press at earthlink dot net
+% Copyright 1999--2005 Peter R. Wilson
+%
+% This work may be distributed and/or modified under the
+% conditions of the Latex Project Public License, either
+% version 1.3 of this license or (at your option) any
+% later version.
+% The latest version of the license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2003/06/01 or later.
+%
+% This work has the LPPL maintenance status "author-maintained".
+%
+% This work consists of the files listed in the README file.
+%
+% If you do not have the docmfp package (available from CTAN in
+% tex-archive/macros/latex/contrib/supported), comment out the
+% \usepackage{docmfp} line below and uncomment the line following it.
+%
+%<*driver>
+\documentclass[twoside]{ltxdoc}
+\usepackage{docmfp}
+%%%%%% \providecommand{\DescribeVariable}[1]{} \newenvironment{routine}[1]{}{}
+\usepackage{url}
+\usepackage[draft=false,
+ plainpages=false,
+ pdfpagelabels,
+ bookmarksnumbered,
+ hyperindex=false
+ ]{hyperref}
+\providecommand{\phantomsection}{}
+\OnlyDescription %% comment this out for the full glory
+\EnableCrossrefs
+\CodelineIndex
+\setcounter{StandardModuleDepth}{1}
+\makeatletter
+ \@mparswitchfalse
+\makeatother
+\renewcommand{\MakeUppercase}[1]{#1}
+\pagestyle{headings}
+\newenvironment{addtomargins}[1]{%
+ \begin{list}{}{%
+ \topsep 0pt%
+ \addtolength{\leftmargin}{#1}%
+ \addtolength{\rightmargin}{#1}%
+ \listparindent \parindent
+ \itemindent \parindent
+ \parsep \parskip}%
+ \item[]}{\end{list}}
+\begin{document}
+ \raggedbottom
+ \DocInput{aunclmft.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{132}
+%
+% \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath}
+% \DoNotIndex{\@centercr,\@cite}
+% \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+% \DoNotIndex{\@input,\@ixpt,\@m}
+% \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint}
+% \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+% \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+% \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+% \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+% \DoNotIndex{\advance,\Alph,\alph}
+% \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+% \DoNotIndex{\bullet}
+% \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+% \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+% \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+% \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+% \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+% \DoNotIndex{\fbox}
+% \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+% \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+% \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+% \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+% \DoNotIndex{\input}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+% \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+% \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+% \DoNotIndex{\NeedsTeXFormat,\newdimen}
+% \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+% \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+% \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+% \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+% \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+% \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
+% \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman}
+% \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength}
+% \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+% \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+% \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+% \DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+% \DoNotIndex{\wd,\xiipt,\year,\z@}
+%
+% \changes{v1.0}{1999/05/22}{First public release}
+% \changes{v2.0}{2005/11/27}{Major rewrite}
+%
+% \def\fileversion{v1.0} \def\filedate{1999/05/22}
+% \def\fileversion{v2.0} \def\filedate{2005/11/27}
+% \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package
+% \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option
+% \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file
+% \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter
+% \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle
+% \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment
+% \newcommand*{\AD}{\textsc{ad}}
+% \newcommand*{\thisfont}{Artificial Uncial}
+%
+% \title{\Lpack{Artificial Uncial}: MetaFont driver code\thanks{This
+% file has version number \fileversion, last revised
+% \filedate.}}
+%
+% \author{%
+% Peter Wilson\footnote{\texttt{herries dot press at earthlink dot net}}\\
+% Herries Press }
+% \date{\filedate}
+% \maketitle
+% \begin{abstract}
+% The \Lpack{auncial} bundle provides a PostScript Type1 set of
+% \thisfont{} bookhands
+% as used
+% for manuscripts in the 6th to the 10th century. This is one in a series
+% of manuscript fonts.
+%
+% This document contains the MetaFont driver code.
+% \end{abstract}
+% \tableofcontents
+% \listoftables
+%
+%
+%
+% \section{Introduction}
+%
+% The \Lpack{auncial} bundle provides a PostScript Type1 version of a
+% Metafont~\cite{METAFONT} rendition
+% of the \thisfont{} manuscript book-hand that was in use between about the
+% sixth and tenth centuries~\AD. It is part of a project to provide fonts
+% covering the major manuscript hands between the first century~\AD{} and
+% the invention of printing.
+%
+% This document contains the MetaFont driver code.
+%
+% This manual is typeset according to the conventions of the
+% \LaTeX{} \textsc{docstrip} utility which enables the automatic
+% extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}.
+% The \Lpack{docmfp} package is used for documenting the Metafont portions
+% of the distribution~\cite{DOCMFP}.
+%
+% \section{The Metafont code} \label{sec:mf}
+%
+%
+% As previously noted, this work is part of a larger project to provide
+% fonts covering the main manuscript book-hands. As such, one of the
+% aims is to produce a coordinated set of fonts, especially as multiple
+% hands might be used in a single document.
+%
+% Noting that the hands tend to be somewhat larger than the typical 10pt
+% size (where the x-height is approximately 1.5mm) used for modern books,
+% I have also designed the fonts
+% at a larger than normal size, then applied some non-linear factors when reducing
+% them down to a 10pt size.
+% Further, I have used the height of the Carolingian minuscule as a
+% normalising factor when deciding on the absolute height of any particular
+% script. The x-height of the Carolingian font is made equal to the
+% x-height of the Computer Modern Roman (CMR) font.
+%
+% Modern fonts are effectively drawn. That is, the outline of the letter is
+% drawn carefully and the center is filled with ink. This is shown to good
+% effect in the Metafont code for the Computer Modern fonts~\cite{CM}.
+% In contrast, the manuscript letters were inked by single pen strokes in
+% a calligraphic manner. I have tried to repeat this calligraphic style
+% in the Metafont code.
+%
+% As much as possible I have tried to use parameter values from the
+% Computer Modern Roman (CMR) fonts in order to reduce possible
+% infelicities if the CM and manuscript fonts are used together. However,
+% few of the CMR parameters are applicable to the calligraphic style.
+%
+%
+% \StopEventually{
+% \bibliographystyle{alpha}
+% \renewcommand{\refname}{Bibliography}
+% \begin{thebibliography}{GMS94}
+% \addcontentsline{toc}{section}{\refname}
+%
+% \bibitem[And69]{ANDERSON69}
+% Donald M.~Anderson.
+% \newblock \emph{The Art of Written Forms: The Theory and Practice of Calligraphy}.
+% \newblock Holt, Rinehart and Winston, 1969.
+%
+% \bibitem[Bol95]{BOLOGNA95}
+% Giulia Bologna.
+% \newblock \emph{Illuminated Manuscripts: The Book before Gutenberg}.
+% \newblock Crescent Books, 1995.
+%
+% \bibitem[Day95]{DAY95}
+% Lewis F.~Day.
+% \newblock \emph{Alphabets Old \& New}.
+% \newblock (3rd edition originally published by B.~T.~Batsford, 1910)
+% \newblock Senate, 1995.
+%
+% \bibitem[Dro80]{DROGIN80}
+% Marc Drogin.
+% \newblock \emph{Medieval Calligraphy: Its History and Technique}.
+% \newblock Allenheld, Osmun \& Co., 1980.
+%
+% \bibitem[Dru95]{DRUCKER95}
+% Johanna Drucker.
+% \newblock \emph{The Alphabetic Labyrinth}.
+% \newblock Thames \& Hudson, 1995.
+%
+% \bibitem[Fir93]{FIRMAGE93}
+% Richard A.~Firmage.
+% \newblock \emph{The Alphabet Abecedarium}.
+% \newblock David R~Goodine, 1993.
+%
+% \bibitem[Fli98]{LETTRINE}
+% Daniel Flipo.
+% \newblock \emph{The LETTRINE package}.
+% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}).
+% \newblock 1998.
+%
+% \bibitem[Har95]{HARRIS95}
+% David Harris.
+% \newblock \emph{The Art of Calligraphy}.
+% \newblock DK Publishing, 1995.
+%
+% \bibitem[Jen95]{BETON}
+% Frank Jensen.
+% \newblock \emph{The BETON package}.
+% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}).
+% \newblock 1995.
+%
+% \bibitem[Joh71]{JOHNSTON75}
+% Edward Johnston (ed. Heather Child).
+% \newblock \emph{Formal Penship and Other Papers}.
+% \newblock Penthalic, 1971.
+%
+% \bibitem[Knu87]{CM}
+% Donald E.~Knuth.
+% \newblock \emph{Computer Modern Typefaces}.
+% \newblock Addison-Wesley, 1987.
+%
+% \bibitem[Knu92]{METAFONT}
+% Donald E.~Knuth.
+% \newblock \emph{The METAFONTbook}.
+% \newblock Addison-Wesley, 1992.
+%
+% \bibitem[GMS94]{GOOSSENS94}
+% Michel Goossens, Frank Mittelbach, and Alexander Samarin.
+% \newblock \emph{The LaTeX Companion}.
+% \newblock Addison-Wesley Publishing Company, 1994.
+%
+% \bibitem[Tho75]{THOMAS75}
+% Alan G.~Thomas.
+% \newblock \emph{Great Books and Book Collectors}.
+% \newblock Weidenfield and Nichoson, 1975.
+%
+% \bibitem[Wil99]{DOCMFP}
+% Peter R.~Wilson.
+% \newblock \emph{The DOCMFP Package}.
+% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}).
+% \newblock 1999.
+%
+% \bibitem[Wil99b]{ROMANNUM}
+% Peter R.~Wilson.
+% \newblock \emph{The ROMANNUM Package}.
+% \newblock (Available from CTAN in \texttt{macros/latex/contrib/supported}).
+% \newblock 1999.
+%
+% \end{thebibliography}
+% \PrintIndex
+% }
+%
+% \section{The driver file}
+%
+% The driver file sets up the font parameters and also contains
+% the macros used in the definition of the characters.
+%
+% \begin{macrocode}
+%<*mfd>
+% This is UNCLTITLE.MF for the Artificial Uncial font.
+% This file also contains special macros universally needed in the
+% font but either not in the cmbase.mf file or modifications of these.
+%
+% \end{macrocode}
+%
+% \begin{routine}{makebox}
+% This is a new version of the \Lpack{cmbase.mf} |makebox| macro.
+% Essentially, as we are only generating a single case font, we don't
+% need all the horizontals for the CMR characters.
+%
+% \begin{macrocode}
+%%% A new version of cmbase.mf makebox macro
+def makebox(text rule) =
+ for y=0,half_height,cap_height,body_height,x_height,asc_height,-desc_depth,-body_depth:
+ rule((l,y)t_,(r,y)t_); endfor % horizontals
+ for x=l,r: rule((x,-body_depth)t_,(x,body_height)t_); endfor % verticals
+ for x=u*(1+floor(1/u)) step u until r-1:
+ rule((x,-body_depth)t_,(x,body_height)t_); endfor % more verticals
+ if charic<>0:
+ rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_)); fi % italic correction
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{proofpcbb}
+% The macro |proofpcbb(S, xoff, yoff)| draws crosses at the corners of the
+% square, and at the bottom and top midpoints, where the point |zS| is at
+% position |(xoff,yoff)| in the square.
+% \begin{macrocode}
+%%% A macro to delineate a letter's bounding square in proof mode.
+%%% Point z$ is at (xoff,yoff) in the bounding square.
+def proofpcbb(suffix $)(expr xoff, yoff) =
+if proofing > 0:
+ x$bl = x$ - xoff; y$bl = y$ - yoff; % Bottom Left Hand Corner
+ z$br = (x$bl+side, y$bl); % BRHC
+ z$tr = (x$bl+side, y$bl+side); % TRHC
+ z$tl = (x$bl, y$bl+side); % TLHC
+ z$bc = 1/2[z$bl,z$br]; z$tc = 1/2[z$tl,z$tr]; % horizontal mid points
+ pair hc, vc;
+ hc = (2u,0); vc = (0,2u);
+ pickup pensquare scaled 2;
+ for s = z$bl, z$br, z$tr, z$tl, z$bc, z$tc:
+ draw s-hc--s+hc;
+ draw s-vc--s+vc;
+ endfor
+fi
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+%
+% \begin{routine}{auncial_font_setup}
+% This macro contains the set up for the \thisfont{} fonts.
+% \begin{macrocode}
+def auncial_font_setup= % contains special stuff for auncial fonts
+ define_pixels(side,half_height,carol_height,comma_width);
+ define_pixels(u,dot_size,letter_size,cap_height,width_adj,serif_fit,
+ cap_serif_fit,jut,cap_jut);
+ define_pixels(fig_width);
+ define_whole_pixels(letter_fit);
+ define_whole_vertical_pixels(body_height,asc_height,cap_height,x_height,
+ desc_depth,body_depth,fig_height,
+ accent_ysize,accent_gap);
+ define_corrected_pixels(o);
+ define_blacker_pixels(thick,thin,accent_thickness);
+ let adjust_fit = normal_adjust_fit;
+% \end{macrocode}
+% \DescribeVariable{stylus}
+% The pen for drawing the thinnest lines is |stylus|.
+% \begin{macrocode}
+ pickup pencircle scaled thin;
+ stylus:=savepen;
+% \end{macrocode}
+% \DescribeVariable{thickstylus}
+% The pen for drawing lines a bit thicker than the thinnest is |thickstylus|.
+% \begin{macrocode}
+ pickup pencircle scaled (1.5thin);
+ thickstylus:=savepen;
+% \end{macrocode}
+% \DescribeVariable{accentpen}
+% The pen for drawing the typical accent is |accentpen|.
+% \begin{macrocode}
+ pickup pencircle xscaled 1/2thick yscaled thin rotated pangle;
+ accentpen:=savepen;
+% \end{macrocode}
+% \DescribeVariable{quill}
+% The normal calligraphic pen is |quill|.
+% \begin{macrocode}
+ pickup pencircle xscaled thick yscaled thin rotated pangle;
+ quill:=savepen;
+ numeric pcshiftx#; % x value of LHS of box wrt origin of char box
+ define_pixels(pcshiftx);
+ numeric sqxside#; % x size of the square
+ numeric sqyside#; % y size of the square
+ define_pixels(sqxside,sqyside);
+
+enddef; % end of auncial_font_setup
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \DescribeVariable{ductus}
+% A boolean to control drawing the ductus (TRUE) or the full letter (FALSE).
+% \begin{macrocode}
+boolean ductus;
+ductus:=false;
+% \end{macrocode}
+%
+% \DescribeVariable{qhor}
+% \DescribeVariable{qvert}
+% The cosine and sine of the pen angle.
+% \begin{macrocode}
+numeric qhor, qvert;
+qhor:=cosd(pangle); qvert:=sind(pangle);
+% \end{macrocode}
+%
+% \DescribeVariable{pdir}
+% The vector corresponding to the pen angle.
+% \begin{macrocode}
+pair pdir; pdir=dir(pangle);
+% \end{macrocode}
+%
+% \DescribeVariable{ppdir}
+% The vector that is perpendicular (anticlockwise) to the pen angle.
+% \begin{macrocode}
+pair ppdir; ppdir=dir(pangle+90);
+
+% \end{macrocode}
+%
+%
+% \begin{routine}{draw_serif}
+% A macro to draw a serif. |draw_serif(1,2,f)| uses the current pen to
+% draw a serif of extent |jut| at |z1| to the left of the line from |z2|
+% to |z1|. The
+% radius is controlled by |f|, where $0<f<1$. The `stem' from |z1| to |z2|
+% starts at the point |z1a|.
+% \begin{macrocode}
+def draw_serif(suffix $, $$)(expr fr)=
+ numeric beta, ajut, bjut;
+% \end{macrocode}
+% |fr| and |beta| control the serif radius.
+% \begin{macrocode}
+ beta=1-fr;
+ ajut=fr*jut; bjut=beta*jut;
+% \end{macrocode}
+% The points |$c|, |$b| and |$a| define the serif. For a top (bottom) serif
+% the leftmost (rightmost) point is
+% |$c| and |$a| is on the stem. |$a| is moved from |$| towards |$$| by the
+% distance |ajut|, and the other points are calculated from this. If the stem
+% is not vertical, then we have to rotate |$b| to match.
+% \begin{macrocode}
+ pair vec[]; vec1=unitvector(z$$-z$);
+ vec2=ajut*vec1;
+ z$a=z$ shifted vec2;
+ z$b=z$a rotatedaround (z$,-90);
+ boolean top_serif;
+ if y$>y$$:
+ top_serif := true;
+ z$c=z$b shifted (-bjut*pdir);
+ else:
+ top_serif:=false;
+ z$c=z$b shifted (bjut*pdir);
+ fi
+% \end{macrocode}
+% Draw the parts, and finish off.
+% \begin{macrocode}
+ if top_serif:
+ draw z$c--z$b{pdir}..{z$$-z$}z$a; % the serif
+ else:
+ draw z$c--z$b{-pdir}..{z$$-z$}z$a;
+ fi
+ labels($a,$b,$c);
+enddef; % end of draw_serif
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_istem}
+% A macro to draw the shape of an i. |draw_istem(1,2,f)| draws a stem whose
+% top is at |z1| and bottom at |z2|. It draws with the current pen and the serifs
+% are of extent |jut|. There is a top left and bottom right serif.
+% The serif radius is controlled by |f|, with $0<f<1$.
+% \begin{macrocode}
+def draw_istem(suffix $, $$)(expr fr)=
+ draw_serif($, $$, fr); % top serif
+ draw_serif($$, $, fr); % bottom serif
+ draw z$a--z$$a; % the stem
+enddef; % end of draw_istem
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_tstem}
+% A macro to draw the shape of the stem of a `t'. |draw_tstem(1,2,f)| draws a
+% stem whose
+% top is at |z1| and bottom at |z2| with a right serif at |z2|. The radius
+% is controlled by |f|, with $0 < f < 1$.
+% It draws with the current pen and the serif is of extent |jut|.
+% \begin{macrocode}
+def draw_tstem(suffix $, $$)(expr fr)=
+ draw_serif($$, $, fr); % the serif
+ draw z$--z$$a; % the stem
+enddef; % end of draw_tstem
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_tlserif}
+% A macro to draw a top left serif. |draw_tlserif(1,2,f)| draws a serif on top
+% of a stem whose absolute
+% top is at |z1| and bottom at |z2|. It draws with the current pen and the serif
+% is of extent |jut|. It also draws the stem to the point |z2|. The serif
+% radius is controlled by |f|, with $0<f<1$.
+% \begin{macrocode}
+def draw_tlserif(suffix $, $$)(expr fr)=
+ draw_serif($, $$, fr); % the serif
+ draw z$a--z$$; % the stem
+enddef; % end of draw_tlserif
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_flick}
+% A macro to draw a flick (like an eyebrow).
+% |draw_flick(1,rise,fall,fjut)| draws a stroke starting at |z1| rising up by
+% |rise| and falling down by |fall| wrt |z1|. The overall stroke distance is
+% |fjut| to the right of |z1|. It is drawn with the current pen.
+% \begin{macrocode}
+def draw_flick(suffix $)(expr rise, fall, fjut)=
+% \end{macrocode}
+% The points |z$a| and |z$b|, together with |z$| make up three points on the
+% ductus.
+% \begin{macrocode}
+ rt x$b = x1+fjut; top y$b=y$-fall;
+ x$a=0.5[x$,x$b]; top y$a=y$+rise;
+% \end{macrocode}
+% Draw the part, and finish off.
+% \begin{macrocode}
+ draw z$..z$a..z$b;
+ labels($a,$b);
+enddef; % end of draw_flick
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_wave}
+% A macro to draw a (horizontal) stroke with a flick at each end
+% (down at the left and up at the right). |draw_wave(1,2,f)| uses the current
+% pen to draw from |z1wl| to |z1wr|, where |x1wl=x1|, |y1wl=y1-f|, and
+% |x1wr=x2|, |y1wr=y2+f|, with |z1| assumed to be at the left of |z2|.
+% \begin{macrocode}
+def draw_wave(suffix $,$$)(expr f)=
+ x$wl=x$; y$wl=y$-f;
+ x$wr=x$$; y$wr=y$$+f;
+ z$wc=0.5[z$wl,z$wr];
+ draw z$wl{pdir}..z$wc{right}..{pdir}z$wr;
+ labels($wl,$wc,$wr);
+enddef; % end of draw_wave
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_tail}
+% A macro to draw a tail at the bottom of a (vertical) stem.
+% |draw_tail(1,fjut)| draws a tail at the bottom of the stem which ends at |z1|.
+% The depth is controlled by the |desc_depth| value and the jut by |fjut|.
+% \begin{macrocode}
+def draw_tail(suffix $)(expr fj)=
+ pen oldpen; oldpen:=currentpen;
+ pickup quill;
+ x$tl' = lft x$; y$tl=bot y$;
+ pickup stylus;
+ lft x$tl=x$tl';
+ x$tb=x$tl-fj; bot y$tb=y$tl-1/2desc_depth;
+ filldraw z${down}..{-pdir}z$tb & z$tb{pdir}..{up}z$tl--cycle;
+ pickup oldpen;
+ labels($tb,$tl);
+enddef; % end of draw_tail
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_triangle}
+% A macro to draw a downward pointing equilateral triangle.
+% |draw_triangle(1,sz)| draws a triangle of side length with |z1| in the middle
+% of the base.
+% \begin{macrocode}
+def draw_triangle(suffix $)(expr sz)=
+ pen oldpen; oldpen:=currentpen;
+ pickup stylus;
+ x$t1=x$-sz/2; x$t3=x$+sz/2;
+ y$t1=y$t3=y$;
+ x$t2=x$; y$t2=y$-0.9sz; % approx sqrt(3)/2
+ filldraw z$t1--z$t2--z$t3--cycle;
+ pickup oldpen;
+ labels($t1,$t2,$t3);
+enddef; % end of draw_triangle
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_rtriangle}
+% A macro to draw a downward pointing right angled triangle.
+% |draw_triangle(1,sz)| draws a triangle of side length with |z1| at the
+% right (where the right angle is).
+% \begin{macrocode}
+def draw_rtriangle(suffix $)(expr sz)=
+ pen oldpen; oldpen:=currentpen;
+ pickup stylus;
+ x$t1=x$-sz; rt x$t3=x$;
+ y$t1=y$t3=y$;
+ x$t2=x$t3; y$t2=y$-sz;
+ filldraw z$t1--z$t2--z$t3--cycle;
+ pickup oldpen;
+ labels($t1,$t2,$t3);
+enddef; % end of draw_rtriangle
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_rutriangle}
+% A macro to draw an upward pointing right angled triangle.
+% |draw_triangle(1,sz)| draws a triangle of side length with |z1| at the
+% right (where the right angle is).
+% \begin{macrocode}
+def draw_rutriangle(suffix $)(expr sz)=
+ pen oldpen; oldpen:=currentpen;
+ pickup stylus;
+ x$t1=x$-sz; rt x$t3=x$;
+ y$t1=y$t3=y$;
+ x$t2=x$t3; y$t2=y$+sz;
+ filldraw z$t1--z$t2--z$t3--cycle;
+ pickup oldpen;
+ labels($t1,$t2,$t3);
+enddef; % end of draw_rutriangle
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_fork}
+% A macro to draw a forked line.
+% |draw_fork(1,2,sz)| draws a graduated line from |z1| to |z2| with a forked
+% end of size |sz|.
+% \begin{macrocode}
+def draw_fork(suffix $, $$)(expr sz)=
+ pen oldpen; oldpen:=currentpen;
+ pickup quill;
+ x$f1'=lft x$; y$f1'=bot y$;
+ x$f3'=rt x$; y$f3'=top y$;
+ pickup stylus;
+ lft x$f1=x$f1'; bot y$f1=y$f1';
+ rt x$f3=x$f3'; y$f3-y$=2*(y$-y$f1);
+ rt x$f2=x$$-sz; bot y$f2=y$$;
+ rt x$f4= rt x$f5=x$$;
+ bot y$f5=y$$-sz; top y$f4=y$$+1/2sz;
+ filldraw z$f1--z$f2--z$f3--cycle; % the line
+ draw z$f2{right}..z$f4; % upper fork
+ draw z$f2{right}..z$f5; % lower fork
+ pickup oldpen;
+ labels($f1,$f2,$f3,$f4,$f5);
+enddef; % end of draw_fork
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_pdot}
+% A macro to draw a period dot.
+% |draw_pdot(1,sz)| uses |stylus| to draw a dot centered at |z1| of overall size |sz|.
+% \begin{macrocode}
+def draw_pdot(suffix $)(expr sz)=
+% \end{macrocode}
+% Draw a square rotated 45 degrees.
+% \begin{macrocode}
+ z$s = z$ shifted (0.5sz*left);
+ z$t = z$ shifted (0.5sz*up);
+ z$u = z$s shifted (sz*right);
+ z$v = z$t shifted (sz*down);
+ pickup stylus;
+ filldraw z$s--z$t--z$u--z$v--cycle;
+ labels($s,$t,$u,$v);
+enddef; % end of draw_pdot
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_pcomma}
+% A macro to draw a period comma.
+% |draw_pcomma(1,t,w)| draws a comma placed at |z1| (the top), line width is |t|
+% and bottom of line is |w| horizontally from |z1|. The pen is |stylus|.
+% \begin{macrocode}
+def draw_pcomma(suffix $)(expr sz, ar)=
+% \end{macrocode}
+% Draw a line of at |z$| of width |sz| sloping back and down at 45 degrees
+% for a total width of |ar|.
+% \begin{macrocode}
+ z$s = z$ shifted (0.5sz*left);
+ z$t = z$s shifted (sz*right);
+ x$v=x$s-ar; y$v=y$s-ar;
+ z$u = z$v shifted (sz*right);
+ pickup stylus;
+ filldraw z$s--z$t--z$u--cycle;
+ labels($s,$t,$u,$v);
+enddef; % end of draw_pcomma
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_plq}
+% A macro to draw a period left quote.
+% |draw_plq(1,t,w)| draws a left quote placed at |z1| (the top), line width is |t|
+% and bottom of line is |w| horizontally from |z1|.
+% \begin{macrocode}
+def draw_plq(suffix $)(expr sz, ar)=
+% \end{macrocode}
+% Draw a line of at |z$| of width |sz| sloping forward and down at 45 degrees
+% for a total width of |ar|.
+% \begin{macrocode}
+ z$s = z$ shifted (0.5sz*left);
+ z$t = z$s shifted (sz*right);
+ x$v=x$s+ar; y$v=y$s-ar;
+ z$u = z$v shifted (sz*right);
+ pickup stylus;
+ filldraw z$s--z$t--z$v--cycle;
+ labels($s,$t,$u,$v);
+enddef; % end of draw_plq
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_small_zero}
+% A macro to draw a (small) zero.
+% |draw_small_zero(1,2)|, bottom left at |z1|, top right at |z2|.
+% \begin{macrocode}
+def draw_small_zero(suffix $, $$)=
+ x$szt=x$szb=1/2[x$,x$$]; x$szr=x$$; x$szl=x$;
+ y$szt=y$$; y$szb=y$; y$szl=y$szr=1/2[y$,y$$];
+ draw z$szt..z$szr..z$szb..z$szl..cycle;
+ labels($,$szt,$szr,$szb,$szl);
+enddef; % end of draw_small_zero
+
+% \end{macrocode}
+% \end{routine}
+%
+% \subsection{Routines for accents}
+%
+% The next set of routines are for drawing accents and other decorations.
+%
+% \begin{routine}{draw_grave}
+% A macro to draw a grave accent.
+% |draw_grave(1)|, top at z1, angle |accent_angle|,
+% with total drop of |accent_ysize|.
+% \begin{macrocode}
+def draw_grave(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$gab = x$ + accent_ysize*cos_accent_angle;
+ y$gab = y$ - accent_ysize*sin_accent_angle;
+ z$gam = 1/2[z$,z$gab];
+ draw z$--z$gab;
+ pickup oldpen;
+ labels($,$gam,$gab);
+enddef; % end of draw_grave
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_acute}
+% A macro to draw an acute accent.
+% |draw_acute(1)|, top at z1, angle |accent_angle|,
+% with total drop of |accent_ysize|.
+% \begin{macrocode}
+def draw_acute(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$aab = x$ - accent_ysize*cos_accent_angle;
+ y$aab = y$ - accent_ysize*sin_accent_angle;
+ z$aam = 1/2[z$,z$aab];
+ draw z$--z$aab;
+ pickup oldpen;
+ labels($,$aab,$aam);
+enddef; % end of draw_acute
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_circumflex}
+% A macro to draw a circumflex accent.
+% |draw_circumflex(1)|, bottom at z1, angles |accent_angle|, with total drop of
+% |accent_ysize|.
+% \begin{macrocode}
+def draw_circumflex(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$cabl = x$ - accent_ysize*cos_accent_angle; x$cabr - x$ = x$ - x$cabl;
+ y$cabl = y$cabr = y$;
+ y$catm = y$ + accent_ysize*sin_accent_angle;
+ x$catm = x$;
+ draw z$cabl--z$catm--z$cabr;
+ pickup oldpen;
+ labels($,$cabl,$cabr,$catm);
+enddef; % end of draw_circumflex
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_hachek}
+% A macro to draw a caron/hachek accent.
+% |draw_hachek(1)|, bottom at z1, angles |accent_angle|, with total drop of
+% |accent_ysize|.
+% \begin{macrocode}
+def draw_hachek(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$hatl = x$ - accent_ysize*cos_accent_angle; x$hatr - x$ = x$ - x$hatl;
+ y$hatl = y$hatr = y$ + accent_ysize*sin_accent_angle;
+ draw z$hatl--z$--z$hatr;
+ pickup oldpen;
+ labels($,$hatl,$hatr);
+enddef; % end of draw_hachek
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_breve}
+% A macro to draw a breve accent (a rounded hachek).
+% |draw_breve(1)|, bottom at z1, angles |accent_angle|, with total drop of
+% |accent_ysize|.
+% \begin{macrocode}
+def draw_breve(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$batl = x$ - accent_ysize*cos_accent_angle; x$batr - x$ = x$ - x$batl;
+ y$batl = y$batr = y$ + accent_ysize*sin_accent_angle;
+ draw z$batl..z$..z$batr;
+ pickup oldpen;
+ labels($,$batl,$batr);
+enddef; % end of draw_hachek
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_ring}
+% A macro to draw a ring accent.
+% |draw_breve(1)|, top at z1, angles |accent_angle|, with total drop of
+% |accent_ysize|.
+% \begin{macrocode}
+def draw_ring(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$rab = x$; y$rab = y$ - accent_ysize;
+ y$raml = y$ramr = 1/2[y$,y$rab];
+ x$ramr - x$ = x$ - x$raml = 1/2accent_ysize;
+ draw z$..z$ramr..z$rab..z$raml..cycle;
+ pickup oldpen;
+ labels($,$ramr,$rab,$raml);
+enddef; % end of draw_ring
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_dota}
+% A macro to draw a dot accent.
+% |draw_dota(1)|, top at z1, angles |accent_angle|,
+% and diameter 1/2|accent_ysize|..
+% \begin{macrocode}
+def draw_dota(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup stylus;
+ numeric dotalpha; dotalpha := 1/2accent_ysize;
+ x$dab = x$; y$dab = y$ - dotalpha;
+ y$daml = y$damr = 1/2[y$,y$dab];
+ x$damr - x$ = x$ - x$daml = 1/2dotalpha;
+ draw_pdot($,12/16accent_ysize);
+ pickup oldpen;
+ labels($,$damr,$dab,$daml);
+enddef; % end of draw_dota
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_dieresis}
+% A macro to draw a dieresis (double dot) accent.
+% |draw_ddota(1)|, top at z1, angles |accent_angle|,
+% and diameter 1/2|accent_ysize|..
+% \begin{macrocode}
+def draw_dieresis(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup stylus;
+ numeric ddotalpha; ddotalpha := 1/2accent_ysize;
+ x$ddab = x$; y$ddab = y$ - ddotalpha; z$ddam = 1/2[z$,z$ddab];
+ y$'damr = y$''daml = y$ddam; x$''daml - x$ = x$ - x$'damr = 1/2accent_ysize;
+ y$drl=y$drr=y$ddam; x$drl = x$-10/16accent_ysize; x$drr=x$+10/16accent_ysize;
+ draw_pdot($drl,12/16accent_ysize); draw_pdot($drr,12/16accent_ysize);
+ pickup oldpen;
+ labels($,$ddam,$ddab);
+enddef; % end of draw_dieresis
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_lumlaut}
+% A macro to draw a long (Hungarian) umlaut accent.
+% |draw_lumlaut(1)|, top at z1, angles |accent_angle|,
+% and depth |accent_ysize|..
+% \begin{macrocode}
+def draw_lumlaut(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$luab = x$; y$luab = y$ - accent_ysize; z$luam = 1/2[z$,z$luab];
+ y$lualt = y$luart = y$; y$lualb = y$luarb = y$luab;
+ x$luarm - x$luam = x$luam - x$lualm = 1/2accent_ysize;
+ x$luart - x$luarb = accent_ysize*(cosd(70)) = x$lualt - x$lualb;
+ z$lualm = 1/2[z$lualt,z$lualb]; z$luarm = 1/2[z$luart,z$luarb];
+ draw z$lualt--z$lualb; draw z$luart--z$luarb;
+ pickup oldpen;
+ labels($,$luam,$luab,$lualt,$lualb,$luart,$luarb);
+enddef; % end of draw_lumlaut
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_tildea}
+% A macro to draw a tilde accent.
+% |draw_tildea(1)|, center at z1, angles |accent_angle|,
+% and length |accent_ysize|..
+% \begin{macrocode}
+def draw_tildea(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ y$tal=y$=y$tar;
+ x$tar - x$ = x$ - x$tal = 12/16accent_ysize;
+ draw z$tal{dir accent_angle}..z$..{dir accent_angle}z$tar;
+ pickup oldpen;
+ labels($,$tal,$tar);
+enddef; % end of draw_tildea
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_macron}
+% A macro to draw a macron (bar) accent.
+% |draw_macron(1)|, center at z1, angles |accent_angle|,
+% and length |accent_ysize|..
+% \begin{macrocode}
+def draw_macron(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ y$mal=y$=y$mar;
+ x$mar - x$ = x$ - x$mal = 1/2accent_ysize;
+ draw z$mal--z$mar;
+ pickup oldpen;
+ labels($,$mal,$mar);
+enddef; % end of draw_macron
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_cedilla}
+% A macro to draw a cedilla.
+% |draw_cedilla(1)|, top at z1, angles |accent_angle|,
+% and length |accent_ysize|..
+% \begin{macrocode}
+def draw_cedilla(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$cedc=x$; y$cedc= y$-accent_ysize;
+ x$ceda=x$; y$ceda=4/16[y$,y$cedc];
+ x$cedb=x$+8/16accent_ysize; y$cedb=1/2[y$ceda,y$cedc];
+ x$cedd=x$cedc-2/16accent_ysize; y$cedd=y$cedc-1/16accent_ysize;
+ draw z$--z$ceda; draw z$ceda..z$cedb..z$cedc..z$cedd;
+ pickup oldpen;
+ labels($,$ceda,$cedb,$cedc,$cedd);
+enddef; % end of draw_cedilla
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_ogonek}
+% A macro to draw an ogonek.
+% |draw_ogonek(1)|, top at z1, angles |accent_angle|,
+% and length |accent_ysize|..
+% \begin{macrocode}
+def draw_ogonek(suffix $)=
+ pen oldpen; oldpen:=currentpen; pickup accentpen;
+ x$ogc=x$; y$ogc= y$-accent_ysize;
+ x$oga=x$; y$oga=2/16[y$,y$ogc];
+ x$ogb=x$-8/16accent_ysize; y$ogb=1/2[y$oga,y$ogc];
+ x$ogd=x$ogc+4/16accent_ysize; y$ogd=y$ogc+2/16accent_ysize;
+ draw z$..z$ogb..z$ogc..z$ogd;
+ pickup oldpen;
+ labels($,$oga,$ogb,$ogc,$ogd);
+enddef; % end of draw_ogonek
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_leftguill}
+% A macro to draw a left guillemot.
+% |draw_leftquill(1, gh, gw)|, bottom at z1, height and width |gh| and |gw|.
+% \begin{macrocode}
+def draw_leftguill(suffix $)(expr gh, gw)=
+ x$lgqt=x$; y$lgqt= y$+gh;
+ x$lgqm=x$-gw; y$lgqm=1/2[y$,y$lgqt];
+ draw z$--z$lgqm--z$lgqt;
+ labels($,$lgqm,$lgqt);
+enddef; % end of draw_leftguill
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_rightguill}
+% A macro to draw a right guillemot.
+% |draw_rightguill(1, gh, gw)|, bottom at z1, height and width |gh| and |gw|.
+% \begin{macrocode}
+def draw_rightguill(suffix $)(expr gh, gw)=
+ x$rgqt=x$; y$rgqt= y$+gh;
+ x$rgqm=x$+gw; y$rgqm=1/2[y$,y$rgqt];
+ draw z$--z$rgqm--z$rgqt;
+ labels($,$rgqm,$rgqt);
+enddef; % end of draw_rightguill
+
+% \end{macrocode}
+% \end{routine}
+%
+% \subsection{Routines for alphabetic characters}
+%
+% The next set of routines are for drawing characters.
+%
+% \begin{routine}{draw_a}
+% Draw the `a' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_a(suffix $,$$)=
+ lft x1=x$+2jut; rt x2=x$$;
+ top y1=y$$; bot y2=y$;
+% for the bowl
+ z3=3/4[z2,z1];
+ x5=lft x3; y5=bot y3;
+ z13=1/2[z2,z1];
+ x15=lft x13; y15=bot y13;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_istem(1,2,srad); % the stem
+ pickup thickstylus; % for the bowl
+ lft x4=x$; bot y4=y$;
+ z14=0.2[z4,z5];
+ draw z14{pdir}...{z5-z4}z15; % bowl bottom
+ draw z5--z4; % bowl top
+ labels(1,2,3,4,5,13,14,15);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_a}
+% Draw the `a' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_a_save(suffix $,$$)=
+ lft x1=x$; rt x2=x$$;
+ top y1=y$$; bot y2=y$;
+% for the bowl
+ z3=3/4[z2,z1];
+ x5=lft x3; y5=bot y3;
+ z13=1/2[z2,z1];
+ x15=lft x13; y15=bot y13;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_istem(1,2,srad); % the stem
+ pickup thickstylus; % for the bowl
+ lft x4=pcshiftx; bot y4=0;
+ z14=0.2[z4,z5];
+ draw z14{pdir}...{z5-z4}z15; % bowl bottom
+ draw z5--z4; % bowl top
+ labels(1,2,3,4,5,13,14,15);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_at}
+% Draw the commercial at character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_at(suffix $,$$)=
+ lft x1=2/3[x$,x$$]; rt x2=x$$;
+ top y1=y$$; bot y2=y$;
+% for the bowl
+ z3=3/4[z2,z1];
+ x5=lft x3; y5=bot y3;
+ z13=1/2[z2,z1];
+ x15=lft x13; y15=bot y13;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tstem(3,2,srad); % the stem
+ pickup thickstylus; % for the bowl
+ lft x4=1/3[x$,x$$]; bot y4=y$;
+ z14=0.2[z4,z5];
+ draw z14{pdir}...{z5-z4}z15; % bowl bottom
+ draw z5--z4; % bowl top
+%% the loop
+ pickup quill;
+ lft x201=x$; y201=1/2[y$,y$$];
+ x203=1/2[x4,x2]; y203=y$-1/2desc_depth;
+ draw z3..{down}z201..{right}z203;
+ labels(1,2,3,4,5,13,14,15,201,202,203);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_aesc}
+% Draw the aesc character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_aesc(suffix $,$$)=
+ lft x1=1/3[x$,x$$]; rt x2=2/3[x$,x$$];
+ top y1=y$$; bot y2=y$;
+% for the bowl
+ z3=3/4[z2,z1];
+ x5=lft x3; y5=bot y3;
+ z13=1/2[z2,z1];
+ x15=lft x13; y15=bot y13;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_istem(1,2,srad); % the stem
+ pickup thickstylus; % for the bowl
+ lft x4=x$; bot y4=y$;
+ z14=0.2[z4,z5];
+ draw z14{pdir}...{z5-z4}z15; % bowl bottom
+ draw z5--z4; % bowl top
+%% the e
+ pickup quill;
+ lft x101=x13; rt x103=x$$; x102=x104=1/2[x101,x103];
+ top y102=y$$; bot y104=y$;
+%% y101=y103=1/2[y$,y$$];
+ y101=y103=y13;
+ x105=x106=x103;
+ y105=0.1[y$,y$$];
+ top y106=0.95[y$,y$$]; y106'=top y106; y106''=bot y106; x106''=lft x106;
+% the serif
+ pickup stylus;
+ rt x116=x$$; top y116=y106';
+ x117=x106; y117=y116-jut;
+ lft x118=x106''; bot y118=y106'';
+ pickup quill;
+% the bar
+ x107=x101; y107=y101;
+ x108=x$$; y108=y107;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z106..z102..z101..z2a; % the bowl
+ pickup stylus;
+ filldraw z117..z118--z116--cycle; % the serif
+ draw_fork(101,108,jut); % the bar
+ labels(1,2,3,4,5,13,14,15,101,102,103,104,105,106,107);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_b}
+% Draw a `b' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_b(suffix $,$$)=
+ lft x1=lft x2=x$;
+ top y1=y$$; bot y2=y$;
+% lower bowl
+ rt x4=x$$; y4=1/3[y$,y$$];
+ lft x5=rt x1+2thin; y5=2/3[y$,y$$];
+ z6=z1;
+ rt x7=0.67[x1,x4]; y7=y6;
+ x9=rt x7-thin; y9=h-thin;
+ x8=lft x5+thin; y8=bot y5+thin;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif(1,2,srad); % the stem
+ draw z2{right}..z4{up}..{left}z5; % bottom bowl
+ draw z6--z7; % top bowl
+ pickup stylus;
+ draw z9--z8;
+ penlabels(1,2,3,4,5,6,7,8,9,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_c}
+% Draw a `c' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_c(suffix $,$$)=
+ lft x1=x$; rt x3=x$$; x2=x4=1/2[x1,x3];
+ top y2=y$$; bot y4=y$; y1=y3=1/2[y$,y$$];
+ x5=x6=x3;
+ y5=0.1[y$,y$$];
+ top y6=0.95[y$,y$$]; y6'=top y6; y6''=bot y6; x6''=lft x6;
+% the serif
+ pickup stylus;
+ rt x16=x$$; top y16=y6';
+ x17=x6; y17=y16-jut;
+ lft x18=x6''; bot y18=y6'';
+ pickup quill;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z5{-pdir}..{left}z4..z1..z2..z6;
+ pickup stylus;
+ filldraw z17..z18--z16--cycle;
+ penlabels(1,2,3,4,5,6,16,17,18,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_d}
+% Draw a `d' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_d(suffix $,$$)=
+ lft x1=x$; rt x3=x$$;
+ bot y4=y$; top y5=y$$;
+ x2=x4=1/2[x1,x3]; top y2=3/4[y$,y$$];
+ y1=y3=0.5[y4,y2];
+ x5=x1;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z2{-pdir}..z1{down}..z4{right}..z3{up}..z5;
+ penlabels(0,1,2,3,4,5,6,7,8,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_dyet}
+% Draw a `dyet' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_dyet(suffix $,$$)=
+ lft x1=x$; rt x3=x$$;
+ bot y4=y$; top y5=y$$;
+ x2=x4=1/2[x1,x3]; top y2=3/4[y$,y$$];
+ y1=y3=0.5[y4,y2];
+ x5=x1;
+ path p[];
+ p1=z2{-pdir}..z1{down}..z4{right}..z3{up}..z5;
+ if ductus:
+ pickup stylus;
+ fi
+ draw p1;
+% the bar
+ x11=1/2[x5,x2]; y11=1/2[y2,y5];
+ x12=x11; y12-y666 = y666-y11;
+ draw z11--z12;
+ penlabels(0,1,2,3,4,5,6,7,8,10,11,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_e}
+% Draw an `e' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_e(suffix $,$$)=
+ lft x1=x$; rt x3=x$$; x2=x4=1/2[x1,x3];
+ top y2=y$$; bot y4=y$; y1=y3=1/2[y$,y$$];
+ x5=x6=x3;
+ y5=0.1[y$,y$$];
+ top y6=0.95[y$,y$$]; y6'=top y6; y6''=bot y6; x6''=lft x6;
+% the serif
+ pickup stylus;
+ rt x16=x$$; top y16=y6';
+ x17=x6; y17=y16-jut;
+ lft x18=x6''; bot y18=y6'';
+ pickup quill;
+% the bar
+ x7=x1; y7=y1;
+ x8=x$$; y8=y7;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z5{-pdir}..{left}z4..z1..z2..z6; % the bowl
+ pickup stylus;
+ filldraw z17..z18--z16--cycle; % the serif
+ draw_fork(7,8,jut); % the bar
+ ductus:=false;
+ penlabels(1,2,3,4,5,6,7,8,9,10,16,17,18,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_ethel}
+% Draw an `ethel' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_ethel(suffix $,$$)=
+ lft x1=1/2[x$,x$$]; rt x3=x$$; x2=x4=1/2[x1,x3];
+ top y2=y$$; bot y4=y$; y1=y3=1/2[y$,y$$];
+ x5=x6=x3;
+ y5=0.1[y$,y$$];
+ top y6=0.95[y$,y$$]; y6'=top y6; y6''=bot y6; x6''=lft x6;
+% the serif
+ pickup stylus;
+ rt x16=x$$; top y16=y6';
+ x17=x6; y17=y16-jut;
+ lft x18=x6''; bot y18=y6'';
+ pickup quill;
+% the bar
+ x7=x1; y7=y1;
+ x8=x$$; y8=y7;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z5{-pdir}..{left}z4..z1..z2..z6; % the bowl
+ pickup stylus;
+ filldraw z17..z18--z16--cycle; % the serif
+ draw_fork(7,8,jut); % the bar
+%% the O
+ pickup quill;
+ lft x101=x$; rt x103= x1; y101=1/2[y$,y$$]; y103=y1;
+ x102 = x104 = 1/2[x101,x103]; y102=y$$; y104=y$;
+ draw z101..z102..z103..z104..cycle;
+ ductus:=false;
+ penlabels(1,2,3,4,5,6,7,8,9,10,16,17,18,101,102,103,104);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_f}
+% Draw an `f' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% and |$$$| is lower left of the descender box.
+% \begin{macrocode}
+def draw_f(suffix $,$$,$$$)=
+% stem
+ lft x$Ft=lft x$Fb= x$; % 1 = Ft, 2 = Fb
+ top y$Ft=y$$; bot y$Fb=y$$$;
+% bars
+ x$Ftl=x$Fml=x$Ft; y$Ftl=y$Ft; bot y$Fml=y$; % 3 = Ftl, 4 = Fml
+ rt x$Ftr= rt x$Fmr=x$$; y$Ftr=y$Ftl; y$Fmr=y$Fml; % 5 = Ftr, 6 = Fmr
+% triangles
+ x$Ftrt=x$Fmrt=rt x$Ftr-1/2thin; % 15 = Ftrt, 16 = Fmrt
+ y$Ftrt=y$Ftr; y$Fmrt=y$Fmr;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif($Ft,$Fb,srad); % stem
+ draw_tail($Fb,jut);
+ draw z$Ftl--z$Ftr; % top bar
+ draw_rtriangle($Ftrt,jut);
+ draw z$Fml--z$Fmr; % bottom bar
+ draw_rtriangle($Fmrt,jut);
+ penlabels(1,2,3,4,5,6,15,16,100,$Ft,$Fb,$Ftl,$Fml,$Ftr,$Fmr,$Ftrt,$Fmrt);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_g}
+% Draw a `g' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% and |$$$| is lower left of the descender box.
+% \begin{macrocode}
+def draw_g(suffix $,$$,$$$)=
+% the bowl
+ lft x1=x$; rt x3=x$$; y1=y3=1/2[y$,y$$];
+ x2=x4=1/2[x$,x$$]; top y2=y$$; bot y4=y$;
+ x5=x6=x3;
+ y5=0.1[y$,y$$];
+ top y6=0.95[y$,y$$]; y6'=top y6; y6''=bot y6; x6''=lft x6;
+% the serif
+ pickup stylus;
+ rt x16=x$$; top y16=y6';
+ x17=x6; y17=y16-jut;
+ lft x18=x6''; bot y18=y6'';
+ pickup quill;
+% the stem
+ x7=rt x5-1/2thin; y7=top y5-1/2thin;
+ pickup stylus;
+ lft x8=1/2[x$,x$$]; bot y8=y$$$;
+ pickup quill;
+ pair vec[]; vec1:=z7-z8; vec2:=z8-z7;
+ y21=y8+3/2thick; z21=whatever[z8,z7];
+ y22=y8+ thick; z22=whatever[z8,z7];
+ x23=x8-thick; y23=y8;
+ x24=x23+1/2thick; y24=y23+1/2thick;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z5{-pdir}..{left}z4..z1..z2..z6; % the bowl
+ pickup stylus;
+ filldraw z17..z18--z16--cycle; % the serif
+ draw z7--z22; % the stem
+ filldraw z22{vec2}..{left}z23--z24{right}..{vec1}z21--cycle;
+ penlabels(1,2,3,4,5,6,7,8,16,17,18,21,22,23,24,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_h}
+% Draw an `h' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_h(suffix $,$$)=
+ lft x1=lft x2=x$;
+ top y1=y$$; bot y2=y$;
+% bowl
+ rt x5=x$$; y5=3/8[y$,y$$];
+ lft x6=2/3[x$,x$$]; bot y6=y$;
+ x4=0.5[x1,x5]; top y4=3/4[y$,y$$];
+ x4'=0.5[x4,x1]; y4'=y4;
+ z4''=z4' shifted (-w*pdir);
+ z3'=whatever[z4',z4'']=whatever[z1,z2];
+ x3=rt x3'; y3=y3';
+ if ductus:
+ pickup stylus;
+ fi
+ draw_istem(1,2,srad); % stem
+ draw z3{pdir}..z4{right}..z5{down}..z6; % bowl
+ penlabels(1,2,3,4,5,6,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_i}
+% Draw an `i' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_i(suffix $,$$)=
+ lft x$It=lft x$Ib=x$; % 1 = $It, 2 = $Ib
+ top y$It=y$$; bot y$Ib=y$;
+ draw_tlserif($It,$Ib,srad);
+ draw_tail($Ib,jut);
+ penlabels(1,2,$It,$Ib,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_j}
+% Draw a `j' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_j(suffix $,$$)=
+ lft x$Jt=lft x$Jb=x$; % 1 = Jt, 2 = Jb
+ top y$Jt=y$$; bot y$Jb=y$;
+ draw_tlserif($Jt,$Jb,srad);
+ draw_tail($Jb,jut);
+ penlabels($Jt,$Jb);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_k}
+% Draw a `k' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_k(suffix $,$$)=
+ lft x1=lft x2=x$; top y1=y$$; bot y2=y$;
+% for the flick
+ numeric rise,fall,fjut;
+ x3=rt x1; y3=5/8[y$,y$$];
+ rise:=1/6[y$,y$$]; fall:=-rise/2; fjut:=1/2[x$,x$$];
+% for the leg
+ z4=z3;
+ x5=x$$; y5=y$;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif(1,2,srad); % stem
+ draw_tail(2,jut);
+ draw_flick(3,rise,fall,fjut); % upper diag
+ draw_tstem(4,5,srad); % lower diag
+ penlabels(1,2,3,4,5,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_l}
+% Draw an `l' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_l(suffix $,$$)=
+ lft x$Lt=lft x$Lb= x$; % 1 = Lt, 2 = Lb
+ top y$Lt=y$$; bot y$Lb=y$;
+ z$Lbl=z$Lb; % 3 = Lbl
+ x$Lbr=x$$; y$Lbr=y$; % 4 = Lbr
+ draw_tlserif($Lt,$Lb,srad); % the stem
+ draw_fork($Lbl,$Lbr,jut); % the foot
+ penlabels($Lt,$Lb,$Lbl,$Lbr);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_pound}
+% Draw a pound (sterling) symbol.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_pound(suffix $,$$)=
+ lft x$pst=lft x$psb= x$;
+ top y$pst=y$$-thick; bot y$psb=y$;
+ z$psm=z$psb;
+ x$psr=x$$; y$psr=y$;
+ draw z$psb--z$pst; % the stem
+ draw_fork($psm,$psr,jut); % the foot
+% top arch
+ x$pstr=3/4[x$,x$$]; top y$pstr=y$$;
+ draw z$pstr..{down}z$pst;
+% bar
+ lft x$psbl= x$-jut; y$psbl = y$psbr = 2/3[y$psb,y$pst];
+ x$psbr - x$pst = (2x$pst - x$psbl);
+ draw z$psbl--z$psbr;
+ penlabels($pst,$psb,$psm,$psr,$pstr,$psbl,$psbr,1,2,3,4,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_m}
+% Draw an `m' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_m(suffix $,$$)=
+ lft x2= x$; y2=1/2[y$,y$$];
+ rt x8=x$$; y8=y2;
+ rt x1=1/4w; bot y1=0;
+ x4=1/2[x$,x$$]; y4=2/3[y$,y$$];
+ x3=0.5[x2,x4]; top y3=y$$;
+ x5=x4; y5=y1;
+ z6=z4;
+ x7=3/4[x$,x$$]; top y7=y$$;
+ lft x9=3/4[x$,x$$]; y9=y1;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z1..z2{up}..z3{right}..{down}z4; % left half
+ draw_tstem(4,5,srad); % middle stem
+ draw z6..z7{right}..z8{down}..{-pdir}z9; % right half
+ ductus:=false;
+ penlabels(1,2,3,4,5,6,7,8,9,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_n}
+% Draw an `n' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_n(suffix $,$$)=
+% left stem
+ lft x$nlt=x$; top y$nlt=y$$; %% nlt = 1
+ x$nlb=x$nlt; bot y$nlb=y$; %% nlb = 2
+% right stem
+ rt x$nrt=x$$; y$nrt=y$nlt; %% nrt = 4
+ x$nrb=x$nrt; bot y$nrb=y$; %% nrb = 3
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif($nlt,$nlb,srad); % left stem
+ draw_tail($nlb,jut);
+ draw_istem($nrt,$nrb,srad); % right stem
+ draw z$nlt--z$nrb; % diagonal
+ penlabels($nlt,$nlb,$nrt,$nrb);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_eng}
+% Draw an `eng' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_eng(suffix $,$$,$$$)=
+draw_n($,$$);
+x$nge=2/3[x$nlb,x$nrb]; y$nge = y$$$; x$ngf=1/3[x$nlb,x$nrb];
+y$ngf = 1/2[y$nrb,y$nge];
+draw z$nrb{down}..z$nge..z$ngf;
+%% undraw the bottom serif
+pickup stylus;
+lft x$nglt= lft x$nglb=x$$; rt x$ngrb=rt x$ngrt = x$$+jut;
+top y$nglt = top y$ngrt = y$$; bot y$nglb = bot y$ngrb = y$;
+path pu[];
+pu1 = z$nglt--z$nglb--z$ngrb--z$ngrt--cycle;
+unfilldraw pu1; unfilldraw pu1;
+penlabels($nge,$ngf,$nglt,$nglb,$lgrb,$ngrt);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_o}
+% Draw an `o' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_o(suffix $,$$)=
+ lft x1=x$; rt x3=x$$; y1=y3=1/2[y$,y$$];
+ x2=x4=1/2[x$,x$$]; top y2=y$$; bot y4=y$;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z1..z2..z3..z4..cycle;
+ penlabels(1,2,3,4,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_p}
+% Draw a `p' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% |$$$| is base of descender box.
+% \begin{macrocode}
+def draw_p(suffix $,$$,$$$)=
+% stem
+ lft x1=lft x2=x$; top y1=y$$; bot y2=y$$$;
+% bowl
+ z3=z1;
+ rt x5=x$$; y5=1/2[y$,y$$];
+ lft x7=rt x1; bot y7=y$;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif(1,2,srad); % stem
+ draw_tail(2,jut);
+ draw z3{pdir}..z5{down}..{-pdir}z7; % bowl
+ penlabels(1,2,3,4,5,6,7,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_q}
+% Draw a `q' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% |$$$| is base of descender box.
+% \begin{macrocode}
+def draw_q(suffix $,$$,$$$)=
+% right stem
+ rt x1=rt x2=x$$; top y1=y$$; bot y2=y$$$;
+% bowl
+ z3=z1;
+ lft x5=x$; y5=1/2[y$,y$$];
+ rt x7=lft x1; y7=0.1[y$,y$$];
+ if ductus:
+ pickup stylus;
+ fi
+ draw z1--z2; % right stem
+ draw_tail(2,jut);
+ draw z3{left}..z5{down}..{pdir}z7; % bowl
+ penlabels(1,2,3,4,5,6,7,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_pilcrow}
+% Draw a pilcrow character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% |$$$| is base of descender box.
+% \begin{macrocode}
+def draw_pilcrow(suffix $,$$,$$$)=
+% right stem
+ rt x1=rt x2=x$$; top y1=y$$; bot y2=y$$$;
+% bowl
+ x3=x1; y3=y1-thick;
+ lft x5=x$; y5=1/2[y$,y$$];
+ rt x7=lft x1; y7=0.1[y$,y$$];
+ lft x15=rt x5; y15=y5;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z1--z2; % right stem
+ draw_tail(2,jut);
+ draw z3{left}..z5{down}..{pdir}z7; % bowl
+ draw z3{left}..z15{down}..{pdir}z7; % bowl
+ penlabels(1,2,3,4,5,6,7,15,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_r}
+% Draw an `r' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_r(suffix $,$$)=
+% stem
+ lft x1=lft x2=x$; top y1=y$$; bot y2=y$;
+% bowl
+ lft x3=rt x1-thin; y3=y1;
+ rt x5=3/4[x$,x$$]; y5=3/4[y$,y$$];
+ lft x7=rt x1; bot y7=1/3[y$,y$$];
+% leg
+ z8=z7;
+ rt x9=x$$; bot y9=y$;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif(1,2,srad); % stem
+ draw_tail(2,jut);
+ draw z3{pdir}..z5{down}..{-pdir}z7; % bowl
+ draw z8{-ppdir}..{right}z9; % leg
+ penlabels(1,2,3,4,5,6,7,8,9,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_s}
+% Draw an `s' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_s(suffix $,$$)=
+ rt x$Sa=x$$; top y$Sa=y$$-thin; % a = 1
+ x$Sb=1/2[x$,x$$]; top y$Sb=y$$; % b = 2
+ lft x$Sc=x$; y$Sc=0.75[y$,y$$]; % c = 3
+ x$Sd=x$Sb; y$Sd=1/2[y$,y$$]; % d = 4
+ x$Se=x$Sa; y$Se=0.25[y$,y$$]; % e = 5
+ x$Sf=x$Sb; bot y$Sf=y$; % f = 6
+ x$Sg=x$Sc; bot y$Sg = y$+thin; % g = 7
+ path p[];
+ p1=z$Sa..z$Sb{left}..z$Sc{down}..z$Sd..z$Se{down}..z$Sf{left}..z$Sg;
+ pair vec[];
+ vec1= direction 0 of p1;
+ vec2= direction (length p1) of p1;
+ z$Saa=z$Sa shifted vec1; % aa = 11
+ z$Sgg=z$Sg shifted -vec2; % gg = 17
+ y$Sf'=top y$Sa; y$Sf''=bot y$Sa; x$Sf''=lft x$Sa;
+% the serif
+ pickup stylus;
+ rt x$Sfff=x$$; top y$Sfff=y$Sf'; % 26 = fff
+ x$Sggg=x$Sa; y$Sggg=y$Sfff-0.75jut; % 27 = ggg
+ lft x$Shhh=x$Sf''; bot y$Shhh=y$Sf''; % 28 = hhh
+ pickup quill;
+ if ductus:
+ pickup stylus;
+ fi
+ draw p1; % the curve
+ pickup stylus;
+ filldraw z$Sggg..z$Shhh--z$Sfff--cycle; % the serif
+ penlabels($Sa,$Sb,$Sc,$Sd,$Se,$Sf,$Sg,$Saa,$Sgg,$Sfff,$Sggg,$Shhh);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_eszett}
+% Draw an eszett.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_eszett(suffix $,$$,$$$)=
+ lft x1 = lft x2 = x$; bot y1 = y$$$; y2 = y$$-2thick;
+ top y3=y$$; rt x4 = rt x6 = x$$; x3 = 1/2[x2,x4];
+ lft x5 = lft x7 = x1+thick;
+ bot y7 = y$; y5 = 1/2[y7,y3];
+ y4 = 1/2[y5,y3]; y6 = 1/2[y7,y5];
+ if ductus:
+ pickup stylus;
+ fi
+ draw z1--z2{up}..z3{right}..z4{down}..{-pdir}z5;
+ draw z5{right}..z6{down}..{left}z7;
+ draw_tail(1,jut);
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_section}
+% Draw a section symbol.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_section(suffix $,$$,$$$)=
+ rt x1 = rt x11 = x666; top y1 = top y11 = y666;
+ lft x5 = lft x15 = x555; bot y5 = bot y15 = y$$$;
+ x12=x15; x4 = x1;
+ y3 = 1/2[y5,y1] + 1/2thick; y13 = y3-thick;
+ y2=1/2[y3,y1]; y4 = 1/2[y5,y3];
+ y12=1/2[y13,y11]; y14=1/2[y15,y13];
+ x2=x12+thick; x14=x4-thick;
+ x3=1/2[x2,x4]; x13 = 1/2[x12,x14];
+ if ductus:
+ pickup stylus;
+ fi
+ draw z1..z2..z3..z4..z5;
+ draw z11..z12..z13..z14..z15;
+ penlabels(1,2,3,4,5,11,12,13,14,15);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_t}
+% Draw a `t' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_t(suffix $,$$)=
+%% x1=x2=1/2[x$,x$$];
+%% top y1=y$$; bot y2=y$;
+%% lft x3=x$; rt x4=x$$; y3=y4=y1;
+%% x5=x$+0.5jut; y5=y$$-1/2thin;
+%% x6=x$$-1/2thin; y6=y5;
+%% if ductus:
+%% pickup stylus;
+%% fi
+%% draw_tstem(1,2,srad); % stem
+%% draw z3--z4; % top bar
+%% draw_triangle(5,jut); draw_rtriangle(6,jut);
+%% penlabels(1,2,3,4,5,100);
+ x184=x284=1/2[x$,x$$];
+ top y184=y$$; bot y284=y$;
+ lft x384=x$; rt x484=x$$; y384=y484=y184;
+ x584=x$+0.5jut; y584=y$$-1/2thin;
+ x684=x$$-1/2thin; y684=y584;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tstem(184,284,srad); % stem
+ draw z384--z484; % top bar
+ draw_triangle(584,jut); draw_rtriangle(684,jut);
+ penlabels(184,284,384,484,584,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_u}
+% Draw a `u' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_u(suffix $,$$)=
+% left half first
+ lft x6=x$+jut; top y6=y$$-2thin;
+ lft x7=x$; y7=1/2[y$,y$$];
+ x8=0.5[x6,x1]; bot y8=y$;
+% the stem
+ rt x1=x$$; top y1=y$$;
+ x2=x1; bot y2=y$;
+% construction points for the curved part
+ x5=0.5[x8,x1]; y5=y8;
+ z5'=z5 shifted (w*pdir);
+ path p[];
+ p1=z5--z5';
+ p2=z1--z2;
+ z9= p2 intersectionpoint p1;
+ pair vec[];
+ p3=z6..z7{down}..{right}z8;
+ vec3 = direction 0 of p3;
+ z16=z6 shifted vec3;
+ if ductus:
+ pickup stylus;
+ fi
+% draw the serifs, then the bowls
+ draw_serif(6,16,srad); % left half
+ draw z6a..z7{down}..z8{right}..{pdir}z9;
+ draw_istem(1,2,srad); % right stem
+ penlabels(1,2,3,4,5,6,7,8,9,11,16,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_v}
+% Draw a `v' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_v(suffix $,$$)=
+% right side of W
+ numeric midx; midx:= pcshiftx;
+ lft x1=x$; top y1=y$$;
+ x2=x1; y2=1/2[y$,y$$];
+ rt x4=x$$; y4=y2;
+ x3=0.5[x2,x4]; bot y3=y$;
+ x5=x4-thick; y5=y1;
+ if ductus:
+ pickup stylus;
+ fi
+% draw the serifs, then the bowls
+ draw_tlserif(1,2,srad);
+ draw z2{down}..z3{right}..z4{up}..z5;
+ penlabels(1,2,3,4,5,11,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_w}
+% Draw a `w' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_w(suffix $,$$)=
+% right side first
+ numeric midx; midx:= 1/2[x$,x$$]-jut;
+ lft x1=midx+jut; top y1=y$$;
+ x2=x1; y2=1/2[y$,y$$];
+ rt x4=x$$; y4=y2;
+ x3=0.5[x2,x4]; bot y3=y$;
+ x5=x4-thick; y5=y1;
+% left side
+ lft x6=x$+jut;
+ top y6=y$$-2thin;
+ lft x7=x$; y7=y2;
+ x8=0.5[x7,x1]; y8=y3;
+% construction points
+ x15=0.5[x8,x1]; y15=y8;
+ z15'=z15 shifted (w*pdir);
+ x2'=x2; y2'=y15;
+ path p[];
+ p1=z1--z2';
+ p2=z15--z15';
+ z9= p2 intersectionpoint p1;
+ pair vec[];
+ p3=z6..z7{down}..{right}z8;
+ vec3 = direction 0 of p3;
+ z16=z6 shifted vec3;
+ if ductus:
+ pickup stylus;
+ fi
+% draw the serifs, then the bowls
+ draw_tlserif(1,2,srad); % right half
+ draw z2{down}..z3{right}..z4{up}..z5;
+ draw_serif(6,16,srad); % left half
+ draw z6a..z7{down}..z8{right}..z9;
+ penlabels(1,2,3,4,5,6,7,8,9,11,16,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_x}
+% Draw an `x' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_x(suffix $,$$,$$$)=
+% thick diagonal
+ lft x1=x$+jut; rt x2=x$$-jut;
+ y1=y$$; y2=y$;
+% thin diagonal
+ lft x3=x$; bot y3=y$$$;
+ rt x5=x$$; top y5=y$$;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_istem(1,2,srad); % thick diagonal
+ draw z3..{pdir}z5; % thin diagonal
+ penlabels(1,2,3,4,5,6,7,8,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_y_base}
+% Draw a dotless `y' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_y_base(suffix $,$$,$$$)=
+% left stroke
+ lft x1=x$+jut; top y1=y$$;
+ rt x2=3/4[x$,x$$]; top y2=y$;
+% right stroke
+ pickup stylus;
+ rt x3=x$$; top y3=y$$;
+ lft x4=x$; bot y4=y$$$;
+ x5=x3-3thin; y5=y3;
+ x7=x2-3/2thin; y7=y2;
+ pickup quill;
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif(1,2,srad); % left stroke
+ pickup stylus;
+ filldraw z3..z2..z4 & z4..z7..z5--cycle; % right stroke
+ penlabels(1,2,3,4,5,6,7,8,9,10,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+% \begin{routine}{draw_y}
+% Draw a `y' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_y(suffix $,$$,$$$)=
+ draw_y_base($,$$,$$$);
+ x8=1/2[x$,x$$]; y8=y$$+jut;
+ draw_pdot(8,dot_size); % the dot
+ penlabels(8);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_z}
+% Draw a `z' character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% \begin{macrocode}
+def draw_z(suffix $,$$)=
+ % bottom stroke
+ lft x4=x$; bot y4=y$;
+ x6=x$$; y6=y$;
+% top stroke
+ x1=x4; top y1=y$$;
+ rt x3=6/7[x$,x$$]; y3=y1;
+ x11=x$+0.5jut; y11=y$$-thin/2;
+ if ductus:
+ pickup stylus;
+ fi
+ draw z1--z3; % top stroke
+ draw_triangle(11,jut);
+ draw_fork(4,6,jut);
+ draw z4--z3; % diagonal
+ penlabels(1,2,3,4,5,6,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+% \begin{routine}{draw_thorn}
+% Draw a thorn character.
+% |$| and |$$| are the lower left and upper right of the character's `box'.
+% |$$$| is base of descender box.
+% \begin{macrocode}
+def draw_thorn(suffix $,$$,$$$)=
+% stem
+ lft x1=lft x2=x$; top y1=y$$; bot y2=y$$$;
+% bowl
+ lft x7=rt x1; bot y7=y$;
+ x3=x1; y1-y3 = y7-y2;
+ rt x5=x$$; y5=1/2[y3,y7];
+ if ductus:
+ pickup stylus;
+ fi
+ draw_tlserif(1,2,srad); % stem
+ draw_tail(2,jut);
+ draw z3{pdir}..z5{down}..{-pdir}z7; % bowl
+ penlabels(1,2,3,4,5,6,7,100);
+enddef;
+
+% \end{macrocode}
+% \end{routine}
+%
+%
+%
+%
+% \subsection{Mode, setup and input files}
+%
+%
+% Set the mode and font setup.
+% \begin{macrocode}
+font_coding_scheme:="TeXB1";
+mode_setup;
+auncial_font_setup;
+
+% \end{macrocode}
+%
+%
+% We generate letters, together with some punctuation and
+% analphabetics.
+% \begin{macrocode}
+input auncllow; % characters below ASCII
+input aunclsci; % ASCII character set
+input aunclmid; % bottom of top half
+input auncltop; % top of top half
+
+% \end{macrocode}
+%
+% \subsection{Ligatures}
+%
+% The open and close double quotes, and the en- and em-dashes.
+% \begin{macrocode}
+%%ligtable "`": "`"=:oct"134";
+%%ligtable "'": "'"=:oct"042"; %% , "?" kern 2u#, "!" kern 2u#;
+%%ligtable "-": "-"=:oct"173";
+%%ligtable oct"173": "-"=:oct"174";
+ligtable "`": "`"=:oct"020"; %% open quotes
+ligtable "'": "'"=:oct"021"; %% close quotes
+%% , "?" kern 2u#, "!" kern 2u#;
+ligtable "-": "-"=:oct"025"; %% en-dash
+ligtable oct"025": "-"=:oct"026"; %% em-dash
+
+% \end{macrocode}
+%
+% Other ligatures are possible in the following slots..
+%
+% \begin{macrocode}
+%%ligtable oct"240": "t"=oct"223";
+%%ligtable "e": "t"=oct"247";
+%%ligtable "s": "t"=oct"263";
+%%ligtable "c": "t"=oct"265";
+%%ligtable =oct"223";
+%%ligtable =oct"225";
+
+% \end{macrocode}
+%
+% Finally, do the uppercase ligtable.
+%
+% \begin{macrocode}
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#;
+ k#:=-.5u#; kk#:=-1.5u#; kkk#:=-2u#; % three degrees of kerning
+%% ligtable "P": "T": "Y": "A" kern kk#;
+%% ligtable "F": "V": "W": "A" kern if serifs: kkk# else: kk#fi,
+%% "K": "X": "O" kern k#, "C" kern k#, "G" kern k#, "Q" kern k#;
+%% ligtable "O": "D": "X" kern k#, "W" kern k#, "A" kern k#,
+%% "V" kern k#, "Y" kern k#;
+%% ligtable "A": if serifs: "R": fi
+%% "C" kern k#, "O" kern k#, "G" kern k#, "U" kern k#, "Q" kern k#,
+%% "L": "T" kern kk#, "Y" kern kkk#, "V" kern kk#, "W" kern kkk#;
+%%ligtable "I": "I" kern -k#; % Richard III
+fi
+
+bye.
+
+%</mfd>
+% \end{macrocode}
+%
+%
+% \Finale
+%
+\endinput
+
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+
+