summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-08-14 00:13:22 +0000
committerKarl Berry <karl@freefriends.org>2008-08-14 00:13:22 +0000
commit0c24cadd71e215e7b621e5a0b324e596e4aad957 (patch)
tree1f620b21f7cc08ff8d067ee1ecfc4db43c6da873
parent0f6f2f72f8dfba6f81cd3ce8cf09975ea16c10b5 (diff)
new baskerville-ish font boisik (12aug08)
git-svn-id: svn://tug.org/texlive/trunk@10327 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/README39
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdfbin0 -> 333608 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex55
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/boisik.pdfbin0 -> 151534 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/boisik.tex54
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf87
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/table.pdfbin0 -> 427849 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/table.tex157
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskbase.mf976
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskex10.mf78
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskext.mf12
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bski10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskib10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf71
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskital.mf21
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf3875
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf1739
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf6900
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf88
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf102
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf258
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf130
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf213
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf65
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf33
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf103
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf57
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf130
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf122
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmath.mf26
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf17
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf82
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf82
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskr10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf70
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf70
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskroman.mf19
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf70
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf70
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksc.mf38
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf70
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf7565
-rw-r--r--Master/texmf-dist/tex/latex/boisik/boisik.sty13
-rw-r--r--Master/texmf-dist/tex/latex/boisik/il2bsk.fd15
-rw-r--r--Master/texmf-dist/tex/latex/boisik/il2bskf.fd10
-rw-r--r--Master/texmf-dist/tex/latex/boisik/omlbskm.fd8
-rw-r--r--Master/texmf-dist/tex/latex/boisik/omsbsksy.fd8
-rw-r--r--Master/texmf-dist/tex/latex/boisik/omxbskex.fd6
-rw-r--r--Master/texmf-dist/tex/latex/boisik/ot1bsk.fd11
-rw-r--r--Master/texmf-dist/tex/latex/boisik/ot1bskf.fd11
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rw-r--r--Master/tlpkg/tlpsrc/boisik.tlpsrc2
-rw-r--r--Master/tlpkg/tlpsrc/collection-fontsextra.tlpsrc1
63 files changed, 24568 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/fonts/boisik/README b/Master/texmf-dist/doc/fonts/boisik/README
new file mode 100644
index 00000000000..148d007916e
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/README
@@ -0,0 +1,39 @@
+Boisik
+============
+Font Boisik is a serifed font (inspired by Baskerville typeface) written in
+Metafont. It comprises roman and italic text fonts and math text fonts.
+
+Font is licensed under GPL version 2. Font is in development and its application
+is not recommended in instances, where stability of typesetting is important.
+The font is provided "as is" without warranty of any kind.
+
+For more info see homepage http://mitek.webpark.cz/boisik.
+
+Usage
+============
+LaTeX: \usepackage{boisik}
+TeX: use font directly, e.g. \font\rm bskr10
+
+Installation
+============
+1) put *.mf files to directory used by Metafont,
+ e.g. /usr/share/temxf/fonts/source/public/boisik,
+2) put LaTeX files (boisik.sty, *.fd) to directory used by LaTeX,
+ e.g. /usr/share/temxf/tex/latex/boisik,
+3) rebuild database if needed (e.g. texhash).
+
+Contact
+============
+Homepage: http://mitek.webpark.cz/boisik
+Email: mitek at email dot cz (add text `[BSK]' to subject)
+
+Basic fonts
+============
+Roman: bskr10, bskrb10
+Italic: bski10, bskib10
+Math: bskmi10, bsksy10, bskex10
+
+Examples
+============
+http://mitek.webpark.cz/boisik/boisik.pdf
+http://mitek.webpark.cz/boisik/boisik-idiot.pdf
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf
new file mode 100644
index 00000000000..f849e5cd844
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex
new file mode 100644
index 00000000000..9c39d4aed32
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex
@@ -0,0 +1,55 @@
+\input czech.sty
+\def\uv#1{\char254 #1\char255\relax}
+\footline{}
+\overfullrule 0pt
+\advance\vsize by 30pt
+\font\tit bskrc10 at 7pt
+\font\rm bskr10
+\font\it bski10
+\font\itb bskib10
+\font\bf bskrb10
+\font\cr bskrc10
+\font\crb bskrcb10
+\font\iu bskiu10
+\font\iub bskiub10
+\font\rl bskrl10
+\font\sc bsksc10
+\font\sl bskrsl10
+\long\def\text#1#2{\noindent\rlap{\hbox to \hsize{\hfill {\special{ps:.2 0 .8 setrgbcolor}\tit Boisik #2}}}\vrule width \hsize height -2.8pt depth 3.2pt\special{ps:0 0 0 setrgbcolor}\par
+Oho! zvolal, prohlížeje si krasopiseckou ukázku, kterou mu kníže podal, \uv{To je jako tištěný vzorec! a vzácný vzorec! Podívej se, Gaňo, to je talent!} Na silném velínovém papíře napsal kníže středověkým ruským písmem větu:
+
+\hfill{#1\uv{Bohabojný opat Pafnutij se vlastní rukou podepsal.}}\hfill\null
+
+\uv{Tohleto,} vysvětloval kníže s neobyčejným uspokojením a nadšením, \uv{je vlastní podpis opata Pafnutije podle kopie ze čtrnáctého století. Podepisovali se překrásně, všichni ti naši staří opati a metropolité, většinou s takovým vkusem, s takovou péčí! Nemáte snad náhodou Pogodinovo vydání, generále? Tadyhle jsem zas užil jiného písma; je to oválné veliké francouzské písmo z minulého století, některá písmena se dokonce psala jinak, je to písmo lidové, písmo veřejných písařů převzaté z jejich vzorců, měl jsem jeden; jistě uznáte, že má své přednosti. Podívejte se na to oválné d, a. Vložil jsem do ruských písmen francouzský charakter, což je velmi nesnadné, ale zdařilo se mi to. A tady máte jiné krásné, originální písmo. Tahle věta ,Píle zmůže vše`, to je ruské písmo písařské, přesněji vojenských písařů. Tak se píše úřední listina významné osobě, je to rovněž oválné a pěkné, silné písmo, je to napsáno tučně, ale s pozoruhodným vkusem. Krasopisec by si nedovolil takový rozmach, nebo lépe řečeno pokus o rozmach, tadyhle ty nedokončené ocásky, vidíte, ale vcelku, všimněte si, má to svůj styl a opravdu, jeví se v tom celá duše vojenského písaře; chtěla by se rozletět, nadání by se rádo uplatnilo, ale vojenský límec tu duši notně škrtí; kázeň se projevuje i~v~rukopise, to je báječné! Nedávno jsem žasl nad jedním takovým vzorkem, přišel jsem k němu náhodou a ještě k tomu víte kde? -- ve Švýcarech! No, a tohle je prosté, obyčejné, pravé anglické písmo; větší eleganci si už nemůžeme představit, to je prostě nádhera, perla, klenot; naprosto bezvadné; a zde máte variantu, tentokráte francouzskou; získal jsem ji od jednoho francouzského obchodního cestujícího; totéž anglické písmo, stínování je však o poznání výraznější, tlustší, a hle, světelná proporce je již porušena; také si všimněte, že i ovál je pozměněn, je poněkud okrouhlejší a ještě k tomu si tu troufáme na krasopisné ozdoby, a to je velmi nebezpečná věc! Ozdoby vyžadují neobyčejný vkus, ale jestliže se podaří, jestliže jsme vystihli proporci, pak je takové písmo nade všechny, můžeme se do něho až zamilovat.}
+
+\uv{Oho! do jakých jemností zabíháte!} smál se generál, \uv{příteli, vy nejste jenom krasopisec, ale hotový umělec, viď, Gaňo?}
+
+\uv{Podivuhodné!} řekl Gaňa \dots\par\vfill
+}
+\rm\text{\bf}{Roman}
+\rl\text{\bf}{Roman Light}
+\eject
+\cr\text{\crb}{Roman Condensed}
+\sc\text{\bf}{Small Caps}
+\eject
+\it\text{\itb}{Italic}
+\iu\text{\iub}{Italic Unslanted}
+\eject
+\sl\text{\bf}{Roman Slanted}
+
+\special{ps:.2 0 .8 setrgbcolor}
+\noindent\rlap{\hbox to \hsize{\vrule width 6cm height 5pt depth -3.6pt\hfill {\it F. M. Dostojevskij: \itb Idiot}\hfill\vrule width 6cm height 5pt depth -3.6pt}}\vrule width \hsize height -3.2pt depth 3.6pt
+\special{ps:0 0 0 setrgbcolor}\vfill
+
+\def\veta{Ozdoby vyžadují neobyčejný vkus, ale jestliže se podaří, jestliže jsme vystihli proporci, pak je takové písmo nade všechny, můžeme se do něho až zamilovat.\par}
+\rm\veta
+\cr\veta
+\rl\veta
+\bf\veta
+\crb\veta
+\sl\veta
+\sc\veta
+\it\veta
+\iu\veta
+\itb\veta
+\end
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik.pdf b/Master/texmf-dist/doc/fonts/boisik/boisik.pdf
new file mode 100644
index 00000000000..a6b861078b4
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/boisik.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik.tex b/Master/texmf-dist/doc/fonts/boisik/boisik.tex
new file mode 100644
index 00000000000..191f1d45fa6
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/boisik.tex
@@ -0,0 +1,54 @@
+\documentclass{article}
+\usepackage{color,graphicx}
+\pagestyle{empty}
+\pdfpkresolution 1200
+\pagecolor{black}
+\definecolor{modra}{rgb}{.372,.486,1}
+\definecolor{cervena}{rgb}{1,.219,.556}
+\font\logo bskrlogo10 at 30pt
+\font\bskt bskr10
+\font\bsk bskr10 at 8pt
+\font\bskbf bskrb10 at 8pt
+\font \bski bski10 at 8pt
+\font \bskmi bskmi10 at 8pt
+\font \bsksy bsksy10 at 8pt
+\font \bskex bskex10 at 8pt
+\font \bsksyb bsksy10 at 12pt
+\font\f bskmi10 at 30pt
+\pdfvorigin 1sp \pdfhorigin 1sp
+\pdfpagewidth 11cm \pdfpageheight 6cm
+\topmargin -.45in
+\oddsidemargin -.15in
+\def\para{\leavevmode\llap{\setbox0=\hbox{{\color{modra}\bsksyb\char123}\ }\ht0=0pt\dp0=0pt\lower.8ex\box0}}
+\def\Boisik{{\color{modra}Boisik}}
+\begin{document}
+\mbox{}\unitlength1pt
+\put(5,0){\color{modra}\logo Bo\kern-2pt\reflectbox{\char131}\kern-2.5pt\raisebox{-3pt}[0pt]{s}\kern-2.5pt\char131\kern-1ptk}
+\put(0,-10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt}
+\put(0,-6){\color{modra}\hbox to 10.7cm{\hfill \bskt MET\kern-.6exAF\kern-.2exONT TYP\kern-.2exEF\kern-.5exA\kern-.35exCE F\kern-.2exOR \TeX}}
+\color{white}
+\put(65,-40){\hbox to 8.2cm{\bsk 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}}
+\put(65,-50){\hbox to 8.2cm{\bskbf 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}}
+\put(65,-60){\hbox to 8.2cm{\bski 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}}
+\put(65,-70){\hbox to 8.2cm{\bsk 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}}
+\put(65,-80){\hbox to 8.2cm{\bskbf 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}}
+\put(65,-90){\hbox to 8.2cm{\bski 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}}
+\put(65,-100){\hbox to 8.2cm{\bsk 0 1 2 3 4 5 6 7 8 9 ( [ + - -- --- * / : ; = \char35\ \% \char141\ ] )}}
+\put(65,-112){\hbox to 8.2cm{\bsk fi \char130\ ff fl ffi ffl \char128\ \char129\ \char16\ \char17\ \char25\ \char26\ \char27\ \char28\ \char29\ \char30\ \char31\ \char36\ . , \char23\ \char22\ \char32\ \char21\ \char24\ \char18\ \char254\ \char255\ ` ' "}}
+\put(65,-122){\hbox to 8.2cm{\bsk \char0\ \char1\ \char2\ \char3\ \char4\ \char5\ \char6\ \char7\ \char8\ \char9\ \char10\ \char126\bskmi\ \char11\ \char12\ \char13\ \char14\ \char15\ \char16\ \char17\ \char18\ \char19\ \char20\ \char21\ \char22\ \char23\ \char25\ \char37\ \char27\ \char28\ \char29\ \char30\ \char 31\ \char32}}
+\put(65,-132){\hbox to 8.2cm{\bskmi \char96\ \char125\ \char64\ \char63\ \char92\ \char91\ \char93\ \char60\ \char62\ \char47\ \char94\ \char46\ \char40\ \char41\ \bsksy \char32\ \char33\ \char34\ \char35\ \char49\ \char50\ \char12\ \char97\ \color{modra}\bskex \char112\ \char84\ \char85}}
+\put(5,-80){\color{cervena}\font\bskex bskex10 at 30pt \bskex \put(0,0){\rotatebox{90}{\reflectbox{\char82}}}
+\put(0,-10){\bsksy \char35}\put(30,18){\bsksy \char34}\put(11,-13.5){\rotatebox{90}{\f\reflectbox{\char60}}}
+\color{modra}\put(5,7.5){\bskbf *}\put(9,8){\bskbf *}
+\put(23,10){\bskbf *}
+}
+\newpage\hsize 8.2cm\oddsidemargin 2.4cm\parindent 0pt
+\color{white}\bsk
+\para The `\Boisik\kern-.25ex' font is a Metafont typeface greatly inspired by Baskerville design. It is proposed as an alternative of Computer Modern fonts for mathematical typesetting: \Boisik{} will support all characters described in the book `\kern-.15ex{\bski Computer Modern Typefaces}' by D. E. Knuth. In addition, there is a character support for the Czech language. \hfill {\color{cervena}Á\,á\,Č\,č\,Ď\,ď\,\kern.2exÉ\,é\,Ě\,ě\,Í\,í\,Ň\,ň\,Ř\,ř\,Š\,š\,Ť\kern.1exť\,Ů\,ů\,Ú\,ú\,Ý\kern.1exý\,Ž\,ž}
+
+\para Current status of \Boisik{} is an alpha version: many features are missing, many don't work. I hope ({\bskbf not guarantee}) in the improvement in the future. Especially, next releases may extend symbols coverage to support following fonts: {\bski msam} and {\bski msbm} math fonts and text companion.\vskip 1mm
+
+\mbox{}\put(-63,10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt}
+\para Please, don't use \Boisik{} if you need excellent stability, precision, and quality of typesetting.
+
+\end{document}
diff --git a/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf b/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf
new file mode 100644
index 00000000000..169612b9371
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf
@@ -0,0 +1,87 @@
+% Boisik Logo Roman 10 point (contains logo_i)
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRLOGO"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+chars.logo_i:=oct"203";
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/doc/fonts/boisik/table.pdf b/Master/texmf-dist/doc/fonts/boisik/table.pdf
new file mode 100644
index 00000000000..83b91edacad
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/table.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/table.tex b/Master/texmf-dist/doc/fonts/boisik/table.tex
new file mode 100644
index 00000000000..2741c41db1b
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/table.tex
@@ -0,0 +1,157 @@
+\ifx\bskfont\undefined\def\bskfont{bskr10}\fi
+\font\bsk \bskfont\space at 3cm
+\font\bski bski10 at 3cm
+\font\mi bskmi10 at 3cm
+\font\mex bskex10 at 3cm
+\font\sy bsksy10 at 3cm
+\font\btit bskr10
+\overfullrule0pt
+\footline={\hss\btit\special{ps:.2 0 .8 setrgbcolor} Font `Boisik'\special{ps:0 0 0 setrgbcolor}\hss}
+\bsk \vsize 24cm \leavevmode\vskip -1.3in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+á&b&č&ď\cr
+e&f&g&h\cr
+i&j&k&ĺ\cr
+m&n&ö&p\cr
+q&ř&š&ť\cr
+ů&v&w&x\cr
+\i&ý&z&\j\cr
+}\vfill\break\leavevmode\vskip-1in%
+\halign{&\vrule width 0pt height 2.7cm depth 1cm\hbox to 4cm{\hfill # \hfill}\cr
+0&1&2&3\cr
+4&5&6&7\cr
+(&8&9&)\cr
+\char92&[&]&"\cr
+:&.&,&;\cr
+-&--&---&=\cr
+?&?`&!&!`\cr
+}
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+A&B&C&D\cr
+E&F&G&H\cr
+I&J&K&\char 32L\cr
+M&N&O&P\cr
+Q&R&S&T\cr
+U&V&\hss W\hss&X\cr
+&Y&Z\cr
+}
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+\#&@&\%&\char141\cr
+\char26&\char27&\char29&\char30\cr
+\$&\char25&\char28&\char 31\cr
+\char158&+&/&\char159\cr
+`&\&&*&'\cr
+fi&ff&fl&\char254\cr
+\char128&ffl&ffi&\char129\cr
+}\vfill
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+\char0&\char1&\char2&\char3\cr
+\char4&\char5&\char6&\char7\cr
+\char8&\char9&\char10&\cr
+\mi\char0&\mi\char1&\mi\char2&\mi\char3\cr
+\mi\char4&\mi\char5&\mi\char6&\mi\char7\cr
+\mi\char8&\mi\char9&\mi\char10&\cr
+}
+\break\leavevmode\vskip-1in\bski
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+A&B&C&D\cr
+E&F&G&H\cr
+I&J&K&L\cr
+M&N&O&P\cr
+Q&R&S&T\cr
+U&V&\hss W\hss&X\cr
+&Y&Z\cr
+}
+\break\leavevmode\vskip-1in%
+\halign{&\vrule width 0pt height 2.7cm depth 1cm\hbox to 4cm{\hfill # \hfill}\cr
+0&1&2&3\cr
+4&5&6&7\cr
+(&8&9&)\cr
+\char92&[&]&"\cr
+:&.&,&;\cr
+-&--&---&=\cr
+?&?`&!&!`\cr
+}
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+a&b&c&d\cr
+e&f&g&h\cr
+i&j&k&l\cr
+m&n&o&p\cr
+q&r&s&t\cr
+u&v&w&x\cr
+\i&y&z&\j\cr
+}
+\break\leavevmode\vskip-1in\mi
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+a&b&c&d\cr
+e&f&g&h\cr
+i&j&k&l\cr
+m&n&o&p\cr
+q&r&s&t\cr
+u&v&w&x\cr
+&y&z&\cr
+}
+\break\leavevmode\vskip-1in\bski
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+\#&@&\%&\char141\cr
+\char26&\char27&\char29&\char30\cr
+\$&\char25&\char28&\char 31\cr
+\char158&+&/&\char159\cr
+`&\&&*&'\cr
+fi&ff&fl&\char254\cr
+\char128&ffl&ffi&\char129\cr
+}\vfill
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+\mi\char11&\mi\char15&\mi\char19&\mi\char20\cr
+\mi\char23&\mi\char25\char153&\mi\char27\char155&\mi\char28\char156\cr
+\mi\char29\char157&\mi\char33&\mi\char34&\mi\char36\char164\cr
+\mi\char12\char140&\mi\char14&\mi\char18&\mi\char21\char149\cr
+\mi\char13\char141&\mi\char17\char145&\mi\char22\char150&\mi\char35\cr
+\mi\char26&\mi\char37&\mi\char38&\mi\char39\char167\cr
+\mi\char16\rlap{\char24}&\mi\char30\char158&\mi\char31&\mi\char32\char160\cr
+}
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+\mex\lower-1.5ex\hbox{\char'160}&\mex\lower-1.5ex\hbox{\char'110}&\mex\lower-1.5ex\hbox{\char'122}&\mex\lower-1.5ex\hbox{\char'120}\cr
+\mex\lower-1.5ex\hbox{\char'115}&\mex\lower-1.5ex\hbox{\char'117}&\mex\lower-1.5ex\hbox{\char'113}&\mex\lower-1.5ex\hbox{\char'121}\cr
+\mex\lower-1.5ex\hbox{\char'106}&\mex\lower-1.5ex\hbox{\char'123}&\mex\lower-1.5ex\hbox{\char'124}&\mex\lower-1.5ex\hbox{\char'125}\cr
+\mex\lower-1.5ex\hbox{\char'126}&\mex\lower-1.5ex\hbox{\char'127}&\mex\lower-1.5ex\hbox{\char'140}&\mex\hbox{\char'146}\cr
+\mex\lower-1.5ex\hbox{\char'020\char'021}&\mex\lower-1.5ex\hbox{\char'156\char'157}&\mex\lower-1.5ex\hbox{\char'150\char'151}&\mex\lower-1.5ex\hbox{\char'104\char'105}\cr
+}
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 2.9cm\hbox to 4cm{\hfill # \hfill}\cr
+\sy\char'032&\sy\char'036&\sy\char'166&\sy\char'157\cr
+\sy\char'070&\sy\char'071&\sy\char'072&\sy\char'073\cr
+\sy\char'061&\sy\char'062&\sy\char'063&\sy\char'162\cr
+\sy\char2&\sy\char3&\sy\char4&\sy\char5\cr
+\sy\char6&\sy\char7&\sy\char14&\sy\char'057\cr
+\sy\char'022&\sy\char'024&\sy\char'026&\sy\char'034\cr
+\sy\char'030&\sy\char'031&\sy\char'047&\sy\char'066\cr
+\sy\char'015&\sy\char'064&\sy\char'020&\sy\char'077\cr
+}
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+\sy\char'170&\sy\char'172&\sy\char'173&\sy\char'060\cr
+\sy\char'174&\sy\char'175&\sy\char'176&\sy\char'177\cr
+\sy\char'040&\sy\char'044&\sy\char'050&\sy\char'054\cr
+\sy\char'045&\sy\char'046&\sy\char'055&\sy\char'056\cr
+\sy\char'010&\sy\char'011&\sy\char'012&\sy\char'013\cr
+\sy\char'074&\sy\char'075&\sy\char'100&\sy\char'155\cr
+}
+\end
+\break\leavevmode\vskip-1in
+\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
+\sy A&\sy B&\sy C&\sy D\cr
+\sy E&\sy F&\sy G&\sy H\cr
+\sy I&\sy J&\sy K&\sy L\cr
+\sy M&\sy N&\sy O&\sy P\cr
+\sy Q&\sy R&\sy S&\sy T\cr
+\sy U&\sy V&\sy \hss W\hss&\sy X\cr
+&\sy Y&\sy Z\cr
+}
+\end
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
new file mode 100644
index 00000000000..436053a6431
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
@@ -0,0 +1,976 @@
+% The base file for Boisik font
+% Based on cmbase.mf
+
+bskbase:=1; % when |bskbase| is known, this file has been input
+
+let bskchar=\; % `|bskchar|' should precede each character
+let generate=input; % `|generate|' should follow the parameters
+
+autorounding:=0; smoothing:=0; % we do our own rounding
+def autorounded = interim autorounding:=2 enddef;
+
+newinternal slant,fudge,math_spread,superness,superpull,beak_darkness,ligs;
+boolean square_dots,hefty,serifs, medieval, monofig, bulbes,
+ monospace,variant_g,low_asterisk,math_fitting;
+
+boolean dark,dark.dark,skewed,skewed.skewed; % for fast option testing
+dark=skewed=false; dark.dark=skewed.skewed=true;
+
+def infill text t:= cullit; path _p; _p:=t; erase fill _p; draw _p;
+enddef;
+
+let bskboundary=relax;
+
+vardef Vround primary y = y_:=vround y;
+ if y_<min_Vround: min_Vround else: y_ fi enddef;
+newinternal y_,min_Vround;
+
+vardef diag_ratio(expr a,b,y,c) = % assuming that $a>\vert b/y\vert$,
+% compute the value $\alpha=(x\6{++}y)/y$ such that $ax+b\alpha=c$
+ numeric aa_,bb_,cc_; bb_=b/y; cc_=c/y; aa_=a*a-bb_*bb_;
+ (a*(cc_++sqrt aa_)-bb_*cc_)/aa_ enddef;
+
+def compute_spread(expr normal_spread,big_spread)=
+ spread#:=math_spread[normal_spread,big_spread];
+ spread:=2ceiling(spread#*hppp/2)+eps; enddef;
+
+def v_center(expr h_sharp) =
+ .5h_sharp+math_axis#, .5h_sharp-math_axis# enddef;
+
+def beginarithchar(expr c) = % ensure consistent dimensions for $+$, $-$, etc.
+ if monospace: beginchar(c,9.5u#,27/7u#+math_axis#,27/7u#-math_axis#);
+ else: beginchar(c,13u#,5.5u#+math_axis#,5.5u#-math_axis#); fi
+ italcorr math_axis#*slant-.5u#;
+ adjust_fit(0,0); enddef;
+
+boolean test, test.alt; test=false; test.alt=true;
+
+%%%%%%%%%%%Dots and commas
+def dot(suffix $):=
+ filldraw if square_dots: unitsquare shifted (.5,.5) scaled dot_size
+ else: fullcircle scaled dot_size shifted z$
+ fi;
+ labels($);
+enddef;
+
+def comma(suffix $)(expr dim, jut, depth):=
+ {{ save p, oblu; path p[]; oblu:=.6dim;
+ numeric jutting;
+ jutting=if jut=infinity: hair else: jut fi;
+ if square_dots:
+ else: penpos$'(dim,0); penpos$''(dim,90); z$'=z$''=z$;
+ z$'''=(x$'r+jutting,y$''l); z$~=.5[z$,z$'l]+depth*down;
+ p0:=z$'r{up}..z$''r{left}..{down}z$'l..{right}z$''l..cycle;
+ p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z$~;
+ filldraw z$~..z$'''..subpath (1.5,rundy(p0,3.5).zpet) of p0..
+ subpath(rundy(p1,(0,.4dim)),infinity) of p1&cycle;
+ labels($,$''',$~); penlabels($',$'');
+ fi
+ }}
+enddef;
+
+def ammoc(suffix $)(expr dim, jut, depth):=
+ {{ save p, oblu; path p[]; oblu:=.6dim;
+ numeric jutting;
+ jutting=if jut=infinity: hair else: jut fi;
+ if square_dots:
+ else: penpos$'(dim,180); penpos$''(dim,270); z$'=z$''=z$;
+ z$'''=(x$'r-jutting,y$''l); z$~=.5[z$,z$'l]+depth*up;
+ p0:=z$'r{down}..z$''r{right}..{up}z$'l..{left}z$''l..cycle;
+ p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z$~;
+ filldraw z$~..z$'''..subpath (1.5,rundy(p0,3.5).zpet) of p0..
+ subpath(rundy(p1,(0,.4dim)),infinity) of p1&cycle;
+ labels($,$''',$~); penlabels($',$'');
+ fi
+ }}
+enddef;
+
+def turn_comma(suffix $)(expr dim, jut, depth):=
+ {{ save p, oblu; path p[]; oblu:=.6dim;
+ numeric jutting;
+ jutting=if jut=infinity: hair else: jut fi;
+ if square_dots:
+ else: penpos$'(dim,0); penpos$''(dim,90); z$'=z$''=z$;
+ z$'''=(x$'r+jutting,y$''l); z$~=.5[z$,z$'l]+depth*down;
+ p0:=z$'r{up}..z$''r{left}..{down}z$'l..{right}z$''l..cycle;
+ p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z$~;
+ filldraw (z$~..z$'''..subpath (1.5,rundy(p0,3.5).zpet) of p0..
+ subpath(rundy(p1,0),infinity) of p1 &cycle)
+ reflectedabout((x$,0),(x$,h));
+ labels($,$''',$~); penlabels($',$'');
+ fi
+ }}
+enddef;
+
+%%%%%%%%%%%Serifs
+pair serif_bend, cap_serif_bend;
+
+def lowercase_points(suffix $,$$)(expr size)suffix modifier:=
+ pos$(stem,0); pos$$(stem,0); x$=x$$;
+ serif_bot($); drop_serif($$)(size).modifier;
+ penlabels($,$$);
+enddef;
+
+vardef lowercase_stem_draw(suffix $,$$):=
+ z$$r..{(x$a-x$r,-.25serif_drop)}z$$a&z$$a---obl($$b,$$a,$a)---z$a..z$b{left}..{right}z$c
+ ..z$+ser_boule*up..
+ z$d{right}..{left}z$e..{up}z$f
+enddef;
+
+vardef lowercase_stem_upper(suffix $,$$):=
+ (reverse (z$$r..{(x$a-x$r,-.25serif_drop)}z$$a&z$$a---obl($$b,$$a,$a)))
+enddef;
+
+vardef lowercase_lower_u_serif(suffix $)(expr jut):=
+ z$f{down}..{right}z$e..{left}z$d.. {z$b-z$f}.5[z$,z$l]+jut*down..z$l+jut*down--z$a
+enddef;
+
+vardef broken_stem_draw(suffix @,$,$$):=
+ z@--z$$r+.2u*left..{(x$a-x$r,-.25serif_drop)}z$$a&z$$a---z$$b
+ if known correct: if correct: +.75u*left.. else:-- fi else: +.75u*left.. fi
+ z$$b+u*down---z$a if known correct: if correct:.. else: -- fi else: .. fi
+ z$b{left}..z$c{right}..z$+ser_boule*up..{right}z$d..{left}z$e
+ if known correct: if correct:..{up} else: -- fi else: ..{up} fi z$f
+enddef;
+
+def lowercase_stem(suffix $,$$)(expr size)suffix modifier:=
+ lowercase_points($,$$,size).modifier;
+ filldraw lowercase_stem_draw($,$$)---z$$r&cycle;
+ enddef;
+
+def serif_bot(suffix $):=
+ z$a=z$l+stem*up; z$b=z$c+(o,0) rotated 30; z$c=z$l+jut*left;
+ z$d=z$r+jut*right; z$e=z$d+(-o,0) rotated -30; z$f=z$r+stem*up;
+ labels($a,$b,$c,$d,$e,$f);
+enddef;
+
+def drop_serif(suffix $)(expr size)suffix modifier=
+ z$a=z$l+size*left+if not test.modifier: .5\\fi serif_drop*down;
+ z$b=(x$l,y$a-.25serif_drop);
+ labels($a,$b);
+enddef;
+
+def serifs_tl(suffix $):=
+ z$a=z$+jut*left; z$b=z$+.5ser_height*down; z$c=z$a+.707serif_o*down;
+ labels($a,$b,$c)
+enddef;
+
+def serifs_tr(suffix $):=
+ z$a=z$+jut*right; z$b=z$+.5ser_height*down; z$c=z$a+.707serif_o*down;
+ labels($a,$b,$c)
+enddef;
+
+def serifs_bl(suffix $):=
+ z$a=z$+jut*left; z$b=z$+.72ser_height*up; z$c=z$a+.707serif_o*up;
+ labels($a,$b,$c)
+enddef;
+
+def serifs_br(suffix $):=
+ z$a=z$+jut*right; z$b=z$+.72ser_height*up; z$c=z$a+.707serif_o*up;
+ labels($a,$b,$c)
+enddef;
+
+def cap_serifs_tl(suffix $):=
+ z$a=z$+cap_jut*left; z$b=z$+.7ser_height*down; z$c=z$a+serif_o*down;
+ labels($a,$b,$c)
+enddef;
+
+def cap_serifs_tr(suffix $):=
+ z$a=z$+cap_jut*right; z$b=z$+.7ser_height*down; z$c=z$a+serif_o*down;
+ labels($a,$b,$c)
+enddef;
+
+def cap_serifs_bl(suffix $):=
+ z$a=z$+cap_jut*left; z$b=z$+ser_height*up; z$c=z$a+serif_o*up;
+ labels($a,$b,$c)
+enddef;
+
+def cap_serifs_bl_p(suffix $)(expr coe):=
+ z$a=z$+coe*cap_jut*left; z$b=z$+ser_height*up; z$c=z$a+serif_o*up;
+ labels($a,$b,$c)
+enddef;
+
+def cap_serifs_br(suffix $):=
+ z$a=z$+cap_jut*right; z$b=z$+ser_height*up; z$c=z$a+serif_o*up;
+ labels($a,$b,$c)
+enddef;
+
+def cap_serifs_br_p(suffix $)(expr coe):=
+ z$a=z$+coe*cap_jut*right; z$b=z$+ser_height*up; z$c=z$a+serif_o*up;
+ labels($a,$b,$c)
+enddef;
+
+vardef diag_serif(suffix $,$$):=
+ y$bb=y$b; z$bb=whatever[z$,z$$];
+ z$bb{z$-z$$}
+enddef;
+
+def ital_serif(suffix $,$$):=
+ if unknown x$'l: x$'l=.5u; fi
+ y$'r=y$-.75serif_drop;
+ pos$'(hair,60);
+ y$''=y$'r-1.5curve; z$''=whatever[z$l,z$$l];
+ penlabels($',$'');
+ path _is;
+ _is:=z$r---z$l+o*down..{dir200}z$'r..z$'l&z$'l{right}..{down}z$'';
+enddef;
+
+def ital_hook(suffix $,$$)suffix modifier:=
+ if not known x$$l: rt x$$l=w; fi
+ y$$=.4bar_height; bot y$'l=-o; x$'=.45[x$,x$$];
+ pos$$(hair,150); pos$'(.5[hair,stem],90); penlabels($$,$');
+ z$$'=z$$r+hair*up; labels($$');
+ path _ih;
+ _ih:=z$l{down}..z$'l..z$$l if test.modifier and (dpi<=300):-- else:..z$$'&z$$'..fi z$$r..z$'r..{up}z$r;
+enddef;
+
+def ital_kooh(suffix $,$$):=
+ if not known x$$r: x$$r=0; fi
+ y$$=H-.25bar_height; top y$'r=H+o; x$'=.45[x$,x$$];
+ pos$$(hair,150); pos$'(.5[hair,stem],100); penlabels($$,$');
+ z$$'=z$$l+hair*dir(-110); labels($$');
+ path _ik;
+ _ik:=z$r{up}..z$'r..z$$r{dir-120}..z$$'&z$$'..z$$l{dir60}..z$'l..{down}z$l;
+enddef;
+
+%%%%%%%%Arms
+vardef arm_bot_r_points(suffix $, $$)suffix modifier=
+ numeric thick; thick=if test.modifier: alt_cap_hair else: cap_hair fi - currentbreadth;
+ pos$$(beak,-90); z$$a=z$$r+2u*unitvector(z$-z$$r);
+ z$$b=z$$r+.1u*down+1/3u*left;
+ x$$c=.35[x$$b,x$$a]; y$$c=y$$;
+ z$$d=z$$a+ser_height*left+thick*up;
+ z$$e=z$+thick*up+cap_jut*right; z$$f=z$+.75ser_height*up;
+ if (x$$d<x$$e): x$$d:=x$$e fi;
+ z$$l.o=z$$l+serif_o*left+serif_o*down;
+ penlabels($$); labels($$a,$$b,$$c,$$d,$$e, $$f);
+ z$---z$$a...z$$b--z$$r---z$$l..{down}z$$l.o&z$$l.o..z$$c...z$$d---z$$e..{up}z$$f
+enddef;
+
+def arm_bot_r(suffix $, $$)suffix modifier=
+ filldraw arm_bot_r_points($, $$).modifier--cycle;
+enddef;
+
+vardef arm_bot_l_points(suffix $, $$)suffix modifier=
+ numeric thick; thick=if test.modifier: alt_cap_hair else: cap_hair fi - currentbreadth;
+ pos$$(beak,-90); z$$a=z$$r+2u*unitvector(z$-z$$r);
+ z$$b=z$$r+.1u*down+1/3u*right;
+ x$$c=.35[x$$b,x$$a]; y$$c=y$$;
+ z$$d=z$$a+ser_height*right+thick*up;
+ z$$e=z$+thick*up+cap_jut*left; z$$f=z$+.75ser_height*up;
+ if (x$$d>x$$e): x$$d:=x$$e fi;
+ z$$l.o=z$$l+serif_o*right+serif_o*down;
+ penlabels($$); labels($$a,$$b,$$c,$$d,$$e, $$f);
+ z$---z$$a...z$$b--z$$r---z$$l..{down}z$$l.o&z$$l.o..z$$c...z$$d---z$$e..{up}z$$f
+enddef;
+
+def arm_bot_l(suffix $, $$)suffix modifier=
+ filldraw arm_bot_l_points($, $$).modifier--cycle;
+enddef;
+
+vardef arm_top_r_points(suffix $, $$)suffix modifier=
+ numeric thick; thick=if test.modifier: alt_cap_hair else: cap_hair fi - currentbreadth;
+ pos$$(.65beak,90); z$$a=z$$r+2u*left;
+ z$$b=z$$r+1/3u*left; z$$c=z$$l+serif_o*left;
+ z$$d=z$$a+.75stem*left+thick*down;
+ z$$.$=z$+thick*down+cap_jut*right; z$$.$a=z$+.55ser_height*down;
+ penlabels($$); labels($$a,$$b,$$c,$$d,$$.$, $$.$a);
+ z$---z$$a{right}..{dir0}z$$b..z$$r+cap_hair*down---z$$l..z$$c{dir125}..z$$d---z$$.$..{down}z$$.$a
+enddef;
+
+def arm_top_r(suffix $, $$)suffix modifier=
+ filldraw arm_top_r_points($, $$).modifier--cycle;
+enddef;
+
+vardef arm_top_l_points(suffix $, $$)suffix modifier=
+ numeric thick; thick=if test.modifier: alt_cap_hair else: cap_hair fi - currentbreadth;
+ pos$$(.65beak,90); z$$a=z$$r+2u*right;
+ z$$b=z$$r+1/3u*right; z$$c=z$$l+serif_o*right;
+ z$$d=z$$a+.75stem*right+thick*down;
+ z$$e=z$+thick*down+cap_jut*left; z$$f=z$+.55ser_height*down;
+ penlabels($$); labels($$a,$$b,$$c,$$d,$$e, $$f);
+ z$---z$$a{left}..{left}z$$b..z$$r+cap_hair*down---z$$l..z$$c{dir55}..z$$d---z$$e..{down}z$$f
+enddef;
+
+def arm_top_l(suffix $, $$)suffix modifier=
+ filldraw arm_top_l_points($, $$).modifier--cycle;
+enddef;
+
+%%%%%%%Stroke endings
+vardef smitko(suffix $)(expr size):= %draw bulb j, J , 3
+ pos$(size,150); z$'=z$+.2size*up+o*right; z$''=z$+.5(size-currentbreadth)*dir-135;
+ labels($',$'');
+ z$''..z$'..z$l if bulbes:--.5[z$l,z$'']..{down}.5[z$l,z$'']fi
+enddef;
+
+vardef one_serif(suffix $):= % serif for numeral 1
+ rt z$a=(w-u,y$r); z$b=z$r+.75u*up; z$c=z$a+.5serif_o*up;
+ lft z$d=(u,y$l); z$e=z$l+.75u*up; z$f=z$d+.5serif_o*up;
+ labels($a,$b,$c,$d,$e,$f);
+ z$e..{left}z$f..z$d{right}..z$+ser_boule*up..{right}z$a..{left}z$c..z$b
+enddef;
+
+%%%%%%%Simple macros
+def bskpoints(suffix $,$$)(expr bjut, ejut):=
+ z$$ll=z$$l-bjut*unitvector(z$$-z$); z$rr=z$r-ejut*unitvector(z$-z$$);
+enddef;
+
+vardef bskrule(suffix $,$$)(expr bjut, ejut):=
+ bskpoints($,$$,bjut,ejut);
+ z$l---z$$ll..z$$r---z$rr..cycle
+enddef;
+
+%%%%%%%Macros for Unicode
+string charuni, empty; empty:="";
+numeric uniproc; uniproc:=0;
+
+def uni text t:=
+ charuni:=t;
+enddef;
+
+extra_beginchar:=extra_beginchar&"charuni:=empty; numeric oblu; oblu:=f_obl;";
+
+%%%%%%Rounding
+def obl(suffix $,$$,$$$)suffix modifier:= % rounded corners
+ if monospace and ((stem-hair)<.2hair):
+ z$
+ else:
+ z$+(oblu.modifier,0) rotated(angle(z$$-z$)) ... z$+(oblu.modifier,0) rotated(angle(z$$$-z$))
+ fi
+enddef;
+
+boolean smer, smer.zpet; smer:=true; smer.zpet:=false;
+vardef rundy(expr p, t)suffix modifier:= %rounded paths
+ numeric _rnd, _rndb, _oblu;
+ if monospace and ((stem-hair)<.2hair):
+ if numeric t: t else: xpart(t) fi
+ else:
+ _rnd:=if numeric t: t else: xpart(t) fi;
+ if _rnd=infinity: _rnd:=length(p); fi;
+ _rndb:=_rnd;
+ _oblu:=if numeric t: oblu else: ypart(t) fi;
+ forever:
+ _rnd:=_rnd if (smer.modifier): + else: - fi 0.01;
+ exitif length (point _rnd of p - point _rndb of p) >= _oblu;
+ exitif (_rnd>length(p)) or (_rnd<0);
+ endfor;
+ if (_rnd>length(p)) or (_rnd<0): _rndb else: _rnd fi
+ fi
+ enddef;
+
+vardef bsktouch(expr _pa,_dira,_pb,_dirb):=
+ ((_pa shifted (.5currentbreadth*_dira)) intersectionpoint (_pb shifted (.5currentbreadth*_dirb)))
+enddef;
+
+%%%%%%Symbols
+def zeroent(suffix $)(expr ll, rr):= % Numeral zero for percent sign
+ pos$a(ll,0); pos$b(vair,90); pos$c(rr,0); pos$d(vair,270);
+ x$a.l - x$c.r=-4.5u; x$b=x$d=.5[x$a,x$c];
+ y$d.r - y$b.l=if monospace: .75\\fi bar_height; y$c=y$a=.5[y$b,y$d];
+ filldraw z$a.l{down}..z$b.l..z$c.r..z$d.l..{down}cycle;
+ infill z$a.r{up}..z$d.r..z$c.l..z$b.r..{up}cycle;
+ penlabels($a,$b,$c,$d);
+enddef;
+
+vardef bskfrench(suffix $,$$):= %French quote
+ save p; save tim;
+ path p; numeric tim[];
+ pos$(hair,0); pos$'(hair,0); pos$$(curve,0);
+ .5[y$,y$']=y$$; x$=x$'; x$l-x$$r=stem;
+ p:=z$'r{dir110}..{dir120}z$$r{dir60}..{dir70}z$r;
+ tim1=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$r,y$$)) shifted (hair*down) ));
+ tim2=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$r,y$$)) shifted (hair*up) ));
+ filldraw z$l{dir-120}..{dir-140}z$$l{dir-50}..{dir-60}z$'l..
+ subpath(0,tim1) of p..subpath(tim2,infinity) of p..cycle;
+ penlabels($,$',$$);
+enddef;
+
+vardef bskfrenchr(suffix $,$$):= %Reversed french quote
+ save p; save tim;
+ path p; numeric tim[];
+ pos$(hair,0); pos$'(hair,0); pos$$(curve,0);
+ .5[y$,y$']=y$$; x$=x$'; x$r-x$$l=-stem;
+ p:=z$'l{dir70}..{dir60}z$$l{dir120}..{dir110}z$l;
+ tim1=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$l,y$$)) shifted (hair*down) ));
+ tim2=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$l,y$$)) shifted (hair*up) ));
+ filldraw z$r{dir-60}..{dir-40}z$$r{dir-130}..{dir-120}z$'r..
+ subpath(0,tim1) of p..subpath(tim2,infinity) of p..cycle;
+ penlabels($,$',$$);
+enddef;
+
+def less(suffix @,$,$$):=
+ numeric _theta;
+ pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@;
+ if (unknown y$) and (unknown y$$): y$r=h+.5rule_thickness; fi;
+ if (unknown x$r) and (unknown x$$r): x$r=w-x@l; fi;
+ _theta:=angle(z$r-z@r);
+ pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta+45);
+ z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta-90);
+ z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta+45);
+ z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
+ y@l'=y@l+o; z@l'=whatever[z@l,z$l];
+ bskpoints(@,$,hair,hair);
+ filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle;
+ penlabels(@,$,$$); labels(@',@'',@''',$ll,@l');
+enddef;
+
+def greater(suffix @,$,$$):=
+ numeric _theta;
+ pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@;
+ if (unknown y$) and (unknown y$$): y$l=h; fi;
+ if (unknown x$l) and (unknown x$$l): x$l=w-x@r; fi;
+ _theta:=angle(z$l-z@r);
+ pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta-45);
+ z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta+90);
+ z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta-45);
+ z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
+ y@r'=y@r+o; z@r'=whatever[z@r,z$r];
+ bskpoints($,@,hair,hair);
+ filldraw z@r..z@r'---z$rr..z$l---obl(@''',$l,$$r)---z$$r..z$$l---cycle;
+ penlabels(@,$,$$); labels(@',@'',@''',$rr,@r');
+enddef;
+
+def logor(suffix @,$,$$):= %Logical or shape
+ numeric _theta;
+ pos@(rule_thickness,90); y$=y$$; .5[x$l,x$$l]=x@;
+ if (unknown y$) and (unknown y$$): y$l=h; fi;
+ if unknown x$l: lft x$l=u; fi;
+ _theta:=angle(z$l-z@l);
+ pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta+45);
+ z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta-90);
+ z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta+45);
+ z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
+ x@l'=x@l-o; z@l'=whatever[z@l,z$l];
+ bskpoints(@,$,hair,hair);
+ filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle;
+ penlabels(@,$,$$); labels(@',@'',@''',$ll,@l');
+enddef;
+
+def logand(suffix @,$,$$):= %Logical and shape
+ numeric _theta;
+ pos@(rule_thickness,90); y$=y$$; .5[x$r,x$$r]=x@;
+ if (unknown y$) and (unknown y$$): y$r=-d; fi;
+ if unknown x$r: lft x$r=u; fi;
+ _theta:=angle(z$r-z@r);
+ pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta-45);
+ z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta+90);
+ z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta-45);
+ z@'''=whatever[z@',z$l]=whatever[z@'',z$$r];
+ x@r'=x@r-o; z@r'=whatever[z@r,z$r];
+ bskpoints(@,$,hair,hair);
+ filldraw z@r..z@r'---z$r...z$ll---obl(@''',$l,$$r)---z$$r..z$$l---cycle;
+ penlabels(@,$,$$); labels(@',@'',@''',$ll,@r');
+enddef;
+
+def circle_points(expr sirka):=
+ x4=x8=.5[x2,x6]; x1=x3=superness[x4,x2]; x5=x7=superness[x4,x6];
+ y2=y6=.5[y4,y8]; y1=y7=superness[y2,y8]; y3=y5=superness[y2,y4];
+ path _circle_path;
+ _circle_path:=z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
+ ...z5{z6-z4}...z6{up}...z7{z8-z6}...cycle;
+ pos2(sirka,180); pos4(sirka,90); pos6(sirka,0); pos8(sirka,270);
+ pos1(sirka,angle(direction 1 of _circle_path)+270);
+ pos3(sirka,angle(direction 3 of _circle_path)+270);
+ pos5(sirka,angle(direction 5 of _circle_path)-90);
+ pos7(sirka,angle(direction 7 of _circle_path)-90);
+ penlabels(1,2,3,4,5,6,7,8);
+enddef;
+
+def draw_circle suffix smer:=
+ z8.smer{right}...z1.smer{z2-z8}...z2.smer{down}...z3.smer{z4-z2}...z4.smer{left}...z5.smer{z6-z4}...z6.smer{up}...z7.smer{z8-z6}...cycle
+enddef;
+
+vardef vlnka(suffix $,$$):=
+ y$a.l=y$$; y$$a.r=y$; .5[x$,x$$]=.5[x$a,x$$a]=.5w;
+ if unknown x$ : lft x$ =u; fi;
+ top y$$- bot y$= spread;
+ if unknown y$$: top y$$=h; fi
+ x$$-x$$a=1/4(x$$-x$);
+ pos$(hair,0); pos$$(hair,0); pos$a(curve,290); pos$$a(curve,250);
+ z$$a.s=z$$a.r+curve*unitvector(z$$-z$);
+ filldraw z$r{z$a-z$}..z$a.r..z$$a.r..z$$a.s..{z$$-z$$a.r}z$$r..
+ z$$l{z$$a-z$$}..z$$a.l..z$a.l..{z$-z$a.l}z$l..cycle;
+ penlabels($,$a,$$,$$a); labels($$a.s);
+enddef;
+
+def sipka_points(suffix $,$$):=
+ numeric bskaw, bskat, bsktim[]; bskaw=abs(z$$l-z$$r)+currentbreadth;
+ pair bskadir; bskadir=unitvector(z$-z$$r); bskat=angle(bskadir);
+ path bskap[];
+ pos$a(bskaw,bskat+90); z$a.r=z$-bskadir*arrsize;
+ z$b=z$a.r+arrwidth*dir(bskat-90);
+ z$c=z$a.l+((1/3arrsize,0) rotated bskat);
+ z$d=z$a.r+((1/3arrsize,0) rotated bskat);
+ z$e=z$a.r+(arrwidth-.5currentbreadth)*dir(bskat+90);
+ bskap0:=z$b+(hair*up rotated bskat){dir(bskat+45)}..z$c;
+ bskap1:=z$d..{dir(bskat+135)}z$e+(hair*down rotated bskat);
+ bsktim0=xpart(bskap0 intersectiontimes ((z$a.l--z$) shifted (.35arrwidth*dir(bskat-90))));
+ bsktim1=xpart(bskap1 intersectiontimes ((z$a.r--z$) shifted (.35arrwidth*dir(bskat+90))));
+ penlabels($,$$,$a); labels($c,$b,$c,$d,$e);
+enddef;
+
+vardef sipka(suffix $,$$):=
+ sipka_points($,$$);
+ z$a.r{bskadir}..subpath(bsktim1,infinity) of bskap1&z$e+(hair*down rotated bskat){dir(bskat+135)}
+ ..z$e{dir(bskat-45)}..{dir(bskat-30)}z${dir(bskat-160)}..{dir(bskat-135)}z$b
+ ..{dir(bskat+45)}z$b+(hair*up rotated bskat)&subpath (0,bsktim0) of bskap0..{-bskadir}z$a.l
+enddef;
+
+vardef sipka_ext(suffix $,$$):=
+ numeric bskaw, bskat, bsktim[]; bskaw=abs(z$$l-z$$r)+currentbreadth;
+ pair bskadir; bskadir=unitvector(z$-z$$); bskat=angle(bskadir);
+ path bskap[];
+ pos$a(bskaw,bskat+90); z$a=z$-bskadir*arrsize;
+ z$b=z$a.r+arrwidth*dir(bskat-90);
+ z$c=z$a.l+((1/3arrsize,0) rotated bskat);
+ z$d=z$a.r+((1/3arrsize,0) rotated bskat);
+ z$e=z$a.r+(arrwidth-.5currentbreadth)*dir(bskat+90);
+ bskap0:=z$b+(hair*up rotated bskat){dir(bskat+45)}..z$c;
+ bskap1:=z$d..{dir(bskat+135)}z$e+(hair*down rotated bskat);
+ bsktim0=xpart(bskap0 intersectiontimes ((z$a.l--z$) shifted (.35arrwidth*dir(bskat-90))));
+ bsktim1=xpart(bskap1 intersectiontimes ((z$a.r--z$) shifted (.35arrwidth*dir(bskat+90))));
+ penlabels($,$$,$a); labels($c,$b,$c,$d,$e);
+ z$a.r{bskadir}..subpath(bsktim1,infinity) of bskap1&z$e+(hair*down rotated bskat){dir(bskat+135)}
+ ..z$e{dir(bskat-45)}..{dir(bskat-30)}z${dir(bskat-160)}..{dir(bskat-135)}z$b
+ ..{dir(bskat+45)}z$b+(hair*up rotated bskat)&subpath (0,bsktim0) of bskap0..{-bskadir}z$a.l
+enddef;
+
+def dvojsipka_points(suffix $,$$,@,@@):=
+ bsktim100=xpart(bskap0 intersectiontimes (z@@--z@@+(z$-z$$r)));
+ bsktim101=xpart(bskap1 intersectiontimes (z@--z@+(z$-z$$r)));
+ z$p=point bsktim100 of bskap0; z$p.r-z$p.l=z$$r-z$$l; .5[z$p.r,z$p.l]=z$p;
+ z$q=point bsktim101 of bskap1; z$q.r-z$q.l=z$$r-z$$l; .5[z$q.r,z$q.l]=z$q;
+ z@r-z@l=z$$r-z$$l; .5[z@.r,z@.l]=z@; z@@r-z@@l=z$$r-z$$l; .5[z@@.r,z@@.l]=z@@;
+ bskap3=z@l+(z$-z$$r)--z@l; bskap4=z@r--z@r+(z$-z$$r);
+ (bsktim11,bsktim12)=bskap1 intersectiontimes bskap3;
+ (bsktim13,bsktim14)=bskap1 intersectiontimes bskap4;
+ bskap5=z@@l+(z$-z$$r)--z@@l; bskap6=z@@r--z@@r+(z$-z$$r);
+ (bsktim15,bsktim16)=bskap0 intersectiontimes bskap5;
+ (bsktim17,bsktim18)=bskap0 intersectiontimes bskap6;
+penlabels($p,$q);
+enddef;
+
+vardef dvojsipka(suffix $,$$,@,@@):=
+ sipka_points($,$$);
+ dvojsipka_points($,$$,@,@@);
+ oblu:=f_obl;
+ penlabels(@,@@);
+ subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1..
+ subpath(rundy(bskap3,bsktim12),infinity) of bskap3..
+ subpath(0,rundy(bskap4,bsktim14).zpet) of bskap4..
+ subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z$e+(hair*down rotated bskat){dir(bskat+135)}..z$e{dir(bskat-45)}..
+ {dir(bskat-30)}z${dir(bskat-160)}..{dir(bskat-135)}z$b..
+ {dir(bskat+45)}z$b+(hair*up rotated bskat)&
+ subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0..
+ subpath(rundy(bskap5,bsktim16),infinity) of bskap5..
+ subpath(0,rundy(bskap6,bsktim18).zpet) of bskap6..
+ subpath(rundy(bskap0,bsktim17),infinity) of bskap0
+enddef;
+
+%%%%%%%%%%Accents
+boolean capital, capital.capital; capital:=false; capital.capital:=true;
+
+def grave(suffix $,$$)suffix modifier:=
+ pos$(stem,10); pos$$(hair,0);
+ x$$-x$=.25w;
+ if unknown y$ : top y$=h; fi
+ if unknown y$$: y$$=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$] fi; fi
+ bskpoints($,$$,hair,hair);
+ filldraw z$$r---z$rr..z$---z$l--z$$l--cycle;
+ penlabels($,$$);labels($rr,$$rr);
+enddef;
+
+def d_grave(suffix $,$$,@,@@)(expr mid)suffix modifier:=
+ y$=y@; y$$=y@@;
+ .5[.5[x$,x$$],.5[x@,x@@]]=mid; x$$-x$=x@@-x@;
+ pos$(stem,10); pos$$(hair,0); pos@(stem,10); pos@@(hair,0);
+ x$$-x$=2u;
+ if unknown y$ : top y$=h; fi
+ if unknown y$$: y$$=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$] fi; fi
+ bskpoints($,$$,hair,hair); bskpoints(@,@@,hair,hair);
+ filldraw z$$r---z$rr..z$---z$l--z$$l--cycle;
+ filldraw z@@r---z@rr..z@---z@l--z@@l--cycle;
+ penlabels($,$$,@,@@);labels($rr,$$rr,@rr,@@rr);
+enddef;
+
+def acute(suffix $,$$)suffix modifier:=
+ pos$(stem,-10); pos$$(hair,0);
+ if (unknown x$) or (unknown x$$): x$-x$$=.25w; fi
+ if unknown y$ : top y$=h; fi
+ if unknown y$$: y$$=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$] fi; fi
+ bskpoints($,$$,hair,hair);
+ filldraw z$$r---z$rr..z$---z$l{z$$-z$l}..{z$$l-z$}z$$l--cycle;
+ penlabels($,$$);labels($rr,$$rr);
+enddef;
+
+vardef acute_slope(suffix $,$$)(expr slope)suffix modifier:=
+ save w; w:=4slope;
+ acute($,$$).modifier;
+enddef;
+
+def hacek(suffix $,$$,$$$)suffix modifier:=
+ {{ save oblu; oblu:=f_obl;
+ y$=y$$$; .55[x$,x$$$]=x$$;
+ if unknown y$ : top y$=h; fi
+ if unknown y$$l: top y$$l=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$]
+ fi; fi
+ pos$(hair,10); pos$$$(hair,0); pos$$(stem,90); pos$$'(stem,0);
+ if unknown x$: x$$$-x$=5.5u; fi;
+ z$$'=z$$+.25tiny*left;
+ filldraw z$$$l---obl($$r,$$$l,$r)---z$r..z$---z$$'l..if not capital.modifier: z$$l.. fi z$$'r---z$$$r--cycle;
+ penlabels($,$$,$$',$$$);
+ }}
+enddef;
+
+def circumflex(suffix $,$$,$$$)suffix modifier:=
+ {{ save oblu; oblu:=f_obl;
+ y$=y$$$; .55[x$,x$$$]=x$$;
+ if unknown y$$l: top y$$l=h; fi
+ if unknown y$l : top y$l=if capital.modifier: cap_height + .75u else: 1/2[x_height,top y$$]
+ fi; fi
+ pos$(hair,-10); pos$$$(hair,0); pos$$(.2[stem,hair],270); pos$$'(stem,0);
+ if unknown x$: x$$$-x$=6u; fi;
+ z$$'=z$$+.25tiny*left;
+ filldraw z$$$l---obl($$r,$$$l,$r)---z$r..z$---z$$'l..z$$l..z$$'r---z$$$r--cycle;
+ penlabels($,$$,$$',$$$);
+ }}
+enddef;
+
+def breve(suffix $,$$,$$$)suffix modifier:=
+ y$=y$$$; .55[x$,x$$$]=x$$;
+ if unknown y$ : top y$=h; fi
+ if unknown y$$l: bot bot y$$l=if capital.modifier: cap_height else: 1/3[x_height, top y$];
+ fi; fi
+ pos$(hair,10); pos$$$(hair,0); pos$$(.75[hair,stem],90);
+ if unknown x$$$ or unknown x$: x$$$-x$=w-2u; fi;
+ y$$$r:=y$$$r-.5tiny;
+ filldraw z$l{down}..z$$l..{up}z$$$r--z$$$l{down}..z$$r..{up}z$r--cycle;
+ penlabels($,$$,$$$);
+enddef;
+
+def tieacc(suffix $,$$,$$$)suffix modifier:=
+ y$=y$$$; .55[x$,x$$$]=x$$;
+ if unknown y$$r : top y$$l=h; fi
+ if unknown y$: bot y$=if capital.modifier: cap_height else: 1/3[x_height, top y$$];
+ fi; fi
+ pos$(hair,-10); pos$$$(hair,0); pos$$(.75[hair,stem],270);
+ if unknown x$$$ or unknown x$: x$$$-x$=w-2u; fi;
+ y$$$r:=y$$$r-.5tiny;
+ filldraw z$l{up}..z$$l..{down}z$$$r--z$$$l{up}..z$$r..{down}z$r--cycle;
+ penlabels($,$$,$$$);
+enddef;
+
+def macron(suffix $,$$):=
+ y$=y$$;
+ if unknown y$: top y$=h; fi
+ if unknown x$$: x$$-x$=5u; fi
+ if (unknown x$) or (unknown x$$): .5[x$,x$$]=.5w; fi
+ pos$(hair,90); pos$$(hair,90);
+ filldraw bskrule($$,$,hair,hair);
+ penlabels($,$$);
+enddef;
+
+def ring(suffix $,$$)suffix modifier:=
+ numeric ring_stroke; ring_stroke:=2/3[tiny,hair];
+ .5[z$$a,z$$c]=.5[z$$b,z$$d]=z$;
+ x$$b=x$$d; y$$a=y$$c; y$$d-y$$b=(x$$c-x$$a); x$$a.l=x$$;
+ if unknown x$$: lft x$$=1.5u; fi
+ if unknown y$ : y$=if capital.modifier: .5[h,cap_height] else: .5[1/4[x_height,h],h]
+ fi; fi
+ pos$$a(ring_stroke,0); pos$$b(ring_stroke,90);
+ pos$$c(ring_stroke,180); pos$$d(ring_stroke,270);
+ filldraw z$$a.l{down}..z$$b.l..z$$c.l..z$$d.l..cycle;
+ infill z$$a.r{down}..z$$b.r..z$$c.r..z$$d.r..cycle;
+ penlabels($$a,$$b,$$c,$$d); labels($);
+enddef;
+
+vardef dotabove(suffix $):=
+ save dot_size; dot_size:=stem;
+ if unknown y$: top y$=h; fi
+ y$:=y$-.5dot_size;
+ dot($);
+enddef;
+
+def umlaut(suffix $,$$):=
+ y$=y$$;
+ if unknown x$ : lft x$ =u +.5dot_size; fi
+ if unknown x$$: lft x$$=w-u-.5dot_size; fi
+ dotabove($); dotabove($$);
+enddef;
+
+def h_umlaut(suffix $,$$,@,@@)(expr slope)suffix modifier:=
+ y$=y$$; y@=y@@;
+ if unknown x$: lft x$=u+slope; fi
+ if unknown x$$: rt x$$=w-u; fi
+ acute_slope($,@,slope).modifier; acute_slope($$,@@,slope).modifier;
+enddef;
+
+vardef tilde(suffix $,$$)suffix modifier:=
+ save tstem; tstem:=if capital.modifier: .7\\fi stem;
+ y$a.l=y$$; y$$a.r=y$; .5[x$,x$$]=.5[x$a,x$$a]=if known x.tilde: x.tilde else: .5w fi;
+ if unknown x$ : x$ =u; fi;
+ if unknown y$$: top y$$=h; fi
+ if unknown y$ : bot y$=if capital.modifier: cap_height else:1/3[x_height,top y$$]
+ fi; fi
+ x$$-x$$a=1/4(x$$-x$);
+ pos$(hair,0); pos$$(hair,0); pos$a(tstem,270); pos$$a(tstem,270);
+ filldraw z$r{z$a-z$}..z$a.r..z$$a.r..{z$$-z$$a}z$$r..
+ z$$l{z$$a-z$$}..z$$a.l..z$a.l..{z$-z$a}z$l..cycle;
+ penlabels($,$a,$$,$$a);
+enddef;
+
+def pol_cross(suffix $,$$):=
+ x$$-x$=4u; y$$-y$=stem;
+ if unknown y$: .5[y$,y$$]=.8[bar_height,x_height]; fi
+ pos$(bar,angle(z$$-z$)+90); pos$$(bar,angle(z$$-z$)+90);
+ filldraw bskrule($,$$,bar,bar);
+ penlabels($,$$);
+enddef;
+
+%%%%%%Font making macros (some from cmbase)
+newinternal l,r,shrink_fit; % adjustments to spacing
+
+def charscription(expr width, height, depth)(text t):=
+ def _saved_char := t; enddef;
+ _saved_w:=width; _saved_h:=height; _saved_d:=depth;
+ let bskcharscriptcmd=relax;
+enddef;
+
+def multiply(expr x)(text t) =
+ forsuffixes xx=t:
+ multiply_:= xx; save xx; xx:=multiply_/x;
+ endfor;
+enddef;
+
+def usechar text t=
+{{
+ save t_, WW, HH, DD;
+ WW:=w; HH:=h; DD:=d;
+ if not monospace:
+ save w,h,d; numeric w,h,d;
+ w=_saved_w; h=_saved_h; d=_saved_d;
+ else:
+ save h,d; numeric h,d;
+ h=_saved_h; d=_saved_d;
+ fi;
+ def t_ = transformed currenttransform t enddef;
+ _saved_char;
+}};
+enddef;
+
+def restore_pars = w:=WW; h:=HH; d:=DD; enddef;
+
+def do_expansion(expr expansion_factor) =
+ forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr:
+ $:=$.#*expansion_factor*hppp; endfor
+enddef;
+
+def normal_adjust_fit(expr left_adjustment,right_adjustment) =
+ numeric charwd_in; charwd_in=charwd;
+ l:=-hround(left_adjustment*hppp)-letter_fit;
+ interim xoffset:=-l;
+ charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment;
+ r:=l+hround(charwd*hppp)-shrink_fit;
+ w:=r-hround(right_adjustment*hppp)-letter_fit;
+ do_expansion(w/(charwd_in*hppp));
+ enddef;
+
+def mono_adjust_fit(expr left_adjustment,right_adjustment) =
+ numeric charwd_in; charwd_in=charwd;
+ numeric expansion_factor;
+ mono_charwd#=2letter_fit#
+ +expansion_factor*(charwd+left_adjustment+right_adjustment);
+ l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit;
+ interim xoffset:=-l;
+ r:=l+mono_charwd-shrink_fit;
+ w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit;
+ charwd:=mono_charwd#; charic:=mono_charic#;
+ do_expansion(w/(charwd_in*hppp));
+ enddef;
+
+extra_endchar:=extra_endchar&"r:=r+shrink_fit;w:=r-l;";
+
+def ignore_math_fit(expr left_adjustment,right_adjustment) = enddef;
+def do_math_fit(expr left_adjustment,right_adjustment) =
+ l:=l-hround(left_adjustment*hppp); interim xoffset:=-l;
+ charwd:=charwd+left_adjustment+right_adjustment;
+ r:=l+hround(charwd*hppp)-shrink_fit;
+ charic:=charic-right_adjustment;
+ if charic<0: charic:=0; fi enddef;
+def zero_width = charwd:=0; r:=l-shrink_fit enddef;
+def change_width = if not monospace: % change width by $\pm1$
+ if r+shrink_fit-l=floor(charwd*hppp): w:=w+1; r:=r+1;
+ else: w:=w-1; r:=r-1; fi fi enddef;
+def center_on(expr x) = if not monospace: % change width for symmetric fit
+ r:=r+2x-w; w:=2x; fi enddef;
+def padded expr del_sharp =
+ charht:=charht+del_sharp; chardp:=chardp+del_sharp enddef;
+
+def font_setup =
+ if monospace: let adjust_fit=mono_adjust_fit;
+ def mfudged=fudged enddef;
+ mono_charic#:=body_height#*slant;
+ if mono_charic#<0: mono_charic#:=0; fi
+ mono_charwd#:=9.5u#; define_whole_pixels(mono_charwd);
+ else: let adjust_fit=normal_adjust_fit;
+ def mfudged= enddef; fi
+ if math_fitting: let math_fit=do_math_fit
+ else: let math_fit=ignore_math_fit fi;
+ def medfig := if medieval: x_height# else: fig_height# fi enddef;
+ def medfigd := if medieval: desc_depth# else: 0 fi enddef;
+ def medfigu := if medieval: x_height else: fig_height fi enddef;
+ def medfigdu := if medieval: desc_depth else: 0 fi enddef;
+ def figw(text x) := if monofig: 9u# else: x# fi enddef;
+ def figwu(text x) := if monofig: 9u else: x fi enddef;
+ if unknown Acc_height#: Acc_height#:=cap_height#+.3x_height#; fi
+ define_pixels(u,width_adj,serif_fit,cap_serif_fit,jut,cap_jut,beak,
+ bar_height,punct_fit);
+ define_whole_pixels(letter_fit,tiny,ser_boule);
+ define_whole_vertical_pixels(body_height,asc_height,drop_stem,
+ cap_height,fig_height,com_height,x_height,Acc_height,comma_depth,desc_depth,serif_drop);
+ define_whole_blacker_pixels(hair,like_hair,stem,like_stem,curve,like_curve,
+ dot_size,cap_hair,like_cap_hair,alt_cap_hair,cap_stem,like_cap_stem,cap_curve,like_cap_curve);
+ define_whole_vertical_blacker_pixels(vair,bar,cap_bar);
+ define_corrected_pixels(o,apex_o);
+ forsuffixes $=hair,stem,cap_stem:
+ fudged$.#:=fudge*$.#; fudged$:=hround(fudged$.#*hppp+blacker);
+ forever: exitif fudged$>.9fudge*$; fudged$:=fudged$+1; endfor endfor
+ rule_thickness:=ceiling(rule_thickness#*hppp);
+ heavy_rule_thickness:=ceiling(3rule_thickness#*hppp);
+ oo:=vround(.5o#*hppp*o_correction)+eps;
+ apex_oo:=vround(.5apex_o#*hppp*o_correction)+eps;
+ lowres_fix(stem,curve) 1.3;
+ lowres_fix(stem,curve) 1.2;
+ lowres_fix(cap_stem,cap_curve) 1.2;
+ lowres_fix(hair,cap_hair,alt_cap_hair) 1.2;
+ lowres_fix(cap_bar,bar) 1.2;
+ ess:=(ess#/stem#)*stem; cap_ess:=(cap_ess#/cap_stem#)*cap_stem;
+ dw:=(curve#-stem#)*hppp; bold:=curve#*hppp+blacker;
+ serif_bend:=.25o*down;
+ dh#:=.6designsize; define_whole_vertical_pixels(dh);
+ more_super:=max(superness,sqrt .77superness);
+ hein_super:=max(superness,sqrt .81225258superness); % that's $2^{-.3}$
+ clear_pen_memory;
+ if tiny=0: tiny:=1; fi
+%%% fine $ %%%% temporary formatting convention for MFT
+ if tiny>fudged.hair: tiny:=fudged.hair; fi
+ tiny.breadth:=tiny;
+ pickup if tiny=0: nullpen else: pencircle scaled tiny; tiny:=tiny-eps fi;
+ tiny.nib:=savepen; breadth_[tiny.nib]:=tiny;
+ forsuffixes $$=lft,rt,top,bot: shiftdef(tiny.$$,$$ 0); endfor
+%%% @ $ %%%% restore ordinary formatting for $
+ min_Vround:=tiny.breadth;
+ if min_Vround<vround min_Vround: min_Vround:=vround min_Vround; fi
+ forsuffixes $=vair,bar,cap_bar,bold:
+ if $<min_Vround: $:=min_Vround; fi endfor
+ pickup pencircle scaled rule_thickness; rule.nib:=savepen;
+ math_axis:=good.y(math_axis#*hppp);
+ currenttransform:=identity slanted slant
+ yscaled aspect_ratio scaled granularity;
+ if currenttransform=identity: let t_=relax
+ else: def t_ = transformed currenttransform enddef fi;
+ numeric paren_depth#; .5[body_height#,-paren_depth#]=math_axis#;
+ define_whole_vertical_pixels(paren_depth);
+ numeric asc_depth#; .5[asc_height#,-asc_depth#]=math_axis#;
+ body_depth:=desc_depth+body_height-asc_height;
+ shrink_fit:=1+hround(2letter_fit#*hppp)-2letter_fit;
+ if not string mode: if mode<=smoke: shrink_fit:=0; fi fi
+ numeric ser_height, serif_o, dig_stem, ddot, n_str_hair;
+ ser_height:=1.5stem;
+ serif_o:=.5cap_hair;
+ dig_stem := if medieval: stem else: .5[stem,cap_stem] fi;
+ ddot=.5(dot_size-stem);
+ n_str_hair=1.3hair;
+ if not known f_obl#: numeric f_obl#, f_obl; f_obl#:=10/36pt#; define_pixels(f_obl); fi
+ if drop_stem = 1: drop_stem:=0; fi
+ if ser_boule = 1: ser_boule:=0; fi
+ boolean bold_face; bold_face:= if (stem/u > 4/3): true else: false fi;
+ if known bsk_outline#: %Don't work correctly at small resolutions
+ define_whole_pixels(bsk_outline);
+ numeric bskoutsize; bskoutsize:= tiny-bsk_outline; if bskoutsize<1: bskoutsize:=1; fi;
+ pickup pencircle scaled bskoutsize; bskoutlinepen.nib:=savepen;
+ breadth_[bskoutlinepen.nib]:=bskoutsize; forsuffixes $$=lft,rt,top,bot: shiftdef(bskoutlinepen.$$,$$ 0); endfor
+ def bsk_savepen:= pen bsk_pen; bsk_pen:=currentpen; enddef;
+ def bsk_restorepen:= currentpen:=bsk_pen; enddef;
+ let bskfilldraw = filldraw;
+ def infill text t:= bsk_savepen; path _bp; _bp:=t; cullit;
+ picture bskpict; bskpict:=currentpicture; currentpicture:=nullpicture;
+ draw _bp; cullit; fill _bp; cull currentpicture keeping (2,2);
+ pickup bskoutlinepen.nib; erase draw _bp;
+ bsk_restorepen;
+ currentpicture:=currentpicture+bskpict; bskpict:=nullpicture;
+ enddef;
+ def filldraw text t:= bsk_savepen; path _bp; _bp:=t; bskfilldraw _bp; cullit; pickup bskoutlinepen.nib; erase bskfilldraw _bp; cullit; bsk_restorepen; enddef;
+ fi;
+ if not known dpi: begingroup interim warningcheck:=0; numeric dpi; dpi:=pixels_per_inch; endgroup; fi;
+ enddef;
+
+vardef clockwise primary c =
+ if turningcheck>0:
+ interim autorounding:=0;
+ if turningnumber c > 0: reverse fi
+ fi
+ c enddef;
+
+def shiftdef(suffix $)(expr delta) =
+ vardef $ primary x = x+delta enddef enddef;
+
+def makebox(text rule) =
+ for y=0,asc_height,body_height,x_height,bar_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
+ rule((r,-body_depth),(r,body_height));
+ for x=u*(1+floor(l/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;
+def maketicks(text rule) =
+ for y=0,h.o_,-d.o_:
+ rule((l,y),(l+10,y)); rule((r-10,y),(r,y)); endfor % horizontals
+ for x=l,r:
+ rule((x,10-d.o_),(x,-d.o_)); rule((x,h.o_-10),(x,h.o_)); endfor % verticals
+ if charic<>0:
+ rule((r+charic*pt,h.o_-10),(r+charic*pt,h.o_)); fi % italic correction
+ enddef;
+rulepen:=pensquare;
+
+vardef penpos@#(expr b,d) =
+ if known b: if b<=0: errmessage "bad penpos"; fi fi
+ (x@#r-x@#l,y@#r-y@#l)=(b,0) rotated d;
+ x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef;
+
+newinternal currentbreadth;
+vardef pos@#(expr b,d) =
+% if known b: if b<=currentbreadth: errmessage "bad pos"; fi fi
+ (x@#r-x@#l,y@#r-y@#l)=(b-currentbreadth,0) rotated d;
+ x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef;
+def numeric_pickup_ primary q =
+ currentpen:=pen_[q];
+ pen_lft:=pen_lft_[q]; pen_rt:=pen_rt_[q];
+ pen_top:=pen_top_[q]; pen_bot:=pen_bot_[q];
+ currentpen_path:=pen_path_[q];
+ if known breadth_[q]: currentbreadth:=breadth_[q]; fi enddef;
+
+vardef ic# = charic enddef;
+vardef h# = charht enddef;
+vardef w# = charwd enddef;
+vardef d# = chardp enddef;
+
+let {{=begingroup; let }}=endgroup;
+def .... = .. tension atleast .9 .. enddef;
+def less_tense = save ...; let ...=.... enddef;
+def ?? = hide(showvariable x,y) enddef;
+
+let semi_ =;; let colon_ = :; let endchar_ = endchar;
+def iff expr b = if b:let next_=use_it else:let next_=lose_it fi; next_ enddef;
+def use_it = let : = restore_colon; enddef;
+def restore_colon = let : = colon_; enddef;
+def lose_it = let endchar=fi; inner bskchar; let ;=fix_ semi_ if false enddef;
+def fix_=let ;=semi_; let endchar=endchar_; outer bskchar; enddef;
+def always_iff = let : = endgroup; killboolean enddef;
+def killboolean text t = use_it enddef;
+outer bskchar;
+
+endinput
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskex10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskex10.mf
new file mode 100644
index 00000000000..5048f1375c1
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskex10.mf
@@ -0,0 +1,78 @@
+% Boisik Math Italic 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMI"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmex10.mf
+fontdimen 8:
+ rule_thickness#, % default\_rule\_thickness
+ 40/36pt#, % big\_op\_spacing1
+ 60/36pt#, % big\_op\_spacing2
+ 72/36pt#, % big\_op\_spacing3
+ 216/36pt#, % big\_op\_spacing4
+ 36/36pt#; % big\_op\_spacing5
+
+generate bskext % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskext.mf b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
new file mode 100644
index 00000000000..e2242841872
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
@@ -0,0 +1,12 @@
+%Boisik driver file for extensible math symbols
+mode_setup; font_setup;
+
+input bsklist-ex;
+input bsksymbols;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bski10.mf b/Master/texmf-dist/fonts/source/public/boisik/bski10.mf
new file mode 100644
index 00000000000..834f70c0b7d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bski10.mf
@@ -0,0 +1,69 @@
+% Boisik Italic 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKI"; font_size 10pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=6/36pt#; % diameter of rounded corners
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=20/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+like_hair#:=10/36pt#;
+like_stem#:=22/36pt#;
+like_curve#:=26/36pt#;
+ess#:=24/36pt#; % breadth in middle of lowercase s
+dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=23/36pt#; % uppercase stem breadth
+cap_curve#:=25/36pt#; % uppercase curve breadth
+like_cap_hair#:=12/36pt#;
+like_cap_stem#:=26/36pt#;
+like_cap_curve#:=30/36pt#;
+cap_ess#:=28/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=23/36pt#; % protrusion of lowercase serifs
+cap_jut#:=28/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=9/36pt#; % vertical diameter of hairlines
+bar#:=9/36pt#; % lowercase bar thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+serif_drop#:=12/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskital % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
new file mode 100644
index 00000000000..b48ca282564
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
@@ -0,0 +1,69 @@
+% Boisik Bold Italic 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKIB"; font_size 10pt#;
+
+u#:=20.4/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=40/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=34/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=41/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.6pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskital % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf
new file mode 100644
index 00000000000..86f4b9d90d1
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf
@@ -0,0 +1,71 @@
+% Boisik Italic Outline 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKIOL"; font_size 10pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=6/36pt#; % diameter of rounded corners
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=20/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+like_hair#:=10/36pt#;
+like_stem#:=22/36pt#;
+like_curve#:=26/36pt#;
+ess#:=24/36pt#; % breadth in middle of lowercase s
+dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=23/36pt#; % uppercase stem breadth
+cap_curve#:=25/36pt#; % uppercase curve breadth
+like_cap_hair#:=12/36pt#;
+like_cap_stem#:=26/36pt#;
+like_cap_curve#:=30/36pt#;
+cap_ess#:=28/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=23/36pt#; % protrusion of lowercase serifs
+cap_jut#:=28/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=9/36pt#; % vertical diameter of hairlines
+bar#:=9/36pt#; % lowercase bar thickness
+slab#:=9/36pt#; % serif and arm thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+serif_drop#:=12/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+bsk_outline#:=.1pt#;
+generate bskital % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskital.mf b/Master/texmf-dist/fonts/source/public/boisik/bskital.mf
new file mode 100644
index 00000000000..f502609f43a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskital.mf
@@ -0,0 +1,21 @@
+%Boisik driver file for text italic fonts
+mode_setup; font_setup;
+
+let bskboundary=endinput;
+input bsklist-uc;
+input bsklist-lc;
+chars.sign_pound:=ASCII"$";
+
+input bskletters-r;
+input bskletters-i;
+input bskletters-o;
+input bsksymbols;
+
+input bskligtab-i;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf
new file mode 100644
index 00000000000..7fe49ed5f73
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf
@@ -0,0 +1,69 @@
+% Boisik Italic Unslanted 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKIU"; font_size 10pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=6/36pt#; % diameter of rounded corners
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=20/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+like_hair#:=10/36pt#;
+like_stem#:=22/36pt#;
+like_curve#:=26/36pt#;
+ess#:=24/36pt#; % breadth in middle of lowercase s
+dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=23/36pt#; % uppercase stem breadth
+cap_curve#:=25/36pt#; % uppercase curve breadth
+like_cap_hair#:=12/36pt#;
+like_cap_stem#:=26/36pt#;
+like_cap_curve#:=30/36pt#;
+cap_ess#:=28/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=23/36pt#; % protrusion of lowercase serifs
+cap_jut#:=28/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=9/36pt#; % vertical diameter of hairlines
+bar#:=9/36pt#; % lowercase bar thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+serif_drop#:=12/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskital % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
new file mode 100644
index 00000000000..41f83b76e64
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
@@ -0,0 +1,69 @@
+% Boisik Bold Italic Unslanted 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKIUB"; font_size 10pt#;
+
+u#:=20.4/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=40/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=34/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=41/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.6pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskital % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
new file mode 100644
index 00000000000..9e6b56d6e10
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
@@ -0,0 +1,3875 @@
+%Boisik Latin letters in italic form
+
+charscription(10.5u,x_height,0)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+x1=x2; rt x2r=w-2.5u;
+top y1=h-hair; y2=.35bar_height;
+pos4(hair,90); pos5(curve,180); pos6(.5[hair,stem],-90);
+pos7(stem,0); x7=x1; y7=.5bar_height;
+top y4r=h+o; x4=.5w+u; y5=bar_height; lft x5r=u;
+bot y6r=-o; x6=x4-u;
+p0=z4r{left}..z5r..z6r..{up}z7r;
+ital_hook(2,3);
+p1=_ih;
+p2=z4l{left}..z5l..z6l..{up}z7l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p1,tim1),infinity) of p1---z1r
+ ..subpath(0,rundy(p0,tim0).zpet) of p0..cycle;
+infill p2..cycle;
+penlabels(0,1,2,4,5,6,7);
+);
+
+iff known chars.latin_a:
+bskchar "The italic letter a";
+beginchar(chars.latin_a,10.5u#,x_height#,0); uni "0x0061";
+italcorr x_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_aacute:
+bskchar "The italic letter a with acute";
+beginchar(chars.latin_aacute,10.5u#,asc_height#,0); uni "0x00E1";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x4; acute(100,101);
+endchar;
+
+iff known chars.latin_agrave:
+bskchar "The italic letter a with grave";
+beginchar(chars.latin_agrave,10.5u#,asc_height#,0); uni "0x00E0";
+italcorr x_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x1; grave(100,101);
+endchar;
+
+iff known chars.latin_aumlaut:
+bskchar "The italic letter a with umlaut";
+beginchar(chars.latin_aumlaut,10.5u#,asc_height#-dot_size#,0); uni "0x00E4";
+italcorr (asc_height#-dot_size#)*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x6; x101-x100=1/3w; umlaut(100,101);
+endchar;
+
+iff known chars.latin_adoublegrave:
+bskchar "The italic letter a with doublegrave";
+beginchar(chars.latin_adoublegrave,10.5u#,asc_height#,0); uni "0x0201";
+italcorr x_height#*slant-.5u#;
+pickup tiny.nib;
+adjust_fit(0,0);
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,x6);
+endchar;
+
+iff known chars.latin_acircumflex:
+bskchar "The italic letter a with circumflex";
+beginchar(chars.latin_acircumflex,10.5u#,asc_height#-.1x_height#,0); uni "0x00E2";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_acaron:
+bskchar "The italic letter a with caron";
+beginchar(chars.latin_acaron,10.5u#,asc_height#,0); uni "0x01CE";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_abreve:
+bskchar "The italic letter a with breve";
+beginchar(chars.latin_abreve,10.5u#,asc_height#+apex_o#,0); uni "0x0103";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_ainvbreve:
+bskchar "The italic letter a with inverted breve";
+beginchar(chars.latin_ainvbreve,10.5u#,asc_height#,0); uni "0x0203";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_amacron:
+bskchar "The italic letter a with macron";
+beginchar(chars.latin_amacron,10.5u#,.5[asc_height#,x_height#],0); uni "0x0101";
+italcorr .5[asc_height#,x_height#]*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+iff known chars.latin_atilde:
+bskchar "The italic letter a with tilde";
+beginchar(chars.latin_atilde,10.5u#,asc_height#,0); uni "0x00E3";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; lft x.tilde=x6;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_aring:
+bskchar "The italic letter a with ring";
+beginchar(chars.latin_aring,10.5u#,asc_height#,0); uni "0x00E5";
+italcorr .5[asc_height#,x_height#]*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x100=x4; x100-x101=1.3u;
+ring(100,101);
+endchar;
+
+iff known chars.latin_adotabove:
+bskchar "The italic letter a with dot above";
+beginchar(chars.latin_adotabove,10.5u#,asc_height#-.5dot_size#,0); uni "0x0227";
+italcorr x_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.latin_a_feminine:
+bskchar "Feminine ordinal indicator (superscript italic a)";
+beginchar(chars.latin_a_feminine,6.25u#,asc_height#-.5x_height#,0); uni "0x00AA";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(.85)(curve,hair,vair);
+usechar shifted (-u,-y6r) scaled .5 shifted (u+HH*slant,HH);
+endchar;
+
+iff known chars.latin_aogonek:
+bskchar "The italic letter a with ogonek";
+beginchar(chars.latin_a,10.5u#,x_height#,.85desc_depth#); uni "0x0105";
+italcorr x_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+x1=x2; rt x2r=w-2.5u;
+top y1=h-hair; y2=.35bar_height;
+pos4(hair,90); pos5(curve,180); pos6(.5[hair,stem],-90);
+pos7(stem,0); x7=x1; y7=.5bar_height;
+pos8(stem,0); pos9(curve,0); pos10(hair,45); pos11(hair,160);
+top y4r=h+o; x4=.5w+u; y5=bar_height; lft x5r=u;
+bot y6r=-o; x6=x4-u;
+x8=x9l+1.5u; z8r=z2'l; x10-x9l=3u; rt x11l=x10+1.5u;
+y9=-.5d; bot y10l=-d; y11=-2/3d;
+p0=z4r{left}..z5r..z6r..{up}z7r;
+ital_hook(2,3);
+p1=_ih;
+p2=z4l{left}..z5l..z6l..{up}z7l---z1l;
+p3=z8l{z9l-z8r}..z9l...z10l..{z8-z9}z11l..z11r{z9-z8}..z10r..z9r..z8r;
+(tim2,tim3-2)=p1 intersectiontimes subpath(2,infinity) of p3;
+(tim4,tim5)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p3,0),rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p1,tim2),infinity) of p1---z1r
+ ..subpath(0,rundy(p0,tim4).zpet) of p0..cycle;
+infill p2..cycle;
+penlabels(0,1,2,4,5,6,7,8,9,10,11);
+endchar;
+
+iff known chars.latin_b:
+bskchar "The italic letter b";
+beginchar(chars.latin_b,11.25u#,asc_height#,0); uni "0x0062";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=3oblu;
+pos1(stem,0); pos2(stem,0);
+x1=x2; lft x1l=2.75u;
+y1=h; y2=.5bar_height;
+ital_serif(1,2);
+pos3(.5[hair,stem],90); pos4(curve,180);
+pos5(hair,-90); pos6(stem,0);
+x3=.5[w-u,x2]-u; bot y3l=-o;
+rt x4l=w-u; y4=bar_height;
+x5=x3+1.5u; top y5l=x_height+o;
+x6=x2; y6=.5bar_height;
+p0=z2r--z1r;
+p1=z2l..z3l..z4l..{left}z5l..{down}z6l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),infinity) of p0.._is---subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+infill z6r{down}..z3r..z4r..{left}z5r..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_blank_b:
+bskchar "Blank italic b sign";
+beginchar(chars.sign_blank_b,11.25u#,asc_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=3f_obl; oblu.light:=2f_obl;
+pos1(stem,0); pos2(stem,0);
+x1=x2; lft x1l=2.75u;
+y1=h; y2=.5bar_height;
+ital_serif(1,2);
+pos3(.5[hair,stem],90); pos4(curve,180);
+pos5(hair,-90); pos6(stem,0);
+x3=.5[w-u,x2]-u; bot y3l=-o;
+rt x4l=w-u; y4=bar_height;
+x5=x3+1.5u; top y5l=x_height+o;
+x6=x2; y6=.5bar_height;
+lft x7=.5u; x8=.5w+u; y8=.6[x_height,h]; y7=x_height;
+theta:=angle(z8-z7)+90;
+pos7(bar,theta); pos8(bar,theta);
+x7'l=x7'r=x1l; x8'l=x8'r=x1r; bskpoints(7,8,hair,hair);
+z7'l=whatever[z7l,z8l]; z8'l=whatever[z7l,z8l];
+z7'r=whatever[z7r,z8r]; z8'r=whatever[z7r,z8r];
+p0=z2r---obl(8'l,2r,8l).light---z8ll..z8r---obl(8'r,8r,1r).light---z1r;
+p1=z2l..z3l..z4l..{left}z5l..{down}z6l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),infinity) of p0.._is
+ ---obl(7'r,1'',7r).light---z7rr..z7l
+ ---obl(7'l,7l,2l)---subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+infill z6r{down}..z3r..z4r..{left}z5r..cycle; labels(8ll,7rr);
+penlabels(1,2,3,4,5,6,7,7',8,8');
+endchar;
+
+charscription(9u,x_height,0)(
+numeric cend; cend:=stem;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+pos0(hair,135);
+lft x1l=u; y1=.5h; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=h+o;
+rt x0l=w-u; y0=.25h;
+rt x4r=w-1.25u; top y4r=.9h;
+z4'=z4l+.75stem*unitvector(z4-z3);
+filldraw z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4r..z4'..{up}z4l..
+ z3r{left}..z1r..{right}z2r..{dir80}z0r..cycle;
+penlabels(0,1,2,3,4); labels(4');
+);
+
+iff known chars.latin_c:
+bskchar "The italic letter c";
+beginchar(chars.latin_c,9u#,x_height#,0); uni "0x0063";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_ccaron:
+bskchar "The italic letter c with caron";
+beginchar(chars.latin_ccaron,9u#,asc_height#,0); uni "0x010D";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_cacute:
+bskchar "The italic letter c with acute";
+beginchar(chars.latin_cacute,9u#,asc_height#,0); uni "0x0107";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+acute(100,101);
+endchar;
+
+iff known chars.latin_ccircumflex:
+bskchar "The italic letter c with circumflex";
+beginchar(chars.latin_ccircumflex,9u#,asc_height#-.1x_height#,0); uni "0x0109";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x101=x3;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_cdotabove:
+bskchar "The italic letter c with dot above";
+beginchar(chars.latin_cdotabove,9u#,asc_height#-.5dot_size#,0); uni "0x010B";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x3;
+dotabove(100);
+endchar;
+
+iff known chars.latin_ccedilla:
+bskchar "The italic letter c with cedilla";
+beginchar(chars.latin_ccedilla,9u#,x_height#,.65desc_depth#); uni "0x00E7";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend, tim[]; cend:=stem;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+pos0(hair,135);
+pos5(.5stem,0); pos6(.5stem,0); pos7(.8stem,0); pos8(.5stem,-110);
+lft x1l=u; y1=.5h; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=h+o;
+rt x0l=w-u; y0=.25h;
+rt x4r=w-1.25u; top y4r=.9h;
+z4'=z4l+.75stem*unitvector(z4-z3);
+x5r=x6r; z5r=z2l; y6=-hair; y7=-.5d;
+rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d;
+p1:=z0l{dir-100}..{left}z2l..z1l..{right}z3l;
+p2:=z6r..{down}z7r..{left}z8r..{right}z8l..{up}z7l..z6l--z5l;
+p3:=z5r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2;
+tim1=xpart(p1 intersectiontimes (z6l--(x6l,y2r)));
+filldraw subpath(0,rundy(p1,1).zpet) of p1..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3..subpath(rundy(p1,tim1),infinity) of p1..z4r..z4'..{up}z4l..
+ z3r{left}..z1r..{right}z2r..{dir80}z0r..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(4');
+endchar;
+
+iff known chars.sign_cent:
+bskchar "Cent sign";
+beginchar(chars.sign_cent,9u#,asc_height#,comma_depth#); uni "0x00A2";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend, tim[]; cend:=stem;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+pos0(hair,135);
+lft x1l=u; y1=.5x_height; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=x_height+o;
+rt x0l=w-u; y0=.25x_height;
+rt x4r=w-1.25u; top y4r=.9x_height;
+z4'=z4l+.75stem*unitvector(z4-z3);
+top z5=(x3,h); z6=(x3,-d); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90);
+bskpoints(5,6,hair,hair);
+p0:=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4r..z4'..{up}z4l;
+p1:=z4l{up}..z3r{left}..z1r..{right}z2r..{dir80}z0r;
+p2:=z6ll---z5l;
+p3:=z5rr---z6r;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-2,tim5)=subpath (2,infinity) of p0 intersectiontimes p2;
+(tim6-2,tim7)=subpath (2,infinity) of p0 intersectiontimes p3;
+(tim8,tim9)=p1 intersectiontimes p3;
+(tim10-2,tim11)=subpath(2,infinity) of p1 intersectiontimes p3;
+(tim12,tim13)=p1 intersectiontimes p2;
+(tim14-2,tim15)=subpath(2,infinity) of p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p3,tim1),infinity) of p3
+ ---subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p3,tim9),rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p1,tim10),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1
+ ..subpath(rundy(p2,tim15),rundy(p2,tim13).zpet) of p2
+ ..cycle;
+penlabels(0,1,2,3,4,5,6); labels(4');
+endchar;
+
+iff known chars.sign_cent_old:
+bskchar "Old style cent sign";
+beginchar(chars.sign_cent,9u#,asc_height#,comma_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend, tim[]; cend:=stem;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+pos0(hair,135);
+lft x1l=u; y1=.5x_height; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=x_height+o;
+rt x0l=w-u; y0=.25x_height;
+rt x4r=w-1.25u; top y4r=.9x_height;
+z4'=z4l+.75stem*unitvector(z4-z3);
+z5=(w-u,h); z6=(u,-d); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90);
+bskpoints(5,6,hair,hair);
+p0:=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4r..z4'..{up}z4l;
+p1:=z4l{up}..z3r{left}..z1r..{right}z2r..{dir80}z0r;
+p2:=z6ll---z5l;
+p3:=z5rr---z6r;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-2,tim5)=subpath (2,infinity) of p0 intersectiontimes p2;
+(tim6-2,tim7)=subpath (2,infinity) of p0 intersectiontimes p3;
+(tim8,tim9)=p1 intersectiontimes p3;
+(tim10-2,tim11)=subpath(2,infinity) of p1 intersectiontimes p3;
+(tim12,tim13)=p1 intersectiontimes p2;
+(tim14-2,tim15)=subpath(2,infinity) of p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p3,tim1),infinity) of p3
+ ---subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p3,tim9),rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p1,tim10),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1
+ ..subpath(rundy(p2,tim15),rundy(p2,tim13).zpet) of p2
+ ..cycle;
+penlabels(0,1,2,3,4,5,6); labels(4');
+endchar;
+
+charscription(11u,asc_height,0)(
+numeric tim[]; path p[]; oblu:=3oblu;
+pos1(stem,0); pos2(stem,0);
+x1=x2; rt x1r=w-2u; x1'l=x1l-2stem;
+y1=h; y2=.35bar_height;
+ital_serif(1,2); ital_hook(2,3);
+pos4(hair,-90); pos5(curve,180);
+pos6(.5[hair,stem],90); pos7(stem,0);
+x4=.5[u,x2]-u; bot y4r=-o;
+lft x5r=u; y5=bar_height;
+x6=x4+1.5u; top y6r=x_height+o;
+x7=x2; y7=bar_height;
+p0=z7l--reverse _is;
+p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r;
+p2=reverse _ih..z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p2 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ---subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..cycle;
+infill z7l{down}..z4l..z5l..{right}z6l..cycle;
+penlabels(1,2,4,5,6,7);
+);
+
+iff known chars.latin_d:
+bskchar "The italic letter d";
+beginchar(chars.latin_d,11u#,asc_height#,0); uni "0x0064";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_dcaron:
+bskchar "The italic letter d with caron (treated like comma)";
+beginchar(chars.latin_dcaron,11u#,asc_height#,0); uni "0x010F";
+italcorr asc_height#*slant+1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+y100''r=h; rt x100'''=w+.5u;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_dstroke:
+bskchar "The italic letter d with stroke";
+beginchar(chars.latin_dstroke,11u#,asc_height#,0); uni "0x0111";
+italcorr .4[x_height#,asc_height#]*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(stem,0); pos2(stem,0);
+pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90);
+x1=x2; rt x1r=w-2u; x1'l=x1l-2stem;
+y1=h; y2=.35bar_height;
+ital_serif(1,2); ital_hook(2,3);
+pos4(hair,-90); pos5(curve,180);
+pos6(.5[hair,stem],90); pos7(stem,0);
+x4=.5[u,x2]-u; bot y4r=-o;
+lft x5r=u; y5=bar_height;
+x6=x4+1.5u; top y6r=x_height+o;
+x7=x2; y7=bar_height;
+x9-x8=4u; y9=y9'=y8=y8'=.4[x_height,h]; .5[x8,x9]=x1;
+x8'=x1l; x9'=x1r; bskpoints(8,9,hair,hair);
+p0=z7l---obl(8'l,7l,8l)---z8l..z8rr---obl(8'r,8r,1l)---reverse _is
+ ---obl(9'r,1r,9r)---z9r..z9ll---obl(9'l,9l,2r);
+p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r;
+p2=reverse _ih..z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p2 intersectiontimes p1;
+oblu:=3oblu;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ---subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..cycle;
+infill z7l{down}..z4l..z5l..{right}z6l..cycle;
+penlabels(1,2,4,5,6,7,8,8',9,9'); labels(8rr,9ll);
+endchar;
+
+iff known chars.sign_dong:
+bskchar "Dong sign";
+beginchar(chars.sign_dong,11u#,asc_height#,2rule_thickness#+o#); uni "0x20AB";
+italcorr .4[x_height#,asc_height#]*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(stem,0); pos2(stem,0);
+pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90);
+pos10(rule_thickness,90); pos11(rule_thickness,90);
+x1=x2; rt x1r=w-2u; x1'l=x1l-2stem;
+y1=h; y2=.35bar_height;
+ital_serif(1,2); ital_hook(2,3);
+pos4(hair,-90); pos5(curve,180);
+pos6(.5[hair,stem],90); pos7(stem,0);
+x4=.5[u,x2]-u; bot y4r=-o;
+lft x5r=u; y5=bar_height;
+x6=x4+1.5u; top y6r=x_height+o;
+x7=x2; y7=bar_height;
+x8=.5[x5,x6]; rt x9=w-.5u; y9=y9'=y8=y8'=.4[x_height,h];
+x8'=x1l; x9'=x1r; bskpoints(8,9,hair,hair);
+bot y10l=bot y11l=-d; lft x10=u; rt x11=w-u;
+p0=z7l---obl(8'l,7l,8l)---z8l..z8rr---obl(8'r,8r,1l)---reverse _is
+ ---obl(9'r,1r,9r)---z9r..z9ll---obl(9'l,9l,2r);
+p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r;
+p2=reverse _ih..z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p2 intersectiontimes p1;
+oblu:=3oblu;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ---subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..cycle;
+infill z7l{down}..z4l..z5l..{right}z6l..cycle;
+filldraw bskrule(10,11,rule_thickness,rule_thickness);
+penlabels(1,2,4,5,6,7,8,8',9,9'); labels(8rr,9ll);
+endchar;
+
+iff known chars.latin_eth:
+bskchar "The italic letter eth";
+beginchar(chars.latin_eth,10u#,asc_height#,0); uni "0x00F0";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,180); pos4(hair,270);
+pos5(curve,180); pos6(hair,-90);
+lft x1l=u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3;
+rt x5l=w-u; y5l=y3l+stem; top y6l=h+o; lft x6=u;
+p0=z2r{right}..z5r..{dir170}z6r; x3l=xpart (((w,y3)--(.5w,y3))intersectionpoint p0);
+p1=z2l{left}..z1l..z4l..{down}z3l;
+p2=z2r{right}..z5r..{dir170}z6r;
+z0=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z0--(x4,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(w,y0)));
+p3:=z6l{dir-10}..z5l..{left}z2l;
+p4:=z2l{left}..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p2,tim2),infinity) of p2;
+tim0=xpart(p3 intersectiontimes ((0,.5[x_height,h])--(w,.5[x_height,h])));
+top y8=h; x8=.5[x5,x4]; z7=z8+5u*unitvector(((direction tim0 of p3) rotated -95));
+if y7<y4l+o: y7:=y7+hair; fi
+theta:=angle(z8-z7)+90;
+pos7(bar,theta); pos8(bar,theta); bskpoints(7,8,bar,bar);
+p5:=z7rr---z8r;
+p6:=z8ll---z7l;
+(tim3,tim4)=p3 intersectiontimes p5;
+(tim5,tim6)=p3 intersectiontimes p6;
+(tim7,tim8)=p4 intersectiontimes p6;
+(tim9,tim10)=p4 intersectiontimes p5;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p5,tim4),infinity) of p5
+ ..{z7l-z8l}z8ll..subpath(rundy(p3,(tim5,2hair)),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p6,tim8),infinity) of p6
+ ..subpath(0,rundy(p5,tim10).zpet) of p5
+ ..subpath(rundy(p4,tim9),infinity) of p4..cycle;
+infill z1r{up}..z4r..z3r..z2r..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(7rr,8ll);
+endchar;
+
+charscription(8.5u,x_height,0)(
+numeric tim[]; path p[]; oblu:=2oblu;
+pair esmer;
+pos1(curve,0); pos2(hair,90); pos3(hair,270);
+pos0(hair,135);
+lft x1l=u; y1=.5h; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=h+o;
+rt x0l=w-u; y0=.2h;
+rt x4l=w-u; top y4l=.9h;
+pos4(.5[hair,stem],angle(z4l-z1)+180); pos5(hair,angle(z4-z1)+90);
+z5r=z1; esmer=(z1-z4) rotated -10;
+p1=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4l..{esmer}z5l;
+p2=z5r{-esmer}..z4r..z3r{left}..z1r..{right}z2r..{dir80}z0r;
+(tim1,tim2-2)=p1 intersectiontimes subpath(2,4) of p2;
+(tim3,tim4-1)=p2 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim3),rundy(p2,tim4).zpet) of p2..cycle;
+penlabels(0,1,2,3,4,5);
+);
+
+iff known chars.latin_e:
+bskchar "The italic letter e";
+beginchar(chars.latin_e,8.5u#,x_height#,0); uni "0x0065";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_eacute:
+bskchar "The italic letter e with acute";
+beginchar(chars.latin_eacute,8.5u#,asc_height#,0); uni "0x00E9";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x101=x3-u;
+usechar;
+acute(100,101);
+endchar;
+
+iff known chars.latin_ecaron:
+bskchar "The italic letter e with caron";
+beginchar(chars.latin_ecaron,8.5u#,asc_height#,0); uni "0x011B";
+italcorr asc_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_egrave:
+bskchar "The italic letter e with grave";
+beginchar(chars.latin_egrave,8.5u#,asc_height#,0); uni "0x00E8";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101r=x3;
+grave(100,101);
+endchar;
+
+iff known chars.latin_edoublegrave:
+bskchar "The italic letter e with double grave";
+beginchar(chars.latin_edoublegrave,8.5u#,asc_height#,0); uni "0x0205";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u; x102r=x3;
+d_grave(100,101,102,103,whatever);
+endchar;
+
+iff known chars.latin_ecircumflex:
+bskchar "The italic letter e with circumflex";
+beginchar(chars.latin_ecircumflex,8.5u#,asc_height#-.1x_height#,0); uni "0x00EA";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_eumlaut:
+bskchar "The italic letter e with umlaut";
+beginchar(chars.latin_eumlaut,8.5u#,asc_height#-dot_size#,0); uni "0x00EB";
+italcorr (asc_height#-dot_size#)*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x3; x101-x100=3u;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_emacron:
+bskchar "The italic letter e with macron";
+beginchar(chars.latin_emacron,8.5u#,.5[asc_height#,x_height#],0); uni "0x0113";
+italcorr .5[asc_height#,x_height#]*slant+.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x1r;
+macron(100,101);
+endchar;
+
+iff known chars.latin_edotabove:
+bskchar "The italic letter e with dot above";
+beginchar(chars.latin_edotabove,8.5u#,asc_height#-.5dot_size#,0); uni "0x0117";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x3;
+dotabove(100);
+endchar;
+
+iff known chars.latin_ebreve:
+bskchar "The italic letter e with breve";
+beginchar(chars.latin_ebreve,8.5u#,asc_height#,0); uni "0x0115";
+italcorr asc_height#*slant+.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_einvbreve:
+bskchar "The italic letter e with inverted breve";
+beginchar(chars.latin_einvbreve,8.5u#,asc_height#+o#,0); uni "0x0207";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_eogonek:
+bskchar "The italic letter e with ogonek";
+beginchar(chars.latin_e,8.5u#,x_height#,.85desc_depth#); uni "0x0119";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pair esmer;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos0(hair,135);
+pos6(stem,0); pos7(curve,0); pos8(hair,45); pos9(hair,160);
+lft x1l=u; y1=.5h; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=h+o;
+rt x0l=w-u; y0=.2h;
+rt x4l=w-u; top y4l=.9h;
+pos4(.5[hair,stem],angle(z4l-z1)+180); pos5(hair,angle(z4-z1)+90);
+z5r=z1; esmer=(z1-z4) rotated -10;
+x6=x7l+1.5u; z6r=z2l; x8-x7l=3u; rt x9l=x8+1.5u;
+y7=-.5d; bot y8l=-d; y9=-2/3d;
+p1=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4l..{esmer}z5l;
+p2=z5r{-esmer}..z4r..z3r{left}..z1r..{right}z2r..{dir80}z0r;
+(tim1,tim2-2)=p1 intersectiontimes subpath(2,4) of p2;
+(tim3,tim4-1)=p2 intersectiontimes subpath(1,infinity) of p2;
+tim0=xpart(p1 intersectiontimes((x6l,-o)--(x6l,y2r)));
+p3=reverse(z6l{z7l-z6r}..z7l...z8l..{z6-z7}z9l..z9r{z7-z6}..z8r..z7r..z6r);
+filldraw subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p1,tim0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim3),rundy(p2,tim4).zpet) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9);
+endchar;
+
+iff known chars.latin_ecedilla:
+bskchar "The italic letter e with cedilla";
+beginchar(chars.latin_ecedilla,8.5u#,x_height#,.65desc_depth#); uni "0x0229";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pair esmer;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos0(hair,135);
+pos6(.5stem,0); pos7(.5stem,0); pos8(.8stem,0); pos9(.5stem,-110);
+lft x1l=u; y1=.5h; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=h+o;
+rt x0l=w-u; y0=.2h;
+rt x4l=w-u; top y4l=.9h;
+pos4(.5[hair,stem],angle(z4l-z1)+180); pos5(hair,angle(z4-z1)+90);
+z5r=z1; esmer=(z1-z4) rotated -10;
+x6r=x7r; z6r=z2l; y7=-hair; y8=-.5d;
+rt x8r-lft x9r=4u; x6r-lft x9r=2u; y9r=-d;
+p1=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4l..{esmer}z5l;
+p2=z5r{-esmer}..z4r..z3r{left}..z1r..{right}z2r..{dir80}z0r;
+p3=z7r..{down}z8r..{left}z9r..{right}z9l..{up}z8l..z7l--z6l;
+p4=z6r{down}..subpath (rundy(p2,(0,curve)),infinity) of p3;
+tim0=xpart(p1 intersectiontimes (z7l--(x6l,y2r)));
+(tim1,tim2-2)=p1 intersectiontimes subpath(2,4) of p2;
+(tim3,tim4-1)=p2 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p4,0),rundy(p4,infinity).zpet) of p4..
+ subpath(rundy(p1,tim0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim3),rundy(p2,tim4).zpet) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9);
+endchar;
+
+iff known chars.latin_oe:
+bskchar "The italic letter oe";
+beginchar(chars.latin_oe,13.5u#,x_height#,0); uni "0x00E6";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pair esmer;
+pos1(curve,0); pos2(hair,90); pos3(hair,270);
+pos0(hair,135);
+pos6(curve,0); pos7(hair,90); pos8(curve,180); pos9(hair,270);
+lft x1l=6.5u; y1=.5h; x2=10.25u; x3-x2=.25u; bot y2l=bot y7l=-o; top y3l=top y9l=h+o;
+rt x0l=w-u; y0=.2h;
+rt x4l=w-u; top y4l=.9h;
+pos4(.5[hair,stem],angle(z4l-z1)+180); pos5(hair,angle(z4-z1)+90);
+z5r=z1; esmer=(z1-z4) rotated -10;
+lft x6l=u; x8=x1; y6=y8=.5h; .5[x7,x9]=.5[x6,x8]; x7=x9;
+x9r:=x9r+.25u; x7r:=x7r-.25u;
+p1=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4l..{esmer}z5l;
+p2=z5r{-esmer}..z4r..z3r{left}..z1r..{right}z2r..{dir80}z0r;
+p3=z8l{down}..z7l..z6l{up}..z9l..{down}z8l;
+(tim0,tim1)=p1 intersectiontimes p3;
+(tim2,tim3-2)=p3 intersectiontimes subpath(2,3) of p1;
+(tim4,tim5-2)=p1 intersectiontimes subpath(2,4) of p2;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p3,tim1),rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p1,tim3),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p2,tim5),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim6),rundy(p2,tim7).zpet) of p2..cycle;
+infill z6r{up}..z9r..{down}z8r..z7r..{up}cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9);
+endchar;
+
+charscription(13u,x_height,0)(
+numeric tim[]; path p[]; oblu:=2oblu;
+pair esmer;
+pos1(curve,0); pos2(hair,90); pos3(hair,270);
+pos0(hair,135); pos6(stem,0); pos7(stem,0);
+pos9(hair,90); pos10(curve,180); pos11(.5[hair,stem],-90);
+pos12(stem,0);
+lft x1l=6u; y1=.5h; x2=10.25u; x3-x2=.25u; bot y2l=-o; top y3l=top y9r=h+o;
+rt x0l=w-u; y0=.2h;
+rt x4l=w-u; top y4l=.9h;
+x6=x7=x1; x12=x6; y12=.5bar_height;
+top y6=h-hair; y7=.35bar_height;
+x9=x7-u; y10=bar_height; lft x10r=u;
+bot y11r=-o; x11=x9-u;
+pos4(.5[hair,stem],angle(z4l-z1)+180); pos5(hair,angle(z4-z1)+90);
+z5r=z1; esmer=(z1-z4) rotated -10;
+p1=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4l..{esmer}z5l;
+p2=z5r{-esmer}..z4r..z3r{left}..z1r..{right}z2r..{dir80}z0r;
+p3=z12r---z6r..z9r{left}..z10r..z11r..{up}z12r;
+x8l=x0;
+ital_hook(7,8);
+p4=_ih;
+p5=z9l{left}..z10l..z11l..{up}z12l---z6l;
+(tim0,tim1)=p1 intersectiontimes p4;
+(tim2,tim3)=p4 intersectiontimes p3;
+(tim4-2,tim5)=subpath(2,infinity) of p1 intersectiontimes subpath (0,3) of p3;
+(tim6,tim7-2)=p1 intersectiontimes subpath(2,4) of p2;
+(tim8,tim9-1)=p2 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..(reverse subpath(rundy(p4,(tim2,f_obl)),rundy(p4,tim1).zpet) of p4)
+ ..(reverse subpath(rundy(p3,tim5),rundy(p3,(tim3,f_obl)).zpet) of p3)
+ ..subpath(rundy(p1,tim4),rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p2,tim7),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim8),rundy(p2,tim9).zpet) of p2..cycle;
+infill p5..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12);
+);
+
+iff known chars.latin_ae:
+bskchar "The italic letter ae";
+beginchar(chars.latin_ae,13u#,x_height#,0); uni "0x0153";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_aemacron:
+bskchar "The italic ligature ae with macron";
+beginchar(chars.latin_aemacron,13u#,.5[asc_height#,x_height#],0); uni "0x01E3";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+macron(100,101);
+endchar;
+
+iff known chars.latin_aeacute:
+bskchar "The italic ligature ae with acute";
+beginchar(chars.latin_aeacute,13u#,asc_height#,0); uni "0x01FD";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x6r;
+acute(100,101);
+endchar;
+
+iff known chars.latin_f:
+bskchar "The italic letter f";
+beginchar(chars.latin_f,7u#,asc_height#,desc_depth#); uni "0x0066";
+italcorr asc_height#*slant+3.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); pos6(stem,30);
+x1=x2; x1=.5w;
+y2=-.5d; .5[y1,y2]=.5(h-d);
+bot y4r=-d-o; if monospace: lft x5r=0; x4=.5[x5,x2]; else: x4=.5u; lft x5r=x4-x1; fi y5l=.75[y4l,y2];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=h+o; x6-x1=x2-x5; y6r=y3-1.5like_stem; x3=.5[x1,x6];
+z6'=z6+.25stem*unitvector(z6-z3);
+pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90);
+y7=y8=y9=y10=bot x_height;
+x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u;
+filldraw z4r{right}..z2r---obl(9l,2r,10l)
+ ---z10l..z10r---obl(9r,10r,1r)---z1r
+ ..{right}z3r..z6l..z6'..z6r{up}..z3l{left}
+ ..z1l---obl(8r,1l,7r)---z7r..z7l
+ ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up}
+ ..z5'..z5r..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(5',6');
+endchar;
+
+iff known chars.latin_fi:
+bskchar "The italic ligature fi";
+beginchar(chars.latin_fi,12u#,asc_height#,desc_depth#); uni "0xFB01";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); penpos6(dot_size,0);
+pos11(stem,0); pos12(stem,0);
+x1=x2; x1=.5*7u;
+y2=-.5d; .5[y1,y2]=.5(h-d);
+bot y4r=-d-o; if monospace: x5=0; x4=.5[x2,x5]; else: x4=.5u; lft x5r=x4-x1; fi y5l=.75[y4l,y2];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=h+o; if monospace: x6r=w-2u; else: x6-x1=x2-x5; fi
+y6r=y3-1.5like_stem; x3=.5[x1,x6];
+pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90);
+y7=y8=y9=y10=bot x_height;
+x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u;
+x11r=x12r=x6;
+y11=x_height-.3bar_height; y12=.35bar_height;
+ital_hook(12,13);
+filldraw z4r{right}..z2r---obl(9l,2r,10l)
+ ---z10l..z11l---_ih---z11r
+ ..z10r---obl(9r,10r,1r)---z1r
+ ..{right}z3r..z6l{dir-120}..z6r{up}..z3l{left}
+ ..z1l---obl(8r,1l,7r)---z7r..z7l
+ ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up}
+ ..z5'..z5r..cycle;
+penlabels(0,1,2);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(5');
+endchar;
+
+iff known chars.latin_fj:
+bskchar "The italic ligature fj";
+beginchar(chars.latin_fj,11u#,asc_height#,desc_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); penpos6(dot_size,0);
+pos11(stem,0); pos12(stem,0);
+pos14(hair,-90); pos15(stem,-150);
+x1=x2; x1=.5*7u;
+y2=-.5d; .5[y1,y2]=.5(h-d);
+bot y4r=-d-o; if monospace: x5=0; x4=.5[x2,x5]; else: x4=.5u; lft x5r=x4-x1; fi y5l=.75[y4l,y2];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=h+o; if monospace: x6r=w-2u; else: x6-x1=x2-x5; fi y6r=y3-1.5like_stem; x3=.5[x1,x6];
+z6'=z6+.25stem*unitvector(z6-z3);
+pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90);
+y7=y8=y9=y10=bot x_height;
+x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u;
+x11=x12; rt x11r=w-u;
+y11=x_height-.3bar_height; y12=-.6d;
+bot y14r=-d-o; x15r=x2r+2hair; .5[x11,x15]=x14; y15l=.75[y14l,y12];
+z15'=z15l+.5stem*unitvector(z15-z14);
+filldraw z4r{right}..z2r---obl(9l,2r,10l)
+ ---z10l..z11l---z12l..{left}z14l
+ ..z15l{up}..z15'..z15r..z14r{right}..z12r---z11r
+ ..z10r---obl(9r,10r,1r)---z1r
+ ..{right}z3r..z6l{dir-120}..z6r{up}..z3l{left}
+ ..z1l---obl(8r,1l,7r)---z7r..z7l
+ ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up}
+ ..z5'..z5r..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,14,15); labels(5',6',15');
+endchar;
+
+charscription(12.5u,asc_height,desc_depth)(
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); pos6(stem,30);
+pos11(stem,0); pos12(stem,0);
+x1=x2; x1=.5*7u;
+y2=-.5d; .5[y1,y2]=.5(h-d);
+bot y4r=-d-o; if monospace: x5=0; x4=.5[x2,x5]; else: x4=.5u; lft x5r=x4-x1; fi y5l=.75[y4l,y2];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=h+o; if monospace: x6r=w-2.5u; else: x6-x1=x2-x5; fi y6r=y3-1.5like_stem; x3=.5[x1,x6];
+z5'=z5l+.5stem*unitvector(z5-z4);
+z6'=z6+.25stem*unitvector(z6-z3);
+pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90);
+y7=y8=y9=y10=bot x_height;
+x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u;
+x11=x12=x6;
+y11=h; y12=.35bar_height;
+ital_hook(12,13);
+filldraw z4r{right}..z2r---obl(9l,2r,10l)
+ ---z10l..z10r---obl(9r,10r,1r)---z1r
+ ..{right}z3r..z11l+1.5curve*down---_ih
+ ---z11r---z11l+o*down..z3l{left}
+ ..z1l---obl(8r,1l,7r)---z7r..z7l
+ ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up}
+ ..z5'..z5r..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(5',6');
+);
+
+iff known chars.latin_fl:
+bskchar "The italic ligature fl";
+beginchar(chars.latin_fl,12.5u#,asc_height#,desc_depth#); uni "0xFB02";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_flacute:
+bskchar "The italic ligature fl with acute";
+beginchar(chars.latin_flacute,12.5u#, asc_height#+.3x_height#, 0); uni "non";
+italcorr (asc_height#+.3x_height#)*slant;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x11l-hair; x100r=w-u; y101=asc_height+.75u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_flcaron:
+bskchar "The italic ligature fl with caron";
+beginchar(chars.latin_flcaron,12.5u#, asc_height#, 0); uni "non";
+italcorr asc_height#*slant+u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+usechar;
+y100''r=h; x100'''=w;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_ff:
+bskchar "The italic ligature ff";
+beginchar(chars.latin_ff,12.5u#,asc_height#,desc_depth#); uni "0xFB00";
+italcorr asc_height#*slant+2.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); pos6(stem,30);
+pos11(stem,0); pos12(stem,0); pos13(hair,-90);
+pos14(hair,-90); pos15(stem,-150); pos16(stem,30);
+x1=x2=.5*7u; x11=x12=x6;
+y2=y12=-.5d; .5[y1,y2]=.5(h-d); y11=y1;
+bot y4r=bot y14r=-d-o; if monospace: x5=0; x4=.5[x2,x5]; else: x4=.5u; lft x5r=x4-x1; fi y5l=y15l=.75[y4l,y2];
+x14=.5[x15,x11]; lft x15r=x2r+2hair; x16-x11=x12-x15; x13=.5[x11,x16];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=top y13l=h+o; if monospace: x6=w-3u; else: x6-x1=x2-x5; fi y6r=y16r=y3-1.5like_stem; x3=.5[x1,x6];
+z6'=z6+.25stem*unitvector(z6-z3);
+z15'=z15l+.5stem*unitvector(z15-z14); z16'=z16+.25stem*unitvector(z16-z13);
+pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90);
+pos17(hair,90); pos18(hair,90); pos19(hair,90); pos20(hair,90);
+y7=y8=y9=y10=y17=y18=y19=y20=bot x_height;
+x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u;
+x11-x17=x20-x11; x18=x11l; x19=x11r; lft x17=.5w;
+p0:=z4r{right}..z2r---obl(9l,2r,18l)---obl(18l,9l,12l)---z12l..{left}z14l
+ ..z15l{up} ..z15'..z15r..z14r{right}..z12r---obl(19l,12r,20l)---z20l
+ ..z20r---obl(19r,20r,11r)---z11r ..{right}z13r..z16l..z16'..z16r{up}
+ ..z13l{left}..{down}z11l;
+p1:=z6r{up}..{left}z3l..z1l---obl(8r,1l,7r)--z7r..z7l---obl(8l,7l,2l)
+ ---z2l..z4l{left}..{up}z5l..z5'..z5r..{right}z4r;
+(tim0-length p0 +2,tim1)=subpath (length p0-2,infinity) of p0 intersectiontimes p1;
+if y6l>y11l:
+ p2:=z11l---obl(18r,11l,9r)---obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6';
+ p3:=z13l{left}..{down}z11l;
+else:
+ p2:=obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6';
+ p3:=z13l{left}..{down}z11l---obl(18r,11l,9r);
+fi
+ (tim2,tim3)=p2 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle
+ ;
+infill subpath(0,rundy(p2,(tim2,f_obl)).zpet) of p2
+ ..subpath(rundy(p3,(tim3,f_obl)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20); labels(5',6',15',16');
+endchar;
+
+iff known chars.latin_ffi and not monospace:
+bskchar "The italic ligature ffi";
+beginchar(chars.latin_ffi,17.5u#,asc_height#,desc_depth#); uni "0xFB03";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); pos6(stem,30);
+pos11(stem,0); pos12(stem,0); pos13(hair,-90);
+pos14(hair,-90); pos15(stem,-150); penpos16(dot_size,0);
+pos21(stem,0); pos22(stem,0);
+x1=x2=.5*7u; x11=x12=x6;
+y2=y12=-.5d; .5[y1,y2]=.5(h-d); y11=y1;
+bot y4r=bot y14r=-d-o; x4=.5u; lft x5r=x4-x1; y5l=y15l=.75[y4l,y2];
+x14=.5[x15,x11]; lft x15r=x2r+2hair; x16-x11=4/3(x12-x15); x13=.5[x11,x16];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=top y13l=h+o; x6-x1=x2-x5; y6r=y16r=y3-1.5like_stem; x3=.5[x1,x6];
+z6'=z6+.25stem*unitvector(z6-z3);
+z15'=z15l+.5stem*unitvector(z15-z14); z16'=z16+.25stem*unitvector(z16-z13);
+pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90);
+pos17(hair,90); pos18(hair,90); pos19(hair,90); pos20(hair,90);
+y7=y8=y9=y10=y17=y18=y19=y20=bot x_height;
+x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u;
+x11-x17=x20-x11; x18=x11l; x19=x11r; lft x17=6u;
+x21r=x22r=x16; y21=x_height-.3bar_height; y22=.35bar_height;
+ital_hook(22,23).alt;
+p0:=z4r{right}..z2r---obl(9l,2r,18l)---obl(18l,9l,12l)---z12l..{left}z14l
+ ..z15l{up} ..z15'..z15r..z14r{right}..z12r---obl(19l,12r,20l)---z20l
+ ..z21l---_ih---z21r..z20r---obl(19r,20r,11r)---z11r ..{right}z13r
+ ..{dir-120}z16l..z16r{up}..z13l{left}..{down}z11l;
+p1:=z6r{up}..{left}z3l..z1l---obl(8r,1l,7r)--z7r..z7l---obl(8l,7l,2l)
+ ---z2l..z4l{left}..{up}z5l..z5'..z5r..{right}z4r;
+if y6l>y11l:
+ p2:=z11l---obl(18r,11l,9r)---obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6';
+ p3:=z13l{left}..{down}z11l;
+else:
+ p2:=obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6';
+ p3:=z13l{left}..{down}z11l---obl(18r,11l,9r);
+fi
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p3;
+{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= if pair t: xpart(t) else: t fi enddef; fi
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill subpath(0,rundy(p2,(tim2,f_obl)).zpet) of p2
+ ..subpath(rundy(p3,(tim3,f_obl)),infinity) of p3..cycle;
+}};
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22); labels(5',6',15',16');
+endchar;
+
+iff known chars.latin_ffl and not monospace:
+bskchar "The italic ligature ffl";
+beginchar(chars.latin_ffl,18u#,asc_height#,desc_depth#); uni "0xFB04";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); pos6(stem,30);
+pos11(stem,0); pos12(stem,0); pos13(hair,-90);
+pos14(hair,-90); pos15(stem,-150); penpos16(dot_size,0);
+pos21(stem,0); pos22(stem,0);
+x1=x2=.5*7u; x11=x12=x6;
+y2=y12=-.5d; .5[y1,y2]=.5(h-d); y11=y1;
+bot y4r=bot y14r=-d-o; x4=.5u; lft x5r=x4-x1; y5l=y15l=.75[y4l,y2];
+x14=.5[x15,x11]; lft x15r=x2r+2hair; x16-x11=4/3(x12-x15); x13=.5[x11,x16];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=top y13l=h+o; x6-x1=x2-x5; y6r=y16r=y3-1.5like_stem; x3=.5[x1,x6];
+z6'=z6+.25stem*unitvector(z6-z3);
+z15'=z15l+.5stem*unitvector(z15-z14); z16'=z16+.25stem*unitvector(z16-z13);
+pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90);
+pos17(hair,90); pos18(hair,90); pos19(hair,90); pos20(hair,90);
+y7=y8=y9=y10=y17=y18=y19=y20=bot x_height;
+x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u;
+x11-x17=x20-x11; x18=x11l; x19=x11r; lft x17=6u;
+x21=x22=x16; y21=h; y22=.35bar_height;
+ital_hook(22,23).alt;
+p0:=z4r{right}..z2r---obl(9l,2r,18l)---obl(18l,9l,12l)---z12l..{left}z14l
+ ..z15l{up} ..z15'..z15r..z14r{right}..z12r---obl(19l,12r,20l)---z20l
+ ..z20r---obl(19r,20r,11r)---z11r ..{right}z13r
+ ..z21l+1.5curve*down---_ih---z21r---z21l+o*down
+ ..z13l{left}..{down}z11l;
+p1:=z6r{up}..{left}z3l..z1l---obl(8r,1l,7r)--z7r..z7l---obl(8l,7l,2l)
+ ---z2l..z4l{left}..{up}z5l..z5'..z5r..{right}z4r;
+if y6l>y11l:
+ p2:=z11l---obl(18r,11l,9r)---obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6';
+ p3:=z13l{left}..{down}z11l;
+else:
+ p2:=obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6';
+ p3:=z13l{left}..{down}z11l---obl(18r,11l,9r);
+fi
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill subpath(0,rundy(p2,(tim2,hair)).zpet) of p2
+ ..subpath(rundy(p3,(tim3,hair)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22); labels(5',6',15',16');
+endchar;
+
+charscription(10.5u,x_height,desc_depth)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=1.75u; rt x3l=w-2.25u; y1=y3=.5[y4l,y2l]; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=1/3bar_height+.25stem; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((0,y2l+tiny)--(w,y2l+tiny)));
+z5r=point tim1 of p0;
+tim2=xpart(p0 intersectiontimes ((x5r-hair+tiny,0)--(x5r-hair+tiny,h)));
+z5l=point tim2 of p0; z5=.5[z5l,z5r];
+lft z5'=(1.75u,0);
+pos6(stem,90); pos8(hair,270);
+y7l=-.5d; y6=0; x6=.5w; x6r:=x6r-.5hair;
+rt x7l=w-2u; x8=x2; bot y8r=-d;
+pos9(dot_size,180); lft x9r=u; top y9=-.5d;
+p1=subpath(0,.5tim2) of p0 .. z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l;
+pos7(stem,angle(direction 3 of p1)+90);
+y9'-y9=.1d; z9'=whatever[z9,z5];
+pos10(hair,135); pos11(hair,135); z11-z10=tiny*dir45;
+z10=(.5[z2,z4]--(w-u,h+u)) intersectionpoint p0;
+pos12(stem,45); pos12'(stem,45); x12r=w-u; y12l=y11l; z12'=z12+.5tiny*dir135;
+p2=.5[z2,z4]---z11l..{dir-60}z12'l--z12l;
+p3=z12r---z12'r..z11r---z10r--z10;
+p4=z8r{right}..z7r..{dir190}z6r..{dir30}z5r;
+(tim3,tim4)=p0 intersectiontimes p2;
+(tim5,tim6)=p3 intersectiontimes p0;
+filldraw p1..{(w,h)-z9l}z9l..z9'{left}..{down}z9r..
+ subpath(0,rundy(p4,(infinity,if bold_face: 1.5f_obl else: oblu fi)).zpet) of p4
+ ..subpath(rundy(p0,tim1),rundy(p0,tim3).zpet) of p0..
+ subpath(rundy(p2,1),infinity) of p2{dir0}..
+ subpath(0,rundy(p3,(2,hair)).zpet) of p3..
+ subpath(rundy(p0,(tim6, if bold_face: f_obl else: oblu fi)),infinity) of p0-- cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9');
+);
+
+iff known chars.latin_g:
+bskchar "The italic letter g";
+beginchar(chars.latin_g,10.5u#,x_height#,desc_depth#); uni "0x0067";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_gacute:
+bskchar "The italic letter g with acute";
+beginchar(chars.latin_gacute,10.5u#,asc_height#,desc_depth#); uni "0x01F5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4-o;
+acute(100,101);
+endchar;
+
+iff known chars.latin_gcaron:
+bskchar "The italic letter g with caron";
+beginchar(chars.latin_gcaron,10.5u#,asc_height#,desc_depth#); uni "0x01E7";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_gcircumflex:
+bskchar "The italic letter g with circumflex";
+beginchar(chars.latin_gcircumflex,10.5u#,asc_height#-.1x_height#,desc_depth#); uni "0x011D";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_gcedilla:
+bskchar "The italic letter g with cedilla (treated as comma)";
+beginchar(chars.latin_gcedilla,10.5u#,x_height#+.75comma_depth#+o#,desc_depth#); uni "0x0123";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x100=x4; bot y100''r=x_height+2o;
+ammoc(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_gdotabove:
+bskchar "The italic letter g with dot above";
+beginchar(chars.latin_gdotabove,10.5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0121";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.latin_gbreve:
+bskchar "The italic letter g with breve";
+beginchar(chars.latin_gbreve,10.5u#,asc_height#,desc_depth#); uni "0x011F";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+charscription(12u,asc_height,0)(
+numeric tim[]; oblu:=3oblu;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(.8stem,5);
+pos3(hair,90); pos4(stem,0); pos5(stem,0);
+x1=x2=x2'; x1l=2.5u;
+y1=h; y2=u; bot y2'=0;
+x4=x5; rt x4r=w-2u; y4=.5[bar_height,x_height]; y5=.35bar_height;
+top y3r=x_height+o; x3=.5[x2,x4]+.5u;
+ital_serif(1,2); ital_hook(5,6);
+p0=z4r..z3r..{down}z2l;
+p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l;
+p1=z2r---z1r.._is---z2l..z2'l..z2'r;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle;
+penlabels(1,2,2',3,4,5);
+);
+
+iff known chars.latin_h:
+bskchar "The italic letter h";
+beginchar(chars.latin_h,12u#,asc_height#,0); uni "0x0068";
+italcorr .5[bar_height#,x_height#]*slant-.75u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_hcaron:
+bskchar "The italic letter h with caron";
+beginchar(chars.latin_hcaron,12u#,asc_height#,0); uni "0x021F";
+italcorr .5[bar_height#,x_height#]*slant-.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+lft x101=x3+o; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_hcircumflex:
+bskchar "The italic letter h with circumflex";
+beginchar(chars.latin_hcircumflex,12u#,asc_height#,0); uni "0x0125";
+italcorr .5[bar_height#,x_height#]*slant-.75u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+lft x101=x3+o; x102-x100=4.5u;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_hstroke:
+bskchar "The italic letter h with stroke";
+beginchar(chars.latin_hstroke,12u#, asc_height#, 0); uni "0x0127";
+italcorr .5[bar_height#,x_height#]*slant-.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric tim[];
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(.8stem,5);
+pos3(hair,90); pos4(stem,0); pos5(stem,0);
+pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90);
+x1=x2=x2'; x1l=2.5u;
+y1=h; y2=u; bot y2'=0;
+x4=x5; rt x4r=w-2u; y4=.5[bar_height,x_height]; y5=.35bar_height;
+top y3r=x_height+o; x3=.5[x2,x4]+.5u;
+ital_serif(1,2); ital_hook(5,6);
+x8-x7=4u; y8=y8'=y7=y7'=.4[x_height,h]; .5[x7,x8]=x1;
+x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair);
+p0=z4r..z3r..{down}z2l;
+p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l;
+p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r)---z1r.._is
+ ---obl(7'r,1l,7r)---z7rr..z7l---obl(7'l,7l,2l)---z2l..z2'l..z2'r;
+(tim0,tim1)=p0 intersectiontimes p1;
+oblu:=3oblu;
+filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle;
+penlabels(1,2,2',3,4,5,7,7',8,8'); labels(7',8');
+endchar;
+
+iff known chars.latin_hbar:
+bskchar "The italic letter h with bar (Dirac constant)";
+beginchar(chars.latin_hbar,12u#, asc_height#, 0); uni "0x210F";
+italcorr .5[bar_height#,x_height#]*slant-.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib; oblu.more:=2f_obl;
+numeric tim[], theta;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(.8stem,5);
+pos3(hair,90); pos4(stem,0); pos5(stem,0);
+x1=x2=x2'; x1l=2.5u;
+y1=h; y2=u; bot y2'=0;
+x4=x5; rt x4r=w-2u; y4=.5[bar_height,x_height]; y5=.35bar_height;
+top y3r=x_height+o; x3=.5[x2,x4]+.5u;
+ital_serif(1,2); ital_hook(5,6);
+x8-x7=4u; y8-y7=stem; .5[y7,y8]=.35[x_height,h]; .5[x7,x8]=x1;
+theta:=angle(z8-z7)+90;
+pos7(bar,theta); pos8(bar,theta);
+x7'l=x7'r=x1l; x8'l=x8'r=x1r; bskpoints(7,8,hair,hair);
+z7'l=whatever[z7l,z8l]; z8'l=whatever[z7l,z8l];
+z7'r=whatever[z7r,z8r]; z8'r=whatever[z7r,z8r];
+p0=z4r..z3r..{down}z2l;
+p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l;
+p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r).more---z1r.._is
+ ---obl(7'r,1l,7r)---z7rr..z7l---obl(7'l,7l,2l).more---z2l..z2'l..z2'r;
+(tim0,tim1)=p0 intersectiontimes p1;
+oblu:=3f_obl;
+filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle;
+penlabels(1,2,2',3,4,5,7,7',8,8'); labels(7',8');
+endchar;
+
+charscription(6u,x_height,0)(
+numeric H; H=x_height;
+pos1(stem,0); pos2(stem,0);
+.5[x1,x2]=.5w; x1-x2=0;
+y1=H-.3bar_height; y2=.35bar_height;
+ital_kooh(1,4); ital_hook(2,3);
+filldraw _ih---_ik---cycle;
+penlabels(0,1,2);
+);
+
+iff known chars.latin_dotless_i:
+bskchar "The italic dotless i";
+beginchar(chars.latin_dotless_i,6u#, x_height#, 0); uni "0x0131";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_i:
+bskchar "The italic letter i";
+beginchar(chars.latin_i,6u#, asc_height#-.5dot_size#, 0); uni "0x0069";
+italcorr (asc_height#-.5dot_size#)*slant-1.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+top z0=(x1l,h-.5dot_size); dot(0);
+endchar;
+
+iff known chars.latin_iacute:
+bskchar "The italic letter i with acute";
+beginchar(chars.latin_iacute,6u#, asc_height#, 0); uni "0x00ED";
+italcorr asc_height#*slant-1.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x101=x1';
+usechar;
+acute(100,101);
+endchar;
+
+iff known chars.latin_igrave:
+bskchar "The italic letter i with grave";
+beginchar(chars.latin_igrave,6u#,asc_height#,0); uni "0x00EC";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+grave(100,101);
+endchar;
+
+iff known chars.latin_idoublegrave:
+bskchar "The italic letter i with double grave";
+beginchar(chars.latin_idoublegrave,6u#,asc_height#,0); uni "0x0209";
+italcorr x_height#*slant-1.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=2.25u; x103r=x2r;
+d_grave(100,101,102,103,whatever);
+endchar;
+
+iff known chars.latin_imacron:
+bskchar "The italic letter i with macron";
+beginchar(chars.latin_imacron,6u#,.5[asc_height#,x_height#],0); uni "0x012B";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x2,x3]; x100=.5u;
+macron(100,101);
+endchar;
+
+iff known chars.latin_icircumflex:
+bskchar "The italic letter i with circumflex";
+beginchar(chars.latin_icircumflex,6u#,asc_height#-.1x_height#,0); uni "0x00EE";
+italcorr .5[asc_height#,x_height#]*slant+.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_iumlaut:
+bskchar "The italic letter i with umlaut";
+beginchar(chars.latin_iumlaut,6u#,asc_height#-dot_size#,0); uni "0x00EF";
+italcorr (asc_height#-dot_size#)*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x2l; x100-x101=1.8dot_size;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ibreve:
+bskchar "The italic letter i with breve";
+beginchar(chars.latin_ibreve,6u#,asc_height#,0); uni "0x012D";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_iinvbreve:
+bskchar "The italic letter i with inverted breve";
+beginchar(chars.latin_iinvbreve,6u#,asc_height#,0); uni "0x020B";
+italcorr .5[x_height#,asc_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_itilde:
+bskchar "The italic letter i with tilde";
+beginchar(chars.latin_itilde,6u#,asc_height#,0); uni "0x0129";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=5.5u; rt x.tilde=x2l;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_icaron:
+bskchar "The italic letter i with caron";
+beginchar(chars.latin_icaron,6u#,asc_height#,0); uni "0x01D0";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x1',x1l]; x102-x100=4.5u;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_iogonek:
+bskchar "The italic letter i with ogonek";
+beginchar(chars.latin_i,6u#, asc_height#-.5dot_size#,.85desc_depth#); uni "0x012F";
+italcorr (asc_height#-.5dot_size#)*slant-1.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(stem,0); pos2(stem,0);
+pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160);
+.5[x1,x2]=.5w; x1-x2=0;
+y1=x_height-.3bar_height; y2=.35bar_height;
+x5=x6l+1.5u; z5l=z2'l; x7-x6l=3u; rt x8l=x7+1.5u;
+y6=-.5d; bot y7l=-d; y8=-2/3d;
+ital_kooh(1,4); ital_hook(2,3);
+p1:=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r;
+tim1=xpart(_ih intersectiontimes (z5r--(x5r,y2r)));
+filldraw subpath(0,rundy(_ih,1).zpet) of _ih
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(_ih,tim1),infinity) of _ih---_ik---cycle;
+top z0=(x1l,h-.5dot_size); dot(0);
+penlabels(0,1,2,5,6,7,8);
+endchar;
+
+charscription(5u,x_height,.75desc_depth)(
+numeric H; H=x_height;
+pos1(stem,0); pos2(stem,0);
+pos4(hair,-90); pos5(stem,-150);
+x1=x2; rt x1r=w-u;
+y1=H-.3bar_height; y2=-1/2d;
+if monospace: x5r=0; x4=.5[x5,x2]; x3r=u;
+else: x4=u; lft x5r=x4-x1; fi
+ital_kooh(1,3);
+bot y4r=-d-o;
+y5l=.75[y4l,y2];
+z5'=z5l+.5stem*unitvector(z5-z4);
+filldraw z4r{right}..z2r---_ik---z2l..{left}z4l..z5l{up}..z5'..z5r..cycle;
+penlabels(0,1,2,4,5); labels(5');
+);
+
+iff known chars.latin_dotless_j:
+bskchar "The italic dotless j";
+beginchar(chars.latin_dotless_j,5u#,x_height#,.75desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_j:
+bskchar "The italic letter j";
+beginchar(chars.latin_j,5u#,asc_height#-.5dot_size#,.75desc_depth#); uni "0x006A";
+italcorr (asc_height#-.5dot_size#)*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+top z0=(x1l,h-.5dot_size); dot(0);
+endchar;
+
+iff known chars.latin_jcircumflex:
+bskchar "The italic letter j with circumflex";
+beginchar(chars.latin_jcircumflex,5u#,asc_height#-.1x_height#,1.5like_cap_curve#); uni "0x0135";
+italcorr .5[asc_height#,x_height#]*slant+u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x1',x2l];
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_ij:
+bskchar "The italic letter ij";
+beginchar(chars.latin_ij,9.5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0133";
+italcorr (asc_height#-.5dot_size#)*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric shift; shift:=w-5u;
+usechar shifted (shift*right);
+pos6(stem,0); pos7(stem,0);
+.5[x6,x7]=3u; x6-x7=0;
+y6=x_height-.3bar_height; y7=.35bar_height;
+lft x8l=6u;
+ital_kooh(6,9); ital_hook(7,8);
+filldraw _ih---_ik---cycle;
+top z0=(x1l+shift,h-.5dot_size); dot(0);
+top z10=(x6l,h-.5dot_size); dot(10);
+penlabels(6,7);
+endchar;
+
+charscription(10u,asc_height,0)(
+numeric tim[]; oblu:=3oblu;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(.8stem,5);
+pos3(hair,130); pos3'(hair,-40); pos4(curve,60); pos5(stem,0);
+x1=x2=x2'; x1l=2.5u;
+y1=h; y2=u; bot y2'=0;
+rt x4r=w-u; top y4r=x_height+o; y5=.35bar_height;
+z4'=(x2r,.5[x_height,bar_height]);
+z7=(x2r,.8bar_height);
+z3=.4[z4',z4]+stem*(unitvector(z4-z4') rotated 90);
+z3'=.5[z7,z4]+stem*(unitvector(z4-z7) rotated -90);
+x5l=.4[x4,x2];
+ital_serif(1,2); ital_hook(5,6); x5'l:=x5'l+2hair; x5'r:=x5'r+2hair;
+z8'-z8=z5r-z5l; y8=x_height; z8=z5l+whatever*dir115;
+z4'''-z4'=(hair-currentbreadth)*down;
+z7-z7''=(.5[hair,stem]-currentbreadth)*down;
+p1=z2r---z1r.._is---z2l..z2'l..z2'r;
+p2=z7..z3'r..z4r..z3r..z4';
+p3=z6'..z6r..z5'r..z5r---z8';
+p4=z7''..z3'l..z4l..z3l..z4''';
+p5=z4'''--z7'';
+p6=z8---z5l..z5'l..z6l..z6';
+z9=bsktouch(subpath(1,infinity) of p2,left,p1,right);
+tim0-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z9--(x3,y9)));
+tim1=xpart(p1 intersectiontimes (z9--(0,y9)));
+(tim2,tim3)=p2 intersectiontimes p3;
+(tim4,tim5)=p2 intersectiontimes p6;
+filldraw subpath(rundy(p1,tim1),infinity) of p1
+ ---z7+oblu*down
+ ..point .5tim4 of p2
+ ..subpath(rundy(p6,tim5),infinity) of p6
+ &subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p2,tim2),rundy(p2,tim0).zpet) of p2..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p4,0),rundy(p4,length p4).zpet) of p4
+ ..subpath(rundy(p5,0),rundy(p5,1).zpet) of p5..cycle;
+penlabels(1,2,2',3,3',4,5); labels(4',4''',7,7'',8,8');
+);
+
+iff known chars.latin_k:
+bskchar "The italic letter k";
+beginchar(chars.latin_k,10u#,asc_height#,0); uni "0x006B";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_kcaron:
+bskchar "The italic letter k with caron";
+beginchar(chars.latin_kcaron,10u#,asc_height#,0); uni "0x01E9";
+italcorr asc_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x100=x1r+u; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_kcedilla:
+bskchar "The italic letter k with cedilla (treated as comma)";
+beginchar(chars.latin_kcedilla,10u#,asc_height#,.75comma_depth#); uni "0x0137";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+lft x100=.5w; top y100''r=-o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_kra:
+bskchar "The italic letter kra";
+beginchar(chars.latin_kra,11.5u#,x_height#,0); uni "0x0138";
+italcorr x_height#*slant-.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+pos3(whatever,0); pos5(whatever,0);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+rt x3r=w-3u; top y3=h; rt x5r=w-4u; y5=.35bar_height;
+y4r=.45h; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90);
+z3l=z4l+whatever*(z3r-z4r);
+x6l=x4r+hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90);
+z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r];
+x4'=x2r; z4'=whatever[z3l,z4l];
+ital_serif(2,1); ital_hook(5,7);
+_ih:=z5l..z5'l..z7l..z7'&z7'..z7r..z5'r..z5r;
+serif_bot(1); serifs_tl(3l); serifs_tr(3r);
+z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r));
+z6l'=z6l+(-u,0) rotated (angle(z3r-z4r));
+z6l''=z6l+(u,0) rotated (angle(z5l-z6l));
+z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r));
+x2'''=x1r; z2'''=whatever[z3l,z4l];
+filldraw z1a{down}..{left}z1b..z1c---z1d..z1e{left}..z1f---z4r..z4r'' if x6l'>x4r'': ..z6l' fi
+ ..z6l''---z5l..z5'l..z7l..z7'&z7'..z7r..z5'r..z5r---z6r'..z6r''
+ ---diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a..z3l.c{dir0}..diag_serif(3l,4l)
+ ---obl(2''',3l,2r)---_is---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',2''',2'''',4',4r',4r'',6l',6l'',6r',6r'');
+endchar;
+
+charscription(6.5u,asc_height,0)(
+pos1(stem,0); pos2(stem,0);
+x1=x2=.5w;
+y1=h; y2=.35bar_height;
+ital_serif(1,2); ital_hook(2,3);
+filldraw z2r--z1r.._is---_ih..cycle;
+penlabels(1,2);
+);
+
+iff known chars.latin_l:
+bskchar "The italic letter l";
+beginchar(chars.latin_l,6.5u#, asc_height#, 0); uni "0x006C";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_lacute:
+bskchar "The italic letter l with acute";
+beginchar(chars.latin_lacute,6.5u#, asc_height#+.3x_height#, 0); uni "0x013A";
+italcorr (asc_height#+.3x_height#)*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x1l; x100r=w-u; y101=asc_height+.75u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_lcaron:
+bskchar "The italic letter l with caron (treated like comma)";
+beginchar(chars.latin_lcaron,6.5u# if bold_face: +.5u# fi, asc_height#, 0); uni "0x013E";
+italcorr asc_height#*slant+.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+y100''r=h; x100'''=w-.5u;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_ldot:
+bskchar "The italic letter l with middle dot";
+beginchar(chars.latin_l,6.5u#+dot_size#,asc_height#,0); uni "0x0140";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+top y100=x_height; x100+.5dot_size=w-u;
+dot(100);
+endchar;
+
+iff known chars.latin_lcedilla:
+bskchar "The italic letter l with cedilla (treated as comma)";
+beginchar(chars.latin_lcedilla,6.5u#,asc_height#,.75comma_depth#); uni "0x013C";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x100=x2'; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_ldotabove:
+bskchar "The italic letter l with dot above";
+beginchar(chars.latin_ldotabove,6.5u#,Acc_height#+o#,0); uni "non";
+italcorr Acc_height#*slant-1.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x100=x1;
+dotabove(100);
+endchar;
+
+iff known chars.latin_lslash:
+bskchar "The italic letter l with slash";
+beginchar(chars.latin_lslash,6.5u#, asc_height#, 0); uni "0x0142";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib; oblu.more:=2f_obl;
+numeric theta;
+pos1(stem,0); pos2(stem,0);
+x1=x2=.5w;
+y1=h; y2=.35bar_height;
+x5-x4=4u; .5[x4,x5]=x1; y5-y4=stem; .5[y4,y5]=.8[bar_height,x_height];
+theta=angle(z5-z4)+90;
+pos4(bar,theta); pos5(bar,theta);
+x4'l=x4'r=x1l; x5'l=x5'r=x1r;
+z4'l=whatever[z4l,z5l]; z5'l=whatever[z4l,z5l];
+z4'r=whatever[z4r,z5r]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,bar,bar);
+ital_serif(1,2); ital_hook(2,3);
+filldraw z2r---obl(5'l,2r,5l)---z5ll..z5r---obl(5'r,5r,1r).more
+ ---z1r.._is---obl(4'r,1l,4r)---z4rr..z4l
+ ---obl(4'l,4l,2l).more---_ih..cycle;
+penlabels(1,2,4,4',5,5');
+endchar;
+
+iff known chars.latin_m:
+bskchar "The italic letter m";
+beginchar(chars.latin_m,16u#,x_height#,0); uni "0x006D";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=3oblu;
+numeric H; H=x_height;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(.8stem,5);
+pos3(hair,90); pos4(stem,0); pos5(stem,0);
+pos5'(.8stem,5); pos8(hair,90); pos9(stem,0);
+pos10(stem,0);
+x1=x2=x2'; x1l=2.5u;
+y1=H-.3bar_height; y2=u; bot y2'=0;
+x4=x5=x5'=.5w; y4=.5[bar_height,x_height];
+rt x9r=w-2.5u; x10=x9; y10=.35bar_height; y9=y4;
+y5=u; bot y5'=0; y8=y3; x8=.5[x4,x9]+.5u;
+top y3r=x_height+o; x3=.5[x2,x4]+.5u;
+ital_kooh(1,7); ital_hook(10,11);
+p0=z4r..z3r..{down}z2l;
+p1=z2r---z1r.._ik---z2l..z2'l..z2'r;
+p2=z9r..z8r..{down}z5l;
+p2:=z9r{up}..{direction 1 of p2}z8r..{down}z5l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+if tim2<1: tim2:=xpart(p2 intersectiontimes ((z4l--z9l) shifted (.15hair*up)));
+ tim3:=xpart(p0 intersectiontimes ((z4r--z1r) shifted (.15hair*up)));
+fi
+filldraw z2r if monospace:---z1r else:{up}fi..z3l..z4l---z5l..z5'l..z5'r..z5r
+ if monospace:---z4r..else:{up}..fi{right}z8l..z9l
+ ---_ih---subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),rundy(p0,tim0).zpet) of p0 if monospace:{left}fi
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..{up}cycle;
+penlabels(1,2,2',3,4,5,5',8,9,10);
+endchar;
+
+charscription(11.5u,x_height,0)(
+numeric tim[]; oblu:=3oblu;
+numeric H; H=x_height;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(.8stem,5);
+pos3(hair,90); pos4(stem,0); pos5(stem,0);
+x1=x2=x2'; x1l=2.5u;
+y1=H-.3bar_height; y2=u; bot y2'=0;
+x4=x5; rt x4r=w-2.5u; y4=.5[bar_height,x_height]; y5=.35bar_height;
+top y3r=x_height+o; x3=.5[x2,x4]+.5u;
+ital_kooh(1,7); ital_hook(5,6);
+p0=z4r..z3r..{down}z2l;
+p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l;
+p1=z2r---z1r.._ik---z2l..z2'l..z2'r;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle;
+penlabels(1,2,2',3,4,5);
+);
+
+iff known chars.latin_n:
+bskchar "The italic letter n";
+beginchar(chars.latin_n,11.5u#, x_height#, 0); uni "0x006E";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_ncaron:
+bskchar "The italic letter n with caron";
+beginchar(chars.latin_ncaron,11.5u#, asc_height#, 0); uni "0x0148";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.6[x1,x3];
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_nacute:
+bskchar "The italic letter n with acute";
+beginchar(chars.latin_nacute,11.5u#,asc_height#,0); uni "0x0144";
+italcorr asc_height#*slant-2.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x3,x2r];
+acute(100,101);
+endchar;
+
+iff known chars.latin_napostrophe:
+bskchar "The italic letter n with apostrophe";
+beginchar(chars.latin_napostrophe,11.5u#,asc_height#+o#,0); uni "0x0149";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x100=.5u; top y100=h-.5dot_size;
+comma(100,dot_size,.9hair,.8comma_depth);
+endchar;
+
+iff known chars.latin_ngrave:
+bskchar "The italic letter n with grave";
+beginchar(chars.latin_ngrave,11.5u#,asc_height#,0); uni "0x01F9";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+grave(100,101);
+endchar;
+
+iff known chars.latin_ntilde:
+bskchar "The italic letter n with tilde";
+beginchar(chars.latin_ntilde,11.5u#,asc_height#,0); uni "0x00F1";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; x.tilde=.5[x1r,x4l];
+tilde(100,101);
+endchar;
+
+iff known chars.latin_ncedilla:
+bskchar "The italic letter n with cedilla (treated as comma)";
+beginchar(chars.latin_ncedilla,11.5u#,x_height#,.75comma_depth#); uni "0x0146";
+italcorr x_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=.65[x2,x5]; top y100''r=-o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_eng:
+bskchar "The italic letter eng";
+beginchar(chars.latin_eng,10u#, x_height#, desc_depth#); uni "0x014B";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=3oblu;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(.8stem,5);
+pos3(hair,90); pos4(stem,0); pos5(stem,0);
+pos7(hair,-90); pos8(stem,-150);
+x1=x2=x2'; x1l=2.5u;
+y1=x_height-.3bar_height; y2=u; bot y2'=0;
+x4=x5; rt x4r=w-u; y4=.5[bar_height,x_height]; y5=-.5d;
+top y3r=x_height+o; x3=.5[x2,x4]+.5u;
+ital_kooh(1,6);
+bot y7r=-d; top y8=y7+like_curve; lft x8r-x5=-5u; rt x5r-x7=3u;
+z8'=z8l+.5stem*unitvector(z8-z7);
+p0=z4r..z3r..{down}z2l;
+p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l;
+p1=z2r---z1r.._ik---z2l..z2'l..z2'r;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw z2r{up}..z3l..z4l---z5l..{left}z7l..z8l{up}..z8'
+ ..z8r..z7r{right}..z5r---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle;
+penlabels(1,2,2',3,4,5,7,8); labels(8');
+endchar;
+
+charscription(10u,x_height,0)(
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+);
+
+iff known chars.latin_o:
+bskchar "The italic letter o";
+beginchar(chars.latin_o,10u#,x_height#,0); uni "0x006F";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_oacute:
+bskchar "The italic letter o with acute";
+beginchar(chars.latin_oacute,10u#,asc_height#,0); uni "0x00F3";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4l;
+acute(100,101);
+endchar;
+
+iff known chars.latin_oumlaut:
+bskchar "The italic letter o with umlaut";
+beginchar(chars.latin_oumlaut,10u#,asc_height#-dot_size#,0); uni "0x00F6";
+italcorr (asc_height#-dot_size#)*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x4l; x101-x100=2/3(x3-x1);
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ocircumflex:
+bskchar "The italic letter o with circumflex";
+beginchar(chars.latin_ocircumflex,10u#,asc_height#-.1x_height#,0); uni "0x00F4";
+italcorr .5[asc_height#,x_height#]*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+numeric oblu; oblu:=hair;
+x101=x4r;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_ograve:
+bskchar "The italic letter o with grave";
+beginchar(chars.latin_ograve,10u#,asc_height#,0); uni "0x00F2";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4+u;
+grave(100,101);
+endchar;
+
+iff known chars.latin_odoublegrave:
+bskchar "The italic letter o with double grave";
+beginchar(chars.latin_odoublegrave,10u#,asc_height#,0); uni "0x020D";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u; x102=x4;
+d_grave(100,101,102,103,whatever);
+endchar;
+
+iff known chars.latin_ocaron:
+bskchar "The italic letter o with caron";
+beginchar(chars.latin_ocaron,10u#,asc_height#,0); uni "0x01D2";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_otilde:
+bskchar "The italic letter o with tilde";
+beginchar(chars.latin_otilde,10u#,asc_height#,0); uni "0x00F5";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=6u;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_omacron:
+bskchar "The italic letter o with macron";
+beginchar(chars.latin_omacron,10u#,.5[asc_height#,x_height#],0); uni "0x014D";
+italcorr .5[asc_height#,x_height#]*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+iff known chars.latin_odotabove:
+bskchar "The italic letter o with dot above";
+beginchar(chars.latin_odotabove,10u#,asc_height#-.5dot_size#,0); uni "0x022F";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.latin_ohumlaut:
+bskchar "The italic letter o with Hungarian umlaut";
+beginchar(chars.latin_ohumlaut,10u#,asc_height#,0); uni "0x0151";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=3u; .5[x100,x101]=x4r+1.75u;
+h_umlaut(100,101,102,103,2u);
+endchar;
+
+iff known chars.latin_obreve:
+bskchar "The italic letter o with breve";
+beginchar(chars.latin_obreve,10u#,asc_height#+o#,0); uni "0x014F";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_oinvbreve:
+bskchar "The italic letter o with inverted breve";
+beginchar(chars.latin_oinvbreve,10u#,asc_height#+o#,0); uni "0x020F";
+italcorr .5[asc_height#,x_height#]*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_o_masculine:
+bskchar "Masculine ordinal indicator (superscript latin o)";
+beginchar(chars.latin_o_masculine,6u#,asc_height#-.5x_height#,0); uni "0x00BA";
+italcorr (asc_height#-.75x_height#)*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(.85)(curve,hair,vair);
+usechar shifted (-x1l,-y4l) scaled .5 shifted (HH*slant,HH);
+endchar;
+
+charscription(10u,x_height,.85desc_depth)(
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u;
+bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d;
+p0=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r;
+filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0
+ ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p1,(1,stem)),infinity) of p0..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8);
+);
+
+iff known chars.latin_oogonek:
+bskchar "The italic letter o with ogonek";
+beginchar(chars.latin_oogonek,10u#,x_height#,.85desc_depth#); uni "0x01EB";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_oogonekmacron:
+bskchar "The italic letter o with ogonek and macron";
+beginchar(chars.latin_oogonekmacron,10u#,.5[asc_height#,x_height#],.85desc_depth#); uni "0x01ED";
+italcorr .5[asc_height#,x_height#]*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+charscription(10u,x_height,0)(
+numeric tim[]; path p[];
+oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+bskpoints(5,6,hair,hair);
+(tim1,tim2)=p0 intersectiontimes (z5l--z6l);
+(tim3,tim4)=p0 intersectiontimes (z6r--z5r);
+(tim5,tim6)=p0 intersectiontimes (z0r--z5r);
+(tim7,tim8)=p0 intersectiontimes (z5l--z0l);
+(tim11,tim12)=p1 intersectiontimes (z0r--z6r);
+(tim13,tim14)=p1 intersectiontimes (z0r--z5r);
+(tim15,tim16)=p1 intersectiontimes (z0l--z6l);
+(tim17,tim18)=p1 intersectiontimes (z5l--z0l);
+filldraw subpath (0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy((z5l--z6ll),tim2),infinity) of (z5l--z6ll)
+ ..subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r)
+ ..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5rr)
+ ..subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l)
+ ..subpath(rundy(p0,tim7),infinity) of p0--cycle;
+infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r)
+ ..subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1
+ ..subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle;
+infill subpath (0, rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l)
+ ..subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l)
+ ..subpath(rundy(p1,tim15),infinity) of p1--cycle;
+penlabels(0,1,2,3,4,5,6);
+);
+
+iff known chars.latin_oslash:
+bskchar "The italic letter o slash";
+beginchar(chars.latin_oslash,10u#,x_height#,0); uni "0x00F8";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_oslashacute:
+bskchar "The italic letter o slash with acute";
+beginchar(chars.latin_oslashacute,10u#,asc_height#,0); uni "0x01FF";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4l;
+acute(100,101);
+endchar;
+
+iff known chars.latin_p:
+bskchar "The italic letter p";
+beginchar(chars.latin_p,12u#,.5[asc_height#,x_height#],desc_depth#); uni "0x0070";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=3oblu;
+pos1(stem,0); pos2(stem,0); pos11(stem,0);
+pos1'(1.3stem,10); pos7(hair,0); pos8(hair,-40);
+x1=x1'=x2=x11; lft x1l=2.75u;
+y1=x_height+o; y2=.5bar_height; bot y11=-d; top y1'r=h;
+pos3(.5[hair,stem],90); pos4(curve,180);
+pos5(hair,-90); pos6(stem,0);
+x3=.5[w-u,x2]-u; bot y3l=-o;
+rt x4l=w-u; y4=bar_height;
+x5=x3+1.5u; top y5l=x_height+o;
+x6=x2; y6=.5bar_height;
+serif_bot(11); forsuffixes $=11b,11c,11d,11e: x$:=x$+hair; endfor;
+p0=z2r---z1r..{up}z1'r..{down}z1'l;
+p1=z2l..z3l..z4l..{left}z5l..{down}z6l;
+p2=z11f--z2r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p1;
+y7=ypart(point tim0 of p0)+stem; x7l=x1l;
+y8=3/4bar_height; lft x8l=.5u;
+p3=z8r{dir30}..z7r{up};
+p4=z7l---z11a;
+(tim4,tim5)=p3 intersectiontimes p4;
+filldraw subpath(rundy(p0,(tim0,2curve)),infinity) of p0
+ ..z7l..{dir-150}z8l
+ ..subpath(0,rundy(p3,tim4).zpet) of p3
+ ..subpath(rundy(p4,tim5),infinity) of p4
+ ..{left}z11b..z11c---z11d..{left}z11e
+ ..{up}subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p2,tim3),rundy(p1,(tim1,1.5curve)).zpet) of p1..cycle;
+infill z6r{down}..z3r..z4r..{left}z5r..cycle;
+penlabels(1,1',2,3,4,5,6,7,8,11);
+endchar;
+
+iff known chars.latin_thorn:
+bskchar "The italic letter thorn";
+beginchar(chars.latin_p,12u#,asc_height#,desc_depth#); uni "0x0070";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=3oblu;
+pos1(stem,0); pos2(stem,0); pos11(stem,0);
+pos1'(stem,0); pos7(hair,0); pos8(hair,-40);
+x1=x1'=x2=x11; lft x1l=2.75u;
+y1=x_height+o; y2=.5bar_height; bot y11=-d; top y1'r=h;
+ital_serif(1',2);
+pos3(.5[hair,stem],90); pos4(curve,180);
+pos5(hair,-90); pos6(stem,0);
+x3=.5[w-u,x2]-u; bot y3l=-o;
+rt x4l=w-u; y4=bar_height;
+x5=x3+1.5u; top y5l=x_height+o;
+x6=x2; y6=.5bar_height;
+serif_bot(11); forsuffixes $=11b,11c,11d,11e: x$:=x$+hair; endfor;
+p0=z2r---z1r..{up}_is;
+p1=z2l..z3l..z4l..{left}z5l..{down}z6l;
+p2=z11f--z2r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p1;
+y7=ypart(point tim0 of p0)+stem; x7l=x1l;
+y8=3/4bar_height; lft x8l=.5u;
+p3=z8r{dir30}..z7r{up};
+p4=z7l---z11a;
+(tim4,tim5)=p3 intersectiontimes p4;
+filldraw subpath(rundy(p0,(tim0,2curve)),infinity) of p0
+ ..z7l..{dir-150}z8l
+ ..subpath(0,rundy(p3,tim4).zpet) of p3
+ ..subpath(rundy(p4,tim5),infinity) of p4
+ ..{left}z11b..z11c---z11d..{left}z11e
+ ..{up}subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p2,tim3),rundy(p1,(tim1,1.5curve)).zpet) of p1..cycle;
+infill z6r{down}..z3r..z4r..{left}z5r..cycle;
+penlabels(1,1',2,3,4,5,6,7,8,11);
+endchar;
+
+iff known chars.latin_q:
+bskchar "The italic letter q";
+beginchar(chars.latin_q,10.5u#,x_height#,desc_depth#); uni "0x0071";
+italcorr x_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=3oblu;
+pos1(stem,0); pos2(stem,0);
+x1=x2; rt x1r=w-2u;
+y1=h; y2=-d; z1'=z1r+.5stem*dir60;
+serif_bot(2); forsuffixes $=2b,2c,2d,2e: x$:=x$-hair; endfor;
+pos4(hair,-90); pos5(curve,180);
+pos6(.5[hair,stem],90); pos7(stem,0);
+x4=.5[u,x2]-.5u; bot y4r=-o;
+lft x5r=u; y5=bar_height;
+x6=x4+u; top y6r=x_height+o;
+x7=x2; y7=bar_height;
+p0=z7l..{dir40}z1'{dir-120}..z1r---z2f..{right}z2e..z2d---z2c..{right}z2b..z2a---z7l;
+p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-4,tim3)=subpath(4,infinity) of p0 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..cycle;
+infill z7l{down}..z4l..z5l..{right}z6l..cycle;
+penlabels(1,2,4,5,6,7); labels(1');
+endchar;
+
+charscription(9u if bold_face:+u fi,x_height, 0)(
+path p[]; numeric tim[]; oblu:=3oblu;
+pos1(stem,0); pos1'(.5[hair,stem],100); pos2(stem,0); pos2'(.8stem,5);
+pos3(stem,30); pos4(hair,90); pos5(hair,135); pos6(hair,180);
+pos7(hair,150); y7=x_height-.25bar_height; x7r=0;
+z7'=z7l+hair*dir(-110);
+x1l=3u; x2=x2'=x1; y1=bar_height; y2=u; bot y2'=0;
+top y1'r=h+o; x1'=1.5u;
+rt x3r=w-u; y3r=y4-.75like_stem;
+top z4r=(x3l-2hair,x_height+o);
+z3'=z3+.25stem*unitvector(z3-z4);
+x6l=x1r; y6=.8bar_height;
+z5=.75[z6,z4]+.75stem*(unitvector(z4-z6) rotated 90);
+z8=.6[z1,z1']+.6stem*(unitvector(z1'-z1) rotated -90); pos8(stem,angle(z1'-z1)-90);
+p1:=z2r---z6l..z5l..{right}z4l..z3l..z3'..z3r{up}..{dir180}z4r..z5r..{down}z6r;
+p2:=z1r{up}..z8r..{left}z1'r..z7r{dir-120}..z7'&z7'..z7l{dir60}..{right}z1'l..z8l..z1l---z2l..z2'l..z2'r..{up}z2r;
+(tim1-8,tim2)=subpath(8,infinity) of p1 intersectiontimes p2 if hppp<=300: shifted right fi;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2---cycle;
+penlabels(1,1',2,2',3,4,5,6,7,8); labels(3',7');
+);
+
+iff known chars.latin_r:
+bskchar "The italic letter r";
+beginchar(chars.latin_r,9u# if bold_face: +u# fi, x_height#, 0); uni "0x0072";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_racute:
+bskchar "The italic letter r with acute";
+beginchar(chars.latin_racute,9u# if bold_face: +u# fi, asc_height#, 0); uni "0x0155";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x1r;
+acute(100,101);
+endchar;
+
+iff known chars.latin_rcaron:
+bskchar "The italic letter r with caron";
+beginchar(chars.latin_rcaron,9u# if bold_face: +u# fi, asc_height#, 0); uni "0x0159";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x1r;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_rdoublegrave:
+bskchar "The italic letter r with double grave";
+beginchar(chars.latin_rdoublegrave,9u#,asc_height#,0); uni "0x0211";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,x1);
+endchar;
+
+iff known chars.latin_rcedilla:
+bskchar "The italic letter r with cedilla (treated as comma)";
+beginchar(chars.latin_rcedilla,9u#,x_height#,.75comma_depth#); uni "0x0157";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x1; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_rinvbreve:
+bskchar "The italic letter r with inverted breve";
+beginchar(chars.latin_rinvbreve,9u#,asc_height#,0); uni "0x0213";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x1r; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+charscription(7u,x_height,0)(
+numeric theta;
+lft x1l=1.5u; rt x2r=w-1.2u;
+h-y1l=.9y2r=2.2u;
+theta=angle(z1l-z2r)-135;
+pos1(stem,theta); pos2(stem,theta);
+pos3(hair,-90); pos4(hair,-90);
+pos5(.75[hair,stem],30); pos6(.75[hair,stem],20);
+x3-o=x4=.5w; top y3l=h+o; bot y4l=-o;
+rt x5r=w-u; y5r=y3-.75like_stem;
+lft x6l=u; y6l=y4+like_stem;
+z5'=z5l+.25stem*unitvector(z5-z3);
+z6'=z6+.25stem*unitvector(z6-z4);
+filldraw z5r..z3l{left}..z1l..tension atleast 1.5..z2l
+ ..{left}z4l..z6r{up}..z6'..z6l..{right}z4r..z2r
+ ..tension atleast 1.5..z1r..{right}z3r..z5l..z5'..cycle;
+penlabels(0,1,2,3,4,5,6); labels(5',6');
+);
+
+iff known chars.latin_s:
+bskchar "The italic letter s";
+beginchar(chars.latin_s,7u#, x_height#, 0); uni "0x0073";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_scaron:
+bskchar "The italic letter s with caron";
+beginchar(chars.latin_scaron,7u#, asc_height#, 0); uni "0x0161";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3; x100r=u;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_scircumflex:
+bskchar "The italic letter s with circumflex";
+beginchar(chars.latin_scircumflex,7u#, asc_height#-.1x_height#, 0); uni "0x015D";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3; x102-x100=5u;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_sacute:
+bskchar "The italic letter s with acute";
+beginchar(chars.latin_sacute,7u#, asc_height#, 0); uni "0x015B";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+acute(100,101);
+endchar;
+
+iff known chars.latin_scommabelow:
+bskchar "The italic letter s with comma below";
+beginchar(chars.latin_scommabelow,7u#,x_height#,.75comma_depth#); uni "0x0219";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_scedilla:
+bskchar "The italic letter s with cedilla";
+beginchar(chars.latin_scedilla,7u#, x_height#, .65desc_depth#); uni "0x015F";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, tim[];
+path p[];
+lft x1l=1.5u; rt x2r=w-1.2u;
+h-y1l=.9y2r=2.2u;
+theta=angle(z1l-z2r)-135;
+pos1(stem,theta); pos2(stem,theta);
+pos3(hair,-90); pos4(hair,-90);
+pos5(.75[hair,stem],30); pos6(.75[hair,stem],20);
+pos7(.5stem,0); pos8(.5stem,0); pos9(.8stem,0); pos10(.5stem,-110);
+x3-o=x4=.5w; top y3l=h+o; bot y4l=-o;
+rt x5r=w-u; y5r=y3-.75like_stem;
+lft x6l=u; y6l=y4+like_stem;
+z5'=z5l+.25stem*unitvector(z5-z3);
+z6'=z6+.25stem*unitvector(z6-z4);
+x7r=x8r; z7l=z4r; y8=-hair; y9=-.5d;
+rt x9r-lft x10r=4u; x7r-lft x10r=2u; y10r=-d;
+p1:=z6r{up}..z6'..z6l..{right}z4r..z2r..tension atleast 1.5..z1r..{right}z3r..z5l..z5';
+p2:=z8r..{down}z9r..{left}z10r..{right}z10l..{up}z9l..z8l--z7l;
+p3:=reverse(z7r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2);
+tim1=xpart(p1 intersectiontimes (z8l--(x7l,y4l)));
+filldraw z5r..z3l{left}..z1l..tension atleast 1.5..z2l
+ ..{left}z4l..{up}z6r..subpath(0,rundy(p1,3).zpet) of p1
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10); labels(5',6');
+endchar;
+
+iff known chars.latin_long_s:
+bskchar "The italic letter long s";
+beginchar(chars.latin_long_s,7u#,asc_height#,desc_depth#); uni "0x017F";
+italcorr asc_height#*slant+3.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); pos6(stem,30);
+x1=x2; x1=.5w;
+y2=-.5d; .5[y1,y2]=.5(h-d);
+bot y4r=-d-o; if monospace: lft x5r=0; x4=.5[x5,x2]; else: x4=.5u; lft x5r=x4-x1; fi y5l=.75[y4l,y2];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=h+o; x6-x1=x2-x5; y6r=y3-1.5like_stem; x3=.5[x1,x6];
+z6'=z6+.25stem*unitvector(z6-z3);
+pos7(hair,90); pos8(hair,90);
+y7=y8=bot x_height;
+x8=x1l; lft x7=.5u;
+filldraw z4r{right}..z2r---z1r
+ ..{right}z3r..z6l..z6'..z6r{up}..z3l{left}
+ ..z1l---obl(8r,1l,7r)---z7r..z7l
+ ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up}
+ ..z5'..z5r..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(5',6');
+endchar;
+
+iff known chars.latin_eszet:
+bskchar "The italic german eszet";
+beginchar(chars.latin_eszet,10u#,asc_height#,desc_depth#); uni "0x00DF";
+italcorr .5[asc_height#,x_height#]*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta;
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos3(hair,-90);
+pos4(hair,-90); pos5(stem,-150); pos6(hair,0);
+x1=x2; x1=3u;
+y2=-.5d; .5[y1,y2]=.5(h-d);
+bot y4r=-d-o; if monospace: lft x5r=0; x4=.5[x5,x2]; else: x4=.5u; lft x5r=x4-x1; fi
+y5l=.75[y4l,y2];
+z5'=z5l+.5stem*unitvector(z5-z4);
+top y3l=h+o; x6-x1=x2-x5; y6r=.5[y3,y12]; x3=.5[x1,x6];
+pos7(hair,90); pos8(hair,90);
+y7=y8=bot x_height;
+x8=x1l; lft x7=.75u;
+lft x10l=x1r+2u; rt x11r=w-u;
+x_height-y10l=.9y11r=2.2u;
+theta=angle(z10l-z11r)-135;
+pos10(stem,theta); pos11(stem,theta);
+pos12(hair,-90); pos13(hair,-90);
+pos14(.75[hair,stem],20);
+x12-o=x13=x3+1.2u; top y12l=x_height+o; bot y13l=-o;
+lft x14l=x1r+1.5u; y14l=y13+like_stem;
+z14'=z14+.25stem*unitvector(z14-z13);
+filldraw z4r{right}..z2r---z1r
+ ..{right}z3r..z6l
+ ..z12l{z8-z6}..z10l..tension atleast 1.5..z11l
+ ..{left}z13l..z14r{up}..z14'..z14l..{right}z13r..z11r
+ ..tension atleast 1.5..z10r..{z6-z8}z12r
+ ..z6r..z3l{left}
+ ..z1l---obl(8r,1l,7r)---z7r..z7l
+ ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up}
+ ..z5'..z5r..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14); labels(5',14');
+endchar;
+
+charscription(7.5u,.4[asc_height,x_height],0)(
+oblu:=2oblu;
+pos1(stem,0); pos1'(.8stem,5); pos2(stem,0);
+pos4(hair,90); pos4'(hair,90); pos5(hair,90); pos5'(hair,90);
+x1=x1'=x2=.5w;
+y1=h-u; top y1'=h; y2=.35bar_height;
+y4=y4'=y5=y5'=bot x_height; lft x4=u; rt x5=w-u;
+x4'=x1l; x5'=x1r;
+ital_hook(2,3).alt;
+filldraw z1l---obl(4'r,1l,4r)---z4r..z4l---obl(4'l,4l,2l)
+ ---_ih---obl(5'l,2r,5l)---z5l..z5r---obl(5'r,5r,1r)
+ ---z1r..z1'r..z1'l--cycle;
+penlabels(1,1',2,4,4',5,5');
+);
+
+iff known chars.latin_t:
+bskchar "The italic letter t";
+beginchar(chars.latin_t,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0074";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_tcommabelow:
+bskchar "The italic letter t with comma below";
+beginchar(chars.latin_tcommabelow,7.5u#,.4[asc_height#,x_height#],.75comma_depth#); uni "0x021B";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x2'l; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_tcaron:
+bskchar "The italic letter t with caron (treated like comma)";
+beginchar(chars.latin_tcaron,7.5u# if bold_face: +.5u# fi, asc_height#, 0); uni "0x0165";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+rt x100'''=w-u; top y100''r=h;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_tcedilla:
+bskchar "The italic letter t with cedilla";
+beginchar(chars.latin_tcedilla,7.5u#,.4[asc_height#,x_height#],.65desc_depth#); uni "0x0163";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+oblu:=2oblu;
+pos1(stem,0); pos1'(.8stem,5); pos2(stem,0);
+pos4(hair,90); pos4'(hair,90); pos5(hair,90); pos5'(hair,90);
+pos6(.5stem,0); pos7(.5stem,0); pos8(.8stem,0); pos9(.5stem,-110);
+x1=x1'=x2=.5w;
+y1=h-u; top y1'=h; y2=.35bar_height;
+y4=y4'=y5=y5'=bot x_height; lft x4=u; rt x5=w-u;
+x4'=x1l; x5'=x1r;
+x6r=x7r; z6l=z2'l; y7=-hair; y8=-.5d;
+rt x8r-lft x9r=4u; x6r-lft x9r=2u; y9r=-d;
+ital_hook(2,3).alt;
+p1:=z7r..{down}z8r..{left}z9r..{right}z9l..{up}z8l..z7l--z6l;
+p2:=reverse(z6r{down}..subpath (rundy(p1,(0,curve)),infinity) of p1);
+tim1=xpart(_ih intersectiontimes (z7l--(x6l,y2')));
+tim2=xpart(_ih intersectiontimes (z7r--(x6r,y2')));
+filldraw z1l---obl(4'r,1l,4r)---z4r..z4l---obl(4'l,4l,2l)
+ ---subpath(0,rundy(_ih,tim1).zpet) of _ih
+ ..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2
+ ..subpath(rundy(_ih,tim2),infinity) of _ih---obl(5'l,2r,5l)---z5l..z5r---obl(5'r,5r,1r)
+ ---z1r..z1'r..z1'l--cycle;
+penlabels(1,1',2,4,4',5,5',6,7,8,9);
+endchar;
+
+iff known chars.latin_tstroke:
+bskchar "The italic letter t with stroke";
+beginchar(chars.latin_tstroke,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0167";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(stem,0); pos1'(.8stem,5); pos2(stem,0);
+pos4(hair,90); pos4'(hair,90); pos5(hair,90); pos5'(hair,90);
+pos6(bar,90); pos6'(bar,90); pos7(bar,90); pos7'(bar,90);
+x1=x1'=x2=.5w;
+y1=h-u; top y1'=h; y2=.35bar_height;
+y4=y4'=y5=y5'=bot x_height; lft x4=u; rt x5=w-u;
+x4'=x1l; x5'=x1r;
+x7-x6=4u; y7=y7'=y6=y6'=bar_height; .5[x6,x7]=x1;
+x6'=x1l; x7'=x1r; bskpoints(6,7,.5bar,.5bar);
+ital_hook(2,3).alt;
+filldraw z1l---obl(4'r,1l,4r)---z4r..z4l---obl(4'l,4l,2l)
+ ---obl(6'r,4'l,6r)---z6rr..z6l---obl(6'l,6l,2l)
+ ---_ih---obl(7'l,2r,7l)---z7ll..z7r---obl(7'r,7r,1r)---obl(5'l,2r,5l)---z5l..z5r---obl(5'r,5r,1r)
+ ---z1r..z1'r..z1'l--cycle;
+penlabels(1,1',2,4,4',5,5',6,6',7,7'); labels(6rr,7ll);
+endchar;
+
+charscription(10.5u,x_height,0)(
+numeric H; H=x_height;
+numeric tim[], dl; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+pos3(stem,0); pos3'(.8stem,5); pos4(stem,0);
+pos6(.5[hair,stem],90); pos7(hair,180);
+x1=x2; lft x1l=2u; x3=x3'=x4; rt x3r=w-2u;
+y1=H-.3bar_height; y2=y4=.35bar_height;
+y3=h-u; top y3'=h; bot y6l=-o; x6=1/3[x2,x4];
+x7r=x3l; y7=bar_height;
+ital_kooh(1,0); ital_hook(4,5).alt;
+p0=reverse _ik---z2r..z6r..z7r---z3l..z3'l..z3'r..z3r---reverse _ih..{up}z7r;
+p1=z7l{down}..z6l..z2l---z1l;
+dl:=length p0;
+z8=bsktouch(subpath(dl-2,dl) of p0,left,p1,right);
+tim0-dl+2=xpart(subpath(dl-2,dl) of p0 intersectiontimes (z8--(w,y8)));
+tim1=xpart(p1 intersectiontimes (z8--(x6,y8)));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+penlabels(0,1,2,3,3',4,6,7);
+);
+
+iff known chars.latin_u:
+bskchar "The italic letter u";
+beginchar(chars.latin_u,10.5u#, x_height#, 0); uni "0x0075";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_uacute:
+bskchar "The italic letter u with acute";
+beginchar(chars.latin_uacute,10.5u#, asc_height#, 0); uni "0x00FA";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x6;
+acute(100,101);
+endchar;
+
+iff known chars.latin_uring:
+bskchar "The italic letter u with ring";
+beginchar(chars.latin_uring,10.5u#, asc_height#, 0); uni "0x016F";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=.5[x1r,x3l]; lft x101=.5[x6,x2r];
+ring(100,101);
+endchar;
+
+iff known chars.latin_uumlaut:
+bskchar "The italic letter u with umlaut";
+beginchar(chars.latin_uumlaut,10.5u#, asc_height#-dot_size#, 0); uni "0x00FC";
+italcorr (asc_height#-dot_size#)*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x100=x1r; rt x101=x3l;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ugrave:
+bskchar "The italic letter u with grave";
+beginchar(chars.latin_ugrave,10.5u#,asc_height#,0); uni "0x00F9";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x1r,x3l];
+grave(100,101);
+endchar;
+
+iff known chars.latin_udoublegrave:
+bskchar "The italic letter u with double grave";
+beginchar(chars.latin_udoublegrave,10.5u#,asc_height#,0); uni "0x0215";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,x6);
+endchar;
+
+iff known chars.latin_umacron:
+bskchar "The italic letter u with macron";
+beginchar(chars.latin_umacron,10.5u#,.5[asc_height#,x_height#],0); uni "0x016B";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x1r; x101=x3l;
+macron(100,101);
+endchar;
+
+iff known chars.latin_ucaron:
+bskchar "The italic letter u with caron";
+beginchar(chars.latin_ucaron,10.5u#,asc_height#,0); uni "0x01D4";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x1,x3];
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_ucircumflex:
+bskchar "The italic letter u with circumflex";
+beginchar(chars.latin_ucircumflex,10.5u#,asc_height#-.1x_height#,0); uni "0x00FB";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x1,x3];
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_ubreve:
+bskchar "The italic letter u with breve";
+beginchar(chars.latin_ubreve,10.5u#,asc_height#,0); uni "0x016D";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x1; x102=x3;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_uinvbreve:
+bskchar "The italic letter u with inverted breve";
+beginchar(chars.latin_uinvbreve,10.5u#,asc_height#,0); uni "0x0217";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x1; x102=x3;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_uhumlaut:
+bskchar "The italic letter u with Hungarian umlaut";
+beginchar(chars.latin_uhumlaut,10.5u#,asc_height#,0); uni "0x0171";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=3u; .5[x100,x101]=x3l-o;
+h_umlaut(100,101,102,103,2u);
+endchar;
+
+iff known chars.latin_utilde:
+bskchar "The italic letter u with tilde";
+beginchar(chars.latin_utilde,10.5u#,asc_height#,0); uni "0x0169";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=6u;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_uogonek:
+bskchar "The italic letter u with ogonek";
+beginchar(chars.latin_uogonek,10.5u#, x_height#, .85desc_depth#); uni "0x0173";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], dl; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+pos3(stem,0); pos3'(.8stem,5); pos4(stem,0);
+pos6(.5[hair,stem],90); pos7(hair,180);
+pos8(stem,0); pos9(curve,0); pos10(hair,45); pos11(hair,160);
+x1=x2; lft x1l=2u; x3=x3'=x4; rt x3r=w-2u;
+y1=x_height-.3bar_height; y2=y4=.35bar_height;
+y3=h-u; top y3'=h; bot y6l=-o; x6=1/3[x2,x4];
+x7r=x3l; y7=bar_height;
+ital_kooh(1,0); ital_hook(4,5).alt;
+x8=x9l+1.5u; z8r=z4'l; x10-x9l=3u; rt x11l=x10+1.5u;
+y9=-.5d; bot y10l=-d; y11=-2/3d;
+p0=reverse _ik---z2r..z6r..z7r---z3l..z3'l..z3'r..z3r---reverse _ih..{up}z7r;
+p1=z7l{down}..z6l..z2l---z1l;
+p2=reverse(z8l{z9l-z8r}..z9l...z10l..{z8-z9}z11l..z11r{z9-z8}..z10r..z9r..z8r);
+dl:=length p0;
+z12=bsktouch(subpath(dl-2,dl) of p0,left,p1,right);
+tim1=xpart(p1 intersectiontimes (z12--(x6,y12)));
+tim2=xpart(p0 intersectiontimes ((x8r,-2o)--(x8r,y6)));
+filldraw subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+penlabels(0,1,2,3,3',4,6,7,8,9,10,11);
+endchar;
+
+iff known chars.latin_v:
+bskchar "The italic letter v";
+beginchar(chars.latin_v,11u#,x_height#,0); uni "0x0076";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+pos1(stem,0); pos2(curve,10); pos3(hair,90);
+pos6(.5[hair,stem],180); pos7(stem,240);
+top y1=h; x1=4u;
+lft x2l=2u; y2l=.4bar_height;
+bot y3l=-o; x3=.55w;
+rt x6l=w-u; y6=bar_height;
+top y7l=h+o; x7r=x6r-curve;
+z7'=z7+.25stem*unitvector(z7-z6);
+z1'=z1l+stem*unitvector(z2l-z1l);
+pos4(hair,170); pos5(curve,90); pos1'(1/3[hair,stem],angle(z1l-z2l));
+y4=y1'l-hair; lft x4r=0; top y5r=h+o; x5=1/3[x4,x1];
+p0=z1'l{left}..z5l..{dir-80}z4l;
+p1=reverse (z1'l{down}..z2l..{right}z3l);
+filldraw subpath(rundy(p0,0),infinity) of p0
+ ..{dir110}z4r..z5r..{right}z1'r..z1
+ ..z1r{down}..z2r..{right}z3r..{up}z6r
+ ..{z7r-z6}z7r..z7'..{right}z7l..{down}z6l
+ ..subpath(0,rundy(p1,length p1).zpet) of p1..cycle;
+penlabels(1,1',2,3,4,5,6,7); labels(9');
+endchar;
+
+charscription(15u,x_height,0)(
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos1(stem,0); pos2(curve,10); pos3(hair,90);
+pos6(.5[hair,stem],180); pos7(stem,240);
+top y1=h; x1=4u;
+lft x2l=2u; y2l=.4bar_height;
+bot y3l=-o; x3=1/3w;
+rt x6l=w-u; y6=bar_height;
+top y7l=h+o; x7r=x6r-1.5curve;
+z7'=z7+.25stem*unitvector(z7-z6);
+z1'=z1l+stem*unitvector(z2l-z1l);
+pos4(hair,170); pos5(curve,90); pos1'(1/3[hair,stem],angle(z1l-z2l));
+y4=y1'l-hair; lft x4r=0; top y5r=h+o; x5=1/3[x4,x1];
+pos8(hair,180); pos9(hair,-90); pos10(.5[hair,stem],0); pos11(.5[hair,stem],90);
+y8=y10=.5bar_height; .5[x8,x10]=x9=.55w; x8-x10=1/8w; top y9l=.8x_height;
+.5[x3,x11]=.5w+.5u; y11l=y3l;
+p0=z1'l{left}..z5l..{dir-80}z4l;
+p1=z11l{left}..z10l..z9l..z8l..{left}z3l..z2l..{up}z1'l;
+p2=z3r{right}..z8r..z9r..z10r..{right}z11r;
+(tim0,tim1)=p2 intersectiontimes p1;
+(tim2,tim3-3)=p2 intersectiontimes subpath(3,4) of p1;
+(tim4,tim5)=subpath(0,1) of p1 intersectiontimes p2;
+(tim6,tim7-2)=subpath (0,1) of p1 intersectiontimes subpath (2,infinity) of p1;
+(tim8,tim9-2)=subpath(0,1) of p2 intersectiontimes subpath(2,infinity) of p2;
+filldraw subpath(rundy(p0,0),infinity) of p0
+ ..{dir110}z4r..z5r..{right}z1'r..z1..z1r{down}..z2r
+ ..subpath(0,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p1,tim4),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..z6r..{z7r-z6}z7r..z7'..{right}z7l..{dir-80}z6l
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p1,tim7),rundy(p1,length p1).zpet) of p1..cycle;
+infill subpath(rundy(p2,tim8),rundy(p2,tim9).zpet) of p2..cycle;
+penlabels(1,1',2,3,4,5,6,7,8,9,10,11); labels(7');
+);
+
+iff known chars.latin_w:
+bskchar "The italic letter w";
+beginchar(chars.latin_w,15u#,x_height#,0); uni "0x0077";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_wcircumflex:
+bskchar "The italic letter w with circumflex";
+beginchar(chars.latin_wcircumflex,15u#,asc_height#-.1x_height#,0); uni "0x0175";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x9;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_wgrave:
+bskchar "The italic letter w with grave";
+beginchar(chars.latin_wgrave,15u#,asc_height#,0); uni "0x1E81";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x9;
+grave(100,101);
+endchar;
+
+iff known chars.latin_wacute:
+bskchar "The italic letter w with acute";
+beginchar(chars.latin_wacute,15u#,asc_height#,0); uni "0x1E83";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x9,x10];
+acute(100,101);
+endchar;
+
+iff known chars.latin_wumlaut:
+bskchar "The italic letter w with umlaut";
+beginchar(chars.latin_wumlaut,15u#,asc_height#-dot_size#,0); uni "0x1E85";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x3; x101=x11;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_x:
+bskchar "The italic letter x";
+beginchar(chars.latin_x,11u#,x_height#,0); uni "0x0078";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos1(stem,10); pos2(hair,150); pos1'(.5[hair,stem],100);
+pos3(stem,10); pos4(hair,150); pos3'(.5[hair,stem],90);
+pos11(.8stem,170); pos12(hair,30); pos11'(.5[hair,stem],80);
+pos13(.8stem,170); pos14(hair,30); pos13'(.5[hair,stem],90);
+y1=y11=bar_height; lft x1l=4u; x11r=w-x1r;
+x2r=.5u; y2=y12=h-.25bar_height; top y1'r=h+o=top y11'r; x1'=u; x11'=w-u; x12l=w-.25u;
+z2'=z2l+hair*dir(-110); z12'=z12l+hair*dir(-80);
+rt x3r=w-3.5u; y3=y13=.3bar_height; x13r=w-x3r;
+rt x4l=w-.5u; top y4=y14=.4bar_height; bot y3'l=bot y13'l=-o; x3'=.45[x3,x4]; x13'=.45[x13,x14];
+lft x14r=0;
+z4'=z4r+hair*up; z14'=z14r+hair*up;
+p0=z2'..z2l{dir60}..z1'l..z1l---z3l..z3'l..z4l if dpi>300:..z4'&z4'.. else:&z4l{up}..{down}z4r& fi z4r..z3'r..z3r---z1r..z1'r..z2r+left{dir-100}..z2'+left;
+p1=if dpi>300:z12'.. fi z12l..z11'l..z11l---z13l..z13'l..z14l if dpi>300:..z14'&z14'..else:&z14l{up}..{down}z14r& fi z14r..z13'r..z13r---z11r..z11'r..z12r if dpi>300:..z12'fi;
+(tim0,tim1-4)=p0 intersectiontimes subpath (4,infinity) of p1;
+(tim2,tim3)=subpath (0,4) of p1 intersectiontimes p0;
+(tim4-4,tim5)=subpath(4,infinity) of p0 intersectiontimes p1;
+numeric node; node:=if dpi>300:9 else: 8 fi;
+(tim6-node,tim7-node)=subpath (node,infinity) of p1 intersectiontimes subpath(node,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(rundy(p1,tim2),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,tim4).zpet) of p0
+ ..reverse subpath(0,rundy(p1,tim5).zpet) of p1
+ ..reverse subpath(rundy(p1,tim6),infinity) of p1
+ ..subpath(rundy(p0,tim7),infinity) of p0
+ ..cycle;
+penlabels(1,1',2,3,3',4,11,11',12,13,13',14); labels(2',4',12',14');
+endchar;
+
+charscription(10.5u,x_height,desc_depth)(
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos1(stem,10); pos2(hair,150); pos1'(.5[hair,stem],100);
+pos3(stem,10); pos4(hair,-40); pos5(.5[hair,stem],-90);
+pos6(stem,30); pos8(stem,0); pos9(stem,60);
+y1=bar_height; lft x1l=3.5u;
+x2r=0; y2=h-.25bar_height; top y1'r=h+o; x1'=u;
+z2'=z2l+hair*dir(-110);
+x3l=.5w; y3=0; y4=-.75d; z4=z3+whatever*dir-100;
+bot y5r=-d; x6l=.5u; x5=.5[x6,x4]; y6l=y5+like_stem;
+z6'=z6+.25stem*unitvector(z6-z5);
+rt x8r=w-u; y8=bar_height;
+top y9r=h+o; x9r=x8l-stem;
+z9'=z9+.25stem*unitvector(z9-z8);
+p0=z5r{right}..z4r..z3r---z1r..z1'r..z2r{dir-120}..z2'&
+ z2'..z2l{dir60}..z1'l..z1l---z3l..z4l..{left}z5l..z6r..z6'..z6l..{right}z5r;
+p1=z4r..{up}z8r..{left}z9r..z9'..{z8-z9l}z9l..{dir-80}z8l
+ ..{direction 11 of p0}z4l;
+(tim1,tim2)=p0 intersectiontimes p1;
+tim3-1=xpart(subpath(1,infinity) of p1 intersectiontimes ((0,-o)--(w,-o)));
+filldraw z5r{right}..z4r..subpath(1,rundy(p1,tim3).zpet) of p1..subpath(rundy(p0,2),infinity) of p0..cycle;
+penlabels(1,1',2,3,4,5,6,8,9); labels(2',6',9');
+);
+
+iff known chars.latin_y:
+bskchar "The italic letter y";
+beginchar(chars.latin_y,10.5u#,x_height#,desc_depth#); uni "0x0079";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_ygrave:
+bskchar "The italic letter y with grave";
+beginchar(chars.latin_ygrave,10.5u#,asc_height#,desc_depth#); uni "0x1EF3";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x1r,x9l];
+grave(100,101);
+endchar;
+
+iff known chars.latin_yacute:
+bskchar "The italic letter y with acute";
+beginchar(chars.latin_yacute,10.5u#,asc_height#,desc_depth#); uni "0x00FD";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x1;
+acute(100,101);
+endchar;
+
+iff known chars.latin_ymacron:
+bskchar "The italic letter y with macron";
+beginchar(chars.latin_ymacron,10.5u#,.5[asc_height#,x_height#],desc_depth#); uni "0x0233";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x8;
+macron(100,101);
+endchar;
+
+iff known chars.latin_yumlaut:
+bskchar "The italic letter y with umlaut";
+beginchar(chars.latin_yumlaut,10.5u#,asc_height#-dot_size#,desc_depth#); uni "0x00FF";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x1l-.5dot_size; x101=x9;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ycircumflex:
+bskchar "The italic letter y with circumflex";
+beginchar(chars.latin_ycircumflex,10.5u#,asc_height#-.1x_height#,desc_depth#); uni "0x0177";
+italcorr .5[asc_height#,x_height#]*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+numeric oblu; oblu:=hair;
+x101=x3;
+circumflex(100,101,102);
+endchar;
+
+charscription(9.5u,x_height,0)(
+numeric alpha; oblu:=2oblu;
+path p[];
+lft x1l=u; bot y1l=0; rt x2r=w-u; top y2r=h;
+x2r-x2l=x1r-x1l;
+alpha=diag_ratio(2,stem,y2r-y1l,x2r-x1l);
+pos1(alpha*stem,0); pos2(alpha*stem,0);
+pos1'(.5[hair,stem],angle(z2-z1)); pos2'(.5[hair,stem],angle(z2-z1));
+pos3(hair,170); pos4(curve,90);
+pos5(hair,170); pos6(1.25curve,90);
+z1'=z1r+stem*unitvector(z2r-z1r);
+z2'=z2l+stem*unitvector(z1l-z2l);
+y3=y2'l-hair; lft x3r=u; top y4r=h+o; x4=1/3[x3,x2];
+bot y5=y1'r+hair; rt x5r=w-u; bot y6l=-o-.25curve; x6=1/3[x5,x1];
+p1=z1l{(z2-z1) rotated -5}..z2'l;
+p2=z2'l{left}..z4l..{dir-100}z3l;
+p3=z2r{(z1-z2)rotated 5}..z1'r;
+p4=z1'r{right}..z6r..{dir90}z5r;
+filldraw subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p2,0),infinity) of p2
+ ..{dir90}z3r..z4r..{right}z2'r..z2
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),infinity) of p4
+ ..z5l{dir-80}..z6l..{left}z1'l..z1..cycle;
+penlabels(1,1',2,2',3,4,5,6);
+);
+
+iff known chars.latin_z:
+bskchar "The italic letter z";
+beginchar(chars.latin_z,9.5u#,x_height#,0); uni "0x007A";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_zcaron:
+bskchar "The italic letter z with caron";
+beginchar(chars.latin_zcaron,9.5u#,asc_height#,0); uni "0x017E";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x3r,x2r];
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_zdotabove:
+bskchar "The italic letter z with dot above";
+beginchar(chars.latin_zdotabove,9.5u#,asc_height#-.5dot_size#,0); uni "0x017C";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=.5[x3r,x2r];
+dotabove(100);
+endchar;
+
+iff known chars.latin_zacute:
+bskchar "The italic letter z with acute";
+beginchar(chars.latin_zacute,9.5u#,asc_height#,0); uni "0x017A";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.25[x101,x100]=.5[x3r,x2r];
+acute(100,101);
+endchar;
+
+skal:=.5;
+charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)(
+numeric sair; sair=if medieval: vair else: hair fi;
+pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+);
+
+iff known chars.numeral_zero:
+bskchar "The italic numeral 0";
+beginchar(chars.numeral_zero,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x0030";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_zero:
+bskchar "The superscript italic numeral 0";
+beginchar(chars.superscript_numeral_zero,if monofig: 5.5u# else: if medieval: 5.75u# else:6.5u#fi fi,asc_height#,0); uni "0x2070";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)(
+path p;
+numeric sair; sair=if medieval: vair else: hair fi;
+pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=y0=.5h; .5[x2,x4]=.5[x1,x3]=x0; x2-x4=0; bot y2l=-o; top y4r=h+o;
+p:=z1r{up}..z4r..z3r..z2r..{up}cycle;
+z5=p intersectionpoint ((x0,.25[y4r,y3])--(w,.25[y4r,y3])); z6=z5+stem*unitvector(z0-z5); .5[z6,z7]=z0;
+pos6(hair,angle(z7-z6)+90); pos7(hair,angle(z7-z6)+90);
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill p;
+filldraw bskrule(6,7,hair,hair);
+penlabels(0,1,2,3,4,5,6,7);
+);
+
+iff known chars.numeral_zero_slash:
+bskchar "The italic numeral 0 with slash";
+beginchar(chars.numeral_zero_slash,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_zero_slash:
+bskchar "The superscript italic numeral 0 with slash";
+beginchar(chars.superscript_numeral_zero_slash,if monofig: 5.5u# else: if medieval: 5.75u# else:6.5u#fi fi,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(8u),medfigu,0)(
+oblu:=2.2f_obl;
+path p[];
+pos1(dig_stem,0); pos2(dig_stem,0);
+pos3(hair,90);
+x1=.5w; bot y1=0; x2=x1; top y2=h;
+lft x3=u; x4=x1l;
+y3=if medieval:.5[x_height,bar_height] else: .25[x_height,h] fi; y4=y2-hair;
+p1=z3l{right}..z4; p0=z4---one_serif(1);
+filldraw subpath(rundy(p0,0),infinity) of p0---z2r{dir200}..{left}z3r..
+ subpath(0,rundy(p1,1).zpet) of p1..cycle;
+penlabels(1,2,3); labels(4);
+);
+
+let _saved_char_one=_saved_char;
+numeric _saved_w_one; _saved_w_one:=_saved_w;
+
+iff known chars.numeral_one:
+bskchar "The italic numeral 1";
+beginchar(chars.numeral_one,figw(8u),medfig,0); uni "0x0031";
+italcorr x_height#*slant-2u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_one:
+bskchar "The superscript italic numeral 1";
+beginchar(chars.superscript_numeral_one,if monofig: 5.5u# else: 5u# fi,asc_height#,0); uni "0x00B9";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,serif_o,dig_stem);
+usechar shifted (-x3,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(if medieval: 9u else: 10u fi),medfigu,0)(
+path p[]; numeric tim[]; oblu:=2f_obl;
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos4(hair,0); pos0(vair,-60);
+pos6(1.2curve,270); pos7(hair,-10);
+lft x1r=u; y1=2/3h+hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-if medieval:1.5\\ fi u; y3=2/3h; lft x4l=u; bot y4=-apex_o;
+p0:=z0l{dir60}..z0r{dir-120}..z1r..{right}z2r..{down}z3r..{down}z4r;
+tim0=xpart(p0 intersectiontimes ((0,y4+.1bar_height)--(w,y4+.1bar_height)));
+pos5(hair,angle(direction tim0 of p0)); z5=point tim0 of p0;
+bot y7=y5r+hair; rt x7r=w-u; y6=0; x6=1/2[x7,x4];
+p1=z5l{(x3-x4,.5bar_height)}..z6l..{dir80}z7l;
+z9=bsktouch(p0,right,p1,up);
+tim1=xpart(p0 intersectiontimes (z9--(0,y9)));
+tim2=xpart(p1 intersectiontimes (z9--(x9,0)));
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy(p1,tim2),infinity) of p1..z7r{dir-100}..z6r
+ ..z4r..{up}z4l..z3l{up}..z2l{left}..z1l..cycle;
+penlabels(0,1,2,3,4,5,6,7,8);
+);
+
+iff known chars.numeral_two:
+bskchar "The numeral 2";
+beginchar(chars.numeral_two,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x0032";
+italcorr 2/3h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_two:
+bskchar "The superscript numeral 2";
+beginchar(chars.superscript_numeral_two,if monofig: 5.5u# else: if medieval: 5.5u# else: 6u# fi fi,asc_height#,0); uni "0x00B2";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x1r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.fraction_one_half:
+bskchar "Fraction one half";
+beginchar(chars.fraction_one_half,5.5u#,asc_height#,0); uni "0x00BD";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,vair);
+usechar shifted (-x2-hair,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_one;
+_saved_w:=_saved_w_one;
+usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: + .5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+charscription(figwu(9.5u),medfigu,medfigdu)(
+numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi;
+path p[];
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos4(.45[hair,stem],0); pos0(vair,-60);
+pos5(hair,90); pos6(curve,0); pos7(like_hair,270);
+lft x1r=1.5u; y1=y3+hair; top y2r=h+o; x2=.5w-hair; y0l=y3-hair; x0=.35[x2,x1];
+rt x3r=w-1.75u; y3=if medieval: 2/3h else: .8h fi; lft x4l=1.5u;
+bot y4l=.5(h-d); z4'=(x4l,y4l-like_hair);
+x5=.5w; y5=min(y4+stem,.5[x_height,bar_height]); rt x6r=w-u; y6=.5[y4,-d];
+x7=.55[x5,x4]; bot y7r=-d; rt x8r=u; y8=y7+1.5like_stem;
+p0=z4l{dir60}..{up}z3l..z2l{left}..z1l..{dir60}z0l;
+p1=z0l{dir60}..{dir-120}z0r..z1r..{right}z2r..z3r{down}..{dir-130}z4r..z4'..{dir40}z4l;
+p2=z4l..z5r..z6r..z7r..smitko(8,curve)..z7l..z6l..z5l..z4';
+p3=subpath(3,infinity) of p2;
+z9=bsktouch(p1,down,p2,up);
+tim1-3=xpart(subpath(3,infinity) of p1 intersectiontimes (z9--(x9,y3)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,y6)));
+(tim3,tim4-3)=p1 intersectiontimes p3;
+filldraw p0..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),rundy(p2,(tim4,f_obl)).zpet) of p2
+ ..subpath(tim3,infinity) of p1
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(4',9);
+);
+
+let _saved_char_three=_saved_char;
+numeric _saved_w_three; _saved_w_three:=_saved_w;
+
+iff known chars.numeral_three:
+bskchar "The numeral 3";
+beginchar(chars.numeral_three,figw(9.5u),medfig,medfigd); uni "0x0033";
+italcorr if medieval: 2/3h# else: .8h# fi*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_three:
+bskchar "The superscript numeral 3";
+beginchar(chars.superscript_numeral_three,if monofig: 5.5u# else: 5.75u# fi,asc_height#,0); uni "0x00B3";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,stem,like_hair,like_stem);
+usechar shifted (-x8r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.fraction_one_third:
+bskchar "Fraction one third";
+beginchar(chars.fraction_one_third,5.5u#,asc_height#,0); uni "0x2153";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,stem,like_hair,like_stem);
+usechar shifted (-x2-hair,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_one;
+_saved_w:=_saved_w_one;
+usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: + .5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+charscription(figwu(12u),medfigu,medfigdu)(
+path p[]; numeric tim[]; oblu:=2f_obl;
+pos1(stem,0); pos2(.95stem,0); pos3(hair,0); pos4(hair,90); pos5(stem,90);
+pos6(hair,0); pos8(hair,0);
+rt x1r= rt x2r=w-3.5u; bot y1=-d; top y2=if medieval: .45bar_height else: .9x_height fi;
+lft x3l=u; y3l=if medieval: -stem else: .5x_height fi;
+z4l=(x1r+hair,y3l); rt x5r=w-u; y5l=y3l; y3l:=y3l+hair;
+z2'=z2r+(stem-currentbreadth)*up; z4'=z4r+hair*up;
+top y6=h; x6r=x2l-o; z7l=z3l; pos7(stem,angle(z1-z3)); z7'=1/3[z7r,z4]; z7''=z7'+stem*right;
+x8=x6; y8l=h+apex_o;
+p0:=z1r---z2r..{up}z2'..z2l---z1l;
+p1:=z3r{z2-z3}..z4l..z5l..z5r..z4r..{z3-z2}z3l; p1:=subpath(0,3) of p1;
+p2:=z5r{z4-z5r}..z4'..{z3-z2}z3l;
+p3:=z8l..z6l{z7'-z6}..z7l;
+p4:=z7r..{z6-z7''}z6r..z8r;
+(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p1;
+(tim2,tim3)=subpath(0,1) of p0 intersectiontimes p2;
+(tim4-1,tim5)=subpath(1,infinity) of p0 intersectiontimes p2;
+(tim6-1,tim7)=subpath(1,infinity) of p0 intersectiontimes p1;
+z9=bsktouch(p2,up,p4,left);
+tim8=xpart(p2 intersectiontimes (z9--(x9,-d)));
+tim9=xpart(p4 intersectiontimes (z9--(w,y9)));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,tim9),infinity) of p4..p3
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),infinity) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2',4',7',7'',9);
+);
+
+let _saved_char_four=_saved_char;
+numeric _saved_w_four; _saved_w_four:=_saved_w;
+
+iff known chars.numeral_four:
+bskchar "The numeral 4";
+beginchar(chars.numeral_four,figw(12u),medfig,medfigd); uni "0x0034";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_four:
+bskchar "The superscript numeral 4";
+beginchar(chars.superscript_numeral_four,if monofig: 5.5u# else: 7u# fi,asc_height#,0); uni "0x2074";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,dig_stem);
+usechar shifted (-x3l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.fraction_one_quarter:
+bskchar "Fraction one quarter";
+beginchar(chars.fraction_one_quarter,7u#,asc_height#,0); uni "0x00BC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,stem,like_hair,like_stem);
+usechar shifted (-.5w,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_one;
+_saved_w:=_saved_w_one;
+usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+iff known chars.fraction_three_quarters:
+bskchar "Fraction three quarters";
+beginchar(chars.fraction_three_quarters,7u#,asc_height#,0); uni "0x00BE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,stem,like_hair,like_stem);
+let _saved_char=_saved_char_four;
+_saved_w:=_saved_w_four;
+usechar shifted (-.5w,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_three;
+_saved_w:=_saved_w_three;
+usechar shifted -(x2+hair,if medieval: y7 else: 0 fi) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+charscription(figwu(if medieval: 10.5u else: 9.5u fi),medfigu,medfigdu)(
+numeric theta; theta=if medieval: 0 else: 10 fi;
+path p[]; numeric tim;
+oblu:=2f_obl;
+pos1(hair,0); pos1''(hair,0); pos2(hair,0); pos3(stem,65);
+pos4(hair,-90); pos5(curve,180); pos6(hair,90); pos7(hair,30);
+x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1;
+y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; z3r=z2r; z2'=(x2r,.5[y4,y2]);
+x4=.5w; rt x5l=w-u;
+y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem);
+y5=.48[y4,y6];
+x6=.5w-o; bot y6l=-d; z1''=.75[z1,z2]+o*right;
+lft x7l=u; y7=y6+.15x_height;
+x8=w-u; y8=y1+.5apex_o;
+z1'=z1r+if bold_face:.8\\fi curve*down;
+p0=z1l{down}..z1''l..{down}z2l..{down}z3l..(x3r,y3l)..{up}z3r..{up}z2r..{right}z4r..
+ {down}z5r..{left}z6r..z7r..z7l{(z6-z7) rotated -15}..z6l{right}..
+ {up}z5l;
+p1=z5l{up}..z4l..z2';
+p2=z2r{up}..z1''r..{up}z1r;
+p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l;
+tim=xpart(p2 intersectiontimes ((0,y1')--(w,y1')));
+filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,tim).zpet) of p2..
+subpath(rundy(p3,0),infinity) of p3&cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8);
+);
+
+iff known chars.numeral_five:
+bskchar "The numeral 5";
+beginchar(chars.numeral_five,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x0035";
+italcorr medfig*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_five:
+bskchar "The superscript numeral 5";
+beginchar(chars.superscript_numeral_five,if monofig: 5.5u# else: if medieval: 6.25u# else: 5.75u#fi fi,asc_height#,0); uni "0x2075";
+adjust_fit(0,0);
+pickup tiny.nib; boolean superscript; superscript=true;
+multiply(1.7skal)(curve,hair,stem);
+usechar shifted (-x7r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(10u),fig_height,0)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(curve,0); pos6(hair,-90); pos7(hair,210);
+rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3;
+lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem;
+rt x7l=w-u; y7=y6r-.15x_height;
+p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0);
+p1=z2l{right}..z3l..z4l..{down}z1l;
+p2=z2r{left}..z5r..{right}z6r;
+z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right);
+tim1=xpart(p1 intersectiontimes (z0--(x4,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+filldraw z7r..z7l{(z6-z7) rotated -15}..{left}z6l..z5l..{right}z2l..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1r{up}..z4r..z3r..z2r..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+);
+
+iff known chars.numeral_six:
+bskchar "The numeral 6";
+beginchar(chars.numeral_six,figw(10u),fig_height#,0); uni "0x0036";
+italcorr fig_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_six:
+bskchar "The superscript numeral 6";
+beginchar(chars.superscript_numeral_six,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2076";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,stem);
+usechar shifted (-x5l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(11u),medfigu,medfigdu)(
+path p; numeric tim[];
+pos1(hair,0); pos2(curve,0); pos3(curve,90); pos4(.35x_height,90); pos1'(hair,90);
+rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem;
+y3r=y1r+.5stem=y4r;
+lft x4l=u; x3=x4r+2hair; x3l:=x3l+o;
+top y5r=y3; x5r=x5l=1/3[x3,x1']; y4r-y5r=1.5(y3l-y5l);
+p:=z2l{dir80}...{z1-z2r}z1l;
+y1-y0=hair-currentbreadth;
+tim1=xpart(p intersectiontimes ((0,y0)--(w,y0))); z1'=point tim1 of p + u*left;
+filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p,(tim1,curve)).zpet) of p..z1'l{left}
+ ..z5l..z3l..{z4l-z4r}z4l..z4l+left..z4..z4r&z4r..z5r..{right}z1'r--cycle;
+penlabels(1,1',2,3,4,5);
+);
+
+iff known chars.numeral_seven:
+bskchar "The numeral 7";
+beginchar(chars.numeral_seven,figw(11u),medfig,medfigd); uni "0x0037";
+italcorr medfig*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_seven:
+bskchar "The superscript numeral 7";
+beginchar(chars.superscript_numeral_seven,if monofig: 5.5u# else: 6.5u# fi,asc_height#,0); uni "0x2077";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,stem);
+usechar shifted (-x4l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(8.5u),fig_height,0)(
+path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl;
+testem=.5[curve, hair]; tlstem=.75[curve,stem];
+pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0);
+pos5(vair,90); pos6(vair,90);
+lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h;
+x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3];
+p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{left}..z3r..z0r..z2r..z5r{left};
+p2=z4l{down}..z0{dir-160}..{down}z1l;
+p3=z5l{right}..z2l..z0l..z3l..{right}z6l;
+p4=z1r{up}..z0{dir20}..{up}z4r;
+p5=z6l{left}..z3l..z0l..z2l..z5l{left};
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p3 intersectiontimes p4;
+(tim5,tim6)=p5 intersectiontimes p2;
+(tim7,tim8)=p1 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..
+ subpath(0,rundy(p3,tim3).zpet) of p3..
+ subpath(rundy(p4,tim4),infinity) of p4..cycle;
+infill subpath(0,rundy(p5,tim5).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle;
+infill subpath(rundy(p1,tim7),infinity) of p1..
+ subpath(0,rundy(p4,tim8).zpet) of p4..cycle;
+penlabels(0,1,2,3,4,5,6);
+);
+
+iff known chars.numeral_eight:
+bskchar "The numeral 8";
+beginchar(chars.numeral_eight,figw(8.5u),fig_height#,0); uni "0x0038";
+italcorr .76fig_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_eight:
+bskchar "The superscript numeral 8";
+beginchar(chars.superscript_numeral_eight,if monofig: 5.5u# else: 5.25u# fi,asc_height#,0); uni "0x2078";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,stem);
+usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(10u),medfigu,medfigdu)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90);
+pos5(curve,0); pos6(hair,-90); pos7(hair,210);
+lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi;
+rt x5r=w-u; y5r=y1r-stem;
+bot y6r=-d-o; x6=.5w-.75stem;
+lft x7r=u; y7=y6+.15x_height;
+p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0);
+p1=z2r{right}..z1r{up}..z4r..z3r;
+p2=z4l{right}..z5l..{left}z6l;
+z0=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(w,y0)));
+filldraw z7l..{(z6-z7) rotated -15}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1l{up}..z4l..z3l..z2l..cycle;
+penlabels(1,2,3,4,5,6,7);
+);
+
+iff known chars.numeral_nine:
+bskchar "The numeral 9";
+beginchar(chars.numeral_nine,figw(10u),medfig,medfigd); uni "0x0039";
+italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_nine:
+bskchar "The superscript numeral 9";
+beginchar(chars.superscript_numeral_nine,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2079";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x3r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.sign_query:
+bskchar "Italic question mark";
+beginchar(chars.sign_query, 9u#+punct_fit#, asc_height#, 0); uni "0x003F";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0);
+pos4(curve,0); pos5(hair,90); pos6(vair,120);
+lft x1r=u+punct_fit; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-punct_fit)+punct_fit-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5(w-punct_fit)+punct_fit; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+filldraw z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l
+ ..{dir-120}z0r..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r
+ ..cycle;
+bot z100=(x5,.5dot_size); dot(100);
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_turned_query:
+bskchar "Turned italic question mark";
+beginchar(chars.sign_turned_query, 9u#, asc_height#-desc_depth#, desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(vair,60); pos1(.45[hair,stem],180); pos2(hair,-90); pos3(curve,0);
+pos4(curve,0); pos5(hair,-90); pos6(vair,240);
+lft x1r=u; y1=-d+(asc_height-.5[asc_height,x_height])-hair; bot y2r=-d-o; x2=.5w-hair;
+y0l=y1+2hair; x0=.35[x2,x1];
+rt x3r=w-u; y3=-d+(asc_height-.5[asc_height,x_height])+hair; x4=x0; y4=-d+(asc_height-bar_height);
+x5=.5w; top y5l=h-2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+filldraw z6l{dir120}..z5l..z4l..z3l{down}..z2l{left}..z1l..{dir-60}z0l
+ ..{dir150}z0r..z1r..{right}z2r..{up}z3r..z4r..z5r..{dir-60}z6r
+ ..cycle;
+top z100=(x5,h-.5dot_size); dot(100);
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_spanish_query:
+bskchar "Reversed italic question mark";
+beginchar(chars.sign_spanish_query, 9u#, asc_height#-desc_depth#, desc_depth#); uni "0x00BF";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(vair,120); pos1(.45[hair,stem],0); pos2(hair,-90); pos3(curve,180);
+pos4(curve,180); pos5(hair,-90); pos6(vair,-60);
+rt x1r=w-u; y1=-d+(asc_height-.5[asc_height,x_height])-hair; bot y2r=-d-o; x2=.5w+hair;
+y0l=y1+2hair; x0=.35[x2,x1];
+lft x3r=u; y3=y1+2hair; x4=x0; y4=-d+(asc_height-bar_height);
+x5=.5w; top y5l=h-2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+filldraw z6l{dir60}..z5l..z4l..z3l{down}..z2l{right}..z1l..{dir240}z0l
+ ..{dir60}z0r..z1r..{left}z2r..{up}z3r..z4r..z5r..{dir240}z6r
+ ..cycle;
+top z100=(x5,h-.5dot_size); dot(100);
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_at:
+bskchar "Italic at sign";
+beginchar(chars.sign_at, 16u#, asc_height#-.3desc_depth#, .6desc_depth#); uni "0x0040";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric H, W, shift; H:=.9x_height; W=.9*10.5u; oblu:=2oblu;
+path p[]; numeric tim[];
+shift=.5(w-W)+.5u;
+pos1(stem,0); pos2(stem,0);
+x1=x2; rt x2r=W-if monospace:1.5u else: 2u fi+shift;
+top y1=H-hair; y2=.35bar_height;
+pos4(hair,90); pos5(curve,180); pos6(.5[hair,stem],-90);
+pos7(stem,0); x7=x1; y7=.5bar_height;
+pos11(hair,0); pos12(hair,90); pos13(hair,180); pos14(hair,270); pos15(hair,0);
+top y4r=H+o; x4=.5W+u+shift; y5=.9bar_height; lft x5r=if monospace: .25u else: 1.5u fi +shift;
+bot y6r=-o; x6=x4-u;
+rt x11r=w if not monospace: -.5u fi; lft x13r=u; y11=y13=bar_height; y15=if monospace:-u else: 0fi; rt x15r=w;
+top y12r=h+o; bot y14r=-d+o; x12=x14-u=.5w;
+p0=z4r{left}..z5r..z6r..{up}z7r;
+ital_hook(2,3);
+p1=z2l{down}..z2'l..{up}z11r;
+p2=z4l{left}..z5l..z6l..{up}z7l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p1,tim1),2) of p1..{left}z12r..z13r
+ ..{right}z14r..{z3'-.5[z15,z2']}z15r..z15l{.5[z15,z2']-z3'}
+ ..z14l{left}..z13l..{right}z12l..{down}z11l..z2'r..{up}z2r
+ ---z1r..subpath(0,rundy(p0,tim0).zpet) of p0..cycle;
+infill p2..cycle;
+penlabels(0,1,2,3,4,5,6,7,11,12,13,14,15);
+endchar;
+
+iff known chars.sign_ampersand:
+bskchar "Italic ampersand";
+beginchar(chars.sign_ampersand, 16u#, asc_height#, 0); uni "0x0026";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_hair,90); pos3(.5[cap_hair,cap_stem],180);
+pos4(cap_hair,0); pos4'(cap_hair,60); pos4''(.5[cap_hair,cap_stem],-150);
+pos5(cap_curve,180); pos6(cap_hair,-90); pos7(cap_hair,0);
+pos8(cap_hair,30); pos9(cap_hair,-60); pos10(cap_hair,-60);
+pos11(cap_curve,-60); pos12(cap_curve,-60);
+rt x1=w-7u; top y2r=h+o; x2=.35w; lft x3r=2u;
+y3=.5[h,x_height]; y2-y1=3/4(x1-x2);
+bot y4=x_height; x4=x2+o; y5=.5y4;
+lft x5r=u; rt x6=if monospace:.6w else:.55w fi; bot y6r=-o;
+rt x7r=w-2.5u; y7=.35[bar_height,x_height];
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x4-x3);
+z1'=z1+.2cap_curve*down+o*left; z1''=z1+.5(cap_curve-currentbreadth)*dir45;
+z8=z7+cap_stem*unitvector(z2-z7);
+.5[z9r,z10r]=z8; z10r-z9r=whatever*(dir45);
+lft x10r=w-2u; z12r=z10l+u*unitvector(z10-z8);
+z11l=z9r+u*unitvector(z8-z10);
+z8'=z8+1.5(cap_hair-currentbreadth)*unitvector(z8-z7);
+p0=z8l..z7l..{left}z6l..z5l..z4'l..z4l{down}..z4''l..z3l{up}..z2l..{down}z1l;
+p1=z1l{down}..z1'..z1r..z1''..z2r..{down}z3r..z4''r..{up}z4r..z4'r..z5r..{right}z6r..z7r..z8r;
+p2=z8r..z10r..z12l..{z9-z10}z10l...z8'...z9l..z11r..z9r{z10-z9}..z8l;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2-3,tim3)=subpath(3,infinity) of p0 intersectiontimes p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,7) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+filldraw subpath(0,rundy(p1,(tim0,f_obl)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,f_obl)),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2f_obl)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=.5f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11,12); labels(1',1'');
+endchar;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
new file mode 100644
index 00000000000..9dcc4239b2a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
@@ -0,0 +1,1739 @@
+%Boisik letters in other forms (greek, calligraphic)
+
+iff known chars.greek_Gamma:
+bskchar "The Greek letter Gamma";
+beginchar(chars.greek_Gamma,11u#,cap_height#,0); uni "0x0393";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h; lft x1l= lft x2l=2u;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+cap_serifs_tl(2l);
+top y3r=h; rt x3r=w-u;
+numeric oldbeak; oldbeak:=beak; beak:=1.25beak;
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---(reverse arm_top_r_points(2r,3))
+ ---z2l.a..{right}z2l.c..z2l.b---cycle;
+beak:=oldbeak;
+penlabels(1,2);
+endchar;
+
+iff known chars.greek_Delta:
+bskchar "The Greek letter Delta";
+beginchar(chars.greek_Delta,14u#,cap_height#,0); uni "0x0394";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+numeric alpha, right_stem, left_stem, old_jut;
+pickup tiny.nib;
+old_jut:=cap_jut;
+{{ save cap_jut; cap_jut=old_jut-.5u;
+lft x1l=1.5u; rt x2r=w-1.5u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
+filldraw z1l.a---z2r.a..{left}z2r.c..diag_serif(2r,3l)---z3l---
+ diag_serif(1l,3l)..z1l.c{left}..cycle;
+infill z2l.c{right}..diag_serif(2l,3')---z3'r...z3'l---diag_serif(1r,3')
+ ..z1r.c---cycle;
+penlabels(1,1',2,2',3,3');
+}};
+endchar;
+
+iff known chars.greek_Delta_alt:
+bskchar "The Greek letter Delta alternative";
+beginchar(chars.greek_Delta_alt,13u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, old_jut;
+pickup tiny.nib;
+old_jut:=cap_jut;
+lft x1l=u; rt x2r=w-u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+z1'l=z3l=z2'r;
+y1r:=y2l:=y1r+serif_o;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+filldraw z1l---z2r--z3l--cycle;
+infill (x1r+serif_o,y1r)--(x2l-serif_o,y2l)---z3'r...z3'l---cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.greek_Theta:
+bskchar "The Greek letter Theta";
+beginchar(chars.greek_Theta,14u#,cap_height#,0); uni "0x0398";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+z5=.5[z4,z2];
+pos6(.65beak,80); pos7(.65beak,85);
+y6=y7=y5; .5[x6,x7]=x5; x7-x6=.47(x3r-x1r);
+z6'r-z6r=z6'l-z6l=z7r-z7'r=z7l-z7'l=(serif_o,0);
+y6l:=y6l-o; y7r:=y7r+o;
+pos8(cap_hair,90); pos9(cap_hair,90);
+y8=y9; .5[z8,z9]=z5; x9-x8=1/3(x7-x6);
+filldraw z8r..{dir80}z6'r..z6r---z6l..{dir80}z6'l..z8l---z9l
+ ..{dir-95}z7'l..z7l---z7r..{dir-95}z7'r..z9r---cycle;
+penlabels(1,2,3,4,5,6,6',7,7',8,9);
+endchar;
+
+iff known chars.greek_Lambda:
+bskchar "The Greek letter Lambda";
+beginchar(chars.greek_Lambda,13u#,cap_height#,0); uni "0x039B";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
+filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)---z3l---
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a{left}..z2r+ser_boule*up..
+ {left}z2l.a..{right}z2l.c..diag_serif(2l,3')---z3'r...z3'l---
+ diag_serif(1r,3') ..z1r.c{right}..z1r.a{left}..cycle;
+penlabels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.greek_Xi:
+bskchar "The Greek letter Xi";
+beginchar(chars.greek_Xi,13.5u#,cap_height#,0); uni "0x039E";
+italcorr cap_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric ofs;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h; x1=x2=.5w;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+top y3r=top y4r=h; rt x3r=w-u-o; lft x4r=u+o;
+bot y5r=0; rt x5l=w-u;
+{{
+ numeric oldbeak, old_jut; oldbeak:=beak; old_jut=cap_jut; save beak, cap_jut;
+ beak:=.9oldbeak; cap_jut:=if bold_face: .7\\ fi old_jut;
+ p0:=reverse arm_top_r_points(2r,3).alt; p1:=arm_top_l_points(2l,4).alt;
+ p2:=arm_bot_r_points(1r,5).alt; p2:=subpath(1, length(p2)-1) of p2;
+}};
+p3:=reverse (p2 reflectedabout (z1r.c,z1r.a));
+ofs:=if monospace and (x3d-x2r<stem): 2.3 else: 1 fi;
+filldraw subpath(ofs, infinity) of p0--subpath(0,length(p1)-ofs) of p1--cycle;
+filldraw p2--(p3 shifted (2u-xpart(point 2 of p3),0))--cycle;
+pos6(.65beak,90); pos7(.65beak,90);
+y6=y7=.5h+o; .5[x6,x7]=.5w; x7-x6=.47(x3r-x4r);
+z6'r-z6r=z6'l-z6l=z7r-z7'r=z7l-z7'l=(serif_o,0);
+pos8(cap_hair,90); pos9(cap_hair,90);
+y8=y9; .5[z8,z9]=.5[z6,z7]; x9-x8=1/3(x7-x6);
+filldraw z8r..{up}z6'r..z6r---z6l..{up}z6'l..z8l---z9l
+ ..{down}z7'l..z7l---z7r..{down}z7'r..z9r---cycle;
+penlabels(1,2,6,7,8,9);
+endchar;
+
+iff known chars.greek_Pi:
+bskchar "The Greek letter Pi";
+beginchar(chars.greek_Pi,13u#,cap_height#,0); uni "0x03A0";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=0; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z2r.b..z2r.c---z4l.c..z4l.b
+ ---z3l.b{down}..{left}z3l.c..z3l.a{right}..
+ z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b---z4r.b..
+ {right}z4r.c..z4r.a---z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.greek_Sigma:
+bskchar "The Greek letter Sigma";
+beginchar(chars.greek_Sigma,13u#,cap_height#,0); uni "0x03A3";
+italcorr cap_height#*slant-1.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p[];
+numeric alpha, top_stem; oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h;
+lft x1l=lft x2l-o=2u;
+cap_serifs_bl(1l); cap_serifs_tl(2l); cap_serifs_br(1r); cap_serifs_tr(2r);
+bot y3r=0; top y4r=h; rt x3r=w-u; x4r=w-2.5u;
+x5r=.5w-o; y5=.5[x_height,bar_height];
+alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r);
+pos5(alpha*cap_stem,0);
+alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r);
+pos6(alpha*cap_hair,0); z5r=z6r;
+p1:=arm_bot_r_points(1r,3).alt;
+p2:=arm_top_r_points(2r,4);
+y1'=y1l.b; z1'=z6l+whatever*(z3.f-z6r);
+z5'=whatever[z2l.b,z5l]=whatever[z6l,z1'];
+filldraw subpath(0, length(p1)-1) of p1..z3f---obl(5r,3f,2r.b)---
+ z2r.b..(reverse subpath(0,length(p2)-1) of p2)---z2l.a..
+ {right}z2l.c..z2l.b---obl(5',2l.b,1')---z1'..{left}z1l.c..
+ z1l.a---cycle;
+penlabels(1,2,5,6); labels(1',5');
+endchar;
+
+iff known chars.greek_Upsilon:
+bskchar "The Greek letter Upsilon";
+beginchar(chars.greek_Upsilon,14u#,cap_height#,0); uni "0x03A5";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,210); pos3'(cap_curve,-90);
+pos4(cap_hair,-30); pos4'(cap_curve,-90);
+x1=x2=.5w; bot y1=0; top y2=x_height;
+x3l=w-u; y3=y4+o=.1[x_height,h]; top y3'l=top y4'l=h+o;
+x3'=.45[x2,x3]; x4'=.5[x2,x4]; x4l=u;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+p0=z3l{up}..{left}z3'l..{down}z2l;
+p1=z2r{up}..z4'l{left}..{down}z4l;
+(tim1,tim2)=p0 intersectiontimes p1;
+filldraw z2l---z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z2r...z3'r..{down}z3r
+ ..subpath(0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy(p1,tim2),infinity) of p1..z4r{up}..z4'r...cycle;
+penlabels(1,2,3,3',4,4');
+endchar;
+
+iff known chars.greek_Phi:
+bskchar "The Greek letter Phi";
+beginchar(chars.greek_Phi,13u#,cap_height#,0); uni "0x03A6";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_stem,0); pos6(cap_stem,0);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; .5[y2,y4]=top y1;
+y2=1/3x_height if bold_face: +.5cap_hair fi; bot y5=0; top y6=h;
+x5=x6=.5w;
+{{
+ numeric old_serif; old_serif:=ser_height;
+ save ser_heigth;
+ ser_height:= if bold_face: .6\\fi old_serif;
+ cap_serifs_tl(6l); cap_serifs_tr(6r); cap_serifs_bl(5l); cap_serifs_br(5r);
+}};
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+p2:=z1r{up}..z4r..z3r..z2r..{up}cycle;
+p3:=z5l.b{down}..{left}z5l.c..z5l.a{right}..z5+ser_boule*up..
+ {right}z5r.a..z5r.c{left}..{up}z5r.b;
+p4:=z6r.b{up}..{right}z6r.c..z6r.a---z6l.a..{right}z6l.c..{down}z6l.b;
+p5:=z6l.b--z5l.b;
+p6:=z6r.b--z5r.b;
+tim1=xpart(p1 intersectiontimes (z5r.b--z6r.b));
+tim2=xpart(p1 intersectiontimes (z6r.b--(x6r.b,y1)));
+tim3=xpart(p1 intersectiontimes (z6l.b--(x6l.b,y1)));
+tim4=xpart(p1 intersectiontimes (z5l.b--z6l.b));
+(tim5,tim6)=p2 intersectiontimes p5;
+(tim7,tim8)=p2 intersectiontimes subpath(.5,1) of p5;
+(tim9,tim10)=p2 intersectiontimes p6;
+(tim11,tim12)=p2 intersectiontimes subpath(.5,1) of p6;
+filldraw p3..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1..p4..
+ subpath(rundy(p1,tim3),length(p1)) of p1..
+ subpath(0,rundy(p1,tim4).zpet) of p1..cycle;
+infill subpath(0,rundy(p2,tim5).zpet) of p2 ..
+ subpath(rundy(p5,tim6),rundy(p5,tim8).zpet) of p5..
+ subpath(rundy(p2,tim7),length(p2)) of p2 & cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2 ..
+ subpath(rundy(p6,tim12).zpet,rundy(p6,tim10)) of p6..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_Psi:
+bskchar "The Greek letter Psi";
+beginchar(chars.greek_Psi,14u#,cap_height#,0); uni "0x03A8";
+italcorr .5[x_height#,cap_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,90); pos4(cap_hair,90);
+pos5(cap_curve,0); pos6(cap_curve,180);
+pos7(cap_hair,90); pos8(cap_hair,90);
+x1=x2=.5w; top y2=h; bot y1=0;
+y3l=y4l=top .55bar_height; y5=y6=.5[bar_height,x_height]; top y7r=top y8r=.55[x_height,h];
+x3=x1l; x4=x1r; x3-x5=y5-y3r; x6-x4=y6-y4r;
+lft x7l=u; rt x8r=w-u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+p1:=z3r{left}..{up}z5r..{left}z7r;
+p2:=z7l{right}..{down}z5l..{right}z3l;
+p3:=z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..{up}z1r.b;
+p4:=z2r.b{up}..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..{down}z2l.b;
+p5:=z4l{right}..{up}z6l..{right}z8l;
+p6:=z8r{left}..{down}z6r..{left}z4r;
+filldraw subpath(0,rundy(p2,length(p2)).zpet) of p2..p3..
+ subpath(rundy(p5,0),infinity) of p5..
+ subpath(0,rundy(p6,length(p6)).zpet) of p6..(x1r,y4r+oblu)---p4
+ ---(x1l,y3r+oblu)..subpath(rundy(p1,0),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.greek_Omega:
+bskchar "The Greek letter Omega";
+beginchar(chars.greek_Omega,14u#,cap_height#,0); uni "0x03A9";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_hair,0); pos6(cap_hair,180);
+pos5'(cap_hair,0); pos6'(cap_hair,180);
+lft x1l=u+o; x3l=w-x1l; y1=y3=x_height;
+.5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+.5[x5,x6]=x2; y5=y6=.5bar_height; x6-x5=.35(x3r-x1r);
+z5'-z5=z6'-z6=o*down;
+x7r=x6l; x7l=x5l; y7l=y7r=0;
+bot y8r=bot y9r=0; rt x8l=w-u; lft x9l=u;
+{{ numeric oldbeak; oldbeak:=beak; save beak; numeric beak; beak:=.65oldbeak;
+p0=arm_bot_r_points(7r,8).alt; y8f:=.5[y8f,y8d];
+p1=arm_bot_l_points(7l,9).alt; y9f:=.5[y9f,y9d];
+}};
+filldraw z5'l{z1-z5}..z1l..z4l..z3l..{z6-z3}z6'l..z8f...z8d...z8c..
+ z8l.o&z8l.o{up}..z8l---z8r--z8b...z8a---z7r..z6r{z3-z6}..
+ z3r..z4r..z1r..z5r{z5-z1}..z7l---z9a...z9b--z9r---z9l..
+ {down}z9l.o&z9l.o..z9c...z9d..z9f..cycle;
+penlabels(1,2,3,4,5,5',6,6',7);
+endchar;
+
+iff known chars.greek_alpha:
+bskchar "The Greek letter alpha";
+beginchar(chars.greek_alpha,10.5u#,x_height#,0); uni "0x03B1";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,-90); pos1(.5[stem,hair],0); pos2(.5[stem,hair],0);
+pos3(hair,-90); pos4(curve,180); pos5(hair,90);
+pos6(hair,0); pos7(hair,90); pos8(stem,180);
+top y0l=h; x0=w-u;
+rt x1r=w-1.5u; x2=x1-stem; top y1=h-u; y2=.5bar_height;
+x3=.5x2; x5=.55x1; bot y3r=-o; top y5r=h+o;
+lft x4r=u; y4=bar_height; y6=.55bar_height; x6=x2;
+x7=w-2u; bot y7l=-o; lft x8l=w-u; y8=.75curve;
+z8'=z8+.2stem*right+o*up; z8''=z8+.5(stem-currentbreadth)*dir225;
+p0=z0r{left}..z1r...z2r..z3r..z4r..z5r..z6r..{right}z7r..z8''..z8r;
+p1=z8r..z8'..z8l..z7l{left}..z6l..z5l..z4l..z3l..z2l---z1l..z0l;
+(tim0,tim1-5)=p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3)=p1 intersectiontimes p0;
+(tim4-4,tim5-6)=subpath(4,infinity) of p0 intersectiontimes subpath (6,infinity) of p1;
+(tim6,tim7-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,.5bar_height)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,.5bar_height)),infinity) of p1..cycle;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(8',8'');
+endchar;
+
+iff known chars.greek_beta:
+bskchar "The Greek letter beta";
+beginchar(chars.greek_beta,9u#,asc_height#,desc_depth#); uni "0x03B2";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,180); pos2(hair,180);
+pos3(hair,90); pos4(stem,0); pos5(hair,180); pos5'(hair,120); pos5''(.5[hair,stem],-30);
+pos6(curve,-30); pos7(hair,-90); pos8(stem,180);
+lft x1r=lft x2r=u; y1=-d; y2=.5[h,x_height];
+x3=.5w-stem; top y3r=h+o; rt x4r=w-2.5u; rt x6r=w-u;
+y5=.25[x_height,bar_height]; y4=.5[x_height,h]; y6=.5[y5,0];
+x5=x3; x7=.5[x2l,x6]; bot y7r=-o;
+x5'=x5''=.5[x4,x5]; .5[y5',y5'']=y5; y5'-y5''=.5(x4-x5);
+x8r=x2l+stem; y8=.25bar_height;
+z8'=z8+.2stem*right+o*down; z8''=z8+.5(stem-currentbreadth)*dir135;
+p0=z1r---z2r..z3r..z4r..z5''r..z5r..z5'r..z6r..{left}z7r..z8r..z8''..z8l{down}..z8';
+p1=z8'..z7l{right}..z6l..z5'l..z5l..z5''l..z4l..z3l..z2l---z1l;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,infinity) of p1;
+tim4-3=xpart(subpath(3,5) of p0 intersectiontimes p1);
+(tim5-6,tim6-5)=subpath(6,infinity) of p0 intersectiontimes subpath (5,infinity) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,infinity) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+penlabels(0,1,2,3,4,5,5',5'',6,7,8); labels(8',8'');
+endchar;
+
+iff known chars.greek_beta_curved:
+bskchar "The Greek letter beta (curved version)";
+beginchar(chars.greek_beta_curved,9u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(curve,180); pos1(hair,180); pos2(hair,180);
+pos3(hair,90); pos4(stem,0); pos5(hair,180); pos5'(hair,120); pos5''(.5[hair,stem],-30);
+pos6(curve,-30); pos7(hair,-90); pos8(stem,180);
+lft x1r=lft x2r=u; y1=-d+curve; y2=.5[h,x_height]; y0=-d; x0l=x1r-o;
+x3=.5w-stem; top y3r=h+o; rt x4r=w-2.5u; rt x6r=w-u;
+y5=.25[x_height,bar_height]; y4=.5[x_height,h]; y6=.5[y5,0];
+x5=x3; x7=.5[x2l,x6]; bot y7r=-o;
+x5'=x5''=.5[x4,x5]; .5[y5',y5'']=y5; y5'-y5''=.5(x4-x5);
+x8r=x2l+stem; y8=.25bar_height;
+z8'=z8+.2stem*right+o*down; z8''=z8+.5(stem-currentbreadth)*dir135;
+p0=z1r---z2r..z3r..z4r..z5''r..z5r..z5'r..z6r..{left}z7r..z8r..z8''..z8l{down}..z8';
+p1=z8'..z7l{right}..z6l..z5'l..z5l..z5''l..z4l..z3l..z2l---z1l;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,infinity) of p1;
+tim4-3=xpart(subpath(3,5) of p0 intersectiontimes p1);
+(tim5-6,tim6-5)=subpath(6,infinity) of p0 intersectiontimes subpath (5,infinity) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,infinity) of p1);
+filldraw z0r..subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),infinity) of p1..z0l..z0r&cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+penlabels(0,1,2,3,4,5,5',5'',6,7,8); labels(8',8'');
+endchar;
+
+iff known chars.greek_gamma:
+bskchar "The Greek letter gamma";
+beginchar(chars.greek_gamma,11u#,x_height#,desc_depth#); uni "0x03B3";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,150);
+pos1(stem,90); pos2(hair,0); pos3(hair,0); pos4(hair,-90); pos5(hair,180);
+pos6(hair,180); pos7(hair,135);
+x1=.5[u,x2]; top y1r=h+o; lft x0r=u; y0=bar_height; z0'=(x0r,y0l);
+x2=.75w; x3=w-2.5u; y3=-3/4d; y2=.5bar_height; bot y4r=-d; y3-y4=2(x3-x4);
+.3[x5,x3]=x4; y5=y3;
+x6r=x2r; y6=y2;
+top y7r=h; rt x7=w-u;
+p0=z0r..z1r..z2r...z3r..z4r..z5r..z6r..{dir45}z7r;
+p1=z7l{dir-135}..z6l..z5l..z4l..z3l...z2l..z1l..z0l;
+(tim0,tim1-5)=subpath(0,3) of p0 intersectiontimes subpath(5,infinity) of p0;
+(tim2,tim3-1)=subpath(0,2) of p1 intersectiontimes subpath (1,3) of p0;
+(tim4-4,tim5-4)=subpath(4,infinity) of p0 intersectiontimes subpath(4,infinity) of p1;
+filldraw subpath(0,rundy(p0,(tim0,.7(y7r-y2))).zpet) of p0
+ ..subpath(rundy(p0,(tim1,.7(y7r-y2))),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ &z0l..z0'..cycle;
+;
+penlabels(0,1,2,3,4,5,6,7); labels(0');
+endchar;
+
+iff known chars.greek_gamma_curved:
+bskchar "The Greek letter gamma (curved version)";
+beginchar(chars.greek_gamma_curved,11u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(stem,150);
+pos1(hair,90); pos2(stem,0); pos3(.9stem,0); pos4(hair,-90); pos5(hair,180);
+pos6(hair,180); pos7(hair,90); pos8(stem,0);
+x1=.5[u,x2]; top y1r=h+o; lft x0r=u; y0=y1-stem; z0'=(x0r,y0l);
+x3=x2=.5w-.5stem; y3=-2/3d; y2=bar_height; bot y4r=-d; y3-y4=(x3-x4);
+.3[x5,x3]=x4; y5=-1/2d; x6=.35[x2l,x8]; y6=y2;
+x7=x8-stem; top y7r=.25[h,bar_height]; rt x8r=w-u; y8=y7-stem;
+z8'=z8+.2stem*down+o*left; z8''=z8+.5(stem-currentbreadth)*dir45;
+p0=z0r..z1r..z2r---z3r..z4r..z5r..z6r..{right}z7r..{down}z8r..z8'..{up}z8l;
+p1=z8l{up}..{left}z7l..z6l..z5l..z4l..z3l---z2l..z1l..z0l;
+(tim0,tim1-5)=subpath(0,3) of p0 intersectiontimes subpath(5,infinity) of p0;
+(tim2,tim3-1)=p1 intersectiontimes subpath(1,3) of p0;
+(tim4-4,tim5-5)=subpath(4,infinity) of p0 intersectiontimes subpath(5,infinity) of p1;
+(tim6,tim7-5)=subpath(0,4) of p1 intersectiontimes subpath(5,infinity) of p1;
+filldraw subpath(0,rundy(p0,(tim0,y7r-y2)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,y7r-y2)),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ &z0l..z0'..cycle;
+oblu:=x3l-x5;
+infill subpath(rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',8',8'');
+endchar;
+
+iff known chars.greek_delta:
+bskchar "The Greek letter delta";
+beginchar(chars.greek_delta,9u#,asc_height#,0); uni "0x03B4";
+italcorr .5[x_height#,asc_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270); pos5(hair,180);
+pos6(stem,180); pos7(hair,180); pos8(hair,90); pos9(stem,0);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x1,x3]=x2; x4=x2-stem;
+bot y2l=-o; y4l=.9x_height; z5l=z3r; y6=x_height; x6=.25[x3,x4];
+y7=h-curve; x7=x4; top y8r=h+o; x8=.5[x4,x6];
+rt x9r=w-u; y9''-y8r=2/3(x8-x9);
+z9'=z9+.2stem*down+o*left; z9''=z9+.5(stem-currentbreadth)*dir45;
+p0=z3r..z6r..z7r..{right}z8r..z9''..z9r{down}..z9'..z9l..{left}z8l;
+p1=z8l{left}....z7l..z6l..z3l..z2l..{up}z1l..z4l..z5l;
+z0=bsktouch(subpath(0,2) of p0,left,subpath(5,infinity) of p1,right);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z0--(w,y0)));
+tim1-5=xpart(subpath(5,infinity) of p1 intersectiontimes (z0--(x4,y0)));
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+infill z1r{up}..z4r..z5l..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(9',9'');
+endchar;
+
+iff known chars.greek_epsilon:
+bskchar "The Greek letter epsilon";
+beginchar(chars.greek_epsilon,7.2u#,x_height#,0); uni "0x03F5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(hair,90); pos3(stem,180);
+pos4(hair,-90); pos5(vair,-45);
+pos6(hair,90); pos7(hair,90);
+rt x1=w-u; top y2r=h+o; x2=.5w+u; lft x3r=u;
+y3=bar_height-.5stem; y1=.35[x_height,bar_height];
+x4=x2+o; bot y4r=-o;
+rt x5=w-u; y5=.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+z1'=z1+.2stem*down+o*left; z1''=z1+.5(stem-currentbreadth)*dir45;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{up}..z2l..{down}z1l..z1'..z1r..z1''..z2r..{down}z3r..z4r..z5r;
+p1=z6l---z7ll..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p1 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(1',1'',7ll);
+endchar;
+
+iff known chars.greek_varepsilon:
+bskchar "The Greek letter epsilon---alternative";
+beginchar(chars.greek_varepsilon,8u#,x_height#,0); uni "0x03B5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(hair,90); pos3(.5[hair,stem],180);
+pos4(hair,0); pos4'(hair,60); pos4''(.5[hair,stem],-150);
+pos5(curve,180); pos6(hair,-90); pos7(vair,-45);
+rt x1=w-u; top y2r=h+o; x2=.5w+u; lft x3r=1.75u;
+y3=.65[x_height,bar_height]; y1=.5[x_height,bar_height];
+1/3[y4,y3]=bar_height; x4=x2-hair; y5=.5bar_height;
+lft x5r=u; x6=x2+o; bot y6r=-o;
+rt x7=w-u; y7=.25bar_height;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x4-x3);
+z1'=z1+.2curve*down+o*left; z1''=z1+.5(curve-currentbreadth)*dir45;
+p0=z7l..z6l..z5l..z4'l..z4l{down}..z4''l..z3l{up}..z2l..{down}z1l;
+p1=z1l{down}..z1'..z1r..z1''..z2r..{down}z3r..z4''r..{up}z4r..z4'r..{down}z5r..z6r..z7r;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2,tim3-5)=p0 intersectiontimes subpath(5,7) of p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,infinity) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,hair)),infinity) of p1
+ ..{direction infinity of p1}z7r..{direction 0 of p0}z7l
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2hair)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=.5f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'');
+endchar;
+
+iff known chars.greek_zeta:
+bskchar "The Greek letter zeta";
+beginchar(chars.greek_zeta,9u#,asc_height#,.5desc_depth#); uni "0x03B6";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(stem,180); pos0(hair,0); pos7(hair,180);
+pos3(curve,240); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+pos8(hair,-90);
+lft x2r=u; top y1r=h-stem; y2=x_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-2u; y0=y1-.5stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5+.5stem; x7=x1-stem; top y7=h;
+x8=.5[x1,x0]; .5[y8,y1]=y0;
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+p0=z7r{down}..z8r..z0r..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l;
+p1=z6l..z5l..z4l..z3l..z2l..z1l..z0l..z8l..{up}z7l;
+(tim0,tim1-1)=p0 intersectiontimes subpath(1,infinity) of p0;
+(tim2,tim3)=p1 intersectiontimes subpath (0,1) of p0;
+(tim4-1,tim5-7)=subpath(1,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+(tim6-7,tim7)=subpath(7,infinity) of p1 intersectiontimes subpath(0,6) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,hair)),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',0'',6',6'');
+endchar;
+
+iff known chars.greek_eta:
+bskchar "The Greek letter eta";
+beginchar(chars.greek_eta,9.5u#,x_height#,desc_depth#); uni "0x03B7";
+italcorr x_height#*slant-.5u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
+pos5(stem,180); pos6(stem,180); pos7(hair,-90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=1/3w;
+y3=y1-hair=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+y5=y3; y6=-d; rt x5l=w-u; x6=x5; x7=.55[x5l,x3r]; top y7r=h+o;
+bskpoints(5,6,hair,hair);
+p0=z1l{z1-z4}..z2l..z3l---z4l..z4'..z4r---z3r..z7r..z5r
+ ---z6r..z6ll---z5l..z7l..z3l;
+p1=z4r---z3r..z2r..{z4-z1}z1r;
+(tim0-7,tim1)=subpath (7,infinity) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,10); labels(6ll);
+endchar;
+
+iff known chars.greek_eta_curved:
+bskchar "The Greek letter eta (curved version)";
+beginchar(chars.greek_eta_curved,9.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
+pos5(stem,180); pos6(stem,180); pos7(hair,-90); pos8(hair,-90);
+pos8'(.5[hair,stem],-90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=1/3w;
+y3=y1-hair=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+y5=y3; y6=-d+4/3(x8-x6); rt x5l=w-u; x6l=x5r; x7=.55[x5l,x3r]; top y7r=h+o;
+x8=w; bot y8r=bot bot y8'r=-d; x8'=w+u;
+p0=z1l{z1-z4}..z2l..z3l---z4l..z4'..z4r---z3r..z7r..{down}z5r
+ ...z6r..{right}z8r..z8'r..z8'l..z8l{left}..z6l...{up}z5l..z7l..z3l;
+p1=z4r---z3r..z2r..{z4-z1}z1r;
+(tim0-7,tim1)=subpath (7,infinity) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,10);
+endchar;
+
+iff known chars.greek_theta:
+bskchar "The Greek letter theta";
+beginchar(chars.greek_theta,9.5u#,asc_height#,0); uni "0x03B8";
+italcorr .75asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(hair,90); pos6(.5[hair,stem],90); pos7(hair,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o;
+z5=z1+.25stem*down; z7=z3+.25stem*up; z6=.5[z5,z7];
+p0=z5l..z6l..z7l;
+p1=z5r..z6r..z7r;
+p2=z1r{up}..z4r..{down}z3r..z2r..{up}z1r;
+p3=z2r..{up}z1r..z4r..{down}z3r..z2r;
+(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p2;
+(tim2-1,tim3)=subpath(1,2) of p0 intersectiontimes p2;
+(tim4,tim5)=subpath(0,1) of p1 intersectiontimes p3;
+(tim6-1,tim7)=subpath(1,2) of p1 intersectiontimes p3;
+filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim1).zpet) of p2..cycle;
+infill subpath(rundy(p1,tim4),rundy(p1,tim6).zpet) of p1
+ .. reverse subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.greek_vartheta:
+bskchar "The Greek letter theta---alternative";
+beginchar(chars.greek_vartheta,9u#,asc_height#,0); uni "0x03D1";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(curve,180); pos7(hair,-90);
+pos8(hair,-30); pos8'(hair,30); pos9(hair,90);
+top y2r=x_height; bot y5l=-o; x5=.5[x4l,x6];
+x3=x4l; lft x1l=.5u; x3l-x1r=max(curve,1.5u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+z2=z1+whatever*dir60;
+y4-y5=y2-y3; rt x6l=w-1.75u; y6=bar_height;
+top y7=h+o; x7=x5;
+y8=2/3[x_height,h]; 1/4[x8,x6]=x7;
+y9=.35[x_height,bar_height]; x9=w-u;
+p0=z1r{up}..z2r..z3r..z4r..z5r..{up}z6r..{left}z7r..z8r..{z9-z3}z9r;
+p1=z9l{z3-z9}..z8l..{right}z7l..{down}z6l..z5l..z4l..z3l..z2l..{down}z1l;
+(tim0,tim1)=subpath(0,6) of p0 intersectiontimes subpath(0,1) of p1;
+(tim2-2,tim3-7)=subpath(2,infinity) of p1 intersectiontimes subpath(7,infinity) of p0;
+(tim4-2,tim5)=subpath (2,infinity) of p1 intersectiontimes subpath(0,1) of p1;
+tim6=xpart(p0 intersectiontimes subpath (0,1) of p1);
+tim7-7=ypart(subpath (0,6) of p0 intersectiontimes subpath(7,infinity) of p0);
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..{z9-z4}z9r..z9l{z4-z9}
+ ..subpath(rundy(p1,(tim4,hair)),infinity) of p1..cycle;
+infill subpath (rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+iff known chars.greek_iota:
+bskchar "The Greek letter iota";
+beginchar(chars.greek_iota,6u#,x_height#,0); uni "0x03B9";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(hair,90); pos4(hair,0);
+lft x1l=x2l=1.5u; top y1=h; y2=.5y4; y2'=bar_height; x2'l=.25[x1,x1l];
+rt x4r=w-u; top y4=.5bar_height; bot y3l=0; x3=.5[x4,x2];
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+p0=z2r..z2'r..z1r;
+filldraw z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b
+ ..z2'l..{-direction 0 of p0}z2l..z3l..{up}z4r..{down}z4l
+ ..z3r..p0&cycle;
+penlabels(1,2,2',3,4);
+endchar;
+
+iff known chars.greek_kappa:
+bskchar "The Greek letter kappa";
+beginchar(chars.greek_kappa,8.5u#,x_height#,0); uni "0x03BA";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(hair,-90); pos4(hair,-90); pos5(stem,0);
+lft x1l=lft x2l=1.5u; top y1=h; y2=.25bar_height; y2'=bar_height; x2'l=.25[x1,x1l];
+x4l=.5u; y4r=y3; bot y3l=0; x3=.5[x4,x2];
+bot y5=0; rt x5r=w-2u; serifs_br(5r); z5'b=z5r.b+(hair-currentbreadth)*right;
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+pos6(hair,90); top y6r=h+o; x7-x6=y6-y7;
+pos7(curve,0); z7'=z7+.2curve*down+o*left; z7''=z7+.5(curve-currentbreadth)*dir45;
+y7=h-stem; rt x7r=w-.75u;
+pos2''(.5[hair,stem],angle(z6l-z2'r)+90); z2''r=z2'r;
+pos6'(hair,180); y6'=y7; z6'=whatever[z6,z2''];
+p0=z2r..z2'r..z1r;
+p1=z2''l{right}..{up}z6'l..z6l{right}..z7l..z7'..z7r{up}..z7''..{left}z6r..{down}z6'r..{left}z2''r;
+p2=z2'l---diag_serif(5r,2'l)..z5r---z5r.a..{left}z5r.c
+ ..z5r.bb+(stem-currentbreadth)*right---z2'l+(stem-currentbreadth)*right;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b
+ ..z2'l..{-direction 0 of p0}z2l..z3l..{z4-z3}z4l..{z3-z4}z4r..z3r
+ ..subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,(length p2,curve)).zpet) of p2
+ ..subpath(rundy(p1,(0,curve)),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+penlabels(1,2,2',2'',3,4,5,6,6',7); labels(7',7'');
+endchar;
+
+iff known chars.greek_lambda:
+bskchar "The Greek letter lambda";
+beginchar(chars.greek_lambda,10u#,asc_height#,0); uni "0x03BB";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], thstem; path p[]; oblu:=2oblu;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(hair,90); pos5(hair+o,90);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+bot y1'=0; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h+o;
+lft x5=o; y5r=y4r; x4=.5x2l;
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+p0=z2l---z1l..z1'..{right}z3l..{left}z3r..z1r---z2r..z4r---z5r..z5l---z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'');
+endchar;
+
+iff known chars.greek_lambda_bar:
+bskchar "The Greek letter lambda with bar";
+beginchar(chars.greek_lambda_bar,10u#,asc_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], thstem; path p[]; oblu:=2oblu; oblu.light:=f_obl;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(hair,90); pos5(hair+o,90);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+pos9(bar,90); pos10(bar,90);
+bot y1'=0; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h+o;
+lft x5=o; y5r=y4r; x4=.5x2l;
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+x10-x9=5u; y10=y9=.5[x_height,y2]; .5[z9,z10]=whatever[z1,z2];
+y9'r=y10'r=y9r; y9'l=y10'l=y9l;
+z9'l=whatever[z2l,z1l]; z9'r=whatever[z2l,z1l];
+z10'l=whatever[z2r,z1r]; z10'r=whatever[z2r,z1r];
+bskpoints(9,10,hair,hair);
+p0=z2l---obl(9'r,2l,9r)---z9rr..z9l---obl(9'l,9l,1l)---z1l..z1'..{right}z3l..{left}z3r
+ ..z1r---obl(10'l,1r,10l)---z10ll..z10r---obl(10'r,10r,2r).light
+ ---z2r..z4r---z5r..z5l---z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,9',10,10'); labels(1',5',5'',9rr,10ll);
+endchar;
+
+iff known chars.greek_lambda_slash:
+bskchar "The Greek letter lambda with slash";
+beginchar(chars.greek_lambda_slash,10u#,asc_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], thstem, theta; path p[]; oblu:=2oblu; oblu.light:=f_obl;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(hair,90); pos5(hair+o,90);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+bot y1'=0; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h+o;
+lft x5=o; y5r=y4r; x4=.5x2l;
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+x10-x9=4.5u; y10-y9=stem; y9=.5[x_height,y2]; .5[z9,z10]=whatever[z1,z2];
+theta:=angle(z10-z9)+90;
+pos9(bar,theta); pos10(bar,theta);
+z9'l=whatever[z9l,z10l]=whatever[z2l,z1l]; z9'r=whatever[z9r,z10r]=whatever[z2l,z1l];
+z10'l=whatever[z9l,z10l]=whatever[z2r,z1r]; z10'r=whatever[z9r,z10r]=whatever[z2r,z1r];
+bskpoints(9,10,hair,hair);
+p0=z2l---obl(9'r,2l,9r)---z9rr..z9l---obl(9'l,9l,1l)---z1l..z1'..{right}z3l..{left}z3r
+ ..z1r---obl(10'l,1r,10l)---z10ll..z10r---obl(10'r,10r,2r).light
+ ---z2r..z4r---z5r..z5l---z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,9',10,10'); labels(1',5',5'',9rr,10ll);
+endchar;
+
+iff known chars.greek_lambda_curved:
+bskchar "The Greek letter lambda (curved version)";
+beginchar(chars.greek_lambda_curved,10u#,asc_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], thstem; path p[]; oblu:=2oblu;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(hair,90); pos5(stem,180);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+bot y1'=0; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h+o;
+lft x5r=0; y5=y4-curve; x4=.5[x2l,x5r];
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+z5'=z5+.2curve*up+o*right; z5''=z5+.5(curve-currentbreadth)*dir225;
+p0=z2l---z1l..z1'..{right}z3l..{left}z3r..z1r---z2r..{left}z4r..z5r..z5''..z5l..z5'..{right}z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'');
+endchar;
+
+iff known chars.greek_lambda_curved_bar:
+bskchar "The Greek letter lambda with bar (curved version)";
+beginchar(chars.greek_lambda_curved_bar,10u#,asc_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], thstem; path p[]; oblu:=2oblu; oblu.light:=f_obl;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(hair,90); pos5(stem,180);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+pos9(bar,90); pos10(bar,90);
+bot y1'=0; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h+o;
+lft x5r=0; y5=y4-curve; x4=.5[x2l,x5r];
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+z5'=z5+.2curve*up+o*right; z5''=z5+.5(curve-currentbreadth)*dir225;
+x10-x9=5u; y10=y9=.5[x_height,y2]; .5[z9,z10]=whatever[z1,z2];
+y9'r=y10'r=y9r; y9'l=y10'l=y9l;
+z9'l=whatever[z2l,z1l]; z9'r=whatever[z2l,z1l];
+z10'l=whatever[z2r,z1r]; z10'r=whatever[z2r,z1r];
+bskpoints(9,10,hair,hair);
+p0=z2l---obl(9'r,2l,9r)---z9rr..z9l---obl(9'l,9l,1l)---z1l..z1'..{right}z3l..{left}z3r
+ ..z1r---obl(10'l,1r,10l)---z10ll..z10r---obl(10'r,10r,2r).light
+ ---z2r..{left}z4r..z5r..z5''..z5l..z5'..{right}z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'');
+endchar;
+
+iff known chars.greek_lambda_curved_slash:
+bskchar "The Greek letter lambda with slash (curved version)";
+beginchar(chars.greek_lambda_curved_slash,10u#,asc_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], thstem; path p[]; oblu:=2oblu; oblu.light:=f_obl;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(hair,90); pos5(stem,180);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+bot y1'=0; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h+o;
+lft x5r=0; y5=y4-curve; x4=.5[x2l,x5r];
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+x10-x9=4.5u; y10-y9=stem; y9=.5[x_height,y2]; .5[z9,z10]=whatever[z1,z2];
+theta:=angle(z10-z9)+90;
+pos9(bar,theta); pos10(bar,theta);
+z9'l=whatever[z9l,z10l]=whatever[z2l,z1l]; z9'r=whatever[z9r,z10r]=whatever[z2l,z1l];
+z10'l=whatever[z9l,z10l]=whatever[z2r,z1r]; z10'r=whatever[z9r,z10r]=whatever[z2r,z1r];
+bskpoints(9,10,hair,hair);
+z5'=z5+.2curve*up+o*right; z5''=z5+.5(curve-currentbreadth)*dir225;
+p0=z2l---obl(9'r,2l,9r)---z9rr..z9l---obl(9'l,9l,1l)---z1l..z1'..{right}z3l..{left}z3r
+ ..z1r---obl(10'l,1r,10l)---z10ll..z10r---obl(10'r,10r,2r).light
+ ---z2r..{left}z4r..z5r..z5''..z5l..z5'..{right}z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'');
+endchar;
+
+iff known chars.greek_mu:
+bskchar "The Greek letter mu";
+beginchar(chars.greek_mu,10.5u#,x_height#,desc_depth#); uni "0x03BC";
+italcorr x_height#*slant-.75u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos1(stem,0); pos2(stem,0); pos2'(stem,0);
+pos3(stem,0);
+pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(stem,180);
+pos10(stem,0); pos11(stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
+lft x1l=lft x2l=1.5u; top y1=h; y2=0;
+x3l=x2; bot y3=-d+o;
+rt x10r=w-2u; y6=y8=bar_height; bot y7l=-o; x7=.5w;
+x6=x2; top y9=h; x9=x10;
+z8r=z10l; x11=x10; y11=curve; rt x13=w-.5u; bot y12l=bot bot y13l=-o; x12=.5[x13,x10];
+bskpoints(9,10,hair,hair); bskpoints(3,1,hair,hair);
+p0=z1r..z1l---z3l..z3rr---z1r;
+p1=z12l{right}..z13l..z13r..{left}z12r..z11r---z9l..{down}z9rr---z10l..z7r..{up}z6r;
+p2=z6l{down}..z7l..{up}z8l;
+p3=z10l{down}..z11l..{right}z12l;
+z0=bsktouch(subpath(2,infinity) of p0,right,p2,down);
+tim0-2=xpart(subpath(2,infinity) of p0 intersectiontimes (z0--(0,x0)));
+tim1=xpart(p2 intersectiontimes (z0--(x0,h)));
+z14=bsktouch(p2,down,p3,left);
+tim2=xpart(p2 intersectiontimes (z14--(x14,h)));
+tim3=xpart(p3 intersectiontimes (z14--(w,y14)));
+(tim4,tim5-2)=p1 intersectiontimes subpath(2,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p3,tim3),infinity) of p3
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+penlabels(1,2,3,6,7,8,9,10,11,12,13); labels(0,9rr,3rr,14);
+endchar;
+
+iff known chars.greek_mu_curved:
+bskchar "The Greek letter mu (curved version)";
+beginchar(chars.greek_mu_curved,11u#,x_height#,desc_depth#); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(stem,0); pos4(hair,90); pos5(stem,70);
+pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(curve,180);
+pos10(stem,0); pos11(stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
+lft x1l=x2l=1.5u; top y1=h; y2=0; y2'=bar_height; x2'l=.25[x1,x1l];
+x3=x2; y3=-d+1.5curve; bot y4l=-d; x4-x3r=y3-y4; y5l=y4; x5-x4=stem;
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+rt x10r=w-2u; y6=y8=bar_height; bot y7l=-o; x7=.5w;
+x6=x2; top y9''=x_height+o; x9-x8=.35(y8-y9);
+z9'=z9+.2curve*down+o*left; z9''=z9+.5(curve-currentbreadth)*dir135;
+z8l=z10l; x11r=x10; y11=curve; rt x13=w-.5u; bot y12l=bot bot y13l=-o; x12=.5[x13,x10];
+p0=z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b..z2'l
+ ..z2l..z3l..{right}z4l..z5l..z5r..z4r{left}..z3r..z2r..z2'r..z1r;
+p1=z12l{right}..z13l..z13r..{left}z12r..z11r..z10r..z9l..{down}z9r..z9'..{down}z8r..z7r..{up}z6r;
+p2=z6l{down}..z7l..{up}z8l;
+p3=z10l{down}..z11l..{right}z12l;
+z0=bsktouch(subpath(5,infinity) of p0,right,p2,down);
+tim0-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z0--(0,x0)));
+tim1=xpart(p2 intersectiontimes (z0--(x0,h)));
+z14=bsktouch(p2,down,p3,left);
+tim2=xpart(p2 intersectiontimes (z14--(x14,h)));
+tim3=xpart(p3 intersectiontimes (z14--(w,y14)));
+(tim4,tim5-5)=p1 intersectiontimes subpath(5,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p3,tim3),infinity) of p3
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+penlabels(1,2,2',3,4,5,6,7,8,9,10,11,12,13); labels(0,9',9'',14);
+endchar;
+
+iff known chars.greek_nu:
+bskchar "The Greek letter nu";
+beginchar(chars.greek_nu,8.5u#,x_height#,0); uni "0x03BD";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(stem,-10);
+lft x1l=lft x2l=1.5u; top y1=h; bot y2=0; y2'=bar_height; x2'l=.25[x1,x1l];
+rt x3r=w-u; top y3l=h;
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+p0=z2r..z2'r..z1r;
+tim0=xpart(p0 intersectiontimes ((0,y2r+hair-currentbreadth)--(w,y2r+hair-currentbreadth)));
+p1=z3l{down}..point tim0 of p0;
+filldraw z2r..{up}z3r..subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p0,tim0),infinity) of p0&z1r..{x1l-x1r,-.25serif_drop}z1.a
+ &z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l--cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.greek_xi:
+bskchar "The Greek letter xi";
+beginchar(chars.greek_xi,9u#,asc_height#,.5desc_depth#); uni "0x03BE";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(stem,180); pos0(hair,0); pos7(stem,180);
+pos3(curve,240); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+pos8(hair,-90); pos9(hair,90); pos10(hair,0); pos11(hair,-90);
+pos12(hair,180);
+lft x2r=u; top y1r=.35[x_height,bar_height]; y2=.5x_height; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-2u; y0=y1-stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5+.5stem; lft x7r=1.5u; y7=.35[y1,y9];
+x8=.25[x1,x0]; .25[y8,y1]=y0; top y9r=h-.75stem; x10-x9=x0-x1;
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+rt x10r=w-u; y10=y9-.5stem; y10=.5[y11,y9]; x11=.5[x9,x10];
+top y12=h; x12=x9-stem;
+p0=z12r..z11r..z10r..z9r..z7r{down}..z8r..{up}z0r..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l;
+p1=z6l..z5l..z4l..z3l..z2l..z1l..{down}z0l..z8l..{up}z7l..z9l..z10l..z11l..z12l;
+(tim0,tim1-5)=p0 intersectiontimes subpath(5,infinity) of p0;
+(tim2,tim3-4)=p1 intersectiontimes subpath (4,5) of p0;
+(tim4-5,tim5-7)=subpath(5,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+(tim6-7,tim7)=subpath(7,infinity) of p1 intersectiontimes subpath(0,6) of p1;
+(tim8,tim9-1)=p0 intersectiontimes subpath(1,infinity) of p0;
+(tim10,tim11)=p1 intersectiontimes subpath(0,1) of p0;
+(tim12-2,tim13)=subpath(2,4) of p0 intersectiontimes p1;
+(tim14-8,tim15-11)=subpath(8,10) of p1 intersectiontimes subpath(11,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0..subpath(rundy(p0,tim9),rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,hair)),rundy(p1,tim10).zpet) of p1
+ ..subpath(rundy(p0,tim11),rundy(p0,(tim12,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim13,hair)),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
+infill subpath(rundy(p1,tim14),rundy(p1,tim15).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); labels(0',0'',6',6'');
+endchar;
+
+iff known chars.greek_omicron:
+bskchar "The greek letter omicron";
+beginchar(chars.greek_omicron,9u#,x_height#,0); uni "0x03BF";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o;
+filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.greek_pi:
+bskchar "The Greek letter pi";
+beginchar(chars.greek_pi,11u#,x_height#,0); uni "0x03C0";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,90); pos5(curve,10); pos6(.5[hair,stem],0);
+pos7(.5[hair,stem],0); pos8(curve,-10); pos8'(.5[curve,stem],0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; y4r=y3r; x2l:=x2l+.5stem;
+x5=x6r; bot y5l=0; y5r:=y5r+o;
+z6r=z3; y7=y6; x7l=x2+stem; bot y8=0; x8r=x7l;
+y8'=.5bar_height; z8'l=whatever[z8l,z7l]+.5hair*right;
+y6l:=y6l-o;
+p0=z1r..z2r---z4r..z4l{down}..z3l..{left}z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{dir-70}z5l..(x5r,0)..z5r{dir130}..{up}z6r);
+p2=reverse(z7l---z8'l..z8l&z8l..z8r..z8'r---z7r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+(tim4,tim5)=p0 intersectiontimes p2;
+(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,(tim2,2hair)),rundy(p0,(tim4,2hair)).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0&cycle;
+penlabels(1,2,3,4,5,6,7,8,8');
+endchar;
+
+iff known chars.greek_pi_curved:
+bskchar "The Greek letter pi (curved version)";
+beginchar(chars.greek_pi_curved,11u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,180); pos5(curve,10); pos6(.5[hair,stem],0);
+pos7(.5[hair,stem],0); pos8(curve,-10); pos8'(.5[curve,stem],0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; top y4=h+hair; x2l:=x2l+.5stem; y3r:=y3r-o;
+x5=x6r; bot y5l=0; y5r:=y5r+o;
+z6r=z3; y7=y6; x7l=x2+stem; bot y8=0; x8r=x7l;
+y8'=.5bar_height; z8'l=whatever[z8l,z7l]+.5hair*right;
+y6l:=y6l-o;
+p0=z1r..z2r{right}..z3r..{z4-z3}z4r..z4l{down}..z3l..{left}z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{dir-70}z5l..(x5r,0)..z5r{dir130}..{up}z6r);
+p2=reverse(z7l---z8'l..z8l&z8l..z8r..z8'r---z7r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+(tim4,tim5)=p0 intersectiontimes p2;
+(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,(tim2,2hair)),rundy(p0,(tim4,2hair)).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0&cycle;
+penlabels(1,2,3,4,5,6,7,8,8');
+endchar;
+
+iff known chars.greek_varpi:
+bskchar "The Greek letter pi---alternative";
+beginchar(chars.greek_varpi,13.5u#,x_height#,0); uni "0x03D6";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,90); pos2(hair,180); pos3(stem,270);
+pos4(hair,90); pos4'(hair,240); pos4''(.5[hair,stem],-60);
+pos5(hair,270); pos6(curve,0); pos7(stem,90);
+pos8(hair,90); pos9(stem,90); pos10(stem,90); pos11(hair,90);
+top y1r=h; lft x2r=1.5u; y2=.5h; bot y3r=-o;
+rt x1=x3; .5[x3,x5]=.5w; x5-x3=1/3w;
+1/3[x4,x3]=.45w; y4l=bar_height;
+bot y5r=-o; y6=y2; rt x6r=w-u;
+x7-x6=(x2-x1); top y7r=h;
+y4'=y4''=.6bar_height; .5[x4',x4'']=x4; x4'-x4''=.35(y3-y4);
+z1'=z1+.2curve*right+o*up; z1''=z1+.5(curve-currentbreadth)*dir135;
+z7'=z7+.2curve*right+o*down; z7''=z7+.5(curve-currentbreadth)*dir45;
+lft x8=.5u; y8r=y9r; top y9r=top y10r=h; x9=.5[x8,x1];
+rt x11=w-.5u; x10=.5[x11,x7]; y11r=y10r;
+p0=z7'{right}..z6l..z5l..z4'l..z4l{right}..z4''l..z3l{left}..z2l..{right}z1l;
+p1=z1l{right}..z1'..z1r..z1''..z2r..{right}z3r..z4''r..{left}z4r..z4'r..{right}z5r..z6r..z7''..z7r;
+p2=z8l{right}..z9l...z10l..{right}z11l..{left}z11r..z10r...z9r..{left}z8r;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,6) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+(tim8,tim9-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim10-10,tim11)=subpath (10,infinity) of p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p1,tim9),rundy(p1,(tim0,f_obl)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,f_obl)),rundy(p1,tim10).zpet) of p1
+ ..subpath(rundy(p2,tim11),infinity) of p2..cycle;
+infill subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2f_obl)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11); labels(1',1'',7',7'');
+endchar;
+
+iff known chars.greek_varpi_curved:
+bskchar "The Greek letter pi---alternative (curved version)";
+beginchar(chars.greek_varpi_curved,13.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,90); pos2(hair,180); pos3(stem,270);
+pos4(hair,90); pos4'(hair,240); pos4''(.5[hair,stem],-60);
+pos5(hair,270); pos6(curve,0); pos7(stem,90);
+pos8(hair,90); pos9(stem,90); pos10(stem,90); pos11(hair,90);
+top y1r=h; lft x2r=1.5u; y2=.5h; bot y3r=-o;
+rt x1=x3; .5[x3,x5]=.5w; x5-x3=1/3w;
+1/3[x4,x3]=.45w; y4l=bar_height;
+bot y5r=-o; y6=y2; rt x6r=w-u;
+x7-x6=(x2-x1); top y7r=h;
+y4'=y4''=.6bar_height; .5[x4',x4'']=x4; x4'-x4''=.35(y3-y4);
+z1'=z1+.2curve*right+o*up; z1''=z1+.5(curve-currentbreadth)*dir135;
+z7'=z7+.2curve*right+o*down; z7''=z7+.5(curve-currentbreadth)*dir45;
+lft x8=.5u; y8l=.5[bar_height,x_height]; top y9r=top y10r=h; x9=.5[x8,x1];
+rt x11=w-.5u; x10=.5[x11,x7]; y11r=h;
+p0=z7'{right}..z6l..z5l..z4'l..z4l{right}..z4''l..z3l{left}..z2l..{right}z1l;
+p1=z1l{right}..z1'..z1r..z1''..z2r..{right}z3r..z4''r..{left}z4r..z4'r..{right}z5r..z6r..z7''..z7r;
+p2=z8l{up}..z9l...z10l..{right}z11l..{left}z11r..z10r...z9r..{down}z8r;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,6) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+(tim8,tim9-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim10-10,tim11)=subpath (10,infinity) of p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p1,tim9),rundy(p1,(tim0,hair)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,hair)),rundy(p1,tim10).zpet) of p1
+ ..subpath(rundy(p2,tim11),infinity) of p2..cycle;
+infill subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2hair)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11); labels(1',1'',7',7'');
+endchar;
+
+iff known chars.greek_rho:
+bskchar "The Greek letter rho";
+beginchar(chars.greek_rho,8.5u#,x_height#,desc_depth#); uni "0x03C1";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(curve,20); pos6(.5[stem,hair],0);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+bot y5l=-d; y6=-.5d; x6=x1r; x6r=lft x5l; x5'=x5r; y5'=y5l;
+p0=z5l{up}..z6l..{up}z1l..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r{down}..z6r..z5r..z5'..{up}z5l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0, rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6); labels(5');
+endchar;
+
+iff known chars.greek_varrho:
+bskchar "The Greek letter rho---alternative";
+beginchar(chars.greek_varrho,8.5u#,x_height#,desc_depth#); uni "0x03F1";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(stem,0); pos6(stem,0); pos7(hair,90); pos8(hair,0); pos9(stem,-60);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+y5=.5[y6,y1]; rt x5r=x6r=x1r;
+y7=.5[y6,y9]; x7=x2; rt x8r=w-u; y8=.5[y7,y9]; y8-y9=3/4stem;
+bot y9r=-d; x9r=x8-stem; .5[x9',x9r]=x9l; y9'=y9l;
+p0=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r---z5r..z6r..{z8-z9}z7r..{down}z8r..z9r..z9'..z9l..{up}z8l..{z9-z8}z7l..z6l..z5l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0, rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(9');
+endchar;
+
+iff known chars.greek_sigma:
+bskchar "The Greek letter sigma";
+beginchar(chars.greek_sigma,9.5u#,x_height#,0); uni "0x03C3";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(.35[stem,hair],-90); pos6(hair,-90);
+lft x1l=u; rt x3l=w-u-stem; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+top y5l=h+o; y6l=y5l; rt x6r=w-u; x5=w-3u;
+p0=z6l{right}..{down}z6r..z5r..z4r;
+p1=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+z0=bsktouch(subpath(2,infinity) of p0,down,p1,right);
+tim0=xpart(p0 intersectiontimes (z0--(x0,h)));
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+filldraw z1l{up}..z4l--subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_sigma_curved:
+bskchar "The Greek letter sigma (curved version)";
+beginchar(chars.greek_sigma_curved,9.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(.35[stem,hair],-90); pos5'(stem,-90); pos6(hair,0);
+lft x1l=u; rt x3l=w-u-stem; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+top y5l=h; top y6=h+hair; rt x6r=w-u; x5=w-3u; .5[x5,x5']=.5w; y5'l=y5l;
+p0=z5'{right}..z4l..z5l..{z6-z5}z6l..{down}z6r..z5r..z4r;
+p1=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+z0=bsktouch(subpath(2,infinity) of p0,down,p1,right);
+tim0-4=xpart(subpath(4,infinity) of p0 intersectiontimes (z0--(x0,h)));
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+filldraw z1l{up}..z4l..subpath(1,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,5',6);
+labels(0);
+endchar;
+
+iff known chars.greek_varsigma:
+bskchar "The Greek letter sigma---alternative";
+beginchar(chars.greek_varsigma,8u#,x_height#,.5desc_depth#); uni "0x03C2";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(stem,180); pos0(stem,0);
+pos3(curve,240); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+lft x2r=u; top y1r=h+o; y2=bar_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-u; y0=y1-stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5+.5stem;
+z0'=z0+.2stem*down+o*left; z0''=z0+.5(stem-currentbreadth)*dir45;
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+filldraw z0r..z0''..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l
+ ..z5l..z4l..z3l..z2l..z1l..{down}z0l..z0'..cycle;
+penlabels(0,1,2,3,4,5,6); labels(0',0'',6',6'');
+endchar;
+
+iff known chars.greek_tau:
+bskchar "The Greek letter tau";
+beginchar(chars.greek_tau,9u#,x_height#,0); uni "0x03C4";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,90); pos5(curve,10); pos6(.5[hair,stem],0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; y4r=y3r; x2l:=x2l+.5stem;
+z6=.5[z2,z3]+o*left; x5=x6-o; bot y5l=0; y5r:=y5r+o;
+p0=z1r..z2r---z4r..z4l{down}..z3l..{left}z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{dir-60}z5l..(x5r,0)..z5r{dir130}..{up}z6r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_tau_curved:
+bskchar "The Greek letter tau (curved version)";
+beginchar(chars.greek_tau_curved,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,180); pos5(curve,10); pos6(.5[hair,stem],0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; top y4=h+hair; x2l:=x2l+.5stem;
+z6=.5[z2,z3]+o*left; x5=x6-o; bot y5l=0; y5r:=y5r+o;
+p0=z1r..z2r{right}..z3r..{z4-z3}z4r..z4l{down}..z3l..{left}z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{dir-60}z5l..(x5r,0)..z5r{dir130}..{up}z6r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_upsilon:
+bskchar "The Greek letter upsilon";
+beginchar(chars.greek_upsilon,8.5u#,x_height#,0); uni "0x03C5";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(hair,90);
+pos4(hair,180); pos5(curve,180);
+top y1=h; bot y3l=-o; x3=.5[x2,x4];
+lft x2l=u; x1=x2;
+y2=.5h;
+rt x4l=w-u; y4=bar_height;
+top y5''=h+o;
+x5-x4=.45(y4-y5);
+z5'=z5+.2curve*down+o*left; z5''=z5+.5(curve-currentbreadth)*dir135;
+filldraw z1r---z2r..z3r..{up}z4r..z5'..{up}z5r..z5''
+ ..z5l..{down}z4l..z3l..z2l---z1l..cycle;
+penlabels(1,2,3,4,5); labels(5',5'');
+endchar;
+
+iff known chars.greek_upsilon_curved:
+bskchar "The Greek letter upsilon (curved version)";
+beginchar(chars.greek_upsilon_curved,9.5u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(hair,180); pos7(curve,180);
+top y2r=h; bot y5l=-o; x5=.5[x4l,x6];
+x3=x4l; lft x1l=.5u; x3l-x1r=max(curve,1.5u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+z2=z1+whatever*dir60;
+y4-y5=y2-y3; rt x6l=w-u; y6=bar_height;
+top y7''=h+o;
+x7-x6=.45(y6-y7);
+z7'=z7+.2curve*down+o*left; z7''=z7+.5(curve-currentbreadth)*dir135;
+filldraw z1r{up}..z2r..z3r..z4r..z5r..{up}z6r..z7'..{up}z7r..z7''
+ ..z7l..{down}z6l..z5l..z4l..z3l..z2l..{down}z1l..cycle;
+penlabels(1,2,3,4,5,6,7); labels(7',7'');
+endchar;
+
+iff known chars.greek_phi:
+bskchar "The Greek letter phi";
+beginchar(chars.greek_phi,12u#,asc_height#,desc_depth#); uni "0x03C6";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+oblu:=2oblu;
+pos1(.5[stem,curve],0); pos2(hair,90); pos3(.5[stem,curve],180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5x_height; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=x_height+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+y5=h; y6=-d; x5=x6=.5w; pos5(hair, 0); pos6(hair,0);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+bskpoints(5,6,hair,hair);
+(tim1,tim2)=p0 intersectiontimes (z5l--z6l);
+(tim3,tim4)=p0 intersectiontimes (z6r--z5r);
+(tim5,tim6)=p0 intersectiontimes (z0r--z5r);
+(tim7,tim8)=p0 intersectiontimes (z5l--z0l);
+(tim11,tim12)=p1 intersectiontimes (z0r--z6r);
+(tim13,tim14)=p1 intersectiontimes (z5r--z0r);
+(tim15,tim16)=p1 intersectiontimes (z0l--z6l);
+(tim17,tim18)=p1 intersectiontimes (z5l--z0l);
+filldraw subpath (0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy((z6l--z5l),tim2),infinity) of (z5l--z6l)
+ ..subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r)
+ ..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5r)
+ ..subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l)
+ ..subpath(rundy(p0,tim7),infinity) of p0--cycle;
+infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r)
+ ..subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1
+ ..subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle;
+infill subpath (0, rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l)
+ ..subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l)
+ ..subpath(rundy(p1,tim15),infinity) of p1--cycle;
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_phi_curved:
+bskchar "The Greek letter phi (curved version)";
+beginchar(chars.greek_phi_curved,12u#,asc_height#,desc_depth#); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+oblu:=2oblu;
+pos1(.5[stem,curve],0); pos2(hair,90); pos3(.5[stem,curve],180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5x_height; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=x_height+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+y5=h; y6=-d+curve; x5=x6=.5w; pos5(hair, 0); pos6(hair,0);
+pos7(curve,0); y7=-d; x7r=x6l-o;
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+bskpoints(5,6,hair,hair);
+(tim1,tim2)=p0 intersectiontimes (z5l--z6l);
+(tim3,tim4)=p0 intersectiontimes (z6r--z5r);
+(tim5,tim6)=p0 intersectiontimes (z0r--z5r);
+(tim7,tim8)=p0 intersectiontimes (z5l--z0l);
+(tim11,tim12)=p1 intersectiontimes (z0r--z6r);
+(tim13,tim14)=p1 intersectiontimes (z5r--z0r);
+(tim15,tim16)=p1 intersectiontimes (z0l--z6l);
+(tim17,tim18)=p1 intersectiontimes (z5l--z0l);
+filldraw subpath (0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy((z6l--z5l),tim2),infinity) of (z5l--z6l)
+ ..z7l&z7l..z7r
+ ..subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r)
+ ..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5r)
+ ..subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l)
+ ..subpath(rundy(p0,tim7),infinity) of p0--cycle;
+infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r)
+ ..subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1
+ ..subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle;
+infill subpath (0, rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l)
+ ..subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l)
+ ..subpath(rundy(p1,tim15),infinity) of p1--cycle;
+penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.greek_varphi:
+bskchar "The Greek letter phi---alternative";
+beginchar(chars.greek_varphi,12u#,x_height#,desc_depth#); uni "0x03D5";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos2(hair,-45); pos3(.5[hair,stem],0); pos4(stem,0); pos5(hair,90);
+pos6(stem,180); pos7(hair,-90); pos8(hair,0); pos9(hair,0);
+top y2l=x_height; bot y5l=-o; x5=.5[x3,x6];
+lft x3l=u; y3=bar_height;
+z2=z3+whatever*dir60;
+rt x6l=w-u; y6=bar_height;
+top y7l=h+o; .5[x8,x6]=x7;
+y8=.5bar_height; y9=-d; x8=x9=.5[x3,x7];
+p0=z2r..z3r..z5r..{up}z6r..z7r..z8r---z9r;
+p1=z9l---z8l..z7l..{down}z6l..z5l..z3l..z2l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p1;
+(tim2-3,tim3)=subpath (3,infinity) of p1 intersectiontimes p0;
+(tim4,tim5-4)= subpath(0,3) of p1 intersectiontimes subpath(4,infinity) of p1;
+(tim6,tim7-5)=subpath(0,4) of p0 intersectiontimes subpath(5,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p1,tim5),infinity) of p1..cycle;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
+penlabels(2,3,4,5,6,7,8,9); labels(7',7'');
+endchar;
+
+iff known chars.greek_varphi_curved:
+bskchar "The Greek letter phi---alternative (curved version)";
+beginchar(chars.greek_varphi_curved,12u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(stem,180); pos7(hair,-90);
+pos8(hair,0); pos9(hair,0); pos10(curve,0);
+top y2r=x_height; bot y5l=-o; x5=.5[x4l,x6];
+x3=x4l; lft x1l=.5u; x3l-x1r=max(curve,1.5u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+z2=z1+whatever*dir60;
+y4-y5=y2-y3; rt x6l=w-u; y6=bar_height;
+top y7l=h+o;
+.5[x8,x6]=x7;
+y8=.5bar_height; y9=-d+curve; x8=x9=.5[x3,x7]; y10=-d; x10r=x9l-o;
+p0=z1r{up}..z2r..z3r..z4r..z5r..{up}z6r..z7r..z8r---z9r..z10r..z10l;
+p1=z10l..z9l---z8l..z7l..{down}z6l..z5l..z4l..z3l..z2l..{down}z1l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p1;
+(tim2-3,tim3)=subpath (3,infinity) of p1 intersectiontimes p0;
+(tim4,tim5-4)= subpath(0,3) of p1 intersectiontimes subpath(4,infinity) of p1;
+(tim6,tim7-6)=subpath(0,5) of p0 intersectiontimes subpath(6,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p1,tim5),infinity) of p1..cycle;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(7',7'');
+endchar;
+
+iff known chars.greek_chi:
+bskchar "The Greek letter chi";
+beginchar(chars.greek_chi,12u#,x_height#,desc_depth#); uni "0x03C7";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(stem,150); pos1(hair,90); pos4(hair,90); pos5(stem,150);
+pos6(hair,0); pos7(hair,0); pos8(curve,0); pos9(curve,0);
+top y1r=h+o; bot y4l=-d;
+.5[x1,x4-u]=.5[x2,x3-u]=.5w;
+x1=2u; x3-x2=1/4w+.5u; y2=bar_height; -d+h-y2=y3;
+pos2(stem,angle(z2-z3)-90); pos3(stem,angle(z2-z3)-90);
+lft x0r=u; y0=y1-stem; z0'=(x0r,y0l);
+rt x5l=w; y5=y4+stem; z5'=(x5l,y5r);
+top y6=h-curve; bot y7=-d+curve; rt x6r=w-2.5u-o; x7l=w-x6r;
+y8=-d; z8r=whatever[z7l,z6l]+o*left; y9=h; z9l=whatever[z6l,z7l]+o*right;
+p0=z0r{up}..z1r{right}..z2r---z3r..{right}z4r..z5r;
+p1=z5r..z5'..z5l..z4l{left}..z3l---z2l..{left}z1l..z0l;
+p2=z6l---z7l..z8l&z8l..z8r..z7r---z6r..z9r&z9r..z9l..cycle;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3-4)=p0 intersectiontimes subpath(4,length p2) of p2;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,length p2) of p2;
+(tim6,tim7)=p1 intersectiontimes subpath(0,1) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(rundy(p2,tim3),length p2) of p2
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..reverse subpath(rundy(p2,tim7),rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1
+ ..z0l..z0'..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(0',5');
+endchar;
+
+iff known chars.greek_psi:
+bskchar "The Greek letter psi";
+beginchar(chars.greek_psi,12u#,asc_height#,desc_depth#); uni "0x03C8";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(hair,180); pos7(curve,180);
+pos8(hair,0); pos9(hair,0); pos10(curve,0);
+top y2r=x_height; bot y5l=-o; x5=.5[x4l,x6];
+x3=x4l; lft x1l=.5u; x3l-x1r=max(1.5curve,2u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+z2=z1+whatever*dir60;
+y4-y5=y2-y3; rt x6l=w-u; y6=bar_height;
+top y7''=x_height+o;
+x7-x6=.45(y6-y7);
+z7'=z7+.2curve*down+o*left; z7''=z7+.5(curve-currentbreadth)*dir135;
+y8=h; y9=-d; x8=x9=.5[x3r,x7l];
+p0=z1r{up}..z2r..z3r..z4r..z5r..{up}z6r..z7'..{up}z7r;
+p1=z7r{up}..z7l..{down}z6l..z5l..z4l..z3l..z2l..{down}z1l;
+p2=z9l--z8l;
+p3=z8r--z9r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ &subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(7',7'');
+endchar;
+
+iff known chars.greek_psi_curved:
+bskchar "The Greek letter psi (curved version)";
+beginchar(chars.greek_psi_curved,12u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(hair,180); pos7(curve,180);
+pos8(hair,0); pos9(hair,0); pos10(curve,0);
+top y2r=x_height; bot y5l=-o; x5=.5[x4l,x6];
+x3=x4l; lft x1l=.5u; x3l-x1r=max(1.5curve,2u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+z2=z1+whatever*dir60;
+y4-y5=y2-y3; rt x6l=w-u; y6=bar_height;
+top y7''=x_height+o;
+x7-x6=.45(y6-y7);
+z7'=z7+.2curve*down+o*left; z7''=z7+.5(curve-currentbreadth)*dir135;
+y8=h; y9=-d+curve; x8=x9=.5[x3r,x7l]; y10=-d; x10r=x9l-o;
+p0=z1r{up}..z2r..z3r..z4r..z5r..{up}z6r..z7'..{up}z7r;
+p1=z7r{up}..z7l..{down}z6l..z5l..z4l..z3l..z2l..{down}z1l;
+p2=z10l..z9l---z8l;
+p3=z8r---z9r..z10r..z10l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ &subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(7',7'');
+endchar;
+
+iff known chars.greek_omega:
+bskchar "The Greek letter omega";
+beginchar(chars.greek_omega,13.5u#,x_height#,0); uni "0x03C9";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,90); pos2(hair,180); pos3(stem,270);
+pos4(hair,90); pos4'(hair,240); pos4''(.5[hair,stem],-60);
+pos5(hair,270); pos6(curve,0); pos7(stem,90);
+top y1r=h; lft x2r=u; y2=.5h; bot y3r=-o;
+rt x1=x3; .5[x3,x5]=.5w; x5-x3=1/3w;
+1/3[x4,x3]=.45w; y4l=bar_height;
+bot y5r=-o; y6=y2; rt x6r=w-.5u;
+x7-x6=(x2-x1); top y7r=h;
+y4'=y4''=.6bar_height; .5[x4',x4'']=x4; x4'-x4''=.35(y3-y4);
+z1'=z1+.2curve*right+o*up; z1''=z1+.5(curve-currentbreadth)*dir135;
+z7'=z7+.2curve*right+o*down; z7''=z7+.5(curve-currentbreadth)*dir45;
+p0=z7'{right}..z6l..z5l..z4'l..z4l{right}..z4''l..z3l{left}..z2l..{right}z1l;
+p1=z1l{right}..z1'..z1r..z1''..z2r..{right}z3r..z4''r..{left}z4r..z4'r..{right}z5r..z6r..z7''..z7r;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,6) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,hair)),infinity) of p1..z7l
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2hair)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'',7',7'');
+endchar;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
new file mode 100644
index 00000000000..bf4606bcb02
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
@@ -0,0 +1,6900 @@
+%Boisik Latin letters in Roman form
+
+charscription(14u,cap_height,0)(
+numeric alpha, right_stem, left_stem;
+lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+y4=y5=.35h; z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+pos4(cap_bar,angle(z3'-z1r)); pos5(cap_bar,angle(z3'-z2l));
+z4l=whatever[z1'r,z3']; z5l=whatever[z2'l,z3'];
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
+y3''=y1r.b if bold_face: -hair fi; z3''=whatever[z1r,z3'];
+filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a{left}..z2r+ser_boule*up..
+ {left}z2l.a..{right}z2l.c..diag_serif(2l,3')---obl(5l,2l,4l)---
+ obl(4l,5l,1l)---z3'' ..z1r.c{right}..
+ z1r.a{left}..cycle;
+infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle;
+penlabels(1,1',2,2',3,3',4,5); labels(3'');
+);
+
+iff known chars.latin_A:
+bskchar "The letter A";
+beginchar(chars.latin_A,14u#,cap_height#,0); uni "0x0041";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Aacute:
+bskchar "The letter A with acute";
+beginchar(chars.latin_Aacute,14u#,Acc_height#,0); uni "0x00C1";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2'l;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Agrave:
+bskchar "The letter A with grave";
+beginchar(chars.latin_Agrave,14u#,Acc_height#,0); uni "0x00C0";
+pickup tiny.nib;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+usechar;
+x101=x3l+(x3l-x2'l);
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Adoublegrave:
+bskchar "The letter A with doublegrave";
+beginchar(chars.latin_Adoublegrave,14u#,Acc_height#,0); uni "0x0200";
+pickup tiny.nib;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+usechar;
+x102-x100=3u; .5[x101,x103]=x3l;
+d_grave(100,101,102,103,whatever).capital;
+endchar;
+
+iff known chars.latin_Aumlaut:
+bskchar "The letter A with umlaut";
+beginchar(chars.latin_Aumlaut,14u#,Acc_height#,0); uni "0x00C4";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x3l; x101-x100=2/3(x5-x4);
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_Acircumflex:
+bskchar "The letter A with circumflex";
+beginchar(chars.latin_Acircumflex,14u#,Acc_height#,0); uni "0x00C2";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x3l;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Acaron:
+bskchar "The letter A with caron";
+beginchar(chars.latin_Acaron,14u#,Acc_height#,0); uni "0x01CD";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x1'r; bot y101l=cap_height+apex_o;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Abreve:
+bskchar "The letter A with breve";
+beginchar(chars.latin_Abreve,14u#,Acc_height#+apex_o#,0); uni "0x0102";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x1'r; x102-x100=5u; bot y101l=top cap_height+apex_o;
+breve(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Ainvbreve:
+bskchar "The letter A with inverted breve";
+beginchar(chars.latin_Ainvbreve,14u#,Acc_height#,0); uni "0x0202";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x1'r; x102-x100=5u;
+tieacc(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Amacron:
+bskchar "The letter A with macron";
+beginchar(chars.latin_Amacron,14u#,Acc_height#-.1x_height#,0); uni "0x0100";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+iff known chars.latin_Atilde:
+bskchar "The letter A with tilde";
+beginchar(chars.latin_Atilde,14u#,Acc_height#,0); uni "0x00C3";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; bot y100=top y3l;
+tilde(100,101).capital;
+endchar;
+
+iff known chars.latin_Aring:
+bskchar "The letter A with ring";
+beginchar(chars.latin_Aring,14u#,Acc_height#,0); uni "0x00C5";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x3l; x100-x101=1.3u;
+ring(100,101).capital;
+endchar;
+
+iff known chars.latin_Adotabove:
+bskchar "The letter A with dot above";
+beginchar(chars.latin_Adotabove,14u#,Acc_height#,0); uni "0x0226";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x3l;
+dotabove(100);
+endchar;
+
+iff known chars.latin_Aogonek:
+bskchar "The letter A with ogonek";
+beginchar(chars.latin_Aogonek,14u#,cap_height#,.85desc_depth#); uni "0x0104";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem;
+lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos6(stem,0); pos7(curve,0); pos8(hair,45); pos9(hair,160);
+y4=y5=.35h; z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+pos4(cap_bar,angle(z3'-z1r)); pos5(cap_bar,angle(z3'-z2l));
+z4l=whatever[z1'r,z3']; z5l=whatever[z2'l,z3'];
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
+y3''=y1r.b if bold_face: -hair fi; z3''=whatever[z1r,z3'];
+x6=x7l+1.5u=x2l.a; x8-x7l=3u; rt x9l=x8+1.5u;
+bot y6=0; y7=-.5d; bot y8l=-d; y9=-2/3d;
+filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a{left}..z2+ser_boule*up..
+ {left}z6r&z6r..z7r..z8r..{z6-z7}z9r..z9l{z7-z6}..z8l..z7l..{z6r-z7l}z6l..{right}z2l.c..diag_serif(2l,3')---obl(5l,2l,4l)---
+ obl(4l,5l,1l)---z3'' ..z1r.c{right}..
+ z1r.a{left}..cycle;
+infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7,8,9); labels(3'');
+endchar;
+
+iff known chars.latin_B:
+bskchar "The letter B";
+beginchar(chars.latin_B,13u#,cap_height#,0); uni "0x0042";
+italcorr .5[x_height#,cap_height#]*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(.75cap_hair,90); pos7(ser_height,90);
+pos8(.7ser_height,270); pos9(cap_hair,270); pos10(.95cap_curve,180);
+x3=x7=x1r; y7=y6=com_height; rt x5r=w-u; y5=.45[y4,y6];
+bot y3r=bot y4r=0; x6=.5[x7,x9]; x4=.5[x1r,x5l];
+y8l+serif_o=y9l; top y9l=h+drop_stem; x8=x3; x9=.5[x6,x4];
+x5-x10=.3cap_curve; y10=.45[y9,y6];
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+p0=z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r---z4r..z5r..z6r---z7;
+p1=z7l{dir90}..{right}z6l..z5l..{left}z4l..{up}z3l;
+p2=z2l.b{up}..{left}z2l.c..{right}z2l.a..z9l..z10l..z6---z7;
+p3=z7r{dir-90}..{right}z6r..z10r..z9r{left}..{down}z8r;
+z0=bsktouch(p0,2up,p2,2down);
+tim1=xpart(p0 intersectiontimes (z0--(x0,bar_height)));
+tim2=xpart(p2 intersectiontimes (z0--(x0,x_height)));
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0
+ ..(reverse subpath(0,rundy(p2,tim2).zpet) of p2)--cycle;
+infill p1---cycle;
+infill p3---cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+charscription(13.3u,cap_height,0)(
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+z5'=((.5w,y3+.2h)--(2w,y3+.2h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
+z5''=((.5w,y3-.2h+o)--(2w,y3-.2h+o)) intersectionpoint p0; tim2= ypart(((.5w,y3-.2h)--(2w,y3-.2h)) intersectiontimes p0);
+z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3);
+z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1);
+z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3);
+z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d];
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1);
+p2:=counterclockwise (subpath(0,tim1) of reverse p0..z5'a--z5'b---z5'e..subpath (tim3,5) of p1..
+ reverse (subpath(0,tim2) of p0..z5''a--z5''b---z5''e..
+ reverse subpath (1,tim4) of p1) & cycle);
+bskcharscriptcmd;
+filldraw p2;
+penlabels(1,2,3,4); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,);
+);
+
+iff known chars.latin_C:
+bskchar "The letter C";
+beginchar(chars.latin_C,13.3u#,cap_height#,0); uni "0x0043";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Ccaron:
+bskchar "The letter C with caron";
+beginchar(chars.latin_Ccaron,13.3u#,Acc_height#,0); uni "0x10C";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Cacute:
+bskchar "The letter C with acute";
+beginchar(chars.latin_Cacute,13.3u#,Acc_height#,0); uni "0x0106";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4-u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Ccircumflex:
+bskchar "The letter C with circumflex";
+beginchar(chars.latin_Ccircumflex,13.3u#,Acc_height#,0); uni "0x0108";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Cdotabove:
+bskchar "The letter C with dot above";
+beginchar(chars.latin_Cdotabove,13.3u#,Acc_height#,0); uni "0x010A";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.sign_centigrade:
+bskchar "Centigrade sign";
+beginchar(chars.sign_centigrade,17.3u#,asc_height#+o#,0); uni "0x2103";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar shifted (4u*right);
+save x,y;
+pos1a(hair,0); pos1b(hair,90);
+pos1c(hair,180); pos1d(hair,270);
+z0=(3u,h-2u)=.5[z1a,z1c]=.5[z1b,z1d];
+x1b=x1d; y1a=y1c; y1d-y1b=(x1c-x1a); x1a.l=x1; lft x1=u;
+filldraw z1a.l{down}..z1b.l..z1c.l..z1d.l..cycle;
+infill z1a.r{down}..z1b.r..z1c.r..z1d.r..cycle;
+penlabels(1a,1b,1c,1d); labels(0);
+endchar;
+
+iff known chars.sign_copyright:
+bskchar "Copyright sign (circled C)";
+beginchar(chars.sign_copyright,15u#,asc_height#,0); uni "0x00A9";
+italcorr x_height#*slant+.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv=.66;
+lft x6=u; x2=w-x6; y2=.5h; top y8=h;
+lft x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+multiply(1.5*zv)(cap_curve,cap_hair,ser_height,serif_o);
+usechar shifted -z5''c scaled zv shifted (.5WW+.33u,.5HH);
+endchar;
+
+iff known chars.sign_copyleft:
+bskchar "Copyleft sign (circled turned C)";
+beginchar(chars.sign_copyleft,15u#,asc_height#,0); uni "non";
+italcorr x_height#*slant+.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv=.66;
+lft x6=u; x2=w-x6; y2=.5h; top y8=h;
+lft x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+def bskcharscriptcmd:=
+ save counterclockwise;
+ vardef counterclockwise primary c:= reverse c
+ enddef
+enddef;
+multiply(1.5*zv)(cap_curve,cap_hair,ser_height,serif_o);
+usechar slanted (-slant) shifted -z5''c reflectedabout (origin,(0,h)) slanted (slant) scaled zv shifted (.5WW+slant*5u,.5HH);
+endchar;
+
+iff known chars.latin_Ccedilla:
+bskchar "The letter C with cedilla";
+beginchar(chars.latin_Ccedilla,13.3u#,cap_height#,.65desc_depth#); uni "0x00C7";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[],po; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
+pos6(.5stem,0); pos7(.5stem,0); pos8(stem,0); pos9(.5stem,-110);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+z5'=((.5w,y3+.2h)--(2w,y3+.2h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
+z5''=((.5w,y3-.2h+o)--(2w,y3-.2h+o)) intersectionpoint p1; tim2= ypart(((.5w,y3-.2h)--(2w,y3-.2h)) intersectiontimes p1);
+z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3);
+z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1);
+z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3);
+z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d];
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1);
+x6l=x7l=x2; y6=0; y7=-hair; y8=-.5d;
+rt x8r-lft x9r=4u; x6r-lft x9r=2u; y9r=-d;
+p3:=z7r..{down}z8r..{left}z9r..{right}z9l..{up}z8l..z7l--z6l;
+p4:=reverse(z6r{down}..subpath (rundy(p3,(0,curve)),infinity) of p3);
+filldraw subpath(0,tim1) of reverse p0..z5'a--z5'b---z5'e
+ ..subpath (tim3,length p1) of p1
+ & subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p4,0),rundy(p4,infinity).zpet) of p4
+ ..reverse (subpath(0,tim2) of p0..z5''a--z5''b---z5''e
+ ..reverse subpath (rundy(p1,1),tim4) of p1) & cycle;
+penlabels(1,2,3,4,6,7,8,9); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,);
+penlabels();
+endchar;
+
+iff known chars.sign_cedi:
+bskchar "Cedi sign";
+beginchar(chars.sign_cedi,13.3u#,Acc_height#,Acc_height#-cap_height#); uni "0x20B5";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
+pos7(hair,0); pos8(hair,0);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5cap_height; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=cap_height+o;
+x7=x8=x4; top y7=h; bot y8=-d;
+p0:=z1r{down}..z2r..z3r..z4r..{down}z1r;
+p1:=z1l{up}..z4l..z3l..z2l..{up}z1l;
+p2:=z7r--z8r;
+p3:=z8l--z7l;
+z5'=((.5w,y3+.2cap_height)--(2w,y3+.2cap_height)) intersectionpoint p0;
+tim1= ypart(((.5w,y3+.2cap_height)--(2w,y3+.2cap_height)) intersectiontimes p0);
+z5''=((.5w,y3-.2cap_height+o)--(2w,y3-.2cap_height+o)) intersectionpoint p0;
+tim2= ypart(((.5w,y3-.2cap_height)--(2w,y3-.2cap_height)) intersectiontimes p0);
+z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,cap_height+o); z5'c=(.35[x4,x3r],y3);
+z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1);
+z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3);
+z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d];
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1);
+(tim5-2,tim6)=subpath(2,infinity) of p0 intersectiontimes p2;
+(tim7-2,tim8)=subpath(2,infinity) of p0 intersectiontimes p3;
+(tim9,tim10)=subpath(0,3) of p0 intersectiontimes p2;
+(tim11-2,tim12)=subpath(2,infinity) of p1 intersectiontimes p2;
+(tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p3;
+(tim15,tim16)=subpath(0,2) of p1 intersectiontimes p3;
+(tim17,tim18)=subpath(0,2) of p1 intersectiontimes p2;
+(tim19,tim20)=subpath(0,3) of p0 intersectiontimes p3;
+filldraw z5'e---z5'b--z5'a..subpath(tim1,rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p2,tim6),rundy(p2,tim10).zpet) of p2
+ ..subpath(rundy(p0,tim9),tim2) of p0..z5''a--z5''b---z5''e
+ ..subpath(tim4,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p2,tim12),infinity) of p2
+ ..subpath(0,rundy(p3,tim14).zpet) of p3
+ ..subpath(rundy(p1,tim13),infinity) of p1
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(p3,tim16),infinity) of p3
+ ..subpath(0,rundy(p2,tim18).zpet) of p2
+ ..subpath(rundy(p1,tim17),tim3) of p1..cycle;
+infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3
+ ..subpath(rundy(p0,tim7),infinity) of p0
+ ..subpath(0,rundy(p0,tim19).zpet) of p0..cycle;
+penlabels(1,2,3,4,7,8); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,);
+endchar;
+
+charscription(15u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(cap_hair,90); pos7(.75ser_height,90);
+x3=x7=x1r; y7r+serif_o=y6r; top y6r=h+drop_stem; rt x5r=w-u; y5=.52[y4,y6];
+bot y3r=bot y4r=0; x6=x4 if not monospace:+u fi; x6=.5[x1r,x5l]-u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r---
+ z4r..z5r..{left}z6r..z2l.a{left}..z2l.c{right}..{down}z2l.b---cycle;
+infill z7l..{right}z6l..z5l..{left}z4l..z3l---cycle;
+penlabels(1,2,3,4,5,6,7);
+);
+
+iff known chars.latin_D:
+bskchar "The letter D";
+beginchar(chars.latin_D,15u#,cap_height#,0); uni "0x0044";
+italcorr x_height#*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Dcaron:
+bskchar "The letter D with caron";
+beginchar(chars.latin_Dcaron,15u#,Acc_height#,0); uni "0x010E";
+italcorr x_height#*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=.6[x2r,x6];
+hacek(100,101,102).capital;
+endchar;
+
+charscription(15.5u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2.5u;
+pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(cap_hair,90); pos7(.75ser_height,90);
+pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90);
+x3=x7=x1r; y7r+serif_o=y6r; top y6r=h+drop_stem; rt x5r=w-u; y5=.52[y4,y6];
+bot y3r=bot y4r=0; x6=x4 if not monospace:+u fi; x6=.5[x1r,x5l]-u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+x9-x8=4u if bold_face:+u fi; y9=y9'=y8=y8'=.8[bar_height,x_height]; lft x8=u;
+x8'=x1l; x9'=x1r; bskpoints(8,9,hair,hair);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r
+ ---z4r..z5r..{left}z6r..z2l.a{left}..z2l.c{right}..{down}z2l.b
+ ---obl(8'r,2l,8rr)---z8rr..z8l---obl(8'l,8l,1l)---cycle;
+infill z7l..{right}z6l..z5l..{left}z4l..z3l---obl(9'l,1l,9l)---z9ll..z9r---obl(9'r,9r,2r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(8rr,9ll);
+);
+
+iff known chars.latin_Dstroke:
+bskchar "The letter D with stroke";
+beginchar(chars.latin_Dstroke,15.5u#,cap_height#,0); uni "0x0110";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Eth:
+bskchar "The letter Eth";
+beginchar(chars.latin_Eth,15.5u#,cap_height#,0); uni "0x00D0";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+charscription(13.5u, cap_height,0)(
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+top y4r=h; rt x4r=w-2.5u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+p=reverse arm_top_r_points(2r,4);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ arm_bot_r_points(1r,3).alt---z5'l{dir80}..z5l---z6l..
+ z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r..
+ {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r---
+ p---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,5,5',6,6');
+);
+
+iff known chars.latin_E:
+bskchar "The letter E";
+beginchar(chars.latin_E,13.5u#,cap_height#,0); uni "0x0045";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Eacute:
+bskchar "The letter E with acute";
+beginchar(chars.latin_Eacute,13.5u#,Acc_height#,0); uni "0x00C9";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x6-u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Ecaron:
+bskchar "The letter E with caron";
+beginchar(chars.latin_Ecaron,13.5u#,Acc_height#,0); uni "0x011A";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x6;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Egrave:
+bskchar "The letter E with grave";
+beginchar(chars.latin_Egrave,13.5u#,Acc_height#,0); uni "0x00C8";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x4d,x6];
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Edoublegrave:
+bskchar "The letter E with double grave";
+beginchar(chars.latin_Edoublegrave,13.5u#,Acc_height#,0); uni "0x0204";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u; .5[x100,x101]=x2r;
+d_grave(100,101,102,103,whatever).capital;
+endchar;
+
+iff known chars.latin_Ecircumflex:
+bskchar "The letter E with circumflex";
+beginchar(chars.latin_Ecircumflex,13.5u#,Acc_height#,0); uni "0x00CA";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x6;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Eumlaut:
+bskchar "The letter E with umlaut";
+beginchar(chars.latin_Eumlaut,13.5u#,Acc_height#,0); uni "0x00CB";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x6l; x101-x100=x6'-x2r;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_Emacron:
+bskchar "The letter E with macron";
+beginchar(chars.latin_Emacron,13.5u#,Acc_height#-.1x_height#,0); uni "0x0112";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+lft x100=rt x2r; x101-x100=5u;
+macron(100,101);
+endchar;
+
+iff known chars.latin_Edotabove:
+bskchar "The letter E with dot above";
+beginchar(chars.latin_Edotabove,13.5u#,Acc_height#,0); uni "0x0116";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x100=x6;
+dotabove(100);
+endchar;
+
+iff known chars.latin_Ebreve:
+bskchar "The letter E with breve";
+beginchar(chars.latin_Ebreve,13.5u#,Acc_height#,0); uni "0x0114";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x6; x102-x100=5u;
+bot bot y101l=cap_height;
+breve(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Einvbreve:
+bskchar "The letter E with inverted breve";
+beginchar(chars.latin_Einvbreve,13.5u#,Acc_height#+o#,0); uni "0x0206";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x6; x102-x100=5u;
+bot bot y100=cap_height+o;
+tieacc(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Eogonek:
+bskchar "The letter E with ogonek";
+beginchar(chars.latin_Eogonek,13.5u#,cap_height#,.85desc_depth#); uni "0x0118";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
+pos7(stem,0); pos8(curve,0); pos9(hair,45); pos10(hair,160);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+top y4r=h; rt x4r=w-2.5u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r);
+x5'=x2r; x6'-x6=1.5u;
+x7=x8l+1.5u=x3a-o; x9-x8l=3u; rt x10l=x9+1.5u;
+bot y7=0; y8=-.5d; bot y9l=-d; y10=-2/3d;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+p0=reverse arm_top_r_points(2r,4);
+p1=arm_bot_r_points(1r,3).alt;
+p2=z7l{z8l-z7r}..z8l...z9l..{z7-z8}z10l..z10r{z8-z7}..z9r..z8r..z7r
+ &z7r..z7+.5o*up;
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4-2)=p1 intersectiontimes subpath(2,infinity) of p2;
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ subpath(0,rundy(p1,(tim1,2hair)).zpet) of p1
+ ..subpath(rundy(p2,(tim2,2hair)),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim3),infinity) of p1---z5'l{dir80}..z5l---z6l..
+ z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r..
+ {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r---
+ p0---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,5,5',6,6',7,8,9,10);
+endchar;
+
+iff known chars.latin_Ecedilla:
+bskchar "The letter E with cedilla";
+beginchar(chars.latin_Ecedilla,13.5u#,cap_height#,.65desc_depth#); uni "0x0228";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
+pos7(.5stem,0); pos8(.5stem,0); pos9(stem,0); pos10(.5stem,-110);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+top y4r=h; rt x4r=w-2.5u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+p0=reverse arm_top_r_points(2r,4);
+x7l=x8l=x6'; bot y7=0; y8=-hair; y9=-.5d;
+rt x9r-lft x10r=4u; x7r-lft x10r=2u; y10r=-d;
+p1:=z8r..{down}z9r..{left}z10r..{right}z10l..{up}z9l..z8l--z7l;
+p2:=reverse(z7r{down}..subpath (rundy(p1,(0,curve)),infinity) of p1);
+p3:=arm_bot_r_points(1r,3).alt;
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z7l+hair*left..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2..z7r+stem*right---subpath(1,infinity) of p3---z5'l{dir80}..z5l---z6l..z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r..{down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r---p0---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,5,5',6,6',7,8,9,10);
+endchar;
+
+charscription(18u,cap_height,0)(
+numeric alpha;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+top y4r=h; rt x4r=w-2u;
+lft x1l=lft x2l=8.5u;
+lft x7l=2u; y7l=y1;
+alpha=diag_ratio(2,cap_hair,y2l-y7l,x2l-x7l);
+pos7(alpha*cap_hair,0);
+y5=y5'=y6=y6'=.475[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+cap_serifs_bl(7l); cap_serifs_br(7r);
+if monospace:
+ pos3(beak,-90); %Bottom arm
+ z3c=(x3-2/3u,y3); z3d=(.5[x3e,x3c],y3e);
+ z3e=z1r+(alt_cap_hair-currentbreadth,cap_jut);
+ z3f=z1r+.75ser_height*up;
+ penlabels(3); labels(3c,3d,3e,3f);
+ pos4(.65beak,90); %Top arm
+ z4a=z2r+.55ser_height*down; z4b=z2r+(cap_jut,-cap_hair+currentbreadth);
+ z4c=z4l+serif_o*left;
+ penlabels(4); labels(4a,4b,4c);
+else: p=reverse arm_top_r_points(2r,4);
+fi;
+x2l'=x2l; z2l'=whatever[z2l+alpha*cap_hair*right,z7];
+pos9(cap_bar,90); y8r-y8l=cap_bar-tiny; .5[y8r,y8l]=y9=y5;
+x1l-x9=x5-x5'; z8r=whatever[z7,z2l']; z8l=whatever[z7,z2l'];
+y8'r=y8r; y8'l=y8l; x8'l=x8'r=.5[x8l,x8r]+(x5-x5');
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ if monospace: z1r---z3r+o*left..z3r+o*up---z3l..z3l+o*left{down}
+ ..z3c..z3d---z3e..{up}z3f
+ else: arm_bot_r_points(1r,3).alt fi
+ ---z5'l{dir80}..z5l---z6l..z6'l+.5serif_o*left{down}..
+ z6'l{dir87}..{dir93}z6'r..{down}z6'r+.5serif_o*left..
+ z6r---z5r..{dir100}z5'r---
+ if monospace: z4a{up}..z4b---z4b+o*right..{dir-45}z4c..z4l
+ ---z4r+o*down..z4r+o*left---z2r
+ else: p fi
+ ---obl(2l,2r,7l)---
+ diag_serif(7l,2l)..{left}z7l.c..z7l.a{right}..
+ z7+ser_boule*up..{right}z7r.a..{left}z7r.c..
+ diag_serif(7r,2r)---obl(8l,7r,9l)---z9l{right}..(x1l,y5'l)---cycle;
+oblu:=2oblu; if x8r+oblu>x9r: oblu:=f_obl; fi
+infill (x1l,y5'r)..{left}z9r---obl(8r,9r,2l')---
+ obl(2l',7l,1l)--cycle;
+penlabels(1,2,2l',5,5',6,6',7,8,8',9);
+);
+
+iff known chars.latin_AE:
+bskchar "The ligature AE";
+beginchar(chars.latin_AE,18u#,cap_height#,0); uni "0x00C6";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_AEmacron:
+bskchar "The ligature AE with macron";
+beginchar(chars.latin_AEmacron,18u#,Acc_height#-.1x_height#,0); uni "0x01E2";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x6;
+macron(100,101);
+endchar;
+
+iff known chars.latin_AEacute:
+bskchar "The ligature AE with acute";
+beginchar(chars.latin_AEacute,18u#,Acc_height#,0); uni "0x01FC";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x2;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_OE:
+bskchar "The ligature OE";
+beginchar(chars.latin_OE,19u#,cap_height#,0); uni "0x0152";
+italcorr cap_height#*slant-1.5u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+numeric alpha;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+top y4r=h; rt x4r=w-2.5u;
+lft x1l=lft x2l=8.5u;
+pos7(cap_curve,0); lft x7l=u-o; y7=.5h;
+y5=y5'=y6=y6'=.5[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+if monospace:
+ pos3(beak,-90); %Bottom arm
+ z3c=(x3-2/3u,y3); z3d=(.5[x3e,x3c],y3e);
+ z3e=z1r+(alt_cap_hair-currentbreadth,cap_jut);
+ z3f=z1r+.75ser_height*up;
+ penlabels(3); labels(3c,3d,3e,3f);
+ pos4(.65beak,90); %Top arm
+ z4a=z2r+.55ser_height*down; z4b=z2r+(cap_jut,-cap_hair+currentbreadth);
+ z4c=z4l+serif_o*left;
+ penlabels(4); labels(4a,4b,4c);
+else: p=reverse arm_top_r_points(2r,4);
+fi;
+filldraw z2l.a+o*up..z7l..z1l.a+o*down{right}..z1+ser_boule*up..
+ if monospace: z1r---z3r+o*left..z3r+o*up---z3l..z3l+o*left{down}
+ ..z3c..z3d---z3e..{up}z3f
+ else: arm_bot_r_points(1r,3).alt fi
+ ---z5'l{dir80}..z5l---z6l..
+ z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r..
+ {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r---
+ if monospace: z4a{up}..z4b---z4b+o*right..{dir-45}z4c..z4l
+ ---z4r+o*down..z4r+o*left---z2r
+ else: p fi
+ ..z2..cycle;
+infill z1l.b{down}..{left}z1l.c+top o*down..z7r..{right}z2l.c+top o*up..z2l.b---cycle;
+penlabels(1,2,2l',5,5',6,6',7);
+endchar;
+
+iff known chars.latin_F:
+bskchar "The letter F";
+beginchar(chars.latin_F,12u#,cap_height#,0); uni "0x0046";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
+bot y1=0; top y2=h;
+top y3r=h; rt x3r=w-u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x3-x2r); x5'=x2r; x6'-x6=1.5u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+p=reverse arm_top_r_points(2r,3);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..{left}z1r.c..z1r.b---z5'l{dir80}..z5l---
+ z6l..z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r..
+ {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r---
+ p--z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,5,5',6,6');
+endchar;
+
+charscription(14.3u,cap_height,0)(
+path p, po; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3r=w-2.3u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+penpos6(beak,0); rt x6r=w-u;
+p:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+po:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p);
+z5'=(x6,y3+.2h);
+z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3);
+z5'd=(z5'c--z5'b) intersectionpoint po; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes po);
+x5''a=x6r-.5cap_stem; y5''a=y3-.2h; z5''=z5''a+serif_o*left;
+y6=y5''a+cap_hair;
+z5''b=(x5''a-sersh,cap_hair); z5''c=(.5[x4,x1r],y3);
+z5''d=(z5''c--z5''b) intersectionpoint po; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left;
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes po);
+tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p);
+if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi
+filldraw z1r{up}..z4r..{direction tim1 of reverse p}z5'..z5'a--z5'b---z5'e..subpath (tim3,5) of po..
+ reverse (subpath(0,tim5) of p---z5''f..{left}z6l..z6l+serif_o*up--z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e..
+ reverse subpath (1,tim4) of po) & cycle;
+penlabels(1,2,3,4,6); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f);
+);
+
+iff known chars.latin_G:
+bskchar "The letter G";
+beginchar(chars.latin_G,14.3u#,cap_height#,0); uni "0x0047";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Gacute:
+bskchar "The letter G with acute";
+beginchar(chars.latin_Gacute,14.3u#,Acc_height#,0); uni "0x01F4";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x4;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Gcaron:
+bskchar "The letter G with caron";
+beginchar(chars.latin_Gcaron,14.3u#,Acc_height#,0); uni "0x01E6";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Gcircumflex:
+bskchar "The letter G with circumflex";
+beginchar(chars.latin_Gcircumflex,14.3u#,Acc_height#,0); uni "0x011C";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Gcedilla:
+bskchar "The letter G with cedilla (treated as comma)";
+beginchar(chars.latin_Gcedilla,14.3u#,cap_height#,.75comma_depth#); uni "0x0122";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x2; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_Gdotabove:
+bskchar "The letter G with dot above";
+beginchar(chars.latin_Gdotabove,14.3u#,Acc_height#,0); uni "0x0120";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.latin_Gbreve:
+bskchar "The letter G with breve";
+beginchar(chars.latin_Gbreve,14.3u#,Acc_height#+o#,0); uni "0x011E";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4; x102-x100=5u; bot y101l=top y4l+o;
+breve(100,101,102).capital;
+endchar;
+
+iff known chars.sign_guarani:
+bskchar "Guarani sign";
+beginchar(chars.sign_guarani,14.3u#,Acc_height#,Acc_height#-cap_height#); uni "0x20B2";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
+pos7(hair,0); pos8(hair,0);
+lft x1l=u-o; rt x3r=w-2.3u; y1=y3=.5cap_height; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=cap_height+o;
+penpos6(beak,0); rt x6r=w-u; x7=x8=x4; top y7=h; bot y8=-d;
+p0:=z1r{down}..z2r..z3r..z4r..{down}z1r;
+p1:=z1l{up}..z4l..z3l..z2l..{up}z1l;
+p2:=z7r--z8r;
+p3:=z8l--z7l;
+tim1= ypart(((.5w,y3+.2cap_height)--(2w,y3+.2cap_height)) intersectiontimes p0);
+z5'=(x6,y3+.2cap_height);
+z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,cap_height+o); z5'c=(.35[x4,x3r],y3);
+if xpart(point tim1 of p0) > x5'a: x5'a:=xpart(point tim1 of p0)+1 fi;
+z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes p1);
+x5''a=x6r-.5cap_stem; y5''a=y3-.2h; z5''=z5''a+serif_o*left;
+y6=y5''a+cap_hair;
+z5''b=(x5''a-sersh,cap_hair); z5''c=(.5[x4,x1r],y3);
+z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left;
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1);
+tim2=ypart((z5''f--(x5''f,0)) intersectiontimes p0);
+if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi
+(tim5-2,tim6)=subpath(2,infinity) of p0 intersectiontimes p2;
+(tim7-2,tim8)=subpath(2,infinity) of p0 intersectiontimes p3;
+(tim9,tim10)=subpath(0,3) of p0 intersectiontimes p2;
+(tim11-2,tim12)=subpath(2,infinity) of p1 intersectiontimes p2;
+(tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p3;
+(tim15,tim16)=subpath(0,2) of p1 intersectiontimes p3;
+(tim17,tim18)=subpath(0,2) of p1 intersectiontimes p2;
+(tim19,tim20)=subpath(0,3) of p0 intersectiontimes p3;
+filldraw z5'e---z5'b--z5'a..subpath(tim1,rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p2,tim6),rundy(p2,tim10).zpet) of p2
+ ..subpath(rundy(p0,tim9),tim2) of p0---z5''f..{left}z6l
+ ..z6l+serif_o*up--z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e
+ ..subpath(tim4,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p2,tim12),infinity) of p2
+ ..subpath(0,rundy(p3,tim14).zpet) of p3
+ ..subpath(rundy(p1,tim13),infinity) of p1
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(p3,tim16),infinity) of p3
+ ..subpath(0,rundy(p2,tim18).zpet) of p2
+ ..subpath(rundy(p1,tim17),tim3) of p1..cycle;
+infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3
+ ..subpath(rundy(p0,tim7),infinity) of p0
+ ..subpath(0,rundy(p0,tim19).zpet) of p0..cycle;
+penlabels(1,2,3,4,6,7,8); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f);
+endchar;
+
+charscription(15u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=0; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r);
+pos5(cap_hair,90); pos6(cap_hair,90);
+pos7(ser_height,90); pos8(ser_height,90);
+y5=y6=.52h; x5=x1r.a; x6=x3l.a;
+y7=y8=y5; x7=x1r; x8=x3l;
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir80}..z5l---z6l..
+ {dir-80}z8l---z3l.b{down}..{left}z3l.c..z3l.a{right}..
+ z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b---z4r.b..
+ {right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b---
+ z8r{dir-100}..z6r---z5r..{dir100}z7r---z2r.b..{right}z2r.c..
+ z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+);
+
+iff known chars.latin_H:
+bskchar "The letter H";
+beginchar(chars.latin_H,15u#,cap_height#,0); uni "0x0048";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Hcaron:
+bskchar "The letter H with caron";
+beginchar(chars.latin_Hcaron,15u#,Acc_height#,0); uni "0x021E";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5w;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Hcircumflex:
+bskchar "The letter H with circumflex";
+beginchar(chars.latin_Hcircumflex,15u#,Acc_height#,0); uni "0x0124";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5w;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Hstroke:
+bskchar "The letter H with stroke";
+beginchar(chars.latin_Hstroke,15u#,cap_height#,0); uni "0x0126";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=0; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r);
+pos5(cap_hair,90); pos6(cap_hair,90);
+pos7(ser_height,90); pos8(ser_height,90);
+y5=y6=.52h; x5=x1r.a; x6=x3l.a;
+y7=y8=y5; x7=x1r; x8=x3l;
+forsuffixes i=10,11,12,13,14,15: pos.i(bar,90); y[i]=.35[x_height,h]; endfor;
+lft x10=.75u; x15=w-x10; x11=x1l; x12=x1r; x13=x3l; x14=x3r;
+bskpoints(10,15,.5hair,.5hair);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir80}..z5l---z6l..
+ {dir-80}z8l---z3l.b{down}..{left}z3l.c..z3l.a{right}..
+ z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b---
+ obl(14l,3r,15l)---z15ll..z15r---obl(14r,15r,4r)---
+ z4r.b..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b---
+ obl(13r,4l,12r)---obl(12r,13r,2r)---
+ z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b---
+ obl(11r,2l,10r)---z10rr..z10l---obl(11l,10l,1l)---cycle;
+infill obl(13l,12l,8r)---z8r{dir-100}..z6r---z5r..{dir100}z7r---obl(12l,7r,13l)---cycle;
+penlabels(1,2,3,4,5,6,7,8,10,11,12,13,14,15); labels(15ll,10rr);
+endchar;
+
+charscription(6u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h;
+x1=x2=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..
+ z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2);
+);
+
+iff known chars.latin_I:
+bskchar "The letter I";
+beginchar(chars.latin_I,6u#,cap_height#,0); uni "0x0049";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_I_dotless:
+bskchar "The letter I (dotless I for Small Caps)";
+beginchar(chars.latin_I_dotless,6u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Iacute:
+bskchar "The letter I with acute";
+beginchar(chars.latin_Iacute,6u#,Acc_height#,0); uni "0x00CD";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x2; x100r-x101=3u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Igrave:
+bskchar "The letter I with grave";
+beginchar(chars.latin_Igrave,6u#,Acc_height#,0); uni "0x00CC";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x2;
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Idoublegrave:
+bskchar "The letter I with double grave";
+beginchar(chars.latin_Idoublegrave,6u#,Acc_height#,0); uni "0x0208";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,x1l).capital;
+endchar;
+
+iff known chars.latin_Imacron:
+bskchar "The letter I with macron";
+beginchar(chars.latin_Imacron,6u#,Acc_height#-.1x_height#,0); uni "0x012A";
+italcorr (Acc_height#-.1x_height#)*slant+.2u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+iff known chars.latin_Icircumflex:
+bskchar "The letter I with circumflex";
+beginchar(chars.latin_Icircumflex,6u#,Acc_height#,0); uni "0x00CE";
+italcorr (cap_height#+.75u#)*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Iumlaut:
+bskchar "The letter I with umlaut";
+beginchar(chars.latin_Iumlaut,6u#,Acc_height#,0); uni "0x00CF";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x2; x100-x101=3u;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_Idotabove:
+bskchar "The letter I with dot above";
+beginchar(chars.latin_Idotabove,6u#,Acc_height#,0); uni "0x0130";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x2;
+dotabove(100);
+endchar;
+
+iff known chars.latin_Ibreve:
+bskchar "The letter I with breve";
+beginchar(chars.latin_Ibreve,6u#,Acc_height#,0); uni "0x012C";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2+o;
+breve(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Iinvbreve:
+bskchar "The letter I with inverted breve";
+beginchar(chars.latin_Iinvbreve,6u#,Acc_height#+o#,0); uni "0x020A";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2+o;
+bot bot y100=cap_height+o;
+tieacc(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Itilde:
+bskchar "The letter I with tilde";
+beginchar(chars.latin_Itilde,6u#,Acc_height#,0); uni "0x0128";
+italcorr Acc_height#*slant+.5u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; bot y100=top y2+o;
+tilde(100,101).capital;
+endchar;
+
+iff known chars.latin_Icaron:
+bskchar "The letter I with caron";
+beginchar(chars.latin_Icaron,6u#,Acc_height#,0); uni "0x01CF";
+italcorr Acc_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Iogonek:
+bskchar "The letter I with ogonek";
+beginchar(chars.latin_Iogonek,7u#,cap_height#,.85desc_depth#); uni "0x012E";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(stem,0); pos4(curve,0); pos5(hair,45); pos6(hair,160);
+bot y1=0; top y2=h;
+x1=x2=.5w;
+x3=x4l+1.5u; x3=x1l; x5-x4l=3u; rt x6l=x5+1.5u;
+bot y3=0; y4=-.5d; bot y5l=-d; y6=-2/3d;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+p:=z3l{z4l-z3r}..z4l...z5l..{z3-z4}z6l..z6r{z4-z3}..z5r..z4r..z3r;
+filldraw z1l.b{down}..{left}z1l.c..z3l+hair*left
+ ..subpath(rundy(p,0),rundy(p,length p).zpet) of p
+ ..z3r+hair*right---z1r.a..z1r.c{left}..z1r.b
+ ---z2r.b..{right}z2r.c..
+ z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+charscription(7u,cap_height,.6desc_depth)(
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90);
+bot y1=-cap_hair; top y2=h; rt x1r=rt x2r=w-2u;
+bot y3r=-d; x3=if monospace: .3w else: u fi; top y4=-.3d; x4l=if monospace: cap_stem else: -u fi;
+cap_serifs_tl(2l); cap_serifs_tr(2r);
+filldraw z3r{right}...z1r--- z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b---
+ z1l...{left}z3l..reverse smitko(4,cap_stem)..cycle;
+penlabels(1,2,3,4); labels(4',4'',4''');
+);
+
+iff known chars.latin_J:
+bskchar "The letter J";
+beginchar(chars.latin_J,7u#,cap_height#,.6desc_depth#); uni "0x004A";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_J_dotless:
+bskchar "The letter J (dotless J for Small Caps)";
+beginchar(chars.latin_J_dotless,7u#,cap_height#,.6desc_depth#); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Jcircumflex:
+bskchar "The letter J with circumflex";
+beginchar(chars.latin_Jcircumflex,7u#,Acc_height#,.6desc_depth#); uni "0x0134";
+italcorr (cap_height#+.75u#)*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_IJ:
+bskchar "The letter IJ";
+beginchar(chars.latin_IJ,12.5u#,cap_height#,.6desc_depth#); uni "0x0132";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+numeric shift; shift=w-7u;
+usechar shifted (shift*right);
+pos5(cap_stem,0); pos6(cap_stem,0);
+bot y5=0; top y6=h;
+lft x5l=2u; x5=x6;
+cap_serifs_tl(6l); cap_serifs_tr(6r); cap_serifs_bl(5l); cap_serifs_br(5r);
+filldraw z5l.b{down}..{left}z5l.c..z5l.a{right}..z5+ser_boule*up..
+ {right}z5r.a..z5r.c{left}..z5r.b---z6r.b..{right}z6r.c..
+ z6r.a---z6l.a..{right}z6l.c..z6l.b---cycle;
+penlabels(5,6);
+endchar;
+
+charscription(14u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(whatever,0); pos5(whatever,0);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+rt x3r=w-3.5u; top y3=h; rt x5r=w-2u; bot y5r=0;
+y4r=.4h; x4r=x2r; z4l=z4r+(cap_hair-tiny,0) rotated (angle(z3r-z4r)+90);
+z3l=z4l+whatever*(z3r-z4r);
+x6l=x4r+cap_hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)+90);
+z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r];
+x4'=x2r; z4'=whatever[z3l,z4l];
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_br(5r); cap_serifs_bl(5l);
+z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r));
+z6l'=z6l+(-u,0) rotated (angle(z3r-z4r));
+z6l''=z6l+(u,0) rotated (angle(z5l-z6l));
+z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r));
+x2'=x6l; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z4r..z4r''
+ if x6l'>x4r'': ..z6l' fi ..z6l''---diag_serif(5l,6l)..
+ {left}z5l.c..z5l.a{right}..z5+ser_boule*up..{right}z5r.a..
+ {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r''---
+ diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a..
+ z3l.c{dir0}..diag_serif(3l,4l)---z2'..z2''---
+ z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'');
+);
+
+iff known chars.latin_K:
+bskchar "The letter K";
+beginchar(chars.latin_K,14u#,cap_height#,0); uni "0x004B";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Kcaron:
+bskchar "The letter K with caron";
+beginchar(chars.latin_Kcaron,14u#,Acc_height#,0); uni "0x01E8";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x2r.a,x3l.a];
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Kcedilla:
+bskchar "The letter K with cedilla (treated as comma)";
+beginchar(chars.latin_Kcedilla,14u#,cap_height#,.75comma_depth#); uni "0x0136";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=.5[x1r.a,x5l.a]; top y100''r=0;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+charscription(12.5u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ arm_bot_r_points(1r,3).alt---z2r.b..{right}z2r.c..z2r.a---
+ z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2);
+);
+
+iff known chars.latin_L:
+bskchar "The letter L";
+beginchar(chars.latin_L,12.5u#,cap_height#,0); uni "0x004C";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Ldot:
+bskchar "The letter L with middle dot";
+beginchar(chars.latin_L,14u#,cap_height#,0); uni "0x013F";
+italcorr x_height#*slant+.35dot_size#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+top y100=x_height; rt x100+.5dot_size=w-.5u;
+dot(100);
+endchar;
+
+iff known chars.latin_Lacute:
+bskchar "The letter L with acute";
+beginchar(chars.latin_Lacute,12.5u#,Acc_height#,0); uni "0x0139";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Lcaron:
+bskchar "The letter L with caron (treated like comma)";
+beginchar(chars.latin_Lcaron,12.5u#,asc_height#,0); uni "0x013D";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+y100''r=h; lft x100'l=rt x2r.a+stem;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_Lcedilla:
+bskchar "The letter L with cedilla (treated as comma)";
+beginchar(chars.latin_Lcedilla,12.5u#,cap_height#,.75comma_depth#); uni "0x013B";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x100=.5w; top y100''r=-o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_Ldotabove:
+bskchar "The letter L with dot above";
+beginchar(chars.latin_Ldotabove,12.5u#,Acc_height#,0); uni "non";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x100=x2;
+dotabove(100);
+endchar;
+
+iff known chars.latin_Lslash:
+bskchar "The letter L with slash";
+beginchar(chars.latin_Lslash,12.5u#,cap_height#,0); uni "0x0141";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+numeric theta;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+x5-x4=4u; x4r=x2l.a; y5-y4=stem; .5[y4,y5]=.8[bar_height,x_height];
+theta=angle(z5-z4)+90;
+pos4(bar,theta); pos5(bar,theta);
+x4'l=x4'r=x1l; x5'l=x5'r=x1r;
+z4'l=whatever[z4l,z5l]; z5'l=whatever[z4l,z5l];
+z4'r=whatever[z4r,z5r]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,bar,bar);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ arm_bot_r_points(1r,3).alt---obl(5'l,1r,5l)---z5ll..z5r---obl(5'r,5r,2r)---
+ z2r.b..{right}z2r.c..z2r.a---
+ z2l.a..{right}z2l.c..z2l.b---obl(4'r,2l,4r)---z4rr..z4l---obl(4'l,4l,1l)---cycle;
+penlabels(1,2,4,4',5,5'); labels(4rr,5ll);
+endchar;
+
+charscription(17u,cap_height,0)(
+pos1(cap_hair,0); pos2(cap_hair,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+penpos5(whatever,0); penpos6(whatever,90);
+penpos10(whatever,0); penpos11(whatever,90);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=0; top y4=h; rt x3r=rt x4r=w-2u;
+cap_serifs_bl_p(3l,.9); cap_serifs_br(3r); cap_serifs_tr(4r);
+z5r=z2l; z6l=(.49w, if monospace and (x3l-x1r<3cap_stem): 2/3(x3l-x1r) else: -apex_o fi);
+z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90);
+z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l);
+y2'=y5'=y2l.b-cap_hair-o; x2'=x2r; z5'=whatever[z6l,z5r]; z5''=(.5[x2',x5'],y2'+o);
+z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r));
+z10r=z4l; z11l=z6l;
+z12=z11l+(cap_hair-tiny,0) rotated (angle(z10r-z11l)+90);
+z10l=z12+whatever*(z10r-z11l); z11r=z12+whatever*(z10r-z11l);
+z4''=whatever[z10l,z11r]=whatever[z5l,z6r];
+y4'=y6'=y4''+cap_hair; z4'=whatever[z10l,z11r]; z6'=whatever[z6r,z5l];
+y3'=y3''=y2'; x3'=x3l; z3''=whatever[z11l,z10r];
+z10'=z10l+(cap_hair,0) rotated(angle(z11l-z10r));
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a..
+ z1r.c{left}..z1r.b---z2'..if not bold_face:z5''.. fi z5'---z6l---z3''..z3'---z3l.b..
+ {left}z3l.c..z3l.a{right}..z3+ser_boule*up..{right}z3r.a..{left}z3r.c..
+ z3r.b---z4r.b..{right}z4r.c..z4r.a---z4..z10'---z4'..z6'---z8..z5---z2l.a..
+ {right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,10,11); labels(2',3',3'',4',4'',5',5'',6',7,8,9,10',12);
+);
+
+let _saved_char_m=_saved_char;
+numeric _saved_w_m; _saved_w_m:=_saved_w;
+
+iff known chars.latin_M:
+bskchar "The letter M";
+beginchar(chars.latin_M,17u#,cap_height#,0); uni "0x004D";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+charscription(14u,cap_height,0)(
+pos1(cap_hair,0); pos2(cap_hair,0);
+pos3(cap_hair,0); pos4(cap_hair,0);
+penpos5(whatever,0); penpos6(whatever,90);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=-apex_o; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r);
+z5r=z2l; z6l=z3l;
+z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90);
+z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l);
+y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r];
+y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l];
+z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r));
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z2'..z5'---z6l..z3r---
+ z4r.b..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b---
+ z4'..z6'---z8..z5---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6); labels(2',4',5',6',7,8,9);
+);
+
+iff known chars.latin_N:
+bskchar "The letter N";
+beginchar(chars.latin_N,14u#,cap_height#,0); uni "0x004E";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Ncaron:
+bskchar "The letter N with caron";
+beginchar(chars.latin_Ncaron,14u#,Acc_height#,0); uni "0x0147";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5w; y101l=y4;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Nacute:
+bskchar "The letter N with acute";
+beginchar(chars.latin_Nacute,14u#,Acc_height#,0); uni "0x0143";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100r=x4l.a;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Ngrave:
+bskchar "The letter N with grave";
+beginchar(chars.latin_Ngrave,14u#,Acc_height#,0); uni "0x01F8";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+lft x100l=x5l;
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Ntilde:
+bskchar "The letter N with tilde";
+beginchar(chars.latin_Ntilde,14u#,Acc_height#,0); uni "0x00D1";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; bot y100=top y5+hair;
+tilde(100,101).capital;
+endchar;
+
+iff known chars.latin_Ncedilla:
+bskchar "The letter N with cedilla (treated as comma)";
+beginchar(chars.latin_N,14u#,Acc_height#,.75comma_depth#); uni "0x0145";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=.5w; top y100''r=0;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_Eng:
+bskchar "The letter Eng";
+beginchar(chars.latin_Eng,14u#, cap_height#, desc_depth#); uni "0x014A";
+italcorr .75cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0); pos5(1.5cap_hair,90); pos6(cap_hair,180);
+pos7(cap_hair,-90);
+lft x1l=2u; bot y1=0; top y2=h+apex_o; x1=x2;
+rt x3r=w-u; y3=.5bar_height;
+x4=x3; y4=.75h; y5r=h; x5=.5[x3l,x1r];
+x6l=x1r; y6=.6h; y6l:=y6l-hair;
+bot y7r=-o; x3-x7=3u; top y8=y7+like_curve; x7-x8l=2u;
+cap_serifs_bl(1l); cap_serifs_br(1r); drop_serif(2,cap_jut);
+p1:=z6l{up}..z5l..z4l---z3l...{left}z7l..reverse smitko(8,cap_stem)..{right}z7r..{up}z3r;
+p2:=z3r---z4r..z5r..{down}z6r;
+p3:=z1r.b--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+filldraw p1..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..{up}z1'
+ --z2r+.2u*left..{(x1l.a-x1l,-.25serif_drop)}z2a&z2a
+ ---z2b+.75u*left..z2b+u*down---z1l.b..z1l.c{left}
+ ..{right}z1l.a..z1+ser_boule*up..{right}z1r.a..{left}z1r.c
+ ..{up}z1r.b---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1');
+endchar;
+
+charscription(14.3u,cap_height,0)(
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+);
+
+iff known chars.latin_O:
+bskchar "The letter O";
+beginchar(chars.latin_O,14.3u#,cap_height#,0); uni "0x004F";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Ograve:
+bskchar "The letter O with grave";
+beginchar(chars.latin_Ograve,14.3u#,Acc_height#,0); uni "0x00D2";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4+u;
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Odoublegrave:
+bskchar "The letter O with double grave";
+beginchar(chars.latin_Odoublegrave,14.3u#,Acc_height#,0); uni "0x020C";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u; x102=x4;
+d_grave(100,101,102,103,whatever).capital;
+endchar;
+
+iff known chars.latin_Oacute:
+bskchar "The letter O with acute";
+beginchar(chars.latin_Oacute,14.3u#,Acc_height#,0); uni "0x00D3";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4-u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Oumlaut:
+bskchar "The letter O with umlaut";
+beginchar(chars.latin_Oumlaut,14.3u#,Acc_height#,0); uni "0x00D6";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=rt x4; x101-x100=.4(x3-x1);
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_Ocircumflex:
+bskchar "The letter O with circumflex";
+beginchar(chars.latin_Ocircumflex,14.3u#,Acc_height#,0); uni "0x00D4";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4+hair;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Ocaron:
+bskchar "The letter O with caron";
+beginchar(chars.latin_Ocaron,14.3u#,Acc_height#,0); uni "0x01D1";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Otilde:
+bskchar "The letter O with tilde";
+beginchar(chars.latin_Otilde,14.3u#,Acc_height#,0); uni "0x00D5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; bot y100=top y4l+o;
+tilde(100,101).capital;
+endchar;
+
+iff known chars.latin_Omacron:
+bskchar "The letter O with macron";
+beginchar(chars.latin_Omacron,14.3u#,Acc_height#-.1x_height#,0); uni "0x014C";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+iff known chars.latin_Odotabove:
+bskchar "The letter O with dot above";
+beginchar(chars.latin_Odotabove,14.3u#,Acc_height#,0); uni "0x022E";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.latin_Ohumlaut:
+bskchar "The letter O with Hungarian umlaut";
+beginchar(chars.latin_Ohumlaut,14.3u#,Acc_height#,0); uni "0x0150";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=3u; .5[x100,x101]=.5w+1.5u;
+h_umlaut(100,101,102,103,2u).capital;
+endchar;
+
+iff known chars.latin_Obreve:
+bskchar "The letter O with breve";
+beginchar(chars.latin_Obreve,14.3u#,Acc_height#+o#,0); uni "0x014E";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5w+o; x102-x100=5u;
+bot y101l=top y4l+o;
+breve(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Oinvbreve:
+bskchar "The letter O with inverted breve";
+beginchar(chars.latin_Oinvbreve,14.3u#,Acc_height#+o#,0); uni "0x020E";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5w+o; x102-x100=5u;
+bot y100=top y4l;
+tieacc(100,101,102).capital;
+endchar;
+
+charscription(14.3u,cap_height,.85desc_depth)(
+path p[];
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u;
+bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d;
+p0=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r;
+filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0
+ ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p1,(1,if bold_face:.5\\ fi stem)),infinity) of p0..cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8);
+);
+
+iff known chars.latin_Oogonek:
+bskchar "The letter O with ogonek";
+beginchar(chars.latin_Oogonek,14.3u#,cap_height#,.85desc_depth#); uni "0x01EA";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Oogonekmacron:
+bskchar "The letter O with ogonek and macron";
+beginchar(chars.latin_Oogonekmacron,14.3u#,Acc_height#-.1x_height#,.85desc_depth#); uni "0x01EC";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+charscription(14.3u,cap_height,0)(
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric inoblu; inoblu:=1.5f_obl;
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+bskpoints(5,6,hair,hair);
+(tim1,tim2)=p0 intersectiontimes (z5l--z6l);
+(tim3,tim4)=p0 intersectiontimes (z6r--z5r);
+(tim5,tim6)=p0 intersectiontimes (z0r--z5r);
+(tim7,tim8)=p0 intersectiontimes (z5l--z0l);
+(tim11,tim12)=p1 intersectiontimes (z0r--z6r);
+(tim13,tim14)=p1 intersectiontimes (z5r--z0r);
+(tim15,tim16)=p1 intersectiontimes (z6l--z0l);
+(tim17,tim18)=p1 intersectiontimes (z5l--z0l);
+filldraw subpath (0,rundy(p0,tim1).zpet) of p0..subpath(rundy((z5l--z6ll),tim2),infinity) of (z5l--z6ll)..
+ subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r)..
+ subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0..
+ subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5rr)..
+ subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l) ..
+ subpath(rundy(p0,tim7),infinity) of p0--cycle;
+infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r)..
+ subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1..
+ subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle;
+infill subpath (0, rundy(p1,(tim17,inoblu)).zpet) of p1..
+ subpath(rundy(z5l--z0l,(tim18,inoblu)),infinity) of (z5l--z0l)..
+ subpath(0,rundy(z0l--z5l,tim16).zpet) of (z0l--z6l)..
+ subpath(rundy(p1,(tim15,inoblu)),infinity) of p1--cycle;
+penlabels(0,1,2,3,4,5,6);
+);
+
+iff known chars.latin_Oslash:
+bskchar "The letter O slash";
+beginchar(chars.latin_Oslash,14.3u#,cap_height#,0); uni "0x00D8";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Oslashacute:
+bskchar "The letter O slash with acute";
+beginchar(chars.latin_Oslashacute,14.3u#,Acc_height#,0); uni "0x01FE";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4-u;
+acute(100,101).capital;
+endchar;
+
+charscription(12.5u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(.8ser_height,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-u;
+x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi;
+y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7;
+y5=.5[y4,y6];
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir70}..
+ (x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---
+ z6l..z5l..z4l..{left}z2l.a..z2l.c{right}..z2l.b---cycle;
+infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle;
+penlabels(1,2,3,4,5,6,7);
+);
+
+iff known chars.latin_P:
+bskchar "The letter P";
+beginchar(chars.latin_P,12.5u#,cap_height#,0); uni "0x0050";
+italcorr .2[x_height#,cap_height#]*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_published:
+bskchar "Published sign (circled P)";
+beginchar(chars.sign_published,15u#,asc_height#,0); uni "0x2117";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv=.6;
+lft x6=u; x2=w-x6; y2=.5h; top y8=h;
+lft x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+multiply(1.5*zv)(cap_curve,cap_hair,ser_height,cap_stem);
+usechar shifted -(.5[x5r,x2l.a]-.5cap_height*slant,.5[y4l,y1]) scaled zv shifted (.5WW,.5HH);
+endchar;
+
+iff known chars.sign_peso:
+bskchar "Peso sign";
+beginchar(chars.sign_peso,12.5u#,cap_height#,0); uni "0x20B1";
+italcorr .2[x_height#,cap_height#]*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(.8ser_height,90);
+pos8'(bar,90); pos9(bar,90); pos9'(bar,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-u;
+x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi;
+y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7;
+y5=.5[y4,y6];
+lft x8=.5u; x8'=x1l; x9'=x1r; x9=.5[x6,x5];
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+y8=.65y7l;
+if y8<y1r.b: y1r.b:=y1l.b:=y8-oblu; y8:=y8+oblu; fi
+pos8(bar,90); y8=y8'=y9=y9';
+bskpoints(8,9,bar,bar);
+filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up
+ ..{right}z1r.a..z1r.c{left}..z1r.b---obl(9'l,1r,9l)
+ ---z9ll..z9r---obl(9'r,9r,7l)---z7l{dir70}
+ ..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)
+ ---z6l..z5l..z4l..{left}z2l.a..z2l.c{right}..z2l.b
+ ---obl(8'r,2l,8r)---z8rr..z8l---obl(8'l,8l,1l)---cycle;
+infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9');
+endchar;
+
+iff known chars.latin_Thorn:
+bskchar "The letter Thorn";
+beginchar(chars.latin_Thorn,12u#,cap_height#,0); uni "0x00DE";
+italcorr .5[x_height#,bar_height#]*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(.8ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(.8ser_height,90);
+x7=x1r; y7l=y6l; rt x5l=w-u;
+x6=x4=.5[x1r,x5r]-u; y7l:=y7l-hair;
+y3l=y4l; x3=x7; y3l:=y3l+hair;
+y5=.5[y4,y6]=.5[x_height,bar_height]; y4r-y6r=bar_height;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+if y1r.b>y7l: y1r.b:=y7l; fi
+filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir70}..
+ (x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---
+ z6l..z5l..z4l---(x3l if x3l+cap_hair<x4l:+cap_hair fi,y4l)..{dir110}z3l---z2r.b
+ ..z2r.c{right}..{left}z2r.a---z2l.a..z2l.c{right}..z2l.b---cycle;
+infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.latin_Q:
+bskchar "The letter Q";
+beginchar(chars.latin_Q,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x0051";
+italcorr .5cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=1/3(x2-x1);
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; bot y2l=-o; top y4l=h+o;
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+tim1= ypart(((.5w, .5cap_hair)--(w,.5cap_hair)) intersectiontimes p0);
+z5r=point tim1 of p0;
+pos5(cap_hair,angle(direction tim1 of p0)-90); pos6(cap_hair,angle(direction tim1 of p0)-90);
+pos7(cap_hair+o,angle(direction tim1 of p0)-90);
+x6=x1r; z6=z5+whatever*(direction tim1 of p0) rotated 180;
+pos8(cap_curve,angle(z2-z4));
+z7=z6; x8=.5[x5r,x3r]; y8r=-d; x9=w if not monospace: +cap_stem fi; y9=.5y6;
+p1:=z5l{z6-z5}..{z6-z3}z6l;
+p2:=z9{dir-125}..z8l..{z6-z3}z7l..z7r{if dpi<=300:dir40 else:(x4,y3)-z6 fi}..z8r..{dir70}z9;
+p3:=z6r{z3-z6}..{z5-z6}z5r;
+(tim2,tim3)=p1 intersectiontimes p2;
+(tim4,tim5)=p3 intersectiontimes p2;
+(tim6,tim7)=p0 intersectiontimes p1;
+(tim8,tim9)=p0 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim6).zpet) of p0..
+ subpath(rundy(p1,tim7),rundy(p1,(tim2,hair))) of p1..
+ subpath(rundy(p2,(tim3,hair)),infinity) of p2..
+ subpath(0,rundy(p2,tim5).zpet) of p2..
+ subpath(rundy(p3,tim4),rundy(p3,tim9).zpet) of p3..
+ subpath(rundy(p0,tim8),infinity) of p0&cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+iff known chars.latin_Q_alt:
+bskchar "The letter Q (non-protruding)";
+beginchar(chars.latin_Q_alt,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "non";
+italcorr .5cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=1/3(x2-x1);
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; bot y2l=-o; top y4l=h+o;
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+tim1= ypart(((.5w, .5cap_hair)--(w,.5cap_hair)) intersectiontimes p0);
+z5r=point tim1 of p0;
+pos5(cap_hair,angle(direction tim1 of p0)-90); pos6(cap_hair,angle(direction tim1 of p0)-90);
+pos7(cap_hair+o,angle(direction tim1 of p0)-90);
+x6=x1r; z6=z5+whatever*(direction tim1 of p0) rotated 180;
+pos8(cap_curve,angle(z2-z4));
+z7=z6; rt x8=.5[x2r,x9]; y8r=-d; rt x9=w; y9=.5y6;
+p1:=z5l{z6-z5}..{z6-z3}z6l;
+p2:=z9{dir-125}..z8l..{z6-z3}z7l..z7r{(x4,y3)-z6}..z8r..{dir70}z9;
+p3:=z6r{z3-z6}..{z5-z6}z5r;
+(tim2,tim3)=p1 intersectiontimes p2;
+(tim4,tim5)=p3 intersectiontimes p2;
+(tim6,tim7)=p0 intersectiontimes p1;
+(tim8,tim9)=p0 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim6).zpet) of p0..
+ subpath(rundy(p1,tim7),rundy(p1,(tim2,hair))) of p1..
+ subpath(rundy(p2,(tim3,hair)),infinity) of p2..
+ subpath(0,rundy(p2,tim5).zpet) of p2..
+ subpath(rundy(p3,tim4),rundy(p3,tim9).zpet) of p3..
+ subpath(rundy(p0,tim8),infinity) of p0&cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+endchar;
+
+charscription(14u,cap_height,0)(
+numeric alpha, tim[]; oblu:=2oblu;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(.8ser_height,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-2.5u;
+x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi;
+y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7;
+y5=.5[y4,y6];
+rt x8r=w-2u; bot y8r=0;
+x9r=x5r if .65cap_curve<u: -u fi; y9r=y6l-cap_hair;
+alpha=diag_ratio(2,cap_stem,y9r-y8r,x8r-x9r);
+pos8(alpha*cap_stem,0); pos9(alpha*cap_stem,0);
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); cap_serifs_br(8r);
+z8'=z8l+(serif_o,0) rotated(angle(z9l-z8l));
+p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l..
+ z5l..z4l..{left}z2l.a..{right}z2l.c..{down}z2l.b;
+p1=z8r.a{right}..z8r.c{left}..diag_serif(8r,9r)---z9r..{left}z6r--
+ z6l{(x9l-x6l,0)}..z9l---z8l{right}...z8+ser_boule*up..{right}z8r.a;
+p2=subpath ((length p1)-4, length p1) of p1;
+(tim1,tim2)=p0 intersectiontimes p2;
+(tim3,tim4)=p0 intersectiontimes p1;
+filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---
+ subpath(0,rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p2,tim2),infinity) of p2..
+ subpath(0,rundy(p1,tim4).zpet) of p1..
+ subpath(rundy(p0,tim3),infinity) of p0---cycle;
+infill z7r..{right}z6r..z5r..z4r{left}..z3r---cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(8');
+);
+
+iff known chars.latin_R:
+bskchar "The letter R";
+beginchar(chars.latin_R,14u#,cap_height#,0); uni "0x0052";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Racute:
+bskchar "The letter R with acute";
+beginchar(chars.latin_Racute,14u#,Acc_height#,0); uni "0x0154";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x2r,x4];
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Rdoublegrave:
+bskchar "The letter R with double grave";
+beginchar(chars.latin_Rdoublegrave,14u#,Acc_height#,0); uni "0x0210";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,.5[x4,x2]).capital;
+endchar;
+
+iff known chars.latin_Rcaron:
+bskchar "The letter R with caron";
+beginchar(chars.latin_Rcaron,14u#,Acc_height#,0); uni "0x0158";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.4[x4,x2r];
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Rcedilla:
+bskchar "The letter R with cedilla (treated as comma)";
+beginchar(chars.latin_Rcedilla,14u#,cap_height#,.75comma_depth#); uni "0x0156";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=.5[x1r.a,x8l]; top y100''r=0;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_Rinvbreve:
+bskchar "The letter R with inverted breve";
+beginchar(chars.latin_Rinvbreve,14u#,Acc_height#+o#,0); uni "0x0212";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.45[x4,x2r]; x102-x100=4.5u;
+bot y100=top y4l+2o;
+tieacc(100,101,102).capital;
+endchar;
+
+iff known chars.sign_registered:
+bskchar "Registered sign (circled R)";
+beginchar(chars.sign_registered,15u#,asc_height#,0); uni "0x00AE";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv=.6;
+lft x6=u; x2=w-x6; y2=.5h; top y8=h;
+lft x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+multiply(1.5*zv)(cap_curve,cap_hair,ser_height,cap_stem);
+usechar shifted -(.5[x8,x2],.5[y4l,y1]) scaled zv shifted (.5WW+.5HH*slant,.5HH);
+endchar;
+
+iff known chars.sign_registered_superscript:
+bskchar "Superscript registered sign (circled R)";
+beginchar(chars.sign_registered_superscript,8.5u#,asc_height#,0); uni "non";
+italcorr (asc_height#-.5x_height#)*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv,ys; zv=.3;
+x6=u; x2=w-x6; ys=y2=.5h+.5*6.5u; top y8=h+o;
+x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(.5rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+multiply(2.5*zv)(cap_curve,cap_hair,ser_height,cap_stem);
+usechar shifted -(.5[x8,x2],.5[y4l,y1]) scaled zv shifted (.5WW+ys*slant,ys);
+endchar;
+
+iff known chars.sign_recipe:
+bskchar "Recipe sign";
+beginchar(chars.sign_recipe,14u#,cap_height#,0); uni "0x211E";
+italcorr bar_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha, tim[],theta; oblu:=2oblu;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(.8ser_height,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-2.5u;
+x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi;
+y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7;
+y5=.5[y4,y6];
+rt x8r=w-2u; bot y8r=0;
+x9r=x5r if .65cap_curve<u: -u fi; y9r=y6l-cap_hair;
+alpha=diag_ratio(2,cap_stem,y9r-y8r,x8r-x9r);
+pos8(alpha*cap_stem,0); pos9(alpha*cap_stem,0);
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); cap_serifs_br(8r);
+z8'=z8l+(serif_o,0) rotated(angle(z9l-z8l));
+top y11=bar_height; rt x11=w-u; bot y10=0; x10=.5[x1r,x8r];
+theta:=angle(z11-z10)+90;
+pos10(bar,theta); pos11(bar,theta);
+bskpoints(10,11,bar,bar);
+z100=point 0 of diag_serif(8r,9r);
+z10'l=whatever[z10l,z11l]=whatever[z9l,z8l]; z10'r=whatever[z10r,z11r]=whatever[z9l,z8l];
+z11'l=whatever[z10l,z11l]=whatever[z9r,z8r.bb]; z11'r=whatever[z10r,z11r]=whatever[z9r,z8r.bb];
+p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l..
+ z5l..z4l..{left}z2l.a..{right}z2l.c..{down}z2l.b;
+p1=z8r.a{right}..z8r.c{left}..z100---obl(11'l,8r.bb,11l)---z11ll..
+ z11r---obl(11'r,11r,9r)---z9r..{left}z6r--
+ z6l{(x9l-x6l,0)}..z9l---obl(10'r,9l,10r)---z10rr..z10l---obl(10'l,10l,8l)---
+ z8l{right}...z8+ser_boule*up..{right}z8r.a;
+p2=subpath ((length p1)-10,infinity) of p1;
+(tim1,tim2)=p0 intersectiontimes p2;
+(tim3,tim4)=p0 intersectiontimes p1;
+filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---
+ subpath(0,rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p2,tim2),infinity) of p2..
+ subpath(0,rundy(p1,tim4).zpet) of p1..
+ subpath(rundy(p0,tim3),infinity) of p0---cycle;
+infill z7r..{right}z6r..z5r..z4r{left}..z3r---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,10',11,11'); labels(8');
+endchar;
+
+charscription(10u,cap_height,0)(
+numeric exc; exc=(w-u)/h;
+path p[]; numeric tim[];
+pos2(cap_hair,90); pos3(cap_curve,angle((w-u,h))+180); pos4(cap_hair,90);
+pos5(cap_stem,180); pos6(cap_stem,180);
+y5=.5[y2l,y3]+.5like_cap_hair; x3-x5l=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o;
+y3=.5[y2l,y4r]+.5cap_hair;
+pos1(cap_hair,0); x1r=w-x5r; y1=y5-.5cap_hair;
+pos7(cap_hair,0); x7l=w-x6l; y7=y6+.5cap_hair;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((.5w,y2-.5cap_hair)--(w,y2-.5cap_hair)));
+tim2=xpart(p1 intersectiontimes ((.5w,y4+cap_hair)--(0,y4+cap_hair)));
+filldraw z1r--(x1r-.5o,h+o){dir-100}..subpath(tim1,length p0) of p0..z7l
+ --(x7l+o,-o){dir80}..subpath(tim2, length p1) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+);
+
+iff known chars.latin_S:
+bskchar "The letter S";
+beginchar(chars.latin_S,10u#, cap_height#, 0); uni "0x0053";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Scaron:
+bskchar "The letter S with caron";
+beginchar(chars.latin_Scaron,10u#, Acc_height#, 0); uni "0x0160";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Scircumflex:
+bskchar "The letter S with circumflex";
+beginchar(chars.latin_Scircumflex,10u#, Acc_height#, 0); uni "0x015C";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2; x102-x100=4u; bot y100l=top cap_height+o;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Sacute:
+bskchar "The letter S with acute";
+beginchar(chars.latin_Sacute,10u#, Acc_height#, 0); uni "0x015A";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2-u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Scommabelow:
+bskchar "The letter S with comma below";
+beginchar(chars.latin_Scommabelow,10u#,cap_height#,.75comma_depth#); uni "0x0218";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x4; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_SS:
+bskchar "Two letters S (Small Caps variant of eszet)";
+beginchar(chars.latin_SS,10u#, cap_height#, 0); uni "non";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+r:=r+w; charwd:=2charwd;
+addto currentpicture also currentpicture shifted (w,0);
+endchar;
+
+iff known chars.sign_service:
+bskchar "Service sign";
+beginchar(chars.sign_service,14.5u#,asc_height#,0); uni "0x2120";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=.5;
+multiply(1.7zv)(cap_stem,cap_hair);
+usechar shifted -(u,y2r) scaled zv shifted (u,HH);
+save x,y;
+let _saved_char=_saved_char_m;
+_saved_w:=_saved_w_m;
+usechar shifted -(_saved_w_m,y2) scaled zv shifted (WW-u*(1-zv),HH);
+endchar;
+
+iff known chars.latin_Scedilla:
+bskchar "The letter S with cedilla";
+beginchar(chars.latin_Scedilla,10u#,cap_height#,.65desc_depth#); uni "0x015E";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h;
+path p[]; numeric tim[];
+pos2(cap_hair,90); pos3(cap_curve,angle((w-u,h))+180); pos4(cap_hair,90);
+pos5(cap_stem,180); pos6(cap_stem,180);
+pos8(.5stem,0); pos9(.5stem,0); pos10(stem,0); pos11(.5stem,-110);
+y5=.5[y2l,y3]+.5like_cap_hair; x3-x5l=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o;
+y3=.5[y2l,y4r]+.5cap_hair;
+pos1(cap_hair,0); x1r=w-x5r; y1=y5-.5cap_hair;
+pos7(cap_hair,0); x7l=w-x6l; y7=y6+.5cap_hair;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((.5w,y2-.5cap_hair)--(w,y2-.5cap_hair)));
+tim2=xpart(p1 intersectiontimes ((.5w,y4+cap_hair)--(0,y4+cap_hair)));
+x8l=x9l=x4; bot y8=0; y9=-hair; y10=-.5d;
+rt x10r-lft x11r=4u; x8r-lft x11r=2u; y11r=-d;
+p2:=z9r..{down}z10r..{left}z11r..{right}z11l..{up}z10l..z9l--z8l;
+p3:=reverse(z8r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2);
+filldraw z1r--(x1r-.5o,h+o){dir-100}..subpath(tim1,length p0) of p0..z7l
+ --(x7l+o,-o){dir80}..subpath(tim2,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p3,0),rundy(p3,(infinity,stem)).zpet) of p3
+ ..subpath(rundy(p1,(1,stem)),infinity) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+charscription(15.5u, cap_height,0)(
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h; x1=x2=.5w;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+top y3r=top y4r=h; rt x3r=w-u; lft x4r=u;
+{{numeric old; old:=stem;
+ save stem; stem:=if monospace: 2/3\\fi old;
+ p0:=reverse arm_top_r_points(2r,3).alt; p1:=arm_top_l_points(2l,4).alt;
+}};
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---p0--p1---cycle;
+penlabels(1,2);
+);
+
+iff known chars.latin_T:
+bskchar "The letter T";
+beginchar(chars.latin_T,15.5u#,cap_height#,0); uni "0x0054";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Tcaron:
+bskchar "The letter T with caron";
+beginchar(chars.latin_Tcaron,15.5u#,Acc_height#,0); uni "0x0164";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Tcommabelow:
+bskchar "The letter T with comma below";
+beginchar(chars.latin_Tcommabelow,15.5u#,cap_height#,.75comma_depth#); uni "0x021A";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.sign_trademark:
+bskchar "Trademark sign";
+beginchar(chars.sign_trademark,17.5u#,asc_height#,0); uni "0x2122";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=.5;
+multiply(1.7zv)(cap_stem,cap_hair);
+usechar shifted -(u,y2r) scaled zv shifted (u,HH);
+save x,y;
+let _saved_char=_saved_char_m;
+_saved_w:=_saved_w_m;
+usechar shifted -(_saved_w_m,y2) scaled zv shifted (WW-u*(1-zv),HH);
+endchar;
+
+iff known chars.latin_Tcedilla:
+bskchar "The letter T with cedilla";
+beginchar(chars.latin_Tcedilla,15.5u#,cap_height#,.65desc_depth#); uni "0x0162";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(.5stem,0); pos6(.5stem,0); pos7(stem,0); pos8(.5stem,-110);
+bot y1=0; top y2=h; x1=x2=.5w;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+top y3r=top y4r=h; rt x3r=w-u; lft x4r=u;
+{{numeric old; old:=stem;
+ save stem; stem:=if monospace: 2/3\\fi old;
+ p0:=reverse arm_top_r_points(2r,3).alt; p1:=arm_top_l_points(2l,4).alt;
+}};
+x5l=x6l=x2; bot y5=0; y6=-hair; y7=-.5d;
+rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d;
+p2:=z6r..{down}z7r..{left}z8r..{right}z8l..{up}z7l..z6l--z5l;
+p3:=reverse(z5r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a---z5l+hair*left..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3..z5r+hair*right---z1r.a..z1r.c{left}..z1r.b---p0--p1---cycle;
+penlabels(1,2,3,5,6,7,8);
+endchar;
+
+iff known chars.latin_Tstroke:
+bskchar "The letter T with stroke";
+beginchar(chars.latin_Tstroke,15.5u#,cap_height#,0); uni "0x0166";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(bar,90); pos5'(bar,90); pos6(bar,90); pos6'(bar,90);
+bot y1=0; top y2=h; x1=x2=.5w;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+top y3r=top y4r=h; rt x3r=w-u; lft x4r=u;
+x6-x5=4u if bold_face:+u fi; y6=y6'=y5=y5'=.8[bar_height,x_height]; .5[x5,x6]=x1;
+x5'=x1l; x6'=x1r; bskpoints(5,6,hair,hair);
+{{numeric old; old:=stem;
+ save stem; stem:=if monospace: 2/3\\fi old;
+ p0:=reverse arm_top_r_points(2r,3).alt; p1:=arm_top_l_points(2l,4).alt;
+}};
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up
+ ..{right}z1r.a..z1r.c{left}..z1r.b---obl(6'l,1l,6l)---z6ll
+ ..z6r---obl(6'r,6r,2r)---p0--p1---obl(5'r,2l,5rr)---z5rr
+ ..z5l---obl(5'l,5l,1l)---cycle;
+penlabels(1,2,5,5',6,6');
+endchar;
+
+charscription(14u,cap_height,0)(
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,180); pos4(cap_hair,180);
+top y1=top y4=h; y2=y3=.45(x4-x1);
+y2'l=-.5o; x2'l=.5[x2,x3];
+lft x1l=2u; x2=x1; rt x4r=w-2u; x3=x4;
+p1:=z2l{down}...{up}z3l; p2:=z2r{down}...{up}z3r;
+z2'l-z2'r=(((x2'l,h)--(x2'l,-h)) intersectionpoint p1)-(((x2'l,h)--(x2'l,-h)) intersectionpoint p2);
+cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(4l); cap_serifs_tl(4r);
+filldraw z1l---z1l.a..{right}z1l.c..z1l.b---z2l...z2'l{right}...z3l---z4l.b..{right}z4l.c..z4l.a---
+ z4r.a..{right}z4r.c..z4r.b---z3r...z2'r{left}...z2r---z1r.b..{right}z1r.c..z1r.a---cycle;
+penlabels(1,2,2',3,4);
+);
+
+iff known chars.latin_U:
+bskchar "The letter U";
+beginchar(chars.latin_U,14u#,cap_height#,0); uni "0x0055";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Uacute:
+bskchar "The letter U with acute";
+beginchar(chars.latin_Uacute,14u#,Acc_height#,0); uni "0x00DA";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2'r-u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Ugrave:
+bskchar "The letter U with grave";
+beginchar(chars.latin_Ugrave,14u#,Acc_height#,0); uni "0x00D9";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2'r+u;
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Udoublegrave:
+bskchar "The letter U with double grave";
+beginchar(chars.latin_Udoublegrave,14u#,Acc_height#,0); uni "0x0214";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x102-x100=3u; x102=x2'r;
+d_grave(100,101,102,103,whatever).capital;
+endchar;
+
+iff known chars.latin_Umacron:
+bskchar "The letter U with macron";
+beginchar(chars.latin_Umacron,14u#,Acc_height#-.1x_height#,0); uni "0x016A";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1r.a; x101=x4r.a;
+macron(100,101);
+endchar;
+
+iff known chars.latin_Ucaron:
+bskchar "The letter U with caron";
+beginchar(chars.latin_Ucaron,14u#,Acc_height#,0); uni "0x01D3";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2'r+o;
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Ucircumflex:
+bskchar "The letter U with circumflex";
+beginchar(chars.latin_Ucircumflex,14u#,Acc_height#,0); uni "0x00DB";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2'r;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Ubreve:
+bskchar "The letter U with breve";
+beginchar(chars.latin_Ubreve,14u#,Acc_height#,0); uni "0x016C";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2'r+o; x102-x100=5u;
+breve(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Uinvbreve:
+bskchar "The letter U with inverted breve";
+beginchar(chars.latin_Uinvbreve,14u#,Acc_height#,0); uni "0x0216";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2'r; x102-x100=5u; bot y100=top y1+o;
+tieacc(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Uhumlaut:
+bskchar "The letter U with Hungarian umlaut";
+beginchar(chars.latin_Uhumlaut,14.3u#,Acc_height#,0); uni "0x0170";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=3u; .5[x100,x101]=.5[x1r.a,x4r.a]+1.5u;
+h_umlaut(100,101,102,103,2u).capital;
+endchar;
+
+iff known chars.latin_Uring:
+bskchar "The letter U with ring";
+beginchar(chars.latin_Uring,14u#,Acc_height#,0); uni "0x016E";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x2'r; x100-x101=1.5u; bot y100=top y1+hair;
+ring(100,101).capital;
+endchar;
+
+iff known chars.latin_Utilde:
+bskchar "The letter U with tilde";
+beginchar(chars.latin_Utilde,14u#,Acc_height#,0); uni "0x0168";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; bot y100=top y1+o; x.tilde=x2'r+o;
+tilde(100,101).capital;
+endchar;
+
+
+iff known chars.latin_Uumlaut:
+bskchar "The letter U with umlaut";
+beginchar(chars.latin_Uumlaut,14u#,Acc_height#,0); uni "0x00DC";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1r; x101=x4;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_Uogonek:
+bskchar "The letter U with ogonek";
+beginchar(chars.latin_Uogonek,14u#,cap_height#,.85desc_depth#); uni "0x0172";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,180); pos4(cap_hair,180);
+pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160);
+top y1=top y4=h; y2=y3=.45(x4-x1);
+y2'l=-.5o; x2'l=.5[x2,x3];
+lft x1l=2u; x2=x1; rt x4r=w-2u; x3=x4;
+x5=x6l+1.5u; x5l=x2'r; x7-x6l=3u; rt x8l=x7+1.5u;
+bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d;
+p1:=z2l{down}...{up}z3l; p2:=z2r{down}...{up}z3r;
+z2'l-z2'r=(((x2'l,h)--(x2'l,-h)) intersectionpoint p1)-(((x2'l,h)--(x2'l,-h)) intersectionpoint p2);
+p2:=z2l{down}...z2'l{right}...{up}z3l;
+p3:=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r;
+cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(4l); cap_serifs_tl(4r);
+filldraw z1l---z1l.a..{right}z1l.c..z1l.b
+ ---subpath (0,rundy(p2,(1,stem)).zpet) of p2
+ ..subpath(rundy(p3,(0,stem)),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p2,1),infinity) of p2---z4l.b..{right}z4l.c..z4l.a
+ ---z4r.a..{right}z4r.c..z4r.b---z3r...z2'r{left}...z2r
+ ---z1r.b..{right}z1r.c..z1r.a---cycle;
+penlabels(1,2,2',3,4,5,6,7,8);
+endchar;
+
+iff known chars.latin_V:
+bskchar "The letter V";
+beginchar(chars.latin_V,14u#,cap_height#,0); uni "0x0056";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.5w+o; bot y3l=-apex_o;
+left_stem=cap_stem;
+right_stem=cap_hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(.65cap_hair,90); pos5(.65cap_hair,90);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(2r); cap_serifs_tl(2l);
+filldraw z1l--z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')
+ ..z1r.c{right}..z1r.a---cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+endchar;
+
+charscription(19u,cap_height,0)(
+numeric alpha[], right_stem, left_stem;
+oblu:=2oblu;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3=.5w if monospace: +.5(cap_stem-cap_hair) fi; top y3=h if monospace and (x2r-x1l<4cap_stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.37w;
+bot y4=bot y5=-apex_o;
+left_stem=cap_stem;
+right_stem=cap_hair;
+alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l);
+alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5);
+alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3);
+alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4);
+pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0);
+cap_serifs_tl(1l); cap_serifs_tr(1r);
+cap_serifs_tl(2l); cap_serifs_tr(2r);
+bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5);
+y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny);
+z0=whatever[z4,z4']=whatever[z5,z5'];
+z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right];
+z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---z4---
+ obl(0,4,5)---z5---diag_serif(2r,5)..{right}z2r.c
+ ..z2r.a---z2l.a..{right}z2l.c..diag_serif(2l,2')---
+ obl(2'',2l,3)---z3---obl(1'',3,1r)---
+ diag_serif(1r,1'')..z1r.c{right}..z1r.a--cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+);
+
+iff known chars.latin_W:
+bskchar "The letter W";
+beginchar(chars.latin_W,19u#,cap_height#,0); uni "0x0057";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Wcircumflex:
+bskchar "The letter W with circumflex";
+beginchar(chars.latin_Wcircumflex,19u#,Acc_height#,0); uni "0x0174";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x4';
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Wgrave:
+bskchar "The letter W with grave";
+beginchar(chars.latin_Wgrave,19u#,Acc_height#,0); uni "0x1E80";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x101,x100]=x4';
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Wacute:
+bskchar "The letter W with acute";
+beginchar(chars.latin_Wacute,19u#,Acc_height#,0); uni "0x1E82";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x101,x100]=x4';
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Wumlaut:
+bskchar "The letter W with umlaut";
+beginchar(chars.latin_Wumlaut,19u#,Acc_height#,0); uni "0x1E84";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x4'; lft x101=x1'';
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_X:
+bskchar "The letter X";
+beginchar(chars.latin_X,15u#,cap_height#,0); uni "0x0058";
+italcorr cap_height#*slant+.4u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+oblu:=1.5oblu;
+numeric alpha[];
+lft x1l=2.5u; top y1l=h; rt x2r=w-2u; bot y2r=0;
+x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0;
+alpha1=diag_ratio(2,cap_stem,y1l-y2r,x1l-x2r);
+alpha2=diag_ratio(1,cap_hair,y3r-y4l,x3r-x4l);
+pos1(alpha1*cap_stem,0); pos2(alpha1*cap_stem,0);
+pos3(alpha2*cap_hair,0); pos4(alpha2*cap_hair,0);
+cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_bl(2l); cap_serifs_br(2r);
+cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_bl(4l); cap_serifs_br(4r);
+z1'=whatever[z1l,z2l]=whatever[z3l,z4l];
+z2'=whatever[z1r,z2r]=whatever[z3r,z4r];
+z3'=whatever[z1r,z2r]=whatever[z3l,z4l];
+z4'=whatever[z1l,z2l]=whatever[z3r,z4r];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)---
+ diag_serif(4l,1')..{left}z4l.c..z4l.a{right}..z4+ser_boule*up..
+ {right}z4r.a..{left}z4r.c..diag_serif(4r,4')---obl(4',4r,2l)---
+ diag_serif(2l,1l)..{left}z2l.c..z2l.a{right}..z2+ser_boule*up..
+ {right}z2r.a..{left}z2r.c..diag_serif(2r,1r)---obl(2',2r,3r)---
+ diag_serif(3r,2')..{right}z3r.c..z3r.a---z3l.a..
+ {right}z3l.c..diag_serif(3l,3')---obl(3',3l,1r)---
+ diag_serif(1r,3')..{right}z1r.c..z1r.a---cycle;
+penlabels(1,2,3,4); labels(1',2',3',4',5');
+endchar;
+
+charscription(14u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=.5h; x1=x2=.5w;
+pos3(whatever,0); pos4(whatever,0);
+lft x3l=2u; rt x4r=w-2u; top y3l=top y4r=h;
+z3r=z2r+whatever*(z3l-z2l); z4l'=z2r+(0,cap_hair-tiny) rotated (angle(z4r-z2r));
+z4l=z4l'+whatever*(z4r-z2r); z2'=whatever[z4l',z4l]=whatever[z2r,z3r];
+z0'=z2r+(u,0) rotated (angle(z4r-z2r)); z0'''=z2l+(u,0) rotated (angle(z3l-z2l));
+z0''=z2'+(u,0) rotated (angle(z4l-z2')); z0''''=z2'+(u,0) rotated (angle(z3r-z2r));
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_tr(4r); cap_serifs_tl(4l);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z2r+u*down..z0'---
+ diag_serif(4r,2r)..{right}z4r.c..z4r.a---z4l.a..
+ {right}z4l.c..diag_serif(4l,4l')---z0''...z0''''---
+ diag_serif(3r,2')..{right}z3r.c..z3r.a---z3l.a..
+ {right}z3l.c..diag_serif(3l,2l)---z0'''..z2l+u*down--cycle;
+penlabels(1,2,3,4); labels(0',0'',0''',0,0'''',2',4l');
+);
+
+iff known chars.latin_Y:
+bskchar "The letter Y";
+beginchar(chars.latin_Y,14u#,cap_height#,0); uni "0x0059";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Ygrave:
+bskchar "The letter Y with grave";
+beginchar(chars.latin_Ygrave,14u#,Acc_height#,0); uni "0x1EF2";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2+u;
+grave(100,101).capital;
+endchar;
+
+iff known chars.latin_Yacute:
+bskchar "The letter Y with acute";
+beginchar(chars.latin_Yacute,14u#,Acc_height#,0); uni "0x00DD";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2-u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_Ymacron:
+bskchar "The letter Y with macron";
+beginchar(chars.latin_Ymacron,14u#,Acc_height#-.1x_height#,0); uni "0x0232";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x3r.a; x101=x4l.a;
+macron(100,101);
+endchar;
+
+iff known chars.latin_Yumlaut:
+bskchar "The letter Y with umlaut";
+beginchar(chars.latin_Yumlaut,14u#,Acc_height#,0); uni "0x0178";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x3r; x101=x4l;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_Ycircumflex:
+bskchar "The letter Y with circumflex";
+beginchar(chars.latin_Ycircumflex,14u#,Acc_height#,0); uni "0x0176";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2+o;
+circumflex(100,101,102).capital;
+endchar;
+
+iff known chars.sign_yen:
+bskchar "Yen symbol";
+beginchar(chars.sign_yen,14u#,cap_height#,0); uni "0x00A5";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib; oblu.more:=2f_obl;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=.5h; x1=x2=.5w;
+pos3(whatever,0); pos4(whatever,0);
+forsuffixes i=5,6,7,8,9,12: pos.i(bar,90); endfor;
+lft x3l=2u; rt x4r=w-2u; top y3l=top y4r=h;
+z3r=z2r+whatever*(z3l-z2l); z4l'=z2r+(0,cap_hair-tiny) rotated (angle(z4r-z2r));
+z4l=z4l'+whatever*(z4r-z2r); z2'=whatever[z4l',z4l]=whatever[z2r,z3r];
+z0'=z2r+(u,0) rotated (angle(z4r-z2r)); z0'''=z2l+(u,0) rotated (angle(z3l-z2l));
+z0''=z2'+(u,0) rotated (angle(z4l-z2')); z0''''=z2'+(u,0) rotated (angle(z3r-z2r));
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_tr(4r); cap_serifs_tl(4l);
+y5=y6=y7=y8=.75bar_height; y9=y10=y11=y12=max(x_height,y0''''+cap_hair);
+x6=x1l; x7=x1r; lft x5=lft x9=2u; rt x8=rt x12=w-2u;
+z13=point 0 of diag_serif(4r,2r);
+z14=point 0 of diag_serif(3l,2l);
+y10l=y11l=y12l; y10r=y11r=y12r;
+z11l=whatever[z13,z0']; z11r=whatever[z13,z0'];
+z10l=whatever[z14,z0''']; z10r=whatever[z14,z0'''];
+bskpoints(5,8,bar,bar); bskpoints(9,12,bar,bar);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---obl(7l,1r,8l)---z8ll..z8r
+ ---obl(7r,8r,2r)---z2r+u*down..z0'---obl(11l,0',12l)---z12ll
+ ..z12r---obl(11r,12r,13).more---
+ z13{z4r-z2r}..{right}z4r.c..z4r.a---z4l.a..
+ {right}z4l.c..diag_serif(4l,4l')---z0''...z0''''---
+ diag_serif(3r,2')..{right}z3r.c..z3r.a---z3l.a..
+ {right}z3l.c..z14---obl(10r,14,9r).more---z9rr..z9l
+ ---obl(10l,9l,0''')---z0'''..z2l+u*down
+ ---obl(6r,2l,5r)---z5rr..z5l---obl(6l,5l,1l)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(0',0'',0''',0,0'''',2',4l',5rr,8ll,9rr,12ll);
+endchar;
+
+charscription(13u,cap_height,0)(
+numeric alpha;
+lft x1l=u; bot y1l=0; rt x2r=w-u-o; top y2r=h;
+x2r-x2l=x1r-x1l;
+alpha=diag_ratio(2,cap_stem,y2r-y1l,x2r-x1l);
+pos1(alpha*cap_stem,0); pos2(alpha*cap_stem,0);
+bot y4r=0; rt x4r=w-u; top y5r=h; x5r=1.5u;
+pickup nullpen;
+{{save filldraw; def filldraw:= draw enddef; arm_bot_r(1r,4); arm_top_l(2l,5)}};
+pickup tiny.nib;
+x1'=x4e; z1'=whatever[z1r,z2r];
+y2'=y5f; z2'=whatever[z1l,z2l];
+filldraw z1l---z4a..{right}z4b...z4r+cap_hair*up---z4l..{down}z4l.o&
+ z4l.o..z4.c..z4.d---z4e+o*right{left}..z1'---z2r---z5b..z5r+cap_hair*down---
+ z5l..z5c{dir55}..z5d---z5e..z2'---cycle;
+penlabels(1,2,3,4); labels(0',0'',0''',0,0'''',2',4l');
+);
+
+iff known chars.latin_Z:
+bskchar "The letter Z";
+beginchar(chars.latin_Z,13u#,cap_height#,0); uni "0x005A";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_Zcaron:
+bskchar "The letter Z with caron";
+beginchar(chars.latin_Zcaron,13u#,Acc_height#,0); uni "0x017D";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x5,x2r];
+hacek(100,101,102).capital;
+endchar;
+
+iff known chars.latin_Zdotabove:
+bskchar "The letter Z with dot above";
+beginchar(chars.latin_Zdotabove,13u#,Acc_height#,0); uni "0x017B";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=.5[x5,x2r];
+dotabove(100);
+endchar;
+
+iff known chars.latin_Zacute:
+bskchar "The letter Z with acute";
+beginchar(chars.latin_Zacute,13u#,Acc_height#,0); uni "0x0179";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.25[x101,x100]=.5[x5,x2r];
+acute(100,101).capital;
+endchar;
+
+charscription(9u,x_height,0)(
+numeric aend; aend:=stem; oblu:=2oblu;
+path p[]; numeric tim[];
+pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0);
+pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right;
+z4''=z4+.5(aend-currentbreadth)*dir135;
+rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve;
+x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r];
+x3=.5[x1r,lft u]; top y3r=h+o;
+y4''=.5[y2,y3l]; lft x4r=u+o;
+z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1);
+pos6(hair,angle(z7-z6l)+90);
+pos8(curve,30); lft x8l=u; y8r=y7-like_hair;
+pos9(hair,120); x9r=x3; y9l=o;
+pos10(hair,angle(z1-z9l)+90); z10l=z1;
+p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l..
+ {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r..
+ {right}z0'r..{z0r-z0'}z0r;
+p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l;
+p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r;
+(tim1,tim2)=p0 intersectiontimes p1;
+(tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0;
+(tim5,tim6)=p2 intersectiontimes p0;
+(tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1..
+ subpath(rundy(p0,tim4),infinity) of p0..cycle;
+z11=point rundy(p0,tim8).zpet of p0;
+z12=point rundy(p0,tim6) of p0;
+infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
+ if (y12>y11):
+ subpath(tim8,tim6) of p0
+ else:
+ subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0
+ fi
+ ..cycle;
+penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12);
+);
+
+bskboundary;
+
+iff known chars.latin_a:
+bskchar "The letter a";
+beginchar(chars.latin_a,9u#,x_height#,0); uni "0x0061";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_aacute:
+bskchar "The letter a with acute";
+beginchar(chars.latin_aacute,9u#,asc_height#,0); uni "0x00E1";
+italcorr asc_height#*slant-1.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3; acute(100,101);
+endchar;
+
+iff known chars.latin_agrave:
+bskchar "The letter a with grave";
+beginchar(chars.latin_agrave,9u#,asc_height#,0); uni "0x00E0";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x100l=x4l; grave(100,101);
+endchar;
+
+iff known chars.latin_aumlaut:
+bskchar "The letter a with umlaut";
+beginchar(chars.latin_aumlaut,9u#,asc_height#-dot_size#,0); uni "0x00E4";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x3; umlaut(100,101);
+endchar;
+
+iff known chars.latin_adoublegrave:
+bskchar "The letter a with doublegrave";
+beginchar(chars.latin_adoublegrave,9u#,asc_height#,0); uni "0x0201";
+pickup tiny.nib;
+adjust_fit(0,0);
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,x3l);
+endchar;
+
+iff known chars.latin_acircumflex:
+bskchar "The letter a with circumflex";
+beginchar(chars.latin_acircumflex,9u#,asc_height#-.1x_height#,0); uni "0x00E2";
+italcorr .5[asc_height#,x_height#]*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3+2o;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_acaron:
+bskchar "The letter a with caron";
+beginchar(chars.latin_acaron,9u#,asc_height#,0); uni "0x01CE";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_abreve:
+bskchar "The letter a with breve";
+beginchar(chars.latin_abreve,9u#,asc_height#+apex_o#,0); uni "0x0103";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x101=x3+o; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_ainvbreve:
+bskchar "The letter a with inverted breve";
+beginchar(chars.latin_ainvbreve,9u#,asc_height#,0); uni "0x0203";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x101=x3+o; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_amacron:
+bskchar "The letter a with macron";
+beginchar(chars.latin_amacron,9u#,.5[asc_height#,x_height#],0); uni "0x0101";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4r;
+macron(100,101);
+endchar;
+
+iff known chars.latin_atilde:
+bskchar "The letter a with tilde";
+beginchar(chars.latin_atilde,9u#,asc_height#,0); uni "0x00E3";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; lft x.tilde=x3;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_aring:
+bskchar "The letter a with ring";
+beginchar(chars.latin_aring,9u#,asc_height#,0); uni "0x00E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x100=x3; x100-x101=1.3u;
+ring(100,101);
+endchar;
+
+iff known chars.latin_adotabove:
+bskchar "The letter a with dot above";
+beginchar(chars.latin_adotabove,9u#,asc_height#-.5dot_size#,0); uni "0x0227";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x3l;
+dotabove(100);
+endchar;
+
+iff known chars.latin_a_feminine:
+bskchar "Feminine ordinal indicator (superscript a)";
+beginchar(chars.latin_a_feminine,5.5u#,asc_height#-.5x_height#,0); uni "0x00AA";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(.85)(curve,hair,vair);
+usechar shifted (-x8l+o,-y3r) scaled .5 shifted (u+(HH-.5x_height)*slant,HH);
+endchar;
+
+iff known chars.latin_aogonek:
+bskchar "The letter a with ogonek";
+beginchar(chars.latin_aogonek,9u#,x_height#,.85desc_depth#); uni "0x0105";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric aend; aend:=stem; oblu:=2oblu;
+path p[]; numeric tim[];
+pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0);
+pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right;
+pos13(stem,0); pos14(curve,0); pos15(hair,45); pos16(hair,160);
+z4''=z4+.5(aend-currentbreadth)*dir135;
+rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve;
+x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r];
+x3=.5[x1r,lft u]; top y3r=h+o;
+y4''=.5[y2,y3l]; lft x4r=u+o;
+z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1);
+x13-x14l=1.5u; x13r=x0'; x15-x14l=3u; rt x16l-x15=1.5u;
+y13=0; y14=-.5d; bot y15l=-d; y16=-2/3d;
+pos6(hair,angle(z7-z6l)+90);
+pos8(curve,30); lft x8l=u; y8r=y7-like_hair;
+pos9(hair,120); x9r=x3; y9l=o;
+pos10(hair,angle(z1-z9l)+90); z10l=z1;
+p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l..
+ {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r..
+ {right}z0'r..{z0r-z0'}z0r;
+p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l;
+p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r;
+p3:=reverse (z13l{z14l-z13r}..z14l...z15l..{z13-z14}z16l..z16r{z14-z13}..z15r..z14r..z13r);
+(tim1,tim2)=p0 intersectiontimes p1;
+(tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0;
+(tim5,tim6)=p2 intersectiontimes p0;
+(tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p0,1),rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1..
+ subpath(rundy(p0,tim4),infinity) of p0..cycle;
+z11=point rundy(p0,tim8).zpet of p0;
+z12=point rundy(p0,tim6) of p0;
+infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
+ if (y12>y11):
+ subpath(tim8,tim6) of p0
+ else:
+ subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0
+ fi
+ ..cycle;
+penlabels(0,0',1,2,3,4,5,6,8,9,10,13,14,15,16); labels(4',4'',7,11,12);
+endchar;
+
+iff known chars.latin_b:
+bskchar "The letter b";
+beginchar(chars.latin_b,11u#,asc_height#,0); uni "0x0062";
+italcorr .5x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+lft x5l=2u; bot y5=-d; top y6r=h;
+{{
+ numeric oldserif; oldserif:=serif_drop;
+ save serif_drop; serif_drop:=.81oldserif;
+ lowercase_points(5,6,jut);
+}};
+p0=z1l{up}..z4l..z3l..z2l..{z1r-z2r}z1'l---cycle;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5f--z6r;
+tim1 =xpart(subpath (0,3) of p0 intersectiontimes p2);
+tim2-3=xpart(subpath (3,5) of p0 intersectiontimes ((0,hair)--(w,hair)));
+z7=point tim1 of p0 + like_stem*up;
+tim3 =xpart(p0 intersectiontimes ((0,y7-.5hair)--(w,y7-.5hair)));
+y0=ypart(point tim2 of p0)+o; z0=whatever[z5l,z5f];
+if (abs(z0-z1'l))<hair: y0:=y0-2o; fi;
+p4=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+filldraw z0---z5l+apex_o*down---lowercase_stem_upper(5,6)---z7
+ ..subpath (tim3, tim2) of p0..cycle;
+infill p4..cycle;
+penlabels(1,1',2,3,4); labels(0,7);
+endchar;
+
+iff known chars.sign_blank_b:
+bskchar "Blank b sign";
+beginchar(chars.sign_blank_b,11u#,asc_height#,0); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu; oblu.light:=f_obl;
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+lft x5l=2u; bot y5=-d; top y6r=h;
+{{
+ numeric oldserif; oldserif:=serif_drop;
+ save serif_drop; serif_drop:=.81oldserif;
+ lowercase_points(5,6,jut);
+}};
+lft x8=.5u; x9=.5w+u; top y9=h-o; y8=.2[x_height,h];
+theta:=angle(z9-z8)+90;
+pos8(bar,theta); pos9(bar,theta);
+x8'l=x8'r=x5l; x9'l=x9'r=x5r; bskpoints(8,9,hair,hair);
+z8'l=whatever[z8l,z9l]; z9'l=whatever[z8l,z9l];
+z8'r=whatever[z8r,z9r]; z9'r=whatever[z8r,z9r];
+p0=z1l{up}..z4l..z3l..z2l..{z1r-z2r}z1'l---cycle;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5f--z6r;
+tim1 =xpart(subpath (0,3) of p0 intersectiontimes p2);
+tim2-3=xpart(subpath (3,5) of p0 intersectiontimes ((0,hair)--(w,hair)));
+z7=point tim1 of p0 + like_stem*up;
+tim3 =xpart(p0 intersectiontimes ((0,y7-.5hair)--(w,y7-.5hair)));
+y0=ypart(point tim2 of p0)+o; z0=whatever[z5l,z5f];
+if (abs(z0-z1'l))<hair: y0:=y0-2o; fi;
+p4=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+filldraw z0---z5l+apex_o*down---obl(8'l,5l,8l)---z8l..z8rr
+ ---obl(8'r,8r,6l).light---lowercase_stem_upper(5,6)
+ ---obl(9'r,6r,9r)---z9r..z9ll---obl(9'l,9l,7)---z7
+ ..subpath (tim3, tim2) of p0..cycle;
+infill p4..cycle;
+penlabels(1,1',2,3,4,8,8',9,9'); labels(0,7,8rr,9ll);
+endchar;
+
+charscription(8.5u,x_height,0)(
+numeric cend; cend:=stem;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+lft x1l=u; y1=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10;
+rt x4r=w-u; y4r=.85h;
+z4'-z4l=hair*unitvector(z4l-z3r);
+filldraw z0---z0'+o*down..{left}z2l..z1l..{right}z3l..
+ z4r..z4'..{dir(angle(z4l-z4')-20)}z4l..
+ z3'r..z3r{left}..z1r..{right}z2r..z0'---cycle;
+penlabels(1,2,3,4); labels(0,0',3'r,4');
+);
+
+iff known chars.latin_c:
+bskchar "The letter c";
+beginchar(chars.latin_c,8.5u#,x_height#,0); uni "0x0063";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_ccaron:
+bskchar "The letter c with caron";
+beginchar(chars.latin_ccaron,8.5u#,asc_height#,0); uni "0x010D";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_cacute:
+bskchar "The letter c with acute";
+beginchar(chars.latin_cacute,8.5u#,asc_height#,0); uni "0x0107";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+acute(100,101);
+endchar;
+
+iff known chars.latin_ccircumflex:
+bskchar "The letter c with circumflex";
+beginchar(chars.latin_ccircumflex,8.5u#,asc_height#-.1x_height#,0); uni "0x0109";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x101=x3;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_cdotabove:
+bskchar "The letter c with dot above";
+beginchar(chars.latin_cdotabove,8.5u#,asc_height#-.5dot_size#,0); uni "0x010B";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x3;
+dotabove(100);
+endchar;
+
+iff known chars.latin_ccedilla:
+bskchar "The letter c with cedilla";
+beginchar(chars.latin_ccedilla,8.5u#,x_height#,.65desc_depth#); uni "0x00E7";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend, tim[]; cend:=stem;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+pos5(.5stem,0); pos6(.5stem,0); pos7(.8stem,0); pos8(.5stem,-110);
+lft x1l=u; y1=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10;
+rt x4r=w-u; y4r=.85h;
+z4'-z4l=hair*unitvector(z4l-z3r);
+x5r=x6r; z5r=z2l; y6=-hair; y7=-.5d;
+rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d;
+p1:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l;
+p2:=z6r..{down}z7r..{left}z8r..{right}z8l..{up}z7l..z6l--z5l;
+p3:=z5r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2;
+tim1=xpart(p1 intersectiontimes (z6r--(x5r,.5h)));
+filldraw subpath(0,rundy(p1,2).zpet) of p1
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p1,tim1),infinity) of p1..
+ z4r..z4'..{dir(angle(z4l-z4')-20)}z4l..
+ z3'r..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up-- else: --- fi cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0',3'r,4');
+endchar;
+
+iff known chars.sign_cent:
+bskchar "Cent sign";
+beginchar(chars.sign_cent,8.5u#,asc_height#,comma_depth#); uni "0x00A2";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend, tim[]; cend:=stem;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+lft x1l=u; y1=.5x_height; x2=x3=.5w+hair; bot y2l=-o; top y3l=x_height+o;
+rt x0=w-u; y0=.2x_height; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10;
+rt x4r=w-u; y4r=.85x_height;
+z4'-z4l=hair*unitvector(z4l-z3r);
+top z5=(x3,h); z6=(x3,-d); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90);
+bskpoints(5,6,hair,hair);
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..z4r..z4'..{dir(angle(z4l-z4')-20)}z4l;
+p1:=z3l{right}..z4r..z4'..z4l{dir(angle(z4l-z4')-20)}..z3'r..z3r{left}..z1r..{right}z2r..z0'---z0;
+p1:=subpath(3,infinity) of p1;
+p2:=z6ll---z5l;
+p3:=z5rr---z6r;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath (3,infinity) of p0 intersectiontimes p2;
+(tim6-3,tim7)=subpath (3,infinity) of p0 intersectiontimes p3;
+(tim8,tim9)=p1 intersectiontimes p3;
+(tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3;
+(tim12,tim13)=p1 intersectiontimes p2;
+(tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2;
+{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p3,tim1),infinity) of p3
+ ---subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p3,tim9),rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p1,tim10),infinity) of p1..cycle;
+}};
+infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1
+ ..subpath(rundy(p2,tim15),rundy(p2,tim13).zpet) of p2
+ ..cycle;
+penlabels(1,2,3,4,5,6); labels(0,0',3'r,4',5rr,6ll);
+endchar;
+
+iff known chars.sign_cent_old:
+bskchar "Old style cent sign";
+beginchar(chars.sign_cent_old,8.5u#,asc_height#,comma_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend, tim[]; cend:=stem;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+lft x1l=u; y1=.5x_height; x2=x3=.5w+hair; bot y2l=-o; top y3l=x_height+o;
+rt x0=w-u; y0=.2x_height; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10;
+rt x4r=w-u; y4r=.85x_height;
+z4'-z4l=hair*unitvector(z4l-z3r);
+z5=(w-u,h); z6=(u,-d); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90);
+bskpoints(5,6,hair,hair);
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..z4r..z4'..{dir(angle(z4l-z4')-20)}z4l;
+p1:=z3l{right}..z4r..z4'..z4l{dir(angle(z4l-z4')-20)}..z3'r..z3r{left}..z1r..{right}z2r..z0'---z0;
+p1:=subpath(3,infinity) of p1;
+p2:=z6ll---z5l;
+p3:=z5rr---z6r;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath (3,infinity) of p0 intersectiontimes p2;
+(tim6-3,tim7)=subpath (3,infinity) of p0 intersectiontimes p3;
+(tim8,tim9)=p1 intersectiontimes p3;
+(tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3;
+(tim12,tim13)=p1 intersectiontimes p2;
+(tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2;
+{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p3,tim1),infinity) of p3
+ ---subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p3,tim9),rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p1,tim10),infinity) of p1..cycle;
+}};
+infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1
+ ..subpath(rundy(p2,tim15),rundy(p2,tim13).zpet) of p2
+ ..cycle;
+penlabels(1,2,3,4,5,6); labels(0,0',3'r,4',5rr,6ll);
+endchar;
+
+charscription(11u,asc_height,0)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(curve,0); pos3'(hair,180); pos2(hair,90);
+pos3(hair,180); pos4(hair,270);
+lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5x_height;
+.5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+rt x5r=w-2u; bot y5=-d; top y6r=h;
+lowercase_points(5,6,1.2jut);
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=lowercase_lower_u_serif(5,hair);
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up;
+tim4 =xpart(p0 intersectiontimes ((.5w,y7-.5hair)--(w,y7-.5hair)));
+if tim4=-1: tim4:=xpart(p0 intersectiontimes ((.5[x4,x7],bar_height)--(.5[x4,x7],h))) fi;
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+filldraw subpath (tim2, tim4) of p0..z7---lowercase_stem_upper(5,6)
+ ---subpath(0,tim3) of p3..cycle;
+infill p4..cycle;
+penlabels(1,3',2,3,4); labels(7);
+);
+
+iff known chars.latin_d:
+bskchar "The letter d";
+beginchar(chars.latin_d,11u#,asc_height#,0); uni "0x0064";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_dcaron:
+bskchar "The letter d with caron (treated like comma)";
+beginchar(chars.latin_dcaron,11u#,asc_height#,0); uni "0x010F";
+italcorr asc_height#*slant+2u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+y100''r=h; rt x100'''=w+u;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_dstroke:
+bskchar "The letter d with stroke";
+beginchar(chars.latin_dstroke,11u#,asc_height#,0); uni "0x0111";
+italcorr asc_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2f_obl; oblu.light:=f_obl;
+pos1(curve,0); pos3'(hair,180); pos2(hair,90);
+pos3(hair,180); pos4(hair,270);
+pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90);
+lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5x_height;
+.5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+rt x5r=w-2u; bot y5=-d; top y6r=h;
+x9-x8=4u; y9=y9'=y8=y8'=.4[x_height,h]; rt x9=w-.5u;
+x8'=x6l; x9'=x6r; bskpoints(8,9,hair,hair);
+lowercase_points(5,6,1.2jut);
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=lowercase_lower_u_serif(5,hair);
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up;
+tim4 =xpart(p0 intersectiontimes ((.5w,y7-.5hair)--(w,y7-.5hair)));
+if tim4=-1: tim4:=xpart(p0 intersectiontimes ((.5[x4,x7],bar_height)--(.5[x4,x7],h))) fi;
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+filldraw subpath (tim2, tim4) of p0..z7
+ ---obl(8'l,7,8l).light---z8l..z8rr---obl(8'r,8r,6b).light
+ ---lowercase_stem_upper(5,6)
+ ---obl(9'r,6r,9r).light---z9r..z9ll---obl(9'l,9l,5f).light
+ ---subpath(0,tim3) of p3..cycle;
+infill p4..cycle;
+penlabels(1,3',2,3,4,8,8',9,9'); labels(7,8rr,9ll);
+endchar;
+
+iff known chars.sign_dong:
+bskchar "Dong sign";
+beginchar(chars.sign_dong,11u#,asc_height#,2rule_thickness#+o#); uni "0x20AB";
+italcorr asc_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu; oblu.light:=f_obl;
+pos1(curve,0); pos3'(hair,180); pos2(hair,90);
+pos3(hair,180); pos4(hair,270);
+pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90);
+pos10(rule_thickness,90); pos11(rule_thickness,90);
+lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5x_height;
+.5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+rt x5r=w-2u; bot y5=0; top y6r=h;
+y9=y9'=y8=y8'=.4[x_height,h]; rt x9=w-.5u; lft x8=x1r;
+x8'=x6l; x9'=x6r; bskpoints(8,9,hair,hair);
+lowercase_points(5,6,1.2jut);
+bot y10l=bot y11l=-d; lft x10=u; rt x11=w-u;
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=lowercase_lower_u_serif(5,hair);
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up;
+tim4 =xpart(p0 intersectiontimes ((.5w,y7-.5hair)--(w,y7-.5hair)));
+if tim4=-1: tim4:=xpart(p0 intersectiontimes ((.5[x4,x7],bar_height)--(.5[x4,x7],h))) fi;
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+filldraw subpath (tim2, tim4) of p0..z7
+ ---obl(8'l,7,8l).light---z8l..z8rr---obl(8'r,8r,6b).light
+ ---lowercase_stem_upper(5,6)
+ ---obl(9'r,6r,9r).light---z9r..z9ll---obl(9'l,9l,5f).light
+ ---subpath(0,tim3) of p3..cycle;
+infill p4..cycle;
+filldraw bskrule(10,11,rule_thickness,rule_thickness);
+penlabels(1,3',2,3,4,8,8',9,9'); labels(7,8rr,9ll);
+endchar;
+
+iff known chars.latin_eth:
+bskchar "The letter eth";
+beginchar(chars.latin_eth,10u#,asc_height#,0); uni "0x00F0";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,180); pos4(hair,270);
+pos5(curve,180); pos6(hair,-90);
+lft x1l=u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3;
+rt x5l=w-u; y5l=y3l+stem; top y6l=h+o; lft x6=u;
+p0=z2r{right}..z5r..{dir170}z6r; x3l=xpart (((w,y3)--(.5w,y3))intersectionpoint p0);
+p1=z2l{left}..z1l..z4l..{down}z3l;
+p2=z2r{right}..z5r..{dir170}z6r;
+z0=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z0--(x4,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(w,y0)));
+p3:=z6l{dir-10}..z5l..{left}z2l;
+p4:=z2l{left}..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p2,tim2),infinity) of p2;
+tim0=xpart(p3 intersectiontimes ((0,.5[x_height,h])--(w,.5[x_height,h])));
+top y8=h; x8=.5[x5,x4]; z7=z8+5u*unitvector(((direction tim0 of p3) rotated -95));
+if y7<y4l+o: y7:=y7+hair; fi
+theta:=angle(z8-z7)+90;
+pos7(bar,theta); pos8(bar,theta); bskpoints(7,8,bar,bar);
+p5:=z7rr---z8r;
+p6:=z8ll---z7l;
+(tim3,tim4)=p3 intersectiontimes p5;
+(tim5,tim6)=p3 intersectiontimes p6;
+(tim7,tim8)=p4 intersectiontimes p6;
+(tim9,tim10)=p4 intersectiontimes p5;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p5,tim4),infinity) of p5
+ ..{z7l-z8l}z8ll..subpath(rundy(p3,(tim5,2hair)),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p6,tim8),infinity) of p6
+ ..subpath(0,rundy(p5,tim10).zpet) of p5
+ ..subpath(rundy(p4,tim9),infinity) of p4..cycle;
+infill z1r{up}..z4r..z3r..z2r..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(7rr,8ll);
+endchar;
+
+charscription(9u,x_height,0)(
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(curve,180);
+lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1;
+p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi;
+tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
+tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim6=xpart(p1 intersectiontimes ((w,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+p2=point tim3 of p0 -- point tim4 of p1;
+p3=point tim7 of p1 -- point tim6 of p1;
+filldraw subpath(0,rundy(p0,(tim3,hair)).zpet) of p0--(subpath(0,rundy(p2,1).zpet) of p2)..
+ subpath(rundy(p1,(tim5,if bold_face: 2f_obl else: oblu fi)),infinity) of p1
+ {z0-z0'-o*down}..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+penlabels(1,2,3,4); labels(0,0');
+);
+
+iff known chars.latin_e:
+bskchar "The letter e";
+beginchar(chars.latin_e,9u#,x_height#,0); uni "0x0065";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_eacute:
+bskchar "The letter e with acute";
+beginchar(chars.latin_eacute,9u#,asc_height#,0); uni "0x00E9";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+x101=x3-u;
+usechar;
+acute(100,101);
+endchar;
+
+iff known chars.latin_ecaron:
+bskchar "The letter e with caron";
+beginchar(chars.latin_ecaron,9u#,asc_height#,0); uni "0x011B";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_egrave:
+bskchar "The letter e with grave";
+beginchar(chars.latin_egrave,9u#,asc_height#,0); uni "0x00E8";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x101l=x3;
+grave(100,101);
+endchar;
+
+iff known chars.latin_edoublegrave:
+bskchar "The letter e with double grave";
+beginchar(chars.latin_edoublegrave,9u#,asc_height#,0); uni "0x0205";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u; x102r=x3;
+d_grave(100,101,102,103,whatever);
+endchar;
+
+iff known chars.latin_ecircumflex:
+bskchar "The letter e with circumflex";
+beginchar(chars.latin_ecircumflex,9u#,asc_height#-.1x_height#,0); uni "0x00EA";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_eumlaut:
+bskchar "The letter e with umlaut";
+beginchar(chars.latin_eumlaut,9u#,asc_height#-dot_size#,0); uni "0x00EB";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x3; x101-x100=3u;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_emacron:
+bskchar "The letter e with macron";
+beginchar(chars.latin_emacron,9u#,.5[asc_height#,x_height#],0); uni "0x0113";
+italcorr .5[asc_height#,x_height#]*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x1r;
+macron(100,101);
+endchar;
+
+iff known chars.latin_edotabove:
+bskchar "The letter e with dot above";
+beginchar(chars.latin_edotabove,9u#,asc_height#-.5dot_size#,0); uni "0x0117";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x3;
+dotabove(100);
+endchar;
+
+iff known chars.latin_ebreve:
+bskchar "The letter e with breve";
+beginchar(chars.latin_ebreve,9u#,asc_height#,0); uni "0x0115";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_einvbreve:
+bskchar "The letter e with inverted breve";
+beginchar(chars.latin_einvbreve,9u#,asc_height#+o#,0); uni "0x0207";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x3; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_eogonek:
+bskchar "The letter e with ogonek";
+beginchar(chars.latin_eogonek,9u#,x_height#+o#,.85desc_depth#); uni "0x0119";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(curve,180);
+pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160);
+lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1;
+p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+x5-x6l=1.5u; x5l=x2; x7-x6l=3u; rt x8l-x7=1.5u;
+y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d;
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
+tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim6=xpart(p1 intersectiontimes ((w,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+p2:=point tim3 of p0 -- point tim4 of p1;
+p3:=point tim7 of p1 -- point tim6 of p1;
+p4:=reverse (z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r);
+tim8=xpart(p0 intersectiontimes ((x5r,0)--(x5r,h)));
+tim9=xpart(p0 intersectiontimes subpath(1,infinity) of p4);
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p4,0),rundy(p4,infinity).zpet) of p4
+ ..subpath(rundy(p0,tim9),rundy(p0,(tim3,hair)).zpet) of p0
+ --(subpath(0,rundy(p2,1).zpet) of p2)
+ ..subpath(rundy(p1,(tim5,if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1{z0-z0'-o*down}
+ ..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0');
+endchar;
+
+iff known chars.latin_ecedilla:
+bskchar "The letter e with cedilla";
+beginchar(chars.latin_ecedilla,9u#,x_height#,.65desc_depth#); uni "0x0229";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(curve,180);
+pos5(.5stem,0); pos6(.5stem,0); pos7(stem,0); pos8(.5stem,-110);
+lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1;
+p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+x5l=x6l; z5r=z2l; y6=-hair; y7=-.5d;
+rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d;
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up fi;
+tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
+tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim6=xpart(p1 intersectiontimes ((w,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+p2:=point tim3 of p0 -- point tim4 of p1;
+p3:=point tim7 of p1 -- point tim6 of p1;
+p4:=z6r..{down}z7r..{left}z8r..{right}z8l..{up}z7l..z6l--z5l;
+p5:=z5r{down}..subpath (rundy(p4,(0,curve)),infinity) of p4;
+tim8=xpart(p0 intersectiontimes (z6l--(x5l,y0)));
+filldraw subpath(0,rundy(p0,2).zpet) of p0..subpath(rundy(p5,0),rundy(p5,infinity).zpet) of p5
+ ..subpath(rundy(p0,(tim8,hair)),rundy(p0,(tim3,hair)).zpet) of p0
+ --(subpath(0,rundy(p2,1).zpet) of p2)
+ ..subpath(rundy(p1,(tim5,if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1{z0-z0'-o*down}
+ ..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0');
+endchar;
+
+iff known chars.latin_oe:
+bskchar "The ligature oe";
+beginchar(chars.latin_oe,13.5u#,x_height#,0); uni "0x0153";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(curve,180);
+pos5(curve,0); pos6(hair,90); pos7(curve,180); pos8(hair,270);
+lft x1l=5.5u; y1=y4=.5h; x2=x3=.5w+hair+2u; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-u-lft .5curve;
+lft x5l=u; x7r=x1r; y5=y7=.5h; .5[x6,x8]=.5[x5,x7];
+x6=x8; bot y6l=-o; top y8l=h+o; x8r:=x8r+.25u; x6r:=x6r-.25u;
+p0=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l; labels(4l);
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+o*up}z0 else: z0' fi if dpi<=300: +up fi;
+tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
+tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim6=xpart(p1 intersectiontimes ((w,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+p2=point tim3 of p0 -- point tim4 of p1;
+p3=point tim7 of p1 -- point tim6 of p1;
+p4=z7l{down}..z6l..{up}z5l..z8l..cycle;
+p5=z7r{down}..z6r..{up}z5r..z8r..cycle;
+(tim8,tim9)=p0 intersectiontimes p4;
+(tim10,tim11)=subpath(2,infinity) of p4 intersectiontimes p0;
+(tim12,tim13)=p5 intersectiontimes p0;
+(tim14,tim15)=subpath(2,infinity) of p5 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0..
+ subpath(rundy(p4,tim9),rundy(p4,2+tim10).zpet) of p4 ..
+ subpath(rundy(p0,tim11),rundy(p0,(tim3,hair)).zpet) of p0--
+ subpath(0,rundy(p2,1).zpet) of p2..
+ subpath(rundy(p1,(tim5, if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1
+ {z0-z0'-o*down}..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+infill subpath(rundy(p5,tim12),rundy(p5,2+tim14).zpet) of p5..
+ subpath(rundy(p0,tim15).zpet,rundy(p0,tim13)) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0');
+endchar;
+
+charscription(12.5u,x_height,0)(
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(curve,180);
+lft x1l=5.25u; y1=y4=.5h; x2=x3=.5w+hair+2.25u; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-u-lft .5curve;
+z5l=(x1l,h-like_curve); z6l=z5l+like_hair*down; z7=(u,stem+hair);
+pos6(hair,angle(z7-z6l)+90); pos8(curve,30); pos9(hair,120);
+lft x8l=u; y8r=y7-like_hair; x9r=.5[x1r,lft u]; y9l=o;
+pos10(hair,angle((x1,y7)-z9l)+90); z10l=(.5[x1,x1r],y7);
+pos11(stem,0); pos12(hair,90); pos13(stem,180);
+z11l=(x1l,h-curve); top y12r=h+o; x12=x9r;
+z13'=z13+(o,-.2stem); z13''=z13+.5(stem-currentbreadth)*dir135;
+y13''=.5[y11,y12l]; lft x13r=u+o;
+p0=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+.5o*up}z0 else: z0' fi if dpi<=300: +up fi;
+tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
+tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim6=xpart(p1 intersectiontimes ((w,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+p2=point tim3 of p0 -- point tim4 of p1;
+p3=point tim7 of p1 -- point tim6 of p1;
+p4=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l;
+p5=z1l---z11l..{left}z12l..{down}z13l..z13'..{up}z13r..z13''
+ ..{right}z12r...z11r---(x11r,y1);
+p6=z10r{dir(angle(z9l-z1))}..z9r..z8r..{z6r-z7-hair*up}z6r;
+(tim8,tim9)=p0 intersectiontimes p4;
+(tim10,tim11)=p4 intersectiontimes p5;
+(tim12,tim13)=subpath(2,infinity) of p5 intersectiontimes p0;
+(tim14,tim15)=p6 intersectiontimes p0;
+(tim16,tim17)=p6 intersectiontimes p5;
+if tim16<0: tim16:=infinity; fi
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0..
+ subpath(rundy(p4,tim9),rundy(p4,tim10).zpet) of p4..
+ subpath(rundy(p5,tim11),rundy(p5,2+tim12).zpet) of p5..
+ subpath(rundy(p0,tim13),rundy(p0,(tim3,hair)).zpet) of p0--
+ subpath(0,rundy(p2,1).zpet) of p2..
+ subpath(rundy(p1,(tim5, if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1
+ {z0-z0'-o*down}..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+infill subpath(rundy(p6,tim14),rundy(p6,tim16).zpet) of p6..(reverse subpath(0,rundy(p5,tim17).zpet) of p5)
+ ..subpath(3,rundy(p0,tim15)) of p0..cycle;
+penlabels(1,2,3,4,5,6,8,9,10,11,12,13); labels(0,0',7,13',13'');
+);
+
+iff known chars.latin_ae:
+bskchar "The ligature ae";
+beginchar(chars.latin_ae,12.5u#,x_height#,0); uni "0x00E6";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_aemacron:
+bskchar "The ligature ae with macron";
+beginchar(chars.latin_aemacron,12.5u#,.5[asc_height#,x_height#],0); uni "0x01E3";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+iff known chars.latin_aeacute:
+bskchar "The ligature ae with acute";
+beginchar(chars.latin_aeacute,12.5u#,asc_height#,0); uni "0x01FD";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+rt x101=x1;
+acute(100,101);
+endchar;
+
+iff known chars.latin_f:
+bskchar "The letter f";
+beginchar(chars.latin_f,6.5u#, asc_height#, 0); uni "0x0066";
+italcorr asc_height#*slant+1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend; fend:=stem;
+pos3(hair,-90); pos4(fend,180);
+lft x1l=2.5u; bot y1=0; top y2=h-like_curve;
+top y3l=h+o; x3=if monospace: .6[w,x1r] else: w-1.25u fi;
+.5[x2r,x4]=x3; y4''=y3r-like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut);
+if not bold_face: y2r:=y2r+hair; fi;
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90);
+y5=y5'=y6=y6'=bot x_height;
+lft x5=u; x6=if monospace: 2x1-x5 else: w-u fi; x5'=x1l; x6'=x1r;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..{up}z1f---obl(6'l,1r,6l)---z6l..z6r---obl(6'r,6r,2r)---
+ z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l---
+ obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle;
+penlabels(3,4,5,5',6,6'); labels(4',4'');
+endchar;
+
+iff known chars.latin_ff:
+bskchar "The ligature ff";
+beginchar(chars.latin_ff,11u#, asc_height#, 0); uni "0xFB00";
+italcorr asc_height#*slant+1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend, ijut, tim[]; fend:=stem;
+path p[];
+pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180);
+lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2=top y6=h-like_curve;
+top y3l=top y7l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair; lft x4r=w-2.2u-stem;
+y8''=y7r-like_hair; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+x7=if monospace: .6[w,x5r] else: w-1.25u fi; .5[x6r,x8]=x7;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut); lowercase_points(5,6,jut);
+if not bold_face: y2r:=y6r:=y2r+hair; fi;
+ijut=.5hair; x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut;
+z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right;
+pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90);
+pos11(hair,90); pos11'(hair,90);
+y9=y9'=y10=y10'=y11=y11'=bot x_height;
+lft x9=u; x11=if monospace: x5r+x9'-x9 else: w-u fi; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r;
+p0=z8l{up}..z8''..z7l..{down}z6l;
+p1=z4l{up}..z4''..z3l..{down}z2l;
+p2=z2r...{right}z3r..z4r..z4'..{up}z4l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)---
+ z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d..
+ {left}z5e..z5f---obl(11'l,5r,11l)---z11l..z11r---obl(11'r,11r,6r)---
+ z6r...{right}z7r..z8r..z8'..subpath(0,rundy(p0,tim0).zpet) of p0..
+ subpath(rundy(p1,tim1),infinity) of p1
+ --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle;
+infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
+ (reverse subpath(rundy(p0,tim3),infinity) of p0)..
+ (reverse subpath(0,rundy(p2,tim2).zpet) of p2)&cycle;
+penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8'');
+endchar;
+
+charscription(11u,asc_height,0)(
+numeric fend, tim; fend:=stem;
+path p;
+pos3(hair,-90); pos4(fend,180);
+lft x1l=2.5u; bot y1=0; top y2=h-like_curve;
+top y3l=h+o; .5[x2r,x4]=x3; top y4''=y3r-top like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut);
+if not bold_face: y2r:=y2r+hair; fi;
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90);
+bot y7=0; top y8=h; rt x7r=w-2u;
+lowercase_points(7,8,jut);
+y5=y5'=y6=y6'=bot x_height;
+lft x5=u; x6-x1r=x1l-x5; x5'=x1l; x6'=x1r;
+x4r=x7l;
+p:=z4l{up}..z4''..z3l..{down}z2l;
+tim=xpart(p intersectiontimes ((.75[x8a,x8l],y4r)--(.75[x8a,x8l],h)));
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..{up}z1f---obl(6'l,1r,6l)---z6l..z6r---obl(6'r,6r,2r)---
+ z2r...{right}z3r..z4r---z7a..z7b{left}..{right}z7c..z7+ser_boule*up
+ ..z7d{right}..{left}z7e..z7f---z8r{z8a-z8}..subpath(tim,infinity) of p
+ ---obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle;
+penlabels(3,4,5,5',6,6'); labels(4',4'');
+);
+
+iff known chars.latin_fl:
+bskchar "The ligature fl";
+beginchar(chars.latin_fl,11u#, asc_height#, 0); uni "0xFB02";
+italcorr asc_height#*slant-u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_flacute:
+bskchar "The ligature fl with acute";
+beginchar(chars.latin_flacute,11u#, asc_height#+.3x_height#, 0); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x8a,x8l]; x100r=w-u; y101=asc_height+.75u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_flcaron:
+bskchar "The ligature fl with caron";
+beginchar(chars.latin_flcaron,11u# if bold_face: +.5u#fi, asc_height#, 0); uni "non";
+italcorr asc_height#*slant+u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+y100''r=h; x100'''=w;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_ffl:
+bskchar "The ligature ffl";
+beginchar(chars.latin_ffl,15u#, asc_height#, 0); uni "0xFB04";
+italcorr asc_height#*slant-u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend, ijut, tim[]; fend:=stem;
+path p[];
+pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180);
+lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2=top y6=h-like_curve;
+top y3l=top y7l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair; lft x4r=w-6.2u-stem;
+y8''=y7r-top like_hair; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+.5[x6r,x8]=x7;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut); lowercase_points(5,6,jut);
+if not bold_face: y2r:=y6r:=y2r+hair; fi;
+ijut=.5hair;
+ x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut;
+z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right;
+bot y12=0; top y13=h; rt x12r=w-2u; x8r=x12l;
+lowercase_points(12,13,jut);
+pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90);
+pos11(hair,90); pos11'(hair,90);
+y9=y9'=y10=y10'=y11=y11'=bot x_height;
+lft x9=u; x11=x5r+x9'-x9; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r;
+p0=z8l{up}..z8''..z7l..{down}z6l;
+p1=z4l{up}..z4''..z3l..{down}z2l;
+p2=z2r...{right}z3r..z4r..z4'..{up}z4l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+tim4=xpart(p0 intersectiontimes ((.75[x12a,x12l],y8r)--(.75[x12a,x12l],h)));
+if x12c-x5d<u: x5d:=x5d-ijut; x5e:=x5e-ijut; fi;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)---
+ z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d..
+ {left}z5e..z5f---obl(11'l,5r,11l)---z11l..z11r---obl(11'r,11r,6r)---
+ z6r...{right}z7r..z8r---z12a..{left}z12b..{right}z12c..z12+ser_boule*up
+ ..z12d{right}..{left}z12e..z12f---z13r{z13a-z13}..
+ subpath(tim4,rundy(p0,(tim0,2hair)).zpet) of p0..
+ subpath(rundy(p1,(tim1,2hair)),infinity) of p1
+ --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle;
+infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l..
+ (reverse subpath(rundy(p0,tim3),infinity) of p0)..
+ (reverse subpath(0,rundy(p2,tim2).zpet) of p2)..cycle;
+penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8'');
+endchar;
+
+iff known chars.latin_fi:
+bskchar "The ligature fi";
+beginchar(chars.latin_fi,11u#, asc_height#, 0); uni "0xFB01";
+italcorr .5[asc_height#,x_height#]*slant-.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p;
+numeric fend, help; fend:=stem;
+pos3(hair,-90); pos4(fend,180);
+lft x1l=2.5u; bot y1=0; top y2=h-like_curve;
+top y3l=h+o; .5[x2r,x4]=x3; top y4''=y3r-like_hair;
+help:=y4''-.2fend-dot_size-x_height;
+if help<.85stem: y4'':=.5[y3r,x_height]+.5dot_size+tiny; fi
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut);
+if not bold_face: y2r:=y2r+hair; fi;
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90);
+bot y7=0; top y8=x_height; rt x7r=w-2u;
+lowercase_points(7,8,1.2jut);
+y5=y5'=y6=y6'=bot x_height-.5serif_drop;
+lft x5=u; x6-x1r=x1l-x5; x5'=x1l; x6'=x1r;
+x4r=x7l;
+pos9(dot_size+tiny,10);
+lft x9r=x4l; y9=y4l-.5dot_size;
+p:=z8r---obl(6'r,6r,2r)---z2r...{right}z3r..{z4'-z4r}z4r;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..{up}z1f---obl(6'l,1r,6l)---z8a---obl(8b,8a,7a)
+ ---z7a..z7b{left}..{right}z7c..z7+ser_boule*up..z7d{right}
+ ..{left}z7e..{up}z7f---z8r&subpath(0,rundy(p,infinity).zpet) of p
+ ..{down}z9l..z9r{up}..z4''..z3l..z2l---obl(5'r,2l,5r)
+ ---z5r..z5l---obl(5'l,5l,1l)---cycle;
+penlabels(3,4,5,5',6,6',9); labels(4',4'');
+endchar;
+
+iff known chars.latin_fj: %Non-standard, not included in ligtables
+bskchar "The ligature fj";
+beginchar(chars.latin_fj,11u#, asc_height#, desc_depth#); uni "non";
+italcorr .5[asc_height#,x_height#]*slant-.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p;
+numeric fend, help; fend:=stem;
+pos3(hair,-90); pos4(fend,180);
+lft x1l=2.5u; bot y1=0; top y2=h-like_curve;
+top y3l=h+o; .5[x2r,x4]=x3; top y4''=y3r-like_hair;
+help:=y4''-.2fend-dot_size-x_height;
+if help<.85stem: y4'':=.5[y3r,x_height]+.5dot_size+tiny; fi
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut);
+if not bold_face: y2r:=y2r+hair; fi;
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90);
+bot y7=-d+like_curve; top y8=x_height; rt x7r=w-2u;
+lowercase_points(7,8,1.2jut);
+y5=y5'=y6=y6'=bot x_height-.5serif_drop;
+lft x5=u; x6-x1r=x1l-x5; x5'=x1l; x6'=x1r; x4r=x7l;
+pos10(hair,-90); bot y10r=-d; x10=x7r-3u; top y11=y7; x11l=x7r-5u;
+pos9(dot_size+tiny,10);
+lft x9r=x4l; y9=y4l-.5dot_size;
+p:=z8r---obl(6'r,6r,2r)---z2r...{right}z3r..{z4'-z4r}z4r;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..{left}z1e
+ ..{up}z1f---obl(6'l,1r,6l)---z8a---obl(8b,8a,7a)---z7l ...{left}z10l
+ ..reverse smitko(11,stem)..{right}z10r..{up}z7r---z8r
+ &subpath(0,rundy(p,infinity).zpet) of p..{down}z9l..z9r{up}..z4''..z3l
+ ..z2l---obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle;
+penlabels(3,4,5,5',6,6',9,10,11); labels(4',4'');
+endchar;
+
+iff known chars.latin_ffi:
+bskchar "The ligature ffi";
+beginchar(chars.latin_ffi,15u#, asc_height#, 0); uni "0xFB03";
+italcorr .5[asc_height#,x_height#]*slant-.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend, ijut, help, tim[]; fend:=stem;
+path p[];
+pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180);
+lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2=top y6=h-like_curve;
+top y3l=top y7l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair; lft x4r=w-6.2u-stem;
+y8''=y7r-top like_hair;
+help:=y8''-.2fend-dot_size-x_height;
+if help<.85stem: y8'':=.5[y3r,x_height]+.5dot_size+tiny; fi
+z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+.5[x6r,x8]=x7;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,1.2jut); lowercase_points(5,6,jut);
+if not bold_face: y2r:=y6r:=y2r+hair; fi;
+ijut=.5hair;
+ x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut;
+z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right;
+bot y12=0; top y13=x_height; rt x12r=w-2u; x8r=x12l;
+lowercase_points(12,13,1.2jut);
+pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90);
+pos11(hair,90); pos11'(hair,90); pos14(dot_size+tiny,10);
+y9=y9'=y10=y10'=y11=y11'=bot x_height-.5serif_drop;
+lft x9=u; x11=x5r+x9'-x9; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r;
+lft x14r=x8l; y14=y8l-.5dot_size;
+p0=z8l{up}..z8''..z7l..{down}z6l;
+p1=z4l{up}..z4''..z3l..{down}z2l;
+p2=z2r...{right}z3r..z4r..z4'..{up}z4l;
+p3=z7r{right}..{z8'-z8r}z8r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+tim4=xpart(p0 intersectiontimes ((.75[x12a,x12l],y8r)--(.75[x12a,x12l],h)));
+if x12c-x5d<u: x5d:=x5d-ijut; x5e:=x5e-ijut; fi;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)---
+ z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d..
+ {left}z5e..z5f---obl(11'l,5r,11l)---z13a---obl(13b,13a,12a)
+ ---z12a..{left}z12b..{right}z12c..z12+ser_boule*up..z12d{right}..
+ {left}z12e..z12f---z13r---obl(11'r,11r,6r)---
+ z6r...subpath(0,rundy(p3,infinity).zpet) of p3..{down}z14l..z14r{up}..z8''
+ ..subpath(1,rundy(p0,(tim0,2hair)).zpet) of p0..
+ subpath(rundy(p1,(tim1,2hair)),infinity) of p1
+ --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle;
+infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
+ (reverse subpath(rundy(p0,tim3),infinity) of p0)..
+ (reverse subpath(0,rundy(p2,tim2).zpet) of p2)&cycle;
+penlabels(3,4,7,8,9,9',10,10',11,11',14); labels(4',4'',8',8'');
+endchar;
+
+charscription(11u,x_height,desc_depth)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=1.5u; rt x3l=w-2.5u; y1=y3=.5[y4l,y2l]; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=1/3bar_height+.25stem; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((0,y2l+tiny)--(w,y2l+tiny)));
+z5r=point tim1 of p0;
+tim2=xpart(p0 intersectiontimes ((x5r-hair+tiny,0)--(x5r-hair+tiny,h)));
+z5l=point tim2 of p0; z5=.5[z5l,z5r];
+lft z5'=(1.75u,0);
+pos6(stem,90); pos8(hair,270);
+y6l=top y7l+.5stem; y6=0; x6=x5+u; x6r:=x6r+.5hair; rt x7l=w-2.5u;
+x8=x2; bot y8r=-d;
+pos9(dot_size,180); lft x9r=u; top y9=-.45d;
+p1=subpath(0,.5tim2) of p0 .. z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l;
+z7r-z7l=.8stem*dir(angle(direction 3 of p1)+90); z7=.5[z7r,z7l];
+y9'=y7l if not bold_face:-.25dot_size fi; z9'=whatever[z9l,z5];
+pos10(hair,135); pos11(hair,135); z11-z10=tiny*dir45;
+z10=(.5[z2,z4]--(w-u,h)) intersectionpoint p0;
+pos12(stem,45); pos12'(stem,45); x12r=w-u; y12l=y11l; z12'=z12+.5tiny*dir135;
+p2=.5[z2,z4]---z11l..{dir-60}z12'l--z12l;
+p3=z12r---z12'r..z11r---z10r--z10;
+p4=z8r{right}..z7r..{left}z6r..{dir30}z5r;
+(tim3,tim4)=p0 intersectiontimes p2;
+(tim5,tim6)=p3 intersectiontimes p0;
+filldraw p1..{(w,h)-z9l}z9l..z9'{left}..{down}z9r..
+ subpath(0,rundy(p4,(infinity,if bold_face: 1.5f_obl else: oblu fi)).zpet) of p4
+ ..subpath(rundy(p0,tim1),rundy(p0,tim3).zpet) of p0..
+ subpath(rundy(p2,1),infinity) of p2{dir0}..
+ subpath(0,rundy(p3,(2,hair)).zpet) of p3..
+ subpath(rundy(p0,tim6),infinity) of p0-- cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9');
+);
+
+iff known chars.latin_g:
+bskchar "The letter g";
+beginchar(chars.latin_g,11u#,x_height#,desc_depth#); uni "0x0067";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_gacute:
+bskchar "The letter g with acute";
+beginchar(chars.latin_gacute,11u#,asc_height#,desc_depth#); uni "0x01F5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4-o;
+acute(100,101);
+endchar;
+
+iff known chars.latin_gcaron:
+bskchar "The letter g with caron";
+beginchar(chars.latin_gcaron,11u#,asc_height#,desc_depth#); uni "0x01E7";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_gcircumflex:
+bskchar "The letter g with circumflex";
+beginchar(chars.latin_gcircumflex,11u#,asc_height#-.1x_height#,desc_depth#); uni "0x011D";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_gcedilla:
+bskchar "The letter g with cedilla (treated as comma)";
+beginchar(chars.latin_gcedilla,11u#,x_height#+.75comma_depth#+o#,desc_depth#); uni "0x0123";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+lft x100=x4; bot y100''r=x_height+2o;
+ammoc(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_gdotabove:
+bskchar "The letter g with dot above";
+beginchar(chars.latin_gdotabove,11u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0121";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.latin_gbreve:
+bskchar "The letter g with breve";
+beginchar(chars.latin_gbreve,11u#,asc_height#,desc_depth#); uni "0x011F";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+charscription(11u,asc_height,0)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.5x_height;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+hair+tiny)*up;
+if y1'>y5: y1':=y5; fi;
+tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair)));
+filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---
+ lowercase_stem_draw(1,2)---cycle;
+penlabels(3,4,5,6); labels(1');
+);
+
+iff known chars.latin_h:
+bskchar "The letter h";
+beginchar(chars.latin_h,11u#, asc_height#, 0); uni "0x0068";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_hcaron:
+bskchar "The letter h with caron";
+beginchar(chars.latin_hcaron,11u#,asc_height#,0); uni "0x021F";
+italcorr asc_height#*slant-1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+lft x101=x5+hair; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_hcircumflex:
+bskchar "The letter h with circumflex";
+beginchar(chars.latin_hcircumflex,11u#,asc_height#,0); uni "0x0125";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+lft x101=x5+hair; x102-x100=4.5u;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_hstroke:
+bskchar "The letter h with stroke";
+beginchar(chars.latin_hstroke,11u#, asc_height#, 0); uni "0x0127";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2f_obl; oblu.light:=f_obl;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90);
+x8-x7=4u; y8=y8'=y7=y7'=.4[x_height,h]; lft x7=.5u;
+x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair);
+lft x1l=2u; bot y1=0; top y2=h;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.5x_height;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+hair+tiny)*up;
+if y1'>y5: y1':=y5; fi;
+tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair)));
+filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---obl(8'l,1',8l).light
+ ---z8ll..z8r---obl(8'r,8r,2).light---subpath(0,3) of lowercase_stem_draw(1,2)
+ ---obl(7'r,2l,7r).light---z7rr..z7l---obl(7'l,7l,1l).light
+ ---subpath(4,infinity) of lowercase_stem_draw(1,2)---cycle;
+penlabels(3,4,5,6,7,7',8,8'); labels(1',7rr,8ll);
+endchar;
+
+iff known chars.latin_hbar:
+bskchar "The letter h with bar (Dirac constant)";
+beginchar(chars.latin_hbar,11u#, asc_height#, 0); uni "0x210F";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[], theta; oblu:=2f_obl; oblu.light:=f_obl;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+x8-x7=4u; .5[y8,y7]=.35[x_height,h]; y8-y7=stem; lft x7=.5u;
+theta:=angle(z8-z7)+90;
+pos7(bar,theta); pos8(bar,theta);
+x7'l=x7'r=x1l; x8'l=x8'r=x1r; bskpoints(7,8,hair,hair);
+z7'l=whatever[z7l,z8l]; z8'l=whatever[z7l,z8l];
+z7'r=whatever[z7r,z8r]; z8'r=whatever[z7r,z8r];
+lft x1l=2u; bot y1=0; top y2=h;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.5x_height;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+hair+tiny)*up;
+if y1'>y5: y1':=y5; fi;
+tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair)));
+filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---obl(8'l,1',8l).light
+ ---z8ll..z8r---obl(8'r,8r,2).light---subpath(0,3) of lowercase_stem_draw(1,2)
+ ---obl(7'r,2l,7r).light---z7rr..z7l---obl(7'l,7l,1l).light
+ ---subpath(4,infinity) of lowercase_stem_draw(1,2)---cycle;
+penlabels(3,4,5,6,7,7',8,8'); labels(1',7rr,8ll);
+endchar;
+
+charscription(6u,x_height,0)(
+oblu:=2oblu;
+x1=.5w; bot y1=0; top y2=x_height;
+lowercase_stem(1,2,1.2jut).alt;
+);
+
+iff known chars.latin_dotless_i:
+bskchar "The dotless i";
+beginchar(chars.latin_dotless_i,6u#, x_height#, 0); uni "0x0131";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_i:
+bskchar "The letter i";
+beginchar(chars.latin_i,6u#, asc_height#-.5dot_size#, 0); uni "0x0069";
+italcorr (asc_height#-.5dot_size#)*slant-1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+x3=x1-ddot; top y3=h-.5dot_size;
+usechar;
+dot(3);
+endchar;
+
+iff known chars.latin_iacute:
+bskchar "The letter i with acute";
+beginchar(chars.latin_iacute,6u#, asc_height#, 0); uni "0x00ED";
+italcorr asc_height#*slant-u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+x101=x2l;
+usechar;
+acute(100,101);
+endchar;
+
+iff known chars.latin_igrave:
+bskchar "The letter i with grave";
+beginchar(chars.latin_igrave,6u#,asc_height#,0); uni "0x00EC";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2;
+grave(100,101);
+endchar;
+
+iff known chars.latin_idoublegrave:
+bskchar "The letter i with double grave";
+beginchar(chars.latin_idoublegrave,6u#,asc_height#,0); uni "0x0209";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x102-x100=2.5u; x103r=x2r;
+d_grave(100,101,102,103,whatever);
+endchar;
+
+iff known chars.latin_imacron:
+bskchar "The letter i with macron";
+beginchar(chars.latin_imacron,6u#,.5[asc_height#,x_height#],0); uni "0x012B";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=w-u; x100=.5u;
+macron(100,101);
+endchar;
+
+iff known chars.latin_icircumflex:
+bskchar "The letter i with circumflex";
+beginchar(chars.latin_icircumflex,6u#,asc_height#-.1x_height#,0); uni "0x00EE";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_iumlaut:
+bskchar "The letter i with umlaut";
+beginchar(chars.latin_iumlaut,6u#,asc_height#-dot_size#,0); uni "0x00EF";
+italcorr (asc_height#-dot_size#)*slant-.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x2l; x100-x101=1.8dot_size;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ibreve:
+bskchar "The letter i with breve";
+beginchar(chars.latin_ibreve,6u#,asc_height#,0); uni "0x012D";
+italcorr asc_height#*slant-u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2l-o;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_iinvbreve:
+bskchar "The letter i with inverted breve";
+beginchar(chars.latin_iinvbreve,6u#,asc_height#,0); uni "0x020B";
+italcorr x_height#*slant-.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_itilde:
+bskchar "The letter i with tilde";
+beginchar(chars.latin_itilde,6u#,asc_height#,0); uni "0x0129";
+italcorr asc_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=5.5u; rt x.tilde=x2l;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_icaron:
+bskchar "The letter i with caron";
+beginchar(chars.latin_icaron,6u#,asc_height#,0); uni "0x01D0";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x2l; x102-x100=4.5u;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_iogonek:
+bskchar "The letter i with ogonek";
+beginchar(chars.latin_iogonek,6u#,asc_height#-.5dot_size#,.85desc_depth#); uni "0x012F";
+italcorr (asc_height#-.5dot_size#)*slant-1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[]; numeric tim[];
+x1=.5w; bot y1=0; top y2=x_height;
+lowercase_points(1,2,1.2jut).alt;
+p0:=lowercase_stem_draw(1,2)--z2r;
+pos3(stem,0); pos4(curve,0); pos5(hair,45); pos6(hair,160);
+x3-x4l=1.5u; x3=x1; x5-x4l=3u; rt x6l-x5=1.5u;
+y3=0; y4=-.5d; bot y5l=-d; y6=-2/3d;
+p1:=z3l{z4l-z3r}..z4l...z5l..{z3-z4}z6l..z6r{z4-z3}..z5r..z4r..z3r;
+tim0=xpart(p0 intersectiontimes ((x3l,0)--(x3l,y1b)));
+tim1=xpart(p0 intersectiontimes ((x3r,0)--(x3r,y1b)));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p0,tim1),infinity) of p0..cycle;
+x0=x1-ddot; top y0=h-.5dot_size;
+dot(0);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.logo_i:
+bskchar "The letter i for logo";
+beginchar(chars.logo_i,6u#, asc_height#-.5dot_size#, comma_depth#); uni "non";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+x3=x1-ddot; top y3=h-.5dot_size;
+oblu:=2oblu;
+x1=.5w; bot y1=0; top y2=x_height;
+lowercase_points(1,2,1.2jut).alt;
+z5=z1b-z1c;
+y1c:=-d; y1a:=0;
+x4=x1; z4=whatever[z1c,z1d]+o*up;
+z6=z1c+ z5 rotated angle(z1d-z1c);
+filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---z1a..z6{z1c-z1d}..{z1d-z1c}z1c
+ ..z4..{z1d-z1c}z1d{right}..{left}z1e..{up}z1f---z2r&cycle;
+dot(3);
+labels(1a,1b,1c,4,6);
+endchar;
+
+charscription(5u,x_height,desc_depth)(
+oblu:=2oblu;
+pos3(hair,-90);
+bot y1=-d+like_curve; top y2=x_height; rt x1r=w-u;
+bot y3r=-d; x3=if monospace: .4w else: u fi; top y4=y1; if monospace: x4=u; else: x4l=-u; fi;
+lowercase_points(1,2,1.2jut).alt;
+filldraw z3r{right}...{up}z1r--z2r..{(x2a-x1r,-.25serif_drop)}z2a&
+ z2a---obl(2b,2a,1a)---z1l...{left}z3l..reverse smitko(4,stem)..cycle;
+penlabels(1,2,3,4); labels(4',4'',4''');
+);
+
+iff known chars.latin_dotless_j:
+bskchar "The dotless j";
+beginchar(chars.latin_dotless_j,5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_j:
+bskchar "The letter j";
+beginchar(chars.latin_j,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x006A";
+italcorr (asc_height#-.5dot_size#)*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+top y5=h-.5dot_size; x5=x1-ddot;
+usechar;
+dot(5);
+endchar;
+
+iff known chars.latin_jcircumflex:
+bskchar "The letter j with circumflex";
+beginchar(chars.latin_jcircumflex,5u#,asc_height#-.1x_height#,1.5like_cap_curve#); uni "0x0135";
+italcorr .5[asc_height#,x_height#]*slant+1.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2l;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_ij:
+bskchar "The letter ij";
+beginchar(chars.latin_ij,9.5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0133";
+italcorr (asc_height#-.5dot_size#)*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric shift; shift:=w-5u;
+usechar shifted (shift*right);
+oblu:=2f_obl;
+lft x5l=2u; bot y5=0; top y6=x_height;
+top y7=top y8=h-.5dot_size; x7=x5-ddot; x8=x1-ddot+shift;
+lowercase_stem(5,6,1.2jut).alt;
+dot(7); dot(8);
+endchar;
+
+charscription(10.5u,asc_height,0)(
+pos3(whatever,0); pos5(whatever,0);
+bot y1=0; top y2=h; lft x1l=2u;
+rt x3r=w-3u; top y3=x_height; rt x5r=w-2u; bot y5r=0;
+lowercase_points(1,2,jut);
+y4r=.45x_height; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90);
+z3l=z4l+whatever*(z3r-z4r);
+x6l=x4r+hair+.75u; z6l=whatever[z4r,z3r];
+z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90);
+z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r];
+x4'=x2r; z4'=whatever[z3l,z4l];
+serifs_tl(3l); serifs_tr(3r); serifs_br(5r); serifs_bl(5l);
+z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r));
+z6l'=z6l+(-u,0) rotated (angle(z3r-z4r));
+z6l''=z6l+(u,0) rotated (angle(z5l-z6l));
+z6r'=z6r+(u,0) rotated (angle(z5r-z6r));
+z6r''=(z6r+(u,0) rotated (angle(z3r-z4r)))
+ shifted ((hair-currentbreadth)*unitvector(z3r-z4r) rotated -90);
+z2'=z4'+(1.5u,0) rotated (angle(z3l-z4l)); z2''=z4'+(0,2u);
+filldraw z1a{down}..{left}z1b..z1c{right}..z1+ser_boule*up..{right}z1d..
+ z1e{left}..z1f---obl(4r,1f,4r'')..z4r''..z6l''---
+ obl(5l,6l'',5r){right}..z5r+.5ser_boule*up..{right}z5r.a..
+ {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r''
+ if not bold_face: ---diag_serif(3r,4r) fi ..{dir0}z3r.c..z3r.a---z3l.a..z3l.c{dir0}..
+ diag_serif(3l,4l)---z2'..{up}z2''--z2r
+ ..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)
+ ---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'');
+);
+
+iff known chars.latin_k:
+bskchar "The letter k";
+beginchar(chars.latin_k,10.5u#,asc_height#,0); uni "0x006B";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_kcaron:
+bskchar "The letter k with caron";
+beginchar(chars.latin_kcaron,10.5u#,asc_height#,0); uni "0x01E9";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1r+u; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_kcedilla:
+bskchar "The letter k with cedilla (treated as comma)";
+beginchar(chars.latin_kcedilla,10.5u#,asc_height#,.75comma_depth#); uni "0x0137";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+lft x100=.5w; top y100''r=-o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_kra:
+bskchar "The letter kra";
+beginchar(chars.latin_kra,11.5u#,x_height#,0); uni "0x0138";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+pos3(whatever,0); pos5(whatever,0);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+rt x3r=w-3u; top y3=h; rt x5r=w-2u; bot y5r=0;
+y4r=.45h; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90);
+z3l=z4l+whatever*(z3r-z4r);
+x6l=x4r+hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90);
+z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r];
+x4'=x2r; z4'=whatever[z3l,z4l];
+serif_bot(1); drop_serif(2,jut).alt;
+serif_bot(5);
+serifs_tl(3l); serifs_tr(3r);
+z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r));
+z6l'=z6l+(-u,0) rotated (angle(z3r-z4r));
+z6l''=z6l+(u,0) rotated (angle(z5l-z6l));
+z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r));
+x2'=x1r; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u);
+z5l.b=z5a; z5r.b=z5f;
+filldraw z1a{down}..{left}z1b..z1c---z1d..z1e{left}..z1f---z4r..z4r'' if x6l'>x4r'': ..z6l' fi
+ ..z6l''---diag_serif(5l,6l)..{left}z5b..z5c---z5d..{left}z5e..diag_serif(5r,6r)---z6r'
+ ..z6r''--- diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a.. z3l.c{dir0}..diag_serif(3l,4l)
+ ---obl(2',3l,2'')---z2''--z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'');
+endchar;
+
+charscription(6u,asc_height,0)(
+x1=.5w; bot y1=0; top y2=h;
+lowercase_stem(1,2,jut);
+);
+
+iff known chars.latin_l:
+bskchar "The letter l";
+beginchar(chars.latin_l,6u#, asc_height#, 0); uni "0x006C";
+italcorr asc_height#*slant-1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_lacute:
+bskchar "The letter l with acute";
+beginchar(chars.latin_lacute,6u#, asc_height#+.3x_height#, 0); uni "0x013A";
+italcorr asc_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x2a,x2l]; x100r=w-u; y101=asc_height+.75u;
+acute(100,101).capital;
+endchar;
+
+iff known chars.latin_lcaron:
+bskchar "The letter l with caron (treated like comma)";
+beginchar(chars.latin_lcaron,6u#, asc_height#, 0); uni "0x013E";
+italcorr asc_height#*slant+u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+y100''r=h; x100'''=w;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_ldot:
+bskchar "The letter l with middle dot";
+beginchar(chars.latin_l,6u#+dot_size#,asc_height#,0); uni "0x0140";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+top y100=x_height; x100+.5dot_size=w-u;
+dot(100);
+endchar;
+
+iff known chars.latin_lcedilla:
+bskchar "The letter l with cedilla (treated as comma)";
+beginchar(chars.latin_lcedilla,6u#,asc_height#,.75comma_depth#); uni "0x013C";
+italcorr asc_height#*slant-1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=.5w; top y100''r=-o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_ldotabove:
+bskchar "The letter l with dot above";
+beginchar(chars.latin_ldotabove,6u#,Acc_height#+o#,0); uni "non";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1;
+dotabove(100);
+endchar;
+
+iff known chars.latin_lslash:
+bskchar "The letter l with slash";
+beginchar(chars.latin_lslash,6u#,asc_height#,0); uni "0x0142";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric theta;
+x1=.5w; bot y1=0; top y2=h;
+lowercase_points(1,2,jut);
+x4-x3=4u; .5[x3,x4]=x1; y4-y3=stem; .5[y3,y4]=.8[bar_height,x_height];
+theta=angle(z4-z3)+90;
+pos3(bar,theta); pos4(bar,theta);
+x3'l=x3'r=x1l; x4'l=x4'r=x1r;
+z3'l=whatever[z3l,z4l]; z4'l=whatever[z3l,z4l];
+z3'r=whatever[z3r,z4r]; z4'r=whatever[z3r,z4r];
+bskpoints(3,4,bar,bar);
+filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---obl(3'r,2l,3r)
+ ---z3rr..z3l---obl(3'l,3l,1l)---z1a..z1b{left}..{right}z1c..z1+ser_boule*up
+ ..z1d{right}..{left}z1e..{up}z1f---obl(4'l,1r,4l)---z4ll..z4r
+ ---obl(4'r,4r,2r)---z2r..cycle;
+penlabels(1,2,3,3',4,4'); labels(3rr,4ll);
+endchar;
+
+iff known chars.latin_m:
+bskchar "The letter m";
+beginchar(chars.latin_m,16u#, x_height#, 0); uni "0x006D";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; boolean correct; correct:=true;
+oblu:=6oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+pos7(stem,0); pos8(stem,0); pos9(n_str_hair,90); pos10(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+x3=.5w; bot y3=bot y7=0; x4=x3; y4=y8=.75x_height; y5r=y9r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=y10=if monospace: .75 else: .6 fi\\ x_height; x10l=x3r;
+rt x7r=w-2u; x8=x7; x9=.5[x7l,x3r];
+{{ if monospace and (x3l-x1l-stem-tiny<2jut): correct:=false; save jut; numeric jut; jut:=.4(x3l-x1l-stem-.5tiny); fi
+serif_bot(3); serif_bot(7); lowercase_points(1,2,jut);}};
+p1:=z6l{up}..z5l..z4l---z3a if correct:.. else: -- fi z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e if correct:..{up} else: -- fi z3f---z10l..z9l..
+ z8l---z7a if correct:.. else: -- fi z7b{left}..z7c{right}..
+ z7+ser_boule*up..{right}z7d..{left}z7e
+ if correct:.. else: -- fi z7f---z8r..z9r..{down}z10r;
+p21:=subpath(6,infinity) of p2;
+p3:=z4r{up}..z5r..{down}z6r;
+p4:=z1f--z2r;
+tim3=xpart(p3 intersectiontimes p4);
+z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+z0=(x4r,y1');
+tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair)));
+tim2=xpart(p3 intersectiontimes (z0--(x5,y0)));
+filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21..
+ subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: oblu fi)).zpet) of p3..broken_stem_draw(1',1,2)---cycle;
+penlabels(3,4,5,6,7,8,9,10); labels(0,1');
+endchar;
+
+charscription(11.5u,x_height,0)(
+path p[]; numeric tim[]; oblu:=8oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.6x_height; y6l:=y6l-hair;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+filldraw p1..z3+ser_boule*up..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle;
+penlabels(3,4,5,6); labels(1');
+);
+
+iff known chars.latin_n:
+bskchar "The letter n";
+beginchar(chars.latin_n,11.5u#, x_height#, 0); uni "0x006E";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_ncaron:
+bskchar "The letter n with caron";
+beginchar(chars.latin_ncaron,11.5u#, asc_height#, 0); uni "0x0148";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x5;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_nacute:
+bskchar "The letter n with acute";
+beginchar(chars.latin_nacute,11.5u#,asc_height#,0); uni "0x0144";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x5,x2r];
+acute(100,101);
+endchar;
+
+iff known chars.latin_napostrophe:
+bskchar "The letter n with apostrophe";
+beginchar(chars.latin_napostrophe,11.5u#,asc_height#+o#,0); uni "0x0149";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+lft x100=.5u; top y100=h-.5dot_size;
+comma(100,dot_size,.9hair,.8comma_depth);
+endchar;
+
+iff known chars.latin_ngrave:
+bskchar "The letter n with grave";
+beginchar(chars.latin_ngrave,11.5u#,asc_height#,0); uni "0x01F9";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x5;
+grave(100,101);
+endchar;
+
+iff known chars.latin_ntilde:
+bskchar "The letter n with tilde";
+beginchar(chars.latin_ntilde,11.5u#,asc_height#,0); uni "0x00F1";
+italcorr asc_height#*slant-1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; x.tilde=.5[x1r,x4l];
+tilde(100,101);
+endchar;
+
+iff known chars.latin_ncedilla:
+bskchar "The letter n with cedilla (treated as comma)";
+beginchar(chars.latin_ncedilla,11.5u#,x_height#,.75comma_depth#); uni "0x0146";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=.5w; top y100''r=-o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_eng:
+bskchar "The letter eng";
+beginchar(chars.latin_eng,10.5u#, x_height#, desc_depth#); uni "0x014B";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=8oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+pos7(hair,-90);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+rt x3r=w-u; y3=-.5d;
+x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.6x_height; y6l:=y6l-hair;
+bot y7r=-d; x3-x7=3u; top y8=y7+like_curve; x7-x8l=2u;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3l...{left}z7l..reverse smitko(8,stem)..{right}z7r..{up}z3r;
+p2:=z3r---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+filldraw p1..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle;
+penlabels(3,4,5,6,7,8); labels(1');
+endchar;
+
+charscription(10u,x_height,0)(
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+);
+
+iff known chars.latin_o:
+bskchar "The letter o";
+beginchar(chars.latin_o,10u#,x_height#,0); uni "0x006F";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_oacute:
+bskchar "The letter o with acute";
+beginchar(chars.latin_oacute,10u#,asc_height#,0); uni "0x00F3";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4l;
+acute(100,101);
+endchar;
+
+iff known chars.latin_oumlaut:
+bskchar "The letter o with umlaut";
+beginchar(chars.latin_oumlaut,10u#,asc_height#-dot_size#,0); uni "0x00F6";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x4l; x101-x100=2/3(x3-x1);
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ocircumflex:
+bskchar "The letter o with circumflex";
+beginchar(chars.latin_ocircumflex,10u#,asc_height#-.1x_height#,0); uni "0x00F4";
+italcorr .5[x_height#,asc_height#]*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_ograve:
+bskchar "The letter o with grave";
+beginchar(chars.latin_ograve,10u#,asc_height#,0); uni "0x00F2";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4+u;
+grave(100,101);
+endchar;
+
+iff known chars.latin_odoublegrave:
+bskchar "The letter o with double grave";
+beginchar(chars.latin_odoublegrave,10u#,asc_height#,0); uni "0x020D";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u; x102=x4;
+d_grave(100,101,102,103,whatever);
+endchar;
+
+iff known chars.latin_ocaron:
+bskchar "The letter o with caron";
+beginchar(chars.latin_ocaron,10u#,asc_height#,0); uni "0x01D2";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_otilde:
+bskchar "The letter o with tilde";
+beginchar(chars.latin_otilde,10u#,asc_height#,0); uni "0x00F5";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=6u;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_omacron:
+bskchar "The letter o with macron";
+beginchar(chars.latin_omacron,10u#,.5[asc_height#,x_height#],0); uni "0x014D";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+iff known chars.latin_odotabove:
+bskchar "The letter o with dot above";
+beginchar(chars.latin_odotabove,10u#,asc_height#-.5dot_size#,0); uni "0x022F";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4;
+dotabove(100);
+endchar;
+
+iff known chars.latin_ohumlaut:
+bskchar "The letter o with Hungarian umlaut";
+beginchar(chars.latin_ohumlaut,10u#,asc_height#,0); uni "0x0151";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101-x100=3u; .5[x100,x101]=x4+1.75u;
+h_umlaut(100,101,102,103,2u);
+endchar;
+
+iff known chars.latin_obreve:
+bskchar "The letter o with breve";
+beginchar(chars.latin_obreve,10u#,asc_height#+o#,0); uni "0x014F";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_oinvbreve:
+bskchar "The letter o with inverted breve";
+beginchar(chars.latin_oinvbreve,10u#,asc_height#+o#,0); uni "0x020F";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4r; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_o_masculine:
+bskchar "Masculine ordinal indicator (superscript o)";
+beginchar(chars.latin_o_masculine,6u#,asc_height#-.5x_height#,0); uni "0x00BA";
+italcorr (asc_height#-.75x_height#)*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(.85)(curve,hair,vair);
+usechar shifted (-x1l,-y4l) scaled .5 shifted (u+(HH-.5x_height)*slant,HH);
+endchar;
+
+charscription(10u,x_height,.85desc_depth)(
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u;
+bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d;
+p0=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r;
+filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0
+ ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p1,(1,stem)),infinity) of p0..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8);
+);
+
+iff known chars.latin_oogonek:
+bskchar "The letter o with ogonek";
+beginchar(chars.latin_oogonek,10u#,x_height#,.85desc_depth#); uni "0x01EB";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_oogonekmacron:
+bskchar "The letter o with ogonek and macron";
+beginchar(chars.latin_oogonekmacron,10u#,.5[asc_height#,x_height#],.85desc_depth#); uni "0x01ED";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+macron(100,101);
+endchar;
+
+charscription(10u,x_height,0)(
+numeric tim[]; path p[];
+oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+bskpoints(5,6,hair,hair);
+(tim1,tim2)=p0 intersectiontimes (z5l--z6l);
+(tim3,tim4)=p0 intersectiontimes (z6r--z5r);
+(tim5,tim6)=p0 intersectiontimes (z0r--z5r);
+(tim7,tim8)=p0 intersectiontimes (z5l--z0l);
+(tim11,tim12)=p1 intersectiontimes (z0r--z6r);
+(tim13,tim14)=p1 intersectiontimes (z0r--z5r);
+(tim15,tim16)=p1 intersectiontimes (z0l--z6l);
+(tim17,tim18)=p1 intersectiontimes (z5l--z0l);
+filldraw subpath (0,rundy(p0,tim1).zpet) of p0..subpath(rundy((z6l--z5l),tim2),infinity) of (z5l---z6ll)..
+ subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r)..
+ subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0..
+ subpath(rundy(z0r--z5r,tim6),infinity) of (z0r---z5rr)..
+ subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l) ..
+ subpath(rundy(p0,tim7),infinity) of p0--cycle;
+infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r)..
+ subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1..
+ subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle;
+infill subpath (0, rundy(p1,tim17).zpet) of p1..
+ subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l)..
+ subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l)..
+ subpath(rundy(p1,tim15),infinity) of p1--cycle;
+penlabels(0,1,2,3,4,5,6);
+);
+
+iff known chars.latin_oslash:
+bskchar "The letter o slash";
+beginchar(chars.latin_oslash,10u#,x_height#,0); uni "0x00F8";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_oslashacute:
+bskchar "The letter o slash with acute";
+beginchar(chars.latin_oslashacute,10u#,asc_height#,0); uni "0x01FF";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x4l;
+acute(100,101);
+endchar;
+
+iff known chars.latin_p:
+bskchar "The letter p";
+beginchar(chars.latin_p,11u#,x_height#,desc_depth#); uni "0x0070";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=-o; top y4l=h+o;
+lft x5l=2u; bot y5=-d; top y6r=h+o;
+lowercase_points(5,6,jut);
+p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5r---lowercase_stem_draw(5,6);
+p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right);
+tim1=xpart(p0 intersectiontimes (z0--(x2,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+z7=bsktouch(subpath(3,infinity) of p0,left,p2,right);
+tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7)));
+tim4=xpart(p2 intersectiontimes (z7--(0,y7)));
+filldraw subpath (rundy(p0,tim1), rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p2,tim4),infinity) of p2
+ ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle;
+infill p3..cycle;
+penlabels(1,1',2,3,4); labels(7);
+endchar;
+
+iff known chars.latin_thorn:
+bskchar "The letter thorn";
+beginchar(chars.latin_thorn,11u#,asc_height#,desc_depth#); uni "0x00FE";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+lft x5l=2u; bot y5=-d; top y6r=h;
+lowercase_points(5,6,jut);
+p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5r---lowercase_stem_draw(5,6);
+p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right);
+tim1=xpart(p0 intersectiontimes (z0--(x2,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+z7=bsktouch(subpath(3,infinity) of p0,left,p2,right);
+tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7)));
+tim4=xpart(p2 intersectiontimes (z7--(0,y7)));
+filldraw subpath (rundy(p0,tim1), rundy(p0,(tim3,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,tim4),infinity) of p2
+ ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle;
+infill p3..cycle;
+penlabels(1,1',2,3,4); labels(0,7);
+endchar;
+
+iff known chars.latin_q:
+bskchar "The letter q";
+beginchar(chars.latin_q,11u#,x_height#,desc_depth#); uni "0x0071";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos1(curve,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270);
+lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=-o; top y4l=h+o;
+rt x5r=w-2u; bot y5=-d; top y6r=h;
+lowercase_points(5,6,jut);
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=reverse lowercase_stem_draw(5,6);
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up; if y7>y6r-.8hair: y7:=y6r-.8hair; fi
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+bot rt z9=(w-u,x_height+o); z9'=z6r+stem*down;
+tim4=xpart(p0 intersectiontimes ((.5w,y7)--(w,y7)));
+filldraw subpath (tim2, rundy(p0,tim4).zpet) of p0..bot z6---z9--z9+down{z7-z9}..
+ {down}z9'---subpath (0,tim3) of p3..cycle;
+infill p4..cycle;
+penlabels(1,3',2,3,4); labels(7,9,9');
+endchar;
+
+charscription(8.5u,x_height,0)(
+path p[]; numeric tim[];
+pos3(like_curve,0); pos5(hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+rt x3r=w-u; y3r=y5l-.75like_stem;
+y5r=x_height; x5=.5w+.5like_stem;
+x6l=x1r; y6=.6x_height;
+z4=(x3l,x_height+o);
+lowercase_points(1,2,jut);
+p2:=z3r{up}..{dir180}z4..{down}z6r;
+p1:=z6l{up}..{dir10}z5l..z5l+(hair,-o)...z3l..z3+o*down..z3r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up;
+if y1'>y5r: y1':=y5r-.5hair; fi;
+tim3-1=xpart(subpath (1,2) of p2 intersectiontimes ((0,y1')--(w,y1')));
+filldraw p1..subpath (0,tim3) of p2..broken_stem_draw(1',1,2)---cycle;
+penlabels(3,5,6); labels(1',4,7);
+);
+
+iff known chars.latin_r:
+bskchar "The letter r";
+beginchar(chars.latin_r,8.5u#, x_height#, 0); uni "0x0072";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_racute:
+bskchar "The letter r with acute";
+beginchar(chars.latin_racute,8.5u#, asc_height#, 0); uni "0x0155";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x2r,x5];
+acute(100,101);
+endchar;
+
+iff known chars.latin_rcaron:
+bskchar "The letter r with caron";
+beginchar(chars.latin_rcaron,8.5u#, asc_height#, 0); uni "0x0159";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x2r,x5];
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_rdoublegrave:
+bskchar "The letter r with double grave";
+beginchar(chars.latin_rdoublegrave,8.5u#,asc_height#,0); uni "0x0211";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,.5[x5r,x2]);
+endchar;
+
+iff known chars.latin_rcedilla:
+bskchar "The letter r with cedilla (treated as comma)";
+beginchar(chars.latin_rcedilla,8.5u#,x_height#,.75comma_depth#); uni "0x0157";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x100=x1; top y100''r=-o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_rinvbreve:
+bskchar "The letter r with inverted breve";
+beginchar(chars.latin_rinvbreve,8.5u#,asc_height#,0); uni "0x0213";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+x101=.45[x4,x2r]; x102-x100=4.5u;
+tieacc(100,101,102);
+endchar;
+
+charscription(7.7u,x_height,0)(
+numeric exc; exc=(w-u)/h; oblu:=1.5oblu;
+path p[]; numeric tim[];
+pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90);
+pos5(stem,180); pos6(stem,180);
+y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o;
+y3=.5[y2l,y4r]+.5hair;
+pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-x5r; y1=y5-.5hair; y1'=h+o;
+pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h)));
+tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h)));
+filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l
+ ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)), infinity) of p1..cycle;
+penlabels(0,1,1',2,3,4,5,6,7,7');
+);
+
+iff known chars.latin_s:
+bskchar "The letter s";
+beginchar(chars.latin_s,7.7u#, x_height#, 0); uni "0x0073";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_scaron:
+bskchar "The letter s with caron";
+beginchar(chars.latin_scaron,7.7u#, asc_height#, 0); uni "0x0161";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2; x100r=u;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_scircumflex:
+bskchar "The letter s with circumflex";
+beginchar(chars.latin_scircumflex,7.7u#, asc_height#-.1x_height#, 0); uni "0x015D";
+italcorr .5[asc_height#,x_height#]*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2+o; x102-x100=5u;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_sacute:
+bskchar "The letter s with acute";
+beginchar(chars.latin_sacute,7.7u#, asc_height#, 0); uni "0x015B";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=x2-u;
+acute(100,101);
+endchar;
+
+iff known chars.latin_scommabelow:
+bskchar "The letter s with comma below";
+beginchar(chars.latin_scommabelow,7.7u#,x_height#,.75comma_depth#); uni "0x0219";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x4; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_scedilla:
+bskchar "The letter s with cedilla";
+beginchar(chars.latin_scedilla,7.7u#, x_height#,.65desc_depth#); uni "0x015F";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h; oblu:=1.5hair;
+path p[]; numeric tim[];
+pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90);
+pos5(stem,180); pos6(stem,180);
+pos8(.5stem,0); pos9(.5stem,0); pos10(.8stem,0); pos11(.5stem,-110);
+y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o;
+y3=.5[y2l,y4r]+.5hair;
+pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-x5r; y1=y5-.5hair; y1'=h+o;
+pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o;
+x8=x9; z8l=z4l; y9=-hair; y10=-.5d;
+rt x10r-lft x11r=4u; x8r-lft x11r=2u; y11r=-d;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+p2:=z9r..{down}z10r..{left}z11r..{right}z11l..{up}z10l..z9l--z8l;
+p3:=reverse(z8r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2);
+tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h)));
+tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h)));
+if tim2>1: tim2:=1; fi;
+tim3=xpart(p1 intersectiontimes (z9l--(x8l,y6)));
+filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l
+ ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)),rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p3,(0,hair)),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p1,tim3),infinity) of p1
+ ..cycle;
+penlabels(0,1,1',2,3,4,5,6,7,7',8,9,10,11);
+endchar;
+
+iff known chars.latin_eszet:
+bskchar "The german eszet";
+beginchar(chars.latin_eszet,11.5u#, asc_height#, 0); uni "0x00DF";
+italcorr .5[asc_height#,x_height#]*slant-1.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric tim;
+path p[];
+pos3(hair,-90); pos4(stem,180); pos4'(stem,180);
+pos6(stem,180); pos7(.9stem,180); pos8(hair,90);
+lft x1l=2.5u; bot y1=0; top y2=.4[x_height,h];
+top y3l=h+o; x3=.5w+.5u; .5[x2r,x4]=x3; y4=y2+hair;
+lowercase_points(1,2,jut); if not bold_face: y2r:=y2r+hair; fi; x1d:=x1d-hair;
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90);
+y5=y5'=bot x_height;
+lft x5=u; x5'=x1l; x6r=x2r+stem+u; rt x7l=w-u; y7=.25x_height; y6=.5[x_height,y9];
+bot y8l=-o; x8=x9=.5[x6,x7]; y9=.5[x_height,y8l]+.5hair; y7r:=y7-.225stem;
+pos9(curve,angle((x7r-x6r,x_height))+180);
+pos10(hair,0); pos10'(hair,0); rt x10r=x6r; x10'r=x10r+o; y10=.5[y8r,y9]+.5hair; y10'=-o;
+p0:=z10l{dir-80}..{right}z8l;
+tim=xpart(p0 intersectiontimes (z10'r--z9r));
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..{left}z1e..
+ {up}z1f---z2r...{right}z3r..z4r{down}..z6r..z9r..{down}z7r..{left}z8r..
+ {up}z10r..z10l---z10'l..z10'r..subpath (rundy(p0,tim),1) of p0..z7l{up}..
+ z9l..z6l..z4l{up}..z3l..z2l---obl(5'r,2l,5r)---z5r..z5l---
+ obl(5'l,5l,1l)---cycle;
+penlabels(3,4,5,5',6,7,8,9,10,10');
+endchar;
+
+iff known chars.latin_long_s:
+bskchar "The letter long s";
+beginchar(chars.latin_long_s,6.5u#, asc_height#, 0); uni "0x017F";
+italcorr asc_height#*slant+1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend; fend:=stem;
+pos3(hair,-90); pos4(fend,180);
+lft x1l=2.5u; bot y1=0; top y2=h-like_curve;
+top y3l=h+o; x3=if monospace: .6[w,x1r] else: w-1.25u fi;
+.5[x2r,x4]=x3; y4''=y3r-like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut);
+if not bold_face: y2r:=y2r+hair; fi;
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90);
+y5=y5'=bot x_height;
+lft x5=u; x5'=x1l;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..{up}z1f---z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l---
+ obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle;
+penlabels(3,4,5,5'); labels(4',4'');
+endchar;
+
+charscription(7.5u,.4[asc_height,x_height], 0)(
+pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180);
+x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u;
+y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth);
+top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o;
+pos5(hair,90); pos6(hair,90);
+y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down;
+filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}..{left}z3l
+ ..z2l---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100)..
+ z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle;
+penlabels(0,1,1',2,3,4,5,6); labels(1''r);
+);
+
+iff known chars.latin_t:
+bskchar "The letter t";
+beginchar(chars.latin_t,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0074";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_tcommabelow:
+bskchar "The letter t with comma below";
+beginchar(chars.latin_tcommabelow,7.5u#,.4[asc_height#,x_height#],.75comma_depth#); uni "0x021B";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=x3-o; top y100''r=-2o;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_tcaron:
+bskchar "The letter t with caron (treated like comma)";
+beginchar(chars.latin_tcaron,7.5u#, asc_height#, 0); uni "0x0165";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+rt x100'''=w-u; top y100''r=h;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_tcedilla:
+bskchar "The letter t with cedilla";
+beginchar(chars.latin_tcedilla,7.5u#,.4[asc_height#,x_height#],.65desc_depth#); uni "0x0163";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[];
+pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180);
+pos7(.5stem,0); pos8(.5stem,0); pos9(.8stem,0); pos10(.5stem,-110);
+x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u;
+y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth);
+top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o;
+pos5(hair,90); pos6(hair,90);
+y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down;
+x7l=x8l; z7r=z3r; y8=-hair; y9=-.5d;
+rt x9r-lft x10r=4u; x7r-lft x10r=2u; y10r=-d;
+p1:=z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..z2l;
+p2:=z8r..{down}z9r..{left}z10r..{right}z10l..{up}z9l..z8l--z7l;
+p3:=z7r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2;
+tim1=xpart(p1 intersectiontimes (z8l--(x7l,y2)));
+filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--subpath(0,rundy(p1,1).zpet) of p1..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3..subpath(rundy(p1,tim1),infinity) of p1---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100)..z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle;
+penlabels(0,1,1',2,3,4,5,6,7,8,9,10); labels(1''r);
+endchar;
+
+iff known chars.latin_tstroke:
+bskchar "The letter t with stroke";
+beginchar(chars.latin_tstroke,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0167";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180);
+pos5(hair,90); pos6(hair,90);
+pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90);
+x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u;
+y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth);
+top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o;
+y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down;
+x8-x7=4u if bold_face: +.5u fi; y8=y8'=y7=y7'=bar_height; .5[x7,x8]=x1+o;
+x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair);
+filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}
+ ..{left}z3l..z2l---obl(7'l,2l,7l)---z7l..z7rr---obl(7'r,7rr,1l)
+ ---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100)
+ ..z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)
+ ---obl(8'r,1r,8r)---z8r..z8ll---obl(8'l,8l,2r)---cycle;
+penlabels(0,1,1',2,3,4,5,6,7,7',8,8'); labels(1''r,7rr,8ll);
+endchar;
+
+charscription(11u,x_height,0)(
+path p[]; numeric tim[];
+pos1(stem,0); pos2(stem,0); pos4(stem,0);
+pos5(n_str_hair,90); pos6(hair,90);
+lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4;
+bot y3=0; top y2= top y4=h; y4=y4';
+y1=.25x_height;
+serifs_tl(2l); serifs_tl(4l);
+lowercase_points(3,4',jut);
+y5l=0; x5=.5[x3l,x1r];
+x6l=x3l; y6=.4x_height;
+oblu:=.5f_obl;
+p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right
+ ..z2l.b---z1l..z5l..{up}z6l;
+p2:=z6l---(reverse lowercase_lower_u_serif(3,.5hair))---obl(4r,3f,4l)
+ ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b;
+tim0=y3a-like_hair;
+tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0)));
+tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0)));
+filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle;
+penlabels(1,2,4,5,6,7);
+);
+
+iff known chars.latin_u:
+bskchar "The letter u";
+beginchar(chars.latin_u,11u#, x_height#, 0); uni "0x0075";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_uacute:
+bskchar "The letter u with acute";
+beginchar(chars.latin_uacute,11u#, asc_height#, 0); uni "0x00FA";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x2r,x4'a];
+acute(100,101);
+endchar;
+
+iff known chars.latin_uring:
+bskchar "The letter u with ring";
+beginchar(chars.latin_uring,11u#, asc_height#, 0); uni "0x016F";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=.5[x2r,x4'a]; lft x101=x2r;
+ring(100,101);
+endchar;
+
+iff known chars.latin_uumlaut:
+bskchar "The letter u with umlaut";
+beginchar(chars.latin_uumlaut,11u#, asc_height#-dot_size#, 0); uni "0x00FC";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x2; x101=x4l;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ugrave:
+bskchar "The letter u with grave";
+beginchar(chars.latin_ugrave,11u#,asc_height#,0); uni "0x00F9";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x5;
+grave(100,101);
+endchar;
+
+iff known chars.latin_udoublegrave:
+bskchar "The letter u with double grave";
+beginchar(chars.latin_udoublegrave,11u#,asc_height#,0); uni "0x0215";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x102-x100=3u;
+d_grave(100,101,102,103,x5-o);
+endchar;
+
+iff known chars.latin_umacron:
+bskchar "The letter u with macron";
+beginchar(chars.latin_umacron,11u#,.5[asc_height#,x_height#],0); uni "0x016B";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1r; x101=x3l;
+macron(100,101);
+endchar;
+
+iff known chars.latin_ucaron:
+bskchar "The letter u with caron";
+beginchar(chars.latin_ucaron,11u#,asc_height#,0); uni "0x01D4";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x5;
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_ucircumflex:
+bskchar "The letter u with circumflex";
+beginchar(chars.latin_ucircumflex,11u#,asc_height#-.1x_height#,0); uni "0x00FB";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x5;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_ubreve:
+bskchar "The letter u with breve";
+beginchar(chars.latin_ubreve,11u#,asc_height#,0); uni "0x016D";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x5; x102-x100=5u;
+breve(100,101,102);
+endchar;
+
+iff known chars.latin_uinvbreve:
+bskchar "The letter u with inverted breve";
+beginchar(chars.latin_uinvbreve,11u#,asc_height#,0); uni "0x0217";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x5; x102-x100=5u;
+tieacc(100,101,102);
+endchar;
+
+iff known chars.latin_uhumlaut:
+bskchar "The letter u with Hungarian umlaut";
+beginchar(chars.latin_uhumlaut,11.3u#,asc_height#,0); uni "0x0171";
+italcorr asc_height#*slant-1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=3u; .5[x100,x101]=x5+1.5u;
+h_umlaut(100,101,102,103,2u);
+endchar;
+
+iff known chars.latin_utilde:
+bskchar "The letter u with tilde";
+beginchar(chars.latin_utilde,11u#,asc_height#,0); uni "0x0169";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101-x100=6u; x.tilde=x5-o;
+tilde(100,101);
+endchar;
+
+iff known chars.latin_uogonek:
+bskchar "The letter u with ogonek";
+beginchar(chars.latin_uogonek,11u#,x_height#,.85desc_depth#); uni "0x0173";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(stem,0); pos2(stem,0); pos4(stem,0);
+pos5(n_str_hair,90); pos6(hair,90);
+lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4;
+bot y3=0; top y2= top y4=h; y4=y4';
+y1=.25x_height;
+serifs_tl(2l); serifs_tl(4l);
+lowercase_points(3,4',jut);
+y5l=0; x5=.5[x3l,x1r];
+x6l=x3l; y6=.4x_height;
+pos8(stem,0); pos9(curve,0); pos10(hair,45); pos11(hair,160);
+x8-x9l=1.5u; x8l=x3l; x10-x9l=3u; rt x11l-x10=1.5u;
+bot y8=0; y9=-.5d; bot y10l=-d; y11=-2/3d;
+oblu:=.5f_obl;
+p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right
+ ..z2l.b---z1l..z5l..{up}z6l;
+p2:=z6l---reverse (z3f{down}..{right}z3e..{left}z3d..z8r..z9r..z10r
+ ..{z8-z9}z11r..z11l{z9-z8}..z10l..z9l..{z8r-z9l}z8l---z3a)
+ ---obl(4r,3f,4l) ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b;
+tim0=y3a-like_hair;
+tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0)));
+tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0)));
+filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle;
+penlabels(1,2,4,5,6,7,8,9,10,11);
+endchar;
+
+iff known chars.latin_v:
+bskchar "The letter v";
+beginchar(chars.latin_v,11u#,x_height#,0); uni "0x0076";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.5w; bot y3l=-apex_o;
+left_stem=stem;
+right_stem=hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(.65hair,90); pos5(.65hair,90);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[hair,stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+serifs_tl(1l); serifs_tr(1r);
+serifs_tr(2r); serifs_tl(2l);
+filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')
+ ..z1r.c{right}..z1r.a{left}..z1+serif_bend..{left}cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+endchar;
+
+charscription(14.5u,x_height,0)(
+numeric alpha[], right_stem, left_stem;
+oblu:=2oblu;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3=.5w if monospace: +.5(stem-hair) fi;
+top y3=h if monospace and (x2r-x1l<4stem): -1/3(x2r-x1l) else: +o fi;
+.5[x4,x5]=x3; x5-x4=.35w;
+bot y4=bot y5=-apex_o;
+left_stem=stem;
+right_stem=hair;
+alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l);
+alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5);
+alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3);
+alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4);
+pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0);
+serifs_tl(1l); serifs_tr(1r);
+serifs_tl(2l); serifs_tr(2r);
+bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5);
+y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny);
+z0=whatever[z4,z4']=whatever[z5,z5'];
+z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right];
+z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---z4---obl(0,4,5)---z5
+ ---diag_serif(2r,5)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r)
+ ---diag_serif(1r,1'')..z1r.c{right}..z1r.a{left}..
+ z1+serif_bend..{left}cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+);
+
+iff known chars.latin_w:
+bskchar "The letter w";
+beginchar(chars.latin_w,14.5u#,x_height#,0); uni "0x0077";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_wcircumflex:
+bskchar "The letter w with circumflex";
+beginchar(chars.latin_wcircumflex,14.5u#,asc_height#-.1x_height#,0); uni "0x0175";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=x4'+o;
+circumflex(100,101,102);
+endchar;
+
+iff known chars.latin_wgrave:
+bskchar "The letter w with grave";
+beginchar(chars.latin_wgrave,14.5u#,asc_height#,0); uni "0x1E81";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x4'-u;
+grave(100,101);
+endchar;
+
+iff known chars.latin_wacute:
+bskchar "The letter w with acute";
+beginchar(chars.latin_wacute,14.5u#,asc_height#,0); uni "0x1E83";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+.5[x100,x101]=x4';
+acute(100,101);
+endchar;
+
+iff known chars.latin_wumlaut:
+bskchar "The letter w with umlaut";
+beginchar(chars.latin_wumlaut,14.5u#,asc_height#-dot_size#,0); uni "0x1E85";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1''; x101=x2'';
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_x:
+bskchar "The letter x";
+beginchar(chars.latin_x,11.5u#,x_height#,0); uni "0x0078";
+italcorr x_height#*slant-.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric alpha[];
+oblu:=1.5oblu;
+lft x1l=2.25u; top y1l=h; rt x2r=w-2u; bot y2r=0;
+x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0;
+alpha1=diag_ratio(2,stem,y1l-y2r,x1l-x2r);
+alpha2=diag_ratio(1,hair,y3r-y4l,x3r-x4l);
+pos1(alpha1*stem,0); pos2(alpha1*stem,0);
+pos3(alpha2*hair,0); pos4(alpha2*hair,0);
+serifs_tl(1l); serifs_tr(1r); serifs_bl(2l); serifs_br(2r);
+serifs_tl(3l); serifs_tr(3r); serifs_bl(4l); serifs_br(4r);
+z1'=whatever[z1l,z2l]=whatever[z3l,z4l];
+z2'=whatever[z1r,z2r]=whatever[z3r,z4r];
+z3'=whatever[z1r,z2r]=whatever[z3l,z4l];
+z4'=whatever[z1l,z2l]=whatever[z3r,z4r];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)
+ ---diag_serif(4l,1')..{left}z4l.c..z4l.a{right}..
+ z4+ser_boule*up..{right}z4r.a..{left}z4r.c
+ ..diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l)..
+ {left}z2l.c..z2l.a{right}..z2+ser_boule*up..{right}z2r.a..{left}z2r.c..
+ diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2')..
+ {right}z3r.c..{left}z3r.a..z3..{left}z3l.a..{right}z3l.c..
+ diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3')..
+ {right}z1r.c..{left}z1r.a..z1+serif_bend..{left}cycle;
+penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5');
+endchar;
+
+charscription(11.5u,x_height,desc_depth)(
+numeric alpha, right_stem, left_stem, tim[]; oblu:=2oblu;
+path p[];
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.52w; bot y3l=-u;
+left_stem=stem;
+right_stem=hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(whatever,0); pos5(dot_size,260);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[hair,stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+serifs_tl(1l); serifs_tr(1r);
+serifs_tr(2r); serifs_tl(2l);
+y4=-d+dot_size+hair; z4l=whatever[z2l,z3']; z4r=whatever[z3l,z2r];
+y6=y3'l; z6=whatever[z3l,z1l];
+bot y5r=-d; x5=x1; rt z5'=(x5-1/3dot_size,y5); if rt x5'<u: x5':=lft u;fi
+z4'=z3l+(alpha*right_stem-currentbreadth)*unitvector(z1l-z3l);
+p0=z1l.a{left}..z1l.c{right}..diag_serif(1l,3l)--z4';
+p1=z4'--z4l;
+tim1=xpart(p0 intersectiontimes ((0,y6)--(w,y6)));
+filldraw subpath(0,rundy(p0,infinity).zpet) of p0..subpath(rundy(p1,0),1) of p1
+ ..{left}z5l..z5'..{right}z5r...z4r---z3l---
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,3')---z3'r+oblu*unitvector(z2l-z3'r)..
+ z3'l+.75oblu*unitvector(z1r-z3'l)---diag_serif(1r,3')
+ ..z1r.c{right}..z1r.a{left}..z1+serif_bend..{left}cycle;
+penlabels(1,1',2,2',3,3',4,5); labels(4',6);
+);
+
+iff known chars.latin_y:
+bskchar "The letter y";
+beginchar(chars.latin_y,11.5u#,x_height#,desc_depth#); uni "0x0079";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_ygrave:
+bskchar "The letter y with grave";
+beginchar(chars.latin_ygrave,11.5u#,asc_height#,desc_depth#); uni "0x1EF3";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x2l.c,x1r.c];
+grave(100,101);
+endchar;
+
+iff known chars.latin_yacute:
+bskchar "The letter y with acute";
+beginchar(chars.latin_yacute,11.5u#,asc_height#,desc_depth#); uni "0x00FD";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x101=.5[x2l.c,x1r.c];
+acute(100,101);
+endchar;
+
+iff known chars.latin_ymacron:
+bskchar "The letter y with macron";
+beginchar(chars.latin_ymacron,11.5u#,.5[asc_height#,x_height#],desc_depth#); uni "0x0233";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1r; x101=x2l;
+macron(100,101);
+endchar;
+
+iff known chars.latin_yumlaut:
+bskchar "The letter y with umlaut";
+beginchar(chars.latin_yumlaut,11.5u#,asc_height#-dot_size#,desc_depth#); uni "0x00FF";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x100=x1r; x101=x2l;
+umlaut(100,101);
+endchar;
+
+iff known chars.latin_ycircumflex:
+bskchar "The letter y with circumflex";
+beginchar(chars.latin_ycircumflex,11.5u#,asc_height#-.1x_height#,desc_depth#); uni "0x0177";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+numeric oblu; oblu:=hair;
+x101=x3';
+circumflex(100,101,102);
+endchar;
+
+charscription(9u,x_height,0)(
+oblu:=2oblu;
+numeric alpha;
+lft x1l=u; bot y1l=0; rt x2r=w-u; top y2r=h;
+x2r-x2l=x1r-x1l;
+alpha=diag_ratio(2,stem,y2r-y1l,x2r-x1l);
+pos1(alpha*stem,0); pos2(alpha*stem,0);
+pos3(.5beak,80); pos4(.6beak,80);
+z3a=z3r+hair*right; z3b=z3r+(stem,-hair+currentbreadth);
+x3l=1.3u; top y3r=h; z3c=z3l+(hair-currentbreadth)*dir(angle(z3l-z3)+90);
+y2'=y2-hair+currentbreadth; z2'=whatever[z2l,z1l];
+y1'=y1+hair-currentbreadth; z1'=whatever[z2r,z1r];
+bot y4l=0; x4r=w-u; z4b=z4r+(hair-currentbreadth)*dir(angle(z4l-z4)-90);
+y4a=y4l+hair-currentbreadth; x4a=.5w;
+filldraw z2r---z3a..z3r---z3l..z3c{dir80}..z3b---obl(2',3b,1l)---z1l---z4l
+---z4r..{down}z4b...if not bold_face: z4a--- else: {left}fi obl(1',4a,2r)---cycle;
+penlabels(1,2,3,4); labels(1',2',3a,3b,3c,4a,4b,4c);
+);
+
+iff known chars.latin_z:
+bskchar "The letter z";
+beginchar(chars.latin_z,9u#,x_height#,0); uni "0x007A";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_zcaron:
+bskchar "The letter z with caron";
+beginchar(chars.latin_zcaron,9u#,asc_height#,0); uni "0x017E";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x101=.5[x3r,x2r];
+hacek(100,101,102);
+endchar;
+
+iff known chars.latin_zdotabove:
+bskchar "The letter z with dot above";
+beginchar(chars.latin_zdotabove,9u#,asc_height#-.5dot_size#,0); uni "0x017C";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+x100=.5[x3r,x2r];
+dotabove(100);
+endchar;
+
+iff known chars.latin_zacute:
+bskchar "The letter z with acute";
+beginchar(chars.latin_zacute,9u#,asc_height#,0); uni "0x017A";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+.25[x101,x100]=.5[x3r,x2r];
+acute(100,101);
+endchar;
+
+bskboundary;
+
+skal:=.5;
+charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)(
+numeric sair; sair=if medieval: vair else: hair fi;
+pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+);
+
+iff known chars.numeral_zero:
+bskchar "The numeral 0";
+beginchar(chars.numeral_zero,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x0030";
+italcorr .5h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_zero:
+bskchar "The superscript numeral 0";
+beginchar(chars.superscript_numeral_zero,if monofig: 5.5u# else: if medieval: 5.75u# else:6.5u#fi fi,asc_height#,0); uni "0x2070";
+italcorr (asc_height#-x_height#)*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)(
+path p;
+numeric sair; sair=if medieval: vair else: hair fi;
+pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=y0=.5h; .5[x2,x4]=.5[x1,x3]=x0; x2-x4=0; bot y2l=-o; top y4r=h+o;
+p:=z1r{up}..z4r..z3r..z2r..{up}cycle;
+z5=p intersectionpoint ((x0,.25[y4r,y3])--(w,.25[y4r,y3])); z6=z5+stem*unitvector(z0-z5); .5[z6,z7]=z0;
+pos6(hair,angle(z7-z6)+90); pos7(hair,angle(z7-z6)+90);
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill p;
+filldraw bskrule(6,7,hair,hair);
+penlabels(0,1,2,3,4,5,6,7);
+);
+
+iff known chars.numeral_zero_slash:
+bskchar "The numeral 0 with slash";
+beginchar(chars.numeral_zero_slash,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "non";
+italcorr .5h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_zero_slash:
+bskchar "The superscript numeral 0 with slash";
+beginchar(chars.superscript_numeral_zero_slash,if monofig: 5.5u# else: if medieval: 5.75u# else:6.5u#fi fi,asc_height#,0); uni "non";
+italcorr (asc_height#-x_height#)*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(8u),medfigu,0)(
+pos1(dig_stem,0); pos2(dig_stem,0);
+pos3(hair,90);
+oblu:=f_obl;
+x1=.5w; bot y1=0; x2=x1; top y2=h;
+lft x3=u; x4=x1l;
+if medieval:
+ y3=y2-if monofig: 1.5 \\fi hair; y4=y3-.5o;
+ filldraw one_serif(1)---z2r--z2{dir200}..{left}z3r..z3l---obl(4,3l,1l)--cycle;
+else:
+ y3=.9h-o; y4=y3+o;
+ path p[]; p1=z3l{right}..z4; p0=z4---one_serif(1);
+ filldraw subpath(rundy(p0,0),infinity) of p0---z2r{dir200}..{left}z3r..
+ subpath(0,rundy(p1,1).zpet) of p1..cycle;
+fi
+penlabels(1,2,3); labels(4);
+);
+
+let _saved_char_one=_saved_char;
+numeric _saved_w_one; _saved_w_one:=_saved_w;
+
+iff known chars.numeral_one:
+bskchar "The numeral 1";
+beginchar(chars.numeral_one,figw(8u),medfig,0); uni "0x0031";
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_one:
+bskchar "The superscript numeral 1";
+beginchar(chars.superscript_numeral_one,if monofig: 5.5u# else: 5u# fi,asc_height#,0); uni "0x00B9";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,serif_o,dig_stem);
+usechar shifted (-x3,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(if medieval: 9u else: 10u fi),medfigu,0)(
+path p[]; oblu:=3f_obl;
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos0(vair,-60);
+lft x1r=u; y1=2/3h+hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-if medieval:1.5\\ fi u; y3=2/3h; lft x4l=u; bot y4l=0;
+rt x8=w-u; y8=stem-tiny; y7=-hair; z7=z8+whatever*dir-135;
+x6=x7-hair; bot y6=0;
+p0:=z4l{dir if medieval: 40 else:20 fi}..{up}z3l;
+z4r=(((0,y8)--(w,y8)) intersectionpoint p0)+vair*right;
+p1:=z3r{down}..{dir-140}z4r;
+p2=z4r--z8;
+filldraw p0..z2l{left}..z1l..{dir60}z0l..{dir-120}z0r..z1r..{right}z2r..
+ subpath(0,rundy(p1,(1,curve)).zpet) of p1..subpath(rundy(p2,(0,curve)),infinity) of p2&z8
+ ..{dir(angle(z7-z8)+15)}z7+.25vair*right..z7{up}..z6---cycle;
+penlabels(0,1,2,3,4); labels(6,7,8);
+);
+
+iff known chars.numeral_two:
+bskchar "The numeral 2";
+beginchar(chars.numeral_two,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x0032";
+italcorr 2/3h#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_two:
+bskchar "The superscript numeral 2";
+beginchar(chars.superscript_numeral_two,if monofig: 5.5u# else: if medieval: 5.5u# else: 6u# fi fi,asc_height#,0); uni "0x00B2";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x1r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.fraction_one_half:
+bskchar "Fraction one half";
+beginchar(chars.fraction_one_half,5.5u#,asc_height#,0); uni "0x00BD";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,vair);
+usechar shifted (-x2-hair,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_one;
+_saved_w:=_saved_w_one;
+usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: + .5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+charscription(figwu(9.5u),medfigu,medfigdu)(
+numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi;
+path p[];
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos4(.45[hair,stem],0); pos0(vair,-60);
+pos5(hair,90); pos6(curve,0); pos7(like_hair,270);
+lft x1r=1.5u; y1=y3+hair; top y2r=h+o; x2=.5w-hair; y0l=y3-hair; x0=.35[x2,x1];
+rt x3r=w-1.75u; y3=if medieval: 2/3h else: .8h fi; lft x4l=1.5u;
+bot y4l=.5(h-d); z4'=(x4l,y4l-like_hair);
+x5=.5w; y5=y4+hair; rt x6r=w-u; y6=.5[y4,-d];
+x7=.55[x5,x4]; bot y7r=-d; rt x8r=u; y8=y7+1.25like_stem;
+p0=z4l{dir40}..{up}z3l..z2l{left}..z1l..{dir60}z0l;
+p1=z0l{dir60}..{dir-120}z0r..z1r..{right}z2r..z3r{down}..{dir-140}z4r..z4'..{dir40}z4l;
+p2=z4l..z5r..z6r..z7r..smitko(8,curve)..z7l..z6l..z5l..z4';
+p3=subpath(3,infinity) of p2;
+z9=bsktouch(p1,down,p2,up);
+tim1-3=xpart(subpath(3,infinity) of p1 intersectiontimes (z9--(x9,y3)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,y6)));
+(tim3,tim4-3)=p1 intersectiontimes p3;
+filldraw p0..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),rundy(p2,(tim4,f_obl)).zpet) of p2
+ ..subpath(tim3,infinity) of p1
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(4',9);
+);
+
+let _saved_char_three=_saved_char;
+numeric _saved_w_three; _saved_w_three:=_saved_w;
+
+iff known chars.numeral_three:
+bskchar "The numeral 3";
+beginchar(chars.numeral_three,figw(9.5u),medfig,medfigd); uni "0x0033";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_three:
+bskchar "The superscript numeral 3";
+beginchar(chars.superscript_numeral_three,if monofig: 5.5u# else: 5.75u# fi,asc_height#,0); uni "0x00B3";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,stem,like_hair,like_stem);
+usechar shifted (-x8r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.fraction_one_third:
+bskchar "Fraction one third";
+beginchar(chars.fraction_one_third,5.5u#,asc_height#,0); uni "0x2153";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,stem,like_hair,like_stem);
+usechar shifted (-x2-hair,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_one;
+_saved_w:=_saved_w_one;
+usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: + .5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+charscription(figwu(12u),medfigu,medfigdu)(
+oblu:=2f_obl; oblu.light:=.5oblu;
+pos1(dig_stem,0); pos2(dig_stem,0); pos4(hair,90); pos5(stem,30);
+rt x1r= rt x2r=w-3.5u; bot y1=-d; top y2=h+apex_o;
+lft x3l=u; y3l=if medieval: -stem else: .5x_height fi; z4l=(x1r+hair,y3l); rt x5r=w-u; y5l=y3l;
+z2'=whatever[z2r,z3l]=whatever[z1l,z2l];
+z3l'=z3l+(hair-tiny,0) rotated(angle(z2r-z3l)-90); x2''=x2'; z2''=z3l'+whatever*(z2r-z3l);
+z4'=whatever[z3l',z2'']=whatever[z4r,(x3l,y4r)];
+z4l'=(x1r,y4l); z4r'=(x1r,y4r); z4l''=(x1l,y4l); z4r''=(x1l,y4r); z1'=(x1l,y4r);
+cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1r.b---obl(4l',1r,5l)if bold_face:.light fi
+ ---z5l..z5r if x4-x1r>oblu.light:..z4r fi
+ ..obl(4r',4r,2r).light---z2r--
+ z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi
+ ---z1l.b..{dir181}z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a{dir179}..cycle;
+infill obl(4',4r,2'')---obl(2'',4',1')---obl(1',2'',4')---cycle;
+penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r');
+);
+
+let _saved_char_four=_saved_char;
+numeric _saved_w_four; _saved_w_four:=_saved_w;
+
+iff known chars.numeral_four:
+bskchar "The numeral 4";
+beginchar(chars.numeral_four,figw(12u),medfig,medfigd); uni "0x0034";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_four:
+bskchar "The superscript numeral 4";
+beginchar(chars.superscript_numeral_four,if monofig: 5.5u# else: 7u# fi,asc_height#,0); uni "0x2074";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,dig_stem);
+usechar shifted (-x3l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.fraction_one_quarter:
+bskchar "Fraction one quarter";
+beginchar(chars.fraction_one_quarter,7u#,asc_height#,0); uni "0x00BC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,stem,like_hair,like_stem);
+usechar shifted (-.5w,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_one;
+_saved_w:=_saved_w_one;
+usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+iff known chars.fraction_three_quarters:
+bskchar "Fraction three quarters";
+beginchar(chars.fraction_three_quarters,7u#,asc_height#,0); uni "0x00BE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv:=if medieval: .5 else: .4 fi;
+multiply(1.7zv)(curve,hair,stem,like_hair,like_stem);
+let _saved_char=_saved_char_four;
+_saved_w:=_saved_w_four;
+usechar shifted (-.5w,0) scaled zv shifted (.5WW,0);
+save x,y;
+let _saved_char=_saved_char_three;
+_saved_w:=_saved_w_three;
+usechar shifted -(x2+hair,if medieval: y7 else: 0 fi) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height);
+pos10(hair,90); pos11(hair,90);
+lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi;
+filldraw bskrule(10,11,hair,hair);
+penlabels(10,11);
+endchar;
+
+charscription(figwu(if medieval: 10.5u else: 9.5u fi),medfigu,medfigdu)(
+numeric theta; theta=if medieval: 0 else: 10 fi;
+path p[];
+oblu:=2f_obl;
+pos1(hair,0); pos2(hair,0); pos3(stem,75);
+pos4(hair,-90); pos5(curve,180); pos6(hair,90);
+x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1;
+y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; z3r=z2r; z2'=(x2r,.5[y4,y2]);
+x4=.5w; rt x5l=w-u;
+y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem);
+y5=.48[y4,y6];
+x6=.5w-o; bot y6l=-d;
+lft x7r=u; y7=y6+if known superscript: 3 else: 4 fi /3like_curve; x8=w-u; y8=y1+.5apex_o;
+z1'=z1r+if bold_face:.8\\fi curve*down;
+p0=z1l---z2l..{down}z3l..(x3r,y3l)..{up}z3r..{up}z2r..{right}z4r..
+ {down}z5r..{left}z6r..(reverse smitko(7,curve))..z6l{right}..
+ {up}z5l;
+p1=z5l{up}..z4l..z2';
+p2=z2'--z1';
+p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l;
+filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,infinity).zpet) of p2..
+subpath(rundy(p3,0),infinity) of p3&cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8);
+);
+
+iff known chars.numeral_five:
+bskchar "The numeral 5";
+beginchar(chars.numeral_five,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x0035";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_five:
+bskchar "The superscript numeral 5";
+beginchar(chars.superscript_numeral_five,if monofig: 5.5u# else: if medieval: 6.25u# else: 5.75u#fi fi,asc_height#,0); uni "0x2075";
+adjust_fit(0,0);
+pickup tiny.nib; boolean superscript; superscript=true;
+multiply(1.7skal)(curve,hair,stem);
+usechar shifted (-x7r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(10u),fig_height,0)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(curve,0); pos6(hair,-90); pos7(curve,160);
+rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3;
+lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem;
+rt x7l=w-u; y7=y6r-like_stem;
+p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0);
+p1=z2l{right}..z3l..z4l..{down}z1l;
+p2=z2r{left}..z5r..{right}z6r;
+z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right);
+tim1=xpart(p1 intersectiontimes (z0--(x4,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+filldraw z7r{down}..z7l{up}..{left}z6l..z5l..{right}z2l..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1r{up}..z4r..z3r..z2r..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+);
+
+iff known chars.numeral_six:
+bskchar "The numeral 6";
+beginchar(chars.numeral_six,figw(10u),fig_height#,0); uni "0x0036";
+italcorr .5[fig_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_six:
+bskchar "The superscript numeral 6";
+beginchar(chars.superscript_numeral_six,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2076";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,stem);
+usechar shifted (-x5l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(11u),medfigu,medfigdu)(
+path p; numeric tim[];
+pos1(hair,0); pos2(curve,0); pos3(stem,90); pos4(.4(h+d),80);
+rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem;
+y3r=y1r; y4r=y1r+if not medieval: .5\\fi stem; lft x4l=u; x3=x4r+hair; x3l:=x3l+o;
+p:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p + u*left;
+filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p,(tim1,curve)).zpet) of p..z1'
+ ---z3l..{z4l-z4r}z4l..z4l+left--z4r{down}..z3r---cycle;
+penlabels(1,2,3,4); labels(1');
+);
+
+iff known chars.numeral_seven:
+bskchar "The numeral 7";
+beginchar(chars.numeral_seven,figw(11u),medfig,medfigd); uni "0x0037";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_seven:
+bskchar "The superscript numeral 7";
+beginchar(chars.superscript_numeral_seven,if monofig: 5.5u# else: 6.5u# fi,asc_height#,0); uni "0x2077";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,stem);
+usechar shifted (-x4l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(9u),fig_height,0)(
+path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl;
+testem=.5[curve, hair]; tlstem=.75[curve,stem];
+pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0);
+pos5(vair,90); pos6(vair,90);
+lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h;
+x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3];
+p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{left}..z3r..z0r..z2r..z5r{left};
+p2=z4l{down}..z0{dir-160}..{down}z1l;
+p3=z5l{right}..z2l..z0l..z3l..{right}z6l;
+p4=z1r{up}..z0{dir20}..{up}z4r;
+p5=z6l{left}..z3l..z0l..z2l..z5l{left};
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p3 intersectiontimes p4;
+(tim5,tim6)=p5 intersectiontimes p2;
+(tim7,tim8)=p1 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..
+ subpath(0,rundy(p3,tim3).zpet) of p3..
+ subpath(rundy(p4,tim4),infinity) of p4..cycle;
+infill subpath(0,rundy(p5,tim5).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle;
+infill subpath(rundy(p1,tim7),infinity) of p1..
+ subpath(0,rundy(p4,tim8).zpet) of p4..cycle;
+penlabels(0,1,2,3,4,5,6);
+);
+
+iff known chars.numeral_eight:
+bskchar "The numeral 8";
+beginchar(chars.numeral_eight,figw(9u),fig_height#,0); uni "0x0038";
+italcorr .5[fig_height#,x_height#]*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_eight:
+bskchar "The superscript numeral 8";
+beginchar(chars.superscript_numeral_eight,if monofig: 5.5u# else: 5.5u# fi,asc_height#,0); uni "0x2078";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair,stem);
+usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+charscription(figwu(10u),medfigu,medfigdu)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90);
+pos5(curve,0); pos6(hair,-90); pos7(curve,160);
+lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi;
+rt x5r=w-u; y5r=y1r-stem;
+bot y6r=-d-o; x6=.5w-.75stem;
+lft x7r=u; y7=y6r+like_stem;
+p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0);
+p1=z2r{right}..z1r{up}..z4r..z3r;
+p2=z4l{right}..z5l..{left}z6l;
+z0=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(w,y0)));
+filldraw z7l{up}..{down}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1l{up}..z4l..z3l..z2l..cycle;
+penlabels(1,2,3,4,5,6,7);
+);
+
+iff known chars.numeral_nine:
+bskchar "The numeral 9";
+beginchar(chars.numeral_nine,figw(10u),medfig,medfigd); uni "0x0039";
+italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.superscript_numeral_nine:
+bskchar "The superscript numeral 9";
+beginchar(chars.superscript_numeral_nine,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2079";
+adjust_fit(0,0);
+pickup tiny.nib;
+multiply(1.7skal)(curve,hair,vair);
+usechar shifted (-x3r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
+endchar;
+
+iff known chars.sign_query:
+bskchar "Question mark";
+beginchar(chars.sign_query, 9.5u#+punct_fit#, asc_height#, 0); uni "0x003F";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+bot z0=(2u+.5dot_size+punct_fit,.5dot_size); dot(0);
+pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0);
+z2'=z2+.2curve*down+o*right;
+z2''=z2+.5(curve-currentbreadth)*dir135;
+x1=.45(w-punct_fit)+punct_fit; top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u+punct_fit;
+rt x3r=w-u; y3=.5[y1r,y4l];
+lft x4l=x0+.25stem-.25dot_size; y4=.75x_height;
+z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]];
+p0=z3r{down}..z4;
+p1=z4r--z5r;
+filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r..
+ subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle;
+penlabels(1,2,3,4,5); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_turned_query:
+bskchar "Turned question mark";
+beginchar(chars.sign_turned_query, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+top z0=(2u+.5dot_size,h-.5dot_size); dot(0);
+pos1(hair,-90); pos2(curve,180); pos3(curve,0); pos4(like_hair,135); pos5(hair,0);
+z2'=z2+.2curve*up+o*right;
+z2''=z2+.5(curve-currentbreadth)*dir-135;
+x1=.45w; bot y1r=-d-o;
+y2''=1/4[-d,-d+(asc_height-x_height)]; lft x2r=u;
+rt x3r=w-u; y3=.5[y1r,y4l];
+lft x4l=x0+.25stem-.25dot_size; y4=-d+(asc_height-.75x_height);
+z4'=(x4l-.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]];
+p0=z3r{up}..z4;
+p1=z4r--z5r;
+filldraw z5l---z4'..z4l..z3l{down}..z1l{left}..{dir70}z2l..z2'..{down}z2r..z2''..{right}z1r..
+ subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle;
+penlabels(1,2,3,4,5); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_spanish_query:
+bskchar "Reversed question mark";
+beginchar(chars.sign_spanish_query, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "0x00BF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+top z0=(w-2u-.5dot_size,h-.5dot_size); dot(0);
+pos1(hair,-90); pos2(curve,0); pos3(curve,180); pos4(like_hair,45); pos5(hair,180);
+z2'=z2+.2curve*up+o*left;
+z2''=z2+.5(curve-currentbreadth)*dir-45;
+x1=.55w; bot y1r=-d-o;
+y2''=1/4[-d,-d+(asc_height-x_height)]; rt x2r=w-u;
+lft x3r=u; y3=.5[y1r,y4l];
+rt x4l=x0-.25stem+.25dot_size; y4=-d+(asc_height-.75x_height);
+z4'=(x4l+.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]];
+p0=z3r{up}..z4;
+p1=z4r--z5r;
+filldraw z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r..z2''..{left}z1r..
+ subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle;
+penlabels(1,2,3,4,5); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_ampersand:
+bskchar "Ampersand";
+beginchar(chars.sign_ampersand, 14u#, asc_height#, 0); uni "0x0026";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, tim[];
+path p[];
+numeric radius; radius:=2hair; oblu:=2oblu;
+pos1(hair,180); pos4(hair,-90); pos5(hair,180);
+rt x1r=w-u-hair; y1=y2; top y4l=h+o; x4-x3'=if monospace:expansion_factor*fi (y4-y3');
+lft x3l=if monospace: 2u else:3u fi +stem;
+rt x2r=x1r-if monospace:.85expansion_factor*fi(y2r+u); y3l=x_height; y2r=.25x_height;
+alpha=diag_ratio(2,stem,y3l-y2r,x3l-x2r);
+pos2(alpha*stem,0); pos3(alpha*stem,0); pos3'(stem,0);
+.5[x3'r,rt x5r-if not monospace:.5\\fi hair]=x4; y5=y3'=.5[x_height,h];
+x3'r-x3r=(y3'-y3)*cosd(angle(z3-z2));
+bot y2'=-o; x2'=.5[x2r,x1l];
+pos6(curve,180); pos7(.5[hair,stem],270); pos8(hair,-45); pos9(hair,270); pos10(stem,180);
+lft x6r=u; y6r-y7r=x7-x6; bot y7r=-o; x7=x3; x8=x2;
+y8=bar_height; top y9l=x_height+o; x9=.5[x8,w-u]+.5hair;
+z10'=z10+.2stem*down+o*left; z10''=z10+.5(stem-currentbreadth)*dir 45;
+rt x10l=w-u; y10''=y9r-hair;
+p0=z1l{z2'+u*right-z1l}..{left}z2'..z2l---z3l..z3'l..z4l..{down}z5l..{down}z6l;
+p1=z6l{down}..z7l..z8l..{right}z9l..z10''..{down}z10l..z10'..
+ z10r..z9r{left}..z8r..z7r..{up}z6r;
+p2=z6r{up}..z5r{up}..z4r..z3'r..z3r---z2r..{up}z1r;
+(tim0,tim1-9)=p0 intersectiontimes (subpath (9,infinity) of p1);
+(tim2,tim3)=p2 intersectiontimes p0;
+(tim4-3,tim5-5)=(subpath(3,infinity) of p2) intersectiontimes subpath(5,infinity) of p0;
+(tim6-3,tim7)=(subpath(3,infinity) of p2) intersectiontimes p1;
+(tim8-8,tim9)=(subpath(8,infinity) of p1) intersectiontimes p2;
+(tim10,tim11-3)=p2 intersectiontimes subpath (3,infinity) of p2;
+(tim12,tim13)=p1 intersectiontimes p0;
+(tim14,tim15-5)=p0 intersectiontimes subpath(5,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..subpath (0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0..subpath(rundy(p2,tim4),rundy(p2,(tim6,hair)).zpet) of p2..subpath(rundy(p1,(2,f_obl)),8) of p1..subpath (8,rundy(p1,tim8).zpet) of p1..subpath(rundy(p2,tim9),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim10),rundy(p2,tim11).zpet) of p2..cycle;
+infill subpath(0,rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p0,tim13),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p0,tim15),infinity) of p0..cycle;
+penlabels(1,2,3,3',4,5,6,7,8,9,10); labels(2',10',10'');
+endchar;
+
+iff known chars.sign_at:
+bskchar "At sign";
+beginchar(chars.sign_at, 16u#, asc_height#-.3desc_depth#, .6desc_depth#); uni "0x0040";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric aend,H,W,shift; aend:=stem; H:=x_height; W=9u; oblu:=2oblu;
+path p[]; numeric tim[];
+shift=.5(w-W) if not monospace: + hair fi;
+pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0);
+pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right;
+z4''=z4+.5(aend-currentbreadth)*dir135;
+rt x1r=W-u- if monospace: .25\\fi stem +shift; x2=x1; y1=stem+hair; y2=H-like_curve;
+x0l=W if not monospace: -.75u fi +shift; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r];
+x3=.5[x1r,lft u+shift]; top y3r=H+o;
+y4''=.5[y2,y3l]; lft x4r=u if not monospace:+o fi +shift;
+z5l=z2l; z6l=z5l+like_hair*down; z7=(u+shift,y1);
+pos6(hair,angle(z7-z6l)+90);
+pos8(curve,30); lft x8l=if not monospace: u+ fi shift; y8r=y7-hair;
+pos9(hair,120); x9r=x3; y9l=o;
+pos10(hair,angle(z1-z9l)+90); z10l=z1;
+pos11(hair,0); pos12(hair,90); pos13(hair,180); pos14(hair,270);
+pos15(hair,0);
+lft x13r=u; y13=bar_height; y15=if monospace: 0 else:.2bar_height fi; rt x15r=w-u;
+top y12r=h+o; bot y14r=-d+o; x12=x14=.5w;
+z11r=(z12r{right}..{dir(angle(z0'l-z0r)+10)}z0l) intersectionpoint
+ ((.5w,y13)--(w,y13));
+p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l..
+ {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r..
+ {right}z0'r..{dir(angle(z0r-z0'l)+10)}z0r..{up}z11l..{left}z12l..z13l..
+ {right}z14l..{dir(angle(z0r-z0'l)+10)}z15l..z15r{dir(angle(z0'l-z0r)+10)}
+ ..z14r{left}..z13r..{right}z12r..{down}z11r;
+p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l;
+p2=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r;
+(tim1,tim2)=p0 intersectiontimes p1;
+(tim3-2,tim4)=subpath(2,infinity) of p1 intersectiontimes p0;
+(tim5,tim6)=p2 intersectiontimes p0;
+(tim7-2,tim8)=subpath(2,infinity) of p2 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p1,tim2),rundy(p1,tim3).zpet) of p1..
+ subpath(rundy(p0,tim4),length p0) of p0..cycle;
+if bold_face: oblu:=.75f_obl; fi
+infill subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2..
+ subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0..cycle;
+penlabels(0,0',1,2,3,4,5,6,8,9,10,11,12,13,14,15); labels(4',4'',7);
+endchar;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
new file mode 100644
index 00000000000..30aed95b08a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
@@ -0,0 +1,90 @@
+%Boisik Italic ligtables
+
+def mkr:= kern -.5u# enddef;
+def vkr:= kern -u# enddef;
+def xkr:= kern -1.5u# enddef;
+def ukr:= kern -2u# enddef;
+def wkr:= kern -2.25u# enddef;
+def kkr:= kern u# enddef;
+ligtable "a": chars.latin_aacute: "b" vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, chars.latin_ffi vkr, chars.latin_ffl vkr, "h" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "k" vkr, "p" mkr, "r" mkr, chars.latin_rcaron mkr, "v" mkr, "w" mkr, "x" kern .5u#, "y" mkr, chars.latin_yacute mkr, "z" mkr, chars.latin_zcaron mkr, "'" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "b": "b" mkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, chars.latin_ffi vkr, chars.latin_ffl vkr, ")" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "s" mkr, chars.latin_scaron mkr, "t" mkr, chars.latin_tcaron mkr, "z" mkr, chars.latin_zcaron mkr, "." mkr, "," mkr, "'" vkr;
+ligtable "c": chars.latin_ccaron: "b" mkr, "f" mkr, "g" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" mkr, chars.latin_tcaron mkr, "z" mkr, chars.latin_zcaron mkr, ")" mkr, "'" vkr;
+ligtable "e": chars.latin_ecaron: chars.latin_eacute: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" vkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "z" mkr, chars.latin_zcaron mkr, ")" mkr, "'" mkr;
+ligtable "f": "f" =: chars.latin_ff, "i" =: chars.latin_fi, "l" =: chars.latin_fl, chars.latin_lacute =: chars.latin_flacute, chars.latin_lcaron =: chars.latin_flcaron, "a" mkr, chars.latin_aacute mkr, "b" kern 2u#, "c" mkr, chars.latin_ccaron kern 1.5u#, "e" mkr, chars.latin_ecaron kern 1.5u#, "h" kern 2u#, "j" =: chars.latin_fj, "k" kern 2u#, chars.latin_ncaron kern 2u#, "o" mkr, chars.latin_oacute mkr, chars.latin_rcaron kern 2u#, chars.latin_scaron kern 2u#, chars.latin_uumlaut kern u#, chars.latin_zcaron kern u#, "(" kern 1.5u#, ")" kern 1.75u#, "]" kern 2u#, "." vkr, "," vkr, "!" kern 1.5u#, "?" kern 1.5u#, "'" kern 1.5u#, "`" kern 1.5u#, chars.sign_czech_closing_quotes kern 2u#;
+ligtable chars.latin_ff: "i" =: chars.latin_ffi, "l" =: chars.latin_ffl;
+ligtable "g": "a" mkr, chars.latin_aacute mkr, "f" kern 2u#, "j" kern 1.5u#, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr;
+ligtable "h": "b" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "i": chars.latin_iacute: "b" mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "l" mkr,chars.latin_lacute mkr, chars.latin_lcaron mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#;
+ligtable "j": "b" mkr, "f" kern 2u#, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "t" mkr, chars.latin_tcaron mkr;
+ligtable "k": "b" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr, "p" mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#, "'" mkr;
+ligtable "l": chars.latin_lacute: "b" mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "l" mkr,chars.latin_lacute mkr, chars.latin_lcaron mkr, "k" mkr, "p" mkr, "t" mkr, "x" kern .5u#;
+ligtable "m": "b" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "n": chars.latin_ncaron: "b" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "o": chars.latin_oacute: chars.latin_oumlaut: chars.latin_ocircumflex: "b" vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, chars.latin_ffi vkr, chars.latin_ffl vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "z" mkr, ")" mkr, "'" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "p": "b" vkr, "h" vkr, "k" mkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "t" vkr, chars.latin_tcaron vkr, ")" mkr, "'" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "q": "b" vkr, "f" kern 1.5u#, "h" vkr, "j" kern 1.5u#, "k" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "z" mkr, chars.latin_zcaron mkr, "'" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "r": chars.latin_rcaron: "a" vkr, chars.latin_aacute vkr, "b" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "g" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" mkr, "o" vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, chars.latin_oumlaut vkr, "t" mkr, chars.latin_tcaron mkr, "/" vkr, ")" mkr, "." ukr, "," ukr, "'" vkr;
+ligtable "s": "b" vkr, "c" mkr, chars.latin_ccaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" mkr, chars.latin_tcaron mkr, "'" vkr;
+ligtable "t": chars.latin_tcaron: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "o" mkr, "p" mkr, "t" mkr, "x" kern .5u#;
+ligtable "u": chars.latin_uacute: chars.latin_uumlaut: chars.latin_uring: "b" vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "v": "a" mkr, chars.latin_aacute mkr, "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" vkr, "/" mkr, "'" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "w": "a" mkr, chars.latin_aacute mkr, "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" vkr, "/" mkr, "'" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "y": chars.latin_yacute: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, ")" vkr, "]" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "z": chars.latin_zcaron: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" mkr, "t" vkr, ")" mkr, "'" mkr;
+ligtable "A": chars.latin_Aacute: "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, ")" mkr, "'" kern -3u#, "`" kern -3u#, chars.sign_czech_closing_quotes kern -3u#;
+ligtable "B": "A" vkr, chars.latin_Aacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_O mkr, "Q" mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "'" mkr;
+ligtable "C": chars.latin_Ccaron: "A" mkr, chars.latin_Aacute mkr, "J" vkr;
+ligtable "D": chars.latin_Dcaron: "A" ukr, chars.latin_Aacute ukr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" xkr, chars.latin_Zcaron xkr, "," xkr, "." xkr, "/" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "E": chars.latin_Ecaron: chars.latin_Eacute: "A" vkr, chars.latin_Aacute vkr, "J" mkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" mkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Z mkr;
+ligtable "F": "a" vkr, "c" vkr, "e" vkr, "o" vkr, "p" mkr, "r" mkr, "s" vkr, "u" mkr, "y" mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -2.5u#, "." kern -2.5u#;
+ligtable "G": "A" xkr, chars.latin_Aacute xkr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" xkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Zcaron mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "H": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr;
+ligtable "I": chars.latin_Iacute: "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr;
+ligtable "J": "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," ukr;
+ligtable "K": "r" mkr, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" vkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "T" vkr, chars.latin_Tcaron vkr, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr;
+ligtable "L": "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "V" kern -3u#, "W" kern -2.5u#, "Y" kern -3u#, chars.latin_Yacute kern -3u#, chars.sign_czech_closing_quotes ukr;
+ligtable "M": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#;
+ligtable "N": chars.latin_Ncaron: "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," vkr;
+ligtable "O": chars.latin_Oacute: "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Eacute mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" vkr, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," vkr, "." vkr, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "P": "a" mkr, chars.latin_aacute mkr, "c" vkr, "e" vkr, chars.latin_eacute vkr, "o" vkr, chars.latin_oacute vkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "S" mkr, chars.latin_Scaron mkr, "V" mkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, "," kern -2.5u#, "." kern -2.5u#, "/" xkr;
+ligtable "Q": "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, chars.latin_Eacute mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 4u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Racute mkr, chars.latin_Rcaron mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," kern .75u#, "." kern -.75u#, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "R": chars.latin_Rcaron: chars.latin_Racute: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" xkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "]" mkr;
+ligtable "S": chars.latin_Scaron: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," mkr;
+ligtable "T": "a" ukr, chars.latin_aacute ukr, "c" vkr, chars.latin_ccaron mkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron mkr, "f" mkr, "o" ukr, chars.latin_oacute ukr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring mkr, "y" ukr, chars.latin_yacute ukr, chars.latin_Tcaron: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -3u#, "." kern -3u#, "/" vkr;
+ligtable "U": chars.latin_Uacute: chars.latin_Uring: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," xkr;
+ligtable "V": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "s" ukr, chars.latin_scaron vkr, "y" mkr, chars.latin_yacute mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr;
+ligtable "W": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "s" ukr, chars.latin_scaron vkr, "y" mkr, chars.latin_yacute mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr;
+ligtable "X": "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" mkr, chars.latin_Scaron mkr;
+ligtable "Y": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "r" vkr, chars.latin_rcaron mkr, "s" ukr, chars.latin_scaron vkr, "u" vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, chars.latin_Yacute: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr;
+ligtable "Z": chars.latin_Zcaron: "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "/" xkr;
+
+ligtable "!": "`" =: chars.sign_spanish_shriek;
+ligtable "?": "`" =: chars.sign_spanish_query;
+ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash;
+ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash if medieval:, "4" kern -1u# fi;
+ligtable ".": "'" ukr, "`" ukr;
+ligtable ",": "j" kern .5u#, "f" kern u#, "J" kern 2u#, "'" ukr, "`" ukr;
+ligtable "'": "A" wkr, chars.latin_Aacute wkr, "a" mkr, "c" vkr, "d" vkr, "e" vkr, "m" mkr, "n" mkr, "o" vkr, "q" vkr, "s" vkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, "z" mkr if medieval:, "4" wkr, "5" mkr, "9" vkr fi, "/" wkr;
+ligtable "`": "A" wkr if medieval:, "4" wkr fi, "/" kern -3u#;
+ligtable chars.sign_czech_quotes: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "T" wkr, chars.latin_Tcaron wkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "a" mkr, chars.latin_aacute mkr, "b" ukr, "h" mkr, "j" kern .5u#, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oacute vkr, "r" mkr, chars.latin_rcaron mkr, "t" mkr, chars.latin_tcaron mkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr;
+ligtable "(": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_ecaron vkr, chars.latin_eacute ukr, "f" ukr, chars.latin_ff ukr, chars.latin_fi ukr, chars.latin_fl ukr, chars.latin_flacute ukr, chars.latin_flcaron ukr, chars.latin_ffi ukr, chars.latin_ffl ukr, "i" mkr, chars.latin_iacute mkr, "j" kern 1.5u#, "m" vkr, "n" vkr, chars.latin_ncaron mkr, "o" ukr, chars.latin_oacute ukr, chars.latin_oumlaut ukr, chars.latin_ocircumflex ukr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" ukr, chars.latin_uacute ukr, chars.latin_uring ukr, "v" ukr, "w" ukr, "x" vkr, "y" mkr, chars.latin_yacute mkr, "z" vkr, chars.latin_zcaron mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" kern .75u#, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "0" vkr;
+ligtable ")": "J" kern 1u#;
+ligtable "[": "A" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "f" kern 3u#, "o" mkr, chars.latin_oacute mkr, "q" mkr;
+ligtable "]": "J" kern u#;
+ligtable "/": "A" wkr, chars.latin_Aacute wkr, "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "q" vkr, "o" ukr, chars.latin_oacute ukr, "q" ukr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr;
+ligtable chars.polish_cross: "l" kern -if monospace: 9u# else: 6u# fi -2letter_fit#, "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#);
+
+
+if (not monofig) and medieval:
+ ligtable "0": "/" vkr, "." mkr, "," mkr, "'" mkr, chars.sign_czech_quotes vkr, chars.sign_czech_closing_quotes vkr;
+ ligtable "1": chars.sign_endash kern -2u#, "'" mkr, chars.sign_czech_closing_quotes ukr;
+ ligtable "2": "'" mkr, chars.sign_czech_closing_quotes vkr;
+ ligtable "3": "." mkr, "'" mkr, chars.sign_czech_closing_quotes ukr;
+ ligtable "4": chars.sign_endash kern -1u#, "." mkr, "'" ukr, chars.sign_czech_closing_quotes ukr;
+ ligtable "5": "." mkr, chars.sign_czech_quotes mkr;
+ ligtable "6": "/" mkr;
+ ligtable "7": "-" kern -u#, "." kern -3.5u#, "," kern -3.5u#, "/" ukr;
+ ligtable "8": "/" mkr;
+ ligtable "9": "'" mkr, chars.sign_czech_closing_quotes vkr;
+fi
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
new file mode 100644
index 00000000000..d3b95788e78
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
@@ -0,0 +1,88 @@
+%Boisik Small Caps ligtables
+
+def mkr:= kern -.5u# enddef;
+def vkr:= kern -u# enddef;
+def xkr:= kern -1.5u# enddef;
+def ukr:= kern -2u# enddef;
+def wkr:= kern -2.25u# enddef;
+def kkr:= kern u# enddef;
+ligtable "a": "á": "c" vkr, "č" vkr, "g" vkr, "j" vkr, "o" vkr, "ó" vkr, "q" vkr, "s" mkr, "š" mkr, "t" kern -3u#, "ť" kern -3u#, "u" xkr, "ů" xkr, "ú" xkr, "v" kern -3u#, "w" kern -3u#, "y" kern -3u#, "ý" kern -3u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, ")" vkr, "]" vkr, "'" kern -4u#, "`" kern -4u#, chars.sign_czech_closing_quotes kern -3u#;
+ligtable "b": "a" mkr, "á" mkr, "t" mkr, "ť" mkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "z" mkr, "ž" mkr, "'" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "d": "ď": "a" wkr, "á" wkr, "e" mkr, "ě" mkr, "é" mkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "ý" vkr, "z" vkr, "ž" vkr, ")" mkr, "." vkr, "," vkr, "'" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "e": "ě": "é": "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "t" vkr, "u" vkr, "v" vkr, "w" vkr, "y" vkr, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "f": "a" wkr, "á" ukr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "/" vkr, "." kern -3u#, "," kern -3u#;
+ligtable "g": "a" vkr, "á" vkr, "t" mkr, "ť" mkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "ý" vkr, "z" mkr, "ž" mkr;
+ligtable "h": "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr;
+ligtable "i": "a" mkr, "á" mkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr;
+ligtable "j": "a" ukr, "á" ukr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "s" mkr, "š" mkr;
+ligtable "k": "a" mkr, "á" mkr, "c" ukr, "č" ukr, "g" ukr, "o" ukr, "ó" ukr, "q" ukr, "t" vkr, "ť" vkr, "u" vkr, "ů" vkr, "ú" vkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "'" mkr, "`" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "l": "a" mkr, "á" mkr, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "t" kern -3.5u#, "ť" kern -3.5u#, "u" mkr, "ú" mkr, "ů" mkr, "v" wkr, "w" wkr, "y" wkr, "ý" wkr, "z" mkr, "ž" mkr, "'" wkr, "`" wkr, chars.sign_czech_closing_quotes wkr;
+ligtable "m": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr;
+ligtable "n": "ň": "a" xkr, "á" xkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr;
+ligtable "o": "ó": "a" ukr, "á" ukr, "t" xkr, "ť" xkr, "v" vkr, "w" vkr, "x" xkr, "y" vkr, "ý" vkr, "z" mkr, "ž" mkr, ")" mkr, "." vkr, "," vkr, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "p": "a" wkr, "á" wkr, "c" vkr, "č" vkr, "g" vkr, "j" vkr, "o" vkr, "ó" vkr, "q" vkr, "s" mkr, "š" mkr, "v" vkr, "w" vkr, "x" ukr, "y" ukr, "ý" ukr, "z" mkr, "ž" mkr, "/" mkr, "." wkr, "," wkr, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "q": "a" vkr, "á" vkr, "j" kern 2u#, "t" mkr, "ť" mkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "ý" vkr, "," kern u#, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr;
+ligtable "r": "ř": "a" vkr, "á" vkr, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "t" vkr, "ť" vkr, "u" vkr, "ů" vkr, "ú" vkr, "v" wkr, "w" wkr, "y" wkr, "ý" wkr, "z" vkr, "ž" vkr, ")" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "s": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "t" vkr, "ť" vkr, "v" vkr, "w" vkr, "x" mkr, "y" wkr, "ý" wkr;
+ligtable "t": "ť": "a" ukr, "á" mkr, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "s" mkr, "š" mkr, "," wkr, "." wkr, ";" vkr, ":" vkr, "/" mkr;
+ligtable "u": "ů": "ú": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr;
+ligtable "v": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "s" mkr, "š" mkr, "," wkr, "." wkr, "/" vkr;
+ligtable "w": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "s" mkr, "š" mkr, "," wkr, "." wkr, "/" vkr;
+ligtable "x": "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr;
+ligtable "y": "ý": "a" wkr, "á" wkr, "c" ukr, "č" ukr, "g" ukr, "o" ukr, "ó" ukr, "q" ukr, "s" vkr, "," wkr, "." wkr, "/" vkr;
+ligtable "z": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "t" vkr, "ť" vkr, "v" vkr;
+ligtable "A": chars.latin_Aacute: "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "'" wkr, "`" wkr, chars.sign_czech_closing_quotes wkr;
+ligtable "B": "A" vkr, chars.latin_Aacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_O mkr, "Q" mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr;
+ligtable "C": chars.latin_Ccaron: "A" mkr, chars.latin_Aacute mkr, "J" vkr;
+ligtable "D": chars.latin_Dcaron: "A" ukr, chars.latin_Aacute ukr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" xkr, chars.latin_Zcaron xkr, "," xkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "E": chars.latin_Ecaron: chars.latin_Eacute: "A" vkr, chars.latin_Aacute vkr, "J" mkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" mkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Z mkr, "'" mkr;
+ligtable "F": "a" kern -4u#, "á" kern -4u#, "c" wkr, "č" wkr, "g" wkr, "j" mkr, "o" wkr, "ó" wkr, "q" wkr, "s" mkr, "š" mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -2.5u#, ":" vkr, ";" vkr;
+ligtable "G": "a" mkr, "á" mkr, "A" xkr, chars.latin_Aacute xkr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" xkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Zcaron mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "H": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr;
+ligtable "I": chars.latin_Iacute: "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr;
+ligtable "J": "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," ukr;
+ligtable "K": "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" vkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "T" vkr, chars.latin_Tcaron vkr, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr, ")" mkr, "'" xkr, "`" vkr, chars.sign_czech_closing_quotes xkr;
+ligtable "L": "v" wkr, "w" wkr, "y" wkr, "ý" wkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "V" kern -3u#, "W" kern -2.5u#, "Y" kern -3u#, chars.latin_Yacute kern -3u#, ")" mkr, chars.sign_czech_closing_quotes vkr;
+ligtable "M": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#;
+ligtable "N": chars.latin_Ncaron: "a" vkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," vkr;
+ligtable "O": chars.latin_Oacute: "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Eacute mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" vkr, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," vkr, "." vkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "P": "a" kern -3u#, "á" kern -3u#, "c" mkr, "č" mkr, "o" mkr, "ó" mkr, "q" mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "S" mkr, chars.latin_Scaron mkr, "V" mkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, "," kern -2.5u#, "." kern -2.5u#, "/" ukr;
+ligtable "Q": "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, chars.latin_Eacute mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 4u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Racute mkr, chars.latin_Rcaron mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," kern .75u#, "]" kern u#, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "R": chars.latin_Rcaron: chars.latin_Racute: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" xkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, chars.sign_czech_closing_quotes xkr;
+ligtable "S": chars.latin_Scaron: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," mkr, "." mkr;
+ligtable "T": "a" kern -4u#, "á" kern -4u#, "c" ukr, "č" ukr, "g" ukr, "o" ukr, "ó" ukr, "q" ukr, chars.latin_Tcaron: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -3u#, "." kern -3u#, ":" vkr, ";" vkr, "/" ukr;
+ligtable "U": chars.latin_Uacute: chars.latin_Uring: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," xkr, "." xkr;
+ligtable "V": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, ":" vkr, ";" vkr, "/" wkr;
+ligtable "W": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3u#, "." kern -3u#, "/" wkr, ":" vkr, ";" vkr;
+ligtable "X": "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" mkr, chars.latin_Scaron mkr;
+ligtable "Y": "a" kern -4u#, "á" kern -4u#, "b" wkr, "c" wkr, "č" wkr, "d" vkr, "ď" vkr, "e" vkr, "é" vkr, "ě" vkr, "f" vkr, "g" wkr, "h" vkr, "i" vkr, "í" vkr, "j" wkr, "k" vkr, "l" vkr, "ĺ" vkr, "ľ" vkr, "m" vkr, "n" vkr, "ň" vkr, "o" wkr, "ó" wkr, "p" vkr, "q" wkr, "r" vkr, "ř" vkr, "s" wkr, "š" vkr, "u" vkr, "ů" vkr, "ú" vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "y" vkr, chars.latin_Yacute: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" wkr, ":" vkr, ";" vkr;
+ligtable "Z": chars.latin_Zcaron: "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr;
+
+
+ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash;
+ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash if medieval:, "4" kern -1u# fi;
+ligtable ".": "'" ukr, "`" ukr;
+ligtable ",": "j" kern .5u#, "J" kern 1.5u#, "'" ukr, "`" ukr;
+ligtable "'": "a" kern -3u#, "á" kern -3u#, "A" wkr, chars.latin_Aacute wkr if medieval:, "4" wkr, "5" mkr, "9" vkr fi, "/" wkr;
+ligtable "`": "a" kern -3u#, "á" kern -3u#, "A" wkr if medieval:, "4" wkr fi, "/" kern -3u#;
+ligtable chars.sign_czech_quotes: "c" vkr, "č" vkr, "g" vkr, "j" kern 2u#, "o" vkr, "ó" vkr, "u" mkr, "ů" mkr, "ú" mkr, "v" wkr, "w" vkr, "y" wkr, "ý" wkr, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "T" wkr, chars.latin_Tcaron wkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr;
+ligtable "(": "a" wkr, "á" wkr, "c" mkr, "č" mkr, "g" mkr, "j" kern u#, "o" mkr, "ó" mkr, "q" mkr, "y" mkr, "ý" mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" kern .75u#, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "0" vkr;
+ligtable ")": "J" kern 1u#;
+ligtable "[": "a" vkr, "á" vkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "A" vkr;
+ligtable "/": "a" wkr, "A" wkr, chars.latin_Aacute wkr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr;
+ligtable chars.polish_cross: "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#);
+ligtable "!": "`" =: chars.sign_spanish_shriek;
+ligtable "?": "`" =: chars.sign_spanish_query;
+
+if (not monofig) and medieval:
+ ligtable "0": "/" vkr, "." mkr, "," mkr, chars.sign_czech_closing_quotes mkr;
+ ligtable "1": chars.sign_endash kern -2u#, chars.sign_czech_closing_quotes vkr;
+ ligtable "2": chars.sign_czech_closing_quotes mkr;
+ ligtable "3": "." mkr, chars.sign_czech_closing_quotes mkr;
+ ligtable "4": chars.sign_endash kern -1u#, "." mkr, chars.sign_czech_closing_quotes mkr;
+ ligtable "5": "." mkr;
+ ligtable "6": "/" mkr;
+ ligtable "7": "-" kern -u#, "." kern -3.5u#, "," kern -3.5u#, "/" ukr;
+ ligtable "8": "/" mkr;
+ ligtable "9": chars.sign_czech_closing_quotes mkr;
+fi
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
new file mode 100644
index 00000000000..048a9731f39
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
@@ -0,0 +1,102 @@
+%Boisik Roman ligtables
+
+def mkr:= kern -.5u# enddef;
+def vkr:= kern -u# enddef;
+def xkr:= kern -1.5u# enddef;
+def ukr:= kern -2u# enddef;
+def wkr:= kern -2.25u# enddef;
+def kkr:= kern u# enddef;
+ligtable "a": "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" vkr, "m" mkr, "n" mkr, chars.latin_ncaron mkr, "p" vkr, "q" mkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" vkr, chars.latin_tcaron vkr, "u" kern -.6u#, chars.latin_uacute kern -.6u#, chars.latin_uring kern -.6u#, "v" vkr, "w" vkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "z" mkr, chars.latin_zcaron mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" xkr, "O" mkr, chars.latin_Oacute mkr, "T" kern -4u#, chars.latin_Tcaron kern -4u#, "U" xkr, chars.latin_Uring xkr, chars.latin_Uacute xkr, "V" kern -2.5u#, "W" ukr, "X" vkr, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr;
+ligtable chars.latin_aacute: "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" vkr, "m" mkr, "n" mkr, chars.latin_ncaron mkr, "p" vkr, "q" mkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" vkr, chars.latin_tcaron vkr, "u" kern -.6u#, chars.latin_uacute kern -.6u#, chars.latin_uring kern -.6u#, "v" vkr, "w" vkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "z" mkr, chars.latin_zcaron mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" xkr, "O" mkr, chars.latin_Oacute mkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "U" xkr, "V" xkr, "W" xkr, "X" vkr, "Y" wkr, chars.latin_Yacute wkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes mkr;
+ligtable "b": "b" mkr, "j" mkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, chars.latin_yacute mkr, "A" mkr, chars.latin_Aacute mkr, "T" ukr, chars.latin_Tcaron ukr, "V" ukr, "W" kern -1.75u#, "X" xkr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "," mkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr;
+ligtable "c": "A" vkr, chars.latin_Aacute vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" xkr, "W" vkr, "X" vkr, "Y" xkr, chars.latin_Yacute xkr, "," mkr, "'" ukr, ")" vkr;
+ligtable chars.latin_ccaron: "A" vkr, chars.latin_Aacute vkr, "T" vkr, chars.latin_Tcaron vkr, "V" mkr, "W" mkr, "X" vkr, "Y" mkr, chars.latin_Yacute mkr, "," mkr, "'" mkr, ")" mkr;
+ligtable "d": "c" mkr, chars.latin_ccaron mkr, "d" vkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "o" vkr, chars.latin_oacute vkr, "t" mkr, chars.latin_tcaron mkr, "y" mkr;
+ligtable chars.latin_dcaron: "c" mkr, chars.latin_ccaron mkr, "d" vkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, chars.latin_iacute kern .5u#, "o" vkr, chars.latin_oacute vkr, chars.latin_scaron kern u#, "t" mkr, chars.latin_tcaron mkr;
+ligtable "e": "a" kern .5u#, chars.latin_aacute kern .5u#, "y" vkr, chars.latin_yacute vkr, "T" kern -3.5u#, "," mkr, "'" vkr, ")" vkr;
+ligtable chars.latin_eacute: chars.latin_ecaron: "a" kern .5u#, chars.latin_aacute kern .5u#, "y" vkr, chars.latin_yacute vkr, "," mkr, ")" mkr;
+ligtable "f": "a" mkr, chars.latin_aacute mkr, "b" kern .75u#, "c" mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, "f" =: chars.latin_ff, "g" mkr, "h" kkr, "i" =: chars.latin_fi, "k" kkr, "l" =: chars.latin_fl, "o" mkr, chars.latin_oacute mkr, "q" mkr, chars.latin_scaron kkr, "A" vkr, chars.latin_Aacute vkr, "B" kkr, "D" kkr, chars.latin_Dcaron kkr, "E" kkr, chars.latin_Eacute kkr, chars.latin_Ecaron kkr, "F" kkr, "H" kkr, "I" kkr, chars.latin_Iacute kkr, "K" kkr, "L" kkr, "M" kkr, "N" kkr, chars.latin_Ncaron kkr, "P" kkr, "R" kkr, chars.latin_Racute kkr, chars.latin_Rcaron kkr, "T" kkr, chars.latin_Tcaron kkr, "U" kkr, chars.latin_Uacute kkr, chars.latin_Uring kkr, "V" kkr, "W" kkr, "X" kkr, "Y" kkr, chars.latin_Yacute kkr, "Z" kern .5u#, chars.latin_Zcaron kern .5u#, "," mkr, "'" kkr, "]" kern .5u#, "`" kern u#, chars.sign_czech_closing_quotes kern u#;
+ligtable chars.latin_ff: "a" mkr, chars.latin_aacute mkr, "b" kern .75u#, "c" mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, "f" =: chars.latin_ff, "g" mkr, "h" kkr, "i" =: chars.latin_ffi, "k" kkr, "l" =: chars.latin_ffl, "o" mkr, chars.latin_oacute mkr, "q" mkr, chars.latin_scaron kkr, "A" vkr, chars.latin_Aacute vkr, "B" kkr, "D" kkr, chars.latin_Dcaron kkr, "E" kkr, chars.latin_Eacute kkr, chars.latin_Ecaron kkr, "F" kkr, "H" kkr, "I" kkr, chars.latin_Iacute kkr, "K" kkr, "L" kkr, "M" kkr, "N" kkr, chars.latin_Ncaron kkr, "P" kkr, "R" kkr, chars.latin_Racute kkr, chars.latin_Rcaron kkr, "T" kkr, chars.latin_Tcaron kkr, "U" kkr, chars.latin_Uacute kkr, chars.latin_Uring kkr, "V" kkr, "W" kkr, "X" kkr, "Y" kkr, chars.latin_Yacute kkr, "Z" kern .5u#, chars.latin_Zcaron kern .5u#, "," mkr, "'" kkr;
+ligtable "g": "a" mkr, chars.latin_aacute mkr, chars.latin_agrave mkr, "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "h" mkr, "j" kkr, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "A" vkr, chars.latin_Aacute vkr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 1.5u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" vkr, chars.latin_Scaron vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" ukr, "W" vkr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr;
+ligtable "h": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, chars.latin_oe mkr, "j" vkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "O" mkr, chars.latin_Oacute mkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr, chars.sign_czech_closing_quotes vkr;
+ligtable "i": chars.latin_iacute: chars.latin_fi: chars.latin_ffi: "c" vkr, chars.latin_ccaron vkr, "d" mkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, "g" vkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "x" mkr, "A" mkr, chars.latin_Aacute mkr, chars.latin_Agrave mkr, "J" xkr;
+ligtable "j": "j" kern 1.5u#, "t" mkr, chars.latin_tcaron mkr, "A" mkr, chars.latin_Agrave mkr, chars.latin_Aacute mkr, "J" kern 1.5u#, chars.sign_czech_closing_quotes kern .5u#;
+ligtable "k": "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "o" vkr, chars.latin_oumlaut vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, "q" vkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uring vkr, chars.latin_Uacute vkr, "V" kern -2.5u#, "W" ukr, "X" mkr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" wkr, ")" ukr, chars.sign_czech_closing_quotes vkr;
+ligtable "l": chars.latin_fl: chars.latin_ffl: chars.latin_flacute: chars.latin_flcaron: "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, "g" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "m" mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, chars.latin_oumlaut vkr, "q" vkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "J" xkr, "V" vkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "m": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr, "m" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "n": chars.latin_ncaron: "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flcaron mkr, chars.latin_flacute mkr, "g" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "l" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "p" kern -.25u#, "q" mkr, "r" kern -.25u#, chars.latin_rcaron kern -.25u#, chars.latin_racute kern -.25u#, "t" vkr, chars.latin_tcaron vkr, "u" kern -.25u#, chars.latin_uring kern -.25u#, chars.latin_uacute kern -.25u#, chars.latin_uumlaut kern -.25u#, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#, "T" kern -3.2u#, chars.latin_Tcaron kern -3.2u#, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr, ")" vkr, chars.sign_czech_closing_quotes vkr;
+ligtable "o": "b" mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oumlaut vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, "p" mkr, "q" vkr, "r" mkr, chars.latin_rcaron mkr, chars.latin_racute mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uumlaut mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" mkr, "y" vkr, chars.latin_yacute vkr, "A" vkr, chars.latin_Aacute vkr, "J" vkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr;
+ligtable chars.latin_oacute: chars.latin_ocircumflex: chars.latin_oumlaut: "b" mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oumlaut vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, "p" mkr, "q" vkr, "r" mkr, chars.latin_rcaron mkr, chars.latin_racute mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uumlaut mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" mkr, "y" vkr, chars.latin_yacute vkr, "A" vkr, chars.latin_Aacute vkr, "J" vkr, "T" vkr, chars.latin_Tcaron vkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" ukr, "Y" vkr, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, chars.sign_czech_closing_quotes vkr;
+ligtable "p": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" kern -.25u#, chars.latin_ff kern -.25u#, chars.latin_fi kern -.25u#, chars.latin_fl kern -.25u#, chars.latin_ffi kern -.25u#, chars.latin_ffl kern -.25u#, chars.latin_flacute kern -.25u#, chars.latin_flcaron kern -.25u#, "j" mkr, "l" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "t" mkr, chars.latin_tcaron mkr, "v" vkr, "w" mkr, "y" vkr, chars.latin_yacute vkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" xkr, chars.latin_Aacute xkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" kern -2.75u#, "W" ukr, "X" vkr, "Y" kern -2.75u#, chars.latin_Yacute kern -2.75u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr;
+ligtable "q": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" kkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, "q" mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" mkr, chars.latin_tcaron mkr, "A" vkr, chars.latin_Aacute vkr, "J" kkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr;
+ligtable "r": "a" vkr, chars.latin_aacute vkr, chars.latin_agrave vkr, "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flcaron mkr, chars.latin_flacute mkr, "g" kern -.75u#, "h" mkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "k" mkr, "l" vkr, "m" kern -.25u#, "n" kern -.25u#, chars.latin_ncaron kern -.25u#, "o" vkr, chars.latin_oacute vkr, chars.latin_oumlaut vkr, chars.latin_ocircumflex vkr, "p" kern -.25u#, "q" vkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron vkr, "t" mkr, chars.latin_tcaron mkr, "v" mkr, "w" mkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "A" ukr, chars.latin_Aacute ukr, chars.latin_Agrave ukr, "B" vkr, "D" vkr, chars.latin_Dcaron vkr, "E" vkr, chars.latin_Ecaron vkr, chars.latin_Eacute vkr, "F" vkr, "H" vkr, "I" vkr, chars.latin_Iacute vkr, "J" xkr, "K" vkr, "L" vkr, "M" vkr, "N" vkr, chars.latin_Ncaron vkr, "P" vkr, "R" vkr, chars.latin_Racute vkr, chars.latin_Rcaron vkr, "S" vkr, chars.latin_Scaron vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uring vkr, chars.latin_Uacute vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," xkr, "'" ukr, ")" vkr;
+ligtable chars.latin_rcaron: chars.latin_racute: "a" vkr, chars.latin_aacute vkr, chars.latin_agrave vkr, "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flcaron mkr, chars.latin_flacute mkr, "g" kern -.75u#, "h" mkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "k" mkr, "l" vkr, "m" kern -.25u#, "n" kern -.25u#, chars.latin_ncaron kern -.25u#, "o" vkr, chars.latin_oacute vkr, chars.latin_oumlaut vkr, chars.latin_ocircumflex vkr, "p" kern -.25u#, "q" vkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron vkr, "t" mkr, chars.latin_tcaron mkr, "v" mkr, "w" mkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "A" ukr, chars.latin_Aacute ukr, chars.latin_Agrave ukr, "B" vkr, "D" vkr, chars.latin_Dcaron vkr, "E" vkr, chars.latin_Ecaron vkr, chars.latin_Eacute vkr, "F" vkr, "H" vkr, "I" vkr, chars.latin_Iacute vkr, "J" xkr, "K" vkr, "L" vkr, "M" vkr, "N" vkr, chars.latin_Ncaron vkr, "P" vkr, "R" vkr, chars.latin_Racute vkr, chars.latin_Rcaron vkr, "S" vkr, chars.latin_Scaron vkr, "T" kern -u#, chars.latin_Tcaron kern -u#, "U" vkr, chars.latin_Uring vkr, chars.latin_Uacute vkr, "V" kern -1.5u#, "W" vkr, "X" kern -1.5u#, "Y" kern -1.5u#, chars.latin_Yacute kern -1.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," xkr, "'" ukr, ")" vkr;
+ligtable "s": "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" mkr, "k" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" kern -.75u#, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" vkr, chars.latin_Agrave vkr, chars.latin_Aacute vkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" kern -2.5u#, "W" ukr, "X" kern -1.25u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr;
+ligtable chars.latin_scaron: "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" mkr, "k" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" kern -.75u#, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" vkr, chars.latin_Agrave vkr, chars.latin_Aacute vkr, "J" vkr, "T" kern -u#, chars.latin_Tcaron kern -u#, "V" kern -u#, "W" mkr, "X" kern -1.25u#, "Y" kern -u#, chars.latin_Yacute kern -u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, ")" vkr;
+ligtable "t": "c" mkr, chars.latin_tcaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "v" mkr, "J" vkr, "T" xkr, chars.latin_Tcaron xkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "," mkr, ")" mkr;
+ligtable chars.latin_tcaron: "c" mkr, chars.latin_tcaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "J" vkr, "T" mkr, chars.latin_Tcaron mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "," mkr, ")" mkr;
+ligtable "u": chars.latin_uring: "j" vkr, "t" kern -.3u#, chars.latin_tcaron kern -.3u#, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "'" ukr, ")" mkr;
+ligtable chars.latin_uumlaut: "j" vkr, "t" kern -.3u#, chars.latin_tcaron kern -.3u#, "J" vkr, "T" kern -u#, chars.latin_Tcaron kern -3u#, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr, "'" vkr, ")" mkr;
+ligtable chars.latin_uacute: "j" vkr, "t" kern -.3u#, chars.latin_tcaron kern -.3u#, "J" vkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "'" ukr, ")" mkr;
+ligtable "v": "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "y" mkr, chars.latin_yacute mkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" ukr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," kern -2.5u#, "." kern -2.5u#, "'" ukr, ")" ukr, "/" vkr;
+ligtable "w": "a" mkr, chars.latin_aacute mkr, chars.latin_agrave mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "g" mkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, "q" mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" kern -1.25u#, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" ukr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," kern -2.5u#, "." kern -2.5u#, "'" ukr, ")" ukr, "/" vkr;
+ligtable "x": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "j" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" mkr, chars.latin_tcaron mkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "'" ukr, ")" vkr;
+ligtable "y": "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "g" mkr, "l" mkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" mkr, chars.latin_tcaron mkr, "z" mkr, chars.latin_zcaron mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" kern -1.25u#, "S" mkr, chars.latin_Scaron mkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" xkr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," ukr, "." ukr, "'" ukr, ")" ukr, "/" vkr;
+ligtable chars.latin_yacute: "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "g" mkr, "l" mkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "z" mkr, chars.latin_zcaron mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" kern -1.25u#, "S" mkr, chars.latin_Scaron mkr, "T" kern -1.5u#, chars.latin_Tcaron kern -1.5u#, "V" vkr, "W" mkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" vkr, chars.latin_Zcaron vkr, "," ukr, "." ukr, "'" ukr, ")" ukr, "/" vkr;
+ligtable "z": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "j" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, "q" mkr, "t" mkr, chars.latin_tcaron mkr, "A" mkr, chars.latin_Aacute mkr, chars.latin_Agrave mkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" mkr, chars.latin_Zcaron mkr, "'" ukr, ")" vkr;
+ligtable chars.latin_zcaron: "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "j" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, "q" mkr, "t" mkr, chars.latin_tcaron mkr, "A" mkr, chars.latin_Aacute mkr, chars.latin_Agrave mkr, "J" vkr, "T" kern -u#, chars.latin_Tcaron kern -u#, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "Z" mkr, chars.latin_Zcaron mkr, "'" ukr, ")" vkr;
+ligtable "A": chars.latin_Aacute: "a" mkr, chars.latin_aacute mkr, "b" mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr,"g" mkr, "i" mkr, chars.latin_iacute mkr, "j" ukr, "o" vkr, chars.latin_oacute vkr, "p" mkr, "q" vkr, "s" mkr, chars.latin_scaron mkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uacute vkr, ")" vkr, chars.latin_uring vkr, "v" kern -3u#, "w" kern -2.8u#, "y" kern -3u#, chars.latin_yacute kern -3u#, "z" mkr, chars.latin_zcaron mkr, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "'" wkr, "`" wkr, chars.sign_czech_closing_quotes wkr;
+ligtable "B": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" mkr, chars.latin_tcaron mkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, chars.latin_yacute mkr, "z" mkr, chars.latin_zcaron mkr, "A" vkr, chars.latin_Aacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_O mkr, "Q" mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr;
+ligtable "C": chars.latin_Ccaron: "j" kern -.25u#, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "A" mkr, chars.latin_Aacute mkr, "J" vkr;
+ligtable "D": chars.latin_Dcaron: "A" ukr, chars.latin_Aacute ukr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" xkr, chars.latin_Zcaron xkr, "," xkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "E": chars.latin_Ecaron: chars.latin_Eacute: "t" vkr, chars.latin_tcaron vkr, "v" xkr, "w" xkr, "y" xkr, chars.latin_yacute vkr, "z" mkr, "A" vkr, chars.latin_Aacute vkr, "J" mkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" mkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Z mkr, "'" mkr;
+ligtable "F": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron xkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron xkr, "g" ukr, "i" mkr, chars.latin_iacute mkr, "j" mkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, chars.latin_racute vkr, "s" ukr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" xkr, "w" xkr, "x" xkr, "y" xkr, chars.latin_yacute xkr, "z" xkr, chars.latin_zcaron vkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -2.5u#, ":" vkr, ";" vkr;
+ligtable "G": "j" mkr, "t" mkr, chars.latin_tcaron mkr, "v" vkr, "w" vkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "A" xkr, chars.latin_Aacute xkr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" xkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Zcaron mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "H": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uring mkr, chars.latin_uacute mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr;
+ligtable "I": chars.latin_Iacute: "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr;
+ligtable "J": "a" vkr, chars.latin_aacute vkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, "g" vkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" vkr, chars.latin_oacute vkr, "p" vkr, "q" vkr, "r" vkr, chars.latin_racute vkr, chars.latin_rcaron mkr, "s" vkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" vkr, chars.latin_zcaron vkr, "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," ukr;
+ligtable "K": "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "j" vkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" kern -2.5u#, "w" kern -2.5u#, "y" kern -2.5u#, chars.latin_yacute kern -2.5u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" vkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "T" vkr, chars.latin_Tcaron vkr, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr, ")" mkr, "'" xkr, "`" vkr, chars.sign_czech_closing_quotes xkr;
+ligtable "L": "j" vkr, "t" vkr, chars.latin_tcaron vkr, "v" ukr, "w" xkr, "y" ukr, chars.latin_yacute ukr, "J" mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "V" kern -3u#, "W" kern -2.5u#, "Y" kern -3u#, chars.latin_Yacute kern -3u#, ")" mkr, chars.sign_czech_closing_quotes vkr;
+ligtable "M": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uring mkr, chars.latin_uacute mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#;
+ligtable "N": chars.latin_Ncaron: "a" mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "g" mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "z" mkr, chars.latin_zcaron mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," vkr;
+ligtable "O": chars.latin_Oacute: "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Eacute mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" vkr, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," vkr, "." vkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "P": "a" mkr, chars.latin_aacute mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "g" vkr, "j" mkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "s" vkr, chars.latin_scaron vkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "S" mkr, chars.latin_Scaron mkr, "V" mkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, "," kern -2.5u#, "." kern -2.5u#, "/" ukr;
+ligtable "Q": "g" kkr, "j" kern 2u#, "p" kern .5u#, "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, chars.latin_Eacute mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 4u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Racute mkr, chars.latin_Rcaron mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," kern .75u#, "]" kern u#, "'" mkr, chars.sign_czech_closing_quotes mkr;
+ligtable "R": chars.latin_Rcaron: chars.latin_Racute: "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "j" mkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" kern -.75u#, chars.latin_uring kern -.75u#, chars.latin_uacute kern -.75u#, "v" xkr, "w" xkr, "y" xkr, chars.latin_yacute xkr, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" xkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, chars.sign_czech_closing_quotes xkr;
+ligtable "S": chars.latin_Scaron: "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" xkr, "w" vkr, "x" vkr, "y" xkr, chars.latin_yacute xkr, "z" mkr, chars.latin_zcaron mkr, "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," mkr, "." mkr;
+ligtable "T": chars.latin_Tcaron: "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" ukr, "j" mkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, chars.latin_racute vkr, "s" ukr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" vkr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -3u#, "." kern -3u#, ":" vkr, ";" vkr, "/" ukr;
+ligtable "U": chars.latin_Uacute: chars.latin_Uring: "a" vkr, chars.latin_aacute vkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron mkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, "g" vkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" vkr, chars.latin_oacute vkr, "p" vkr, "q" vkr, "r" vkr, chars.latin_racute vkr, "s" vkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uring vkr, chars.latin_uacute vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" vkr, chars.latin_zcaron mkr, "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," xkr, "." xkr;
+ligtable "V": "a" ukr, chars.latin_aacute ukr, "c" ukr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" ukr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "m" xkr, "n" xkr, chars.latin_ncaron xkr, "o" ukr, chars.latin_oacute ukr, "p" xkr, "q" ukr, "r" xkr, chars.latin_racute xkr, "s" ukr, "t" ukr, chars.latin_tcaron ukr, "u" xkr, chars.latin_uacute xkr, chars.latin_uring xkr, "v" xkr, "w" xkr, "x" xkr, "y" xkr, chars.latin_yacute xkr, "z" ukr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, ":" vkr, ";" vkr, "/" wkr;
+ligtable "W": "a" ukr, chars.latin_aacute ukr, "c" ukr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" ukr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "m" xkr, "n" xkr, chars.latin_ncaron xkr, "o" ukr, chars.latin_oacute ukr, "p" xkr, "q" ukr, "r" xkr, chars.latin_racute xkr, "s" ukr, "t" ukr, chars.latin_tcaron ukr, "u" xkr, chars.latin_uacute xkr, chars.latin_uring xkr, "v" xkr, "w" xkr, "x" xkr, "y" xkr, chars.latin_yacute xkr, "z" ukr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3u#, "." kern -3u#, "/" wkr, ":" vkr, ";" vkr;
+ligtable "X": "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "g" mkr, "j" mkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "t" vkr, chars.latin_tcaron vkr, "u" vkr, chars.latin_uring vkr, chars.latin_uacute vkr, "v" wkr, "w" wkr, "y" wkr, chars.latin_yacute wkr, "z" mkr, chars.latin_zcaron mkr, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" mkr, chars.latin_Scaron mkr;
+ligtable "Y": chars.latin_Yacute: "a" wkr, chars.latin_aacute wkr, "c" wkr, chars.latin_ccaron vkr, "d" wkr, chars.latin_dcaron wkr, "e" wkr, chars.latin_eacute wkr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" wkr, "i" mkr, chars.latin_iacute vkr, "j" vkr, "m" ukr, "n" ukr, chars.latin_ncaron vkr, "o" wkr, chars.latin_oacute wkr, "p" ukr, "q" wkr, "r" ukr, chars.latin_racute ukr, chars.latin_rcaron mkr, "s" wkr, "t" wkr, chars.latin_tcaron wkr, "u" ukr, chars.latin_uacute ukr, chars.latin_uring vkr, "v" ukr, "w" ukr, "x" ukr, "y" ukr, chars.latin_yacute ukr, "z" wkr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" wkr, ":" vkr, ";" vkr;
+ligtable "Z": chars.latin_Zcaron: "j" mkr, "t" mkr, chars.latin_tcaron mkr, "u" mkr, chars.latin_uring mkr, chars.latin_uacute mkr, "v" xkr, "w" xkr, "y" xkr, chars.latin_yacute xkr, "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr;
+
+ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash;
+ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash if medieval:, "4" kern -1u# fi;
+ligtable ".": "'" ukr, "`" ukr;
+ligtable ",": "j" kern .5u#, "J" kern 1.5u#, "'" ukr, "`" ukr;
+ligtable "'": "A" wkr, chars.latin_Aacute wkr, "a" mkr, "c" vkr, "d" vkr, "e" vkr, "m" mkr, "n" mkr, "o" vkr, "q" vkr, "s" vkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, "z" mkr if medieval:, "4" wkr, "5" mkr, "9" vkr fi, "/" wkr;
+ligtable "`": "A" wkr if medieval:, "4" wkr fi, "/" kern -3u#;
+ligtable chars.sign_czech_quotes: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "T" wkr, chars.latin_Tcaron wkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "j" kern .5u#, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr;
+ligtable "(": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_ecaron vkr, chars.latin_eacute ukr, "f" ukr, chars.latin_ff ukr, chars.latin_fi ukr, chars.latin_fl ukr, chars.latin_flacute ukr, chars.latin_flcaron ukr, chars.latin_ffi ukr, chars.latin_ffl ukr, "i" mkr, chars.latin_iacute mkr, "j" kern 1.5u#, "m" vkr, "n" vkr, chars.latin_ncaron mkr, "o" ukr, chars.latin_oacute ukr, chars.latin_oumlaut ukr, chars.latin_ocircumflex ukr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" ukr, chars.latin_uacute ukr, chars.latin_uring ukr, "v" ukr, "w" ukr, "x" vkr, "y" mkr, chars.latin_yacute mkr, "z" vkr, chars.latin_zcaron mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" kern .75u#, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "0" vkr;
+ligtable ")": "J" kern 1u#;
+ligtable "[": "A" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, "q" mkr;
+ligtable "/": "A" wkr, chars.latin_Aacute wkr, "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "q" vkr, "o" ukr, chars.latin_oacute ukr, "q" ukr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr;
+ligtable chars.polish_cross: "l" kern -if monospace: 9u# else: 6u# fi -2letter_fit#, "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#);
+ligtable "!": "`" =: chars.sign_spanish_shriek;
+ligtable "?": "`" =: chars.sign_spanish_query;
+
+if (not monofig) and medieval:
+ ligtable "0": "/" vkr, "." mkr, "," mkr, chars.sign_czech_closing_quotes mkr;
+ ligtable "1": chars.sign_endash kern -2u#, chars.sign_czech_closing_quotes vkr;
+ ligtable "2": chars.sign_czech_closing_quotes mkr;
+ ligtable "3": "." mkr, chars.sign_czech_closing_quotes mkr;
+ ligtable "4": chars.sign_endash kern -1u#, "." mkr, chars.sign_czech_closing_quotes mkr;
+ ligtable "5": "." mkr;
+ ligtable "6": "/" mkr;
+ ligtable "7": "-" kern -u#, "." kern -3.5u#, "," kern -3.5u#, "/" ukr;
+ ligtable "8": "/" mkr;
+ ligtable "9": chars.sign_czech_closing_quotes mkr;
+fi
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf
new file mode 100644
index 00000000000..0f7b9dc7c2c
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf
@@ -0,0 +1,258 @@
+%Boisik list for text fonts in T1 encoding (unsupported)
+
+chars.latin_grave:=0;
+chars.latin_acute:=1;
+chars.latin_circumflex:=2;
+chars.latin_tilde:=3;
+chars.latin_umlaut:=4;
+chars.latin_hungarian_umlaut:=5;
+chars.latin_ring:=6;
+chars.latin_hacek:=7;
+chars.latin_breve:=8;
+chars.latin_macron:=9;
+chars.latin_dot_above:=10;
+chars.latin_cedilla:=11;
+chars.latin_ogonek:=12;
+chars.sign_czech_quote:=13;
+chars.sign_french_quote_left:=14;
+chars.sign_french_quote_right:=15;
+chars.sign_czech_closing_quotes:=16;
+chars.sign_quotes:=17;
+chars.sign_czech_quotes:=18;
+chars.sign_french_quotes_left:=19;
+chars.sign_french_quotes_right:=20;
+chars.sign_endash:=21;
+chars.sign_emdash:=22;
+chars.sign_compound_word:=23;
+chars.sign_zero_permile_sign:=24;
+chars.latin_dotless_i:=25;
+chars.latin_dotless_j:=26;
+chars.latin_ff:=27;
+chars.latin_fi:=28;
+chars.latin_fl:=29;
+chars.latin_ffi:=30;
+chars.latin_ffl:=31;
+chars.sign_blank_space:=32;
+chars.sign_exclamation:=33;
+chars.sign_straight_quotes:=34;
+chars.sign_hash:=35;
+chars.sign_dolar:=36;
+chars.sign_percent:=37;
+chars.sign_ampersand:=38;
+chars.sign_aposthrope:=39;
+chars.sign_parent_left:=40;
+chars.sign_parent_right:=41;
+chars.sign_asterisk:=42;
+chars.sign_plus:=43;
+chars.sign_comma:=44;
+chars.sign_hyphen:=45;
+chars.sign_period:=46;
+chars.sign_slash:=47;
+chars.numeral_zero:=48;
+chars.numeral_one:=49;
+chars.numeral_two:=50;
+chars.numeral_three:=51;
+chars.numeral_four:=52;
+chars.numeral_five:=53;
+chars.numeral_six:=54;
+chars.numeral_seven:=55;
+chars.numeral_eight:=56;
+chars.numeral_nine:=57;
+chars.sign_colon:=58;
+chars.sign_semicolon:=59;
+chars.math_less:=60;
+chars.sign_equals:=61;
+chars.math_greater:=62;
+chars.sign_query:=63;
+chars.sign_at:=64;
+chars.latin_A:=65;
+chars.latin_B:=66;
+chars.latin_C:=67;
+chars.latin_D:=68;
+chars.latin_E:=69;
+chars.latin_F:=70;
+chars.latin_G:=71;
+chars.latin_H:=72;
+chars.latin_I:=73;
+chars.latin_J:=74;
+chars.latin_K:=75;
+chars.latin_L:=76;
+chars.latin_M:=77;
+chars.latin_N:=78;
+chars.latin_O:=79;
+chars.latin_P:=80;
+chars.latin_Q:=81;
+chars.latin_R:=82;
+chars.latin_S:=83;
+chars.latin_T:=84;
+chars.latin_U:=85;
+chars.latin_V:=86;
+chars.latin_W:=87;
+chars.latin_X:=88;
+chars.latin_Y:=89;
+chars.latin_Z:=90;
+chars.sign_bracket_left:=91;
+chars.sign_backslash:=92;
+chars.sign_bracket_right:=93;
+chars.sign_circumflex:=94;
+chars.sign_underbar:=95;
+chars.sign_aposthrope_reverse:=96;
+chars.latin_a:=97;
+chars.latin_b:=98;
+chars.latin_c:=99;
+chars.latin_d:=100;
+chars.latin_e:=101;
+chars.latin_f:=102;
+chars.latin_g:=103;
+chars.latin_h:=104;
+chars.latin_i:=105;
+chars.latin_j:=106;
+chars.latin_k:=107;
+chars.latin_l:=108;
+chars.latin_m:=109;
+chars.latin_n:=110;
+chars.latin_o:=111;
+chars.latin_p:=112;
+chars.latin_q:=113;
+chars.latin_r:=114;
+chars.latin_s:=115;
+chars.latin_t:=116;
+chars.latin_u:=117;
+chars.latin_v:=118;
+chars.latin_w:=119;
+chars.latin_x:=120;
+chars.latin_y:=121;
+chars.latin_z:=122;
+chars.math_curly_brace_left:=123;
+chars.sign_vertical:=124;
+chars.math_curly_brace_right:=125;
+chars.sign_tilde:=126;
+chars.sign_hyphenchar:=127;
+chars.latin_Abreve:=128;
+chars.latin_Aogonek:=129;
+chars.latin_Cacute:=130;
+chars.latin_Ccaron:=131;
+chars.latin_Dcaron:=132;
+chars.latin_Ecaron:=133;
+chars.latin_Eogonek:=134;
+chars.latin_Gbreve:=135;
+chars.latin_Lacute:=136;
+chars.latin_Lcaron:=137;
+chars.latin_Lslash:=138;
+chars.latin_Nacute:=139;
+chars.latin_Ncaron:=140;
+chars.latin_Eng:=141;
+chars.latin_Ohumlaut:=142;
+chars.latin_Racute:=143;
+chars.latin_Rcaron:=144;
+chars.latin_Sacute:=145;
+chars.latin_Scaron:=146;
+chars.latin_Scedilla:=147;
+chars.latin_Tcaron:=148;
+chars.latin_Tcedilla:=149;
+chars.latin_Uhumlaut:=150;
+chars.latin_Uring:=151;
+chars.latin_Yumlaut:=152;
+chars.latin_Zacute:=153;
+chars.latin_Zcaron:=154;
+chars.latin_Zdotabove:=155;
+chars.latin_IJ:=156;
+chars.latin_Idotabove:=157;
+chars.latin_dstroke:=158;
+chars.math_section:=159;
+chars.latin_abreve:=160;
+chars.latin_aogonek:=161;
+chars.latin_cacute:=162;
+chars.latin_ccaron:=163;
+chars.latin_dcaron:=164;
+chars.latin_ecaron:=165;
+chars.latin_eogonek:=166;
+chars.latin_gbreve:=167;
+chars.latin_lacute:=168;
+chars.latin_lcaron:=169;
+chars.latin_lslash:=170;
+chars.latin_nacute:=171;
+chars.latin_ncaron:=172;
+chars.latin_eng:=173;
+chars.latin_ohumlaut:=174;
+chars.latin_racute:=175;
+chars.latin_rcaron:=176;
+chars.latin_sacute:=177;
+chars.latin_scaron:=178;
+chars.latin_scedilla:=179;
+chars.latin_tcaron:=180;
+chars.latin_tcedilla:=181;
+chars.latin_uhumlaut:=182;
+chars.latin_uring:=183;
+chars.latin_yumlaut:=184;
+chars.latin_zacute:=185;
+chars.latin_zcaron:=186;
+chars.latin_zdotabove:=187;
+chars.latin_ij:=188;
+chars.sign_spanish_shriek:=189;
+chars.sign_spanish_query:=190;
+chars.sign_pound:=191;
+chars.latin_Agrave:=192;
+chars.latin_Aacute:=193;
+chars.latin_Acircumflex:=194;
+chars.latin_Atilde:=195;
+chars.latin_Aumlaut:=196;
+chars.latin_Aring:=197;
+chars.latin_AE:=198;
+chars.latin_Ccedilla:=199;
+chars.latin_Egrave:=200;
+chars.latin_Eacute:=201;
+chars.latin_Ecircumflex:=202;
+chars.latin_Eumlaut:=203;
+chars.latin_Igrave:=204;
+chars.latin_Iacute:=205;
+chars.latin_Icircumflex:=206;
+chars.latin_Iumlaut:=207;
+chars.latin_Dstroke:=208;
+chars.latin_Ntilde:=209;
+chars.latin_Ograve:=210;
+chars.latin_Oacute:=211;
+chars.latin_Ocircumflex:=212;
+chars.latin_Otilde:=213;
+chars.latin_Oumlaut:=214;
+chars.latin_OE:=215;
+chars.latin_Oslash:=216;
+chars.latin_Ugrave:=217;
+chars.latin_Uacute:=218;
+chars.latin_Ucircumflex:=219;
+chars.latin_Uumlaut:=220;
+chars.latin_Yacute:=221;
+chars.latin_Thorn:=222;
+chars.latin_SS:=223;
+chars.latin_agrave:=224;
+chars.latin_aacute:=225;
+chars.latin_acircumflex:=226;
+chars.latin_atilde:=227;
+chars.latin_aumlaut:=228;
+chars.latin_aring:=229;
+chars.latin_ae:=230;
+chars.latin_ccedilla:=231;
+chars.latin_egrave:=232;
+chars.latin_eacute:=233;
+chars.latin_ecircumflex:=234;
+chars.latin_eumlaut:=235;
+chars.latin_igrave:=236;
+chars.latin_iacute:=237;
+chars.latin_icircumflex:=238;
+chars.latin_iumlaut:=239;
+chars.latin_eth:=240;
+chars.latin_ntilde:=241;
+chars.latin_ograve:=242;
+chars.latin_oacute:=243;
+chars.latin_ocircumflex:=244;
+chars.latin_otilde:=245;
+chars.latin_oumlaut:=246;
+chars.latin_oe:=247;
+chars.latin_oslash:=248;
+chars.latin_ugrave:=249;
+chars.latin_uacute:=250;
+chars.latin_ucircumflex:=251;
+chars.latin_uumlaut:=252;
+chars.latin_yacute:=253;
+chars.latin_thorn:=254;
+chars.latin_eszet:=255;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
new file mode 100644
index 00000000000..07ab2fabc82
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
@@ -0,0 +1,130 @@
+%Boisik list for text fonts in TS1 encoding (unsupported)
+
+chars.latin_grave_capital:=0;
+chars.latin_acute_capital:=1;
+chars.latin_circumflex_capital:=2;
+chars.latin_tilde_capital:=3;
+chars.latin_umlaut_capital:=4;
+chars.latin_hungarian_umlaut_capital:=5;
+chars.latin_ring_capital:=6;
+chars.latin_hacek_capital:=7;
+chars.latin_breve_capital:=8;
+chars.latin_macron_capital:=9;
+chars.latin_dot_above_capital:=10;
+chars.latin_cedilla_capital:=11;
+chars.latin_ogonek:=12;
+chars.sign_straight_quote_base:=13;
+chars.sign_straight_quotes_base:=18;
+chars.sign_twelvedash:=21;
+chars.sign_themdash:=22;
+chars.sign_compound_word_capital:=23;
+chars.arrow_left:=24;
+chars.arrow_right:=25;
+chars.latin_tie:=26;
+chars.latin_tie_capital:=27;
+chars.latin_inverted_breve:=28;
+chars.latin_inverted_breve_capital:=29;
+chars.sign_compound_word_asc:=31;
+chars.sign_blank_b:=32;
+chars.sign_dolar:=36;
+chars.sign_straight_quote:=39;
+chars.math_asterisk:=42;
+chars.sign_comma:=44;
+chars.sign_double_hyphen:=45;
+chars.sign_period:=46;
+chars.sign_slash_frac:=47;
+chars.numeral_zero:=48;
+chars.numeral_one:=49;
+chars.numeral_two:=50;
+chars.numeral_three:=51;
+chars.numeral_four:=52;
+chars.numeral_five:=53;
+chars.numeral_six:=54;
+chars.numeral_seven:=55;
+chars.numeral_eight:=56;
+chars.numeral_nine:=57;
+chars.math_angle_left:=60;
+chars.math_minus:=61;
+chars.math_angle_right:=62;
+chars.sign_Mho:=77;
+chars.math_circle_copy:=79;
+chars.sign_Ohm:=87;
+chars.sign_bracket_semantic_left:=91;
+chars.sign_bracket_semantic_right:=93;
+chars.arrow_up:=94;
+chars.arrow_down:=95;
+chars.sign_backprime:=96;
+chars.sign_born:=98;
+chars.sign_divorce:=99;
+chars.sign_died:=100;
+chars.sign_leaf:=108;
+chars.sign_marriage:=109;
+chars.sign_note:=110;
+chars.sign_tilde_low:=126;
+chars.sign_double_hyphenchar:=127;
+chars.sign_breve:=128;
+chars.sign_hacek:=129;
+chars.sign_prime_double:=130;
+chars.sign_backprime_double:=131;
+chars.math_dag:=132;
+chars.math_dagger:=133;
+chars.math_vertical_double:=134;
+chars.sign_permile:=135;
+chars.math_bullet:=136;
+chars.sign_centigrade:=137;
+chars.sign_dollar_old:=138;
+chars.sign_cent_old:=139;
+chars.latin_f:=140;
+chars.sign_cedi:=141;
+chars.sign_won:=142;
+chars.sign_naira:=143;
+chars.sign_guarani:=144;
+chars.sign_peso:=145;
+chars.sign_lira:=146;
+chars.sign_recipe:=147;
+chars.sign_interrobang:=148;
+chars.sign_gnaborretni :=149;
+chars.sign_dong:=150;
+chars.sign_trademark:=151;
+chars.sign_pertenthousand:=152;
+chars.sign_pilcrow:=153;
+chars.sign_baht:=154;
+chars.sign_numero:=155;
+chars.sign_abzueglich:=156;
+chars.sign_estimated:=157;
+chars.math_circle_op:=158;
+chars.sign_service:=159;
+chars.sign_bracket_quill_left:=160;
+chars.sign_bracket_quill_right:=161;
+chars.sign_cent:=162;
+chars.sign_pound:=163;
+chars.sign_currency:=164;
+chars.sign_yen:=165;
+chars.sign_broken_bar:=166;
+chars.math_section:=167;
+chars.latin_umlaut:=168;
+chars.sign_copyright:=169;
+chars.latin_a_feminine:=170;
+chars.sign_copyleft:=171;
+chars.math_logical_not:=172;
+chars.sign_published:=173;
+chars.sign_registered:=174;
+chars.latin_macron:=175;
+chars.sign_degree:=176;
+chars.math_plus_minus:=177;
+chars.superscript_numeral_two:=178;
+chars.superscript_numeral_three:=179;
+chars.sign_prime:=180;
+chars.text_greek_mu:=181;
+chars.sign_paragraph:=182;
+chars.sign_middle_dot:=183;
+chars.sign_reference:=184;
+chars.superscript_numeral_one:=185;
+chars.latin_o_masculine:=186;
+chars.sign_surd:=187;
+chars.fraction_one_quarter:=188;
+chars.fraction_one_half:=189;
+chars.fraction_three_quarters:=190;
+chars.sign_euro:=191;
+chars.math_times:=214;
+chars.math_division:=246;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
new file mode 100644
index 00000000000..e9dc43d6e4d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
@@ -0,0 +1,213 @@
+%Boisik list for extensible math font
+
+chars.math_sum_text:=80;
+chars.math_sum_disp:=88;
+chars.math_prod_text:=81;
+chars.math_prod_disp:=89;
+chars.math_coprod_text:=96;
+chars.math_coprod_disp:=97;
+chars.math_int_text:=82;
+chars.math_int_disp:=90;
+chars.math_oint_text:=72;
+chars.math_oint_disp:=73;
+chars.math_union_text:=83;
+chars.math_union_disp:=91;
+chars.math_intersection_text:=84;
+chars.math_intersection_disp:=92;
+chars.math_multiunion_text:=85;
+chars.math_multiunion_disp:=93;
+chars.math_squnion_text:=70;
+chars.math_squnion_disp:=71;
+chars.math_lattice_inf_text:=86;
+chars.math_lattice_inf_disp:=94;
+chars.math_lattice_sup_text:=87;
+chars.math_lattice_sup_disp:=95;
+chars.math_circle_dot_text:=74;
+chars.math_circle_dot_disp:=75;
+chars.math_circle_plus_text:=76;
+chars.math_circle_plus_disp:=77;
+chars.math_circle_times_text:=78;
+chars.math_circle_times_disp:=79;
+chars.math_curly_brace_left_big:=8;
+chars.math_curly_brace_left_Big:=110;
+chars.math_curly_brace_left_bigg:=26;
+chars.math_curly_brace_left_Bigg:=40;
+chars.math_curly_brace_left_top:=56;
+chars.math_curly_brace_left_bot:=58;
+chars.math_curly_brace_left_mid:=60;
+chars.math_curly_brace_left_ext:=62;
+chars.math_curly_brace_right_big:=9;
+chars.math_curly_brace_right_Big:=111;
+chars.math_curly_brace_right_bigg:=27;
+chars.math_curly_brace_right_Bigg:=41;
+chars.math_curly_brace_right_top:=57;
+chars.math_curly_brace_right_bot:=59;
+chars.math_curly_brace_right_mid:=61;
+chars.math_curly_brace_right_ext:=128;
+chars.math_parent_left_big:=0;
+chars.math_parent_left_Big:=16;
+chars.math_parent_left_bigg:=18;
+chars.math_parent_left_Bigg:=32;
+chars.math_parent_left_top:=48;
+chars.math_parent_left_bot:=64;
+chars.math_parent_left_mid:=66;
+chars.math_parent_right_big:=1;
+chars.math_parent_right_Big:=17;
+chars.math_parent_right_bigg:=19;
+chars.math_parent_right_Bigg:=33;
+chars.math_parent_right_top:=49;
+chars.math_parent_right_bot:=65;
+chars.math_parent_right_mid:=67;
+chars.math_accent_hat_wide:=98;
+chars.math_accent_hat_wider:=99;
+chars.math_accent_hat_widest:=100;
+chars.math_accent_tilde_wide:=101;
+chars.math_accent_tilde_wider:=102;
+chars.math_accent_tilde_widest:=103;
+chars.math_root_big:=112;
+chars.math_root_Big:=113;
+chars.math_root_bigg:=114;
+chars.math_root_Bigg:=115;
+chars.math_root_bottom:=116;
+chars.math_root_mid:=117;
+chars.math_root_top:=118;
+chars.arrow_double_ext_top:=126;
+chars.arrow_double_ext_mid:=119;
+chars.arrow_double_ext_bot:=127;
+chars.arrow_ext_top:=120;
+chars.arrow_ext_mid:=63;
+chars.arrow_ext_bot:=121;
+chars.math_vertical_ext:=12;
+chars.math_double_vertical_ext:=13;
+chars.math_slash_big:=14;
+chars.math_slash_Big:=46;
+chars.math_slash_bigg:=30;
+chars.math_slash_Bigg:=44;
+chars.math_backslash_big:=15;
+chars.math_backslash_Big:=47;
+chars.math_backslash_bigg:=31;
+chars.math_backslash_Bigg:=45;
+chars.math_angle_left_big:=10;
+chars.math_angle_left_Big:=68;
+chars.math_angle_left_bigg:=28;
+chars.math_angle_left_Bigg:=42;
+chars.math_angle_right_big:=11;
+chars.math_angle_right_Big:=69;
+chars.math_angle_right_bigg:=29;
+chars.math_angle_right_Bigg:=43;
+chars.math_bracket_left_big:=2;
+chars.math_bracket_left_Big:=104;
+chars.math_bracket_left_bigg:=20;
+chars.math_bracket_left_Bigg:=34;
+chars.math_bracket_left_top:=50;
+chars.math_bracket_left_mid:=54;
+chars.math_bracket_left_bot:=52;
+chars.math_bracket_right_big:=3;
+chars.math_bracket_right_Big:=105;
+chars.math_bracket_right_bigg:=21;
+chars.math_bracket_right_Bigg:=35;
+chars.math_bracket_right_top:=51;
+chars.math_bracket_right_mid:=55;
+chars.math_bracket_right_bot:=53;
+chars.math_ceiling_left_big:=6;
+chars.math_ceiling_left_Big:=108;
+chars.math_ceiling_left_bigg:=24;
+chars.math_ceiling_left_Bigg:=38;
+chars.math_ceiling_right_big:=7;
+chars.math_ceiling_right_Big:=109;
+chars.math_ceiling_right_bigg:=25;
+chars.math_ceiling_right_Bigg:=39;
+chars.math_floor_left_big:=4;
+chars.math_floor_left_Big:=106;
+chars.math_floor_left_bigg:=22;
+chars.math_floor_left_Bigg:=36;
+chars.math_floor_right_big:=5;
+chars.math_floor_right_Big:=107;
+chars.math_floor_right_bigg:=23;
+chars.math_floor_right_Bigg:=37;
+
+charlist chars.math_squnion_text: chars.math_squnion_disp;
+charlist chars.math_oint_text: chars.math_oint_disp;
+charlist chars.math_circle_dot_text: chars.math_circle_dot_disp;
+charlist chars.math_circle_plus_text: chars.math_circle_plus_disp;
+charlist chars.math_circle_times_text: chars.math_circle_times_disp;
+charlist chars.math_sum_text: chars.math_sum_disp;
+charlist chars.math_prod_text: chars.math_prod_disp;
+charlist chars.math_int_text: chars.math_int_disp;
+charlist chars.math_union_text: chars.math_union_disp;
+charlist chars.math_multiunion_text: chars.math_multiunion_disp;
+charlist chars.math_lattice_inf_text: chars.math_lattice_inf_disp;
+charlist chars.math_lattice_sup_text: chars.math_lattice_sup_disp;
+charlist chars.math_coprod_text: chars.math_coprod_disp;
+
+charlist chars.math_parent_left_big:
+ chars.math_parent_left_Big: chars.math_parent_left_bigg: chars.math_parent_left_Bigg:
+ chars.math_parent_left_top; % left parentheses
+charlist chars.math_parent_right_big:
+ chars.math_parent_right_Big: chars.math_parent_right_bigg: chars.math_parent_right_Bigg:
+ chars.math_parent_right_top; % right parentheses
+charlist chars.math_bracket_left_big:
+ chars.math_bracket_left_Big: chars.math_bracket_left_bigg: chars.math_bracket_left_Bigg:
+ chars.math_bracket_left_top; % left brackets
+charlist chars.math_bracket_right_big:
+ chars.math_bracket_right_Big: chars.math_bracket_right_bigg: chars.math_bracket_right_Bigg:
+ chars.math_bracket_right_top; % right brackets
+charlist chars.math_floor_left_big:
+ chars.math_floor_left_Big: chars.math_floor_left_bigg: chars.math_floor_left_Bigg:
+ chars.math_bracket_left_bot; % left floors
+charlist chars.math_floor_right_big:
+ chars.math_floor_right_Big: chars.math_floor_right_bigg: chars.math_floor_right_Bigg:
+ chars.math_bracket_right_bot; % right floors
+charlist chars.math_ceiling_left_big:
+ chars.math_ceiling_left_Big: chars.math_ceiling_left_bigg: chars.math_ceiling_left_Bigg:
+ chars.math_bracket_left_mid; % left ceilings
+charlist chars.math_ceiling_right_big:
+ chars.math_ceiling_right_Big: chars.math_ceiling_right_bigg: chars.math_ceiling_right_Bigg:
+ chars.math_bracket_right_mid; % right ceilings
+charlist chars.math_curly_brace_left_big:
+ chars.math_curly_brace_left_Big: chars.math_curly_brace_left_bigg: chars.math_curly_brace_left_Bigg:
+ chars.math_curly_brace_left_top; % left braces
+charlist chars.math_curly_brace_right_big:
+ chars.math_curly_brace_right_Big: chars.math_curly_brace_right_bigg: chars.math_curly_brace_right_Bigg:
+ chars.math_curly_brace_right_top; % right braces
+charlist chars.math_angle_left_big:
+ chars.math_angle_left_Big: chars.math_angle_left_bigg: chars.math_angle_left_Bigg; % left angle brackets
+charlist chars.math_angle_right_big:
+ chars.math_angle_right_Big: chars.math_angle_right_bigg: chars.math_angle_right_Bigg; % right angle brackets
+charlist chars.math_slash_big:
+ chars.math_slash_Big: chars.math_slash_bigg: chars.math_slash_Bigg; % slashes
+charlist chars.math_backslash_big:
+ chars.math_backslash_Big: chars.math_backslash_bigg: chars.math_backslash_Bigg; % backslashes
+charlist chars.math_root_big:
+ chars.math_root_Big: chars.math_root_bigg: chars.math_root_Bigg:
+ chars.math_root_bottom; % radical signs
+
+extensible chars.math_vertical_ext: 0,0,0,chars.math_vertical_ext; % vertical line
+extensible chars.math_double_vertical_ext: 0,0,0,chars.math_double_vertical_ext; % double vertical line
+extensible chars.math_parent_left_top: chars.math_parent_left_top,0,chars.math_parent_left_bot,chars.math_parent_left_mid; % left parenthesis
+extensible chars.math_parent_right_top: chars.math_parent_right_top,0,chars.math_parent_right_bot,chars.math_parent_right_mid; % right parenthesis
+extensible chars.math_bracket_left_top: chars.math_bracket_left_top,0,chars.math_bracket_left_bot,chars.math_bracket_left_mid; % left bracket
+extensible chars.math_bracket_right_top: chars.math_bracket_right_top,0,chars.math_bracket_right_bot,chars.math_bracket_right_mid; % right bracket
+extensible chars.math_bracket_left_bot: 0,0,chars.math_bracket_left_bot,chars.math_bracket_left_mid; % left floor bracket
+extensible chars.math_bracket_right_bot: 0,0,chars.math_bracket_right_bot,chars.math_bracket_right_mid; % right floor bracket
+extensible chars.math_bracket_left_mid: chars.math_bracket_left_top,0,0,chars.math_bracket_left_mid; % left ceiling bracket
+extensible chars.math_bracket_right_mid: chars.math_bracket_right_top,0,0,chars.math_bracket_right_mid; % right ceiling bracket
+extensible chars.math_curly_brace_left_top: chars.math_curly_brace_left_top,chars.math_curly_brace_left_mid,chars.math_curly_brace_left_bot,chars.math_curly_brace_left_ext; % left brace
+extensible chars.math_curly_brace_right_top: chars.math_curly_brace_right_top,chars.math_curly_brace_right_mid,chars.math_curly_brace_right_bot,chars.math_curly_brace_right_ext; % right brace
+extensible chars.math_curly_brace_left_mid: 0,0,0,chars.arrow_ext_mid; % arrow extension modules only
+extensible chars.math_curly_brace_right_mid: 0,0,0,chars.arrow_double_ext_mid; % double arrow extension modules only
+extensible chars.math_curly_brace_left_ext: 0,0,0,chars.math_curly_brace_left_ext; % left brace extension modules only
+extensible chars.math_curly_brace_right_ext: 0,0,0,chars.math_curly_brace_right_ext; % right brace extension modules only
+extensible chars.arrow_ext_mid: chars.arrow_ext_top,0,chars.arrow_ext_bot,chars.arrow_ext_mid; % updownarrow
+extensible chars.math_parent_left_mid: 0,0,0,chars.math_parent_left_mid; % left parenthesis extension modules only
+extensible chars.math_parent_right_mid: 0,0,0,chars.math_parent_right_mid; % right parenthesis extension modules only
+extensible chars.math_root_bottom: chars.math_root_top,0,chars.math_root_bottom,chars.math_root_mid; % radical sign
+extensible chars.arrow_double_ext_mid: chars.arrow_double_ext_top,0,chars.arrow_double_ext_bot,chars.arrow_double_ext_mid; % double updownarrow
+extensible chars.arrow_ext_top: chars.arrow_ext_top,0,0,chars.arrow_ext_mid; % uparrow
+extensible chars.arrow_ext_bot: 0,0,chars.arrow_ext_bot,chars.arrow_ext_mid; % downarrow
+extensible chars.arrow_double_ext_top: chars.arrow_double_ext_top,0,0,chars.arrow_double_ext_mid; % double uparrow
+extensible chars.arrow_double_ext_bot: 0,0,chars.arrow_double_ext_bot,chars.arrow_double_ext_mid; % double downarrow
+%extensible oct"072": oct"070",0,oct"072",oct"076"; % sharp left parenthesis
+%extensible oct"073": oct"071",0,oct"073",oct"076"; % sharp right parenthesis
+%extensible oct"100": oct"070",0,oct"073",oct"076"; % left moustache
+%extensible oct"101": oct"071",0,oct"072",oct"076"; % right moustache
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf
new file mode 100644
index 00000000000..88f6818de3d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf
@@ -0,0 +1,65 @@
+%Boisik list for text fonts (lowercase)
+
+chars.latin_a:=ASCII"a";
+chars.latin_aacute:=oct"341";
+chars.latin_agrave:=oct"270";
+chars.latin_aumlaut:=oct"344";
+chars.latin_b:=ASCII"b";
+chars.latin_c:=ASCII"c";
+chars.latin_ccaron:=oct"350";
+chars.latin_d:=ASCII"d";
+chars.latin_dcaron=oct"357";
+chars.latin_e:=ASCII"e";
+chars.latin_eacute:=oct"351";
+chars.latin_ecaron:=oct"354";
+chars.latin_f:=ASCII"f";
+chars.latin_g:=ASCII"g";
+chars.latin_h:=ASCII"h";
+chars.latin_dotless_i:=oct"020";
+chars.latin_i:=ASCII"i";
+chars.latin_iacute:=oct"355";
+chars.latin_dotless_j:=oct"021";
+chars.latin_j:=ASCII"j";
+chars.latin_k:=ASCII"k";
+chars.latin_l:=ASCII"l";
+chars.latin_lcaron:=oct"265";
+chars.latin_lacute:=oct"345";
+chars.latin_m:=ASCII"m";
+chars.latin_n:=ASCII"n";
+chars.latin_ncaron:=oct"362";
+chars.latin_o:=ASCII"o";
+chars.latin_oacute:=oct"363";
+chars.latin_oumlaut:=oct"366";
+chars.latin_ocircumflex:=oct"364";
+chars.latin_p:=ASCII"p";
+chars.latin_q:=ASCII"q";
+chars.latin_r:=ASCII"r";
+chars.latin_rcaron:=oct"370";
+chars.latin_racute:=oct"340";
+chars.latin_s:=ASCII"s";
+chars.latin_scaron:=oct"271";
+chars.latin_t:=ASCII"t";
+chars.latin_tcaron:=oct"273";
+chars.latin_u:=ASCII"u";
+chars.latin_uring:=oct"371";
+chars.latin_uacute:=oct"372";
+chars.latin_uumlaut:=oct"374";
+chars.latin_v:=ASCII"v";
+chars.latin_w:=ASCII"w";
+chars.latin_x:=ASCII"x";
+chars.latin_y:=ASCII"y";
+chars.latin_yacute:=oct"375";
+chars.latin_z:=ASCII"z";
+chars.latin_zcaron:=oct"276";
+chars.latin_ae:=26;
+chars.latin_oe:=27;
+chars.latin_eszet:=25;
+chars.latin_oslash:=oct"034";
+chars.latin_ff:=oct"013";
+chars.latin_fi:=oct"014";
+chars.latin_fl:=oct"015";
+chars.latin_ffi:=oct"016";
+chars.latin_ffl:=oct"017";
+chars.latin_flcaron:=128;
+chars.latin_flacute:=129;
+chars.latin_fj:=130;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
new file mode 100644
index 00000000000..9cc7599a7ad
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
@@ -0,0 +1,33 @@
+%Boisik list for math font (upright symbols)
+
+chars.harpoon_left_up:=40;
+chars.harpoon_left_down:=41;
+chars.harpoon_right_up:=42;
+chars.harpoon_right_down:=43;
+chars.arrow_hook_left:=44;
+chars.arrow_hook_right:=45;
+chars.math_triangle_right:=46;
+chars.math_triangle_left:=47;
+chars.numeral_zero:=48;
+chars.numeral_one:=49;
+chars.numeral_two:=50;
+chars.numeral_three:=51;
+chars.numeral_four:=52;
+chars.numeral_five:=53;
+chars.numeral_six:=54;
+chars.numeral_seven:=55;
+chars.numeral_eight:=56;
+chars.numeral_nine:=57;
+chars.sign_period:=58;
+chars.sign_comma:=59;
+chars.math_less:=60;
+chars.math_virgule:=61;
+chars.math_greater:=62;
+chars.math_five_star:=63;
+
+chars.symbol_flat:=91;
+chars.symbol_natural:=92;
+chars.symbol_sharp:=93;
+chars.symbol_smile:=94;
+chars.symbol_frown:=95;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
new file mode 100644
index 00000000000..35e3e4cf6e0
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
@@ -0,0 +1,103 @@
+%Boisik list for math font (slanted symbols)
+
+chars.greek_Gamma:=0;
+chars.greek_Delta:=1;
+chars.greek_Theta:=2;
+chars.greek_Lambda:=3;
+chars.greek_Xi:=4;
+chars.greek_Pi:=5;
+chars.greek_Sigma:=6;
+chars.greek_Upsilon:=7;
+chars.greek_Phi:=8;
+chars.greek_Psi:=9;
+chars.greek_Omega:=10;
+chars.greek_alpha:=11;
+chars.greek_beta:=12; chars.greek_beta_curved:=12+128;
+chars.greek_gamma:=13; chars.greek_gamma_curved:=13+128;
+chars.greek_delta:=14;
+chars.greek_epsilon:=15;
+chars.greek_zeta:=16;
+chars.greek_eta:=17; chars.greek_eta_curved:=17+128;
+chars.greek_theta:=18;
+chars.greek_iota:=19;
+chars.greek_kappa:=20;
+chars.greek_lambda:=21; chars.greek_lambda_curved:=21+128;
+chars.greek_mu:=22; chars.greek_mu_curved:=22+128;
+chars.greek_nu:=23;
+chars.greek_xi:=24;
+chars.greek_pi:=25; chars.greek_pi_curved:=25+128;
+chars.greek_rho:=26;
+chars.greek_sigma:=27; chars.greek_sigma_curved:=27+128;
+chars.greek_tau:=28; chars.greek_tau_curved:=28+128;
+chars.greek_upsilon:=29; chars.greek_upsilon_curved:=29+128;
+chars.greek_phi:=30; chars.greek_phi_curved:=30+128;
+chars.greek_chi:=31;
+chars.greek_psi:=32; chars.greek_psi_curved:=32+128;
+chars.greek_omega:=33;
+chars.greek_varepsilon:=34;
+chars.greek_vartheta:=35;
+chars.greek_varpi:=36; chars.greek_varpi_curved:=36+128;
+chars.greek_varrho:=37;
+chars.greek_varsigma:=38;
+chars.greek_varphi:=39; chars.greek_varphi_curved:=39+128;
+
+chars.math_partial:=64;
+chars.latin_A:=ASCII"A";
+chars.latin_B:=ASCII"B";
+chars.latin_C:=ASCII"C";
+chars.latin_D:=ASCII"D";
+chars.latin_E:=ASCII"E";
+chars.latin_F:=ASCII"F";
+chars.latin_G:=ASCII"G";
+chars.latin_H:=ASCII"H";
+chars.latin_I:=ASCII"I";
+chars.latin_J:=ASCII"J";
+chars.latin_K:=ASCII"K";
+chars.latin_L:=ASCII"L";
+chars.latin_M:=ASCII"M";
+chars.latin_N:=ASCII"N";
+chars.latin_O:=ASCII"O";
+chars.latin_P:=ASCII"P";
+chars.latin_Q:=ASCII"Q";
+chars.latin_R:=ASCII"R";
+chars.latin_S:=ASCII"S";
+chars.latin_T:=ASCII"T";
+chars.latin_U:=ASCII"U";
+chars.latin_V:=ASCII"V";
+chars.latin_W:=ASCII"W";
+chars.latin_X:=ASCII"X";
+chars.latin_Y:=ASCII"Y";
+chars.latin_Z:=ASCII"Z";
+chars.math_ell:=96;
+chars.latin_a:=ASCII"a";
+chars.latin_b:=ASCII"b";
+chars.latin_c:=ASCII"c";
+chars.latin_d:=ASCII"d";
+chars.latin_e:=ASCII"e";
+chars.latin_f:=ASCII"f";
+chars.latin_g:=ASCII"g";
+chars.latin_h:=ASCII"h";
+chars.latin_i:=ASCII"i";
+chars.latin_j:=ASCII"j";
+chars.latin_k:=ASCII"k";
+chars.latin_l:=ASCII"l";
+chars.latin_m:=ASCII"m";
+chars.latin_n:=ASCII"n";
+chars.latin_o:=ASCII"o";
+chars.latin_p:=ASCII"p";
+chars.latin_q:=ASCII"q";
+chars.latin_r:=ASCII"r";
+chars.latin_s:=ASCII"s";
+chars.latin_t:=ASCII"t";
+chars.latin_u:=ASCII"u";
+chars.latin_v:=ASCII"v";
+chars.latin_w:=ASCII"w";
+chars.latin_x:=ASCII"x";
+chars.latin_y:=ASCII"y";
+chars.latin_z:=ASCII"z";
+chars.latin_dotless_i:=123;
+chars.latin_dotless_j:=124;
+chars.math_weierstrass_p:=125;
+chars.math_accent_arrow:=126;
+chars.math_accent_tie:=127;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf
new file mode 100644
index 00000000000..cc19c4017e0
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf
@@ -0,0 +1,57 @@
+%Boisik list for text fonts (small caps)
+
+chars.latin_A:=ASCII"a";
+chars.latin_Aacute:=oct"341";
+chars.latin_Agrave:=oct"270";
+chars.latin_Aumlaut:=oct"344";
+chars.latin_B:=ASCII"b";
+chars.latin_C:=ASCII"c";
+chars.latin_Ccaron:=oct"350";
+chars.latin_D:=ASCII"d";
+chars.latin_Dcaron=oct"357";
+chars.latin_E:=ASCII"e";
+chars.latin_Eacute:=oct"351";
+chars.latin_Ecaron:=oct"354";
+chars.latin_F:=ASCII"f";
+chars.latin_G:=ASCII"g";
+chars.latin_H:=ASCII"h";
+chars.latin_I_dotless:=oct"020";
+chars.latin_I:=ASCII"i";
+chars.latin_Iacute:=oct"355";
+chars.latin_J_dotless:=oct"021";
+chars.latin_J:=ASCII"j";
+chars.latin_K:=ASCII"k";
+chars.latin_L:=ASCII"l";
+chars.latin_Lcaron:=oct"265";
+chars.latin_Lacute:=oct"345";
+chars.latin_M:=ASCII"m";
+chars.latin_N:=ASCII"n";
+chars.latin_Ncaron:=oct"362";
+chars.latin_O:=ASCII"o";
+chars.latin_Oacute:=oct"363";
+chars.latin_Oumlaut:=oct"366";
+chars.latin_Ocircumflex:=oct"364";
+chars.latin_P:=ASCII"p";
+chars.latin_Q:=ASCII"q";
+chars.latin_R:=ASCII"r";
+chars.latin_Rcaron:=oct"370";
+chars.latin_Racute:=oct"340";
+chars.latin_S:=ASCII"s";
+chars.latin_Scaron:=oct"271";
+chars.latin_T:=ASCII"t";
+chars.latin_Tcaron:=oct"273";
+chars.latin_U:=ASCII"u";
+chars.latin_Uring:=oct"371";
+chars.latin_Uacute:=oct"372";
+chars.latin_Uumlaut:=oct"374";
+chars.latin_V:=ASCII"v";
+chars.latin_W:=ASCII"w";
+chars.latin_X:=ASCII"x";
+chars.latin_Y:=ASCII"y";
+chars.latin_Yacute:=oct"375";
+chars.latin_Z:=ASCII"z";
+chars.latin_Zcaron:=oct"276";
+chars.latin_AE:=26;
+chars.latin_OE:=27;
+chars.latin_SS:=25;
+chars.latin_Oslash:=oct"034";
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
new file mode 100644
index 00000000000..9d7568ef613
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
@@ -0,0 +1,130 @@
+%Boisik list for math symbol font
+
+chars.math_minus:=0;
+chars.math_cdot:=1;
+chars.math_times:=2;
+chars.math_asterisk:=3;
+chars.math_division:=4;
+chars.math_diamond_op:=5;
+chars.math_plus_minus:=6;
+chars.math_minus_plus:=7;
+chars.math_circle_plus:=8;
+chars.math_circle_minus:=9;
+chars.math_circle_times:=10;
+chars.math_circle_divide:=11;
+chars.math_circle_dot:=12;
+chars.math_circle_copy:=13;
+chars.math_circle_op:=14;
+chars.math_bullet:=15;
+chars.math_hardy:=16;
+chars.math_equivalence:=17;
+chars.math_subset_eq:=18;
+chars.math_superset_eq:=19;
+chars.math_less_eq:=20;
+chars.math_greater_eq:=21;
+chars.math_precedes_eq:=22;
+chars.math_follows_eq:=23;
+chars.math_sim:=24;
+chars.math_approx:=25;
+chars.math_subset:=26;
+chars.math_superset:=27;
+chars.math_much_less:=28;
+chars.math_much_greater:=29;
+chars.math_precedes:=30;
+chars.math_follows:=31;
+chars.arrow_left:=32;
+chars.arrow_right:=33;
+chars.arrow_up:=34;
+chars.arrow_down:=35;
+chars.arrow_left_right:=36;
+chars.arrow_NE:=37;
+chars.arrow_SE:=38;
+chars.math_sim_eq:=39;
+chars.arrow_double_left:=40;
+chars.arrow_double_right:=41;
+chars.arrow_double_up:=42;
+chars.arrow_double_down:=43;
+chars.arrow_double_left_right:=44;
+chars.arrow_NW:=45;
+chars.arrow_SW:=46;
+chars.math_propto:=47;
+chars.math_prime:=48;
+chars.math_infinity:=49;
+chars.math_element:=50;
+chars.math_ownership:=51;
+chars.math_triangle_up:=52;
+chars.math_triangle_down:=53;
+chars.math_zero_slash:=54;
+chars.math_maps_to:=55;
+chars.math_forall:=56;
+chars.math_exists:=57;
+chars.math_logical_not:=58;
+chars.math_empty_set:=59;
+chars.math_Re:=60;
+chars.math_Im:=61;
+chars.math_lattice_top:=62;
+chars.math_lattice_bottom:=63;
+chars.math_aleph:=64;
+chars.cal_A:=65;
+chars.cal_B:=66;
+chars.cal_C:=67;
+chars.cal_D:=68;
+chars.cal_E:=69;
+chars.cal_F:=70;
+chars.cal_G:=71;
+chars.cal_H:=72;
+chars.cal_I:=73;
+chars.cal_J:=74;
+chars.cal_K:=75;
+chars.cal_L:=76;
+chars.cal_M:=77;
+chars.cal_N:=78;
+chars.cal_O:=79;
+chars.cal_P:=80;
+chars.cal_Q:=81;
+chars.cal_R:=82;
+chars.cal_S:=83;
+chars.cal_T:=84;
+chars.cal_U:=85;
+chars.cal_V:=86;
+chars.cal_W:=87;
+chars.cal_X:=88;
+chars.cal_Y:=89;
+chars.cal_Z:=90;
+chars.math_union:=91;
+chars.math_intersection:=92;
+chars.math_multiunion:=93;
+chars.math_logand:=94;
+chars.math_logor:=95;
+chars.math_lattice_left:=96;
+chars.math_lattice_right:=97;
+chars.math_floor_left:=98;
+chars.math_floor_right:=99;
+chars.math_ceiling_left:=100;
+chars.math_ceiling_right:=101;
+chars.math_curly_brace_left:=102;
+chars.math_curly_brace_right:=103;
+chars.math_angle_left:=104;
+chars.math_angle_right:=105;
+chars.math_vertical:=106;
+chars.math_vertical_double:=107;
+chars.arrow_up_down:=108;
+chars.arrow_double_up_down:=109;
+chars.math_backslash:=110;
+chars.math_wreath:=111;
+chars.math_root:=112;
+chars.math_coprod:=113;
+chars.math_nabla:=114;
+chars.math_int:=115;
+chars.math_squnion:=116;
+chars.math_sqintersection:=117;
+chars.math_sqsubset_eq:=118;
+chars.math_sqsuperset_eq:=119;
+chars.math_section:=120;
+chars.math_dag:=121;
+chars.math_dagger:=122;
+chars.sign_paragraph:=123;
+chars.sign_club_suit:=124;
+chars.sign_diamond_suit:=125;
+chars.sign_heart_suit:=126;
+chars.sign_spade_suit:=127;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf
new file mode 100644
index 00000000000..6ff299126c9
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf
@@ -0,0 +1,122 @@
+%Boisik list for text fonts (uppercase)
+
+chars.sign_hyphen:=ASCII"-";
+chars.sign_hyphen_alt:=oct"234";
+chars.sign_plus:=ASCII"+";
+chars.sign_endash:=oct"173";
+chars.sign_emdash:=oct"174";
+chars.sign_parent_left:=ASCII"(";
+chars.sign_parent_right:=ASCII")";
+chars.sign_bracket_left:=ASCII"[";
+chars.sign_bracket_right:=ASCII"]";
+chars.sign_quotes:=34;
+chars.sign_opening_quotes:=oct"134";
+chars.sign_czech_quotes:=254;
+chars.sign_czech_closing_quotes:=255;
+chars.sign_french_quotes_left:=158;
+chars.sign_french_quotes_right:=159;
+chars.sign_aposthrope:=ASCII"'";
+chars.sign_aposthrope_reverse:=ASCII"`";
+chars.sign_comma:=ASCII",";
+chars.sign_period:=ASCII".";
+chars.sign_colon:=ASCII":";
+chars.sign_semicolon:=ASCII";";
+chars.sign_exclamation:=ASCII"!";
+chars.sign_spanish_shriek:=oct"074";
+chars.sign_spanish_query:=oct"076";
+chars.sign_equals:=ASCII"=";
+chars.sign_slash:=ASCII"/";
+chars.sign_asterisk:=ASCII"*";
+chars.sign_hash:=ASCII"#";
+chars.sign_percent:=ASCII"%";
+chars.sign_permile:=141;
+chars.sign_query:=ASCII"?";
+chars.sign_ampersand:=ASCII"&";
+chars.sign_at:=ASCII"@";
+chars.numeral_zero:=ASCII"0";
+chars.numeral_one:=ASCII"1";
+chars.numeral_two:=ASCII"2";
+chars.numeral_three:=ASCII"3";
+chars.numeral_four:=ASCII"4";
+chars.numeral_five:=ASCII"5";
+chars.numeral_six:=ASCII"6";
+chars.numeral_seven:=ASCII"7";
+chars.numeral_eight:=ASCII"8";
+chars.numeral_nine:=ASCII"9";
+chars.latin_A:=ASCII"A";
+chars.latin_Aacute:=oct"301";
+chars.latin_Agrave:=oct"230";
+chars.latin_Aumlaut:=oct"304";
+chars.latin_B:=ASCII"B";
+chars.latin_C:=ASCII"C";
+chars.latin_Ccaron:=oct"310";
+chars.latin_D:=ASCII"D";
+chars.latin_Dcaron:=oct"317";
+chars.latin_E:=ASCII"E";
+chars.latin_Eacute:=oct"311";
+chars.latin_Ecaron:=oct"314";
+chars.latin_F:=ASCII"F";
+chars.latin_G:=ASCII"G";
+chars.latin_H:=ASCII"H";
+chars.latin_I:=ASCII"I";
+chars.latin_Iacute:=oct"315";
+chars.latin_J:=ASCII"J";
+chars.latin_K:=ASCII"K";
+chars.latin_L:=ASCII"L";
+chars.latin_Lacute:=oct"305";
+chars.latin_Lcaron:=oct"245";
+chars.latin_M:=ASCII"M";
+chars.latin_N:=ASCII"N";
+chars.latin_Ncaron:=oct"322";
+chars.latin_O:=ASCII"O";
+chars.latin_Oacute:=oct"323";
+chars.latin_Oumlaut:=oct"326";
+chars.latin_Ocircumflex:=oct"324";
+chars.latin_P:=ASCII"P";
+chars.latin_Q:=ASCII"Q";
+chars.latin_R:=ASCII"R";
+chars.latin_Racute:=oct"300";
+chars.latin_Rcaron:=oct"330";
+chars.latin_S:=ASCII"S";
+chars.latin_Scaron:=oct"251";
+chars.latin_T:=ASCII"T";
+chars.latin_Tcaron:=oct"253";
+chars.latin_U:=ASCII"U";
+chars.latin_Uacute:=oct"332";
+chars.latin_Uring:=oct"331";
+chars.latin_Uumlaut:=oct"334";
+chars.latin_V:=ASCII"V";
+chars.latin_W:=ASCII"W";
+chars.latin_X:=ASCII"X";
+chars.latin_Y:=ASCII"Y";
+chars.latin_Yacute:=oct"335";
+chars.latin_Z:=ASCII"Z";
+chars.latin_Zcaron:=oct"256";
+chars.latin_AE:=29;
+chars.latin_OE:=30;
+chars.latin_grave:=18;
+chars.latin_acute:=19;
+chars.latin_hacek:=20;
+chars.latin_circumflex:=oct"136";
+chars.latin_breve:=21;
+chars.latin_macron:=22;
+chars.latin_ring:=23;
+chars.latin_dot_above:=95;
+chars.latin_umlaut:=127;
+chars.latin_tilde:=126;
+chars.latin_ogonek:=157;
+chars.latin_cedilla:=24;
+chars.latin_hungarian_umlaut:=125;
+chars.polish_cross:=oct"040";
+chars.latin_Oslash:=oct"037";
+chars.greek_Gamma:=0;
+chars.greek_Delta:=1;
+chars.greek_Theta:=2;
+chars.greek_Lambda:=3;
+chars.greek_Xi:=4;
+chars.greek_Pi:=5;
+chars.greek_Sigma:=6;
+chars.greek_Upsilon:=7;
+chars.greek_Phi:=8;
+chars.greek_Psi:=9;
+chars.greek_Omega:=10;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
new file mode 100644
index 00000000000..3221329b278
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
@@ -0,0 +1,26 @@
+%Boisik driver file for math symbols and letters
+mode_setup; font_setup;
+
+let bskboundary=endinput;
+numeric chars[];
+input bsklist-mi;
+input bsksymbols;
+input bskletters-o;
+input bskletters-r;
+input bskletters-i;
+
+%Non-slanted characters
+save chars; numeric chars[];
+slant:=mono_charic#:=0;
+currenttransform:=identity yscaled aspect_ratio scaled granularity;
+let bskboundary=relax;
+input bsklist-mi-up;
+input bsksymbols;
+input bskletters-r;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
new file mode 100644
index 00000000000..da66c25853d
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
@@ -0,0 +1,17 @@
+%Boisik driver file for math symbols
+mode_setup; font_setup;
+
+input bsklist-sy;
+input bskletters-o;
+font_slant slant;
+
+slant:=0;
+currenttransform:=identity yscaled aspect_ratio scaled granularity;
+input bsksymbols;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
new file mode 100644
index 00000000000..b8d892193d1
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
@@ -0,0 +1,69 @@
+% Boisik Math Italic 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMI"; font_size 10pt#;
+
+u#:=18/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=6/36pt#; % diameter of rounded corners
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=20/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+like_hair#:=10/36pt#;
+like_stem#:=22/36pt#;
+like_curve#:=26/36pt#;
+ess#:=24/36pt#; % breadth in middle of lowercase s
+dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=23/36pt#; % uppercase stem breadth
+cap_curve#:=25/36pt#; % uppercase curve breadth
+like_cap_hair#:=12/36pt#;
+like_cap_stem#:=26/36pt#;
+like_cap_curve#:=30/36pt#;
+cap_ess#:=28/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=23/36pt#; % protrusion of lowercase serifs
+cap_jut#:=28/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=9/36pt#; % vertical diameter of hairlines
+bar#:=9/36pt#; % lowercase bar thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+serif_drop#:=12/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+generate bskmath % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf b/Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf
new file mode 100644
index 00000000000..1a544e3ac00
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf
@@ -0,0 +1,82 @@
+% Boisik Roman 10 point with T1 encoding (unsupported)
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRT1"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+input bsklist-T1;
+
+input bskletters-r;
+input bskletters-o;
+input bsksymbols;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf
new file mode 100644
index 00000000000..1233878455c
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf
@@ -0,0 +1,82 @@
+% Boisik Roman 10 point Text Companion (TS1 encoding) (unsupported)
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRTC"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+input bsklist-TS1;
+
+input bskletters-r;
+input bskletters-o;
+input bsksymbols;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskr10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskr10.mf
new file mode 100644
index 00000000000..29605c265a9
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskr10.mf
@@ -0,0 +1,69 @@
+% Boisik Roman 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKR"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
new file mode 100644
index 00000000000..2a9c0c6ff3b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
@@ -0,0 +1,70 @@
+% Boisik Roman Bold 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRB"; font_size 10pt#;
+
+u#:=24/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+Acc_height#:=300/36pt#; % height of accented caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=90/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; % diameter of rounded corners
+hair#:=20/36pt#; % lowercase hairline breadth
+stem#:=37/36pt#; % lowercase stem breadth
+curve#:=45/36pt#; % lowercase curve breadth
+like_hair#:=20/36pt#;
+like_stem#:=37/36pt#;
+like_curve#:=45/36pt#;
+ess#:=39/36pt#; % breadth in middle of lowercase s
+dot_size#:=46/36pt#; % diameter of dots
+cap_hair#:=21/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=23/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=45/36pt#; % uppercase stem breadth
+cap_curve#:=53/36pt#; % uppercase curve breadth
+like_cap_hair#:=21/36pt#;
+like_cap_stem#:=45/36pt#;
+like_cap_curve#:=53/36pt#;
+cap_ess#:=46/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.6pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=20/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf
new file mode 100644
index 00000000000..418ee624492
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf
@@ -0,0 +1,69 @@
+% Boisik Roman Condensed 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRC"; font_size 10pt#;
+
+u#:=.85*20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf
new file mode 100644
index 00000000000..42fc20b162f
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf
@@ -0,0 +1,69 @@
+% Boisik Roman Condensed Bold 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRCB"; font_size 10pt#;
+
+u#:=.85*22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=12/36pt#; % lowercase hairline breadth
+stem#:=30/36pt#; % lowercase stem breadth
+curve#:=38/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=40/36pt#; % diameter of dots
+cap_hair#:=14/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=38/36pt#; % uppercase stem breadth
+cap_curve#:=46/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf
new file mode 100644
index 00000000000..04a30cd5ee6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf
@@ -0,0 +1,69 @@
+% Boisik Roman Figural 10 point (new-style figures)
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRF"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=0pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=false; %no medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf
new file mode 100644
index 00000000000..d0b1035c762
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf
@@ -0,0 +1,69 @@
+% Boisik Roman Light 10 point (parameters from bski10)
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRL"; font_size 10pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=6/36pt#; % diameter of rounded corners
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=20/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+like_hair#:=10/36pt#;
+like_stem#:=22/36pt#;
+like_curve#:=26/36pt#;
+ess#:=24/36pt#; % breadth in middle of lowercase s
+dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=23/36pt#; % uppercase stem breadth
+cap_curve#:=25/36pt#; % uppercase curve breadth
+like_cap_hair#:=12/36pt#;
+like_cap_stem#:=26/36pt#;
+like_cap_curve#:=30/36pt#;
+cap_ess#:=28/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=23/36pt#; % protrusion of lowercase serifs
+cap_jut#:=28/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=9/36pt#; % vertical diameter of hairlines
+bar#:=9/36pt#; % lowercase bar thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+serif_drop#:=12/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf
new file mode 100644
index 00000000000..727ea02cc18
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf
@@ -0,0 +1,70 @@
+% Boisik Roman Outline 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKROL"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+bsk_outline#:=.1pt#;
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
new file mode 100644
index 00000000000..2685c40d298
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
@@ -0,0 +1,19 @@
+%Boisik driver file for roman fonts
+mode_setup; font_setup;
+
+input bsklist-lc;
+input bsklist-uc;
+chars.sign_dolar:=ASCII"$";
+
+input bskletters-r;
+input bskletters-o;
+input bsksymbols;
+
+input bskligtab;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf
new file mode 100644
index 00000000000..e5326a8e5f0
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf
@@ -0,0 +1,69 @@
+% Boisik Roman Semibold 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRSB"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=12/36pt#; % lowercase hairline breadth
+stem#:=30/36pt#; % lowercase stem breadth
+curve#:=38/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=40/36pt#; % diameter of dots
+cap_hair#:=14/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=38/36pt#; % uppercase stem breadth
+cap_curve#:=46/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf
new file mode 100644
index 00000000000..be81bb76f13
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf
@@ -0,0 +1,70 @@
+% Boisik Roman Slanted 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKR"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.15; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf
new file mode 100644
index 00000000000..ca6797f06c6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf
@@ -0,0 +1,70 @@
+% Boisik Roman Fixed Width 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKRW"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=38/36pt#;
+like_cap_curve#:=46/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=true; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=true; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bskroman % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksc.mf
new file mode 100644
index 00000000000..43a5f7ad9a8
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksc.mf
@@ -0,0 +1,38 @@
+%Boisik driver file for small caps fonts
+mode_setup; font_setup;
+
+input bsklist-uc;
+chars.sign_dolar:=ASCII"$";
+chars.arrow_up:=oct"013";
+chars.arrow_down:=oct"014";
+chars.math_less:=oct"015";
+chars.math_greater:=oct"017";
+
+input bskletters-r;
+input bskletters-o;
+input bsksymbols;
+
+save chars; numeric chars[];
+
+input bsklist-sc;
+
+save Acc_height;
+forsuffixes $= u, width_adj, cap_serif_fit, letter_fit,
+ body_height, cap_height, Acc_height, x_height, bar_height, comma_depth, com_height,
+ flare, cap_hair, alt_cap_hair, stem, cap_stem, cap_curve, like_cap_hair, like_cap_stem, like_cap_curve,
+ cap_jut, beak_jut, beak, slab, cap_bar,
+ o, apex_o: if known lower.$.#: $.#:=lower.$.#; fi endfor
+if known lower.fudge: fudge:=lower.fudge; fi;
+font_setup;
+
+input bskletters-r;
+
+input bsklist-uc;
+input bskligtab-sc;
+
+font_normal_space 5.5u#;
+font_normal_stretch 3u#; font_normal_shrink 1.5u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf
new file mode 100644
index 00000000000..77c8d666221
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf
@@ -0,0 +1,70 @@
+% Boisik Small Caps 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSSC"; font_size 10pt#;
+
+u#:=20/36pt#; lower.u#:=15/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; lower.body_height#:=200/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; lower.cap_height#:=185/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; lower.x_height#:=119/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; lower.bar_height#:=75/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; lower.comma_depth#:=55/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; lower.com_height#:=101/36pt#; %height of B bar
+lower.Acc_height#:=255/36pt#;
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; lower.cap_hair#:=10/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; lower.alt_cap_hair#:=13/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; lower.cap_stem#:=25/36pt#; % uppercase stem breadth
+cap_curve#:=34/36pt#; lower.cap_curve#:=28/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#; lower.like_cap_hair#:=12.5/36pt#;
+like_cap_stem#:=38/36pt#; lower.like_cap_stem#:=32/36pt#;
+like_cap_curve#:=46/36pt#; lower.like_cap_curve#:=38/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; lower.cap_jut#:=21/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; lower.beak#:=58/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; lower.cap_bar#:=9.5/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; lower.o#:=3/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; lower.apex_o#:=5/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+generate bsksc % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
new file mode 100644
index 00000000000..67d243f3407
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
@@ -0,0 +1,89 @@
+% Boisik Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSY"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathsy % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
new file mode 100644
index 00000000000..d1b1db9aca7
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
@@ -0,0 +1,7565 @@
+%Boisik symbols
+
+numeric bourstem; bourstem:=1.5stem;
+numeric arrsize, arrwidth; arrsize=1.2arrwidth=3curve;
+
+iff known chars.sign_parent_left:
+bskchar "Left parenthesis";
+beginchar(chars.sign_parent_left,6u#,body_height#,paren_depth#); uni "0x0028";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(curve,0);
+rt x1r=w-u; rt x3r=w-u; lft x2l=u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(hair, angle((x1r,y1l)-z2)-90); pos3(hair,angle((x3r,y3l)-z2)+90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.sign_parent_right:
+bskchar "Right parenthesis";
+beginchar(chars.sign_parent_right,6u#,body_height#,paren_depth#); uni "0x0029";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(curve,180);
+lft x1r=u; lft x3r=u; rt x2l=w-u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(hair, angle((x1r,y1l)-z2)+90); pos3(hair,angle((x3r,y3l)-z2)-90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.sign_bracket_left:
+bskchar "Left bracket";
+beginchar(chars.sign_bracket_left,5.5u#,body_height#,paren_depth#); uni "0x005B";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.sign_bracket_right:
+bskchar "Right bracket";
+beginchar(chars.sign_bracket_right,5.5u#,body_height#,paren_depth#); uni "0x005D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.sign_bracket_semantic_left:
+bskchar "Left semantic bracket";
+beginchar(chars.sign_bracket_semantic_left,7u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(.5[hair,stem],0); pos6(.5[hair,stem],0);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+y5=y1l; y6=y4l; x5=x6=.5[x1,x2l];
+rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle;
+infill obl(2l,5l,3l)---obl(3l,2l,6l)---obl(6l,3l,5l)---obl(5l,6l,2l)---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_bracket_semantic_right:
+bskchar "Right semantic bracket";
+beginchar(chars.sign_bracket_semantic_right,7u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(.5[hair,stem],180); pos6(.5[hair,stem],180);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
+y5=y1l; y6=y4l; x5=x6=.5[x1,x2l];
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle;
+infill obl(2l,5l,3l)---obl(3l,2l,6l)---obl(6l,3l,5l)---obl(5l,6l,2l)---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_bracket_quill_left:
+bskchar "Left bracket with quill";
+beginchar(chars.sign_bracket_quill_left,5.5u#,body_height#,paren_depth#); uni "0x2045";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(hair,90); pos6(hair,90);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+y5=y6=.5[y1,y4]; x5=x2l; x6=x1;
+rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_bracket_quill_right:
+bskchar "Right bracket with quill";
+beginchar(chars.sign_bracket_quill_right,5.5u#,body_height#,paren_depth#); uni "0x2046";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(hair,90); pos6(hair,90);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+y5=y6=.5[y1,y4]; x5=x2l; x6=x1;
+lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_quotes:
+bskchar "Quotes";
+beginchar(chars.sign_quotes,8.5u#,asc_height#,0); uni "0x0022";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-u-.5dot_size-hair; top y1=h-.5dot_size;
+y2=y1; x2=u+.5dot_size;
+comma(1,dot_size,infinity,comma_depth); comma(2,dot_size,infinity,comma_depth);
+endchar;
+
+charscription(8.5u,asc_height,0)(
+x1=w-u-.5dot_size; top y1=h-comma_depth;
+y2=y1; x2=u+.5dot_size+hair;
+ammoc(1,dot_size,infinity,comma_depth); ammoc(2,dot_size,infinity,comma_depth);
+);
+
+iff known chars.sign_opening_quotes:
+bskchar "Opening quotes";
+beginchar(chars.sign_opening_quotes,8.5u#,asc_height#,0); uni "0x201C";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_czech_closing_quotes:
+bskchar "Czech closing quotes";
+beginchar(chars.sign_czech_closing_quotes,8.5u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_czech_quotes:
+bskchar "Czech opening quotes";
+beginchar(chars.sign_czech_quotes,8.5u#,.5dot_size#,comma_depth#); uni "0x201E";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-u-.5dot_size-hair; top y1=h;
+y2=y1; x2=u+.5dot_size;
+comma(1,dot_size,infinity,comma_depth); comma(2,dot_size,infinity,comma_depth);
+endchar;
+
+iff known chars.sign_turn_quotes:
+bskchar "Turned quotes";
+beginchar(chars.sign_turn_quotes,8.5u#,asc_height#,0); uni "0x201F";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-u-.5dot_size; top y1=h-.5dot_size;
+y2=y1; x2=u+.5dot_size+hair;
+turn_comma(1,dot_size,infinity,comma_depth); turn_comma(2,dot_size,infinity,comma_depth);
+endchar;
+
+iff known chars.sign_czech_quote:
+bskchar "Czech opening quote";
+beginchar(chars.sign_czech_quote,4.5u#,.5dot_size#,comma_depth#); uni "0x201A";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-u-.5dot_size-hair; top y1=h;
+comma(1,dot_size,infinity,comma_depth);
+endchar;
+
+iff known chars.sign_aposthrope:
+bskchar "Aposthrope";
+beginchar(chars.sign_aposthrope,4.5u#,asc_height#,0); uni "0x0027";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=w-u-.5dot_size-hair; top y1=h-.5dot_size;
+comma(1,dot_size,.9hair,comma_depth);
+endchar;
+
+iff known chars.sign_aposthrope_reverse:
+bskchar "Reverse aposthrope";
+beginchar(chars.sign_aposthrope_reverse,4.5u#,asc_height#,0); uni "0x0060";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w+.5hair; top y1=h-comma_depth;
+ammoc(1,dot_size,.9hair,comma_depth);
+endchar;
+
+iff known chars.sign_comma:
+bskchar "Comma";
+beginchar(chars.sign_comma,4.5u#,dot_size#,comma_depth#); uni "0x002C";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w-.5hair; top y1=h-.5dot_size;
+comma(1,dot_size,infinity,d);
+endchar;
+
+iff known chars.sign_comma_under:
+bskchar "Comma under baseline";
+beginchar(chars.sign_comma_under,4.5u#,0,comma_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w-.5hair; top y1=h-.5dot_size;
+comma(1,dot_size,infinity,d);
+endchar;
+
+iff known chars.sign_comma_double_tail:
+bskchar "Double-tailed comma";
+beginchar(chars.sign_comma_double_tail,4.5u#,dot_size#,comma_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim; oblu:=.6dot_size;
+path p[];
+x1=.5w-.5hair; top y1=h-.5dot_size;
+if square_dots:
+else:
+ penpos1'(dot_size,0); penpos1''(dot_size,90); z1'=z1''=z1;
+ z1'''=(x1'r+hair,y1''l); z1~=.75[z1,z1'r]+d*down;
+ p0:=z1'r{up}..z1''r{left}..{down}z1'l..{right}z1''l..cycle;
+ p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z1~;
+ p2:=subpath(rundy(p1,(0,.4dot_size)),infinity) of p1&z1~..z1'''..subpath (1.5,2) of p0;
+ tim=xpart(p2 intersectiontimes (z1--(x1,h)));
+ p3:=subpath(0,tim) of p2;
+ p4:=reverse p3 reflectedabout(z1''r,z1''l);
+ filldraw p3..p4 shifted left ..cycle;
+labels(1,1''',1~); penlabels(1',1'');
+fi
+endchar;
+
+iff known chars.sign_comma_ammoc:
+bskchar "Comma-ammoc";
+beginchar(chars.sign_comma_ammoc,4.5u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=.6dot_size;
+x1=.5w-.5hair=x2; y1=y2=.5[h,-d];
+if square_dots:
+else:
+ penpos1'(dot_size,0); penpos1''(dot_size,90); z1'=z1''=z1;
+ penpos2'(dot_size,180); penpos2''(dot_size,-90); z2'=z2''=z2;
+ z1'''=(x1'r+hair,y1''l); z1~=.5[z1,z1'l]+comma_depth*down;
+ z2'''=(x2'r-hair,y2''l); z2~=.5[z2,z2'l]+comma_depth*up;
+ p0:=z1'r{up}..z1''r{left}..{down}z1'l..{right}z1''l..cycle;
+ p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z1~;
+ p2:=z2'r{down}..z2''r{right}..{up}z2'l..{left}z2''l..cycle;
+ p3:=point 3.5 of p2{direction 3.5 of p2 rotated -120}..z2~;
+ p4:=z1~..z1'''..subpath (1.5,rundy(p0,3.5).zpet) of p0
+ ..subpath(rundy(p1,(0,.4dot_size)),infinity) of p1;
+ p5:=reverse (z2~..z2'''..subpath (1.5,rundy(p2,3.5).zpet) of p2
+ ..subpath(rundy(p3,(0,.4dot_size)),infinity) of p3);
+ (tim1,tim2)=p4 intersectiontimes p5;
+ (tim3,tim4)=reverse p4 intersectiontimes p5;
+ filldraw subpath(0,rundy(p4,tim1).zpet) of p4
+ ..reverse subpath(0,rundy(p5,tim2).zpet) of p5
+ &subpath(infinity,rundy(p5,tim4)) of p5
+ ..reverse subpath(0,tim3) of reverse p4&cycle;
+ labels(1,1''',1~,2,2''',2~); penlabels(1',1'',2',2'');
+fi
+endchar;
+
+iff known chars.sign_period:
+bskchar "Period";
+beginchar(chars.sign_period,4.5u#,dot_size#,0); uni "0x002E";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot z1=(.5w,.5h); dot(1);
+endchar;
+
+iff known chars.sign_period_old_figured:
+bskchar "Period (for some old style figures)";
+beginchar(chars.sign_period_old_figured,4.5u#,dot_size#-medfigd,medfigd); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot z1=(.5w,.5(h-d)); dot(1);
+endchar;
+
+iff known chars.sign_ellipsis:
+bskchar "Ellipsis (horizontal)";
+beginchar(chars.sign_ellipsis,16u#,dot_size#,0); uni "0x2026";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y2=y3; bot y1=.5h;
+x3-x2=x2-x1; .5w=x2; x1=2.25u;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.math_ellipsis_centered:
+bskchar "Centered horizontal ellipsis";
+beginchar(chars.math_ellipsis_centered,16u#,v_center(dot_size#)); uni "0x22EF";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y2=y3; y1=math_axis;
+x3-x2=x2-x1; .5w=x2; x1=2.25u;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.sign_colon:
+bskchar "Colon";
+beginchar(chars.sign_colon,4.5u#,x_height#,0); uni "0x003A";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h-.5dot_size; bot y2=.5dot_size;
+dot(1); dot(2);
+endchar;
+
+iff known chars.math_ellipsis_vert:
+bskchar "Vertical ellipsis";
+beginchar(chars.math_ellipsis_vert,4.5u#,v_center(1.5x_height#)); uni "0x22EE";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=.5w; y2=.5[y1,y3]=math_axis; y1-y2=5.75u;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.math_ellipsis_down_right:
+bskchar "Diagonal ellipsis down right";
+beginchar(chars.math_ellipsis_down_right,16u#,v_center(1.5x_height#)); uni "0x22F1";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3-x2=x2-x1; .5w=x2; x1=2.25u;
+y2=.5[y1,y3]=math_axis; y1-y2=5.75u;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.math_ellipsis_up_right:
+bskchar "Diagonal ellipsis up right";
+beginchar(chars.math_ellipsis_up_right,16u#,v_center(1.5x_height#)); uni "0x22F0";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3-x2=x2-x1; .5w=x2; x3=2.25u;
+y2=.5[y1,y3]=math_axis; y1-y2=5.75u;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.sign_tri_colon:
+bskchar "Triangular colon";
+beginchar(chars.sign_tri_colon,4.5u#,x_height#,0); uni "0x02D0";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=.15dot_size;
+x1=x2=.5w; top y1=h; bot y2=0;
+penpos1(dot_size,0); penpos2(dot_size,0);
+penpos1'(dot_size,90); penpos2'(dot_size,-90);
+z1'r=z1; z2'r=z2;
+filldraw obl(1'l,1l,1r)---obl(1r,1'l,1l)---obl(1l,1r,1'l)---cycle;
+filldraw obl(2'l,2l,2r)---obl(2r,2'l,2l)---obl(2l,2r,2'l)---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.sign_tri_colon_half:
+bskchar "Half triangular colon";
+beginchar(chars.sign_tri_colon_half,4.5u#,x_height#,0); uni "0x02D1";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=.15dot_size;
+x1=.5w; top y1=h;
+penpos1(dot_size,0); penpos1'(dot_size,90);
+z1'r=z1;
+filldraw obl(1'l,1l,1r)---obl(1r,1'l,1l)---obl(1l,1r,1'l)---cycle;
+penlabels(1,1');
+endchar;
+
+iff known chars.sign_semicolon:
+bskchar "Semicolon";
+beginchar(chars.sign_semicolon,4.5u#,x_height#,comma_depth#); uni "0x003B";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
+dot(1); comma(2,dot_size,.5hair,d);
+endchar;
+
+iff known chars.sign_commacolon:
+bskchar "Commacolon";
+beginchar(chars.sign_commacolon,4.5u#,x_height#,comma_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
+comma(1,dot_size,.5hair,d); comma(2,dot_size,.5hair,d);
+endchar;
+
+iff known chars.sign_ammoc_comma:
+bskchar "Ammoc above comma";
+beginchar(chars.sign_ammoc_comma,4.5u#,x_height#,comma_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
+comma(2,dot_size,.5hair,d); ammoc(1,dot_size,.5hair,d);
+endchar;
+
+iff known chars.sign_commas_joined:
+bskchar "Two joined commas";
+beginchar(chars.sign_commas_joined,4.5u#,x_height#,comma_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+oblu:=.6dot_size;
+x1=.5w-.5hair=x2; top y1=h-.5dot_size; bot y2=.5dot_size;
+if square_dots:
+else:
+ penpos1'(dot_size,0); penpos1''(dot_size,90); z1'=z1''=z1;
+ penpos2'(dot_size,180); penpos2''(dot_size,-90); z2'=z2''=z2;
+ z1'''=(x1'r+hair,y1''l); z1~=.5[z1,z1'l]+comma_depth*down;
+ z2'''=(x2'r-hair,y2''l); z2~=.5[z2,z2'l]+comma_depth*up;
+ z3~=.5[z1~,z2~];
+ p0:=z1'r{up}..z1''r{left}..{down}z1'l..{right}z1''l..cycle;
+ p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z3~;
+ p2:=z2'r{down}..z2''r{right}..{up}z2'l..{left}z2''l..cycle;
+ p3:=point 3.5 of p2{direction 3.5 of p2 rotated -120}..z3~;
+ filldraw z3~..z1'''..subpath (1.5,rundy(p0,3.5).zpet) of p0
+ ..subpath(rundy(p1,(0,.4dot_size)),infinity) of p1..z2'''
+ ..subpath (1.5,rundy(p2,3.5).zpet) of p2
+ ..subpath(rundy(p3,(0,.4dot_size)),infinity) of p3&cycle;
+ labels(1,1''',1~,2,2''',2~,3~); penlabels(1',1'',2',2'');
+fi
+endchar;
+
+iff known chars.sign_exclamation:
+bskchar "Exclamation point";
+beginchar(chars.sign_exclamation,5u#+punct_fit#,asc_height#,0); uni "0x0021";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot z1=(.5w+.5punct_fit,.5dot_size); dot(1);
+penpos2(dot_size,0); pos3(hair,0); x2=x3=x1;
+y2=h-.5stem; bot y3=dot_size+stem; y3r:=y3r+.5hair;
+filldraw z2l---z3l..{.5[z2,z2r]-z3r}z3r..{z2r-z3r}z2r..cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.sign_spanish_shriek:
+bskchar "Spanish open exclamation point";
+beginchar(chars.sign_spanish_shriek,5u#,asc_height#-desc_depth#,desc_depth#); uni "0x00A1";
+adjust_fit(0,0);
+pickup tiny.nib;
+top z1=(.5w,h-.5dot_size); dot(1);
+penpos2(dot_size,0); pos3(hair,0); x2=x3=x1;
+y2=-d+.5stem; top y3=h-dot_size-stem; y3r:=y3r-.5hair;
+filldraw z2l---z3l..{.5[z2,z2r]-z3r}z3r..{z2r-z3r}z2r..cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.sign_equals:
+bskchar "Equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.sign_equals,13u#,v_center(spread#+rule_thickness#)); uni "0x003D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; top y1r=h;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.sign_circled_equals:
+bskchar "Equals sign in circle";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.sign_circled_equals,17u#,v_center(14u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+pos13(rule_thickness,90); pos14(rule_thickness,90);
+lft x6=u; x2=w-x6; y2=math_axis; top y8=h;
+lft x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw bskrule(11,12,hair,0);
+filldraw bskrule(14,13,hair,0);
+penlabels(11,12,13,14);
+endchar;
+
+iff known chars.sign_neq:
+bskchar "Not equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.sign_neq,13u#,v_center(.75(body_height#+desc_depth#))); uni "0x2260";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+top rt z5=(w-2u,h); top lft z6=(2u,-d);
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+z1'=whatever[z5l,z6l]=whatever[z1r,z2r];
+z2'=whatever[z5r,z6r]=whatever[z1r,z2r];
+z3'=whatever[z5r,z6r]=whatever[z1l,z2l];
+z4'=whatever[z5r,z6r]=whatever[z3r,z4r];
+z5'=whatever[z5r,z6r]=whatever[z3l,z4l];
+z6'=whatever[z5l,z6l]=whatever[z3l,z4l];
+z7'=whatever[z5l,z6l]=whatever[z3r,z4r];
+z8'=whatever[z5l,z6l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,2r).more---z2r
+ ..z2ll---obl(3',2l,4')---obl(4',3',4r).more---z4r..z4l
+ ---obl(5',4l,6r)---z6r..z6ll---obl(6',6l,3l).more---z3ll
+ ..z3r---obl(7',3r,8')---obl(8',7',1l).more---z1l..cycle;
+penlabels(1,2,3,4,5,6); labels(2ll,3ll,5rr,6ll,1',2',3',4',5',6',7',8');
+endchar;
+
+iff known chars.sign_slash:
+bskchar "Slash";
+beginchar(chars.sign_slash,10u#,body_height#,desc_depth#); uni "0x002F";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(w-u,h); bot lft z2=(u,-d);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.sign_backslash:
+bskchar "Backslash sign";
+beginchar(chars.sign_backslash,10u#,body_height#,desc_depth#); uni "0x005C";
+adjust_fit(0,0);
+pickup rule.nib;
+top lft z1=(u,h); bot rt z2=(w-u,-d);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.sign_slash_frac:
+bskchar "Fraction slash";
+beginchar(chars.sign_slash_frac,2u#,body_height#,paren_depth#); uni "0x2044";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(4u,h); bot lft z2=(-4u,-d);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.sign_plus:
+bskchar "Plus sign";
+beginarithchar(chars.sign_plus); uni "0x002B";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=.5w; top y3=h; bot y4=-d;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.sign_tilde:
+bskchar "Tilde";
+beginchar(chars.sign_tilde,11u#,.3[asc_height#,x_height#],0); uni "0x007E";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=3curve;
+vlnka(0,1);
+endchar;
+
+iff known chars.sign_tilde_low:
+bskchar "Low lying tilde";
+beginchar(chars.sign_tilde_low,11u#,bar_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=3curve;
+bot y0=0;
+vlnka(0,1);
+endchar;
+
+iff known chars.sign_asterisk:
+bskchar "Asterisk";
+beginchar(chars.sign_asterisk,8u#,body_height#,0); uni "0x002A";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+z0=.5(w,h); ast:=3/4stem; vast=.55stem;
+pos1(ast,0); x1=x0;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x0:
+ size:= (lft w-u-x0)/cosd(30)-.5ast; fi;
+y1=y0+size;
+p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.sign_hash:
+bskchar "Number sign";
+beginchar(chars.sign_hash,13u#,body_height#,0); uni "0x0023";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+x1r-x3r=x2l-x4l=.35w; rt x1r=w-3u; lft x4l=3u;
+y1r=y3r=h; y2l=y4l=0;
+lft x5-rule_thickness=lft x7=u; rt x6=rt x8+rule_thickness=w-u;
+y5=y6; y7=y8; .5[y5,y7]=.5h; y5-y7=.55x_height;
+numeric theta; theta=angle(z1r-z2l)+90;
+pos1(rule_thickness,theta); pos2(rule_thickness,theta);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(2,1,rule_thickness,0); bskpoints(4,3,0,rule_thickness);
+bskpoints(6,5,rule_thickness,0); bskpoints(8,7,0,rule_thickness);
+y10=y11=y12=y5r; z10=whatever[z1r,z2r]; z11=whatever[z3l,z4l]; z12=whatever[z3r,z4r];
+y13=y5l; z13=whatever[z3r,z4r]; y14=y7r; z14=whatever[z3r,z4r];
+y15=y16=y17=y18=y7l; z15=whatever[z3r,z4r]; z16=whatever[z3l,z4l]; z17=whatever[z1r,z2r];
+y19=y8r; y20=y5l; z18=whatever[z2l,z1l]; z19=whatever[z1l,z2l]; z20=whatever[z1l,z2l];
+y21=y5r; z21=whatever[z1l,z2l];
+filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r..z5l
+ ---obl(13,5l,14)---obl(14,13,7r)---z7r..z7l---obl(15,7l,4l)---z4rr..z4l
+ ---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l..z8r
+ ---obl(19,8r,20)---obl(20,19,6l)---z6l..z6r---obl(21,6r,1r)---z1ll..cycle;
+z0=(x10,y20); z0'=(x11,y13); z0''=(x16,y14); z0'''=(x17,y19);
+infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21);
+endchar;
+
+iff known chars.sign_zero_permile_sign:
+bskchar "Zero for permile sign";
+beginchar(chars.sign_zero_permile_sign,7u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot y1b.l=0; lft x1a.l=u;
+zeroent(1,hair,stem);
+endchar;
+
+iff known chars.sign_percent:
+bskchar "Percent sign";
+beginchar(chars.sign_percent,15u#,body_height#,0); uni "0x0025";
+adjust_fit(0,0);
+numeric theta;
+pickup tiny.nib;
+top y1d.r=h; lft x1a.l=u;
+bot y2b.l=0; rt x2c.r=w-u;
+top y4=h; bot y3=0; x3=3u; x4=w-3u;
+theta:=angle(z4-z3)-90;
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+zeroent(1,stem,hair); zeroent(2,hair,stem);
+filldraw bskrule(3,4,rule_thickness,rule_thickness);
+penlabels(3,4);
+endchar;
+
+iff known chars.sign_abzueglich:
+bskchar "Abzueglich sign";
+beginchar(chars.sign_abzueglich,8u#,body_height#,0); uni "0x2052";
+adjust_fit(0,0);
+numeric theta;
+pickup tiny.nib;
+top y1=h-.5dot_size; lft x1=u+.5dot_size;
+bot y2=.5dot_size; rt x2=w-u-.5dot_size;
+top y4=h; bot y3=0; x3=u; x4=w-u;
+theta:=angle(z4-z3)-90;
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+dot(1); dot(2);
+filldraw bskrule(3,4,rule_thickness,rule_thickness);
+penlabels(3,4);
+endchar;
+
+iff known chars.sign_permile:
+bskchar "One per thousand sign";
+beginchar(chars.sign_permile,21u#,body_height#,0); uni "0x2030";
+adjust_fit(0,0);
+numeric theta;
+pickup tiny.nib;
+top y1d.r=h; lft x1a.l=u;
+bot y2b.l=bot y3b.l=0;
+rt x2c.r=lft x3a.l-1.5u; rt x3c.r=w-u;
+zeroent(1,if monospace: .7\\fi stem,hair); zeroent(3,hair,if monospace: .7\\fi stem);
+zeroent(2,hair,if monospace: .7\\fi stem);
+top y5=h; bot y4=0; x4=2u; x5=.5[x2c,x3a];
+theta:=angle(z5-z4)-90;
+pos4(rule_thickness,theta); pos5(rule_thickness,theta);
+filldraw bskrule(4,5,rule_thickness,rule_thickness);
+penlabels(4,5);
+endchar;
+
+iff known chars.sign_pertenthousand:
+bskchar "One per ten thousand sign";
+beginchar(chars.sign_pertenthousand,27u#,body_height#,0); uni "0x2031";
+adjust_fit(0,0);
+numeric theta;
+pickup tiny.nib;
+top y1d.r=h; lft x1a.l=u;
+bot y2b.l=bot y3b.l=bot y4b.l=0;
+rt x2c.r=lft x3a.l-1.5u; rt x3c.r=lft x4a.l-1.5u; rt x4c.r=w-u;
+zeroent(1,if monospace: .7\\fi stem,hair); zeroent(4,hair,if monospace: .7\\fi stem);
+zeroent(3,hair,if monospace: .7\\fi stem); zeroent(2,hair,if monospace: .7\\fi stem);
+top y6=h; bot y5=0; x5=2u; x6=.5[x2c,x3a];
+theta:=angle(z6-z5)-90;
+pos5(rule_thickness,theta); pos6(rule_thickness,theta);
+filldraw bskrule(5,6,rule_thickness,rule_thickness);
+penlabels(5,6);
+endchar;
+
+iff known chars.sign_french_quotes_left:
+bskchar "French quotes left";
+beginchar(chars.sign_french_quotes_left,9u#,x_height#,0); uni "0x00AB";
+adjust_fit(0,0);
+pickup tiny.nib;
+top y1=top y3=h; bot y1'=bot y3'=0; lft x2l=u; rt x3r=w-u;
+bskfrench(1,2); bskfrench(3,4);
+endchar;
+
+iff known chars.sign_french_quotes_right:
+bskchar "French quotes right";
+beginchar(chars.sign_french_quotes_right,9u#,x_height#,0); uni "0x00BB";
+adjust_fit(0,0);
+pickup tiny.nib;
+top y1=top y3=h; bot y1'=bot y3'=0; rt x2r=w-u; lft x3l=u;
+bskfrenchr(1,2); bskfrenchr(3,4);
+endchar;
+
+iff known chars.sign_french_quote_left:
+bskchar "French quote left";
+beginchar(chars.sign_french_quote_left,4.5u#,x_height#,0); uni "0x2039";
+adjust_fit(0,0);
+pickup tiny.nib;
+top y1=h; bot y1'=0; lft x2l=u;
+bskfrench(1,2);;
+endchar;
+
+iff known chars.sign_french_quote_right:
+bskchar "French quote right";
+beginchar(chars.sign_french_quote_right,4.5u#,x_height#,0); uni "0x203A";
+adjust_fit(0,0);
+pickup tiny.nib;
+top y1=h; bot y1'=0; rt x2r=w-u;
+bskfrenchr(1,2);
+endchar;
+
+iff known chars.sign_blank_space:
+bskchar "Blank-space sign";
+beginchar(chars.sign_blank_space,9.5u#,.5x_height#,.5desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,0); pos2(hair,0); pos3(hair,0); pos4(hair,0);
+top y1=top y4=h; bot y2=bot y3=-d;
+x1l=x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+y2r:=y3l:=y3+hair-currentbreadth;
+filldraw z1l---obl(2l,1l,3)---obl(3r,2l,4r)---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(2ll,3rr);
+endchar;
+
+iff known chars.sign_straight_quote:
+bskchar "Straight single quote";
+beginchar(chars.sign_straight_quote,4.5u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(dot_size,0); pos2(hair,0);
+x1=x1'=x2=.5w; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size;
+filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle;
+penlabels(1,2); labels(1');
+endchar;
+
+iff known chars.sign_straight_quote_base:
+bskchar "Straight single quote on baseline";
+beginchar(chars.sign_straight_quote_base,4.5u#,.5dot_size#,comma_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(dot_size,0); pos2(hair,0);
+x1=x1'=x2=.5w; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size;
+filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle;
+penlabels(1,2); labels(1');
+endchar;
+
+iff known chars.sign_straight_quotes:
+bskchar "Straight double quotes";
+beginchar(chars.sign_straight_quotes,8u#,asc_height#,0); uni "non";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(dot_size,0); pos2(hair,0); pos3(dot_size,0); pos4(hair,0);
+x1=x1'=x2; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size;
+x3=x3'=x4; y3=y1; y3'=y1'; y4=y2;
+.5[x1,x3]=.5w; lft x1l=1.5u;
+filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle;
+filldraw z4r{up}...{up}z3r...z3'...z3l{down}...{down}z4l..cycle;
+penlabels(1,2,3,4); labels(1',3');
+endchar;
+
+iff known chars.sign_straight_quotes_base:
+bskchar "Straight double quote on baseline";
+beginchar(chars.sign_straight_quotes_base,8u#,.5dot_size#,comma_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(dot_size,0); pos2(hair,0); pos3(dot_size,0); pos4(hair,0);
+x1=x1'=x2; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size;
+x3=x3'=x4; y3=y1; y3'=y1'; y4=y2;
+.5[x1,x3]=.5w; lft x1l=1.5u;
+filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle;
+filldraw z4r{up}...{up}z3r...z3'...z3l{down}...{down}z4l..cycle;
+penlabels(1,2,3,4); labels(1',3');
+endchar;
+
+charscription(6u,x_height,0)(
+pos1(stem,90); pos2(stem,90);
+y1r=y2r=.6h; rt x2=w-u;
+lft x1=.5u;
+filldraw bskrule(1,2,hair,hair);
+penlabels(1,2);
+);
+
+iff known chars.sign_hyphen:
+bskchar "Hyphen";
+beginchar(chars.sign_hyphen,6u#,x_height#,0); uni "0x002D";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_hyphen_alt:
+bskchar "Hyphen (at alternative char position)";
+beginchar(chars.sign_hyphen_alt,6u#,x_height#,0); uni "0x2010";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_hyphen_soft:
+bskchar "Soft hyphen";
+beginchar(chars.sign_hyphen_soft,6u#,x_height#,0); uni "0x00AD";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_hyphenchar:
+bskchar "Hyphenchar";
+beginchar(chars.sign_hyphenchar,3u#,x_height#,0); uni "non";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+charscription(6u,x_height,0)(
+pos1(stem,90); pos2(stem,90);
+pos3(stem,90); pos4(stem,90);
+y1r=y2r=.6h;
+y3r=y4r; y1l-y3r=.25x_height;
+rt x2=w-u;
+lft x1=.5u; x3=x1; x4=x2;
+filldraw bskrule(1,2,hair,hair);
+filldraw bskrule(3,4,hair,hair);
+penlabels(1,2,3,4);
+);
+
+iff known chars.sign_double_hyphen:
+bskchar "Double hyphen";
+beginchar(chars.sign_double_hyphen,6u#,x_height#,0); uni "non";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_double_hyphenchar:
+bskchar "Double hyphenchar";
+beginchar(chars.sign_double_hyphenchar,3u#,x_height#,0); uni "non";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_endash:
+bskchar "En dash";
+beginchar(chars.sign_endash,9u#,x_height#,0); uni "0x2013";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(hair,90);
+top y1r=top y2r=2/3h;
+lft x1=if monospace: u else: 0 fi; x2=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2); endchar;
+
+iff known chars.sign_figdash:
+bskchar "Figural dash";
+beginchar(chars.sign_figdash,figw(10u),x_height#,0); uni "0x2012";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(hair,90);
+top y1r=top y2r=2/3h;
+lft x1=0; x2=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2); endchar;
+
+iff known chars.sign_twelvedash:
+bskchar "Twelve u dash";
+beginchar(chars.sign_twelvedash,12u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(hair,90);
+top y1r=top y2r=2/3h;
+lft x1=0; x2=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2); endchar;
+
+iff known chars.sign_themdash:
+bskchar "Three quarters em dash";
+beginchar(chars.sign_themdash,13.5u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(hair,90);
+top y1r=top y2r=2/3h;
+lft x1=0; x2=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2); endchar;
+
+iff known chars.sign_emdash:
+bskchar "Em dash";
+beginchar(chars.sign_emdash,18u#,x_height#,0); uni "0x2014";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(hair,90);
+top y1r=top y2r=2/3h;
+lft x1=0; rt x2=w;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2); endchar;
+
+iff known chars.sign_underbar:
+bskchar "Underbar sign";
+beginchar(chars.sign_underbar,9u#,0,desc_depth#-.5rule_thickness#); uni "0x005F";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+top y1r=top y2r=2/3h;
+lft x1=0; x2=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2);
+endchar;
+
+iff known chars.latin_grave:
+bskchar "Grave accent";
+beginchar(chars.latin_grave,6u#,asc_height#,0); uni "0x0060";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+grave(0,1);
+endchar;
+
+iff known chars.latin_grave_capital:
+bskchar "Grave accent (capital)";
+beginchar(chars.latin_grave_capital,6u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+grave(0,1).capital;
+endchar;
+
+iff known chars.latin_acute:
+bskchar "Acute accent";
+beginchar(chars.latin_acute,6u#,asc_height#,0); uni "0x00B4";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+acute(0,1);
+endchar;
+
+iff known chars.latin_acute_capital:
+bskchar "Acute accent (capital)";
+beginchar(chars.latin_acute_capital,6u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+acute(0,1).capital;
+endchar;
+
+iff known chars.latin_hacek:
+bskchar "Check accent (hacek)";
+beginchar(chars.latin_hacek,7u#,asc_height#,0); uni "0x02C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+hacek(0,1,2);
+endchar;
+
+iff known chars.latin_hacek_capital:
+bskchar "Check accent (hacek) (capital)";
+beginchar(chars.latin_hacek_capital,7u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+hacek(0,1,2).capital;
+endchar;
+
+iff known chars.sign_hacek:
+bskchar "Hacek";
+beginchar(chars.sign_hacek,9u#,asc_height#,0); uni "0x02C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+x0=u; x2=w-u;
+hacek(0,1,2);
+endchar;
+
+iff known chars.sign_circumflex:
+bskchar "Circumflex";
+beginchar(chars.sign_circumflex,8u#,asc_height#,0); uni "0x005E";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=.5w+o;
+circumflex(0,1,2);
+endchar;
+
+iff known chars.latin_circumflex:
+bskchar "Circumflex accent";
+beginchar(chars.latin_circumflex,7u#,asc_height#,0); uni "0x02C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+circumflex(0,1,2);
+endchar;
+
+iff known chars.latin_circumflex_capital:
+bskchar "Circumflex accent (capital)";
+beginchar(chars.latin_circumflex_capital,7u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+circumflex(0,1,2).capital;
+endchar;
+
+iff known chars.latin_breve:
+bskchar "Breve accent";
+beginchar(chars.latin_breve,7u#,asc_height#,0); uni "0x02D8";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+breve(0,1,2);
+endchar;
+
+iff known chars.latin_breve_capital:
+bskchar "Breve accent (capital)";
+beginchar(chars.latin_breve_capital,7u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+breve(0,1,2).capital;
+endchar;
+
+iff known chars.sign_breve:
+bskchar "Breve";
+beginchar(chars.sign_breve,9u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x2=w-u; x0=u;
+breve(0,1,2);
+endchar;
+
+iff known chars.latin_inverted_breve:
+bskchar "Inverted breve accent";
+beginchar(chars.latin_inverted_breve,7u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+tieacc(0,1,2);
+endchar;
+
+iff known chars.latin_inverted_breve_capital:
+bskchar "Inverted breve accent (capital)";
+beginchar(chars.latin_inverted_breve_capital,7u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+tieacc(0,1,2).capital;
+endchar;
+
+iff known chars.latin_tie:
+bskchar "Tie accent";
+beginchar(chars.latin_tie,7u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w; x2-x0=6u;
+tieacc(0,1,2);
+endchar;
+
+iff known chars.latin_tie_capital:
+bskchar "Tie accent (capital)";
+beginchar(chars.latin_tie_capital,7u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w; x2-x0=6u;
+tieacc(0,1,2).capital;
+endchar;
+
+iff known chars.latin_macron:
+bskchar "Macron accent";
+beginchar(chars.latin_macron,7u#,.5[asc_height#,x_height#],0); uni "0x00AF";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=u;
+macron(0,1);
+endchar;
+
+iff known chars.latin_macron_capital:
+bskchar "Macron accent (capital)";
+beginchar(chars.latin_macron_capital,7u#,Acc_height#-.1x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=u;
+macron(0,1);
+endchar;
+
+iff known chars.latin_ring:
+bskchar "Ring accent (krouzek)";
+beginchar(chars.latin_ring,6u#,asc_height#,0); uni "0x02DA";
+adjust_fit(0,0);
+pickup tiny.nib;
+x0=.5w;
+ring(0,1);
+endchar;
+
+iff known chars.latin_ring_capital:
+bskchar "Ring accent (capital)";
+beginchar(chars.latin_ring_capital,6u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x0=.5w;
+ring(0,1).capital;
+endchar;
+
+iff known chars.latin_dot_above:
+bskchar "Dot accent";
+beginchar(chars.latin_dot_above,6u#,asc_height#,0); uni "0x02D9";
+adjust_fit(0,0);
+pickup tiny.nib;
+x0=.5w;
+dotabove(0);
+endchar;
+
+iff known chars.latin_dot_above_capital:
+bskchar "Dot accent (capital)";
+beginchar(chars.latin_dot_above_capital,6u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x0=.5w;
+dotabove(0);
+endchar;
+
+iff known chars.latin_umlaut:
+bskchar "Umlaut accent";
+beginchar(chars.latin_umlaut,8u#,asc_height#,0); uni "0x00A8";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5[x0,x1]=.5w;
+umlaut(0,1);
+endchar;
+
+iff known chars.latin_umlaut_capital:
+bskchar "Umlaut accent (capital)";
+beginchar(chars.latin_umlaut_capital,8u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5[x0,x1]=.5w;
+umlaut(0,1);
+endchar;
+
+iff known chars.latin_tilde:
+bskchar "Tilde accent";
+beginchar(chars.latin_tilde,8u#,asc_height#,0); uni "0x02DC";
+adjust_fit(0,0);
+pickup tiny.nib;
+tilde(0,1);
+endchar;
+
+iff known chars.latin_tilde_capital:
+bskchar "Tilde accent (capital)";
+beginchar(chars.latin_tilde_capital,8u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+tilde(0,1).capital;
+endchar;
+
+iff known chars.latin_hungarian_umlaut:
+bskchar "Hungarian umlaut accent";
+beginchar(chars.latin_hungarian_umlaut,6u#,asc_height#,0); uni "0x02DD";
+adjust_fit(0,0);
+pickup tiny.nib;
+h_umlaut(0,1,0',1',.2w);
+endchar;
+
+iff known chars.latin_hungarian_umlaut_capital:
+bskchar "Hungarian umlaut accent (capital)";
+beginchar(chars.latin_hungarian_umlaut_capital,6u#,Acc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+h_umlaut(0,1,0',1',.2w).capital;
+endchar;
+
+iff known chars.polish_cross:
+bskchar "Cross for Polish l";
+beginchar(chars.polish_cross,6u#,x_height#,0); uni "non";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+.5[x1,x2]=.5w;
+pol_cross(1,2);
+endchar;
+
+iff known chars.latin_ogonek:
+bskchar "Ogonek accent";
+beginchar(chars.latin_ogonek,7u#,0,.85desc_depth#); uni "0x02DB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(curve,0); pos3(hair,45); pos4(hair,160);
+x1=3.5u; x2l=2u; x3=w-2u; rt x4l=w-.5u;
+y1=0; y2=-.5d; bot y3l=-d; y4=-2/3d;
+filldraw z1l{z2l-z1r}..z2l...z3l..{z1-z2}z4l..z4r{z2-z1}..z3r..z2r..z1r&z1r..z1+.5o*up..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.latin_cedilla:
+bskchar "Cedilla accent";
+beginchar(chars.latin_cedilla,6u#,0,.65desc_depth#); uni "0x00B8";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=3oblu;
+pos1(.5stem,0); pos2(.5stem,0); pos3(.8stem,0); pos4(.5stem,-110);
+x1r=x2r=.5w; y1=0; y2=-hair; rt x3r=w-u; y3=-.5d;
+lft x4r=u;
+y4r=-d;
+p:=z2r..{down}z3r..{left}z4r..{right}z4l..{up}z3l..z2l--z1l;
+filldraw z1r{down}..subpath (rundy(p,0),infinity) of p--cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.latin_cedilla_capital:
+bskchar "Cedilla accent (capital)";
+beginchar(chars.latin_cedilla_capital,6u#,0,.65desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=3oblu;
+pos1(.5stem,0); pos2(.5stem,0); pos3(stem,0); pos4(.5stem,-110);
+x1r=x2r=.5w; y1=0; y2=-hair; rt x3r=w-u; y3=-.5d;
+lft x4r=u;
+y4r=-d;
+p:=z2r..{down}z3r..{left}z4r..{right}z4l..{up}z3l..z2l--z1l;
+filldraw z1r{down}..subpath (rundy(p,0),infinity) of p--cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_left:
+bskchar "Left turnstile";
+beginchar(chars.math_lattice_left,12u#,asc_height#,0); uni "0x22A2";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=u; rt x4=w-u; x3=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
+ z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_right:
+bskchar "Right turnstile";
+beginchar(chars.math_lattice_right,12u#,asc_height#,0); uni "0x22A3";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+rt x1r=rt x2r=w-u; lft x4=u; x3=x2l;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_top:
+bskchar "Lattice top";
+beginchar(chars.math_lattice_top,14u#,asc_height#,0); uni "0x22A4";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+top y1r=top y2r=h; y3=y1l; bot y4=-d;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_bottom:
+bskchar "Lattice bottom";
+beginchar(chars.math_lattice_bottom,14u#,asc_height#,0); uni "0x22A5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,270); pos2(rule_thickness,270);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bot y1r=bot y2r=-d; y3=y1l; top y4=h;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_triangle_up:
+bskchar "Big triangle up";
+beginchar(chars.math_triangle_up,17u#,asc_height#,desc_depth#); uni "0x25B3";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+bot y1=bot y2=0; top y3=h+o;
+y1'=y2'=y1+lw;
+x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_right:
+bskchar "Triangle pointing right";
+beginchar(chars.math_triangle_right,x_height#+2u#,v_center(x_height#)); uni "0x22B3";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=0;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_left:
+bskchar "Triangle pointing left";
+beginchar(chars.math_triangle_left,x_height#+2u#,v_center(x_height#)); uni "0x22B2";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=0;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_black_right:
+bskchar "Black triangle pointing right";
+beginchar(chars.math_triangle_black_right,x_height#+2u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=0;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_black_left:
+bskchar "Black triangle pointing left";
+beginchar(chars.math_triangle_black_left,x_height#+2u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=0;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_black_up:
+bskchar "Big black triangle up";
+beginchar(chars.math_triangle_black_up,17u#,asc_height#,desc_depth#); uni "0x25B2";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+bot y1=bot y2=-d; top y3=h+o;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_triangle_down:
+bskchar "Big triangle down";
+beginchar(chars.math_triangle_down,17u#,asc_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+top y1=top y2=h-d; bot y3=-d-o;
+y1'=y2'=y1-lw;
+x1'-x1=x2-x2'=-lw/sind(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_black_down:
+bskchar "Big black triangle down";
+beginchar(chars.math_triangle_black_down,17u#,asc_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+top y1=top y2=h; bot y3=-d-o;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_big_triangle_right:
+bskchar "Big triangle right";
+beginchar(chars.math_big_triangle_right,17u#,asc_height#,0desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=lft x2=u; rt x3=w-u;
+top y1=h+o; bot y2=-d-o; y3=.5[y1,y2];
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z2));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_black_right:
+bskchar "Big black triangle right";
+beginchar(chars.math_triangle_black_right,17u#,asc_height#,0desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=lft x2=u; rt x3=w-u;
+top y1=h+o; bot y2=-d-o; y3=.5[y1,y2];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_big_triangle_left:
+bskchar "Big triangle left";
+beginchar(chars.math_big_triangle_left,17u#,asc_height#,0desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+rt x1=rt x2=w-u; lft x3=u;
+top y1=h+o; bot y2=-d-o; y3=.5[y1,y2];
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z2));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_black_left:
+bskchar "Big black triangle left";
+beginchar(chars.math_triangle_black_left,17u#,asc_height#,0desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+rt x1=rt x2=w-u; lft x3=u;
+top y1=h+o; bot y2=-d-o; y3=.5[y1,y2];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_curved_triangle_up:
+bskchar "Big curved triangle up";
+beginchar(chars.math_curved_triangle_up,17u#,asc_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+bot y1=bot y2=-d; top y3=h+o;
+y1'=y2'=y1+lw;
+x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+z2''=.5[z1,z2]+hair*up;
+filldraw obl(1,3,2)..z2''..obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')..z2''+lw*up..obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',1'',2,2',2'',3,3');
+endchar;
+
+iff known chars.math_curved_triangle_up_black:
+bskchar "Big curved triangle up";
+beginchar(chars.math_curved_triangle_up_black,17u#,asc_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+bot y1=bot y2=-d; top y3=h+o;
+y1'=y2'=y1+lw;
+x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+z1''=.5[z1,z3]+2hair*dir(angle(z3-z1)-90);
+z2''=.5[z1,z2]+hair*up;
+z3''=.5[z2,z3]+2hair*dir(angle(z3-z2)+90);
+filldraw z1+oblu*right{right}..z2''..{right}z2+oblu*left..
+ z2+oblu*unitvector(z3-z2){z3-z2}
+ ..z3''...{z3-z2}z3+oblu*unitvector(z2-z3)..z3+oblu*unitvector(z1-z3){z1-z3}..
+ z1''..{z1-z3}z1+oblu*unitvector(z3-z1)..cycle;
+labels(1,1',1'',2,2',2'',3,3',3'');
+endchar;
+
+iff known chars.math_sum_text:
+bskchar "\textstyle summation sign";
+beginchar(chars.math_sum_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+numeric alpha, top_stem, top_arm, bot_arm;
+top_arm=Vround rule_thickness;
+bot_arm=Vround .5[cap_stem,rule_thickness];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=-d; top y2=h;
+lft x1l=lft x2l-o=.5u;
+bot y3r=-d; top y4r=h; rt x3l=w-u; x4r=w-2u;
+pos3(beak,-90); z3d=(x3r-2ser_height,y1+bot_arm);
+pos4(.65beak,90); z4d=(x4r-ser_height,y2r.b);
+z3l.o=z3l+o*left; z4l.o=z4l+o*left;
+x5r=.5w-o; y5=.5[h,-d]+cap_hair;
+alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r);
+pos5(alpha*cap_stem,0);
+alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r);
+pos6(alpha*cap_hair,0); z5r=z6r;
+z1r-z1r.b=bot_arm*down;
+y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
+z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
+y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
+filldraw z3l..{dir-110}z3l.o..z3d
+ ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d)
+ ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
+ ---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l)---cycle;
+penlabels(1,2,3,4,5,6); labels(1',1r.b,4d,4l.o,5',2r.b);
+endchar;
+
+iff known chars.math_sum_disp:
+bskchar "\displaystyle summation sign";
+beginchar(chars.math_sum_disp,19u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+numeric alpha, top_stem, top_arm, bot_arm;
+top_arm=Vround 1.5rule_thickness;
+bot_arm=Vround cap_stem;
+pos1(1.5cap_stem,0); pos2(1.5cap_stem,0);
+bot y1=-d; top y2=h;
+lft x1l=lft x2l-o=.5u;
+bot y3r=-d; top y4r=h; rt x3l=w-u; x4r=w-2u;
+pos3(1.25beak,-90); z3d=(x3r-2ser_height,y1+bot_arm);
+pos4(.8beak,90); z4d=(x4r-ser_height,y2r.b);
+z3l.o=z3l+o*left; z4l.o=z4l+o*left;
+x5r=.5w-o; y5=.5[h,-d]+cap_hair;
+alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r);
+pos5(1.5alpha*cap_stem,0);
+alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r);
+pos6(1.5alpha*cap_hair,0); z5r=z6r;
+z1r-z1r.b=bot_arm*down;
+y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
+z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
+y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
+filldraw z3l..{dir-110}z3l.o..z3d
+ ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d)
+ ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
+ ---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l)---cycle;
+penlabels(1,2,3,4,5,6); labels(1',4d,4l.o,5',2r.b);
+endchar;
+
+iff known chars.math_prod_text:
+bskchar "\textstyle product sign";
+beginchar(chars.math_prod_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(1.1cap_stem,0); pos2(1.1cap_stem,0);
+pos3(1.1cap_stem,0); pos4(1.1cap_stem,0);
+bot y1=bot y3=-d; top y2=top y4=h;
+lft x1l=lft x2l=u;
+x3r=x4r=w-x1l;
+{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem];
+ cap_serifs_tl(2l); cap_serifs_tr(2r);
+ cap_serifs_tl(4l); cap_serifs_tr(4r);
+ cap_serifs_br(1r); cap_serifs_bl(3l);
+}};
+cap_serifs_bl(1l);
+cap_serifs_br(3r);
+z2'=(x2r,y2r.b-1.2stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c-hair);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b---
+ z2'..{right}z3'..z4'
+ ---z3l.b..{left}z3l.c..z3l.a---z3r.a..z3r.c{left}..z3r.b---z4r.b..
+ {right}z4r.c..{left}z4r.a..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4); labels(2',3',4');
+endchar;
+
+iff known chars.math_prod_disp:
+bskchar "\displaystyle product sign";
+beginchar(chars.math_prod_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(1.5cap_stem,0); pos2(1.5cap_stem,0);
+pos3(1.5cap_stem,0); pos4(1.5cap_stem,0);
+bot y1=bot y3=-d; top y2=top y4=h;
+lft x1l=lft x2l=u;
+x3r=x4r=w-x1l;
+{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem];
+ cap_serifs_tl(2l); cap_serifs_tr(2r);
+ cap_serifs_tl(4l); cap_serifs_tr(4r);
+ cap_serifs_br(1r); cap_serifs_bl(3l);
+}};
+cap_serifs_bl(1l);
+cap_serifs_br(3r);
+z2'=(x2r,y2r.b-1.5stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c-cap_hair);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b---
+ z2'..{right}z3'..z4'
+ ---z3l.b..{left}z3l.c..z3l.a---z3r.a..z3r.c{left}..z3r.b---z4r.b..
+ {right}z4r.c..{left}z4r.a..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4); labels(2',3',4');
+endchar;
+
+iff known chars.math_coprod:
+bskchar "Coproduct sign";
+beginchar(chars.math_coprod,12u#,cap_height#,0); uni "0x2210";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+top y1=top y3=h; bot y2=bot y4=-d;
+lft x1l=lft x2l=1.5u;
+x3r=x4r=w-x1l;
+{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem];
+ cap_serifs_bl(2l); cap_serifs_br(2r);
+ cap_serifs_bl(4l); cap_serifs_br(4r);
+ cap_serifs_tr(1r); cap_serifs_tl(3l);
+ cap_serifs_tl(1l); cap_serifs_tr(3r);
+}};
+z2'=(x2r,y2r.b+.5stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c);
+filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b
+ ---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a
+ ..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a
+ ..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4); labels(2',3',4');
+endchar;
+
+iff known chars.math_coprod_text:
+bskchar "\textstyle coproduct sign";
+beginchar(chars.math_coprod_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(1.1cap_stem,0); pos2(1.1cap_stem,0);
+pos3(1.1cap_stem,0); pos4(1.1cap_stem,0);
+top y1=top y3=h; bot y2=bot y4=-d;
+lft x1l=lft x2l=1.5u;
+x3r=x4r=w-x1l;
+{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem];
+ cap_serifs_bl(2l); cap_serifs_br(2r);
+ cap_serifs_bl(4l); cap_serifs_br(4r);
+ cap_serifs_tr(1r); cap_serifs_tl(3l);
+ cap_serifs_tl(1l); cap_serifs_tr(3r);
+}};
+z2'=(x2r,y2r.b+.75stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c+hair);
+filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b
+ ---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a
+ ..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a
+ ..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4); labels(2',3',4');
+endchar;
+
+iff known chars.math_coprod_disp:
+bskchar "\displaystyle coproduct sign";
+beginchar(chars.math_coprod_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(1.5cap_stem,0); pos2(1.5cap_stem,0);
+pos3(1.5cap_stem,0); pos4(1.5cap_stem,0);
+top y1=top y3=h; bot y2=bot y4=-d;
+lft x1l=lft x2l=1.5u;
+x3r=x4r=w-x1l;
+{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem];
+ cap_serifs_bl(2l); cap_serifs_br(2r);
+ cap_serifs_bl(4l); cap_serifs_br(4r);
+ cap_serifs_tr(1r); cap_serifs_tl(3l);
+ cap_serifs_tl(1l); cap_serifs_tr(3r);
+}};
+z2'=(x2r,y2r.b+1.2stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c+cap_hair);
+filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b
+ ---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a
+ ..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a
+ ..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4); labels(2',3',4');
+endchar;
+
+iff known chars.math_int:
+bskchar "Integral sign";
+beginchar(chars.math_int,10u#,asc_height#,desc_depth#); uni "0x222B";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w-u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_text:
+bskchar "\textstyle integral sign";
+beginchar(chars.math_int_text,8.5u#,0,11/6dh#); uni "non";
+italcorr 3u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(bourstem,0); x1=good.x .5w; y1=.5[h,-d];
+pos2(stem,0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve; x3-lft x2l=.85*2.75u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w+curve; z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(stem,180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_disp:
+bskchar "\displaystyle integral sign";
+beginchar(chars.math_int_disp,17u#,0,4dh#); uni "non";
+italcorr 6u#;
+adjust_fit(0,-ic#);
+pickup tiny.nib;
+numeric fend; fend:=1.5bourstem;
+pos1(1.5bourstem,0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,bourstem],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve; x3-lft x2l=2.75u;
+top y3l=h+o; .45[x2r,x4]=x3; y4''=y3r-1.5like_hair;
+rt x4l=w+curve; z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,bourstem],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_oint_text:
+bskchar "\textstyle contour integral sign";
+beginchar(chars.math_oint_text,8.5u#,0,11/6dh#); uni "non";
+italcorr 3u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(bourstem,0); x9=good.x .5w; y9=.5[h,-d];
+pos10(stem,0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=.85*2.75u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w+curve; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+p2=reverse (draw_circle.r);
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_disp:
+bskchar "\displaystyle contour integral sign";
+beginchar(chars.math_oint_disp,17u#,0,4dh#); uni "non";
+italcorr 6u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5bourstem; oblu:=4oblu;
+path p[];
+pos9(1.5bourstem,0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,bourstem],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2.75u;
+top y11l=h+o; .45[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w+curve; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(.5[stem,bourstem],180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(1.2rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+p2=reverse (draw_circle.r);
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_sqintersection:
+bskchar "Square set intersection sign";
+beginchar(chars.math_sqintersection,11u#,.8asc_height#,0); uni "0x2293";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+bot y1=bot y4=-d; top y2=top y3=h;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+y2r:=y3l:=y3-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_squnion:
+bskchar "Square set union sign";
+beginchar(chars.math_squnion,11u#,.8asc_height#,0); uni "0x2294";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+top y1=top y4=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+y2r:=y3l:=y3+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_squnion_text:
+bskchar "\textstyle square set union sign";
+beginchar(chars.math_squnion_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(stem,0); pos4(stem,0);
+top y1=top y4=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,stem,stem); bskpoints(3,4,stem,stem);
+y2r:=y3l:=y3+stem-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..z1..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_squnion_disp:
+bskchar "\displaystyle square set union sign";
+beginchar(chars.math_squnion_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(bourstem,0); pos2(bourstem,0); pos3(bourstem,0); pos4(bourstem,0);
+top y1=top y4=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,stem,stem); bskpoints(3,4,stem,stem);
+y2r:=y3l:=y3+bourstem-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4+2o*up..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..z1+2o*up..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_union:
+bskchar "Set union sign";
+beginchar(chars.math_union,11u#,.8asc_height#,0); uni "0x222A";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_text:
+bskchar "\textstyle set union sign";
+beginchar(chars.math_union_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(.9stem,90); pos4(stem,180); pos5(stem,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_disp:
+bskchar "\displaystyle set union sign";
+beginchar(chars.math_union_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(bourstem,0); pos2(bourstem,0); pos3(.9bourstem,90); pos4(bourstem,180); pos5(bourstem,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*up..z5rr---z4r...z3r...z2r---z1rr..z1+2o*up..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_multiunion:
+bskchar "Multiset union sign";
+beginchar(chars.math_multiunion,11u#,.8asc_height#,0); uni "0x228E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1];
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_multiunion_text:
+bskchar "\textstyle multiset union sign";
+beginchar(chars.math_multiunion_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(.9stem,90); pos4(stem,180); pos5(stem,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1];
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_multiunion_disp:
+bskchar "\displaystyle multiset union sign";
+beginchar(chars.math_multiunion_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(bourstem,0); pos2(bourstem,0); pos3(.9bourstem,90); pos4(bourstem,180); pos5(bourstem,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*up..z5rr---z4r...z3r...z2r---z1rr..z1+2o*up..cycle;
+pos6(stem,90); pos7(stem,90);
+pos8(stem,0); pos9(stem,0);
+lft x6=rt x1r + bourstem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1];
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,stem,stem); bskpoints(9,8,.5stem,.5stem);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection:
+bskchar "Set intersection sign";
+beginchar(chars.math_intersection,11u#,.8asc_height#,0); uni "0x2229";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_text:
+bskchar "\textstyle set intersection sign";
+beginchar(chars.math_intersection_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(.9stem,-90); pos4(stem,180); pos5(stem,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_disp:
+bskchar "\displaystyle set intersection sign";
+beginchar(chars.math_intersection_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(bourstem,0); pos2(bourstem,0); pos3(.9bourstem,-90); pos4(bourstem,180); pos5(bourstem,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*down..z5rr---z4r...z3r...z2r---z1rr..z1+2o*down..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_infinity:
+bskchar "Infinity sign";
+beginchar(chars.math_infinity,16u#,x_height#,0); uni "0x221E";
+italcorr x_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2oblu;
+testem=.5[curve, hair]; tlstem=.75[curve,stem];
+pos1(testem,90); pos2(tlstem,270); pos3(tlstem,270); pos4(testem,90);
+pos5(vair,180); pos6(vair,180);
+lft x6r=u; rt x5l=w-u;
+bot y3r=bot y1l=-o; top y4r=top y2l=h+o;
+x3=x4=.27(w-2u)+u; x1=x2=.76(w-2u)+u;
+y5=y6=.5h; z0=(.5w,.5h);
+p0:=z6{down}..z3..z0..z2..{up}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{down}..z3r..z0r..z2r..z5r{down};
+p2=z4l{right}..z0{dir-70}..{right}z1l;
+p3=z5l{up}..z2l..z0l..z3l..{up}z6l;
+p4=z1r{left}..z0{dir110}..{left}z4r;
+p5=z6l{down}..z3l..z0l..z2l..z5l{down};
+
+z10=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z10--(x3,y10)));
+tim2=xpart(p2 intersectiontimes (z10--(x1,y10)));
+z11=bsktouch(p3,left,p4,right);
+tim3=xpart(p3 intersectiontimes (z11--(x2,y11)));
+tim4=xpart(p4 intersectiontimes (z11--(x3,y11)));
+(tim5,tim6)=p5 intersectiontimes p2;
+(tim7,tim8)=p1 intersectiontimes p4;
+
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+infill subpath(0,rundy(p5,tim5).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle;
+infill subpath(rundy(p1,tim7),infinity) of p1
+ ..subpath(0,rundy(p4,tim8).zpet) of p4..cycle;
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_propto:
+bskchar "Proportionality sign";
+beginchar(chars.math_propto,12u#,x_height#,0); uni "0x221D";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2oblu;
+testem=.5[curve, hair]; tlstem=.75[curve,stem];
+pos1(testem,90); pos2(testem,270); pos3(tlstem,270); pos4(testem,90);
+pos5(vair,180); pos6(vair,180);
+lft x6r=u; rt x5l=w+2u;
+bot y3r=bot y1l=-o; top y4r=top y2l=h+o;
+x3=x4=.5[x6,x0]-o; x1=w-u-.5testem; x2=w-u-.5tlstem;
+y5=y6=.5h; z0=.5[z6,z5];
+p0:=z6{down}..z3..z0..z2..{up}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{down}..z3r..z0r..z2r..z5r{down};
+p2=z4l{right}..z0{dir-70}..{right}z1l;
+p3=z5l{up}..z2l..z0l..z3l..{up}z6l;
+p4=z1r{left}..z0{dir110}..{left}z4r;
+p5=z6l{down}..z3l..z0l..z2l..z5l{down};
+
+z10=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z10--(x3,y10)));
+tim2=xpart(p2 intersectiontimes (z10--(x1,y10)));
+z11=bsktouch(p3,left,p4,right);
+tim3=xpart(p3 intersectiontimes (z11--(x2,y11)));
+tim4=xpart(p4 intersectiontimes (z11--(x3,y11)));
+(tim5,tim6)=p5 intersectiontimes p2;
+(tim7,tim8)=p1 intersectiontimes p4;
+
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..subpath(0,rundy(p4,tim8).zpet) of p4
+ ..subpath(2,3) of p1
+ ..subpath(1,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+infill subpath(0,rundy(p5,tim5).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle;
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_surd:
+bskchar "Root sign (surd)";
+beginchar(chars.sign_surd,10u#,asc_height#,0); uni "0x221A";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=220;
+pos0(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,theta-90); pos4(rule_thickness,theta-90);
+x1l=good.x(w-2u); top y1l=h-o+apex_o;
+x2l=5u; bot y2l=-d-apex_o;
+y0r=y1r; x0r=w;
+bot y3l=2/3[h,-d]; lft x3r=2u;
+x4l=u; z4l=z3l+whatever*dir(theta);
+z3'=z3r+(stem-currentbreadth)*unitvector(z3-z4);
+z2'=z2r+(stem-currentbreadth)*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+p3:=(x1l,y0l){dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l;
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z0l---(x1l+f_obl,y0l)..subpath(rundy(p3,(0,f_obl)),infinity) of p3
+ &subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim1),rundy(p1,(length p1,f_obl)).zpet) of p1
+ ..z1r+f_obl*right---z0r..cycle;
+penlabels(0,1,2,3,4); labels(2',2'',3',5);
+endchar;
+
+iff known chars.sign_root:
+bskchar "Root sign (text)";
+beginchar(chars.sign_root,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=95;
+pos2(rule_thickness,90);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+x1l=good.x(w-u+.5); top y1l=h-o+apex_o;
+x2l=.5w; bot y2l=-d-apex_o;
+bot y3l=2/3[h,-d]; lft x3r=3u;
+x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta);
+z3'=z3r+(stem-currentbreadth)*unitvector(z3-z4);
+z2'=z2r+(stem-currentbreadth)*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4); labels(2',2'',3');
+endchar;
+
+iff known chars.math_root:
+bskchar "Root sign (math)";
+beginchar(chars.math_root,14u#,rule_thickness#,body_height#+paren_depth#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=95;
+pos2(rule_thickness,90);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+x1l=good.x(w+.5); bot y1l=0;
+x2l=.5w; bot y2l=-d-apex_o;
+bot y3l=2/3[h,-d]; lft x3r=3u;
+x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta);
+z3'=z3r+(stem-currentbreadth)*unitvector(z3-z4);
+z2'=z2r+(stem-currentbreadth)*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4); labels(2',2'',3');
+endchar;
+
+iff known chars.math_root_big:
+bskchar "\big root sign";
+beginchar(chars.math_root_big,18u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=95;
+pos2(rule_thickness,90);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+x1l=good.x(w+.5); bot y1l=0;
+x2l=.5w; bot y2l=-d-apex_o;
+bot y3l=2/3[h,-d]; lft x3r=3u;
+x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta);
+z3'=z3r+stem*unitvector(z3-z4);
+z2'=z2r+stem*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4); labels(2',2'',3');
+endchar;
+
+iff known chars.math_root_Big:
+bskchar "\Big root sign";
+beginchar(chars.math_root_Big,18u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=95;
+pos2(rule_thickness,90);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+x1l=good.x(w+.5); bot y1l=0;
+x2l=.5w; bot y2l=-d-apex_o;
+bot y3l=2/3[h,-d]; lft x3r=3u;
+x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta);
+z3'=z3r+stem*unitvector(z3-z4);
+z2'=z2r+stem*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4); labels(2',2'',3');
+endchar;
+
+iff known chars.math_root_bigg:
+bskchar "\bigg root sign";
+beginchar(chars.math_root_bigg,18u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=95;
+pos2(rule_thickness,90);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+x1l=good.x(w+.5); bot y1l=0;
+x2l=.5w; bot y2l=-d-apex_o;
+bot y3l=2/3[h,-d]; lft x3r=3u;
+x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta);
+z3'=z3r+stem*unitvector(z3-z4);
+z2'=z2r+stem*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4); labels(2',2'',3');
+endchar;
+
+iff known chars.math_root_Bigg:
+bskchar "\Bigg root sign";
+beginchar(chars.math_root_Bigg,18u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=95;
+pos2(rule_thickness,90);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+x1l=good.x(w+.5); bot y1l=0;
+x2l=.5w; bot y2l=-d-apex_o;
+bot y3l=2/3[h,-d]; lft x3r=3u;
+x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta);
+z3'=z3r+stem*unitvector(z3-z4);
+z2'=z2r+stem*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4); labels(2',2'',3');
+endchar;
+
+iff known chars.math_root_bottom:
+bskchar "Extensible root sign---bottom";
+beginchar(chars.math_root_bottom,19u#,0,3dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+numeric theta; theta:=95;
+pos2(rule_thickness,90);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+y1l=h; x1l=x2l=w-6u; bot y2l=-d-apex_o;
+bot y3l=2/3[h,-d]; lft x3r=3u;
+x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta);
+z3'=z3r+stem*unitvector(z3-z4);
+z2'=z2r+stem*unitvector(z3-z4);
+z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90;
+pos1(rule_thickness,angle(z2''-z2r));
+p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l;
+p1:=z2''--z1r;
+p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2';
+z5=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z5--(w,y5)));
+tim2=xpart(p2 intersectiontimes (z5--(0,y5)));
+filldraw z1l--z2l&subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r
+ ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4); labels(2',2'',3');
+endchar;
+
+iff known chars.math_root_mid:
+bskchar "Extensible root sign---extension module";
+beginchar(chars.math_root_mid,19u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+y1=h; x1l=x2l=w-6u; bot y2=-d;
+filldraw z1l---z2l..z2r---z1r..cycle;
+penlabels(1,2);
+endchar;
+
+iff known chars.math_root_top:
+bskchar "Extensible root sign---top";
+beginchar(chars.math_root_top,19u#,rule_thickness#,dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90);
+y1=-d; x1r=x2r=w-6u; bot y3l=0; y3r=y2;
+x3=good.x(w+.5); y2r:=y3l;
+filldraw z1l---obl(2l,1l,3r)---z3r..z3l---hide(oblu:=2oblu)obl(2r,3l,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_root_end:
+bskchar "Root sign ending";
+beginchar(chars.math_root_end,3u#,rule_thickness#,2rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0);
+x1=0; rt x2=w-u; bot y1l=0; y2=y1;
+lft x3l=x1+o; y3=-d;
+filldraw z1r---z2r..z2l{dir(angle(z3r-z2r)-40)}..z3r..{dir60}z3l...{left}z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_partial:
+bskchar "Partial difference sign";
+beginchar(chars.math_partial,9u#,asc_height#,0); uni "0x2202";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,90); pos3(curve,0); pos4(hair,270);
+pos5(curve,180); pos6(hair,-90); pos7(curve,0);
+lft x3l=u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3;
+rt x5l=w-u; y5l=y1r+stem; top y6l=h+o; x6=.5w+.5stem;
+x7=x6-like_stem; y7=y6r-2/3like_stem;
+p0=z2r{right}..z5r..{dir180}z6r; x1r=xpart (((0,y1)--(w,y1))intersectionpoint p0);
+p1=z2l{left}..z3l..z4l{right}..{down}z1l;
+z8=bsktouch(p0,left,subpath(1,infinity) of p1,right);
+tim1=xpart(p1 intersectiontimes (z8--(x4,y8)));
+tim2=xpart(p0 intersectiontimes (z8--(w,y8)));
+filldraw z7r{down}..z7l{up}..{dir0}z6l...z5l..{left}z2l..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+infill z1r{up}..z4r{left}..z3r..z2r..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_dag:
+bskchar "Dagger symbol";
+beginchar(chars.math_dag,10u#,asc_height#,0); uni "0x2020";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric am; am=.5[hair,stem];
+pos1(hair,0); pos2(curve,0); pos3(hair,0);
+pos4(am,90); pos5(curve,90); pos6(curve+hair,0);
+pos7(am,90); pos8(curve,90);
+x1=x2=x6=.5w; bot y1=-d-apex_o; y2=x_height-curve; bot z3=(x2,x_height+curve);
+top y6=h;
+z4-z3r=z3l-z7=1.5stem*right; rt z5=(w-1.25u,y4); x8=w-x5; y8=y5;
+filldraw z1r{up}..z2r---obl(3r,2r,4l)---z4l..{right}z5l..(lft w-u,y5)
+ ..{left}z5r..z4r---obl(3r,4r,6r)..{up}z6r..top top z6
+ ..z6l{down}..obl(3l,6l,7r)---z7r..{left}z8r..(rt u,y8)
+ ..{right}z8l..z7l---obl(3l,7l,2l)---z2l..{down}z1l..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_dagger:
+bskchar "Double dagger symbol";
+beginchar(chars.math_dagger,10u#,asc_height#,0); uni "0x2021";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric am; am=.5[hair,stem];
+pos1(hair,0); pos2(curve,0); pos3(hair,0);
+pos4(am,90); pos5(curve,90); pos6(curve+hair,0);
+pos7(am,90); pos8(curve,90);
+pos9(curve,0); pos10(hair,0);
+pos11(am,90); pos12(curve,90); pos13(curve+hair,0);
+pos14(am,90); pos15(curve,90);
+x2=x6=x9=x10=x13=.5w; y2=x_height-.5curve; bot z3=(x2,x_height+curve);
+z4-z3r=z3l-z7=z11-z10r=z10l-z14=1.5stem*right; rt z5=(w-1.25u,y4);
+x8=x15=w-x5; y8=y5; x12=x5; y15=y12=y11;
+.5[y2,y9]=.5(h-d)=.5[y3,y10]; top y6=h; bot y13=-d;
+z1=.5[z2,z9];
+filldraw z2r---obl(3r,2r,4l)---z4l..{right}z5l..(lft w-u,y5)
+ ..{left}z5r..z4r---obl(3r,4r,6r)..{up}z6r..top top z6
+ ..z6l{down}..obl(3l,6l,7r)---z7r..{left}z8r..(rt u,y8)
+ ..{right}z8l..z7l---obl(3l,7l,2l)---z2l..z1l
+ ..z9l---obl(10l,9l,14r)---z14r..{left}z15r..(rt u,y15)
+ ..{right}z15l..z14l---obl(10r,14l,13l)..{down}z13l..bot bot z13
+ ..{up}z13r..obl(10r,13r,11l)---z11l..{right}z12l..(lft w-u,y12)
+ ..{left}z12r..z11r---obl(10r,11r,9r)---z9r..z1r..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+endchar;
+
+iff known chars.sign_died:
+bskchar "Died symbol";
+beginchar(chars.sign_died,9u#,.5[asc_height#,x_height#],0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric am; am=.5[hair,stem];
+pos1(curve,0); pos2(hair,0);
+pos3(am,90); pos4(curve,90); pos5(curve,0);
+pos6(am,90); pos7(curve,90);
+x1=x2=x5=.5w; bot y1=-d; y2=.65h; top y5=h;
+z3-z2r=z2l-z6=1.5stem*right; rt z4=(w-u,y3); x7=w-x4; y7=y4;
+filldraw z1r---obl(2r,1r,3l)---z3l..{right}z4l--z4r..z3r
+ ---obl(2r,3r,5r)---z5r..z5+o*up..z5l---obl(2l,5l,6r)
+ ---z6r..{left}z7r--z7l..z6l---obl(2l,6l,1l)---z1l--cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.arrow_right:
+bskchar "Rightward arrow";
+beginchar(chars.arrow_right,15u#,v_center(5u#)); uni "0x2192";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_hook_left:
+bskchar "Left hook for rightward arrows";
+beginchar(chars.arrow_hook_left,5u#,math_axis#+4u#,-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0); pos4(rule_thickness,270);
+y1r=y2r=math_axis; rt x2=w-u; x1=x2+hair;
+x3l=u; x4=x2; y3=.5[y2,y4]; y4l=h;
+x4l:=x4l-hair;
+filldraw z1l---z2l..z3l{up}..{right}z4l..{left}z4r..{down}z3r..z2r---z1r..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.arrow_left:
+bskchar "Leftward arrow";
+beginchar(chars.arrow_left,15u#,v_center(5u#)); uni "0x2190";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_hook_right:
+bskchar "Right hook for leftward arrow";
+beginchar(chars.arrow_hook_right,5u#,math_axis#+4u#,-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+y1l=y2l=math_axis; lft x2=u; x1=x2-hair;
+x3l=w-u; x4=x2; y3=.5[y2,y4]; y4l=h;
+x4r:=x4r+hair;
+filldraw z1l---z2l..z3l{up}..{left}z4l..{right}z4r..{down}z3r..z2r---z1r..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.arrow_up:
+bskchar "Upward arrow";
+beginchar(chars.arrow_up,9u#,asc_height#,0); uni "0x2191";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1l=.5w-o;
+top y0=h+apex_o; bot y1=-d;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_down:
+bskchar "Downward arrow";
+beginchar(chars.arrow_down,9u#,asc_height#,0); uni "0x2193";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o;
+top y0=-d-apex_o; bot y1=h;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_right_up:
+bskchar "Rightward up harpoon";
+beginchar(chars.harpoon_right_up,15u#,v_center(5u#)); uni "0x21C0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw subpath (0,4) of sipka(0,1)...{left}z0a.l---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_right_down:
+bskchar "Rightward down harpoon";
+beginchar(chars.harpoon_right_down,15u#,v_center(5u#)); uni "0x21C1";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw subpath (4,infinity) of sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_left_up:
+bskchar "Leftward up harpoon";
+beginchar(chars.harpoon_left_up,15u#,v_center(5u#)); uni "0x21BC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x1=w-u; x1=w-x0; y0=y1l=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw subpath (4,infinity) of sipka(0,1)---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_left_down:
+bskchar "Leftward down harpoon";
+beginchar(chars.harpoon_left_down,15u#,v_center(5u#)); uni "0x21BD";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x1=w-u; x1=w-x0; y0=y1l=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw subpath (0,4) of sipka(0,1)...{right}z0a.l---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_left_right:
+bskchar "Left-right arrow";
+beginchar(chars.arrow_left_right,18u#,v_center(5u#)); uni "0x2194";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1=math_axis;
+filldraw sipka(0,1)---sipka(1,0)---cycle;
+endchar;
+
+iff known chars.arrow_up_down:
+bskchar "Up-down arrow";
+beginchar(chars.arrow_up_down,9u#,asc_height#,0); uni "0x2195";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos0(rule_thickness,0);
+x0=x1l=.5w; top y0=h+apex_o; bot y1=-d-apex_o;
+filldraw sipka(0,1)---sipka(1,0)---cycle;
+endchar;
+
+iff known chars.arrow_right_raise:
+bskchar "Rightward raising arrow";
+beginchar(chars.arrow_right_raise,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path arr;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos0'(rule_thickness,0);
+lft x1=u; x2=.5[x1,x3]; x3=w-u-arrsize*cosd(30);
+bot y1l=bot y2l=0; y3=bar_height;
+arr:=z1---z2..{dir30}z3;
+pos3(rule_thickness,angle(direction infinity of arr) + 90);
+z0'=z0-direction infinity of arr;
+z0a=z3;
+filldraw z1r{right}..z2r..{dir30}z3r..sipka(0,0')..z3l{dir210}..z2l..{left}z1l..cycle;
+penlabels(1,2,3);
+labels(1rr);
+endchar;
+
+iff known chars.arrow_up_start:
+bskchar "Upward arrow with starting bar";
+beginchar(chars.arrow_up_start,9u#,asc_height#,0); uni "0x21A5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0);
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+x0=x1l=.5w-o;
+bot y2l=bot y3l=0; lft x2=u; x3=w-x2;
+top y0=h+apex_o; y1=y3r;
+filldraw sipka(0,1)---obl(1r,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1l,2r,0a.r)---cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.math_accent_arrow:
+bskchar "Arrow (vector) math accent";
+beginchar(chars.math_accent_arrow,9u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{ save arrwidth, arrsize;
+ arrsize:=3hair; 1.2arrwidth=arrsize;
+ pos1(.25[hair,stem],90);
+ y0=y1=h-.5arrwidth;
+ x0=w-u; lft x1=u;
+ filldraw sipka(0,1)---z1l..z1r---cycle;
+}};
+penlabels(1);
+endchar;
+
+iff known chars.arrow_NE:
+bskchar "Northeast arrow";
+beginchar(chars.arrow_NE,20u#,asc_height#,asc_depth#); uni "0x2197";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-u; lft x1l=u+.5(rule_thickness-.5currentbreadth);
+top y0=h; bot y1l=-d;
+pos1(rule_thickness,angle(z0-z1l)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_SE:
+bskchar "Southeast arrow";
+beginchar(chars.arrow_SE,20u#,asc_height#,asc_depth#); uni "0x2198";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-u; lft x1r=u+.5(rule_thickness-.5currentbreadth);
+bot y0=-d; top y1r=h;
+pos1(rule_thickness,angle(z0-z1r)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_NW:
+bskchar "Northwest arrow";
+beginchar(chars.arrow_NW,20u#,asc_height#,asc_depth#); uni "0x2196";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=u; rt x1l=w-u;
+top y0=h; bot y1l=-d+.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1l)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+
+iff known chars.arrow_SW:
+bskchar "Southwest arrow";
+beginchar(chars.arrow_SW,20u#,asc_height#,asc_depth#); uni "0x2199";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=u; rt x1r=w-u;
+bot y0=-d; top y1r=h-.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1r)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.math_accent_tie:
+bskchar "Tie math accent";
+beginchar(chars.math_accent_tie,6u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w;
+tieacc(0,1,2);
+endchar;
+
+iff known chars.math_ell:
+bskchar "Ell (lowercase script-like letter l)";
+beginchar(chars.math_ell,8u#,asc_height#,0); uni "0x2113";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[];
+path p[];
+pos1(stem,180); pos2(hair,90); pos3(.45[hair,stem],0); pos4(hair,270); pos0(vair,-60);
+pos1'(stem,180);
+lft x1'r=1.5u; y1=3hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=w-u;
+rt x3r=w-1.5u; y3=.7h; lft x4l=1.5u;
+x1=.5[x2,x3]; y1'=y3+hair;
+bot y4r=0; z4'=(x4-like_hair,y4);
+p0=z4l..{up}z3l..z2l{left}..z1'l..z1l..{dir60}z0l;
+p1=z0l{dir60}..{dir-120}z0r..z1r..z1'r..{right}z2r..z3r{down}..{dir-140}z4r..z4'..{right}z4l;
+p2=subpath(2,infinity) of p0;
+p3=subpath (0,3) of reverse p1;
+p4=reverse p0;
+p5=reverse subpath(2,6) of p1;
+(tim1,tim2)=p0 intersectiontimes p2;
+(tim3,tim4)=p3 intersectiontimes subpath (0,3) of p1;
+(tim5,tim6-4)=p4 intersectiontimes subpath (4,infinity) of p1;
+(tim7,tim8)=p0 intersectiontimes subpath(0,3) of p1;
+filldraw subpath(0,rundy(p3,(tim3,curve)).zpet) of p3
+ ..reverse subpath (0,rundy(p1,(tim4,curve)).zpet) of p1
+ ..subpath (0,rundy(p4,tim5).zpet) of p4
+ ..reverse subpath (rundy(p1,tim8),rundy(reverse p1,tim6).zpet) of p1
+ ..reverse subpath (0,rundy(p0,tim7).zpet) of p0&cycle;
+oblu:=curve;
+infill subpath (rundy(p0,tim1),2) of p0& subpath(0,rundy(p2,tim2).zpet) of p2 ..cycle;
+penlabels(0,1,1',2,3,4); labels(4');
+endchar;
+
+iff known chars.math_weierstrass_p:
+bskchar "Weierstrass p";
+beginchar(chars.math_weierstrass_p,12u#,x_height#,desc_depth#); uni "0x2118";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos0(.45[hair,stem],-40); pos1(hair,-10); pos2(hair,0); pos3(hair,270); pos4(curve,180);
+pos5(hair,90); pos5'(vair,300); pos6(stem,0); pos7(hair,90);
+rt x4l=w-u; y4=.5h; top y3l=h+o; bot y1r=-d+.25x_height; lft x1l=2u;
+x0l=u; bot y0r=-d;
+x3=.5[x2,x4]; y2=y4; z2=z1+whatever*dir80;
+bot y5l=0; x5=x3;
+z5'=(.5[x5,x8],.5[y5,y4]);
+x6l=u+stem; z6=z2l+whatever*dir(200);
+x7=u; y7r=h-o;
+pos8(stem,angle(z7r-z2r)-90);
+z8=z2l;
+p0:=z5l{right}..z4l..z3l..z2l..{down}z1l..z0l;
+p1:=z5'{up}..z8r..{left}z7r;
+z10=bsktouch(p0,left,p1,right);
+tim0=xpart(p0 intersectiontimes (z10--(x3,y10)));
+tim1=xpart(p1 intersectiontimes (z10--(0,y10)));
+filldraw z0r..z1r{up}..z2r..z3r..z4r..{left}z5r..{dir60}z5'r..{dir-120}z5'l
+ ..subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
+ --z7l{right}..z6l
+ ..{down}z1l..{direction infinity of p0}z0l..{(direction infinity of p0) rotated 180}cycle;
+penlabels(0,1,2,3,4,5,5',6,7,8); labels(9,10);
+endchar;
+
+iff known chars.math_logor:
+bskchar "Logical or sign";
+beginchar(chars.math_logor,12u#,.8asc_height#,0); uni "0x2228";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=-d-apex_o;
+logor(0,1,2);
+endchar;
+
+iff known chars.math_lattice_sup_text:
+bskchar "\textstyle lattice supremum sign";
+beginchar(chars.math_lattice_sup_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=-d-apex_o;
+{{ save rule_thickness; rule_thickness:=stem; logor(0,1,2); }};
+endchar;
+
+iff known chars.math_lattice_sup_disp:
+bskchar "\displaystyle lattice supremum sign";
+beginchar(chars.math_lattice_sup_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=-d-apex_o;
+{{ save rule_thickness; rule_thickness:=bourstem; logor(0,1,2); }};
+endchar;
+
+iff known chars.math_logand:
+bskchar "Logical and sign";
+beginchar(chars.math_logand,12u#,.8asc_height#,0); uni "0x2227";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o;
+logand(0,1,2);
+endchar;
+
+iff known chars.math_lattice_inf_text:
+bskchar "\textstyle lattice infinum sign";
+beginchar(chars.math_lattice_inf_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o;
+{{ save rule_thickness; rule_thickness:=stem; logand(0,1,2); }};
+endchar;
+
+iff known chars.math_lattice_inf_disp:
+bskchar "\displaystyle lattice infinum sign";
+beginchar(chars.math_lattice_inf_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o;
+{{ save rule_thickness; rule_thickness:=bourstem; logand(0,1,2); }};
+endchar;
+
+iff known chars.math_less:
+bskchar "Less than sign";
+beginchar(chars.math_less,12u#,v_center(8u#)); uni "0x003C";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=math_axis;
+less(0,1,2);
+endchar;
+
+iff known chars.math_less_eq:
+bskchar "Less than or equal to sign";
+beginchar(chars.math_less_eq,12u#,v_center(11u#)); uni "0x2264";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=math_axis+2u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+less(0,1,2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_much_less:
+bskchar "Much less than sign";
+beginchar(chars.math_much_less,17u#,v_center(9u#)); uni "0x226A";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; rt x1r=w-6u; y0=y3=math_axis;
+lft x3l=6u; rt x4r=w-u;
+less(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_greater:
+bskchar "Greater than sign";
+beginchar(chars.math_greater,12u#,v_center(8u#)); uni "0x003E";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=math_axis;
+greater(0,1,2);
+endchar;
+
+iff known chars.math_greater_eq:
+bskchar "Greater than or equal to sign";
+beginchar(chars.math_greater_eq,12u#,v_center(11u#)); uni "0x2265";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=math_axis+2u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+greater(0,1,2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_much_greater:
+bskchar "Much greater than sign";
+beginchar(chars.math_much_greater,17u#,v_center(9u#)); uni "0x226B";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; lft x1l=6u; y0=y3=math_axis;
+rt x3r=w-6u; lft x4l=u;
+greater(0,1,2);
+greater(3,4,5);
+endchar;
+
+iff known chars.math_five_star:
+bskchar "Five-pointed star";
+beginchar(chars.math_five_star,x_height#+2u#,v_center(x_height#)); uni "0x22C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.5oblu;
+z0=(.5w,math_axis);
+x1=x0; top y1=h+apex_o; pos1(hair,0);
+forsuffixes i=2,3,4,5:
+ z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1));
+endfor
+forsuffixes i=11,12,13,14,15:
+ z[i]=z0; pos.i(curve,72(i-1));
+endfor
+ z[105]=whatever[z5l,z15l]=whatever[z1r,z11r];
+for i=1 upto 4:
+ z[100+i]=whatever[z[i].l,z[i+10].l]=whatever[z[i+1].r,z[i+11].r];
+endfor;
+filldraw z1l---obl(101,1l,2r)---z2r..z2l---obl(102,2l,3r)---z3r..z3l
+ ---obl(103,3l,4r)---z4r..z4l---obl(104,4l,5r)---z5r..z5l
+ ---obl(105,5l,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105);
+endchar;
+
+iff known chars.math_five_star_empty:
+bskchar "Five-pointed star with empty center";
+beginchar(chars.math_five_star_empty,x_height#+2u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.5oblu;
+z0=(.5w,math_axis);
+x1=x0; top y1=h+apex_o; pos1(hair,0);
+forsuffixes i=2,3,4,5:
+ z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1));
+endfor
+forsuffixes i=11,12,13,14,15:
+ z[i]=z0; pos.i(curve,72(i-1));
+endfor
+ z[105]=whatever[z5l,z15l]=whatever[z1r,z11r];
+for i=1 upto 4:
+ z[100+i]=whatever[z[i].l,z[i+10].l]=whatever[z[i+1].r,z[i+11].r];
+endfor;
+filldraw z1l---obl(101,1l,2r)---z2r..z2l---obl(102,2l,3r)---z3r..z3l
+ ---obl(103,3l,4r)---z4r..z4l---obl(104,4l,5r)---z5r..z5l
+ ---obl(105,5l,1r)---z1r..cycle;
+infill fullcircle scaled 2stem shifted z0;
+penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105);
+endchar;
+
+iff known chars.sign_born:
+bskchar "Born sign";
+beginchar(chars.sign_born,x_height#+2u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.5oblu;
+z0=(.5w,math_axis);
+x1=x0; top y1=h+apex_o; pos1(hair,0);
+forsuffixes i=2,3,4,5:
+ z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1));
+endfor
+forsuffixes i=11,12,13,14,15:
+ z[i]=z0; pos.i(curve,72(i-1));
+endfor
+z6=z1;
+forsuffixes i=1,2,3,4,5:
+ z[100+i]=.5[z[i],z[i+1]]+.2x_height*unitvector(z[i+1]-z[i]) rotated 90;
+endfor;
+filldraw z1l---obl(101,1l,2r)---z2r..z2l---obl(102,2l,3r)---z3r
+ ..z3l---obl(103,3l,4r)---z4r..z4l---obl(104,4l,5r)---z5r
+ ..z5l---obl(105,5l,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105);
+endchar;
+
+iff known chars.sign_five_star:
+bskchar "Five-pointed rounded star";
+beginchar(chars.sign_five_star,x_height#+2u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.5oblu;
+z0=(.5w,math_axis);
+x1=x0; top y1=h+apex_o; pos1(hair,0);
+forsuffixes i=2,3,4,5:
+ z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1));
+endfor
+forsuffixes i=11,12,13,14,15:
+ z[i]=z0; pos.i(curve,72(i-1));
+endfor
+z6=z1;
+forsuffixes i=1,2,3,4,5:
+ z[100+i]=.5[z[i],z[i+1]]+.15x_height*unitvector(z[i+1]-z[i]) rotated 90;
+endfor;
+filldraw z1l..z101..z2r..z2l..z102..z3r..z3l..z103..z4r..z4l..z104..z5r..z5l..z105..z1r..cycle;
+penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105);
+endchar;
+
+iff known chars.math_sqsubset:
+bskchar "Square subset sign";
+beginchar(chars.math_sqsubset,12u#,v_center(x_height#)); uni "0x228F";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+rt x1=rt x4=w-u; x2=x3=w-x1;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_sqsubset_eq:
+bskchar "Square subset or equal to sign";
+beginchar(chars.math_sqsubset_eq,12u#,v_center(x_height#+3u#)); uni "0x2291";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+rt x1=rt x4=w-u; x2=x3=w-x1;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+bskpoints(5,6,hair,hair);
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5rr..z5l---z6ll..z6r---cycle;
+penlabels(1,2,3,4,5,6); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_subset:
+bskchar "Proper subset sign";
+beginchar(chars.math_subset,12u#,v_center(x_height#)); uni "0x2282";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_eq:
+bskchar "Subset or equal to sign";
+beginchar(chars.math_subset_eq,12u#,v_center(x_height#+3u#)); uni "0x2286";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr..z6l---z7ll..z7r---cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_sqsuperset:
+bskchar "Square superset sign";
+beginchar(chars.math_sqsuperset,12u#,v_center(x_height#)); uni "0x2290";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+lft x1=lft x4=u; x2=x3=w-x1;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_sqsuperset_eq:
+bskchar "Square superset or equal to sign";
+beginchar(chars.math_sqsuperset_eq,12u#,v_center(x_height#+3u#)); uni "0x2292";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+lft x1=lft x4=u; x2=x3=w-x1;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+bskpoints(5,6,hair,hair);
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5rr..z5l---z6ll..z6r---cycle;
+penlabels(1,2,3,4,5,6); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_superset:
+bskchar "Proper superset sign";
+beginchar(chars.math_superset,12u#,v_center(x_height#)); uni "0x2283";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_eq:
+bskchar "Superset or equal to sign";
+beginchar(chars.math_superset_eq,12u#,v_center(x_height#+3u#)); uni "0x2287";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr..z6l---z7ll..z7r---cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element:
+bskchar "Element sign";
+beginchar(chars.math_element,9u#,v_center(x_height#+u#)); uni "0x2208";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_ownership:
+bskchar "Ownership sign";
+beginchar(chars.math_ownership,9u#,v_center(x_height#+u#)); uni "0x220B";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---z7r..z7l---(x3l-stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.symbol_smile:
+bskchar "Smile";
+beginchar(chars.symbol_smile,17u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+lft x1=u; top y1=h; z2=z1+hair*down;
+rt x3=w-u; y3=y1+.5apex_o;
+bot y4=-d-o;
+p:=z2..{dir70}z3;
+x4=xpart(directionpoint right of p);
+filldraw z2..z4..{dir70}z3{dir-140}..z1&z1{dir-100}..z2&cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.symbol_smile_eyes:
+bskchar "Smile with eyes";
+beginchar(chars.symbol_smile_eyes,17u#,.65[asc_height#,x_height#],.3x_height#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+lft x1=u; top y1=math_axis+.3x_height; z2=z1+hair*down;
+rt x3=w-u; y3=y1+.5apex_o;
+bot y4=-d-o;
+p:=z2..{dir70}z3;
+x4=xpart(directionpoint right of p);
+filldraw z2..z4..{dir70}z3{dir-140}..z1&z1{dir-100}..z2&cycle;
+top y5=h-.5dot_size-o; y6=y5+o;
+.5[x5,x6]=x4; x5=.5[x1,x4];
+dot(5); dot(6);
+labels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.symbol_frown:
+bskchar "Frown";
+beginchar(chars.symbol_frown,17u#,v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+lft x1=u; bot y1=-d; z2=z1+hair*up;
+rt x3=w-u; y3=y1-.5apex_o;
+top y4=h+o;
+p:=z2..{dir-70}z3;
+x4=xpart(directionpoint right of p);
+filldraw z2..z4..{dir-70}z3{dir140}..z1&z1{dir100}..z2&cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.symbol_flat:
+bskchar "Musical flat sign";
+beginchar(chars.symbol_flat,7u#,asc_height#,0); uni "0x266D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos1(hair,0); pos2(hair,0);
+pos3(curve,0); pos4(hair,90); pos5(vair,135);
+lft x1l=u; x2=x1; top y1=h; bot y2=-d; x5l=x1r; y5=.5[y4,y3];
+rt x3r=w-u; y3=.75x_height; top y4r=x_height+o; x4=.5[x3,x2r];
+p0=z2r+up--z1r;
+p1=z2r..{up}z3r..z4r..z5r;
+p2=z5l..z4l..z3l{down}..z2r;
+(tim1,tim2)=p0 intersectiontimes p1;
+tim3=xpart(p0 intersectiontimes p2);
+filldraw z1l---z2l--subpath (0, rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim1),infinity) of p0..cycle;
+infill subpath (rundy(p2,0),rundy(p2,length p2).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,tim3).zpet) of p0..cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+iff known chars.symbol_sharp:
+bskchar "Musical sharp sign";
+beginchar(chars.symbol_sharp,7.5u#,asc_height#,0); uni "0x266F";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; x3=2u;
+top y1r=top y3r+stem=h; y2l-stem=y4l=0;
+lft x5=lft x7=u; rt x6=rt x8=w-u;
+y5=y6-stem; y7=y8-stem; .5[y5,y7]=.5h; y5-y7=.6x_height;
+pos1(hair,180); pos2(hair,180);
+pos3(hair,180); pos4(hair,180);
+pos5(stem,90); pos6(stem,90);
+pos7(stem,90); pos8(stem,90);
+bskpoints(2,1,rule_thickness,0); bskpoints(4,3,0,rule_thickness);
+bskpoints(6,5,rule_thickness,0); bskpoints(8,7,0,rule_thickness);
+z10=whatever[z1r,z2r]=whatever[z6r,z5r];
+z11=whatever[z3l,z4l]=whatever[z6r,z5r];
+z12=whatever[z3r,z4r]=whatever[z6r,z5r];
+z13=whatever[z3r,z4r]=whatever[z6l,z5l];
+z14=whatever[z3r,z4r]=whatever[z7r,z8r];
+z15=whatever[z3r,z4r]=whatever[z7l,z8l];
+z16=whatever[z3l,z4l]=whatever[z7l,z8l];
+z17=whatever[z1r,z2r]=whatever[z7l,z8l];
+z18=whatever[z2l,z1l]=whatever[z7l,z8l];
+z19=whatever[z1l,z2l]=whatever[z7r,z8r];
+z20=whatever[z1l,z2l]=whatever[z5l,z6l];
+z21=whatever[z1l,z2l]=whatever[z6r,z5r];
+filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r--z5l
+ ---obl(13,5l,14)---obl(14,13,7r)---z7r--z7l---obl(15,7l,4l)---z4rr--z4l
+ ---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l--z8r
+ ---obl(19,8r,20)---obl(20,19,6l)---z6l--z6r---obl(21,6r,1r)---z1ll..cycle;
+z0=(x10,y20); z0'=(x11,y13); z0''=(x16,y14); z0'''=(x17,y19);
+infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21);
+endchar;
+
+iff known chars.symbol_natural:
+bskchar "Musical natural sign";
+beginchar(chars.symbol_natural,6.5u#,asc_height#,comma_depth#); uni "0x266E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,180); pos2(hair,180);
+pos3(hair,180); pos4(hair,180);
+pos5(stem,90); pos6(stem,90);
+pos7(stem,90); pos8(stem,90);
+top y1=h; bot y4=-d; y1-y2=y3-y4;
+lft x1r=u; rt x4l=w-u; x2=x1; x3=x4;
+y6l=y5r=x_height; y3=y6r; x6=x3; x5=x1l; x8=x4r;
+y7l=y2; z8-z7=z6-z5;
+bskpoints(2,1,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+x5'=x7'; x6'=x8'; x5'-x5=x6-x6'=rule_thickness-currentbreadth;
+z5'=whatever[z5l,z6l]; z6'=whatever[z5l,z6l];
+z7'=whatever[z7r,z8r]; z8'=whatever[z7r,z8r];
+filldraw z1r---obl(2r,1r,8l)---obl(8l,2r,4r)---z4rr..z4l---obl(3l,4l,5r)---obl(5r,3l,1l)---z1ll..cycle;
+infill obl(5',6',7')---obl(7',5',8')---obl(8',7',6')---obl(6',8',5')---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1ll,4rr,5',6',7',8');
+endchar;
+
+iff known chars.math_virgule:
+bskchar "Virgule";
+beginchar(chars.math_virgule,8u#,v_center(16u#)); uni "0x2215";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(w-u,h); bot lft z2=(u,-d);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_backslash:
+bskchar "Backslash";
+beginchar(chars.math_backslash,8u#,v_center(16u#)); uni "0x2216";
+adjust_fit(0,0);
+pickup rule.nib;
+top lft z1=(u,h); bot rt z2=(w-u,-d);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_zero_slash:
+bskchar "Zero width slash";
+beginchar(chars.math_zero_slash,12u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(w-2u,h); lft x2=2u; .5[y1,y2]=math_axis;
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2); zero_width;
+endchar;
+
+iff known chars.math_maps_to:
+bskchar "Zero width maps to";
+beginchar(chars.math_maps_to,12u#,v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+oblu:=1.5oblu;
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1l=u; x2=x1; x3=x1r; y3=.5[y1,y2]=math_axis;
+top y1=h; z4=z3+max(oblu,.5u)*right;
+bskpoints(2,1,rule_thickness,rule_thickness);
+filldraw z1ll---z2l..z2r---obl(3l,2r,4l)---z4l--z4r---obl(3r,4r,1r)---z1r..cycle;
+penlabels(1,2,3,4); labels(1ll); zero_width;
+endchar;
+
+charscription(5u,body_height,paren_depth)(
+x1=x2=.5w; top y1=h; bot y2=-d;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+);
+
+iff known chars.sign_vertical:
+bskchar "Vertical line sign";
+beginchar(chars.sign_vertical,5u#,body_height#,paren_depth#); uni "0x007C";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.math_vertical:
+bskchar "Vertical line";
+beginchar(chars.math_vertical,5u#,body_height#,paren_depth#); uni "0x2223";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_broken_bar:
+bskchar "Broken bar sign";
+beginchar(chars.sign_broken_bar,5u#,body_height#,paren_depth#); uni "0x00A6";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=x4=.5w; top y1=h; bot y4=-d; .5[y2,y3]=.5[h,-d]; bot y2-top y3=3rule_thickness;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,rule_thickness,rule_thickness);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_vertical_double:
+bskchar "Double vertical line";
+beginchar(chars.math_vertical_double,8u#,body_height#,paren_depth#); uni "0x2225";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; bot y2=bot y4=-d;
+x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_times:
+bskchar "Times operator sign";
+beginarithchar(chars.math_times); uni "0x00D7";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_minus:
+bskchar "Plus-minus sign";
+beginarithchar(chars.math_plus_minus); uni "0x00B1";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x9=x1; x10=x2;
+x3=x4=.5w; top y3=h; y4=y9r; y9=y10; bot y9l=-d;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+bskpoints(9,10,hair,hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---obl(4l,5,9r)---z9rr..z9l---z10ll..z10r---obl(4r,10r,6)
+ ---obl(6,4r,2l)---z2ll..z2r---obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,9,10); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_minus_plus:
+bskchar "Minus-plus sign";
+beginarithchar(chars.math_minus_plus); uni "0x2213";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x9=x1; x10=x2;
+x3=x4=.5w; y3=y9l; y4=-d; y9=y10; top y9r=h;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+bskpoints(9,10,hair,hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l...z4rr---obl(6,4r,2l)---z2ll..z2r
+ ---obl(7,2r,3r)---obl(3r,7,10l)---z10ll..z10r---z9rr..z9l
+ ---obl(3l,9l,8)---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,9,10); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_minus:
+bskchar "Minus sign";
+beginarithchar(chars.math_minus); uni "0x2212";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+penlabels(1,2);
+endchar;
+
+iff known chars.math_division:
+bskchar "Division sign";
+beginarithchar(chars.math_division); uni "0x00F7";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=.5w; .5[y3,y4]=y1; y3-y4=x_height;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3); dot(4);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_cdot:
+bskchar "Verticaly raised period";
+beginchar(chars.math_cdot, 5u#, v_center(dot_size#)); uni "0x22C5";
+italcorr math_axis#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=math_axis; x1=.5w;
+dot(1);
+endchar;
+
+iff known chars.sign_middle_dot:
+bskchar "Middle dot";
+beginchar(chars.sign_middle_dot, 5u#,x_height#, 0); uni "0x00B7";
+italcorr bar_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=bar_height; x1=.5w;
+dot(1);
+endchar;
+
+iff known chars.math_equivalence:
+bskchar "Equivalence sign";
+beginchar(chars.math_equivalence,13u#,5.5u#+math_axis#,5.5u#-math_axis#); uni "0x2261";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+filldraw z1l---z2l..z2r---z1r..cycle;
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+filldraw z5rr..z5l---z6ll..z6r---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_circle_op:
+bskchar "Circle operator";
+beginchar(chars.math_circle_op,8u#,v_center(6u#)); uni "0x2218";
+adjust_fit(0,0);
+pickup tiny.nib;
+z0=(.5w,.5h);
+filldraw fullcircle scaled (w-rt 2u) shifted z0;
+infill fullcircle scaled (w-rt 2u-rule_thickness+currentbreadth) shifted z0;
+endchar;
+
+iff known chars.math_bullet:
+bskchar "Bullet";
+beginchar(chars.math_bullet,8u#,v_center(6u#)); uni "0x2219";
+adjust_fit(0,0);
+pickup tiny.nib;
+z0=(.5w,.5h);
+filldraw fullcircle scaled (w-rt 2u) shifted z0;
+endchar;
+
+iff known chars.math_diamond_op:
+bskchar "Diamond operator";
+beginchar(chars.math_diamond_op,9u#,v_center(7u#)); uni "0x22C4";
+italcorr math_axis#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric st; st:=rule_thickness;
+pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w;
+y4-y2=x3-x1;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_op_dot:
+bskchar "Diamond operator with dot";
+beginchar(chars.math_diamond_op_dot,9u#,v_center(7u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric st; st:=rule_thickness;
+pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w;
+y4-y2=x3-x1;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+infill fullcircle scaled (x2-x1) shifted .5[z1,z3];
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_asterisk:
+bskchar "Asterisk on axis";
+beginchar(chars.math_asterisk,8u#,v_center(x_height#)); uni "0x2217";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+z0=.5(w,h); ast:=3/4stem; vast=.7stem;
+pos1(ast,0); x1=x0;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x0:
+ size:= (lft w-u-x0)/cosd(30)-.5ast; fi;
+y1=y0+size;
+p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.math_diamond_curved_dot:
+bskchar "Curved diamond with dot";
+beginchar(chars.math_diamond_curved_dot,9u#,v_center(7u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric st; st:=rule_thickness;
+pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w;
+z0=.5[z1,z3];
+y4-y2=x3-x1;
+filldraw z1l.. .75[z0,.5[z1,z2]] ..z2l& z2l.. .75[z0,.5[z3,z2]] ..z3l& z3l.. .75[z0,.5[z3,z4]] ..z4l& z4l.. .75[z0,.5[z1,z4]] ..z1l&cycle;
+infill fullcircle scaled (x2-x1) shifted .5[z1,z3];
+penlabels(1,2,3,4); labels(0);
+endchar;
+
+iff known chars.math_circle_minus:
+bskchar "Circle-minus operator";
+beginarithchar(chars.math_circle_minus); uni "0x2296";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+y9=y10=y2; x9-x6r=x2r-x10=curve;
+circle_points(rule_thickness);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-2,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes ((0,y9r)--(x4,y9r)));
+tim2=xpart(p intersectiontimes ((x4,y9r)--(w,y9r)));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z10r---z9r..cycle;
+p:=subpath (2,6) of (draw_circle.r);
+tim3=xpart(p intersectiontimes ((x4,y9l)--(w,y9l)));
+tim4=xpart(p intersectiontimes ((x4,y9l)--(0,y9l)));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z9l---z10l..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_divide:
+bskchar "Circle-divide operator";
+beginarithchar(chars.math_circle_divide); uni "0x2298";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,angle(direction 1 of _circle_path));
+pos10(rule_thickness,angle(direction 5 of _circle_path)+180);
+z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-3,1) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim2=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z9l---z10l..cycle;
+p:=subpath (1,5) of (draw_circle.r);
+tim4=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z10r---z9r..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_dot:
+bskchar "Circle-dot operator";
+beginarithchar(chars.math_circle_dot); uni "0x2299";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+dot(0);
+endchar;
+
+iff known chars.math_circle_dot_text:
+bskchar "\textstyle circle-dot operator";
+beginchar(chars.math_circle_dot_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u; x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8-y4=x2-x6;
+circle_points(stem);
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw fullcircle scaled 2stem shifted z0;
+endchar;
+
+iff known chars.math_circle_dot_disp:
+bskchar "\displaystyle circle-dot operator";
+beginchar(chars.math_circle_dot_disp,20u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u; x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8-y4=x2-x6;
+circle_points(bourstem);
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw fullcircle scaled (2*.5[bourstem,stem]) shifted z0;
+endchar;
+
+iff known chars.math_circle_times:
+bskchar "Circle-times operator";
+beginarithchar(chars.math_circle_times); uni "0x2297";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,angle(direction 1 of _circle_path));
+pos10(rule_thickness,angle(direction 5 of _circle_path)+180);
+pos11(rule_thickness,angle(direction 3 of _circle_path));
+pos12(rule_thickness,angle(direction 7 of _circle_path)+180);
+z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5);
+z11=z3+curve*unitvector(z7-z3); z12=z7+curve*unitvector(z3-z7);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,1) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (1,3) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (3,5) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (5,7) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_times_text:
+bskchar "\textstyle Circle-times operator";
+beginchar(chars.math_circle_times_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6;
+circle_points(stem);
+pos9(stem,angle(direction 1 of _circle_path));
+pos10(stem,angle(direction 5 of _circle_path)+180);
+pos11(stem,angle(direction 3 of _circle_path));
+pos12(stem,angle(direction 7 of _circle_path)+180);
+z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5);
+z11=z3+curve*unitvector(z7-z3); z12=z7+curve*unitvector(z3-z7);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,1) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (1,3) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (3,5) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (5,7) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_times_disp:
+bskchar "\displaystyle Circle-times operator";
+beginchar(chars.math_circle_times_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6;
+circle_points(bourstem);
+pos9(bourstem,angle(direction 1 of _circle_path));
+pos10(bourstem,angle(direction 5 of _circle_path)+180);
+pos11(bourstem,angle(direction 3 of _circle_path));
+pos12(bourstem,angle(direction 7 of _circle_path)+180);
+z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5);
+z11=z3+curve*unitvector(z7-z3); z12=z7+curve*unitvector(z3-z7);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,1) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (1,3) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (3,5) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (5,7) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_plus:
+bskchar "Circle-plus operator";
+beginarithchar(chars.math_circle_plus); uni "0x2295";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,angle(direction 2 of _circle_path));
+pos10(rule_thickness,angle(direction 6 of _circle_path)+180);
+pos11(rule_thickness,angle(direction 4 of _circle_path));
+pos12(rule_thickness,angle(direction 8 of _circle_path)+180);
+z9=z2+curve*unitvector(z6-z2); z10=z6+curve*unitvector(z2-z6);
+z11=z4+curve*unitvector(z8-z4); z12=z8+curve*unitvector(z4-z8);
+path p;
+filldraw draw_circle.l;
+p:=subpath (0,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (2,4) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (4,6) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (6,8) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_plus_text:
+bskchar "\textstyle circle-plus operator";
+beginchar(chars.math_circle_plus_text,14u#,0,10/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6;
+circle_points(stem);
+pos9(stem,angle(direction 2 of _circle_path));
+pos10(stem,angle(direction 6 of _circle_path)+180);
+pos11(stem,angle(direction 4 of _circle_path));
+pos12(stem,angle(direction 8 of _circle_path)+180);
+z9=z2+curve*unitvector(z6-z2); z10=z6+curve*unitvector(z2-z6);
+z11=z4+curve*unitvector(z8-z4); z12=z8+curve*unitvector(z4-z8);
+path p;
+filldraw draw_circle.l;
+p:=subpath (0,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (2,4) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (4,6) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (6,8) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_plus_disp:
+bskchar "\displaystyle circle-plus operator";
+beginchar(chars.math_circle_plus_disp,18u#,0,14/6dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6;
+circle_points(bourstem);
+pos9(bourstem,angle(direction 2 of _circle_path));
+pos10(bourstem,angle(direction 6 of _circle_path)+180);
+pos11(bourstem,angle(direction 4 of _circle_path));
+pos12(bourstem,angle(direction 8 of _circle_path)+180);
+z9=z2+curve*unitvector(z6-z2); z10=z6+curve*unitvector(z2-z6);
+z11=z4+curve*unitvector(z8-z4); z12=z8+curve*unitvector(z4-z8);
+path p;
+filldraw draw_circle.l;
+p:=subpath (0,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (2,4) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (4,6) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (6,8) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_copy:
+bskchar "Circle for copyright";
+beginchar(chars.math_circle_copy,20u#,asc_height#,desc_depth#); uni "0x25EF";
+pickup tiny.nib;
+adjust_fit(0,0);
+lft x6=u; x2=w-x6; y2=.5[h,-d]; top y8=h;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+endchar;
+
+iff known chars.math_prime:
+bskchar "Prime symbol";
+beginchar(chars.math_prime,4u#+curve#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y2=u; y1+.5curve=h; x2=.5u+.5stem; x1+.5curve=w-.5curve;
+numeric theta; theta:=angle(z1-z2)-90;
+penpos1(curve,theta); pos2(stem,theta);
+z1'=z1l+.5curve*dir(theta+50);
+bskpoints(2,1,curve,curve);
+filldraw z1ll{dir(angle(z2l-z1l)+5)}...z2l&z2l..z2rr---z1r...z1'..cycle;
+penlabels(1,2); labels(1',1ll,2rr);
+endchar;
+
+charscription(4u,asc_height,0)(
+h-y2=.7(.8asc_height-u); y1+.35curve=h; x2=.5u+.35stem; x1+.35curve=w-.35curve;
+numeric theta; theta:=angle(z1-z2)-90;
+penpos1(.7curve,theta); pos2(.7stem,theta);
+z1'=z1l+.35curve*dir(theta+50);
+bskpoints(2,1,.7curve,.7curve);
+filldraw z1ll{dir(angle(z2l-z1l)+5)}...z2l&z2l..z2rr---z1r...z1'..cycle;
+penlabels(1,2); labels(1',1ll,2rr);
+);
+
+iff known chars.sign_prime:
+bskchar "Prime sign (superscript)";
+beginchar(chars.sign_prime,4u#,asc_height#,0); uni "0x2032";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_prime_double:
+bskchar "Double prime sign (superscript)";
+beginchar(chars.sign_prime_double,7u#,asc_height#,0); uni "0x2033";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+save x,y;
+usechar shifted (WW-4u,0);
+endchar;
+
+iff known chars.sign_prime_triple:
+bskchar "Triple prime sign (superscript)";
+beginchar(chars.sign_prime_triple,10u#,asc_height#,0); uni "0x2034";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+save x,y;
+usechar shifted (WW-7u,0);
+save x,y;
+usechar shifted (WW-4u,0);
+endchar;
+
+iff known chars.sign_prime_quadruple:
+bskchar "Quadruple prime sign (superscript)";
+beginchar(chars.sign_prime_quadruple,13u#,asc_height#,0); uni "0x2057";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+save x,y;
+usechar shifted (WW-10u,0);
+save x,y;
+usechar shifted (WW-7u,0);
+save x,y;
+usechar shifted (WW-4u,0);
+endchar;
+
+iff known chars.math_backprime:
+bskchar "Back prime symbol";
+beginchar(chars.math_backprime,4u#+curve#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y2=u; y1+.5curve=h; x2=w-.5u-.5stem; x1-.5curve=.5curve;
+numeric theta; theta:=angle(z1-z2)-90;
+penpos1(curve,theta); pos2(stem,theta);
+z1'=z1r+.5curve*dir(theta+140);
+bskpoints(1,2,curve,curve);
+filldraw z1rr{dir(angle(z2r-z1r)-5)}...z2r&z2r..z2ll---z1l...z1'..cycle;
+penlabels(1,2); labels(1',1rr,2ll);
+endchar;
+
+charscription(4u,asc_height,0)(
+h-y2=.7(.8asc_height-u); y1+.35curve=h; x2=w-.5u-.35stem; x1-.35curve=.35curve;
+numeric theta; theta:=angle(z1-z2)-90;
+penpos1(.7curve,theta); pos2(.7stem,theta);
+z1'=z1r+.35curve*dir(theta+140);
+bskpoints(1,2,.7curve,.7curve);
+filldraw z1rr{dir(angle(z2r-z1r)-5)}...z2r&z2r..z2ll---z1l...z1'..cycle;
+penlabels(1,2); labels(1',1rr,2ll);
+);
+
+iff known chars.sign_backprime:
+bskchar "Back prime sign (superscript)";
+beginchar(chars.sign_backprime,4u#,asc_height#,0); uni "0x2035";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_backprime_double:
+bskchar "Double back prime sign";
+beginchar(chars.sign_backprime_double,7u#,asc_height#,0); uni "0x2036";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+save x,y;
+usechar shifted (WW-4u,0);
+endchar;
+
+iff known chars.sign_backprime_triple:
+bskchar "Triple back prime sign";
+beginchar(chars.sign_backprime_triple,10u#,asc_height#,0); uni "0x2037";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+save x,y;
+usechar shifted (WW-7u,0);
+save x,y;
+usechar shifted (WW-4u,0);
+endchar;
+
+iff known chars.math_sim:
+bskchar "Similarity sign";
+beginchar(chars.math_sim, 14u#, v_center(.5x_height#)); uni "0x223C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+vlnka(0,1);
+endchar;
+
+iff known chars.math_sim_eq:
+bskchar "Similar or equal sign";
+beginchar(chars.math_sim_eq, 14u#, v_center(.5x_height#+3u#)); uni "0x2243";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=(h+d)-3u;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+top y1=h; lft x2=u; rt x3=w-u; y2l=y3l=-d;
+bskpoints(2,3,hair,hair);
+vlnka(0,1);
+filldraw z2rr..z2l---z3ll..z3r---cycle;
+endchar;
+
+iff known chars.math_approx:
+bskchar "Approximity sign";
+beginchar(chars.math_approx, 14u#, v_center(x_height#)); uni "0x2248";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5(h+d);
+top y1=h; bot y2=-d;
+vlnka(0,1);
+vlnka(2,3);
+endchar;
+
+iff known chars.math_ceiling_left:
+bskchar "Left ceiling bracket";
+beginchar(chars.math_ceiling_left,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90);
+lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u;
+top y2r=top y1r=h; bot y3r=-d;
+rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_left_big:
+bskchar "\big left ceiling bracket";
+beginchar(chars.math_ceiling_left_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=hair;
+pos1(breadth,90);
+lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_left_Big:
+bskchar "\Big left ceiling bracket";
+beginchar(chars.math_ceiling_left_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.25[hair,stem];
+pos1(breadth,90);
+lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_left_bigg:
+bskchar "\bigg left ceiling bracket";
+beginchar(chars.math_ceiling_left_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.5[hair,stem];
+pos1(breadth,90);
+lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_left_Bigg:
+bskchar "\Bigg left ceiling bracket";
+beginchar(chars.math_ceiling_left_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.75[hair,stem];
+pos1(breadth,90);
+lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_left:
+bskchar "Left floor bracket";
+beginchar(chars.math_floor_left,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos3(hair,270);
+lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+rt z1l=(x1r+.5[stem,hair],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_left_big:
+bskchar "\big left floor bracket";
+beginchar(chars.math_floor_left_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=hair;
+pos3(breadth,270);
+lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_left_Big:
+bskchar "\Big left floor bracket";
+beginchar(chars.math_floor_left_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.25[hair,stem];
+pos3(breadth,270);
+lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
+top y1r=h; bot y2r=bot y3r=-d;
+rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_left_bigg:
+bskchar "\bigg left floor bracket";
+beginchar(chars.math_floor_left_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.5[hair,stem];
+pos3(breadth,270);
+lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
+top y1r=h; bot y2r=bot y3r=-d;
+rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_left_Bigg:
+bskchar "\Bigg left floor bracket";
+beginchar(chars.math_floor_left_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.75[hair,stem];
+pos3(breadth,270);
+lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
+top y1r=h; bot y2r=bot y3r=-d;
+rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_right:
+bskchar "Right ceiling bracket";
+beginchar(chars.math_ceiling_right,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90);
+rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u;
+top y2r=top y1r=h; bot y3r=-d;
+lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_right_big:
+bskchar "\big right ceiling bracket";
+beginchar(chars.math_ceiling_right_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=hair;
+pos1(breadth,90);
+rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_right_Big:
+bskchar "\Big right ceiling bracket";
+beginchar(chars.math_ceiling_right_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.25[hair,stem];
+pos1(breadth,90);
+rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_right_bigg:
+bskchar "\big right ceiling bracket";
+beginchar(chars.math_ceiling_right_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.5[hair,stem];
+pos1(breadth,90);
+rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_ceiling_right_Bigg:
+bskchar "\Bigg right ceiling bracket";
+beginchar(chars.math_ceiling_right_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.75[hair,stem];
+pos1(breadth,90);
+rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_right:
+bskchar "Right floor bracket";
+beginchar(chars.math_floor_right,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos3(hair,270);
+rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+lft z1l=(x1r-.5[stem,hair],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_right_big:
+bskchar "\big right floor bracket";
+beginchar(chars.math_floor_right_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=hair;
+pos3(breadth,270);
+rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_right_Big:
+bskchar "\Big right floor bracket";
+beginchar(chars.math_floor_right_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.25[hair,stem];
+pos3(breadth,270);
+rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_right_bigg:
+bskchar "\bigg right floor bracket";
+beginchar(chars.math_floor_right_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.5[hair,stem];
+pos3(breadth,270);
+rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_floor_right_Bigg:
+bskchar "\Bigg right floor bracket";
+beginchar(chars.math_floor_right_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.75[hair,stem];
+pos3(breadth,270);
+rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_logical_not:
+bskchar "Logical not sign";
+beginchar(chars.math_logical_not,13u#, x_height#,0); uni "0x00AC";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+lft x1=u; rt x3r=w-u; x2=x3r;
+y1=y2=.5[bar_height,x_height]; y1-y3=1/3(x2-x1); if y3<stem: y3:=stem; fi
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---z3ll..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3); labels(1rr,3ll);
+endchar;
+
+iff known chars.math_forall:
+bskchar "Universal quantifier";
+beginchar(chars.math_forall,11u#,asc_height#,0); uni "0x2200";
+italcorr asc_height#*slant+.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta; oblu:=2oblu;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+top y1r=top y3l=h;
+lft x1l=0; rt x3r=w; x2=.5w; bot y2=-apex_o;
+theta:=angle(z1l-z2)-90;
+pos2'(rule_thickness,theta); z2'l=z2; y1'=y1r; z1'=z2'r+whatever*unitvector(z1l-z2'l);
+theta:=angle(z3r-z2)+90;
+pos2''(rule_thickness,theta-180); z2''r=z2; y3'=y3r; z3'=z2''l+whatever*unitvector(z3r-z2''r);
+y4r-y4l=y5r-y5l=rule_thickness-currentbreadth; .5[y4r,y4l]=.5[y5r,y5l]=x_height;
+z4r=whatever[z3',z2''l]; z4l=whatever[z3',z2''l];
+z5r=whatever[z1',z2'r]; z5l=whatever[z1',z2'r];
+z6=whatever[z3',z2''l]=whatever[z1',z2'r];
+filldraw z1l---z2---z3r..z3'---obl(4r,3',5r)---obl(5r,4r,1')---z1'..cycle;
+oblu:=2.5f_obl;
+infill obl(5l,4l,6)---obl(6,5l,4l)--obl(4l,6,5l)---cycle;
+penlabels(1,2',2'',3,4,5); labels(1',2,3',6);
+endchar;
+
+iff known chars.math_exists:
+bskchar "Existential quantifier";
+beginchar(chars.math_exists,10u#,asc_height#,0); uni "0x2203";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos2(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=lft x3=lft x5=u; top y1r=h; bot y5l=0; y3=.5[y1,y5]+o;
+rt x2r=rt x4r=w-u; y2=y1r; y4=y5l; y2l:=y1l; y4l:=y5r;
+y6=y3; x6=x2l;
+bskpoints(2,1,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1r---z2..z2r+o*down---z4r---z5l..z5rr---obl(4l,5r,6l)---obl(6l,4l,3l)
+ ---z3l..z3r---obl(6r,3r,2l)---obl(2l,6r,1l)---z1ll..cycle;
+penlabels(1,2,3,4,5,6); labels(1ll,5rr);
+endchar;
+
+iff known chars.math_hardy:
+bskchar "Hardy's asypmtotic equivalence sign";
+beginchar(chars.math_hardy,14u#,v_center(x_height#)); uni "0x224D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(rule_thickness,90); pos5(rule_thickness,90);
+x1-.5rule_thickness=u=w-x3; x2=x5=.5w; y2-y5=1/3(h-d); .5[y2,y5]=math_axis;
+top y1=top y3=h; .5[y1,y4]=.5[y3,y6]=math_axis; x4=x1; x6=x3;
+pos1(rule_thickness,angle(z1-z2)-90); pos3(rule_thickness,angle(z3-z2)+90);
+pos4(rule_thickness,angle(z4-z2)-90); pos6(rule_thickness,angle(z6-z2)+90);
+filldraw (z1l+hair*unitvector(z2-z1)...z2l...z3l)..(z3r..z2r..z1r)..cycle;
+filldraw (z4l...z5l...z6l)..(z6r+hair*unitvector(z5-z6)..z5r..z4r)..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_precedes:
+bskchar "Precedes sign";
+beginchar(chars.math_precedes,12u#,v_center(x_height#)); uni "0x227A";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=h; x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}..{z1-z0'}z1r
+ ..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_precedes_eq:
+bskchar "Precedes or equals to sign";
+beginchar(chars.math_precedes_eq,12u#,v_center(x_height#+3u#)); uni "0x227C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; lft x0=1.5u; x0'=2/3[x0,x1]; x3=x0;
+top y1=h; x1+.5rule_thickness=w-u; x2=x4=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows:
+bskchar "Follows sign";
+beginchar(chars.math_follows,12u#,v_center(x_height#)); uni "0x227B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_follows_eq:
+bskchar "Follows or equals to sign";
+beginchar(chars.math_follows_eq,12u#,v_center(x_height#+3u#)); uni "0x227D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; rt x0=w-1.5u; x0'=2/3[x0,x1]; x3=x1; x4=x0;
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_angle_left:
+bskchar "Left angle bracket";
+beginchar(chars.math_angle_left,6u#,body_height#,paren_depth#); uni "0x27E8";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta; oblu:=2oblu;
+lft x0l=u; y0=math_axis;
+pos0(rule_thickness,0); x1=x2; .5[y1r,y2r]=y0;
+y1r=h; x1r=w-x0l;
+theta:=angle(z1r-z0r);
+pos1(.85rule_thickness,theta-90); pos2(rule_thickness,theta-45);
+z0'=z0l+(.85rule_thickness-currentbreadth)*dir(theta-90);
+z0''=z0l+(rule_thickness-currentbreadth)*dir(theta-90);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0l'=y0l+o; z0l'=whatever[z0l,z1l];
+bskpoints(0,1,hair,hair);
+filldraw z0l..z0l'---z1ll..z1r---obl(0''',1r,2r)---z2r..z2l---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_left_big:
+bskchar "\big left angle bracket";
+beginchar(chars.math_angle_left_big,6u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=rule_thickness;
+lft x0l=u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1r=h; x1r=w-x0l;
+theta:=angle(z1r-z0r);
+pos1(.85breadth,theta-90); pos2(breadth,theta-45);
+z0'=z0l+(.85breadth-currentbreadth)*dir(theta-90);
+z0''=z0l+(breadth-currentbreadth)*dir(theta-90);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0l'=y0l+o; z0l'=whatever[z0l,z1l];
+bskpoints(0,1,hair,hair);
+filldraw z0l..z0l'---z1ll..z1r---obl(0''',1r,2r)---z2r..z2l---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_left_Big:
+bskchar "\Big left angle bracket";
+beginchar(chars.math_angle_left_Big,9u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=1.1rule_thickness;
+lft x0l=u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1r=h; x1r=w-x0l;
+theta:=angle(z1r-z0r);
+pos1(.85breadth,theta-90); pos2(breadth,theta-45);
+z0'=z0l+(.85breadth-currentbreadth)*dir(theta-90);
+z0''=z0l+(breadth-currentbreadth)*dir(theta-90);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0l'=y0l+o; z0l'=whatever[z0l,z1l];
+bskpoints(0,1,hair,hair);
+filldraw z0l..z0l'---z1ll..z1r---obl(0''',1r,2r)---z2r..z2l---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_left_bigg:
+bskchar "\bigg left angle bracket";
+beginchar(chars.math_angle_left_bigg,12u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=1.25rule_thickness;
+lft x0l=u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1r=h; x1r=w-x0l;
+theta:=angle(z1r-z0r);
+pos1(.85breadth,theta-90); pos2(breadth,theta-45);
+z0'=z0l+(.85breadth-currentbreadth)*dir(theta-90);
+z0''=z0l+(breadth-currentbreadth)*dir(theta-90);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0l'=y0l+o; z0l'=whatever[z0l,z1l];
+bskpoints(0,1,hair,hair);
+filldraw z0l..z0l'---z1ll..z1r---obl(0''',1r,2r)---z2r..z2l---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_left_Bigg:
+bskchar "\Bigg left angle bracket";
+beginchar(chars.math_angle_left_Bigg,15u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=1.5rule_thickness;
+lft x0l=u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1r=h; x1r=w-x0l;
+theta:=angle(z1r-z0r);
+pos1(.85breadth,theta-90); pos2(breadth,theta-45);
+z0'=z0l+(.85breadth-currentbreadth)*dir(theta-90);
+z0''=z0l+(breadth-currentbreadth)*dir(theta-90);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0l'=y0l+o; z0l'=whatever[z0l,z1l];
+bskpoints(0,1,hair,hair);
+filldraw z0l..z0l'---z1ll..z1r---obl(0''',1r,2r)---z2r..z2l---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_right:
+bskchar "Right angle bracket";
+beginchar(chars.math_angle_right,6u#,body_height#,paren_depth#); uni "0x27E9";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta; oblu:=2oblu;
+lft x0r=w-u; y0=math_axis;
+pos0(rule_thickness,0); x1=x2; .5[y1r,y2r]=y0;
+y1l=h; x1l=w-x0r;
+theta:=angle(z1l-z0l);
+pos1(rule_thickness,theta-90); pos2(.85rule_thickness,theta-135);
+z0'=z0r+(rule_thickness-currentbreadth)*dir(theta+90);
+z0''=z0r+(.85rule_thickness-currentbreadth)*dir(theta+45);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0r'=y0r+o; z0r'=whatever[z0r,z1r];
+bskpoints(1,0,hair,hair);
+filldraw z0r..z0r'---z1rr..z1l---obl(0''',1l,2r)---z2l..z2r---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_right_big:
+bskchar "\big right angle bracket";
+beginchar(chars.math_angle_right_big,6u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=rule_thickness;
+lft x0r=w-u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1l=h; x1l=w-x0r;
+theta:=angle(z1l-z0l);
+pos1(breadth,theta-90); pos2(.85breadth,theta-135);
+z0'=z0r+(breadth-currentbreadth)*dir(theta+90);
+z0''=z0r+(.85breadth-currentbreadth)*dir(theta+45);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0r'=y0r+o; z0r'=whatever[z0r,z1r];
+bskpoints(1,0,hair,hair);
+filldraw z0r..z0r'---z1rr..z1l---obl(0''',1l,2r)---z2l..z2r---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_right_Big:
+bskchar "\Big right angle bracket";
+beginchar(chars.math_angle_right_Big,9u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=1.1rule_thickness;
+lft x0r=w-u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1l=h; x1l=w-x0r;
+theta:=angle(z1l-z0l);
+pos1(breadth,theta-90); pos2(.85breadth,theta-135);
+z0'=z0r+(breadth-currentbreadth)*dir(theta+90);
+z0''=z0r+(.85breadth-currentbreadth)*dir(theta+45);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0r'=y0r+o; z0r'=whatever[z0r,z1r];
+bskpoints(1,0,hair,hair);
+filldraw z0r..z0r'---z1rr..z1l---obl(0''',1l,2r)---z2l..z2r---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_right_bigg:
+bskchar "\bigg right angle bracket";
+beginchar(chars.math_angle_right_bigg,12u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=1.25rule_thickness;
+lft x0r=w-u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1l=h; x1l=w-x0r;
+theta:=angle(z1l-z0l);
+pos1(breadth,theta-90); pos2(.85breadth,theta-135);
+z0'=z0r+(breadth-currentbreadth)*dir(theta+90);
+z0''=z0r+(.85breadth-currentbreadth)*dir(theta+45);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0r'=y0r+o; z0r'=whatever[z0r,z1r];
+bskpoints(1,0,hair,hair);
+filldraw z0r..z0r'---z1rr..z1l---obl(0''',1l,2r)---z2l..z2r---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_angle_right_Bigg:
+bskchar "\Bigg right angle bracket";
+beginchar(chars.math_angle_right_Bigg,15u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, breadth; oblu:=2oblu; breadth:=1.5rule_thickness;
+lft x0r=w-u; y0=.5[-d,h];
+pos0(breadth,0); x1=x2; .5[y1r,y2r]=y0;
+y1l=h; x1l=w-x0r;
+theta:=angle(z1l-z0l);
+pos1(breadth,theta-90); pos2(.85breadth,theta-135);
+z0'=z0r+(breadth-currentbreadth)*dir(theta+90);
+z0''=z0r+(.85breadth-currentbreadth)*dir(theta+45);
+z0'''=whatever[z0',z1r]=whatever[z0'',z2r];
+y0r'=y0r+o; z0r'=whatever[z0r,z1r];
+bskpoints(1,0,hair,hair);
+filldraw z0r..z0r'---z1rr..z1l---obl(0''',1l,2r)---z2l..z2r---cycle;
+penlabels(0,1,2); labels(0',0'',0''',1ll,0l');
+endchar;
+
+iff known chars.math_nabla:
+bskchar "Nabla operator";
+beginchar(chars.math_nabla,13u#,cap_height#,0); uni "0x2207";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, old_jut; oblu:=2oblu;
+pickup tiny.nib;
+old_jut:=cap_jut;
+rt x1l=w-u; lft x2r=u; top y1l=top y2r=h;
+x3l=.5w; bot y3l=-d-apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,180); pos2(alpha*right_stem,180);
+pos1'(alpha*left_stem,180); pos2'(alpha*right_stem,180);
+z1'l=z3l=z2'r;
+z1''=z1r+(cap_stem-currentbreadth)*unitvector(z3l-z1l);
+z2''=z2l+(cap_stem-currentbreadth)*unitvector(z3l-z2r);
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[cap_hair,cap_stem];
+filldraw z1l---z2r--z3l--cycle;
+infill obl(1'',3',2'')---obl(2'',1'',3')---obl(3',2'',1'')---cycle;
+penlabels(1,1',2,2',3); labels(1'',2'',3');
+endchar;
+
+iff known chars.math_nabla_small:
+bskchar "Nabla operator (smaller)";
+beginchar(chars.math_nabla_small,12u#,.9cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, old_jut; oblu:=2oblu;
+pickup tiny.nib;
+old_jut:=cap_jut;
+rt x1l=w-u; lft x2r=u; top y1l=top y2r=h;
+x3l=.5w; bot y3l=-d-apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,180); pos2(alpha*right_stem,180);
+pos1'(alpha*left_stem,180); pos2'(alpha*right_stem,180);
+z1'l=z3l=z2'r;
+z1''=z1r+(cap_stem-currentbreadth)*unitvector(z3l-z1l);
+z2''=z2l+(cap_stem-currentbreadth)*unitvector(z3l-z2r);
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[cap_hair,cap_stem];
+filldraw z1l---z2r--z3l--cycle;
+infill obl(1'',3',2'')---obl(2'',1'',3')---obl(3',2'',1'')---cycle;
+penlabels(1,1',2,2',3); labels(1'',2'',3');
+endchar;
+
+iff known chars.math_laplace:
+bskchar "Laplace operator";
+beginchar(chars.math_laplace,13u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, old_jut; oblu:=2oblu;
+pickup tiny.nib;
+old_jut:=cap_jut;
+rt x1l=w-u; lft x2r=u; bot y1l=bot y2r=-d;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,180); pos2(alpha*right_stem,180);
+pos1'(alpha*left_stem,180); pos2'(alpha*right_stem,180);
+z1'l=z3l=z2'r;
+z1''=z1r+(cap_stem-currentbreadth)*unitvector(z3l-z1l);
+z2''=z2l+(cap_stem-currentbreadth)*unitvector(z3l-z2r);
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[cap_hair,cap_stem];
+filldraw z1l---z2r--z3l--cycle;
+infill obl(1'',3',2'')---obl(2'',1'',3')---obl(3',2'',1'')---cycle;
+penlabels(1,1',2,2',3); labels(1'',2'',3');
+endchar;
+
+iff known chars.math_laplace_small:
+bskchar "Laplace operator (smaller)";
+beginchar(chars.math_laplace_small,12u#,.9cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, old_jut; oblu:=2oblu;
+pickup tiny.nib;
+old_jut:=cap_jut;
+rt x1l=w-u; lft x2r=u; bot y1l=bot y2r=-d;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,180); pos2(alpha*right_stem,180);
+pos1'(alpha*left_stem,180); pos2'(alpha*right_stem,180);
+z1'l=z3l=z2'r;
+z1''=z1r+(cap_stem-currentbreadth)*unitvector(z3l-z1l);
+z2''=z2l+(cap_stem-currentbreadth)*unitvector(z3l-z2r);
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[cap_hair,cap_stem];
+filldraw z1l---z2r--z3l--cycle;
+infill obl(1'',3',2'')---obl(2'',1'',3')---obl(3',2'',1'')---cycle;
+penlabels(1,1',2,2',3); labels(1'',2'',3');
+endchar;
+
+iff known chars.math_dalembert:
+bskchar "D'Alembert operator";
+beginchar(chars.math_dalembert,13u#,.9cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,0); pos4(cap_hair,0);
+lft x1l=lft x2l=u; rt x3r=rt x4r=w-u;
+bot y2=bot y3=0; top y1=top y4=h;
+y1r:=y4l:=y1r-cap_hair+currentbreadth;
+y2r:=y3l:=y2r+cap_stem-currentbreadth;
+filldraw obl(1l,4r,2l)---obl(2l,1l,3r)---obl(3r,2l,4r)---obl(4r,3r,1l)---cycle;
+infill obl(1r,4l,2r)---obl(2r,1r,3l)---obl(3l,2r,4l)---obl(4l,3l,1r)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_wreath:
+bskchar "Wreath product";
+beginchar(chars.math_wreath,6u#, asc_height#,asc_depth#); uni "0x2240";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1a.r=x2; x2a.l=x1; .5[y1,y2]=.5[y1a,y2a]=math_axis;
+y1-y2=12u;
+rt x2- lft x1= w-2u;
+rt x2=w-u; y2-y2a=1/4(y2-y1);
+pos1(hair,90); pos2(hair,90); pos1a(curve,20); pos2a(curve,-20);
+z2a.s=z2a.r+curve*unitvector(z2-z1);
+filldraw z1r{z1a-z1}..z1a.r..z2a.r..z2a.s..{z2-z2a.r}z2r..
+ z2l{z2a-z2}..z2a.l..z1a.l..{z1-z1a.l}z1l..cycle;
+penlabels(1,1a,2,2a); labels(2a.s);
+endchar;
+
+iff known chars.math_empty_set:
+bskchar "Empty set";
+beginchar(chars.math_empty_set,12u#,asc_height#,0); uni "0x2205";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h;
+top z5=(x1,-apex_o); bot z6=(x3,h+o);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+p2:=z5r--z0r--z6r;
+p3:=z6l--z0l--z5l;
+(tim0,tim1-.5)=p0 intersectiontimes subpath(.5,infinity) of p2;
+(tim2,tim3)=(subpath (0,1) of p3) intersectiontimes p0;
+(tim4-1,tim5)=(subpath (1,infinity) of p3) intersectiontimes p0;
+(tim6,tim7)=p2 intersectiontimes p0;
+filldraw subpath (rundy(p0,tim7),rundy(p0,tim0).zpet) of p0..subpath(rundy(p2,tim1),infinity) of p2{z6-z5}
+ ..subpath(0,rundy(p3,(tim2,3/4oblu)).zpet) of p3..subpath(rundy(p0,tim3),infinity) of p0
+ ..subpath(0,rundy(p0,tim5).zpet) of p0..subpath(rundy(p3,tim4),infinity) of p3
+ ..subpath(0,rundy(p2,tim6).zpet) of p2..cycle;
+numeric tim[];
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p1 intersectiontimes subpath(0,1) of p2;
+infill subpath(rundy(p2,tim4),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+(tim5,tim6)=p1 intersectiontimes p3;
+(tim7,tim8-1)=p1 intersectiontimes subpath(1,infinity) of p3;
+infill subpath(rundy(p3,tim6),rundy(p3,tim8).zpet) of p3..subpath(rundy(p1,tim7),infinity) of p1
+ ..subpath(0,rundy(p1,tim5).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_empty_set_alt:
+bskchar "Empty set (alternative)";
+beginchar(chars.math_empty_set_alt,15u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h;
+top z5=(x1,-apex_o); bot z6=(x3,h+o);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+p2:=z5r--z0r--z6r;
+p3:=z6l--z0l--z5l;
+(tim0,tim1-.5)=p0 intersectiontimes subpath(.5,infinity) of p2;
+(tim2,tim3)=(subpath (0,1) of p3) intersectiontimes p0;
+(tim4-1,tim5)=(subpath (1,infinity) of p3) intersectiontimes p0;
+(tim6,tim7)=p2 intersectiontimes p0;
+filldraw subpath (rundy(p0,tim7),rundy(p0,tim0).zpet) of p0..subpath(rundy(p2,tim1),infinity) of p2{z6-z5}
+ ..subpath(0,rundy(p3,(tim2,3/4oblu)).zpet) of p3..subpath(rundy(p0,tim3),infinity) of p0
+ ..subpath(0,rundy(p0,tim5).zpet) of p0..subpath(rundy(p3,tim4),infinity) of p3
+ ..subpath(0,rundy(p2,tim6).zpet) of p2..cycle;
+numeric tim[];
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p1 intersectiontimes subpath(0,1) of p2;
+infill subpath(rundy(p2,tim4),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+(tim5,tim6)=p1 intersectiontimes p3;
+(tim7,tim8-1)=p1 intersectiontimes subpath(1,infinity) of p3;
+infill subpath(rundy(p3,tim6),rundy(p3,tim8).zpet) of p3..subpath(rundy(p1,tim7),infinity) of p1
+ ..subpath(0,rundy(p1,tim5).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.arrow_double_right:
+bskchar "Double rightward arrow";
+beginchar(chars.arrow_double_right,15u#,v_center(5u#)); uni "0x21D2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=4rule_thickness;
+filldraw dvojsipka(0,1,2,3)..cycle;
+endchar;
+
+iff known chars.arrow_double_left:
+bskchar "Double leftward arrow";
+beginchar(chars.arrow_double_left,15u#,v_center(5u#)); uni "0x21D0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=4rule_thickness;
+filldraw dvojsipka(0,1,3,2)..cycle;
+endchar;
+
+iff known chars.arrow_double_up:
+bskchar "Double upward arrow";
+beginchar(chars.arrow_double_up,9u#,asc_height#,0); uni "0x21D1";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,180);
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=4rule_thickness;
+top y0=h+apex_o; bot y1=-d; y2=y3=y1;
+filldraw dvojsipka(0,1,2,3)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_double_down:
+bskchar "Double downward arrow";
+beginchar(chars.arrow_double_down,9u#,asc_height#,0); uni "0x21D3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o=.5[x2,x3]; x3-x2=4rule_thickness;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+filldraw dvojsipka(0,1,3,2)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_double_up_down:
+bskchar "Double up-down arrow";
+beginchar(chars.arrow_double_up_down,9u#,asc_height#,0); uni "0x21D5";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], oldat, ooldat; path oldap[];
+pos1(rule_thickness,0); pos101(rule_thickness,180);
+x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=4rule_thickness;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+x102=x2; x103=x3; y102=y103=y0q; bot y100=h+apex_o; top y101=-d;
+sipka_points(0,1); dvojsipka_points(0,1,3,2); oldat:=bskat;
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,102,103); ooldat:=bskat;
+tim1=xpart(bskap4 intersectiontimes ((0,x_height)--(x0,x_height)));
+tim2=xpart(bskap5 intersectiontimes ((w,x_height)--(x0,x_height)));
+tim3=xpart(oldap4 intersectiontimes ((w,bar_height)--(x0,bar_height)));
+tim4=xpart(oldap5 intersectiontimes ((0,bar_height)--(x0,bar_height)));
+tim5=xpart(bskap6 intersectiontimes ((w,bar_height)--(x0,bar_height)));
+tim6=xpart(bskap3 intersectiontimes ((0,x_height)--(x0,x_height)));
+tim7=xpart(oldap6 intersectiontimes ((0,bar_height)--(x0,bar_height)));
+tim8=xpart(oldap3 intersectiontimes ((w,bar_height)--(x0,bar_height)));
+filldraw subpath(tim1,rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),tim2) of bskap5
+ hide(bskat:=oldat)
+ --subpath(tim3,rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),tim4) of oldap5--cycle;
+bskat:=ooldat;
+infill subpath(tim5,rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0
+ ..subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),tim6) of bskap3
+ --subpath(tim7,rundy(oldap6,oldtim18).zpet) of oldap6
+ ..subpath(rundy(oldap0,oldtim17),infinity) of oldap0
+ ..subpath(0,rundy(oldap1,oldtim11).zpet) of oldap1
+ ..subpath(rundy(oldap3,oldtim12),tim8) of oldap3..cycle;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_double_left_right:
+bskchar "Double left-right arrow";
+beginchar(chars.arrow_double_left_right,18u#,v_center(5u#)); uni "0x21D4";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=4rule_thickness;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+sipka_points(0,1); dvojsipka_points(0,1,2,3); oldat:=bskat;
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,103,102); ooldat:=bskat;
+ls=.5w-2u; rs=.5w+2u;
+tim1=xpart(bskap4 intersectiontimes ((ls,0)--(ls,math_axis)));
+tim2=xpart(bskap5 intersectiontimes ((ls,math_axis)--(ls,h)));
+tim3=xpart(oldap4 intersectiontimes ((rs,math_axis)--(rs,h)));
+tim4=xpart(oldap5 intersectiontimes ((rs,0)--(rs,math_axis)));
+tim5=xpart(bskap6 intersectiontimes ((ls,math_axis)--(ls,h)));
+tim6=xpart(bskap3 intersectiontimes ((ls,0)--(ls,math_axis)));
+tim7=xpart(oldap6 intersectiontimes ((rs,0)--(rs,math_axis)));
+tim8=xpart(oldap3 intersectiontimes ((rs,math_axis)--(rs,h)));
+filldraw subpath(tim1,rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),tim2) of bskap5
+ hide(bskat:=oldat)
+ --subpath(tim3,rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),tim4) of oldap5--cycle;
+bskat:=ooldat;
+infill subpath(tim5,rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0
+ ..subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),tim6) of bskap3
+ --subpath(tim7,rundy(oldap6,oldtim18).zpet) of oldap6
+ ..subpath(rundy(oldap0,oldtim17),infinity) of oldap0
+ ..subpath(0,rundy(oldap1,oldtim11).zpet) of oldap1
+ ..subpath(rundy(oldap3,oldtim12),tim8) of oldap3..cycle;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.math_curly_brace_left:
+bskchar "Left curly brace";
+beginchar(chars.math_curly_brace_left,7u#, body_height#,paren_depth#); uni "0x007B";
+italcorr body_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,80); pos2(.5[stem,hair],135); pos3(bourstem,190); pos4(hair,90);
+pos5(bourstem,170); pos6(.5[stem,hair],225); pos7(hair,-100);
+y4=.5(h-d)+o; lft x4=u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1-stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{right}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_left_big:
+bskchar "\big left curly brace";
+beginchar(chars.math_curly_brace_left_big,7u#, rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,80); pos2(.5[stem,hair],135); pos3(bourstem,190); pos4(hair,90);
+pos5(bourstem,170); pos6(.5[stem,hair],225); pos7(hair,-100);
+y4=.5(h-d)+o; lft x4=u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3=2/3(w-u); x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{right}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_left_Big:
+bskchar "\Big left curly brace";
+beginchar(chars.math_curly_brace_left_Big,9u#, rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,80); pos2(.45[stem,hair],135); pos3(1.05bourstem,190); pos4(.25[hair,stem],90);
+pos5(1.05bourstem,170); pos6(.45[stem,hair],225); pos7(hair,-100);
+y4=.5(h-d)+o; lft x4=u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3=2/3(w-u); x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{right}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_left_bigg:
+bskchar "\bigg left curly brace";
+beginchar(chars.math_curly_brace_left_bigg,10u#, rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,80); pos2(.4[stem,hair],135); pos3(1.1bourstem,190); pos4(.5[hair,stem],90);
+pos5(1.1bourstem,170); pos6(.4[stem,hair],225); pos7(hair,-100);
+y4=.5(h-d)+o; lft x4=u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3=2/3(w-u); x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{right}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_left_Bigg:
+bskchar "\Bigg left curly brace";
+beginchar(chars.math_curly_brace_left_Bigg,11u#, rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,80); pos2(stem,135); pos3(1.5bourstem,190); pos4(.75[hair,stem],90);
+pos5(1.5bourstem,170); pos6(stem,225); pos7(hair,-100);
+y4=.5(h-d)+o; lft x4=u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3=2/3(w-u); x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{right}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+def brace_ext_left:=
+ numeric H, D; H=0; D=6dh;
+ pos1(hair,80); pos2(stem,135); pos3(1.5bourstem,190); pos4(.75[hair,stem],90);
+ pos5(1.5bourstem,170); pos6(stem,225); pos7(hair,-100);
+ y4=.5(H-D)+o; lft x4=u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=y3;
+ top y2r=H-hair; x3=2/3(w-u); x2r=x3r;
+ x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-D+hair; .5[y7,y4]=y5;
+ p0=z1r{z2r-z1l}..z2r..z3r..{left}z4r;
+ p1=z4l{right}..z3l..z2l..{z1l-z2r}z1l;
+ p2=z4l{right}..z5r..z6r..{z7l-z6r}z7r;
+ p3=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
+enddef;
+
+iff known chars.math_curly_brace_left_top:
+bskchar "Extensible left curly brace---top";
+beginchar(chars.math_curly_brace_left_top,11.5u#, 0,2.1dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+brace_ext_left;
+tim100=directiontime up of p1;
+tim101=xpart(p0 intersectiontimes (point tim100 of p1 --(point tim100 of p1 shifted (-w,0))));
+filldraw subpath (0,tim101) of p0--subpath(tim100,infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_left_bot:
+bskchar "Extensible left curly brace---bottom";
+beginchar(chars.math_curly_brace_left_bot,11.5u#, 0,2.1dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+brace_ext_left;
+tim100-2=directiontime up of subpath (2,infinity) of p3;
+tim101=xpart(p2 intersectiontimes (point tim100 of p3 --(point tim100 of p3 shifted (-w,0))));
+filldraw (subpath (tim101,infinity) of p2..subpath(0,tim100) of p3--cycle)
+ shifted (0,-ypart(point tim101 of p2));
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_left_mid:
+bskchar "Extensible left curly brace---middle";
+beginchar(chars.math_curly_brace_left_mid,11.5u#, 0,1.8dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+brace_ext_left;
+z8=bsktouch(p1,down,p3,up);
+tim0=xpart(p1 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p3 intersectiontimes (z8--(x8,y5)));
+tim100=directiontime up of p1;
+tim101=xpart(p0 intersectiontimes (point tim100 of p1 --(point tim100 of p1 shifted (-w,0))));
+tim102-2=directiontime up of subpath (2,infinity) of p3;
+tim103=xpart(p2 intersectiontimes (point tim102 of p3 --(point tim102 of p3 shifted (-w,0))));
+filldraw (subpath(tim101, infinity) of p0..subpath(0,tim103) of p2
+ --subpath(tim102,rundy(p3,tim1).zpet) of p3
+ ..subpath(rundy(p1,tim0),tim100) of p1--cycle) shifted (0,-ypart(point tim101 of p0));
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_left_ext:
+bskchar "Extensible left curly brace---extension module";
+beginchar(chars.math_curly_brace_left_ext,11.5u#, 0,.5dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=1.5curve;
+brace_ext_left;
+tim100=directiontime up of p1;
+tim101=xpart(p0 intersectiontimes (point tim100 of p1 --(point tim100 of p1 shifted (-w,0))));
+tim0=xpart(point tim100 of p1); tim1=xpart(point tim101 of p0);
+filldraw (tim0,h)--(tim0,-d)--(tim1,-d)--(tim1,h)--cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_white_left:%FIXME
+bskchar "Left white curly brace";
+beginchar(chars.math_curly_brace_white_left,7u#, body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(hair,80); pos2(.5[stem,hair],135); pos3(bourstem,190); pos4(hair,90);
+pos5(bourstem,170); pos6(.5[stem,hair],225); pos7(hair,-100);
+y4=.5(h-d)+o; lft x4=u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1-stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{right}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
+p2=(x1-stem,-d-stem)--(x1-stem,h+stem);
+(tim0-2,tim2)=subpath(2,infinity) of p0 intersectiontimes p2;
+(tim1,tim3)=p1 intersectiontimes p2;
+draw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim3),rundy(p2,(tim2,hair)).zpet) of p2
+ ..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right:
+bskchar "Right curly brace";
+beginchar(chars.math_curly_brace_right,7u#, body_height#,paren_depth#); uni "0x007D";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,100); pos2(.5[stem,hair],45); pos3(bourstem,-10); pos4(hair,90);
+pos5(bourstem,10); pos6(.5[stem,hair],-45); pos7(hair,-80);
+y4=.5(h-d)-o; rt x4=w-u; lft x1r=u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1+stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{left}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{right}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right_big:
+bskchar "\big right curly brace";
+beginchar(chars.math_curly_brace_right_big,7u#, rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,100); pos2(.5[stem,hair],45); pos3(bourstem,-10); pos4(hair,90);
+pos5(bourstem,10); pos6(.5[stem,hair],-45); pos7(hair,-80);
+y4=.5(h-d)-o; rt x4=w-u; lft x1r=u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1+stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{left}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{right}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right_Big:
+bskchar "\Big right curly brace";
+beginchar(chars.math_curly_brace_right_Big,9u#, rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,100); pos2(.45[stem,hair],45); pos3(1.05bourstem,-10); pos4(.25[hair,stem],90);
+pos5(1.05bourstem,10); pos6(.45[stem,hair],-45); pos7(hair,-80);
+y4=.5(h-d)-o; rt x4=w-u; lft x1r=u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1+stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{left}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{right}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right_bigg:
+bskchar "\bigg right curly brace";
+beginchar(chars.math_curly_brace_right_bigg,10u#, rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,100); pos2(.4[stem,hair],45); pos3(1.1bourstem,-10); pos4(.5[hair,stem],90);
+pos5(1.1bourstem,10); pos6(.4[stem,hair],-45); pos7(hair,-80);
+y4=.5(h-d)-o; rt x4=w-u; lft x1r=u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1+stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{left}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{right}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right_Bigg:
+bskchar "\Bigg right curly brace";
+beginchar(chars.math_curly_brace_right_Bigg,11u#, rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,100); pos2(stem,45); pos3(1.5bourstem,-10); pos4(.75[hair,stem],90);
+pos5(1.5bourstem,10); pos6(stem,-45); pos7(hair,-80);
+y4=.5(h-d)-o; rt x4=w-u; lft x1r=u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1+stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{left}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{right}z4r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+def brace_ext_right:=
+ numeric H, D; H=0; D=6dh;
+ pos1(hair,100); pos2(stem,45); pos3(1.5bourstem,-10); pos4(.75[hair,stem],90);
+ pos5(1.5bourstem,10); pos6(stem,-45); pos7(hair,-80);
+ y4=.5(H-D)-o; rt x4=w-u; lft x1r=u; top y1r=y2r; .5[y4,y1]=y3;
+ top y2r=h-hair; x3l=x1+stem; x2r=x3r;
+ x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-D+hair; .5[y7,y4]=y5;
+ p0=z1r{z2r-z1l}..z2r..z3r..{right}z4r;
+ p1=z4l{left}..z3l..z2l..{z1l-z2r}z1l;
+ p2=z4l{left}..z5r..z6r..{z7l-z6r}z7r;
+ p3=z7l{z6r-z7l}..z6l..z5l..{right}z4r;
+enddef;
+
+iff known chars.math_curly_brace_right_top:
+bskchar "Extensible right curly brace---top";
+beginchar(chars.math_curly_brace_right_top,11.5u#, 0,2.1dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+brace_ext_right;
+tim100=directiontime up of p1;
+tim101=xpart(p0 intersectiontimes (point tim100 of p1 --(point tim100 of p1 shifted (w,0))));
+filldraw subpath (0,tim101) of p0--subpath(tim100,infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right_bot:
+bskchar "Extensible right curly brace---bottom";
+beginchar(chars.math_curly_brace_right_bot,11.5u#, 0,2.1dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+brace_ext_right;
+tim100-2=directiontime up of subpath (2,infinity) of p3;
+tim101=xpart(p2 intersectiontimes (point tim100 of p3 --(point tim100 of p3 shifted (w,0))));
+filldraw (subpath (tim101,infinity) of p2..subpath(0,tim100) of p3--cycle)
+ shifted (0,-ypart(point tim101 of p2));
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right_mid:
+bskchar "Extensible right curly brace---middle";
+beginchar(chars.math_curly_brace_right_mid,11.5u#, 0,1.8dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], oblu; oblu:=1.5curve;
+brace_ext_right;
+z8=bsktouch(p1,down,p3,up);
+tim0=xpart(p1 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p3 intersectiontimes (z8--(x8,y5)));
+tim100=directiontime up of p1;
+tim101=xpart(p0 intersectiontimes (point tim100 of p1 --(point tim100 of p1 shifted (w,0))));
+tim102-2=directiontime up of subpath (2,infinity) of p3;
+tim103=xpart(p2 intersectiontimes (point tim102 of p3 --(point tim102 of p3 shifted (w,0))));
+filldraw (subpath(tim101, infinity) of p0..subpath(0,tim103) of p2
+ --subpath(tim102,rundy(p3,tim1).zpet) of p3
+ ..subpath(rundy(p1,tim0),tim100) of p1--cycle) shifted (0,-ypart(point tim101 of p0));
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_right_ext:
+bskchar "Extensible right curly brace---extension module";
+beginchar(chars.math_curly_brace_right_ext,11.5u#, 0,.5dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+brace_ext_right;
+tim100=directiontime up of p1;
+tim101=xpart(p0 intersectiontimes (point tim100 of p1 --(point tim100 of p1 shifted (w,0))));
+tim0=xpart(point tim100 of p1); tim1=xpart(point tim101 of p0);
+filldraw (tim0,h)--(tim0,-d)--(tim1,-d)--(tim1,h)--cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_white_right:%FIXME
+bskchar "Right white curly brace";
+beginchar(chars.math_curly_brace_white_right,7u#, body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(hair,100); pos2(.5[stem,hair],45); pos3(bourstem,-10); pos4(hair,90);
+pos5(bourstem,10); pos6(.5[stem,hair],-45); pos7(hair,-80);
+y4=.5(h-d)-o; rt x4=w-u; lft x1r=u; top y1r=y2r; .5[y4,y1]=y3;
+top y2r=h-hair; x3l=x1+stem; x2r=x3r;
+x5=x3; x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=y5;
+p0=z4l{left}..z3l..z2l..{z1l-z2r}z1l;
+p1=z7l{z6r-z7l}..z6l..z5l..{right}z4r;
+p2=(x1+stem,-d-stem)--(x1+stem,h+stem);
+(tim0-2,tim2)=subpath(2,infinity) of p0 intersectiontimes p2;
+(tim1,tim3)=p1 intersectiontimes p2;
+draw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim3),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim0),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_curly_brace_quill_left:
+bskchar "Left curly brace with quill";
+beginchar(chars.math_curly_brace_quill_left,6u#, body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,80); pos2(.5[stem,hair],135); pos3(bourstem,180); pos3'(bourstem,180);
+pos4(hair,90); pos5(bourstem,180); pos5'(bourstem,180);
+pos6(.5[stem,hair],225); pos7(hair,-100);
+y4=.5(h-d)+o; rt x4=w-u; rt x1r=w-u; top y1r=y2r; .5[y4,y1]=.5[y3,y3'];
+y3-y3'=y5'-y5=.5(y1-y4);
+top y2r=h-hair; x3l=x2l-.75stem; x2=x1-u; x3=x3'=x5=x5';
+x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=.5[y5,y5'];
+y3r:=y3r+o; y5r:=y5r-o;
+p0=z1r{z2r-z1l}..z2r{left}..z3r---z3'r..{right}z4r;
+p1=z4l{left}..z5'r---z5r..z6r{right}..{z7l-z6r}z7r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z7l{z6r-z7l}..z6l..z5l---z5'l..{right}z4l..z4r{left}..z3'l---z3l..z2l..{z1l-z2r}z1l
+ ..subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,3',4,5,5',6,7);
+endchar;
+
+iff known chars.math_curly_brace_quill_right:
+bskchar "Right curly brace with quill";
+beginchar(chars.math_curly_brace_quill_right,6u#, body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,80); pos2(.5[stem,hair],45); pos3(bourstem,0); pos3'(bourstem,0);
+pos4(hair,90); pos5(bourstem,0); pos5'(bourstem,0);
+pos6(.5[stem,hair],315); pos7(hair,-100);
+y4=.5(h-d)+o; lft x4=u; lft x1r=u; top y1r=y2r; .5[y4,y1]=.5[y3,y3'];
+y3-y3'=y5'-y5=.5(y1-y4);
+top y2r=h-hair; x3l=x2l+.75stem; x2=x1+u; x3=x3'=x5=x5';
+x2=x6; x1=x7; y7-y6=y2-y1; bot y6l=-d+hair; .5[y7,y4]=.5[y5,y5'];
+y3r:=y3r+o; y5r:=y5r-o;
+p0=z1r{z2r-z1l}..z2r{right}..z3r---z3'r..{left}z4r;
+p1=z4l{right}..z5'r---z5r..z6r{left}..{z7l-z6r}z7r;
+z8=bsktouch(p0,down,p1,up);
+tim0=xpart(p0 intersectiontimes (z8--(x8,y3)));
+tim1=xpart(p1 intersectiontimes (z8--(x8,y5)));
+filldraw z7l{z6r-z7l}..z6l..z5l---z5'l..{left}z4l..z4r{right}..z3'l---z3l..z2l..{z1l-z2r}z1l
+ ..subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,3',4,5,5',6,7);
+endchar;
+
+iff known chars.sign_paragraph:
+bskchar "Paragraph sign";
+beginchar(chars.sign_paragraph,11u#,cap_height#,0); uni "0x00B6";
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270);
+pos5(.75ser_height,90); pos6(cap_hair,90); pos7(cap_curve,180);
+pos8(cap_hair,270); pos9(.8ser_height,270);
+bot y1=bot y3=0; top y2=top y4=top y6r=h;
+rt x1r= rt x2r= w-2u; x3=x4=x2-3rule_thickness;
+x5=x9=x3l; y8r=y9r; y8=bar_height; lft x7r=u; y7=.5[y8,y6]; x8=x6;
+x6=.5[x7l,x3l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
+cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(3l);
+filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
+ ...z6r{left}..z7r..z8r---
+ if dpi>300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
+ ---obl(4'r,3r,2l)..z2l+oblu*down---cycle;
+penlabels(1,2,3,4,4',5,6,7,8,9);
+endchar;
+
+iff known chars.sign_paragraph_empty:
+bskchar "Paragraph sign (alternative)";
+beginchar(chars.sign_paragraph_empty,11u#,cap_height#,0); uni "non";
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270);
+pos5(.75ser_height,90); pos6(cap_hair,90); pos7(cap_curve,180);
+pos8(cap_hair,270); pos9(.8ser_height,270);
+bot y1=bot y3=0; top y2=top y4=top y6r=h;
+rt x1r= rt x2r= w-2u; x3=x4=x2-3rule_thickness;
+x5=x9=x3l; y8r=y9r; y8=bar_height; lft x7r=u; y7=.5[y8,y6]; x8=x6;
+x6=.5[x7l,x3l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
+cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(3l);
+filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
+ ...z6r{left}..z7r..z8r---
+ if dpi>300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
+ ---obl(4'r,3r,2l)..z2l+oblu*down---cycle;
+infill z9l{down}..{left}z8l..z7l..{right}z6l..{down}z5l..cycle;
+penlabels(1,2,3,4,4',5,6,7,8,9);
+endchar;
+
+iff known chars.sign_paragraph_reversed:
+bskchar "Reversed paragraph sign";
+beginchar(chars.sign_paragraph_reversed,11u#,cap_height#,0); uni "0x204B";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270);
+pos5(.75ser_height,90); pos6(cap_hair,270); pos7(cap_curve,180);
+pos8(cap_hair,90); pos9(.8ser_height,90);
+bot y1=bot y3=0; top y2=top y4=top y6l=h;
+lft x1l= lft x2l=2u; x3=x4=x2+3rule_thickness;
+x5=x9=x3r; y8l=y9l; y8=bar_height; rt x7l=w-u; y7=.5[y8,y6]; x8=x6;
+x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5r=y4r-serif_o;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r);
+filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c
+ ..z2l.a{right}...{right}z6l..z7l..z8l---
+ if dpi>300:obl(9l,8l,3r) else: z9l fi
+ ---z3r.b..{right}z3r.c..z3r.a---z3l---obl(4'l,3l,2r)
+ ..z2r+oblu*down---cycle;
+penlabels(1,2,3,4,4',5,6,7,8,9);
+endchar;
+
+iff known chars.sign_paragraph_reversed_empty:
+bskchar "Reversed paragraph sign (alternative)";
+beginchar(chars.sign_paragraph_reversed_empty,11u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270);
+pos5(.75ser_height,270); pos6(cap_hair,270); pos7(cap_curve,180);
+pos8(cap_hair,90); pos9(.8ser_height,90);
+bot y1=bot y3=0; top y2=top y4=top y6l=h;
+lft x1l= lft x2l=2u; x3=x4=x2+3rule_thickness;
+x5=x9=x3r; y8l=y9l; y8=bar_height; rt x7l=w-u; y7=.5[y8,y6]; x8=x6;
+x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5l=y4l-serif_o;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r);
+filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c
+ ..z2l.a{right}...{right}z6l..z7l..z8l---
+ if dpi>300:obl(9l,8l,3r) else: z9l fi
+ ---z3r.b..{right}z3r.c..z3r.a---z3l---obl(4'l,3l,2r)
+ ..z2r+oblu*down---cycle;
+infill z9r{down}..{right}z8r..z7r..{left}z6r..{down}z5r..cycle;
+penlabels(1,2,3,4,4',5,6,7,8,9);
+endchar;
+
+iff known chars.sign_pilcrow:
+bskchar "Pilcrow sign";
+beginchar(chars.sign_pilcrow,8u#,cap_height#,0); uni "non";
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(cap_hair,90); pos4(cap_curve,180);
+pos5(cap_hair,270); pos6(.8ser_height,270);
+bot y1=0; top y2=top y3r=h;
+rt x1r= rt x2r= w-2u;
+x6=x1l; y5r=y6r; y5=bar_height; lft x4r=u; y4=.5[y5,y3]; x5=x3;
+x3=.5[x4l,x1l];
+cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(1l);
+filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
+ ...z3r{left}..z4r..z5r---obl(6r,5r,1l)---z1l.b..{left}z1l.c..z1l.a---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_pilcrow_empty:
+bskchar "Pilcrow sign (alternative)";
+beginchar(chars.sign_pilcrow_empty,8u#,cap_height#,0); uni "non";
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(cap_hair,90); pos4(cap_curve,180);
+pos5(cap_hair,270); pos6(.8ser_height,270);
+bot y1=0; top y2=top y3r=h;
+rt x1r= rt x2r= w-2u;
+x6=x1l; y5r=y6r; y5=bar_height; lft x4r=u; y4=.5[y5,y3]; x5=x3;
+x3=.5[x4l,x1l]; y2l:=y2l-.75ser_height;
+cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(1l);
+filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
+ ...z3r{left}..z4r..z5r---obl(6r,5r,1l)---z1l.b..{left}z1l.c..z1l.a---cycle;
+infill z6l{down}..{left}z5l..z4l..{right}z3l..{down}z2l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_diamond_suit:
+bskchar "Diamond suit";
+beginchar(chars.sign_diamond_suit,13u#, asc_height#,0); uni "0x2662";
+adjust_fit(0,0);
+pickup tiny.nib;
+string tx; path p[]; numeric tim[];
+pos1(rule_thickness,-90); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,180);
+x1=x3=.5w; lft x2l=u; x4l=w-x2l; top y1l=h+apex_o; bot y3l=-d-apex_o; .5[y1,y3]=y2=y4; z0=(x1,y2);
+for i=1 upto 4:
+ z[i+100]=.5[z[i],z[i mod 4 +1]]+.5u*unitvector(z0-.5[z[i],z[i mod 4 +1]]);
+ tx:="pos"&decimal (100+i)&"(rule_thickness,"&decimal (90*i-135)&")";scantokens tx;
+endfor;
+filldraw lft z1l..z101l..top z2l&top z2l{left}..bot z2l&bot z2l..z102l..lft z3l&lft z3l{down}..rt z3l&
+ rt z3l..z103l..bot z4l&bot z4l{right}..top z4l&top z4l..z104l..rt z1l&rt z1l{up}..lft z1l&cycle;
+p1=lft z1r..z101r..top z2r;
+p2=bot z2r..z102r..lft z3r;
+p3=rt z3r..z103r..bot z4r;
+p4=top z4r..z104r..rt z1r;
+tim0=xpart(p1 intersectiontimes ((0,y1r-2oblu)--(w,y1r-2oblu)));
+tim1=xpart(p1 intersectiontimes ((x2r+oblu,0)--(x2r+oblu,h)));
+tim2=xpart(p2 intersectiontimes ((x2r+oblu,0)--(x2r+oblu,h)));
+tim3=xpart(p2 intersectiontimes ((0,y3r+2oblu)--(w,y3r+2oblu)));
+tim4=xpart(p3 intersectiontimes ((0,y3r+2oblu)--(w,y3r+2oblu)));
+tim5=xpart(p3 intersectiontimes ((x4r-oblu,0)--(x4r-oblu,h)));
+tim6=xpart(p4 intersectiontimes ((x4r-oblu,0)--(x4r-oblu,h)));
+tim7=xpart(p4 intersectiontimes ((0,y1r-2oblu)--(w,y1r-2oblu)));
+infill subpath(tim0,tim1) of p1..subpath(tim2,tim3) of p2
+ ..subpath(tim4,tim5) of p3..subpath(tim6,tim7) of p4..cycle;
+penlabels(0,1,2,3,4,101,102,103,104);
+endchar;
+
+iff known chars.sign_diamond_suit_black:
+bskchar "Black diamond suit";
+beginchar(chars.sign_diamond_suit_black,13u#, asc_height#,0); uni "0x2666";
+adjust_fit(0,0);
+pickup tiny.nib;
+string tx; path p[]; numeric tim[];
+pos1(rule_thickness,-90); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,180);
+x1=x3=.5w; lft x2l=u; x4l=w-x2l; top y1l=h+apex_o; bot y3l=-d-apex_o; .5[y1,y3]=y2=y4; z0=(x1,y2);
+for i=1 upto 4:
+ z[i+100]=.5[z[i],z[i mod 4 +1]]+.5u*unitvector(z0-.5[z[i],z[i mod 4 +1]]);
+ tx:="pos"&decimal (100+i)&"(rule_thickness,"&decimal (90*i-135)&")";scantokens tx;
+endfor;
+filldraw lft z1l..z101l..top z2l&top z2l{left}..bot z2l&bot z2l..z102l..lft z3l&lft z3l{down}..rt z3l&
+ rt z3l..z103l..bot z4l&bot z4l{right}..top z4l&top z4l..z104l..rt z1l&rt z1l{up}..lft z1l&cycle;
+penlabels(0,1,2,3,4,101,102,103,104);
+endchar;
+
+iff known chars.sign_heart_suit:
+bskchar "Heart suit";
+beginchar(chars.sign_heart_suit,13u#, asc_height#,0); uni "0x2661";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,270); pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,180); pos6(rule_thickness,270);
+x1=x4+o=.5w=.5[x6,x2]=.5[x5,x3]; y4l=-d;
+lft x3l=u; y3=y5=x_height; top y2l=top y6l=h;
+x1-x2=(x2-x3); y1l=.5[x_height,h];
+p1=z1l..z2l..z3l..{down}z4l;
+p2=z4r{up}..z5l..z6l..z1r;
+p3=z1l+tiny*left..z2r..z3r..{down}z4;
+p4=z4{up}..z5r..z6r..z1r+tiny*right;
+tim1=xpart(p1 intersectiontimes ((x1,y1+oblu)--(0,y1+oblu)));
+tim2=xpart(p2 intersectiontimes ((x1,y1+oblu)--(x6,y1+oblu)));
+filldraw subpath (tim1,infinity) of p1..subpath(0,tim2) of p2..cycle;
+oblu:=2oblu;
+tim3=xpart(p3 intersectiontimes ((w,y4+oblu)--(0,y4+oblu)));
+tim4=xpart(p4 intersectiontimes ((w,y4+oblu)--(0,y4+oblu)));
+infill subpath(0,tim3) of p3..subpath(tim4,infinity) of p4..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_heart_suit_black:
+bskchar "Black heart suit";
+beginchar(chars.sign_heart_suit_black,13u#, asc_height#,0); uni "0x2665";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,270); pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,180); pos6(rule_thickness,270);
+x1=x4+o=.5w=.5[x6,x2]=.5[x5,x3]; y4l=-d;
+lft x3l=u; y3=y5=x_height; top y2l=top y6l=h;
+x1-x2=(x2-x3); y1l=.5[x_height,h];
+p1=z1l..z2l..z3l..{down}z4l;
+p2=z4r{up}..z5l..z6l..z1r;
+p3=z1l+tiny*left..z2r..z3r..{down}z4;
+p4=z4{up}..z5r..z6r..z1r+tiny*right;
+tim1=xpart(p1 intersectiontimes ((x1,y1+oblu)--(0,y1+oblu)));
+tim2=xpart(p2 intersectiontimes ((x1,y1+oblu)--(x6,y1+oblu)));
+filldraw subpath (tim1,infinity) of p1..subpath(0,tim2) of p2..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_spade_suit:
+bskchar "Spade suit";
+beginchar(chars.sign_spade_suit,13u#, asc_height#,0); uni "0x2660";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,0); pos4(rule_thickness,0);
+pos7(cap_curve,0);
+x1=x4=x7=.5w=.5[x6,x2]=.5[x5,x3]; y4=h;
+lft x3=u; y3=y5=bar_height; bot y2=bot y6=curve;
+x1-x2=(x2-x3); y1=h-.25[x_height,h];
+y7=-hair;
+p1=z1l..z2..z3..{up}z4l;
+p2=z4r{down}..z5..z6..z1r;
+p3=z7l--z1l;
+p4=z1r--z7r;
+tim1=xpart(p1 intersectiontimes ((x1-.5(stem-currentbreadth),0)--(x1-.5(stem-currentbreadth),h)));
+tim2=xpart(p2 intersectiontimes ((x1+.5(stem-currentbreadth),0)--(x1+.5(stem-currentbreadth),y5)));
+z100=(0,ypart(point tim1 of p1));
+tim3=xpart(p3 intersectiontimes (z100--(w,y100)));
+tim4=xpart(p4 intersectiontimes (z100--(w,y100)));
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+penlabels(1,4,7); labels(2,3,5,6);
+endchar;
+
+iff known chars.sign_spade_suit_white: %FIXME
+bskchar "White spade suit";
+beginchar(chars.sign_spade_suit_white,13u#, asc_height#,0); uni "0x2664";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,0); pos4(rule_thickness,0);
+pos7(cap_curve,0);
+x1=x4=x7=.5w=.5[x6,x2]=.5[x5,x3]; y4=h;
+lft x3=u; y3=y5=bar_height; bot y2=bot y6=curve;
+x1-x2=(x2-x3); y1=h-.25[x_height,h];
+y7=-hair;
+p1=z1l..z2..z3..{up}z4l;
+p2=z4r{down}..z5..z6..z1r;
+p3=z7l--z1l;
+p4=z1r--z7r;
+tim1=xpart(p1 intersectiontimes ((x1-.5(stem-currentbreadth),0)--(x1-.5(stem-currentbreadth),h)));
+tim2=xpart(p2 intersectiontimes ((x1+.5(stem-currentbreadth),0)--(x1+.5(stem-currentbreadth),y5)));
+z100=(0,ypart(point tim1 of p1));
+tim3=xpart(p3 intersectiontimes (z100--(w,y100)));
+tim4=xpart(p4 intersectiontimes (z100--(w,y100)));
+draw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+penlabels(1,4,7); labels(2,3,5,6);
+endchar;
+
+iff known chars.sign_club_suit:
+bskchar "Club suit";
+beginchar(chars.sign_club_suit,13u#, asc_height#,0); uni "0x2663";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos5(rule_thickness,0); pos5'(cap_curve,0);
+top z1=(.5w,h); lft x2=u; rt x3=w-u; y2=y3=bar_height;
+.5[x4,x6]=x1=x5=x5'; y4=y6=curve; y5=.45[y2,y4]; z4=whatever[(x2,0),z3]; y5'=-hair;
+z7=.5[z1,z3]+.5(y5-y4)*unitvector((z1-z3)rotated 90);
+z8=.5[z1,z2]+.5(y5-y4)*unitvector((z1-z2)rotated -90);
+y7'=.5[y7,y1]; x7'=1/3[x7,x3];
+y8'=.5[y8,y1]; x8'=1/3[x8,x2];
+p0=z2{down}..z4..z5..z6..{up}z3.. {z2-z7}.5[z3,z7]..z7..z7'..{left}z1
+ ..z8'..z8..{z8-z3}.5[z8,z2]..{down}z2;
+p1=z5l--z5'l; p2=z5'r--z5r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p0,tim2).zpet) of p2..subpath(rundy(p0,tim3),infinity) of p0
+ &cycle;
+labels(1,2,3,4,6,7,7',8,8'); penlabels(5,5');
+endchar;
+
+iff known chars.sign_club_suit_white: %FIXME
+bskchar "White club suit";
+beginchar(chars.sign_club_suit_white,13u#, asc_height#,0); uni "0x2667";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos5(rule_thickness,0); pos5'(cap_curve,0);
+top z1=(.5w,h); lft x2=u; rt x3=w-u; y2=y3=bar_height;
+.5[x4,x6]=x1=x5=x5'; y4=y6=curve; y5=.45[y2,y4]; z4=whatever[(x2,0),z3]; y5'=-hair;
+z7=.5[z1,z3]+.5(y5-y4)*unitvector((z1-z3)rotated 90);
+z8=.5[z1,z2]+.5(y5-y4)*unitvector((z1-z2)rotated -90);
+y7'=.5[y7,y1]; x7'=1/3[x7,x3];
+y8'=.5[y8,y1]; x8'=1/3[x8,x2];
+p0=z2{down}..z4..z5..z6..{up}z3.. {z2-z7}.5[z3,z7]..z7..z7'..{left}z1
+ ..z8'..z8..{z8-z3}.5[z8,z2]..{down}z2;
+p1=z5l--z5'l; p2=z5'r--z5r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+draw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p0,tim2).zpet) of p2..subpath(rundy(p0,tim3),infinity) of p0
+ &cycle;
+labels(1,2,3,4,6,7,7',8,8'); penlabels(5,5');
+endchar;
+
+iff known chars.math_section:
+bskchar "Section sign";
+beginchar(chars.math_section,8u#,asc_height#, .5asc_height#-.75bar_height#-.5cap_hair#-.5o#); uni "0x00A7";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/(h-.5bar_height);
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos2(cap_hair,90); pos3(cap_curve,angle((w-u,h-.5bar_height))+180); pos4(cap_hair,90);
+pos12(cap_hair,90); pos13(cap_curve,angle((w-u,h-.5bar_height))+180); pos14(cap_hair,90);
+pos5(cap_stem,180); pos6(cap_stem,180);
+pos15(cap_stem,180); pos16(cap_stem,180);
+z2-z12=z3-z13=z4-z14=z5-z15=z6-z16=z2r-z3;
+y5=.5[y2l,y3]+.5like_cap_hair; x3-x5l=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h+o; y4l=.5bar_height;
+y3=.5[y2r,y4r]+.5cap_hair;
+pos1(cap_hair,0); x1r=w-x5r; y1=y5-.5cap_hair;
+pos7(cap_hair,0); x7l=w-x6l; y7=y16+.5cap_hair;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r;
+p1=z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+p2=z12r{left}..z15r..z13r..z16r..{left}z14r..{up}z7r;
+p3=z7l{dir-80}..z14l{right}..z16l..z13l..z15l..{right}z12l;
+tim1=xpart(p0 intersectiontimes ((.5w,y2-.5cap_hair)--(w,y2-.5cap_hair)));
+(tim2,tim3)=p0 intersectiontimes p2;
+tim4=xpart(p3 intersectiontimes ((.5w,y14+cap_hair)--(0,y14+cap_hair)));
+(tim5,tim6)=p3 intersectiontimes p1;
+(tim7,tim8)=p0 intersectiontimes p3;
+(tim9,tim10)=p0 intersectiontimes subpath(0,3.5) of p3;
+filldraw z1r--(x1r-.5o,h+o){dir-100}..subpath(tim1,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),infinity) of p2..z7l--(x7l+o,bot y14l){dir80}
+ ..subpath(tim4,rundy(p3,tim5).zpet) of p3
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p0,tim7),rundy(p0,tim9).zpet) of p0
+ ..subpath(rundy(p3,tim10),rundy(p3,tim8).zpet) of p3..cycle;
+penlabels(0,1,2,3,4,5,6,7,12,13,14,15,16);
+endchar;
+
+iff known chars.math_accent_hat_wide:
+bskchar "Wide hat accent";
+beginchar(chars.math_accent_hat_wide,9u#,.5[asc_height#,body_height#],0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.math_accent_hat_wider:
+bskchar "Wider hat accent";
+beginchar(chars.math_accent_hat_wider,17u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(1.75stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.math_accent_hat_widest:
+bskchar "Widest hat accent";
+beginchar(chars.math_accent_hat_widest,25u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(1.75stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.math_accent_tilde_wide:
+bskchar "Wide tilde accent";
+beginchar(chars.math_accent_tilde_wide,9u#,.5[asc_height#,body_height#],0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=0; y0=.6[x_height,h];
+tilde(0,1);
+endchar;
+
+iff known chars.math_accent_tilde_wider:
+bskchar "Wider tilde accent";
+beginchar(chars.math_accent_tilde_wider,17u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=0; y0=.6[x_height,h];
+tilde(0,1);
+endchar;
+
+iff known chars.math_accent_tilde_widest:
+bskchar "Widest tilde accent";
+beginchar(chars.math_accent_tilde_widest,25u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=0; y0=.6[x_height,h];
+tilde(0,1);
+endchar;
+
+iff known chars.math_parent_left_big:
+bskchar "\big left parenthesis";
+beginchar(chars.math_parent_left_big,6u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(bourstem,0);
+rt x1r=w-u; rt x3r=w-u; lft x2l=u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(.5[stem,hair], angle((x1r,y1l)-z2)-90); pos3(.5[stem,hair],angle((x3r,y3l)-z2)+90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_left_Big:
+bskchar "\Big left parenthesis";
+beginchar(chars.math_parent_left_Big,7u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.05bourstem,0);
+rt x1r=w-u; rt x3r=w-u; lft x2l=u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(.45[stem,hair], angle((x1r,y1l)-z2)-90); pos3(.45[stem,hair],angle((x3r,y3l)-z2)+90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_left_bigg:
+bskchar "\bigg left parenthesis";
+beginchar(chars.math_parent_left_bigg,9u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.1bourstem,0);
+rt x1r=w-u; rt x3r=w-u; lft x2l=u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(.4[stem,hair], angle((x1r,y1l)-z2)-90); pos3(.4[stem,hair],angle((x3r,y3l)-z2)+90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_left_Bigg:
+bskchar "\Bigg left parenthesis";
+beginchar(chars.math_parent_left_Bigg,10u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.5bourstem,0);
+rt x1r=w-u; rt x3r=w-u; lft x2l=u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(stem, angle((x1r,y1l)-z2)-90); pos3(stem,angle((x3r,y3l)-z2)+90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_left_top:
+bskchar "Extensible left parenthesis---top";
+beginchar(chars.math_parent_left_top,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.5bourstem,0);
+rt x1r=w-u; lft x2l=u;
+bot y2=-d; top y1l=h+apex_o;
+pos1(stem, angle((x1r,y1l)-z2)-90);
+filldraw z2r{up}..z1r&z1r{up}..z1l&z1l..{down}z2l--cycle;
+penlabels(1,2);
+endchar;
+
+iff known chars.math_parent_left_bot:
+bskchar "Extensible left parenthesis---bot";
+beginchar(chars.math_parent_left_bot,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.5bourstem,0);
+rt x1r=w-u; lft x2l=u;
+top y2=h; bot y1l=-d-apex_o;
+pos1(stem,angle((x1r,y1l)-z2)+90);
+filldraw z1r..{up}z2r--z2l{down}..z1l&z1l..{up}z1r&cycle;
+penlabels(1,2);
+endchar;
+
+iff known chars.math_parent_left_mid:
+bskchar "Extensible left parenthesis---mid";
+beginchar(chars.math_parent_left_mid,10.5u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(1.5bourstem,0); pos2(1.5bourstem,0);
+lft x1l=lft x2l=u;
+top y1=h; bot y2=-d;
+filldraw z1l--z2l--z2r--z1r--cycle;
+penlabels(1,2);
+endchar;
+
+iff known chars.math_parent_right_big:
+bskchar "\big right parenthesis";
+beginchar(chars.math_parent_right_big,6u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(bourstem,180);
+lft x1r=u; lft x3r=u; rt x2l=w-u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(.5[stem,hair], angle((x1r,y1l)-z2)+90); pos3(.5[stem,hair],angle((x3r,y3l)-z2)-90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_right_Big:
+bskchar "\Big right parenthesis";
+beginchar(chars.math_parent_right_Big,7u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.05bourstem,180);
+lft x1r=u; lft x3r=u; rt x2l=w-u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(.45[stem,hair], angle((x1r,y1l)-z2)+90); pos3(.45[stem,hair],angle((x3r,y3l)-z2)-90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_right_bigg:
+bskchar "\bigg right parenthesis";
+beginchar(chars.math_parent_right_bigg,9u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.1bourstem,180);
+lft x1r=u; lft x3r=u; rt x2l=w-u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(.4[stem,hair], angle((x1r,y1l)-z2)+90); pos3(.4[stem,hair],angle((x3r,y3l)-z2)-90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_right_Bigg:
+bskchar "\Bigg right parenthesis";
+beginchar(chars.math_parent_right_Bigg,10u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.5bourstem,180);
+lft x1r=u; lft x3r=u; rt x2l=w-u;
+y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o;
+pos1(stem, angle((x1r,y1l)-z2)+90); pos3(stem,angle((x3r,y3l)-z2)-90);
+filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_right_top:
+bskchar "Extensible right parenthesis---top";
+beginchar(chars.math_parent_right_top,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.5bourstem,180);
+lft x1r=u; rt x2l=w-u;
+bot y2=-d; top y1l=h+apex_o;
+pos1(stem, angle((x1r,y1l)-z2)+90);
+filldraw z2r{up}..z1r&z1r{up}..z1l&z1l..{down}z2l--cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_parent_right_bot:
+bskchar "Extensible right parenthesis---bot";
+beginchar(chars.math_parent_right_bot,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(1.5bourstem,180);
+lft x1r=u; rt x2l=w-u;
+top y2=h; bot y1l=-d-apex_o;
+pos1(stem, angle((x1r,y1l)-z2)-90);
+filldraw z1r..{up}z2r--z2l{down}..z1l&z1l..{up}z1r&cycle;
+penlabels(1,2);
+endchar;
+
+iff known chars.math_parent_right_mid:
+bskchar "Extensible right parenthesis---mid";
+beginchar(chars.math_parent_right_mid,10.5u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(1.5bourstem,0); pos2(1.5bourstem,0);
+rt x1r=rt x2r=w-u;
+top y1=h; bot y2=-d;
+filldraw z1l--z2l--z2r--z1r--cycle;
+penlabels(1,2);
+endchar;
+
+{{ save arrwidth, arrsize; numeric arrwidth, arrsize;
+ arrwidth=arrsize/1.2=4u;
+ iff known chars.arrow_double_ext_top:
+ bskchar "Extensible double vertical arrow--top";
+ beginchar(chars.arrow_double_ext_top,10u#,0,dh#); uni "non";
+ adjust_fit(0,0);
+ pickup tiny.nib;
+ pos1(rule_thickness,180);
+ x0=x1r=.5w=.5[x2,x3]; x3-x2=4rule_thickness;
+ top y0=h+apex_o; bot y1=-d; y2=y3=y1;
+ filldraw dvojsipka(0,1,2,3)..cycle;
+ labels(1rr);
+ endchar;
+
+ iff known chars.arrow_double_ext_bot:
+ bskchar "Extensible double vertical arrow---bot";
+ beginchar(chars.arrow_double_ext_bot,10u#,0,dh#); uni "non";
+ adjust_fit(0,0);
+ pickup tiny.nib;
+ pos1(rule_thickness,0);
+ x0=x1r=.5w=.5[x2,x3]; x3-x2=4rule_thickness;
+ top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+ filldraw dvojsipka(0,1,3,2)..cycle;
+ labels(1rr);
+ endchar;
+
+ iff known chars.arrow_ext_top:
+ bskchar "Extensible vertical arrow---top";
+ beginchar(chars.arrow_ext_top,10u#,0,dh#); uni "non";
+ adjust_fit(0,0);
+ pickup tiny.nib;
+ pos1(rule_thickness,0);
+ x0=x1=.5w;
+ top y0=h+apex_o; bot y1=-d;
+ filldraw sipka_ext(0,1)---z1r..z1l---cycle;
+ endchar;
+
+ iff known chars.arrow_ext_bot:
+ bskchar "Extensible vertical arrow---bot";
+ beginchar(chars.arrow_ext_bot,10u#,0,dh#); uni "non";
+ adjust_fit(0,0);
+ pickup tiny.nib;
+ pos1(rule_thickness,0);
+ x0=x1=.5w;
+ top y0=-d-apex_o; bot y1=h;
+ filldraw sipka_ext(0,1)---z1l..z1r---cycle;
+ endchar;
+}};
+
+iff known chars.arrow_ext_mid:
+bskchar "Extensible vertical arrow---middle";
+beginchar(chars.arrow_ext_mid,10u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+x1=x2=.5w;
+top y1=h; bot y2=-d;
+filldraw z1r..z1l---z2l..z2r---cycle;
+endchar;
+
+iff known chars.arrow_double_ext_mid:
+bskchar "Extensible double vertical arrow---middle";
+beginchar(chars.arrow_double_ext_mid,10u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+x1=x2; x3=x4; .5[x1,x3]=.5w;
+x3-x2=4rule_thickness;
+top y1=top y3=h; bot y2=bot y4=-d;
+filldraw z1r..z1l---z2l..z2r---cycle;
+filldraw z3r..z3l---z4l..z4r---cycle;
+endchar;
+
+iff known chars.math_vertical_ext:
+bskchar "Extensible vertical line";
+beginchar(chars.math_vertical_ext,6u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+x1=x2=.5w;
+top y1=h; bot y2=-d;
+filldraw z1r..z1l---z2l..z2r---cycle;
+endchar;
+
+iff known chars.math_double_vertical_ext:
+bskchar "Extensible double vertical line";
+beginchar(chars.math_double_vertical_ext,10u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+x1=x2; x3=x4; .5[x1,x3]=.5w;
+x3-x2=4rule_thickness;
+top y1=top y3=h; bot y2=bot y4=-d;
+filldraw z1r..z1l---z2l..z2r---cycle;
+filldraw z3r..z3l---z4l..z4r---cycle;
+endchar;
+
+iff known chars.math_slash_big:
+bskchar "\big slash";
+beginchar(chars.math_slash_big,10u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=rule_thickness;
+top rt z1=(w-u,h); bot lft z2=(u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_slash_Big:
+bskchar "\Big slash";
+beginchar(chars.math_slash_Big,13u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=1.1rule_thickness;
+top rt z1=(w-u,h); bot lft z2=(u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_slash_bigg:
+bskchar "\bigg slash";
+beginchar(chars.math_slash_bigg,17u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=1.25rule_thickness;
+top rt z1=(w-u,h); bot lft z2=(u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_slash_Bigg:
+bskchar "\Bigg slash";
+beginchar(chars.math_slash_Bigg,21u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=1.5rule_thickness;
+top rt z1=(w-u,h); bot lft z2=(u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_backslash_big:
+bskchar "\big slash";
+beginchar(chars.math_backslash_big,10u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=rule_thickness;
+top lft z1=(u,h); bot rt z2=(w-u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_backslash_Big:
+bskchar "\Big slash";
+beginchar(chars.math_backslash_Big,13u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=1.1rule_thickness;
+top lft z1=(u,h); bot rt z2=(w-u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_backslash_bigg:
+bskchar "\bigg slash";
+beginchar(chars.math_backslash_bigg,17u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=1.25rule_thickness;
+top lft z1=(u,h); bot rt z2=(w-u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_backslash_Bigg:
+bskchar "\Bigg slash";
+beginchar(chars.math_backslash_Bigg,21u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+numeric breadth; breadth:=1.5rule_thickness;
+top lft z1=(u,h); bot rt z2=(w-u,-d);
+pickup tiny.nib;
+pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_bracket_left_big:
+bskchar "\big left bracket";
+beginchar(chars.math_bracket_left_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=hair;
+pos1(breadth,90); pos4(breadth,270);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_left_Big:
+bskchar "\Big left bracket";
+beginchar(chars.math_bracket_left_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.25[hair,stem];
+pos1(breadth,90); pos4(breadth,270);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_left_bigg:
+bskchar "\bigg left bracket";
+beginchar(chars.math_bracket_left_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.5[hair,stem];
+pos1(breadth,90); pos4(breadth,270);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_left_Bigg:
+bskchar "\Bigg left bracket";
+beginchar(chars.math_bracket_left_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.75[hair,stem];
+pos1(breadth,90); pos4(breadth,270);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_left_top:
+bskchar "Extensible left bracket---top";
+beginchar(chars.math_bracket_left_top,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=stem;
+pos1(breadth,90);
+lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_bracket_left_bot:
+bskchar "Extensible left bracket---bottom";
+beginchar(chars.math_bracket_left_bot,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=.75[hair,stem];
+pos3(breadth,270);
+lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
+top y1r=h; bot y2r=bot y3r=-d;
+rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_bracket_left_mid:
+bskchar "Extensible left bracket---mid";
+beginchar(chars.math_bracket_left_mid,7.5u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rt stem,0); pos2(rt stem,0);
+lft x1l=lft x2l=1.75u;
+top y1=h; bot y2=-d;
+filldraw z1r---z2r..z2l---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_bracket_right_big:
+bskchar "\big right bracket";
+beginchar(chars.math_bracket_right_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth=hair;
+pos1(breadth,90); pos4(breadth,270);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_right_Big:
+bskchar "\Big right bracket";
+beginchar(chars.math_bracket_right_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth=.25[hair,stem];
+pos1(breadth,90); pos4(breadth,270);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_right_bigg:
+bskchar "\bigg right bracket";
+beginchar(chars.math_bracket_right_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth=.5[hair,stem];
+pos1(breadth,90); pos4(breadth,270);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_right_Bigg:
+bskchar "\Bigg right bracket";
+beginchar(chars.math_bracket_right_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth=.75[hair,stem];
+pos1(breadth,90); pos4(breadth,270);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_bracket_right_top:
+bskchar "Extensible right bracket---top";
+beginchar(chars.math_bracket_right_top,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=stem;
+pos1(breadth,90);
+rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
+top y2r=top y1r=h; bot y3r=-d;
+lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
+filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_bracket_right_bot:
+bskchar "Extensible right bracket---bottom";
+beginchar(chars.math_bracket_right_bot,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric breadth; breadth:=stem;
+pos3(breadth,270);
+rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
+top y1r=h; bot y2r=bot y3r=-d;
+lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
+filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_bracket_right_mid:
+bskchar "Extensible right bracket---mid";
+beginchar(chars.math_bracket_right_mid,7.5u#,0,dh#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rt stem,0); pos2(rt stem,0);
+rt x1r=rt x2r=w-1.75u;
+top y1=h; bot y2=-d;
+filldraw z1r---z2r..z2l---z1l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.text_greek_mu:
+bskchar "Micro sign (text Greek letter mu)";
+beginchar(chars.text_greek_mu,11u#,x_height#,desc_depth#); uni "0x00B5";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos2'(stem,0);
+pos3(stem,0); pos4(hair,90); pos5(stem,70);
+pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(stem,180);
+pos10(stem,0); pos11(stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
+lft x1l=lft x2l=1.5u; top y1=h; y2=0; y2'=bar_height; x2'=x1;
+x3l=x2; y3=-d+1.5curve; bot y4l=-d; x4-x3r=y3-y4; y5l=y4; x5-x4=stem;
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+rt x10r=w-2u; y6=y8=bar_height; bot y7l=-o; x7=.5w;
+x6=x2; top y9=h; x9=x10;
+z8r=z10l; x11=x10; y11=curve; rt x13=w-.5u; bot y12l=bot bot y13l=-o; x12=.5[x13,x10];
+bskpoints(9,10,hair,hair);
+p0=z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b..z2'l
+ ---z2l..z3l..{right}z4l..z5l..z5r..z4r{left}..z3r..z2r---z1r;
+p1=z12l{right}..z13l..z13r..{left}z12r..z11r---z9l..{down}z9rr---z10l..z7r..{up}z6r;
+p2=z6l{down}..z7l..{up}z8l;
+p3=z10l{down}..z11l..{right}z12l;
+z14=bsktouch(subpath(5,infinity) of p0,right,p2,left);
+tim0-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z14--(0,y14)));
+tim1=xpart(p2 intersectiontimes (z14--(x7,y14)));
+z0=bsktouch(p2,right,p3,left);
+tim2=xpart(p2 intersectiontimes (z0--(.5w,y0)));
+tim3=xpart(p3 intersectiontimes (z0--(w,y0)));
+(tim4,tim5-5)=p1 intersectiontimes subpath(5,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p3,tim3),infinity) of p3
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+penlabels(1,2,2',3,4,5,6,7,8,9,10,11,12,13); labels(0,9rr);
+endchar;
+
+iff known chars.math_Re:
+bskchar "The real part sign";
+beginchar(chars.math_Re,13.5u#,cap_height#,0); uni "0x211C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_hair,90); pos2(cap_hair,90); pos3(cap_hair,120);
+pos4(cap_hair,-90); pos5(cap_hair,-90);
+pos7(cap_stem,0); pos8(cap_stem,0);
+pos9(cap_hair,90); pos10(cap_hair,180);
+pos11(cap_hair,180); pos12(cap_hair,135); pos12'(.5[cap_hair,stem],135);
+pos13(cap_hair,-90); pos14(cap_hair,180);
+pos15(cap_stem,0); pos16(cap_stem,0);
+pos17(cap_hair,90); pos18(hair,150);
+y1=y2+o=.5[x_height,bar_height];
+x1=5u; x3l=w-2.25u; y3=y1+stem;
+top y4l=h; x4=2/3[x1,x2]; x5=x1-o; z5=z4+whatever*dir(210);
+z2=z3+whatever*dir30;
+x7r=x8r=x1; y8=y5; y7=.5bar_height;
+top y9r=h+o; x9=.5[x8,u]; x11=.5[x10,x9]; z11=whatever[z4,z5];
+lft x10l=u; y10=y8; x12=x11+o; y12=y1;
+bot y13r=-o; x13=.5[x12,x9]; lft x14r=u; y14=cap_curve;
+x15+o=x16=x2; y15=y2l; y16=.75y7; rt x18l=w-u; y18=.75y7; bot y17l=-o; z17=z18+whatever*dir(45);
+lft x12'r=u; z12'l=z12l+whatever*dir(225); z12''=z12'+.2stem*dir(90);
+p0=z1l--z2l---z3l..z4l---z5l;
+pos6(cap_stem,angle(direction 2.5 of p0)+90);
+z6l=point 2.5 of p0;
+p1=z7r---z8r..z9r---z10r&z10r..z11r..{dir225}z12r..z12''..z12'r..z12'l..z12l{dir45}..z11l
+ ..z10l+o*unitvector(z11l-z10l)..z10l+o*unitvector(z9l-z10l)---z9l..z8l---z7l..{left}z13l
+ --z14l--z14r--z13r{right}..{up}z7r;
+p2=z16l{z16-z15}..{right}z17l..{dir70}z18l--z18r{dir-110}..z17r{left}..z16r---(x15r,h);
+p3=z5r---z4r..z6r..z3r---z2r--z1r;
+(tim0,tim1)=p2 intersectiontimes p0;
+(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1;
+filldraw z7r---obl(1l,7r,15l)---obl(15l,1l,16l)
+ ---subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p0,tim1),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),infinity) of p1..cycle;
+infill subpath(rundy(p3,0),rundy(p3,length p3).zpet) of p3
+ ..subpath(rundy(z1r--z5r,0),rundy(z1r--z5r,1).zpet) of (z1r--z5r)
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12',13,14,15,16,17,18); labels(12'');
+endchar;
+
+iff known chars.math_Im:
+bskchar "The imaginary part sign";
+beginchar(chars.math_Im,11u#,cap_height#,0); uni "0x2111";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_hair,-30); pos2(cap_hair,240); pos2'(.5[cap_hair,cap_stem],-90);
+pos3(cap_curve,0); pos4(cap_stem,-30); pos5(cap_hair,-90);
+pos6(cap_curve,50); pos7(cap_hair,90); pos8(cap_hair,90);
+pos9(cap_hair,135); pos10(.5[cap_hair,cap_stem],240);
+lft x1l=u; .5[x2,x3]=.5w; rt x3r=w-2u; bot y2'r=-o; x2'=.5w;
+y1=.25bar_height; y2r=.25bar_height; y3=.35x_height; y4l=bot y5r=x_height;
+x4r=.65w; x5l=w-1.5u; x6=x4l-.5stem; top y7r=h+o; y6r=y7-stem;
+z8=z5+sqrt2*cap_curve*dir85; x7=x2+.5stem; lft x9l=1.25u; y9r=y6r;
+y10l=.5[y6l,y5l]; x10=.35[x7,x9]; z10'=z10+.2stem*up+.2(stem-currentbreadth)*left;
+filldraw z1l{dir60}..z2l..z2'l..z3l..z4l..{dir-20}z5l..z5r{dir160}
+ ..z4r..{down}z3r..z2'r..z2r..{dir240}z1r..cycle;
+filldraw z10r..z9r..z7r..z6r..{dir40}z8r..z8l{dir220}..z6l
+ ..z7l..z9l..z10'..z10l&z10l..{left}cycle;
+penlabels(1,2,2',3,4,5,6,7,8,9,10); labels(10');
+endchar;
+
+iff known chars.math_aleph:
+bskchar "The Hebrew letter aleph";
+beginchar(chars.math_aleph,12u#,asc_height#,0); uni "0x2135";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta, tim[]; path p[]; oblu:=2.2oblu;
+pos1(cap_curve,50); pos2(cap_curve,50);
+top y1r=h+apex_o; bot y2l=0;
+lft x1l=u; rt x2r=w-u;
+theta=angle(z1-z2)-90;
+pos3(cap_stem,theta); pos4(cap_stem,theta);
+pos5(curve,50); pos6(curve,50); pos7(cap_stem,theta);
+pos8(cap_curve,30); pos9(hair,-90); pos10(cap_stem,-10); pos11(cap_hair,theta-90);
+pos12(stem-o,-90); pos13(cap_hair,theta-90); pos14(.85cap_stem,theta-90);
+.5[x3,x4]=x4-x3=.5w; z3=whatever[z1,z2]+stem*down; z4=whatever[z1,z2]+stem*up;
+top y5r=h; rt x6r=w-u; z5=z6+whatever*dir(theta+90); bot y6l=x_height;
+z7=.5[z5,z6];
+y8=.25bar_height; lft x9l=2u; bot y9r=0; x8l=x3r; lft x12l=u; bot y12r=y9r;
+lft x10l=u; z10=whatever[z7l,(.5w,x_height)];
+z11=.5[.5[z7l,z10],z3];
+z12'=z12+.2stem*right+.2(stem-currentbreadth)*dir45;
+.75[z11,z13]=.5[z3,z4]; z14=z7;
+p0=z1r{left}..z1l..z3l---z4l..{down}z2l..{up}z2r..z4r---z3r..{up}z1r;
+p1=z5r{left}..z5l..z7l..{down}z6l..{up}z6r..z7r..{up}z5r;
+p2=z11l{z10-z11}..{down}z10l..z8l..{left}z9l..z12'{up}..z12l
+ ..z12r..{right}z9r..z8r..{up}z10r..{z11-z10}z11r;
+p3=reverse (z13l{dir theta}..{dir theta}z14l--z14r{dir (theta+180)}..{dir (theta+180)}z13r);
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p2;
+(tim4,tim5)=p0 intersectiontimes p3;
+(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p3;
+(tim8,tim9)=p3 intersectiontimes p1;
+(tim10-2,tim11)=subpath(2,infinity) of p3 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p3,tim5),rundy(p3,tim8).zpet) of p3
+ ..subpath(rundy(p1,tim9),infinity) of p1
+ ..subpath(0,rundy(p1,(tim11,1.5hair)).zpet) of p1
+ ..subpath(rundy(p3,(tim10,1.5hair)),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.sign_dolar:
+bskchar "The dollar sign";
+beginchar(chars.sign_dolar,9u#, asc_height#, 0); uni "0x0024";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h; %FIXME oblu
+path p[]; numeric tim[];
+pos2(hair,90); pos3(.9curve,angle((w-u,h))+180); pos4(hair,90);
+pos5(stem,180); pos6(stem,180); pos8(hair,0); pos9(hair,0);
+y5=.5[y2l,y3]+.5hair; x3-x5=.8(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h-hair; bot y4l=hair;
+y3=.5[y2l,y4r]+.5hair;
+x8=x9=x3; top y8=h+o; bot y9=-o;
+bskpoints(8,9,.5hair,.5hair);
+pos1(hair,0); x1r=w-x5r; y1=y5-.5hair;
+pos7(hair,0); x7l=w-x6l; y7=y6+.5hair;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+p2=(x8l,y3)--(x8l,y6); p9=p2 shifted (z8r-z8l);
+p3=(x9l,y6)--z9l; p10=p3 shifted (z8r-z8l);
+p4=z9r--(x9r,y6);
+p5=(x9r,y6)--(x9r,y5); p7=p5 shifted (z8l-z8r);
+p6=(x8r,y5)--z8r; p8=p6 shifted (z8l-z8r);
+tim1=xpart(p0 intersectiontimes ((.5w,y2-.5hair)--(w,y2-.5hair)));
+tim2=xpart(p1 intersectiontimes ((.5w,y4+hair)--(0,y4+hair)));
+tim3=xpart(p0 intersectiontimes ((x8r,y3)--z8r));
+tim4=xpart(p0 intersectiontimes ((x8l,y3)--z8l));
+(tim5,tim6)=p0 intersectiontimes p2;
+(tim7,tim8)=p0 intersectiontimes p3;
+tim9=xpart(p1 intersectiontimes p3);
+tim10=xpart(p1 intersectiontimes p4);
+(tim11,tim12)=p1 intersectiontimes p5;
+(tim13,tim14)=p1 intersectiontimes p6;
+(tim15,tim16)=p1 intersectiontimes p8;
+(tim17,tim18)=p1 intersectiontimes p7;
+(tim19,tim20)=p0 intersectiontimes p10;
+(tim21,tim22)=p0 intersectiontimes p9;
+filldraw z1r--(x1r-.5o,y2-.5hair){dir-100}..subpath(tim1,rundy(p0,tim3).zpet) of p0
+ ..{up}z8rr..z8l---(x8l,y8rr)..
+ subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p2,(tim6,curve)), infinity) of p2--
+ subpath(0,rundy(p3,(tim8,curve)).zpet) of p3
+ ..subpath(rundy(p0,(tim7,curve)),infinity) of p0 ..z7l--(x7l+o,y4+hair){dir80}..
+ subpath(tim2, rundy(p1,tim3).zpet) of p1..{down}z9ll..z9r---(x9r,y9ll)..
+ subpath(rundy(p1,tim10),rundy(p1,tim11).zpet) of p1..
+ subpath(rundy(p5,(tim12,curve)),infinity) of p5..
+ subpath(0,rundy(p6,(tim14,curve)).zpet) of p6
+ ..subpath(rundy(p1,(tim13,curve)),infinity) of p1..cycle;
+oblu:=curve;%2.5f_obl; FIXME
+infill subpath(rundy(p1,tim15).zpet,rundy(p1,tim17)) of p1..
+ subpath(rundy(p7,tim18),infinity) of p7
+ --subpath(0,rundy(p8,tim16).zpet) of p8..cycle;
+if bold_face: oblu:=f_obl; fi
+infill subpath(rundy(p0,tim19).zpet,rundy(p0,tim21)) of p0..
+ subpath(rundy(p9,tim20),infinity) of p9
+ --subpath(0,rundy(p10,tim22)) of p10..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(8rr,9ll);
+endchar;
+
+iff known chars.sign_pound:
+bskchar "Pound sign";
+beginchar(chars.sign_pound,11.5u#,asc_height#,0); uni "0x00A3";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90);
+pos4(cap_hair,-90); pos5(stem,30);
+pos6(bar,90); pos7(bar,90); pos8(bar,90); pos9(bar,90);
+x1=x2=3u; y2=.5bar_height; .5[y1,y2]=.5h;
+bot y4r=0; x4=.5u; x5r=w-1.5u;
+top y3l=h+o; y5r=y3-1.5like_stem; x3=.5[x1,x5];
+z5'=z5+.25stem*unitvector(z5-z3);
+y6=y7=y8=y9=2/3[bar_height,x_height];
+x1-x6=.5(x9-x1); x7=x1l; x8=x1r; lft x6=if monospace: 0 else: .5u fi;
+bot y10r=0; rt x10r=w-u; z11r=(x2r,y4r);
+bskpoints(6,9,bar,bar);
+{{ save beak; numeric beak; beak=.5bar_height;
+ filldraw arm_bot_r_points(11r,10)..z2r---obl(8l,2r,9l)
+ ---z9ll..z9r---obl(8r,9r,1r)---z1r ..{right}z3r
+ ..z5l..z5'..z5r{up}..z3l{left}..z1l
+ ---obl(7r,1l,6r)---z6rr..z6l---obl(7l,6l,2l)
+ ---z2l..{left}z4l..z4r---cycle;
+}};
+penlabels(1,2,3,4,5,6,7,8,9); labels(5',6rr,9ll);
+endchar;
+
+iff known chars.sign_lira:
+bskchar "Lira sign";
+beginchar(chars.sign_lira,11.5u#,asc_height#,0); uni "0x20A4";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90);
+pos4(cap_hair,-90); pos5(stem,30);
+pos6(bar,90); pos7(bar,90); pos8(bar,90); pos9(bar,90);
+pos12(bar,90); pos13(bar,90); pos14(bar,90); pos15(bar,90);
+x1=x2=3u; y2=.5bar_height; .5[y1,y2]=.5h;
+bot y4r=0; x4=.5u; x5r=w-1.5u;
+top y3l=h+o; y5r=y3-1.5like_stem; x3=.5[x1,x5];
+z5'=z5+.25stem*unitvector(z5-z3);
+y6=y7=y8=y9; y12=y13=y14=y15; y6l-y12r=max(4hair,.3x_height); top y9r=x_height;
+x1-x6=.5(x9-x1); x7=x13=x1l; x8=x14=x1r; lft x6=lft x12=if monospace: 0 else: .5u fi; x15=x9;
+bot y10r=0; rt x10r=w-u; z11r=(x2r,y4r);
+bskpoints(6,9,bar,bar); bskpoints(12,15,bar,bar);
+{{ save beak; numeric beak; beak=.5bar_height;
+ filldraw arm_bot_r_points(11r,10)..z2r---obl(14l,2r,15l)---z15ll..z15r---obl(14r,15r,8l)---obl(8l,2r,9l)
+ ---z9ll..z9r---obl(8r,9r,1r)---z1r ..{right}z3r
+ ..z5l..z5'..z5r{up}..z3l{left}..z1l
+ ---obl(7r,1l,6r)---z6rr..z6l---obl(7l,6l,2l)
+ ---obl(13r,7l,12r)---z12r..z12l---obl(13l,12l,2l)
+ ---z2l..{left}z4l..z4r---cycle;
+}};
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(5',6rr,12rr,9ll,15ll);
+endchar;
+
+iff known chars.sign_compound_word:
+bskchar "Compound word mark";
+beginchar(chars.sign_compound_word,0,x_height#,0); uni "non";
+charwd:=0;
+endchar;
+
+iff known chars.sign_compound_word_capital:
+bskchar "Capital compound word mark";
+beginchar(chars.sign_compound_word_capital,0,cap_height#,0); uni "non";
+charwd:=0;
+endchar;
+
+iff known chars.sign_compound_word_asc:
+bskchar "Ascender height compound word mark";
+beginchar(chars.sign_compound_word_asc,0,asc_height#,0); uni "non";
+charwd:=0;
+endchar;
+
+iff known chars.sign_degree:
+bskchar "Degree sign";
+beginchar(chars.sign_degree,6u#,asc_height#,0); uni "0x00B0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1a(hair,0); pos1b(hair,90);
+pos1c(hair,180); pos1d(hair,270);
+z0=(.5w,h-2u)=.5[z1a,z1c]=.5[z1b,z1d];
+x1b=x1d; y1a=y1c; y1d-y1b=(x1c-x1a); x1a.l=x1; lft x1=u;
+filldraw z1a.l{down}..z1b.l..z1c.l..z1d.l..cycle;
+infill z1a.r{down}..z1b.r..z1c.r..z1d.r..cycle;
+penlabels(1a,1b,1c,1d); labels(0);
+endchar;
+
+iff known chars.sign_space:
+bskchar "Space";
+beginchar(chars.sign_space,5u#,x_height#,0); uni "0x0020";
+endchar;
+
+iff known chars.sign_space_nb:
+bskchar "Non-breaking space";
+beginchar(chars.sign_space_nb,5u#,x_height#,0); uni "0x00A0";
+endchar;
+
+iff known chars.sign_reference:
+bskchar "Reference mark sign";
+beginchar(chars.sign_reference,13u#,cap_height#,0); uni "0x203B";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+z0=.5[z1,z2];
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+for i=0 upto 3: z[10+i]=z0+(.25w,0) rotated (i*90); endfor;
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+dot(10); dot(11); dot(12); dot(13);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+charscription(14u,cap_height,0)(
+path p[];
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_hair,0); pos6(cap_hair,180);
+pos5'(cap_hair,0); pos6'(cap_hair,180);
+lft x1l=u; x3l=w-x1l; y1=y3=x_height;
+.5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+.5[x5,x6]=x2; y5=y6=.5bar_height; x6-x5=.4(x3r-x1r);
+z5'-z5=z6'-z6=o*down;
+x7r=x6r; x7l=x5r; bot y7l=bot y7r=0;
+bot y8r=bot y9r=0; rt x8l=w-u; lft x9l=u;
+{{ numeric oldbeak; oldbeak:=beak; save beak; numeric beak; beak:=.65oldbeak;
+p0=arm_bot_r_points(7r,8).alt; z10=(x6l,y8d);
+p1=arm_bot_l_points(7l,9).alt; z11=(x5l,y9d);
+}};
+p2:=z5'l..z1l..z4l..z3l..z6'l;
+filldraw subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2
+ ..{down}z10+oblu*up--obl(10,6l,8d)---z8d...z8c..z8l.o
+ &z8l.o{up}..z8l---z8r--z8b...z8a---z7r--z6r..z3r..z4r
+ ..z1r..z5r--z7l---z9a...z9b--z9r---z9l..{down}z9l.o
+ &z9l.o..z9c...z9d---obl(11,9d,5l)--z11+oblu*up{up}
+ ..cycle;
+penlabels(1,2,3,4,5,5',6,6',7,10,11);
+);
+
+iff known chars.sign_Ohm:
+bskchar "Ohm sign (modified greek letter Omega)";
+beginchar(chars.sign_Ohm,14u#,cap_height#,0); uni "0x2126";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.sign_Mho:
+bskchar "Mho sign (rotated Ohm sign)";
+beginchar(chars.sign_Mho,14u#,cap_height#,0); uni "0x2127";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar rotatedaround((.5[x1,x3],.5h),180);
+endchar;
+
+iff known chars.sign_info:
+bskchar "Info sign";
+beginchar(chars.sign_info,8u#,asc_height#,0); uni "0x2139";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(3u,0); pos2(3u,0);
+x1=x2=rt x3=.5w; bot y1=0; y2=x_height;
+top y3+1.5u=h;
+serif_bot(1); drop_serif(2)(1.5u).alt;
+filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a
+ ---obl(2b,2a,1a)---z1a..z1b{left}..{right}z1c
+ ..z1+ser_boule*up.. z1d{right}..{left}z1e..{up}z1f--cycle;
+filldraw fullcircle scaled 3u shifted z3;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.sign_currency:
+bskchar "Currency sign";
+beginchar(chars.sign_currency,10u#,x_height#,0); uni "0x00A4";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+.5[x2,x6]=.5w; x2-x6=y8-y4; y2=y0=.5h; top y8=h; x0=x8;
+circle_points(hair);
+p0:=draw_circle.l;
+forsuffixes i=1,3,5,7:
+ z[i+10]=z.i; pos[i+10](hair,angle(z[i]-z0)+90);
+ z[i+11]=z.i+3hair*unitvector(z[i]-z0); pos[i+11](hair,angle(z[i]-z0)+90);
+ p[i]=z[i+10].r--z[i+11].r;
+ p[i+1]=z[i+11].l--z[i+10].l;
+endfor;
+filldraw forsuffixes i=1,3,5,7:
+ subpath(i-1,rundy(p0,i).zpet) of p0..subpath(rundy(p[i],0),infinity) of p[i]
+ ..subpath(0,rundy(p[i+1],1).zpet) of p[i+1] .. subpath(rundy(p0,i),i+1) of p0..
+ endfor
+ cycle;
+infill draw_circle.r;
+penlabels(0,11,12,13,14,15,16,17,18);
+endchar;
+
+iff known chars.sign_diameter:
+bskchar "Diameter sign";
+beginchar(chars.sign_diameter,14u#,asc_height#,0); uni "0x2300";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,0); pos2(hair,90); pos3(hair,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x2,x4]=.5[x1,x3]; x2-x4=0; y4-y2=x3-x1; .5[y4,y2]=.5h;
+top z5=(x1,-apex_o); bot z6=(x3,h+o);
+pos5(hair,angle(z5-z6)+90); pos6(hair,angle(z5-z6)+90);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+p2:=z5r--z0r--z6r;
+p3:=z6l--z0l--z5l;
+(tim0,tim1-.5)=p0 intersectiontimes subpath(.5,infinity) of p2;
+(tim2,tim3)=(subpath (0,1) of p3) intersectiontimes p0;
+(tim4-1,tim5)=(subpath (1,infinity) of p3) intersectiontimes p0;
+(tim6,tim7)=p2 intersectiontimes p0;
+filldraw subpath (rundy(p0,tim7),rundy(p0,tim0).zpet) of p0..subpath(rundy(p2,tim1),infinity) of p2{z6-z5}
+ ..subpath(0,rundy(p3,tim2).zpet) of p3..subpath(rundy(p0,tim3),infinity) of p0
+ ..subpath(0,rundy(p0,tim5).zpet) of p0..subpath(rundy(p3,tim4),infinity) of p3
+ ..subpath(0,rundy(p2,tim6).zpet) of p2..cycle;
+numeric tim[];
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p1 intersectiontimes subpath(0,1) of p2;
+infill subpath(rundy(p2,tim4),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+(tim5,tim6)=p1 intersectiontimes p3;
+(tim7,tim8-1)=p1 intersectiontimes subpath(1,infinity) of p3;
+infill subpath(rundy(p3,tim6),rundy(p3,tim8).zpet) of p3..subpath(rundy(p1,tim7),infinity) of p1
+ ..subpath(0,rundy(p1,tim5).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_slash_asterisk:
+bskchar "Slash and asterisk";
+beginchar(chars.sign_slash_asterisk,10u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+ast=3/4stem; vast=.55stem;
+pos1(ast,0); x1=x0=w-3.25u;
+size=1/4h; if (size+.5ast)*cosd(30) > (lft w)-u-x0:
+ size:= (lft w-u-x0)/cosd(30)-.5ast; fi;
+y1=y0+size; y0=size;
+top rt z2=(w-2u,h); bot lft z3=(u,-d);
+pos2(rule_thickness,angle(z3-z2)+90); pos3(rule_thickness,angle(z3-z2)+90);
+p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+filldraw bskrule(3,2,rule_thickness,rule_thickness);
+labels(0); penlabels(1,2,3);
+endchar;
+
+iff known chars.sign_divorce:
+bskchar "Divorce symbol";
+beginchar(chars.sign_divorce,15u#,x_height#,0); uni "0x26AE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size; size=min(5u,h);
+pos3(stem,0); pos4(2/3stem,0); pos5(stem,0);
+y1=y2=.5h; x1=u+.5size; x1=w-x2;
+x3=x4=x5; z4=.5[z1,z2]; y3=h; y5=-d;
+filldraw z3r..z4r..z5r--z5l..z4l..z3l--cycle;
+filldraw fullcircle scaled (size) shifted z1;
+infill fullcircle scaled (size-hair+currentbreadth) shifted z1;
+filldraw fullcircle scaled (size) shifted z2;
+infill fullcircle scaled (size-hair+currentbreadth) shifted z2;
+labels(1,2); penlabels(3,4,5);
+endchar;
+
+iff known chars.sign_marriage:
+bskchar "Marriage symbol";
+beginchar(chars.sign_marriage,10u#,x_height#,0); uni "0x26AD";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, tim[]; size=min(5u,h);
+path p[];
+pos1(hair,0); pos11(hair,0);
+x0=u+.5size; x10=w-x0; y0=y10=.5h=y1=y11; x11-x10=x1-x0=.5size;
+forsuffixes i=2,3,4,5,6,7,8:
+ z[i]=z0+(z1-z0) rotated (45*(i-1)); pos[i](hair,45*(i-1)); endfor
+forsuffixes i=12,13,14,15,16,17,18:
+ z[i]=z10+(z11-z10) rotated (45*(i-11)); pos[i](hair,45*(i-11)); endfor
+p1=z1r{up}..z2r..z3r{left}..z4r..z5r{down}..z6r..z7r{right}..z8r..{up}z1r;
+p2=z15r{down}..z16r..z17r{right}..z18r..{up}z11r..z12r..{left}z13r..z14r..{down}z15r;
+p3=z1l{up}..z2l..z3l{left}..z4l..z5l{down}..z6l..z7l{right}..z8l..{up}z1l;
+p4=z15l{down}..z16l..z17l{right}..z18l..{up}z11l..z12l..{left}z13l..z14l..{down}z15l;
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3-2,tim4)=subpath(2,infinity) of p1 intersectiontimes p2;
+(tim5,tim6)=p3 intersectiontimes p2;
+(tim7-2,tim8)=subpath(2,infinity) of p3 intersectiontimes p2;
+(tim9,tim10)=p4 intersectiontimes p1;
+(tim11-2,tim12)=subpath(2,infinity) of p4 intersectiontimes p1;
+(tim13,tim14)=p3 intersectiontimes p4;
+(tim15-2,tim16)=subpath(2,infinity) of p3 intersectiontimes p4;
+filldraw subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p2,tim4),rundy(p2,tim2).zpet) of p2..cycle;
+infill subpath(0,rundy(p2,tim8).zpet) of p2
+ ..reverse subpath (rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..cycle;
+infill subpath(0,rundy(p1,tim12).zpet) of p1
+ ..reverse subpath(rundy(p4,tim9),rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p1,tim10),infinity) of p1..cycle;
+infill subpath(0,rundy(p3,tim13).zpet) of p3
+ ..subpath(rundy(p4,tim14),infinity) of p4
+ ..subpath(0,rundy(p4,tim16).zpet) of p4
+ ..subpath(rundy(p3,tim15),infinity) of p3..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18);
+endchar;
+
+iff known chars.sign_estimated:
+bskchar "Estimated sign";
+beginchar(chars.sign_estimated,13u#,cap_height#,0); uni "0x212E";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], shift, est_height;
+oblu:=2.5f_obl; est_height:=.5[bar_height,x_height];
+penpos1(cap_curve,0); pos2(hair,90); pos3(hair,270); penpos4(cap_curve,180);
+lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1;
+p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,est_height)--(w,est_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,est_height)--(w,est_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi;
+tim3=xpart(p0 intersectiontimes ((w,est_height)--(x3,est_height)));
+tim4=xpart(p1 intersectiontimes ((0,est_height)--(x3,est_height)));
+tim5=xpart(p1 intersectiontimes ((0,est_height)--(x3,est_height)));
+tim6=xpart(p1 intersectiontimes ((w,est_height+bar-tiny)--(x3,est_height+bar-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,est_height+bar-tiny)--(x3,est_height+bar-tiny)));
+p2=point tim3 of p0 -- point tim4 of p1;
+p3=point tim7 of p1 -- point tim6 of p1;
+filldraw subpath(0,rundy(p0,(tim3,hair)).zpet) of p0--(subpath(0,rundy(p2,1).zpet) of p2)..
+ subpath(rundy(p1,(tim5,if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1
+ {z0-z0'-o*down}..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+penlabels(1,2,3,4); labels(0,0');
+endchar;
+
+iff known chars.special_two:
+bskchar "Special two";
+beginchar(chars.special_two,12u#,cap_height#,.5desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_hair,135); pos6(cap_hair,180);
+pos5'(cap_hair,135); pos6'(cap_hair,180);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=x_height;
+.5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+x5=x2; y6=.35bar_height; y5=.75x_height; x6=.25[x4,x1r];
+z6'-z6=o*down; z5'-z5=o*dir45;
+pos7(whatever,0);
+z7=(x2,0); x7r=x6l;
+bot y8r=0; rt x8l=w-u;
+{{ numeric oldbeak; oldbeak:=beak; save beak; numeric beak; beak:=.65oldbeak;
+p0=arm_bot_r_points(7r,8); y8f:=.5[y8f,y8d];
+}};
+filldraw z5'l---z5l..z1l{up}..z4l..z3l..{z6-z3}z6'l..
+ ((z8f...z8d...z8c..z8l.o&z8l.o{up}..z8l---z8r--z8b..z8a---z7r)
+ rotatedaround(z7r,30) shifted ((x8r-x7r)*(1-cosd30),-d))
+ ..z6r{z3-z6}..z3r..z4r..z1r{down}..z5r---z5'r--cycle;
+penlabels(1,2,3,4,5,5',6,6',7);
+endchar;
+
+iff known chars.special_sum:
+bskchar "Special summation";
+beginchar(chars.special_sum,13u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p[];
+numeric alpha, top_stem; oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h;
+lft x1l=lft x2l-o=2u;
+cap_serifs_bl(1l); cap_serifs_tl(2l); cap_serifs_br(1r); cap_serifs_tr(2r);
+bot y3r=0; top y4r=h; rt x3r=w-u; x4r=w-2.5u;
+x5r=.5w; y5=.5[x_height,bar_height];
+alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r);
+pos5(alpha*cap_stem,0); pos7(alpha*cap_stem,180); y5=y7;
+alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r);
+pos6(alpha*cap_hair,0); z5r=z6r; pos8(alpha*cap_hair,180); y8=y6;
+p1:=arm_bot_r_points(1r,3).alt;
+p2:=arm_top_r_points(2r,4);
+y1'=y1l.b; z1'=z6l+whatever*(z3.f-z6r);
+z5'=whatever[z2l.b,z5l]=whatever[z6l,z1'];
+.5[x7,x5]=.5[x8,x6]=x2;
+z7'=whatever[z2r.b,z8l]=whatever[z7l,z1'];
+z2'=whatever[z2l.b,z5']=whatever[z7',z2r];
+filldraw subpath(0, length(p1)-1) of p1..z3f---obl(5r,3f,2r.b)---
+ z2r.b..(reverse subpath(0,length(p2)-1) of p2)---z2l.a..
+ {right}z2l.c..obl(2l.b,2l.c,7r)---obl(7r,2l.b,1l.b)--z1l.b
+ ..{left}z1l.c..z1l.a---cycle;
+infill obl(5',2l.b,1')---obl(1',5',7')---obl(7',1',2r.b)---obl(2',7',5')---cycle;
+pos9(cap_hair,0); pos10(cap_hair,0);
+y9=.5[y5,y2']; y10=.5[y5,y1'];
+z9=z2'+whatever*down; z10=z1'+whatever*up;
+filldraw bskrule(9,10,.5hair,.5hair); ;
+penlabels(1,2,5,6,7,8); labels(1',1'',2',5',7');
+endchar;
+
+iff known chars.special_alpha:
+bskchar "Special alpha";
+beginchar(chars.special_alpha,11u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,-90); pos1(stem,0); pos2(stem,0);
+pos3(hair,-90); pos4(curve,180); pos5(hair,90);
+pos6(hair,0); pos7(hair,90); pos8(stem,180);
+top y0l=h; x0=w-u;
+rt x1r=w-1.5u; x2=x1-stem; top y1=h-u; y2=.5bar_height;
+x3=.5x2; x5=.55x1; bot y3r=-o; top y5r=h+o;
+lft x4r=u; y4=y6=bar_height; x6=.25[x2,x5];
+x7=w-1.75u; bot y7l=-o; lft x8l=w-.5u; y8=.75curve;
+z8'=z8+.2stem*right+o*up; z8''=z8+.5(stem-currentbreadth)*dir225;
+p0=z0r{left}..z1r---z2r..z3r..z4r..z5r..z6r..{right}z7r..z8''..{up}z8r;
+p1=z8r{up}..z8'..z8l..z7l{left}..z6l..z5l..z4l..z3l..z2l---z1l..z0l;
+(tim0,tim1-5)=p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3)=p1 intersectiontimes p0;
+(tim4-5,tim5-6)=subpath(5,infinity) of p0 intersectiontimes subpath (6,infinity) of p1;
+(tim6,tim7-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,y6-y2)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,y6-y2)),infinity) of p1..cycle;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(8',8'');
+endchar;
+
+iff known chars.special_infinity:
+bskchar "Special infinity sign";
+beginchar(chars.special_infinity,16u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2oblu;
+testem=.5[curve, hair]; tlstem=.75[curve,stem];
+pos1(testem,90); pos2(tlstem,270); pos3(tlstem,270); pos4(testem,90);
+pos5(vair,180); pos6(vair,180);
+lft x6r=u; rt x5l=w-u;
+bot y3r=bot y1l=-o; top y4r=top y2l=h+o;
+x3=x4=.27(w-2u)+u; x1=x2=.76(w-2u)+u;
+y5=y6=.5h; z0=(.5w,.5h);
+pos7(hair,180); pos8(stem,180); z7=(.35[x4,x6],.9bar_height); y8=y3r; x8=x7;
+pos9(.5[hair,stem],180); y9=.75[x_height,bar_height]; x9r=x6l;
+pos10(hair,-90); z10=z9+stem*unitvector(dir-45);
+p0:=z6{down}..z3..z0..z2..{up}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{down}..z3r..z0r..z2r..z5r{down};
+p2=z10l..z9l{up}..z4l{right}..z0{dir-70}..{right}z1l;
+p3=z5l{up}..z2l..z0l..z3l..{up}z6l;
+p4=z1r{left}..z0{dir110}..{left}z4r..{down}z9r..z10r;
+p5=z6l{down}..z3l..z0l..z2l..z5l{down};
+
+z11=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z11--(x3,y11)));
+tim2=xpart(p2 intersectiontimes (z11--(x1,y11)));
+z12=bsktouch(p3,left,p4,right);
+tim3=xpart(p3 intersectiontimes (z12--(x2,y12)));
+tim4=xpart(p4 intersectiontimes (z12--(x3,y12)));
+(tim5,tim6)=p1 intersectiontimes p4;
+(tim9,tim10)=p2 intersectiontimes p3;
+
+tim7=xpart(p1 intersectiontimes (z7r--z8r));
+tim8=xpart(p3 intersectiontimes (z7l--z8l));
+p6=point tim8 of p3{direction tim8 of p3 rotated -90}..z7l&z7l..z7r&
+z7r..{direction tim7 of p1 rotated -90}point tim7 of p1;
+filldraw subpath(rundy(p6,(0,f_obl)),rundy(p6,(infinity,f_obl)).zpet) of p6
+ ..subpath(rundy(p1,tim7),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim4),infinity) of p4
+ ..subpath(0,rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p3,tim10),rundy(p3,(tim8,f_obl)).zpet) of p3
+ ..cycle
+ ;
+infill subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p4,tim6).zpet) of p4..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+iff known chars.sign_note:
+bskchar "Note symbol";
+beginchar(chars.sign_note,10u#,asc_height#,0); uni "0x266A";
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+pos3(hair,0); pos5(hair,0); pos6(hair,90); pos7(hair,45);
+path p[]; numeric tim[];
+rt x1=u; bot y2=-o; .5[y4,y2]=y1=y3; x2=x4=.5[x3r,x1]; y4-y2=2/3(x3-x1); x3r=w-4u;
+x3=x5+hair; top y5=h; z5r=z6r;
+rt x7=w-u; y7=.5[bar_height,x_height];
+p0:=z4{left}..z1{down}..z2{right}..{up}z3r..{left}z4;
+p1:=z5l{down}..{down}z3l;
+p2:=z3r{up}..{up}z6l;
+p3:=z6l{z3-z4}..{z3-z4}z7l..{z4-z3}z7r..{left}z6r;
+z0=bsktouch(p0,up,p1,left);
+tim0=xpart(p0 intersectiontimes (z0--(x0,y3)));
+tim1=xpart(p1 intersectiontimes (z0--(w,y0)));
+filldraw subpath(0,3) of p0..subpath(0,rundy(p2,infinity).zpet) of p2..subpath(rundy(p3,0),infinity) of p3..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+labels(1,2,4); penlabels(3,5,6,7);
+endchar;
+
+iff known chars.sign_angle_arc:
+bskchar "Angle arc symbol";
+beginchar(chars.sign_angle_arc,12u#,v_center(x_height#)); uni "0x2222";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta, tim[];
+pos1(rule_thickness,0);
+lft x1l=u; y1=math_axis;
+y2r=x_height;
+x2r=w-x1l; x2=x3; .5[y2r,y3r]=y1;
+theta:=angle(z2r-z1r);
+pos2(rule_thickness,theta-90); pos3(rule_thickness,theta+45);
+z1'=z1l+(rule_thickness-currentbreadth)*dir(theta-90);
+z1''=z1l+(rule_thickness-currentbreadth)*dir(theta+45);
+z1'''=whatever[z1',z2r]=whatever[z1'',z3r];
+y1l'=y1l+o; z1l'=whatever[z1l,z2l];
+bskpoints(1,2,hair,hair);
+pos4(rule_thickness,0); x4r=.8[x1,x2]; x6=x5; .5[y5,y6]=y4=y1;
+z5=(fullcircle scaled (2 abs(z4-z1)) shifted z1) intersectionpoint ((0,h)--(w,h));
+pos5(rule_thickness,angle(z5-z1)); pos6(rule_thickness,angle(z6-z1));
+p0:=z1l..z1l'---z2ll..{z1'''-z2r}z2r;
+oblu:=2oblu; p1:=z2r---obl(1''',2r,3r)---z3r; oblu:=f_obl;
+p2:=z3r{z3r-z1'''}..z3l---z1l;
+p3:=z5r..{down}z4r..z6r;
+p4:=z6l..{up}z4l..z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6-1,tim7)=subpath(1,infinity) of p1 intersectiontimes p3;
+(tim8,tim9)=p2 intersectiontimes p3;
+(tim10,tim11)=p2 intersectiontimes p4;
+(tim12,tim13)=subpath(0,1) of p1 intersectiontimes p4;
+(tim14-1,tim15)=subpath(1,infinity) of p1 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p1,tim6),infinity) of p1
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p3,tim9),infinity) of p3
+ ..subpath(0,rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p2,tim10),infinity) of p2..cycle;
+infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1
+ ..subpath(rundy(p4,tim15),rundy(p4,tim13).zpet) of p4 ..cycle;
+penlabels(1,2,3,4,5,6); labels(1',1'',1''',2ll,1l');
+endchar;
+
+iff known chars.sign_numero:
+bskchar "Numero sign";
+beginchar(chars.sign_numero,16u#,cap_height#,0); uni "0x2116";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib; oblu:=3oblu;
+numeric tim[]; path p[];
+pos1(cap_hair,0); pos2(cap_hair,0);
+pos3(cap_hair,0); pos4(cap_hair,0);
+penpos5(whatever,0); penpos6(whatever,90);
+pos0(hair,-90); pos0'(stem,250);
+pos10(hair,-90); pos11(.85curve,180); pos12(hair,90); pos13(.85curve,0);
+bot y1=.25bar_height; top y2=h;
+lft x1l=lft x2l=2.5u;
+bot y3=-apex_o; rt x3r=rt x4r=w-6u;
+z5r=z2l; z6l=z3l;
+cap_serifs_tl(2l);
+bot y0r=-o; x1-x0=y1-y0; x0'r=.5u; y0'-y0=.5(x1-x0);
+z0''=z0'+.5(stem-currentbreadth)*dir135;
+z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90);
+z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l);
+y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r];
+y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l];
+z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r));
+y10-y4=x10-x3; top y10l=h+o; x10=.5[x11,x13]; lft x13l=rt x4r+hair;
+.5[y10,y12]=y11=y13; y10-y12=(sqrt2)*(x11-x13);
+x11l=w-u; x12=x10;
+p0:=z0'l{up}..z0''..z0'r..z0r{right}..z1r---z2'..z5'
+ ---z6l..z3r---z4r..z10r{right}..{down}z11r..z12r..{up}z13r..{right}z10r;
+p1:=z10l{left}..z13l{down}..z12l..z11l{up}..{left}z10l..z4l
+ ---z4'..z6'---z8..z5---z2l.a..{right}z2l.c..z2l.b---z1l..{left}z0l..{up}z0'l;
+z14=bsktouch(subpath(0,1) of p1,left,subpath(8,infinity) of p0,right);
+tim0=xpart(p0 intersectiontimes (z14--(.5w,y14)));
+tim1=xpart(p1 intersectiontimes (z14--(x10,y14)));
+filldraw subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p0,tim0).zpet) of p0..cycle;
+infill z10r{right}..z11r{down}..z12r..{up}z13r..cycle;
+penlabels(0,0',1,2,3,4,5,6,10,11,12,13); labels(0'',2',4',5',6',7,8,9,14);
+endchar;
+
+iff known chars.sign_leaf:
+bskchar "Leaf";
+beginchar(chars.sign_leaf, 14u#,asc_height#,0); uni "0xEB42"; %Uni form LM
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta; theta:=20;
+lft bot z1r=(1.5u,-apex_o); top z2r=(w-u,h+apex_o); z0=.5[z1,z2];
+pos1(hair,angle(z2r-z1r)-90); pos2(hair,angle(z2r-z1r)-90);
+z3=(w-2.5u,bar_height); z4=z3 reflectedabout(z1,z2);
+p1:=z1{dir-theta}..z3..{up}z2; pos3(hair,angle(point 1 of p1)-90);
+p2:=z2{left}..z4..{dir(-90+theta)}z1; pos4(hair,angle(point 1 of p2)-90);
+p3:=z2l+(hair-currentbreadth)*down{left}..z4r..{dir(-90+theta)}z1l+(hair-currentbreadth)*right;
+p4:=z1r+(hair-currentbreadth)*up{dir-theta}..z3l..{up}z2r+(hair-currentbreadth)*left;
+z5=2/3[z2,z1]; z6=1/3[z2,z1];
+pos5(hair,angle(z2-z1)-90); pos6(hair,angle(z2-z1)-90);
+pos5'(hair,angle(z2-z1)-90); pos6'(hair,angle(z2-z1)-90);
+z5'=z5+(hair-currentbreadth)*unitvector(z0-z5);
+z6'=z6+(hair-currentbreadth)*unitvector(z0-z6);
+tim0=xpart(p3 intersectiontimes (z6--z6+5(z4-z0))); z7=point tim0 of p3;
+tim1=xpart(p4 intersectiontimes (z6--z6+5(z3-z0))); z8=point tim1 of p4;
+tim2=xpart(p3 intersectiontimes (z5--z5+5(z4-z0))); z9=point tim2 of p3;
+tim3=xpart(p4 intersectiontimes (z5--z5+5(z3-z0))); z10=point tim3 of p4;
+z7l=point rundy(p3,(tim0,hair-currentbreadth)) of p3;
+z8l=point rundy(p4,(tim1,hair-currentbreadth)).zpet of p4;
+z9l=point rundy(p3,(tim2,hair-currentbreadth)) of p3;
+z10l=point rundy(p4,(tim3,hair-currentbreadth)).zpet of p4;
+p5:=z1l---obl(5l,1l,9l)---z9l;
+p6:=z10l---obl(5r,10l,1r)--z1r;
+p7:=z7---obl(6l,7,2l)---z2l;
+p8:=z2r---obl(6r,2r,8)--z8;
+p9:=z7l---obl(6'l,7l,5'l)---obl(5'l,6'l,9)---z9;
+p10:=z8l---obl(6'r,8l,5'r)---obl(5'r,6'r,10)---z10;
+filldraw z1r{dir-theta}..z3r..{up}z2r..z2l{left}..z4l..{dir(-90+theta)}z1l..cycle;
+infill subpath(rundy(p3,(0,2oblu)),rundy(p3,tim0).zpet) of p3
+ ..subpath(rundy(p7,0),rundy(p7,(infinity,2oblu)).zpet) of p7..cycle;
+infill subpath(rundy(p4,tim1),rundy(p4,(infinity,2oblu)).zpet) of p4
+ ..subpath(rundy(p8,(0,2oblu)),rundy(p8,infinity).zpet) of p8..cycle;
+infill subpath(rundy(p3,(tim2,2oblu)),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p5,0),rundy(p5,infinity).zpet) of p5..cycle;
+infill subpath(rundy(p4,0),rundy(p4,(tim3,2oblu)).zpet) of p4
+ ..subpath(rundy(p6,0),rundy(p6,infinity).zpet) of p6..cycle;
+infill subpath(rundy(p9,0),rundy(p9,infinity).zpet) of p9
+ ..reverse subpath (rundy(p2,tim0),rundy(p2,tim2).zpet) of p2..cycle;
+infill subpath(rundy(p10,0),rundy(p10,infinity).zpet) of p10
+ ..subpath (rundy(p1,tim3),rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,5',6,6',7,8,9,10);
+endchar;
+
diff --git a/Master/texmf-dist/tex/latex/boisik/boisik.sty b/Master/texmf-dist/tex/latex/boisik/boisik.sty
new file mode 100644
index 00000000000..e0ab776f7f0
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/boisik.sty
@@ -0,0 +1,13 @@
+\ProvidesPackage{boisik}%
+[2008/08/11 bsk-v0.1]
+\renewcommand{\rmdefault}{bsk}
+\DeclareSymbolFont{operators} {IL2}{bskf} {m}{n}
+\DeclareSymbolFont{letters} {OML}{bskm} {m}{it}
+\DeclareSymbolFont{symbols} {OMS}{bsksy}{m}{n}
+\DeclareSymbolFont{largesymbols}{OMX}{bskex}{m}{n}
+
+\DeclareSymbolFontAlphabet{\mathrm} {operators}
+\DeclareSymbolFontAlphabet{\mathnormal}{letters}
+\DeclareMathAlphabet{\mathbf} {IL2}{bsk}{b}{n}
+
+\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/il2bsk.fd b/Master/texmf-dist/tex/latex/boisik/il2bsk.fd
new file mode 100644
index 00000000000..c654df0603f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/il2bsk.fd
@@ -0,0 +1,15 @@
+\ProvidesFile{il2bsk.fd}
+ [2008/08/11 v0.1 Boisik font]
+\DeclareFontFamily{IL2}{bsk}{}
+\DeclareFontShape{IL2}{bsk}{m}{n}{<-> bskr10}{}
+\DeclareFontShape{IL2}{bsk}{m}{sl}{<-> bskrsl10}{}
+\DeclareFontShape{IL2}{bsk}{m}{ol}{<-> bskrol10}{}
+\DeclareFontShape{IL2}{bsk}{l}{n}{<-> bskrl10}{}
+\DeclareFontShape{IL2}{bsk}{m}{sc}{<-> bsksc10}{}
+\DeclareFontShape{IL2}{bsk}{m}{it}{<-> bski10}{}
+\DeclareFontShape{IL2}{bsk}{m}{oi}{<-> bskiol10}{}
+\DeclareFontShape{IL2}{bsk}{m}{ui}{<-> bskiu10}{}
+\DeclareFontShape{IL2}{bsk}{bx}{n}{<-> bskrb10}{}
+\DeclareFontShape{IL2}{bsk}{b}{n}{<-> bskrsb10}{}
+\DeclareFontShape{IL2}{bsk}{bx}{it}{<-> bskib10}{}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/il2bskf.fd b/Master/texmf-dist/tex/latex/boisik/il2bskf.fd
new file mode 100644
index 00000000000..a1309a80a01
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/il2bskf.fd
@@ -0,0 +1,10 @@
+\ProvidesFile{il2bskf.fd}
+ [2008/08/11 v0.1 Boisik font]
+\DeclareFontFamily{IL2}{bskf}{}
+\DeclareFontShape{IL2}{bskf}{m}{n}{<-> bskrf10}{}
+\DeclareFontShape{IL2}{bskf}{m}{sl}{<-> bski10}{}
+\DeclareFontShape{IL2}{bskf}{m}{it}{<-> bski10}{}
+\DeclareFontShape{IL2}{bskf}{bx}{n}{<-> bskrb10}{}
+\DeclareFontShape{IL2}{bskf}{b}{n}{<-> bskrsb10}{}
+\DeclareFontShape{IL2}{bskf}{bx}{it}{<-> bskib10}{}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/omlbskm.fd b/Master/texmf-dist/tex/latex/boisik/omlbskm.fd
new file mode 100644
index 00000000000..162cfbecb55
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/omlbskm.fd
@@ -0,0 +1,8 @@
+\ProvidesFile{omlbskm.fd}
+ [2008/08/11]
+\DeclareFontFamily{OML}{bskm}{\skewchar\font127 }
+\DeclareFontShape{OML}{bskm}{m}{it}{<->bskmi10}{}
+\DeclareFontShape{OML}{bskm}{b}{it}{<->bskmib10}{}
+\DeclareFontShape{OML}{bskm}{m}{oi}{<->bskmiol10}{}
+\DeclareFontShape{OML}{bskm}{bx}{it}{<->ssub*bskm/b/it}{}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd b/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd
new file mode 100644
index 00000000000..eb913c70ebb
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd
@@ -0,0 +1,8 @@
+\ProvidesFile{omsbsksy.fd}
+ [2008/08/11]
+\DeclareFontFamily{OMS}{bsksy}{}
+\DeclareFontShape{OMS}{bsksy}{m}{n}{<->bsksy10}{}
+\DeclareFontShape{OMS}{bsksy}{m}{ol}{<->bsksyol10}{}
+\DeclareFontShape{OMS}{bsksy}{ub}{n}{<->bsksyh10}{}
+%\DeclareFontShape{OMS}{bsksy}{b}{n}{<->bsksyb10}{}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/omxbskex.fd b/Master/texmf-dist/tex/latex/boisik/omxbskex.fd
new file mode 100644
index 00000000000..562081311bb
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/omxbskex.fd
@@ -0,0 +1,6 @@
+\ProvidesFile{omxbskex.fd}
+ [2008/08/11]
+\DeclareFontFamily{OMX}{bskex}{}
+\DeclareFontShape{OMX}{bskex}{m}{n}{<->sfixed*bskex10}{}
+\DeclareFontShape{OMX}{bskex}{b}{n}{<->sfixed*bskexb10}{}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd b/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd
new file mode 100644
index 00000000000..5660cd1bd1f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd
@@ -0,0 +1,11 @@
+\ProvidesFile{ot1bsk.fd}
+ [2008/08/11 v0.1 Boisik font]
+\DeclareFontFamily{OT1}{bsk}{}
+\DeclareFontShape{OT1}{bsk}{m}{n}{<-> bskr10}{}
+\DeclareFontShape{OT1}{bsk}{m}{sl}{<-> bski10}{}
+\DeclareFontShape{OT1}{bsk}{m}{it}{<-> bski10}{}
+\DeclareFontShape{OT1}{bsk}{bx}{n}{<-> bskrb10}{}
+\DeclareFontShape{OT1}{bsk}{b}{n}{<-> bskrsb10}{}
+\DeclareFontShape{OT1}{bsk}{bx}{it}{<-> bskib10}{}
+\DeclareFontShape{OT1}{bsk}{bx}{sl}{<-> bskib10}{}
+\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd b/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd
new file mode 100644
index 00000000000..97402217fb8
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd
@@ -0,0 +1,11 @@
+\ProvidesFile{ot1bskf.fd}
+ [2008/08/11 v0.1 Boisik font]
+\DeclareFontFamily{OT1}{bskf}{}
+\DeclareFontShape{OT1}{bskf}{m}{n}{<-> bskrf10}{}
+\DeclareFontShape{OT1}{bskf}{m}{sl}{<-> bski10}{}
+\DeclareFontShape{OT1}{bskf}{m}{it}{<-> bski10}{}
+\DeclareFontShape{OT1}{bskf}{bx}{n}{<-> bskrb10}{}
+\DeclareFontShape{OT1}{bskf}{b}{n}{<-> bskrsb10}{}
+\DeclareFontShape{OT1}{bskf}{bx}{it}{<-> bskib10}{}
+\DeclareFontShape{OT1}{bskf}{bx}{sl}{<-> bskib10}{}
+\endinput
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 3b3fc88e639..dcb793fdc67 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -37,7 +37,7 @@ my @WorkingTLP = qw(
beamer beamer-contrib beamer-tut-pt begriff bera betababel beton
bez123 bezos bibhtml bibleref bibtopic bibtopicprefix
bibunits bidi bigfoot binomexp blacklettert1 blindtext
- blockdraw_mp blowup
+ blockdraw_mp blowup boisik
boites boldtensors bookest booklet booktabs bophook
boxhandler bpchem breakurl bullcntr bussproofs bytefield
captcont caption carlisle catechis carolmin-ps
diff --git a/Master/tlpkg/tlpsrc/boisik.tlpsrc b/Master/tlpkg/tlpsrc/boisik.tlpsrc
new file mode 100644
index 00000000000..ed725ed08e9
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/boisik.tlpsrc
@@ -0,0 +1,2 @@
+name boisik
+category Package
diff --git a/Master/tlpkg/tlpsrc/collection-fontsextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-fontsextra.tlpsrc
index 51774e595dd..d6b7b915f8d 100644
--- a/Master/tlpkg/tlpsrc/collection-fontsextra.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-fontsextra.tlpsrc
@@ -28,6 +28,7 @@ depend bbold
depend belleek
depend bera
depend blacklettert1
+depend boisik
depend bookhands
depend braille
depend brushscr