summaryrefslogtreecommitdiff
path: root/fonts/boisik
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/boisik
Initial commit
Diffstat (limited to 'fonts/boisik')
-rw-r--r--fonts/boisik/README45
-rw-r--r--fonts/boisik/boisik.sty637
-rw-r--r--fonts/boisik/bskarr10.mf69
-rw-r--r--fonts/boisik/bskarrows.mf11
-rw-r--r--fonts/boisik/bskbase.mf1076
-rw-r--r--fonts/boisik/bskex10.mf78
-rw-r--r--fonts/boisik/bskext.mf9
-rw-r--r--fonts/boisik/bskhc10.mf101
-rw-r--r--fonts/boisik/bski10-TS1.mf84
-rw-r--r--fonts/boisik/bski10.mf69
-rw-r--r--fonts/boisik/bskib10.mf69
-rw-r--r--fonts/boisik/bskiol10.mf71
-rw-r--r--fonts/boisik/bskital.mf21
-rw-r--r--fonts/boisik/bskiu10.mf69
-rw-r--r--fonts/boisik/bskiub10.mf69
-rw-r--r--fonts/boisik/bskletters-i.mf4111
-rw-r--r--fonts/boisik/bskletters-o.mf6625
-rw-r--r--fonts/boisik/bskletters-r.mf11022
-rw-r--r--fonts/boisik/bskligtab-i.mf90
-rw-r--r--fonts/boisik/bskligtab-sc.mf88
-rw-r--r--fonts/boisik/bskligtab.mf102
-rw-r--r--fonts/boisik/bsklist-T1.mf258
-rw-r--r--fonts/boisik/bsklist-TS1.mf130
-rw-r--r--fonts/boisik/bsklist-ar.mf89
-rw-r--r--fonts/boisik/bsklist-bb.mf130
-rw-r--r--fonts/boisik/bsklist-ex.mf235
-rw-r--r--fonts/boisik/bsklist-lc.mf65
-rw-r--r--fonts/boisik/bsklist-ma.mf264
-rw-r--r--fonts/boisik/bsklist-mi-up.mf7
-rw-r--r--fonts/boisik/bsklist-mi.mf144
-rw-r--r--fonts/boisik/bsklist-ms.mf153
-rw-r--r--fonts/boisik/bsklist-sc.mf57
-rw-r--r--fonts/boisik/bsklist-sy.mf293
-rw-r--r--fonts/boisik/bsklist-uc.mf122
-rw-r--r--fonts/boisik/bskma10.mf89
-rw-r--r--fonts/boisik/bskmab10.mf90
-rw-r--r--fonts/boisik/bskmath.mf176
-rw-r--r--fonts/boisik/bskmathma.mf65
-rw-r--r--fonts/boisik/bskmathms.mf72
-rw-r--r--fonts/boisik/bskmathsy.mf49
-rw-r--r--fonts/boisik/bskmi10.mf69
-rw-r--r--fonts/boisik/bskmib10.mf70
-rw-r--r--fonts/boisik/bskms10.mf89
-rw-r--r--fonts/boisik/bskmsb10.mf90
-rw-r--r--fonts/boisik/bskmsbsl10.mf90
-rw-r--r--fonts/boisik/bskmssl10.mf89
-rw-r--r--fonts/boisik/bskr10-T1.mf82
-rw-r--r--fonts/boisik/bskr10-TS1.mf82
-rw-r--r--fonts/boisik/bskr10.mf69
-rw-r--r--fonts/boisik/bskrb10.mf70
-rw-r--r--fonts/boisik/bskrc10.mf69
-rw-r--r--fonts/boisik/bskrcb10.mf69
-rw-r--r--fonts/boisik/bskrf10.mf69
-rw-r--r--fonts/boisik/bskrl10.mf69
-rw-r--r--fonts/boisik/bskrol10.mf70
-rw-r--r--fonts/boisik/bskroman.mf27
-rw-r--r--fonts/boisik/bskrsb10.mf69
-rw-r--r--fonts/boisik/bskrsl10.mf70
-rw-r--r--fonts/boisik/bskrw10.mf70
-rw-r--r--fonts/boisik/bsksc.mf38
-rw-r--r--fonts/boisik/bsksc10.mf70
-rw-r--r--fonts/boisik/bsksy10.mf89
-rw-r--r--fonts/boisik/bsksyb10.mf90
-rw-r--r--fonts/boisik/bsksybsl10.mf89
-rw-r--r--fonts/boisik/bsksymbols.mf27393
-rw-r--r--fonts/boisik/bsksyol10.mf107
-rw-r--r--fonts/boisik/bsksysl10.mf89
-rw-r--r--fonts/boisik/example/boisik-idiot.pdfbin0 -> 334567 bytes
-rw-r--r--fonts/boisik/example/boisik-idiot.tex55
-rw-r--r--fonts/boisik/example/boisik.pdfbin0 -> 173146 bytes
-rw-r--r--fonts/boisik/example/boisik.tex49
-rw-r--r--fonts/boisik/example/bskrlogo10.mf87
-rw-r--r--fonts/boisik/example/table.pdfbin0 -> 464850 bytes
-rw-r--r--fonts/boisik/example/table.tex157
-rw-r--r--fonts/boisik/example/testfont.pdfbin0 -> 868879 bytes
-rw-r--r--fonts/boisik/example/testfont.tex225
-rw-r--r--fonts/boisik/il2bsk.fd14
-rw-r--r--fonts/boisik/il2bskf.fd9
-rw-r--r--fonts/boisik/lblbskm.fd7
-rw-r--r--fonts/boisik/lblcmr.fd3
-rw-r--r--fonts/boisik/lblenc.def7
-rw-r--r--fonts/boisik/lbmbsk.fd14
-rw-r--r--fonts/boisik/lbmbskms.fd10
-rw-r--r--fonts/boisik/lbmcmr.fd3
-rw-r--r--fonts/boisik/lbmenc.def7
-rw-r--r--fonts/boisik/lbsbsk.fd14
-rw-r--r--fonts/boisik/lbsbsksy.fd7
-rw-r--r--fonts/boisik/lbscmr.fd3
-rw-r--r--fonts/boisik/lbsenc.def13
-rw-r--r--fonts/boisik/ot1bsk.fd15
-rw-r--r--fonts/boisik/ot1bskf.fd10
-rw-r--r--fonts/boisik/ts1bsk.fd5
-rw-r--r--fonts/boisik/ubskex.fd5
93 files changed, 57070 insertions, 0 deletions
diff --git a/fonts/boisik/README b/fonts/boisik/README
new file mode 100644
index 0000000000..7dfb79366c
--- /dev/null
+++ b/fonts/boisik/README
@@ -0,0 +1,45 @@
+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}
+(add option `czech' for IL2 encoding and/or `arrows' for additional arrows)
+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, bskms10, bskma10
+
+Warning
+============
+When you encounter "strange path" or "paths don't intersect" errors, try
+higher resolution (e.g. dvips -mode supre -D 2400 test.dvi).
+
+Examples
+============
+http://mitek.webpark.cz/boisik/boisik.pdf
+http://mitek.webpark.cz/boisik/boisik-idiot.pdf
diff --git a/fonts/boisik/boisik.sty b/fonts/boisik/boisik.sty
new file mode 100644
index 0000000000..6f37132b7d
--- /dev/null
+++ b/fonts/boisik/boisik.sty
@@ -0,0 +1,637 @@
+\ProvidesPackage{boisik}[2009/08/21 bsk-v0.5]
+\renewcommand{\rmdefault}{bsk}
+\def\b@isikenc{OT1}
+\DeclareOption{czech}{\global\def\b@isikenc{IL2}}
+\newif\ifboisikarrows \boisikarrowsfalse
+\DeclareOption{arrows}{\boisikarrowstrue}
+\ProcessOptions
+
+\input{lbmenc.def}
+\input{lbsenc.def}
+\input{lblenc.def}
+\DeclareTextSymbolDefault{\textbackslash}{LBS}
+\DeclareTextSymbolDefault{\textbar}{LBS}
+\DeclareTextSymbolDefault{\textbraceleft}{LBS}
+\DeclareTextSymbolDefault{\textbraceright}{LBS}
+\DeclareTextSymbolDefault{\textless}{LBL}
+\DeclareTextSymbolDefault{\textgreater}{LBL}
+\DeclareTextAccentDefault{\t}{LBL}
+
+\DeclareTextSymbolDefault{\textasteriskcentered}{LBS}
+\DeclareTextSymbolDefault{\textbardbl}{LBS}
+\DeclareTextSymbolDefault{\textbullet}{LBS}
+\DeclareTextSymbolDefault{\textperiodcentered}{LBS}
+\DeclareTextAccentDefault{\textcircled}{LBS}
+\DeclareTextSymbolDefault{\textdaggerdbl}{LBM}
+\DeclareTextSymbolDefault{\textdagger}{LBM}
+\DeclareTextSymbolDefault{\textparagraph}{LBM}
+\DeclareTextSymbolDefault{\textsection}{LBM}
+%Math fonts and symbols
+\DeclareSymbolFont{operators} {\b@isikenc}{bskf} {m}{n}
+\DeclareSymbolFont{letters} {LBL} {bskm} {m}{it}
+\DeclareSymbolFont{symbols} {LBS} {bsksy}{m}{n}
+\DeclareSymbolFont{largesymbols}{U} {bskex}{m}{n}
+\DeclareSymbolFont{bsksymbols} {LBM} {bskms}{m}{n}
+\DeclareSymbolFont{bskadd} {U} {bskma}{m}{n}
+
+\DeclareFontFamily{U}{bskma}{\skewchar\font130 }
+\DeclareFontShape{U}{bskma}{m}{n}{<->bskma10}{}
+
+\DeclareSymbolFontAlphabet{\mathrm} {operators}
+\DeclareSymbolFontAlphabet{\mathnormal}{letters}
+\DeclareSymbolFontAlphabet{\mathbb} {bsksymbols}
+\DeclareSymbolFontAlphabet{\mathsf} {bskadd}
+\DeclareMathAlphabet {\mathbf} {\b@isikenc}{bsk}{b}{n}
+\DeclareMathAlphabet {\mathit} {\b@isikenc}{bsk}{m}{it}
+
+\let\rightleftharpoons\undefined
+\let\sqsubset\undefined
+\let\sqsupset\undefined
+\let\angle\undefined
+\let\cong\undefined
+\let\bowtie\undefined
+\let\neq\undefined
+\let\doteq\undefined
+
+\begingroup \catcode`\"=12
+\DeclareMathSymbol{\dabar@}{\mathord}{symbols}{"DE}
+\xdef\dashrightarrow{\mathrel{\dabar@\dabar@
+ \mathchar"0\hexnumber@\symsymbols A6}}%
+\xdef\dashleftarrow{\mathrel{\mathchar"0\hexnumber@\symsymbols A7\dabar@
+ \dabar@}}%
+\global\let\dasharrow\dashrightarrow
+\DeclareMathSymbol{\intup}{\mathop}{largesymbols}{138}
+
+\DeclareMathSymbol{-} {\mathbin}{symbols} {"78}
+\DeclareMathSymbol{\cdot} {\mathbin}{symbols} {"79}
+\DeclareMathSymbol{\times} {\mathbin}{symbols} {"7A}
+\DeclareMathSymbol{\ast} {\mathbin}{symbols} {"7B}
+\DeclareMathSymbol{*} {\mathbin}{symbols} {"7B}%\ast
+\DeclareMathSymbol{\div} {\mathbin}{symbols} {"7C}
+\DeclareMathSymbol{\diamond} {\mathbin}{symbols} {"7D}
+\DeclareMathSymbol{\pm} {\mathbin}{symbols} {"7E}
+%cal_Stigma
+\DeclareMathSymbol{\oplus} {\mathbin}{symbols} {"80}
+\DeclareMathSymbol{\ominus} {\mathbin}{symbols} {"81}
+\DeclareMathSymbol{\otimes} {\mathbin}{symbols} {"82}
+\DeclareMathSymbol{\cup} {\mathbin}{symbols} {"83}
+\DeclareMathSymbol{\cap} {\mathbin}{symbols} {"84}
+\DeclareMathSymbol{\uplus} {\mathbin}{symbols} {"85}
+\DeclareMathSymbol{\wedge} {\mathbin}{symbols} {"86}
+\DeclareMathSymbol{\vee} {\mathbin}{symbols} {"87}
+\DeclareMathSymbol{\leftharpoonup} {\mathrel}{symbols} {"88}
+\DeclareMathSymbol{\leftharpoondown} {\mathrel}{symbols} {"89}
+\DeclareMathSymbol{\rightharpoonup} {\mathrel}{symbols} {"8A}
+\DeclareMathSymbol{\rightharpoondown} {\mathrel}{symbols} {"8B}
+\DeclareMathSymbol{\upharpoonright} {\mathrel}{symbols} {"8C}
+\DeclareMathSymbol{\downharpoonright} {\mathrel}{symbols} {"8D}
+\DeclareMathSymbol{\upharpoonleft} {\mathrel}{symbols} {"8E}
+\DeclareMathSymbol{\downharpoonleft} {\mathrel}{symbols} {"8F}
+\DeclareMathSymbol{\leftrightarrows} {\mathrel}{symbols} {"90}
+\DeclareMathSymbol{\rightleftarrows} {\mathrel}{symbols} {"91}
+\DeclareMathSymbol{\rightleftharpoons} {\mathrel}{symbols} {"92}
+\DeclareMathSymbol{\leftrightharpoons} {\mathrel}{symbols} {"93}
+\DeclareMathSymbol{\leftleftarrows} {\mathrel}{symbols} {"94}
+\DeclareMathSymbol{\rightrightarrows} {\mathrel}{symbols} {"95}
+\DeclareMathSymbol{\upuparrows} {\mathrel}{symbols} {"96}
+\DeclareMathSymbol{\downdownarrows} {\mathrel}{symbols} {"97}
+\DeclareMathSymbol{\twoheadrightarrow} {\mathrel}{symbols} {"98}
+\DeclareMathSymbol{\twoheadleftarrow} {\mathrel}{symbols} {"99}
+\DeclareMathSymbol{\rightarrowtail} {\mathrel}{symbols} {"9A}
+\DeclareMathSymbol{\leftarrowtail} {\mathrel}{symbols} {"9B}
+\DeclareMathSymbol{\rightsquigarrow} {\mathrel}{symbols} {"9C}
+\DeclareMathSymbol{\leftrightsquigarrow} {\mathrel}{symbols} {"9D}
+\DeclareMathSymbol{\Lsh} {\mathrel}{symbols} {"9E}
+\DeclareMathSymbol{\Rsh} {\mathrel}{symbols} {"9F}
+\DeclareMathSymbol{\looparrowleft} {\mathrel}{symbols} {"A0}
+\DeclareMathSymbol{\looparrowright} {\mathrel}{symbols} {"A1}
+\DeclareMathSymbol{\circlearrowright} {\mathrel}{symbols} {"A2}
+\DeclareMathSymbol{\circlearrowleft} {\mathrel}{symbols} {"A3}
+\DeclareMathSymbol{\curvearrowleft} {\mathrel}{symbols} {"A4}
+\DeclareMathSymbol{\curvearrowright} {\mathrel}{symbols} {"A5}
+\DeclareMathSymbol{\nleftarrow} {\mathrel}{symbols} {"A8}
+\DeclareMathSymbol{\nrightarrow} {\mathrel}{symbols} {"A9}
+\DeclareMathSymbol{\nleftrightarrow} {\mathrel}{symbols} {"AA}
+\DeclareMathSymbol{\nLeftarrow} {\mathrel}{symbols} {"AB}
+\DeclareMathSymbol{\nRightarrow} {\mathrel}{symbols} {"AC}
+\DeclareMathSymbol{\nLeftrightarrow} {\mathrel}{symbols} {"AD}
+\DeclareMathSymbol{\Lleftarrow} {\mathrel}{symbols} {"AE}
+\DeclareMathSymbol{\Rrightarrow} {\mathrel}{symbols} {"AF}
+\DeclareMathSymbol{\nLeftrightarroW} {\mathrel}{symbols} {"B0}
+\DeclareMathSymbol{\lhook} {\mathrel}{symbols} {"B1}
+\DeclareMathSymbol{\rhook} {\mathrel}{symbols} {"B2}
+\DeclareMathSymbol{\multimap} {\mathrel}{symbols} {"B3}
+\DeclareMathSymbol{\multimapdot} {\mathrel}{symbols} {"B4}
+\DeclareMathSymbol{\therefore} {\mathrel}{symbols} {"B5}
+\DeclareMathSymbol{\because} {\mathrel}{symbols} {"B6}
+\DeclareMathSymbol{\between} {\mathrel}{symbols} {"B7}
+\DeclareMathSymbol{\Vdash} {\mathrel}{symbols} {"B8}
+\DeclareMathSymbol{\Vvdash} {\mathrel}{symbols} {"B9}
+\DeclareMathSymbol{\VDash} {\mathrel}{symbols} {"BA}
+\DeclareMathSymbol{\vDash} {\mathrel}{symbols} {"BB}
+\DeclareMathSymbol{\smallsmile} {\mathrel}{symbols} {"BC}
+\DeclareMathSymbol{\smallfrown} {\mathrel}{symbols} {"BD}
+\DeclareMathSymbol{\shortmid} {\mathrel}{symbols} {"BE}
+\DeclareMathSymbol{\shortparallel} {\mathrel}{symbols} {"BF}
+\DeclareMathSymbol{\backprime} {\mathord}{symbols} {"C0}
+\DeclareMathSymbol{\varnothing} {\mathord}{symbols} {"C1}
+\DeclareMathSymbol{\thickapprox} {\mathrel}{symbols} {"C2}
+\DeclareMathSymbol{\divideontimes} {\mathbin}{symbols} {"C3}
+\DeclareMathSymbol{\lessdot} {\mathbin}{symbols} {"C4}
+\DeclareMathSymbol{\gtrdot} {\mathbin}{symbols} {"C5}
+\DeclareMathSymbol{\bumpeq} {\mathrel}{symbols} {"C6}
+\DeclareMathSymbol{\Bumpeq} {\mathrel}{symbols} {"C7}
+\DeclareMathSymbol{\leqslant} {\mathrel}{symbols} {"C8}
+\DeclareMathSymbol{\geqslant} {\mathrel}{symbols} {"C9}
+\DeclareMathSymbol{\eqslantless} {\mathrel}{symbols} {"CA}
+\DeclareMathSymbol{\eqslantgtr} {\mathrel}{symbols} {"CB}
+\DeclareMathSymbol{\curlyeqprec} {\mathrel}{symbols} {"CC}
+\DeclareMathSymbol{\curlyeqsucc} {\mathrel}{symbols} {"CD}
+\DeclareMathSymbol{\preccurlyeq} {\mathrel}{symbols} {"CE}
+\DeclareMathSymbol{\succcurlyeq} {\mathrel}{symbols} {"CF}
+\DeclareMathSymbol{\thicksim} {\mathrel}{symbols} {"D0}
+\DeclareMathSymbol{\backsim} {\mathrel}{symbols} {"D1}
+\DeclareMathSymbol{\eqsim} {\mathrel}{symbols} {"D2}
+\DeclareMathSymbol{\backsimeq} {\mathrel}{symbols} {"D3}
+\DeclareMathSymbol{\ltimes} {\mathbin}{symbols} {"D4}
+\DeclareMathSymbol{\rtimes} {\mathbin}{symbols} {"D5}
+\DeclareMathSymbol{\lll} {\mathrel}{symbols} {"D6}
+\DeclareMathSymbol{\ggg} {\mathrel}{symbols} {"D7}
+\DeclareMathSymbol{\triangleq} {\mathrel}{symbols} {"D8}
+\DeclareMathSymbol{\circeq} {\mathrel}{symbols} {"D9}
+\DeclareMathSymbol{\eqcirc} {\mathrel}{symbols} {"DA}
+\DeclareMathSymbol{\doteqdot} {\mathrel}{symbols} {"DB}
+\DeclareMathSymbol{\risingdotseq} {\mathrel}{symbols} {"DC}
+\DeclareMathSymbol{\fallingdotseq} {\mathrel}{symbols} {"DD}
+\DeclareMathSymbol{\varpropto} {\mathrel}{symbols} {"DF}
+\DeclareMathSymbol{\sqsubset} {\mathrel}{symbols} {"E0}
+\DeclareMathSymbol{\sqsupset} {\mathrel}{symbols} {"E1}
+\DeclareMathSymbol{\lozenge} {\mathord}{symbols} {"E2}
+\DeclareMathSymbol{\blacklozenge} {\mathord}{symbols} {"E3}
+\DeclareMathSymbol{\vartriangleright} {\mathrel}{symbols} {"E4}
+\DeclareMathSymbol{\vartriangleleft} {\mathrel}{symbols} {"E5}
+\DeclareMathSymbol{\trianglerighteq} {\mathrel}{symbols} {"E6}
+\DeclareMathSymbol{\trianglelefteq} {\mathrel}{symbols} {"E7}
+\DeclareMathSymbol{\blacktriangledown} {\mathord}{symbols} {"E8}
+\DeclareMathSymbol{\blacktriangleright} {\mathrel}{symbols} {"E9}
+\DeclareMathSymbol{\blacktriangleleft} {\mathrel}{symbols} {"EA}
+\DeclareMathSymbol{\blacktriangle} {\mathord}{symbols} {"EB}
+\DeclareMathSymbol{\vartriangle} {\mathrel}{symbols} {"EC}
+\DeclareMathSymbol{\triangledown} {\mathord}{symbols} {"ED}
+\DeclareMathSymbol{\centerdot} {\mathbin}{symbols} {"EE}
+\DeclareMathSymbol{\blacksquare} {\mathord}{symbols} {"EF}
+\DeclareMathSymbol{\boxplus} {\mathbin}{symbols} {"F0}
+\DeclareMathSymbol{\boxminus} {\mathbin}{symbols} {"F1}
+\DeclareMathSymbol{\boxtimes} {\mathbin}{symbols} {"F2}
+\DeclareMathSymbol{\square} {\mathord}{symbols} {"F3}
+\DeclareMathSymbol{\boxdot} {\mathbin}{symbols} {"F4}
+\DeclareMathSymbol{\circledcirc} {\mathbin}{symbols} {"F5}
+\DeclareMathSymbol{\circledast} {\mathbin}{symbols} {"F6}
+\DeclareMathSymbol{\circleddash} {\mathbin}{symbols} {"F7}
+\DeclareMathSymbol{\beth} {\mathord}{symbols} {"F8}
+\DeclareMathSymbol{\gimel} {\mathord}{symbols} {"F9}
+\DeclareMathSymbol{\daleth} {\mathord}{symbols} {"FA}
+\DeclareMathSymbol{\Finv} {\mathord}{symbols} {"FB}
+\DeclareMathSymbol{\Game} {\mathord}{symbols} {"FC}
+\DeclareMathSymbol{\complement} {\mathord}{symbols} {"FD}
+\DeclareMathSymbol{\intercal} {\mathbin}{symbols} {"FE}
+\DeclareMathSymbol{\mp} {\mathbin}{symbols} {"FF}
+\DeclareMathSymbol{\prurel} {\mathrel}{bsksymbols}{"3A}
+\DeclareMathSymbol{\scurel} {\mathrel}{bsksymbols}{"3B}
+\DeclareMathSymbol{\disin} {\mathrel}{bsksymbols}{"3C}
+\DeclareMathSymbol{\nisd} {\mathrel}{bsksymbols}{"3D}
+\DeclareMathSymbol{\fatslash} {\mathrel}{bsksymbols}{"3E}
+\DeclareMathSymbol{\fatbslash} {\mathrel}{bsksymbols}{"3F}
+\DeclareMathSymbol{\nequiv} {\mathrel}{bsksymbols}{"40}
+\DeclareMathSymbol{\bagmember} {\mathrel}{bsksymbols}{"60}
+\DeclareMathSymbol{\lvertneqq} {\mathrel}{bsksymbols}{"80}
+\DeclareMathSymbol{\gvertneqq} {\mathrel}{bsksymbols}{"81}
+\DeclareMathSymbol{\nleq} {\mathrel}{bsksymbols}{"82}
+\DeclareMathSymbol{\ngeq} {\mathrel}{bsksymbols}{"83}
+\DeclareMathSymbol{\nless} {\mathrel}{bsksymbols}{"84}
+\DeclareMathSymbol{\ngtr} {\mathrel}{bsksymbols}{"85}
+\DeclareMathSymbol{\nprec} {\mathrel}{bsksymbols}{"86}
+\DeclareMathSymbol{\nsucc} {\mathrel}{bsksymbols}{"87}
+\DeclareMathSymbol{\lneqq} {\mathrel}{bsksymbols}{"88}
+\DeclareMathSymbol{\gneqq} {\mathrel}{bsksymbols}{"89}
+\DeclareMathSymbol{\nleqslant} {\mathrel}{bsksymbols}{"8A}
+\DeclareMathSymbol{\ngeqslant} {\mathrel}{bsksymbols}{"8B}
+\DeclareMathSymbol{\lneq} {\mathrel}{bsksymbols}{"8C}
+\DeclareMathSymbol{\gneq} {\mathrel}{bsksymbols}{"8D}
+\DeclareMathSymbol{\npreceq} {\mathrel}{bsksymbols}{"8E}
+\DeclareMathSymbol{\nsucceq} {\mathrel}{bsksymbols}{"8F}
+\DeclareMathSymbol{\nleqq} {\mathrel}{bsksymbols}{"90}
+\DeclareMathSymbol{\ngeqq} {\mathrel}{bsksymbols}{"91}
+\DeclareMathSymbol{\lnsim} {\mathrel}{bsksymbols}{"92}
+\DeclareMathSymbol{\gnsim} {\mathrel}{bsksymbols}{"93}
+\DeclareMathSymbol{\precnsim} {\mathrel}{bsksymbols}{"94}
+\DeclareMathSymbol{\succnsim} {\mathrel}{bsksymbols}{"95}
+\DeclareMathSymbol{\precneqq} {\mathrel}{bsksymbols}{"96}
+\DeclareMathSymbol{\succneqq} {\mathrel}{bsksymbols}{"97}
+\DeclareMathSymbol{\nsim} {\mathrel}{bsksymbols}{"98}
+\DeclareMathSymbol{\ncong} {\mathrel}{bsksymbols}{"99}
+\DeclareMathSymbol{\lnapprox} {\mathrel}{bsksymbols}{"9A}
+\DeclareMathSymbol{\gnapprox} {\mathrel}{bsksymbols}{"9B}
+\DeclareMathSymbol{\precnapprox} {\mathrel}{bsksymbols}{"9C}
+\DeclareMathSymbol{\succnapprox} {\mathrel}{bsksymbols}{"9D}
+\DeclareMathSymbol{\nsubset} {\mathrel}{bsksymbols}{"9E}
+\DeclareMathSymbol{\nsupset} {\mathrel}{bsksymbols}{"9F}
+\DeclareMathSymbol{\varsubsetneq} {\mathrel}{bsksymbols}{"A0}
+\DeclareMathSymbol{\varsupsetneq} {\mathrel}{bsksymbols}{"A1}
+\DeclareMathSymbol{\nsubseteqq} {\mathrel}{bsksymbols}{"A2}
+\DeclareMathSymbol{\nsupseteqq} {\mathrel}{bsksymbols}{"A3}
+\DeclareMathSymbol{\subsetneqq} {\mathrel}{bsksymbols}{"A4}
+\DeclareMathSymbol{\supsetneqq} {\mathrel}{bsksymbols}{"A5}
+\DeclareMathSymbol{\varsubsetneqq} {\mathrel}{bsksymbols}{"A6}
+\DeclareMathSymbol{\varsupsetneqq} {\mathrel}{bsksymbols}{"A7}
+\DeclareMathSymbol{\subsetneq} {\mathrel}{bsksymbols}{"A8}
+\DeclareMathSymbol{\supsetneq} {\mathrel}{bsksymbols}{"A9}
+\DeclareMathSymbol{\nsubseteq} {\mathrel}{bsksymbols}{"AA}
+\DeclareMathSymbol{\nsupseteq} {\mathrel}{bsksymbols}{"AB}
+\DeclareMathSymbol{\nparallel} {\mathrel}{bsksymbols}{"AC}
+\DeclareMathSymbol{\nmid} {\mathrel}{bsksymbols}{"AD}
+\DeclareMathSymbol{\nshortmid} {\mathrel}{bsksymbols}{"AE}
+\DeclareMathSymbol{\nshortparallel} {\mathrel}{bsksymbols}{"AF}
+\DeclareMathSymbol{\nvdash} {\mathrel}{bsksymbols}{"B0}
+\DeclareMathSymbol{\nVdash} {\mathrel}{bsksymbols}{"B1}
+\DeclareMathSymbol{\nvDash} {\mathrel}{bsksymbols}{"B2}
+\DeclareMathSymbol{\nVDash} {\mathrel}{bsksymbols}{"B3}
+\DeclareMathSymbol{\ntrianglerighteq} {\mathrel}{bsksymbols}{"B4}
+\DeclareMathSymbol{\ntrianglelefteq} {\mathrel}{bsksymbols}{"B5}
+\DeclareMathSymbol{\ntriangleleft} {\mathrel}{bsksymbols}{"B6}
+\DeclareMathSymbol{\ntriangleright} {\mathrel}{bsksymbols}{"B7}
+\DeclareMathSymbol{\precapprox} {\mathrel}{bsksymbols}{"B8}
+\DeclareMathSymbol{\succapprox} {\mathrel}{bsksymbols}{"B9}
+\DeclareMathSymbol{\precsim} {\mathrel}{bsksymbols}{"BA}
+\DeclareMathSymbol{\succsim} {\mathrel}{bsksymbols}{"BB}
+\DeclareMathSymbol{\lesssim} {\mathrel}{bsksymbols}{"BC}
+\DeclareMathSymbol{\gtrsim} {\mathrel}{bsksymbols}{"BD}
+\DeclareMathSymbol{\lessapprox} {\mathrel}{bsksymbols}{"BE}
+\DeclareMathSymbol{\gtrapprox} {\mathrel}{bsksymbols}{"BF}
+\DeclareMathSymbol{\leqq} {\mathrel}{bsksymbols}{"C0}
+\DeclareMathSymbol{\geqq} {\mathrel}{bsksymbols}{"C1}
+\DeclareMathSymbol{\lessgtr} {\mathrel}{bsksymbols}{"C2}
+\DeclareMathSymbol{\gtrless} {\mathrel}{bsksymbols}{"C3}
+\DeclareMathSymbol{\lesseqgtr} {\mathrel}{bsksymbols}{"C4}
+\DeclareMathSymbol{\gtreqless} {\mathrel}{bsksymbols}{"C5}
+\DeclareMathSymbol{\lesseqqgtr} {\mathrel}{bsksymbols}{"C6}
+\DeclareMathSymbol{\gtreqqless} {\mathrel}{bsksymbols}{"C7}
+\DeclareMathSymbol{\Subset} {\mathrel}{bsksymbols}{"C8}
+\DeclareMathSymbol{\Supset} {\mathrel}{bsksymbols}{"C9}
+\DeclareMathSymbol{\Cup} {\mathbin}{bsksymbols}{"CA}
+\DeclareMathSymbol{\Cap} {\mathbin}{bsksymbols}{"CB}
+\DeclareMathSymbol{\subseteqq} {\mathrel}{bsksymbols}{"CC}
+\DeclareMathSymbol{\supseteqq} {\mathrel}{bsksymbols}{"CD}
+\DeclareMathSymbol{\curlywedge} {\mathbin}{bsksymbols}{"CE}
+\DeclareMathSymbol{\curlyvee} {\mathbin}{bsksymbols}{"CF}
+\DeclareMathSymbol{\veebar} {\mathbin}{bsksymbols}{"D0}
+\DeclareMathSymbol{\barwedge} {\mathbin}{bsksymbols}{"D1}
+\DeclareMathSymbol{\doublebarwedge} {\mathbin}{bsksymbols}{"D2}
+\DeclareMathSymbol{\leftthreetimes} {\mathbin}{bsksymbols}{"D3}
+\DeclareMathSymbol{\rightthreetimes} {\mathbin}{bsksymbols}{"D4}
+\DeclareMathSymbol{\angle} {\mathord}{bsksymbols}{"D5}
+\DeclareMathSymbol{\measuredangle} {\mathord}{bsksymbols}{"D6}
+\DeclareMathSymbol{\sphericalangle} {\mathord}{bsksymbols}{"D7}
+\DeclareMathDelimiter{\ulcorner}{\mathopen} {bsksymbols}{"D8}{bsksymbols}{"D8}
+\DeclareMathDelimiter{\urcorner}{\mathclose}{bsksymbols}{"D9}{bsksymbols}{"D9}
+\DeclareMathSymbol{\smallsetminus} {\mathbin}{bsksymbols}{"DA}
+\DeclareMathSymbol{\diagup} {\mathord}{bsksymbols}{"DB}
+\DeclareMathSymbol{\diagdown} {\mathord}{bsksymbols}{"DC}
+\DeclareMathSymbol{\approxeq} {\mathrel}{bsksymbols}{"DD}
+\DeclareMathSymbol{\dotplus} {\mathbin}{bsksymbols}{"DE}
+\DeclareMathSymbol{\pitchfork} {\mathrel}{bsksymbols}{"DF}
+\DeclareMathDelimiter{\llcorner}{\mathopen} {bsksymbols}{"E0}{bsksymbols}{"E0}
+\DeclareMathDelimiter{\lrcorner}{\mathclose}{bsksymbols}{"E1}{bsksymbols}{"E1}
+\DeclareMathSymbol{\nexists} {\mathord}{bsksymbols}{"E2}
+\DeclareMathSymbol{\bigstar} {\mathord}{bsksymbols}{"E3}
+\DeclareMathSymbol{\neq} {\mathrel}{bsksymbols}{"E4}
+\DeclareMathSymbol{\dalambert} {\mathord}{bsksymbols}{"E5}
+\DeclareMathSymbol{\cong} {\mathord}{bsksymbols}{"E6}
+\DeclareMathSymbol{\lozengedot} {\mathord}{bsksymbols}{"E7}
+\DeclareMathSymbol{\bowtie} {\mathord}{bsksymbols}{"E8}
+\DeclareMathSymbol{\ltimesblack} {\mathord}{bsksymbols}{"E9}
+\DeclareMathSymbol{\rtimesblack} {\mathord}{bsksymbols}{"EA}
+\DeclareMathSymbol{\blackbowtie} {\mathord}{bsksymbols}{"EB}
+\DeclareMathSymbol{\lblackbowtie} {\mathord}{bsksymbols}{"EC}
+\DeclareMathSymbol{\rblackbowtie} {\mathord}{bsksymbols}{"ED}
+\global\edef\maltese{\noexpand\mathhexbox{\hexnumber@\symbsksymbols}EE}
+\global\edef\checkmark{\noexpand\mathhexbox{\hexnumber@\symbsksymbols}EF}
+\DeclareMathSymbol{\mathsection} {\mathord}{bsksymbols}{"F0}
+\DeclareMathSymbol{\dagger} {\mathbin}{bsksymbols}{"F1}
+\DeclareMathSymbol{\ddagger} {\mathbin}{bsksymbols}{"F2}
+\DeclareMathSymbol{\mathparagraph} {\mathord}{bsksymbols}{"F3}
+\DeclareMathSymbol{\clubsuit} {\mathord}{bsksymbols}{"F4}
+\DeclareMathSymbol{\diamondsuit} {\mathord}{bsksymbols}{"F5}
+\DeclareMathSymbol{\heartsuit} {\mathord}{bsksymbols}{"F6}
+\DeclareMathSymbol{\spadesuit} {\mathord}{bsksymbols}{"F7}
+\DeclareMathSymbol{\star} {\mathbin}{bsksymbols}{"F8}
+\DeclareMathSymbol{\flat} {\mathord}{bsksymbols}{"F9}
+\DeclareMathSymbol{\natural} {\mathord}{bsksymbols}{"FA}
+\DeclareMathSymbol{\sharp} {\mathord}{bsksymbols}{"FB}
+\DeclareMathSymbol{\smile} {\mathrel}{bsksymbols}{"FC}
+\DeclareMathSymbol{\frown} {\mathrel}{bsksymbols}{"FD}
+\DeclareMathSymbol{\triangleright} {\mathbin}{bsksymbols}{"FE}
+\DeclareMathSymbol{\triangleleft} {\mathbin}{bsksymbols}{"FF}
+\DeclareMathSymbol{\oblong} {\mathbin}{bskadd} {"3A}
+\DeclareMathSymbol{\talloblong} {\mathbin}{bskadd} {"3B}
+\DeclareMathSymbol{\sslash} {\mathbin}{bskadd} {"3C}
+\DeclareMathSymbol{\bbslash} {\mathbin}{bskadd} {"3D}
+\DeclareMathSymbol{\hash} {\mathrel}{bskadd} {"3E}
+\DeclareMathSymbol{\varhash} {\mathrel}{bskadd} {"3F}
+\DeclareMathSymbol{\convolution} {\mathbin}{bskadd} {"40}
+\DeclareMathSymbol{\coAsterisk} {\mathbin}{bskadd} {"60}
+\DeclareMathSymbol{\veeeq} {\mathrel}{bskadd} {"80}
+\DeclareMathSymbol{\corresponds} {\mathrel}{bskadd} {"81}
+\DeclareMathSymbol{\arceq} {\mathrel}{bskadd} {"82}
+\DeclareMathSymbol{\doteq} {\mathrel}{bskadd} {"83}
+\DeclareMathSymbol{\CircledEq} {\mathrel}{bskadd} {"84}
+\DeclareMathSymbol{\eqbumped} {\mathrel}{bskadd} {"85}
+\DeclareMathSymbol{\dotminus} {\mathrel}{bskadd} {"86}
+\DeclareMathSymbol{\invnot} {\mathord}{bskadd} {"87}
+\DeclareMathSymbol{\kernelcontraction} {\mathrel}{bskadd} {"88}
+\DeclareMathSymbol{\dotsim} {\mathrel}{bskadd} {"89}
+\DeclareMathSymbol{\simrdots} {\mathrel}{bskadd} {"8A}
+\DeclareMathSymbol{\circplus} {\mathbin}{bskadd} {"8B}
+\DeclareMathSymbol{\dottimes} {\mathbin}{bskadd} {"8C}
+\DeclareMathSymbol{\vartimes} {\mathbin}{bskadd} {"8D}
+\DeclareMathSymbol{\merge} {\mathbin}{bskadd} {"8E}
+\DeclareMathSymbol{\veeonvee} {\mathbin}{bskadd} {"8F}
+\DeclareMathSymbol{\obslash} {\mathbin}{bskadd} {"90}
+\DeclareMathSymbol{\otop} {\mathbin}{bskadd} {"91}
+\DeclareMathSymbol{\obot} {\mathbin}{bskadd} {"92}
+\DeclareMathSymbol{\oleft} {\mathbin}{bskadd} {"93}
+\DeclareMathSymbol{\oright} {\mathbin}{bskadd} {"94}
+\DeclareMathSymbol{\obar} {\mathbin}{bskadd} {"95}
+\DeclareMathSymbol{\oslash} {\mathbin}{bskadd} {"96}
+\DeclareMathSymbol{\otriangle} {\mathbin}{bskadd} {"97}
+\DeclareMathSymbol{\olessthan} {\mathbin}{bskadd} {"98}
+\DeclareMathSymbol{\ogreaterthan} {\mathbin}{bskadd} {"99}
+\DeclareMathSymbol{\ovee} {\mathbin}{bskadd} {"9A}
+\DeclareMathSymbol{\owedge} {\mathbin}{bskadd} {"9B}
+\DeclareMathSymbol{\boxbslash} {\mathbin}{bskadd} {"9C}
+\DeclareMathSymbol{\boxtop} {\mathbin}{bskadd} {"9D}
+\DeclareMathSymbol{\boxbot} {\mathbin}{bskadd} {"9E}
+\DeclareMathSymbol{\boxleft} {\mathbin}{bskadd} {"9F}
+\DeclareMathSymbol{\boxright} {\mathbin}{bskadd} {"A0}
+\DeclareMathSymbol{\boxbar} {\mathbin}{bskadd} {"A1}
+\DeclareMathSymbol{\boxslash} {\mathbin}{bskadd} {"A2}
+\DeclareMathSymbol{\boxtriangle} {\mathbin}{bskadd} {"A3}
+\DeclareMathSymbol{\boxast} {\mathbin}{bskadd} {"A4}
+\DeclareMathSymbol{\boxcircle} {\mathbin}{bskadd} {"A5}
+\DeclareMathSymbol{\boxdivision} {\mathbin}{bskadd} {"A6}
+\DeclareMathSymbol{\boxbox} {\mathbin}{bskadd} {"A7}
+\DeclareMathSymbol{\diamondop} {\mathbin}{bskadd} {"A8}
+\DeclareMathSymbol{\diamondminus} {\mathbin}{bskadd} {"A9}
+\DeclareMathSymbol{\diamondbar} {\mathbin}{bskadd} {"AA}
+\DeclareMathSymbol{\diamondtimes} {\mathbin}{bskadd} {"AB}
+\DeclareMathSymbol{\diamondplus} {\mathbin}{bskadd} {"AC}
+\DeclareMathSymbol{\diamondtriangle} {\mathbin}{bskadd} {"AD}
+\DeclareMathSymbol{\diamondcircle} {\mathbin}{bskadd} {"AE}
+\DeclareMathSymbol{\cupleftarrow} {\mathbin}{bskadd} {"AF}
+\DeclareMathSymbol{\varcup} {\mathbin}{bskadd} {"B0}
+\DeclareMathSymbol{\varcap} {\mathbin}{bskadd} {"B1}
+\DeclareMathSymbol{\varsqcup} {\mathbin}{bskadd} {"B2}
+\DeclareMathSymbol{\varsqcap} {\mathbin}{bskadd} {"B3}
+\DeclareMathSymbol{\sqSubset} {\mathrel}{bskadd} {"B4}
+\DeclareMathSymbol{\sqSupset} {\mathrel}{bskadd} {"B5}
+\DeclareMathSymbol{\inplus} {\mathrel}{bskadd} {"B6}
+\DeclareMathSymbol{\niplus} {\mathrel}{bskadd} {"B7}
+\DeclareMathSymbol{\varisins} {\mathrel}{bskadd} {"B8}
+\DeclareMathSymbol{\varnis} {\mathrel}{bskadd} {"B9}
+\DeclareMathSymbol{\subsetplus} {\mathrel}{bskadd} {"BA}
+\DeclareMathSymbol{\supsetplus} {\mathrel}{bskadd} {"BB}
+\DeclareMathSymbol{\subsetpluseq} {\mathrel}{bskadd} {"BC}
+\DeclareMathSymbol{\supsetpluseq} {\mathrel}{bskadd} {"BD}
+\DeclareMathSymbol{\nplus} {\mathbin}{bskadd} {"BE}
+\DeclareMathSymbol{\squplus} {\mathbin}{bskadd} {"BF}
+\DeclareMathSymbol{\multimapboth} {\mathrel}{bskadd} {"C0}
+\DeclareMathSymbol{\multimapdotboth} {\mathrel}{bskadd} {"C1}
+\DeclareMathSymbol{\multimapdotbothB} {\mathrel}{bskadd} {"C2}
+\DeclareMathSymbol{\multimapdotbothA} {\mathrel}{bskadd} {"C3}
+\DeclareMathSymbol{\multimapinv} {\mathrel}{bskadd} {"C4}
+\DeclareMathSymbol{\multimapdotinv} {\mathrel}{bskadd} {"C5}
+\DeclareMathSymbol{\multimapbothvert} {\mathrel}{bskadd} {"C6}
+\DeclareMathSymbol{\multimapdotbothvert} {\mathrel}{bskadd} {"C7}
+\DeclareMathSymbol{\multimapdotbothBvert} {\mathrel}{bskadd} {"C8}
+\DeclareMathSymbol{\multimapdotbothAvert} {\mathrel}{bskadd} {"C9}
+\DeclareMathSymbol{\dfourier} {\mathrel}{bskadd} {"CA}
+\DeclareMathSymbol{\Dfourier} {\mathrel}{bskadd} {"CB}
+\DeclareMathSymbol{\ztransf} {\mathrel}{bskadd} {"CC}
+\DeclareMathSymbol{\Ztransf} {\mathrel}{bskadd} {"CD}
+\DeclareMathSymbol{\Lt} {\mathrel}{bskadd} {"CE}
+\DeclareMathSymbol{\Gt} {\mathrel}{bskadd} {"CF}
+\DeclareMathSymbol{\leftslice} {\mathbin}{bskadd} {"D0}
+\DeclareMathSymbol{\rightslice} {\mathbin}{bskadd} {"D1}
+\DeclareMathSymbol{\trianglelefteqslant} {\mathrel}{bskadd} {"D2}
+\DeclareMathSymbol{\trianglerighteqslant} {\mathrel}{bskadd} {"D3}
+\DeclareMathSymbol{\Ydown} {\mathbin}{bskadd} {"D4}
+\DeclareMathSymbol{\Yup} {\mathbin}{bskadd} {"D5}
+\DeclareMathSymbol{\Yleft} {\mathbin}{bskadd} {"D6}
+\DeclareMathSymbol{\Yright} {\mathbin}{bskadd} {"D7}
+\DeclareMathSymbol{\dashVv} {\mathrel}{bskadd} {"D8}
+\DeclareMathSymbol{\DashV} {\mathrel}{bskadd} {"D9}
+\DeclareMathSymbol{\DashV} {\mathrel}{bskadd} {"DA}
+\DeclareMathSymbol{\dashV} {\mathrel}{bskadd} {"DB}
+\DeclareMathSymbol{\nottop} {\mathord}{bskadd} {"DC}
+\DeclareMathSymbol{\notbot} {\mathord}{bskadd} {"DD}
+\DeclareMathSymbol{\lbag} {\mathbin}{bskadd} {"DE}
+\DeclareMathSymbol{\rbag} {\mathbin}{bskadd} {"DF}
+\DeclareMathSymbol{\rightangle} {\mathord}{bskadd} {"E0}
+\DeclareMathSymbol{\measuredrightangle} {\mathord}{bskadd} {"E1}
+\DeclareMathSymbol{\rightanglemdot} {\mathord}{bskadd} {"E2}
+\DeclareMathSymbol{\rightanglesqr} {\mathord}{bskadd} {"E3}
+\DeclareMathSymbol{\varlrttriangle} {\mathord}{bskadd} {"E4}
+\DeclareMathSymbol{\Perp} {\mathrel}{bskadd} {"E5}
+\DeclareMathSymbol{\moo} {\mathbin}{bskadd} {"E6}
+\DeclareMathSymbol{\baro} {\mathbin}{bskadd} {"E7}
+\DeclareMathSymbol{\pluscirc} {\mathbin}{bskadd} {"E8}
+\DeclareMathSymbol{\minuso} {\mathbin}{bskadd} {"E9}
+\DeclareMathSymbol{\llcurly} {\mathrel}{bskadd} {"EA}
+\DeclareMathSymbol{\ggcurly} {\mathrel}{bskadd} {"EB}
+\DeclareMathSymbol{\strictfi} {\mathrel}{bskadd} {"EC}
+\DeclareMathSymbol{\strictif} {\mathrel}{bskadd} {"ED}
+\DeclareMathSymbol{\binampersand} {\mathopen}{bskadd} {"EE}
+\DeclareMathSymbol{\bindnasrepma} {\mathclose}{bskadd} {"EF}
+\DeclareMathSymbol{\ac} {\mathrel}{bskadd} {"F0}
+\DeclareMathSymbol{\sinewave} {\mathord}{bskadd} {"F1}
+\DeclareMathSymbol{\hermitmatrix} {\mathord}{bskadd} {"F2}
+\DeclareMathSymbol{\varintercal} {\mathbin}{bskadd} {"F3}
+\DeclareMathSymbol{\equalparallel} {\mathrel}{bskadd} {"F4}
+\DeclareMathSymbol{\plustrif} {\mathbin}{bskadd} {"F5}
+\DeclareMathSymbol{\smashtimes} {\mathbin}{bskadd} {"F6}
+\DeclareMathSymbol{\iinfin} {\mathord}{bskadd} {"F7}
+\DeclareMathSymbol{\ltcir} {\mathrel}{bskadd} {"F8}
+\DeclareMathSymbol{\gtcir} {\mathrel}{bskadd} {"F9}
+\DeclareMathSymbol{\glj} {\mathrel}{bskadd} {"FA}
+\DeclareMathSymbol{\Vee} {\mathbin}{bskadd} {"FB}
+\DeclareMathSymbol{\Wedge} {\mathbin}{bskadd} {"FC}
+\DeclareMathSymbol{\fatsemi} {\mathbin}{bskadd} {"FD}
+\DeclareMathSymbol{\forkv} {\mathrel}{bskadd} {"FE}
+\DeclareMathSymbol{\topfork} {\mathrel}{bskadd} {"FF}
+\DeclareMathSymbol{\alpha} {\mathalpha}{letters} {"0B}
+\DeclareMathSymbol{\beta} {\mathalpha}{letters} {"0C}
+\DeclareMathSymbol{\gamma} {\mathalpha}{letters} {"0D}
+\DeclareMathSymbol{\delta} {\mathalpha}{letters} {"0E}
+\DeclareMathSymbol{\epsilon} {\mathalpha}{letters} {"0F}
+\DeclareMathSymbol{\zeta} {\mathalpha}{letters} {"10}
+\DeclareMathSymbol{\eta} {\mathalpha}{letters} {"11}
+\DeclareMathSymbol{\theta} {\mathalpha}{letters} {"12}
+\DeclareMathSymbol{\iota} {\mathalpha}{letters} {"13}
+\DeclareMathSymbol{\kappa} {\mathalpha}{letters} {"14}
+\DeclareMathSymbol{\lambda} {\mathalpha}{letters} {"15}
+\DeclareMathSymbol{\mu} {\mathalpha}{letters} {"16}
+\DeclareMathSymbol{\nu} {\mathalpha}{letters} {"17}
+\DeclareMathSymbol{\xi} {\mathalpha}{letters} {"18}
+\DeclareMathSymbol{\pi} {\mathalpha}{letters} {"19}
+\DeclareMathSymbol{\rho} {\mathalpha}{letters} {"1A}
+\DeclareMathSymbol{\sigma} {\mathalpha}{letters} {"1B}
+\DeclareMathSymbol{\tau} {\mathalpha}{letters} {"1C}
+\DeclareMathSymbol{\upsilon} {\mathalpha}{letters} {"1D}
+\DeclareMathSymbol{\phi} {\mathalpha}{letters} {"1E}
+\DeclareMathSymbol{\chi} {\mathalpha}{letters} {"1F}
+\DeclareMathSymbol{\psi} {\mathalpha}{letters} {"20}
+\DeclareMathSymbol{\omega} {\mathalpha}{letters} {"21}
+\DeclareMathSymbol{\varepsilon} {\mathalpha}{letters} {"22}
+\DeclareMathSymbol{\vartheta} {\mathalpha}{letters} {"23}
+\DeclareMathSymbol{\varpi} {\mathalpha}{letters} {"24}
+\DeclareMathSymbol{\varrho} {\mathalpha}{letters} {"25}
+\DeclareMathSymbol{\varsigma} {\mathalpha}{letters} {"26}
+\DeclareMathSymbol{\varphi} {\mathalpha}{letters} {"27}
+\DeclareMathSymbol{\heta} {\mathalpha}{letters} {"28}
+\DeclareMathSymbol{\vardigamma} {\mathalpha}{letters} {"29}
+\DeclareMathSymbol{\qoppa} {\mathalpha}{letters} {"2A}
+\DeclareMathSymbol{\sampi} {\mathalpha}{letters} {"2B}
+\DeclareMathSymbol{\varsampi} {\mathalpha}{letters} {"2C}
+\DeclareMathSymbol{\stigma} {\mathalpha}{letters} {"2D}
+\DeclareMathSymbol{\varkappa} {\mathalpha}{letters} {"2E}
+\DeclareMathSymbol{\varbeta} {\mathalpha}{letters} {"2F}
+\DeclareMathSymbol{\digamma} {\mathord} {letters} {"3F}
+\DeclareMathSymbol{\Heta} {\mathalpha}{letters} {"5B}
+\DeclareMathSymbol{\Digamma} {\mathalpha}{letters} {"5C}
+\DeclareMathSymbol{\Qoppa} {\mathalpha}{letters} {"5D}
+\DeclareMathSymbol{\Sampi} {\mathalpha}{letters} {"5E}
+\DeclareMathSymbol{\Varsampi} {\mathalpha}{letters} {"5F}
+\DeclareMathSymbol{\imath} {\mathalpha}{letters} {"7B}
+\DeclareMathSymbol{\jmath} {\mathalpha}{letters} {"7C}
+\DeclareMathSymbol{\riota} {\mathalpha}{letters} {"7D}
+\DeclareMathSymbol{\backepsilon} {\mathalpha}{letters} {"7E}
+\DeclareMathSymbol{\Stigma} {\mathalpha}{letters} {"7F}
+\DeclareMathSymbol{\wp} {\mathord} {letters} {"80}
+\DeclareMathAccent{\vec} {\mathord} {letters} {"81}
+\DeclareMathSymbol{\varg} {\mathord} {letters} {"83}
+\DeclareMathSymbol{\hslash} {\mathord} {letters} {"84}
+\DeclareMathSymbol{\hbar} {\mathord} {letters} {"85}
+\DeclareMathSymbol{\lambdabar} {\mathord} {letters} {"86}
+\DeclareMathSymbol{\lambdaslash} {\mathord} {letters} {"87}
+
+%Alternatives defined in amssymb
+\DeclareMathSymbol{\Bbbk} {\mathord}{bsksymbols}{"6B}
+\global\let\Doteq\doteqdot
+\global\let\doublecup\Cup
+\global\let\doublecap\Cap
+\global\let\llless\lll
+\global\let\gggtr\ggg
+\endgroup
+
+%Additional arrows
+\ifboisikarrows
+\let\mapsto\undefined
+\let\hookleftarrow\undefined
+\let\hookrightarrow\undefined
+
+\DeclareSymbolFont{bskarr}{U}{bskarr}{m}{n}
+\DeclareFontFamily{U}{bskarr}{ }
+\DeclareFontShape{U}{bskarr}{m}{n}{<->bskarr10}{}
+
+\begingroup \catcode`\"=12
+\DeclareMathSymbol{\twoheaduparrow} {\mathrel}{bskarr} {"00}
+\DeclareMathSymbol{\twoheaddownarrow} {\mathrel}{bskarr} {"01}
+\DeclareMathSymbol{\mapsfrom} {\mathrel}{bskarr} {"02}
+\DeclareMathSymbol{\mapsto} {\mathrel}{bskarr} {"03}
+\DeclareMathSymbol{\mapsup} {\mathrel}{bskarr} {"04}
+\DeclareMathSymbol{\mapsdown} {\mathrel}{bskarr} {"05}
+\DeclareMathSymbol{\nVleftarrow} {\mathrel}{bskarr} {"06}
+\DeclareMathSymbol{\nVrightarrow} {\mathrel}{bskarr} {"07}
+\DeclareMathSymbol{\hookleftarrow} {\mathrel}{bskarr} {"08}
+\DeclareMathSymbol{\hookrightarrow} {\mathrel}{bskarr} {"09}
+\DeclareMathSymbol{\rightarrowcircle} {\mathrel}{bskarr} {"0A}
+\DeclareMathSymbol{\nwarrowcorner} {\mathrel}{bskarr} {"0B}
+\DeclareMathSymbol{\nearrowcorner} {\mathrel}{bskarr} {"0C}
+\DeclareMathSymbol{\barovernorthwestarrow} {\mathrel}{bskarr} {"0D}
+\DeclareMathSymbol{\carriagereturn} {\mathrel}{bskarr} {"0E}
+\DeclareMathSymbol{\linefeed} {\mathrel}{bskarr} {"0F}
+\DeclareMathSymbol{\leftzigzagarrow} {\mathrel}{bskarr} {"10}
+\DeclareMathSymbol{\Nwarrow} {\mathrel}{bskarr} {"11}
+\DeclareMathSymbol{\Nearrow} {\mathrel}{bskarr} {"12}
+\DeclareMathSymbol{\Swarrow} {\mathrel}{bskarr} {"13}
+\DeclareMathSymbol{\Searrow} {\mathrel}{bskarr} {"14}
+\DeclareMathSymbol{\nHuparrow} {\mathrel}{bskarr} {"15}
+\DeclareMathSymbol{\nHdownarrow} {\mathrel}{bskarr} {"16}
+\DeclareMathSymbol{\updownarrowbar} {\mathrel}{bskarr} {"17}
+\DeclareMathSymbol{\barleftarrow} {\mathrel}{bskarr} {"18}
+\DeclareMathSymbol{\rightarrowbar} {\mathrel}{bskarr} {"19}
+\DeclareMathSymbol{\leftsquigarrow} {\mathrel}{bskarr} {"1A}
+\DeclareMathSymbol{\rightsquigarrow} {\mathrel}{bskarr} {"1B}
+\DeclareMathSymbol{\leftrightsquigarrow} {\mathrel}{bskarr} {"1C}
+\DeclareMathSymbol{\downzigzagarrow} {\mathrel}{bskarr} {"1D}
+\DeclareMathSymbol{\rightthreearrows} {\mathrel}{bskarr} {"1E}
+\DeclareMathSymbol{\barleftarrowrightarrowbar} {\mathrel}{bskarr} {"1F}
+\DeclareMathSymbol{\leftdasharrow} {\mathrel}{bskarr} {"20}
+\DeclareMathSymbol{\rightdasharrow} {\mathrel}{bskarr} {"21}
+\DeclareMathSymbol{\updasharrow} {\mathrel}{bskarr} {"22}
+\DeclareMathSymbol{\downdasharrow} {\mathrel}{bskarr} {"23}
+\DeclareMathSymbol{\upwhitearrow} {\mathrel}{bskarr} {"24}
+\DeclareMathSymbol{\downwhitearrow} {\mathrel}{bskarr} {"25}
+\DeclareMathSymbol{\whitearrowupfrombar} {\mathrel}{bskarr} {"26}
+\DeclareMathSymbol{\whitearrowuppedestal} {\mathrel}{bskarr} {"27}
+\DeclareMathSymbol{\whitearrowuppedestalhbar} {\mathrel}{bskarr} {"28}
+\DeclareMathSymbol{\whitearrowuppedestalvbar} {\mathrel}{bskarr} {"29}
+\DeclareMathSymbol{\twoheadwhiteuparrow} {\mathrel}{bskarr} {"2A}
+\DeclareMathSymbol{\twoheadwhiteuparrowpedestal}{\mathrel}{bskarr} {"2B}
+\DeclareMathSymbol{\updownwhitearrow} {\mathrel}{bskarr} {"2C}
+\DeclareMathSymbol{\leftblackarrow} {\mathrel}{bskarr} {"2D}
+\DeclareMathSymbol{\rightblackarrow} {\mathrel}{bskarr} {"2E}
+\DeclareMathSymbol{\upblackarrow} {\mathrel}{bskarr} {"2F}
+\DeclareMathSymbol{\downblackarrow} {\mathrel}{bskarr} {"30}
+\DeclareMathSymbol{\leftrightblackarrow} {\mathrel}{bskarr} {"31}
+\DeclareMathSymbol{\updownblackarrow} {\mathrel}{bskarr} {"32}
+
+\DeclareMathSymbol{\curlyveeuparrow} {\mathrel}{bskarr} {"DC}
+\DeclareMathSymbol{\curlyveedownarrow} {\mathrel}{bskarr} {"DD}
+\DeclareMathSymbol{\curlywedgeuparrow} {\mathrel}{bskarr} {"DE}
+\DeclareMathSymbol{\curlywedgedownarrow} {\mathrel}{bskarr} {"DF}
+\DeclareMathSymbol{\Mapsfrom} {\mathrel}{bskarr} {"E0}
+\DeclareMathSymbol{\Mapsto} {\mathrel}{bskarr} {"E1}
+\DeclareMathSymbol{\leftwhitearrow} {\mathrel}{bskarr} {"E2}
+\DeclareMathSymbol{\rightwhitearrow} {\mathrel}{bskarr} {"E3}
+\DeclareMathSymbol{\leftwhiteroundarrow} {\mathrel}{bskarr} {"E4}
+\DeclareMathSymbol{\rightwhiteroundarrow} {\mathrel}{bskarr} {"E5}
+\DeclareMathSymbol{\righttoleftarrow} {\mathrel}{bskarr} {"E6}
+\DeclareMathSymbol{\lefttorightarrow} {\mathrel}{bskarr} {"E7}
+\DeclareMathSymbol{\looparrowdownleft} {\mathrel}{bskarr} {"E8}
+\DeclareMathSymbol{\looparrowdownright} {\mathrel}{bskarr} {"E9}
+\DeclareMathSymbol{\uptodownarrow} {\mathrel}{bskarr} {"EA}
+\DeclareMathSymbol{\downtouparrow} {\mathrel}{bskarr} {"EB}
+\DeclareMathSymbol{\nnearrow} {\mathrel}{bskarr} {"EC}
+\DeclareMathSymbol{\ssearrow} {\mathrel}{bskarr} {"ED}
+\DeclareMathSymbol{\nnwarrow} {\mathrel}{bskarr} {"EE}
+\DeclareMathSymbol{\sswarrow} {\mathrel}{bskarr} {"EF}
+\DeclareMathSymbol{\curvearrowleft} {\mathrel}{bskarr} {"F0}
+\DeclareMathSymbol{\curvearrowright} {\mathrel}{bskarr} {"F1}
+\DeclareMathSymbol{\curvearrowleftright} {\mathrel}{bskarr} {"F2}
+\DeclareMathSymbol{\curvearrowbotleft} {\mathrel}{bskarr} {"F3}
+\DeclareMathSymbol{\curvearrowbotright} {\mathrel}{bskarr} {"F4}
+\DeclareMathSymbol{\curvearrowbotleftright} {\mathrel}{bskarr} {"F5}
+\DeclareMathSymbol{\leftrightarroweq} {\mathrel}{bskarr} {"F6}
+\DeclareMathSymbol{\eqleftrightarrow} {\mathrel}{bskarr} {"F7}
+\DeclareMathSymbol{\dlsh} {\mathrel}{bskarr} {"F8}
+\DeclareMathSymbol{\drsh} {\mathrel}{bskarr} {"F9}
+\DeclareMathSymbol{\leftarrowTriangle} {\mathrel}{bskarr} {"FA}
+\DeclareMathSymbol{\rightarrowTriangle} {\mathrel}{bskarr} {"FB}
+\DeclareMathSymbol{\leftrightarrowTriangle} {\mathrel}{bskarr} {"FC}
+\DeclareMathSymbol{\leftarrowtriangle} {\mathrel}{bskarr} {"FD}
+\DeclareMathSymbol{\rightarrowtriangle} {\mathrel}{bskarr} {"FE}
+\DeclareMathSymbol{\leftrightarrowtriangle} {\mathrel}{bskarr} {"FF}
+\endgroup
+\fi
+\endinput
diff --git a/fonts/boisik/bskarr10.mf b/fonts/boisik/bskarr10.mf
new file mode 100644
index 0000000000..fa02c49f7c
--- /dev/null
+++ b/fonts/boisik/bskarr10.mf
@@ -0,0 +1,69 @@
+% Boisik Arrow Set 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKARR"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=-20/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-20/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#; ss.hair#:=16/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#; ss.dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; ss.cap_hair#:=20/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; ss.alt_cap_hair#:=24/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#; ss.cap_bar#:=18/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; boolean ss.square_dots; ss.square_dots:=true; % 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 bskarrows % switch to the driver file
diff --git a/fonts/boisik/bskarrows.mf b/fonts/boisik/bskarrows.mf
new file mode 100644
index 0000000000..d2a8b6ff2f
--- /dev/null
+++ b/fonts/boisik/bskarrows.mf
@@ -0,0 +1,11 @@
+%Boisik driver file for additional arrows
+mode_setup; font_setup;
+
+font_slant slant;
+input bsklist-ar;
+input bsksymbols;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+
+bye. \ No newline at end of file
diff --git a/fonts/boisik/bskbase.mf b/fonts/boisik/bskbase.mf
new file mode 100644
index 0000000000..da24993fd1
--- /dev/null
+++ b/fonts/boisik/bskbase.mf
@@ -0,0 +1,1076 @@
+% 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, testdpi, boldmath;
+
+ boldmath:=false;
+
+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;
+
+def dinfill text t:= erase draw t;
+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.nodraw; test=false; test.alt=true; test.nodraw:=true;
+
+%%%%%%%%%%%Dots and commas
+def dot(suffix $):=
+ filldraw if square_dots: ((.5,.25)..(-.5,.25)---(-.5,-.25)..(0,-.5)..(.5,-.25)---cycle) scaled dot_size
+ else: fullcircle scaled dot_size
+ fi shifted z$;
+ 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 testdpi:-- else:..z$$'&z$$'..fi z$$r..z$'r..{up}z$r;
+enddef;
+
+def ital_kooh(suffix $,$$)suffix modifier:=
+ 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..{dir-120}z$$r if test.modifier and testdpi:-- else: ..z$$'--z$$'+right..fi 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;
+ if t<>"non": t; fi
+enddef;
+
+def unitext(text 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;
+
+def tobl(suffix $,$$,$$$)suffix modifier:= % rounded corners
+ if monospace and ((stem-hair)<.2hair):
+ z$
+ else:
+ if (abs(z$$-z$)>oblu.modifier):
+ z$+(oblu.modifier,0) rotated(angle(z$$-z$))
+ else:
+ .5[z$,z$$]{z$-z$$}
+ fi
+ ...
+ if (abs(z$$$-z$)>oblu.modifier):
+ z$+(oblu.modifier,0) rotated(angle(z$$$-z$))
+ else:
+ {z$$$-z$}.5[z$,z$$$]
+ fi
+ fi
+enddef;
+
+def ifobl(suffix $,$$,@,@@,#,##):= %rounded pair of corners
+ if abs(z$-z$$)>oblu.#+oblu.##: obl($,@,$$).#---obl($$,$,@@).##
+ else: z$+(oblu.#,0) rotated(angle(z@-z$))... {z$$-z$}.5[z$,z$$]...z$$+(oblu.##,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 (max(1,.5currentbreadth)*_dira)) intersectionpoint (_pb shifted (max(1,.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 @,$,$$)suffix modifier:=
+ numeric _theta; path _less;
+ pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@;
+ if (unknown y$r) and (unknown y$$r): 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);
+ _less:=z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l;
+ if not test.modifier: filldraw _less---cycle; fi;
+ penlabels(@,$,$$); labels(@',@'',@''',$ll,@l');
+enddef;
+
+def greater(suffix @,$,$$)suffix modifier:=
+ numeric _theta; path _greater;
+ pos@(rule_thickness,0); x$=x$$; .5[y$l,y$$l]=y@;
+ if (unknown y$l) and (unknown y$$l): y$l=h-.5rule_thickness; 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);
+ _greater:=z@r..z@r'---z$rr..z$l---obl(@''',$l,$$r)---z$$r..z$$l;
+ if not test.modifier: filldraw _greater---cycle; fi;
+ penlabels(@,$,$$); labels(@',@'',@''',$rr,@r');
+enddef;
+
+def logor(suffix @,$,$$)suffix modifier:= %Logical or shape
+ numeric _theta; path _logor;
+ pos@(rule_thickness,90); y$=y$$; .5[x$l,x$$l]=x@;
+ if (unknown y$l) 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);
+ _logor:=z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l;
+ if not test.modifier: filldraw _logor---cycle; fi;
+ penlabels(@,$,$$); labels(@',@'',@''',$ll,@l');
+enddef;
+
+def logand(suffix @,$,$$)suffix modifier:= %Logical and shape
+ numeric _theta; path _logand;
+ pos@(rule_thickness,90); y$=y$$; .5[x$r,x$$r]=x@;
+ if (unknown y$r) 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);
+ _logand:=z@r..z@r'---z$r...z$ll---obl(@''',$l,$$r)---z$$r..{z@r-z$$l}z$$l;
+ if not test.modifier: filldraw _logand---cycle; fi;
+ 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_points(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$);
+ penlabels($,$a,$$,$$a); labels($$a.s);
+enddef;
+
+vardef vlnka(suffix $,$$)suffix modifier:=
+ vlnka_points($,$$);
+ path _vlnka;
+ _vlnka:=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..{z$a-z$}z$r;
+ if not test.modifier: filldraw _vlnka..cycle; fi;
+enddef;
+
+vardef vlnka_inv_points(suffix $,$$):=
+ y$a.r=y$$; y$$a.l=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,180); pos$$(hair,180); pos$a(curve,250); pos$$a(curve,290);
+ z$$a.s=z$$a.l+curve*unitvector(z$$-z$);
+ penlabels($,$a,$$,$$a); labels($$a.s);
+enddef;
+
+vardef vlnka_inv(suffix $,$$)suffix modifier:=
+ vlnka_inv_points($,$$);
+ path _vlnka_inv;
+ _vlnka_inv:=z$r{z$a-z$}..z$a.r..z$$a.r..{z$$-z$$a.r}z$$r..
+ z$$l{z$$a-z$$}..z$$a.s...z$$a.l..z$a.l..{z$-z$a.l}z$l..{z$a-z$}z$r;
+ if not test.modifier: filldraw _vlnka_inv..cycle; fi;
+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;
+
+vardef whitehead(suffix $,$$,@,@@):=
+ z$'=z$+(rule_thickness-currentbreadth)*dir(bskat+180);
+ path _whp[]; numeric _wht[];
+ _whp0:=z$'{dir(bskat+180)}..{dir(bskat+160)}point bsktim12 of bskap3;
+ _whp1:=(bskap0 intersectionpoint (z@@r--z@@r+(z$-z$$))){dir(bskat+20)}..{dir(bskat)}z$';
+ (_wht0,_wht1)=(_whp0 shifted ((max(1,.5currentbreadth))*dir(bskat-90)))
+ intersectiontimes (_whp1 shifted ((max(1,.5currentbreadth))*dir(bskat+90)));
+ labels($',$'');
+ subpath(rundy(_whp1,0),rundy(_whp1,_wht1).zpet) of _whp1
+ ..subpath(rundy(_whp0,_wht0),rundy(_whp0,infinity).zpet) of _whp0
+enddef;
+
+vardef trojsipka(suffix $,$$,@,@@):=
+ sipka_points($,$$);
+ dvojsipka_points($,$$,@,@@);
+ oblu:=f_obl;
+ penlabels(@,@@);
+ bskap7=(x$$,y$d)--z$d;
+ bskap8=z$$l+(z$-z$$r)--z$$l;
+ (bsktim19,bsktim20)=bskap0 intersectiontimes bskap8;
+ subpath(0,rundy(bskap7,infinity).zpet) of bskap7..
+ subpath(rundy(bskap1,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),rundy(bskap0,bsktim19).zpet) of bskap0..
+ subpath(rundy(bskap8,bsktim20),infinity) of bskap8
+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_u:=u; _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=(u/_saved_u)*_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;
+ begingroup interim warningcheck:=0; testdpi:=(pixels_per_inch<=300); endgroup;
+ if unknown bbw: numeric bbw; bbw:=curve; fi %For blackboard-bold letters
+ 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,-max(body_depth,d)),(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_));
+ if h=0: rule((r+charic*pt,0),(r+charic*pt,-.5d.o_)); fi
+ fi % italic correction
+for y=math_axis,-d,h: rule((l-3u,y)t_,(r+3u,y)t_); endfor
+ 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/fonts/boisik/bskex10.mf b/fonts/boisik/bskex10.mf
new file mode 100644
index 0000000000..5048f1375c
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskext.mf b/fonts/boisik/bskext.mf
new file mode 100644
index 0000000000..a7af914a75
--- /dev/null
+++ b/fonts/boisik/bskext.mf
@@ -0,0 +1,9 @@
+%Boisik driver file for extensible math symbols
+mode_setup; font_setup;
+
+input bsklist-ex;
+input bsksymbols;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/fonts/boisik/bskhc10.mf b/fonts/boisik/bskhc10.mf
new file mode 100644
index 0000000000..98a6b14e29
--- /dev/null
+++ b/fonts/boisik/bskhc10.mf
@@ -0,0 +1,101 @@
+% Boisik Roman Heavy Curves 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKHC"; 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#:=-20/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#:=60/36pt#; % uppercase stem breadth
+cap_curve#:=64/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=70/36pt#;
+like_cap_curve#:=82/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;
+
+let bskboundary=endinput;
+input bsklist-ma;
+input bskletters-r;
+save chars; numeric chars[];
+
+chars.greek_Gamma_SS:=0;
+chars.greek_Delta_SS:=1;
+chars.greek_Theta_SS:=2;
+chars.greek_Lambda_SS:=3;
+chars.greek_Xi_SS:=4;
+chars.greek_Pi_SS:=5;
+chars.greek_Sigma_SS:=6;
+chars.greek_Upsilon_SS:=7;
+chars.greek_Phi_SS:=8;
+chars.greek_Psi_SS:=9;
+chars.greek_Omega_SS:=10;
+chars.greek_Heta_SS:=91;
+chars.greek_Digamma_SS:=92;
+chars.greek_Qoppa_SS:=93;
+chars.greek_Sampi_SS:=94;
+chars.greek_Varsampi_SS:=95;
+chars.greek_Stigma_SS:=127;
+
+input bskletters-o;
+
+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/fonts/boisik/bski10-TS1.mf b/fonts/boisik/bski10-TS1.mf
new file mode 100644
index 0000000000..ec354c9f0b
--- /dev/null
+++ b/fonts/boisik/bski10-TS1.mf
@@ -0,0 +1,84 @@
+% Boisik Italic 10 point Text Companion (TS1 encoding) (unsupported)
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKITC"; 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?
+
+mode_setup; font_setup;
+
+input bsklist-TS1;
+
+let bskboundary = endinput;
+input bskletters-r;
+input bskletters-i;
+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/fonts/boisik/bski10.mf b/fonts/boisik/bski10.mf
new file mode 100644
index 0000000000..834f70c0b7
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskib10.mf b/fonts/boisik/bskib10.mf
new file mode 100644
index 0000000000..29af7e9af7
--- /dev/null
+++ b/fonts/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#:=.7pt#; % 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/fonts/boisik/bskiol10.mf b/fonts/boisik/bskiol10.mf
new file mode 100644
index 0000000000..86f4b9d90d
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskital.mf b/fonts/boisik/bskital.mf
new file mode 100644
index 0000000000..f502609f43
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskiu10.mf b/fonts/boisik/bskiu10.mf
new file mode 100644
index 0000000000..7fe49ed5f7
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskiub10.mf b/fonts/boisik/bskiub10.mf
new file mode 100644
index 0000000000..afd5515056
--- /dev/null
+++ b/fonts/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#:=.7pt#; % 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/fonts/boisik/bskletters-i.mf b/fonts/boisik/bskletters-i.mf
new file mode 100644
index 0000000000..feefcf51b1
--- /dev/null
+++ b/fonts/boisik/bskletters-i.mf
@@ -0,0 +1,4111 @@
+%Boisik Latin letters in italic form
+
+def mft = -.5bar_height#*slant enddef;
+
+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;
+math_fit(mft+.5u#,ic#+.5u#);
+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;
+math_fit(-x_height#*slant,ic#);
+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 "0x2422";
+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;
+math_fit(mft,ic#);
+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;
+math_fit(mft+.5u#,ic#);
+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;
+math_fit(mft,ic#);
+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;
+math_fit(desc_depth#*slant+2u#,x_height#*slant-1.5u#);
+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 testdpi: 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;
+math_fit(.5u#,ic#-1.5u#);
+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;
+
+iff known chars.latin_g_alt:
+bskchar "The variant italic letter g";
+beginchar(chars.latin_g_alt,9u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+x1=x2; rt x2r=w-u;
+top y1=bot y4l-hair; y2=-1/2d;
+pos3(hair,-90); pos3'(stem,-150); pos4(hair,90);
+pos5(curve,180); pos6(.5[hair,stem],-90); pos7(stem,0);
+x7=x1; y7=.5bar_height;
+top y4r=h+o; rt x4=lft x1l-hair; y5=bar_height; lft x5r=u;
+bot y6r=-o; x6=x4-u;
+x3=.5[x3',x1]; lft x3'r=u; bot y3r=-d-o; y3'l=.75[y3l,y2];
+z3''=z3'l+.5stem*unitvector(z3'-z3);
+p0=z4r{left}..z5r..z6r..{up}z7r;
+p1=z3r{right}..z2r---z1r..z1l---z2l..{left}z3l..z3'l{up}..z3''..z3'r..{right}z3r;
+p2=z4l{left}..z5l..z6l..{up}z7l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0,2) of p1..subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1&cycle;
+infill p2..cycle;
+math_fit(mft+u#,ic#-u#);
+penlabels(0,1,2,3,3',4,5,6,7); labels(3'');
+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;
+math_fit(-u#,ic#);
+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;
+math_fit(-u#,ic#);
+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;
+math_fit(-u#,ic#);
+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).alt; 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;
+math_fit(-.7x_height#*slant+u#,ic#+.75u#);
+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);
+math_fit(-.7x_height#*slant+u#,ic#);
+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).alt;
+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;
+math_fit(desc_depth#*slant+u#,ic#-u#);
+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);
+math_fit(desc_depth#*slant+u#,ic#-1.5u#);
+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;
+math_fit(-u#,ic#-.5u#);
+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.5u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(-1.5u#,ic#);
+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 1/3x_height#*slant;
+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).alt; 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);
+math_fit(0,ic#);
+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).alt; 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 1/3x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,ic#);
+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;
+math_fit(mft,ic#);
+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,-y2l) scaled .5 shifted (u+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);
+math_fit(0,ic#);
+endchar;
+
+iff known chars.latin_thorn:
+bskchar "The italic letter thorn";
+beginchar(chars.latin_p,12u#,asc_height#,desc_depth#); uni "0x00FE";
+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');
+math_fit(mft,ic#-.5u#);
+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;
+math_fit(0,ic#-2u#);
+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;
+math_fit(-.5u#,ic#-.5u#);
+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;
+math_fit(-x_height#*slant,ic#-.5u#);
+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).alt; 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;
+math_fit(0,ic#);
+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');
+math_fit(-.25u#,ic#-.5u#);
+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;
+math_fit(-.25u#,ic#-.5u#);
+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 not testdpi:..z4'&z4'.. else:&z4l{up}..{down}z4r&fi z4r..z3'r..z3r---z1r..z1'r..z2r+left{dir-100}..z2'+left;
+p1=if not testdpi:z12'{z12l-z12'}.. fi z12l..z11'l..z11l---z13l..z13'l..z14l %if not testdpi:..z14'&z14'..else:
+&z14l{up}..{down}z14r&% fi
+z14r..z13'r..z13r---z11r..z11'r..z12r if not testdpi:..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 not testdpi: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');
+math_fit(.5u#,ic#-.5u#);
+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;
+math_fit(desc_depth#*slant,ic#-.5u#);
+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;
+math_fit(0,ic#-.25u#);
+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#, asc_height#, 0); uni "0x003F";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(punct_fit#,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; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5w-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5w; 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_query_query:
+bskchar "Italic double question mark";
+beginchar(chars.sign_query_query, 15u#, asc_height#, 0); uni "0x2047";
+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; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-7u)-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-8u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5(w-7u); 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;
+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) shifted (w-u-x3r,0);
+bot z100=(x5,.5dot_size); z101=z100 shifted (w-u-x3r,0);
+dot(100); dot(101);
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_query_exclam:
+bskchar "Italic question and exclamation mark";
+beginchar(chars.sign_query_exclam, 13u#, asc_height#, 0); uni "0x2048";
+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; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-4u)-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-5u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5(w-4u); 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);
+bot z7=(w-2.5u,.5dot_size); dot(7);
+penpos8(dot_size,0); pos9(hair,0); x8=x9=x7;
+y8=h-.5stem; bot y9=dot_size+stem; y9r:=y9r+.5hair;
+filldraw z8l---z9l..{.5[z8,z8r]-z9r}z9r..{z8r-z9r}z8r..cycle;
+penlabels(0,1,2,3,4,5,6,8,9);
+endchar;
+
+iff known chars.sign_exclam_query:
+bskchar "Exclamation and italic question mark";
+beginchar(chars.sign_exclam_query, 13u#, asc_height#, 0); uni "0x2049";
+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=5u; y1=.5[h,x_height]+hair; top y2r=h+o; x2=4u+.5(w-4u)-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-4u)+4u; 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);
+bot z7=(2.5u,.5dot_size); dot(7);
+penpos8(dot_size,0); pos9(hair,0); x8=x9=x7;
+y8=h-.5stem; bot y9=dot_size+stem; y9r:=y9r+.5hair;
+filldraw z8l---z9l..{.5[z8,z8r]-z9r}z9r..{z8r-z9r}z8r..cycle;
+penlabels(0,1,2,3,4,5,6,8,9);
+endchar;
+
+iff known chars.sign_interrobang:
+bskchar "Italic interrobang mark";
+beginchar(chars.sign_interrobang, 9u#, asc_height#, 0); uni "0x203D";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(punct_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0);
+pos4(curve,0); pos5(hair,90); pos6(vair,120);
+penpos7(dot_size,0); pos8(hair,0); x7=x8=x5;
+lft x1r=u; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5w-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5w; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+y7=y2+o; bot y8=dot_size+stem; y8r:=y8r+.5hair; y7l:=y2l-o;
+p0:=z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l;
+p1:=z0r{dir-120}..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r;
+p2:=reverse (z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle);
+p3:=subpath(-1,length p2-1) of p2;
+y7'=y2r+o; z7'=whatever[z8r,z7r];
+p4:=z8r--z7';
+p5:=z8l--z7l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p2;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,4) of p2;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p3;
+(tim6-3,tim7)=subpath(3,infinity) of p0 intersectiontimes subpath(0,1.75) of p3;
+(tim8,tim9)=subpath(0,3) of p1 intersectiontimes p2;
+(tim10-2,tim11)=subpath(2,3) of p1 intersectiontimes p2;
+(tim12-3,tim13)=subpath(3,4) of p1 intersectiontimes p2;
+(tim14-4,tim15)=subpath(4,6) of p1 intersectiontimes subpath(0,3) of p2;
+(tim16-2,tim17)=subpath(2,infinity) of p0 intersectiontimes p4;
+(tim18-3,tim19)=subpath(3,infinity) of p0 intersectiontimes p4;
+(tim20-3,tim21)=subpath(3,4) of p1 intersectiontimes p5;
+(tim22-4,tim23)=subpath(4,6) of p1 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..{z8r-.5[z7,z7r]}z8r..z8l
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10),rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+oblu:=1.5oblu;
+infill subpath(rundy(p0,tim16),rundy(p0,tim18).zpet) of p0
+ ..subpath(rundy(p4,tim19).zpet,rundy(p4,tim17)) of p4..cycle;
+infill subpath(rundy(p1,tim20),rundy(p1,tim22).zpet) of p1
+ ..subpath(rundy(p5,tim23),rundy(p5,tim21).zpet) of p5..cycle;
+bot z100=(x5,.5dot_size); dot(100);
+penlabels(0,1,2,3,4,5,6,7,8);
+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_gnaborretni:
+bskchar "Reversed italic interrobang mark";
+beginchar(chars.sign_gnaborretni, 9u#, asc_height#-desc_depth#, desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos0(vair,120); pos1(.45[hair,stem],0); pos2(hair,-90); pos3(curve,180);
+pos4(curve,180); pos5(hair,-90); pos6(vair,-60);
+penpos7(dot_size,180); pos8(hair,180); x7=x8=x5;
+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;
+top z100=(x5,h-.5dot_size); dot(100);
+y7=y2r-o; top y8=h-dot_size-stem; y8r:=y8r-.5hair; y7l:=y2l+o;
+p0:=z6l{dir60}..z5l..z4l..z3l{down}..z2l{right}..z1l..{dir240}z0l;
+p1:=z0r{dir60}..z1r..{left}z2r..{up}z3r..z4r..z5r..{dir240}z6r;
+p2:=reverse (z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle);
+p3:=subpath(-1,length p2-1) of p2;
+y7'=y2r-o; z7'=whatever[z8r,z7r];
+p4:=z8r--z7';
+p5:=z8l--z7l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p2;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,4) of p2;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p3;
+(tim6-3,tim7)=subpath(3,infinity) of p0 intersectiontimes subpath(0,1.75) of p3;
+(tim8,tim9)=subpath(0,3) of p1 intersectiontimes p2;
+(tim10-2,tim11)=subpath(2,3) of p1 intersectiontimes p2;
+(tim12-3,tim13)=subpath(3,4) of p1 intersectiontimes p2;
+(tim14-4,tim15)=subpath(4,6) of p1 intersectiontimes subpath(0,3) of p2;
+(tim16-2,tim17)=subpath(2,infinity) of p0 intersectiontimes p4;
+(tim18-3,tim19)=subpath(3,infinity) of p0 intersectiontimes p4;
+(tim20-3,tim21)=subpath(3,4) of p1 intersectiontimes p5;
+(tim22-4,tim23)=subpath(4,6) of p1 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..{z8r-.5[z7,z7r]}z8r..z8l
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10),rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+oblu:=1.5oblu;
+infill subpath(rundy(p0,tim16),rundy(p0,tim18).zpet) of p0
+ ..subpath(rundy(p4,tim19).zpet,rundy(p4,tim17)) of p4..cycle;
+infill subpath(rundy(p1,tim20),rundy(p1,tim22).zpet) of p1
+ ..subpath(rundy(p5,tim23),rundy(p5,tim21).zpet) of p5..cycle;
+penlabels(0,1,2,3,4,5,6,7,8);
+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/fonts/boisik/bskletters-o.mf b/fonts/boisik/bskletters-o.mf
new file mode 100644
index 0000000000..e2e274ed0c
--- /dev/null
+++ b/fonts/boisik/bskletters-o.mf
@@ -0,0 +1,6625 @@
+%Boisik letters in other forms (greek, calligraphic, one cyrilic) -- for math only!
+numeric bbs; bbs:=if cap_hair+eps>tiny-eps: 2 else 1 fi; %correction for BB letters
+def mft = -.5bar_height#*slant enddef;
+
+charscription(11u,cap_height,0)(
+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);
+);
+
+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;
+usechar;
+math_fit(0,ic#-5u#);
+endchar;
+
+iff known chars.greek_Gamma_BB:
+bskchar "The blackboard-bold Greek letter Gamma";
+beginchar(chars.greek_Gamma_BB,11u#,cap_height#,0); uni "0x213E";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.greek_Gamma_SS:
+bskchar "The sans-serif Greek letter Gamma";
+beginchar(chars.greek_Gamma_SS,11u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90);
+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; z2'=(x2r,y3l);
+oblu:=cap_hair;
+filldraw z1l.b..z1..z1r.b---obl(2',1r,3l)---z3l+cap_stem*left...z3...z3r+cap_stem*left
+ ---z2..z2l.b---cycle;
+penlabels(1,2,3); labels(2');
+math_fit(0,ic#-4u#);
+endchar;
+
+charscription(12u,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;
+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'...z6r
+ ---z5r..{dir100}z5'r---p--z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,5,5',6,6');
+);
+
+iff known chars.greek_Digamma:
+bskchar "The Greek letter Digamma";
+beginchar(chars.greek_Digamma,12u#,cap_height#,0); uni "0x03DC";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.greek_Digamma_BB:
+bskchar "The blackboard-bold Greek letter Digamma";
+beginchar(chars.greek_Digamma_BB,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.greek_Digamma_SS:
+bskchar "The sans-serif Greek letter Digamma";
+beginchar(chars.greek_Digamma_SS,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,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);
+z2'=(x2r,y3l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1..z1r.b---z5'l{dir80}..z5l---
+ z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,3l)---z3l+cap_stem*left
+ ...z3...z3r+cap_stem*left---z2..z2l.b---cycle;
+penlabels(1,2,3,5,5',6); labels(2',6');
+math_fit(0,ic#-3u#);
+endchar;
+
+charscription(14u,cap_height,0)(
+numeric alpha, right_stem, left_stem, old_jut;
+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');
+}};
+);
+
+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#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_Delta_BB:
+bskchar "The blackboard-bold Greek letter Delta";
+beginchar(chars.greek_Delta_BB,14u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+numeric oblu.more; oblu.more:=2oblu;
+bot y100=y2r.c; z100=whatever[z3l,z2r];
+infill ifobl(3',3l,2l,2r,,more)---obl(100,3l,2r.c)..z2r---obl(2l,2r,3')---cycle;
+labels(100);
+endchar;
+
+iff known chars.greek_Delta_SS:
+bskchar "The sans-serif Greek letter Delta";
+beginchar(chars.greek_Delta_SS,14u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, old_jut;
+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 z1---z2...diag_serif(2r,3l)---z3l---
+ diag_serif(1l,3l)...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;
+
+charscription(13u,cap_height,0)(
+numeric alpha, right_stem, left_stem;
+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,3');
+);
+
+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;
+usechar;
+endchar;
+
+iff known chars.greek_Delta_alt_BB:
+bskchar "The blackboard-bold Greek letter Delta alternative";
+beginchar(chars.greek_Delta_alt_BB,13u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+oblu:=2f_obl;
+infill ifobl(3'r,3l,2l,2l,,)---ifobl(2r,2l,3l,3'r,,)---cycle;
+endchar;
+
+charscription(9u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,90); pos4(cap_hair,90); pos5(ser_height,90);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+y3=y4=y5=.52h; x3=x1r.a; rt x4=w-u; x5=x1r;
+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---z5l{dir80}..z3l---z4l..z4r---z3r..{dir100}z5r
+ ---z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5);
+);
+
+iff known chars.greek_Heta:
+bskchar "The Greek letter Heta";
+beginchar(chars.greek_Heta,9u#,cap_height#,0); uni "0x0370";
+italcorr .5cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.greek_Heta_BB:
+bskchar "The blackboard-bold Greek letter Heta";
+beginchar(chars.greek_Heta_BB,9u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+iff known chars.greek_Heta_SS:
+bskchar "The sans-serif Greek letter Heta";
+beginchar(chars.greek_Heta_SS,9u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,90); pos4(cap_hair,90); pos5(ser_height,90);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+y3=y4=y5=.52h; x3=x1r.a; rt x4=w-u; x5=x1r;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1l.b..z1..z1r.b---z5l{dir80}..z3l---z4l..z4r---z3r..{dir100}z5r
+ ---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+charscription(14u,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;
+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);
+);
+
+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;
+usechar;
+math_fit(-.5cap_height#*slant+.5u#,.5cap_height#*slant);
+endchar;
+
+iff known chars.greek_Theta_BB:
+bskchar "The blackboard-bold Greek letter Theta";
+beginchar(chars.greek_Theta_BB,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_Theta_SS:
+bskchar "The sans-serif Greek letter Theta";
+beginchar(chars.greek_Theta_SS,14u#,cap_height#,0); uni "non";
+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=(x7-x6);
+filldraw z8r..z8l---z9l..z9r---cycle;
+penlabels(1,2,3,4,5,6,6',7,7',8,9);
+endchar;
+
+charscription(13u,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);
+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');
+);
+
+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#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_Lambda_BB:
+bskchar "The blackboard-bold Greek letter Lambda";
+beginchar(chars.greek_Lambda_BB,13u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+numeric oblu.more; oblu.more:=2oblu;
+bot y100=y2r.c; z100=whatever[z3l,z2r];
+infill ifobl(3',3l,2r,2l,,more)---obl(100,3l,2r.c)..z2r---obl(2l,2r,3')---cycle;
+labels(100);
+endchar;
+
+iff known chars.greek_Lambda_SS:
+bskchar "The sans-serif Greek letter Lambda";
+beginchar(chars.greek_Lambda_SS,13u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+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);
+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 z1...diag_serif(1l,3l)---z3l---
+ diag_serif(2r,3l)...z2...diag_serif(2l,3')---z3'r...z3'l---
+ diag_serif(1r,3')...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);
+math_fit(-.25u#,.5u#);
+endchar;
+
+iff known chars.greek_Xi_BB:
+bskchar "The blackboard-bold Greek letter Xi";
+beginchar(chars.greek_Xi_BB,13.5u#,cap_height#,0); uni "non";
+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, alt_cap_hair;
+ beak:=.9oldbeak; cap_jut:=if bold_face: .7\\ fi old_jut;
+ alt_cap_hair:=if .5beak>cap_stem: cap_stem else: .4beak; fi;
+ 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:=z5a{right}...z5b--z5r---z5l..{down}z5l.o&z5l.o..z5c...{left}z5d---z5e;
+}};
+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;
+p100:=subpath(0,1) of p2;
+p101:=subpath(5,infinity) of p2;
+p102:=reverse (p100 reflectedabout (z1,z2));
+p103:=reverse (p101 reflectedabout (z1,z2));
+z100=(x5l.o,.5[y5,y5b]);
+z101=z100 reflectedabout (z1,z2);
+infill subpath(0,rundy(p100,infinity).zpet) of p100..{up}z100
+ ..subpath(rundy(p101,0),infinity) of p101
+ ---subpath(0,rundy(p103,infinity).zpet) of p103..{down}z101
+ ..subpath(rundy(p102,0),infinity) of p102---cycle;
+infill (x3a,y3d)..z3a---z4a..(x4a,y4d)---cycle;
+penlabels(1,2,6,7,8,9); labels(100,101);
+endchar;
+
+iff known chars.greek_Xi_SS:
+bskchar "The sans-serif Greek letter Xi";
+beginchar(chars.greek_Xi_SS,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric ofs, tharm;
+tharm:=if ((substring(0,5) of font_identifier_) = "BSKHC"): cap_stem else: cap_hair fi;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90); pos4(cap_hair,90);
+pos5(tharm,-90); pos5'(tharm,-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-o; lft x4r=u+o;
+bot y5r=bot y5'r=0; rt x5l=w-u; lft x5'=u;
+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=(x7-x6);
+filldraw z8r..z8l---z9l..z9r---cycle;
+filldraw z4l+cap_stem*right---z3l+cap_stem*left...z3...z3r+cap_stem*left
+ ---z4r+cap_stem*right...z4...cycle;
+filldraw z5'l+cap_stem*right---z5l+cap_stem*left...z5...z5r+cap_stem*left
+ ---z5'r+cap_stem*right...z5'...cycle;
+penlabels(1,2,3,4,5,5',6,7,8,9);
+endchar;
+
+charscription(13u,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);
+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);
+);
+
+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;
+usechar;
+endchar;
+
+iff known chars.greek_Pi_BB:
+bskchar "The blackboard-bold Greek letter Pi";
+beginchar(chars.greek_Pi_BB,13u#,cap_height#,0); uni "0x213F";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+bot z102=(x3r,y3r.c); top z103=(x4r,y4r.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(102,3r.c,4r)---obl(103,3r,4r.c)...z4r---cycle;
+endchar;
+
+iff known chars.greek_Pi_SS:
+bskchar "The sans-serif Greek letter Pi";
+beginchar(chars.greek_Pi_SS,13u#,cap_height#,0); uni "non";
+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...z1...z1r.b---z2r.b..z2r.c---z4l.c..z4l.b
+ ---z3l.b...z3...z3r.b---z4r.b..
+ z4---z2r.a---z2..z2l.b---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+charscription(13u,cap_height,0)(
+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');
+);
+
+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;
+usechar;
+math_fit(0,.5bar_height#*slant);
+endchar;
+
+iff known chars.greek_Sigma_BB:
+bskchar "The blackboard-bold Greek letter Sigma";
+beginchar(chars.greek_Sigma_BB,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-1.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+y100=y101=y2; z100=whatever[z5',z2l.b]; z101=whatever[z2r.b,z5r];
+infill ifobl(5r,5',101,100,,)---ifobl(100,101,5',5r,,)---cycle;
+endchar;
+
+iff known chars.greek_Sigma_SS:
+bskchar "The sans-serif Greek letter Sigma";
+beginchar(chars.greek_Sigma_SS,13u#,cap_height#,0); uni "non";
+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); pos3(cap_hair,-90); pos4(cap_hair,90);
+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; z3'=(x1r,y3l); z2'=(x2r+oblu,y4l);
+x5r=if ((substring(0,5) of font_identifier_)="BSKHC"): .5[x4,x2r] else: .5w-o fi;
+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;
+y1'=y1l.b; z1'=z6l+whatever*(z3'-z6r);
+z5'=whatever[z2l.b,z5l]=whatever[z6l,z1'];
+filldraw z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(3',3,5r)---obl(5r,3',2r.b)---
+ z2r.b..z2'---z4l+cap_stem*left...z4...z4r+cap_stem*left---z2
+ ..z2l.b---obl(5',2l.b,1')---z1'..z1---cycle;
+penlabels(1,2,3,4,5,6); labels(1',2',3',5');
+endchar;
+
+charscription(14u,cap_height,0)(
+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');
+);
+
+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;
+usechar;
+math_fit(-x_height#*slant,ic#-4u#);
+endchar;
+
+iff known chars.greek_Upsilon_BB:
+bskchar "The blackboard-bold Greek letter Upsilon";
+beginchar(chars.greek_Upsilon_BB,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=p1;
+p101:=z4r{up}..z4'r..{down}z2l;
+z100=bsktouch(p100,right,p101,left);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(x4',y100)));
+bot z101=(x1l,y1l.c);
+oblu.f:=f_obl;
+oblu:=bbw;
+infill subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101
+ ---obl(101,2l,1l.c).f...z1l
+ ---if (x1r-x1l)>oblu: obl(1r,1l,2r) else: z1..z1r+oblu*up fi---cycle;
+labels(100,101);
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.greek_Upsilon_SS:
+bskchar "The sans-serif Greek letter Upsilon";
+beginchar(chars.greek_Upsilon_SS,14u#,cap_height#,0); uni "non";
+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...z1...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');
+math_fit(0,ic#-3u#);
+endchar;
+
+charscription(13u,cap_height,0)(
+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;
+z0=directionpoint right of p1;
+filldraw if y0<y5r.b+tiny: subpath(rundy(p3,0),rundy(p3,infinity).zpet) of fi 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);
+);
+
+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;
+usechar;
+math_fit(-.5cap_height#*slant,0);
+endchar;
+
+iff known chars.greek_Phi_BB:
+bskchar "The blackboard-bold Greek letter Phi";
+beginchar(chars.greek_Phi_BB,13u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+oblu:=f_obl;
+bot z104=(x5l,y5l.c); z105=(x6l,y6l.c);
+infill obl(6r,6l,5r)---obl(5r,6r,5l)---z5l...obl(104,5l.c,6l)---obl(105,5l,6l.c)...z6l---cycle;
+labels(100,101,102,103,104,105);
+endchar;
+
+iff known chars.greek_Phi_SS:
+bskchar "The sans-serif Greek letter Phi";
+beginchar(chars.greek_Phi_SS,12u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], thc; oblu:=2oblu;
+thc=if ((substring(0,5) of font_identifier_)="BSKHC"): cap_hair else: cap_curve fi;
+pos1(thc,0); pos2(cap_hair,90); pos3(thc,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}...z5...{up}z5r.b;
+p4:=z6r.b{up}...z6...{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;
+
+charscription(14u,cap_height,0)(
+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);
+);
+
+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;
+usechar;
+math_fit(-.7cap_height#*slant,0);
+endchar;
+
+iff known chars.greek_Psi_BB:
+bskchar "The blackboard-bold Greek letter Psi";
+beginchar(chars.greek_Psi_BB,14u#,cap_height#,0); uni "non";
+italcorr .5[x_height#,cap_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+oblu:=1.25bbw;
+p100=p1;
+p101=p2;
+p102=p5;
+p103=p6;
+z100=bsktouch(p100,bbs*down,subpath(0,1) of p101,up);
+z101=bsktouch(subpath(0,1) of p100,bbs*down,p101,up);
+z102=bsktouch(p102,bbs*up,subpath(0,1) of p103,down);
+z103=bsktouch(subpath(0,1) of p102,bbs*up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,0)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,h)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,0)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,x_height)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,h)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,0)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,h)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim106),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+oblu:=f_obl;
+bot z104=(x1l,y1l.c); z105=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(104,1l.c,2l)---obl(105,1l,2l.c)...z2l---cycle;
+labels(100,101,102,103,104,105);
+endchar;
+
+iff known chars.greek_Psi_SS:
+bskchar "The sans-serif Greek letter Psi";
+beginchar(chars.greek_Psi_SS,13u#,cap_height#,0); uni "non";
+italcorr .5[x_height#,cap_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], thc; oblu:=2oblu;
+thc=if ((substring(0,5) of font_identifier_)="BSKHC"): cap_hair else: cap_curve fi;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,90); pos4(cap_hair,90);
+pos5(thc,0); pos6(thc,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}...z1...{up}z1r.b;
+p4:=z2r.b{up}...z2...{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;
+
+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+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);
+);
+
+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;
+usechar;
+math_fit(0,.5bar_height#*slant);
+endchar;
+
+iff known chars.greek_Omega_BB:
+bskchar "The blackboard-bold Greek letter Omega";
+beginchar(chars.greek_Omega_BB,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+numeric tim[];
+oblu:=1.25bbw;
+p100:=z5'l{z1-z5}..z1l..z4l..z3l..{z6-z3}z6'l;
+p101:=z6r{z3-z6}..z3r..z4r..z1r..{z5-z1}z5r;
+z100=bsktouch(subpath(0,1) of p100,bbs*right,p101,left);
+z101=bsktouch(subpath(0,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(2,infinity) of p100,bbs*down,p101,up);
+z103=bsktouch(p100,bbs*left,subpath(0,1) of p101,right);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(x4,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,h+u)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,h+u)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y3)));
+tim106=xpart(p100 intersectiontimes (z103--(w,y103)));
+tim107=xpart(p101 intersectiontimes (z103--(x4,y103)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p100,tim104),rundy(p100,tim106).zpet) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_Omega_SS:
+bskchar "The sans-serif Greek letter Omega";
+beginchar(chars.greek_Omega_SS,14u#,cap_height#,0); uni "non";
+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);
+pos8(cap_hair,-90); pos9(cap_hair,-90);
+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; bot y7l=bot y7r=0;
+bot y8r=bot y9r=0; rt x8l=w-u; lft x9l=u;
+filldraw z5'l{z1-z5}..z1l..z4l..z3l..{z6-z3}z6'l..(x7r,y8l)---z8l+cap_stem*left
+ ...z8...z8r+cap_stem*left---z7r..z6r{z3-z6}..z3r..z4r..z1r..z5r{z5-z1}
+ ..z7l---z9r+cap_stem*right...z9...z9l+cap_stem*right---(x7l,y9l)..cycle;
+penlabels(1,2,3,4,5,5',6,6',7,8,9);
+endchar;
+
+charscription(14u,cap_height,0)(
+path p[]; numeric tim[], theta;
+pos0(cap_hair,180); pos1(cap_hair,90); pos3(cap_hair,-90); pos0'(cap_hair,180);
+lft x0r=u; y0=2/3[x_height,h]; top y1r=h+o; bot y3=0; x1=4u; x3=.5w-u;
+y0'=h-y0; x3-x0'=x1-x0;
+y2=x_height; rt x2=w-u-.5cap_curve;
+p0:=z0..z1..z2..{left}z3..z0'; theta=angle(direction 2 of p0)+90; pos2(cap_curve,theta);
+p1:=z0r..z1r..z2r..z3r{left}..z0'r;
+p2:=z0'l..z3l{right}..z2l..z1l..z0l;
+pos4(cap_hair,theta-90); pos5(cap_hair,theta-90);
+z4=p0 intersectionpoint ((0,1/2[x_height,h])--(w,1/2[x_height,h]));
+z5=p0 intersectionpoint ((0,1/2[x_height,bar_height])--(w,1/2[x_height,bar_height]));
+pos6(cap_stem,theta-100); pos7(cap_stem,theta-80);
+pos6'(.5[cap_hair,cap_stem],theta-90); pos7'(.5[cap_hair,cap_stem],theta-90);
+x4-x6=.4w; z6r=z4l+whatever*dir(theta+5);
+z7l=z5r-abs(z6r-z4l)*dir(theta+5);
+z6'l=z6l+1/3(z4l-z6l)+.5hair*dir(theta-90);
+z7'r=z7r+1/3(z5r-z7r)+.5hair*dir(theta+90);
+p3:=reverse(z4l---z6'l..z6l&z6l..z6r..z6'r---z4r);
+p4:=z5r---z7'r..z7r&z7r..z7l..z7'l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(0,0',1,2,3,4,5,6,6',7,7');
+);
+
+iff known chars.greek_Sampi:
+bskchar "The Greek letter Sampi";
+beginchar(chars.greek_Sampi,14u#,cap_height#,0); uni "0x03E0";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-x_height#*slant,0);
+endchar;
+
+iff known chars.greek_Sampi_BB:
+bskchar "The blackboard-bold Greek letter Sampi";
+beginchar(chars.greek_Sampi_BB,14u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100=subpath(1,3) of p1;
+p101=subpath(1,3) of p2;
+z100=bsktouch(subpath(0,1) of p100,bbs*down,p101,up);
+z101=bsktouch(p100,bbs*up,subpath(0,1) of p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,2h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3r-u-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.greek_Sampi_SS:
+bskchar "The sans-serif Greek letter Sampi";
+beginchar(chars.greek_Sampi_SS,13u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+pos0(cap_hair,180); pos1(cap_hair,90); pos3(cap_hair,-90); pos0'(cap_hair,180);
+lft x0r=u; y0=2/3[x_height,h]; top y1r=h+o; bot y3=0; x1=4u; x3=.5w-u;
+y0'=h-y0; x3-x0'=x1-x0;
+y2=x_height; rt x2=w-u-.5cap_curve;
+p0:=z0..z1..z2..{left}z3..z0'; theta=angle(direction 2 of p0)+90; pos2(cap_curve,theta);
+p1:=z0r..z1r..z2r..z3r{left}..z0'r;
+p2:=z0'l..z3l{right}..z2l..z1l..z0l;
+pos4(cap_hair,theta-90); pos5(cap_hair,theta-90);
+z4=p0 intersectionpoint ((0,1/2[x_height,h])--(w,1/2[x_height,h]));
+z5=p0 intersectionpoint ((0,1/2[x_height,bar_height])--(w,1/2[x_height,bar_height]));
+pos6(cap_hair,theta-100); pos7(cap_hair,theta-80);
+pos6'(cap_hair,theta-90); pos7'(cap_hair,theta-90);
+x4-x6=.4w; z6r=z4l+whatever*dir(theta+10);
+z7l=z5r-abs(z6r-z4l)*dir(theta+5);
+z6'l=z6l+1/3(z4l-z6l);
+z7'r=z7r+1/3(z5r-z7r);
+p3:=reverse(z4l---z6l&z6l..z6r---z4r);
+p4:=z5r---z7r&z7r..z7l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(0,0',1,2,3,4,5,6,6',7,7');
+endchar;
+
+charscription(14u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0); pos5(cap_stem,0); pos6(cap_stem,0);
+bot y1=bot y3=bar_height; top y2=top y4=h; bot y5=0; y6=y2l.c;
+lft x1l=lft x2l=2u; rt x3r=rt x4r=w-2u; x5=x6=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_br(3r);
+cap_serifs_bl(5l); cap_serifs_br(5r);
+{{ numeric old_jut; old_jut:=cap_jut; save cap_jut; cap_jut:=.75old_jut;
+ cap_serifs_bl(3l); 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..z2r.c---obl(6l,2r.c,5l)---z5l.b..{left}z5l.c
+ ..z5l.a{right}..z5+ser_boule*up..{right}z5r.a..z5r.c{left}..z5r.b
+ ---obl(6r,5r,4l.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,5,6);
+);
+
+iff known chars.greek_Varsampi:
+bskchar "The Archaic Greek letter Sampi";
+beginchar(chars.greek_Varsampi,14u#,cap_height#,0); uni "0x0372";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+math_fit(-bar_height#*slant,u#);
+endchar;
+
+iff known chars.greek_Varsampi_BB:
+bskchar "The blackboard-bold Archaic Greek letter Sampi";
+beginchar(chars.greek_Varsampi_BB,14u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+bot z102=(x3r,y3r.c); top z103=(x4r,y4r.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(102,3r.c,4r)---obl(103,3r,4r.c)...z4r---cycle;
+infill ifobl(6r,6l,5r,5l,,)---ifobl(5l,5r,6l,6r,,)--cycle;
+endchar;
+
+iff known chars.greek_Varsampi_SS:
+bskchar "The sans-serif Archaic Greek letter Sampi";
+beginchar(chars.greek_Varsampi_SS,14u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric thc;
+thc=if ((substring(0,5) of font_identifier_)="BSKHC"): cap_hair else: cap_stem fi;
+pos1(thc,0); pos2(thc,0);
+pos3(thc,0); pos4(thc,0); pos5(cap_stem,0); pos6(cap_stem,0);
+bot y1=bot y3=bar_height; top y2=top y4=h; bot y5=0; y6=y2l.c;
+lft x1l=lft x2l=2u; rt x3r=rt x4r=w-2u; x5=x6=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_br(3r);
+cap_serifs_bl(5l); cap_serifs_br(5r);
+{{ numeric old_jut; old_jut:=cap_jut; save cap_jut; cap_jut:=.75old_jut;
+ cap_serifs_bl(3l); cap_serifs_br(1r);
+}};
+filldraw z1l.b{down}...z1...z1r.b---z2r.b..z2r.c---obl(6l,2r.c,5l)---z5l.b...z5
+ ...z5r.b---obl(6r,5r,4l.c)---z4l.c..z4l.b---z3l.b...z3...z3r.b---z4r.b
+ ...z4---z2...z2l.b---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+charscription(14u,cap_height,desc_depth)(
+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; bot y2l=-o; top y4l=h+o;
+x5=x6=x2; y5=y2; bot y6=-d;
+cap_serifs_bl(6l); cap_serifs_br(6r);
+p0=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1=z5l---z6l.b..{left}z6l.c..{right}z6l.a..z6+ser_boule*up..{right}z6r.a..z6r.c{left}..z6r.b---z5r;
+(tim0,tim1)=p0 intersectiontimes subpath(0,1) of 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;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+);
+
+iff known chars.greek_Qoppa:
+bskchar "The Archaic Greek letter Qoppa";
+beginchar(chars.greek_Qoppa,14u#,cap_height#,desc_depth#); uni "0x03D8";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-.5cap_height#*slant,ic#-2u#);
+endchar;
+
+iff known chars.greek_Qoppa_BB:
+bskchar "The blackboard-bold Archaic Greek letter Qoppa";
+beginchar(chars.greek_Qoppa_BB,14u#,cap_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+bot z104=(x6l,y6l.c);
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+oblu:=f_obl;
+infill ifobl(5l,5r,6l,6r,,)---obl(6r,5r,6l)---z6l...obl(104,6l.c,5l)---cycle;
+labels(100,101,102,103,104);
+endchar;
+
+iff known chars.greek_Qoppa_SS:
+bskchar "The sans-serif Archaic Greek letter Qoppa";
+beginchar(chars.greek_Qoppa_SS,14u#,cap_height#,desc_depth#); uni "non";
+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; bot y2l=-o; top y4l=h+o;
+x5=x6=x2; y5=y2r; bot y6=-d;
+cap_serifs_bl(6l); cap_serifs_br(6r);
+p0=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1=z5l---z6l.b..z6..z6r.b---z5r;
+(tim0,tim1)=p0 intersectiontimes subpath(0,1) of 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;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+charscription(13.3u,cap_height,.75desc_depth)(
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(cap_stem,90); pos3(cap_hair,180); pos4(cap_hair,270);
+pos6(cap_stem,90); pos7(cap_hair,0); pos8(cap_stem,-90); pos8'(.9cap_stem,-90);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+y6=y2; rt x7r=w-u; bot y8r=-d; x7-x6=.5(y6-y8); x8=.5[x2,x6]; y7=.5[y6,y8];
+z8'r=z8r+cap_stem*right;
+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'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);
+filldraw subpath(-1,tim1) of reverse p0..z5'a--z5'b---z5'e..subpath (tim3,5) of p1
+ ---z6l..{down}z7l..z8'l..z8l..z8r---z8'r..{up}z7r..z6r---cycle;
+penlabels(1,2,3,4,6,7,8,8'); labels(5,5',5'a,5'b,5'c,5'd,5'e);
+);
+
+iff known chars.greek_Stigma:
+bskchar "The Greek letter Stigma";
+beginchar(chars.greek_Stigma,13.3u#,cap_height#,.75desc_depth#); uni "0x03DA";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-.5cap_height#*slant,0);
+endchar;
+
+iff known chars.greek_Stigma_BB:
+bskchar "The blackboard-bold Greek letter Stigma";
+beginchar(chars.greek_Stigma_BB,13.3u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=subpath(-1,1) of p0---z6r..{down}z7r;
+p101:=reverse (subpath(-1,1) of p1---z6l..{down}z7l);
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(p100,bbs*left,subpath(0,1) of p101,right);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(w,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(0,y101)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.greek_Stigma_SS:
+bskchar "The sans-serif Greek letter Stigma";
+beginchar(chars.greek_Stigma_SS,13.3u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(cap_stem,90); pos4(cap_hair,270);
+pos3(if ((substring(0,5) of font_identifier_)="BSKHC"):1.2\\fi cap_hair,180);
+pos6(cap_stem,90); pos7(cap_hair,0); pos8(cap_stem,-90); pos8'(.9cap_stem,-90);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+y6=y2; rt x7r=w-u; bot y8r=-d; x7-x6=.5(y6-y8); x8=.5[x2,x6]; y7=.5[y6,y8];
+z8'r=z8r+if ((substring(0,5) of font_identifier_)="BSKHC"):.5\\ fi cap_stem*right;
+if ((substring(0,5) of font_identifier_)="BSKHC"):
+ p0:=z1r{down}..z2r..z3r..{left}z4r..{down}cycle;
+ p1:=z1l{down}..z2l..z3l..{left}z4l..{down}cycle;
+else:
+ p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+ p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+fi
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
+tim3= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p1);
+filldraw subpath(-1,tim1) of reverse p0..subpath (tim3,5) of p1
+ ---z6l..{down}z7l..z8'l..z8l..z8r---z8'r..{up}z7r..z6r---cycle;
+penlabels(1,2,3,4,6,7,8,8');
+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'');
+math_fit(mft,.5u#);
+endchar;
+
+iff known chars.greek_alpha_BB:
+bskchar "The blackboard-bold Greek letter alpha";
+beginchar(chars.greek_alpha_BB,10.5u#,x_height#,0); uni "non";
+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(cap_stem,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;
+lft x3=.5x2; lft 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;
+p100=subpath(3,5) of p0;
+p101=subpath(5,7) of p1;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3r-u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y5r+u+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(8',8'',100,101);
+endchar;
+
+iff known chars.greek_alpha_SS:
+bskchar "The sans-serif Greek letter alpha";
+beginchar(chars.greek_alpha_SS,10.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,0); pos1(.5[stem,hair],0); pos2(.5[stem,hair],0);
+pos3(hair,-90); pos4(curve,180); pos5(hair,90);
+pos6(hair,0); pos7(hair,0); pos8(stem,180);
+top y0l=h; x0r=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=.75bar_height; x6=x2;
+x7=w-u; bot y7l=-o; lft x8l=w-u; y8=.75curve;
+z8'=z8+.2stem*right+o*up; z8''=z8+.5(stem-currentbreadth)*dir225;
+p0=z0r..z1r...z2r..z3r..z4r..z5r..z6r..{z7-z6}z7r;
+p1=z7l{z6-z7}..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-4)=subpath(4,infinity) of p0 intersectiontimes subpath (3,infinity) of p1;
+(tim6,tim7-4)=subpath(0,3) of p1 intersectiontimes subpath (4,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'');
+math_fit(desc_depth#*slant,ic#);
+endchar;
+
+iff known chars.greek_beta_BB:
+bskchar "The blackboard-bold Greek letter beta";
+beginchar(chars.greek_beta_BB,9.5u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(.8cap_stem,180); pos2(.8cap_stem,180);
+pos3(hair,90); pos4(stem,0); pos5(hair,180); pos5'(hair,120); pos5''(.5[hair,stem],-30);
+pos6(cap_stem,-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..z1+tiny*down..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+p100=subpath(0,2) of p0;
+p101=subpath(7,infinity) of p1;
+p102=subpath(5,infinity) of p0;
+p103=subpath(0,4) of p1;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3r+u)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p102 intersectiontimes (z101--(x101,-d)));
+tim103=xpart(p103 intersectiontimes (z101--(x101,y6)));
+oblu:=.8bbw;
+infill subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101..z1+tiny*down..cycle;
+infill subpath(rundy(p0,tim1),rundy(p0,tim102+5).zpet) of p0
+ ..subpath(rundy(p103,tim103),rundy(p103,tim2).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,5,5',5'',6,7,8); labels(8',8'',100,101);
+endchar;
+
+iff known chars.greek_beta_SS:
+bskchar "The sans-serif Greek letter beta";
+beginchar(chars.greek_beta_SS,9u#,asc_height#,desc_depth#); uni "non";
+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(hair,-90);
+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; y8r=y7r;
+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..{right}z8l;
+p1=z8l---z7l..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'');
+math_fit(desc_depth#*slant,ic#);
+endchar;
+
+iff known chars.greek_varbeta:
+bskchar "The Greek letter beta---alternative";
+beginchar(chars.greek_varbeta,9.5u#,asc_height#,0); uni "0x03D0";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,90); pos3(hair,0); pos4(hair,180);
+pos4'(hair,120); pos4''(.5[hair,stem],-30);
+pos5(curve,-30); pos6(hair,-90);
+lft x1r=u; y1=.5h;
+x2=x4=.5w-.5stem; top y2r=h+o; rt x3r=w-2.5u; rt x5r=w-u;
+y4=.25[x_height,bar_height]; y3=.5[x_height,h]; y5=.5[y4,0];
+x6=.5[x1l,x5]; bot y6r=-o;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x3-x4);
+p0=z1r..z2r..z3r..z4''r..z4r..z4'r..z5r..{left}z6r..cycle;
+p1=z1l..z6l{right}..z5l..z4'l..z4l..z4''l..z3l..z2l..cycle;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,length p0) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,length p1) of p1;
+tim4-2=xpart(subpath(2,4) of p0 intersectiontimes p1);
+(tim5-5,tim6-4)=subpath(5,length p0) of p0 intersectiontimes subpath (4,length p1) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,length p1) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),length p0) of p0&cycle;
+infill subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),length p1) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6);
+math_fit(-.5asc_height#*slant,ic#);
+endchar;
+
+iff known chars.greek_varbeta_BB:
+bskchar "The blackboard-bold Greek letter beta---alternative";
+beginchar(chars.greek_varbeta_BB,10u#,asc_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,180); pos2(hair,90); pos3(hair,0); pos4(hair,180);
+pos4'(hair,120); pos4''(.5[hair,stem],-30);
+pos5(cap_stem,-30); pos6(hair,-90);
+lft x1r=u; y1=.5h;
+x2=x4=.5w; top y2r=h+o; rt x3r=w-2.5u; rt x5r=w-u;
+y4=.25[x_height,bar_height]; y3=.5[x_height,h]; y5=.5[y4,0];
+x6=.5[x1l,x5]; bot y6r=-o;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x3-x4);
+p0=z1r..z2r..z3r..z4''r..z4r..z4'r..z5r..{left}z6r..cycle;
+p1=z1l..z6l{right}..z5l..z4'l..z4l..z4''l..z3l..z2l..cycle;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,length p0) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,length p1) of p1;
+tim4-2=xpart(subpath(2,4) of p0 intersectiontimes p1);
+(tim5-5,tim6-4)=subpath(5,length p0) of p0 intersectiontimes subpath (4,length p1) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,length p1) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),length p0) of p0&cycle;
+infill subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),length p1) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+p100=subpath(-1,1) of p0;
+p101=subpath(-1,1) of p1;
+p102=subpath(5,infinity) of p0;
+p103=subpath(0,3) of p1;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,2h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6r-u-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,-d)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y5)));
+oblu:=.8bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+infill subpath(rundy(p0,tim1),rundy(p0,tim104+5).zpet) of p0
+ ..subpath(rundy(p103,tim105),rundy(p103,tim2).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6); labels(100,101,102);
+endchar;
+
+iff known chars.greek_varbeta_SS:
+bskchar "The sans-serif Greek letter beta---alternative";
+beginchar(chars.greek_varbeta_SS,9.5u#,asc_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,90); pos3(hair,0); pos4(hair,180);
+pos4'(hair,120); pos4''(.5[hair,stem],-30);
+pos5(curve,-30); pos6(hair,-90);
+lft x1r=u; y1=.5h;
+x2=x4=.5w-.5stem; top y2r=h+o; rt x3r=w-2.5u; rt x5r=w-u;
+y4=.25[x_height,bar_height]; y3=.5[x_height,h]; y5=.5[y4,0];
+x6=.5[x1l,x5]; bot y6r=-o;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x3-x4);
+p0=z1r..z2r..z3r..z4''r..z4r..z4'r..z5r..{left}z6r..cycle;
+p1=z1l..z6l{right}..z5l..z4'l..z4l..z4''l..z3l..z2l..cycle;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,length p0) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,length p1) of p1;
+tim4-2=xpart(subpath(2,4) of p0 intersectiontimes p1);
+(tim5-5,tim6-4)=subpath(5,length p0) of p0 intersectiontimes subpath (4,length p1) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,length p1) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),length p0) of p0&cycle;
+infill subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),length p1) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6);
+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');
+math_fit(-bar_height#*slant-.5u#,0);
+endchar;
+
+iff known chars.greek_gamma_BB:
+bskchar "The blackboard-bold Greek letter gamma";
+beginchar(chars.greek_gamma_BB,11u#,x_height#,desc_depth#); uni "0x213D";
+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(4,rundy(p0,tim4).zpet) of p0 shifted ((cap_stem-hair-currentbreadth)*left)
+ ..z1l..z0l&z0l..z0'..cycle;
+infill subpath(rundy(p1,1),rundy(p1,tim2).zpet) of p1..subpath(rundy(p0,tim3),4) of p0..subpath(4,rundy(p0,6).zpet) of p0 shifted ((cap_stem-hair-currentbreadth)*left)..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0');
+endchar;
+
+iff known chars.greek_gamma_SS:
+bskchar "The sans-serif Greek letter gamma";
+beginchar(chars.greek_gamma_SS,11u#,x_height#,desc_depth#); uni "non";
+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; x3r=x6l; 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,1).zpet) of p1---z3r..z4r...z5r---z2l
+ ..subpath(rundy(p1,5),infinity) of p1..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=4/3(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'');
+math_fit(-.5u#,ic#-3u#);
+endchar;
+
+iff known chars.greek_digamma:
+bskchar "The Greek letter digamma";
+beginchar(chars.greek_digamma,9u#,x_height#,desc_depth#); uni "0x03DD";
+italcorr x_height#*slant-.5u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(hair,0); pos2(hair,0); pos3(curve,100);
+pos3'(stem,90); pos4(stem,90); pos5(curve,90); pos5'(stem,80);
+lft x1l=lft x2l=u; bot y1=-d; top y2=h-hair; top y3r=top y3'r=h; rt x3l=w-1.25u;
+x3'=1/3[x2,x3]; x4=x1r; y4=.25bar_height; y5'r=y4r; y5=y5';
+x5-x4=.85(x3-x2); x5'=1/3[x4,x5];
+y2r:=y2r-stem+currentbreadth;
+bskpoints(1,2,0,hair);
+filldraw z1l---obl(2l,1l,3'r)---z3'r..{dir-10}z3r..{dir200}z3l..z3'l
+ ---obl(2r,3'l,1r)---obl(4r,2r,5'r)---z5'r..{right}z5r..z5l{dir190}
+ ..z5'l---obl(4l,5'l,1r)---z1rr..cycle;
+penlabels(1,2,3,3',4,5,5'); labels(1rr);
+math_fit(0,-.5u#);
+endchar;
+
+iff known chars.greek_digamma_BB:
+bskchar "The blackboard-bold Greek letter digamma";
+beginchar(chars.greek_digamma_BB,9.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(curve,100);
+pos3'(stem,90); pos4(stem,90); pos5(curve,90); pos5'(stem,80);
+lft x1l=lft x2l=u; bot y1=-d; top y2=h-hair; top y3r=top y3'r=h; rt x3l=w-1.25u;
+x3'=1/3[x2,x3]; x4=x1r; y4=.25bar_height; y5'r=y4r; y5=y5';
+x5-x4=.85(x3-x2); x5'=1/3[x4,x5];
+y2r:=y2r-stem+currentbreadth;
+bskpoints(1,2,0,hair);
+filldraw z1l---obl(2l,1l,3'r)---z3'r..{dir-10}z3r..{dir200}z3l..z3'l
+ ---obl(2r,3'l,1r)---obl(4r,2r,5'r)---z5'r..{right}z5r..z5l{dir190}
+ ..z5'l---obl(4l,5'l,1r)---z1rr..cycle;
+penlabels(1,2,3,3',4,5,5'); labels(1rr);
+z100=(x2r,y2);
+infill ifobl(2l,2r,1l,1r,,)---z1rr..z1l---cycle;
+endchar;
+
+iff known chars.greek_digamma_SS:
+bskchar "The sans-serif Greek letter digamma";
+beginchar(chars.greek_digamma_SS,9u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(hair,0); pos2(hair,0); pos3(curve,100);
+pos3'(stem,90); pos4(stem,90); pos5(curve,90); pos5'(stem,80);
+lft x1l=lft x2l=u; bot y1=-d; top y2=h-.2hair; top y3r=top y3'r=h; rt x3l=w-1.25u;
+x3'=1/3[x2,x3]; x4=x1r; y4=.25bar_height; y5'r=y4r; y5=y5';
+x5-x4=.85(x3-x2); x5'=1/3[x4,x5];
+y2r:=y2r-stem+currentbreadth;
+bskpoints(1,2,0,hair);
+filldraw z1l---obl(2l,1l,3'r)---z3'r..{dir-10}z3r..{dir200}z3l..z3'l
+ ---obl(2r,3'l,1r)---obl(4r,2r,5'r)---z5'r..{right}z5r..z5l{dir190}
+ ..z5'l---obl(4l,5'l,1r)---z1rr..cycle;
+penlabels(1,2,3,3',4,5,5'); labels(1rr);
+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'');
+math_fit(mft,u#);
+endchar;
+
+iff known chars.greek_delta_BB:
+bskchar "The blackboard-bold Greek letter delta";
+beginchar(chars.greek_delta_BB,9.5u#,asc_height#,0); uni "non";
+italcorr .5[x_height#,asc_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270); pos5(hair,180);
+pos6(.8cap_stem,180); pos7(hair,180); pos8(hair,90); pos9(stem,0);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x1,x3]=lft 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;
+p100=subpath(4,6) of p1;
+p101=subpath(0,3) of (z4r..{down}z1r..z2r..z5l..cycle);
+p102=subpath(1,4) of p1;
+p103=subpath(0,2) of p0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,up,p101,down);
+z103=bsktouch(p102,left,p103,right);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y4l+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(if boldmath:x2 else:x102 fi,y2l-5)));
+tim105=xpart(p101 intersectiontimes (z102--(if boldmath:x2 else:x102 fi,y1)));
+tim106=xpart(p102 intersectiontimes (z103--(w,y103)));
+tim107=xpart(p103 intersectiontimes (z103--(0,y103)));
+tim108=xpart(p103 intersectiontimes ((x2,y3)--(w,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim106),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p101,tim105),rundy(p101,3).zpet) of p101
+ ..subpath(rundy(p103,tim108),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(9',9'',100,101,102,103);
+endchar;
+
+iff known chars.greek_delta_SS:
+bskchar "The sans-serif Greek letter delta";
+beginchar(chars.greek_delta_SS,9u#,asc_height#,0); uni "non";
+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(hair,90);
+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; top y9r=bot y8r;
+p0=z3r..z6r..z7r..{right}z8r---z9r..z9l---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);
+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);
+math_fit(mft,ic#-u#);
+endchar;
+
+iff known chars.greek_epsilon_BB:
+bskchar "The blackboard-bold Greek letter epsilon";
+beginchar(chars.greek_epsilon_BB,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(hair,90); pos3(cap_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;
+p100=subpath(8,10) of p0;
+p101=subpath(1,3) of p0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4r-u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2r+u+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(1',1'',7ll,100,101);
+endchar;
+
+iff known chars.greek_epsilon_SS:
+bskchar "The sans-serif Greek letter epsilon";
+beginchar(chars.greek_epsilon_SS,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); 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; top y1r=y2r;
+y3=bar_height-.5stem;
+x4=x2+o; bot y4r=-o;
+rt x5=w-u; y5=.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{up}..z2l...{right}z1l..z1r{left}...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(7ll);
+endchar;
+
+iff known chars.greek_epsilon_turned:
+bskchar "The turned Greek letter epsilon";
+beginchar(chars.greek_epsilon_turned,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,-90); pos3(stem,0);
+pos4(hair,90); pos5(vair,135);
+pos6(hair,-90); pos7(hair,-90);
+lft x1=u; bot y2r=-o; x2=.5w-u; rt x3r=w-u;
+y3=x_height-bar_height+.5stem; y1=x_height-.35[x_height,bar_height];
+x4=x2-o; top y4r=h+o;
+lft x5=u; y5=x_height-.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+z1'=z1+.2stem*up+o*right; z1''=z1+.5(stem-currentbreadth)*dir225;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{down}..z2l..{up}z1l..z1'..z1r..z1''..z2r..{up}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);
+math_fit(-.5u#,.5u#);
+endchar;
+
+iff known chars.greek_epsilon_turned_BB:
+bskchar "The blackboard-bold turned Greek letter epsilon";
+beginchar(chars.greek_epsilon_turned_BB,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,-90); pos3(cap_stem,0);
+pos4(hair,90); pos5(vair,135);
+pos6(hair,-90); pos7(hair,-90);
+lft x1=u; bot y2r=-o; x2=.5w-u; rt x3r=w-u;
+y3=x_height-bar_height+.5stem; y1=x_height-.35[x_height,bar_height];
+x4=x2-o; top y4r=h+o;
+lft x5=u; y5=x_height-.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+z1'=z1+.2stem*up+o*right; z1''=z1+.5(stem-currentbreadth)*dir225;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{down}..z2l..{up}z1l..z1'..z1r..z1''..z2r..{up}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;
+p100=subpath(8,10) of p0;
+p101=subpath(1,3) of p0;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4r+u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2r-u-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(1',1'',7ll,100,101);
+endchar;
+
+iff known chars.greek_epsilon_turned_SS:
+bskchar "The sans-serif turned Greek letter epsilon";
+beginchar(chars.greek_epsilon_turned_SS,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,-90); pos2(hair,-90); pos3(stem,0);
+pos4(hair,90); pos5(vair,135);
+pos6(hair,-90); pos7(hair,-90);
+lft x1=u; bot y2r=-o; x2=.5w-u; rt x3r=w-u; bot y1r=y2r;
+y3=x_height-bar_height+.5stem;
+x4=x2-o; top y4r=h+o;
+lft x5=u; y5=x_height-.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{down}..z2l...{left}z1l..z1r{right}...z2r..{up}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(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'');
+math_fit(mft,ic#-u#);
+endchar;
+
+iff known chars.greek_varepsilon_BB:
+bskchar "The blackboard-bold Greek letter epsilon---alternative";
+beginchar(chars.greek_varepsilon_BB,8u#,x_height#,0); uni "non";
+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,cap_stem],180);
+pos4(hair,0); pos4'(hair,60); pos4''(.5[hair,stem],-150);
+pos5(cap_stem,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; 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+if boldmath: .75 else: .5\\fi(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;
+p100=subpath(8,10) of p1;
+p101=subpath(1,4) of p0;
+p102=subpath(4,6) of p1;
+p103=subpath(5,7) of p0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6r-u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+tim102=xpart(p100 intersectiontimes ((0,y4)--(x4',y4)));
+tim103=xpart(p101 intersectiontimes ((0,y4)--(x4',y4)));
+tim104=xpart(p102 intersectiontimes (z101--(x101,y2r+u+5)));
+tim105=xpart(p103 intersectiontimes (z101--(x101,y3)));
+tim106=xpart(p102 intersectiontimes ((0,y4)--(x4',y4)));
+tim107=xpart(p103 intersectiontimes ((0,y4)--(x4',y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+oblu:=.5bbw;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'',100,101);
+endchar;
+
+iff known chars.greek_varepsilon_SS:
+bskchar "The sans-serif Greek letter epsilon---alternative";
+beginchar(chars.greek_varepsilon_SS,8u#,x_height#,0); uni "non";
+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}..z1r{up}..z2r..{down}z3r..z4''r..{up}z4r..z4'r..{down}z5r..z6r..z7r;
+(tim0,tim1-5)=subpath(0,6) of p1 intersectiontimes subpath (5,infinity) of p1;
+(tim2,tim3-3)=p0 intersectiontimes subpath(3,5) 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'');
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_zeta_BB:
+bskchar "The blackboard-bold Greek letter zeta";
+beginchar(chars.greek_zeta_BB,9u#,asc_height#,.5desc_depth#); uni "non";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(.8cap_stem,180); pos0(hair,0); pos7(hair,180);
+pos3(cap_stem,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; top y3=.5bar_height-.5d+.25cap_stem;
+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;
+p100=subpath(3,6) of p0;
+p101=subpath(2,5) of p1;
+z100=bsktouch(p100,dir15,p101,dir-135);
+z101=bsktouch(p100,dir-45,p101,dir135);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y7)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',0'',6',6'',100,101);
+endchar;
+
+iff known chars.greek_zeta_SS:
+bskchar "The sans-serif Greek letter zeta";
+beginchar(chars.greek_zeta_SS,9u#,asc_height#,.5desc_depth#); uni "non";
+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(hair,90);
+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; x7=x1-stem; top y7=h;
+x8=.5[x1,x0]; .5[y8,y1]=y0;
+p0=z7r{down}..z8r..z0r..z1r..z2r..z3r..z4r..z5r---z6r;
+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'');
+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(0,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);
+math_fit(-u#,.5u#);
+endchar;
+
+iff known chars.greek_eta_BB:
+bskchar "The blackboard-bold Greek letter eta";
+beginchar(chars.greek_eta_BB,9.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(.8cap_stem,0); pos4(.8cap_stem,0);
+pos5(.8cap_stem,180); pos6(.8cap_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;
+p100=subpath(1,3) of p0;
+p101=subpath(0,2) of p1;
+p102=subpath(7,9) of p0;
+p103=subpath(10,12) of p0;
+z100=bsktouch(p100,dir45,p101,dir-135);
+z101=bsktouch(p102,dir45,p103,dir-135);
+tim100=xpart(p100 intersectiontimes (z100--z1));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+u+5)));
+tim102=xpart(p102 intersectiontimes (z101--(x101-1,y5)));
+tim103=xpart(p103 intersectiontimes (z101--(x101-1,y2r+u+5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),infinity) of p100..z4'
+ ..subpath(0,rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim102),infinity) of p102
+ ..subpath(0,rundy(p103,tim103).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,10); labels(6ll,100,101);
+endchar;
+
+iff known chars.greek_eta_SS:
+bskchar "The sans-serif Greek letter eta";
+beginchar(chars.greek_eta_SS,9.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,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=z2l{right}..z3l---z4l...z4'...z4r---z3r..z7r..z5r
+ ---z6r..z6ll---z5l..z7l..z3l;
+p1=z4r---z3r..{left}z2r;
+(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_heta:
+bskchar "The Greek letter heta";
+beginchar(chars.greek_heta,8u#,x_height#,0); uni "0x0371";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
+pos5(bar,90); pos6(bar,90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=3u;
+y3=y1-hair=y5=y6=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+x5=x3r; rt x6=w-u;
+p0=z1l{z1-z4}..z2l..z3l---z4l...z4'...z4r---obl(5l,4r,6l)---z6l..z6r---z5r+oblu*right;
+p1=z4r---z3r..z2r..{z4-z1}z1r;
+filldraw p0..subpath(rundy(p1,1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4');
+math_fit(-u#,.5u#);
+endchar;
+
+iff known chars.greek_heta_BB:
+bskchar "The blackboard-bold Greek letter heta";
+beginchar(chars.greek_heta_BB,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(.8cap_stem,0); pos4(.8cap_stem,0);
+pos5(bar,90); pos6(bar,90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=3u;
+y3=y1-hair=y5=y6=bar_height;
+z2=z1+whatever*dir70; y4=cap_hair; z4'=(x4r,y4r-hair);
+x5=x3r; rt x6=w-u;
+p0=z1l{z1-z4}..z2l..z3l---z4l...z4'...z4r---obl(5l,4r,6l)---z6l..z6r---z5r+oblu*right;
+p1=z4r---z3r..z2r..{z4-z1}z1r;
+filldraw p0..subpath(rundy(p1,1),infinity) of p1..cycle;
+p100=subpath(1,3) of p0;
+p101=subpath(0,2) of p1;
+z100=bsktouch(p100,dir45,p101,dir-135);
+tim100=xpart(p100 intersectiontimes (z100--z1));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+u+5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),infinity) of p100..z4'
+ ..subpath(0,rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6); labels(4',100);
+endchar;
+
+iff known chars.greek_heta_SS:
+bskchar "The sans-serif Greek letter heta";
+beginchar(chars.greek_heta_SS,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
+pos5(bar,90); pos6(bar,90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=3u;
+y3=y1-hair=y5=y6=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+x5=x3r; rt x6=w-u;
+p0=z2l{right}..z3l---z4l...z4'...z4r---obl(5l,4r,6l)---z6l..z6r---z5r+oblu*right;
+p1=z4r---z3r..{left}z2r;
+filldraw p0..subpath(rundy(p1,1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4');
+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(0,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);
+math_fit(-u#,.5u#);
+endchar;
+
+charscription(9.5u,asc_height,0)(
+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);
+);
+
+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;
+usechar;
+math_fit(-.5asc_height#*slant,ic#-1.5u#);
+endchar;
+
+iff known chars.greek_theta_SS:
+bskchar "The sans-serif Greek letter theta";
+beginchar(chars.greek_theta_SS,9.5u#,asc_height#,0); uni "non";
+italcorr .75asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_theta_BB:
+bskchar "The blackboard-bold Greek letter theta";
+beginchar(chars.greek_theta_BB,9.75u#,asc_height#,0); uni "non";
+italcorr .75asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(.8cap_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;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6,7); labels(100,101,102,103);
+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);
+math_fit(-bar_height#*slant+.25u#,ic#-u#);
+endchar;
+
+iff known chars.greek_vartheta_BB:
+bskchar "The blackboard-bold Greek letter theta---alternative";
+beginchar(chars.greek_vartheta_BB,10u#,asc_height#,0); uni "non";
+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(cap_stem,180); pos7(hair,-90);
+pos8(hair,-30); pos8'(hair,30); pos9(hair,90);
+top y2r=x_height; bot y5l=-o; rt 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;
+p100=subpath(4,6) of p0;
+p101=subpath(2,4) of p1;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--z8));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y7l+u+5)));
+tim102=xpart(p100 intersectiontimes (z101--z3));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5l-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(100,101);
+endchar;
+
+iff known chars.greek_vartheta_SS:
+bskchar "The sans-serif Greek letter theta---alternative";
+beginchar(chars.greek_vartheta_SS,9u#,asc_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,0); 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 y2=x_height; bot y5l=-o; x5=.5[x3,x6];
+if boldmath:lft x4l=x3l; else: x4l=x3; fi;
+lft x1l=.5u; x3l-x1r=max(curve,1.5u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+x2l=x3l;
+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=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;
+(tim0,tim1)=subpath(0,5) of p0 intersectiontimes subpath(0,1) of p1;
+(tim2-2,tim3-6)=subpath(2,infinity) of p1 intersectiontimes subpath(6,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-6=ypart(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
+ ..{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);
+math_fit(-x_height#*slant+u#,0);
+endchar;
+
+iff known chars.greek_iota_BB:
+bskchar "The blackboard-bold Greek letter iota";
+beginchar(chars.greek_iota_BB,6.5u#,x_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[];
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.9cap_stem,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; lft 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;
+numeric tim[];
+p100=subpath(0,4) of (z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l..z3l..{up}z4r);
+p101=subpath(1,infinity) of (z4l{down}..z3r..p0);
+z100=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3l-2u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(tim100,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*down..cycle;
+penlabels(1,2,2',3,4); labels(100);
+endchar;
+
+iff known chars.greek_iota_SS:
+bskchar "The sans-serif Greek letter iota";
+beginchar(chars.greek_iota_SS,6u#,x_height#,0); uni "non";
+adjust_fit(-.5u#,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);
+p0=z2r..z2'r..z1r;
+filldraw z1r{left}..{down}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_iota_turned:
+bskchar "The turned Greek letter iota";
+beginchar(chars.greek_iota_turned,6u#,x_height#,0); uni "0x2129";
+adjust_fit(serif_fit#,0);
+italcorr x_height#*slant;
+pickup tiny.nib;
+path p[];
+pos1(stem,180); pos2(stem,180); pos2'(1.1stem,180);
+pos3(hair,-90); pos4(hair,180);
+rt x1l=x2l=w-1.5u; bot y1=0; y2=.5(x_height+y4); y2'=x_height-bar_height; x2'l=.25[x1,x1l];
+lft x4r=u; bot y4=x_height-.5bar_height; top y3l=h; x3=.5[x4,x2];
+z1a=z1l+(jut,.5serif_drop); z1b=(x1l,y1a+.25serif_drop); 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..{down}z4r..{up}z4l..z3r..p0&cycle;
+penlabels(1,2,2',3,4); labels(1a,1b);
+math_fit(-bar_height#*slant,ic#-.75u#);
+endchar;
+
+iff known chars.greek_iota_turned_BB:
+bskchar "The blackboard-bold turned Greek letter iota";
+beginchar(chars.greek_iota_turned_BB,6u#,x_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+italcorr x_height#*slant;
+pickup tiny.nib;
+path p[];
+pos1(.8cap_stem,180); pos2(.8cap_stem,180); pos2'(.9cap_stem,180);
+pos3(hair,-90); pos4(hair,180);
+rt x1l=x2l=w-1.5u; bot y1=0; y2=.5(x_height+y4); y2'=x_height-bar_height; x2'l=.25[x1,x1l];
+lft x4r=u; bot y4=x_height-.5bar_height; top y3l=h; x3=.5[x4,x2];
+z1a=z1l+(jut,.5serif_drop); z1b=(x1l,y1a+.25serif_drop); 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..{down}z4r..{up}z4l..z3r..p0&cycle;
+numeric tim[];
+p100=subpath(0,4) of (z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l..z3l..{down}z4r);
+p101=subpath(1,infinity) of (z4l{up}..z3r..p0);
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3l+2u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(tim100,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*up..cycle;
+penlabels(1,2,2',3,4); labels(1a,1b,100);
+endchar;
+
+iff known chars.greek_iota_turned_SS:
+bskchar "The sans-serif turned Greek letter iota";
+beginchar(chars.greek_iota_turned_SS,6u#,x_height#,0); uni "non";
+adjust_fit(0,-.5u#);
+italcorr x_height#*slant;
+pickup tiny.nib;
+path p[];
+pos1(stem,180); pos2(stem,180); pos2'(1.1stem,180);
+pos3(hair,-90); pos4(hair,180);
+rt x1l=x2l=w-1.5u; bot y1=0; y2=.5(x_height+y4); y2'=x_height-bar_height; x2'l=.25[x1,x1l];
+lft x4r=u; bot y4=x_height-.5bar_height; top y3l=h; x3=.5[x4,x2];
+z1a=z1l+(jut,.5serif_drop); z1b=(x1l,y1a+.25serif_drop);
+p0=z2r..z2'r..z1r;
+filldraw z1r{right}..z1.b{up}..z2'l
+ ..{-direction 0 of p0}z2l..z3l..{down}z4r..{up}z4l..z3r..p0&cycle;
+penlabels(1,2,2',3,4); labels(1a,1b);
+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_kappa_BB:
+bskchar "The blackboard-bold Greek letter kappa";
+beginchar(chars.greek_kappa_BB,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.9cap_stem,0);
+pos3(hair,-90); pos4(hair,-90); pos5(.8cap_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; rt x3=.4[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+(.8cap_stem-currentbreadth)*right---z2'l+(.8cap_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;
+p100=subpath(0,4) of (z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l..z3l..{z4-z3}z4l);
+p101=subpath(1,infinity) of (z4r{z3-z4}..z3r..p0);
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2')));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3r-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(tim100,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*down..cycle;
+penlabels(1,2,2',2'',3,4,5,6,6',7); labels(7',7'',100);
+endchar;
+
+iff known chars.greek_kappa_SS:
+bskchar "The sans-serif Greek letter kappa";
+beginchar(chars.greek_kappa_SS,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(-.5u#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(stem,0); 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; x3r=x2;
+bot y5=0; rt x5r=w-u; serifs_br(5r); z5'b=z5r.b+(hair-currentbreadth)*right;
+drop_serif(1,jut);
+pos6(hair,120); top y7r=h+o; x6=.5[x7,x2];
+pos7(hair,120);
+rt x7r=w-.75u; z7=z6+whatever*dir30;
+pos2''(.5[hair,stem],angle(z6l-z2'r)+90); z2''r=z2'r;
+p0=z2r..z2'r..z1r;
+p1=z2''l{right}...z6l...z7l&z7l{dir30}..z7r&z7r...z6r...{left}z2''r;
+p3:=diag_serif(5r,2'l);
+p2=z2'l---z5r
+ ..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{left}..{down}z1.b
+ ..z2'l..{-direction 0 of p0}z2l...z3l..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,7);
+endchar;
+
+iff known chars.greek_varkappa:
+bskchar "The Greek letter kappa---alternative";
+beginchar(chars.greek_varkappa,12u#,x_height#,0); uni "0x03F0";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], theta; path p[]; oblu:=2oblu;
+x1=2u+.5stem; x2=w-2u-.5stem; bot y1=.4stem; top y2=h+o-.5stem;
+lft bot z1'r=(u,0); rt top z2'l=(w-u,h);
+theta:=angle(z2-z1);
+pos1(.8stem,theta-90); pos2(stem,theta-90);
+pos1'(stem,-90); pos2'(stem,-90);
+pos3(hair,theta-90); pos4(curve,75); pos5(hair,theta+90);
+pos6(hair,theta-90); pos7(curve,105); pos8(hair,theta+90);
+z3r=z1l; top y4r=h+o; x4=2u; lft x5r=u; y4-y5=1.2(x4-x5);
+z6l=z2r; bot y7l=-o; x7=w-x4; rt x8l=w-u; y8-y7=1.2(x8-x7);
+p0:=z1'l..z1l{dir(theta+10)}..{dir(theta-10)}z2l..z2'l..z2'r..z2r{dir(theta+170)}..{dir(theta+190)}z1r..z1'r..cycle;
+p1:=z3l{dir(theta+10)}..z4l{left}..{down}z5l--z5r{up}..z4r{right}..{dir(theta+180)}z3r;
+p2:=z6r{dir(theta+190)}..{right}z7r..{up}z8r..{down}z8l..z7l{left}..{dir(theta)}z6l;
+z10=bsktouch(subpath(3,infinity) of p1,right,p0,up);
+z11=bsktouch(subpath(5,infinity) of p0,right,subpath(1,infinity) of p2,up);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z10--(x10,0)));
+tim1-1=xpart(subpath(1,infinity) of p1 intersectiontimes (z10--(0,y10)));
+tim2-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z11--(w,bar_height)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z11--(x11,h)));
+filldraw subpath(rundy(p1,0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,5).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),length p0) of p0..cycle;
+penlabels(1,1',2,2',3,4,5,6,7,8); labels(10,11,12,13);
+math_fit(-.5u#,0);
+endchar;
+
+iff known chars.greek_varkappa_BB:
+bskchar "The blackboard-bold Greek letter kappa---alternative";
+beginchar(chars.greek_varkappa_BB,12u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], theta; path p[]; oblu:=2oblu;
+x1=2u+.4cap_stem; x2=w-2u-.4cap_stem; bot y1=.4cap_stem; top y2=h+o-.4cap_stem;
+lft bot z1'r=(u,0); rt top z2'l=(w-u,h);
+theta:=angle(z2-z1);
+pos1(.8cap_stem,theta-90); pos2(.8cap_stem,theta-90);
+pos1'(.8cap_stem,-90); pos2'(.8cap_stem,-90);
+pos3(hair,theta-90); pos4(curve,75); pos5(hair,theta+90);
+pos6(hair,theta-90); pos7(curve,105); pos8(hair,theta+90);
+z3r=z1l; top y4r=h+o; x4=2u; lft x5r=u; y4-y5=1.2(x4-x5);
+z6l=z2r; bot y7l=-o; x7=w-x4; rt x8l=w-u; y8-y7=1.2(x8-x7);
+p0:=z1'l..z1l{dir(theta+10)}..{dir(theta-10)}z2l..z2'l..z2'r..z2r{dir(theta+170)}..{dir(theta+190)}z1r..z1'r..cycle;
+p1:=z3l{dir(theta+10)}..z4l{left}..{down}z5l--z5r{up}..z4r{right}..{dir(theta+180)}z3r;
+p2:=z6r{dir(theta+190)}..{right}z7r..{up}z8r..{down}z8l..z7l{left}..{dir(theta)}z6l;
+z10=bsktouch(subpath(3,infinity) of p1,right,p0,up);
+z11=bsktouch(subpath(5,infinity) of p0,right,subpath(1,infinity) of p2,up);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z10--(x10,0)));
+tim1-1=xpart(subpath(1,infinity) of p1 intersectiontimes (z10--(0,y10)));
+tim2-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z11--(w,bar_height)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z11--(x11,h)));
+filldraw subpath(rundy(p1,0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,5).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),length p0) of p0..cycle;
+penlabels(1,1',2,2',3,4,5,6,7,8); labels(10,11,12,13);
+infill subpath(rundy(p0,0),rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p0,5),rundy(p0,length p0).zpet) of p0..cycle;
+endchar;
+
+iff known chars.greek_varkappa_SS:
+bskchar "The sans-serif Greek letter kappa---alternative";
+beginchar(chars.greek_varkappa_SS,11u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], theta; path p[]; oblu:=2oblu;
+x1=2u+.5stem; x2=w-2u-.5stem; bot y1=.4stem; top y2=h+o-.5stem;
+lft bot z1'r=(u,0); rt top z2'l=(w-u,h);
+theta:=angle(z2-z1);
+pos1(.8stem,theta-90); pos2(stem,theta-90);
+pos1'(stem,-90); pos2'(stem,-90);
+pos3(hair,theta-90); pos4(curve,0); pos5(hair,theta+90);
+pos6(hair,theta-90); pos7(curve,0); pos8(hair,theta+90);
+z3r=z1l; top y4r=h; x4=2u; lft x5r=u; y4-y5=1.2(x4-x5);
+z6l=z2r; bot y7l=0; x7=w-x4; rt x8l=w-u; y8-y7=1.2(x8-x7);
+p0:=z1'l..z1l{dir(theta+10)}..{dir(theta-10)}z2l..z2'l..z2'r..z2r{dir(theta+170)}..{dir(theta+190)}z1r..z1'r..cycle;
+p1:=z3l{dir(theta+10)}..{up}z4l..z4r{down}..{dir(theta+180)}z3r;
+p2:=z6r{dir(theta+190)}..{down}z7r..{up}z7l..{dir(theta)}z6l;
+z10=bsktouch(subpath(2,infinity) of p1,right,p0,up);
+z11=bsktouch(subpath(5,infinity) of p0,right,subpath(1,infinity) of p2,up);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z10--(x10,0)));
+tim1-1=xpart(subpath(1,infinity) of p1 intersectiontimes (z10--(0,y10)));
+tim2-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z11--(w,bar_height)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z11--(x11,h)));
+filldraw subpath(rundy(p1,0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,5).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),length p0) of p0..cycle;
+penlabels(1,1',2,2',3,4,5,6,7,8); labels(10,11,12,13);
+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_BB:
+bskchar "The blackboard-bold Greek letter lambda";
+beginchar(chars.greek_lambda_BB,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:=.8cap_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;
+p100=z3r{left}..z1r---z2r..z4r---z5r;
+p101=z5l---z4l..z2l---z1l..z1'..{right}z3l;
+z100=bsktouch(subpath(0,2) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(1,2) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3l-5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y4r+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'',100,101);
+endchar;
+
+iff known chars.greek_lambda_SS:
+bskchar "The sans-serif Greek letter lambda";
+beginchar(chars.greek_lambda_SS,10u#,asc_height#,0); uni "non";
+adjust_fit(0,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(thstem,0); pos5(hair+o,90);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+bot y1'=-o; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h;
+lft x5=o; y5r=y4r; z4r=whatever[z2r,z1r];
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+p0=z2l---z1l...z1'...z1r---z4r..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(0,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=if slant=0: x2l else: x2 fi; 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_BB:
+bskchar "The blackboard-bold Greek letter mu";
+beginchar(chars.greek_mu_BB,10.75u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.8cap_stem,0);
+pos3(.8cap_stem,0);
+pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(.8cap_stem,180);
+pos10(.8cap_stem,0); pos11(.8cap_stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
+lft x1l=lft x2l=1.5u; top y1=h; y2=0;
+x3l=if slant=0: x2l else: x2 fi; 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;
+p100=subpath(3,5) of p1;
+p101=z9rr---z10l---z11l..{right}z12l;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(0,y100)));
+oblu:=f_obl;
+infill subpath(rundy(p101,0),rundy(p101,tim101).zpet) of p101
+ ..subpath(rundy(p100,tim100),rundy(p100, length p100).zpet) of p100..cycle;
+infill subpath(rundy(p0,1),rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p0,3),rundy(p0,4).zpet) of p0..cycle;
+penlabels(1,2,3,6,7,8,9,10,11,12,13); labels(0,9rr,3rr,14,100);
+endchar;
+
+iff known chars.greek_mu_SS:
+bskchar "The sans-serif Greek letter mu";
+beginchar(chars.greek_mu_SS,10.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,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=if slant=0: x2l else: x2 fi; 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),1) of p2
+ ..subpath(rundy(p1,4),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);
+math_fit(-x_height#*slant+u#,-u#);
+endchar;
+
+iff known chars.greek_nu_BB:
+bskchar "The blackboard-bold Greek letter nu";
+beginchar(chars.greek_nu_BB,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.9cap_stem,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;
+p100=z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l;
+p101=p0;
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(infinity,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(0,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*down..cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.greek_nu_SS:
+bskchar "The sans-serif Greek letter nu";
+beginchar(chars.greek_nu_SS,8.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(-.5u#,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);
+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{left}..{down}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'');
+math_fit(mft,0);
+endchar;
+
+iff known chars.greek_xi_BB:
+bskchar "The blackboard-bold Greek letter xi";
+beginchar(chars.greek_xi_BB,9u#,asc_height#,.5desc_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(.8cap_stem,180); pos0(hair,0); pos7(.8cap_stem,180);
+pos3(cap_stem,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-11)=subpath(2,4) of p0 intersectiontimes subpath(11,infinity) of 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;
+p100=subpath(7,10) of p0;
+p101=subpath(2,5) of p1;
+p102=subpath(3,5) of p0;
+p103=subpath(7,10) of p1;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,right,subpath(0,1) of p101,left);
+z102=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(w,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y4)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+tim104=xpart(p102 intersectiontimes (z102--(0,y102)));
+tim105=xpart(p103 intersectiontimes (z102--(x11,y102)));
+tim106=xpart(p102 intersectiontimes ((0,.5[y1,y0])--(x8,.5[y1,y0])));
+tim107=xpart(p103 intersectiontimes ((0,.5[y1,y0])--(x8,.5[y1,y0])));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); labels(0',0'',6',6'',100,101,102);
+endchar;
+
+iff known chars.greek_xi_SS:
+bskchar "The sans-serif Greek letter xi";
+beginchar(chars.greek_xi_SS,9u#,asc_height#,.5desc_depth#); uni "non";
+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(hair,90);
+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; lft x7r=1.5u; y7=.35[y1,y9];
+x8=.25[x1,x0]; .25[y8,y1]=y0; top y9r=h-.75stem; x10-x9=x0-x1;
+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---z6r;
+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;
+
+charscription(9u,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;
+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.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;
+usechar;
+endchar;
+
+iff known chars.greek_omicron_SS:
+bskchar "The sans-serif Greek letter omicron";
+beginchar(chars.greek_omicron_SS,9u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_omicron_BB:
+bskchar "The blackboard-bold Greek letter omicron";
+beginchar(chars.greek_omicron_BB,9u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,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;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(1,2,3,4); labels(100,101,102,103);
+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');
+math_fit(-.5[x_height#,bar_height#]*slant,-.5u#);
+endchar;
+
+iff known chars.greek_pi_BB:
+bskchar "The blackboard-bold Greek letter pi";
+beginchar(chars.greek_pi_BB,11u#,x_height#,0); uni "0x213C";
+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(cap_stem,10); pos6(.5[hair,cap_stem],0);
+pos7(.5[hair,cap_stem],0); pos8(cap_stem,-10); pos8'(.5[curve,cap_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=1.5o; 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;
+if tim2=-1: tim2:=4; tim3:=length(p1); fi
+(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
+ if not boldmath:..subpath(rundy(p0,(tim2,2hair)),rundy(p0,(tim4,2hair)).zpet) of p0 fi
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0&cycle;
+p100=subpath(0,rundy(p2,3).zpet) of p2..subpath(rundy(p2,3),infinity) of p2;
+oblu:=1.25bbw;
+tim100=ypart(p0 intersectiontimes p100);
+tim101-1=ypart(p0 intersectiontimes subpath(1,infinity) of p100);
+infill subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+infill subpath(rundy(p100,tim100),rundy(p100,tim101).zpet) of p100..cycle;
+penlabels(1,2,3,4,5,6,7,8,8');
+endchar;
+
+iff known chars.greek_pi_SS:
+bskchar "The sans-serif Greek letter pi";
+beginchar(chars.greek_pi_SS,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,90); pos5(curve,10); pos6(.5[hair,stem],0);
+pos7(.5[hair,stem],0); pos8(curve,0); pos8'(curve,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=x6; bot y5l=o;
+z6r=z3; y7=y6; x7l=x2+stem; bot y8=0; x8=x7;
+y8'=.5bar_height; z8'l=whatever[z8l,z7l];
+y6l:=y6l-o;
+p0=z1r..z2r---z4r..z4l{down}..z3l---z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{down}z5l..z5r{up}..{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,hair)),rundy(p0,(tim4,hair)).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');
+math_fit(-.5[x_height#,bar_height#]*slant,-.5u#);
+endchar;
+
+charscription(13.5u,x_height,0)(
+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'');
+);
+
+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;
+usechar;
+math_fit(mft-.5u#,u#);
+endchar;
+
+iff known chars.greek_varpi_SS:
+bskchar "The sans-serif Greek letter pi---alternative";
+beginchar(chars.greek_varpi_SS,13.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_varpi_BB:
+bskchar "The blackboard-bold Greek letter pi---alternative";
+beginchar(chars.greek_varpi_BB,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(cap_stem,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;
+p100=subpath(0,2) of p0;
+p101=subpath(9,11) of p1;
+z100=bsktouch(subpath(0,1) of p100,1.5up,p101,1.5down);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y7r+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5r-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11); labels(1',1'',7',7'',100,101);
+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'');
+math_fit(mft-.5u#,u#);
+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_rho_BB:
+bskchar "The blackboard-bold Greek letter rho";
+beginchar(chars.greek_rho_BB,9u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(.8cap_stem,180); pos4(hair,270);
+pos5(cap_stem,20); pos6(.5[cap_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;
+p100=subpath(0,3) of p0;
+p101=subpath(1,5) of (z3r{up}..z4r..{down}p1);
+p102=subpath(3,5) of p0;
+p103=subpath(1,3) of z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p102,down,p103,up);
+z102=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4l+u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p102 intersectiontimes (z101--(x101,y4l+5)));
+tim103=xpart(p103 intersectiontimes (z101--(x101,y3)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-u-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,infinity).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim102),rundy(p102,tim104).zpet) of p102
+ ..reverse subpath(rundy(p103,tim103),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6); labels(5',100,101,102);
+endchar;
+
+iff known chars.greek_rho_SS:
+bskchar "The sans-serif Greek letter rho";
+beginchar(chars.greek_rho_SS,8.5u#,x_height#,desc_depth#); uni "non";
+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,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 y5=-d; x1=x5;
+p0=z5l---z1l..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r---z5r..{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);
+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_varrho_BB:
+bskchar "The blackboard-bold Greek letter rho---alternative";
+beginchar(chars.greek_varrho_BB,9u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(.8cap_stem,180); pos4(hair,270);
+pos5(cap_stem,0); pos6(.8cap_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]; 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;
+p100=subpath(9,infinity) of p1..subpath(0,1) of p0;
+p101=subpath(1,5) of (z3r{up}..z4r..{down}subpath(0,3) of p1);
+p102=subpath(1,3) of p0;
+p103=subpath(1,3) of z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,down,p103,up);
+z103=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4l+u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y9)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y6)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y4l+5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y3)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y2l-u-5)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..reverse subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(9',100,101,102,103);
+endchar;
+
+iff known chars.greek_varrho_SS:
+bskchar "The sans-serif Greek letter rho---alternative";
+beginchar(chars.greek_varrho_SS,8.5u#,x_height#,.75desc_depth#); uni "non";
+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,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; x4r:=x4r+.25u; x2r:=x2r-.25u;
+y5=.5[y6,y1]; rt x5r=x6r=x1r;
+y7l=y8l=-d; x7=x2; rt x8r=w-2u; y6=.5y7;
+p0=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r---z5r..z6r..z7r---z8r..z8l---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(1.98,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);
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_sigma_BB:
+bskchar "The blackboard-bold Greek letter sigma";
+beginchar(chars.greek_sigma_BB,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(cap_stem,0); pos2(hair,90); pos3(.8cap_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;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z6l--z4l..z1l{down}..z2l..{up}z3l..cycle;
+p102:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p102,down);
+z103=bsktouch(subpath(2,3) of p100,down,p102,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(if boldmath:x2 else:x102 fi,y1)));
+tim105=xpart(p102 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p102 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p102,tim107),rundy(p102,tim105).zpet) of p102..cycle;
+penlabels(1,2,3,4,5,6); labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_sigma_SS:
+bskchar "The sans-serif Greek letter sigma";
+beginchar(chars.greek_sigma_SS,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); 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}..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);
+math_fit(mft-.5u#,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'');
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_varsigma_BB:
+bskchar "The blackboard-bold Greek letter sigma---alternative";
+beginchar(chars.greek_varsigma_BB,8u#,x_height#,.5desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(hair,90); pos2(.8cap_stem,180); pos0(stem,0);
+pos3(cap_stem,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;
+p0:=z0r..z0''..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l..z5l..z4l..z3l..z2l..z1l..{down}z0l..z0'..cycle;
+filldraw p0;
+p100=subpath(2,5) of p0;
+p101=subpath(11,14) of p0;
+z100=bsktouch(p100,bbs*dir45,subpath(0,2) of p101,dir-135);
+z101=bsktouch(p100,dir-45,p101,dir135);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6); labels(0',0'',6',6'',100,101);
+endchar;
+
+iff known chars.greek_varsigma_SS:
+bskchar "The sans-serif Greek letter sigma---alternative";
+beginchar(chars.greek_varsigma_SS,8u#,x_height#,.5desc_depth#); uni "non";
+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(hair,90);
+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;
+z0'=z0+.2stem*down+o*left; z0''=z0+.5(stem-currentbreadth)*dir45;
+filldraw z0r{up}..{left}z1r..z2r..z3r..z4r..z5r---z6r
+ ..z6l---z5l..z4l..z3l..z2l..{right}z1l..{down}z0l..cycle;
+penlabels(0,1,2,3,4,5,6); labels(0',0'');
+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);
+math_fit(-.5[x_height#,bar_height#]*slant,ic#-3u#);
+endchar;
+
+iff known chars.greek_tau_BB:
+bskchar "The blackboard-bold Greek letter tau";
+beginchar(chars.greek_tau_BB,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,90); pos5(cap_stem,10); pos6(.5[hair,cap_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;
+oblu:=1.25bbw;
+infill subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_tau_SS:
+bskchar "The sans-serif Greek letter tau";
+beginchar(chars.greek_tau_SS,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,90); pos5(curve,0); 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{left}...z3l..{left}z2l..{dir-90}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{down}z5l..z5r{up}..{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);
+math_fit(-.5[x_height#,bar_height#]*slant,ic#-3u#);
+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'');
+math_fit(mft,0);
+endchar;
+
+iff known chars.greek_upsilon_BB:
+bskchar "The blackboard-bold Greek letter upsilon";
+beginchar(chars.greek_upsilon_BB,8.5u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(hair,90);
+pos4(hair,180); pos5(curve,180);
+top y1=h-o; 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;
+path p[]; numeric tim[];
+p100=z1r---z2r..z3r..{up}z4r;
+p101=z4l{down}..z3l..z2l---z1l;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3l-u-5)));
+infill subpath(rundy(p100,0),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,infinity)) of p101..cycle;
+penlabels(1,2,3,4,5); labels(5',5'',100);
+endchar;
+
+iff known chars.greek_upsilon_SS:
+bskchar "The sans-serif Greek letter upsilon";
+beginchar(chars.greek_upsilon_SS,8.5u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(hair,90);
+pos4(hair,180); pos5(hair,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;
+x5=x4; y5=h;
+filldraw z1r---z2r..z3r..{up}z4r..{up}z5r
+ ..{down}z5l..{down}z4l..z3l..z2l---z1l..cycle;
+penlabels(1,2,3,4,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'');
+math_fit(mft,.5u#);
+endchar;
+
+charscription(12u,asc_height,desc_depth)(
+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);
+);
+
+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;
+usechar;
+math_fit(mft-.5u#,ic#-.5u#);
+endchar;
+
+iff known chars.greek_phi_SS:
+bskchar "The sans-serif Greek letter phi";
+beginchar(chars.greek_phi_SS,12u#,asc_height#,desc_depth#); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_phi_BB:
+bskchar "The blackboard-bold Greek letter phi";
+beginchar(chars.greek_phi_BB,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(.9cap_stem,0); pos2(hair,90); pos3(.9cap_stem,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;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6); labels(100,101,102,103);
+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);
+math_fit(mft-.5u#,ic#-.5u#);
+endchar;
+
+charscription(12u,x_height,desc_depth)(
+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'');
+);
+
+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;
+usechar;
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_varphi_SS:
+bskchar "The sans-serif Greek letter phi---alternative";
+beginchar(chars.greek_varphi_SS,12u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_varphi_BB:
+bskchar "The blackboard-bold Greek letter phi---alternative";
+beginchar(chars.greek_varphi_BB,12.5u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos2(hair,-45); pos3(.75[hair,cap_stem],0); pos4(stem,0); pos5(hair,90);
+pos6(cap_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;
+p100:=subpath(0,2) of p0;
+p101:=reverse subpath(4,infinity) of p1;
+p102:=subpath(2,4) of p0;
+p103:=reverse subpath(2,4) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y8)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y9)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l+u+5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y6)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y7l+5)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y6)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y9)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101).zpet,rundy(p101,tim103)) of p101..cycle;
+infill subpath(rundy(p102,tim104).zpet,rundy(p102,tim106)) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(2,3,4,5,6,7,8,9); labels(7',7'',100,101,102,103);
+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'');
+math_fit(mft-.5u#,0);
+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_chi_BB:
+bskchar "The blackboard-bold Greek letter chi";
+beginchar(chars.greek_chi_BB,12u#,x_height#,desc_depth#); uni "non";
+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(.8cap_stem,angle(z2-z3)-90); pos3(.8cap_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;
+p100=reverse subpath(1,4) of p0;
+p101=reverse subpath(3,6) of p1;
+z100=bsktouch(subpath(0,2) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,2) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l-5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1r+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(0',5',100,101);
+endchar;
+
+iff known chars.greek_chi_SS:
+bskchar "The sans-serif Greek letter chi";
+beginchar(chars.greek_chi_SS,12u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(-.5u#,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(hair,0); pos9(hair,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]; y9=h; z9l=whatever[z6l,z7l]+o*right;
+p0=z1r{right}..z2r---z3r..{right}z4r;
+p1=z4l{left}..z3l---z2l..{left}z1l;
+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
+ ..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'');
+math_fit(mft-.5u#,ic#-.5u#);
+endchar;
+
+iff known chars.greek_psi_BB:
+bskchar "The blackboard-bold Greek letter psi";
+beginchar(chars.greek_psi_BB,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(.8cap_stem,0); pos4(cap_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=x4; 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..{right}z5r..{up}z6r..z7'..{up}z7r;
+p1=z7r{up}..z7l..{down}z6l..{left}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;
+p100:=subpath(1,4) of p0;
+p101:=subpath(3,6) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y8)));
+tim101=xpart(p101 intersectiontimes (z100--z1));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y9)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(7',7'',100,101);
+endchar;
+
+iff known chars.greek_psi_SS:
+bskchar "The sans-serif Greek letter psi";
+beginchar(chars.greek_psi_SS,12u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(-1.5u#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,0); 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];
+if boldmath:lft x4l=x3l; else: x4l=x3; fi;
+lft x1l=.5u; x3l-x1r=max(1.5curve,2u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+x2l=x3l;
+y4-y5=y2-y3; rt x6l=w-u; y6=bar_height;
+top y7=x_height;
+x7-x6=.45(y6-y7);
+y8=h; y9=-d; x8=x9=.5[x3r,x7l];
+p0=z2r---z3r..z4r..z5r..{up}z6r..z7r;
+p1=z7l..{down}z6l..z5l..z4l..z3l---z2l;
+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);
+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'');
+math_fit(mft-.5u#,ic#-.5u#);
+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'');
+math_fit(mft-.5u#,ic#);
+endchar;
+
+iff known chars.greek_omega_BB:
+bskchar "The blackboard-bold Greek letter omega";
+beginchar(chars.greek_omega_BB,13.5u#,x_height#,0); uni "non";
+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(cap_stem,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+if not boldmath:.5\\fi(curve-currentbreadth)*dir135;
+z7'=z7+if boldmath: .3 else: .2\\fi curve*right+o*down; z7''=z7+if not boldmath:.5\\fi(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;
+p100=subpath(0,2) of p0;
+p101=subpath(9,11) of p1;
+z100=bsktouch(subpath(0,1) of p100,1.5up,p101,1.5down);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y7r+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5r-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'',7',7'',100,101);
+endchar;
+
+iff known chars.greek_omega_SS:
+bskchar "The sans-serif Greek letter omega";
+beginchar(chars.greek_omega_SS,13.5u#,x_height#,0); uni "non";
+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);
+p0=z7l{right}..z6l..z5l..z4'l..z4l{right}..z4''l..z3l{left}..z2l..{right}z1l;
+p1=z1l{right}..z1r{left}..z2r..{right}z3r..z4''r..{left}z4r..z4'r..{right}z5r..z6r..z7r;
+(tim0,tim1-5)=subpath(0,4) of p1 intersectiontimes subpath (5,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);
+endchar;
+
+iff known chars.greek_sampi:
+bskchar "The Greek letter sampi";
+beginchar(chars.greek_sampi,12u#,x_height#,desc_depth#); uni "0x03E1";
+adjust_fit(0,if slant<>0: -.75u# else: 0 fi);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+oblu:=2oblu;
+pos1(hair,90); pos3(hair,0);
+top y1r=h+o; bot y3=-d; lft x1=2u; rt x3r=w-u;
+z2=1/3[.5[z1,z3],(x3,y1)];
+p0:=z1..z2..z3; theta=angle(direction 1 of p0)+90; pos2(curve,theta);
+p1:=z1r..z2r..z3r;
+p2:=z3l..z2l..z1l;
+pos4(hair,theta-90); pos5(hair,theta-90);
+z4=p0 intersectionpoint ((0,bar_height)--(w,bar_height));
+z5=p0 intersectionpoint ((0,0)--(w,0));
+pos6(curve,theta-100); pos7(curve,theta-80);
+pos6'(.5[curve,stem],theta-90); pos7'(.5[curve,stem],theta-90);
+lft x6l=u; z6r=z4l+whatever*dir(theta);
+z7l=z5r-abs(z6r-z4l)*dir(theta);
+z6'l=z6l+1/3(z4l-z6l)+.5hair*dir(theta-90);
+z7'r=z7r+1/3(z5r-z7r)+.5hair*dir(theta+90);
+p3:=reverse(z4l---z6'l..z6l&z6l..z6r..z6'r---z4r);
+p4:=z5r---z7'r..z7r&z7r..z7l..z7'l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(1,2,3,4,5,6,6',7,7');
+math_fit(-.5[x_height#,bar_height#]*slant+.5u#,0);
+endchar;
+
+iff known chars.greek_sampi_BB:
+bskchar "The blackboard-bold Greek letter sampi";
+beginchar(chars.greek_sampi_BB,12u#,x_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+oblu:=2oblu;
+pos1(hair,90); pos3(hair,0);
+top y1r=h+o; bot y3=-d; lft x1=2u; rt x3r=w-u;
+z2=1/3[.5[z1,z3],(x3,y1)];
+p0:=z1..z2..z3; theta=angle(direction 1 of p0)+90; pos2(cap_stem,theta);
+p1:=z1r..z2r..z3r;
+p2:=z3l..z2l..z1l;
+pos4(hair,theta-90); pos5(hair,theta-90);
+z4=p0 intersectionpoint ((0,bar_height)--(w,bar_height));
+z5=p0 intersectionpoint ((0,0)--(w,0));
+pos6(curve,theta-100); pos7(curve,theta-80);
+pos6'(.5[curve,stem],theta-90); pos7'(.5[curve,stem],theta-90);
+lft x6l=u; z6r=z4l+whatever*dir(theta);
+z7l=z5r-abs(z6r-z4l)*dir(theta);
+z6'l=z6l+1/3(z4l-z6l)+.5hair*dir(theta-90);
+z7'r=z7r+1/3(z5r-z7r)+.5hair*dir(theta+90);
+p3:=reverse(z4l---z6'l..z6l&z6l..z6r..z6'r---z4r);
+p4:=z5r---z7'r..z7r&z7r..z7l..z7'l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+z100=bsktouch(subpath(0,1) of p1,dir210,p2,dir30);
+z101=bsktouch(p1,left,subpath(0,1) of p2,right);
+tim100=xpart(p1 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p2 intersectiontimes (z100--(0,y100)));
+tim102=xpart(p1 intersectiontimes (z101--(w,y101)));
+tim103=xpart(p2 intersectiontimes (z101--(0,y101)));
+oblu:=bbw;
+infill subpath(rundy(p1,tim100),rundy(p1,tim102).zpet) of p1
+ ..subpath(rundy(p2,tim103),rundy(p2,tim101).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,6',7,7'); labels(100,101);
+endchar;
+
+iff known chars.greek_sampi_SS:
+bskchar "The sans-serif Greek letter sampi";
+beginchar(chars.greek_sampi_SS,12u#,x_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+oblu:=2oblu;
+pos1(hair,90); pos3(hair,0);
+top y1r=h+o; bot y3=-d; lft x1=2u; rt x3r=w-u;
+z2=1/3[.5[z1,z3],(x3,y1)];
+p0:=z1..z2..z3; theta=angle(direction 1 of p0)+90; pos2(curve,theta);
+p1:=z1r..z2r..z3r;
+p2:=z3l..z2l..z1l;
+pos4(hair,theta-90); pos5(hair,theta-90);
+z4=p0 intersectionpoint ((0,bar_height)--(w,bar_height));
+z5=p0 intersectionpoint ((0,0)--(w,0));
+pos6(curve,theta-100); pos7(curve,theta-80);
+lft x6l=1.25u; z6r=z4r+whatever*dir(theta);
+z7l=z5r-abs(z6r-z4l)*dir(theta);
+p3:=reverse(z4l---z6l&z6l..z6r---z4r);
+p4:=z5r---z7r&z7r..z7l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.greek_varsampi:
+bskchar "The Archaic Greek letter sampi";
+beginchar(chars.greek_varsampi,12u#,asc_height#,0); uni "0x0373";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,-10); pos2(.5[hair,stem],0); pos1'(.5[curve,stem],0);
+pos3(curve,10); pos4(.5[hair,stem],0); pos5(stem,0); pos6(stem,0);
+bot y1=bot y3=.5[x_height,bar_height]; top y2=top y4=h; bot y5=0;
+y2r:=y4l:=y6=y2-bar+tiny; y3r:=y3r+o;
+lft x1l=u; rt x4r=w-u; x5=x6=.5w; x2'=x2r; x4'=x4l; x3=x4r;
+x2l=x1r; y1'-y1=.5bar_height; z1'l=whatever[z2l,z1l]+.5hair*right;
+bskpoints(5,6,0,hair);
+filldraw z1'l..z1l&z1l..z1r..z1'r---obl(2r,1'r,6l)---obl(6l,2r,5l)---z5l..z5rr
+ ---obl(6r,5r,4l)---z4l+oblu*left..z4l+oblu*down{down}..{dir-70}z3l
+ ..(x3r,y1)..z3r{dir130}..{up}obl(4r,3r,2l)---obl(2l,4r,1l)---cycle;
+penlabels(1,1',2,3,4,5,6); labels(3ll,5rr);
+math_fit(-.5[x_height#,bar_height#]*slant,ic#-3u#);
+endchar;
+
+iff known chars.greek_varsampi_BB:
+bskchar "The blackboard-bold Archaic Greek letter sampi";
+beginchar(chars.greek_varsampi_BB,12u#,asc_height#,0); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,-10); pos2(.5[hair,stem],0); pos1'(.5[curve,stem],0);
+pos3(curve,10); pos4(.5[hair,stem],0); pos5(.8cap_stem,0); pos6(.8cap_stem,0);
+bot y1=bot y3=.5[x_height,bar_height]; top y2=top y4=h; bot y5=0;
+y2r:=y4l:=y6=y2-bar+tiny; y3r:=y3r+o;
+lft x1l=u; rt x4r=w-u; x5=x6=.5w; x2'=x2r; x4'=x4l; x3=x4r;
+x2l=x1r; y1'-y1=.5bar_height; z1'l=whatever[z2l,z1l]+.5hair*right;
+bskpoints(5,6,0,hair);
+filldraw z1'l..z1l&z1l..z1r..z1'r---obl(2r,1'r,6l)---obl(6l,2r,5l)---z5l..z5rr
+ ---obl(6r,5r,4l)---z4l+oblu*left..z4l+oblu*down{down}..{dir-70}z3l
+ ..(x3r,y1)..z3r{dir130}..{up}obl(4r,3r,2l)---obl(2l,4r,1l)---cycle;
+penlabels(1,1',2,3,4,5,6); labels(3ll,5rr);
+infill ifobl(6r,6l,5r,5l,,)---ifobl(5l,5r,6l,6r,,)--cycle;
+endchar;
+
+iff known chars.greek_varsampi_SS:
+bskchar "The sans-serif Archaic Greek letter sampi";
+beginchar(chars.greek_varsampi_SS,12u#,asc_height#,0); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,0); pos2(.5[hair,stem],0); pos1'(.5[curve,stem],0);
+pos3(curve,0); pos4(.5[hair,stem],0); pos5(stem,0); pos6(stem,0);
+bot y1=bot y3=.5[x_height,bar_height]; top y2=top y4=h; bot y5=0;
+y2r:=y4l:=y6=y2-bar+tiny;
+lft x1l=u; rt x4r=w-u; x5=x6=.5w; x2'=x2r; x4'=x4l; x3=x4;
+x2=x1; y1'-y1=.5bar_height; z1'l=whatever[z2l,z1l];
+bskpoints(5,6,0,hair);
+filldraw z1'l..z1l&z1l..z1r...z1'r---obl(2r,1'r,6l)---obl(6l,2r,5l)---z5l..z5rr
+ ---obl(6r,5r,4l)---z4l+oblu*left..z4l+oblu*down{down}..{down}z3l
+ ..z3r{up}..{up}obl(4r,3r,2l)---obl(2l,4r,1l)---cycle;
+penlabels(1,1',2,3,4,5,6); labels(3ll,5rr);
+endchar;
+
+iff known chars.greek_qoppa:
+bskchar "The Archaic Greek letter qoppa";
+beginchar(chars.greek_qoppa,9u#,x_height#,2/3desc_depth#); uni "0x03D9";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(.75[stem,hair],0); pos6(curve,-20);
+pos6'(.5[stem,hair],0); pos6''(.9curve,-20);
+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=z2l; x6=x5r; bot y6r=-d;
+z6'=2/3[z6l,z5l];
+z6''=z6+.5stem*up;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1:=z5l---z6'l---z6''l...z6l..z6r...z6''r---z6'r---z5r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p0,1),infinity) of p0&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,6',6'');
+math_fit(mft-.5u#,ic#-.5u#);
+endchar;
+
+iff known chars.greek_qoppa_BB:
+bskchar "The blackboard-bold Archaic Greek letter qoppa";
+beginchar(chars.greek_qoppa_BB,9u#,x_height#,2/3desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+pos5(.75[stem,hair],0); pos6(curve,-20);
+pos6'(.5[stem,hair],0); pos6''(.9curve,-20);
+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=z2l; x6=x5r; bot y6r=-d;
+z6'=2/3[z6l,z5l];
+z6''=z6+.5stem*up;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1:=z5l---z6'l---z6''l...z6l..z6r...z6''r---z6'r---z5r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p0,1),infinity) of p0&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6,6',6''); labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_qoppa_SS:
+bskchar "The sans-serif Archaic Greek letter qoppa";
+beginchar(chars.greek_qoppa_SS,9u#,x_height#,2/3desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(.75[stem,hair],0); pos6(curve,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; z5=z2l; x6=x5; bot y6=-d;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1:=z5l---z6l..z6r---z5r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p0,1),infinity) of p0&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_stigma:
+bskchar "The Greek letter stigma";
+beginchar(chars.greek_stigma,9u#,x_height#,.5desc_depth#); uni "0x03DB";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,90); pos2(hair,180); pos0(stem,90); pos0'(hair,90);
+pos3(stem,270); pos3'(stem,270); 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 x0'=w-u; x0=w-2.5u; y0=y1; y0'r=y0r; x3=.5w; bot y3r=bot y3'r=-o;
+x6=x5-stem; y6=y5+.5stem; x4-x3'=.75(y3'-y4);
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+filldraw z0r---z1r..z2r..z3r---z3'r..z4r..z5r..z6''..z6'..z6l
+ ..z5l{right}..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l..z0'r---cycle;
+penlabels(0,0',1,2,3,3',4,5,6); labels(6',6'');
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_stigma_BB:
+bskchar "The blackboard-bold Greek letter stigma";
+beginchar(chars.greek_stigma_BB,9u#,x_height#,.5desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(.8cap_stem,90); pos2(hair,180); pos0(.8cap_stem,90); pos0'(hair,90);
+pos3(.8cap_stem,270); pos3'(.8cap_stem,270); 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 x0'=w-u; x0=w-2.5u; y0=y1; y0'r=y0r; x3=.5w; bot y3r=bot y3'r=-o;
+x6=x5-stem; y6=y5+.5stem; x4-x3'=.75(y3'-y4);
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+filldraw z0r---z1r..z2r..z3r---z3'r..z4r..z5r..z6''..z6'..z6l
+ ..z5l{right}..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l..z0'r---cycle;
+penlabels(0,0',1,2,3,3',4,5,6); labels(6',6'');
+path p[]; numeric tim[];
+p100:=subpath(0,6) of (z0'r---z0r---z1r..z2r..z3r---z3'r..z4r..z5r..z6''..z6'..z6l..{right}z5l);
+p101:=subpath(1,infinity) of (z5l{right}..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l);
+z100=bsktouch(subpath(0,3) of p100,right,p101,left);
+z101=bsktouch(subpath(3,4) of p100,right,p101,left);
+z102=bsktouch(subpath(5,infinity) of p100,right,p101,left);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(w,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+tim104=xpart(p100 intersectiontimes (z102--(0,y102)));
+tim105=xpart(p101 intersectiontimes (z102--(w,y102)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,infinity).zpet) of p101..cycle;
+infill subpath(rundy(p100,tim102),rundy(p100,tim104).zpet) of p100
+ ..subpath(rundy(p101,tim105),rundy(p101,tim103).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_stigma_SS:
+bskchar "The sans-serif Greek letter stigma";
+beginchar(chars.greek_stigma_SS,9u#,x_height#,.5desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,90); pos2(hair,180); pos0(stem,90); pos0'(hair,90);
+pos3(stem,270); pos3'(stem,270); pos4(hair,180); pos5(hair,100); pos6(hair,90);
+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 x0'=w-u; x0=w-2.5u; y0=y1; y0'r=y0r; x3=.5w; bot y3r=bot y3'r=-o;
+x6=x5-stem; y6=y5; x4-x3'=.75(y3'-y4);
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+filldraw z0r---z1r..z2r..z3r---z3'r..z4r..z5r---z6r
+ ..z6l---z5l..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l..z0'r---cycle;
+penlabels(0,0',1,2,3,3',4,5,6); labels(6',6'');
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% One cyrilic letter
+iff known chars.cyrilic_Sha:
+bskchar "The Cyrilic letter Sha";
+beginchar(chars.cyrilic_Sha,17.5u#,cap_height#,0); uni "0x0428";
+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);
+pos5(cap_stem,0); pos6(cap_stem,0);
+bot y1=bot y3=0; top y2=top y4=top y6=h; y5=y1+.5[cap_hair,cap_stem]-currentbreadth;
+lft x1l=lft x2l=2u; rt x3r=rt x4r=w-2u; x5=x6=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_br(3r);
+{{ numeric old_jut; old_jut:=cap_jut; save cap_jut; cap_jut:=.75old_jut;
+ cap_serifs_tl(6l); cap_serifs_tr(6r);
+}};
+y1r:=y3l:=y5;
+oblu:=2oblu;
+filldraw z1l.b{down}..{left}z1l.c..z1l.a---z3r.a..z3r.c{left}..z3r.b---z4r.b
+ ..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b---obl(3l,4l,5r)
+ ---obl(5r,3l,6r)---z6r.b..{right}z6r.c..z6r.a---z6l.a..{right}z6l.c
+ ..z6l.b---obl(5l,6l,1r)---obl(1r,5l,2r)---z2r.b..{right}z2r.c..z2r.a
+ ---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Next letters are named ``calligraphic'' but they are only ``decorative''
+numeric cal_stem, cal_hair, cal_curve;
+cal_curve=cap_curve+.25cap_hair; cal_stem=cap_stem+.25cap_hair; cal_hair:=.5[cap_hair,cap_stem];
+
+iff known chars.cal_A:
+bskchar "The calligraphic letter A";
+beginchar(chars.cal_A,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0);
+pos7(.65[cal_stem,cal_hair],-10); pos8(cal_stem,10); pos9(cal_hair,90);
+pos11(cal_hair,-10); pos12(.5[cal_stem,cal_hair],60); pos13(.5[cal_stem,cal_hair],60);
+rt x1l=u; y1=cal_stem; bot y2l=-d-o; .5[x1,x3]=x2=x1+cal_stem; y3=.5bar_height;
+y4=.5[bar_height,x_height]; z4=z3+whatever*dir75; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair; y8=cal_curve; y7=y5l-cal_curve; x8r=x7r=x5-.5cal_hair;
+bot y9l=0; x9=.5[x8r,w];
+z10=(w,y8r); z11r=z5r; z12r=z4; y13=y4; x13=x7r;
+p1:=z1r{down}..z2r..z3r..z4r..{right}z5r..{down}z6r;
+p2:=z6l{up}..{left}z5l..z4l..z3l..z2l..{up}z1l;
+p3:=z11l---z7l..z8l..z9l..{dir100}z10;
+p4:=z10+left{dir-80}..z9r..z8r..z7r---z11r;
+p5:=z12r{right}..{dir30}z13r;
+p6:=z13l{dir-120}..{left}z12l;
+(tim1,tim2)=p2 intersectiontimes p4;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p6 intersectiontimes p2;
+(tim7,tim8)=p2 intersectiontimes p3;
+(tim9,tim10)=p2 intersectiontimes p5;
+(tim11,tim12)=p5 intersectiontimes p3;
+filldraw p1..subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(0,rundy(p4,tim2).zpet) of p4
+ ..reverse subpath(rundy(p3,tim3),infinity) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,tim5).zpet) of p6
+ ..subpath(rundy(p2,tim6),infinity) of p2..cycle;
+oblu:=2oblu;
+infill subpath(rundy(p2,tim7),rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p5,tim10),rundy(p5,tim11).zpet) of p5
+ ..reverse subpath(rundy(p3,tim8),rundy(p3,tim12).zpet) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,11,12,13); labels(10);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_B:
+bskchar "The calligraphic letter B";
+beginchar(chars.cal_B,11u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[], bpos;
+bpos=.5[x_height,bar_height];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+pos10(.65[cal_stem,cal_hair],10); pos11(cal_stem,-10);
+pos12(cal_hair,-90); pos13(cal_hair,180);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_hair; y9=bpos+cal_stem; bot y8r=bpos-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=.5(h-bpos); .5[y6,y7]=.5[h,bpos]; x6=x7; rt x6r=w-3.5u;
+y10-y11=1/3bpos; .5[y10,y11]=.5bpos; x10=x11; rt x10r=w-u;
+lft x13r=x2r+cal_stem; y13=cal_stem; bot y12r=-d-o; x12=x13+cal_stem;
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+p2:=z8r{right}..z10l..z11l..z12l..{up}z13l;
+p3:=z13r{down}..z12r..z11r..z10r..{left}z8l;
+z100=bsktouch(p3,up,p1,down);
+tim0=xpart(p3 intersectiontimes (z100--(x100,y11)));
+tim1=xpart(p1 intersectiontimes (z100--(x100,y6)));
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw subpath(0,4) of p0..p2
+ ..subpath(0,rundy(p3,tim0).zpet) of p3
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); labels(100);
+math_fit(0,.5u#);
+endchar;
+
+iff known chars.cal_C:
+bskchar "The calligraphic letter C";
+beginchar(chars.cal_C,9u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+top y1l=h+o; x1=w-u-cal_hair; rt x2l=w; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/3h;
+bot y5l=-o; x5=.5[x4r,w]; z6=(w,cal_curve+cal_stem);
+filldraw z2l{up}..z1l..z3l..z4l..z5l..{dir90}z6
+ ..z6+left{dir-100}..z5r..z4r..z3r..z1r..{down}z2r..cycle;
+penlabels(1,2,3,4,5,6);
+math_fit(-u#,1.5u#);
+endchar;
+
+iff known chars.cal_D:
+bskchar "The calligraphic letter D";
+beginchar(chars.cal_D,12u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+path p[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_stem; y9=cal_stem; bot y8r=-d-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=1/3h; .5[y6,y7]=.5h; x6=x7; rt x6r=w-u;
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw p0..p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_E:
+bskchar "The calligraphic letter E";
+beginchar(chars.cal_E,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_stem,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_hair,180);
+pos7(cal_hair,180); pos8(.5[cal_stem,cal_hair],90);
+pos10(cal_hair,0); pos11(.5[cal_hair,hair],0); pos12(cal_hair,90);
+pos13(cal_hair,60); pos14(cal_hair,60); pos15(cal_stem,75); pos16(cal_stem,75);
+y1=h; bot y3l=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+rt x7l=w-u; lft x6l=x7; bot y7=0; top y6=.5bar_height;
+bot y8l=0; x8=x2l; y7r:=y8r-currentbreadth; top y9=bot y8l; x8l-x9=2(y8r-y8l);
+top y10=h; rt x10r=w-1.5u; z11=z10+cap_stem*dir(-100); z12r=z1l;
+y10r:=bot bot y10r; y10l:=bot bot y10r;
+x10'-x10l=x10-x10r; y10'=y10r;
+y13=y14=.25[y15,y15l]=.52[y1r,y8r]; x13=x2l; x14=.5[x2r,x6l]; x15=x14+cal_hair;
+z16=z15+hair*right;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z9{dir10}..z8l{dir10}..z7l{dir-10}..{dir130}z6l;
+p4:=z6r{dir-40}..z7r{dir160}..{dir190}z8r..{dir190}z9;
+p5:=z11r---z10r..z10..z12r..z4r;
+p6:=z4l..z12l..z10'..z10l---z11l;
+p7:=z13l{dir10}..{dir-10}z14l..z15l..z16l---z16r..z15r..z14r{dir170}..{dir190}z13r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p4;
+(tim4,tim5)=p2 intersectiontimes p4;
+(tim6,tim7)=p2 intersectiontimes p6;
+(tim8,tim9)=p2 intersectiontimes p7;
+(tim10,tim11-2)=p2 intersectiontimes subpath(2,infinity) of p7;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p4,tim3),infinity) of p4..p3
+ ..subpath(0,rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p2,tim4),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p7,tim9),rundy(p7,tim11).zpet) of p7
+ ..subpath(rundy(p2,tim10),rundy(p2,tim6).zpet) of p2
+ ..subpath(rundy(p6,tim7),infinity) of p6
+ ..p5
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); labels(10');
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_F:
+bskchar "The calligraphic letter F";
+beginchar(chars.cal_F,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90);
+pos6(cal_hair,0); pos7(.5[cal_hair,hair],0); pos8(cal_hair,90);
+pos9(cal_hair,60); pos10(cal_hair,60); pos11(cal_stem,75); pos12(cal_stem,75);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+top y6=h; rt x6r=w-1.5u; z7=z6+cap_stem*dir(-100); z8r=z1l;
+y6r:=bot bot y6r; y6l:=bot bot y6r;
+x6'-x6l=x6-x6r; y6'=y6r;
+y9=y10=y11=.52y1r; x9=x2l; x10=.5[x2r,x6]; x11=x10+cal_hair;
+z12=z11+hair*right;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z7r---z6r..z6..z8r..z4r;
+p4:=z4l..z8l..z6'..z6l---z7l;
+p5:=z9l{dir10}..{dir-10}z10l..z11l..z12l---z12r..z11r..z10r{dir170}..{dir190}z9r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p4;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7-2)=p2 intersectiontimes subpath(2,infinity) of p5;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p5,tim5),rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p2,tim6),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p4,tim3),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(6');
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_G:
+bskchar "The calligraphic letter G";
+beginchar(chars.cal_G,9.5u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cal_curve;
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+pos6(cal_hair,180); pos7(cal_hair,0); pos8(cal_hair,90); pos9(cal_hair,180);
+top y1l=h+o; x1=w-u-cal_hair; rt x2l=w; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/3h;
+bot y5l=-o; x5=.5[x4r,w]; z6=(w,y4);
+x7r=x5; y7=-d+cal_stem; bot y8l=-d-o; .5[x7,x9]=x8=x7+cal_stem; y9=-.35d;
+p0:=z2l{up}..z1l..z3l..z4l..z5l..{dir90}z6;
+p1:=z6+left{dir-100}..z5r..z4r..z3r..z1r..{down}z2r;
+p2=z6l{down}..z9l..z8l..{up}z7l..z7r{down}..z8r..z9r..{up}z6r;
+(tim0,tim1)=p0 intersectiontimes p2;
+filldraw reverse p1
+ ..subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(0,rundy(p0,tim0).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_H:
+bskchar "The calligraphic letter H";
+beginchar(chars.cal_H,14.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_hair,-10);
+pos7(.65[cal_stem,cal_hair],-10); pos8(.45[cal_stem,cal_hair],10); pos9(cal_hair,90);
+pos11(cal_hair,60); pos12(cal_hair,60);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r; top y6l=h; x6r=w-u-cal_hair;
+y8=cal_curve; y7=h-cal_curve-cal_hair; x8r=x7r=w-u-1.5cal_hair;
+bot y9l=0; x9=.5[x8r,w]; z10=(w,y8r);
+y11r=y12=.75[bar_height,x_height]; x11r=x2l; x12=x7r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z11l{right}..{dir50}z12l;
+p4:=z12r{dir-150}..{left}z11r;
+p5:=z6l---z7l..z8l..z9l..{dir100}z10;
+p6:=z10+left{dir-80}..z9r..z8r..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p3;
+(tim4,tim5)=p5 intersectiontimes p3;
+(tim6,tim7)=p5 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p3,tim3),rundy(p3,tim5).zpet) of p3
+ ..subpath(rundy(p5,tim4),infinity) of p5..p6
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p4,tim7),rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p2,tim8),infinity) of p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_I:
+bskchar "The calligraphic letter I";
+beginchar(chars.cal_I,9u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cal_hair,60); pos5(cal_hair,60); pos6(cal_hair,90);
+pos7(cal_hair,90); pos8(cal_hair,60); pos9(cal_hair,60);
+y1=h; bot y3r=0; x1l-x3l=u; x1=.5w;
+x2l=x3r+.5hair; y2=1/3x_height;
+top y5=h; rt x5=rt x8=w-u; lft x4=lft x7=u; z4=whatever[z5r,z1l];
+bot y8=0; z7=whatever[z8l,z3r];
+z6r=z1l; z9l=z3r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r;
+p2:=z5r{dir200}..z6r..{left}z4r;
+p3:=z4l{right}..z6l..{dir20}z5l;
+p4:=z7l{dir20}..z9l..{right}z8l;
+p5:=z8r{left}..z9r..{dir200}z7r;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p1 intersectiontimes p3;
+(tim4,tim5)=p0 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p5;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p5,tim5),infinity) of p5
+ ..p4
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p1,tim6),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p3,tim3),infinity) of p3
+ ..p2..subpath(0,rundy(p3,tim1).zpet) of p3
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_J:
+bskchar "The calligraphic letter J";
+beginchar(chars.cal_J,8u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30);
+pos3(cap_hair,60); pos4(cap_hair,90); pos5(cal_hair,260);
+pos6(cal_stem,210);
+y1=h; rt x1r=w-u;
+top y3r=h+o; rt x1r-lft x3=4u;
+x2l=x1-u; y2=1/3x_height; z4r=z1r;
+y6=.7bar_height; lft x6r=u; x5=1/3[x6,x2]; y5=0;
+p0:=z1l{z2l-z1l}..z2l..z5l..{up}z6l;
+p1:=z3l{dir-20}..{right}z4l;
+p2:=z6+o*up..z6r{down}..z5r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z3r;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),infinity) of p0..p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_K:
+bskchar "The calligraphic letter K";
+beginchar(chars.cal_K,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_stem,-10);
+pos7(cal_stem,10); pos8(cal_hair,90);
+pos10(cal_stem,20); pos11(cal_hair,-10); pos12(cal_stem,0);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+bot y8l=0; y7=cal_curve; x7r=w-u-1.5cal_hair;
+x8=.5[x7r,w]; z9=(w,y7r);
+x6=x2l; y6=.5[x_height,bar_height]; z11l=z6l; x10r=w-2u; y10=h;
+z12=z10+(u,-cal_stem);;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z9+left{dir-80}..z8r..z7r..z6r;
+p3:=z6l..{dir-60}z7l..z8l..{dir100}z9;
+p4:=z10l{dir-40}..z12l{(z11-z12) rotated 20}..{(z11-z12) rotated -10}z11l;
+p5:=z11r{(z12-z11) rotated -10}..{(z12-z11) rotated 20}z12r..{dir130}z10r;
+p6:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p4;
+(tim4,tim5)=p0 intersectiontimes p3;
+(tim6,tim7)=p6 intersectiontimes p3;
+(tim8,tim9)=p6 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p4,(tim3,.5oblu)),infinity) of p4
+ ..subpath(0,rundy(p3,(tim5,.5oblu)).zpet) of p3
+ ..subpath(rundy(p0,tim4),infinity) of p0
+ ..subpath(0,rundy(p6,tim6).zpet) of p6
+ ..subpath(rundy(p3,tim7),infinity) of p3
+ ..subpath(0,rundy(p2,infinity).zpet) of p2
+ ..subpath(rundy(p5,0),infinity) of p5..z10
+ ..subpath(0,rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p6,tim8),infinity) of p6
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+math_fit(0,u#);
+endchar;
+
+iff known chars.cal_L:
+bskchar "The calligraphic letter L";
+beginchar(chars.cal_L,13.5u#,cap_height#,0); uni "non";
+italcorr 0;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_stem,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_hair,180);
+pos7(cal_hair,180); pos8(.5[cal_stem,cal_hair],90);
+y1=h; bot y3l=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+rt x7l=w-u; lft x6l=x7; bot y7=0; top y6=.5bar_height;
+bot y8l=0; x8=x2l; y7r:=y8r-currentbreadth; top y9=bot y8l; x8l-x9=2(y8r-y8l);
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z9{dir10}..z8l{dir10}..z7l{dir-10}..{dir130}z6l;
+p4:=z6r{dir-40}..z7r{dir160}..{dir190}z8r..{dir190}z9;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p4;
+(tim4,tim5)=p2 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p4,tim3),infinity) of p4..p3
+ ..subpath(0,rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p2,tim4),infinity) of p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(9);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_M:
+bskchar "The calligraphic letter M";
+beginchar(chars.cal_M,16u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(hair,-30); pos5(hair,-30); pos6(cal_hair,210); pos7(cal_stem,200);
+pos8(hair,180); pos9(hair,90); pos10(cal_hair,-10);
+pos11(.65[cal_stem,cal_hair],-10); pos12(cal_stem,10); pos13(cal_hair,90);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=u; lft x1l=2u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x4l=0; y4=y1-cal_hair; y5=y6r; z5=z4+whatever*dir60; z6r=z1r+cal_hair*dir60;
+x7=.5w ;y7r=0;
+top y9r=top y10l=h; y8=0; x8l=x7r; x9=w-2u;
+x10r=w-u-cal_hair;
+y12=cal_curve; y11=h-cal_curve-cal_hair; x12r=x11r=w-u-1.5cal_hair;
+bot y13l=0; x13=.5[x12r,w]; z14=(w,y12r);
+p1:=z4r---z5r..z6r..{down}z7r;
+p2:=z7l{up}..z6l..z5l---z4l;
+p3:=z8l{up}..z9l;
+p4:=z9r..{down}z8r;
+p5:=z10l---z11l..z12l..z13l..{dir100}z14;
+p6:=z14+left{dir-80}..z13r..z12r..z11r---z10r;
+(tim0,tim1)=p1 intersectiontimes p4;
+(tim2,tim3)=p3 intersectiontimes p5;
+z100=bsktouch(p4,left,p2,right);
+tim4=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim5=xpart(p2 intersectiontimes(z100--(0,y100)));
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p5,tim3),infinity) of p5
+ ..subpath(0,rundy(p6,infinity).zpet) of p6
+ ..subpath(rundy(p4,0),rundy(p4,tim4).zpet) of p4
+ ..subpath(rundy(p2,tim5),infinity) of p2..cycle;
+math_fit(0,ic#);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.cal_N:
+bskchar "The calligraphic letter N";
+beginchar(chars.cal_N,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(hair,-30); pos5(hair,-30); pos6(cal_hair,210); pos7(cal_stem,200);
+pos8(hair,180); pos9(cal_stem,90); pos10(cal_stem,60);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=u; lft x1l=2u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x4l=0; y4=y1-cal_hair; y5=y6r; z5=z4+whatever*dir60; z6r=z1r+cal_hair*dir60;
+x7=w-3u; y7r=0;
+top y10r=h; y9=h-cal_stem; y8=0; x8l=x7r; x9=w-2.5u; rt x10=w-u;
+p1:=z4r---z5r..z6r..{down}z7r;
+p2:=z7l{up}..z6l..z5l---z4l;
+p3:=z8l{(z9-z8)rotated 10}..{(z9-z8)rotated -10}z9l..{right}z10l;
+p4:=z10r{left}..z9r{(z8-z9)rotated -10}..{(z8-z9) rotated 10}z8r;
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+(tim0,tim1)=p1 intersectiontimes p4;
+z100=bsktouch(p4,left,p2,right);
+tim2=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p2 intersectiontimes(z100--(0,y100)));
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p4,tim2).zpet) of p4
+ ..subpath(rundy(p2,tim3),infinity) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_O:
+bskchar "The calligraphic letter O";
+beginchar(chars.cal_O,10u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+pos6(.65[cal_stem,cal_hair],170);
+top y1l=h+o; x1=w-2u-cal_hair; rt x2l=w-u; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/3h;
+bot y5l=-o; x5=.5[x4r,w];
+y6=.55[y4,y3]; rt x6l=w; y7=y2-cal_hair; lft x7=rt x5;
+filldraw z2l{up}..z1l..z3l..z4l..z5l..z6l..{dir160}z7..{dir-20}z7+down
+ ..z6r..z5r..z4r..z3r..z1r..{down}z2r..cycle;
+penlabels(1,2,3,4,5,6,7);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_P:
+bskchar "The calligraphic letter P";
+beginchar(chars.cal_P,10u#,cap_height#,0); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+path p[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_hair; y9=bar_height+cal_stem; bot y8r=bar_height-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=.5(h-bar_height); .5[y6,y7]=.5[h,bar_height]; x6=x7; rt x6r=w-2u;
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw p0..p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+math_fit(0,-2u#);
+endchar;
+
+iff known chars.cal_Q:
+bskchar "The calligraphic letter Q";
+beginchar(chars.cal_Q,11u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+pos6(.65[cal_stem,cal_hair],170); pos8(cal_hair,160); pos9(cal_hair,60);
+pos10(cal_hair,90);
+top y1l=h+o; x1=w-3u-cal_hair; rt x2l=w-2u; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/6h;
+bot y5l=1/12h; x5=.5[x4r,x6r]; y8=.5y5; x8r=x2;
+y6=.55[y4,y3]; rt x6l=w-3u; y7=y2-cal_hair; lft x7=rt x5;
+x9=x5; y9l=-.7d; rt x10=w; bot y10l=-d;
+p0:=z9l{z8-z9}..z8l..z2l..z1l..z3l..z4l..z5l..z6l..{dir160}z7..{dir-20}z7+down
+ ..z6r..z5r..z4r..z3r..z1r..z2r..z8r..{z9-z8}z9r;
+p1:=z10r{dir200}..{left}z9;
+p2:=z9l{right}..{dir20}z10l;
+(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p1;
+filldraw subpath(rundy(p2,0),infinity) of p2
+ ..subpath(0,rundy(p1,(tim1,2oblu)).zpet) of p1
+ ..subpath(rundy(p0,(tim0,2oblu)),rundy(p0,infinity).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_R:
+bskchar "The calligraphic letter R";
+beginchar(chars.cal_R,10.5u#,cap_height#,0); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+pos10(.5[cal_stem,cal_hair],0); pos11(cal_stem,10); pos12(cal_hair,90);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_hair; y9=bar_height+cal_stem; bot y8r=bar_height-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=.5(h-bar_height); .5[y6,y7]=.5[h,bar_height]; x6=x7; rt x6r=w-2.5u;
+bot y12l=0; y11=cal_curve; x11r=w-u-1.5cal_hair;
+x12=.5[x11r,w]; z13=(w,y11r);
+x10r=x2l; y10=.5[x_height,bar_height];
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+p2:=z13+left{dir-80}..z12r..z11r..z10r..z10l;
+p3:=z10l..{dir-60}z11l..z12l..{dir100}z13;
+p4:=z1l{z2l-z1l}..z2l..z3l;
+p5:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r;
+(tim0,tim1)=p4 intersectiontimes p2;
+(tim2,tim3)=p4 intersectiontimes p3;
+(tim4,tim5)=p5 intersectiontimes p3;
+z100=bsktouch(subpath(1,infinity) of p1,down,p2,up);
+tim6=xpart(p1 intersectiontimes (z100--(x100,h)));
+tim7=xpart(p2 intersectiontimes (z100--(x100,0)));
+(tim8,tim9)=p5 intersectiontimes p2;
+tim10=xpart(p2 intersectiontimes (z8l---(x8,0)));
+filldraw subpath(0,rundy(p4,tim0).zpet) of p4
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim2),infinity) of p4
+ ..subpath(0,rundy(p5,tim4).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1
+ ..subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p2,tim10),rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p5,tim8),infinity) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); labels(100);
+math_fit(0,ic#);
+endchar;
+
+iff known chars.cal_S:
+bskchar "The calligraphic letter S";
+beginchar(chars.cal_S,9u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(cal_hair,30); pos3(cal_stem,225); pos4(cal_hair,30);
+pos5(cal_stem,180); pos6(cal_stem,180);
+y5=.5[y2l,y3]+.5like_cap_hair;
+y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u;
+x3=x4=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l];
+y3=.5[y2l,y4r]+.5cap_hair;
+x5l=3u; x1r=w-x5r+.5u;
+pos1(cal_stem,-10); y1=.5[y5,y2l];
+pos7(cap_stem,30); x7l=w-x6l; y7=y6;
+filldraw z1r{dir110}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r..z7l{down}..z4l{right}
+ ..z6l..z3l..z5l..{right}z2l..{dir-70}z1l..cycle;
+math_fit(0,0);
+penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.cal_T:
+bskchar "The calligraphic letter T";
+beginchar(chars.cal_T,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90);
+pos6(cal_hair,0); pos7(.5[cal_hair,hair],0); pos8(cal_hair,90);
+pos9(cal_hair,180); pos10(.5[cal_hair,hair],180);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=.5w;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+top y6=h; rt x6r=w-1.5u; z7=z6+cap_stem*dir(-100); z8r=z1l;
+y6r:=bot bot y6r; y6l:=bot bot y6r;
+x6'-x6l=x6r-x6; y6'=y6r;
+top y9=h; lft x9r=.5u; z10=z9+cap_stem*dir(-70);
+y9r:=y6r; y9l:=y6l;
+x9'-x9l=x9-x9r; y9'=y9r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z8l..z9'..z9l---z10l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..z9..z9r---z10r;
+p3:=z7r---z6r..z6..z8r..z4r;
+p4:=z8l{dir20}..{dir-20}z6'..z6l---z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p4;
+tim4=xpart(p3 intersectiontimes (z8r--(x8r,h+stem)));
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p4,tim3),infinity) of p4
+ ..subpath(0,rundy(p3,tim4)) of p3
+ ..subpath(rundy(p2,4),infinity) of p2
+ ..reverse subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(6',9');
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_U:
+bskchar "The calligraphic letter U";
+beginchar(chars.cal_U,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30);
+pos3(cap_hair,60); pos4(cap_hair,90); pos5(cal_hair,260);
+pos6(cal_stem,150); pos7(cal_stem,160); pos8(hair,-90);
+y1=h; rt x1r=w-u; x7r=1.5u; y7=.5[x_height,h]; y8l=h+o; x8=x7r-u;
+top y3r=h+o; rt x1r-lft x3=3u;
+x2l=x1-u; z4r=z1r;
+y2=y6=.5bar_height; lft x6r=u; x5=1/3[x6,x2]; y5=0;
+p0:=z1l{z2l-z1l}..z2l..z5l..z6l..{dir80}z7l..{dir200}z8l;
+p1:=z3l{dir-20}..{right}z4l;
+p2:=z8r{dir20}..z7r{dir-100}..z6r..z5r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z3r;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),infinity) of p0..p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_V:
+bskchar "The calligraphic letter V";
+beginchar(chars.cal_V,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(hair,-30); pos3(cal_hair,210); pos4(cal_stem,200);
+pos5(hair,180); pos6(cal_stem,90); pos7(cal_stem,60);
+y3r=h-cap_hair; lft x3r=2u+cal_hair;
+lft x1l=0; y1=.9h; y2=y3r; z2=z1+whatever*dir60;
+x4=.5w; y4r=0;
+top y7r=h; y6=h-cal_stem; y5=0; x5l=x4r; x6=w-2.5u; rt x7=w-u;
+p1:=z1r---z2r..z3r..{down}z4r;
+p2:=z4l{up}..z3l..z2l---z1l;
+p3:=z5l{(z6-z5)rotated -10}..{(z6-z5)rotated 10}z6l..{right}z7l;
+p4:=z7r{left}..z6r{(z5-z6)rotated 10}..{(z5-z6) rotated -10}z5r;
+(tim0,tim1)=p1 intersectiontimes p4;
+z100=bsktouch(p4,left,p2,right);
+tim2=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p2 intersectiontimes(z100--(0,y100)));
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p4,tim2).zpet) of p4
+ ..subpath(rundy(p2,tim3),infinity) of p2..cycle;
+penlabels(1,2,3,4,5,6,7);
+math_fit(0,-2u#);
+endchar;
+
+iff known chars.cal_W:
+bskchar "The calligraphic letter W";
+beginchar(chars.cal_W,16.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(hair,-30); pos3(cal_hair,210); pos4(cal_stem,200);
+pos5(hair,180); pos6(cal_stem,90); pos7(cal_stem,60);
+pos8(hair,-30); pos9(hair,-30); pos10(cal_hair,210); pos11(cal_stem,200);
+pos12(hair,180); pos13(cal_stem,90); pos14(cal_stem,60);
+y3r=y10r=h-cap_hair; lft x3r=lft x10r-5u=u+cal_hair;
+lft x1l=lft x8l-5u=0; y1=y8=.9h; y2=y9=y3r; z2=z1+whatever*dir60; z9=z8+whatever*dir60;
+x4=.375w; x11=.7w; y4r=y11r=0;
+top y7r=top y14r=h; y6=y13=h-cal_stem; y5=y12=0; x5l=x4r; x12l=x11r; x6=w-6u; x13=w-1.5u;
+rt x7=w-5u; rt x14=w;
+p1:=z1r---z2r..z3r..{down}z4r;
+p2:=z4l{up}..z3l..z2l---z1l;
+p3:=z5l{(z6-z5)rotated -10}..{(z6-z5)rotated 10}z6l..{right}z7l;
+p4:=z7r{left}..z6r{(z5-z6)rotated 10}..{(z5-z6) rotated -10}z5r;
+p5:=z8r---z9r..z10r..{down}z11r;
+p6:=z11l{up}..z10l..z9l---z8l;
+p7:=z12l{(z13-z12)rotated -10}..{(z13-z12)rotated 10}z13l..{right}z14l;
+p8:=z14r{left}..z13r{(z12-z13)rotated 10}..{(z12-z13) rotated -10}z12r;
+(tim0,tim1)=p1 intersectiontimes p4;
+z100=bsktouch(p4,left,p2,right);
+tim2=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p2 intersectiontimes(z100--(0,y100)));
+(tim4,tim5)=p3 intersectiontimes p5;
+z101=bsktouch(p8,left,p6,right);
+tim6=xpart(p8 intersectiontimes(z101--(w,y101)));
+tim7=xpart(p6 intersectiontimes(z101--(0,y101)));
+(tim8,tim9)=p5 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p3,tim4).zpet) of p3
+ ..subpath(rundy(p5,tim5),infinity) of p5
+ ..p7
+ ..subpath(0,rundy(p8,tim6).zpet) of p8
+ ..subpath(rundy(p6,tim7),2) of p6
+ ..subpath(1,rundy(p5,tim8).zpet) of p5
+ ..subpath(rundy(p4,tim9),rundy(p4,tim2).zpet) of p4
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14); labels(100,101);
+math_fit(0,-u#);
+endchar;
+
+iff known chars.cal_X:
+bskchar "The calligraphic letter X";
+beginchar(chars.cal_X,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0); pos7(cal_stem,-10);
+pos8(cal_stem,10); pos9(cal_hair,90);
+rt x1l=u; y1=cal_stem; bot y2l=-d-o; .45[x1,x3]=x2=x1+cal_stem; y3=.45bar_height;
+y4=1[bar_height,x_height]; z4=z3+whatever*dir75; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair; bot y9l=0; y8=cal_curve; x8r=w-u-1.5cal_hair;
+x9=.5[x8r,w]; z10=(w,y8r);
+lft x7l=u; y7=h;
+p0:=z1r{down}..z2r..z3r..z4r..{right}z5r..{down}z6r;
+p1:=z6l{up}..{left}z5l..z4l..z3l..z2l..{up}z1l;
+p2:=z10+left{dir-80}..z9r..z8r..z7r;
+p3:=z7l..{dir-60}z8l..z9l..{dir100}z10;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4,tim5)=p1 intersectiontimes p2;
+(tim6,tim7)=p1 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..(reverse subpath(0,rundy(p3,tim1).zpet) of p3)
+ ..(reverse subpath(rundy(p2,(tim3,2oblu)),infinity) of p2)
+ ..subpath(rundy(p0,(tim2,2oblu)),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..(reverse subpath(0,rundy(p2,tim5).zpet) of p2)
+ ..(reverse subpath(rundy(p3,(tim7,2oblu)),infinity) of p3)
+ ..subpath(rundy(p1,(tim6,2oblu)),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(10);
+math_fit(-.5u#,u#);
+endchar;
+
+iff known chars.cal_Y:
+bskchar "The calligraphic letter Y";
+beginchar(chars.cal_Y,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0);
+pos7(hair,-30); pos8(hair,-30); pos9(cal_hair,210); pos10(cal_stem,200);
+y1=cal_stem; bot y2l=-d-o; .5[x1,x3]=x2=4.5u=x1+cal_stem; y3=.5bar_height;
+y4=.5[bar_height,x_height]; z4=z3+whatever*dir80; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair;
+y9r=h-cap_hair; lft x9r=2u+cal_hair;
+lft x7l=u; y7=.9h; y8=y9r; z8=z7+whatever*dir60;
+x10l=x4; y10r=0;
+p1:=z6r{up}..{left}z5r..z4r..z3r..z2r..{up}z1r;
+p2:=z1l{down}..z2l..z3l..z4l..z5l{right}..{down}z6l;
+p3:=z7r---z8r..z9r..{down}z10r;
+p4:=z10l{up}..z9l..z8l---z7l;
+(tim0,tim1)=p3 intersectiontimes p1;
+z100=bsktouch(p1,left,p4,right);
+tim2=xpart(p1 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p4 intersectiontimes(z100--(0,y100)));
+filldraw subpath(0,rundy(p3,tim0).zpet) of p3
+ ..subpath(rundy(p1,tim1),infinity) of p1..p2
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p4,tim3),infinity) of p4..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(10);
+math_fit(-u#,-2u#);
+endchar;
+
+iff known chars.cal_Z:
+bskchar "The calligraphic letter Z";
+beginchar(chars.cal_Z,11u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,90); pos2(cal_hair,180); pos3(.5[cal_hair,hair],180);
+pos4(cal_stem,-10); pos5(cal_stem,0); pos6(cal_hair,0);
+pos7(cal_hair,90); pos8(cal_stem,70); pos9(hair,90);
+top y2=top y1r=h; lft x2r=0; z3=z2+cap_stem*dir(-70);
+y2r:=bot bot y2r; y2l:=bot bot y2r; rt x1r=w-u;
+x2'-x2l=x2-x2r; y2'=y2r;
+z4r=z1r; y5=bar_height; x5=.5w; top y7l=0; z7r=z6l; lft x6l=u;
+x9=w; bot y9=-cal_hair; y8l=y6; x8=2/3[x7,x9];
+p1:=z1l..z2'..z2l---z3l;
+p2:=z3r---z2r..z2..z1r;
+p3:=z4r..z5r..z6r;
+p4:=z6l..z5l..z4l;
+p5:=z7r..z8r..z9r;
+p6:=z9l..z8l..z7l;
+(tim0,tim1)=p1 intersectiontimes p4;
+(tim2,tim3)=p3 intersectiontimes p5;
+filldraw subpath(rundy(p1,tim0),infinity) of p1
+ ..subpath(0,rundy(p2,infinity).zpet) of p2
+ ..subpath(rundy(p3,0),rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p5,tim3),infinity) of p5
+ ..subpath(0,rundy(p6,infinity).zpet) of p6
+ ..subpath(0,rundy(p4,tim1).zpet) of p4..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(6',9');
+math_fit(0,.5u#);
+endchar;
+
+iff known chars.cal_Gamma:
+bskchar "The calligraphic Greek letter Gamma";
+beginchar(chars.cal_Gamma,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90);
+pos6(cal_hair,0); pos7(.5[cal_hair,hair],0); pos8(cal_hair,90);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+top y6=h; rt x6r=w-1.5u; z7=z6+cap_stem*dir(-100); z8r=z1l;
+y6r:=bot bot y6r; y6l:=bot bot y6r;
+x6'-x6l=x6-x6r; y6'=y6r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z7r---z6r..z6..z8r..z4r;
+p4:=z4l..z8l..z6'..z6l---z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p4,tim3),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(6');
+math_fit(0,-5u#);
+endchar;
+
+iff known chars.cal_Lambda:
+bskchar "The calligraphic Greek letter Lambda";
+beginchar(chars.cal_Lambda,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0);
+pos7(.65[cal_stem,cal_hair],-10); pos8(cal_stem,10); pos9(cal_hair,90);
+pos11(cal_hair,-10);
+rt x1l=u; y1=cal_stem; bot y2l=-d-o; .5[x1,x3]=x2=x1+cal_stem; y3=.5bar_height;
+y4=.5[bar_height,x_height]; z4=z3+whatever*dir75; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair; y8=cal_curve; y7=y5l-cal_curve; x8r=x7r=x5-.5cal_hair;
+bot y9l=0; x9=.5[x8r,w];
+z10=(w,y8r); z11r=z5r;
+p1:=z1r{down}..z2r..z3r..z4r..{right}z5r..{down}z6r;
+p2:=z6l{up}..{left}z5l..z4l..z3l..z2l..{up}z1l;
+p3:=z11l---z7l..z8l..z9l..{dir100}z10;
+p4:=z10+left{dir-80}..z9r..z8r..z7r---z11r;
+(tim1,tim2)=p2 intersectiontimes p4;
+(tim3,tim4)=p3 intersectiontimes p2;
+filldraw p1..subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(0,rundy(p4,tim2).zpet) of p4
+ ..reverse subpath(rundy(p3,(tim3,2oblu)),infinity) of p3
+ ..subpath(rundy(p2,(tim4,2oblu)),infinity) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,11); labels(10);
+math_fit(-u#,u#);
+endchar;
+
diff --git a/fonts/boisik/bskletters-r.mf b/fonts/boisik/bskletters-r.mf
new file mode 100644
index 0000000000..2fa53b208f
--- /dev/null
+++ b/fonts/boisik/bskletters-r.mf
@@ -0,0 +1,11022 @@
+%Boisik Latin letters in Roman form
+%(plus blackboard-bold and sans-serif variants for math only!)
+
+numeric bbs; bbs:=if cap_hair+eps>tiny-eps: 2 else 1 fi; %correction for BB letters
+
+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_A_BB:
+bskchar "The blackboard-bold letter A";
+beginchar(chars.latin_A_BB,14u#,cap_height#,0); uni "0x1D538";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+numeric oblu.more; oblu.more:=2oblu;
+bot y100=y2r.c; z100=whatever[z3l,z2r];
+infill ifobl(3',3l,2r,2l,,more)---obl(100,3l,2r.c)..z2r---obl(2l,2r,3')---cycle;
+labels(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_A_SS:
+bskchar "The sans-serif letter A";
+beginchar(chars.latin_A_SS,14u#,cap_height#,0); uni "0x1D5A0";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+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);
+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'];
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+z100l=whatever[z1l,z3l]; z100r=whatever[z1r,z4l];
+z101l=whatever[z2l,z5l]; z101r=whatever[z2r,z3l];
+oblu:=cap_bar;
+filldraw z100l---z3l---z101r..z2..z101l---obl(5l,2l,4l)---obl(4l,5l,1l)---z100r...z1...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,100,101); labels(3'');
+endchar;
+
+charscription(13u,cap_height,0)(
+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);
+);
+
+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;
+usechar;
+math_fit(0,.75ic#);
+endchar;
+
+iff known chars.latin_B_BB:
+bskchar "The blackboard-bold letter B";
+beginchar(chars.latin_B_BB,13u#,cap_height#,0); uni "0x1D539";
+italcorr .5[x_height#,cap_height#]*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+z102=bsktouch(subpath(3,4) of p2,bbs*dir-90,p3,dir60);
+z103=bsktouch(subpath(5,6) of p0,bbs*dir90,p1,dir-60);
+tim100-5=xpart(subpath(5,6) of p0 intersectiontimes (z103--(x103,y4r)));
+tim101-3=xpart(subpath(3,4) of p2 intersectiontimes (z102--(x102,y9l+5)));
+tim102=xpart(p3 intersectiontimes (z102--(x102,y10)));
+tim103=xpart(p3 intersectiontimes ((x0-hair-1,y0)--(x0-hair-1,y10)));
+tim104=xpart(p1 intersectiontimes ((x0-hair-1,y0)--(x0-hair-1,y5)));
+tim105=xpart(p1 intersectiontimes (z4+u*right--(x4+u,y5)));
+tim106=xpart(p1 intersectiontimes (z103--(x103,y5)));
+infill subpath(rundy(p0,(tim100,bbw)),rundy(p0,tim1).zpet) of p0
+ ..(reverse subpath(rundy(p2,(tim101,bbw)),rundy(p2,tim2).zpet) of p2)
+ ..(reverse subpath(tim103,rundy(p3,(tim102,bbw)).zpet) of p3)
+ ..subpath(tim104,rundy(p1,(tim106,bbw)).zpet) of p1..cycle;
+labels(102,103);
+endchar;
+
+iff known chars.latin_B_SS:
+bskchar "The sans-serif letter B";
+beginchar(chars.latin_B_SS,13u#,cap_height#,0); uni "0x1D5A1";
+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(1.5cap_stem,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(cap_hair,90); pos7(1.5cap_stem,90);
+pos8(ser_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}..z1..z3r---z4r..z5r..z6r---z7;
+p1=z7l{dir90}..{right}z6l..z5l..{left}z4l..{up}z3l;
+p2=z2l.b{up}..z2---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;
+
+iff known chars.sign_baht:
+bskchar "Baht sign";
+beginchar(chars.sign_baht,13u#,Acc_height#,Acc_height#-cap_height#); uni "0x0E3F";
+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=cap_height-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);
+pos11(hair,0); pos12(hair,0);
+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=cap_height+drop_stem; x8=x3; x9=.5[x6,x4];
+x5-x10=.3cap_curve; y10=.45[y9,y6];
+x11=x12=.5[x4,x9]; top y11=h; bot y12=-d;
+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;
+p4=z12l--z11l;
+p5=z11r--z12r;
+z0=bsktouch(p0,2up,p2,2down);
+tim1=xpart(p0 intersectiontimes (z0--(x0,bar_height)));
+tim2=xpart(p2 intersectiontimes (z0--(x0,x_height)));
+(tim3,tim4)=p2 intersectiontimes p4;
+(tim5,tim6)=p2 intersectiontimes p5;
+(tim7,tim8)=p0 intersectiontimes p4;
+(tim9,tim10)=p0 intersectiontimes p5;
+(tim11,tim12)=p1 intersectiontimes p4;
+(tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p4;
+(tim15,tim16)=p1 intersectiontimes p5;
+(tim17-2,tim18)=subpath(2,infinity) of p1 intersectiontimes p5;
+(tim19,tim20)=p3 intersectiontimes p4;
+(tim21-2,tim22)=subpath(2,infinity) of p3 intersectiontimes p4;
+(tim23,tim24)=p3 intersectiontimes p5;
+(tim25-2,tim26)=subpath(2,infinity) of p3 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim7).zpet) of p0
+ ..(reverse (subpath(rundy(p5,tim10),infinity) of p5
+ ..subpath(0,rundy(p4,tim8).zpet) of p4))
+ ..subpath(rundy(p0,tim9),rundy(p0,tim1).zpet) of p0
+ ..(reverse (subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p4,tim4),infinity) of p4
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p2,tim5),rundy(p2,tim2).zpet) of p2))
+ --cycle;
+infill subpath(0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p4,tim12).zpet,rundy(p4,tim14)) of p4
+ ..subpath(rundy(p1,tim13),infinity) of p1---cycle;
+infill subpath(rundy(p1,tim15),rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(p5,tim18).zpet,rundy(p5,tim16)) of p5..cycle;
+infill subpath(0,rundy(p3,tim19).zpet) of p3
+ ..subpath(rundy(p4,tim20),rundy(p4,tim22).zpet) of p4
+ ..subpath(rundy(p3,tim21),infinity) of p3---cycle;
+infill subpath(rundy(p3,tim23),rundy(p3,tim25).zpet) of p3
+ ..subpath(rundy(p5,tim26),rundy(p5,tim24).zpet) of p5..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12);
+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;
+math_fit(-.5cap_height#*slant+.5u#,.75ic#);
+endchar;
+
+iff known chars.latin_Ccaron:
+bskchar "The letter C with caron";
+beginchar(chars.latin_Ccaron,13.3u#,Acc_height#,0); uni "0x010C";
+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.latin_C_BB:
+bskchar "The blackboard-bold letter C";
+beginchar(chars.latin_C_BB,13.3u#,cap_height#,0); uni "0x2102";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=subpath(-1,1) of p0;
+p101:=reverse subpath(-1,1) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(p100,bbs*down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+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.sign_euro:
+bskchar "The Euro sign";
+beginchar(chars.sign_euro,12u#,cap_height#,0); uni "0x20AC";
+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);
+pos6(cap_bar,90); pos7(cap_bar,90);
+pos8(.5[cap_stem,cap_hair],90); pos9(.5[cap_stem,cap_hair],90);
+lft x1l=2u; rt x3r=w-o; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+lft x8=.75u; lft x6=u; x9=x4; z6-z8=z7-z9; .5[y6,y8]=bot y1-o; y6l-y8r=cap_bar+cap_stem;
+z9-z8=whatever*dir(10);
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+z5'=((.5w,y3+.3h)--(2w,y3+.3h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.3h)--(2w,y3+.3h)) intersectiontimes reverse p0);
+z5''=((.5w,y3-.3h+o)--(2w,y3-.3h+o)) intersectionpoint p0; tim2= ypart(((.5w,y3-.3h)--(2w,y3-.3h)) 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);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+p2:=subpath(0,tim1) of reverse p0..z5'a--z5'b{dir225}..subpath (tim3,5) of p1..
+ reverse (subpath(0,tim2) of p0..z5''a--z5''b{dir135}..
+ reverse subpath (1,tim4) of p1) & cycle;
+p3:=z6l--z7ll;
+p4:=z7r--z6r;
+p5:=z8l--z9ll;
+p6:=z9r--z8r;
+(tim5,tim6)=subpath(0,1) of p2 intersectiontimes p3;
+(tim7,tim8)=subpath(0,1) of p2 intersectiontimes p4;
+(tim9-1,tim10)=subpath(1,length p2) of p2 intersectiontimes p4;
+(tim11-1,tim12)=subpath(1,length p2) of p2 intersectiontimes p3;
+(tim13-1,tim14)=subpath(1,length p2) of p2 intersectiontimes p6;
+(tim15-1,tim16)=subpath(1,length p2) of p2 intersectiontimes p5;
+(tim17-10,tim18)=subpath(10,length p2) of p2 intersectiontimes p5;
+(tim19-10,tim20)=subpath(10,length p2) of p2 intersectiontimes p6;
+filldraw subpath(0,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p3,tim6),infinity) of p3
+ ..subpath(0,rundy(p4,tim8).zpet) of p4
+ ..subpath(rundy(p2,tim7),rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p4,tim10), infinity) of p4
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p2,tim11),rundy(p2,tim13).zpet) of p2
+ ..subpath(rundy(p6,tim14),infinity) of p6
+ ..subpath(0,rundy(p5,tim16).zpet) of p5
+ ..subpath(rundy(p2,tim15),rundy(p2,tim17).zpet) of p2
+ ..subpath(rundy(p5,tim18),infinity) of p5
+ ..subpath(0,rundy(p6,tim20).zpet) of p6
+ ..subpath(rundy(p2,tim19),length p2) of p2..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,);
+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;
+
+iff known chars.latin_C_SS:
+bskchar "The sans-serif letter C";
+beginchar(chars.latin_C_SS,12.5u#,cap_height#,0); uni "0x1D5A2";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_hair,180); pos4(1.1cap_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);
+tim3=ypart(((.5w,y3+.2h)--(w,y3+.2h)) intersectiontimes p1);
+tim4=ypart(((.5w,y3-.2h)--(w,y3-.2h)) intersectiontimes p1);
+filldraw subpath(0,tim1) of reverse p0
+ ..subpath (tim3,5) of p1
+ ..reverse (subpath(0,tim2) of p0..reverse subpath (1,tim4) of p1) & cycle;
+penlabels(1,2,3,4); labels(5,5',5'');
+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;
+math_fit(0,.75ic#);
+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;
+
+iff known chars.latin_D_BB:
+bskchar "The blackboard-bold letter D";
+beginchar(chars.latin_D_BB,15u#,cap_height#,0); uni "0x1D53B";
+italcorr x_height#*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+p100=z4r{right}..z5r..{left}z6r;
+p101=z6l{right}..z5l..{left}z4l;
+z102=bsktouch(subpath (0,1) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath (0,1) of p101,bbs*up,p100,down);
+tim100=xpart(p100 intersectiontimes (z102--(x102,y4r)));
+tim101=xpart(p101 intersectiontimes (z102--(x102,y5)));
+tim102=xpart(p100 intersectiontimes (z103--(x103,y6r)));
+tim103=xpart(p101 intersectiontimes (z103--(x103,y5)));
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(102,103);
+endchar;
+
+iff known chars.latin_D_SS:
+bskchar "The sans-serif letter D";
+beginchar(chars.latin_D_SS,14u#,cap_height#,0); uni "0x1D5A3";
+italcorr x_height#*slant-.25u#;
+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(1.5cap_stem,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(cap_hair,90); pos7(1.5cap_stem,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 and ((substring(0,5) of font_identifier_) <> "BSKHC"):+u fi; x6=.5[x1r,x5l]-u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+filldraw z1l.b{down}..z1..z3r---z4r..z5r..{left}z6r---z2..z2l.b---cycle;
+infill z7l..{right}z6l..z5l..{left}z4l..z3l---cycle;
+penlabels(1,2,3,4,5,6,7);
+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;
+math_fit(0,ic#);
+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_E_BB:
+bskchar "The blackboard-bold letter E";
+beginchar(chars.latin_E_BB,13.5u#,cap_height#,0); uni "0x1D53C";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+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;
+
+iff known chars.latin_E_SS:
+bskchar "The sans-serif letter E";
+beginchar(chars.latin_E_SS,12u#,cap_height#,0); uni "0x1D5A4";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); pos4(cap_hair,90);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(1.5cap_stem,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+4/8(x4-x2r); x5'=x2r; x6'-x6=u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+z1'=(x1r,y3l); z2'=(x2r,y4l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1---z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(1',3l,5'l)
+ ---z5'l{dir80}..z5l---z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,4l)
+ ---z4l+cap_stem*left...z4...z4r+cap_stem*left---z2..z2l.b---cycle;
+penlabels(1,2,3,4,5,5',6); labels(1',2',6');
+endchar;
+
+charscription(18u,cap_height,0)(
+numeric alpha;
+path p; oblu.more:=3oblu;
+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-.5currentbreadth)*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).more--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;
+
+charscription(12u,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;
+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');
+);
+
+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;
+usechar;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.latin_F_BB:
+bskchar "The blackboard-bold letter F";
+beginchar(chars.latin_F_BB,12u#,cap_height#,0); uni "0x1D53D";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_F_SS:
+bskchar "The sans-serif letter F";
+beginchar(chars.latin_F_SS,11u#,cap_height#,0); uni "0x1D5A5";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,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+4/8(x3-x2r); x5'=x2r; x6'-x6=u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+z2'=(x2r,y3l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1..z1r.b---z5'l{dir80}..z5l---
+ z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,3l)---z3l+cap_stem*left
+ ...z3...z3r+cap_stem*left---z2..z2l.b---cycle;
+penlabels(1,2,3,5,5',6); labels(2',6');
+math_fit(0,ic#-3u#);
+endchar;
+
+charscription(14.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-2.3u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+penpos6(beak,0); rt x6r=w-u;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
+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 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);
+tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p0);
+if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi
+filldraw z1r{up}..z4r..{direction tim1 of reverse p0}z5'..z5'a--z5'b---z5'e
+ ..subpath (tim3,5) of p1..
+ reverse (subpath(0,tim5) of p0---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 p1) & 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;
+math_fit(-.5cap_height#*slant+.5u#,ic#);
+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.latin_G_BB:
+bskchar "The blackboard-bold letter G";
+beginchar(chars.latin_G_BB,14.3u#,cap_height#,0); uni "0x1D53E";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+usechar;
+oblu.more:=2oblu;
+infill obl(5''a,5''f,5''b)---obl(5''b,5''a,5''d).more
+ ---obl(5''d,5''b,5''f)---obl(5''f,5''e,5''a)---cycle;
+p100:=subpath(-1,1) of p0;
+p101:=reverse subpath(-1,1) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(p100,bbs*down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.latin_G_SS:
+bskchar "The sans-serif letter G";
+beginchar(chars.latin_G_SS,12.5u#,cap_height#,0); uni "0x1D5A6";
+italcorr cap_height#*slant-u#;
+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);
+lft x1l=u-o; rt x3r=w-1.5u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+penpos6(cap_stem,0); rt x6r=w-u;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p0);
+tim3= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p1);
+z5'=(x3r,y3+.2h);
+y6=bar_height;
+z5''b=(x6r,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);
+tim5=ypart((z6l--(x6l,0)) intersectiontimes p0);
+filldraw reverse subpath (tim1,length(p0)) of p0
+ ..subpath (tim3,5) of p1..reverse (subpath(0,tim5) of p0---z6l--z6r---z5''b---z5''e
+ ..reverse subpath (1,tim4) of p1) & 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);
+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;
+math_fit(0,.75ic#);
+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_H_BB:
+bskchar "The blackboard-bold letter H";
+beginchar(chars.latin_H_BB,15u#,cap_height#,0); uni "0x210D";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+bot z102=(x3r,y3r.c); top z103=(x4r,y4r.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(102,3r.c,4r)---obl(103,3r,4r.c)...z4r---cycle;
+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;
+
+iff known chars.latin_H_SS:
+bskchar "The sans-serif letter H";
+beginchar(chars.latin_H_SS,13.5u#,cap_height#,0); uni "0x1D5A7";
+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(1.5cap_stem,90); pos8(1.5cap_stem,90);
+y5=y6=.52h; x5=x1r.a; x6=x3l.a;
+y7=y8=y5; x7=x1r; x8=x3l;
+filldraw z1l.b{down}..z1..z1r.b---z7l{dir80}..z5l---z6l..
+ {dir-80}z8l---z3l.b..z3..z3r.b---z4r.b..
+ z4..z4l.b---z8r{dir-100}..z6r---z5r..{dir100}z7r---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+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;
+math_fit(0,.75ic#);
+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_I_BB:
+bskchar "The blackboard-bold letter I";
+beginchar(chars.latin_I_BB,6u#,cap_height#,0); uni "0x1D540";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+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;
+
+iff known chars.latin_I_SS:
+bskchar "The sans-serif letter I";
+beginchar(chars.latin_I_SS,6u#,cap_height#,0); uni "0x1D5A8";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+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}..z1..z1r.b---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2);
+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;
+math_fit(.6desc_depth#*slant+1.5u#,ic#-3u#);
+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_J_BB:
+bskchar "The blackboard-bold letter J";
+beginchar(chars.latin_J_BB,7u#,cap_height#,.6desc_depth#); uni "0x1D541";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+top z100=(x2r,y2r.c);
+p100=z1l{down}..{left}z3l;
+p101=z3r{right}..{up}z1r;
+z101=bsktouch(p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,y3r)));
+infill obl(2l,2r,1l)---subpath(0,rundy(p100,(tim100,.75bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.75bbw)),infinity) of p101---obl(100,1r,2r.c)...z2r---cycle;
+labels(101);
+endchar;
+
+iff known chars.latin_J_SS:
+bskchar "The sans-serif letter J";
+beginchar(chars.latin_J_SS,7u#,cap_height#,.6desc_depth#); uni "0x1D5A9";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); pos4(cap_stem,160);
+bot y1=-cap_hair; top y2=h; rt x1r=rt x2r=w-2u;
+bot y3r=-d; x3=u; top y4=-.3d; x4l=-u; z4'=z4+.75currentbreadth*(unitvector(z4l-z4r) rotated 90);
+cap_serifs_tl(2l); cap_serifs_tr(2r);
+filldraw z3r{right}...z1r---z2r.b..z2..z2l.b---z1l...{left}z3l..{up}z4l..
+ if (substring(0,5) of font_identifier_) <> "BSKHC": z4'.. fi {down}z4r..cycle;
+penlabels(1,2,3,4); labels(4');
+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;
+math_fit(0,.75ic#);
+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;
+
+iff known chars.latin_K_BB:
+bskchar "The blackboard-bold letter K";
+beginchar(chars.latin_K_BB,14u#,cap_height#,0); uni "0x1D542";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+bot z102=(lft x5r,y5r.c);
+p100=ifobl(6r,6l,5r,5l,,)---obl(5l,6l,5)---z5r...obl(102,5r.c,6r)---cycle;
+infill p100;
+endchar;
+
+iff known chars.latin_K_SS:
+bskchar "The sans-serif letter K";
+beginchar(chars.latin_K_SS,13u#,cap_height#,0); uni "0x1D5AA";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+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-3u; top y3=h; rt x5r=w-1.5u; 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);
+y100l=y100r=.5[y3l.b,y3]; y101l=y101r=.5[y5l.b,y5];
+z100l=whatever[z3l,z4l]; z100r=whatever[z3r,z4r];
+z101l=whatever[z5l,z6l]; z101r=whatever[z5r,z6r];
+filldraw z1l.b{down}..z1..z1r.b---z4r..z4r''
+ if x6l'>x4r'': ..z6l' fi ..z6l''---z101l..z5..z101r---z6r'..z6r''---
+ z100r...z3...z100l---z2'..z2''---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,100,101); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'');
+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;
+math_fit(0,ic#);
+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_L_BB:
+bskchar "The blackboard-bold letter L";
+beginchar(chars.latin_L_BB,12.5u#,cap_height#,0); uni "0x1D543";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+endchar;
+
+iff known chars.latin_L_SS:
+bskchar "The sans-serif letter L";
+beginchar(chars.latin_L_SS,12u#,cap_height#,0); uni "0x1D5AB";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+lft x1l=lft x2l=2u; z1'=(x1r,y3l);
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1---z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(1',3l,2r)
+ ---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3); labels(1');
+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;
+math_fit(0,.75ic#);
+endchar;
+
+iff known chars.latin_M_BB:
+bskchar "The blackboard-bold letter M";
+beginchar(chars.latin_M_BB,17u#,cap_height#,0); uni "0x1D544";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu.more:=3oblu;
+bot z100=(x3r,y3r.c); top z101=(x4r,y4r.c);
+top y102=y2l.c; rt z102=whatever[z5',z6l];
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(100,3r.c,4r)---obl(101,3r,4r.c)...z4r---cycle;
+infill z5'---ifobl(6l,4'',5',8,more,)---z8..z5---z2l...obl(102,2l.c,5')---cycle;
+endchar;
+
+iff known chars.latin_M_SS:
+bskchar "The sans-serif letter M";
+beginchar(chars.latin_M_SS,17u#,cap_height#,0); uni "0x1D5AC";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+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-tiny,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));
+y100l=y100r=.5[y1l.b,y1]; x100l=x1l; x100r=x1r;
+filldraw z100l...z1...z100r---z2'+cap_hair*down..z5'+cap_hair*unitvector(z6l-z5')---z6l
+ ---z3''..z3'---z3l.b..z3..z3r.b---z4r.b..z4..z10'---z4'..z6'---z8..z5..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);
+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;
+math_fit(0,.75ic#-.5u#);
+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_N_BB:
+bskchar "The blackboard-bold letter N";
+beginchar(chars.latin_N_BB,14u#,cap_height#,0); uni "0x2115";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu.more:=3oblu;
+top y100=y2l.c; rt z100=whatever[z5',z6l];
+infill z5'---obl(6l,5',6r).more---obl(6r,6l,8)---z8..z5---z2...obl(100,2l.c,5')---cycle;
+endchar;
+
+iff known chars.latin_N_SS:
+bskchar "The sans-serif letter N";
+beginchar(chars.latin_N_SS,14u#,cap_height#,0); uni "0x1D5AD";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+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-tiny,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));
+y100l=y100r=.5[y1l.b,y1]; x100l=x1l; x100r=x1r;
+filldraw z100l...z1...z100r---z2'..z5'---z6l..z3r---
+ z4r.b...z4...z4l.b---z4'..z6'---z8..z5..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,100); labels(2',4',5',6',7,8,9);
+endchar;
+
+iff known chars.sign_naira:
+bskchar "Naira sign";
+beginchar(chars.sign_naira,14u#,cap_height#,0); uni "0x20A6";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_hair,0); pos2(cap_hair,0);
+pos3(cap_hair,0); pos4(cap_hair,0);
+penpos5(whatever,0); penpos6(whatever,90);
+pos9(hair,90); pos10(hair,90); pos11(hair,90); pos12(hair,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));
+y9=y10=x_height; y11=y12=bar_height;
+lft x9=lft x11=.5u; rt x10=rt x12=w-.5u;
+y9'r=y10'r=y10''r=y10'''r=y9r; y9'l=y10'l=y10''l=y10'''l=y9l;
+y11'r=y11''r=y11'''r=y12'r=y11r; y11'l=y11''l=y11'''l=y12'l=y11l;
+x9'r=x9'l=x11'l=x11'r=x1l; x11''r=x11''l=x1r; x10'r=x10'l=x12'r=x12'l=x4r;
+x10''r=x10''l=x4l;
+z11'''l=whatever[z5',z6l]; z11'''r=whatever[z5',z6l];
+z10'''l=whatever[z6',z8]; z10'''r=whatever[z6',z8];
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a
+ ..z1r.c{left}..z1r.b---obl(11''l,1r,11'''l)---obl(11'''l,11''l,6l)---z6l
+ ..z3r---obl(12'l,3r,12l)---z12l..z12r---obl(12'r,12r,10'l)---obl(10'l,12'r,10l)
+ ---z10l..z10r---obl(10'r,10r,4r)---z4r.b..{right}z4r.c..z4r.a---z4l.a
+ ..{right}z4l.c..z4l.b---obl(10''r,4l,10'''r)---obl(10'''r,10''r,8)---z8..z5
+ ---z2l.a..{right}z2l.c..z2l.b---obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,11'r)
+ ---obl(11'r,9'l,11r)---z11r..z11l---obl(11'l,11l,1l)---cycle;
+infill obl(11''r,11'''r,2')---z2'..z5'---obl(11'''r,5',11''r)---cycle;
+infill obl(10''l,10'''l,4')---z4'..z6'---obl(10'''l,6',10''l)---cycle;
+penlabels(1,2,3,4,5,6,9,10,11,12); labels(2',4',5',6',7,8,9);
+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;
+math_fit(-.5cap_height#*slant+.5u#,.5cap_height#*slant);
+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;
+
+iff known chars.latin_O_BB:
+bskchar "The blackboard-bold letter O";
+beginchar(chars.latin_O_BB,14.3u#,cap_height#,0); uni "0x1D546";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.latin_O_SS:
+bskchar "The sans-serif letter O";
+beginchar(chars.latin_O_SS,14u#,cap_height#,0); uni "0x1D5AE";
+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;
+penlabels(1,2,3,4);
+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;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.latin_P_BB:
+bskchar "The blackboard-bold letter P";
+beginchar(chars.latin_P_BB,12.5u#,cap_height#,0); uni "0x2119";
+italcorr .2[x_height#,cap_height#]*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+p100=z4r{right}..z5r..{left}z6r;
+p101=z6l{right}..z5l..{left}z4l;
+z102=bsktouch(subpath (0,1) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath (0,1) of p101,bbs*up,p100,down);
+tim100=xpart(p100 intersectiontimes (z102--(x102,y5)));
+tim101=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z103--(x103,y5)));
+tim103=xpart(p101 intersectiontimes (z103--(x103,0)));
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(102,103);
+math_fit(0,ic#-2.5u#);
+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_P_SS:
+bskchar "The sans-serif letter P";
+beginchar(chars.latin_P_SS,12.5u#,cap_height#,0); uni "0x1D5AF";
+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(1.5cap_stem,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(1.5cap_stem,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..z1..z1r.b---z7l{dir70}..
+ (x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---
+ z6l..z5l..z4l---z2..z2l.b---cycle;
+infill z7r{down}..{right}z6r..z5r..z4r{left}..{down} if y3r>y7r: z3r else: z7r+up fi---cycle;
+penlabels(1,2,3,4,5,6,7);
+math_fit(0,ic#-2.5u#);
+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;
+
+charscription(14.3u,cap_height,3.5u if not monospace:+.5cap_curve fi)(
+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 testdpi: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);
+);
+
+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;
+usechar;
+math_fit(-.5u#,ic#);
+endchar;
+
+iff known chars.latin_Q_BB:
+bskchar "The blackboard-bold letter Q";
+beginchar(chars.latin_Q_BB,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x211A";
+italcorr .5cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+p102:=subpath(0,1.3) of p2;
+tim99-3=xpart(subpath(3,infinity) of p2 intersectiontimes
+ (point infinity of p102--(xpart(point infinity of p102),-d)));
+p103:=subpath(tim99,infinity) of p2;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+z104=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+tim108=xpart(p102 intersectiontimes (z104--(x104,0)));
+tim109=xpart(p103 intersectiontimes (z104--(x104,-d)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim108),infinity) of p102
+ ..subpath(0,rundy(p103,tim109).zpet) of p103..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.latin_Q_SS:
+bskchar "The sans-serif letter Q";
+beginchar(chars.latin_Q_SS,14.3u#,cap_height#,3.5u#); uni "0x1D5B0";
+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=.25[x1,x2]; z6=z5+whatever*(direction tim1 of p0) rotated 180;
+pos8(cap_curve,angle(z2-z4));
+z7=z6; x8=x3; y8r=-d;
+p1:=z5l{z6-z5}..{z6-z3}z6l;
+p2:=z8l{left}..{z6-z3}z7l..z7r{z3-z6}..{right}z8r;
+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);
+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;
+math_fit(0,ic#);
+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.latin_R_BB:
+bskchar "The blackboard-bold letter R";
+beginchar(chars.latin_R_BB,14u#,cap_height#,0); uni "0x211D";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+oblu:=f_obl;
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+p100=z4r{right}..z5r..{left}z6r;
+p101=z6l{right}..z5l..{left}z4l;
+z102=bsktouch(subpath (0,1) of p100,bbs*up,p101,down);
+y103=y104=y5; z103=whatever[z9r,z8r.bb]; z104=whatever[z9l,z8l];
+bot z105=(lft x8r,y8r.c);
+p102=z8r.bb--z103;
+p103=z104---obl(8l,104,8)---z8r...obl(105,8r.c,9r)---z8r.bb;
+tim100=xpart(p100 intersectiontimes (z102--(x102,y5)));
+tim101=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+(tim102,tim103)=p100 intersectiontimes p103;
+(tim104,tim105)=p101 intersectiontimes p102;
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p103,tim103),infinity) of p103
+ ..subpath(0,rundy(p102,tim105).zpet) of p102
+ ..subpath(rundy(p101,tim104),rundy(p101,tim101).zpet) of p101..cycle;
+labels(102,103,104,8r.bb);
+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.latin_R_SS:
+bskchar "The sans-serif letter R";
+beginchar(chars.latin_R_SS,13.5u#,cap_height#,0); uni "0x1D5B1";
+italcorr .5[x_height#,cap_height#]*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+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(1.5cap_stem,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(1.5cap_stem,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-2u;
+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-1.5u; 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));
+y8''=.5[y8r.b,y8]; z8''=whatever[z8r,z9r];
+p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l..
+ z5l..z4l---z2..{down}z2l.b;
+p1=z8''---z9r..{left}z6r--z6l{(x9l-x6l,0)}..z9l---z8'..z8;
+p2=subpath ((length p1)-4, length p1) of p1;
+(tim1,tim2)=p0 intersectiontimes p2;
+(tim3,tim4)=p0 intersectiontimes p1;
+filldraw z1l.b..z1..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}..if y3r>y7r: z3r else: z7r+up fi---cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(8',8'');
+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;
+
+iff known chars.sign_AR:
+bskchar "Aspect ratio sign";
+beginchar(chars.sign_AR,18u#,cap_height#,0); uni "non";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha, beta, tim[]; oblu:=2oblu; oblu.more:=3f_obl;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l=lft x2l=8.5u;
+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));
+lft x10l=2u; y10l=y1;
+beta=diag_ratio(2,cap_hair,y2l-y7l,x2l-x7l);
+pos10(beta*cap_hair,0); pos6'(ser_height,90);
+pos12(cap_bar,90); y11r-y11l=cap_bar-tiny; .5[y11r,y11l]=y12=y6=y6'; x6'=x1l;
+x2l'=x2l; z2l'=whatever[z2l+alpha*(cap_hair-.5currentbreadth)*right,z10];
+x1l-x12=x6-x7; z11r=whatever[z10,z2l']; z11l=whatever[z10,z2l'];
+y11'r=y11r; y11'l=y11l; x11'l=x11'r=.5[x11l,x11r]+(x6-x7);
+cap_serifs_bl(10l); cap_serifs_br(10r);
+p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l..z5l..z4l
+ ---obl(2l,2,10l)---diag_serif(10l,2l)..{left}z10l.c..z10l.a{right}
+ ..z10+ser_boule*up..{right}z10r.a..{left}z10r.c..diag_serif(10r,2r)
+ ---obl(11l,10r,12l)---z12l{right}..{down}(x1l,y6'l);
+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;
+infill (x1l,y6'r)..{left}z12r---obl(11r,12r,2l')---
+ obl(2l',10l,1l).more---cycle;
+penlabels(1,2,3,4,5,6,6',7,8,9,10,11,12); 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;
+if x5r<x7r+currentbreadth: %Correction for HC variant
+ numeric sh; sh:=x7r+currentbreadth-x5r;
+ forsuffixes $=5r,5l,5,2l,2r,2: x$:=x$+sh; endfor
+fi
+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;
+math_fit(-.5u#,.75ic#);
+endchar;
+
+iff known chars.sign_circled_S:
+bskchar "Circled S sign";
+beginchar(chars.sign_circled_S,15u#,asc_height#,0); uni "non";
+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,cap_stem,ser_height);
+usechar shifted -(x4,.5[y4l,y2r]) scaled zv shifted (.5WW+.5HH*slant,.5HH);
+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_S_BB:
+bskchar "The blackboard-bold letter S";
+beginchar(chars.latin_S_BB,10u#, cap_height#, 0); uni "0x1D54A";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100=subpath(1,5) of p0;
+p101=subpath(1,5) of p1;
+z100=bsktouch(subpath(0,1) of p100,bbs*down,p101,up);
+z101=bsktouch(subpath(0,1) of p101,bbs*up,p100,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y4l-5)));
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+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.latin_S_SS:
+bskchar "The sans-serif letter S";
+beginchar(chars.latin_S_SS,9u#, cap_height#, 0); uni "0x1D5B2";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc, hpa; exc=(w-u)/h;
+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-hpa=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u;
+x3=x4=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l];
+y3=.5[y2l,y4r]+.5cap_hair;
+if hpa-cap_stem+.5currentbreadth<rt u: lft x5r=1.25u; rt x1r=w-u;
+else: x5l=hpa; x1r=w-x5r+.5u; fi;
+pos1(cap_hair,30); y1=.5[y5,y2l];
+pos7(cap_hair,0); x7l=w-x6l; y7=y6;
+filldraw z1r{dir110}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r..z7l{down}..z4l{right}
+ ..z6l..z3l..z5l..{right}z2l..{dir-70}z1..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+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;
+math_fit(-(cap_height#-beak#)*slant-.5u#,ic#-4.5u#);
+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.latin_T_BB:
+bskchar "The blackboard-bold letter T";
+beginchar(chars.latin_T_BB,15.5u#,cap_height#,0); uni "0x1D54B";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c);
+infill ifobl(2l,2r,1l,1r,,)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle;
+math_fit(0,ic#-3u#);
+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_T_SS:
+bskchar "The sans-serif letter T";
+beginchar(chars.latin_T_SS,14u#,cap_height#,0); uni "0x1D5B3";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90); pos4(cap_hair,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;
+y100=y101=y3l; x100=x1l; x101=x1r;
+oblu:=cap_hair;
+filldraw z1l.b..z1..z1r.b---obl(101,1r,3l)---z3l+cap_stem*left...z3...z3r+cap_stem*left
+ ---z4r+cap_stem*right...z4...z4l+cap_stem*right---obl(100,4l,1l)---cycle;
+penlabels(1,2,3,4); labels(100,101);
+math_fit(0,ic#-3u#);
+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;
+math_fit(-1/3cap_height#*slant-u#,ic#-2u#);
+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_U_BB:
+bskchar "The blackboard-bold letter U";
+beginchar(chars.latin_U_BB,14u#,cap_height#,0); uni "0x1D54C";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+top z100=(x1l,y1l.c);
+p100=z2l{down}..{right}z2'l...{up}z3l;
+p101=z3r{down}..z2'r{left}..{up}z2r;
+z101=bsktouch(p100,bbs*dir135,p101,dir-45);
+tim100=xpart(p100 intersectiontimes (z101--(x101,0)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,y3)));
+infill subpath(0,rundy(p100,(tim100,1.5bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,1.5bbw)),infinity) of p101
+ ---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle;
+labels(101);
+endchar;
+
+iff known chars.latin_U_SS:
+bskchar "The sans-serif letter U";
+beginchar(chars.latin_U_SS,14u#,cap_height#,0); uni "0x1D5B4";
+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);
+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-2.5u; 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);
+y100l=y100r=.5[y4l.b,y4]; x100l=x4l; x100r=x4r;
+filldraw z1..z1l.b---z2l...z2'l{right}...z3l---z100l...z4...z100r---z3r...z2'r{left}...z2r---z1r.b..cycle;
+penlabels(1,2,2',3,4,100);
+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;
+
+charscription(14u,cap_height,0)(
+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);
+);
+
+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;
+usechar;
+math_fit(-cap_height#*slant,ic#-5u#);
+endchar;
+
+iff known chars.latin_V_BB:
+bskchar "The blackboard-bold letter V";
+beginchar(chars.latin_V_BB,14u#,cap_height#,0); uni "0x1D54D";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+usechar;
+oblu.more:=3oblu;
+top y100=y1l.c; z100=whatever[z1l.bb,z3l];
+infill z1l.bb---ifobl(3l,3',1l.bb,1r.bb,more,)---z1r.bb
+ ..obl(1r,3',1l)---z1l...obl(100,1l.c,1l.bb)---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_V_SS:
+bskchar "The sans-serif letter V";
+beginchar(chars.latin_V_SS,13.5u#,cap_height#,0); uni "0x1D5B5";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+lft x1l=2u; rt x2r=w-1.5u; 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);
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+z100l=whatever[z1l,z3l]; z100r=whatever[z1r,z3'];
+z101l=whatever[z3',z2l]; z101r=whatever[z2r,z3l];
+filldraw z1..z100l---z3l---z101r...z2...z101l---z3'r..z3'l---z100r..cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+math_fit(0,ic#-2u#);
+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;
+math_fit(-cap_height#*slant,ic#-5u#);
+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_W_BB:
+bskchar "The blackboard-bold letter W";
+beginchar(chars.latin_W_BB,19u#,cap_height#,0); uni "0x1D54E";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu:=f_obl;
+oblu.more:=3f_obl;
+top y100=y1l.c; z100=whatever[z1l.bb,z4];
+infill ifobl(4,1'',1l.bb,1r.bb,more,)---z1r.bb
+ ..obl(1r,1'',1l)---z1l...obl(100,1l.c,1l.bb)---cycle;
+infill ifobl(3,0,2'',5,more,)---ifobl(5,2'',0,3,more,)---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_W_SS:
+bskchar "The sans-serif letter W";
+beginchar(chars.latin_W_SS,18u#,cap_height#,0); uni "0x1D5B6";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+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];
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+z100l=whatever[z1l,z4]; z100r=whatever[z1r,z1''];
+z101l=whatever[z2'',z2l]; z101r=whatever[z2r,z5];
+filldraw z1..z100l---z4---obl(0,4,5)---z5---z101r...z2...z101l---obl(2'',2l,3)---z3
+ ---obl(1'',3,1r)---z100r..cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.sign_won:
+bskchar "Won sign";
+beginchar(chars.sign_won,19u#,cap_height#,0); uni "0x20A9";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha[], right_stem, left_stem;
+oblu:=2oblu;
+pos8(hair,90); pos9(hair,90); pos10(hair,90); pos11(hair,90);
+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];
+y8=y9=x_height; y10=y11=bar_height;
+lft x8=lft x10=u; rt x9=rt x11=w-u;
+y8'r=y8''r=y8'''r=y9'r=y9''r=y9'''r=y8r; y8'l=y8''l=y8'''l=y9'l=y9''l=y9'''l=y8l;
+y10'r=y11'r=y10r; y10'l=y11'l=y10l;
+z8'r=whatever[z1l,z4]; z8'l=whatever[z1l,z4]; z10'r=whatever[z1l,z4]; z10'l=whatever[z1l,z4];
+z9'r=whatever[z2r,z5]; z9'l=whatever[z2r,z5]; z11'r=whatever[z2r,z5]; z11'l=whatever[z2r,z5];
+z9''r=whatever[z2'',z2l]; z9''l=whatever[z2'',z2l]; z9'''r=whatever[z2'',z3]; z9'''l=whatever[z2'',z3];
+z8''r=whatever[z1'',z1r]; z8''l=whatever[z1'',z1r]; z8'''r=whatever[z1'',z3]; z8'''l=whatever[z1'',z3];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---obl(8'r,1l,8r)---z8r
+ ..z8l---obl(8'l,8l,10'r)---obl(10'r,8'l,10r)---z10r..z10l---obl(10'l,10l,4)
+ ---z4---obl(0,4,5)---z5---obl(11'l,5,11l)---z11l..z11r---obl(11'r,11r,9'l)
+ ---obl(9'l,11'l,9l)---z9l..z9r---obl(9'r,9r,2r)---diag_serif(2r,5)
+ ..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..diag_serif(2l,2')
+ ---obl(9''r,2l,9'''r)---obl(9'''r,9''r,3)---z3---obl(8'''r,3,8''r)
+ ---obl(8''r,8'''r,1r)---diag_serif(1r,1'')..z1r.c{right}..z1r.a--cycle;
+infill obl(9''l,9'''l,2'')---obl(2'',9''l,9'''l)---obl(9'''l,2'',9''l)---cycle;
+infill obl(8''l,8'''l,1'')---obl(1'',8''l,8'''l)---obl(8'''l,1'',8''l)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(0,1',1'',2',2'',4',5');
+endchar;
+
+charscription(15u,cap_height,0)(
+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');
+);
+
+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;
+usechar;
+math_fit(0,u#);
+endchar;
+
+iff known chars.latin_X_BB:
+bskchar "The blackboard-bold letter X";
+beginchar(chars.latin_X_BB,15u#,cap_height#,0); uni "0x1D54F";
+italcorr cap_height#*slant+.4u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu:=f_obl;
+top y100=y1l.c; bot y101=y2r.c; z100=whatever[z1l.bb,z2l]; z101=whatever[z2r.bb,z1r];
+infill obl(100,1l.c,2l)---obl(2l,100,2r)---z2r...obl(101,2r.c,1r)---obl(1r,101,1l)---z1l...cycle;
+endchar;
+
+iff known chars.latin_X_SS:
+bskchar "The sans-serif letter X";
+beginchar(chars.latin_X_SS,13u#,cap_height#,0); uni "0x1D5B7";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+oblu:=1.5oblu;
+numeric alpha[];
+lft x1l=2u; top y1l=h; x2r=w-x4l; bot y2r=0;
+x3r=w-x1l; top y3r=h; x4l=x1l-.5u; 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];
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+y102l=y102r=y103l=y103r=.5[y2l.b,y2];
+z100l=whatever[z1l,z2l]; z100r=whatever[z1r,z2r];
+z101l=whatever[z4l,z3l]; z101r=whatever[z4r,z3r];
+z102l=whatever[z1l,z2l]; z102r=whatever[z1r,z2r];
+z103l=whatever[z4l,z3l]; z103r=whatever[z4r,z3r];
+filldraw z100l---obl(1',1l,4l)---z103l...z4...z103r---obl(4',4r,2l)---z102l..z2..z102r
+ ---obl(2',2r,3r)---z101r...z3...z101l---obl(3',3l,1r)---z100r..z1..cycle;
+penlabels(1,2,3,4,100,101,102,103); 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+.5u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+math_fit(-cap_height#*slant,ic#-4.5u#);
+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.latin_Y_BB:
+bskchar "The blackboard-bold letter Y";
+beginchar(chars.latin_Y_BB,14u#,cap_height#,0); uni "0x1D550";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1r,y1r.c); top y101=y3l.c; z101=whatever[z3l.bb,z2l];
+infill obl(3r,3l,2r)---obl(2r,3r,1r)---obl(100,2r,1r.c)...z1r---obl(1l,1r,2l)---obl(2l,1l,3l)---obl(101,2l,3l.c)...z3l---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_Y_SS:
+bskchar "The sans-serif letter Y";
+beginchar(chars.latin_Y_SS,14u#,cap_height#,0); uni "0x1D5B8";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+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);
+y100l=y100r=y101l=y101r=.5[y3l.b,y3];
+z100l=whatever[z3l,z2l]; z100r=whatever[z3r,z2'];
+z101l=whatever[z0'',z4l]; z101r=whatever[z2r,z0'];
+filldraw z1l.b..z1..z1r.b---z2r+u*down..z0'---z101r...z4...z101l---z0''...z0''''
+ ---z100r..z3..z100l---z0'''..z2l+u*down---cycle;
+penlabels(1,2,3,4,100,101); labels(0',0'',0''',0,0'''',2',4l');
+math_fit(0,ic#-2u#);
+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;
+math_fit(-.5u#,.75ic#);
+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;
+
+iff known chars.latin_Z_BB:
+bskchar "The blackboard-bold letter Z";
+beginchar(chars.latin_Z_BB,13u#,cap_height#,0); uni "0x2124";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+oblu.more:=2oblu;
+y100=y4e; x100=.5[x1r,x4e];
+infill ifobl(2l,2r,1l,1r,,more)---obl(1',2r,1r)...z100..z1r
+ ---obl(1l,1r,2l).more---cycle;
+labels(100);
+endchar;
+
+iff known chars.latin_Z_SS:
+bskchar "The sans-serif letter Z";
+beginchar(chars.latin_Z_SS,13u#,cap_height#,0); uni "0x1D5B9";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+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);
+pos4(cap_hair,-90); pos5(cap_hair,90);
+bot y4r=0; rt x4r=w-u; top y5r=h; x5r=1.5u;
+y1'=y4l; z1'=whatever[z1r,z2r];
+y2'=y5l; z2'=whatever[z1l,z2l];
+oblu:=.5[cap_hair,cap_stem];
+filldraw z1l---z4r+cap_stem*left...z4...z4l+cap_stem*left---obl(1',4l,2r)---z2r
+ ---z5r+cap_stem*right...z5...z5l+cap_stem*right---obl(2',5l,1l)---cycle;
+penlabels(1,2,3,4,5); labels(0',0'',0''',0,0'''',2',4l');
+endchar;
+
+bskboundary;
+
+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);
+);
+
+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_a_BB:
+bskchar "The blackboard-bold letter a";
+beginchar(chars.latin_a_BB,9u#,x_height#,0); uni "0x1D552";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric aend; aend:=.8cap_stem; oblu:=2oblu;
+path p[]; numeric tim[];
+pos0(hair,180); pos0'(.9[stem,hair],90); pos1(.8cap_stem,0); pos2(.8cap_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(cap_stem,30); lft x8l=u; y8=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;
+p100:=subpath(1,4) of p0;
+p101:=subpath(9,12) of p0;
+p102:=subpath(1,infinity) of p1;
+p103:=subpath(1,infinity) of p2;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(subpath(1,infinity) of p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,dir-30,p103,dir120);
+tim100=xpart(p100 intersectiontimes (z100--(x100,0'l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3r+5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y9l-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y12)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y2)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y7)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..reverse subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12,100,101,102,103);
+endchar;
+
+iff known chars.latin_a_SS:
+bskchar "The sans-serif letter a";
+beginchar(chars.latin_a_SS,9u#,x_height#,0); uni "0x1D5BA";
+adjust_fit(0,-stem#);
+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;
+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=(x1l,hair)---z2l..{left}z3l..{down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---(x1r,hair)..(x1,0)..{up}(x1l,hair);
+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(rundy(p0,(tim8,f_obl)).zpet,rundy(p0,(tim6,f_obl))) 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);
+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.latin_b_BB:
+bskchar "The blackboard-bold letter b";
+beginchar(chars.latin_b_BB,11u#,asc_height#,0); uni "0x1D553";
+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(cap_stem,180); pos4(hair,270);
+rt x1r=2u+.8cap_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, stem; serif_drop:=.81oldserif; stem:=.8cap_stem;
+ 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;
+p100:=z5a--z5l;
+p101:=z5l+apex_o*down--z0---obl(5f,5l,6r);
+p102:=subpath(1,3) of p0;
+p103:=subpath(1,3) of p4;
+z100=bsktouch(p100,right,p101,dir135);
+z101=bsktouch(p102,down,p103,up);
+z102=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(w,y100)));
+tim102=xpart(p102 intersectiontimes (z101--(x101,h)));
+tim103=xpart(p103 intersectiontimes (z101--(x101,0)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y3)));
+infill ifobl(6r,6b,5r,5l,more,)---subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---cycle;
+oblu:=bbw;
+infill subpath(rundy(p102,tim102),rundy(p102,tim104).zpet) of p102
+ ..reverse subpath(rundy(p103,tim103),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,1',2,3,4); labels(0,7,100,101,102);
+endchar;
+
+iff known chars.latin_b_SS:
+bskchar "The sans-serif letter b";
+beginchar(chars.latin_b_SS,11u#,asc_height#,0); uni "0x1D5BB";
+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=0; 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 obl(5l,2l,6l)---z6b..z6r---z7..subpath (tim3, 3) 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 "0x2422";
+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_c_BB:
+bskchar "The blackboard-bold letter c";
+beginchar(chars.latin_c_BB,8.5u#,x_height#,0); uni "0x1D554";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend; cend:=stem;
+pos1(cap_stem,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;
+path p[]; numeric tim[];
+oblu:=bbw;
+p100:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l;
+p101:=z3r{left}..z1r..{right}z2r..z0'---z0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3l+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4); labels(0,0',3'r,4',100,101);
+endchar;
+
+iff known chars.latin_c_SS:
+bskchar "The sans-serif letter c";
+beginchar(chars.latin_c_SS,8.5u#,x_height#,0); uni "0x1D5BC";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+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'---z0+o*up..cycle;
+penlabels(1,2,3,4); labels(0,0',3'r,4');
+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 testdpi: +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 testdpi: 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 testdpi: 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(0,serif_fit#);
+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(0,0);
+pickup tiny.nib;
+usechar;
+y100''r=h; rt x100'''=w+u;
+comma(100,.75dot_size,.5hair,.75comma_depth);
+endchar;
+
+iff known chars.latin_d_BB:
+bskchar "The blackboard-bold letter d";
+beginchar(chars.latin_d_BB,11u#,asc_height#,0); uni "0x1D555";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_stem,0); pos3'(hair,180); pos2(hair,90);
+pos3(hair,180); pos4(hair,270);
+lft x1l=u; lft x3r=w-2u-.8cap_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;
+{{
+ save stem; stem:=.8cap_stem;
+ 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;
+oblu.more:=1.25f_obl;
+infill p4..cycle;
+infill ifobl(6r,6b,5r,5l,more,)---z5a..z5..z5f---cycle;
+oblu:=bbw;
+p100:=subpath(2,4) of p0;
+p101:=subpath(1,3) of p4;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,0)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2l-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,3',2,3,4); labels(7,100,101);
+endchar;
+
+iff known chars.latin_d_SS:
+bskchar "The sans-serif letter d";
+beginchar(chars.latin_d_SS,11u#,asc_height#,0); uni "0x1D5BD";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+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=0; 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 (2, tim4) of p0..z7---z6b..z6r---obl(5r,6r,2l)---cycle;
+infill p4..cycle;
+penlabels(1,3',2,3,4); labels(7);
+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 testdpi:+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_e_BB:
+bskchar "The blackboard-bold letter e";
+beginchar(chars.latin_e_BB,9u#,x_height#,0); uni "0x1D556";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(hair,270); pos4(cap_stem,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 testdpi:+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;
+oblu:=bbw;
+p100:=p0;
+p101:=subpath(1,infinity) of p1;
+p102:=subpath(4,tim3) of p100;
+p103:=subpath(tim6,1) of p1;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3l+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y3l+5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+oblu:=.75bbw;
+infill subpath(rundy(p102,tim104),rundy(p102,length(p102)).zpet) of p102
+ ..subpath(rundy(p103,0),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,2,3,4); labels(0,0',100,101,102);
+endchar;
+
+iff known chars.latin_e_SS:
+bskchar "The sans-serif letter e";
+beginchar(chars.latin_e_SS,9u#,x_height#,0); uni "0x1D5BE";
+italcorr bar_height#*slant;
+adjust_fit(-o#,0);
+pickup tiny.nib;
+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 testdpi:+up fi---z0+o*up;
+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+hair-tiny)--(x3,bar_height+hair-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+hair-tiny)--(x3,bar_height+hair-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');
+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 testdpi: +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 testdpi: +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 testdpi: +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;
+if tim8<0: %Hack for math parameters
+ tim8:=xpart(p0 intersectiontimes (z10l--(x2,y10l)));
+ tim9:=0;
+fi
+(tim10,tim11)=p4 intersectiontimes p5;
+(tim12,tim13)=subpath(2,infinity) of p5 intersectiontimes p0;
+(tim14,tim15)=p6 intersectiontimes p0;
+if tim15<0: %Hack for math parameters
+ tim15:=xpart(p0 intersectiontimes (z10r--(x2,y10r)));
+ tim14:=0;
+fi
+(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_f_BB:
+bskchar "The blackboard-bold letter f";
+beginchar(chars.latin_f_BB,6.5u#, asc_height#, 0); uni "0x1D557";
+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-.5(cap_stem-stem),x4]=x3; y4''=y3r-like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+save stem; numeric stem; stem:=.8cap_stem;
+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;
+path p[]; numeric tim[];
+p100:=z6'r---z2r..{right}z3r;
+p101:=z4l{up}..z4''..z3l..z2l---z5'r;
+bot z100=(x1l,y1b);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z101--(x101,y2)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,y3l+5)));
+infill subpath(rundy(p101,(tim101,bbw)),infinity) of p101---obl(100,2b,1b)
+ ...z1l---obl(1r,1l,2r)---subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..cycle;
+penlabels(3,4,5,5',6,6'); labels(4',4'',100,101);
+endchar;
+
+iff known chars.latin_f_SS:
+bskchar "The sans-serif letter f";
+beginchar(chars.latin_f_SS,6.5u#, asc_height#, 0); uni "0x1D5BF";
+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);
+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..z1..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;
+
+iff known chars.latin_ff_alt:
+bskchar "The ligature ff---alternative";
+beginchar(chars.latin_ff_alt,11u#, asc_height#, 0); uni "non"; %"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+like_hair=top y6=h-like_curve;
+top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=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_ffl_alt:
+bskchar "The ligature ffl---alternative";
+beginchar(chars.latin_ffl_alt,15u#, asc_height#, 0); uni "non"; %"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+like_hair=top y6=h-like_curve;
+top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=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;
+
+iff known chars.latin_ffi_alt:
+bskchar "The ligature ffi---alternative";
+beginchar(chars.latin_ffi_alt,15u#, asc_height#, 0); uni "non"; %"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+like_hair=top y6=h-like_curve;
+top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=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;
+
+iff known chars.latin_g_BB:
+bskchar "The blackboard-bold letter g";
+beginchar(chars.latin_g_BB,11u#,x_height#,desc_depth#); uni "0x1D558";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,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(.8cap_stem,90); pos8(hair,270);
+y6l=top y7l+.5stem; y6=0; x6=x5+u; x6r:=x6r+.5hair; rt x7l=w-2.75u;
+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=.8cap_stem*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;
+p100:=p4;
+p101:=z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l;
+p102:=z4r..z1r{down}..z2r..z3r..cycle;
+p103:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+z100=bsktouch(p100,left,subpath(0,2) of p101,right);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(subpath(0,1) of p102,up,p103,down);
+z103=bsktouch(subpath(1,2) of p102,down,p103,up);
+z104=bsktouch(subpath(3,4) of p102,up,p103,down);
+z105=bsktouch(subpath(2,3) of p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(0,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,-d-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y9)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y2l-5)));
+tim108=xpart(p102 intersectiontimes (z104--(x104,y1)));
+tim109=xpart(p103 intersectiontimes (z104--(x104,y4l+5)));
+tim110=xpart(p102 intersectiontimes (z105--(x105,y1)));
+tim111=xpart(p103 intersectiontimes (z105--(x105,y2l-5)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101
+ ..subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107).zpet,rundy(p103,tim105)) of p103..cycle;
+infill subpath(rundy(p102,tim108).zpet,rundy(p102,tim110)) of p102
+ ..subpath(rundy(p103,tim111),rundy(p103,tim109).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9',100,101,102,103,104,105);
+endchar;
+
+iff known chars.latin_g_SS:
+bskchar "The sans-serif letter g";
+beginchar(chars.latin_g_SS,11u#,x_height#,desc_depth#); uni "0x1D5C0";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+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(stem,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];
+z9'-z9=(o,hair);
+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..z9l{up}..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');
+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_h_BB:
+bskchar "The blackboard-bold letter h";
+beginchar(chars.latin_h_BB,11u#, asc_height#, 0); uni "0x1D559";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos3(.8cap_stem,0); pos4(.8cap_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;
+save stem; stem:=.8cap_stem;
+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;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot z103=(x3r,y3e);
+p100=subpath(3,4) of p2;
+p101=subpath(1,2) of p1;
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101
+ ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle;
+penlabels(3,4,5,6); labels(1',100,101,102);
+endchar;
+
+iff known chars.latin_h_SS:
+bskchar "The sans-serif letter h";
+beginchar(chars.latin_h_SS,11u#, asc_height#, 0); uni "0x1D5C1";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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..{right}z3;
+p2:=z3{right}..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'---z2r..z2b---z1a..z1..z1f---cycle;
+penlabels(3,4,5,6); labels(1');
+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;
+
+charscription(6u,x_height,0)(
+oblu:=2oblu;
+x1=.5w; bot y1=0; top y2=x_height;
+save stem; stem:=.8cap_stem;
+lowercase_stem(1,2,1.2jut).alt;
+bot z100=(x1l,y1b);
+oblu:=f_obl; oblu.more:=1.25oblu;
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+);
+
+iff known chars.latin_dotless_i_BB:
+bskchar "The blackboard-bold dotless i";
+beginchar(chars.latin_dotless_i_BB,6u#, x_height#, 0); uni "non";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_i_BB:
+bskchar "The blackboard-bold letter i";
+beginchar(chars.latin_i_BB,6u#, asc_height#-.5dot_size#, 0); uni "0x1D55A";
+italcorr (asc_height#-.5dot_size#)*slant-1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x3=x1-ddot; top y3=h-.5dot_size;
+dot(3);
+endchar;
+
+charscription(6u,x_height,0)(
+oblu:=2oblu;
+x1=.5w; bot y1=0; top y2=x_height;
+lowercase_points(1,2,1.2jut).alt;
+filldraw z1f---z2r..z2b---z1a..z1..cycle;
+);
+
+iff known chars.latin_dotless_i_SS:
+bskchar "The sans-serif dotless i";
+beginchar(chars.latin_dotless_i_SS,6u#, x_height#, 0); uni "non";
+adjust_fit(serif_fit#-.5u#,serif_fit#-.5u#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_i_SS:
+bskchar "The sans-serif letter i";
+beginchar(chars.latin_i_SS,6u#, asc_height#-.5dot_size#, 0); uni "0x1D5C2";
+italcorr (asc_height#-.5dot_size#)*slant-1.5u#;
+adjust_fit(serif_fit#-.5u#,serif_fit#-.5u#);
+pickup tiny.nib;
+x3=x1-ddot; top y3=h-.5dot_size;
+usechar;
+dot(3);
+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(5u,x_height,desc_depth)(
+path p[]; numeric tim[];
+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;
+save stem; stem:=.8cap_stem;
+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;
+p100:=z1l{down}...{left}z3l;
+p101:=z3r{right}..{up}z1r;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--z1c));
+tim101=xpart(p101 intersectiontimes (z100--(w,-d)));
+oblu:=bbw; oblu.more:=1.25f_obl; oblu.m:=f_obl;
+infill ifobl(2r,2b,1r,1l,more,m)---subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---cycle;
+penlabels(1,2,3,4); labels(4',4'',4''',100);
+);
+
+iff known chars.latin_dotless_j_BB:
+bskchar "The blackboard-bold dotless j";
+beginchar(chars.latin_dotless_j_BB,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_BB:
+bskchar "The blackboard-bold letter j";
+beginchar(chars.latin_j_BB,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x1D55B";
+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;
+
+charscription(5u,x_height,desc_depth)(
+oblu:=2oblu;
+pos3(hair,-90); pos4(stem,150);
+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;
+z4'=z4+(o,.2stem); z4''=z4+.5(stem-currentbreadth)*dir-135;
+filldraw z3r{right}...{up}z1r---z2r..z2b---z1l...{left}z3l.. z4l..z4'..z4''..cycle;
+penlabels(1,2,3,4); labels(4',4'',4''');
+);
+
+iff known chars.latin_dotless_j_SS:
+bskchar "The sans-serif dotless j";
+beginchar(chars.latin_dotless_j_SS,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_SS:
+bskchar "The sans-serif letter j";
+beginchar(chars.latin_j_SS,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x1D5C3";
+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;
+
+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_k_BB:
+bskchar "The blackboard-bold letter k";
+beginchar(chars.latin_k_BB,11u#,asc_height#,0); uni "0x1D55C";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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;
+{{save stem; numeric stem; stem:=.8cap_stem;
+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;
+oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot y101=y5r.c; rt z101=whatever[z5r,z6r];
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill ifobl(6r,6l,5r,5l,,)---obl(5l,6l,5r)...{right}z5r...obl(101,5r.c,6r)---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'');
+endchar;
+
+iff known chars.latin_k_SS:
+bskchar "The sans-serif letter k";
+beginchar(chars.latin_k_SS,10.5u#,asc_height#,0); uni "0x1D5C4";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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);
+y100=y6r''; z100=whatever[z3r,z4r];
+filldraw z1a..z1..z1f---obl(4r,1f,4r'')..z4r''..z6l''---
+ obl(5l,6l'',5r){right}..diag_serif(5r,6r)---z6r'..z100
+ ---z3r..z3l---z2'..{up}z2''---z2r..z2b---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'',100);
+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_l_BB:
+bskchar "The blackboard-bold letter l";
+beginchar(chars.latin_l_BB,6u#, asc_height#, 0); uni "0x1D55D";
+italcorr asc_height#*slant-1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+save stem; stem:=.8cap_stem;
+x1=.5w; bot y1=0; top y2=h;
+lowercase_stem(1,2,jut);
+oblu.more:=1.25oblu;
+bot z100=(x1l,y1b);
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+endchar;
+
+iff known chars.latin_l_SS:
+bskchar "The sans-serif letter l";
+beginchar(chars.latin_l_SS,6u#, asc_height#, 0); uni "0x1D5C5";
+italcorr asc_height#*slant-1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+pos3(hair,60);
+x1=.5w; bot y1=0; top y2=h;
+lowercase_points(1,2,jut);
+x3=.5[x1,x1e]; bot y3l=-o;
+filldraw z1f---z2r..z2b---z1a...{right}z3l..{left}z3r...cycle;
+penlabels(3);
+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: if (substring(0,5) of font_identifier_) = "BSKRW": f_obl else: oblu fi fi)).zpet) of p3
+ ..broken_stem_draw(1',1,2)---cycle;
+penlabels(3,4,5,6,7,8,9,10); labels(0,1');
+endchar;
+
+iff known chars.latin_m_BB:
+bskchar "The blackboard-bold letter m";
+beginchar(chars.latin_m_BB,16u#, x_height#, 0); uni "0x1D55E";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; boolean correct; correct:=true;
+save stem; stem:=.8cap_stem;
+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: if (substring(0,5) of font_identifier_) = "BSKRW": f_obl else: oblu fi fi)).zpet) of p3
+ ..broken_stem_draw(1',1,2)---cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot z103=(x3r,y3e); bot z104=(x7r,y7e);
+p100=subpath(0,1) of p3;
+p101=subpath(1,2) of p1;
+p102=z8r{up}..z9r..{down}z10r;
+p103=z10l{up}..z9l..{down}z8l;
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h+o+5)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+tim102=xpart(p102 intersectiontimes (z102--(x102,h+o+5)));
+tim103=xpart(p103 intersectiontimes (z102--(x102,0)));
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101
+ ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle;
+infill subpath(0,rundy(p102,(tim102,bbw)).zpet) of p102
+ ..subpath(rundy(p103,(tim103,bbw)),infinity) of p103
+ ---obl(7l,8l,7r)---z7r...obl(104,7e,8r)---cycle;
+penlabels(3,4,5,6,7,8,9,10); labels(0,1',100,101,102,103,104);
+endchar;
+
+iff known chars.latin_m_SS:
+bskchar "The sans-serif letter m";
+beginchar(chars.latin_m_SS,16u#, x_height#, 0); uni "0x1D5C6";
+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..{right}z3;
+p2:=z3{right}..z3f---z10l..z9l..z8l---z7a..z7..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).zpet) of p3
+ ..z1'..z2..z2b---z1a..z1..z1f---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_n_BB:
+bskchar "The blackboard-bold letter n";
+beginchar(chars.latin_n_BB,11.5u#, x_height#, 0); uni "0x1D55F";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=8oblu;
+save stem; stem:=.8cap_stem;
+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;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot z103=(x3r,y3e);
+p100=subpath(3,4) of p2;
+p101=subpath(1,2) of p1;
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h+o+5)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101
+ ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle;
+penlabels(3,4,5,6); labels(1',100,101,102);
+endchar;
+
+iff known chars.latin_n_SS:
+bskchar "The sans-serif letter n";
+beginchar(chars.latin_n_SS,11.5u#, x_height#, 0); uni "0x1D5C7";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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..{right}z3;
+p2:=z3{right}..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..z1'..z2..z2b---z1a..z1..z1f---cycle;
+penlabels(3,4,5,6); labels(1');
+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;
+
+iff known chars.latin_o_BB:
+bskchar "The blackboard-bold letter o";
+beginchar(chars.latin_o_BB,10u#,x_height#,0); uni "0x1D560";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,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);
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.latin_o_SS:
+bskchar "The sans-serif letter o";
+beginchar(chars.latin_o_SS,10u#,x_height#,0); uni "0x1D5C8";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+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_p_BB:
+bskchar "The blackboard-bold letter p";
+beginchar(chars.latin_p_BB,11u#,x_height#,desc_depth#); uni "0x1D561";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+save stem; stem:=.8cap_stem;
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(cap_stem,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;
+oblu.more:=1.25oblu;
+bot z102=(x5l,y5b);
+infill ifobl(6r,6b,5r,5l,more,)---obl(102,6b,5b)...z5l---obl(5r,5l,6r)---cycle;
+oblu:=bbw;
+p100:=subpath(2,4) of p0;
+p101:=subpath(1,3) of p3;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,h+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,0)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2l-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,1',2,3,4); labels(7,100,101,102);
+endchar;
+
+iff known chars.latin_p_SS:
+bskchar "The sans-serif letter p";
+beginchar(chars.latin_p_SS,11u#,x_height#,desc_depth#); uni "0x1D5C9";
+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=z5f---z6r..z6b---z5a..z5..{up}z5f;
+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
+ ..{up}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(0,serif_fit#);
+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;
+
+iff known chars.latin_q_BB:
+bskchar "The blackboard-bold letter q";
+beginchar(chars.latin_q_BB,11u#,x_height#,desc_depth#); uni "0x1D562";
+italcorr x_height#*slant;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+save stem; stem:=.8cap_stem;
+pos1(cap_stem,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;
+bot z100=(x5r,y5e);
+p100:=subpath(2,4) of p0;
+p101:=subpath(1,3) of p4;
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h+5)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+tim102=xpart(p100 intersectiontimes (z102--(x102,y2l-5)));
+tim103=xpart(p101 intersectiontimes (z102--(x102,y3)));
+oblu:=f_obl; oblu.more:=1.25f_obl;
+infill ifobl(6r,6b,5r,5l,more,)---obl(5l,6b,5r)---z5r...obl(100,5e,6r)---cycle;
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,3',2,3,4); labels(7,9,9',100,101,102);
+endchar;
+
+iff known chars.latin_q_SS:
+bskchar "The sans-serif letter q";
+beginchar(chars.latin_q_SS,11u#,x_height#,desc_depth#); uni "0x1D5CA";
+italcorr x_height#*slant;
+adjust_fit(0,serif_fit#);
+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=z5f{down}..z5..z5a---z6b..z6r---z5f;
+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..z6r--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;
+
+iff known chars.latin_r_BB:
+bskchar "The blackboard-bold letter r";
+beginchar(chars.latin_r_BB,8.5u#, x_height#, 0); uni "0x1D563";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+save stem; stem:=.8cap_stem;
+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;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b);
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+penlabels(3,5,6); labels(1',4,7,100);
+math_fit(0,ic#-1.5u#);
+endchar;
+
+iff known chars.latin_r_SS:
+bskchar "The sans-serif letter r";
+beginchar(chars.latin_r_SS,8.5u#, x_height#, 0); uni "0x1D5CB";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos3(stem,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,y5r);
+lowercase_points(1,2,jut);
+p2:=z3r{up}..z5r..{down}z6r;
+p1:=z6l{up}..{dir10}z5l...{down}z3l;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up+o*right;
+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..z1'..z2..z2b---z1a..z1..z1f---cycle;
+penlabels(3,5,6); labels(1',4,7);
+math_fit(0,ic#-1.5u#);
+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_s_BB:
+bskchar "The blackboard-bold letter s";
+beginchar(chars.latin_s_BB,7.7u#, x_height#, 0); uni "0x1D564";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h; oblu:=1.5oblu;
+path p[]; numeric tim[];
+pos2(hair,90); pos3(cap_stem,angle((w-u,h))+180); pos4(hair,90);
+pos5(.8cap_stem,180); pos6(.8cap_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-.5[x5,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;
+oblu:=bbw;
+p100:=subpath(1,5) of p0;
+p101:=subpath(1,5) of p1;
+z100=bsktouch(subpath(0,1) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y4l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,1',2,3,4,5,6,7,7'); labels(100,101);
+endchar;
+
+iff known chars.latin_s_SS:
+bskchar "The sans-serif letter s";
+beginchar(chars.latin_s_SS,7u#, x_height#, 0); uni "0x1D5CC";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+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;
+x3=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l]; .5[x2,x4]=x3;
+y3=.5[y2l,y4r]+.5hair;
+pos1(hair,0); x1r=w-x5r; y1=y5+o;
+pos7(hair,0); x7l=w-x6l; y7=y6;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-90}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+filldraw p0..p1..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+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..{right}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_t_BB:
+bskchar "The blackboard-bold letter t";
+beginchar(chars.latin_t_BB,7.5u#,.4[asc_height#,x_height#], 0); uni "0x1D565";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(hair,0); pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(hair,90); pos4(hair,180);
+x1=x2; x2r=.5w; rt 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..{right}z5r..controls (z1l+hair*dir100)..
+ z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle;
+path p[]; numeric tim[];
+p100:=subpath(0,2) of (z1r---z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r);
+p101:=subpath(1,infinity) of (z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..{up}z2l);
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3l-5)));
+z101=2/3[z1r,z0r];
+oblu:=.8bbw;
+infill subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---ifobl(1l,101,2l,1r,,)---cycle;
+penlabels(0,1,1',2,3,4,5,6); labels(1''r,100,101);
+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;
+
+iff known chars.latin_t_SS:
+bskchar "The sans-serif letter t";
+beginchar(chars.latin_t_SS,7.5u#,.4[asc_height#,x_height#], 0); uni "0x1D5CD";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+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;
+y5'=y5r; x5'=x1l;
+oblu:=cap_hair;
+filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r..z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..z2l---obl(1'l,2l,5l)---z5l..z5r---obl(5',5r,0l)---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,5');
+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_u_BB:
+bskchar "The blackboard-bold letter u";
+beginchar(chars.latin_u_BB,11u#, x_height#, 0); uni "0x1D566";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[];
+save stem; stem:=.8cap_stem;
+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;
+oblu:=2f_obl; oblu.more:=1.25f_obl;
+bot z101=(x2l,y2l.c);
+p100:=z1l{down}..z5l..{up}z6l;
+p101:=z6r{down}..z5r..{up}z1r;
+z100=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y5l-5-u)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+infill ifobl(4'r,4'b,3r,3l,more,)---z3a..z3..z3f---cycle;
+oblu.m:=f_obl; oblu:=bbw;
+infill ifobl(2r,2l.b,1r,1l,more,)
+ ---subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---cycle;
+penlabels(1,2,4,5,6,7); labels(100,101);
+endchar;
+
+iff known chars.latin_u_SS:
+bskchar "The sans-serif letter u";
+beginchar(chars.latin_u_SS,11u#, x_height#, 0); uni "0x1D5CE";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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=.3x_height;
+oblu:=.5f_obl;
+filldraw z6r{down}..z5r..z1r---z2r..z2l.b---z1l..z5l---z3l..z3f---z4r..{down}z4l.b---cycle;
+penlabels(1,2,4,5,6,7);
+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;
+
+iff known chars.latin_v_BB:
+bskchar "The blackboard-bold letter v";
+beginchar(chars.latin_v_BB,11u#,x_height#,0); uni "0x1D567";
+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=.8cap_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;
+oblu:=f_obl; oblu.more:=1.25oblu;
+infill ifobl(1l,1r,3l,3',more,)---ifobl(3',3l,1r,1l,,)---cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.latin_v_SS:
+bskchar "The sans-serif letter v";
+beginchar(chars.latin_v_SS,11u#,x_height#,0); uni "0x1D5CF";
+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 diag_serif(1l,3l)---z3l---diag_serif(2r,3l)...z2
+ ...diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')...z1...cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+math_fit(0,ic#-1u#);
+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_w_BB:
+bskchar "The blackboard-bold letter w";
+beginchar(chars.latin_w_BB,14.5u#,x_height#,0); uni "0x1D568";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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=.8cap_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;
+oblu:=f_obl; oblu.more:=1.25oblu; oblu.m:=2oblu;
+infill ifobl(1l,1r,4,1'',more,)---ifobl(1'',4,1r,1l,,)---cycle;
+infill ifobl(0,3,5,2'',more,m)---ifobl(2'',5,3,0,,)---cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.latin_w_SS:
+bskchar "The sans-serif letter w";
+beginchar(chars.latin_w_SS,14.5u#,x_height#,0); uni "0x1D5D0";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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 diag_serif(1l,4)---z4---obl(0,4,5)---z5---diag_serif(2r,5)...z2
+ ...diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r)
+ ---diag_serif(1r,1'')...z1...cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+math_fit(0,ic#-1u#);
+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;
+
+iff known chars.latin_x_BB:
+bskchar "The blackboard-bold letter x";
+beginchar(chars.latin_x_BB,11.5u#,x_height#,0); uni "0x1D569";
+italcorr x_height#*slant-.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+save stem; stem:=.8cap_stem;
+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;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot y100=y2r.c; z100=whatever[z2r.bb,z1r];
+infill ifobl(1r,1l,2r,2l,,more)---obl(2l,1r,2r)---z2r...obl(100,2r.c,1r)---cycle;
+penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5',100);
+endchar;
+
+iff known chars.latin_x_SS:
+bskchar "The sans-serif letter x";
+beginchar(chars.latin_x_SS,11.5u#,x_height#,0); uni "0x1D5D1";
+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 diag_serif(1l,2l)---obl(1',1l,4l)---diag_serif(4l,1')...z4
+ ...diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l)...z2
+ ...diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2')...z3
+ ...diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3')...z1...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;
+
+iff known chars.latin_y_BB:
+bskchar "The blackboard-bold letter y";
+beginchar(chars.latin_y_BB,11.5u#,x_height#,desc_depth#); uni "0x1D56A";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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=.8cap_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;
+oblu:=f_obl; oblu.more:=1.25oblu;
+infill ifobl(1l,1r,4',3',more,)---ifobl(3',4',1r,1l,,)---cycle;
+penlabels(1,1',2,2',3,3',4,5); labels(4',6);
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.latin_y_SS:
+bskchar "The sans-serif letter y";
+beginchar(chars.latin_y_SS,11.5u#,x_height#,desc_depth#); uni "0x1D5D2";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+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(stem,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=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)...z2
+ ...diag_serif(2l,3')---z3'r+oblu*unitvector(z2l-z3'r)..
+ z3'l+.75oblu*unitvector(z1r-z3'l)---diag_serif(1r,3')
+ ...z1...cycle;
+penlabels(1,1',2,2',3,3',4,5); labels(4',6);
+math_fit(0,ic#-1u#);
+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;
+
+iff known chars.latin_z_BB:
+bskchar "The blackboard-bold letter z";
+beginchar(chars.latin_z_BB,9u#,x_height#,0); uni "0x1D56B";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+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,.8cap_stem,y2r-y1l,x2r-x1l);
+pos1(alpha*.8cap_stem,0); pos2(alpha*.8cap_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;
+oblu:=f_obl; oblu.more:=2oblu;
+infill ifobl(2l,2r,1l,1r,,more)---ifobl(1',1l,2r,2l,,)---cycle;
+penlabels(1,2,3,4); labels(1',2',3a,3b,3c,4a,4b,4c);
+endchar;
+
+iff known chars.latin_z_SS:
+bskchar "The sans-serif letter z";
+beginchar(chars.latin_z_SS,9u#,x_height#,0); uni "0x1D5D3";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+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(hair,90); pos4(hair,90);
+x3l=1.3u; top y3r=h;
+y2'=y2-hair+currentbreadth; z2'=whatever[z2l,z1l];
+y1'=y1+hair-currentbreadth; z1'=whatever[z2r,z1r];
+bot y4l=0; x4r=w-u;
+filldraw z2r---z3r+stem*right...z3...z3l+stem*right---obl(2',3l,1l)---z1l
+ ---z4l+stem*left...z4...z4r+stem*left---obl(1',4r,2r)---cycle;
+penlabels(1,2,3,4); labels(1',2');
+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 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.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;
+
+iff known chars.numeral_zero_BB:
+bskchar "The blackboard-bold numeral 0";
+beginchar(chars.numeral_zero_BB,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x1D7D8";
+italcorr .5h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sair; sair=if medieval: vair else: hair fi;
+pos1(cap_stem,0); pos2(sair,90); pos3(cap_stem,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;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.numeral_zero_SS:
+bskchar "The sans-serif numeral 0";
+beginchar(chars.numeral_zero_SS,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x1D7E2";
+italcorr .5h#*slant-.25u#;
+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=0; 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);
+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;
+
+iff known chars.numeral_one_BB:
+bskchar "The blackboard-bold numeral 1";
+beginchar(chars.numeral_one_BB,figw(8u),medfig,0); uni "0x1D7D9";
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_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
+bot z100=(x1l,y1f);
+infill ifobl(4,2r,1l,1r,,)---obl(1r,2r,1l)---z1l...obl(100,1f,2l)---cycle;
+penlabels(1,2,3); labels(4);
+endchar;
+
+iff known chars.numeral_one_SS:
+bskchar "The sans-serif numeral 1";
+beginchar(chars.numeral_one_SS,figw(8u),medfig,0); uni "0x1D7E3";
+adjust_fit(0,serif_fit#-1.5u#);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0);
+pos3(hair,90);
+oblu:=f_obl;
+x1=.5w; bot y1=0; x2=x1; top y2=h;
+lft x3=u; x4=x1l;
+y3=y2-hair; y4=y3-.5o; z1a=z1l+.75u*up; z1b=z1r+.75u*up;
+filldraw z1a..z1..z1b---z2r--z2{dir200}..{left}z3r..z3l---obl(4,3l,1l)---cycle;
+penlabels(1,2,3); labels(4);
+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;
+
+iff known chars.numeral_two_BB:
+bskchar "The blackboard-bold numeral 2";
+beginchar(chars.numeral_two_BB,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x1D7DA";
+italcorr 2/3h#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3f_obl;
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(cap_stem,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)+.5cap_stem*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;
+p100:=p0..{left}z2l;
+p101:=z2r{right}..p1;
+z100=bsktouch(p100,up,subpath(0,1) of p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+5)));
+z101=bsktouch(subpath(0,1) of p100,2dir-45,p101,2dir135);
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim101),rundy(p101,(tim103,.8oblu)).zpet) of p101
+ ..subpath(rundy(p100,(tim102,.8oblu)),rundy(p100,tim100).zpet) of p100
+ ..cycle;
+penlabels(0,1,2,3,4); labels(6,7,8,100,101);
+endchar;
+
+iff known chars.numeral_two_SS:
+bskchar "The sans-serif numeral 2";
+beginchar(chars.numeral_two_SS,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x1D7E4";
+italcorr 2/3h#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=3f_obl;
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos0(hair,-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...(x7,y6)---cycle;
+penlabels(0,1,2,3,4); labels(6,7,8);
+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;
+
+iff known chars.numeral_three_BB:
+bskchar "The blackboard-bold numeral 3";
+beginchar(chars.numeral_three_BB,figw(9.5u),medfig,medfigd); uni "0x1D7DB";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi;
+path p[];
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(cap_stem,0); pos4(.45[hair,stem],0); pos0(vair,-60);
+pos5(hair,90); pos6(cap_stem,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;
+p100:=subpath(0,2) of p0;
+p101:=subpath(3,5) of p1;
+p102:=subpath(1,3) of p2;
+p103:=subpath(5,infinity) of p2;
+z100=bsktouch(p100,up,subpath(0,1) of p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+5)));
+z101=bsktouch(subpath(0,1) of p100,dir-50,p101,dir120);
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+z102=bsktouch(p102,down,p103,up);
+tim104=xpart(p102 intersectiontimes (z102--(x102,y5r+5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y6)));
+z103=bsktouch(p102,bbs*up,p103,down);
+tim106=xpart(p102 intersectiontimes (z103--(x103,y7r-u)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y6)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101
+ ..subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..cycle;
+infill subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103
+ ..reverse subpath(rundy(p102,tim106).zpet,rundy(p102,tim104)) of p102
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(4',9,100,101,102,103);
+endchar;
+
+iff known chars.numeral_three_SS:
+bskchar "The sans-serif numeral 3";
+beginchar(chars.numeral_three_SS,figw(9.5u),medfig,medfigd); uni "0x1D7E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+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(hair,-60);
+pos5(hair,90); pos6(curve,0); pos7(hair,270); pos8(curve,150);
+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..{up}z8r..{down}z8l..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);
+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;
+
+iff known chars.numeral_four_BB:
+bskchar "The blackboard-bold numeral 4";
+beginchar(chars.numeral_four_BB,figw(12u),medfig,medfigd); uni "0x1D7DC";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2f_obl; oblu.light:=.5oblu;
+pos1(cap_stem,0); pos2(cap_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;
+bot z100=(x1l,y1l.c);
+oblu:=f_obl; oblu.more:=2oblu;
+infill ifobl(2',2r,100,1r,,more)%obl(2',100,2r)---obl(2r,2',1r).more
+ ---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle;
+penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r');
+endchar;
+
+iff known chars.numeral_four_SS:
+bskchar "The sans-serif numeral 4";
+beginchar(chars.numeral_four_SS,figw(11.5u),medfig,medfigd); uni "0x1D7E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2f_obl; oblu.light:=.5oblu;
+pos1(dig_stem,0); pos2(dig_stem,0); pos4(hair,90); pos5(hair,90);
+rt x1r= rt x2r=w-3u; 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---obl(4r',4r,2r).light---z2r--
+ z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi
+ ---z1l.b...z1...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');
+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;
+
+iff known chars.numeral_five_BB:
+bskchar "The blackboard-bold numeral 5";
+beginchar(chars.numeral_five_BB,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x1D7DD";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta; theta=if medieval: 0 else: 10 fi;
+path p[]; numeric tim[];
+oblu:=2f_obl;
+pos1(hair,0); pos2(hair,0); pos3(stem,75);
+pos4(hair,-90); pos5(cap_stem,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;
+p100:=z2'..z4l..{down}z5l..{left}z6l;
+p101:=subpath(6,8) of p0;
+p102:=subpath(0,1) of p3;
+p103:=subpath(1,2) of p3;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4l+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+z101=bsktouch(p100,up,p101,down);
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6l-u)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5)));
+z102=bsktouch(p102,up,p103,down);
+tim104=xpart(p102 intersectiontimes (z102--(x102,y4)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y8)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101
+ ..reverse subpath(rundy(p100,tim102).zpet,rundy(p100,tim100)) of p100
+ ..cycle;
+infill subpath(rundy(p102,(0,f_obl)),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p103,tim105),rundy(p103,(1,2f_obl)).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8,100,101,102);
+endchar;
+
+iff known chars.numeral_five_SS:
+bskchar "The sans-serif numeral 5";
+beginchar(chars.numeral_five_SS,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x1D7E6";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta; theta=if medieval: 0 else: 10 fi;
+path p[];
+oblu:=2f_obl;
+pos1(hair,0); pos2(hair,0); pos3(hair,0);
+pos4(hair,-90); pos5(curve,180); pos6(hair,90); pos7(curve,150);
+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; x3r=x2r; y3r=y2r-hair; 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..{up}z3r..{up}z2r..{right}z4r..
+ {down}z5r..{left}z6r..{up}z7l..{down}z7r..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);
+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;
+
+iff known chars.numeral_six_BB:
+bskchar "The blackboard-bold numeral 6";
+beginchar(chars.numeral_six_BB,figw(10u),fig_height#,0); uni "0x1D7DE";
+italcorr .5[fig_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+pos5(cap_stem,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;
+p100:=z4r..z3r..z2r..{up}z1r..cycle;
+p101:=p1;
+p102:=z6l{left}..z5l..{right}z2l;
+p103:=p2;
+oblu:=1.25bbw;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y1)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y6l+5)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim106),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(100,101,102,103);
+endchar;
+
+iff known chars.numeral_six_SS:
+bskchar "The sans-serif numeral 6";
+beginchar(chars.numeral_six_SS,figw(10u),fig_height#,0); uni "0x1D7E7";
+italcorr .5[fig_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,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);
+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;
+
+iff known chars.numeral_seven_BB:
+bskchar "The blackboard-bold numeral 7";
+beginchar(chars.numeral_seven_BB,figw(11u),medfig,medfigd); uni "0x1D7DF";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(.5cap_stem,0); pos2(cap_stem,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;
+p0:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p0 intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p0 + u*left;
+filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p0,(tim1,curve)).zpet) of p0..z1'
+ ---z3l..{z4l-z4r}z4l..z4l+left--z4r{down}..z3r---cycle;
+p100:=z1r{z2r-z1}...{dir-100}z2r;
+p101:=p0;
+z100=bsktouch(p100,2left,p101,2right);
+tim100=xpart(p100 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(0,y100)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),infinity) of p100
+ ..subpath(0,rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4); labels(1',100);
+endchar;
+
+iff known chars.numeral_seven_SS:
+bskchar "The sans-serif numeral 7";
+beginchar(chars.numeral_seven_SS,figw(11u),medfig,medfigd); uni "0x1D7E8";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+pos1(hair,0); pos2(curve,0); pos3(stem,90); pos4(stem,90);
+rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem;
+y3r=y4r=y1r; 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'
+ ---z4l+.5stem*right...z4...z4r+.5stem*right---cycle;
+penlabels(1,2,3,4); labels(1');
+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;
+
+iff known chars.numeral_eight_BB:
+bskchar "The blackboard-bold numeral 8";
+beginchar(chars.numeral_eight_BB,figw(9u),fig_height#,0); uni "0x1D7E0";
+italcorr .5[fig_height#,x_height#]*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl;
+testem=.5[curve, cap_stem]; tlstem=cap_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;
+p100:=p1;
+p101:=p3;
+p102:=z6l{right}..p2;
+p103:=p4..{left}z6r;
+p104:=p2..{right}z5l;
+p105:=z5r{left}..p4;
+z100=bsktouch(subpath(0,1) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+z102=bsktouch(subpath(0,1) of p102,dir45,p103,dir-135);
+z103=bsktouch(subpath(1,infinity) of p102,dir-45,p103,dir135);
+z104=bsktouch(p104,dir-45,subpath(1,2) of p105,dir135);
+z105=bsktouch(p104,dir45,subpath(0,1) of p105,dir-135);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5l-5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y4)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y6r+5)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y4)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y1)));
+tim108=xpart(p104 intersectiontimes (z104--(x104,y3)));
+tim109=xpart(p105 intersectiontimes (z104--(x104,y1)));
+tim110=xpart(p104 intersectiontimes (z105--(x105,y5l-5)));
+tim111=xpart(p105 intersectiontimes (z105--(x105,y1)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+infill subpath(rundy(p104,tim108),rundy(p104,tim110).zpet) of p104
+ ..subpath(rundy(p105,tim111),rundy(p105,tim109).zpet) of p105..cycle;
+penlabels(0,1,2,3,4,5,6); labels(100,101,102,103,104,105);
+endchar;
+
+iff known chars.numeral_eight_SS:
+bskchar "The sans-serif numeral 8";
+beginchar(chars.numeral_eight_SS,figw(9u),fig_height#,0); uni "0x1D7E9";
+italcorr .5[fig_height#,x_height#]*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl;
+testem=.5[curve, stem]; tlstem=.75[curve,stem];
+pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0);
+pos5(hair,90); pos6(hair,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);
+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.numeral_nine_BB:
+bskchar "The blackboard-bold numeral 9";
+beginchar(chars.numeral_nine_BB,figw(10u),medfig,medfigd); uni "0x1D7E1";
+italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,-90); pos3(cap_stem,180); pos4(hair,90);
+pos5(cap_stem,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;
+p100:=z6r{right}..z5r..z4r..z3r..{right}z2r;
+p101:=z1l{down}..z2l..z3l..z4l..cycle;
+p102:=p100;
+p103:=p2;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(2,infinity) of p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2r-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y6r-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y1)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y4r+5)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7); labels(100,101,102,103);
+endchar;
+
+iff known chars.numeral_nine_SS:
+bskchar "The sans-serif numeral 9";
+beginchar(chars.numeral_nine_SS,figw(10u),medfig,medfigd); uni "0x1D7EA";
+italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,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);
+endchar;
+
+iff known chars.sign_query:
+bskchar "Question mark";
+beginchar(chars.sign_query, 9.5u#, asc_height#, 0); uni "0x003F";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(punct_fit#,0);
+pickup tiny.nib;
+path p[];
+bot z0=(2u+.5dot_size,.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=.45w; top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
+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_interrobang:
+bskchar "Interrobang mark";
+beginchar(chars.sign_interrobang, 9.5u#, asc_height#, 0); uni "0x203D";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(punct_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+bot z0=(2u+.5dot_size,.5dot_size); dot(0);
+pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0);
+penpos6(dot_size,0); pos7(hair,0); x6=x7=x0;
+z2'=z2+.2curve*down+o*right;
+z2''=z2+.5(curve-currentbreadth)*dir135;
+x1=.45w; top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
+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]];
+y6=h-.5stem; bot y7=dot_size+stem; y7r:=y7r+.5hair;
+p0=z3r{down}..z4;
+p1=z4r--z5r;
+p2=z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r;
+p3=z2r{up}..z2''..{right}z1r..subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1;
+p4=z7l---z6l..z6r{z7r-z6r}..z7r{z7r-.5[z6,z6r]}..{z6l-z7l}z7l;
+(tim0-3,tim1)=subpath(3,infinity) of p2 intersectiontimes subpath(0,2) of p4;
+(tim2,tim3)=subpath(0,2) of p3 intersectiontimes subpath(0,1.5) of p4;
+(tim4,tim5-1)=subpath(0,3) of p3 intersectiontimes subpath(1,infinity) of p4;
+(tim6-3,tim7-2)=subpath(3,6) of p3 intersectiontimes subpath(2,infinity) of p4;
+(tim8,tim9-2)=subpath(0,3) of p2 intersectiontimes subpath(2,infinity) of p4;
+(tim10-3,tim11-1)=subpath(3,5) of p2 intersectiontimes subpath(1,infinity) of p4;
+filldraw subpath(0,rundy(p4,(tim1,2oblu)).zpet) of p4
+ ..subpath(rundy(p2,(tim0,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p4,tim3),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..subpath(rundy(p4,tim7),infinity) of p4..cycle;
+infill subpath(rundy(p2,tim8),rundy(p2,tim10).zpet) of p2
+ ..subpath(rundy(p4,tim11),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(1,2,3,4,5,6,7); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_query_double:
+bskchar "Double question mark";
+beginchar(chars.sign_query_double, 16u#, asc_height#, 0); uni "0x2047";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+bot z0=(2u+.5dot_size,.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-6.5u); top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
+rt x3r=w-8.5u; 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;
+z6=z0 shifted (w-u-x3r,0); dot(6);
+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;
+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) shifted (w-u-x3r,0);
+penlabels(1,2,3,4,5); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_query_exclam:
+bskchar "Question exclamation mark";
+beginchar(chars.sign_query_exclam, 13.5u#, asc_height#, 0); uni "0x2048";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+bot z0=(2u+.5dot_size,.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-4u); top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
+rt x3r=w-5u; 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;
+bot y6=.5dot_size; x6=w-3u; dot(6);
+penpos7(dot_size,0); pos8(hair,0); x7=x8=x6;
+y7=h-.5stem; bot y8=dot_size+stem; y8r:=y8r+.5hair;
+filldraw z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle;
+penlabels(1,2,3,4,5,7,8,); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_exclam_query:
+bskchar "Exclamation query mark";
+beginchar(chars.sign_exclam_query, 13.5u#, asc_height#, 0); uni "0x2049";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+bot z0=(6u+.5dot_size,.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=4u+.45(w-4u); top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=5u;
+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;
+bot y6=.5dot_size; x6=3u; dot(6);
+penpos7(dot_size,0); pos8(hair,0); x7=x8=x6;
+y7=h-.5stem; bot y8=dot_size+stem; y8r:=y8r+.5hair;
+filldraw z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle;
+penlabels(1,2,3,4,5,7,8,); 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_gnaborretni:
+bskchar "Reversed interrobang mark";
+beginchar(chars.sign_gnaborretni, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+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);
+penpos6(dot_size,180); pos7(hair,180); x6=x7=x0;
+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]];
+y6=-d+.5stem; top y7=h-dot_size-stem; y7r:=y7r-.5hair;
+p0=z3r{up}..z4;
+p1=z4r--z5r;
+p2=z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r;
+p3=z2r{down}..z2''..{left}z1r..subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1;
+p4=z7l---z6l..z6r{z7r-z6r}..z7r{z7r-.5[z6,z6r]}..{z6l-z7l}z7l;
+(tim0-3,tim1)=subpath(3,infinity) of p2 intersectiontimes subpath(0,2) of p4;
+(tim2,tim3)=subpath(0,2) of p3 intersectiontimes subpath(0,1.5) of p4;
+(tim4,tim5-1)=subpath(0,3) of p3 intersectiontimes subpath(1,infinity) of p4;
+(tim6-3,tim7-2)=subpath(3,6) of p3 intersectiontimes subpath(2,infinity) of p4;
+(tim8,tim9-2)=subpath(0,3) of p2 intersectiontimes subpath(2,infinity) of p4;
+(tim10-3,tim11-1)=subpath(3,5) of p2 intersectiontimes subpath(1,infinity) of p4;
+filldraw subpath(0,rundy(p4,(tim1,2oblu)).zpet) of p4
+ ..subpath(rundy(p2,(tim0,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p4,tim3),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..subpath(rundy(p4,tim7),infinity) of p4..cycle;
+infill subpath(rundy(p2,tim8),rundy(p2,tim10).zpet) of p2
+ ..subpath(rundy(p4,tim11),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(1,2,3,4,5,6,7); 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:=.5f_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/fonts/boisik/bskligtab-i.mf b/fonts/boisik/bskligtab-i.mf
new file mode 100644
index 0000000000..48bae140b0
--- /dev/null
+++ b/fonts/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, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+ligtable "?": "`" =: chars.sign_spanish_query, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+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/fonts/boisik/bskligtab-sc.mf b/fonts/boisik/bskligtab-sc.mf
new file mode 100644
index 0000000000..a557c7dd84
--- /dev/null
+++ b/fonts/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, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+ligtable "?": "`" =: chars.sign_spanish_query, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+
+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/fonts/boisik/bskligtab.mf b/fonts/boisik/bskligtab.mf
new file mode 100644
index 0000000000..ed29032a97
--- /dev/null
+++ b/fonts/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, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+ligtable "?": "`" =: chars.sign_spanish_query, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+
+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/fonts/boisik/bsklist-T1.mf b/fonts/boisik/bsklist-T1.mf
new file mode 100644
index 0000000000..0f7b9dc7c2
--- /dev/null
+++ b/fonts/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/fonts/boisik/bsklist-TS1.mf b/fonts/boisik/bsklist-TS1.mf
new file mode 100644
index 0000000000..28cbd4d774
--- /dev/null
+++ b/fonts/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/fonts/boisik/bsklist-ar.mf b/fonts/boisik/bsklist-ar.mf
new file mode 100644
index 0000000000..2551036414
--- /dev/null
+++ b/fonts/boisik/bsklist-ar.mf
@@ -0,0 +1,89 @@
+%Boisik list for arrows
+chars.arrow_up_doublehead:=0;
+chars.arrow_down_doublehead:=1;
+chars.arrow_left_start:=2;
+chars.arrow_right_start:=3;
+chars.arrow_up_start:=4;
+chars.arrow_down_start:=5;
+chars.arrow_left_not_vert_double:=6;
+chars.arrow_right_not_vert_double:=7;
+chars.arrow_left_hook:=8;
+chars.arrow_right_hook:=9;
+chars.arrow_right_circle:=10;
+chars.arrow_NW_corner:=11;
+chars.arrow_SE_corner:=12;
+chars.arrow_NW_line_top:=13;
+chars.arrow_CR:=14;
+chars.arrow_LF:=15;
+chars.arrow_left_squiggly:=16;
+chars.arrow_double_NW:=17;
+chars.arrow_double_NE:=18;
+chars.arrow_double_SW:=19;
+chars.arrow_double_SE:=20;
+chars.arrow_up_bars:=21;
+chars.arrow_down_bars:=22;
+chars.arrow_up_down_bar_bot:=23;
+chars.arrow_left_stop:=24;
+chars.arrow_right_stop:=25;
+chars.arrow_left_wavy:=26;
+chars.arrow_right_wavy:=27;
+chars.arrow_left_right_wavy:=28;
+chars.math_contradiction:=29;
+chars.arrow_right_three:=30;
+chars.arrow_left_above_right_stop:=31;
+chars.arrow_left_dash:=32;
+chars.arrow_right_dash:=33;
+chars.arrow_up_dash:=34;
+chars.arrow_down_dash:=35;
+chars.arrow_double_up_white:=36;
+chars.arrow_double_down_white:=37;
+chars.arrow_double_up_white_bar:=38;
+chars.arrow_double_up_white_pedestal:=39;
+chars.arrow_double_up_white_pedestal_hbar:=40;
+chars.arrow_double_up_white_pedestal_vbar:=41;
+chars.arrow_double_up_white_doublehead:=42;
+chars.arrow_double_up_white_doublehead_pedestal:=43;
+chars.arrow_double_up_down_white:=44;
+chars.arrow_left_black:=45;
+chars.arrow_right_black:=46;
+chars.arrow_up_black:=47;
+chars.arrow_down_black:=48;
+chars.arrow_left_right_black:=49;
+chars.arrow_up_down_black:=50;
+
+chars.math_accumulate_downwards_upside=220;
+chars.math_accumulate_downwards:=221;
+chars.math_accumulate:=222;
+chars.math_accumulate_upside:=223;
+chars.arrow_double_left_bar:=224;
+chars.arrow_double_right_bar:=225;
+chars.arrow_double_left_white:=226;
+chars.arrow_double_right_white:=227;
+chars.arrow_double_left_white_round:=228;
+chars.arrow_double_right_white_round:=229;
+chars.arrow_open_loop_up_right:=230;
+chars.arrow_open_loop_down_left:=231;
+chars.arrow_left_down_curly:=232;
+chars.arrow_right_down_curly:=233;
+chars.arrow_open_loop_left_down:=234;
+chars.arrow_open_loop_right_up:=235;
+chars.arrow_NNE:=236;
+chars.arrow_SSE:=237;
+chars.arrow_NNW:=238;
+chars.arrow_SSW:=239;
+chars.arrow_curve_left_down:=240;
+chars.arrow_curve_right_down:=241;
+chars.arrow_curve_left_right_down:=242;
+chars.arrow_curve_left_up:=243;
+chars.arrow_curve_right_up:=244;
+chars.arrow_curve_left_right_up:=245;
+chars.arrow_left_right_bar:=246;
+chars.arrow_left_right_bar_top:=247;
+chars.arrow_down_tip_left:=248;
+chars.arrow_down_tip_right:=249;
+chars.arrow_left_triangle:=250;
+chars.arrow_right_triangle:=251;
+chars.arrow_left_right_triangle:=252;
+chars.arrow_left_triangle_white:=253;
+chars.arrow_right_triangle_white:=254;
+chars.arrow_left_right_triangle_white:=255;
diff --git a/fonts/boisik/bsklist-bb.mf b/fonts/boisik/bsklist-bb.mf
new file mode 100644
index 0000000000..7b2efdd7e7
--- /dev/null
+++ b/fonts/boisik/bsklist-bb.mf
@@ -0,0 +1,130 @@
+%Boisik list for blackboard-bold letters (msbm) and numerals
+
+chars.numeral_zero_BB:=48;
+chars.numeral_one_BB:=49;
+chars.numeral_two_BB:=50;
+chars.numeral_three_BB:=51;
+chars.numeral_four_BB:=52;
+chars.numeral_five_BB:=53;
+chars.numeral_six_BB:=54;
+chars.numeral_seven_BB:=55;
+chars.numeral_eight_BB:=56;
+chars.numeral_nine_BB:=57;
+
+chars.latin_A_BB:=65;
+chars.latin_B_BB:=66;
+chars.latin_C_BB:=67;
+chars.latin_D_BB:=68;
+chars.latin_E_BB:=69;
+chars.latin_F_BB:=70;
+chars.latin_G_BB:=71;
+chars.latin_H_BB:=72;
+chars.latin_I_BB:=73;
+chars.latin_J_BB:=74;
+chars.latin_K_BB:=75;
+chars.latin_L_BB:=76;
+chars.latin_M_BB:=77;
+chars.latin_N_BB:=78;
+chars.latin_O_BB:=79;
+chars.latin_P_BB:=80;
+chars.latin_Q_BB:=81;
+chars.latin_R_BB:=82;
+chars.latin_S_BB:=83;
+chars.latin_T_BB:=84;
+chars.latin_U_BB:=85;
+chars.latin_V_BB:=86;
+chars.latin_W_BB:=87;
+chars.latin_X_BB:=88;
+chars.latin_Y_BB:=89;
+chars.latin_Z_BB:=90;
+
+chars.latin_a_BB:=ASCII"a";
+chars.latin_b_BB:=ASCII"b";
+chars.latin_c_BB:=ASCII"c";
+chars.latin_d_BB:=ASCII"d";
+chars.latin_e_BB:=ASCII"e";
+chars.latin_f_BB:=ASCII"f";
+chars.latin_g_BB:=ASCII"g";
+chars.latin_h_BB:=ASCII"h";
+chars.latin_i_BB:=ASCII"i";
+chars.latin_dotless_i_BB:=ASCII"z"+1;
+chars.latin_j_BB:=ASCII"j";
+chars.latin_dotless_j_BB:=ASCII"z"+2;
+chars.latin_k_BB:=ASCII"k";
+chars.latin_l_BB:=ASCII"l";
+chars.latin_m_BB:=ASCII"m";
+chars.latin_n_BB:=ASCII"n";
+chars.latin_o_BB:=ASCII"o";
+chars.latin_p_BB:=ASCII"p";
+chars.latin_q_BB:=ASCII"q";
+chars.latin_r_BB:=ASCII"r";
+chars.latin_s_BB:=ASCII"s";
+chars.latin_t_BB:=ASCII"t";
+chars.latin_u_BB:=ASCII"u";
+chars.latin_v_BB:=ASCII"v";
+chars.latin_w_BB:=ASCII"w";
+chars.latin_x_BB:=ASCII"x";
+chars.latin_y_BB:=ASCII"y";
+chars.latin_z_BB:=ASCII"z";
+
+chars.greek_Gamma_BB:=0;
+chars.greek_Delta_BB:=1;
+chars.greek_Theta_BB:=2;
+chars.greek_Lambda_BB:=3;
+chars.greek_Xi_BB:=4;
+chars.greek_Pi_BB:=5;
+chars.greek_Sigma_BB:=6;
+chars.greek_Upsilon_BB:=7;
+chars.greek_Phi_BB:=8;
+chars.greek_Psi_BB:=9;
+chars.greek_Omega_BB:=10;
+
+chars.greek_alpha_BB:=11;
+chars.greek_beta_BB:=12;
+chars.greek_gamma_BB:=13;
+chars.greek_delta_BB:=14;
+chars.greek_epsilon_BB:=15;
+chars.greek_zeta_BB:=16;
+chars.greek_eta_BB:=17;
+chars.greek_theta_BB:=18;
+chars.greek_iota_BB:=19;
+chars.greek_kappa_BB:=20;
+chars.greek_lambda_BB:=21;
+chars.greek_mu_BB:=22;
+chars.greek_nu_BB:=23;
+chars.greek_xi_BB:=24;
+chars.greek_pi_BB:=25;
+chars.greek_rho_BB:=26;
+chars.greek_sigma_BB:=27;
+chars.greek_tau_BB:=28;
+chars.greek_upsilon_BB:=29;
+chars.greek_phi_BB:=30;
+chars.greek_chi_BB:=31;
+chars.greek_psi_BB:=32;
+chars.greek_omega_BB:=33;
+chars.greek_varepsilon_BB:=34;
+chars.greek_vartheta_BB:=35;
+chars.greek_varpi_BB:=36;
+chars.greek_varrho_BB:=37;
+chars.greek_varsigma_BB:=38;
+chars.greek_varphi_BB:=39;
+
+chars.greek_heta_BB:=40;
+chars.greek_digamma_BB:=41;
+chars.greek_qoppa_BB:=42;
+chars.greek_sampi_BB:=43;
+chars.greek_varsampi_BB:=44;
+chars.greek_stigma_BB:=45;
+chars.greek_varkappa_BB:=46;
+chars.greek_varbeta_BB:=47;
+
+chars.greek_Heta_BB:=91;
+chars.greek_Digamma_BB:=92;
+chars.greek_Qoppa_BB:=93;
+chars.greek_Sampi_BB:=94;
+chars.greek_Varsampi_BB:=95;
+
+chars.greek_iota_turned_BB:=125;
+chars.greek_epsilon_turned_BB:=126;
+chars.greek_Stigma_BB:=127;
+
diff --git a/fonts/boisik/bsklist-ex.mf b/fonts/boisik/bsklist-ex.mf
new file mode 100644
index 0000000000..73d9f6db50
--- /dev/null
+++ b/fonts/boisik/bsklist-ex.mf
@@ -0,0 +1,235 @@
+%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_hat_wide_widest:=129;
+chars.math_accent_hat_very_wide:=130;
+chars.math_accent_tilde_wide:=101;
+chars.math_accent_tilde_wider:=102;
+chars.math_accent_tilde_widest:=103;
+chars.math_accent_tilde_wide_widest:=131;
+chars.math_accent_tilde_very_wide:=132;
+chars.math_accent_triangle_wide:=133;
+chars.math_accent_triangle_wider:=134;
+chars.math_accent_triangle_widest:=135;
+chars.math_accent_triangle_wide_widest:=136;
+chars.math_accent_triangle_very_wide:=137;
+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;
+chars.math_int_up_text:=138;
+chars.math_int_up_disp:=139;
+
+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_int_up_text: chars.math_int_up_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_accent_hat_wide:
+ chars.math_accent_hat_wider: chars.math_accent_hat_widest:
+ chars.math_accent_hat_wide_widest: chars.math_accent_hat_very_wide;
+charlist chars.math_accent_tilde_wide:
+ chars.math_accent_tilde_wider: chars.math_accent_tilde_widest:
+ chars.math_accent_tilde_wide_widest: chars.math_accent_tilde_very_wide;
+charlist chars.math_accent_triangle_wide:
+ chars.math_accent_triangle_wider: chars.math_accent_triangle_widest:
+ chars.math_accent_triangle_wide_widest: chars.math_accent_triangle_very_wide;
+
+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/fonts/boisik/bsklist-lc.mf b/fonts/boisik/bsklist-lc.mf
new file mode 100644
index 0000000000..88f6818de3
--- /dev/null
+++ b/fonts/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/fonts/boisik/bsklist-ma.mf b/fonts/boisik/bsklist-ma.mf
new file mode 100644
index 0000000000..4575df449b
--- /dev/null
+++ b/fonts/boisik/bsklist-ma.mf
@@ -0,0 +1,264 @@
+%Boisik list for additional math symbols and sans-serif letters
+
+chars.latin_A_SS:=ASCII"A";
+chars.latin_B_SS:=ASCII"B";
+chars.latin_C_SS:=ASCII"C";
+chars.latin_D_SS:=ASCII"D";
+chars.latin_E_SS:=ASCII"E";
+chars.latin_F_SS:=ASCII"F";
+chars.latin_G_SS:=ASCII"G";
+chars.latin_H_SS:=ASCII"H";
+chars.latin_I_SS:=ASCII"I";
+chars.latin_J_SS:=ASCII"J";
+chars.latin_K_SS:=ASCII"K";
+chars.latin_L_SS:=ASCII"L";
+chars.latin_M_SS:=ASCII"M";
+chars.latin_N_SS:=ASCII"N";
+chars.latin_O_SS:=ASCII"O";
+chars.latin_P_SS:=ASCII"P";
+chars.latin_Q_SS:=ASCII"Q";
+chars.latin_R_SS:=ASCII"R";
+chars.latin_S_SS:=ASCII"S";
+chars.latin_T_SS:=ASCII"T";
+chars.latin_U_SS:=ASCII"U";
+chars.latin_V_SS:=ASCII"V";
+chars.latin_W_SS:=ASCII"W";
+chars.latin_X_SS:=ASCII"X";
+chars.latin_Y_SS:=ASCII"Y";
+chars.latin_Z_SS:=ASCII"Z";
+chars.latin_a_SS:=ASCII"a";
+chars.latin_b_SS:=ASCII"b";
+chars.latin_c_SS:=ASCII"c";
+chars.latin_d_SS:=ASCII"d";
+chars.latin_e_SS:=ASCII"e";
+chars.latin_f_SS:=ASCII"f";
+chars.latin_g_SS:=ASCII"g";
+chars.latin_h_SS:=ASCII"h";
+chars.latin_dotless_i_SS:=ASCII"z"+1;
+chars.latin_i_SS:=ASCII"i";
+chars.latin_dotless_j_SS:=ASCII"z"+2;
+chars.latin_j_SS:=ASCII"j";
+chars.latin_k_SS:=ASCII"k";
+chars.latin_l_SS:=ASCII"l";
+chars.latin_m_SS:=ASCII"m";
+chars.latin_n_SS:=ASCII"n";
+chars.latin_o_SS:=ASCII"o";
+chars.latin_p_SS:=ASCII"p";
+chars.latin_q_SS:=ASCII"q";
+chars.latin_r_SS:=ASCII"r";
+chars.latin_s_SS:=ASCII"s";
+chars.latin_t_SS:=ASCII"t";
+chars.latin_u_SS:=ASCII"u";
+chars.latin_v_SS:=ASCII"v";
+chars.latin_w_SS:=ASCII"w";
+chars.latin_x_SS:=ASCII"x";
+chars.latin_y_SS:=ASCII"y";
+chars.latin_z_SS:=ASCII"z";
+
+chars.numeral_zero_SS:=48;
+chars.numeral_one_SS:=49;
+chars.numeral_two_SS:=50;
+chars.numeral_three_SS:=51;
+chars.numeral_four_SS:=52;
+chars.numeral_five_SS:=53;
+chars.numeral_six_SS:=54;
+chars.numeral_seven_SS:=55;
+chars.numeral_eight_SS:=56;
+chars.numeral_nine_SS:=57;
+
+chars.greek_alpha_SS:=11;
+chars.greek_beta_SS:=12;
+chars.greek_gamma_SS:=13;
+chars.greek_delta_SS:=14;
+chars.greek_epsilon_SS:=15;
+chars.greek_zeta_SS:=16;
+chars.greek_eta_SS:=17;
+chars.greek_theta_SS:=18;
+chars.greek_iota_SS:=19;
+chars.greek_kappa_SS:=20;
+chars.greek_lambda_SS:=21;
+chars.greek_mu_SS:=22;
+chars.greek_nu_SS:=23;
+chars.greek_xi_SS:=24;
+chars.greek_pi_SS:=25;
+chars.greek_rho_SS:=26;
+chars.greek_sigma_SS:=27;
+chars.greek_tau_SS:=28;
+chars.greek_upsilon_SS:=29;
+chars.greek_phi_SS:=30;
+chars.greek_chi_SS:=31;
+chars.greek_psi_SS:=32;
+chars.greek_omega_SS:=33;
+chars.greek_varepsilon_SS:=34;
+chars.greek_vartheta_SS:=35;
+chars.greek_varpi_SS:=36;
+chars.greek_varrho_SS:=37;
+chars.greek_varsigma_SS:=38;
+chars.greek_varphi_SS:=39;
+chars.greek_heta_SS:=40;
+chars.greek_digamma_SS:=41;
+chars.greek_qoppa_SS:=42;
+chars.greek_sampi_SS:=43;
+chars.greek_varsampi_SS:=44;
+chars.greek_stigma_SS:=45;
+chars.greek_varkappa_SS:=46;
+chars.greek_varbeta_SS:=47;
+
+chars.greek_Gamma_SS:=0;
+chars.greek_Delta_SS:=1;
+chars.greek_Theta_SS:=2;
+chars.greek_Lambda_SS:=3;
+chars.greek_Xi_SS:=4;
+chars.greek_Pi_SS:=5;
+chars.greek_Sigma_SS:=6;
+chars.greek_Upsilon_SS:=7;
+chars.greek_Phi_SS:=8;
+chars.greek_Psi_SS:=9;
+chars.greek_Omega_SS:=10;
+chars.greek_Heta_SS:=91;
+chars.greek_Digamma_SS:=92;
+chars.greek_Qoppa_SS:=93;
+chars.greek_Sampi_SS:=94;
+chars.greek_Varsampi_SS:=95;
+
+chars.greek_iota_turned_SS:=125;
+chars.greek_epsilon_turned_SS:=126;
+chars.greek_Stigma_SS:=127;
+
+chars.math_oblong:=58;
+chars.math_oblong_tall:=59;
+chars.math_slash_double:=60;
+chars.math_backslash_double:=61;
+chars.math_hash:=62;
+chars.math_varhash:=63;
+chars.math_convolution:=64;
+chars.math_asterisk_big:=96;
+
+chars.math_equiangular:=128;
+chars.math_equals_corresponds:=129;
+chars.math_corresponds:=130;
+chars.math_equals_dot:=131;
+chars.sign_circled_equals:=132;
+chars.math_over_water:=133;
+chars.math_minus_dot:=134;
+chars.math_logical_not_inv:=135;
+chars.math_sim_dots:=136;
+chars.math_sim_dot:=137;
+chars.math_sim_dots_rising:=138;
+chars.math_plus_circ:=139;
+chars.math_times_dot:=140;
+chars.math_product_cartesian:=141;
+chars.math_merge:=142;
+chars.math_logor_intersect:=143;
+chars.math_circle_set_minus:=144;
+chars.math_circle_bar_top:=145;
+chars.math_circle_bar_bot:=146;
+chars.math_circle_bar_left:=147;
+chars.math_circle_bar_right:=148;
+chars.math_circle_vbar:=149;
+chars.math_circle_divide:=150;
+chars.math_circle_triangle:=151;
+chars.math_circle_less:=152;
+chars.math_circle_greater:=153;
+chars.math_circle_vee:=154;
+chars.math_circle_wedge:=155;
+chars.math_box_set_minus:=156;
+chars.math_box_bar_top:=157;
+chars.math_box_bar_bot:=158;
+chars.math_box_bar_left:=159;
+chars.math_box_bar_right:=160;
+chars.math_box_vbar:=161;
+chars.math_box_divide:=162;
+chars.math_box_triangle:=163;
+chars.math_box_asterisk:=164;
+chars.math_box_circle:=165;
+chars.math_box_division:=166;
+chars.math_box_box:=167;
+chars.math_diamond_wider:=168;
+chars.math_diamond_minus:=169;
+chars.math_diamond_vbar:=170;
+chars.math_diamond_times:=171;
+chars.math_diamond_plus:=172;
+chars.math_diamond_triangle:=173;
+chars.math_diamond_circle:=174;
+chars.math_multiset:=175;
+chars.math_cup:=176;
+chars.math_cap:=177;
+chars.math_sqcup:=178;
+chars.math_sqcap:=179;
+chars.math_sqsubset_very:=180;
+chars.math_sqsuperset_very:=181;
+chars.math_element_plus:=182;
+chars.math_ownership_plus:=183;
+chars.math_element_bar:=184;
+chars.math_ownership_bar:=185;
+chars.math_subset_plus:=186;
+chars.math_superset_plus:=187;
+chars.math_subset_eq_plus:=188;
+chars.math_superset_eq_plus:=189;
+chars.math_multiintersection:=190;
+chars.math_sqmultiunion:=191;
+chars.math_multimap_both:=192;
+chars.math_multimapdot_both:=193;
+chars.math_multimapdot_left_both:=194;
+chars.math_multimapdot_right_both:=195;
+chars.math_multimap_inverted:=196;
+chars.math_multimapdot_inverted:=197;
+chars.math_multimap_both_vert:=198;
+chars.math_multimapdot_both_vert:=199;
+chars.math_multimapdot_top_both_vert:=200;
+chars.math_multimapdot_bot_both_vert:=201;
+chars.math_dfourier:=202;
+chars.math_dfourier_inverted:=203;
+chars.math_ztrans:=204;
+chars.math_ztrans_inv:=205;
+chars.math_less_in_less:=206;
+chars.math_greater_in_greater:=207;
+chars.math_slice_left:=208;
+chars.math_slice_right:=209;
+chars.math_triangle_left_isosceles_bar_sl:=210;
+chars.math_triangle_right_isosceles_bar_sl:=211;
+chars.math_Ydown:=212;
+chars.math_Yup:=213;
+chars.math_Yleft:=214;
+chars.math_Yright:=215;
+chars.math_forces_reversed:=216;
+chars.math_forces_bar_reversed:=217;
+chars.math_forces_hbar_reversed:=218;
+chars.math_satisfies_reversed:=219;
+chars.math_lattice_top_neg:=220;
+chars.math_lattice_bottom_neg:=221;
+chars.math_bracket_bag_simple_left:=222;
+chars.math_bracket_bag_simple_right:=223;
+chars.math_angle_right:=224;
+chars.math_angle_right_arc:=225;
+chars.math_angle_right_arc_dot:=226;
+chars.math_angle_right_square:=227;
+chars.math_triangle_right_angle:=228;
+chars.math_uptack_double:=229;
+chars.math_moo:=230;
+chars.math_baro:=231;
+chars.math_plus_through_circ:=232;
+chars.math_minus_through_circ:=233;
+chars.math_precedes_double:=234;
+chars.math_follows_double:=235;
+chars.math_strict_fi:=236;
+chars.math_strict_if:=237;
+chars.math_ampersand_bin:=238;
+chars.math_ampersand_bin_rev:=239;
+chars.math_lazyS:=240;
+chars.math_sinus:=241;
+chars.math_hamiltonian_conjugate:=242;
+chars.math_intercalate:=243;
+chars.math_equals_parallel:=244;
+chars.math_plus_triangle:=245;
+chars.math_smash:=246;
+chars.math_infinity_incomplete:=247;
+chars.math_less_circle:=248;
+chars.math_greater_circle:=249;
+chars.math_greater_less_overlap:=250;
+chars.math_vee_in_vee:=251;
+chars.math_wedge_in_wedge:=252;
+chars.math_semicolon_fat:=253;
+chars.math_element_down:=254;
+chars.math_pitchfork_top:=255;
diff --git a/fonts/boisik/bsklist-mi-up.mf b/fonts/boisik/bsklist-mi-up.mf
new file mode 100644
index 0000000000..55ab3aca39
--- /dev/null
+++ b/fonts/boisik/bsklist-mi-up.mf
@@ -0,0 +1,7 @@
+%Boisik list for math font (upright symbols)
+
+chars.sign_period:=58;
+chars.sign_comma:=59;
+chars.math_less:=60;
+chars.math_virgule:=61;
+chars.math_greater:=62;
diff --git a/fonts/boisik/bsklist-mi.mf b/fonts/boisik/bsklist-mi.mf
new file mode 100644
index 0000000000..a6a429cffa
--- /dev/null
+++ b/fonts/boisik/bsklist-mi.mf
@@ -0,0 +1,144 @@
+%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.greek_heta:=40;
+chars.greek_digamma:=41;
+chars.greek_qoppa:=42;
+chars.greek_sampi:=43;
+chars.greek_varsampi:=44;
+chars.greek_stigma:=45;
+chars.greek_varkappa:=46;
+chars.greek_varbeta:=47;
+
+chars.math_stylized_F:=63;
+
+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.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.greek_Heta:=91;
+chars.greek_Digamma:=92;
+chars.greek_Qoppa:=93;
+chars.greek_Sampi:=94;
+chars.greek_Varsampi:=95;
+
+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.greek_iota_turned:=125;
+chars.greek_epsilon_turned:=126;
+chars.greek_Stigma:=127;
+
+chars.math_weierstrass_p:=128;
+chars.math_accent_arrow:=129;
+chars.math_accent_tie:=130;
+
+chars.latin_g_alt:=131;
+chars.latin_hbar:=132;
+chars.latin_hstroke:=133;
+chars.greek_lambda_bar:=134;
+chars.greek_lambda_slash:=135;
+
+chars.sign_AR:=169; \ No newline at end of file
diff --git a/fonts/boisik/bsklist-ms.mf b/fonts/boisik/bsklist-ms.mf
new file mode 100644
index 0000000000..f1df692141
--- /dev/null
+++ b/fonts/boisik/bsklist-ms.mf
@@ -0,0 +1,153 @@
+%0--127 reserved for BB leters and numerals
+chars.math_precedes_relation:=58;
+chars.math_follows_relation:=59;
+chars.math_element_long:=60;
+chars.math_ownership_long:=61;
+chars.math_slash_fat:=62;
+chars.math_backslash_fat:=63;
+chars.math_equivalence_neg:=64;
+
+chars.math_sqelement:=96;
+
+chars.math_less_vert_not_eq_double:=128;
+chars.math_greater_vert_not_eq_double:=129;
+chars.math_less_eq_not:=130;
+chars.math_greater_eq_not:=131;
+chars.math_less_not:=132;
+chars.math_greater_not:=133;
+chars.math_precedes_not:=134;
+chars.math_follows_not:=135;
+chars.math_less_not_eq_double:=136;
+chars.math_greater_not_eq_double:=137;
+chars.math_less_eq_slanted_not:=138;
+chars.math_greater_eq_slanted_not:=139;
+chars.math_less_neq:=140;
+chars.math_greater_neq:=141;
+chars.math_precedes_eq_not:=142;
+chars.math_follows_eq_not:=143;
+
+chars.math_less_eq_double_not:=144;
+chars.math_greater_eq_double_not:=145;
+chars.math_less_not_sim:=146;
+chars.math_greater_not_sim:=147;
+chars.math_precedes_not_sim:=148;
+chars.math_follows_not_sim:=149;
+chars.math_precedes_not_eq_double:=150;
+chars.math_follows_not_eq_double:=151;
+
+chars.math_sim_not:=152;
+chars.math_sim_eq_double_neg:=153;
+chars.math_less_not_approx:=154;
+chars.math_greater_not_approx:=155;
+chars.math_precedes_not_approx:=156;
+chars.math_follows_not_approx:=157;
+chars.math_subset_neg:=158;
+chars.math_superset_neg:=159;
+
+chars.math_subset_eq_neg:=160;
+chars.math_superset_eq_neg:=161;
+chars.math_subset_eq_double_not:=162;
+chars.math_superset_eq_double_not:=163;
+chars.math_subset_not_eq_double:=164;
+chars.math_superset_not_eq_double:=165;
+chars.math_subset_not_eq_double_alt:=166;
+chars.math_superset_not_eq_double_alt:=167;
+chars.math_subset_not_eq:=168;
+chars.math_superset_not_eq:=169;
+chars.math_not_subset_eq:=170;
+chars.math_not_superset_eq:=171;
+chars.math_vertical_double_neg:=172;
+chars.math_vertical_neg:=173;
+chars.math_vertical_neg_cute:=174;
+chars.math_vertical_double_neg_cute:=175;
+chars.math_lattice_left_neg:=176;
+chars.math_forces_neg:=177;
+chars.math_satisfies_neg:=178;
+chars.math_forces_hbar_neg:=179;
+chars.math_triangle_right_isosceles_bar_neg:=180;
+chars.math_triangle_left_isosceles_bar_neg:=181;
+chars.math_triangle_left_isosceles_neg:=182;
+chars.math_triangle_right_isosceles_neg:=183;
+
+chars.math_precedes_approx:=184;
+chars.math_follows_approx:=185;
+chars.math_precedes_sim:=186;
+chars.math_follows_sim:=187;
+chars.math_less_sim:=188;
+chars.math_greater_sim:=189;
+chars.math_less_approx:=190;
+chars.math_greater_approx:=191;
+chars.math_less_eq_double:=192;
+chars.math_greater_eq_double:=193;
+chars.math_less_greater:=194;
+chars.math_greater_less:=195;
+chars.math_less_equal_greater:=196;
+chars.math_greater_equal_less:=197;
+chars.math_less_equal_double_greater:=198;
+chars.math_greater_equal_double_less:=199;
+
+chars.math_subset_very:=200;
+chars.math_superset_very:=201;
+chars.math_parallel_union:=202;
+chars.math_parallel_intersection:=203;
+chars.math_subset_eq_double:=204;
+chars.math_superset_eq_double:=205;
+chars.math_logand_curly:=206;
+chars.math_logor_curly:=207;
+
+chars.math_logxor:=208;
+chars.math_lognand:=209;
+chars.math_logand_doublebar:=210;
+chars.math_lambda:=211;
+chars.math_lambda_refl:=212;
+chars.math_angle:=213;
+chars.math_angle_arc:=214;
+chars.sign_angle_arc:=215;
+
+chars.math_right_angle_nw:=216;
+chars.math_right_angle_ne:=217;
+chars.math_division_integer:=218;
+chars.math_line_45:=219;
+chars.math_line_135:=220;
+chars.math_approx_bar:=221;
+chars.math_plus_dot:=222;
+chars.math_pitchfork:=223;
+
+chars.math_right_angle_sw:=224;
+chars.math_right_angle_se:=225;
+chars.math_exists_not:=226;
+chars.math_five_star_big:=227;
+chars.sign_neq:=228;
+chars.math_dalembert:=229;
+chars.math_sim_eq_double:=230;
+chars.math_diamond_dot:=231;
+
+chars.math_times_verticals:=232;
+chars.math_times_left_black:=233;
+chars.math_times_right_black:=234;
+chars.math_bowtie_black:=235;
+chars.math_bowtie_left_black:=236;
+chars.math_bowtie_right_black:=237;
+chars.math_iron_cross:=238;
+chars.sign_check:=239;
+
+%Symbols from cmsy
+chars.math_section:=240;
+chars.math_dag:=241;
+chars.math_dagger:=242;
+chars.sign_paragraph:=243;
+chars.sign_club_suit:=244;
+chars.sign_diamond_suit:=245;
+chars.sign_heart_suit:=246;
+chars.sign_spade_suit:=247;
+
+%Symbols from cmmi
+chars.math_five_star:=248;
+chars.symbol_flat:=249;
+chars.symbol_natural:=250;
+chars.symbol_sharp:=251;
+chars.symbol_smile:=252;
+chars.symbol_frown:=253;
+chars.math_triangle_right:=254;
+chars.math_triangle_left:=255;
+
diff --git a/fonts/boisik/bsklist-sc.mf b/fonts/boisik/bsklist-sc.mf
new file mode 100644
index 0000000000..cc19c4017e
--- /dev/null
+++ b/fonts/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/fonts/boisik/bsklist-sy.mf b/fonts/boisik/bsklist-sy.mf
new file mode 100644
index 0000000000..c47f413df8
--- /dev/null
+++ b/fonts/boisik/bsklist-sy.mf
@@ -0,0 +1,293 @@
+%Boisik list for math symbol font
+chars.cal_Gamma:=0;
+chars.cal_Delta:=1;
+chars.cal_Theta:=2;
+chars.cal_Lambda:=3;
+chars.cal_Xi:=4;
+chars.cal_Pi:=5;
+chars.cal_Sigma:=6;
+chars.cal_Upsilon:=7;
+
+chars.cal_Phi:=8;
+chars.cal_Psi:=9;
+chars.cal_Omega:=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.cal_Heta:=91;
+chars.cal_Digamma:=92;
+chars.cal_Qoppa:=93;
+chars.cal_Sampi:=94;
+chars.cal_Varsampi:=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_minus:=120;
+chars.math_cdot:=121;
+chars.math_times:=122;
+chars.math_asterisk:=123;
+chars.math_division:=124;
+chars.math_diamond_op:=125;
+chars.math_plus_minus:=126;
+chars.cal_Stigma:=127;
+
+chars.math_circle_plus:=128;
+chars.math_circle_minus:=129;
+chars.math_circle_times:=130;
+chars.math_union:=131;
+chars.math_intersection:=132;
+chars.math_multiunion:=133;
+chars.math_logand:=134;
+chars.math_logor:=135;
+
+chars.harpoon_left_up:=136;
+chars.harpoon_left_down:=137;
+chars.harpoon_right_up:=138;
+chars.harpoon_right_down:=139;
+chars.arrow_hook_left:=177;
+chars.arrow_hook_right:=178;
+
+%Additional symbols from AMS set
+chars.harpoon_up_right:=140;
+chars.harpoon_down_right:=141;
+chars.harpoon_up_left:=142;
+chars.harpoon_down_left:=143;
+
+chars.arrow_left_above_right:=144;
+chars.arrow_right_above_left:=145;
+chars.harpoon_right_up_left_down:=146;
+chars.harpoon_left_up_right_down:=147;
+chars.arrow_left_two:=148;
+chars.arrow_right_two:=149;
+chars.arrow_up_two:=150;
+chars.arrow_down_two:=151;
+
+chars.arrow_right_doublehead:=152;
+chars.arrow_left_doublehead:=153;
+chars.arrow_right_tail:=154;
+chars.arrow_left_tail:=155;
+chars.arrow_right_squiggly:=156;
+chars.arrow_right_left_squiggly:=157;
+chars.arrow_up_tip_left:=158;
+chars.arrow_up_tip_right:=159;
+
+chars.arrow_left_curly:=160;
+chars.arrow_right_curly:=161;
+chars.arrow_clockwise:=162;
+chars.arrow_counterclockwise:=163;
+chars.arrow_arch_left_down:=164;
+chars.arrow_arch_right_down:=165;
+chars.arrow_right_short:=166;
+chars.arrow_left_short:=167;
+
+chars.arrow_left_not:=168;
+chars.arrow_right_not:=169;
+chars.arrow_left_right_not:=170;
+chars.arrow_double_left_not:=171;
+chars.arrow_double_right_not:=172;
+chars.arrow_double_left_right_not:=173;
+chars.arrow_triple_left:=174;
+chars.arrow_triple_right:=175;
+
+chars.arrow_double_left_right_not_out:=176;
+%177
+%178
+chars.math_multimap:=179;
+chars.math_multimapdot:=180;
+chars.math_therefore:=181;
+chars.math_because:=182;
+chars.math_vert_slurs:=183;
+
+chars.math_forces:=184;
+chars.math_forces_bar:=185;
+chars.math_forces_hbar:=186;
+chars.math_satisfies:=187;
+chars.symbol_smile_simple:=188;
+chars.symbol_frown_simple:=189;
+chars.math_vertical_cute:=190;
+chars.math_vertical_double_cute:=191;
+
+chars.math_backprime:=192;
+chars.math_null_set:=193;
+chars.math_approx_thick:=194;
+chars.math_division_times:=195;
+chars.math_less_dot:=196;
+chars.math_greater_dot:=197;
+chars.math_sunrise:=198;
+chars.math_sunrise_water:=199;
+
+chars.math_less_eq_slanted:=200;
+chars.math_greater_eq_slanted:=201;
+chars.math_eq_slanted_less:=202;
+chars.math_eq_slanted_greater:=203;
+chars.math_eq_precedes:=204;
+chars.math_eq_follows:=205;
+chars.math_precedes_eq_curved:=206;
+chars.math_follows_eq_curved:=207;
+
+chars.math_sim_thick:=208;
+chars.math_sim_inv:=209;
+chars.math_eq_sim:=210;
+chars.math_sim_inv_eq:=211;
+chars.math_times_left:=212;
+chars.math_times_right:=213;
+chars.math_much_much_less:=214;
+chars.math_much_much_greater:=215;
+
+chars.math_equals_triangle:=216;
+chars.math_equals_circle:=217;
+chars.math_ring_equals:=218;
+chars.math_equals_dots:=219;
+chars.math_equals_dot_rl:=220;
+chars.math_equals_dot_lr:=221;
+chars.math_axis_line_short:=222;
+chars.math_propto_circ:=223;
+
+chars.math_sqsubset:=224;
+chars.math_sqsuperset:=225;
+chars.math_diamond:=226;
+chars.math_diamond_black:=227;
+chars.math_triangle_right_isosceles:=228;
+chars.math_triangle_left_isosceles:=229;
+chars.math_triangle_right_isosceles_bar:=230;
+chars.math_triangle_left_isosceles_bar:=231;
+
+chars.math_triangle_down_isosceles_black:=232;
+chars.math_triangle_right_isosceles_black:=233;
+chars.math_triangle_left_isosceles_black:=234;
+chars.math_triangle_up_isosceles_black:=235;
+chars.math_triangle_up_isosceles:=236;
+chars.math_triangle_down_isosceles:=237;
+chars.math_square_small_black:=238;
+chars.math_box_operator_black:=239;
+
+chars.math_box_plus:=240;
+chars.math_box_minus:=241;
+chars.math_box_times:=242;
+chars.math_box_operator:=243;
+chars.math_box_dot:=244;
+chars.math_circle_circle:=245;
+chars.math_circle_asterisk:=246;
+chars.math_circle_bar:=247;
+
+chars.math_beth:=248;
+chars.math_gimel:=249;
+chars.math_dalet:=250;
+chars.math_reversed_F:=251;
+chars.math_inverted_G:=252;
+chars.math_bourbaki_C:=253;
+chars.math_bourbaki_T:=254;
+chars.math_minus_plus:=255;
+
diff --git a/fonts/boisik/bsklist-uc.mf b/fonts/boisik/bsklist-uc.mf
new file mode 100644
index 0000000000..6ff299126c
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskma10.mf b/fonts/boisik/bskma10.mf
new file mode 100644
index 0000000000..9141cd111d
--- /dev/null
+++ b/fonts/boisik/bskma10.mf
@@ -0,0 +1,89 @@
+% Boisik Additional Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMA"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=-20/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-20/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#; ss.hair#:=16/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#; ss.dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; ss.cap_hair#:=20/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; ss.alt_cap_hair#:=24/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#; ss.cap_bar#:=18/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; boolean ss.square_dots; ss.square_dots:=true; % 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 bskmathma % switch to the driver file
diff --git a/fonts/boisik/bskmab10.mf b/fonts/boisik/bskmab10.mf
new file mode 100644
index 0000000000..c5c8c01d51
--- /dev/null
+++ b/fonts/boisik/bskmab10.mf
@@ -0,0 +1,90 @@
+% Boisik Additional Bold Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMAB"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=-20/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-20/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#; ss.hair#:=20/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; ss.dot_size#:=33/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; ss.cap_hair#:=25/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; ss.alt_cap_hair#:=28/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#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % 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#; ss.cap_bar#:=21/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; boolean ss.square_dots; ss.square_dots:=true; % 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?
+boldmath:=true;
+
+% 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 bskmathma % switch to the driver file
diff --git a/fonts/boisik/bskmath.mf b/fonts/boisik/bskmath.mf
new file mode 100644
index 0000000000..abd8011623
--- /dev/null
+++ b/fonts/boisik/bskmath.mf
@@ -0,0 +1,176 @@
+%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;
+
+font_slant slant;
+
+%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;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+
+numeric skewchar, lom, carka, tecka; skewchar:=130;
+lom:=chars.math_virgule; carka:=chars.sign_comma; tecka:=chars.sign_period;
+def tecarka text t:= tecka kern t, carka kern t enddef;
+input bsklist-mi;
+
+ligtable chars.latin_A: skewchar kern 3u#;
+ligtable chars.latin_B: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_C: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_D: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_E: skewchar kern 2u#;
+ligtable chars.latin_F: skewchar kern 2u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_G: skewchar kern 2u#;
+ligtable chars.latin_H: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_I: skewchar kern 2.5u#, tecarka -u#;
+ligtable chars.latin_J: skewchar kern 3u#, tecarka -1.5u#, lom kern -u#;
+ligtable chars.latin_K: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_M: skewchar kern 1.5u#, tecarka -u#;
+ligtable chars.latin_N: skewchar kern .5u#, tecarka -1.5u#, lom kern -.5u#;
+ligtable chars.latin_O: skewchar kern 2u#, tecarka -1.5u#;
+ligtable chars.latin_P: skewchar kern 1u#, tecarka -3u#, lom kern -u#;
+ligtable chars.latin_Q: skewchar kern 2u#, lom kern u#;
+ligtable chars.latin_R: skewchar kern 2u#;
+ligtable chars.latin_S: skewchar kern 2u#;
+ligtable chars.latin_T: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_U: tecarka -1.5u#, lom kern -u#;
+ligtable chars.latin_V: tecarka -3u#, lom kern -3u#;
+ligtable chars.latin_W: tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_X: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_Y: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_Z: skewchar kern 1u#, tecarka -u#;
+
+ligtable chars.latin_a: skewchar kern 2u#;
+ligtable chars.latin_b: tecarka -.5u#;
+ligtable chars.latin_c: skewchar kern 1.5u#;
+ligtable chars.latin_d: skewchar kern 2u#;
+ligtable chars.latin_e: skewchar kern 2u#;
+ligtable chars.latin_f: skewchar kern 4.5u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_g: skewchar kern u#, tecarka -u#;
+ligtable chars.latin_g_alt: skewchar kern 2u#;
+ligtable chars.latin_h: skewchar kern 2u#;
+ligtable chars.latin_hstroke: skewchar kern 2u#;
+ligtable chars.latin_hbar: skewchar kern 2u#;
+ligtable chars.latin_i: skewchar kern 1.5u#;
+ligtable chars.latin_dotless_i: skewchar kern 1u#;
+ligtable chars.latin_j: skewchar kern 2.5u#, tecarka -u#;
+ligtable chars.latin_dotless_j: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_k: skewchar kern u#;
+ligtable chars.latin_l: skewchar kern 2u#;
+ligtable chars.latin_m: skewchar kern 2u#;
+ligtable chars.latin_n: skewchar kern u#;
+ligtable chars.latin_o: skewchar kern u#;
+ligtable chars.latin_p: skewchar kern 3u#;
+ligtable chars.latin_q: skewchar kern 1.5u#, tecarka -.5u#;
+ligtable chars.latin_r: skewchar kern .5u#, tecarka -2.5u#, lom kern -u#;
+ligtable chars.latin_s: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_t: skewchar kern 1.5u#;
+ligtable chars.latin_u: skewchar kern 1u#;
+ligtable chars.latin_v: skewchar kern 1u#;
+ligtable chars.latin_w: skewchar kern 1u#;
+ligtable chars.latin_x: skewchar kern 1u#;
+ligtable chars.latin_y: skewchar kern 2.5u#;
+ligtable chars.latin_z: skewchar kern 1u#;
+
+ligtable chars.greek_alpha: skewchar kern 1.5u#;
+ligtable chars.greek_beta: skewchar kern 1.5u#;
+ligtable chars.greek_varbeta: skewchar kern 1u#;
+ligtable chars.greek_beta_curved: skewchar kern 1.5u#;
+ligtable chars.greek_gamma: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_gamma_curved: skewchar kern 1u#, tecarka -1.5u#;
+ligtable chars.greek_digamma: skewchar kern 1.5u#;
+ligtable chars.greek_delta: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.greek_epsilon: skewchar kern 1.5u#;
+ligtable chars.greek_varepsilon: skewchar kern 1.5u#;
+ligtable chars.greek_epsilon_turned: skewchar kern .5u#;
+ligtable chars.greek_zeta: skewchar kern 2u#;
+ligtable chars.greek_eta: skewchar kern 1u#;
+ligtable chars.greek_eta_curved: skewchar kern 1u#;
+ligtable chars.greek_heta: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_theta: skewchar kern 1.5u#, tecarka -u#;
+ligtable chars.greek_vartheta: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_iota: skewchar kern 1u#;
+ligtable chars.greek_iota_turned: skewchar kern 1u#;
+ligtable chars.greek_kappa: skewchar kern 1u#;
+ligtable chars.greek_varkappa: skewchar kern 1.5u#;
+ligtable chars.greek_lambda: skewchar kern 1u#;
+ligtable chars.greek_lambda_bar: skewchar kern 1u#;
+ligtable chars.greek_lambda_slash: skewchar kern 1u#;
+ligtable chars.greek_lambda_curved: skewchar kern 1u#;
+ligtable chars.greek_mu: skewchar kern 1.5u#;
+ligtable chars.greek_mu_curved: skewchar kern 1.5u#;
+ligtable chars.greek_nu: skewchar kern .5u#, tecarka -2u#, lom kern -u#;
+ligtable chars.greek_xi: skewchar kern 2u#;
+ligtable chars.greek_pi: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_pi_curved: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_varpi: skewchar kern .5u#;
+ligtable chars.greek_rho: skewchar kern 1.5u#;
+ligtable chars.greek_varrho: skewchar kern 1.5u#;
+ligtable chars.greek_sigma: skewchar kern 1u#, tecarka -1.5u#;
+ligtable chars.greek_sigma_curved: skewchar kern 1u#, tecarka -1.5u#;
+ligtable chars.greek_varsigma: skewchar kern 1u#;
+ligtable chars.greek_tau: skewchar kern 1u#, tecarka -2u#, lom kern -u#;
+ligtable chars.greek_tau_curved: skewchar kern .5u#, tecarka -2u#, lom kern -u#;
+ligtable chars.greek_upsilon: skewchar kern .5u#;
+ligtable chars.greek_upsilon_curved: skewchar kern .5u#;
+ligtable chars.greek_phi: skewchar kern 2.5u#;
+ligtable chars.greek_phi_curved: skewchar kern 2.5u#;
+ligtable chars.greek_varphi: skewchar kern 2u#;
+ligtable chars.greek_varphi_curved: skewchar kern 2u#;
+ligtable chars.greek_chi: skewchar kern 1.5u#, tecarka -2u#;
+ligtable chars.greek_psi: skewchar kern 3u#;
+ligtable chars.greek_psi_curved: skewchar kern 3u#;
+ligtable chars.greek_omega: skewchar kern 1.5u#;
+ligtable chars.greek_varsampi: skewchar kern 2u#, tecarka -2u#, lom kern -.5u#;
+ligtable chars.greek_qoppa: skewchar kern 1u#;
+ligtable chars.greek_stigma: skewchar kern 1u#;
+
+ligtable chars.math_ell: skewchar kern 1.5u#, tecarka -u#;
+ligtable chars.math_weierstrass_p: skewchar kern 1u#;
+ligtable chars.math_partial: skewchar kern 3u#, tecarka -u#;
+
+ligtable chars.greek_Gamma: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.greek_Delta: skewchar kern 3u#;
+ligtable chars.greek_Theta: skewchar kern 2u#, tecarka -1.5u#;
+ligtable chars.greek_Lambda: skewchar kern 3u#;
+ligtable chars.greek_Xi: skewchar kern 2.5u#;
+ligtable chars.greek_Pi: skewchar kern 2u#, tecarka -u#;
+ligtable chars.greek_Sigma: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.greek_Upsilon: skewchar kern 1.5u#, tecarka -3u#, lom kern -1.5u#;
+ligtable chars.greek_Phi: skewchar kern 1.5u#, tecarka -2u#;
+ligtable chars.greek_Psi: skewchar kern 1u#, tecarka -2u#;
+ligtable chars.greek_Omega: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.greek_Heta: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_Digamma: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.greek_Qoppa: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_Sampi: tecarka -u#;
+ligtable chars.greek_Varsampi: skewchar kern 1u#, tecarka -2u#;
+ligtable chars.greek_Stigma: skewchar kern 1u#, tecarka -u#;
+
+ligtable chars.numeral_zero: skewchar kern 2.5u#;
+ligtable chars.numeral_one: skewchar kern 2.5u#;
+ligtable chars.numeral_two: skewchar kern 2u#;
+ligtable chars.numeral_three: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.numeral_four: skewchar kern 3.5u#;
+ligtable chars.numeral_five: skewchar kern 2.5u#, tecarka -u#;
+ligtable chars.numeral_six: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.numeral_seven: skewchar kern 1.5u#, tecarka -4u#, lom kern -u#;
+ligtable chars.numeral_eight: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.numeral_nine: skewchar kern 2u#, tecarka -.5u#;
+
+ligtable lom: chars.latin_A kern -u#, chars.latin_J kern -u#, chars.latin_f kern -1.5u#, chars.greek_Delta kern -u#,
+ chars.greek_Lambda kern -u#, chars.greek_Sigma kern -.5u#, chars.numeral_four kern -u#;
+bye.
diff --git a/fonts/boisik/bskmathma.mf b/fonts/boisik/bskmathma.mf
new file mode 100644
index 0000000000..d09206e11d
--- /dev/null
+++ b/fonts/boisik/bskmathma.mf
@@ -0,0 +1,65 @@
+%Boisik driver file for additional math symbols
+mode_setup; font_setup;
+
+font_slant slant;
+input bsklist-ma;
+input bsksymbols;
+
+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, hair, stem, cap_stem, cap_curve, like_cap_hair, like_cap_stem, like_cap_curve,
+ cap_jut, beak_jut, beak, slab, cap_bar, dot_size,
+ o, apex_o: if known ss.$.#: $.#:=ss.$.#; fi endfor
+if known ss.fudge: fudge:=ss.fudge; fi;
+if known ss.square_dots: square_dots:=ss.square_dots; fi;
+font_setup;
+
+input bskletters-r;
+input bskletters-o;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+numeric skewchar; skewchar:=130;
+
+ligtable chars.latin_C_SS: skewchar kern u#;
+ligtable chars.latin_D_SS: skewchar kern -u#;
+ligtable chars.latin_J_SS: skewchar kern u#;
+ligtable chars.latin_K_SS: skewchar kern -.5u#;
+ligtable chars.latin_c_SS: skewchar kern u#;
+ligtable chars.latin_d_SS: skewchar kern u#;
+ligtable chars.latin_e_SS: skewchar kern u#;
+ligtable chars.latin_f_SS: skewchar kern u#;
+ligtable chars.latin_i_SS: skewchar kern .5u#;
+ligtable chars.latin_dotless_i_SS: skewchar kern .5u#;
+ligtable chars.latin_j_SS: skewchar kern u#;
+ligtable chars.latin_dotless_j_SS: skewchar kern u#;
+ligtable chars.latin_x_SS: skewchar kern .25u#;
+ligtable chars.latin_y_SS: skewchar kern .25u#;
+
+ligtable chars.greek_alpha_SS: skewchar kern .5u#;
+ligtable chars.greek_beta_SS: skewchar kern -.5u#;
+ligtable chars.greek_varbeta_SS: skewchar kern -.5u#;
+ligtable chars.greek_delta_SS: skewchar kern u#;
+ligtable chars.greek_epsilon_SS: skewchar kern u#;
+ligtable chars.greek_varepsilon_SS: skewchar kern u#;
+ligtable chars.greek_epsilon_turned_SS: skewchar kern -.5u#;
+ligtable chars.greek_iota_SS: skewchar kern -u#;
+ligtable chars.greek_iota_turned_SS: skewchar kern .5u#;
+ligtable chars.greek_lambda_SS: skewchar kern -2u#;
+ligtable chars.greek_nu_SS: skewchar kern .5u#;
+ligtable chars.greek_xi_SS: skewchar kern u#;
+ligtable chars.greek_pi_SS: skewchar kern .5u#;
+ligtable chars.greek_rho_SS: skewchar kern .5u#;
+ligtable chars.greek_varsigma_SS: skewchar kern .5u#;
+ligtable chars.greek_varphi_SS: skewchar kern 2u#;
+ligtable chars.greek_omega_SS: skewchar kern .5u#;
+ligtable chars.greek_stigma_SS: skewchar kern u#;
+
+ligtable chars.greek_Delta_SS: skewchar kern .25u#;
+ligtable chars.greek_Lambda_SS: skewchar kern .25u#;
+ligtable chars.greek_Psi_SS: skewchar kern .5u#;
+
+ligtable chars.numeral_four_SS: skewchar kern 2u#;
+ligtable chars.numeral_five_SS: skewchar kern u#;
+
+bye.
diff --git a/fonts/boisik/bskmathms.mf b/fonts/boisik/bskmathms.mf
new file mode 100644
index 0000000000..fc2c5eda0b
--- /dev/null
+++ b/fonts/boisik/bskmathms.mf
@@ -0,0 +1,72 @@
+%Boisik driver file for math symbols
+mode_setup; font_setup;
+
+font_slant slant;
+
+input bsklist-ms;
+input bsksymbols;
+save chars; numeric chars[];
+
+if known pr.slant:
+ slant:=pr.slant;
+ currenttransform:=identity slanted slant yscaled aspect_ratio scaled granularity;
+else:
+ slant:=0;
+ currenttransform:=identity yscaled aspect_ratio scaled granularity;
+ fi;
+
+forsuffixes $= u, tiny, 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, hair, stem, cap_stem, cap_curve, like_cap_hair, like_cap_stem, like_cap_curve,
+ cap_jut, beak_jut, beak, slab, cap_bar, dot_size,
+ o, apex_o: if known bb.$.#: $.#:=bb.$.#; fi endfor
+if known bb.fudge: fudge:=bb.fudge; fi;
+font_setup;
+
+input bsklist-bb;
+input bskletters-r;
+input bskletters-o;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+numeric skewchar; skewchar:=130;
+input bsklist-ms;
+
+ligtable chars.latin_C_BB: skewchar kern u#;
+ligtable chars.latin_D_BB: skewchar kern -u#;
+ligtable chars.latin_K_BB: skewchar kern -.5u#;
+ligtable chars.latin_c_BB: skewchar kern u#;
+ligtable chars.latin_e_BB: skewchar kern u#;
+ligtable chars.latin_f_BB: skewchar kern u#;
+ligtable chars.latin_j_BB: skewchar kern .5u#;
+ligtable chars.latin_x_BB: skewchar kern .5u#;
+ligtable chars.latin_y_BB: skewchar kern .5u#;
+
+ligtable chars.greek_alpha_BB: skewchar kern .5u#;
+ligtable chars.greek_delta_BB: skewchar kern u#;
+ligtable chars.greek_epsilon_BB: skewchar kern u#;
+ligtable chars.greek_varepsilon_BB: skewchar kern u#;
+ligtable chars.greek_epsilon_turned_BB: skewchar kern -.5u#;
+ligtable chars.greek_iota_BB: skewchar kern -u#;
+ligtable chars.greek_iota_turned_BB: skewchar kern .5u#;
+ligtable chars.greek_lambda_BB: skewchar kern -2u#;
+ligtable chars.greek_nu_BB: skewchar kern .5u#;
+ligtable chars.greek_xi_BB: skewchar kern u#;
+ligtable chars.greek_pi_BB: skewchar kern .5u#;
+ligtable chars.greek_rho_BB: skewchar kern .5u#;
+ligtable chars.greek_varsigma_BB: skewchar kern .5u#;
+ligtable chars.greek_varphi_BB: skewchar kern 2u#;
+ligtable chars.greek_psi_BB: skewchar kern u#;
+ligtable chars.greek_omega_BB: skewchar kern .5u#;
+ligtable chars.greek_stigma_BB: skewchar kern .5u#;
+
+ligtable chars.greek_Delta_BB: skewchar kern .25u#;
+ligtable chars.greek_Lambda_BB: skewchar kern .25u#;
+
+ligtable chars.numeral_four_BB: skewchar kern 2u#;
+ligtable chars.numeral_five_BB: skewchar kern u#;
+ligtable chars.numeral_seven_BB: skewchar kern u#;
+
+ligtable chars.sign_paragraph: skewchar kern u#;
+bye.
+
diff --git a/fonts/boisik/bskmathsy.mf b/fonts/boisik/bskmathsy.mf
new file mode 100644
index 0000000000..bf4f37d1d8
--- /dev/null
+++ b/fonts/boisik/bskmathsy.mf
@@ -0,0 +1,49 @@
+%Boisik driver file for math symbols
+mode_setup; font_setup;
+
+input bsklist-sy;
+input bskletters-o;
+font_slant slant;
+
+if known pr.slant:
+ slant:=pr.slant;
+ currenttransform:=identity slanted slant yscaled aspect_ratio scaled granularity;
+else:
+ slant:=0;
+ currenttransform:=identity yscaled aspect_ratio scaled granularity;
+ fi;
+
+input bsksymbols;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+numeric skewchar; skewchar:=130;
+
+ligtable chars.math_Re: skewchar kern u#;
+ligtable chars.math_dalet: skewchar kern .5u#;
+ligtable chars.cal_Lambda: skewchar kern 4u#;
+ligtable chars.cal_Gamma: skewchar kern 2u#;
+ligtable "A": skewchar kern 4u#;
+ligtable "C": skewchar kern 2u#;
+ligtable "E": skewchar kern 2u#;
+ligtable "F": skewchar kern 2u#;
+ligtable "G": skewchar kern 2u#;
+ligtable "H": skewchar kern 2u#;
+ligtable "I": skewchar kern 2u#;
+ligtable "J": skewchar kern 2u#;
+ligtable "K": skewchar kern 1.5u#;
+ligtable "M": skewchar kern 2u#;
+ligtable "N": skewchar kern 2u#;
+ligtable "O": skewchar kern 2u#;
+ligtable "P": skewchar kern u#;
+ligtable "Q": skewchar kern 1.5u#;
+ligtable "R": skewchar kern u#;
+ligtable "S": skewchar kern 2u#;
+ligtable "T": skewchar kern 2u#;
+ligtable "U": skewchar kern 1.5u#;
+ligtable "V": skewchar kern 2u#;
+ligtable "W": skewchar kern 2u#;
+ligtable "X": skewchar kern u#;
+ligtable "Y": skewchar kern u#;
+ligtable "Z": skewchar kern u#;
+bye.
diff --git a/fonts/boisik/bskmi10.mf b/fonts/boisik/bskmi10.mf
new file mode 100644
index 0000000000..ec7029954e
--- /dev/null
+++ b/fonts/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:=false; %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/fonts/boisik/bskmib10.mf b/fonts/boisik/bskmib10.mf
new file mode 100644
index 0000000000..4b14c63be7
--- /dev/null
+++ b/fonts/boisik/bskmib10.mf
@@ -0,0 +1,70 @@
+% Boisik Bold Math Italic 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMIB"; font_size 10pt#;
+
+u#:=21/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#:=13/36pt#; % lowercase hairline breadth
+stem#:=27/36pt#; % lowercase stem breadth
+curve#:=31/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=40/36pt#;
+ess#:=34/36pt#; % breadth in middle of lowercase s
+dot_size#:=37/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=38/36pt#; % uppercase curve breadth
+like_cap_hair#:=18/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=42/36pt#;
+cap_ess#:=41/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % 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:=false; %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?
+boldmath:=true;
+
+generate bskmath % switch to the driver file
diff --git a/fonts/boisik/bskms10.mf b/fonts/boisik/bskms10.mf
new file mode 100644
index 0000000000..fc2e7f55d1
--- /dev/null
+++ b/fonts/boisik/bskms10.mf
@@ -0,0 +1,89 @@
+% Boisik Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMS"; 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#; bb.cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; bb.cap_curve#:=50/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 bskmathms % switch to the driver file
diff --git a/fonts/boisik/bskmsb10.mf b/fonts/boisik/bskmsb10.mf
new file mode 100644
index 0000000000..2b0b77f4b8
--- /dev/null
+++ b/fonts/boisik/bskmsb10.mf
@@ -0,0 +1,90 @@
+% Boisik Bold Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMSB"; 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#:=9/36pt#; bb.tiny#:=12/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; bb.hair#:=13/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/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#; bb.cap_stem#:=48/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; bb.cap_curve#:=56/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % 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?
+boldmath:=true;
+
+% 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 bskmathms % switch to the driver file
diff --git a/fonts/boisik/bskmsbsl10.mf b/fonts/boisik/bskmsbsl10.mf
new file mode 100644
index 0000000000..23b51b0d99
--- /dev/null
+++ b/fonts/boisik/bskmsbsl10.mf
@@ -0,0 +1,90 @@
+% Boisik Slanted Bold Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMSBSL"; 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#:=9/36pt#; bb.tiny#:=12/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; bb.hair#:=13/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/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#; bb.cap_stem#:=48/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; bb.cap_curve#:=56/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % 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:=.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?
+boldmath:=true;
+
+% 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 bskmathms % switch to the driver file
diff --git a/fonts/boisik/bskmssl10.mf b/fonts/boisik/bskmssl10.mf
new file mode 100644
index 0000000000..efb4d5ad66
--- /dev/null
+++ b/fonts/boisik/bskmssl10.mf
@@ -0,0 +1,89 @@
+% Boisik Slanted Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMSSL"; 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#; bb.cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; bb.cap_curve#:=50/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:=.2; pr.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?
+
+% 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 bskmathms % switch to the driver file
diff --git a/fonts/boisik/bskr10-T1.mf b/fonts/boisik/bskr10-T1.mf
new file mode 100644
index 0000000000..1a544e3ac0
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskr10-TS1.mf b/fonts/boisik/bskr10-TS1.mf
new file mode 100644
index 0000000000..1233878455
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskr10.mf b/fonts/boisik/bskr10.mf
new file mode 100644
index 0000000000..29605c265a
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskrb10.mf b/fonts/boisik/bskrb10.mf
new file mode 100644
index 0000000000..afefae0c35
--- /dev/null
+++ b/fonts/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#:=.7pt#; % 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/fonts/boisik/bskrc10.mf b/fonts/boisik/bskrc10.mf
new file mode 100644
index 0000000000..418ee62449
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskrcb10.mf b/fonts/boisik/bskrcb10.mf
new file mode 100644
index 0000000000..42fc20b162
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskrf10.mf b/fonts/boisik/bskrf10.mf
new file mode 100644
index 0000000000..04a30cd5ee
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskrl10.mf b/fonts/boisik/bskrl10.mf
new file mode 100644
index 0000000000..d0b1035c76
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskrol10.mf b/fonts/boisik/bskrol10.mf
new file mode 100644
index 0000000000..727ea02cc1
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskroman.mf b/fonts/boisik/bskroman.mf
new file mode 100644
index 0000000000..44327e855c
--- /dev/null
+++ b/fonts/boisik/bskroman.mf
@@ -0,0 +1,27 @@
+%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;
+
+if (substring(0,5) of font_identifier_) <> "BSKRW":
+ input bskligtab;
+else:
+ ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash;
+ ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash;
+ ligtable chars.polish_cross: "l" kern -9u#-2letter_fit#, "L" kern -8u#-2letter_fit#-(cap_serif_fit#-serif_fit#);
+ ligtable "!": "`" =: chars.sign_spanish_shriek;
+ ligtable "?": "`" =: chars.sign_spanish_query;
+fi
+
+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/fonts/boisik/bskrsb10.mf b/fonts/boisik/bskrsb10.mf
new file mode 100644
index 0000000000..e5326a8e5f
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskrsl10.mf b/fonts/boisik/bskrsl10.mf
new file mode 100644
index 0000000000..be81bb76f1
--- /dev/null
+++ b/fonts/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/fonts/boisik/bskrw10.mf b/fonts/boisik/bskrw10.mf
new file mode 100644
index 0000000000..ca6797f06c
--- /dev/null
+++ b/fonts/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/fonts/boisik/bsksc.mf b/fonts/boisik/bsksc.mf
new file mode 100644
index 0000000000..43a5f7ad9a
--- /dev/null
+++ b/fonts/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/fonts/boisik/bsksc10.mf b/fonts/boisik/bsksc10.mf
new file mode 100644
index 0000000000..77c8d66622
--- /dev/null
+++ b/fonts/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/fonts/boisik/bsksy10.mf b/fonts/boisik/bsksy10.mf
new file mode 100644
index 0000000000..314bc0f0f8
--- /dev/null
+++ b/fonts/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:=.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?
+
+% 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/fonts/boisik/bsksyb10.mf b/fonts/boisik/bsksyb10.mf
new file mode 100644
index 0000000000..18b8d63d3c
--- /dev/null
+++ b/fonts/boisik/bsksyb10.mf
@@ -0,0 +1,90 @@
+% Boisik Bold Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYB"; 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#:=9/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/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#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % 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?
+boldmath:=true;
+
+% 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/fonts/boisik/bsksybsl10.mf b/fonts/boisik/bsksybsl10.mf
new file mode 100644
index 0000000000..ca0a937edd
--- /dev/null
+++ b/fonts/boisik/bsksybsl10.mf
@@ -0,0 +1,89 @@
+% Boisik Slanted Bold Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYBSL"; 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#:=9/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/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#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % 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:=.2; pr.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?
+
+% 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/fonts/boisik/bsksymbols.mf b/fonts/boisik/bsksymbols.mf
new file mode 100644
index 0000000000..b388ad27cf
--- /dev/null
+++ b/fonts/boisik/bsksymbols.mf
@@ -0,0 +1,27393 @@
+%Boisik symbols
+
+numeric bourstem; bourstem:=1.5stem;
+numeric arrsize, arrwidth, dbf; arrsize=1.2arrwidth=if boldmath: 3.5 else:3\\ fi curve;
+compute_spread(.45x_height#,.55x_height#);
+dbf:=spread-tiny;
+
+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+hair*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+hair*left..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+hair*right
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+hair*right..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 "0x27E6";
+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+hair*left
+ ---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l+hair*left..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 "0x27E7";
+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+hair*right
+ ---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l+hair*right..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+hair*left---obl(3l,4l,2l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l+hair*left..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+hair*right---obl(3l,4l,2l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l+hair*right..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_bracket_antiquill_left:
+bskchar "Left bracket with antiquill";
+beginchar(chars.sign_bracket_antiquill_left,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(hair,270); pos6(hair,270);
+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=x2r; x6=.5u;
+rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
+oblu.quill:=3/4(x5-x6);
+filldraw z1r---obl(2r,1r,3r)---obl(5l,2r,6l).quill---z6l..z6r---obl(5r,6r,3r).quill
+ ---obl(3r,2r,4r)---z4r..z4l+hair*left---obl(3l,4l,2l)
+ ---obl(2l,3l,1l)---z1l+hair*left..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_bracket_antiquill_right:
+bskchar "Right bracket with antiquill";
+beginchar(chars.sign_bracket_antiquill_right,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(hair,270); pos6(hair,270);
+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=x2r; x6=w-.5u;
+lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
+oblu.quill:=3/4(x6-x5);
+filldraw z1r---obl(2r,1r,3r)---obl(5l,2r,6l).quill---z6l..z6r---obl(5r,6r,3r).quill
+ ---obl(3r,2r,4r)---z4r..z4l+hair*right---obl(3l,4l,2l)
+ ---obl(2l,3l,1l)---z1l+hair*right..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;
+
+iff known chars.sign_quotes_uni:
+bskchar "Quotes (for Unicode)";
+beginchar(chars.sign_quotes_uni,8.5u#,asc_height#,0); uni "0x201D";
+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_uni:
+bskchar "Aposthrope (for Unicode)";
+beginchar(chars.sign_aposthrope_uni,4.5u#,asc_height#,0); uni "0x2019";
+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_aposthrope_reverse_uni:
+bskchar "Reverse aposthrope (for Unicode)";
+beginchar(chars.sign_aposthrope_reverse_uni,4.5u#,asc_height#,0); uni "0x2018";
+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_aposthrope_turned_uni:
+bskchar "Turned aposthrope (for Unicode)";
+beginchar(chars.sign_aposthrope_turned_uni,4.5u#,asc_height#,0); uni "0x201B";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w+.5hair; top y1=h-.5dot_size;
+turn_comma(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_leader_dot:
+bskchar "Dot leader";
+beginchar(chars.sign_leader_dot,6u#,dot_size#,0); uni "0x2024";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot z1=(.5w,.5h); dot(1);
+endchar;
+
+iff known chars.sign_leader_dots:
+bskchar "Two dot leader";
+beginchar(chars.sign_leader_dots,10.5u#,dot_size#,0); uni "0x2025";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot y1=bot y2=.5h; .5[x1,x2]=.5w; x1=x2-x1;
+dot(1); dot(2);
+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_ratio:
+bskchar "Ratio sign";
+beginchar(chars.math_ratio,5u#,v_center(x_height#)); uni "0x2236";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h-.5dot_size; bot y2=-d+.5dot_size;
+dot(1); dot(2);
+endchar;
+
+iff known chars.sign_punctation_two:
+bskchar "Two dot punctation";
+beginchar(chars.sign_punctation_two,4.5u#,cap_height#,0); uni "0x205A";
+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.sign_punctation_three:
+bskchar "Three dot punctation";
+beginchar(chars.sign_punctation_three,10u#,.5[x_height#,asc_height#],0); uni "0x2056";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=w-u-.5dot_size; x3=u+.5dot_size; y3=.5[y1,y2]=.5h; top y1=h-.5dot_size;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.sign_punctation_four:
+bskchar "Four dot punctation";
+beginchar(chars.sign_punctation_four,10u#,.5[x_height#,asc_height#],0); uni "0x2058";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-x2=u+.5dot_size; x3=x4=.5w; top y3=h-.5dot_size; .5[y3,y4]=.5h=y1=y2;
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.sign_mark_four:
+bskchar "Four dot mark";
+beginchar(chars.sign_mark_four,13u#,body_height#+rule_thickness#,desc_depth#+rule_thickness#); uni "0x205B";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-x2=u+.5dot_size; x3=x4=.5w; top y3=h-.5dot_size; .5[y3,y4]=.5[h,-d]=y1=y2;
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.sign_punctation_five:
+bskchar "Five dot punctation";
+beginchar(chars.sign_punctation_five,10u#,.5[x_height#,asc_height#],0); uni "0x2059";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=w-u-.5dot_size; x3=x4=u+.5dot_size; y3=y1; y2=y4; top y1=h-.5dot_size; .5[y1,y2]=.5h;
+z5=.5[z3,z2];
+dot(1); dot(2); dot(3); dot(4); dot(5);
+endchar;
+
+iff known chars.sign_punctation_cross_dot:
+bskchar "Dotted cross punctation";
+beginchar(chars.sign_punctation_cross_dot,12u#,.5[x_height#,asc_height#],0); uni "0x205C";
+adjust_fit(0,0);
+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=.5[y9,y10]=.5h; y11=y9; y10=y12; top y9=h-dot_size;
+x3=x4=.5w; top y3=h; bot y4=-d;
+x9=x10=w-u-dot_size; x11=x12=u+dot_size;
+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;
+dot(9); dot(10); dot(11); dot(12);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.sign_tricolon:
+bskchar "Tricolon sign";
+beginchar(chars.sign_tricolon,4.5u#,asc_height#,0); uni "0x205D";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=.5w; top y1=h-.5dot_size; bot y3=-d+.5dot_size; y2=.5[y1,y3];
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.sign_fourcolon:
+bskchar "Fourcolon sign";
+beginchar(chars.sign_fourcolon,4.5u#,body_height#,0); uni "0x205E";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=x4=.5w; top y1=h-.5dot_size; bot y4=-d+.5dot_size; .5[y2,y3]=.5[y1,y4]; y2=.5[y1,y3];
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.math_triratio:
+bskchar "Triratio sign (triple colon)";
+beginchar(chars.math_triratio,5u#,v_center(1.5x_height#)); uni "0x2AF6";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=.5w; top y1=h-.5dot_size; bot y3=-d+.5dot_size; y2=.5[y1,y3];
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.math_proportion:
+bskchar "Proportion sign";
+beginchar(chars.math_proportion,9u#,v_center(x_height#)); uni "0x2237";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; x1=2u;
+top y1=top y3=h-.5dot_size; bot y2=bot y4=-d+.5dot_size;
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.math_excess:
+bskchar "Excess sign";
+beginarithchar(chars.math_excess); uni "0x2239";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x1=x2=w-2u;
+.5[y1,y2]=y3=y4=math_axis; top y1-bot y2=x_height-dot_size;
+lft x3=u; rt x4=x1-dot_size-rule_thickness;
+filldraw bskrule(3,4,hair,hair);
+dot(1); dot(2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_proportion_geo:
+bskchar "Geometric proportion sign";
+beginarithchar(chars.math_proportion_geo); uni "0x223A";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x1=x2; x3=x4; .5[x1,x3]=.5w; x1=2u;
+y1=y3; y2=y4; .5[y1,y2]=y5=y6=math_axis; top y1-bot y2=x_height-dot_size;
+lft x5=u; rt x6=w-u;
+filldraw bskrule(5,6,hair,hair);
+dot(1); dot(2); dot(3); dot(4);
+penlabels(5,6);
+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.math_therefore:
+bskchar "Therefore";
+beginchar(chars.math_therefore,13u#,asc_height#,0); uni "0x2234";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5w=.5[x1,x3]; lft x1=u+.5dot_size;
+y1=y3; bot y1=.5dot_size; z2-z1=(z3-z1) rotated 60;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.math_because:
+bskchar "Because";
+beginchar(chars.math_because,13u#,asc_height#,0); uni "0x2235";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5w=.5[x1,x3]; lft x1=u+.5dot_size;
+y1=y3; bot y2=.5dot_size; z2-z1=(z3-z1) rotated -60;
+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.math_semicolon_fat:
+bskchar "Fat white semicolon";
+beginchar(chars.math_semicolon_fat,4.5u#,x_height#,comma_depth#); uni "0x2A3E";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{ save dot_size; dot_size:=2.5u;
+x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
+dot(1); comma(2,dot_size,.5hair,d);
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z1;
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z2;
+}};
+endchar;
+
+iff known chars.math_semicolon_fat_big:
+bskchar "Fat big white semicolon";
+beginchar(chars.math_semicolon_fat_big,5.5u#,v_center(asc_height#)); uni "0x2A1F";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{ numeric old_comma; old_comma:=comma_depth;
+ save dot_size; dot_size:=3u; comma_depth:=1.5old_comma;
+x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=-d+comma_depth;
+dot(1); comma(2,dot_size,hair,comma_depth);
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z1;
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z2;
+}};
+endchar;
+
+iff known chars.sign_semicolon_rev:
+bskchar "Reversed semicolon";
+beginchar(chars.sign_semicolon_rev,4.5u#,x_height#,comma_depth#); uni "0x204F";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x2=.5w+.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
+dot(1); turn_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#,asc_height#,0); uni "0x0021";
+adjust_fit(punct_fit#,0);
+pickup tiny.nib;
+bot z1=(.5w,.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_exclamation_double:
+bskchar "Double exclamation point";
+beginchar(chars.sign_exclamation_double,8u#,asc_height#,0); uni "0x203C";
+adjust_fit(0,0);
+pickup tiny.nib;
+penpos2(dot_size,0); pos3(hair,0);
+penpos5(dot_size,0); pos6(hair,0);
+bot y1=bot y4=.5dot_size; .5[x1,x4]=.5w; x1=2.5u;
+x2=x3=x1; x4=x5=x6;
+y2=y5=h-.5stem; bot y3=bot y6=dot_size+stem; y3r:=y6r:=y3r+.5hair;
+filldraw z2l---z3l..{.5[z2,z2r]-z3r}z3r..{z2r-z3r}z2r..cycle;
+filldraw z5l---z6l..{.5[z5,z5r]-z6r}z6r..{z5r-z6r}z5r..cycle;
+dot(1); dot(4);
+penlabels(2,3,4,5);
+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.math_equals_double:
+bskchar "Double equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_double,23u#,v_center(spread#+rule_thickness#)); uni "0x2A75";
+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);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=u; rt x6=w-u; x3=x1; x4=x2; x5=x7; x6=x8; .5[x2,x5]=.5w; x5-x2=2.5rule_thickness;
+y1=y2=y5=y6; y3=y4=y7=y8; .5[y1,y3]=math_axis; top y1r=h;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw bskrule(5,6,hair,0);
+filldraw bskrule(8,7,hair,0);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_equals_triple:
+bskchar "Triple equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_triple,32u#,v_center(spread#+rule_thickness#)); uni "0x2A76";
+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);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x1=u; rt x10=w-u; x3=x1; x4=x2; x5=x7; x6=x8; x9=x11; x10=x12;
+x5-x2=x9-x6=2.5rule_thickness; .5[x5,x6]=.5w; x2-x1=x6-x5;
+y1=y2=y5=y6=y9=y10; y3=y4=y7=y8=y11=y12; .5[y1,y3]=math_axis; top y1r=h;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw bskrule(5,6,hair,0);
+filldraw bskrule(8,7,hair,0);
+filldraw bskrule(9,10,hair,0);
+filldraw bskrule(12,11,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+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_neq_vert:
+bskchar "Not equals sign (vertical)";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.sign_neq_vert,13u#,v_center(.6(body_height#+desc_depth#))); uni "non";
+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,0); pos6(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+top y5=h; bot y6=-d; x5=x6=.5w;
+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)---z2r
+ ..z2ll---obl(3',2l,4')---obl(4',3',4r)---z4r..z4l
+ ---obl(5',4l,6r)---z6r..z6ll---obl(6',6l,3l)---z3ll
+ ..z3r---obl(7',3r,8')---obl(8',7',1l)---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.math_equals_circle:
+bskchar "Equals circle sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_circle,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2257";
+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,270); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,180);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; bot y3l=-d;
+x5=x7=.5[x6,x8]=.5w; top y5l=h; bot y7l=top y1r+1.5rule_thickness; y6=y8=.5[y5,y7]; x8-x6=y5-y7;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw z5l{left}..{down}z6l..{right}z7l..{up}z8l..cycle;
+infill z5r{left}..{down}z6r..{right}z7r..{up}z8r..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_equals_triangle:
+bskchar "Equals sign with triangle";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_triangle,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x225C";
+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; bot y3l=-d;
+x7=.5[x5,x6]=.5w; x6-x5=1.5(y7-y5);
+bot y5=bot y6=top y1r+1.5rule_thickness; top y7=h+o;
+y5'=y6'=y5+(rule_thickness-currentbreadth);
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw obl(5,7,6)---obl(6,5,7)---obl(7,6,5)---cycle;
+oblu:=2oblu;
+infill obl(5',7',6')---obl(6',5',7')---obl(7',6',5')---cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_corresponds:
+bskchar "Corresponds to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_corresponds,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2258";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x9=u; x10+x9=w; x11=x9; x12=x10;
+y9=y10; y11=y12; .5[y9,y11]=math_axis; bot y11l=-d;
+x8=.5w; top y8=h-.5rule_thickness; y4=y9; y8-y4=.9(x2-x6);
+circle_points(rule_thickness);
+filldraw bskrule(9,10,hair,0);
+filldraw bskrule(12,11,hair,0);
+filldraw subpath(-2,2) of (draw_circle.l)..subpath(-2,2) of reverse (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_equals_corresponds:
+bskchar "Corresponds to (estimates) sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_corresponds,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2259";
+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; bot y3l=-d;
+x7=.5[x5,x6]=.5w; x6-x5=1.75(y7-y5);
+bot y5=bot y6=top y1r+1.5rule_thickness; top y7=h+o;
+y5'=y6'=y5;
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw z6---obl(7,6,5)---z5..z5'---obl(7',5',6')---z6'..cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_equiangular:
+bskchar "Equiangular to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equiangular,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x225A";
+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; bot y3l=-d;
+x7=.5[x5,x6]=.5w; x6-x5=1.75(y7-y5);
+top y5=top y6=h-o; y7=top y1r+1.5rule_thickness-o;
+y5'=y6'=y5;
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw z6---obl(7,6,5)---z5..z5'---obl(7',5',6')---z6'..cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_equals_asterisk:
+bskchar "Equals-and-asterisk sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_asterisk,13u#,1.5spread#+3rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2A6E";
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+numeric vast; path p;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x2=u; x3+x2=w; x4=x2; x5=x3;
+y2=y3; y4=y5; .5[y2,y4]=math_axis; bot y4l=-d;
+z0=(.5w,.5[y2,h]+rule_thickness); vast=.8stem;
+pos1(1.3rule_thickness,0); x1=x0;
+top y1=h; 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(2,3,hair,0);
+filldraw bskrule(5,4,hair,0);
+penlabels(1,2,3,4,5); labels(0);
+endchar;
+
+iff known chars.math_equals_star:
+bskchar "Equals-and-star sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_star,13u#,1.5spread#+3rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x225B";
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=u; x7+x6=w; x8=x6; x9=x7;
+y6=y7; y8=y9; .5[y6,y8]=math_axis; bot y8l=-d;
+z0=(.5w,.5[y6,h]+rule_thickness);
+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;
+filldraw bskrule(6,7,hair,0);
+filldraw bskrule(9,8,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9,11,12,13,14,15); labels(0,101,102,103,104,105);
+endchar;
+
+iff known chars.math_equals_dot:
+bskchar "Equals-and-dot sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot,13u#,.5spread#+2rule_thickness#+dot_size#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2250";
+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; y1-y3=spread;
+x5=.5w; top y5=h+o;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_below:
+bskchar "Equals-and-dot-below sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_below,13u#,.5spread#+.5rule_thickness#+dot_size#+math_axis#,.5spread#+2rule_thickness#+dot_size#-math_axis#); uni "0x2A66";
+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; y1-y3=spread;
+x5=.5w; bot y5=-d-o;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dots:
+bskchar "Equals-and-dots sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dots,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2251";
+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]=.5[y5,y6]=math_axis; y1-y3=spread;
+.5[x5,x6]=.5w; top y5=h+o-.5dot_size; x5=x6;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_rl:
+bskchar "Dottted (right-left) equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_rl,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2253";
+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]=.5[y5,y6]=math_axis; y1-y3=spread;
+.5[x5,x6]=.5w; top y5=h+o-.5dot_size; lft x6=x3+.5dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_lr:
+bskchar "Dotted (left-right) equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_lr,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2252";
+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]=.5[y5,y6]=math_axis; y1-y3=spread;
+.5[x5,x6]=.5w; top y5=h+o-.5dot_size; lft x5=x1+.5dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_ttbb:
+bskchar "Four-dotted top-bottom equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_ttbb,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2A77";
+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]=.5[y5,y7]=math_axis; y1-y3=spread; y7=y8;
+.5[x5,x6]=.5w; x6-x5=.5(x2-x1); x5=x7; x6=x8; top y5=top y6=h+o-.5dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6); dot(7); dot(8);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_colon_equals:
+bskchar "Equals sign after colon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_colon_equals,15u#+dot_size#,v_center(spread#+rule_thickness#)); uni "0x2254";
+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=3u+dot_size; rt x2=w-u; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; top y1r=h;
+x5=x6=u+.5dot_size; top y5-bot y6=x_height-dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_colon_double_equals:
+bskchar "Equals sign after double colon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_colon_double_equals,17u#+2dot_size#,v_center(spread#+rule_thickness#)); uni "0x2A74";
+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=5u+2dot_size; rt x2=w-u; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; top y1r=h;
+x5=x6=u+.5dot_size; top y5-bot y6=x_height-dot_size; x7=x8=.5[x5,x1]; y7=y5; y8=y6;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6); dot(7); dot(8);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_colon:
+bskchar "Equals sign before colon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_colon,15u#+dot_size#,v_center(spread#+rule_thickness#)); uni "0x2255";
+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; rt x2=w-3u-dot_size; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; top y1r=h;
+x5=x6=w-u-.5dot_size; top y5-bot y6=x_height-dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_parallel:
+bskchar "Equals and parallel to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_parallel,13u#,v_center(.75(body_height#+desc_depth#))); uni "0x22D5";
+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,0); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+top y5=top y7=h; bot y6=bot y8=-d; x5=x6; x7=x8=x5+max(3curve,3u); .5[x5,x7]=.5w;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness); bskpoints(8,7,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];
+z9'=whatever[z7l,z8l]=whatever[z1r,z2r];
+z10'=whatever[z7r,z8r]=whatever[z1r,z2r];
+z11'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z12'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z13'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z14'=whatever[z7l,z8l]=whatever[z3l,z4l];
+z15'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z16'=whatever[z7l,z8l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,9')---obl(9',2',7l)---z7ll..z7r
+ ---obl(10',7r,2r)---z2r..z2ll---obl(11',2l,12')---obl(12',11',4r)---z4r..z4l
+ ---obl(13',4l,8r)---z8rr..z8l---obl(14',8l,5')---obl(5',4l,6r)---z6r..z6ll
+ ---obl(6',6l,3l)---z3ll..z3r---obl(7',3r,8')---obl(8',7',1l)---z1l..cycle;
+infill obl(3',16',4')---obl(4',3',15')---obl(15',4',16')---obl(16',15',3')---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+labels(2ll,3ll,5rr,6ll,,7ll,8rr,1',2',3',4',5',6',7',8',9',10',11',12',13',14',15',16');
+endchar;
+
+iff known chars.math_equals_sl_parallel:
+bskchar "Equals and slanted parallel to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_sl_parallel,13u#,v_center(.75(body_height#+desc_depth#))); uni "0x29E3";
+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,0); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+top y5=top y7=h; bot y6=bot y8=-d; x5-x6=x7-x8=x7-x5=max(3curve,3u); .5[x7,x6]=.5w;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness); bskpoints(8,7,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];
+z9'=whatever[z7l,z8l]=whatever[z1r,z2r];
+z10'=whatever[z7r,z8r]=whatever[z1r,z2r];
+z11'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z12'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z13'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z14'=whatever[z7l,z8l]=whatever[z3l,z4l];
+z15'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z16'=whatever[z7l,z8l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,9')---obl(9',2',7l)---z7ll..z7r
+ ---obl(10',7r,2r)---z2r..z2ll---obl(11',2l,12')---obl(12',11',4r)---z4r..z4l
+ ---obl(13',4l,8r)---z8rr..z8l---obl(14',8l,5')---obl(5',4l,6r)---z6r..z6ll
+ ---obl(6',6l,3l)---z3ll..z3r---obl(7',3r,8')---obl(8',7',1l)---z1l..cycle;
+infill obl(3',16',4')---obl(4',3',15')---obl(15',4',16')---obl(16',15',3')---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+labels(2ll,3ll,5rr,6ll,,7ll,8rr,1',2',3',4',5',6',7',8',9',10',11',12',13',14',15',16');
+endchar;
+
+iff known chars.math_bow:
+bskchar "Bow sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_bow,11u#,v_center(spread#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x8=.5w; top y8=h; y2=-d; y8-y4=.9(x2-x6);
+circle_points(rule_thickness);
+filldraw subpath(-2,2) of (draw_circle.l)..subpath(-2,2) of reverse (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(5,5',6,6',7,7',8,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.math_slash_double:
+bskchar "Double slash";
+beginchar(chars.math_slash_double,13u#,body_height#,desc_depth#); uni "0x2AFD";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(w-4u,h); bot lft z2=(u,-d);
+z3-z1=z4-z2=(3u,0);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+pos3(rule_thickness,angle(z2-z1)+90); pos4(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_slash_triple:
+bskchar "Triple slash operator";
+beginchar(chars.math_slash_triple,16u#,v_center(10/6dh#)); uni "0x2AFB";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(w-7u,h); bot lft z2=(u,-d);
+z5-z3=z3-z1=z6-z4=z4-z2=(3u,0);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+pos3(rule_thickness,angle(z2-z1)+90); pos4(rule_thickness,angle(z2-z1)+90);
+pos5(rule_thickness,angle(z2-z1)+90); pos6(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6);
+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.math_division_integer:
+bskchar "Integer division symbol";
+beginarithchar(chars.math_division_integer); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+top lft z1=(2u,x_height); bot y2=-o; x2=w-x1;
+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.math_line_45:
+bskchar "45 degree angle line";
+beginchar(chars.math_line_45,asc_height#+asc_depth#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+bot y1=-d; .5[y1,y2]=math_axis; lft x1=0;
+z2=z1+whatever*dir45;
+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_line_135:
+bskchar "135 degree angle line";
+beginchar(chars.math_line_135,asc_height#+asc_depth#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+bot y1=-d; .5[y1,y2]=math_axis; rt x1=w;
+z2=z1+whatever*dir135;
+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_dijkstra:
+bskchar "Dijkstra choice";
+beginchar(chars.math_dijkstra,7u#,v_center(asc_height#)); uni "0x2AFE";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top y1=h; bot y2=-d; x1=x2=.5w;
+pickup tiny.nib;
+pos1(rule_thickness+4u,0); pos2(rule_thickness+4u,0);
+y1'r=y1'l=y1r-rule_thickness+currentbreadth;
+z1'=z1l+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l).more---obl(2'l,1'l,2'r)---obl(2'r,2'l,1'r).more---obl(1'r,2'r,1'l)---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_dijkstra_nary:
+bskchar "N-ary dijkstra choice";
+beginchar(chars.math_dijkstra_nary,8u#,v_center(10/6dh#)); uni "0x2AFF";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top y1=h; bot y2=-d; x1=x2=.5w;
+pickup tiny.nib;
+pos1(stem+4u,0); pos2(stem+4u,0);
+y1'r=y1'l=y1r-stem+currentbreadth;
+z1'=z1l+(stem-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(stem-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l).more---obl(2'l,1'l,2'r)---obl(2'r,2'l,1'r).more---obl(1'r,2'r,1'l)---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_slash_fat:
+bskchar "Fat slash";
+beginchar(chars.math_slash_fat,10u#,body_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top rt z1=(w+2u,h); bot lft z2=(3u,-d);
+pickup tiny.nib;
+pos1(rule_thickness+4u,0); pos2(rule_thickness+4u,0);
+y1'r=y1'l=y1r-rule_thickness+currentbreadth;
+z1'=z1l+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l).more---obl(2'l,1'l,2'r)---obl(2'r,2'l,1'r).more---obl(1'r,2'r,1'l)---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_backslash_fat:
+bskchar "Fat backslash sign";
+beginchar(chars.math_backslash_fat,10u#,body_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top lft z1=(-2u,h); bot rt z2=(w-3u,-d);
+pickup tiny.nib;
+pos1(rule_thickness+4u,0); pos2(rule_thickness+4u,0);
+y1'r=y1'l=y1r-rule_thickness+currentbreadth;
+z1'=z1l+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l)---obl(2'l,1'l,2'r).more---obl(2'r,2'l,1'r)---obl(1'r,2'r,1'l).more---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_backslash_double:
+bskchar "Double backslash sign";
+beginchar(chars.math_backslash_double,10u#+max(3curve#,3u#),body_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+top lft z1=(u,h); bot rt z4=(w-u,-d);
+z3-z1=z4-z2=(max(3curve,3u),0);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+pos3(rule_thickness,angle(z2-z1)+90); pos4(rule_thickness,angle(z2-z1)+90);
+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.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.math_plus_semicircle_left:
+bskchar "Plus sign in left half circle";
+beginchar(chars.math_plus_semicircle_left,11u#,v_center(11u#)); uni "0x2A2D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+lft x6=u+.5rule_thickness; .5[x6,x2]=x11=x12=.5[x9,x10]=.5w+u; y8-y4=x2-x6;
+lft x9=3u; y2=y9=y10=.5[y11,y12]=math_axis; y11-y12=x10-x9;
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(4,8) of (draw_circle.l)..reverse subpath(4,8) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_plus_semicircle_right:
+bskchar "Plus sign in right half circle";
+beginchar(chars.math_plus_semicircle_right,11u#,v_center(11u#)); uni "0x2A2E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+rt x2=w-u-.5rule_thickness; .5[x6,x2]=x11=x12=.5[x9,x10]=.5w-u; y8-y4=x2-x6;
+lft x9=u; y2=y9=y10=.5[y11,y12]=math_axis; y11-y12=x10-x9;
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(0,4) of (draw_circle.l)..reverse subpath(0,4) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_plus_dot:
+bskchar "Plus sign with dot above";
+beginchar(chars.math_plus_dot,13u#,asc_height#,5.5u#-math_axis#); uni "0x2214";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+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=x9=.5w; top y3=5.5u+math_axis; bot y4=-d;
+if h-.5dot_size<top y3+rule_thickness: y9=h; else: bot y9=h-.5dot_size;fi
+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;
+dot(9);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_dot_below:
+bskchar "Plus sign with dot below";
+beginchar(chars.math_plus_dot_below,13u#,5.5u#+math_axis#,.55desc_depth#); uni "0x2A25";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+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=x9=.5w; top y3=h; bot y4=math_axis-5.5u;
+if -d+.5dot_size>bot y4-rule_thickness: y9=-d; else: top y9=-d+.5dot_size;fi
+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;
+dot(9);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_hat:
+bskchar "Plus sign with hat";
+beginchar(chars.math_plus_hat,13u#,asc_height#,5.5u#-math_axis#); uni "0x2A23";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+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=math_axis+5.5u; bot y4=-d;
+x10=x3+o;
+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;
+circumflex(9,10,11);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_tilde:
+bskchar "Plus sign with tilde";
+beginchar(chars.math_plus_tilde,13u#,asc_height#,5.5u#-math_axis#); uni "0x2A24";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+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=math_axis+5.5u; bot y4=-d;
+y9=y3+rule_thickness; y10=h; x9=3u;
+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;
+tilde(9,10);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_tilde_below:
+bskchar "Plus sign with tilde below";
+beginchar(chars.math_plus_tilde_below,13u#,5.5u#+math_axis#,.55desc_depth#); uni "0x2A26";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+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=math_axis-5.5u;
+y9=-d; y10=y4-rule_thickness; x9=3u;
+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;
+tilde(9,10);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_triangle:
+bskchar "Plus sign with black triangle";
+beginarithchar(chars.math_plus_triangle); uni "0x2A28";
+pickup tiny.nib;
+oblu.more:=2oblu;
+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=x11=.5[x9,x10]=.5w; top y3=h; bot y4=-d;
+x10-x9=2(y11-y9)=w-7u;
+y9=y10; y11=y1l;
+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];
+y12=y13=y9; x12=x4r; x13=x4l;
+filldraw z1l---obl(5,1l,9).more---obl(9,5,13)---tobl(13,9,4l)---z4l..z4rr---tobl(12,4rr,10)
+ ---obl(10,12,6)--obl(6,10,2l).more---z2ll..z2r---obl(7,2r,3r)---z3r..z3ll
+ ---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8,9,10,11,12,13);
+endchar;
+
+iff known chars.math_plus_through_circ:
+bskchar "Plus sign through circle";
+beginarithchar(chars.math_plus_through_circ); uni "non";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5w; x2-x6=y8-y4=w-6u;
+circle_points(rule_thickness);
+lft x9=u; rt x10=w-u; y9=y10=math_axis;
+x11=x12=x17=.5w; top y11=5.5u+math_axis; bot y12=-d;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9l---obl(13,9l,12l)---z12l;
+p3:=z12rr---obl(14,12r,10l)---z10ll;
+p4:=z10r---obl(15,10r,11r)---z11r;
+p5:=z11ll---obl(16,11l,9r)---z9rr;
+(tim0,tim1)=p0 intersectiontimes subpath(0,1) of p2;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p2;
+(tim4,tim5)=p0 intersectiontimes subpath(0,1) of p3;
+(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p3;
+(tim8,tim9)=p0 intersectiontimes subpath(0,1) of p4;
+(tim10,tim11-1)=p0 intersectiontimes subpath(1,infinity) of p4;
+(tim12,tim13)=p0 intersectiontimes subpath(0,1) of p5;
+(tim14,tim15-1)=p0 intersectiontimes subpath(1,infinity) of p5;
+(tim16,tim17)=p1 intersectiontimes subpath(0,1) of p2;
+(tim18,tim19-1)=p1 intersectiontimes subpath(1,infinity) of p2;
+(tim20,tim21)=p1 intersectiontimes subpath(0,1) of p3;
+(tim22,tim23-1)=p1 intersectiontimes subpath(1,infinity) of p3;
+(tim24,tim25)=p1 intersectiontimes subpath(0,1) of p4;
+(tim26,tim27-1)=p1 intersectiontimes subpath(1,infinity) of p4;
+(tim28,tim29)=p1 intersectiontimes subpath(0,1) of p5;
+(tim30,tim31-1)=p1 intersectiontimes subpath(1,infinity) of p5;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..subpath(0,rundy(p3,tim5).zpet) of p3
+ ..subpath(rundy(p0,tim4),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p3,tim7),infinity) of p3
+ ..subpath(0,rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p4,tim11),infinity) of p4
+ ..subpath(0,rundy(p5,tim13).zpet) of p5
+ ..subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p5,tim15),infinity) of p5..cycle;
+infill subpath(rundy(p2,tim17),rundy(p2,tim19).zpet) of p2
+ ..subpath(rundy(p1,tim18).zpet,rundy(p1,tim16)) of p1..cycle;
+infill subpath(rundy(p3,tim21),rundy(p3,tim23).zpet) of p3
+ ..subpath(rundy(p1,tim22).zpet,rundy(p1,tim20)) of p1..cycle;
+infill subpath(rundy(p4,tim25),rundy(p4,tim27).zpet) of p4
+ ..subpath(rundy(p1,tim26).zpet,rundy(p1,tim24)) of p1..cycle;
+infill subpath(rundy(p5,tim29),rundy(p5,tim31).zpet) of p5
+ ..subpath(rundy(p1,tim30).zpet,rundy(p1,tim28)) of p1..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_plus_circ:
+bskchar "Plus sign with circle";
+beginchar(chars.math_plus_circ,13u#,asc_height#+2rule_thickness#,5.5u#-math_axis#); uni "0x2A22";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+bot y4=top 5.5u+math_axis+rule_thickness; top y8=h; .5[x2,x6]=.5w; x2-x6=y8-y4;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+lft x9=u; rt x10=w-u; y9=y10=math_axis;
+x11=x12=x17=.5w; top y11=5.5u+math_axis; bot y12=-d;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+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_tilde_dash:
+bskchar "Swung dash";
+beginchar(chars.sign_tilde_dash,13u#,x_height#,0); uni "0x2053";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=3curve;
+.5[y1,y0]=.5h;
+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_asterisk_two:
+bskchar "Two asterisks";
+beginchar(chars.sign_asterisk_two,8u#,body_height#,0); uni "0x2051";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast; pair shf;
+path p;
+ast:=3/4stem; vast=.55stem;
+pos1(ast,0); x1=x0=.5w;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x0:
+ size:= (lft w-u-x0)/cosd(30)-.5ast; fi;
+y1=y0+size=h; shf:=(0,-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;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i) shifted shf .. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.sign_asterism:
+bskchar "Asterism";
+beginchar(chars.sign_asterism,15u#,body_height#,0); uni "0x2042";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+ast:=3/4stem; vast=.55stem; size=1/3x_height;
+pos1(ast,0); x1=x0=.5w; y1=y0+size=h;
+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 for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i) shifted (u-x0+size,-y0+size) .. endfor cycle;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i) shifted (w-u-x0-size,-y0+size) .. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.sign_asterisk_low:
+bskchar "Low asterisk";
+beginchar(chars.sign_asterisk_low,7.5u#,x_height#,0); uni "0x204E";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+ast:=3/4stem; vast=.55stem;
+size=1/3x_height;
+pos1(ast,0);
+x1=x0=.5w; y1-size=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_flower_punct:
+bskchar "Flower punctation";
+beginchar(chars.sign_flower_punct,11u#,x_height#,0); uni "0x2055";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+z0=(.5w,.5h); vast=1.5u;
+pos0(hair,0); pos1(u,0); x1=x0;
+y1=h;
+p:=z0r{up}..z1r{dir120}..{dir-120}z1l...{down}z0l;
+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, 45, 90, 135, 180, 225, 270, 315: 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;
+y0'=y0=y13; y0''=y0'''=y14;
+z0=whatever[z1r,z2r]; z0'=whatever[z3l,z4l]; z0''=whatever[z3l,z4l]; z0'''=whatever[z1r,z2r];
+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.math_hash:
+bskchar "Hash";
+beginchar(chars.math_hash,13u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+x1r-x3r=x2l-x4l=.35w; x1=x2; .5[x1,x3]=.5w;
+y1r=y3r=h; y2l=y4l=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u;
+y5=y6; y7=y8; .5[y5,y7]=.5(h-d); y5-y7=.55x_height;
+numeric theta; theta=180;
+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;
+y0'=y0=y13; y0''=y0'''=y14;
+z0=whatever[z1r,z2r]; z0'=whatever[z3l,z4l]; z0''=whatever[z3l,z4l]; z0'''=whatever[z1r,z2r];
+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.math_varhash:
+bskchar "Hash---alternative";
+beginchar(chars.math_varhash,13u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+x1r-x3r=x2l-x4l=.35w; rt x1r=w-u; lft x4l=u;
+y1r=y3r=h; y2l=y4l=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u;
+y5=y6; y7=y8; .5[y5,y7]=.5(h-d); y5-y7=.55x_height;
+numeric theta; theta=180;
+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;
+y0'=y0=y13; y0''=y0'''=y14;
+z0=whatever[z1r,z2r]; z0'=whatever[z3l,z4l]; z0''=whatever[z3l,z4l]; z0'''=whatever[z1r,z2r];
+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 "0x2423";
+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_double_hyphen_obl:
+bskchar "Oblique double hyphen";
+beginchar(chars.sign_double_hyphen_obl,6u#,x_height#,0); uni "0x2E17";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,90); pos2(stem,90);
+pos3(stem,90); pos4(stem,90);
+.5[y1r,y2r]=.6h;
+y1l-y3r=y2l-y4r=2(y2r-y1r)=.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);
+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,9u#,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_quotdash:
+bskchar "Quotation dash";
+beginchar(chars.sign_quotdash,22u#,x_height#,0); uni "0x2015";
+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.sign_underbar_double:
+bskchar "Double underbar sign";
+beginchar(chars.sign_underbar_double,9u#,0,desc_depth#-.5rule_thickness#); uni "0x2017";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+top y1r=top y2r=2/3h; y3=y4; y3-y1=2.5rule_thickness;
+lft x1=lft x3=0; x2=x4=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+filldraw bskrule(3,4,.5hair,.5hair);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.sign_overbar:
+bskchar "Overbar sign";
+beginchar(chars.sign_overbar,9u#,body_height#,0); uni "0x203E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+top y1r=top y2r=h;
+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.sign_undertie:
+bskchar "Undertie";
+beginchar(chars.sign_undertie,11u#,0,.75desc_depth#); uni "0x203F";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5[x0,x2]=.5w; y0=y2=h-rule_thickness; y1l=-d;
+pos0(hair,10); pos2(hair,0); pos1(.75[hair,stem],90);
+x2-x0=w-2u;
+y2r:=y2r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+penlabels(0,1,2);
+endchar;
+
+iff known chars.sign_undertie_inv:
+bskchar "Inverted undertie";
+beginchar(chars.sign_undertie_inv,11u#,0,.75desc_depth#); uni "0x2054";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5[x0,x2]=.5w; y1l=h-rule_thickness; y0=y2=-d;
+pos0(hair,-10); pos2(hair,0); pos1(.75[hair,stem],270);
+x2-x0=w-2u;
+y2r:=y2r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+penlabels(0,1,2);
+endchar;
+
+iff known chars.sign_tie:
+bskchar "Character tie";
+beginchar(chars.sign_tie,11u#,body_height#,0); uni "0x2040";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5[x0,x2]=.5w; y1l=h; y0=y2=1/2[x_height,top y1];
+pos0(hair,-10); pos2(hair,0); pos1(.75[hair,stem],270);
+x2-x0=w-2u;
+y2r:=y2r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+penlabels(0,1,2);
+endchar;
+
+iff known chars.sign_closeup:
+bskchar "Close up sign";
+beginchar(chars.sign_closeup,11u#,1/3[x_height#,asc_height#],0); uni "0x2050";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(hair,10); pos2(hair,0); pos1(.75[hair,stem],90);
+pos3(hair,-10); pos5(hair,0); pos4(.75[hair,stem],270);
+x1=.5[x0,x2]=x4=.5[x3,x5]=.5w; y0=y2; y1l=-d; y4l=h; y3=y5; .5[y0,y3]=.5[y1,y4]; y5-y2=3rule_thickness+tiny;
+x2-x0=x5-x3=w-2u;
+y2r:=y2r-.5tiny; y5r:=y5r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+filldraw z3l..z4l..z5r--z5l..z4r..z3r--cycle;
+penlabels(0,1,2,3,4,5);
+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_assertion:
+bskchar "Assertion sign";
+beginchar(chars.math_assertion,8u#,asc_height#,0); uni "0x22A6";
+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_left_neg:
+bskchar "Negated left turnstile";
+beginchar(chars.math_lattice_left_neg,13u#,asc_height#,0); uni "0x22AC";
+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=2u; rt x4=w-u; x3=x2r;
+bot y5=-d; top y6=h; lft x5=.5u; x6=w-2u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x1'l=x1'r=x1r; z1'l=whatever[z5l,z6l]; z1'r=whatever[z5r,z6r];
+x2'l=x2'r=x1l; z2'l=whatever[z5l,z6l]; z2'r=whatever[z5r,z6r];
+y3'l=y3'r=y3r; z3'l=whatever[z5l,z6l]; z3'r=whatever[z5r,z6r];
+y4'l=y4'r=y3l; z4'l=whatever[z5l,z6l]; z4'r=whatever[z5r,z6r];
+filldraw z1rr---obl(1'r,1r,4'r)---obl(4'r,1'r,4l)---z4ll..z4r
+ ---obl(3'r,4r,6r)---z6r..z6ll---obl(3'l,6l,3r)---obl(3r,4r,2r)
+ ---z2r..z2ll---obl(2'l,2ll,5l)---z5l..z5rr---tobl(2'r,5rr,1l)---z1l..cycle;
+infill obl(3l,4'l,1'l)---obl(1'l,3l,4'l)---obl(4'l,1'l,3l)---cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6);
+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_right_short:
+bskchar "Short right turnstile";
+beginchar(chars.math_lattice_right_short,8u#,asc_height#,0); uni "0x2ADE";
+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_intercalate:
+bskchar "Intercalate";
+beginchar(chars.math_intercalate,9u#,asc_height#,0); uni "0x22BA";
+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_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_top_short:
+bskchar "Short lattice top";
+beginchar(chars.math_lattice_top_short,14u#,x_height#,0); uni "0x2ADF";
+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_top_short_overbar:
+bskchar "Short lattice top with overbar";
+beginchar(chars.math_lattice_top_short_overbar,14u#,.8asc_height#+rule_thickness#,0); uni "0x2AE7";
+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);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1r=top y2r=x_height; y3=y1l; bot y4=-d; top y5r=top y6r=h;
+x3=x4=.5[x1,x2]; lft x1=lft x5=u; rt x2=rt x6=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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_lattice_top_double:
+bskchar "Double lattice top";
+beginchar(chars.math_lattice_top_double,14u#,asc_height#,0); uni "0x2AEA";
+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);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+top y1r=top y2r=h; y3=y5=y1l; bot y4=bot y6=-d;
+x3=x4; x5=x6; .5[x3,x5]=.5w; x5-x3=4u; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(5,6,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(5r,2l,6r)---z6r..z6ll---obl(5l,6l,3r)
+ ---obl(3r,5l,4r)---z4r..z4ll---obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_lattice_top_short_bottom:
+bskchar "Short lattice top above short lattice bottom";
+beginchar(chars.math_lattice_top_short_bottom,14u#,v_center(2x_height#+2rule_thickness#)); uni "0x2AE9";
+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);
+pos5(rule_thickness,270); pos6(rule_thickness,270);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+top y1r=top y2r=math_axis-rule_thickness; 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;
+bot y5r=bot y6r=math_axis+rule_thickness; y7=y5l; top y8=h;
+x7=x8=.5[x5,x6]; lft x5=u; rt x6=w-u;
+bskpoints(7,8,hair,0); bskpoints(5,6,hair,hair);
+filldraw z5rr---z6r..z6ll---obl(7r,6l,8r)---z8r..z8ll---
+ obl(7l,8l,5l)---z5l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_top_neg:
+bskchar "Negated lattice top";
+beginchar(chars.math_lattice_top_neg,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu; oblu.more:=3f_obl;
+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;
+bot y5=-d; top y6=y2l-rule_thickness; x6=w-2u; .5[x5,x6]=x4;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+x6'l=x6'r=x4r; x5'l=x5'r=x4l;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---obl(6'l,3r,6ll)---z6ll..z6r
+ ---obl(6'r,6r,4r).more---z4r..z4ll---obl(5'r,4l,5r)---z5rr..z5l
+ ---obl(5'l,5l,3l).more---obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,5',6,6'); labels(1rr,5rr,6ll);
+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_lattice_bottom_short:
+bskchar "Short lattice bottom";
+beginchar(chars.math_lattice_bottom_short,14u#,x_height#,0); uni "0x2AE0";
+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_lattice_bottom_short_underbar:
+bskchar "Short lattice bottom with underbar";
+beginchar(chars.math_lattice_bottom_short_underbar,14u#,.8asc_height#+rule_thickness#,0); uni "0x2AE8";
+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);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1r=bot y2r=-d+rule_thickness+(.8asc_height-x_height); y3=y1l; top y4=h;
+bot y5l=bot y6l=-d;
+x3=x4=.5[x1,x2]; lft x1=lft x5=u; rt x2=rt x6=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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_perpendicular:
+bskchar "Perpendicular";
+beginchar(chars.math_perpendicular,13u#,asc_height#,0); uni "0x27C2";
+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_lattice_bottom_neg:
+bskchar "Negated lattice bottom";
+beginchar(chars.math_lattice_bottom_neg,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu; oblu.more:=3f_obl;
+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;
+bot y5=y1l+rule_thickness; top y6=h; x6=w-2u; .5[x5,x6]=x4;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+x6'l=x6'r=x4r; x5'l=x5'r=x4l;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---obl(6'r,3r,6r)---z6r..z6ll
+ ---obl(6'l,6l,4r).more---z4r..z4ll---obl(5'l,4l,5l)---z5l..z5rr
+ ---obl(5'r,5r,3l).more---obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,5',6,6'); labels(1rr,5rr,6ll);
+endchar;
+
+iff known chars.math_forces:
+bskchar "Forces";
+beginchar(chars.math_forces,12u#,asc_height#,0); uni "0x22A9";
+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);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=4u; rt x4=w-u; x3=x2r;
+lft x5l=lft x6l=u; y5=y1; y6=y2;
+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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_forces_through:
+bskchar "Forces with bar through";
+beginchar(chars.math_forces_through,12u#,asc_height#,0); uni "0x2AE6";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,90); pos4'(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y3'=y4=y4'=.5[y1,y2];
+lft x1l=lft x2l=4u; rt x4=w-u; x3=x2r; x3'=x1l; x4'=x5r;
+lft x5l=lft x6l=u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---z2r..z2ll
+ ---obl(3'r,2l,4'r)---obl(4'r,3'r,6r)---z6r..z6ll---z5l..z5rr
+ ---obl(4'l,5r,3'l)---obl(3'l,4'l,1l)---z1l..cycle;
+penlabels(1,2,3,3',4,5,6);
+endchar;
+
+iff known chars.math_forces_neg:
+bskchar "Negated forces";
+beginchar(chars.math_forces_neg,13u#,asc_height#,0); uni "0x22AE";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu; oblu.more:=3f_obl;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=5u; rt x4=w-u; x3=x2r;
+lft x5l=lft x6l=2u; y5=y1; y6=y2;
+bot y7=-d; top y8=h; lft x7=.5u; x8=w-2u;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+x1'l=x1'r=x1l; z1'l=whatever[z7l,z8l]; z1'r=whatever[z7r,z8r];
+y2'l=y2'r=y3r; z2'l=whatever[z7l,z8l]; z2'r=whatever[z7r,z8r];
+x3'l=x3'r=x5r; z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+x4'l=x4'r=x5l; z4'l=whatever[z7l,z8l]; z4'r=whatever[z7r,z8r];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(2'r,4r,8r).more---z8r..z8ll
+ ---z2'l+oblu.more*unitvector(z8-z7)..z3l+oblu.more*up---z2r..z2ll---obl(1'l,2l,3'l)
+ ---obl(3'l,2'l,6r).more---z6r..z6ll---obl(4'l,6l,7l)---z7l..z7rr---tobl(4'r,7rr,5l)
+ ---z5l..z5rr---obl(3'r,5r,1'r)---obl(1'r,3'r,1l)---z1l..cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6,7,8);
+endchar;
+
+iff known chars.math_forces_reversed:
+bskchar "Reversed forces";
+beginchar(chars.math_forces_reversed,12u#,asc_height#,0); uni "0x2AE3";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+rt x1l=rt x2l=w-4u; lft x4=u; x3=x2r;
+rt x5l=rt x6l=w-u; y5=y1; y6=y2;
+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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_forces_bar:
+bskchar "Forces with extra bar";
+beginchar(chars.math_forces_bar,15u#,asc_height#,0); uni "0x22AA";
+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);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=7u; rt x4=w-u; x3=x2r;
+lft x5l=lft x6l=u; y5=y7=y1; y6=y8=y2;
+x7=.5[x5,x1]; x8=.5[x6,x2];
+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;
+filldraw bskrule(5,6,hair,hair);
+filldraw bskrule(7,8,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_forces_bar_reversed:
+bskchar "Reversed forces with extra bar";
+beginchar(chars.math_forces_bar_reversed,15u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+pos7(rule_thickness,180); pos8(rule_thickness,180);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+rt x1l=rt x2l=w-7u; lft x4=u; x3=x2r;
+rt x5l=rt x6l=w-u; y5=y7=y1; y6=y8=y2;
+x7=.5[x5,x1]; x8=.5[x6,x2];
+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;
+filldraw bskrule(5,6,hair,hair);
+filldraw bskrule(7,8,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_forces_hbar:
+bskchar "Forces with extra horizontal bar";
+beginchar(chars.math_forces_hbar,13u#,asc_height#,0); uni "0x22AB";
+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);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y7=y8; .5[y3,y7]=.5[y1,y2]; y7-y3=.55x_height;
+lft x1l=lft x2l=5u; rt x4=rt x8=w-u; x3=x7=x2r;
+lft x5l=lft x6l=2u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(7,8,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,7l)---obl(7l,3r,8l)---z8ll
+ ..z8r---obl(7r,8r,2r)---z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_forces_hbar_neg:
+bskchar "Negated forces with extra horizontal bar";
+beginchar(chars.math_forces_hbar_neg,13u#,asc_height#,0); uni "0x22AF";
+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);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y7=y8; .5[y3,y7]=.5[y1,y2]; y7-y3=.55x_height;
+lft x1l=lft x2l=5u; rt x4=rt x8=w-u; x3=x7=x2r;
+lft x5l=lft x6l=2u; y5=y1; y6=y2;
+bot y9=-d; top y10=h; lft x9=.5u; x10=w-2u;
+pos9(rule_thickness,angle(z9-z10)+90); pos10(rule_thickness,angle(z9-z10)+90);
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+bskpoints(9,10,rule_thickness,rule_thickness);
+x1'l=x1'r=x1r; z1'l=whatever[z9l,z10l]; z1'r=whatever[z9r,z10r];
+y2'l=y2'r=y7l; z2'l=whatever[z9l,z10l]; z2'r=whatever[z9r,z10r];
+y3'l=y3'r=y7r; z3'l=whatever[z9l,z10l]; z3'r=whatever[z9r,z10r];
+x4'l=x4'r=x1l; z4'l=whatever[z9l,z10l]; z4'r=whatever[z9r,z10r];
+x5'l=x5'r=x5r; z5'l=whatever[z9l,z10l]; z5'r=whatever[z9r,z10r];
+x6'l=x6'r=x5l; z6'l=whatever[z9l,z10l]; z6'r=whatever[z9r,z10r];
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---z3r+oblu*right..z1'r+oblu*unitvector(z10-z9)
+ ---obl(2'r,1'r,8l)---z8ll..z8r---obl(3'r,8r,10r)---z10r..z10ll
+ ---ifobl(3'l,7r,10l,2r,,)---z2r..z2ll---obl(4'l,2l,5'l)---obl(5'l,4'l,6r)
+ ---z6r..z6ll---obl(6'l,6l,9l)---z9l..z9rr---tobl(6'r,9rr,5l)---z5l..z5rr
+ ---obl(5'r,5r,4'r)---obl(4'r,5'r,1l)---z1l..cycle;
+oblu:=1.75f_obl;
+infill ifobl(7l,1'l,3'l,3'l,,)---obl(3'l,1'l,7l)---cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6,6',7,8,9,10);
+endchar;
+
+iff known chars.math_forces_hbar_reversed:
+bskchar "Reversed forces with extra horizontal bar";
+beginchar(chars.math_forces_hbar_reversed,13u#,asc_height#,0); uni "0x2AE5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y7=y8; .5[y3,y7]=.5[y1,y2]; y7-y3=.55x_height;
+rt x1l=rt x2l=w-5u; lft x4=lft x8=u; x3=x7=x2r;
+rt x5l=rt x6l=w-2u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(7,8,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,7l)---obl(7l,3r,8l)---z8ll
+ ..z8r---obl(7r,8r,2r)---z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_models:
+bskchar "Models";
+beginchar(chars.math_models,8u#,asc_height#,0); uni "0x22A7";
+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);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=u; rt x4=rt x6=w-u; x3=x5=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_models_bar:
+bskchar "Models with hbar";
+beginchar(chars.math_models_bar,8u#,asc_height#,0); uni "0x2AE2";
+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);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; y7=y8; .5[y7,y3]=y5=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=u; rt x4=rt x6=rt x8=w-u; x3=x5=x7=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0); bskpoints(7,8,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,7l)
+ ---obl(7l,5r,8l)---z8ll..z8r---obl(7r,8r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_satisfies:
+bskchar "Satisfies";
+beginchar(chars.math_satisfies,12u#,asc_height#,0); uni "0x22A8";
+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);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=u; rt x4=rt x6=w-u; x3=x5=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_satisfies_neg:
+bskchar "Negated satisfies";
+beginchar(chars.math_satisfies_neg,13u#,asc_height#,0); uni "0x22AD";
+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);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=2u; rt x4=rt x6=w-u; x3=x5=x2r;
+bot y7=-d; top y8=h; lft x7=.5u; x8=w-2u;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+bskpoints(7,8,rule_thickness,rule_thickness);
+x1'l=x1'r=x1r; z1'l=whatever[z7l,z8l]; z1'r=whatever[z7r,z8r];
+y2'l=y2'r=y3l; z2'l=whatever[z7l,z8l]; z2'r=whatever[z7r,z8r];
+y3'l=y3'r=y3r; z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+y4'l=y4'r=y5l; z4'l=whatever[z7l,z8l]; z4'r=whatever[z7r,z8r];
+y5'l=y5'r=y5r; z5'l=whatever[z7l,z8l]; z5'r=whatever[z7r,z8r];
+x6'l=x6'r=x1l; z6'l=whatever[z7l,z8l]; z6'r=whatever[z7r,z8r];
+filldraw z1rr---obl(1'r,1r,2'r)---obl(2'r,1'r,4l)---z4ll..z4r---obl(3'r,4r,4'r)
+ ---obl(4'r,3'r,6l)---z6ll..z6r---obl(5'r,6r,8r)---z8r..z8ll---obl(5'l,8l,5r)
+ ---obl(5r,5'l,2r)---z2r..z2ll---obl(6'l,2l,7l)---z7l..z7rr---tobl(6'r,7rr,1l)
+ ---z1l..cycle;
+infill obl(5l,4'l,3r)---z3r+oblu*up..z3'l+oblu*unitvector(z8-z7)---obl(4'l,3'l,5l)---cycle;
+penlabels(1,1',2,2',3,3',4,4',5,5',6,7,7',8);
+endchar;
+
+iff known chars.math_satisfies_reversed:
+bskchar "Reversed satisfies";
+beginchar(chars.math_satisfies_reversed,12u#,asc_height#,0); uni "0x2AE4";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+rt x1l=rt x2l=w-u; lft x4=lft x6=u; x3=x5=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+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/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_right:
+bskchar "Triangle pointing right";
+beginchar(chars.math_triangle_right,x_height#+2u#,v_center(x_height#)); uni "non"; %22B3?
+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=-d;
+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 "non"; %22B2?
+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=-d;
+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=-d;
+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=-d;
+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_right_isosceles:
+bskchar "Isosceles triangle pointing right";
+beginchar(chars.math_triangle_right_isosceles,13u#,v_center(1.2x_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=-d;
+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_right_isosceles_neg:
+bskchar "Negated isosceles triangle pointing right";
+beginchar(chars.math_triangle_right_isosceles_neg,13u#,v_center(1.2x_height#)); uni "0x22EB";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'l,2,4l).hi---z4l..z4rr---obl(4'r,4r,3)
+ ---obl(3,2,1)---obl(5'r,3,5r)--z5r..z5ll---obl(5'l,5l,1).more---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''l,2',5''l)---obl(5''l,4''l,1')---cycle;
+infill obl(4''r,5''r,3')---obl(3',2',1')---obl(5''r,3',4''r)---cycle;
+penlabels(4,4',4'',5,5',5''); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_right_isosceles_line:
+bskchar "Isosceles triangle pointing right with line";
+beginchar(chars.math_triangle_right_isosceles_line,15u#,v_center(1.2x_height#)); uni "0x29D0";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+lft x1=3u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+lft x4l=lft x5l=u; bot y5=y2; top y4=y1;
+filldraw bskrule(4,5,hair,hair);
+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;
+penlabels(4,5); labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_left_isosceles:
+bskchar "Isosceles triangle pointing left";
+beginchar(chars.math_triangle_left_isosceles,13u#,v_center(1.2x_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=-d;
+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_isosceles_neg:
+bskchar "Negated isosceles triangle pointing left";
+beginchar(chars.math_triangle_left_isosceles_neg,13u#,v_center(1.2x_height#)); uni "0x22EA";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'r,2,4r)---z4rr..z4l---obl(4'l,4l,3)
+ ---obl(3,2,1)---obl(5'l,3,5l)---z5ll..z5r---obl(5'r,5r,1).hi---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''r,2',5''r)---obl(5''r,4''r,1')---cycle;
+infill obl(4''l,5''l,3')---obl(3',2',1')---obl(5''l,3',4''l)---cycle;
+penlabels(4,4',4'',5,5',5''); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_line:
+bskchar "Isosceles triangle pointing left with line";
+beginchar(chars.math_triangle_left_isosceles_line,15u#,v_center(1.2x_height#)); uni "0x29CF";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x1=w-3u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+rt x4r=rt x5r=w-u; bot y5=y2; top y4=y1;
+filldraw bskrule(4,5,hair,hair);
+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;
+penlabels(4,5); labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_right_isosceles_bar:
+bskchar "Isosceles triangle pointing right with bar";
+beginchar(chars.math_triangle_right_isosceles_bar,13u#,v_center(1.2x_height#+3u#)); uni "0x22B5";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y4l=bot y5l=-d; lft x4=u; x5=w-x4;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangle_right_isosceles_bar_neg:
+bskchar "Negated isosceles triangle pointing right with bar";
+beginchar(chars.math_triangle_right_isosceles_bar_neg,13u#,v_center(1.2x_height#+3u#)); uni "0x22ED";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y6l=bot y7l=-d; lft x6=u; x7=w-x6;
+bskpoints(4,5,rule_thickness,rule_thickness);
+bskpoints(6,7,hair,hair);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+y6'l=y6'r=y6r; z6'l=whatever[z4l,z5l]; z6'r=whatever[z4r,z5r];
+y7'l=y7'r=y6l; z7'l=whatever[z4l,z5l]; z7'r=whatever[z4r,z5r];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'l,2,4l).hi---obl(6'l,4'l,6r)---z6rr..z6l
+ ---obl(7'l,6l,4l)---z4l..z4rr---obl(7'r,4r,7l)---z7ll..z7r---obl(6'r,7r,4'r)
+ ---obl(4'r,4r,3)---obl(3,2,1)---obl(5'r,3,5r)--z5r..z5ll---obl(5'l,5l,1).more
+ ---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''l,2',5''l)---obl(5''l,4''l,1')---cycle;
+infill obl(4''r,5''r,3')---obl(3',2',1')---obl(5''r,3',4''r)---cycle;
+penlabels(4,4',4'',5,5',5'',6,6',7,7'); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_bar:
+bskchar "Isosceles triangle pointing left with bar";
+beginchar(chars.math_triangle_left_isosceles_bar,13u#,v_center(1.2x_height#+3u#)); uni "0x22B4";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y4l=bot y5l=-d; lft x4=u; x5=w-x4;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_bar_neg:
+bskchar "Negated isosceles triangle pointing left with bar";
+beginchar(chars.math_triangle_left_isosceles_bar_neg,13u#,v_center(1.2x_height#+3u#)); uni "0x22EC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y6l=bot y7l=-d; lft x6=u; x7=w-x6;
+bskpoints(4,5,rule_thickness,rule_thickness);
+bskpoints(6,7,hair,hair);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+y6'l=y6'r=y6r; z6'l=whatever[z4l,z5l]; z6'r=whatever[z4r,z5r];
+y7'l=y7'r=y6l; z7'l=whatever[z4l,z5l]; z7'r=whatever[z4r,z5r];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'r,2,4r)---obl(6'r,4'r,7r).more---z7r..z7ll
+ ---obl(7'r,7l,4r)---z4rr..z4l---obl(7'l,4l,6l).more---z6l..z6rr
+ ---obl(6'l,6r,4'l)---obl(4'l,4l,3)---obl(3,2,1)---obl(5'l,3,5l)---z5ll
+ ..z5r---obl(5'r,5r,1).hi---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''r,2',5''r)---obl(5''r,4''r,1')---cycle;
+infill obl(4''l,5''l,3')---obl(3',2',1')---obl(5''l,3',4''l)---cycle;
+penlabels(4,4',4'',5,5',5'',6,6',7,7'); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_right_isosceles_bar_sl:
+bskchar "Isosceles triangle pointing right with slanted bar";
+beginchar(chars.math_triangle_right_isosceles_bar_sl,13u#,v_center(1.2x_height#+3u#)); 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; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y4=-d+.5rule_thickness; y2-y4=y3-y5; lft x4=u; x5=w-x4;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_bar_sl:
+bskchar "Isosceles triangle pointing left with slanted bar";
+beginchar(chars.math_triangle_left_isosceles_bar_sl,13u#,v_center(1.2x_height#+3u#)); 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; top y1-bot y2=1.2x_height;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y5=-d+.5rule_thickness; y3-y4=y2-y5; lft x4=u; x5=w-x4;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangles_isosceles_right_left:
+bskchar "Isosceles triangle pointing right above pointing left";
+beginchar(chars.math_triangles_isosceles_right_left,13u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x29CE";
+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; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+rt x4=w-u; x5=x4; y6=.5[y4,y5]; lft x6=u-hair;
+top y4-bot y5=1.2x_height; bot y5=-d;
+x4'=x5'=x4-lw;
+y4'-y4=y5-y5'=lw/cosd(angle(z6-z4));
+z6'=z5'+whatever*(z6-z5)=z4'+whatever*(z6-z4);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw obl(4,6,5)---obl(5,4,6)---obl(6,5,4)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+infill obl(4',6',5')---obl(5',4',6')---obl(6',5',4')---cycle;
+labels(1,1',2,2',3,3',4,4',5,5',6,6');
+endchar;
+
+iff known chars.math_triangles_isosceles_left_right:
+bskchar "Isosceles triangle pointing left above pointing right";
+beginchar(chars.math_triangles_isosceles_left_right,13u#,v_center(1.8x_height#+2rule_thickness#)); 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;
+bot y2=-d; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+rt x4=w-u; x5=x4; y6=.5[y4,y5]; lft x6=u-hair;
+top y4-bot y5=1.2x_height; top y4=h;
+x4'=x5'=x4-lw;
+y4'-y4=y5-y5'=lw/cosd(angle(z6-z4));
+z6'=z5'+whatever*(z6-z5)=z4'+whatever*(z6-z4);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw obl(4,6,5)---obl(5,4,6)---obl(6,5,4)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+infill obl(4',6',5')---obl(5',4',6')---obl(6',5',4')---cycle;
+labels(1,1',2,2',3,3',4,4',5,5',6,6');
+endchar;
+
+iff known chars.math_triangle_right_isosceles_black:
+bskchar "Black isosceles triangle pointing right";
+beginchar(chars.math_triangle_right_isosceles_black,13u#,v_center(1.2x_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=-d;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_black:
+bskchar "Black isosceles triangle pointing left";
+beginchar(chars.math_triangle_left_isosceles_black,13u#,v_center(1.2x_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=-d;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_slice_left:
+bskchar "Left slice";
+beginchar(chars.math_slice_left,13u#,v_center(1.2x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos0(rule_thickness,0);
+rt x1=w-3u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair; rt x0r=w-u;
+top y1=h; bot y2=-d; y0=.5[y1,y2];
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw z1+oblu*unitvector(z3-z1)--z1..z0r..z2--z2+oblu*unitvector(z3-z2)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill z1'+oblu*unitvector(z3'-z1')--z1'..z0l..z2'--z2'+oblu*unitvector(z3'-z2')---obl(3',2',1')---cycle;
+penlabels(0); labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_slice_right:
+bskchar "Right slice";
+beginchar(chars.math_slice_right,13u#,v_center(1.2x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos0(rule_thickness,0);
+lft x1=3u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair; lft x0l=u;
+top y1=h; bot y2=-d; y0=.5[y1,y2];
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw z1+oblu*unitvector(z3-z1)--z1..z0l..z2--z2+oblu*unitvector(z3-z2)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill z1'+oblu*unitvector(z3'-z1')--z1'..z0r..z2'--z2'+oblu*unitvector(z3'-z2')---obl(3',2',1')---cycle;
+penlabels(0); 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/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_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/cosd(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_triangle_down_isosceles:
+bskchar "Isosceles triangle pointing down";
+beginchar(chars.math_triangle_down_isosceles,.8asc_height#+2u#,.8asc_height#,0); 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=0;
+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_up_isosceles:
+bskchar "Isosceles triangle pointing up";
+beginchar(chars.math_triangle_up_isosceles,.8asc_height#+2u#,.8asc_height#,0); 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=0; top y3=h;
+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_down_isosceles_black:
+bskchar "Black isosceles triangle pointing down";
+beginchar(chars.math_triangle_down_isosceles_black,.8asc_height#+2u#,.8asc_height#,0); 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=0;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_triangle_up_isosceles_black:
+bskchar "Black isosceles triangle pointing up";
+beginchar(chars.math_triangle_up_isosceles_black,.8asc_height#+2u#,.8asc_height#,0); 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=0; top y3=h;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_triangle_right_angle:
+bskchar "Triangle with right angle";
+beginchar(chars.math_triangle_right_angle,12u#,.8asc_height#,0); uni "0x22BF";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=x2;
+bot y1=bot y2=0; top y3=h;
+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_square_small_black_round:
+bskchar "Small black square (rounded)";
+beginchar(chars.math_square_small_black_round,5u#,3u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x2=u; x3=x4=w-x1; top y1=top y4=h; bot y2=bot y3=0;
+filldraw obl(1,4,2)---obl(2,1,3)---obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_square_small_black:
+bskchar "Small black square";
+beginchar(chars.math_square_small_black,5u#,3u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x2=u; x3=x4=w-x1; top y1=top y4=h; bot y2=bot y3=0;
+filldraw z1--z2--z3--z4--cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_sum_uni:
+bskchar "Summation sign (for Unicode)";
+beginchar(chars.math_sum_uni,14u#,v_center(10/6dh#)); uni "0x2211";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu.more:=2oblu;
+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
+ ---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more
+ ---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_modulo_uni:
+bskchar "Summation modulo two sign (for Unicode)";
+beginchar(chars.math_sum_modulo_uni,14u#,v_center(10/6dh#)); uni "0x2A0A";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu.more:=2oblu;
+numeric alpha, top_stem, top_arm, bot_arm;
+top_arm=Vround rule_thickness;
+bot_arm=Vround .5[cap_stem,rule_thickness];
+y2=y13; y8-y4=x2-x6=6u; .5[x2,x6]=x13l;
+pos9(cap_stem,0); pos10(cap_stem,0);
+bot y9=-d; top y10=h;
+lft x9l=lft x10l-o=.5u;
+bot y11r=-d; top y12r=h; rt x11l=w-u; x12r=w-2u;
+pos11(beak,-90); z11d=(x11r-2ser_height,y9+bot_arm);
+pos12(.65beak,90); z12d=(x12r-ser_height,y10r.b);
+z11l.o=z11l+o*left; z12l.o=z12l+o*left;
+x13r=.5w-o; y13=.5[h,-d]+cap_hair;
+alpha=diag_ratio(10,cap_stem,y10-y13,x13r-x10r);
+pos13(alpha*cap_stem,0);
+alpha:=diag_ratio(10,cap_hair,y13-y9,x13r-x9r);
+pos14(alpha*cap_hair,0); z13r=z14r;
+z9r-z9r.b=bot_arm*down;
+y9'=y9+2bot_arm; z9'=z14l+whatever*(z9r.b-z14r);
+z13'=whatever[z10l+top_arm*down,z13l]=whatever[z14l,z9'];
+y10r.b=y10-bot_arm; z10r.b=z13r+whatever*(z10l-z13');
+circle_points(rule_thickness);
+p0=z11l..{dir-110}z11l.o..z11d---obl(9r.b,11d,13r).more---obl(13r,9r.b,10r.b).more
+ ---obl(10r.b,13r,12d).more---z12d..z12l.o{dir-70}..z12l---z12r+hair*down..z12r+hair*left
+ ---obl(10l,12r,13')---obl(13',10l,9l)---obl(9l,13',11r)---obl(11r,9r,11l)---cycle;
+p1=subpath(2,10) of reverse(draw_circle.l);
+p2=subpath(2,10) of reverse(draw_circle.r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-3)=p0 intersectiontimes subpath(3,8) of p1;
+(tim4-10,tim5-3)=subpath(10,length p0) of p0 intersectiontimes subpath(3,length p1) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,3) of p1;
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10,tim11-3)=p0 intersectiontimes subpath(3,8) of p2;
+(tim12-10,tim13-3)=subpath(10,length p0) of p0 intersectiontimes subpath(3,8) of p2;
+(tim14-10,tim15)=subpath(10,length p0) of p0 intersectiontimes subpath(0,3) 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),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),length p1) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..reverse subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..reverse (subpath(rundy(p2,tim13),length p2) of p2
+ ..subpath(0,rundy(p2,tim15).zpet) of p2)
+ ..cycle;
+penlabels(9,10,11,12,13,14); labels(9',9r.b,12d,12l.o,13',10r.b);
+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[]; oblu.more:=2oblu;
+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
+ ---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more
+ ---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[]; olbu.more:=2oblu;
+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
+ ---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more
+ ---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_uni:
+bskchar "Product sign (for Unicode)";
+beginchar(chars.math_prod_text,14u#,v_center(10/6dh#)); uni "0x220F";
+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_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_uni:
+bskchar "Coproduct sign (for Unicode)";
+beginchar(chars.math_coprod,14u#,v_center(10/6dh#)); uni "0x2210";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+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+1.2stem); 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'); %math_fit
+endchar;
+
+iff known chars.math_coprod:
+bskchar "Coproduct sign";
+beginchar(chars.math_coprod,12u#,cap_height#,0); uni "0x2A3F";
+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'); %math_fit
+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 "non";
+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_uni:
+bskchar "Integral sign (for Unicode)";
+beginchar(chars.math_int_uni,10u#,v_center(11/6dh#)); 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_overbar:
+bskchar "Integral sign with overbar";
+beginchar(chars.math_int_overbar,10u#,11/12dh#+2.5rule_thickness#+math_axis#,11/12dh#-math_axis#); uni "0x2A1B";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y2=h-like_curve-2.5rule_thickness;
+x3-lft x2l=2u;
+top y3l=h+o-2.5rule_thickness; .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;
+y8=y9=y3l+2rule_thickness; lft x8=u; rt x9=w-u;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw bskrule(8,9,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_underbar:
+bskchar "Integral sign with underbar";
+beginchar(chars.math_int_underbar,10u#,11/12dh#+math_axis#,11/12dh#+2.5rule_thickness#-math_axis#); uni "0x2A1C";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+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+2.5rule_thickness; bot y6l=-d-o+2.5rule_thickness; 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;
+y8=y9=y6r-2rule_thickness; lft x8=u; rt x9=w-u;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw bskrule(8,9,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_double_uni:
+bskchar "Double integral sign (for Unicode)";
+beginchar(chars.math_int_double_uni,15.5u#,v_center(11/6dh#)); uni "0x222C";
+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 5u; 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=9u;
+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;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (5.5u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_triple_uni:
+bskchar "Triple integral sign (for Unicode)";
+beginchar(chars.math_int_triple_uni,21u#,v_center(11/6dh#)); uni "non"; %uni "0x222D";
+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 5u; 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=9u;
+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;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (5.5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (11u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_triple_uni_var:
+bskchar "Triple integral sign (for Unicode, variant)";
+beginchar(chars.math_int_triple_uni,19u#,v_center(11/6dh#)); uni "0x222D";
+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 5u; 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=9u;
+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;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .95 shifted z1 shifted (5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9 shifted z1 shifted (9.5u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_quadruple_uni:
+bskchar "Quadruple integral sign (for Unicode)";
+beginchar(chars.math_int_quadruple_uni,26.5u#,v_center(11/6dh#)); uni "non"; %uni "0x2A0C";
+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 5u; 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=9u;
+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;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (5.5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (11u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (16.5u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_quadruple_uni_var:
+bskchar "Quadruple integral sign (for Unicode, variant)";
+beginchar(chars.math_int_quadruple_uni_var,23.25u#,v_center(11/6dh#)); uni "0x2A0C";
+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 5u; 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=9u;
+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;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9666 shifted z1 shifted (5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9333 shifted z1 shifted (9.5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9 shifted z1 shifted (13.75u,0);
+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#+curve#;
+adjust_fit(0,-2.5u#);
+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 8u#+curve#;
+adjust_fit(0,-7.5u#);
+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_int_up_text:
+bskchar "\textstyle integral upright sign";
+beginchar(chars.math_int_up_text,8.5u#,0,11/6dh#); uni "non";
+italcorr u#+curve#;
+adjust_fit(0,-2u#);
+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; x2=x1;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+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_up_disp:
+bskchar "\displaystyle integral upright sign";
+beginchar(chars.math_int_up_disp,17u#,0,4dh#); uni "non";
+italcorr 2u#+curve#;
+adjust_fit(0,-4.5u#);
+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; x2=x1;
+top y3l=h+o; .45[x2r,x4]=x3; y4''=y3r-1.5like_hair;
+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_int_bump:
+bskchar "Integral sign with bump";
+beginchar(chars.math_int_bump,10u#,v_center(11/6dh#)); uni "non";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; 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),length p0) 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_uni:
+bskchar "Contour integral sign (for Unicode)";
+beginchar(chars.math_oint_uni,10u#,v_center(11/6dh#)); uni "0x222E";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; 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_text:
+bskchar "\textstyle contour integral sign";
+beginchar(chars.math_oint_text,8.5u#,0,11/6dh#); uni "non";
+italcorr 3u#+curve#;
+adjust_fit(0,-2.5u#);
+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#+curve#;
+adjust_fit(0,-5.5u#);
+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_int_rect_pole_uni:
+bskchar "Line integral with rectangular path around pole sign (for Unicode)";
+beginchar(chars.math_int_rect_pole_uni,10u#,v_center(11/6dh#)); uni "0x2A12";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(.5[stem,bourstem],0); x5=good.x .5w; y5=.5[h,-d];
+pos6(.5[stem,hair],0); pos7(hair,-90); pos8(fend,180);
+top y6=h-like_curve; x7-lft x6l=2u;
+top y7l=h+o; .5[x6r,x8]=x7; y8''=y7r-like_hair;
+rt x8l=w-u; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+y6r:=y6l+hair; z7'r=z7r+.5hair*right;
+.5[x9,x6]=.5[x7,x10]=.5[x8,x11]=x5;
+pos9(stem,180); pos10(hair,-90); pos11(fend,0);
+bot y9=-d+like_curve; bot y10l=-d-o; y11''=y10l+like_hair;
+y9r:=y9r-hair;
+z11'=z11+.2fend*up+o*right; z11''=z11+.5(fend-currentbreadth)*dir(-135);
+y5r:=y5r-o; y5l:=y5l+o;
+rt x1=rt x2=w-u; x3=x4; y1=y4; y2=y3; .5[z1,z3]=z5; y1-y2=x1-x3;
+x1l:=x2r:=x1-(rule_thickness-currentbreadth);
+x3r:=x4l:=x3+(rule_thickness-currentbreadth);
+p0=z9r..z10l{left}..z11r..z11'..z11l{down}..z11''..z10r..z9l...z5r...z6r...{right}z7r
+ ..z8r..z8'..z8l{up}..z8''..z7l..z6l...z5l...cycle;
+p1=obl(1r,2l,4r)---obl(4r,1r,3l)---obl(3l,4r,2l)---obl(2l,3l,1r)---cycle;
+p2=obl(4l,3r,1l)---obl(1l,4l,2r)---obl(2r,1l,3r)---obl(3r,2r,4l)--cycle;
+(tim0,tim1-1)=p0 intersectiontimes subpath(1,length p1) of 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 p2;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+dot(5);
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(8',8'',11',11'');
+endchar;
+
+iff known chars.math_int_semicirc_pole_uni:
+bskchar "Line integral with semicircular path around pole sign (for Unicode)";
+beginchar(chars.math_int_semicirc_pole_uni,10u#,v_center(11/6dh#)); uni "0x2A13";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; 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);
+p2=subpath(-2,7) of (draw_circle.r);
+(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 p2;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p2;
+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(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+dot(9);
+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_int_not_pole_uni:
+bskchar "Line integral without pole sign (for Unicode)";
+beginchar(chars.math_int_not_pole_uni,11u#,v_center(11/6dh#)); uni "0x2A14";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5(w-u); y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-2u; 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;
+z16=(w-4u,y9);
+lft x6=2u+(x16-x9); y2=y9; y8-y4=x2-x6; .5[x2,x6]=x16;
+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=subpath(-2,6) of reverse (draw_circle.l);
+p2=subpath(-2,6) of (draw_circle.r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,10) of p0) intersectiontimes p1;
+(tim4-10,tim5)=(subpath(10,length p0) of p0) intersectiontimes p2;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+dot(16);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'',16);
+endchar;
+
+iff known chars.math_oint_point_uni:
+bskchar "Contour integral around point sign (for Unicode)";
+beginchar(chars.math_oint_point_uni,10u#,v_center(11/6dh#)); uni "0x2A15";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; 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;
+infill draw_circle.r;
+dot(9);
+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_int_quat_uni:
+bskchar "Quaternion integral sign (for Unicode)";
+beginchar(chars.math_int_quat_uni,10u#,v_center(11/6dh#)); uni "0x2A16";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(.5[stem,bourstem],0); x5=good.x .5w; y5=.5[h,-d];
+pos6(.5[stem,hair],0); pos7(hair,-90); pos8(fend,180);
+top y6=h-like_curve; x7-lft x6l=2u;
+top y7l=h+o; .5[x6r,x8]=x7; y8''=y7r-like_hair;
+rt x8l=w-u; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+y6r:=y6l+hair; z7'r=z7r+.5hair*right;
+.5[x9,x6]=.5[x7,x10]=.5[x8,x11]=x5;
+pos9(stem,180); pos10(hair,-90); pos11(fend,0);
+bot y9=-d+like_curve; bot y10l=-d-o; y11''=y10l+like_hair;
+y9r:=y9r-hair;
+z11'=z11+.2fend*up+o*right; z11''=z11+.5(fend-currentbreadth)*dir(-135);
+y5r:=y5r-o; y5l:=y5l+o;
+rt x1=rt x2=w-u; x3=x4; y1=y4; y2=y3; .5[z1,z3]=z5; y1-y2=x1-x3;
+x1l:=x2r:=x1-(rule_thickness-currentbreadth);
+x3r:=x4l:=x3+(rule_thickness-currentbreadth);
+p0=z9r..z10l{left}..z11r..z11'..z11l{down}..z11''..z10r..z9l...z5r...z6r...{right}z7r
+ ..z8r..z8'..z8l{up}..z8''..z7l..z6l...z5l...cycle;
+p1=obl(1r,2l,4r)---obl(4r,1r,3l)---obl(3l,4r,2l)---obl(2l,3l,1r)---cycle;
+p2=obl(4l,1l,3r)---obl(3r,4l,2r)---obl(2r,3r,1l)---obl(1l,2r,4l)---cycle;
+(tim0,tim1-1)=p0 intersectiontimes subpath(1,length p1) of 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),length p1) of p1
+ ..subpath(0,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;
+(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),length p2) of p2
+ ..subpath(0,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); labels(8',8'',11',11'');
+endchar;
+
+iff known chars.math_int_union:
+bskchar "Integral sign with union";
+beginchar(chars.math_int_union,10u#,v_center(11/6dh#)); uni "0x2A1A";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+y1=y5; .5[y1,y3]=y9; y1-y3=x_height;
+x1=x2=2u; x4=x5; x3=.5[x1,x4]=x9;
+y2=y4=y3+(x3-x2);
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+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=z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-4)=subpath(0,10) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim4-10,tim5-4)=subpath(10,length p0) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,4) 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),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) 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_int_intersection:
+bskchar "Integral sign with intersection";
+beginchar(chars.math_int_intersection,10u#,v_center(11/6dh#)); uni "0x2A19";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+y1=y5; .5[y1,y3]=y9; y3-y1=x_height;
+x1=x2=2u; x4=x5; x3=.5[x1,x4]=x9;
+y2=y4=y3-(x3-x2);
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+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=z1rr---z2r...z3r...z4r---z5rr..z5l---z4l...z3l...z2l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-4)=subpath(0,10) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim4-10,tim5-4)=subpath(10,length p0) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,4) 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),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) 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_int_arrow_left_hook:
+bskchar "Integral sign with leftwards arrow with hook";
+beginchar(chars.math_int_arrow_left_hook,15u#,v_center(11/6dh#)); uni "0x2A17";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,270);
+lft x0=u; lft x1=w-4u; y0=y1l=math_axis;
+x2l=w-u; x3=x1+hair; y2=.5[y1,y3]; y3l=math_axis-4u; x3r:=x3r+hair;
+pos9(.5[stem,bourstem],0); x9=good.x .5w+u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-3u; 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;
+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 sipka(0,1))---z1l..{down}z2r..{left}z3l..{right}z3r..{up}z2l..z1r---z0a.l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-10)=subpath(0,10) of p0 intersectiontimes subpath(10,infinity) of p1;
+(tim4-10,tim5-10)=subpath(10,length p0) of p0 intersectiontimes subpath(10,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,9) 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),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+penlabels(2,3,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_times:
+bskchar "Integral sign with times sign";
+beginchar(chars.math_int_times,10u#,v_center(11/6dh#)); uni "0x2A18";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos0(rule_thickness,135); pos1(rule_thickness,135);
+pos2(rule_thickness,45); pos3(rule_thickness,45);
+x0r=x2l=1.5u; x1l=x3r; .5[x0r,x1l]=x9=good.x .5w;
+y0l=y3l; y1r=y2r; .5[y1r,y0l]=y9=.5[h,-d]; y2r-y0l=x1l-x2l;
+z4=whatever[z3l,z2l]=whatever[z0l,z1l];
+z5=whatever[z3r,z2r]=whatever[z0l,z1l];
+z6=whatever[z3r,z2r]=whatever[z0r,z1r];
+z7=whatever[z3l,z2l]=whatever[z0r,z1r];
+pos9(.5[stem,bourstem],0);
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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;
+bskpoints(0,1,hair,hair); bskpoints(3,2,.5hair,.5hair);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+{{ save oblu; oblu:=3f_obl;
+ p1=z0l---obl(4,0l,3l)---z3l..z3rr---obl(5,3r,1l)---z1ll..z1r---obl(6,1r,2r)---z2r
+ ..z2ll---obl(7,2l,0r)---z0rr..z0l;
+}};
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-5)=subpath(0,10) of p0 intersectiontimes subpath(5,infinity) of p1;
+(tim4-10,tim5-5)=subpath(10,length p0) of p0 intersectiontimes subpath(5,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,4) 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),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+penlabels(0,1,2,3,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_clock_uni:
+bskchar "Clockwise contour integral sign (for Unicode)";
+beginchar(chars.math_oint_clock_uni,10u#,v_center(11/6dh#)); uni "0x2232";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; 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);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ .5[z17r,z16]=z2; x17r=x16; y17-y16=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(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;
+(tim16,tim17-2)=p1 intersectiontimes subpath(2,4) of p4;
+tim18=xpart(p1 intersectiontimes ((x9,ypart(point infinity of p4))--(w,ypart(point infinity of p4))));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim16).zpet) of p1
+ ..subpath(rundy(p4,tim17),rundy(p4,(length p4,2/3(x16e-x17r))).zpet) of p4
+ ..subpath(rundy(p1,tim18),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;
+(tim19,tim20)=p2 intersectiontimes subpath(0,4) of p4;
+tim21=xpart(p2 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+infill subpath(rundy(p2,tim9),rundy(p2,tim19).zpet) of p2
+ ..(reverse subpath(rundy(p4,(0,2/3(x16e-x17r))),rundy(p4,tim20).zpet) of p4)
+ ..subpath(rundy(p2,tim21),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_anticlock_uni:
+bskchar "Anticlockwise contour integral sign (for Unicode)";
+beginchar(chars.math_oint_anticlock_uni,10u#,v_center(11/6dh#)); uni "0x2233";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; 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);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ 1/3[y17r,y16]=y2; x17r=x16=x2; y16-y17=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(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;
+(tim16,tim17)=p1 intersectiontimes subpath(0,4) of p4;
+tim18=xpart(p1 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim18).zpet) of p1
+ ..subpath(rundy(p4,(0,2/3(x17r-x16e))),rundy(p4,tim17).zpet) of p4
+ ..subpath(rundy(p1,tim18),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;
+(tim19,tim20-2)=p2 intersectiontimes subpath(2,4) of p4;
+tim21=xpart(p2 intersectiontimes ((x9,ypart(point infinity of p4))--(w,ypart(point infinity of p4))));
+infill subpath(rundy(p2,tim9),rundy(p2,tim21).zpet) of p2
+ ..(reverse subpath(rundy(p4,tim20),rundy(p4,length p4).zpet) of p4)
+ ..subpath(rundy(p2,tim19),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_double_uni:
+bskchar "Surface integral sign (for Unicode)";
+beginchar(chars.math_oint_double_uni,15.5u#,v_center(11/6dh#)); uni "0x222F";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=1/2(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+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,hair],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;
+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:=p0 shifted (5.5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=reverse(draw_circle.r);
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+(tim16,tim17)=p0 intersectiontimes subpath(0,2) of p3;
+(tim18,tim19-2)=p0 intersectiontimes subpath(2,4) of p3;
+(tim20-10,tim21-4)=subpath(10,length p1) of p1 intersectiontimes subpath(4,6) of p3;
+(tim22-10,tim23-6)=subpath(10,length p1) of p1 intersectiontimes subpath(6,8) of p3;
+(tim24-10,tim25)=subpath(10,length p0) of p0 intersectiontimes p3;
+(tim26-10,tim27-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,4) of p3;
+(tim28,tim29-4)=p1 intersectiontimes subpath(4,6) of p3;
+(tim30,tim31-6)=p1 intersectiontimes subpath(6,8) of p3;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+infill subpath(0,rundy(p3,tim17).zpet) of p3
+ ..(reverse subpath(rundy(p0,tim18),rundy(p0,tim16).zpet) of p0)
+ ..subpath(rundy(p3,tim19),rundy(p3,tim21).zpet) of p3
+ ..(reverse subpath(rundy(p1,tim22),rundy(p1,tim20).zpet) of p1)
+ ..subpath(rundy(p3,tim23),8) of p3..cycle;
+infill subpath(rundy(p0,tim24),rundy(p0,tim26).zpet) of p0
+ ..(reverse subpath(rundy(p3,tim25),rundy(p3,tim27).zpet) of p3)..cycle;
+infill subpath(rundy(p1,tim28),rundy(p1,tim30).zpet) of p1
+ ..(reverse subpath(rundy(p3,tim29),rundy(p3,tim31).zpet) of p3)..cycle;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_double_uni_alt:
+bskchar "Surface integral sign (for Unicode)---alternative";
+beginchar(chars.math_oint_double_uni_alt,15.5u#,v_center(11/6dh#)); uni "non";%"0x222F";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], fend; fend:=1.5stem; oblu:=2oblu;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=1/2(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+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,hair],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;
+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:=p0 shifted (5.5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=draw_circle.r;
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+infill p3;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_triple_uni:
+bskchar "Volume integral sign (for Unicode)";
+beginchar(chars.math_oint_triple_uni,21u#,v_center(11/6dh#)); uni "non";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=.35(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+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,hair],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;
+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:=p0 shifted (11u,0);
+p5:=p0 shifted (5.5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=reverse(draw_circle.r); p6:=subpath(-2,6) of p3;
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+(tim16,tim17)=p0 intersectiontimes subpath(0,2) of p3;
+(tim18,tim19-2)=p0 intersectiontimes subpath(2,4) of p3;
+(tim20-10,tim21-4)=subpath(10,length p1) of p1 intersectiontimes subpath(4,6) of p3;
+(tim22-10,tim23)=subpath(10,length p1) of p1 intersectiontimes subpath(0,4) of p6;
+(tim24-10,tim25)=subpath(10,length p0) of p0 intersectiontimes p3;
+(tim26-10,tim27-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,4) of p3;
+(tim28,tim29-4)=p1 intersectiontimes subpath(4,6) of p3;
+(tim30,tim31-6)=p1 intersectiontimes subpath(6,8) of p3;
+(tim32,tim33)=p5 intersectiontimes subpath(0,4) of p4;
+(tim34-10,tim35)=subpath(10,length p5) of p5 intersectiontimes subpath(0,4) of p4;
+(tim36-10,tim37-2)=subpath(10,length p5) of p5 intersectiontimes subpath(2,6) of p2;
+(tim38,tim39-2)=p5 intersectiontimes subpath(2,6) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim33).zpet) of p4
+ ..subpath(rundy(p5,tim32),rundy(p5,tim34).zpet) of p5
+ ..subpath(rundy(p4,tim35),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim37).zpet) of p2
+ ..subpath(rundy(p5,tim36),length p5) of p5
+ ..subpath(0,rundy(p5,tim38).zpet) of p5
+ ..subpath(rundy(p2,tim39),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+(tim40,tim41)=subpath(0,2) of p3 intersectiontimes p5;
+(tim42-2,tim43)=subpath(2,4) of p3 intersectiontimes p5;
+(tim44-2,tim45)=subpath(2,5) of p3 intersectiontimes subpath(0,10) of p5;
+(tim46,tim47)=subpath(0,4) of p6 intersectiontimes subpath(0,10) of p5;
+infill subpath(rundy(p3,tim40),rundy(p3,tim17).zpet) of p3
+ ..(reverse subpath(rundy(p0,tim18),rundy(p0,tim16).zpet) of p0)
+ ..subpath(rundy(p3,tim19),rundy(p3,tim42).zpet) of p3
+ ..(reverse subpath(rundy(p5,tim41),rundy(p5,tim43).zpet) of p5)..cycle;
+infill subpath(rundy(p3,tim44),rundy(p3,tim21).zpet) of p3
+ ..(reverse subpath(rundy(p1,tim22),rundy(p1,tim20).zpet) of p1)
+ ..subpath(rundy(p6,tim23),rundy(p6,tim46).zpet) of p6
+ ..(reverse subpath(rundy(p5,tim45),rundy(p5,tim47).zpet) of p5)
+ ..cycle;
+infill subpath(rundy(p0,tim24),rundy(p0,tim26).zpet) of p0
+ ..(reverse subpath(rundy(p3,tim25),rundy(p3,tim27).zpet) of p3)..cycle;
+infill subpath(rundy(p1,tim28),rundy(p1,tim30).zpet) of p1
+ ..(reverse subpath(rundy(p3,tim29),rundy(p3,tim31).zpet) of p3)..cycle;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_triple_uni_var:
+bskchar "Volume integral sign (for Unicode, variant)";
+beginchar(chars.math_oint_triple_uni_var,19u#,v_center(11/6dh#)); uni "0x2230";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=.35(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+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,hair],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;
+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:=p0 shifted -z1 scaled .9 shifted z1 shifted (9.5u,0);
+p5:=p0 shifted -z1 scaled .95 shifted z1 shifted (5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=reverse(draw_circle.r); p6:=subpath(-2,6) of p3;
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+(tim16,tim17)=p0 intersectiontimes subpath(0,4) of p6;
+(tim18,tim19-2)=p0 intersectiontimes subpath(2,4) of p3;
+(tim20-10,tim21-4)=subpath(10,length p1) of p1 intersectiontimes subpath(4,6) of p3;
+(tim22-10,tim23)=subpath(10,length p1) of p1 intersectiontimes subpath(0,4) of p6;
+(tim24-10,tim25)=subpath(10,length p0) of p0 intersectiontimes p3;
+(tim26-10,tim27-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,4) of p3;
+(tim28,tim29-4)=p1 intersectiontimes subpath(4,6) of p3;
+(tim30,tim31-6)=p1 intersectiontimes subpath(6,8) of p3;
+(tim32,tim33)=p5 intersectiontimes subpath(0,4) of p4;
+(tim34-10,tim35)=subpath(10,length p5) of p5 intersectiontimes subpath(0,4) of p4;
+(tim36-10,tim37-2)=subpath(10,length p5) of p5 intersectiontimes subpath(2,6) of p2;
+(tim38,tim39-2)=p5 intersectiontimes subpath(2,6) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim33).zpet) of p4
+ ..subpath(rundy(p5,tim32),rundy(p5,tim34).zpet) of p5
+ ..subpath(rundy(p4,tim35),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim37).zpet) of p2
+ ..subpath(rundy(p5,tim36),length p5) of p5
+ ..subpath(0,rundy(p5,tim38).zpet) of p5
+ ..subpath(rundy(p2,tim39),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+(tim40,tim41-10)=subpath(0,4) of p6 intersectiontimes subpath(10,length p5) of p5;
+(tim42-2,tim43-10)=subpath(2,5) of p3 intersectiontimes subpath(10,length p5) of p5;
+(tim44-2,tim45)=subpath(2,5) of p3 intersectiontimes subpath(0,10) of p5;
+(tim46,tim47)=subpath(0,4) of p6 intersectiontimes subpath(0,10) of p5;
+infill subpath(rundy(p6,tim40),rundy(p6,tim17).zpet) of p6
+ ..(reverse subpath(rundy(p0,tim18),rundy(p0,tim16).zpet) of p0)
+ ..subpath(rundy(p3,tim19),rundy(p3,tim42).zpet) of p3
+ ..(reverse subpath(rundy(p5,tim41),rundy(p5,tim43).zpet) of p5)..cycle;
+infill subpath(rundy(p3,tim44),rundy(p3,tim21).zpet) of p3
+ ..(reverse subpath(rundy(p1,tim22),rundy(p1,tim20).zpet) of p1)
+ ..subpath(rundy(p6,tim23),rundy(p6,tim46).zpet) of p6
+ ..(reverse subpath(rundy(p5,tim45),rundy(p5,tim47).zpet) of p5)
+ ..cycle;
+infill subpath(rundy(p0,tim24),rundy(p0,tim26).zpet) of p0
+ ..(reverse subpath(rundy(p3,tim25),rundy(p3,tim27).zpet) of p3)..cycle;
+infill subpath(rundy(p1,tim28),rundy(p1,tim30).zpet) of p1
+ ..(reverse subpath(rundy(p3,tim29),rundy(p3,tim31).zpet) of p3)..cycle;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_clock_uni:
+bskchar "Clockwise integral sign (for Unicode)";
+beginchar(chars.math_int_clock_uni,10u#,v_center(11/6dh#)); uni "0x2231";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; y2=y9-.25(x2-x6); 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);
+p2=reverse (draw_circle.r);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ .5[z17r,z16]=z2; x17r=x16; y17-y16=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(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,tim7)=p0 intersectiontimes p2;
+(tim8-ceiling tim6,tim9)=(subpath(ceiling tim6,length p0) of p0) intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+tim12=xpart(p1 intersectiontimes ((x9,ypart(point infinity of p4))--(w,ypart(point infinity of p4))));
+tim13=xpart(p2 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0
+ ..(reverse subpath(rundy(p2,tim13),rundy(p2,tim9).zpet) of p2)
+ ..subpath(rundy(p4,(0,2/3(x16e-x17r))),rundy(p4,(length p4,2/3(x16e-x17r))).zpet) of p4
+ ..subpath(rundy(p1,tim12),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),2) of p1
+ ..(reverse subpath(rundy(p2,tim11),2) of p2)
+ ..subpath(rundy(p0,tim10),length p0) 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_int_anticlock_uni:
+bskchar "Anticlockwise integral sign (for Unicode)";
+beginchar(chars.math_int_anticlock_uni,10u#,v_center(11/6dh#)); uni "0x2A11";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; y2=y9+.25(x2-x6); 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);
+p2=reverse (draw_circle.r);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ 1/3[y17r,y16]=y2; x17r=x16=x2; y16-y17=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(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;
+(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;
+(tim16,tim17)=p1 intersectiontimes subpath(0,4) of p4;
+tim18=xpart(p1 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+(tim19,tim20-2)=p2 intersectiontimes subpath(4,length p4) of p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim18).zpet) of p1
+ ..subpath(rundy(p4,(0,.5(x17r-x16e))),rundy(p4,length p4).zpet) of p4
+ ..(reverse subpath(rundy(p2,tim9),rundy(p2,(tim19,f_obl)).zpet) of p2)
+ ..subpath(rundy(p0,tim8),rundy(p0,tim14).zpet) of p0
+ ..(reverse subpath(2,rundy(p2,tim15).zpet) of p2)
+ ..subpath(2,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) 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_circ_uni:
+bskchar "Circulation integral sign (for Unicode)";
+beginchar(chars.math_oint_circ_uni,10u#,v_center(11/6dh#)); uni "0x2A10";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; 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=2u; 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);
+p2=reverse (draw_circle.r);
+(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;
+(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;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),5) of p1
+ ..(reverse subpath(rundy(p2,tim9),5) of p2)
+ ..subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..(reverse subpath(7,rundy(p2,tim11).zpet) of p2)
+ ..subpath(7,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;
+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_int_finite_uni:
+bskchar "Finite part integral sign (for Unicode)";
+beginchar(chars.math_int_finite_uni,10u#,v_center(11/6dh#)); uni "0x2A0D";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], 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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+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;
+.5[z8,z9]=z1; y8=y9; x8=2u;
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+p1:=z8l--z9ll;
+p2:=z9r--z8rr;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-10,tim5)=subpath(10,length p0) of p0 intersectiontimes p2;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes p1;
+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),infinity) of p2
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'',8rr,9ll);
+endchar;
+
+iff known chars.math_int_average_uni:
+bskchar "Integral average sign (for Unicode)";
+beginchar(chars.math_int_average_uni,10u#,v_center(11/6dh#)); uni "0x2A0F";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], 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;
+.5[z8,z9]=z1; x8=2u; y8=y1-curve;
+pos8(rule_thickness,angle(z8-z9)-90); pos9(rule_thickness,angle(z8-z9)-90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+p1:=z8l--z9ll;
+p2:=z9r--z8rr;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-10,tim5)=subpath(10,length p0) of p0 intersectiontimes p2;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes p1;
+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),infinity) of p2
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'',8rr,9ll);
+endchar;
+
+iff known chars.math_int_dbar_uni:
+bskchar "Integral sign with double stroke (for Unicode)";
+beginchar(chars.math_int_dbar_uni,10u#,v_center(11/6dh#)); uni "0x2A0E";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], 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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+pos10(rule_thickness,90); pos11(rule_thickness,90);
+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;
+.5[z8,z11]=z1; y8=y9; y10=y11; x8=x10=2u; x9=x11; y10-y8=4rule_thickness;
+bskpoints(8,9,rule_thickness,rule_thickness);
+bskpoints(11,10,rule_thickness,rule_thickness);
+p0:=z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+p1:=z8l--z9ll;
+p2:=z9r--z8rr;
+p3:=z10ll--z11l;
+p4:=z11rr--z10r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-10,tim5)=subpath(10,length p0) of p0 intersectiontimes p2;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes p1;
+(tim8,tim9)=p0 intersectiontimes p3;
+(tim10,tim11)=p0 intersectiontimes p4;
+(tim12-10,tim13)=subpath(10,length p0) of p0 intersectiontimes p4;
+(tim14-10,tim15)=subpath(10,length p0) of p0 intersectiontimes p3;
+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,tim8).zpet) of p0
+ ..subpath(rundy(p3,tim9),infinity) of p3
+ ..subpath(0,rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p0,tim10),rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p4,tim13),infinity) of p4
+ ..subpath(0,rundy(p3,tim15).zpet) of p3
+ ..subpath(rundy(p0,tim14),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(4',4'',7',7'',8rr,9ll,10ll,11rr);
+endchar;
+
+iff known chars.math_sum_integral:
+bskchar "Summation sign with integral";
+beginchar(chars.math_sum_integral,12u#,v_center(10/6dh#)); uni "0x2A0B";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu.more:=2oblu;
+numeric alpha, top_stem, top_arm, bot_arm, fend; fend:=1.5stem;
+top_arm=Vround rule_thickness;
+bot_arm=Vround .5[cap_stem,rule_thickness];
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos7(.5[stem,bourstem],0); x7=good.x .5w; y7=.5[h,-d];
+pos8(.5[stem,hair],0); pos9(hair,-90); pos10(fend,180);
+y2-y1=2/3(h+d); .5[y1,y2]=.5[h,-d];
+lft x1l=lft x2l-o=.5u;
+bot y3r=y1; top y4r=y2; 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');
+top y8=h-like_curve;
+x9-lft x8l=2u;
+top y9l=h+o; .5[x8r,x10]=x9; y10''=y9r-like_hair;
+rt x10l=w-2u;
+z10'=z10+.2fend*down+o*left; z10''=z10+.5(fend-currentbreadth)*dir45;
+y8r:=y8l+hair; z9'r=z9r+.5hair*right;
+.5[x11,x8]=.5[x9,x12]=.5[x10,x13]=x7;
+pos11(.5[stem,hair],180); pos12(hair,-90); pos13(fend,0);
+bot y11=-d+like_curve; bot y12l=-d-o; y13''=y12l+like_hair;
+y11r:=y11r-hair;
+z13'=z13+.2fend*up+o*right; z13''=z13+.5(fend-currentbreadth)*dir(-135);
+y7r:=y7r-o; y7l:=y7l+o;
+p0:=z3l..{dir-110}z3l.o..z3d---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more---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);
+p1:=z11r..z12l{left}..z13r..z13'..z13l{down}..z13''..z12r..z11l...z7r
+ ...z8r...{right}z9r..z10r..z10'..z10l{up}..z10''..z9l..z8l...z7l...cycle;
+p2=subpath(15,length p1) of p1;
+p3=subpath(0,12) of p0;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-7,tim3)=subpath(7,infinity) of p0 intersectiontimes subpath(0,10) of p1;
+(tim4-11,tim5)=subpath(11,infinity) of p0 intersectiontimes subpath(0,10) of p1;
+(tim6-11,tim7-10)=subpath(11,infinity) of p0 intersectiontimes subpath(10,length p1) of p1;
+(tim8-17,tim9-10)=subpath(17,infinity) of p0 intersectiontimes subpath(10,length p1) of p1;
+(tim10-17,tim11)=subpath(17,infinity) of p0 intersectiontimes subpath(0,8) of p1;
+(tim12,tim13)=p2 intersectiontimes subpath(0,4) of p3;
+(tim14,tim15-4)=p2 intersectiontimes subpath(4,infinity) of p3;
+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),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p1,tim9),length p1) of p1
+ ..subpath(0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p0,tim10),infinity) of p0---cycle;
+oblu:=2oblu;
+infill subpath(rundy(p3,tim13),rundy(p3,(tim15,3f_obl)).zpet) of p3
+ ..subpath(rundy(p2,(tim14,3f_obl)),rundy(p2,tim12).zpet) of p2..cycle;
+(tim16,tim17-7)=p2 intersectiontimes subpath(7,infinity) of p3;
+(tim18,tim19-4)=p2 intersectiontimes subpath(4,7) of p3;
+infill subpath(rundy(p2,tim16),rundy(p2,(tim18,4f_obl)).zpet) of p2
+ ..subpath(rundy(p3,(tim19,4f_obl)),rundy(p3,tim17).zpet) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); labels(1',1r.b,4d,4l.o,5',2r.b);
+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_sqintersection_double:
+bskchar "Double square set intersection sign";
+beginchar(chars.math_sqintersection_double,11u#,.8asc_height#,0); uni "0x2A4E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,0);
+bot y1=bot y4=bot y5=bot y8=-d; top y2=top y3=h;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l; top y6=top y7=bot y2r-2rule_thickness;
+lft x5l-x1r=if not boldmath:2.25\\fi rule_thickness; .5[x5,x8]=.5[x6,x7]=.5[x1,x4]; x5=x6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+y2r:=y3l:=y3-rule_thickness+currentbreadth; y6r:=y7l:=y7-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+endchar;
+
+iff known chars.math_sqintersection_uni:
+bskchar "N-ary square set intersection sign (for Unicode)";
+beginchar(chars.math_sqintersection_uni,14u#,v_center(10/6dh#)); uni "0x2A05";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(stem,0); pos4(stem,0);
+bot y1=bot y4=-d; top y2=top y3=h;
+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..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_double:
+bskchar "Double square set union sign";
+beginchar(chars.math_squnion_double,11u#,.8asc_height#,0); uni "0x2A4F";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,0);
+top y1=top y4=top y5=top y8=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l; bot y6=bot y7=top y2r+2rule_thickness;
+lft x5l-x1r=if not boldmath:2.25\\fi rule_thickness; .5[x5,x8]=.5[x6,x7]=.5[x1,x4]; x5=x6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+y2r:=y3l:=y3+rule_thickness-currentbreadth; y6r:=y7l:=y7+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+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_uni:
+bskchar "N-ary square set union sign (for Unicode)";
+beginchar(chars.math_squnion_uni,14u#,v_center(10/6dh#)); uni "0x2A06";
+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_sqmultiunion:
+bskchar "Multiset square set union sign";
+beginchar(chars.math_sqmultiunion,11u#,.8asc_height#,0); 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(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;
+lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y2,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 z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+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(1,2,3,4,5,6,7,8,9); labels(1rr,2ll,3rr,4ll,5rr);
+endchar;
+
+iff known chars.math_sqcup:
+bskchar "Square cup sign";
+beginchar(chars.math_sqcup,11u#,x_height#,0); 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);
+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_sqcap:
+bskchar "Square cap sign";
+beginchar(chars.math_sqcap,11u#,x_height#,0); 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);
+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_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_serif_closed:
+bskchar "Closed set union sign with serifs";
+beginchar(chars.math_union_serif_closed,14u#,.8asc_height#,0); uni "0x2A4C";
+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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y3l=-d-o; y1=y5=y6l;
+lft x1l=lft x2l=2.5u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+lft x6=u; rt x7=w-u; top y6r=top y7r=h;
+bskpoints(6,7,rule_thickness,rule_thickness);
+filldraw obl(1l,6l,2l)---z2l...z3l...z4l---obl(5l,4l,7ll)---z7ll..z7r---z6rr..z6l---cycle;
+infill obl(5r,1r,4r)---z4r...z3r...z2r---obl(1r,2r,5r)---cycle;
+penlabels(1,2,3,4,5,6,7); labels(6rr,7ll);
+endchar;
+
+iff known chars.math_union_serif_closed_smash:
+bskchar "Closed set union sign with serifs and smash sign";
+beginchar(chars.math_union_serif_closed_smash,14u#,.8asc_height#,0); uni "0x2A50";
+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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(hair,45); pos9(hair,45);
+pos10(hair,45); pos11(hair,45);
+pos12(hair,-45); pos13(hair,-45);
+pos14(hair,-45); pos15(hair,-45);
+bot y3l=-d-o; y1=y5=y6l;
+lft x1l=lft x2l=2.5u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+lft x6=u; rt x7=w-u; top y6r=top y7r=h;
+y8=y12; y11=y15; x10=x13; x9=x14; y8-y11=x9-x10=.5(x4r-x2r); .5[x9,x10]=.5w; .5[y8,y11]=math_axis;
+z10-z8=.5(x9-x10)*dir225; z9-z8=z11-z10; z13-z12=z15-z14; z14-z12=.5(x9-x10)*dir-45;
+z8'=whatever[z12l,z13l]=whatever[z8r,z9r];
+z9'=whatever[z12r,z13r]=whatever[z8r,z9r];
+z10'=whatever[z12r,z13r]=whatever[z8l,z9l];
+z11'=whatever[z12r,z13r]=whatever[z10r,z11r];
+z12'=whatever[z12r,z13r]=whatever[z10l,z11l];
+z13'=whatever[z12l,z13l]=whatever[z10l,z11l];
+z14'=whatever[z12l,z13l]=whatever[z10r,z11r];
+z15'=whatever[z12l,z13l]=whatever[z8l,z9l];
+z16'=whatever[z14l,z15l]=whatever[z8r,z9r];
+z17'=whatever[z14r,z15r]=whatever[z8r,z9r];
+z18'=whatever[z14r,z15r]=whatever[z8l,z9l];
+z19'=whatever[z14r,z15r]=whatever[z10r,z11r];
+z20'=whatever[z14r,z15r]=whatever[z10l,z11l];
+z21'=whatever[z14l,z15l]=whatever[z10l,z11l];
+z22'=whatever[z14l,z15l]=whatever[z10r,z11r];
+z23'=whatever[z14l,z15l]=whatever[z8l,z9l];
+bskpoints(6,7,rule_thickness,rule_thickness);
+filldraw obl(1l,6l,2l)---z2l...z3l...z4l---obl(5l,4l,7ll)---z7ll..z7r---z6rr..z6l---cycle;
+infill obl(5r,1r,4r)---z4r...z3r...z2r---obl(1r,2r,5r)---cycle;
+filldraw z8r---obl(8',8r,12l)---z12l..z12r---obl(9',12r,16')---obl(16',9',14l)---z14l..z14r
+ ---obl(17',14r,9r)---z9r..z9l---obl(18',9l,19')---obl(19',18',11r)---z11r..z11l
+ ---obl(20',11l,15r)---z15r..z15l---obl(21',15l,12')---obl(12',11l,13r)---z13r..z13l
+ ---obl(13',13l,10l)---z10l..z10r---obl(14',10r,15')---obl(15',14',8l)---z8l..cycle;
+infill obl(10',23',11')---obl(11',10',22')---obl(22',11',23')---obl(23',22',10')---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+labels(6rr,7ll,9ll,10ll,12rr,13ll,14ll,15rr,8',9',10',11',12',13',14',15',16',17',18',19',20',21',22',23');
+endchar;
+
+iff known chars.math_union_union:
+bskchar "Two joinde set union signs";
+beginchar(chars.math_union_union,16u#,.8asc_height#,0); uni "0x2A4A";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+top y1=top y5=top y6=top y10=h; bot y3l=bot y8l=-d-o;
+lft x1l=lft x2l=u; x4=x5=x6=x7=.5w; x3=.5[x1,x4]; x8=.5[x6,x9];rt x9l=rt x10l=w-u;
+y2=y4=y7=y9=y3+(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(10,9,hair,hair);
+p0=z1l---z2l...z3l...z4l---z5l;
+p1=z6l---z7l...z8l..z9l---z10l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..z10rr---z9r...z8r...z7r---z5l..z5r---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,10rr);
+endchar;
+
+iff known chars.math_union_minus:
+bskchar "Set union sign with minus";
+beginchar(chars.math_union_minus,11u#,.8asc_height#,0); uni "0x2A41";
+italcorr asc_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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+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);
+.5[x6,x7]=.5w; lft x6=rt x2r+rule_thickness; y6=y7=math_axis;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw bskrule(6,7,hair,hair);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_overbar:
+bskchar "Set union sign with overbar";
+beginchar(chars.math_union_overbar,11u#,asc_height#,0); uni "0x2A42";
+italcorr asc_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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1=top y5=.8h; bot y3l=-d-o;
+lft x1l=lft x2l=lft x6=u; x4l=x5l=x7=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2); top y6r=top y7r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw bskrule(6,7,hair,0);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_logor:
+bskchar "Set union sign with logical or sign";
+beginchar(chars.math_union,11u#,.8asc_height#,0); uni "0x2A45";
+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);
+x6=.5w; y6=max(5u,2rule_thickness); lft x7l=rt x1r+rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+logor(6,7,8);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_uni:
+bskchar "N-ary set union sign (for Unicode)";
+beginchar(chars.math_union_uni,14u#,v_center(10/6dh#)); uni "0x22C3";
+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_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_cup:
+bskchar "Cup sign";
+beginchar(chars.math_cup,11u#,x_height#,0); uni "non";
+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_parallel_union:
+bskchar "Parallel set union sign";
+beginchar(chars.math_parallel_union,11u#,.8asc_height#,0); uni "0x22D3";
+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); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(.9rule_thickness,90); pos9(rule_thickness,180);
+pos10(rule_thickness,180);
+top y1=top y5=top y6=top y10=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x8=.5w;
+y2=y4=y3+(x3-x2); lft x6l=lft x7l=x1r+if not boldmath: 2.25\\fi rule_thickness;
+y7=y9=y8+(x8-x7); x9=x10=w-x6; bot y8l=y3r+2rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+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_uni:
+bskchar "N-ary union with plus";
+beginchar(chars.math_multiunion_uni,14u#,v_center(10/6dh#)); uni "0x2A04";
+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_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_multiset:
+bskchar "Multiset sign";
+beginchar(chars.math_multiset,11u#,.8asc_height#,0); uni "0x228C";
+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); pos6(rule_thickness,90);
+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);
+lft x7=rt x1r + stem; x7=w-x6; y6l=y7=.5[y3l,y1];
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+{{ save arrsize, arrwidth; numeric arrsize, arrwidth;
+arrsize=1.2arrwidth=if boldmath: 2.15 else:2\\ fi curve;
+filldraw sipka(7,6)---z6rr..z6l---cycle;
+}};
+penlabels(0,1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_multiset_multiply:
+bskchar "Multiset multiplication sign";
+beginchar(chars.math_multiset_multiply,11u#,.8asc_height#,0); uni "0x228D";
+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); pos6(rule_thickness,90);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=.5w;
+y2=y4=y3+(x3-x2); y6=.5[y3l,y1];
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+dot(6);
+penlabels(0,1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_multiset_multiply_n:
+bskchar "N-ary union with dot";
+beginchar(chars.math_multiset_multiply_n,14u#,v_center(10/6dh#)); uni "0x2A03";
+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=x6=.5w;
+y2=y4=y3+(x3-x2); y6=.5[y3l,y1];
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+{{ numeric old_dot; old_dot:=dot_size; save dot_size; numeric dot_size; dot_size:=1.5old_dot;
+ dot(6); }};
+penlabels(1,2,3,4,5); 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_serif_closed:
+bskchar "Closed set intersection sign with serifs";
+beginchar(chars.math_intersection_serif_closed,14u#,.8asc_height#,0); uni "0x2A4D";
+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);
+pos6(rule_thickness,270); pos7(rule_thickness,270);
+top y3l=h+o; y1=y5=y6l;
+lft x1l=lft x2l=2.5u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+lft x6=u; rt x7=w-u; bot y6r=bot y7r=-d;
+bskpoints(6,7,rule_thickness,rule_thickness);
+filldraw obl(1l,6l,2l)---z2l...z3l...z4l---obl(5l,4l,7ll)---z7ll..z7r---z6rr..z6l---cycle;
+infill obl(5r,1r,4r)---z4r...z3r...z2r---obl(1r,2r,5r)---cycle;
+penlabels(1,2,3,4,5,7,8); labels(6rr,7ll);
+endchar;
+
+iff known chars.math_intersection_intersection:
+bskchar "Two joined set intersection signs";
+beginchar(chars.math_intersection_intersection,16u#,.8asc_height#,0); uni "0x2A4B";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+bot y1=bot y5=bot y6=bot y10=-d; top y3l=top y8l=h+o;
+lft x1l=lft x2l=u; x4=x5=x6=x7=.5w; x3=.5[x1,x4]; x8=.5[x6,x9]; rt x9l=rt x10l=w-u;
+y2=y4=y7=y9=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(10,9,hair,hair);
+p0=z1l---z2l...z3l...z4l---z5l;
+p1=z6l---z7l...z8l..z9l---z10l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..z10rr---z9r...z8r...z7r---z5l..z5r---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,10rr);
+endchar;
+
+iff known chars.math_intersection_dot:
+bskchar "Set intersection sign with dot";
+beginchar(chars.math_intersection_dot,11u#,.8asc_height#,0); uni "0x2A40";
+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=x6=.5w;
+y2=y4=y3-(x3-x2); y6=.5[y3l,y1];
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+dot(6);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_overbar:
+bskchar "Set intersection sign with overbar";
+beginchar(chars.math_intersection_overbar,11u#,asc_height#,0); uni "0x2A43";
+italcorr asc_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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y1=bot y5=-d; top y3l=.8h+o;
+lft x1l=lft x2l=lft x6=u; x4l=x5l=x7=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2); top y6r=top y7r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw bskrule(6,7,hair,0);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_logand:
+bskchar "Set intersection sign with logical and inside";
+beginchar(chars.math_intersection_logand,11u#,.8asc_height#,0); uni "0x2A44";
+italcorr asc_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=x6=.5w;
+y2=y4=y3-(x3-x2); y6=h-max(5u,2rule_thickness); lft x7r=rt x1r+rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+logand(6,7,8);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_uni:
+bskchar "N-ary set intersection sign (for Unicode)";
+beginchar(chars.math_intersection_uni,14u#,v_center(10/6dh#)); uni "0x22C2";
+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_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_cap:
+bskchar "Cap sign";
+beginchar(chars.math_cap,11u#,x_height#,0); uni "non";
+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_parallel_intersection:
+bskchar "Parallel set intersection sign";
+beginchar(chars.math_parallel_intersection,11u#,.8asc_height#,0); uni "0x22D2";
+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); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,-90); pos9(rule_thickness,180);
+pos10(rule_thickness,180);
+bot y1=bot y5=bot y6=bot y10=-d; top y3l=h+o; top y8l=y3r-2rule_thickness;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x8=.5w;
+y2=y4=y3-(x3-x2); y7=y9=y8-(x8-x7); lft x6l=lft x7l=x1r+if not boldmath: 2.25\\fi rule_thickness; x9=x10=w-x6;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_multiintersection:
+bskchar "Multiset intersection sign";
+beginchar(chars.math_multiintersection,11u#,.8asc_height#,0); uni "non";
+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;
+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_cup_cap:
+bskchar "Cup above cap sign";
+beginchar(chars.math_cup_cap,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A46";
+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);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+top y1=top y5=h; bot y3l=math_axis+1.5rule_thickness;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bot y6=bot y10=-d; top y8l=math_axis-1.5rule_thickness;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8-(x8-x7);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_cup_cap_rule:
+bskchar "Cup above cap sign wih rule";
+beginchar(chars.math_cup_cap_rule,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A48";
+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);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+top y1=top y5=h; bot y3l=math_axis+1.5rule_thickness;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bot y6=bot y10=-d; top y8l=math_axis-1.5rule_thickness;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8-(x8-x7);
+y11=y12=math_axis; x11=x6l; x12=x9l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+filldraw bskrule(11,12,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_cap_cup:
+bskchar "Cap above cup sign";
+beginchar(chars.math_cap_cup,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A47";
+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);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(.9rule_thickness,90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+bot y1=bot y5=math_axis+1.5rule_thickness; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+top y6=top y10=math_axis-1.5rule_thickness; bot y8l=-d-o;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8+(x8-x7);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_cap_cup_rule:
+bskchar "Cap above cup sign with rule";
+beginchar(chars.math_cap_cup_rule,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A49";
+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);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(.9rule_thickness,90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+bot y1=bot y5=math_axis+1.5rule_thickness; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+top y6=top y10=math_axis-1.5rule_thickness; bot y8l=-d-o;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8+(x8-x7);
+y11=y12=math_axis; x11=x6l; x12=x9l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+filldraw bskrule(11,12,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(1rr,5rr,6rr,10rr);
+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_infinity_incomplete:
+bskchar "Incomplete infinity sign";
+beginchar(chars.math_infinity_incomplete,16u#,x_height#,0); uni "0x29DC";
+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;
+p4=z1r{left}..z0r{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)));
+(tim3,tim4)=p5 intersectiontimes p2;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..{up}z5l..{down}z5r..p4..cycle;
+infill subpath(0,rundy(p5,tim3).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim4).zpet) of p2) .. 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[]; oblu.more:=2oblu;
+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---obl(2r,3l,1r).more---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";
+italcorr .7asc_height#*slant;
+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);
+math_fit(-.5bar_height#*slant,0);
+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_right_long:
+bskchar "Long rightward arrow";
+beginchar(chars.arrow_right_long,22u#,v_center(5u#)); uni "0x27F6";
+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_right_doublehead:
+bskchar "Rightward arrow with doublehead";
+beginchar(chars.arrow_right_doublehead,17u#,v_center(5u#)); uni "0x21A0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (rt x0a-x0,0);
+tim1=xpart(p1 intersectiontimes (z1l--(w,y0a.l)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (top z1r--(w,top y1r)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z1l--(w,y0a.l)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (top z1r--(w,top y1r)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1l..z1rr
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_right_short:
+bskchar "Short rightward arrow";
+beginchar(chars.arrow_right_short,9u#,v_center(5u#)); uni "non";
+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_right_triangle:
+bskchar "Rightward arrow with triangle head";
+beginchar(chars.arrow_right_triangle,15u#,v_center(5u#)); uni "0x279D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=w-u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3+o=x0-arrsize;
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+penlabels(1,2,3); labels(0,1rr);
+endchar;
+
+iff known chars.arrow_right_triangle_white:
+bskchar "Rightward arrow with white triangle head";
+beginchar(chars.arrow_right_triangle_white,15u#,v_center(5u#)); uni "0x21FE";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=w-u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3+o=x0-arrsize;
+z0'-z0=(0,rule_thickness-currentbreadth) rotated angle(z2r-z0);
+z0''-z0=(rule_thickness-currentbreadth,0) rotated angle(z2r-z0);
+x2'l=x2'r=x2+rule_thickness-currentbreadth;
+z2'r=z0'+whatever*(z2r-z0); z2'l=z0''+whatever*(z2l-z0);
+z0'''=whatever[z2'l,z0'']=whatever[z2'r,z0'];
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+oblu:=2oblu;
+infill obl(0''',2'r,2'l)---obl(2'l,0''',2'r)---obl(2'r,2'l,0''')---cycle;
+penlabels(1,2,2',3); labels(0,0',0'',0''',1rr);
+endchar;
+
+iff known chars.arrow_left_triangle:
+bskchar "Leftward arrow with triangle head";
+beginchar(chars.arrow_left_triangle,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3-o=x0+arrsize;
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+penlabels(1,2,3); labels(0,1rr);
+endchar;
+
+iff known chars.arrow_left_triangle_white:
+bskchar "Leftward arrow with white triangle head";
+beginchar(chars.arrow_left_triangle_white,15u#,v_center(5u#)); uni "0x21FD";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3-o=x0+arrsize;
+z0'-z0=(0,-rule_thickness+currentbreadth) rotated angle(z2r-z0);
+z0''-z0=(rule_thickness-currentbreadth,0) rotated angle(z2r-z0);
+x2'l=x2'r=x2-rule_thickness+currentbreadth;
+z2'r=z0'+whatever*(z2r-z0); z2'l=z0''+whatever*(z2l-z0);
+z0'''=whatever[z2'l,z0'']=whatever[z2'r,z0'];
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+oblu:=2oblu;
+infill obl(0''',2'r,2'l)---obl(2'l,0''',2'r)---obl(2'r,2'l,0''')---cycle;
+penlabels(1,2,2',3); labels(0,0',0'',0''',1rr);
+endchar;
+
+iff known chars.arrow_left_right_triangle:
+bskchar "Left-rightward arrow with triangle heads";
+beginchar(chars.arrow_left_right_triangle,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+penpos4(2arrwidth,90);
+x0=w-u; x5=u; x1=x4-o=x5+arrsize; y0=y1=y2=y3=y4=y5=math_axis; x2=x3+o=x0-arrsize;
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---obl(1r,3r,4r)---obl(4r,1r,5)
+ ---obl(5,4r,4l)---obl(4l,5,1l)---obl(1l,4l,3l)---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+penlabels(1,2,3,4); labels(0,5);
+endchar;
+
+iff known chars.arrow_left_right_triangle_white:
+bskchar "Left-rightward arrow with white triangle heads";
+beginchar(chars.arrow_left_right_triangle_white,15u#,v_center(5u#)); uni "0x21FF";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+penpos4(2arrwidth,90);
+x0=w-u; x5=u; x1=x4-o=x5+arrsize; y0=y1=y2=y3=y4=y5=math_axis; x2=x3+o=x0-arrsize;
+z0'-z0=(0,rule_thickness-currentbreadth) rotated angle(z2r-z0);
+z0''-z0=(rule_thickness-currentbreadth,0) rotated angle(z2r-z0);
+x2'l=x2'r=x2+rule_thickness-currentbreadth;
+z2'r=z0'+whatever*(z2r-z0); z2'l=z0''+whatever*(z2l-z0);
+z0'''=whatever[z2'l,z0'']=whatever[z2'r,z0'];
+
+z5'-z5=(0,-rule_thickness+currentbreadth) rotated angle(z4r-z5);
+z5''-z5=(rule_thickness-currentbreadth,0) rotated angle(z4r-z5);
+x4'l=x4'r=x4-rule_thickness+currentbreadth;
+z4'r=z5'+whatever*(z4r-z5); z4'l=z5''+whatever*(z4l-z5);
+z5'''=whatever[z4'l,z5'']=whatever[z4'r,z5'];
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---obl(1r,3r,4r)---obl(4r,1r,5)
+ ---obl(5,4r,4l)---obl(4l,5,1l)---obl(1l,4l,3l)---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+oblu:=2oblu;
+infill obl(0''',2'r,2'l)---obl(2'l,0''',2'r)---obl(2'r,2'l,0''')---cycle;
+infill obl(5''',4'r,4'l)---obl(4'l,5''',4'r)---obl(4'r,4'l,5''')---cycle;
+penlabels(1,2,2',3,4,4'); labels(0,0',0'',0''',5);
+endchar;
+
+iff known chars.arrow_right_two:
+bskchar "Two rightward arrows";
+beginchar(chars.arrow_right_two,15u#,v_center(13u#)); uni "0x21C9";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+rt x0=rt x2=w-u; x1=x3=w-x0; y0=y1r; y2=y3r; .5[y0,y2]=math_axis; bot y2-top y1=2arrwidth+o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_right_three:
+bskchar "Three rightward arrows";
+beginchar(chars.arrow_right_three,15u#,v_center(13u#)); uni "0x21F6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90); pos5(rule_thickness,90);
+{{ save arrwidth, arrsize;
+numeric arrsize, arrwidth; arrsize=1.2arrwidth=if boldmath: 2.35 else:2\\ fi curve;
+rt x0=rt x2=rt x4=w-u; x1=x3=x5=w-x0; y0=y1r; y2=y3r; y4=y5r;
+.5[y0,y4]=y2=math_axis; bot y2-top y1=2arrwidth+o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+filldraw sipka(4,5)---z5l..z5rr---cycle;
+}};
+labels(1rr,3rr,5rr);
+endchar;
+
+iff known chars.arrow_right_not:
+bskchar "Rightward arrow with negation";
+beginchar(chars.arrow_right_not,15u#,v_center(5u#)); uni "0x219B";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+.5[x2,x3]=.5[x0c,x1]; .5[y2,y3]=y0; x3-x2=.5(y3-y2); top y3=h;
+pos2(rule_thickness,angle(z2-z3)+90); pos3(rule_thickness,angle(z2-z3)+90);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(2'r,0a.l,2r)---z2rr..z2l---obl(2'l,2l,1l).more
+ ---z1l..z1rr---obl(3'l,1rr,3l)---z3ll..z3r---obl(3'r,3r,0a.r).more---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_right_not_vert:
+bskchar "Rightward arrow with vertical negation";
+beginchar(chars.arrow_right_not_vert,15u#,v_center(5u#)); uni "0x21F8";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+x2=x3=.5[x0c,x1]; .5[y2,y3]=y0; top y3=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(2'r,0a.l,2r)---z2rr..z2l---obl(2'l,2l,1l)
+ ---z1l..z1rr---obl(3'l,1rr,3l)---z3ll..z3r---obl(3'r,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_right_not_vert_double:
+bskchar "Rightward arrow with double vertical negation";
+beginchar(chars.arrow_right_not_vert_double,15u#,v_center(5u#)); uni "0x21FB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+x2=x3; .5[x2,x4]=.5[x0c,x1]; x4=x5; x4-x2=min(3rule_thickness,3u);
+.5[y2,y3]=.5[y4,y5]=y0; top y3=top y5=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y2'l=y2'r=y4'l=y4'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y5'l=y5'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+x4'l=x5'l=x4l; x4'r=x5'r=x4r;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(4'r,0a.l,4r)---z4rr..z4l---tobl(4'l,4l,2'r)
+ ---obl(2'r,0a.l,2r)---z2rr..z2l---obl(2'l,2l,1l)
+ ---z1l..z1rr---obl(3'l,1rr,3l)---z3ll..z3r---tobl(3'r,3r,5'l)
+ ---tobl(5'l,3'r,5ll)---z5ll..z5r---obl(5'r,5r,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_right_tail:
+bskchar "Rightward arrow with tail";
+beginchar(chars.arrow_right_tail,15u#,v_center(5u#)); uni "0x21A3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0+arrsize; y0=y1r=math_axis;
+forsuffixes $=b,e,d,c: z1$-z1=z0$-z0; endfor;
+x1r:=x1l:=x1r-u;
+filldraw sipka(0,1)---z1l{dir210}..z1b{dir225}..{dir45}z1b+hair*up
+ ..z1c..z1d..z1e+hair*down{dir135}..{dir-45}z1e..{dir-30}z1r--cycle;
+labels(1b,1c,1d,1e);
+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_right_hook:
+bskchar "Rightward hook arrow";
+beginchar(chars.arrow_right_hook,18u#,v_center(5u#)); uni "0x21AA";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0); pos3(rule_thickness,270);
+rt x0=w-u; rt x1=4u; y0=y1r=math_axis;
+x2l=u; x3=x1; y2=.5[y1,y3]; y3l=math_axis+4u; x3l:=x3l-hair;
+filldraw sipka(0,1)---z1l..z2l{up}..{right}z3l..{left}z3r..{down}z2r..z1r---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_circle:
+bskchar "Rightward arrow through circle";
+beginchar(chars.arrow_right_circle,18u#,v_center(11u#)); uni "0x21F4";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5[x9,x10]; x2-x6=y8-y4=6u;
+lft x9=u; rt x10=w-5u; rt x11=w-u; y9r=y10=y11=math_axis;
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair);
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9rr{left}..z9l---z10l..z10r---z9rr;
+(tim0-1,tim1-1)=subpath(1,3) of p0 intersectiontimes subpath(1,2) of p2;
+(tim2-5,tim3)=subpath(5,7) of p0 intersectiontimes subpath(0,2) of p2;
+(tim4-5,tim5-3)=subpath(5,7) of p0 intersectiontimes subpath(3,4) of p2;
+(tim6-1,tim7-3)=subpath(1,3) of p0 intersectiontimes subpath(3,4) of p2;
+(tim8-1,tim9-1)=subpath(1,3) of p1 intersectiontimes subpath(1,2) of p2;
+(tim10-5,tim11)=subpath(5,7) of p1 intersectiontimes subpath(0,2) of p2;
+(tim12-5,tim13-3)=subpath(5,7) of p1 intersectiontimes subpath(3,4) of p2;
+(tim14-1,tim15-3)=subpath(1,3) of p1 intersectiontimes subpath(3,4) of p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),2) of p2
+ ..reverse sipka(11,10)
+ ..subpath(3,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p0,tim4),length p0) of p0
+ ..subpath(0,rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10).zpet,rundy(p1,tim8)) of p1..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..reverse subpath(0,rundy(p1,tim14).zpet) of p1
+ ..reverse subpath(rundy(p1,tim12),length p1) of p1..cycle;
+penlabels(9,10);
+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_left_long:
+bskchar "Long leftward arrow";
+beginchar(chars.arrow_left_long,22u#,v_center(5u#)); uni "0x27F5";
+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_left_doublehead:
+bskchar "Leftward arrow with doublehead";
+beginchar(chars.arrow_left_doublehead,17u#,v_center(5u#)); uni "0x219E";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (lft x0a-x0,0);
+tim1=xpart(p1 intersectiontimes (z1r--(0,y0a.l)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (bot z1l--(0,bot y1l)));
+tim3-6=xpart(subpath(6,infinity) of p0 intersectiontimes (top z1r--(0,top y1r)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (bot z1l--(0,bot y1l)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1rr..z1l
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_left_short:
+bskchar "Short leftward arrow";
+beginchar(chars.arrow_left_short,9u#,v_center(5u#)); uni "non";
+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_left_two:
+bskchar "Two leftward arrows";
+beginchar(chars.arrow_left_two,15u#,v_center(13u#)); uni "0x21C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=lft x2=u; x1=x3=w-x0; y0=y1l; y2=y3l; .5[y0,y2]=math_axis; bot y2-top y1=2arrwidth;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3rr..z3l---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_left_not:
+bskchar "Leftward arrow with negation";
+beginchar(chars.arrow_left_not,15u#,v_center(5u#)); uni "0x219A";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+.5[x2,x3]=.5[x0c,x1]; .5[y2,y3]=y0; x3-x2=.5(y3-y2); top y3=h;
+pos2(rule_thickness,angle(z2-z3)+90); pos3(rule_thickness,angle(z2-z3)+90);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r).more
+ ---z1rr..z1l---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r).more---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_left_not_vert:
+bskchar "Leftward arrow with vertical negation";
+beginchar(chars.arrow_left_not_vert,15u#,v_center(5u#)); uni "0x21F7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+x2=x3=.5[x0c,x1]; .5[y2,y3]=y0; top y3=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r)
+ ---z1rr..z1l---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_left_dash:
+bskchar "Leftward dashed arrow";
+beginchar(chars.arrow_left_dash,15u#,v_center(5u#)); uni "0x21E0";
+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);
+lft x0=u; x1=.5w-u; y0=y1l=y2l=y3l=y4l=y5l=math_axis;
+rt x5=w-u; x2-x1=x4-x3=2.5rule_thickness; x5-x4=x3-x2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1r..z1l---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_up_dash:
+bskchar "Upward dashed arrow";
+beginchar(chars.arrow_up_dash,9u#,asc_height#,0); uni "0x21E1";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0); pos5(rule_thickness,0);
+x0=x1l=x2l=x3l=x4l=x5l=.5w-o;
+top y0=h+apex_o; bot y1=x_height;
+bot y5=-d; y1-y2=y3-y4=2.5rule_thickness; y5-y4=y3-y2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1r..z1l---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_right_dash:
+bskchar "Rightward dashed arrow";
+beginchar(chars.arrow_right_dash,15u#,v_center(5u#)); uni "0x21E2";
+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);
+rt x0=w-u; x1=.5w+u; y0=y1r=y2r=y3r=y4r=y5r=math_axis;
+lft x5=u; x2-x1=x4-x3=-2.5rule_thickness; x5-x4=x3-x2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_down_dash:
+bskchar "Downward dashed arrow";
+beginchar(chars.arrow_down_dash,9u#,asc_height#,0); uni "0x21E3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0); pos5(rule_thickness,0);
+x0=x1r=x2r=x3r=x4r=x5r=.5w+o;
+bot y0=-d-apex_o; top y1=(h-x_height);
+top y5=h; y1-y2=y3-y4=-2.5rule_thickness; y5-y4=y3-y2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1l..z1r---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_left_not_vert_double:
+bskchar "Leftward arrow with double vertical negation";
+beginchar(chars.arrow_left_not_vert_double,15u#,v_center(5u#)); uni "0x21FA";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+x2=x3; .5[x2,x4]=.5[x0c,x1]; x4=x5; x4-x2=min(3rule_thickness,3u);
+.5[y2,y3]=.5[y4,y5]=y0; top y3=top y5=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y2'l=y2'r=y4'l=y4'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y5'l=y5'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+x5'l=x4'l=x5l; x5'r=x4'r=x5r;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---tobl(3'r,3r,5'l)
+ ---tobl(5'l,3'r,5l)---z5ll..z5r---obl(5'r,5r,1r)
+ ---z1rr..z1l---obl(4'r,1l,4r)---z4rr..z4l---tobl(4'l,4l,2'r)
+ ---tobl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_left_tail:
+bskchar "Leftward arrow with tail";
+beginchar(chars.arrow_left_tail,15u#,v_center(5u#)); uni "0x21A2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0-arrsize; y0=y1l=math_axis;
+forsuffixes $=b,e,d,c: z1$-z1=z0$-z0; endfor;
+x1r:=x1l:=x1r+u;
+filldraw sipka(0,1)---z1r{dir30}..{dir45}z1b..z1b+hair*down{dir225}
+ ..z1c..z1d..{dir-45}z1e+hair*up..{dir135}z1e..{dir150}z1l---cycle;
+labels(1b,1c,1d,1e);
+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_left_hook:
+bskchar "Leftward arrow with hook";
+beginchar(chars.arrow_left_hook,18u#,v_center(5u#)); uni "0x21A9";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,270);
+lft x0=u; lft x1=w-4u; y0=y1l=math_axis;
+x2l=w-u; x3=x1+hair; y2=.5[y1,y3]; y3l=math_axis+4u; x3r:=x3r+hair;
+filldraw sipka(0,1)---z1r..{up}z2r..z3r{left}..z3l{right}..z2l{down}..z1l---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_above_right:
+bskchar "Leftward arrow above rightward arrow";
+beginchar(chars.arrow_left_above_right,15u#,v_center(13u#)); uni "0x21C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=u; x1=w-x0; rt x2=w-u; x3=w-x2; y0=y1l; y2=y3r;
+.5[y0,y2]=math_axis; bot y2-top y1=-2arrwidth;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_left_above_right_stop:
+bskchar "Leftward arrow above rightward arrow with stop bars";
+beginchar(chars.arrow_left_above_right_stop,15u#,v_center(13u#)); uni "0x21B9";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+lft x0=u; x1=w-x0; rt x2=w-u; x3=w-x2; y0=y1l; y2=y3r;
+.5[y0,y2]=math_axis; bot y2-top y1=-2arrwidth;
+.5[y4,y5]=y0; y4=y0b; x4l=x5l=x0;
+.5[y6,y7]=y2; y6=y2e; x6r=x7r=x2;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+p0=sipka(0,1);
+p1=reverse bskrule(4,5,rule_thickness,rule_thickness);
+p2=sipka(2,3);
+p3=bskrule(7,6,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+(tim5,tim6)=p2 intersectiontimes p3;
+tim9=round(tim5);
+(tim7-tim9,tim8)=subpath(tim9,infinity) of p2 intersectiontimes p3;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---z1rr..z1l---cycle;
+filldraw subpath(0,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p3,tim6),length p3) of p3
+ ..subpath(0,rundy(p3,tim8).zpet) of p3
+ ..subpath(rundy(p2,tim7),infinity) of p2---z3l..z3r---cycle ;
+penlabels(4,5,6,7); labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_right_above_left:
+bskchar "Rightward arrow above leftward arrow";
+beginchar(chars.arrow_right_above_left,15u#,v_center(13u#)); uni "0x21C4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=u; x1=w-x0; rt x2=w-u; x3=w-x2; y0=y1l; y2=y3r;
+.5[y0,y2]=math_axis; bot y2-top y1=2arrwidth;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_up_tip_left:
+bskchar "Upward arrow with leftward tip";
+beginchar(chars.arrow_up_tip_left,9.5u#,asc_height#,0); uni "0x21B0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0);
+lft x0=u; x1=w-x0; y0=y1l=h-arrwidth; x1l:=x1l-rule_thickness+currentbreadth;
+bot y2=-d; rt x2r=w-u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2rr..z2l---obl(1l,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_up_tip_right:
+bskchar "Upward arrow with rightward tip";
+beginchar(chars.arrow_up_tip_right,9.5u#,asc_height#,0); uni "0x21B1";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0);
+rt x0=w-u; x1=w-x0; y0=y1r=h-arrwidth; x1l:=x1l+rule_thickness-currentbreadth;
+bot y2=-d; lft x2l=u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2r)---z2rr..z2l---obl(1r,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_down_tip_left:
+bskchar "Downward arrow with leftward tip";
+beginchar(chars.arrow_down_tip_left,9.5u#,asc_height#,0); uni "0x21B2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180);
+lft x0=u; x1=w-x0; y0=y1l=arrwidth; x1r:=x1r-rule_thickness+currentbreadth;
+top y2=h; rt x2l=w-u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2rr..z2l---obl(1l,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_CR:
+bskchar "Carriage return arrow";
+beginchar(chars.arrow_CR,12u#,.5[x_height#,asc_height#],0); uni "0x21B5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180);
+lft x0=u; x1=w-x0; y0=y1l=arrwidth; x1r:=x1r-rule_thickness+currentbreadth;
+top y2=h; rt x2l=w-u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2rr..z2l---obl(1l,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_LF:
+bskchar "Line feed arrow";
+beginchar(chars.arrow_LF,13u#,x_height#,0); uni "0x21B4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90);
+x0=x1r=w-u-arrwidth; top y2r=h; lft x2=u;
+bot y0=-d-apex_o; top y1=h; y1l:=y1l-rule_thickness+currentbreadth;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2l)---z2l..z2rr---obl(1r,2r,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_down_tip_right:
+bskchar "Downward arrow with rightward tip";
+beginchar(chars.arrow_down_tip_right,9.5u#,asc_height#,0); uni "0x21B3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180);
+rt x0=w-u; x1=w-x0; y0=y1r=arrwidth; x1r:=x1r+rule_thickness-currentbreadth;
+top y2=h; lft x2r=u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2r)---z2rr..z2l---obl(1r,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+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_up_doublehead:
+bskchar "Upward arrow with doublehead";
+beginchar(chars.arrow_up_doublehead,9u#,asc_height#,0); uni "0x219F";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0);
+x0=x1l=.5w-o; top y0=h+apex_o; bot y1=-d;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (0,bot y0a-y0);
+tim1=xpart(p1 intersectiontimes (z1r--(x0a.r,h)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (lft z1l--(lft x1l,h)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (rt z1r--(rt x0a.l,h)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (lft z1l--(lft x1l,h)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1rr..z1l
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_up_bars:
+bskchar "Upward arrow with two horizontal bars";
+beginchar(chars.arrow_up_bars,9u#,asc_height#,0); uni "0x21DE";
+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;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+.5[x2,x3]=.5[x4,x5]=x1; y2=y3; y4=y5; .5[y2,y4]=.5[y0c,y1]; y4-y2=min(3rule_thickness,3u);
+lft x2=lft x4=u;
+y5'r=y4'r=y4r; y5'l=y4'l=y4l; y2'r=y3'r=y3r; y2'l=y3'l=y3l;
+x5'r=x5'l=x3'r=x3'l=x1r; x4'r=x4'l=x2'r=x2'l=x1l;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(5'r,0a.l,5r)---z5r..z5ll---tobl(5'l,5ll,3'r)
+ ---tobl(3'r,5'l,3r)---z3r..z3ll---obl(3'l,3ll,1r)---z1rr..z1l
+ ---obl(2'l,1l,2l)---z2l..z2rr---tobl(2'r,2rr,4'l)---tobl(4'l,2'r,4l)
+ ---z4l..z4rr---obl(4'r,4rr,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr);
+endchar;
+
+iff known chars.arrow_up_two:
+bskchar "Two upward arrows";
+beginchar(chars.arrow_up_two,15.5u#,asc_height#,0); uni "0x21C8";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1l; lft x0=u+arrwidth;
+x2=x3l; rt x2=w-u-arrwidth;
+top y0=top y2=h+apex_o; bot y1=bot y3=-d;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3rr..z3l---cycle;
+labels(1rr,2rr);
+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;
+bot y0=-d-apex_o; top y1=h;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_down_doublehead:
+bskchar "Downward arrow with doublehead";
+beginchar(chars.arrow_down_doublehead,9u#,asc_height#,0); uni "0x21A1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0);
+x0=x1r=.5w+o; bot y0=-d-apex_o; top y1=h;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (0,bot y0a-y0);
+tim1=xpart(p1 intersectiontimes (z1l--(x0a.l,-d)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (rt z1r--(rt x1r,-d)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (lft z1l--(lft x0a.l,-d)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (rt z1r--(rt x1r,-d)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1l..z1rr
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_down_bars:
+bskchar "Downward arrow with two horizontal bars";
+beginchar(chars.arrow_down_bars,9u#,asc_height#,0); uni "0x21DF";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o;
+bot y0=-d-apex_o; top y1=h;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+.5[x2,x3]=.5[x4,x5]=x1; y2=y3; y4=y5; .5[y2,y4]=.5[y0c,y1]; y4-y2=min(3rule_thickness,3u);
+lft x2=lft x4=u;
+y5'r=y4'r=y4r; y5'l=y4'l=y4l; y2'r=y3'r=y3r; y2'l=y3'l=y3l;
+x5'r=x5'l=x3'r=x3'l=x1r; x4'r=x4'l=x2'r=x2'l=x1l;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(2'l,0a.l,2l)---z2l..z2rr---tobl(2'r,2rr,4'l)
+ ---tobl(4'l,2'r,4l)---z4l..z4rr---obl(4'r,4rr,1l)---z1l..z1rr
+ ---obl(5'r,1r,5r)---z5r..z5ll---tobl(5'l,5ll,3'r)---tobl(3'r,5'l,3r)
+ ---z3r..z3ll---obl(3'l,3ll,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr);
+labels(1rr);
+endchar;
+
+iff known chars.arrow_down_two:
+bskchar "Two downward arrow";
+beginchar(chars.arrow_down_two,15.5u#,asc_height#,0); uni "0x21CA";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1r; lft x0=u+arrwidth;
+x2=x3r; rt x2=w-u-arrwidth;
+bot y0=bot y2=-d-apex_o; top y1=top y3=h;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,2rr);
+endchar;
+
+iff known chars.arrow_up_arrow_down:
+bskchar "Upward arrow followed by downward arrow";
+beginchar(chars.arrow_up_arrow_down,14u#,asc_height#,0); uni "0x21C5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1l; x0=u+arrwidth;
+top y0=h+apex_o; bot y1=-d;
+x2=x3r; x2=w-u-arrwidth;
+top y3=h; bot y2=-d-o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_down_arrow_up:
+bskchar "Downward arrow followed by upward arrow";
+beginchar(chars.arrow_down_arrow_up,14u#,asc_height#,0); uni "0x21F5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1l; rt x0=w-u-arrwidth;
+top y0=h+apex_o; bot y1=-d;
+x2=x3r; lft x2=u+arrwidth;
+top y3=h; bot y2=-d-o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_left_squiggly:
+bskchar "Leftward squiggly arrow";
+beginchar(chars.arrow_left_squiggly,17u#,v_center(5u#)); uni "0x21DC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sh; oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x0=u; x1=x0+arrsize+u; rt x6=w-u; y0=y1l=math_axis;
+y3r=y5r=h; y4l=-d; y6=y1; x4=.5[x1,x6]; .5[x3,x5]=x4; .5[x4,x6]=x5;
+sh:=rule_thickness/abs(cosd(angle(z1r-z3r)))-currentbreadth;
+y3l:=y5l:=y3r-sh; y4r:=y4l+sh;
+filldraw reverse sipka(0,1)---obl(1l,0a.r,3l)---obl(3l,1l,4l).more---obl(4l,3l,5l)
+ ---obl(5l,4l,6l).more---z6l..z6r---obl(5r,6r,4r)---obl(4r,5r,3r).more
+ ---obl(3r,4r,1r)---obl(1r,3r,0a.l)---cycle;
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.arrow_right_squiggly:
+bskchar "Rightward squiggly arrow";
+beginchar(chars.arrow_right_squiggly,17u#,v_center(5u#)); uni "0x21DD";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sh; oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+rt x0=w-u; x1=x0-arrsize-u; lft x6=u; y0=y1r=math_axis;
+y3r=y5r=h; y4l=-d; y6=y1; x4=.5[x1,x6]; .5[x3,x5]=x4; .5[x4,x6]=x5;
+sh:=rule_thickness/abs(cosd(angle(z3r-z1r)))-currentbreadth;
+y3l:=y5l:=y3r-sh; y4r:=y4l+sh;
+filldraw sipka(0,1)---obl(1l,0a.l,3l)---obl(3l,1l,4l).more---obl(4l,3l,5l)
+ ---obl(5l,4l,6l).more---z6l..z6r---obl(5r,6r,4r)---obl(4r,5r,3r).more
+ ---obl(3r,4r,1r)---obl(1r,3r,0a.r)---cycle;
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.arrow_right_left_squiggly:
+bskchar "Rightward and leftward squiggly arrow";
+beginchar(chars.arrow_right_left_squiggly,21u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sh; oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90); pos6(rule_thickness,90);
+rt x0=w-u; x1=x0-arrsize-u; lft x2=u; x6=x2+arrsize+u; y0=y1r=y2=y2'r=y6l=math_axis;
+y3r=y5r=h; y4l=-d; x4=.5[x1,x6]; .5[x3,x5]=x4; .5[x4,x6]=x5; x2'=x6;
+sh:=rule_thickness/abs(cosd(angle(z3r-z1r)))-currentbreadth;
+y3l:=y5l:=y3r-sh; y4r:=y4l+sh;
+filldraw sipka(0,1)---obl(1l,0a.l,3l)---obl(3l,1l,4l).more---obl(4l,3l,5l)
+ ---obl(5l,4l,6l).more---z6l..sipka(2,2')..z6r---obl(5r,6r,4r)---obl(4r,5r,3r).more
+ ---obl(3r,4r,1r)---obl(1r,3r,0a.r)---cycle;
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.arrow_left_curly:
+bskchar "Leftward curly arrow";
+beginchar(chars.arrow_left_curly,15u#,v_center(10u#)); uni "0x21AB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,270);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos1'(rule_thickness,90); pos1''(rule_thickness,90);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=w-u; .5[x2,x4]=x1; x4=x5; top y3l=h; bot y5=-d; y2=y4=.5[y1,y3]; x3=x1; x2-x4=y3-y1;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,4l)---z4l..z3l..z2l..z1l
+ ---obl(1''l,1l,5r)---z5rr..z5l---obl(1'l,5l,0a.r)---cycle;
+infill z4r..z3r..z2r..z1r---obl(1''r,1r,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_right_curly:
+bskchar "Rightward curly arrow";
+beginchar(chars.arrow_right_curly,15u#,v_center(10u#)); uni "0x21AC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0); pos3(rule_thickness,270);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos1'(rule_thickness,270); pos1''(rule_thickness,270);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=u; .5[x2,x4]=x1; x4=x5; top y3l=h; bot y5=-d; y2=y4=.5[y1,y3]; x3=x1; x4-x2=y3-y1;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,5l)---z5l..z5rr---obl(1''r,5r,1l)---z1l..z2l..z3l..z4l---obl(1'l,4l,0a.r)---cycle;
+infill z4r..z3r..z2r..z1r---obl(1''l,1r,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_left_down_curly:
+bskchar "Leftward down curly arrow";
+beginchar(chars.arrow_left_down_curly,15u#,v_center(10u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos1'(rule_thickness,90); pos1''(rule_thickness,90);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=w-u; .5[x2,x4]=x1; x4=x5; bot y3l=-d; top y5=h; y2=y4=.5[y1,y3]; x3=x1; x2-x4=y1-y3;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,5l)---z5l..z5rr---obl(1''r,5r,1r)
+ ---z1r..z2l..z3l..z4l---obl(1'l,4l,0a.r)--cycle;
+infill z4r..z3r..z2r..z1l---obl(1''l,1l,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_right_down_curly:
+bskchar "Rightward down curly arrow";
+beginchar(chars.arrow_right_down_curly,15u#,v_center(10u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0); pos3(rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos1'(rule_thickness,270); pos1''(rule_thickness,270);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=u; .5[x2,x4]=x1; x4=x5; bot y3l=-d; top y5=h; y2=y4=.5[y1,y3]; x3=x1; x4-x2=y1-y3;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,4l)---z4l..z3l..z2l..z1r---obl(1''l,1r,5r)
+ ---z5rr..z5l---obl(1'l,5l,0a.r)--cycle;
+infill z4r..z3r..z2r..z1l---obl(1''r,1l,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_arch_left_down:
+bskchar "Arch with left downward arrow";
+beginchar(chars.arrow_arch_left_down,17u#,x_height#,0); uni "0x21B6";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric theta;
+pos1(rule_thickness,0); pos2(rule_thickness,-90); pos3(rule_thickness,180);
+lft x1l=.5u+arrwidth; x0=x1; bot y0=-o; y1=arrsize+1;
+top y2l=h+o; rt x3l=w-u; y3=0; x2=.45[x1,x3];
+p=z3{up}..{left}z2; theta=angle(direction xpart(p intersectiontimes (z1--(w,y1))) of p);
+filldraw sipka(0,1)if y1l>y0a.l:..z1l fi {dir(180-theta)}..{right}z2l..{down}z3l
+ ..z3r{up}..{left}z2r..{dir(360-theta)}z1r..cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_arch_right_down:
+bskchar "Arch with right downward arrow";
+beginchar(chars.arrow_arch_right_down,17u#,x_height#,0); uni "0x21B7";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric theta;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180);
+rt x1r=w-.5u-arrwidth; x0=x1; bot y0=-o; y1=arrsize+1;
+top y2r=h+o; lft x3r=u; y3=0; x2=.45[x1,x3];
+p=z3{up}..{right}z2; theta=angle(direction xpart(p intersectiontimes (z1--(w,y1))) of p);
+filldraw sipka(0,1)..z1l{dir(180-theta)}..{left}z2l..{down}z3l
+..z3r{up}..{right}z2r..{dir(360-theta)}z1r..cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_open_loop_left_down:
+bskchar "Open-loop downward arrow with left tip";
+beginchar(chars.arrow_open_loop_left_down,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+lft x1l=.5u+arrwidth; bot y0=-o; z1=z0+arrsize*dir110;
+top y2l=h+o; x3l=w-4u; y3=0; x2=.45[x1,w-u];
+pos1(rule_thickness,10); pos2(rule_thickness,-90); pos3(rule_thickness,140);
+p=z1{dir110}..z2{right}..{dir-130}z3;
+tim0=xpart(p intersectiontimes ((x2,x_height)--(w,x_height)));
+tim1=xpart(p intersectiontimes ((x2,x_height)--(0,x_height)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir110}..z1'l..{right}z2l..z3'l..{dir-130}z3l
+ ..z3r{dir50}..z3'r..{left}z2r..z1'r..{dir-70}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_open_loop_right_up:
+bskchar "Open-loop upward arrow with right tip";
+beginchar(chars.arrow_open_loop_right_up,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+rt x1r=w-.5u-arrwidth; bot y0=-o; z1=z0+arrsize*dir70;
+top y2r=h+o; x3r=4u; y3=0; x2=.45[x1,u];
+pos1(rule_thickness,170); pos2(rule_thickness,90); pos3(rule_thickness,220);
+p=z1{dir70}..z2{left}..{dir-50}z3;
+tim0=xpart(p intersectiontimes ((x2,x_height)--(0,x_height)));
+tim1=xpart(p intersectiontimes ((x2,x_height)--(w,x_height)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir70}..z1'l..{left}z2l..z3'l..{dir-50}z3l
+ ..z3r{dir130}..z3'r..{right}z2r..z1'r..{dir-110}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_open_loop_up_right:
+bskchar "Open-loop rightward arrow with upper tip";
+beginchar(chars.arrow_open_loop_up_right,15u#,v_center(1.3x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+lft x0=u-o; top y1l=h-arrwidth+.2h; z1=z0+arrsize*dir20;
+rt x2l=w-u; y3=-d+.25x_height+.2h; x3=u; y2=.45[y1,-d+.2h];
+pos1(rule_thickness,100); pos2(rule_thickness,180); pos3(rule_thickness,40);
+p=z1{dir20}..z2{down}..{dir130}z3;
+tim0=xpart(p intersectiontimes ((2/3w,y2)--(2/3w,-2h)));
+tim1=xpart(p intersectiontimes ((2/3w,y2)--(2/3w,h)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir20}..z1'l..{down}z2l..z3'l..{dir130}z3l
+ ..z3r{dir-50}..z3'r..{up}z2r..z1'r..{dir200}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_open_loop_down_left:
+bskchar "Open-loop leftward arrow with lower tip";
+beginchar(chars.arrow_open_loop_down_left,15u#,v_center(1.3x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+rt x0=w-u+o; bot y1l=-d+arrwidth-.2h; z1=z0+arrsize*dir200;
+lft x2l=u; y3=.8h-.25x_height; x3=w-u; y2=.45[y1,.8h];
+pos1(rule_thickness,-80); pos2(rule_thickness,0); pos3(rule_thickness,220);
+p=z1{dir200}..z2{up}..{dir-50}z3;
+tim0=xpart(p intersectiontimes ((1/3w,y2)--(1/3w,2h)));
+tim1=xpart(p intersectiontimes ((1/3w,y2)--(1/3w,-2h)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir200}..z1'l..{up}z2l..z3'l..{dir-50}z3l
+ ..z3r{dir130}..z3'r..{down}z2r..z1'r..{dir20}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_curve_left_down:
+bskchar "Curved arrow with left downward arrow";
+beginchar(chars.arrow_curve_left_down,17u#,v_center(.65x_height#)); uni "0x293A";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; y1=y3; .5[y1-.5arrsize,y2]=math_axis; top y2=h+o-.5rule_thickness;
+x2=.5[w-u,x1]; x3=w-u-.25rule_thickness;
+p0=z3..{left}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{left}z2r..reverse sipka(5,4)..{right}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_right_down:
+bskchar "Curved arrow with right downward arrow";
+beginchar(chars.arrow_curve_right_down,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1-.5arrsize,y2]=math_axis; top y2=h+o-.5rule_thickness;
+x2=.5[u,x1]; x3=u+.25rule_thickness;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{right}z2r..sipka(5,4)..{left}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_left_right_down:
+bskchar "Curved arrow with left-right downward arrow";
+beginchar(chars.arrow_curve_left_right_down,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(.5u#,.5u#);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1-.45arrsize,y2]=math_axis; top y2=h+o-.5rule_thickness;
+x2=.5w; lft x3=u+.5arrwidth;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,90); pos3(rule_thickness,theta-180);
+z4=z1+arrwidth*dir(theta);
+z5=z3+arrwidth*dir(180-theta);
+filldraw z2r{right}..sipka(4,1)..{left}z2l..sipka(5,3)..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_left_up:
+bskchar "Curved arrow with left upward arrow";
+beginchar(chars.arrow_curve_left_up,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; y1=y3; .5[y1+.5arrsize,y2]=math_axis; bot y2=-d-o+.5rule_thickness;
+x2=.5[w-u,x1]; x3=w-u-.25rule_thickness;
+p0=z3..{left}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{left}z2r..sipka(5,4)..{right}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_right_up:
+bskchar "Curved arrow with right upward arrow";
+beginchar(chars.arrow_curve_right_up,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1+.5arrsize,y2]=math_axis; bot y2=-d-o+.5rule_thickness;
+x2=.5[u,x1]; x3=u+.25rule_thickness;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{right}z2r..reverse sipka(5,4)..{left}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_left_right_up:
+bskchar "Curved arrow with left-right upward arrow";
+beginchar(chars.arrow_curve_left_right_up,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(.5u#,.5u#);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1+.45arrsize,y2]=math_axis; bot y2=-d-o+.5rule_thickness;
+x2=.5w; lft x3=u+.5arrwidth;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,theta-180);
+z4=z1+arrwidth*dir(theta);
+z5=z3+arrwidth*dir(180-theta);
+filldraw z2r{right}..reverse sipka(4,1)..{left}z2l..reverse sipka(5,3)..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_left_wavy:
+bskchar "Wavy leftwards arrow";
+beginchar(chars.arrow_left_wavy,19u#,v_center(.65x_height#)); uni "0x219C";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; .5[y1+.5arrsize,y2]=math_axis;
+bot y2=-d-o+.5rule_thickness; y3-y2=.25(x6-x2); y6=y2;
+x2=.5[x3,x1]; x3=.5[x2,x6]; x6=w-u-.25rule_thickness;
+theta:=150;
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+pos4(rule_thickness,theta+90); pos6(rule_thickness,-90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z6r{dir(theta)}..z3r{left}..{left}z2r..sipka(5,4)
+ ..{right}z2l..{right}z3l..{dir(180+theta)}z6l..cycle;
+penlabels(1,2,3,6);
+endchar;
+
+iff known chars.arrow_right_wavy:
+bskchar "Wavy rightwards arrow";
+beginchar(chars.arrow_right_wavy,19u#,v_center(.65x_height#)); uni "0x219D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; .5[y1+.5arrsize,y2]=math_axis;
+bot y2=-d-o+.5rule_thickness; y3-y2=.25(x2-x6); y6=y2;
+x2=.5[x3,x1]; x3=.5[x2,x6]; x6=u+.25rule_thickness;
+theta:=30;
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+pos4(rule_thickness,theta+90); pos6(rule_thickness,-90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z6r{dir(theta)}..z3r{right}..{right}z2r..reverse sipka(5,4)
+ ..{left}z2l..{left}z3l..{dir(180+theta)}z6l..cycle;
+penlabels(1,2,3,6);
+endchar;
+
+iff known chars.arrow_left_right_wavy:
+bskchar "Wavy left-right arrow";
+beginchar(chars.arrow_left_right_wavy,19u#,v_center(.65x_height#)); uni "0x21AD";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; .5[y1+.5arrsize,y2]=math_axis;
+bot y2=-d-o+rule_thickness; .5[y2,y3]=math_axis;
+x2=.5[x3,x1]; x3=.5[x2,x6]; x6=w-u-.5arrwidth; .5[y6,y1]=math_axis;
+theta:=150;
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+pos4(rule_thickness,theta+90); pos6(rule_thickness,-90); pos7(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+z7=z6+.25arrwidth*dir(theta); z8=z6+.75arrwidth*dir(theta-180);
+p0=sipka(8,7);
+p1=sipka(5,4);
+p2=z8a{z6-z8}..{left}z3..{left}z2..{z5-z1}z5a;
+pos9(rule_thickness,angle(direction 1.5 of p2)+90); z9=point 1.5 of p2;
+filldraw p0..{left}z3r..z9r..{left}z2r..p1..{right}z2l..z9l..{right}z3l..cycle;
+penlabels(1,2,3,6,9);
+endchar;
+
+iff known chars.math_contradiction:
+bskchar "Contradiction symbol";
+beginchar(chars.math_contradiction,10u#,asc_height#,asc_depth#); uni "0x21AF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta; oblu.more:=2oblu;
+theta=60;
+pos1(rule_thickness,theta-90); pos2(rule_thickness,-80); pos3(rule_thickness,theta-90);
+bot y0=-d-o; x0=3u; x3=.5w; top y3l=h;
+rt x1r=w-u; z1=z0+whatever*dir theta;
+x2l=u; z2=z1+whatever*dir 190;
+p0=sipka(0,1);
+z1'=whatever[z0a.l,z1l]=z2r+whatever*dir10;
+z2'=whatever[z2l,z1l]=z3r+whatever*(z3l-z2r);
+z3'=whatever[z2l,z1l]=whatever[z1r,z0a.r];
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw p0---obl(1',0a.l,2r).more---obl(2r,1',3l)---z3ll..z3r
+ ---obl(2',3r,3').more---z3'..z1r---cycle;
+penlabels(1,2,3); labels(1',2',3');
+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.harpoon_right_up_left_down:
+bskchar "Rightward up harpoon above leftward down harpoon";
+beginchar(chars.harpoon_right_up_left_down,15u#,v_center(8u#)); uni "0x21CC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+rt x0=rt x3=w-u; x1=x2=w-x0; y0=y1r; y2=y3l; .5[y0,y2]=math_axis; y1l-y3r=2u;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw subpath (0,4) of sipka(0,1)...{left}z0a.l---z1l..z1rr---cycle;
+filldraw subpath (0,4) of sipka(2,3)...{right}z2a.l---z3rr..z3l---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.harpoon_left_up_right_down:
+bskchar "Leftward up harpoon above rightward down harpoon";
+beginchar(chars.harpoon_left_up_right_down,15u#,v_center(8u#)); uni "0x21CB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+rt x0=rt x3=w-u; x1=x2=w-x0; y0=y1r; y2=y3l; .5[y0,y2]=math_axis; y1r-y3l=-2u;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw subpath (4,infinity) of sipka(0,1)---z1l..z1rr---cycle;
+filldraw subpath (4,infinity) of sipka(2,3)---z3rr..z3l---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.harpoon_up_left:
+bskchar "Upward left harpoon";
+beginchar(chars.harpoon_up_left,6u#,asc_height#,0); uni "0x21BF";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1l; rt x1r=w-u;
+top y0=h+apex_o; bot y1=-d;
+bskpoints(1,0,hair,hair);
+filldraw subpath(0,4) of sipka(0,1)...{down}z0a.l---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_up_right:
+bskchar "Upward right harpoon";
+beginchar(chars.harpoon_up_right,6u#,asc_height#,0); uni "0x21BE";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+lft x0=lft x1l=u;
+top y0=h+apex_o; bot y1=-d;
+bskpoints(1,0,hair,hair);
+filldraw subpath(4,infinity) of sipka(0,1)---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_down_left:
+bskchar "Downward left harpoon";
+beginchar(chars.harpoon_down_left,6u#,asc_height#,0); uni "0x21C3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r; rt x1r=w-u;
+top y0=-d-apex_o; bot y1=h;
+bskpoints(1,0,hair,hair);
+filldraw subpath(4,infinity) of sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_down_right:
+bskchar "Downward right harpoon";
+beginchar(chars.harpoon_down_right,6u#,asc_height#,0); uni "0x21C2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r; lft x1l=u;
+top y0=-d-apex_o; bot y1=h;
+bskpoints(1,0,hair,hair);
+filldraw subpath(0,4) of sipka(0,1)...{up}z0a.l---z1l..z1rr---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_left_right_long:
+bskchar "Long left-right arrow";
+beginchar(chars.arrow_left_right_long,25u#,v_center(5u#)); uni "0x27F7";
+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_left_right_not:
+bskchar "Left-right arrow with negation";
+beginchar(chars.arrow_left_right_not,18u#,v_center(5u#)); uni "0x21AE";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1=math_axis;
+.5[x2,x3]=.5[x0,x1]; .5[y2,y3]=y0; x3-x2=.5(y3-y2); top y3=h;
+pos2(rule_thickness,angle(z2-z3)+90); pos3(rule_thickness,angle(z2-z3)+90);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r).more
+ ---sipka(1,0)---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r).more---cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_left_right_not_vert:
+bskchar "Left-right arrow with vertical negation";
+beginchar(chars.arrow_left_right_not_vert,18u#,v_center(5u#)); uni "0x21F9";
+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;
+x2=x3=.5[x0,x1]; .5[y2,y3]=y0; top y3=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r)
+ ---sipka(1,0)---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_left_right_not_vert_double:
+bskchar "Left-right arrow with double vertical negation";
+beginchar(chars.arrow_left_right_not_vert_double,18u#,v_center(5u#)); uni "0x21FC";
+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;
+x2=x3; .5[x2,x4]=.5[x0,x1]; x4=x5; x4-x2=min(3rule_thickness,3u);
+.5[y2,y3]=.5[y4,y5]=y0; top y3=top y5=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y2'l=y2'r=y4'l=y4'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y5'l=y5'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+x4'l=x5'l=x4l; x4'r=x5'r=x4r;
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---tobl(3'r,3r,1r)
+ ---tobl(5'l,3'r,5l)---z5ll..z5r---obl(5'r,5r,1r)
+ ---sipka(1,0)---obl(4'r,1a.l,4r)---z4rr..z4l---tobl(4'l,4l,2'r)
+ ---tobl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.arrow_left_right_bar:
+bskchar "Left-right arrow above bar";
+beginchar(chars.arrow_left_right_bar,18u#,v_center(5u#+min(3rule_thickness#,3u))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=lft x2=u; x1=x3=w-x0; y0=y1=math_axis+2rule_thickness; bot y2l=bot y3l=-d;
+filldraw sipka(0,1)---sipka(1,0)---cycle;
+filldraw bskrule(2,3,hair,hair);
+labels(2,3);
+endchar;
+
+iff known chars.arrow_left_right_bar_top:
+bskchar "Left-right arrow below bar";
+beginchar(chars.arrow_left_right_bar_top,18u#,v_center(5u#+min(3rule_thickness#,3u))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=lft x2=u; x1=x3=w-x0; y0=y1=math_axis-2rule_thickness; top y2r=top y3r=h;
+filldraw sipka(0,1)---sipka(1,0)---cycle;
+filldraw bskrule(2,3,hair,hair);
+labels(2,3);
+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_up_down_bar_bot:
+bskchar "Up-down arrow with bottom bar";
+beginchar(chars.arrow_up_down_bar_bot,9u#,asc_height#,0); uni "0x21A8";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos0(rule_thickness,0);
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+x0=x1l=.5w; top y0=h+apex_o; bot y1=-d-apex_o;
+lft x2=u; rt x3=w-u; y2l=y3l=y1;
+p0=sipka(1,0);
+p1=reverse bskrule(2,3,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+oblu:=2oblu;
+filldraw sipka(0,1)---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+penlabels(2,3);
+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.arrow_down_start:
+bskchar "Downward arrow with starting bar";
+beginchar(chars.arrow_down_start,9u#,asc_height#,0); uni "0x21A7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+x0=x1r=.5w+o;
+top y2l=top y3l=h; lft x2=u; x3=w-x2;
+bot y0=-d-apex_o; y1=y2r;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2r)---z2r..z2l---z3l..z3r---obl(1r,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_start:
+bskchar "Rightward arrow with starting bar";
+beginchar(chars.arrow_right_start,15u#,v_center(5u#)); uni "0x21A6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=lft x3l=u; y2=y0e; y3=y0b; x1=x3r;
+filldraw sipka(0,1)---obl(1l,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1r,2r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_start_long:
+bskchar "Long rightward arrow with starting bar";
+beginchar(chars.arrow_right_start_long,22u#,v_center(5u#)); uni "0x27FC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=lft x3l=u; y2=y0e; y3=y0b; x1=x3r;
+filldraw sipka(0,1)---obl(1l,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1r,2r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_stop:
+bskchar "Rightward arrow with stopping bar";
+beginchar(chars.arrow_right_stop,15u#,v_center(5u#)); uni "0x21E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+x2l=x3l=x0; y2=y0e; y3=y0b;
+bskpoints(1,0,hair,hair);
+p0=sipka(0,1);
+p1=reverse bskrule(2,3,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---z1l..z1rr---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_start:
+bskchar "Leftward arrow with starting bar";
+beginchar(chars.arrow_left_start,15u#,v_center(5u#)); uni "0x21A4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,180); pos3(rule_thickness,180);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=rt x3l=w-u; y2=y0b; y3=y0e; x1=x3r;
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2r..z2l---z3l..z3r---obl(1l,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_start_long:
+bskchar "Long leftward arrow with starting bar";
+beginchar(chars.arrow_left_start_long,22u#,v_center(5u#)); uni "0x27FB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,180); pos3(rule_thickness,180);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=rt x3l=w-u; y2=y0b; y3=y0e; x1=x3r;
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2r..z2l---z3l..z3r---obl(1l,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_stop:
+bskchar "Leftward arrow with stopping bar";
+beginchar(chars.arrow_left_stop,15u#,v_center(5u#)); uni "0x21E4";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+x2l=x3l=x0; y2=y0b; y3=y0e;
+bskpoints(1,0,hair,hair);
+p0=sipka(0,1);
+p1=reverse bskrule(2,3,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---z1rr..z1l---cycle;
+penlabels(2,3); labels(1rr);
+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_double_NE:
+bskchar "Double northeast arrow";
+beginchar(chars.arrow_double_NE,20u#,asc_height#,asc_depth#); uni "0x21D7";
+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);
+z2-z3=(0,-dbf) rotated angle(z0-z1); bot y2=-d; lft x3=u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_NNE:
+bskchar "Northnortheast arrow";
+beginchar(chars.arrow_NNE,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-2u; 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_SE_corner:
+bskchar "Southeast arrow to corner";
+beginchar(chars.arrow_SE_corner,21u#+hair#,asc_height#,asc_depth#+u#); uni "0x21F2";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-2u; lft x1r=u+.5(rule_thickness-.5currentbreadth);
+bot y0=-d+u; top y1r=h;
+pos1(rule_thickness,angle(z0-z1r)+90);
+pos2(hair,-90); pos3(hair,-90); pos4(hair,180);
+lft x4r=rt x0+tiny; top y4=h; bot y2r=bot y3r=-d; x3=x4l; lft x2=u; x3l:=x4r;
+bskpoints(1,0,hair,hair); bskpoints(4,3,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw z2r---obl(3r,2r,4l)---z4l..z4rr---obl(3l,4r,2l)---z2l..cycle;
+penlabels(2,3,4); labels(1rr,4rr);
+endchar;
+
+iff known chars.arrow_double_SE:
+bskchar "Double southeast arrow";
+beginchar(chars.arrow_double_SE,20u#,asc_height#,asc_depth#); uni "0x21D8";
+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);
+z2-z3=(0,-dbf) rotated angle(z0-z1); top y3=h; lft x2=u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_SSE:
+bskchar "Southsoutheast arrow";
+beginchar(chars.arrow_SSE,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-2u; 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_NW_corner:
+bskchar "Northwest arrow to corner";
+beginchar(chars.arrow_NW_corner,21u#+hair#,asc_height#+u#,asc_depth#); uni "0x21F1";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; rt x1l=w-u;
+top y0=h-u; bot y1l=-d+.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1l)+90);
+pos2(hair,90); pos3(hair,90); pos4(hair,0);
+rt x4r=lft x0-tiny; bot y4=-d; top y2r=top y3r=h; x3=x4l; rt x2=w-u; x3l:=x4r;
+bskpoints(1,0,hair,hair); bskpoints(4,3,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw z2r---obl(3r,2r,4l)---z4l..z4rr---obl(3l,4r,2l)---z2l..cycle;
+penlabels(2,3,4); labels(1rr,4rr);
+endchar;
+
+iff known chars.arrow_NW_line_top:
+bskchar "Northwest arrow to top line";
+beginchar(chars.arrow_NW_line_top,21u#+hair#,asc_height#+u#,asc_depth#); uni "0x21B8";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; rt x1l=w-u;
+top y0=h-u; bot y1l=-d+.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1l)+90);
+pos2(hair,90); pos3(hair,90);
+top y2r=top y3r=h; lft x3=u; rt x2=w-u;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw bskrule(2,3,hair,hair)..cycle;
+penlabels(2,3,4); labels(1rr,2rr,3ll);
+endchar;
+
+iff known chars.arrow_double_NW:
+bskchar "Double northwest arrow";
+beginchar(chars.arrow_double_NW,20u#,asc_height#,asc_depth#); uni "0x21D6";
+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);
+z2-z3=(0,-dbf) rotated angle(z0-z1); bot y3=-d; rt x2=w-u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_NNW:
+bskchar "Northnorthwest arrow";
+beginchar(chars.arrow_NNW,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; 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.arrow_double_SW:
+bskchar "Double southwest arrow";
+beginchar(chars.arrow_double_SW,20u#,asc_height#,asc_depth#); uni "0x21D9";
+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);
+z2-z3=(0,-dbf) rotated angle(z0-z1); top y2=h; rt x3=w-u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_SSW:
+bskchar "Southsouthwest arrow";
+beginchar(chars.arrow_SSW,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; 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.arrow_clockwise:
+bskchar "Clockwise arrow";
+beginchar(chars.arrow_clockwise,16u#,asc_height#,desc_depth#); uni "0x21BB";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8=h-arrwidth; y8-y4=x2-x6;
+circle_points(rule_thickness);
+p0:=draw_circle;
+p1:=draw_circle.l;
+p2:=draw_circle.r;
+theta=angle(direction 7.5 of p0);
+pos10(rule_thickness,theta+90);
+z9+arrsize*dir(theta+180)+(rule_thickness-currentbreadth)*dir(theta+90)=point 7.5 of p0;
+z9=z10l+2u*dir(theta);
+filldraw subpath(1,7) of p1..sipka(9,10).. subpath(7,1) of p2..cycle;
+endchar;
+
+iff known chars.arrow_counterclockwise:
+bskchar "Counterclockwise arrow";
+beginchar(chars.arrow_counterclockwise,16u#,asc_height#,desc_depth#); uni "0x21BA";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8=h-arrwidth; y8-y4=x2-x6;
+circle_points(rule_thickness);
+p0:=draw_circle;
+p1:=draw_circle.l;
+p2:=draw_circle.r;
+theta=angle(direction .5 of p0)+180;
+pos10(rule_thickness,theta+90);
+z9+arrsize*dir(theta+180)+(rule_thickness-currentbreadth)*dir(theta+90)=point .5 of p0;
+z9=z10l+2u*dir(theta);
+filldraw sipka(9,10)..subpath(1,7) of p1..subpath(7,1) of p2..cycle;
+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;
+x0=.5w; x2=w+5u+2letter_fit;
+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);
+italcorr .75asc_height#*slant;
+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');
+math_fit(0,u#);
+endchar;
+
+iff known chars.math_weierstrass_p:
+bskchar "Weierstrass p";
+beginchar(chars.math_weierstrass_p,12u#,x_height#,desc_depth#); uni "0x2118";
+italcorr .5x_height#*slant;
+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);
+math_fit(0,ic#);
+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_logor_dot:
+bskchar "Logical or sign with dot";
+beginchar(chars.math_logor_dot,12u#,asc_height#,0); uni "0x2A52";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; bot y0=-d-apex_o; y1l=.8h; y3=h;
+logor(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_logor_dot_inside:
+bskchar "Logical or sign with dot inside";
+beginchar(chars.math_logor_dot_inside,12u#,.8asc_height#,0); uni "0x27C7";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; bot y0=-d-apex_o; y3=h-dot_size;
+logor(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_logor_intersect:
+bskchar "Two intersecting logical ors";
+beginchar(chars.math_logor_intersect,16u#,.8asc_height#,0); uni "0x2A56";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+x0=.5w-2u; x3=.5w+2u; bot y0=bot y3=-d-apex_o; lft x4l=5u;
+logor(0,1,2).nodraw;
+p0:=_logor; p2:=z2l--z0l;
+logor(3,4,5).nodraw;
+p1:=_logor;
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3l
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_logor_intersect_nary:
+bskchar "N-ary two intersecting logical ors";
+beginchar(chars.math_logor_intersect_nary,20u#,v_center(10/6dh#)); uni "0x2A08";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+{{ save rule_thickness; rule_thickness:=stem;
+ x0=.5w-2u; x3=.5w+2u; bot y0=bot y3=-d-apex_o; lft x4l=5u;
+ logor(0,1,2).nodraw;
+ p0:=_logor; p2:=z2l--z0l;
+ logor(3,4,5).nodraw;
+ p1:=_logor;
+}};
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3l
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_logxor:
+bskchar "Logical xor sign";
+beginchar(chars.math_logxor,12u#,asc_height#,0); uni "0x22BB";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; bot y0=.2asc_height-apex_o;
+lft x3=u; x4=w-x3; bot y3l=bot y4l=-d;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_vee_small_underbar:
+bskchar "Small vee sign with underbar";
+beginchar(chars.math_vee_small_underbar,12u#,x_height#,0); uni "0x2A61";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; bot y0=.2asc_height-apex_o; x1l=3u;
+lft x3=u; x4=w-x3; bot y3l=bot y4l=-d;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_lognor:
+bskchar "Logical nor sign";
+beginchar(chars.math_lognor,12u#,asc_height#,0); uni "0x22BD";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; bot y0=-apex_o; y1l=.8asc_height;
+lft x3=u; x4=w-x3; top y3r=top y4r=h;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_logor_doublebar:
+bskchar "Logical or sign with double bar above";
+beginchar(chars.math_logor_doublebar,12u#,asc_height#+.3x_height#,0); uni "0x2A62";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=-d-apex_o; y1l=.8asc_height;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y5r=top y6r=h; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y5-y3=.3x_height;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+endchar;
+
+iff known chars.math_logor_double_underbar:
+bskchar "Logical or sign with double underbar";
+beginchar(chars.math_logor_double_underbar,12u#,asc_height#+.3x_height#,0); uni "0x2A63";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=.2asc_height+.3x_height-apex_o; y1l=h;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y5l=bot y6l=0; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y3-y5=.3x_height;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+endchar;
+
+iff known chars.math_vee_in_vee:
+bskchar "Vee in vee sign";
+beginchar(chars.math_vee_in_vee,12u#,.8asc_height#,0); uni "0x2A54";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; bot y0=-d-apex_o;
+y3-y0=max(5u,2rule_thickness);
+logor(0,1,2);
+z4l=z3l+whatever*(z1r-z0''');
+logor(3,4,5);
+endchar;
+
+iff known chars.math_lattice_sup_uni:
+bskchar "Lattice supremum sign (for Unicode)";
+beginchar(chars.math_lattice_sup_uni,14u#,v_center(10/6dh#)); uni "0x22C1";
+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_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_logor_sloping:
+bskchar "Sloping logical or sign";
+beginchar(chars.math_logor_sloping,12u#,.8asc_height#,0); uni "0x2A57";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta;
+oblu:=2oblu;
+pos0(rule_thickness,0); pos1(rule_thickness,0);
+lft x0l=lft x1l=u; bot y0=0; y2r+.25rule_thickness=y1=h; rt x2r=w-u;
+theta:=angle(z2r-z0l);
+pos2(rule_thickness,theta-90);
+bskpoints(0,1,hair,hair);
+z0'=z0r+(rule_thickness-currentbreadth)*dir(theta+22);
+y0''=y0; z0''=z2l+whatever*(z2r-z0');
+x0'''=x1r; z0'''=whatever[z2l,z0''];
+filldraw z1ll---z0l..z0r..z0'---z2r..z2l---obl(0''',2l,1r)---z1r..cycle;
+penlabels(0,1,2); labels(0',0'',0''');
+endchar;
+
+iff known chars.math_logor_mid:
+bskchar "Logical or sign with middle stem";
+beginchar(chars.math_logor_mid,12u#,.8asc_height#,0); uni "0x2A5B";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,180);pos4(rule_thickness,180);
+x0=x3=x4=.5w; bot y0=-d-apex_o; y3=y0; y4=y1;
+logor(0,1,2).nodraw;
+p0:=_logor;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_logor_bared:
+bskchar "Logical or bared sign";
+beginchar(chars.math_logor_bared,12u#,.8asc_height#,0); uni "0x2A5D";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+x0=.5w; bot y0=-d-apex_o;
+lft x3=u; rt x4=w-u; y3=y4=1/3[math_axis,h];
+logor(0,1,2).nodraw;
+p0=_logor;
+p1=z4r--z3r;
+p2=z3l--z4l;
+y5l=y4l; y5r=y4r;
+z5l=whatever[point 0 of p0,point infinity of p0];
+z5r=whatever[point 0 of p0,point infinity of p0];
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath(3,4) of p0 intersectiontimes p2;
+(tim6-4,tim7)=subpath(4,infinity) of p0 intersectiontimes p2;
+(tim8-4,tim9)=subpath(4,infinity) of p0 intersectiontimes p1;
+(tim10-3,tim11)=subpath(3,4) of p0 intersectiontimes p1;
+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,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ---obl(5l,2l,4l)---z4l..z4r---obl(5r,4r,0r)---cycle;
+infill subpath(rundy(p0,tim10),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p1,tim9),rundy(p1,tim11).zpet) of p1..cycle;
+penlabels(3,4,5);
+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_logand_dot:
+bskchar "Logical and sign with dot";
+beginchar(chars.math_logand_dot,12u#,asc_height#,0); uni "0x2A51";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=.8h+apex_o; y3=h;
+logand(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_logand_dot_inside:
+bskchar "Logical and sign with dot inside";
+beginchar(chars.math_logand_dot_inside,12u#,.8asc_height#,0); uni "0x27D1";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=h+apex_o; y3=dot_size;
+logand(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_merge:
+bskchar "Merge sign";
+beginchar(chars.math_merge,16u#,.8asc_height#,0); uni "0x2A55";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+x0=.5w-2u; x3=.5w+2u; top y0=top y3=h+apex_o; lft x4r=5u;
+logand(0,1,2).nodraw;
+p0:=_logand; p2:=z2l--z0r;
+logand(3,4,5).nodraw;
+p1:=_logand;
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3r
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_merge_nary:
+bskchar "N-ary merge sign";
+beginchar(chars.math_merge_nary,20u#,v_center(10/6dh#)); uni "0x2A07";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+{{ save rule_thickness; rule_thickness:=stem;
+ x0=.5w-2u; x3=.5w+2u; top y0=top y3=h+apex_o; lft x4r=5u;
+ logand(0,1,2).nodraw;
+ p0:=_logand; p2:=z2l--z0r;
+ logand(3,4,5).nodraw;
+ p1:=_logand;
+}};
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3r
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_lognand:
+bskchar "Logical nand sign";
+beginchar(chars.math_lognand,12u#,asc_height#,0); uni "0x22BC";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=.8h+apex_o;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+top y3r=top y4r=h; lft x3=u; x4=w-x3;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+endchar;
+
+iff known chars.math_logand_doublebar:
+bskchar "Logical and sign with double bar above";
+beginchar(chars.math_logand_doublebar,12u#,asc_height#+.3x_height#,0); uni "0x2A5E";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=.8asc_height+apex_o;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y5r=top y6r=h; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y5-y3=.3x_height;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+endchar;
+
+iff known chars.math_logand_underbar:
+bskchar "Logical and sign with underbar";
+beginchar(chars.math_logand_underbar,12u#,asc_height#,0); uni "0x2A5F";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o; y1r=.2asc_height;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+bot y3l=0; lft x3=u; x4=w-x3; y3=y4;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_logand_double_underbar:
+bskchar "Logical and sign with double underbar";
+beginchar(chars.math_logand_double_underbar,12u#,asc_height#+.3x_height#,0); uni "0x2A60";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o; y1r=.2asc_height+.3x_height;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y5l=bot y6l=0; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y3-y5=.3x_height;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_logand_bared:
+bskchar "Logical and bared sign";
+beginchar(chars.math_logand_bared,12u#,.8asc_height#,0); uni "0x2A5C";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; top y0=h+apex_o;
+lft x3=u; rt x4=w-u; y3=y4=1/3[math_axis,-d];
+logand(0,1,2).nodraw;
+p0=_logand;
+p1=z4r--z3r;
+p2=z3l--z4l;
+y5l=y4l; y5r=y4r;
+z5l=whatever[point 0 of p0,point infinity of p0];
+z5r=whatever[point 0 of p0,point infinity of p0];
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath(3,4) of p0 intersectiontimes p2;
+(tim6-4,tim7)=subpath(4,infinity) of p0 intersectiontimes p2;
+(tim8-4,tim9)=subpath(4,infinity) of p0 intersectiontimes p1;
+(tim10-3,tim11)=subpath(3,4) of p0 intersectiontimes p1;
+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,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ---obl(5l,2l,4l)---z4l..z4r---obl(5r,4r,0r)---cycle;
+infill subpath(rundy(p0,tim10),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p1,tim9),rundy(p1,tim11).zpet) of p1..cycle;
+penlabels(3,4,5);
+endchar;
+
+iff known chars.math_wedge_in_wedge:
+bskchar "Wedge in wedge sign";
+beginchar(chars.math_wedge_in_wedge,12u#,.8asc_height#,0); uni "0x2A53";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=h+apex_o;
+y0-y3=max(5u,2rule_thickness);
+logand(0,1,2);
+z4r=z3r+whatever*(z1l-z0''');
+logand(3,4,5);
+endchar;
+
+iff known chars.math_lattice_inf_uni:
+bskchar "Lattice infinum sign (for Unicode)";
+beginchar(chars.math_lattice_inf_uni,14u#,v_center(10/6dh#)); uni "0x22C0";
+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_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_logand_sloping:
+bskchar "Sloping logical and sign";
+beginchar(chars.math_logand_sloping,12u#,.8asc_height#,0); uni "0x2A58";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta;
+oblu:=2oblu;
+pos0(rule_thickness,0); pos2(rule_thickness,0);
+rt x0r=rt x2r=w-u; top y0=h; y1l-.25rule_thickness=y2=0; lft x1l=u;
+theta:=angle(z1l-z0l);
+pos1(rule_thickness,theta+90);
+bskpoints(2,0,hair,hair);
+z0'=z0l+(rule_thickness-currentbreadth)*dir(theta+22);
+y0''=y0; z0''=z1r+whatever*(z1l-z0');
+x0'''=x2l; z0'''=whatever[z1r,z0''];
+filldraw z2rr---z0r..z0l..z0'---z1l..z1r---obl(0''',1r,2l)---z2l..cycle;
+penlabels(0,1,2); labels(0',0'',0''');
+endchar;
+
+iff known chars.math_logand_mid:
+bskchar "Logical and sign with middle stem";
+beginchar(chars.math_logand_mid,12u#,.8asc_height#,0); uni "0x2A5A";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,180);pos4(rule_thickness,180);
+x0=x3=x4=.5w; top y0=h+apex_o; y3=y0; y4=y1;
+logand(0,1,2).nodraw;
+p0:=_logand;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_logand_logor_overlap:
+bskchar "Logical and overlaping logical or sign";
+beginchar(chars.math_logand_logor_overlap,12u#,asc_height#,0); uni "0x2A59";
+italcorr h#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=.8asc_height+apex_o; bot y3=.2asc_height-apex_o;
+logand(0,1,2).nodraw; logor(3,4,5).nodraw;
+p0:=_logand; p1:=_logor;
+p2:=point 0 of p1--point infinity of p1;
+p3:=point infinity of p0--point 0 of p0;
+(tim0,tim1-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim2,tim3)=p0 intersectiontimes subpath(0,2) of p1;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p1;
+(tim6-3,tim7)=subpath(3,5) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p2;
+(tim10,tim11)=p2 intersectiontimes p3;
+(tim12-4,tim13)=subpath(4,6) of p1 intersectiontimes p3;
+(tim14-3,tim15-3)=subpath(3,4) of p0 intersectiontimes subpath(3,4) of p1;
+(tim16-5,tim17-5)=subpath(5,6) of p0 intersectiontimes subpath(5,6) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..reverse subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(0,rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p0,tim8),infinity) of p0
+ ..subpath(0,rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..reverse subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(rundy(p3,tim13),infinity) of p3..cycle;
+oblu:=1.5f_obl;
+infill subpath(rundy(p1,tim15),rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(p0,tim16).zpet,rundy(p0,tim14)) of p0..cycle;
+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_not:
+bskchar "Negated less than sign";
+beginchar(chars.math_less_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x226E";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis; y1r=math_axis+4u-.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---z4r..z4ll---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_less_not_vert:
+bskchar "Negated less than sign with vertical stroke";
+beginchar(chars.math_less_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=math_axis; y1r=math_axis+4u-.5rule_thickness;
+top y3=h; x4=x3=.55w; y4=-d;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bskpoints(3,4,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l)---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---z4r..z4ll---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_less_closed:
+bskchar "Closed less than sign";
+beginchar(chars.math_less_closed,15u#,v_center(8u#)); uni "0x2AA6";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,180);
+lft x0l=u; rt x1r=w-4u; y0=y3=math_axis; rt x3l=w-u;
+less(0,1,2).nodraw;
+filldraw subpath(0,2) of _less---z1l...{down}z3l...point infinity of _less---cycle;
+infill subpath(3,6) of _less...{up}z3r...cycle;
+penlabels(3);
+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=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+filldraw bskrule(3,4,hair,hair);
+less(0,1,2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_eq_double_slanted:
+bskchar "Less than or double slanted equal to sign";
+beginchar(chars.math_less_eq_double_slanted,12u#,v_center(11u#+.45x_height#)); uni "0x2AF9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y4=-d+.5rule_thickness; y5-y3=y6-y4=.45x_height; y0-y3=y2-y4;
+less(0,1,2);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_less_eq_double:
+bskchar "Less than or double equal to sign";
+beginchar(chars.math_less_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2266";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+less(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_less_not_eq_double:
+bskchar "Less than and not double equal to sign";
+beginchar(chars.math_less_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2268";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+less(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top rt z7=(x2-2u,y2l-rule_thickness); .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl; oblu.more:=2f_obl;
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r).more---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l).more---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_less_eq_double_not:
+bskchar "Negated less than or double equal to sign";
+beginchar(chars.math_less_eq_double_not,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=h-4u-2rule_thickness; y1r=h-2.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,7'r)---obl(7'r,6'r,8r)---z8r
+ ..z8ll---obl(8'r,8l,4r)---z4r..z4l---obl(8'l,4l,7l)---z7l..z7rr
+ ---obl(7'l,7r,6'l)---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)
+ ---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_less_vert_not_eq_double:
+bskchar "Less than and vertical not double equal to sign";
+beginchar(chars.math_less_vert_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+less(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x7=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl;
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r)---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r)---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l)---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l)---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_less_eq_double_not_vert:
+bskchar "Negated less than or double equal to sign with vertical stroke";
+beginchar(chars.math_less_eq_double_not_vert,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=h-4u-2rule_thickness; y1r=h-2.5rule_thickness;
+top y3=h; x4=x3=.5w; y4=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l)---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,7'r)---obl(7'r,6'r,8r)---z8r
+ ..z8ll---obl(8'r,8l,4r)---z4r..z4l---obl(8'l,4l,7l)---z7l..z7rr
+ ---obl(7'l,7r,6'l)---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)
+ ---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_eq_double_less:
+bskchar "Double equal to or less than sign";
+beginchar(chars.math_eq_double_less,12u#,v_center(11u#+.45x_height#)); uni "0x2A99";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r-y0=4u-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5r=y6r=h; y5-y3=y6-y4=.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+less(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_sl_eq_double_less:
+bskchar "Double slanted equal to or less than sign";
+beginchar(chars.math_eq_double_less,12u#,v_center(11u#+.45x_height#)); uni "0x2A9B";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r-y0=4u-.5rule_thickness;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y6=h-.5rule_thickness; y5-y3=y6-y4=.45x_height;
+less(0,1,2);
+y6-y5=y1-y0;
+pos3(rule_thickness,angle(z5-z6)+90); pos4(rule_thickness,angle(z5-z6)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_sim_less_eq_double:
+bskchar "Similar to or less than or double equal to sign";
+beginchar(chars.math_sim_less_eq_double,12u#,v_center(11u#+.9x_height#-rule_thickness#)); uni "0x2A9F";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=math_axis; y1r-y0=4u-.5rule_thickness;
+top y8=h;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+less(0,1,2);
+vlnka(7,8);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_less_eq_slanted:
+bskchar "Less than or slanted equal to sign";
+beginchar(chars.math_less_eq_slanted,12u#,v_center(11u#)); uni "0x2A7D";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_closed_eq_sl:
+bskchar "Closed less than or slanted equal to sign";
+beginchar(chars.math_less_closed_eq_sl,15u#,v_center(12u#)); uni "0x2AA8";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,180);
+lft x0l=u; rt x1r=w-4u; y0=y3=h-4u; rt x3l=w-u;
+less(0,1,2).nodraw;
+filldraw subpath(0,2) of _less---z1l...{down}z3l...point infinity of _less---cycle;
+infill subpath(3,6) of _less...{up}z3r...cycle;
+lft x4=u; x5=x3; y5=-d+.5rule_thickness; z4=z5+whatever*(z0l-z2l);
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+filldraw bskrule(4,5,hair,hair);
+penlabels(3,4,5);
+endchar;
+
+iff known chars.math_less_eq_slanted_dot:
+bskchar "Less than or slanted equal to sign with dot inside";
+beginchar(chars.math_less_eq_slanted_dot,12u#,v_center(11u#)); uni "0x2A7F";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=y5=h-4u; rt x5=w-u-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_eq_slanted_dot_left:
+bskchar "Less than or slanted equal to sign with dot above left";
+beginchar(chars.math_less_eq_slanted_dot_left,12u#,v_center(11u#)); uni "0x2A81";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u; lft x5=u+.5dot_size; top y5=h-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_eq_slanted_dot_right:
+bskchar "Less than or slanted equal to sign with dot above right";
+beginchar(chars.math_less_eq_slanted_dot_right,12u#,5.5u#+1.5dot_size#+math_axis#,5.5u#-math_axis#); uni "0x2A83";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u-1.5dot_size; y1r=h-1.5dot_size-.5rule_thickness;
+rt x5=w-u-dot_size; y5=h-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_less:
+bskchar "Equal to or less than sign";
+beginchar(chars.math_eq_less,12u#,v_center(11u#)); uni "0x22DC";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r=y0+4u-.5rule_thickness;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y3=y4=h-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_slanted_less:
+bskchar "Slanted equal to or less than sign";
+beginchar(chars.math_eq_slanted_less,12u#,v_center(11u#)); uni "0x2A95";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r=y0+4u-.5rule_thickness;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=h-.5rule_thickness; y0-y3=y1-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_slanted_less_dot:
+bskchar "Slanted equal to or less than sign with dot inside";
+beginchar(chars.math_eq_slanted_less_dot,12u#,v_center(11u#)); uni "0x2A97";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=y5=-d+4u; y1r=y0+4u-.5rule_thickness; rt x5=w-u-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=h-.5rule_thickness; y0-y3=y1-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+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_much_less_underbar:
+bskchar "Much less than sign with underbar";
+beginchar(chars.math_much_less_underbar,17u#,4.5u#+math_axis#,4.5u#+2.5rule_thickness#-math_axis#); uni "0x2AA3";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x0l=u; rt x1r=w-6u; y0=y3=math_axis;
+lft x3l=6u; rt x4r=w-u;
+lft x6=u; rt x7=w-u; bot y6l=bot y7l=-d;
+filldraw bskrule(6,7,hair,hair);
+less(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_less_in_less:
+bskchar "Less than in less than sign";
+beginchar(chars.math_less_in_less,12u#,v_center(9u#)); uni "0x2AA1";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; rt x1r=w-u; y0=y3=math_axis;
+x3l-x0l=max(5u,2rule_thickness); rt x4r=w-u;
+less(0,1,2);
+z4r=z3r+whatever*(z1r-z0r);
+less(3,4,5);
+endchar;
+
+iff known chars.math_less_in_less_underbar:
+bskchar "Less than in less than sign with underbar";
+beginchar(chars.math_less_in_less_underbar,12u#,4.5u#+math_axis#,4.5u#+2.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x0l=u; rt x1r=w-u; y0=y3=math_axis;
+x3l-x0l=max(5u,2rule_thickness); rt x4r=w-u;
+lft x6=u; rt x7=w-u; bot y6l=bot y7l=-d;
+filldraw bskrule(6,7,hair,hair);
+less(0,1,2);
+z4r=z3r+whatever*(z1r-z0r);
+less(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_less_in_less_in_less:
+bskchar "Less than in less than in less than sign";
+beginchar(chars.math_less_in_less_in_less,15.5u#,v_center(13u#)); uni "0x2AF7";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=5u; rt x1r=w-u; y0=y3=y6=math_axis; y1r=h-2u-.5rule_thickness;
+rt x4r=rt x7r=w-u; lft x6l=u; x0l=.5[x6l,x3l];
+less(0,1,2);
+z4r=z3r+whatever*(z1r-z0r);
+z7r=z6r+whatever*(z1r-z0r);
+less(3,4,5);
+less(6,7,8);
+endchar;
+
+iff known chars.math_much_much_less:
+bskchar "Much much less than sign";
+beginchar(chars.math_much_much_less,22u#,v_center(9u#)); uni "0x22D8";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; rt x1r=w-11u; y0=y3=y6=math_axis;
+lft x3l=11u; rt x4r=w-u;
+x6=.5[x0,x3];
+less(0,1,2);
+less(3,4,5);
+less(6,7,8);
+endchar;
+
+iff known chars.math_less_dot:
+bskchar "Less than sign with dot";
+beginchar(chars.math_less_dot,12u#,v_center(8u#)); uni "0x22D6";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=y3=math_axis;
+x3=w-2u-.5dot_size;
+less(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_less_circle:
+bskchar "Less than sign with circle inside";
+beginchar(chars.math_less_circle,12u#,v_center(8u#)); uni "0x2A79";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x2=w-u; y2=math_axis;
+y2=y0; x0=x8; x2-x6=y8-y4=2.5u;
+lft x9l=u; y9=math_axis;
+oblu:=2oblu; less(9,10,11); oblu:=f_obl;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+endchar;
+
+iff known chars.math_less_neq:
+bskchar "Less than or not equal to sign";
+beginchar(chars.math_less_neq,12u#,v_center(11u#)); uni "0x2A87";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+less(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_less_eq_not:
+bskchar "Negated less than or equal to sign";
+beginchar(chars.math_less_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2270";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis+1.5u; y1r=math_axis+5.5u-.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---tobl(2'r,3rr,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,4r)---z4r..z4l
+ ---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6'); labels(3rr,4ll);
+endchar;
+
+iff known chars.math_less_eq_slanted_not:
+bskchar "Negated less than or slanted equal to sign";
+beginchar(chars.math_less_eq_slanted_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis+1.5u; y1r=math_axis+5.5u-.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+lft x5=u; rt x6=w-u; y6l=math_axis-5.5u; y2-y6=y0-y5;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)-90); pos6(rule_thickness,angle(z5-z6)-90);
+bskpoints(5,6,hair,hair);
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---tobl(2'r,3rr,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,4r)---z4r..z4l
+ ---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_less_neq_vert:
+bskchar "Less than or not equal to sign with vertical stroke";
+beginchar(chars.math_less_neq_vert,12u#,v_center(11u#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0l=u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+x5=x6=.5w; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+oblu:=2oblu;
+less(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_less_eq_not_vert:
+bskchar "Negated less than or equal to sign with vertical stroke";
+beginchar(chars.math_less_eq_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis+1.5u; y1r=math_axis+5.5u-.5rule_thickness;
+top y3=h; x4=x3=.55w; y4=-d;
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,4r)---z4r..z4l
+ ---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_less_sim:
+bskchar "Less than or similar to sign";
+beginchar(chars.math_less_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2272";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+less(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_sim_less:
+bskchar "Similar to or less than sign";
+beginchar(chars.math_sim_less,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2A9D";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r-y0=4u-.5rule_thickness;
+top y4=h; spread:=.5x_height;
+less(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_less_sim_neg:
+bskchar "Negated less than or similar to sign";
+beginchar(chars.math_less_sim_neg,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2274";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; .5[x5,x6]=.5w; x5-x6=4u;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0l]; z8=whatever[z5l,z6l]=whatever[z2l,z0l];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0l']; z14=whatever[z5l,z6l]=whatever[z1l,z0l'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,2l)---z2l..z2r---obl(9,2r,11)---obl(11,9,1r)---z1r..z1ll
+ ---obl(13,1ll,5rr)..z5l---obl(14,5l,0l')---z0l'..z0l---obl(8,0l,6l)
+ ..subpath(tim9,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+infill obl(0''',12,10)---obl(10,0''',12)---obl(12,10,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_less_sim_neg_vert:
+bskchar "Negated less than or similar to sign with vertical stroke";
+beginchar(chars.math_less_sim_neg_vert,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; x5=x6=.5w;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0l]; z8=whatever[z5l,z6l]=whatever[z2l,z0l];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0l']; z14=whatever[z5l,z6l]=whatever[z1l,z0l'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,2l)---z2l..z2r---obl(9,2r,11)---obl(11,9,1r)---z1r..z1ll
+ ---obl(13,1ll,5rr)..z5l---obl(14,5l,0l')---z0l'..z0l---obl(8,0l,6l)
+ ..subpath(tim9,rundy(p2,(tim7,3f_obl)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,3f_obl)),infinity) of p1..cycle;
+infill obl(0''',12,10)---obl(10,0''',12)---obl(12,10,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_less_not_sim:
+bskchar "Less than and not similar to sign";
+beginchar(chars.math_less_not_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x22E6";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+less(0,1,2);
+vlnka(3,4).nodraw;
+top y5-bot y6=.7x_height; .5[y5,y6]=.5[y3,y4]; .5[x5,x6]=.5w; x5=x4a;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(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,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(2,3,5,6); labels(2rr,3ll);
+endchar;
+
+iff known chars.math_less_approx:
+bskchar "Less than or approximately equal to sign";
+beginchar(chars.math_less_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A85";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+spread:=.4x_height;
+bot y3=-d; y5-y3=spread;
+less(0,1,2);
+vlnka(3,4);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_less_not_approx:
+bskchar "Less than and not approximately equal to sign";
+beginchar(chars.math_less_not_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A89";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+lft x7l=u; y7=h-4u;
+less(7,8,9);
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(5,6);
+endchar;
+
+iff known chars.math_less_sim_eq:
+bskchar "Less than or similar or equal to sign";
+beginchar(chars.math_less_sim_eq,12u#,v_center(8u#+.8x_height#+rule_thickness#)); uni "0x2A8D";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x0l=lft x3=u; rt x4=w-u; y0=h-4u;
+spread:=.4x_height;
+bot y3l=bot y4l=-d; y5-y3=spread-rule_thickness;
+less(0,1,2);
+filldraw bskrule(3,4,hair,hair);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_smaller:
+bskchar "Smaller sign";
+beginchar(chars.math_smaller,12u#,v_center(8u#)); uni "0x2AAA";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+lft x0l=x3=u; y0=y3=y4=math_axis; x4=x1;
+less(0,1,2).nodraw;
+p0:=_less;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_smaller_eq:
+bskchar "Smaller or equals sign";
+beginchar(chars.math_smaller_eq,12u#,v_center(11u#)); uni "0x2AAC";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x0l=x3=u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+less(0,1,2).nodraw;
+p0:=_less;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+endchar;
+
+iff known chars.math_smaller_eq_slanted:
+bskchar "Smaller or slanted equals sign";
+beginchar(chars.math_smaller_eq_slanted,12u#,v_center(11u#)); uni "non"; %"0x2AAC.slanted";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+lft x0l=x3=u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y6=-d+.5rule_thickness; y0-y5=y2-y6;
+less(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+p0:=_less;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+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_not:
+bskchar "Negated greater than sign";
+beginchar(chars.math_greater_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x226F";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis; y1l=math_axis+4u-.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: rt x3=w-3u; .5[x4,x3]=.5w; else: rt x3=w-4u; lft x4=2u; fi
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---z4ll..z4r---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_greater_not_vert:
+bskchar "Negated greater than sign with vertical stroke";
+beginchar(chars.math_greater_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=math_axis; y1l=math_axis+4u-.5rule_thickness;
+top y3=h; x4=x3=.45w; y4=-d;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bskpoints(3,4,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l)---z4ll..z4r---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_greater_closed:
+bskchar "Closed greater than sign";
+beginchar(chars.math_greater_closed,15u#,v_center(8u#)); uni "0x2AA7";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,0);
+rt x0r=w-u; lft x1l=4u; y0=y3=math_axis; lft x3l=u;
+greater(0,1,2).nodraw;
+filldraw subpath(0,2) of _greater---z1r...{down}z3l...point infinity of _greater---cycle;
+infill subpath(3,6) of _greater...{up}z3r...cycle;
+penlabels(3);
+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=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+filldraw bskrule(3,4,hair,hair);
+greater(0,1,2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_eq_double_slanted:
+bskchar "Greater than or double slanted equal to sign";
+beginchar(chars.math_greater_eq_double_slanted,12u#,v_center(11u#+.45x_height#)); uni "0x2AFA";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3=-d+.5rule_thickness; y5-y3=y6-y4=.45x_height; y2-y3=y0-y4;
+greater(0,1,2);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_greater_eq_double:
+bskchar "Greater than or double equal to sign";
+beginchar(chars.math_greater_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2267";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+greater(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_greater_not_eq_double:
+bskchar "Greater than and not double equal to sign";
+beginchar(chars.math_greater_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2269";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+greater(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x2l+2u; .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl; oblu.more:=2f_obl;
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r).more---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l).more---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_greater_eq_double_not:
+bskchar "Negated greater than or double equal to sign";
+beginchar(chars.math_greater_eq_double_not,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=h-4u-2rule_thickness; y1l=h-2.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: .5[x4,x3]=.5w-.5u; rt x3=w-4u; else: rt x3=w-5u; lft x4=2u; fi
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---obl(5'l,3''l,5r)---z5rr..z5l---obl(6'l,5l,7'l)
+ ---tobl(7'l,6'l,7rr)---z7rr..z7l---obl(8'l,7l,4l)---z4l..z4r---obl(8'r,4r,8l)
+ ---z8ll..z8r---obl(7'r,8r,6'r)---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)
+ ---obl(3''r,4r,0r)---cycle;
+infill ifobl(2''r,3'r,0''',0''',,)---obl(0''',2r,1r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_greater_vert_not_eq_double:
+bskchar "Greater than and vertical not double equal to sign";
+beginchar(chars.math_greater_vert_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+greater(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x7=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl;
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r)---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r)---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l)---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l)---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_greater_eq_double_not_vert:
+bskchar "Negated greater than or double equal to sign with vertical stroke";
+beginchar(chars.math_greater_eq_double_not_vert,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=h-4u-2rule_thickness; y1l=h-2.5rule_thickness;
+top y3=h; x4=x3=.5w; y4=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---obl(5'l,3''l,5r)---z5rr..z5l---obl(6'l,5l,7'l)
+ ---obl(7'l,6'l,7r)---z7rr..z7l---obl(8'l,7l,4l)---z4l..z4r---obl(8'r,4r,8l)
+ ---z8ll..z8r---obl(7'r,8r,6'r)---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)
+ ---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_sim_greater_eq_double:
+bskchar "Similar to or greater than or double equal to sign";
+beginchar(chars.math_sim_greater_eq_double,12u#,v_center(11u#+.9x_height#-rule_thickness#)); uni "0x2AA0";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=math_axis; y1l-y0=4u-.5rule_thickness;
+top y8=h;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+greater(0,1,2);
+vlnka(7,8);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_eq_double_greater:
+bskchar "Double equal to or greater than sign";
+beginchar(chars.math_eq_double_greater,12u#,v_center(11u#+.45x_height#)); uni "0x2A9A";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l-y0=4u-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5r=y6r=h; y3=y4=y5-.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+greater(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_sl_eq_double_greater:
+bskchar "Double slanted equal to or greater than sign";
+beginchar(chars.math_sl_eq_double_greater,12u#,v_center(11u#+.45x_height#)); uni "0x2A9C";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l-y0=4u-.5rule_thickness;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5=h-.5rule_thickness; y5-y3=y6-y4=.45x_height;
+greater(0,1,2);
+y5-y6=y1r-y0;
+pos3(rule_thickness,angle(z5-z6)+90); pos4(rule_thickness,angle(z5-z6)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_greater_eq_slanted:
+bskchar "Greater than or slanted equal to sign";
+beginchar(chars.math_greater_eq_slanted,12u#,v_center(11u#)); uni "0x2A7E";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_closed_eq_sl:
+bskchar "Closed greater than or slanted equal to sign";
+beginchar(chars.math_greater_closed_eq_sl,15u#,v_center(12u#)); uni "0x2AA9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,0);
+rt x0r=w-u; lft x1l=4u; y0=y3=h-4u; lft x3l=u;
+greater(0,1,2).nodraw;
+filldraw subpath(0,2) of _greater---z1r...{down}z3l...point infinity of _greater---cycle;
+infill subpath(3,6) of _greater...{up}z3r...cycle;
+rt x5=w-u; x4=x3; y4=-d+.5rule_thickness; z4=z5+whatever*(z0l-z2l);
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+filldraw bskrule(4,5,hair,hair);
+penlabels(3,4,5);
+endchar;
+
+iff known chars.math_greater_eq_slanted_dot:
+bskchar "Greater than or slanted equal to sign with dot inside";
+beginchar(chars.math_greater_eq_slanted_dot,12u#,v_center(11u#)); uni "0x2A80";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=y5=h-4u; lft x5=u+.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_eq_slanted_dot_right:
+bskchar "Greater than or slanted equal to sign with dot above right";
+beginchar(chars.math_greater_eq_slanted_dot_right,12u#,v_center(11u#)); uni "0x2A82";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u; rt x5=w-u-dot_size; top y5=h-.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_eq_slanted_dot_left:
+bskchar "Greater than or slanted equal to sign with dot above left";
+beginchar(chars.math_greater_eq_slanted_dot_left,12u#,5.5u#+1.5dot_size#+math_axis#,5.5u#-math_axis#); uni "0x2A84";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y1l=h-1.5dot_size-.5rule_thickness; y0=h-4u-1.5dot_size;
+lft x5=u+dot_size; y5=h-.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_greater:
+bskchar "Equal to or greater than sign";
+beginchar(chars.math_eq_greater,12u#,v_center(11u#)); uni "0x22DD";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l=y0+4u-.5rule_thickness;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=y4=h-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_slanted_greater:
+bskchar "Slanted equal to or greater than sign";
+beginchar(chars.math_eq_slanted_greater,12u#,v_center(11u#)); uni "0x2A96";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l=y0+4u-.5rule_thickness;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=h-.5rule_thickness; y4-y0=y3-y1;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_slanted_greater_dot:
+bskchar "Slanted equal to or greater than sign with dot inside";
+beginchar(chars.math_eq_slanted_greater_dot,12u#,v_center(11u#)); uni "0x2A98";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=y5=-d+4u; y1l=y0+4u-.5rule_thickness; lft x5=u+.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=h-.5rule_thickness; y4-y0=y3-y1;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_neq:
+bskchar "Greater than or not equal to sign";
+beginchar(chars.math_greater_neq,12u#,v_center(11u#)); uni "0x2A88";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+greater(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_greater_eq_not:
+bskchar "Negated greater than or equal to sign";
+beginchar(chars.math_greater_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2271";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis+1.5u; y1l=math_axis+5.5u-.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: rt x3=w-3u; .5[x4,x3]=.5w; else: rt x3=w-4.5u; lft x4=2u; fi
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---tobl(5'l,3''l,5rr)---z5rr..z5l---obl(6'l,5l,4l)---z4l
+ ..z4r---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_greater_eq_slanted_not:
+bskchar "Negated greater than or slanted equal to sign";
+beginchar(chars.math_greater_eq_slanted_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis+1.5u; y1l=math_axis+5.5u-.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: rt x3=w-3u; .5[x4,x3]=.5w; else: rt x3=w-4.5u; lft x4=2u; fi
+lft x5=u; rt x6=w-u; y5l=math_axis-5.5u; y0-y6=y2-y5;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)-90); pos6(rule_thickness,angle(z5-z6)-90);
+bskpoints(5,6,hair,hair);
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---tobl(5'l,3''l,5rr)---z5rr..z5l---obl(6'l,5l,4l)---z4l..z4r---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r).more---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_greater_neq_vert:
+bskchar "Greater than or not equal to sign with vertical stroke";
+beginchar(chars.math_greater_neq_vert,12u#,v_center(11u#)); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0r=w-u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+x5=x6=.5w; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+oblu:=2oblu;
+greater(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_greater_eq_not_vert:
+bskchar "Negated greater than or equal to sign with vertical stroke";
+beginchar(chars.math_greater_eq_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis+1.5u; y1l=math_axis+5.5u-.5rule_thickness;
+top y3=h; x4=x3=.45w; y4=-d;
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---obl(5'l,3''l,5r)---z5rr..z5l---obl(6'l,5l,4l)---z4l..z4r---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+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_piping_z:
+bskchar "Z-piping";
+beginchar(chars.math_piping_z,15u#,asc_height#,0); uni "0x2A20";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; lft x1l=6u; y0=y3=.5[h,-d];
+rt x3r=w-6u; lft x4l=u;
+greater(0,1,2);
+greater(3,4,5);
+endchar;
+
+iff known chars.math_greater_in_greater:
+bskchar "Greater than in greater than sign";
+beginchar(chars.math_greater_in_greater,12u#,v_center(9u#)); uni "0x2AA2";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; lft x1l=u; y0=y3=math_axis;
+x0r-x3r=max(5u,2rule_thickness); lft x4l=u;
+greater(0,1,2);
+z4l=z3l+whatever*(z1l-z0l);
+greater(3,4,5);
+endchar;
+
+iff known chars.math_greater_in_greater_underbar:
+bskchar "Greater than in greater than sign with underbar";
+beginchar(chars.math_greater_in_greater_underbar,12u#,4.5u#+math_axis#,4.5u#+2.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; lft x1l=u; y0=y3=math_axis;
+x0r-x3r=max(5u,2rule_thickness); lft x4l=u;
+lft x6=u; rt x7=w-u; bot y6l=bot y7l=-d;
+filldraw bskrule(6,7,hair,hair);
+greater(0,1,2);
+z4l=z3l+whatever*(z1l-z0l);
+greater(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_greater_in_greater_in_greater:
+bskchar "Greater than in greater than in greater than sign";
+beginchar(chars.math_greater_in_greater_in_greater,15.5u#,v_center(13u#)); uni "0x2AF8";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-5u; lft x1l=u; y0=y3=y6=math_axis; y1l=h-2u-.5rule_thickness;
+lft x4l=lft x7l=u; rt x6r=w-u; x0r=.5[x6r,x3r];
+greater(0,1,2);
+z4l=z3l+whatever*(z1l-z0l);
+z7l=z6l+whatever*(z1l-z0l);
+greater(3,4,5);
+greater(6,7,8);
+endchar;
+
+iff known chars.math_much_much_greater:
+bskchar "Much much greater than sign";
+beginchar(chars.math_much_much_greater,22u#,v_center(9u#)); uni "0x22D9";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; lft x1l=11u; y0=y3=y6=math_axis;
+rt x3r=w-11u; lft x4l=u;
+x6=.5[x0,x3];
+greater(0,1,2);
+greater(3,4,5);
+greater(6,7,8);
+endchar;
+
+iff known chars.math_greater_dot:
+bskchar "Greater than sign with dot";
+beginchar(chars.math_greater_dot,12u#,v_center(8u#)); uni "0x22D7";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=y3=math_axis;
+x3=2u+.5dot_size;
+greater(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_greater_circle:
+bskchar "Greater than sign with circle inside";
+beginchar(chars.math_greater_circle,12u#,v_center(8u#)); uni "0x2A7A";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u; y2=math_axis;
+y2=y0; x0=x8; x2-x6=y8-y4=2.5u;
+rt x9r=w-u; y9=math_axis;
+oblu:=2oblu; greater(9,10,11); oblu:=f_obl;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+endchar;
+
+iff known chars.math_greater_sim:
+bskchar "Greater than or similar to sign";
+beginchar(chars.math_greater_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2273";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+greater(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_sim_greater:
+bskchar "similar to or greater than sign";
+beginchar(chars.math_sim_greater,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2A9E";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l-y0=4u-.5rule_thickness;
+top y4=h; spread:=.5x_height;
+greater(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_greater_sim_neg:
+bskchar "Negated greater than or similar to sign";
+beginchar(chars.math_greater_sim_neg,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2275";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; .5[x5,x6]=.5w; x5-x6=4u;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0r]; z8=whatever[z5l,z6l]=whatever[z2l,z0r];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0r']; z14=whatever[z5l,z6l]=whatever[z1l,z0r'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,0r)---z0r..z0r'---obl(13,0r',5r)---z5rr..z5l---obl(14,5l,1rr)---z1rr..z1l
+ ---obl(12,1l,10)---obl(10,12,2r)---z2r..z2l---obl(8,2l,6l)
+ ..subpath(tim9,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+infill obl(0''',11,9)---obl(9,0''',11)---obl(11,9,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_greater_sim_neg_vert:
+bskchar "Negated greater than or similar to sign with vertical stroke";
+beginchar(chars.math_greater_sim_neg_vert,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; x5=x6=.5w;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0r]; z8=whatever[z5l,z6l]=whatever[z2l,z0r];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0r']; z14=whatever[z5l,z6l]=whatever[z1l,z0r'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,0r)---z0r..z0r'---obl(13,0r',5r)---z5rr..z5l---obl(14,5l,1rr)---z1rr..z1l
+ ---obl(12,1l,10)---obl(10,12,2r)---z2r..z2l---obl(8,2l,6l)
+ ..subpath(tim9,rundy(p2,(tim7,3f_obl)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,3f_obl)),infinity) of p1..cycle;
+infill obl(0''',11,9)---obl(9,0''',11)---obl(11,9,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_greater_not_sim:
+bskchar "Greater than and not similar to sign";
+beginchar(chars.math_greater_not_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x22E7";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+greater(0,1,2);
+vlnka(3,4).nodraw;
+top y5-bot y6=.7x_height; .5[y5,y6]=.5[y3,y4]; .5[x5,x6]=.5w; x5=x4a;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(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,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(2,3,5,6); labels(2rr,3ll);
+endchar;
+
+iff known chars.math_greater_approx:
+bskchar "Greater than or approximately equal to sign";
+beginchar(chars.math_greater_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A86";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+spread:=.4x_height;
+bot y3=-d; y5-y3=spread;
+greater(0,1,2);
+vlnka(3,4);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_greater_not_approx:
+bskchar "Greater than and not approximately equal to sign";
+beginchar(chars.math_greater_not_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A8A";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+rt x7r=w-u; y7=h-4u;
+greater(7,8,9);
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(5,6);
+endchar;
+
+iff known chars.math_greater_sim_eq:
+bskchar "Greater than or similar or equal to sign";
+beginchar(chars.math_greater_sim_eq,12u#,v_center(8u#+.8x_height#+rule_thickness#)); uni "0x2A8E";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x0r=rt x4=w-u; lft x3=u; y0=h-4u;
+spread:=.4x_height;
+bot y3l=bot y4l=-d; y5-y3=spread-rule_thickness;
+greater(0,1,2);
+filldraw bskrule(3,4,hair,hair);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_larger:
+bskchar "Larger sign";
+beginchar(chars.math_larger,12u#,v_center(8u#)); uni "0x2AAB";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+rt x0r=x3=w-u; y0=y3=y4=math_axis; x4=x1;
+greater(0,1,2).nodraw;
+p0:=_greater;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_larger_eq:
+bskchar "Larger or equals sign";
+beginchar(chars.math_larger_eq,12u#,v_center(11u#)); uni "0x2AAD";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+rt x0r=x3=w-u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+greater(0,1,2).nodraw;
+p0:=_greater;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+endchar;
+
+iff known chars.math_larger_eq_slanted:
+bskchar "Larger or slanted equals sign";
+beginchar(chars.math_larger_eq_slanted,12u#,v_center(11u#)); uni "non"; %"0x2AAD.slanted";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+rt x0r=x3=w-u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y5=-d+.5rule_thickness; y0-y6=y2-y5;
+greater(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+p0:=_greater;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+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;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+endchar;
+
+iff known chars.math_less_greater:
+bskchar "Less than or greater than sign";
+beginchar(chars.math_less_greater,12u#,v_center(12u#+3rule_thickness#)); uni "0x2276";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=4u+3rule_thickness; y2l=-d+.5rule_thickness;
+greater(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_less_greater_neg:
+bskchar "Negated less than or greater than sign";
+beginchar(chars.math_less_greater_neg,12u#,v_center(12u#+3rule_thickness#)); uni "0x2278";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=4u+3rule_thickness; y2l=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; .5[x6,x7]=.5w; x6-x7=4u;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',6l)---z6l..z6rr---tobl(10,6rr,4ll)---z4ll..z4r---obl(13,4r,14)
+ ---obl(14,13,5r)---z5r..z5l---obl(16,5l,18)---obl(18,16,0r')---z0r'..z0r---obl(24,0r,7r)
+ ---z7r..z7ll---tobl(25,7ll,2l)---z2l..z2r---obl(23,2r,20)--obl(20,23,1l)---z1l..z1rr
+ ---obl(19,1rr,17)---obl(17,19,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_less_greater_neg_vert:
+bskchar "Negated less than or greater than sign with vertical stroke";
+beginchar(chars.math_less_greater_neg_vert,12u#,v_center(12u#+3rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=4u+3rule_thickness; y2l=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; x6=x7=.5w;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',6l)---z6l..z6rr---tobl(10,6rr,4ll)---z4ll..z4r---obl(13,4r,14)
+ ---obl(14,13,5r)---z5r..z5l---obl(16,5l,18)---obl(18,16,0r')---z0r'..z0r---obl(24,0r,7r)
+ ---z7r..z7ll---tobl(25,7ll,2l)---z2l..z2r---obl(23,2r,20)--obl(20,23,1l)---z1l..z1rr
+ ---obl(19,1rr,17)---obl(17,19,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_greater_less:
+bskchar "Greater than or less than sign";
+beginchar(chars.math_greater_less,12u#,v_center(12u#+3rule_thickness#)); uni "0x2277";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=4u+3rule_thickness; y5r=-d+.5rule_thickness;
+greater(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_greater_beside_less:
+bskchar "Greater than beside less than sign";
+beginchar(chars.math_greater_beside_less,20u#,v_center(8u#)); uni "0x2AA5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+.5[x0r,x3l]=.5w; x3l-x0r=rule_thickness;
+lft x1l=u; rt x4r=w-u; y0=y3=math_axis;
+greater(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_greater_less_neg:
+bskchar "Negated greater than or less than sign";
+beginchar(chars.math_greater_less_neg,12u#,v_center(12u#+3rule_thickness#)); uni "0x2279";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=4u+3rule_thickness; y5r=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; .5[x6,x7]=.5w; x6-x7=4u;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',25)---obl(25,11,2l)---z2l..z2r---obl(23,2r,20)---obl(20,23,1l)
+ ---z1l..z1rr---obl(19,1rr,6l)---z6l..z6rr---obl(18,6rr,0r')---z0r'..z0r
+ ---obl(24,0r,10)---obl(10,24,4ll)---z4ll..z4r---obl(13,4r,14)---obl(14,13,5r)
+ ---z5r..z5l---obl(16,5l,7r)---z7r..z7ll---obl(17,7l,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_greater_less_neg_vert:
+bskchar "Negated greater than or less than sign with vertical stroke";
+beginchar(chars.math_greater_less_neg_vert,12u#,v_center(12u#+3rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=4u+3rule_thickness; y5r=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; x6=x7=.5w;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',25)---obl(25,11,2l)---z2l..z2r---obl(23,2r,20)---obl(20,23,1l)
+ ---z1l..z1rr---obl(19,1rr,6l)---z6l..z6rr---obl(18,6rr,0r')---z0r'..z0r
+ ---obl(24,0r,10)---obl(10,24,4ll)---z4ll..z4r---obl(13,4r,14)---obl(14,13,5r)
+ ---z5r..z5l---obl(16,5l,7r)---z7r..z7ll---obl(17,7l,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_greater_less_overlap:
+bskchar "Greater than overlaping less than sign";
+beginchar(chars.math_greater_less_overlap,15u#,v_center(8u#)); uni "0x2AA4";
+italcorr h#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=lft x4l+3u=4u; rt x1r=rt x3r+3u=w-u; y0=y3=math_axis;
+less(0,1,2).nodraw; greater(3,4,5).nodraw;
+p0:=_less; p1:=_greater;
+p2:=point 0 of p1--point infinity of p1;
+p3:=point infinity of p0--point 0 of p0;
+(tim0,tim1-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim2,tim3)=p0 intersectiontimes subpath(0,2) of p1;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p1;
+(tim6-3,tim7)=subpath(3,5) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p2;
+(tim10,tim11)=p2 intersectiontimes p3;
+(tim12-4,tim13)=subpath(4,6) of p1 intersectiontimes p3;
+(tim14-3,tim15-3)=subpath(3,4) of p0 intersectiontimes subpath(3,4) of p1;
+(tim16-5,tim17-5)=subpath(5,6) of p0 intersectiontimes subpath(5,6) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..reverse subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(0,rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p0,tim8),infinity) of p0
+ ..subpath(0,rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..reverse subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(rundy(p3,tim13),infinity) of p3..cycle;
+oblu:=1.5f_obl;
+infill subpath(rundy(p1,tim15),rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(p0,tim16).zpet,rundy(p0,tim14)) of p0..cycle;
+endchar;
+
+iff known chars.math_less_equal_greater:
+bskchar "Less than or equals to or greater than sign";
+beginchar(chars.math_less_equal_greater,12u#,v_center(16u#+4rule_thickness#)); uni "0x22DA";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=8u+4rule_thickness; y2l=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; y6=y7=math_axis;
+filldraw bskrule(6,7,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_less_sl_equal_greater:
+bskchar "Less than or slanted equals to or greater than sign";
+beginchar(chars.math_less_sl_equal_greater,12u#,v_center(14u#+4rule_thickness#)); uni "non"; %"0x22DA.slant";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=6u+4rule_thickness; y2l=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; .5[y6,y7]=math_axis; y6-y3=y7-y5;
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_less_sl_equal_greater_sl_equal:
+bskchar "Less than or slanted equals to or greater than or slanted equals sign";
+beginchar(chars.math_less_sl_equal_greater_sl_equal,12u#,v_center(16u#+4rule_thickness#)); uni "0x2A93";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r;
+lft x6=lft x8=u; rt x7=rt x9=w-u;
+y3=h-4u; y8l=-d+.5rule_thickness; y9-y8=y4l-y3l;
+y3-y6=y5l-y7=y2l-y8=y0-y9; .5[y3,y0]=.5[y6,y7];
+less(3,4,5);
+greater(0,1,2);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_less_equal_double_greater:
+bskchar "Less than or double equals to or greater than sign";
+beginchar(chars.math_less_equal_double_greater,12u#,v_center(16u#+4rule_thickness#+.45x_height#)); uni "0x2A8B";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=8u+4rule_thickness+.45x_height; y2l=-d+.5rule_thickness;
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; .5[y6,y8]=math_axis; y8-y6=.45x_height;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_less_sim_greater:
+bskchar "Less than or similar to or greater than sign";
+beginchar(chars.math_less_sim_greater,12u#,v_center(16u#+3rule_thickness#+.45x_height#)); uni "0x2A8F";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=8u+3rule_thickness+.45x_height; y2l=-d+.5rule_thickness;
+.5[y6,y7]=math_axis;
+greater(0,1,2);
+less(3,4,5);
+vlnka(6,7);
+endchar;
+
+iff known chars.math_less_greater_equals_double:
+bskchar "Less than or greater than or double equal to sign";
+beginchar(chars.math_less_greater_equals_double,12u#,v_center(16u#+2rule_thickness#+.45x_height#)); uni "0x2A91";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; y3=h-4u; y0-y2l=y4l-y3; y0=.5[bot y3,y8];
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; y6l=-d; y8-y6=.45x_height;
+less(3,4,5);
+greater(0,1,2);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_equal_less:
+bskchar "Greater than or equals to or less than sign";
+beginchar(chars.math_greater_equal_less,12u#,v_center(16u#+4rule_thickness#)); uni "0x22DB";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=8u+4rule_thickness; y5r=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; y6=y7=math_axis;
+filldraw bskrule(6,7,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_greater_sl_equal_less:
+bskchar "Greater than or slanted equals to or less than sign";
+beginchar(chars.math_greater_sl_equal_less,12u#,v_center(14u#+4rule_thickness#)); uni "non"; %"0x22DB.slant";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=6u+4rule_thickness; y5r=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; .5[y6,y7]=math_axis; y2-y6=y0-y7;
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_greater_sl_equal_less_sl_equal:
+bskchar "Greater than or slanted equals to or less than or slanted equals sign";
+beginchar(chars.math_greater_sl_equal_less_sl_equal,12u#,v_center(16u#+4rule_thickness#)); uni "0x2A94";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r;
+lft x6=lft x8=u; rt x7=rt x9=w-u;
+y0=h-4u; y9l=-d+.5rule_thickness; y8-y9=y1r-y0r;
+y0-y7=y2l-y6=y5r-y9r=y3-y8l; .5[y3,y0]=.5[y6,y7];
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_equal_double_less:
+bskchar "Greater than or double equals to or less than sign";
+beginchar(chars.math_greater_equal_double_less,12u#,v_center(16u#+4rule_thickness#+.45x_height#)); uni "0x2A8C";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=8u+4rule_thickness+.45x_height; y5r=-d+.5rule_thickness;
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; .5[y6,y8]=math_axis; y8-y6=.45x_height;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_less_equal_double:
+bskchar "Greater than or less than or double equals to sign";
+beginchar(chars.math_greater_less_equal_double,12u#,v_center(16u#+2rule_thickness#+.45x_height#)); uni "0x2A92";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; y0=h-4u; y3-y5r=y0-y2r; y3=.5[bot y0,y8];
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; y6l=-d; y8-y6=.45x_height;
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_sim_less:
+bskchar "Greater than or similar to or less than sign";
+beginchar(chars.math_greater_sim_less,12u#,v_center(16u#+3rule_thickness#+.45x_height#)); uni "0x2A90";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=8u+3rule_thickness+.45x_height; y5r=-d+.5rule_thickness;
+.5[y6,y7]=math_axis;
+greater(0,1,2);
+less(3,4,5);
+vlnka(6,7);
+penlabels(6,7);
+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.math_five_star_big:
+bskchar "Big five-pointed star";
+beginchar(chars.math_five_star_big,asc_height#+desc_depth#,asc_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.5oblu;
+z0=(.5w,.5[h,-d]);
+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
+z11=whatever[z1l,z3r]=whatever[z2r,z5r];
+z12=whatever[z2l,z4r]=whatever[z1l,z3r];
+z13=whatever[z3l,z5r]=whatever[z2l,z4r];
+z14=whatever[z4l,z1r]=whatever[z3l,z5r];
+z15=whatever[z1r,z4l]=whatever[z2r,z5l];
+filldraw z1l---obl(11,1l,2r)---z2r..z2l---obl(12,2l,3r)---z3r..z3l
+ ---obl(13,3l,4r)---z4r..z4l---obl(14,4l,5r)---z5r..z5l
+ ---obl(15,5l,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,11,12,13,14,15);
+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_arm:
+bskchar "Square subset sign with arm";
+beginchar(chars.math_sqsubset_arm,16u#,v_center(x_height#)); uni "0x2ACD";
+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=w-u; x4=w-6u; 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_very:
+bskchar "Very proper square subset sign";
+beginchar(chars.math_sqsubset_very,12u#,v_center(x_height#)); uni "non";
+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); pos7(rule_thickness,-90); pos8(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+rt x1=rt x4=rt x5=rt x8=w-u; x2=x3=w-x1; lft x6=lft x7=x2r+2rule_thickness;
+y1r-top y5l=if not boldmath:2.25\\fi rule_thickness; .5[y5,y8]=.5[y6,y7]=.5[y1,y4]; y5=y6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth; x6r:=x7l:=x7+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+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_sqsubset_eq_neg:
+bskchar "Negated square subset or equal to sign";
+beginchar(chars.math_sqsubset_eq_neg,12u#,v_center(x_height#+3u#)); uni "0x22E4";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+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;
+.5[y7,y8]=.5[y4,y6]; .5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u;
+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;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(11,3r,13).more---obl(13,11,5r)---z5rr..z5l
+ ---obl(15,5l,7l).more---z7l..z7rr---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12).more
+ ---obl(12,14,4r)---z4r..z4ll---obl(10,4ll,8r).more---z8r..z8ll---obl(9,8ll,3l)
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsubset_eq_neg_vert:
+bskchar "Negated square subset or equal to sign with vertical stroke";
+beginchar(chars.math_sqsubset_eq_neg_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+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;
+.5[y7,y8]=.5[y4,y6]; x7=x8=.5w; y7=y5-2u;
+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;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(11,3r,13)---obl(13,11,5r)---z5rr..z5l
+ ---obl(15,5l,7l)---z7l..z7rr---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12)
+ ---obl(12,14,4r)---z4r..z4ll---obl(10,4ll,8r)---z8r..z8ll---obl(9,8ll,3l)
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsubset_eq_neg_alt:
+bskchar "Negated square subset or equal to sign---alternative";
+beginchar(chars.math_sqsubset_eq_neg_alt,12u#,v_center(x_height#+3u#)); uni "0x22E2";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+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;
+.5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u; y8=y1+2u;
+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;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(20,1l,8r).more---z8r..z8ll---obl(19,8ll,2l)---z2ll..z2---z3..z3rr
+ ---obl(11,3r,13).more---obl(13,11,5r)---z5rr..z5l---obl(15,5l,7l).more---z7l..z7rr
+ ---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12).more---obl(12,14,4r)---z4r..z4ll
+ ---obl(10,4ll,18).more---obl(18,10,1rr)---z1rr..cycle;
+infill obl(9,17,3l) ---obl(3l,4l,2r)---obl(2r,3l,17)---obl(17,2r,9)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+endchar;
+
+iff known chars.math_sqsubset_eq_neg_alt_vert:
+bskchar "Negated square subset or equal to sign---alternative, with vertical stroke";
+beginchar(chars.math_sqsubset_eq_neg_alt_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+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;
+x7=x8=.5w; y7=y5-2u; y8=y1+2u;
+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;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(20,1l,8r)---z8r..z8ll---obl(19,8ll,2l)---z2ll..z2---z3..z3rr
+ ---obl(11,3r,13)---obl(13,11,5r)---z5rr..z5l---obl(15,5l,7l)---z7l..z7rr
+ ---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12)---obl(12,14,4r)---z4r..z4ll
+ ---obl(10,4ll,18)---obl(18,10,1rr)---z1rr..cycle;
+infill obl(9,17,3l) ---obl(3l,4l,2r)---obl(2r,3l,17)---obl(17,2r,9)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+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_neg:
+bskchar "Not subset sign";
+beginchar(chars.math_subset_neg,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2284";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; 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);
+x6=x4; rt x7=x5-u; top y7=h; bot y6=-d;
+pos6(rule_thickness,angle(z6-z7)+90); pos7(rule_thickness,angle(z6-z7)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,7r,5l).more---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,6r)---z6rr..z6l---obl(5'l,6l,4r)---z4r...z3r...z2r
+ ---obl(1'l,2r,7l)---z7ll..z7r---obl(1'r,7r,1r).more---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_neg_vert:
+bskchar "Not subset sign with vertical stroke";
+beginchar(chars.math_subset_neg_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; 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);
+x6=x7=.55w; top y7=h; bot y6=-d;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,7r,5l)---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,6r)---z6rr..z6l---obl(5'l,6l,4r)---z4r...z3r...z2r
+ ---obl(1'l,2r,7l)---z7ll..z7r---obl(1'r,7r,1r)---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); 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_subset_eq_dot:
+bskchar "Subset or equal to sign with dot above";
+beginchar(chars.math_subset_eq_dot,12u#,.5x_height#+2.5u#+dot_size#+math_axis#,.5x_height#+1.5u#-math_axis#); uni "0x2AC3";
+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-u-dot_size; 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;
+x8=.5w+.5u; top y8=h-.5dot_size;
+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;
+dot(8);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_not_eq:
+bskchar "Subset and not equal to sign";
+beginchar(chars.math_subset_not_eq,12u#,v_center(x_height#+3u#)); uni "0x228A";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+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+3u; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+.5[x8,x9]=.5[x6,x7]; .5[y8,y9]=y6; x9-x8=.75(y9-y8)=3u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l).more---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r).more---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_not_eq_vert:
+bskchar "Subset and not equal to sign with vertical stroke";
+beginchar(chars.math_subset_not_eq_vert,12u#,v_center(x_height#+3u#)); 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); pos5(rule_thickness,270);
+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);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+.5[x8,x9]=.5[x6,x7]; .5[y8,y9]=y6; x9=x8; .75(y9-y8)=3u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l)---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r)---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_eq_neg:
+bskchar "Negated subset or equal to sign";
+beginchar(chars.math_subset_eq_neg,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+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+3u; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x4-u; rt x9=x5-u; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---obl(4'l,4l,9l)---z9ll..z9r
+ ---obl(4'r,9r,5l).more---z5l..z5+2o*right..z5rr---obl(5'r,5r,9'r)
+ ---obl(9'r,5'r,7r).more---z7r..z7ll---obl(8'r,7l,8r)---z8rr..z8l
+ ---obl(8'l,8l,6l)---z6l..z6rr---obl(9'l,6r,5'l)
+ ---obl(5'l,9'l,4r).more---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_eq_neg_vert:
+bskchar "Negated subset or equal to sign with vertical stroke";
+beginchar(chars.math_subset_eq_neg_vert,12u#,v_center(x_height#+3u#)); 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); pos5(rule_thickness,270);
+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);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---obl(4'l,4l,9l)---z9ll..z9r
+ ---obl(4'r,9r,5l)---z5l..z5+2o*right..z5rr---obl(5'r,5r,9'r)
+ ---obl(9'r,5'r,7r)---z7r..z7ll---obl(8'r,7l,8r)---z8rr..z8l
+ ---obl(8'l,8l,6l)---z6l..z6rr---obl(9'l,6r,5'l)
+ ---obl(5'l,9'l,4r)---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_subset_eq:
+bskchar "Not subset or equal to sign";
+beginchar(chars.math_not_subset_eq,12u#,v_center(x_height#+3u#)); uni "0x2288";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+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+3u; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x4; rt x9=x5-u; y9=y1+2u; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,9r,5l).more---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,9'r)---obl(9'r,5'r,7r).more---z7r..z7ll
+ ---obl(8'r,7l,8r)---z8rr..z8l ---obl(8'l,8l,6l)---z6l..z6rr
+ ---obl(9'l,6r,5'l)---obl(5'l,9'l,4r).more---z4r...z3r...z2r
+ ---obl(1'l,2r,9l)---z9ll..z9r---tobl(1'r,9r,1rr).more---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_subset_eq_vert:
+bskchar "Not subset or equal to sign with vertical stroke";
+beginchar(chars.math_not_subset_eq_vert,12u#,v_center(x_height#+3u#)); 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); pos5(rule_thickness,270);
+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);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=y1+2u; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,9r,5l)---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,9'r) ---obl(9'r,5'r,7r)---z7r..z7ll
+ ---obl(8'r,7l,8r)---z8rr..z8l ---obl(8'l,8l,6l)---z6l..z6rr
+ ---obl(9'l,6r,5'l)---obl(5'l,9'l,4r)---z4r...z3r...z2r
+ ---obl(1'l,2r,9l)---z9ll..z9r---obl(1'r,9r,1r)---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_eq_double:
+bskchar "Subset or double equal to sign";
+beginchar(chars.math_subset_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2AC5";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7=y8+.45x_height; bot y8l=bot y9l=-d;
+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;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_not_eq_double:
+bskchar "Subset and not double equal to sign";
+beginchar(chars.math_subset_not_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2ACB";
+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+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top rt z10=(x5-2u,y5r-rule_thickness); .5[x11,x10]=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---tobl(7',10rr,7r).more---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r).more---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---tobl(11',11ll,8l).more---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l).more---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_not_eq_double_vert:
+bskchar "Subset and not double equal to sign with vertical stroke";
+beginchar(chars.math_subset_not_eq_double_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); 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); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top y10=y5r-rule_thickness; x11=x10=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---obl(7',10r,7r)---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r)---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---obl(11',11l,8l)---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l)---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_not_eq_double_alt:
+bskchar "Subset and not double equal to sign (alternative)";
+beginchar(chars.math_subset_not_eq_double_alt,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); 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); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x10=x5; rt x11=x4-u; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---obl(2',4l,10l)---z10l..z10rr---tobl(3',10rr,5l).more---z5l
+ ..z5+2o*right..z5rr---obl(5',5r,7')---obl(7',10r,7r).more---z7r..z7ll
+ ---obl(8',7l,9')---obl(9',8',9r).more---z9r..z9ll---obl(10',9l,11r)---z11r
+ ..z11ll---tobl(11',11ll,8l).more---z8l..z8rr---obl(12',8r,13')
+ ---obl(13',12',6l).more---z6l..z6rr---obl(6',6r,4').more---obl(4',6',4r).more
+ ---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_not_eq_double_alt_vert:
+bskchar "Subset and not double equal to sign (alternative) with vertical stroke";
+beginchar(chars.math_subset_not_eq_double_alt_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); 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); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x10=x11=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---obl(2',4l,10l)---z10l..z10rr---obl(3',10r,5l)---z5l
+ ..z5+2o*right..z5rr---obl(5',5r,7')---obl(7',10r,7r)---z7r..z7ll
+ ---obl(8',7l,9')---obl(9',8',9r)---z9r..z9ll---obl(10',9l,11r)---z11r
+ ..z11ll---obl(11',11l,8l)---z8l..z8rr---obl(12',8r,13')
+ ---obl(13',12',6l)---z6l..z6rr---obl(6',6r,4')---obl(4',6',4r)
+ ---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_eq_double_not:
+bskchar "Negated subset or double equal to sign";
+beginchar(chars.math_subset_eq_double_not,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-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); pos5(rule_thickness,270);
+top y1r=top y2r=h-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x10=x1-u; rt x11=x4-u; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10r,z11r]=whatever[z1l,z2l];
+z15'=whatever[z10l,z11l]=whatever[z1l,z2l];
+z16'=whatever[z10l,z11l]=whatever[z1r,z2r];
+z17'=whatever[z10r,z11r]=whatever[z1r,z2r];
+oblu.more:=2f_obl;
+filldraw z1rr---obl(17',1r,10r)---z10rr..z10l---obl(16',10l,2r)---z2r...z3r...z4r
+ ---obl(4',4r,6').more---obl(6',4',6r)---z6rr..z6l---obl(13',6l,12').more
+ ---obl(12',13',8r)---z8rr..z8l---tobl(11',8l,11ll).more---z11ll..z11r
+ ---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8').more---obl(8',9',7l)---z7ll
+ ..z7r---obl(7',7r,5').more---obl(5',7',5r)---z5rr..z5+2o*right..z5l
+ ---obl(3',5l,14').more---obl(14',3',1l)---z1l..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(2',4l,15')---obl(15',2',2l).more---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14',15',16',17');
+endchar;
+
+iff known chars.math_subset_eq_double_not_vert:
+bskchar "Negated subset or double equal to sign with vertical stroke";
+beginchar(chars.math_subset_eq_double_not_vert,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-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); pos5(rule_thickness,270);
+top y1r=top y2r=h-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x10=x11=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10r,z11r]=whatever[z1l,z2l];
+z15'=whatever[z10l,z11l]=whatever[z1l,z2l];
+z16'=whatever[z10l,z11l]=whatever[z1r,z2r];
+z17'=whatever[z10r,z11r]=whatever[z1r,z2r];
+oblu.more:=2f_obl;
+filldraw z1rr---obl(17',1r,10r)---z10rr..z10l---obl(16',10l,2r)---z2r...z3r...z4r
+ ---obl(4',4r,6')---obl(6',4',6r)---z6rr..z6l---obl(13',6l,12')
+ ---obl(12',13',8r)---z8rr..z8l---obl(11',8l,11l)---z11ll..z11r
+ ---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8')---obl(8',9',7l)---z7ll
+ ..z7r---obl(7',7r,5')---obl(5',7',5r)---z5rr..z5+2o*right..z5l
+ ---obl(3',5l,14')---obl(14',3',1l)---z1l..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(2',4l,15')---obl(15',2',2l)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14',15',16',17');
+endchar;
+
+iff known chars.math_subset_very:
+bskchar "Very proper subset sign";
+beginchar(chars.math_subset_very,12u#,v_center(x_height#)); uni "0x22D0";
+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);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=y8=.5[y1,y4]-o=.5[y6,y9]-o;
+y6=y7; y9=y10; y1l-top y6r=if not boldmath:2.25\\fi rule_thickness;
+rt x1=rt x5=rt x6=rt x10=w-u-2o; lft x3r=u; lft x8l=x3l+2rule_thickness;
+x2=x4=x3+(y2-y3); x7=x9=x8+(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_subset_plus:
+bskchar "Proper subset sign with plus";
+beginchar(chars.math_subset_plus,12u#,v_center(x_height#)); uni "non";
+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;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+x7=w-x6; y6=y7=.5[y8,y9]=math_axis; top y8=bot y2l-rule_thickness;
+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(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_subset_eq_plus:
+bskchar "Subset or equal to sign with plus";
+beginchar(chars.math_subset_eq_plus,12u#,v_center(x_height#+3u#)); 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); 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;
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+x9=w-x8; y8=y9=.5[y10,y11]=y3+o; top y10=bot y2l-rule_thickness;
+x10=x11=.5w; y10-y11=x9-x8;
+bskpoints(8,9,hair,hair); bskpoints(11,10,.5hair,.5hair);
+z12=whatever[z11l,z10l]=whatever[z8l,z9l];
+z13=whatever[z11r,z10r]=whatever[z8l,z9l];
+z14=whatever[z11r,z10r]=whatever[z8r,z9r];
+z15=whatever[z11l,z10l]=whatever[z8r,z9r];
+filldraw z8l---obl(12,8l,11l)---z11l..z11rr---obl(13,11r,9l)---z9ll..z9r---
+ obl(14,9r,10r)---z10r..z10ll---obl(15,10l,8r)---z8rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,12,13,14,15);
+endchar;
+
+iff known chars.math_subset_plus_below:
+bskchar "Proper subset sign with plus below";
+beginchar(chars.math_subset_plus_below,12u#,v_center(1.75x_height#)); uni "0x2ABF";
+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; top y1r-bot y4r=x_height; y5=y4; 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;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+y6=y7=.5[y8,y9]; top y8=bot y4r-rule_thickness; bot y9=-d;
+x8=x9=.5[x7,x6]=.5w+.5u; 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(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_subset_times_below:
+bskchar "Proper subset sign with times below";
+beginchar(chars.math_subset_times_below,12u#,v_center(1.75x_height#)); uni "0x2AC1";
+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; top y1r-bot y4r=x_height; y5=y4; 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;
+pos6(rule_thickness,135); pos7(rule_thickness,135);
+pos8(rule_thickness,45); pos9(rule_thickness,45);
+x6r=x8l; x7l=x9r; .5[x6r,x7l]=.5w+.5u; x7l-x6r=y7r-y6l;
+bot y6l=bot y9l=-d; top y7r=top y8r=bot y4r-rule_thickness;
+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];
+oblu:=2f_obl;
+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(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_subset_tilde_below:
+bskchar "Proper subset sign with tilde below";
+beginchar(chars.math_subset_tilde_below,12u#,v_center(1.45x_height#+rule_thickness#)); uni "0x2AC7";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.45x_height;
+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; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+top y7=bot y4r-rule_thickness;
+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;
+vlnka(6,7);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_approx:
+bskchar "Proper subset sign with approximately equal";
+beginchar(chars.math_subset_approx,12u#,v_center(1.75x_height#+rule_thickness#)); uni "0x2AC9";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+numeric spread; spread:=.45x_height;
+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; top y1r-bot y4r=.85x_height; y5=y4; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+top y7=bot y4r-rule_thickness;bot y8=-d;
+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;
+vlnka(6,7);
+vlnka(8,9);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_dot:
+bskchar "Proper subset sign with dot";
+beginchar(chars.math_subset_dot,12u#,v_center(x_height#)); uni "0x2ABD";
+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=y6-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3); x6=.5w;
+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;
+dot(6);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_closed:
+bskchar "Closed subset sign";
+beginchar(chars.math_subset_closed,12u#,v_center(x_height#)); uni "0x2ACF";
+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; lft x3r=u;
+x2=x4=x3+(y2-y3); x1l:=x5l:=x1r-(rule_thickness-currentbreadth);
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+iff known chars.math_subset_closed_eq:
+bskchar "Closed subset or equal to sign";
+beginchar(chars.math_subset_closed_eq,12u#,v_center(x_height#+3u#)); uni "0x2AD1";
+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);
+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; lft x3r=u;
+x2=x4=x3+(y2-y3); x1l:=x5l:=x1r-(rule_thickness-currentbreadth);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+filldraw bskrule(6,7,hair,hair);
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_subset_open:
+bskchar "Open subset sign";
+beginchar(chars.math_subset_open,12u#,v_center(x_height#)); uni "0x27C3";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90); pos11(rule_thickness,180);
+pos12(rule_thickness,270); pos13(rule_thickness,270);
+y2=math_axis; rt x2=w-1.5u; x2-x6=y8-y4=2/3(y9l-y13l)-rule_thickness;
+top y9r=top y10r=h; bot y12r=bot y13r=-d; y11=.5[y9,y12]-o;
+rt x9=rt x13=w-u-2o; lft x11r=u;
+x10=x12=x11+(y10-y11);
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(13,12,hair,hair);
+filldraw z9l---z10l...z11l...z12l---z13l..z13+2o*right..z13rr---z12r...z11r...z10r---z9rr..z9+2o*right..cycle;
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12,13); labels(9rr,13rr);
+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_arm:
+bskchar "Square superset sign with arm";
+beginchar(chars.math_sqsuperset_arm,16u#,v_center(x_height#)); uni "0x2ACE";
+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=u; x4=6u; 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_very:
+bskchar "Very proper square superset sign";
+beginchar(chars.math_sqsuperset_very,12u#,v_center(x_height#)); uni "non";
+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); pos7(rule_thickness,-90); pos8(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+lft x1=lft x4=lft x5=lft x8=u; x2=x3=w-x1; rt x6=rt x7=x2r-2rule_thickness;
+y1r-top y5l=if not boldmath:2.25\\fi rule_thickness; .5[y5,y8]=.5[y6,y7]=.5[y1,y4]; y5=y6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth; x6r:=x7l:=x7-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+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_sqsuperset_eq_neg:
+bskchar "Negated square superset or equal to sign";
+beginchar(chars.math_sqsuperset_eq_neg,12u#,v_center(x_height#+3u#)); uni "0x22E5";
+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;
+.5[y7,y8]=.5[y4,y6]; .5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u;
+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;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(12,3r,14)---obl(14,12,6r).more---z6r..z6l
+ ---obl(16,6l,7r)---z7rr..z7l---obl(15,7l,5l).more---z5l..z5rr---obl(13,5r,11)
+ ---obl(11,13,4r).more---z4r..z4ll---obl(9,4ll,8ll)---z8ll..z8r---obl(10,8r,3l).more
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsuperset_eq_neg_vert:
+bskchar "Negated square superset or equal to sign with vertical stroke";
+beginchar(chars.math_sqsuperset_eq_neg_vert,12u#,v_center(x_height#+3u#)); uni "non";
+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;
+.5[y7,y8]=.5[y4,y6]; x7=x8=.5w; y7=y5-2u;
+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;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(12,3r,14)---obl(14,12,6r)---z6r..z6l
+ ---obl(16,6l,7r)---z7rr..z7l---obl(15,7l,5l)---z5l..z5rr---obl(13,5r,11)
+ ---obl(11,13,4r)---z4r..z4ll---obl(9,4ll,8ll)---z8ll..z8r---obl(10,8r,3l)
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsuperset_eq_neg_alt:
+bskchar "Negated square superset or equal to sign---alternative";
+beginchar(chars.math_sqsuperset_eq_neg_alt,12u#,v_center(x_height#+3u#)); uni "0x22E3";
+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;
+.5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u; y8=y1+2u;
+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;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(19,1l,8ll)---z8ll..z8r---obl(20,8r,2l).more---z2ll..z2---z3..z3rr
+ ---obl(12,3r,14)---obl(14,12,6r).more---z6r..z6l---obl(16,6l,7r)---z7rr..z7l
+ ---obl(15,7l,5l).more---z5l..z5rr---obl(13,5r,11)---obl(11,13,4r).more---z4r..z4ll
+ ---obl(9,4ll,17)---obl(17,9,1rr).more---z1rr..cycle;
+infill obl(18,10,2r)---obl(2r,18,3l)---obl(3l,2r,10)---obl(10,3l,18).more---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+endchar;
+
+iff known chars.math_sqsuperset_eq_neg_alt_vert:
+bskchar "Negated square superset or equal to sign---alternative, with vertical stroke";
+beginchar(chars.math_sqsuperset_eq_neg_alt_vert,12u#,v_center(x_height#+3u#)); uni "non";
+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;
+x7=x8=.5w; y7=y5-2u; y8=y1+2u;
+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;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(19,1l,8ll)---z8ll..z8r---obl(20,8r,2l)---z2ll..z2---z3..z3rr
+ ---obl(12,3r,14)---obl(14,12,6r)---z6r..z6l---obl(16,6l,7r)---z7rr..z7l
+ ---obl(15,7l,5l)---z5l..z5rr---obl(13,5r,11)---obl(11,13,4r)---z4r..z4ll
+ ---obl(9,4ll,17)---obl(17,9,1rr)---z1rr..cycle;
+infill obl(18,10,2r)---obl(2r,18,3l)---obl(3l,2r,10)---obl(10,3l,18)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+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_neg:
+bskchar "Negated superset sign";
+beginchar(chars.math_superset_neg,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2285";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; 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);
+lft x6=x5+u; x7=x2; top y7=h; bot y6=-d;
+pos6(rule_thickness,angle(z6-z7)+90); pos7(rule_thickness,angle(z6-z7)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'l,1l,4'l).more---obl(4'l,7l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,6l).more---z6l..z6rr---obl(5'r,6r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu.more*unitvector(z7-z6)---z7r..z7ll
+ ---obl(1'l,7l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z6-z7)---obl(4'r,2'r,4l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_neg_vert:
+bskchar "Negated superset sign with vertical stroke";
+beginchar(chars.math_superset_neg_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; 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);
+x6=x7=.45w; top y7=h; bot y6=-d;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'l,1l,4'l)---obl(4'l,7l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,6l)---z6l..z6rr---obl(5'r,6r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu*unitvector(z7-z6)---z7r..z7ll
+ ---obl(1'l,7l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z6-z7)---obl(4'r,2'r,4l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); 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_superset_eq_dot:
+bskchar "Superset or equal to sign with dot above";
+beginchar(chars.math_superset_eq_dot,12u#,.5x_height#+2.5u#+dot_size#+math_axis#,.5x_height#+1.5u#-math_axis#); uni "0x2AC4";
+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-u-dot_size; 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;
+x8=.5w-.5u; top y8=h-.5dot_size;
+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;
+dot(8);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_not_eq:
+bskchar "Superset and not equal to sign";
+beginchar(chars.math_superset_not_eq,12u#,v_center(x_height#+3u#)); uni "0x228B";
+adjust_fit(0,0);
+oblu.more:=2f_obl;
+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+3u; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+.5[x8,x9]=.5[x6,x7]; .5[y8,y9]=y6; x9-x8=.75(y9-y8)=3u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l).more---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r).more---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_not_eq_vert:
+bskchar "Superset and not equal to sign with vertical stroke";
+beginchar(chars.math_superset_not_eq_vert,12u#,v_center(x_height#+3u#)); 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); pos5(rule_thickness,270);
+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);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; .5[y8,y9]=y6; .75(y9-y8)=3u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l)---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r)---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_eq_neg:
+bskchar "Negated superset or equal to sign";
+beginchar(chars.math_superset_eq_neg,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+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+3u; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+lft x8=x6; x9=x4; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---tobl(4'r,4l,9r).more---z9r..z9ll
+ ---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr---obl(5'l,5r,9'l).more
+ ---obl(9'l,5'l,6r)---z6rr..z6l---obl(8'l,6l,8l).more---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r).more
+ ---obl(5'r,9'r,4r)---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_eq_neg_vert:
+bskchar "Negated superset or equal to sign with vertical stroke";
+beginchar(chars.math_superset_eq_neg_vert,12u#,v_center(x_height#+3u#)); 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); pos5(rule_thickness,270);
+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);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---obl(4'r,4l,9r)---z9r..z9ll
+ ---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr---obl(5'l,5r,9'l)
+ ---obl(9'l,5'l,6r)---z6rr..z6l---obl(8'l,6l,8l)---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r)
+ ---obl(5'r,9'r,4r)---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_superset_eq:
+bskchar "Not superset or equal to sign";
+beginchar(chars.math_not_superset_eq,12u#,v_center(x_height#+3u#)); uni "0x2289";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+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+3u; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+lft x8=x6+u; x9=x2; y9=y2+2u; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'l,1l,4'l).more---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,9'l).more---tobl(9'l,5'l,6rr).more---z6rr
+ ..z6l---obl(8'l,6l,8l).more---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r).more---obl(5'r,9'r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu.more*unitvector(z9-z8)---z9r..z9ll
+ ---obl(1'l,9l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z8-z9)---obl(4'r,2'r,4l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_superset_eq_vert:
+bskchar "Not superset or equal to sign with vertical stroke";
+beginchar(chars.math_not_superset_eq_vert,12u#,v_center(x_height#+3u#)); 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); pos5(rule_thickness,270);
+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);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=y2+2u; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'l,1l,4'l)---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,9'l)---obl(9'l,5'l,6r)---z6rr
+ ..z6l---obl(8'l,6l,8l)---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r)---obl(5'r,9'r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu*unitvector(z9-z8)---z9r..z9ll
+ ---obl(1'l,9l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z8-z9)---obl(4'r,2'r,4l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_eq_double:
+bskchar "Superset or double equal to sign";
+beginchar(chars.math_superset_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2AC6";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7=y8+.45x_height; bot y8l=bot y9l=-d;
+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;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_not_eq_double:
+bskchar "Superset and not double equal to sign";
+beginchar(chars.math_superset_not_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2ACC";
+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+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top y10=y5r-rule_thickness; x11=x5+2u; .5[x11,x10]=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---tobl(7',10rr,7r).more---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r).more---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---tobl(11',11ll,8l).more---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l).more---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_not_eq_double_vert:
+bskchar "Superset and not double equal to sign with vertical stroke";
+beginchar(chars.math_superset_not_eq_double_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); 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); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top y10=y5r-rule_thickness; x11=x10=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---obl(7',10r,7r)---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r)---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---obl(11',11l,8l)---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l)---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_not_eq_double_alt:
+bskchar "Superset and not double equal to sign (alternative)";
+beginchar(chars.math_superset_not_eq_double_alt,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); 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); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x11=x5; x10=x4; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---tobl(3',4l,10rr).more---z10rr..z10l---obl(2',10l,5l)
+ ---z5l..z5+2o*left..z5rr---obl(4',5r,6').more---obl(6',4',6r)---z6rr..z6l
+ ---obl(13',6l,12').more---tobl(12',13',8rr)---z8rr..z8l---tobl(11',8l,11ll).more
+ ---z11ll..z11r---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8').more
+ ---obl(8',9',7l)---z7ll..z7r---obl(7',7r,5').more---obl(5',7',4r)---z4r...z3r
+ ...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_not_eq_double_alt_vert:
+bskchar "Superset and not double equal to sign (alternative) with vertical stroke";
+beginchar(chars.math_superset_not_eq_double_alt_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); 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); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x11=x10=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+filldraw z1l---z2l...z3l...z4l---obl(3',4l,10r)---z10rr..z10l---obl(2',10l,5l)
+ ---z5l..z5+2o*left..z5rr---obl(4',5r,6')---obl(6',4',6r)---z6rr..z6l
+ ---obl(13',6l,12')---obl(12',13',8r)---z8rr..z8l---obl(11',8l,11l)
+ ---z11ll..z11r---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8')
+ ---obl(8',9',7l)---z7ll..z7r---obl(7',7r,5')---obl(5',7',4r)---z4r...z3r
+ ...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_eq_double_not:
+bskchar "Negated superset or double equal to sign";
+beginchar(chars.math_superset_eq_double_not,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+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-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x11=x5+u; x10=x4; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10l,z11l]=whatever[z1l,z2l];
+p0=z1rr--z2r...z3r...{left}z4r;
+p1=z4l{right}...z3l...z2l---z1l;
+p2=z11ll--z10l;
+p3=z10rr--z11r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+oblu.more:=2f_obl;
+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
+ ---obl(5',4r,7')---obl(7',5',7r).more---z7r..z7ll---obl(8',7l,9').more
+ ---obl(9',8',9r)---z9r..z9ll---obl(10',9l,11r)---z11r..z11ll
+ ---tobl(11',11ll,8l).more---z8l..z8rr---obl(12',8r,13')---obl(13',12',6l).more
+ ---z6l..z6rr---obl(6',6r,4')---obl(4',6',5r).more---z5rr..z5+2o*left..z5l
+ ---obl(2',5l,14')---obl(14',2',1l).more---z1l..z1+2o*left..{right}cycle;
+infill obl(3',10r,4l)---subpath(0,rundy(p1,tim4).zpet) of p1
+ ..point rundy(p3,tim5) of p3---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14');
+endchar;
+
+iff known chars.math_superset_eq_double_not_vert:
+bskchar "Negated superset or double equal to sign with vertical stroke";
+beginchar(chars.math_superset_eq_double_not_vert,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+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-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x11=x10=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10l,z11l]=whatever[z1l,z2l];
+p0=z1rr--z2r...z3r...{left}z4r;
+p1=z4l{right}...z3l...z2l---z1l;
+p2=z11ll--z10l;
+p3=z10rr--z11r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+oblu.more:=2f_obl;
+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
+ ---obl(5',4r,7')---obl(7',5',7r)---z7r..z7ll---obl(8',7l,9')---obl(9',8',9r)
+ ---z9r..z9ll---obl(10',9l,11r)---z11r..z11ll---obl(11',11l,8l)---z8l..z8rr
+ ---obl(12',8r,13')---obl(13',12',6l)---z6l..z6rr---obl(6',6r,4')---obl(4',6',5r)
+ ---z5rr..z5+2o*left..z5l---obl(2',5l,14')---obl(14',2',1l)---z1l
+ ..z1+2o*left..{right}cycle;
+infill obl(3',10r,4l)---subpath(0,rundy(p1,tim4).zpet) of p1
+ ..point rundy(p3,tim5) of p3---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14');
+endchar;
+
+iff known chars.math_superset_very:
+bskchar "Very proper superset sign";
+beginchar(chars.math_superset_very,12u#,v_center(x_height#)); uni "0x22D1";
+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);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,0);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=y8=.5[y1,y4]+o=.5[y6,y9]+o; y6=y7; y9=y10;
+lft x1=lft x5=lft x6=lft x10=u+2o; rt x3r=w-u; rt x8r=x3l-2rule_thickness; y1l-top y6r=if not boldmath:2.25\\fi rule_thickness;
+x2=x4=x3-(y2-y3); x7=x9=x8-(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*left..z10rr---z9r...z8r...z7r---z6rr..z6+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_plus:
+bskchar "Proper superset sign with plus";
+beginchar(chars.math_superset_plus,12u#,v_center(x_height#)); uni "non";
+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;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+x7=w-x6; y6=y7=.5[y8,y9]=math_axis; top y8=bot y2l-rule_thickness;
+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(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_superset_eq_plus:
+bskchar "Superset or equal to sign with plus";
+beginchar(chars.math_superset_eq_plus,12u#,v_center(x_height#+3u#)); 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); 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;
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+x9=w-x8; y8=y9=.5[y10,y11]=y3-o; top y10=bot y2l-rule_thickness;
+x10=x11=.5w; y10-y11=x9-x8;
+bskpoints(8,9,hair,hair); bskpoints(11,10,.5hair,.5hair);
+z12=whatever[z11l,z10l]=whatever[z8l,z9l];
+z13=whatever[z11r,z10r]=whatever[z8l,z9l];
+z14=whatever[z11r,z10r]=whatever[z8r,z9r];
+z15=whatever[z11l,z10l]=whatever[z8r,z9r];
+filldraw z8l---obl(12,8l,11l)---z11l..z11rr---obl(13,11r,9l)---z9ll..z9r---
+ obl(14,9r,10r)---z10r..z10ll---obl(15,10l,8r)---z8rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,12,13,14,15);
+endchar;
+
+iff known chars.math_superset_plus_below:
+bskchar "Proper superset sign with plus below";
+beginchar(chars.math_superset_plus_below,12u#,v_center(1.75x_height#)); uni "0x2AC0";
+italcorr h#*slant-.5u#;
+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; top y1r-bot y4r=x_height; y5=y4; 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;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+y6=y7=.5[y8,y9]; top y8=bot y4r-rule_thickness; bot y9=-d;
+x8=x9=.5[x7,x6]=.5w-.5u; 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(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_superset_times_below:
+bskchar "Proper superset sign with times below";
+beginchar(chars.math_superset_times_below,12u#,v_center(1.75x_height#)); uni "0x2AC2";
+italcorr h#*slant-.5u#;
+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; top y1r-bot y4r=x_height; y5=y4; 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;
+pos6(rule_thickness,135); pos7(rule_thickness,135);
+pos8(rule_thickness,45); pos9(rule_thickness,45);
+x6r=x8l; x7l=x9r; .5[x6r,x7l]=.5w-.5u; x7l-x6r=y7r-y6l;
+bot y6l=bot y9l=-d; top y7r=top y8r=bot y4r-rule_thickness;
+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];
+oblu:=2f_obl;
+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(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_superset_tilde_below:
+bskchar "Proper superset sign with tilde below";
+beginchar(chars.math_superset_tilde_below,12u#,v_center(1.45x_height#+rule_thickness#)); uni "0x2AC8";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+numeric spread; spread:=.45x_height;
+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; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+top y7=bot y4r-rule_thickness;
+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;
+vlnka(6,7);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_approx:
+bskchar "Proper superset sign with approximately equal";
+beginchar(chars.math_superset_approx,12u#,v_center(1.75x_height#+rule_thickness#)); uni "0x2ACA";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+numeric spread; spread:=.45x_height;
+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; top y1r-bot y4r=.85x_height; y5=y4; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+top y7=bot y4r-rule_thickness; bot y8=-d;
+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;
+vlnka(6,7);
+vlnka(8,9);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_dot:
+bskchar "Proper superset sign with dot";
+beginchar(chars.math_superset_dot,12u#,v_center(x_height#)); uni "0x2ABE";
+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=y6+o;
+lft x1=lft x5=u+2o; rt x3r=w-u; x6=.5w;
+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;
+dot(6);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_closed:
+bskchar "Closed superset sign";
+beginchar(chars.math_superset_closed,12u#,v_center(x_height#)); uni "0x2AD0";
+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; rt x3r=w-u;
+x2=x4=x3-(y2-y3); x1l:=x5l:=x1r+(rule_thickness-currentbreadth);
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+iff known chars.math_superset_closed_eq:
+bskchar "Closed superset or equal to sign";
+beginchar(chars.math_superset_closed_eq,12u#,v_center(x_height#+3u#)); uni "0x2AD2";
+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);
+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; rt x3r=w-u;
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+x2=x4=x3-(y2-y3); x1l:=x5l:=x1r+(rule_thickness-currentbreadth);
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+filldraw bskrule(6,7,hair,hair);
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_superset_open:
+bskchar "Open superset sign";
+beginchar(chars.math_superset_open,12u#,v_center(x_height#)); uni "0x27C4";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90); pos11(rule_thickness,0);
+pos12(rule_thickness,270); pos13(rule_thickness,270);
+y2=math_axis; lft x6=1.5u; x2-x6=y8-y4=2/3(y9l-y13l)-rule_thickness;
+top y9r=top y10r=h; bot y12r=bot y13r=-d; y11=.5[y9,y12]+o;
+lft x9=lft x13=u+2o; rt x11r=w-u;
+x10=x12=x11-(y10-y11);
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(13,12,hair,hair);
+filldraw z9l---z10l...z11l...z12l---z13l..z13+2o*left..z13rr---z12r...z11r...z10r---z9rr..z9+2o*left..cycle;
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12,13); labels(9rr,13rr);
+endchar;
+
+iff known chars.math_subset_superset:
+bskchar "Subset above superset sign";
+beginchar(chars.math_subset_superset,12u#,v_center(1.75x_height#)); uni "0x2AD3";
+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);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,0);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]-o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]+o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+rt x1=rt x5=w-u-2o; lft x3r=u; x2=x4=x3+(y2-y3);
+lft x6=lft x10=u+2o; rt x8r=w-u; x7=x9=x8-(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*left..z10rr---z9r...z8r...z7r---z6rr..z6+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_subset:
+bskchar "Superset above subset sign";
+beginchar(chars.math_superset_subset,12u#,v_center(1.75x_height#)); uni "0x2AD4";
+italcorr h#*slant-.5u#;
+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); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]+o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]-o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+lft x1=lft x5=u+2o; rt x3r=w-u; x2=x4=x3-(y2-y3);
+rt x6=rt x10=w-u-2o; lft x8r=u; x7=x9=x8+(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_subset_subset:
+bskchar "Subset above subset sign";
+beginchar(chars.math_subset_subset,12u#,v_center(1.75x_height#)); uni "0x2AD5";
+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);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]-o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]-o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+rt x1=rt x5=w-u-2o; lft x3r=u; x2=x4=x3+(y2-y3);
+rt x6=rt x10=w-u-2o; lft x8r=u; x7=x9=x8+(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_superset:
+bskchar "Superset above superset sign";
+beginchar(chars.math_superset_superset,12u#,v_center(1.75x_height#)); uni "0x2AD6";
+italcorr h#*slant-.5u#;
+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); pos8(rule_thickness,0);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]+o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]+o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+lft x1=lft x5=u+2o; rt x3r=w-u; x2=x4=x3-(y2-y3);
+lft x6=lft x10=u+2o; rt x8r=w-u; x7=x9=x8-(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*left..z10rr---z9r...z8r...z7r---z6rr..z6+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_beside_subset:
+bskchar "Superset beside supset sign";
+beginchar(chars.math_superset_beside_subset,20u#,v_center(x_height#)); uni "0x2AD7";
+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);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=top y6r=top y7r=h; bot y4r=bot y5r=bot y9r=bot y10r=-d;
+y3=.5[y1,y4]+o; y8=.5[y6,y9]-o;
+lft x1=lft x5=u+2o; x2=x4=x3-(y2-y3);
+rt x6=rt x10=w-u-2o; x7=x9=x8+(y7-y8);
+.5[x3,x8]=.5w; lft x8l-rt x3r=2rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,5rr);
+endchar;
+
+iff known chars.math_superset_join_subset:
+bskchar "Superset beside and joined with supset sign";
+beginchar(chars.math_superset_join_subset,20u#,v_center(x_height#)); uni "0x2AD8";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+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); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+top y1r=top y2r=top y6r=top y7r=h; bot y4r=bot y5r=bot y9r=bot y10r=-d;
+y3=.5[y1,y4]+o; y8=.5[y6,y9]-o;
+lft x1=lft x5=u+2o; x2=x4=x3-(y2-y3);
+rt x6=rt x10=w-u-2o; x7=x9=x8+(y7-y8);
+.5[x3,x8]=.5w=.5[x11,x12]; lft x8l-rt x3r=2rule_thickness; x12=x7;
+y11=y12=math_axis;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+bskpoints(11,12,rule_thickness,rule_thickness);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..{right}z1l;
+p2:=reverse (z6l---z7l...z8l...z9l---z10l);
+p3:=reverse (z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..{left}z6l);
+p4:=z12r--z11rr;
+p5:=z11l--z12ll;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p5;
+(tim8,tim9)=p2 intersectiontimes p5;
+(tim10,tim11)=p2 intersectiontimes p4;
+(tim12,tim13)=p3 intersectiontimes p4;
+(tim14,tim15)=p1 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0..z5+2o*left
+ ..subpath(0,rundy(p1,tim4).zpet) of p1.. .5[point tim5 of p5,point tim7 of p5]
+ ..subpath(rundy(p3,tim6),infinity) of p3..z10+2o*right
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p5,tim9),infinity) of p5
+ ..subpath(0,rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3.. .5[point tim13 of p4,point tim15 of p4]
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(1rr,5rr,6rr,5rr,11rr,12ll);
+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_element_dot:
+bskchar "Element sign with dot above";
+beginchar(chars.math_element_dot,9u#,.5x_height#+1.5u#+math_axis#+dot_size#,.5x_height#+.5u#-math_axis#); uni "0x22F5";
+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-u-dot_size; 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; rt x8=x2; bot y8=h-.5dot_size;
+dot(8);
+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_element_bar:
+bskchar "Element sign with bar above";
+beginchar(chars.math_element_bar,9u#,.5x_height#+1.5u#+math_axis#+2rule_thickness#,.5x_height#+.5u#-math_axis#); uni "0x22F6";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-u-2rule_thickness; 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; lft x8=x6; rt x9=w-u; top y8r=top y9r=h;
+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 bskrule(8,9,hair,hair);
+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,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_underbar:
+bskchar "Element sign with bar below";
+beginchar(chars.math_element_underbar,9u#,.5x_height#+.5u#+math_axis#,.5x_height#+1.5u#+2rule_thickness#-math_axis#); uni "0x22F8";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+u+2rule_thickness; 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; lft x8=x6; rt x9=w-u; bot y8l=bot y9l=-d;
+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 bskrule(8,9,hair,hair);
+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,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_neg:
+bskchar "Negated element sign";
+beginchar(chars.math_element_neg,9u#,.5x_height#+2u#+math_axis#, .5x_height#+1.5u#-math_axis#); uni "0x2209";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+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-1.5u; bot y4r=bot y5r=-d+u; 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;
+top rt z8=(w-2u,h); bot lft z9=(2u,-d);
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z8l--z9ll;
+p2:=(x3l+stem,y6r)---z7r;
+p3:=z7l--(x3l+stem,y6l);
+p4:=z5rr---z4r...z3r...z2r---z1rr;
+p5:=z9r--z8rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+z10=p0 intersectionpoint p1;
+z11=p1 intersectionpoint p2;
+z12=p1 intersectionpoint p3;
+(tim3,tim4-2)=p1 intersectiontimes subpath(2,infinity) of p0; z13= point tim3 of p1;
+(tim5,tim6)=p1 intersectiontimes p4;
+(tim7,tim8)=p5 intersectiontimes p4;
+(tim9,tim10-2)=p5 intersectiontimes subpath(2,infinity) of p4;
+(tim11-2,tim12)=subpath(2,infinity) of p4 intersectiontimes p1;
+p6:=subpath (0, rundy(p,(tim1,4f_obl)).zpet) of p0..(x3l+stem,y6r)---z7r;
+p7:=z7l---(x3l+stem,y6l)..subpath(rundy(p,(tim2,4f_obl)),infinity) of p0;
+(tim13,tim14)=subpath(0,2) of p6 intersectiontimes p5;
+(tim15-2,tim16)=subpath(2,infinity) of p6 intersectiontimes p5;
+(tim17,tim18)=subpath(0,2) of p7 intersectiontimes p5;
+(tim19-2,tim20)=subpath(2,infinity) of p7 intersectiontimes p5;
+filldraw z1l---tobl(10,1l,11)---obl(11,10,7r)---z7r..z7l---obl(12,7l,13)---z13+oblu*unitvector(z12-z13)
+ ...subpath(rundy(p0,tim4),infinity) of p0..z5+2o*right
+ ..subpath(0,rundy(p4,tim6).zpet) of p4
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p4,tim8),rundy(p4,tim10).zpet) of p4
+ ..subpath(rundy(p5,(tim9,f_obl)),infinity) of p5
+ ..subpath(0,rundy(p1,tim12).zpet) of p1..{right}z1r..z1+2o*right..cycle;
+infill subpath(rundy(p5,tim16),rundy(p5,tim14).zpet) of p5
+ ..subpath(rundy(p6,tim13),rundy(p6,tim15).zpet) of p6..cycle;
+infill subpath(rundy(p7,tim17),rundy(p7,tim19).zpet) of p7
+ ..subpath(rundy(p5,tim20),rundy(p5,tim18).zpet) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_element_double:
+bskchar "Element sign with double arm";
+beginchar(chars.math_element_double,9u#,v_center(x_height#+u#)); uni "0x22F9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3oblu;
+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);
+pos8(rule_thickness,90); pos9(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; y8=y9; .5[y6,y8]=y3; y6-y8=1/3(y1-y5); x7=x9=x1; x6=x8=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z6r--z7r;
+p2:=z7l--z6l;
+p3:=z8r--z9r;
+p4:=z9l--z8l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4,tim5)=p0 intersectiontimes p3;
+(tim6,tim7)=p0 intersectiontimes p4;
+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,2f_obl)),rundy(p0,(tim4,2f_obl)).zpet) of p0
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_small:
+bskchar "Small element sign";
+beginchar(chars.math_element_small,8u#,v_center(.85x_height#)); uni "0x220A";
+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_element_small_bar:
+bskchar "Small element sign with bar above";
+beginchar(chars.math_element_small_bar,8u#,.425x_height#+.75u#+2rule_thickness#+math_axis#,.425x_height#-math_axis#); uni "0x22F7";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-.75u-2rule_thickness; 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; lft x8=x6; rt x9=w-u; top y8r=top y9r=h;
+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 bskrule(8,9,hair,hair);
+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,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_plus:
+bskchar "Element sign with plus";
+beginchar(chars.math_element_plus,9u#,v_center(x_height#+u#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu; oblu.m:=f_obl;
+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);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+rt x1=rt x5=w-u-2o; lft x3r=u; x8=x9=2/3[x6,x7]; top y8=bot y1l-rule_thickness;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+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)---obl(8'l,6r,8ll).m---z8ll
+ ..z8r---tobl(8'r,8r,7r).m---z7r..z7l---tobl(9'r,7l,9rr).m---z9rr..z9l
+ ---obl(9'l,9l,6l).m---(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,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_element_bar:
+bskchar "Element sign with bar at end";
+beginchar(chars.math_element_bar,9u#,v_center(x_height#+u#)); uni "0x22F3";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu; oblu.m:=f_obl;
+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);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+rt x1=rt x5=w-u-2o; lft x3r=u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+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)---obl(8'l,6r,8ll).m---z8ll
+ ..z8r---z9rr..z9l---obl(9'l,9l,6l).m---(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,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_element_small_bar:
+bskchar "Small element sign with bar at end";
+beginchar(chars.math_element_small_bar,8u#,v_center(.85x_height#)); uni "0x22F4";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu; oblu.m:=f_obl;
+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);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+rt x1=rt x5=w-u-2o; lft x3r=u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+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)---obl(8'l,6r,8ll).m---z8ll
+ ..z8r---z9rr..z9l---obl(9'l,9l,6l).m---(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,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_element_long:
+bskchar "Element sign with long horizontal";
+beginchar(chars.math_element_long,11u#,v_center(x_height#+u#)); uni "0x22F2";
+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=3u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; lft x6=u; x6'r=x6'l=.5[x3r,x6]; y6'r=y6r; y6'l=y6l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z5rr---z4r...z3r...z2r---z1rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+tim3=xpart(p1 intersectiontimes (z6r--z7r));
+tim4=xpart(p1 intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p0,tim1).zpet) of p0..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)
+ ..subpath(rundy(p0,tim2),infinity) of p0..z5+2o*right
+ ..subpath(0,rundy(p1,tim4).zpet) of p1..z6'l---z6l..z6r---z6'r
+ ..subpath(rundy(p1,tim3),infinity) of p1..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,6',7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_down:
+bskchar "Downwards element sign";
+beginchar(chars.math_element_down,11u#,v_center(x_height#)); uni "0x2AD9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+rt x1r=rt x2r=w-u; lft x4r=lft x5r=u; x3=.5[x1,x4]+o;
+bot y1=bot y5=-d-o; top y3r=h+o;
+y2=y4=y3+(x3-x2);
+x6=x7=x3; y7=y1; y6=y3r;
+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..(x6r,y3l-stem)---z7r..z7l---(x6l,y3l-stem)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*down..z5rr---z4r...z3r...z2r---z1rr..z1+2o*down..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_up:
+bskchar "Upwards element sign";
+beginchar(chars.math_element_up,11u#,v_center(x_height#)); uni "0x27D2";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180); pos3(rule_thickness,-90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos6(rule_thickness,180); pos7(rule_thickness,180);
+lft x1r=lft x2r=u; rt x4r=rt x5r=w-u; x3=.5[x1,x4]-o;
+top y1=top y5=h+o; bot y3r=-d-o;
+y2=y4=y3-(x2-x3);
+x6=x7=x3; y7=y1; y6=y3r;
+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..(x6r,y3l+stem)---z7r..z7l---(x6l,y3l+stem)
+ ..subpath(rundy(p,tim2),infinity) of p..z5+2o*up..z5rr---z4r...z3r...z2r
+ ---z1rr..z1+2o*up..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_sqelement:
+bskchar "Square element sign (Z notation bag membership)";
+beginchar(chars.math_sqelement,10u#,v_center(x_height#+u#)); uni "0x22FF";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1r=top y2r=h; bot y3r=bot y4r=-d;
+rt x1=rt x4=w-u;
+lft x2=lft x3=u;
+y5=y6=.5[y1,y3]+o; x6=x1; x2l:=x3l:=x5=x2+rule_thickness-currentbreadth;
+bskpoints(1,2,hair,hair); bskpoints(4,3,hair,hair);
+filldraw z1rr---obl(2r,1r,3r)---obl(3r,2r,4r)---z4rr..z4l---obl(3l,4l,5l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,5r,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6); labels(1rr,4rr);
+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.math_ownership_bar:
+bskchar "Ownership sign with bar above";
+beginchar(chars.math_ownership_bar,9u#,.5x_height#+1.5u#+math_axis#+2rule_thickness#,.5x_height#+.5u#-math_axis#); uni "0x22FD";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-u-2rule_thickness; 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; lft x8=u; rt x9=x6; top y8r=top y9r=h;
+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 bskrule(8,9,hair,hair);
+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,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_ownership_neg:
+bskchar "Negated ownership sign";
+beginchar(chars.math_ownership_neg,9u#,.5x_height#+2u#+math_axis#, .5x_height#+1.5u#-math_axis#); uni "0x220C";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+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-1.5u; bot y4r=bot y5r=-d+u; 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;
+top rt z8=(w-2u,h); bot lft z9=(2u,-d);
+pos8(rule_thickness,angle(z8-z9)-90); pos9(rule_thickness,angle(z8-z9)-90);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z8l--z9ll;
+p2:=(x3l-stem,y6r)---z7r;
+p3:=z7l--(x3l-stem,y6l);
+p4:=z5rr---z4r...z3r...z2r---z1rr;
+p5:=z9r--z8rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+(tim21,tim22)=p0 intersectiontimes p1;
+(tim23,tim24)=p1 intersectiontimes p2;
+z12=p1 intersectionpoint p3;
+(tim3,tim4-2)=p1 intersectiontimes subpath(2,infinity) of p0; z13= point tim3 of p1;
+(tim5,tim6)=p1 intersectiontimes p4; z10=point tim5 of p1;
+(tim7,tim8)=p5 intersectiontimes p4;
+(tim9,tim10-2)=p5 intersectiontimes subpath(2,infinity) of p4;
+(tim11-2,tim12)=subpath(2,infinity) of p4 intersectiontimes p1;
+p6:=subpath (0, rundy(p,(tim1,4f_obl)).zpet) of p0..(x3l-stem,y6r)---z7r;
+p7:=z7l---(x3l-stem,y6l)..subpath(rundy(p,(tim2,4f_obl)),infinity) of p0;
+(tim13,tim14)=subpath(0,2) of p6 intersectiontimes p5;
+(tim15-2,tim16)=subpath(2,infinity) of p6 intersectiontimes p5;
+(tim17,tim18)=subpath(0,2) of p7 intersectiontimes p5;
+(tim19-2,tim20)=subpath(2,infinity) of p7 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim21).zpet) of p0
+ ..subpath(rundy(p1,tim22),rundy(p1,tim23).zpet) of p1
+ ..subpath(rundy(p2,tim24),infinity) of p2..z7l---obl(12,7l,13)---z13+oblu*unitvector(z12-z13)
+ ...subpath(rundy(p0,tim4),infinity) of p0..z5+2o*left..{right}z5r
+ ---tobl(10,5r,9ll)---z9ll
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p4,tim8),rundy(p4,tim10).zpet) of p4
+ ..subpath(rundy(p5,tim9),infinity) of p5
+ ..subpath(0,rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p4,tim11),infinity) of p4{left}..z1+2o*left..{right}cycle;
+infill subpath(rundy(p5,tim16),rundy(p5,tim14).zpet) of p5
+ ..subpath(rundy(p6,tim13),rundy(p6,tim15).zpet) of p6..cycle;
+infill subpath(rundy(p7,tim17),rundy(p7,tim19).zpet) of p7
+ ..subpath(rundy(p5,tim20),rundy(p5,tim18).zpet) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_ownership_small:
+bskchar "Small ownership sign";
+beginchar(chars.math_ownership_small,8u#,v_center(.85x_height#)); uni "0x220D";
+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.math_ownership_small_bar:
+bskchar "Small ownership sign with bar above";
+beginchar(chars.math_ownership_small_bar,8u#,.425x_height#+.75u#+2rule_thickness#+math_axis#,.425x_height#-math_axis#); uni "0x22FE";
+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);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-.75u-2rule_thickness; 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; lft x8=u; rt x9=x6; top y8r=top y9r=h;
+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 bskrule(8,9,hair,hair);
+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,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_ownership_plus:
+bskchar "Ownership sign with plus";
+beginchar(chars.math_ownership_plus,9u#,v_center(x_height#+u#)); uni "non";
+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);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+lft x1=lft x5=u+2o; rt x3r=w-u; x8=x9=2/3[x6,x7]; top y8=bot y1l-rule_thickness;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+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)---obl(8'r,6r,8r).m---z8r..z8ll
+ ---tobl(8'l,8ll,7r).m---z7r..z7l---tobl(9'l,7l,9l).m---z9l..z9rr
+ ---obl(9'r,9rr,6l).m---(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,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_ownership_bar:
+bskchar "Ownership sign with bar at end";
+beginchar(chars.math_ownership_bar,9u#,v_center(x_height#+u#)); uni "0x22FB";
+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);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+lft x1=lft x5=u+2o; rt x3r=w-u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+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)---obl(8'r,6r,8r).m---z8r..z8ll
+ ---z9l..z9rr---obl(9'r,9rr,6l).m---(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,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_ownership_small_bar:
+bskchar "Small ownership sign with bar at end";
+beginchar(chars.math_ownership_small_bar,8u#,v_center(.85x_height#)); uni "0x22FC";
+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);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+lft x1=lft x5=u+2o; rt x3r=w-u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+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)---obl(8'r,6r,8r).m---z8r..z8ll
+ ---z9l..z9rr---obl(9'r,9rr,6l).m---(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,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_ownership_long:
+bskchar "Ownership sign with long horizontal";
+beginchar(chars.math_ownership_long,11u#,v_center(x_height#+u#)); uni "0x22FA";
+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-3u;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; rt x6=w-u; x6'r=x6'l=.5[x3r,x6]; y6'r=y6r; y6'l=y6l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z5rr---z4r...z3r...z2r---z1rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+tim3=xpart(p1 intersectiontimes (z6r--z7r));
+tim4=xpart(p1 intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p0,tim1).zpet) of p0..(x3l-stem,y6r)---z7r..z7l---(x3l-stem,y6l)..
+subpath(rundy(p0,tim2),infinity) of p0..z5+2o*left..subpath(0,rundy(p1,tim4).zpet) of p1..z6'l---z6l..z6r---z6'r..subpath(rundy(p1,tim3),infinity) of p1..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,6',7); labels(1rr,5rr);
+endchar;
+
+iff known chars.symbol_smile:
+bskchar "Smile";
+beginchar(chars.symbol_smile,17u#,v_center(.6x_height#)); uni "0x2323";
+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_smile_simple:
+bskchar "Simple smile";
+beginchar(chars.symbol_smile_simple,13u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; top y1r=h; rt x2=w-u; y2=y1+.5apex_o;
+filldraw z2r{dir-120}..z1r&z1r--z1l{dir-60}..z2l&z2l--cycle;
+penlabels(1,2);
+endchar;
+
+iff known chars.symbol_frown:
+bskchar "Frown";
+beginchar(chars.symbol_frown,17u#,v_center(.5x_height#)); uni "0x2322";
+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_frown_simple:
+bskchar "Simple frown";
+beginchar(chars.symbol_frown_simple,13u#,v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; bot y1l=-d; rt x2=w-u; y2=y1-.5apex_o;
+filldraw z2r{dir120}..z1r&z1r--z1l{dir60}..z2l&z2l--cycle;
+penlabels(1,2);
+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---tobl(21,6r,1ll)---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.math_vertical_cute:
+bskchar "Cute vertical line";
+beginchar(chars.math_vertical_cute,5u#,x_height#,0); uni "non";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h+o; bot y2=-d-o;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2); labels(1ll,2rr);
+endchar;
+
+iff known chars.math_vertical_neg:
+bskchar "Negated vertical line";
+beginchar(chars.math_vertical_neg,5u#,body_height#,paren_depth#); uni "0x2224";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h; bot y2=-d;
+x3=.5u; x4=w-x3; .5[y3,y4]=math_axis; y4-y3=2u;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+endchar;
+
+iff known chars.math_vertical_horizontal:
+bskchar "Vertical line with horizontal stroke";
+beginchar(chars.math_vertical_horizontal,7.5u#,body_height#,paren_depth#); uni "0x27CA";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h; bot y2=-d;
+x3=u; x4=w-x3; y3=y4=math_axis;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+endchar;
+
+iff known chars.math_vertical_revneg:
+bskchar "Reverse-negated vertical line";
+beginchar(chars.math_vertical_revneg,5u#,body_height#,paren_depth#); uni "0x2AEE";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h; bot y2=-d;
+x3=.5u; x4=w-x3; .5[y3,y4]=math_axis; y3-y4=2u;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+endchar;
+
+iff known chars.math_vertical_neg_cute:
+bskchar "Negated cute vertical line";
+beginchar(chars.math_vertical_neg_cute,5u#,x_height#,0); uni "non";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h+o; bot y2=-d-o;
+x3=.5u; x4=w-x3; .5[y3,y4]=math_axis; y4-y3=2u;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+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_slanted_double:
+bskchar "Double slanted vertical line";
+beginchar(chars.math_slanted_double,8u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5[x1,x4]=.5w; top y1=top y3=h; bot y2=bot y4=-d;
+x1-x2=x3-x4=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_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_vertical_double:
+bskchar "Double vertical line (norm)";
+beginchar(chars.math_vertical_double,6u#,body_height#,paren_depth#); uni "0x2016";
+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=2u+rule_thickness;
+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_vertical_double_cute:
+bskchar "Cute double vertical line";
+beginchar(chars.math_vertical_double_cute,8u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h+o; bot y2=bot y4=-d-o;
+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); labels(1rr,2ll,4rr,3ll);
+endchar;
+
+iff known chars.math_vertical_double_neg:
+bskchar "Negated double vertical line";
+beginchar(chars.math_vertical_double_neg,8u#,body_height#,paren_depth#); uni "0x2226";
+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);
+x5=.5u; x6=w-x5; .5[y5,y6]=math_axis; y6-y5=4u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x5'l=x5'r=x1l; x6'r=x6'l=x1r; x5''l=x5''r=x3l; x6''l=x6''r=x3r;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z5''l=whatever[z5l,z6l]; z5''r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+z6''l=whatever[z5l,z6l]; z6''r=whatever[z5r,z6r];
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---obl(5'l,1l,5l)---z5l..z5rr---tobl(5'r,5rr,2l)---z2ll..z2r
+ ---obl(6'r,2r,6r)---obl(5''r,5r,4l)---z4l..z4rr---obl(6''r,4r,6r)
+ ---z6r..z6ll---tobl(6''l,6ll,3r)---z3r..z3ll---obl(5''l,3l,5l)
+ ---obl(6'l,6l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll,5rr,6ll);
+endchar;
+
+iff known chars.math_vertical_double_neg_cute:
+bskchar "Negated cute double vertical line";
+beginchar(chars.math_vertical_double_neg_cute,8u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h+o; bot y2=bot y4=-d-o;
+x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+x5=.5u; x6=w-x5; .5[y5,y6]=math_axis; y6-y5=4u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x5'l=x5'r=x1l; x6'r=x6'l=x1r; x5''l=x5''r=x3l; x6''l=x6''r=x3r;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z5''l=whatever[z5l,z6l]; z5''r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+z6''l=whatever[z5l,z6l]; z6''r=whatever[z5r,z6r];
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---obl(5'l,1l,5l)---z5l..z5rr---tobl(5'r,5rr,2l)---z2ll..z2r
+ ---obl(6'r,2r,6r)---obl(5''r,5r,4l)---z4l..z4rr---obl(6''r,4r,6r)
+ ---z6r..z6ll---tobl(6''l,6ll,3r)---z3r..z3ll---obl(5''l,3l,5l)
+ ---obl(6'l,6l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll,5rr,6ll);
+endchar;
+
+iff known chars.math_parallel_hbar:
+bskchar "Parallel sign with horizontal bar";
+beginchar(chars.math_parallel_hbar,8u#,body_height#,paren_depth#); uni "0x2AF2";
+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);
+x5=.5u; x6=w-x5; y5=y6=math_axis;
+pos5(rule_thickness,-90); pos6(rule_thickness,-90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x5'l=x5'r=x1l; x6'r=x6'l=x1r; x5''l=x5''r=x3l; x6''l=x6''r=x3r;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z5''l=whatever[z5l,z6l]; z5''r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+z6''l=whatever[z5l,z6l]; z6''r=whatever[z5r,z6r];
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---obl(5'l,1l,5l)---z5l..z5rr---tobl(5'r,5rr,2l)---z2ll..z2r
+ ---obl(6'r,2r,6r)---obl(5''r,5r,4l)---z4l..z4rr---obl(6''r,4r,6r)
+ ---z6r..z6ll---tobl(6''l,6ll,3r)---z3r..z3ll---obl(5''l,3l,5l)
+ ---obl(6'l,6l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll,5rr,6ll);
+endchar;
+
+iff known chars.math_parallel_tilde:
+bskchar "Parallel sign with tilde";
+beginchar(chars.math_parallel_tilde,10u#,body_height#,paren_depth#); uni "0x2AF3";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+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);
+.5[y5,y6]=math_axis; spread:=.45x_height;
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+vlnka(5,6).nodraw;
+p0=_vlnka;
+p1=z1l--z2ll;
+p2=z2r--z1rr;
+p3=z3ll--z4l;
+p4=z4rr--z3r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4,tim5)=p0 intersectiontimes p3;
+(tim6,tim7)=p0 intersectiontimes p4;
+(tim8-4,tim9)=subpath(4,infinity) of p0 intersectiontimes p4;
+(tim10-4,tim11)=subpath(4,infinity) of p0 intersectiontimes p3;
+(tim12-4,tim13)=subpath(4,infinity) of p0 intersectiontimes p2;
+(tim14-4,tim15)=subpath(4,infinity) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p1,(tim1,2oblu)),infinity) of p1
+ ..subpath(0,rundy(p2,(tim3,2oblu)).zpet) of p2
+ ..subpath(rundy(p0,(tim2,2oblu)),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,(tim8,2oblu)).zpet) of p0
+ ..subpath(rundy(p4,(tim9,2oblu)),infinity) of p4
+ ..subpath(0,rundy(p3,(tim11,2oblu)).zpet) of p3
+ ..subpath(rundy(p0,(tim10,2oblu)),rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(p0,tim14),infinity) of p0..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll);
+endchar;
+
+iff known chars.math_vertical_triple:
+bskchar "Triple vertical line";
+beginchar(chars.math_vertical_triple,9u#,body_height#,paren_depth#); uni "0x2AF4";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; x5=x6; .5[x1,x5]=.5w; top y1=top y3=top y5=h; bot y2=bot y4=bot y6=-d;
+x5-x3=x3-x1=2u+rule_thickness;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,0,0);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_vertical_triple_hbar:
+bskchar "Triple vertical line with horizontal bar";
+beginchar(chars.math_vertical_triple_hbar,11u#,body_height#,paren_depth#); uni "0x2AF5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+x1=x2; x3=x4; x5=x6; .5[x1,x5]=.5w; top y1=top y3=top y5=h; bot y2=bot y4=bot y6=-d;
+x5-x3=x3-x1=2u+rule_thickness;
+lft x7=u; rt x8=w-u; y7=y8=math_axis;
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(6,5,rule_thickness,rule_thickness);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y10=y11=y12=y13=y14=y15=y7l; y16=y17=y18=y19=y20=y21=y7r;
+x10=x21=x1l; x11=x20=x1r; x12=x19=x3l; x13=x18=x3r; x14=x17=x5l; x15=x16=x5r;
+filldraw z7l---obl(10,7l,2l)---z2ll..z2r---tobl(11,2ll,12)---tobl(12,11,4l)---z4l
+ ..z4r---tobl(13,4r,14)---tobl(14,13,6l)---z6l..z6rr---tobl(15,6r,8ll)---z8ll
+ ..z8r---tobl(16,8r,5r)---z5r..z5ll---tobl(17,5l,18)--tobl(18,17,3r)---z3r..z3l
+ ---tobl(19,3l,20)---tobl(20,19,1r)---z1rr..z1l---tobl(21,1l,7rr)---z7rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2ll,6rr,10,11,12,13,14,15,16,17,18,19,21);
+endchar;
+
+iff known chars.math_vertical_triple_op:
+bskchar "N-ary triple vertical bar operator";
+beginchar(chars.math_vertical_triple_op,12u#,v_center(10/6dh#)); uni "0x2AFC";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; x5=x6; .5[x1,x5]=.5w; top y1=top y3=top y5=h; bot y2=bot y4=bot y6=-d;
+x5-x3=x3-x1=3u+rule_thickness;
+pos1(stem,0); pos2(stem,0);
+pos3(stem,0); pos4(stem,0);
+pos5(stem,0); pos6(stem,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,0,0);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_uptack_double:
+bskchar "Double up tack";
+beginchar(chars.math_uptack_double,12u#,asc_height#,0); uni "0x2AEB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; x3-x1=max(3curve,3u);
+y2=y4=y5r; bot y5l=bot y6l=-d; lft x5=u; x6=w-x5;
+bskpoints(1,2,rule_thickness,rule_thickness); bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---tobl(2l,1l,5rr)---z5rr..z5l---z6ll..z6r---obl(4r,6r,3r)---z3r
+ ..z3ll---obl(4l,3l,2r)---obl(2r,4r,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6); labels(1rr,3ll,5rr,6ll);
+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_times_uni:
+bskchar "N-ary times operator sign (for Unicode)";
+beginchar(chars.math_times_uni,15u#,v_center(10/6dh#)); uni "0x2A09";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(stem,135); pos2(stem,135);
+pos3(stem,45); pos4(stem,45);
+lft x1r=lft x3l=u; rt x2l=rt x4r=w-u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,stem,stem); bskpoints(4,3,.5stem,.5stem);
+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_times_underbar:
+bskchar "Times operator sign with underbar";
+beginchar(chars.math_times_underbar,13u#,5.5u#+math_axis#,5.5u#+rule_thickness#-math_axis#); uni "0x2A31";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u+rule_thickness; 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];
+x9=x1; x10=x4; bot y9l=bot y10l=-d;
+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;
+filldraw bskrule(9,10,hair,0);
+penlabels(1,2,3,4,9,10); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_times_semicircle_left:
+bskchar "Times operator sign in left half circle";
+beginchar(chars.math_times_semicircle_left,11u#,v_center(11u#)); uni "0x2A34";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+lft x6=u+.5rule_thickness; .5[x6,x2]=.5[x11,x10]=.5w+u; y8-y4=x2-x6;
+x9r=x11l; x10l=x12r; lft x9r=3u+rule_thickness;
+y9l=y12l; y10r=y11r; y2=.5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+circle_points(rule_thickness);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(4,8) of (draw_circle.l)..reverse subpath(4,8) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_semicircle_right:
+bskchar "Times operator sign in right half circle";
+beginchar(chars.math_times_semicircle_right,11u#,v_center(11u#)); uni "0x2A35";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+rt x2=w-u-.5rule_thickness; .5[x6,x2]=.5[x11,x10]=.5w-u; y8-y4=x2-x6;
+x9r=x11l; x10l=x12r; lft x9r=u+rule_thickness;
+y9l=y12l; y10r=y11r; y2=.5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+circle_points(rule_thickness);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(0,4) of (draw_circle.l)..reverse subpath(0,4) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_circle_circumflex:
+bskchar "Times operator sign in circle with circumflex";
+beginchar(chars.math_times_circle_circumflex,13u#,5.5u#+math_axis#+.5x_height#,5.5u#-math_axis#); uni "0x2A36";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+rt x2=w-u-.5rule_thickness; .5[x6,x2]=.5[x11,x10]=x18-o=.5w; y8-y4=x2-x6; y2=.5[y11,y12];
+x9r=x11l; x10l=x12r; lft x9r=3u+rule_thickness;
+y9l=y12l; y10r=y11r; .5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+circle_points(rule_thickness);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+circumflex(17,18,19);
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_circle_double:
+bskchar "Times operator sign in double circle";
+beginarithchar(chars.math_times_circle_double); uni "0x2A37";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+rt x2=w-u; .5[x6,x2]=.5w; y8-y4=x2-x6; y2=math_axis;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+rt x2=w-u-1.5rule_thickness; .5[x6,x2]=.5w; y8-y4=x2-x6; y2=math_axis;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+x9r=x11l; x10l=x12r; lft x9r=3.5u+rule_thickness; .5[x11,x10]=.5w;
+y9l=y12l; y10r=y11r; .5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_dot:
+bskchar "Times operator sign with dot";
+beginarithchar(chars.math_times_dot); uni "0x2A30";
+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);
+x9=.5w; top y9+.5dot_size=h+o;
+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;
+dot(9);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_times_bot:
+bskchar "Times operator with bottom closed";
+beginarithchar(chars.math_times_bot); uni "0x2A32";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+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);
+x0=.5w; y0l=y1l; y1'=y4'=y1r;
+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];
+z1'=whatever[z1l,z5]; z4'=whatever[z4l,z5];
+filldraw z1l---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3l---obl(8,3l,1r)---z1r..cycle;
+infill obl(5,1',4')---obl(4',5,1')---obl(1',4',5)---cycle;
+penlabels(0,1,2,3,4); labels(1',4',5,6,7,8);
+endchar;
+
+iff known chars.math_times_left:
+bskchar "Times operator with left vertical";
+beginarithchar(chars.math_times_left); uni "0x22C9";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+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);
+y0=math_axis; x0l=x3l; x1'=x3'=x0r;
+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];
+z1'=whatever[z1r,z8]; z3'=whatever[z3l,z8];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(8,1',3')---obl(3',8,1')---obl(1',3',8)---cycle;
+penlabels(0,1,2,3,4); labels(1',3',5,6,7,8);
+endchar;
+
+iff known chars.math_times_left_black:
+bskchar "Times operator with left half black";
+beginarithchar(chars.math_times_left_black); uni "0x29D4";
+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];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+penlabels(1,2,3,4); labels(5,6,7);
+endchar;
+
+iff known chars.math_times_right:
+bskchar "Times operator with right vertical";
+beginarithchar(chars.math_times_right); uni "0x22CA";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+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);
+y0=math_axis; x0r=x4r; x2'=x4'=x0l;
+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];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,1,2,3,4); labels(2',4',5,6,7,8);
+endchar;
+
+iff known chars.math_times_right_black:
+bskchar "Times operator with right half black";
+beginarithchar(chars.math_times_right_black); uni "0x29D5";
+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[z1r,z2r];
+z7=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(6,2r,3r)---z3r..z3ll---obl(7,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7);
+endchar;
+
+iff known chars.math_times_verticals:
+bskchar "Times operator with both vertical (bowtie)";
+beginarithchar(chars.math_times_verticals); uni "0x22C8";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0); pos0'(rule_thickness,0);
+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);
+y0=y0'=math_axis; x0r=x4r; x0'l=x3l; x1'=x3'=x0'r; x2'=x4'=x0l;
+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];
+z1'=whatever[z1r,z8]; z3'=whatever[z3l,z8];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(8,1',3')---obl(3',8,1')---obl(1',3',8)---cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,0',1,2,3,4); labels(1',2',3',4',5,6,7,8);
+endchar;
+
+iff known chars.math_join:
+bskchar "Join";
+beginchar(chars.math_join,16u#,asc_height#,0); uni "0x2A1D";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0); pos0'(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=u; rt x2l=rt x4r=w-u;
+bot y1l=bot y4l=-d; top y2r=top y3r=h;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+y0=y0'=math_axis; x0r=x4r; x0'l=x3l; x1'=x3'=x0'r; x2'=x4'=x0l;
+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];
+z1'=whatever[z1r,z8]; z3'=whatever[z3l,z8];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(8,1',3')---obl(3',8,1')---obl(1',3',8)---cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,0',1,2,3,4); labels(1',2',3',4',5,6,7,8);
+endchar;
+
+iff known chars.math_bowtie_black:
+bskchar "Black bowtie";
+beginarithchar(chars.math_bowtie_black); uni "0x29D3";
+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[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(6,2r,3r)---z3r..z3l---z1r..cycle;
+penlabels(1,2,3,4); labels(5,6);
+endchar;
+
+iff known chars.math_bowtie_left_black:
+bskchar "Bowtie with left half black";
+beginarithchar(chars.math_bowtie_left_black); uni "0x29D1";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+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);
+y0=math_axis; x0r=x4r; x2'=x4'=x0l;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,1,2,3,4); labels(2',4',5,6,7);
+endchar;
+
+iff known chars.math_bowtie_right_black:
+bskchar "Bowtie with right half black";
+beginarithchar(chars.math_bowtie_right_black); uni "0x29D2";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+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);
+y0=math_axis; x0l=x3l; x1'=x3'=x0r;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1r,z2r];
+z7=whatever[z4l,z3l]=whatever[z1r,z2r];
+z1'=whatever[z1r,z7]; z3'=whatever[z3l,z7];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(6,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(7,1',3')---obl(3',7,1')---obl(1',3',7)---cycle;
+penlabels(0,1,2,3,4); labels(1',3',5,6,7);
+endchar;
+
+iff known chars.math_semiproduct_left:
+bskchar "Left semidirect product";
+beginarithchar(chars.math_semiproduct_left); uni "0x22CB";
+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---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_semiproduct_right:
+bskchar "Right semidirect product";
+beginarithchar(chars.math_semiproduct_right); uni "0x22CC";
+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---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_times_BB:
+bskchar "Blackboard-bold times operator sign";
+beginarithchar(chars.math_times_BB); uni "non";
+pickup tiny.nib;
+path p;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(cap_stem,45); pos4(cap_stem,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,cap_stem,cap_stem); bskpoints(4,3,.5cap_stem,.5cap_stem);
+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;
+infill z4l..z4rr---z3r..z3ll---cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_product_cartesian:
+bskchar "Cartesian product operator sign";
+beginchar(chars.math_product_cartesian,8u#,v_center(asc_height#)); uni "0x2A2F";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+lft x1r=lft x3l=u; rt x2r=rt x4l=w-u-.5rule_thickness;
+bot y1r-.25rule_thickness=bot y4l=-d+u; top y2r=top y3l+.25rule_thickness=h-u;
+pos1(rule_thickness,angle(z2r-z1r)+90); pos2(rule_thickness,angle(z2r-z1r)+90);
+pos3(rule_thickness,angle(z4l-z3l)+90); pos4(rule_thickness,angle(z4l-z3l)+90);
+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_smash:
+bskchar "Smash product sign";
+compute_spread(.45x_height#,.55x_height#);
+beginarithchar(chars.math_smash); uni "0x2A33";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,45); pos2(rule_thickness,45);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+pos5(rule_thickness,-45); pos6(rule_thickness,-45);
+pos7(rule_thickness,-45); pos8(rule_thickness,-45);
+top y1=top y5=h; bot y4=bot y8=-d; lft x3=lft x6=u; rt x2=rt x7=w-u;
+z3-z1=spread*dir225; z2-z1=z4-z3; z6-z5=z8-z7; z7-z5=spread*dir-45;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness); bskpoints(8,7,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];
+z9'=whatever[z7l,z8l]=whatever[z1r,z2r];
+z10'=whatever[z7r,z8r]=whatever[z1r,z2r];
+z11'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z12'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z13'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z14'=whatever[z7l,z8l]=whatever[z3l,z4l];
+z15'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z16'=whatever[z7l,z8l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,9')---obl(9',2',7l)---z7ll..z7r
+ ---obl(10',7r,2r)---z2r..z2ll---obl(11',2l,12')---obl(12',11',4r)---z4r..z4l
+ ---obl(13',4l,8r)---z8rr..z8l---obl(14',8l,5')---obl(5',4l,6r)---z6r..z6ll
+ ---obl(6',6l,3l)---z3ll..z3r---obl(7',3r,8')---obl(8',7',1l)---z1l..cycle;
+infill obl(3',16',4')---obl(4',3',15')---obl(15',4',16')---obl(16',15',3')---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+labels(2ll,3ll,5rr,6ll,7ll,8rr,1',2',3',4',5',6',7',8',9',10',11',12',13',14',15',16');
+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_equals_plus:
+bskchar "Equals-plus sign";
+beginchar(chars.math_equals_plus,13u#,v_center(11u#+.45x_height#)); uni "0x2A71";
+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);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]; x9=x11=x1; x10=x12=x2;
+x3=x4=.5w; y3=y9l; y4=-d; y9=y10=y11-.45x_height; y12=y11; top y11r=h;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+bskpoints(10,9,hair,0);
+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)---z10l..z10rr---z9r..z9ll
+ ---obl(3l,9l,8)---obl(8,3l,1r)---z1rr..cycle;
+filldraw bskrule(11,12,hair,0);
+penlabels(1,2,3,4,9,10,11,12); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_equals:
+bskchar "Plus-equals sign";
+beginchar(chars.math_plus_equals,13u#,v_center(11u#+.45x_height#)); uni "0x2A72";
+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);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]; x9=x11=x1; x10=x12=x2;
+x3=x4=.5w; top y3=h; y4=y9r; y9=y10=y11+.45x_height; y11=y12; bot y11l=-d;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+bskpoints(9,10,hair,0);
+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;
+filldraw bskrule(12,11,hair,0);
+penlabels(1,2,3,4,9,10,11,12); 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;
+filldraw bskrule(1,2,hair,hair);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_dot:
+bskchar "Minus sign with dot above";
+beginarithchar(chars.math_minus_dot); uni "0x2238";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x3=.5w; y3=y1+2rule_thickness+dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_comma:
+bskchar "Minus sign with comma above";
+beginarithchar(chars.math_minus_comma); uni "0x2A29";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x3=.5w; y3=y1+2rule_thickness+dot_size+.25comma_depth;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+comma(3,dot_size,infinity,.6comma_depth);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_dot_below:
+bskchar "Minus sign with dot below";
+beginarithchar(chars.math_minus_dot_below); uni "0x2A2A";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x3=.5w; y3=y1-2rule_thickness-dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_dot_lr:
+bskchar "Dotted (left-right) minus sign";
+beginarithchar(chars.math_minus_dot_lr); uni "0x2A2B";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]=math_axis;
+.5[x3,x4]=.5w; y3=y1+2rule_thickness+dot_size; lft x3=x1+.5dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3); dot(4);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_dot_rl:
+bskchar "Dotted (right-left) minus sign";
+beginarithchar(chars.math_minus_dot_rl); uni "0x2A2C";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]=math_axis;
+.5[x3,x4]=.5w; y3=y1+2rule_thickness+dot_size; lft x4=x1+.5dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3); dot(4);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_through_circ:
+bskchar "Minus through circle";
+beginarithchar(chars.math_minus_through_circ); uni "non";
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5w; x2-x6=y8-y4=w-6u;
+circle_points(rule_thickness);
+lft x9=u; rt x10=w-u; y9=y10=math_axis;
+bskpoints(9,10,hair,hair);
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9rr{left}..z9l---z10ll..z10r---z9rr;
+(tim0-1,tim1-1)=subpath(1,3) of p0 intersectiontimes subpath(1,2) of p2;
+(tim2-5,tim3)=subpath(5,7) of p0 intersectiontimes subpath(0,2) of p2;
+(tim4-5,tim5-3)=subpath(5,7) of p0 intersectiontimes subpath(3,4) of p2;
+(tim6-1,tim7-3)=subpath(1,3) of p0 intersectiontimes subpath(3,4) of p2;
+(tim8-1,tim9-1)=subpath(1,3) of p1 intersectiontimes subpath(1,2) of p2;
+(tim10-5,tim11)=subpath(5,7) of p1 intersectiontimes subpath(0,2) of p2;
+(tim12-5,tim13-3)=subpath(5,7) of p1 intersectiontimes subpath(3,4) of p2;
+(tim14-1,tim15-3)=subpath(1,3) of p1 intersectiontimes subpath(3,4) of p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p0,tim4),length p0) of p0
+ ..subpath(0,rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10).zpet,rundy(p1,tim8)) of p1..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..reverse subpath(0,rundy(p1,tim14).zpet) of p1
+ ..reverse subpath(rundy(p1,tim12),length p1) of p1..cycle;
+penlabels(9,10);
+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.sign_hyphen_dot:
+bskchar "Hyphenation point";
+beginchar(chars.sign_hyphen_dot, 5u#,x_height#, 0); uni "0x2027";
+italcorr bar_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+y1+.5dot_size=.6h; x1=.5w;
+dot(1);
+endchar;
+
+iff known chars.math_equivalence:
+bskchar "Equivalence sign";
+beginchar(chars.math_equivalence,13u#,v_center(x_height#+rule_thickness#)); 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_equivalence_neg:
+bskchar "Negated equivalence sign";
+beginchar(chars.math_equivalence_neg,13u#,v_center(13u#)); uni "0x2262";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+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;
+top rt z7=(w-2u,h); top lft z8=(2u,-d);
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y10=y11=y5l; y12=y13=y5r; y14=y15=y1l; y16=y17=y1r; y18=y19=y3l; y20=y21=y3r;
+forsuffixes $=10,12,14,16,18,20: z$=whatever[z8l,z7l]; endfor
+forsuffixes $=11,13,15,17,19,21: z$=whatever[z8r,z7r]; endfor
+filldraw z1l---obl(14,1l,12).more---obl(12,14,5r)---z5rr..z5l---tobl(10,5l,8ll).more
+ ---z8ll..z8r---obl(11,8r,6l)---z6ll..z6r---obl(13,6r,15).more---obl(15,13,2l)
+ ---z2l..z2r---obl(17,2r,19).more---obl(19,17,4l)---z4ll..z4r---tobl(21,4r,7rr).more
+ ---z7rr..z7l---obl(20,7l,3r)---z3rr..z3l---obl(18,3l,16).more---obl(16,18,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(10,11,12,13,14,15,16,17,18,19,20,21,8ll);
+endchar;
+
+iff known chars.math_equivalence_neg_vert:
+bskchar "Negated equivalence sign with vertical stroke";
+beginchar(chars.math_equivalence_neg_vert,13u#,v_center(13u#)); uni "non"; %"0x2262.vert";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+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;
+top y7=h; top y8=-d; x7=x8=.5w;
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y10=y11=y5l; y12=y13=y5r; y14=y15=y1l; y16=y17=y1r; y18=y19=y3l; y20=y21=y3r;
+forsuffixes $=10,12,14,16,18,20: z$=whatever[z8l,z7l]; endfor
+forsuffixes $=11,13,15,17,19,21: z$=whatever[z8r,z7r]; endfor
+filldraw z1l---obl(14,1l,12)---obl(12,14,5r)---z5rr..z5l---obl(10,5l,8ll)
+ ---z8ll..z8r---obl(11,8r,6l)---z6ll..z6r---obl(13,6r,15)---obl(15,13,2l)
+ ---z2l..z2r---obl(17,2r,19)---obl(19,17,4l)---z4ll..z4r---obl(21,4r,7rr)
+ ---z7rr..z7l---obl(20,7l,3r)---z3rr..z3l---obl(18,3l,16)---obl(16,18,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(10,11,12,13,14,15,16,17,18,19,20,21,8ll);
+endchar;
+
+iff known chars.math_equivalence_parallel:
+bskchar "Equivalence and parallel sign";
+beginchar(chars.math_equivalence_parallel,13u#,v_center(13u#)); uni "0x2A68";
+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);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+pos9(rule_thickness,0); pos10(rule_thickness,0);
+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;
+top y7=top y9=h; bot y8=bot y10=-d; x7=x8; x9=x10; .5[x7,x9]=.5w; x9-x7=max(3curve,3u);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness); bskpoints(9,10,rule_thickness,rule_thickness);
+z11l=whatever[z7l,z8l]=whatever[z3r,z4r]; z11r=whatever[z7r,z8r]=whatever[z3r,z4r];
+z12l=whatever[z7l,z8l]=whatever[z3l,z4l]; z12r=whatever[z7r,z8r]=whatever[z3l,z4l];
+z13l=whatever[z7l,z8l]=whatever[z1r,z2r]; z13r=whatever[z7r,z8r]=whatever[z1r,z2r];
+z14l=whatever[z7l,z8l]=whatever[z1l,z2l]; z14r=whatever[z7r,z8r]=whatever[z1l,z2l];
+z15l=whatever[z7l,z8l]=whatever[z5r,z6r]; z15r=whatever[z7r,z8r]=whatever[z5r,z6r];
+z16l=whatever[z7l,z8l]=whatever[z5l,z6l]; z16r=whatever[z7r,z8r]=whatever[z5l,z6l];
+z17l=whatever[z9l,z10l]=whatever[z3r,z4r]; z17r=whatever[z9r,z10r]=whatever[z3r,z4r];
+z18l=whatever[z9l,z10l]=whatever[z3l,z4l]; z18r=whatever[z9r,z10r]=whatever[z3l,z4l];
+z19l=whatever[z9l,z10l]=whatever[z1r,z2r]; z19r=whatever[z9r,z10r]=whatever[z1r,z2r];
+z20l=whatever[z9l,z10l]=whatever[z1l,z2l]; z20r=whatever[z9r,z10r]=whatever[z1l,z2l];
+z21l=whatever[z9l,z10l]=whatever[z5r,z6r]; z21r=whatever[z9r,z10r]=whatever[z5r,z6r];
+z22l=whatever[z9l,z10l]=whatever[z5l,z6l]; z22r=whatever[z9r,z10r]=whatever[z5l,z6l];
+filldraw z1l---obl(14l,1l,15l)---obl(15l,14l,5rr)---z5rr..z5l---tobl(16l,5l,8ll)---z8ll
+ ..z8r---obl(16r,8r,22l)---tobl(22l,16r,10ll)---z10ll..z10r---obl(22r,10r,6ll)---z6ll
+ ..z6r---obl(21r,6r,20r)---obl(20r,21r,2l)---z2l..z2r---obl(19r,2r,18r)---obl(18r,19r,4ll)
+ ---z4ll..z4r---tobl(17r,4r,9rr)---z9rr..z9l---obl(17l,9l,11r)---tobl(11r,17l,7rr)---z7rr
+ ..z7l---obl(11l,7l,3rr)---z3rr..z3l---obl(12l,3l,13l)---obl(13l,12l,1r)---z1r..cycle;
+infill obl(13r,12r,19l)---obl(19l,13r,18l)---obl(18l,19l,12r)---obl(12r,18l,13r)---cycle;
+infill obl(15r,14r,21l)---obl(21l,15r,20l)---obl(20l,21l,14r)---obl(14r,20l,15r)---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(7rr,8ll,9rr,10ll);
+endchar;
+
+iff known chars.math_equivalence_parallel_sl:
+bskchar "Equivalence and slanted parallel sign";
+beginchar(chars.math_equivalence_parallel_sl,13u#,v_center(13u#)); uni "non"; %"0x2A68.slant";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=1.5f_obl;
+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;
+top y7=top y9=h; bot y8=bot y10=-d; .5[x8,x9]=.5w; x9-x7=x10-x8=max(3curve,3u); x7-x8=2/3(x9-x7);
+pos7(rule_thickness,angle(z7-z8)-90); pos8(rule_thickness,angle(z7-z8)-90);
+pos9(rule_thickness,angle(z7-z8)-90); pos10(rule_thickness,angle(z7-z8)-90);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness); bskpoints(9,10,rule_thickness,rule_thickness);
+z11l=whatever[z7l,z8l]=whatever[z3r,z4r]; z11r=whatever[z7r,z8r]=whatever[z3r,z4r];
+z12l=whatever[z7l,z8l]=whatever[z3l,z4l]; z12r=whatever[z7r,z8r]=whatever[z3l,z4l];
+z13l=whatever[z7l,z8l]=whatever[z1r,z2r]; z13r=whatever[z7r,z8r]=whatever[z1r,z2r];
+z14l=whatever[z7l,z8l]=whatever[z1l,z2l]; z14r=whatever[z7r,z8r]=whatever[z1l,z2l];
+z15l=whatever[z7l,z8l]=whatever[z5r,z6r]; z15r=whatever[z7r,z8r]=whatever[z5r,z6r];
+z16l=whatever[z7l,z8l]=whatever[z5l,z6l]; z16r=whatever[z7r,z8r]=whatever[z5l,z6l];
+z17l=whatever[z9l,z10l]=whatever[z3r,z4r]; z17r=whatever[z9r,z10r]=whatever[z3r,z4r];
+z18l=whatever[z9l,z10l]=whatever[z3l,z4l]; z18r=whatever[z9r,z10r]=whatever[z3l,z4l];
+z19l=whatever[z9l,z10l]=whatever[z1r,z2r]; z19r=whatever[z9r,z10r]=whatever[z1r,z2r];
+z20l=whatever[z9l,z10l]=whatever[z1l,z2l]; z20r=whatever[z9r,z10r]=whatever[z1l,z2l];
+z21l=whatever[z9l,z10l]=whatever[z5r,z6r]; z21r=whatever[z9r,z10r]=whatever[z5r,z6r];
+z22l=whatever[z9l,z10l]=whatever[z5l,z6l]; z22r=whatever[z9r,z10r]=whatever[z5l,z6l];
+filldraw z1l---obl(14l,1l,15l).more---obl(15l,14l,5rr)---z5rr..z5l---tobl(16l,5l,8ll).more---z8ll
+ ..z8r---obl(16r,8r,22l)---tobl(22l,16r,10ll).more---z10ll..z10r---obl(22r,10r,6ll)---z6ll
+ ..z6r---obl(21r,6r,20r).more---obl(20r,21r,2l)---z2l..z2r---obl(19r,2r,18r).more
+ ---obl(18r,19r,4ll)---z4ll..z4r---tobl(17r,4r,9rr).more---z9rr..z9l---obl(17l,9l,11r)
+ ---tobl(11r,17l,7rr).more---z7rr..z7l---obl(11l,7l,3rr)---z3rr..z3l
+ ---obl(12l,3l,13l).more---obl(13l,12l,1r)---z1r..cycle;
+infill obl(13r,12r,19l).more---obl(19l,13r,18l)---obl(18l,19l,12r).more---obl(12r,18l,13r)---cycle;
+infill obl(15r,14r,21l).more---obl(21l,15r,20l)---obl(20l,21l,14r).more---obl(14r,20l,15r)---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(7rr,8ll,9rr,10ll);
+endchar;
+
+iff known chars.math_equivalence_triple:
+bskchar "Equivalence with triple vertical line";
+beginchar(chars.math_equivalence_triple,13u#,v_center(13u#)); uni "0x2A69";
+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);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+pos9(rule_thickness,0); pos10(rule_thickness,0);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+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;
+top y7=top y9=top y11=h; bot y8=bot y10=bot y12=-d;
+x7=x8; x9=x10; x11=x12; .5[x7,x9]=.5w; x9-x11=x11-x7=max(2curve,2u);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness); bskpoints(9,10,rule_thickness,rule_thickness);
+bskpoints(11,12,rule_thickness,rule_thickness);
+z13l=whatever[z7l,z8l]=whatever[z3r,z4r]; z13r=whatever[z7r,z8r]=whatever[z3r,z4r];
+z14l=whatever[z7l,z8l]=whatever[z3l,z4l]; z14r=whatever[z7r,z8r]=whatever[z3l,z4l];
+z15l=whatever[z7l,z8l]=whatever[z1r,z2r]; z15r=whatever[z7r,z8r]=whatever[z1r,z2r];
+z16l=whatever[z7l,z8l]=whatever[z1l,z2l]; z16r=whatever[z7r,z8r]=whatever[z1l,z2l];
+z17l=whatever[z7l,z8l]=whatever[z5r,z6r]; z17r=whatever[z7r,z8r]=whatever[z5r,z6r];
+z18l=whatever[z7l,z8l]=whatever[z5l,z6l]; z18r=whatever[z7r,z8r]=whatever[z5l,z6l];
+z19l=whatever[z9l,z10l]=whatever[z3r,z4r]; z19r=whatever[z9r,z10r]=whatever[z3r,z4r];
+z20l=whatever[z9l,z10l]=whatever[z3l,z4l]; z20r=whatever[z9r,z10r]=whatever[z3l,z4l];
+z21l=whatever[z9l,z10l]=whatever[z1r,z2r]; z21r=whatever[z9r,z10r]=whatever[z1r,z2r];
+z22l=whatever[z9l,z10l]=whatever[z1l,z2l]; z22r=whatever[z9r,z10r]=whatever[z1l,z2l];
+z23l=whatever[z9l,z10l]=whatever[z5r,z6r]; z23r=whatever[z9r,z10r]=whatever[z5r,z6r];
+z24l=whatever[z9l,z10l]=whatever[z5l,z6l]; z24r=whatever[z9r,z10r]=whatever[z5l,z6l];
+z25l=whatever[z11l,z12l]=whatever[z3r,z4r]; z25r=whatever[z11r,z12r]=whatever[z3r,z4r];
+z26l=whatever[z11l,z12l]=whatever[z3l,z4l]; z26r=whatever[z11r,z12r]=whatever[z3l,z4l];
+z27l=whatever[z11l,z12l]=whatever[z1r,z2r]; z27r=whatever[z11r,z12r]=whatever[z1r,z2r];
+z28l=whatever[z11l,z12l]=whatever[z1l,z2l]; z28r=whatever[z11r,z12r]=whatever[z1l,z2l];
+z29l=whatever[z11l,z12l]=whatever[z5r,z6r]; z29r=whatever[z11r,z12r]=whatever[z5r,z6r];
+z30l=whatever[z11l,z12l]=whatever[z5l,z6l]; z30r=whatever[z11r,z12r]=whatever[z5l,z6l];
+filldraw z1l---obl(16l,1l,17l)---obl(17l,16l,5rr)---z5rr..z5l---tobl(18l,5l,8ll)---z8ll
+ ..z8r---obl(18r,8r,30l)---tobl(30l,18r,12ll)---z12ll..z12r---obl(30r,12r,24l)
+ ---tobl(24l,18r,10ll)---z10ll..z10r---obl(24r,10r,6ll)---z6ll..z6r---obl(23r,6r,22r)
+ ---obl(22r,23r,2l)---z2l..z2r---obl(21r,2r,20r)---obl(20r,21r,4ll)---z4ll..z4r
+ ---tobl(19r,4r,9rr)---z9rr..z9l---obl(19l,9l,25r)---tobl(25r,19l,11rr)---z11rr
+ ..z11l---obl(25l,11l,13r)---tobl(13r,19l,7rr)---z7rr..z7l---obl(13l,7l,3rr)---z3rr
+ ..z3l---obl(14l,3l,15l)---obl(15l,14l,1r)---z1r..cycle;
+infill obl(15r,14r,27l)---obl(27l,15r,26l)---obl(26l,27l,14r)---obl(14r,26l,15r)---cycle;
+infill obl(17r,16r,29l)---obl(29l,17r,28l)---obl(28l,29l,16r)---obl(16r,28l,17r)---cycle;
+infill obl(27r,26r,21l)---obl(21l,27r,20l)---obl(20l,21l,26r)---obl(26r,20l,27r)---cycle;
+infill obl(29r,28r,23l)---obl(23l,29r,22l)---obl(22l,23l,28r)---obl(28r,22l,29r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,22,23,24,25,26,27,28,29,30);
+labels(7rr,8ll,9rr,10ll,11rr,12ll);
+endchar;
+
+iff known chars.math_equivalence_dot:
+bskchar "Equivalence sign with dot";
+beginchar(chars.math_equivalence_dot,13u#,.5x_height#+2.5rule_thickness#+dot_size#+math_axis#,.5x_height#+.5rule_thickness#-math_axis#); uni "0x2A67";
+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;
+x7=.5w; top y7=h+o;
+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;
+dot(7);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_equivalence_dot_four:
+bskchar "Four-dotted equivalence sign";
+beginchar(chars.math_equivalence_dot_four,13u#,.5x_height#+2.5rule_thickness#+dot_size#+math_axis#,.5x_height#+.5rule_thickness#-math_axis#); uni "0x2A78";
+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;
+top y7=h+o; y7=y8=y9=y10; x10-x9=x9-x8=x8-x7; .5[x7,x10]=.5w; x7=u+dot_size;
+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;
+dot(7); dot(8); dot(9); dot(10);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_equivalence_strict:
+bskchar "Strict equivalence sign";
+beginchar(chars.math_equivalence_strict,13u#,v_center(1.5x_height#+rule_thickness#)); uni "0x2263";
+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);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=u; rt x2=w-u;
+y1=y2; y3=y4; y5=y6; y7=y8; .5[y1,y7]=.5[y3,y5]=math_axis;
+x3=x5=x7=x1; x4=x6=x8=x2;
+y1-y3=y3-y5; top y1r=h;
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,hair,hair);
+filldraw z1l---z2l..z2r---z1r..cycle;
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+filldraw z5rr..z5l---z6ll..z6r---cycle;
+filldraw z7l---z8l..z8r---z7r..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,math_axis);
+filldraw fullcircle scaled (w-rt 2u) shifted z0;
+infill fullcircle scaled (w-rt 2u-rule_thickness+.5currentbreadth) 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,math_axis);
+filldraw fullcircle scaled (w-rt 2u) shifted z0;
+endchar;
+
+iff known chars.sign_bullet:
+bskchar "Bullet sign";
+beginchar(chars.sign_bullet,6.5u#,x_height#,0); uni "0x2022";
+adjust_fit(0,0);
+pickup tiny.nib;
+z0=(.5w,bar_height);
+filldraw fullcircle scaled (w-rt 2u) shifted z0;
+endchar;
+
+iff known chars.sign_bullet_triangle:
+bskchar "Triangle bullet";
+beginchar(chars.sign_bullet_triangle,6.5u#,x_height#,0); uni "0x2023";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]=bar_height; rt x3=w-u+hair;
+top y1=h;
+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.sign_bullet_hyphen:
+bskchar "Hyphen bullet";
+beginchar(chars.sign_bullet_hyphen,6.5u#,x_height#,0); uni "0x2043";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem+rule_thickness,90); pos2(stem+rule_thickness,90);
+y1=y2=bar_height; x2=w-x1;
+lft x1=.5u+.5rule_thickness+.5stem;
+filldraw bskrule(1,2,hair,hair);
+penlabels(1,2);
+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;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,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;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,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_diamond:
+bskchar "Diamond";
+beginchar(chars.math_diamond,10u#,asc_height#,rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+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_dot:
+bskchar "Diamond with dot";
+beginchar(chars.math_diamond_dot,10u#,asc_height#,rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+z0=.5[z1,z3];
+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;
+dot(0);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_black:
+bskchar "Black diamond";
+beginchar(chars.math_diamond_black,10u#,asc_height#,rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=u; rt x3=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4=h+o;
+filldraw obl(1,4,2)---obl(2,1,3)--obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_uni:
+bskchar "Diamond (for Unicode)";
+beginchar(chars.math_diamond_uni,14u#,asc_height#,rule_thickness#); uni "0x25C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+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_dot_uni:
+bskchar "Diamond with dot (for Unicode)";
+beginchar(chars.math_diamond_dot_uni,14u#,asc_height#,rule_thickness#); uni "0x27D0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+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;
+z0=.5[z1,z3];
+dot(0);
+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=(.5w,math_axis); 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_asterisk_big:
+bskchar "Big asterisk on axis";
+beginchar(chars.math_asterisk_big,13u#,v_center(12u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+z0=(.5w,math_axis); ast:=2rule_thickness; vast=2rule_thickness;
+pos1(ast,0); x1=x0;
+size=1/2h; 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_convolution:
+bskchar "Convolution sign";
+beginchar(chars.math_convolution,10u#,v_center(8u#)); uni "non";
+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);
+pos5(rule_thickness,-45); pos6(rule_thickness,-45);
+pos7(rule_thickness,45); pos8(rule_thickness,45);
+y1=y2=.5[y3,y4]=math_axis; .5[x1,x2]=x3=x4=.5w; .5[z5,z6]=.5[z7,z8]=(x3,y1);
+z5-z6=(z2-z1) rotated 45; z7-z8=(z2-z1) rotated -45;
+x1=u+.5rule_thickness; y4-y3=x2-x1;
+z1'=whatever[z1l,z2l]=whatever[z5l,z6l];
+z2'=whatever[z3l,z4l]=whatever[z5r,z6r];
+z3'=whatever[z3r,z4r]=whatever[z7l,z8l];
+z4'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z5'=whatever[z1r,z2r]=whatever[z5r,z6r];
+z6'=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'=whatever[z3l,z4l]=whatever[z7r,z8r];
+z8'=whatever[z1r,z2r]=whatever[z7l,z8l];
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+filldraw z1l---obl(1',1l,6l)---z6l..z6r---obl(2',6r,3l)---z3l..z3rr
+ ---obl(3',3rr,7l)---z7l..z7r---obl(4',7r,2ll)---z2ll..z2r
+ ---obl(5',2r,5r)---z5r..z5l---obl(6',5l,4r)---z4r..z4ll
+ ---obl(7',4ll,8r)---z8r..z8l---obl(8',8l,1rr)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1',2',3',4',5',6',1rr,2ll,3rr,4ll);
+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_bar_top:
+bskchar "Circle-bar top operator";
+beginarithchar(chars.math_circle_bar_top); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+y9=y10=y2; x9-x6r=x2r-x10=curve; z12=.5[z9r,z10r]; z11=z8+curve*down;
+circle_points(rule_thickness);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-2,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (z11r--(x11r,2h)));
+tim2=xpart(p intersectiontimes ((x4,y9r)--(w,y9r)));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z10r---obl(12r,10r,11r)---z11r..cycle;
+p:=subpath (-3,1) of (draw_circle.r);
+tim3=xpart(p intersectiontimes ((0,y9r)--(x4,y9r)));
+tim4=xpart(p intersectiontimes (z11l--(x11l,2h)));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(12l,11l,9r)---z9r..cycle;
+p:=subpath (2,6) of (draw_circle.r);
+tim5=xpart(p intersectiontimes ((x4,y9l)--(w,y9l)));
+tim6=xpart(p intersectiontimes ((x4,y9l)--(0,y9l)));
+infill subpath (rundy(p,tim5),rundy(p,tim6).zpet) of p..z9l---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_bar_bot:
+bskchar "Circle-bar bot operator";
+beginarithchar(chars.math_circle_bar_bot); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+y9=y10=y2; x9-x6r=x2r-x10=curve; z12=.5[z9l,z10l]; z11=z4+curve*up;
+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,5) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (z11r--(x11r,-d)));
+tim4=xpart(p intersectiontimes ((x4,y9l)--(w,y9l)));
+infill subpath (rundy(p,tim4),rundy(p,tim3).zpet) of p..z11r---obl(12r,11r,10l)---z10l..cycle;
+p:=subpath (3,7) of (draw_circle.r);
+tim5=xpart(p intersectiontimes ((0,y9l)--(x4,y9l)));
+tim6=xpart(p intersectiontimes (z11l--(x11l,-d)));
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z9l---obl(12l,9l,11l)---z11l..cycle;
+penlabels(9,10,11,12);
+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_set_minus:
+bskchar "Circle-set minus operator";
+beginarithchar(chars.math_circle_set_minus); uni "0x29B8";
+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 3 of _circle_path));
+pos10(rule_thickness,angle(direction 7 of _circle_path)+180);
+z9=z3+curve*unitvector(z7-z3); z10=z7+curve*unitvector(z3-z7);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-2,4) 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 (3,8) 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_vbar:
+bskchar "Circle-vertical bar operator";
+beginarithchar(chars.math_circle_vbar); uni "0x29B6";
+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,180);
+pos10(rule_thickness,180);
+z9=z4+curve*unitvector(z8-z4); z10=z8+curve*unitvector(z4-z8);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,5) 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 (3,9) 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_bar_right:
+bskchar "Circle-bar right operator";
+beginarithchar(chars.math_circle_bar_right); uni "non";
+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,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+z9=z4+curve*unitvector(z8-z4); z10=z8+curve*unitvector(z4-z8);
+z12=.5[z9l,z10l]; z11=z2+curve*left;
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,3) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim2=xpart(p intersectiontimes (z11r--(w,y11r)));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z11r---obl(12r,11r,10l)---z10l..cycle;
+p:=subpath (2,5) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (z11l--(w,y11l)));
+tim4=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z9l---obl(12l,9l,11l)---z11l..cycle;
+p:=subpath (3,9) of (draw_circle.r);
+tim6=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+infill subpath (rundy(p,tim5),rundy(p,tim6).zpet) of p..z10r---z9r..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_bar_left:
+bskchar "Circle-bar left operator";
+beginarithchar(chars.math_circle_bar_left); uni "non";
+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,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+z9=z4+curve*unitvector(z8-z4); z10=z8+curve*unitvector(z4-z8);
+z12=.5[z10r,z9r]; z11=z6+curve*right;
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,5) 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 (3,7) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (z11l--(0,y11l)));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(12l,11l,9r)---z9r..cycle;
+p:=subpath (5,9) of (draw_circle.r);
+tim6=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim5=xpart(p intersectiontimes (z11r--(0,y11r)));
+infill subpath (rundy(p,tim5),rundy(p,tim6).zpet) of p..z10r---obl(12r,10r,11r)---z11r..cycle;
+penlabels(9,10,11,12);
+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_uni:
+bskchar "N-ary circle-dot operator (for Unicode)";
+beginchar(chars.math_circle_dot_uni,14u#,v_center(10/6dh#)); uni "0x2A00";
+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_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_uni:
+bskchar "N-ary circle-times operator (for Unicode)";
+beginchar(chars.math_circle_times_uni,14u#,v_center(10/6dh#)); uni "0x2A02";
+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_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_uni:
+bskchar "N-ary circle-plus operator (for Unicode)";
+beginchar(chars.math_circle_plus_uni,14u#,v_center(10/6dh#)); uni "0x2A01";
+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_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_division:
+bskchar "Circle-division operator";
+beginarithchar(chars.math_circle_division); uni "0x2A38";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+.5[x9,x10]=x4=x11=x12; lft x9=rt x6r+u; y9=y10=math_axis;
+.5[y11,y12]=y9; y11-y12=.75(x10-x9);
+filldraw bskrule(9,10,hair,hair)---cycle;
+dot(11); dot(12);
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_circle:
+bskchar "Circle-circle operator";
+beginarithchar(chars.math_circle_circle); uni "0x229A";
+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;
+save x,y;
+lft x6=4u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness-3u;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+endchar;
+
+iff known chars.math_circle_equals:
+bskchar "Circle-equals operator";
+compute_spread(.45x_height#,.55x_height#);
+beginarithchar(chars.math_circle_equals); uni "0x229C";
+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.math_circle_bar:
+bskchar "Circle-bar operator";
+beginarithchar(chars.math_circle_bar); uni "0x229D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(hair,90); pos10(hair,90);
+lft x6=u+.5rule_thickness; x2=w-x6; y2=y9=y10=math_axis; top y8=h-.5rule_thickness;
+y2=y0; x0=x8;
+.5[x9,x10]=x8; x10-x9=1/2(x2r-x6r);
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw bskrule(9,10,.5hair,.5hair);
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_asterisk:
+bskchar "Circle-asterisk operator";
+beginarithchar(chars.math_circle_asterisk); uni "0x229B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+z9=(x8,y2); ast:=3/4stem; vast=.7stem;
+pos10(ast,0); x10=x9;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x9:
+ size:= (lft w-u-x9)/cosd(30)-.5ast; fi;
+y10=y9+size;
+p:=z9---z10r{dir120}..z10l---z9;
+p:=subpath (xpart(p intersectiontimes ((x9,y9+vast)--(w,y9+vast))),
+ xpart(p intersectiontimes ((x9,y9+vast)--(0,y9+vast)))) of p;
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z9,i).. endfor cycle;
+labels(9); penlabels(10);
+endchar;
+
+iff known chars.math_circle_triangle:
+bskchar "Circle-triangle operator";
+beginarithchar(chars.math_circle_triangle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+x11=.5[x9,x10]=.5w; x10-x9=1.5(y11-y9)=w-7u;
+y9=y10; 1/3[y9,y11]=math_axis;
+y9'=y10'=y9+(rule_thickness-currentbreadth);
+x9'-x9=x10-x10'=(rule_thickness-currentbreadth)/cosd(angle(z11-z9));
+z11'=z10'+whatever*(z11-z10)=z9'+whatever*(z11-z9);
+filldraw obl(9,11,10)---obl(10,9,11)---obl(11,10,9)---cycle;
+oblu:=2oblu;
+infill obl(9',11',10')---obl(10',9',11')---obl(11',10',9')---cycle;
+labels(9,9',10,10',11,11',12,12');
+endchar;
+
+iff known chars.math_circle_less:
+bskchar "Circle-less than operator";
+beginarithchar(chars.math_circle_less); uni "0x29C0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,0); pos10(rule_thickness,angle(direction 1 of p0));
+pos11(rule_thickness,angle(direction 3 of p0));
+z9l=z6; z10=z1; z11=z3; z9r=z11l+whatever*(z9l-z11r);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z10l--z9l;
+p2:=z9l--z11r;
+p3:=z11l--z9r;
+p4:=z9r--z10r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p1;
+(tim2-2,tim3)=subpath(2,4) of p0 intersectiontimes p2;
+(tim4-5,tim5)=subpath(5,8) of p0 intersectiontimes p1;
+(tim6-4,tim7)=subpath(4,7) of p0 intersectiontimes p2;
+(tim8,tim9)=subpath(0,2) of p0 intersectiontimes p4;
+(tim10-2,tim11)=subpath(2,4) of p0 intersectiontimes p3;
+oblu:=2oblu;
+infill subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim5).zpet) of p1
+ ..subpath(rundy(p0,tim4),length p0) of p0&cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p3,tim11),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(9,10,11);
+endchar;
+
+iff known chars.math_circle_greater:
+bskchar "Circle-greater than operator";
+beginarithchar(chars.math_circle_greater); uni "0x29C1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,180); pos10(rule_thickness,angle(direction 7 of p0));
+pos11(rule_thickness,angle(direction 5 of p0));
+z9l=z2; z10=z7; z11=z5; z9r=z11r+whatever*(z9l-z11l);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z9l--z10r;
+p2:=z11l--z9l;
+p3:=z9r--z11r;
+p4:=z10l--z9r;
+(tim0-1,tim1)=subpath(1,3) of p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,3) of p0 intersectiontimes p2;
+(tim4-6,tim5)=subpath(6,8) of p0 intersectiontimes p1;
+(tim6-4,tim7)=subpath(4,6) of p0 intersectiontimes p2;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p3;
+(tim10-6,tim11)=subpath(6,8) of p0 intersectiontimes p4;
+oblu:=2oblu;
+infill subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim5).zpet) of p1
+ ..subpath(rundy(p0,tim4),length p0) of p0&cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p4,0),rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p3,tim11),rundy(p3,1).zpet) of p3..cycle;
+penlabels(9,10,11);
+endchar;
+
+iff known chars.math_circle_vee:
+bskchar "Circle-vee operator";
+beginarithchar(chars.math_circle_vee); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,90); pos10(rule_thickness,angle(direction 1 of p0));
+pos11(rule_thickness,angle(direction 7 of p0));
+z9l=z4; z10=z1; z11=z7; z9r=z11r+whatever*(z9l-z11l);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z9l--z10r;
+p2:=z11l--z9l;
+p3:=z9r--z11r;
+p4:=z10l--z9r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p1;
+(tim2-3,tim3)=subpath(3,5) of p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath(3,5) of p0 intersectiontimes p1;
+(tim6-6,tim7)=subpath(6,8) of p0 intersectiontimes p2;
+(tim8-6,tim9)=subpath(6,8) of p0 intersectiontimes p3;
+(tim10,tim11)=subpath(0,2) of p0 intersectiontimes p4;
+oblu:=2oblu;
+infill subpath(rundy(p0,tim0),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),8+rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p4,tim11),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p3,0),rundy(p3,tim9).zpet) of p3..cycle;
+penlabels(9,10,11);
+endchar;
+
+iff known chars.math_circle_wedge:
+bskchar "Circle-wedge operator";
+beginarithchar(chars.math_circle_wedge); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,90); pos10(rule_thickness,angle(direction 3 of p0));
+pos11(rule_thickness,angle(direction 5 of p0));
+z9l=z8; z10=z3; z11=z5; z9r=z11l+whatever*(z9l-z11r);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z10l--z9l;
+p2:=z9l--z11r;
+p3:=z11l--z9r;
+p4:=z9r--z10r;
+(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p1;
+(tim2-4,tim3)=subpath(4,6) of p0 intersectiontimes p2;
+(tim4-2,tim5)=subpath(2,4) of p0 intersectiontimes p1;
+(tim6-7,tim7)=subpath(7,8) of p0 intersectiontimes p2;
+(tim8-2,tim9)=subpath(2,4) of p0 intersectiontimes p4;
+(tim10-4,tim11)=subpath(4,6) of p0 intersectiontimes p3;
+oblu:=2oblu;
+infill subpath(rundy(p0,tim0),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p3,tim11),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(9,10,11);
+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_oblong:
+bskchar "Oblong";
+beginchar(chars.math_oblong,11u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; top y1r=h; bot y4r=-d;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_oblong_tall:
+compute_spread(.45x_height#,.55x_height#);
+bskchar "Tall oblong";
+beginchar(chars.math_oblong_tall,8u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+x1=x4; x2=x3; .5[x1,x2]=.5w; x2-x1=spread;
+y1=y2; y3=y4; top y1r=h; bot y4r=-d;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_qed:
+bskchar "End-of-proof sign";
+beginchar(chars.math_qed,10u#,.8asc_height#,0); uni "0x220E";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x4=u; x2=x3=w-x1;
+top y1=top y2=h; bot y3=bot y4=-d;
+filldraw obl(1,4,2)---obl(2,1,3)---obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_operator_black:
+bskchar "Black-box operator";
+beginarithchar(chars.math_box_operator_black); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=x2-x1;
+filldraw obl(1,4,2)---obl(2,1,3)---obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_operator:
+bskchar "Box operator";
+beginarithchar(chars.math_box_operator); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_plus:
+bskchar "Box-plus operator";
+beginarithchar(chars.math_box_plus); uni "0x229E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,90); pos6(rule_thickness,0);
+pos7(rule_thickness,-90); pos8(rule_thickness,180);
+z5=.5[z1l,z4l]; z6=.5[z1l,z2l]; z7=.5[z2l,z3l]; z8=.5[z3l,z4l];
+z5'=(x6l,y5r); z6'=(x6r,y7l); z7'=(x8l,y7r); z8'=(x8r,y5l);
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,6l)---obl(6l,1l,5')---obl(5',6l,5r)---obl(5r,5',1l)---cycle;
+infill obl(2l,6r,7l)---obl(7l,2l,6')---obl(6',7l,6r)---obl(6r,6',2l)---cycle;
+infill obl(3l,7r,8l)---obl(8l,3l,7')---obl(7',8l,7r)---obl(7r,7',3l)---cycle;
+infill obl(4l,8r,5l)---obl(5l,4l,8')---obl(8',5l,8r)---obl(8r,8',4l)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(5',6',7',8');
+endchar;
+
+iff known chars.math_box_times:
+bskchar "Box-times operator";
+beginarithchar(chars.math_box_times); uni "0x22A0";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,45); pos6(rule_thickness,-45);
+pos7(rule_thickness,-135); pos8(rule_thickness,-225);
+for i=5 upto 8: z[i]=z[i-4]l; endfor;
+z5'=whatever[z5r,z7l]=whatever[z6l,z8r]; z6'=whatever[z6r,z8l]=whatever[z5r,z7l];
+z7'=whatever[z5l,z7r]=whatever[z6r,z8l]; z8'=whatever[z6l,z8r]=whatever[z5l,z7r];
+z5'r=whatever[z5',z5r]=whatever[z1l,z2l]; z6'l=whatever[z5',z6l]=whatever[z1l,z2l];
+z6'r=whatever[z6',z6r]=whatever[z2l,z3l]; z7'l=whatever[z6',z7l]=whatever[z2l,z3l];
+z7'r=whatever[z7',z7r]=whatever[z3l,z4l]; z8'l=whatever[z7',z8l]=whatever[z3l,z4l];
+z8'r=whatever[z8',z8r]=whatever[z1l,z4l]; z5'l=whatever[z8',z5l]=whatever[z1l,z4l];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(5'r,5',6'l).more---obl(6'l,5'r,5').more---obl(5',6'l,5'r)---cycle;
+infill obl(6'r,6',7'l).more---obl(7'l,6'r,6').more---obl(6',7'l,6'r)---cycle;
+infill obl(7'r,7',8'l).more---obl(8'l,7'r,7').more---obl(7',8'l,7'r)---cycle;
+infill obl(8'r,8',5'l).more---obl(5'l,8'r,8').more---obl(8',5'l,8'r)---cycle;
+penlabels(1,2,3,4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_box_divide:
+bskchar "Box-divide operator";
+beginarithchar(chars.math_box_divide); uni "0x29C4";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,-45); pos6(rule_thickness,-45);
+z5=z2l; z6=z4l;
+z5'l=whatever[z6l,z5l]=whatever[z1l,z2l]; z5'r=whatever[z6r,z5r]=whatever[z3l,z2l];
+z6'l=whatever[z6r,z5r]=whatever[z3l,z4l]; z6'r=whatever[z6l,z5l]=whatever[z1l,z4l];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(3l,6'l,5'r)---obl(5'r,3l,6'l).more---obl(6'l,5'r,3l).more---cycle;
+infill obl(1l,6'r,5'l)---obl(5'l,1l,6'r).more---obl(6'r,5'l,1l).more---cycle;
+penlabels(1,2,3,4,5,5',6,6');
+endchar;
+
+iff known chars.math_box_set_minus:
+bskchar "Box-set minus operator";
+beginarithchar(chars.math_box_set_minus); uni "0x29C5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,45); pos6(rule_thickness,45);
+z5=z1l; z6=z3l;
+z5'l=whatever[z6r,z5r]=whatever[z1l,z2l]; z5'r=whatever[z6l,z5l]=whatever[z4l,z1l];
+z6'r=whatever[z6l,z5l]=whatever[z3l,z4l]; z6'l=whatever[z6r,z5r]=whatever[z2l,z3l];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(4l,6'r,5'r)---obl(5'r,4l,6'r).more---obl(6'r,5'r,4l).more---cycle;
+infill obl(2l,6'l,5'l)---obl(5'l,2l,6'l).more---obl(6'l,5'l,2l).more---cycle;
+penlabels(1,2,3,4,5,5',6,6');
+endchar;
+
+iff known chars.math_box_minus:
+bskchar "Box-minus operator";
+beginarithchar(chars.math_box_minus); uni "0x229F";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+y5=y6=math_axis; x5=x1l; x6=x2l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,2l)---obl(2l,1l,6r)---obl(6r,2l,5r)---obl(5r,6r,1l)---cycle;
+infill obl(4l,5l,3l)---obl(3l,4l,6l)---obl(6l,3l,5l)---obl(5l,6l,4l)---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_box_vbar:
+bskchar "Box-vertical bar operator";
+beginarithchar(chars.math_box_vbar); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+x5=x6=.5w; y5=y1l; y6=y3l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5l,4l)---obl(4l,1l,6l)---obl(6l,4l,5l)---obl(5l,6l,1l)---cycle;
+infill obl(2l,5r,3l)---obl(3l,2l,6r)---obl(6r,3l,5r)---obl(5r,6r,2l)---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_box_bar_top:
+bskchar "Box-bar top operator";
+beginarithchar(chars.math_box_bar_top); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+y5=y6=math_axis; x5=x1l; x6=x2l; x7=x8=.5w; y7=y5r; y8=y1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,8l)---obl(8l,1l,7l)---obl(7l,8l,5r)---obl(5r,7l,1l)---cycle;
+infill obl(2l,6r,8r)---obl(8r,2l,7r)---obl(7r,8r,6r)---obl(6r,7r,2l)---cycle;
+infill obl(4l,5l,3l)---obl(3l,4l,6l)---obl(6l,3l,5l)---obl(5l,6l,4l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_bar_bot:
+bskchar "Box-bar bottom operator";
+beginarithchar(chars.math_box_bar_bot); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+y5=y6=math_axis; x5=x1l; x6=x2l; x7=x8=.5w; y7=y5l; y8=y4l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,2l)---obl(2l,1l,6r)---obl(6r,2l,5r)---obl(5r,6r,1l)---cycle;
+infill obl(4l,5l,8l)---obl(8l,4l,7l)---obl(7l,8l,5l)---obl(5l,7l,4l)---cycle;
+infill obl(6l,3l,7r)---obl(7r,6l,8r)---obl(8r,7r,3l)---obl(3l,8r,6l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_bar_right:
+bskchar "Box-bar right operator";
+beginarithchar(chars.math_box_bar_right); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+x5=x6=.5w; y5=y1l; y6=y3l; y7=y8=math_axis; x7=x5r; x8=x2l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5l,4l)---obl(4l,1l,6l)---obl(6l,4l,5l)---obl(5l,6l,1l)---cycle;
+infill obl(2l,8r,5r)---obl(5r,2l,7r)---obl(7r,5r,8r)---obl(8r,7r,2l)---cycle;
+infill obl(3l,6r,8l)---obl(8l,3l,7l)---obl(7l,8l,6r)---obl(6r,7l,3l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_bar_left:
+bskchar "Box-bar left operator";
+beginarithchar(chars.math_box_bar_left); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+x5=x6=.5w; y5=y1l; y6=y3l; y7=y8=math_axis; x7=x1l; x8=x5l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5l,7r)---obl(7r,1l,8r)---obl(8r,7r,5l)---obl(5l,8r,1l)---cycle;
+infill obl(4l,7l,6l)---obl(6l,4l,8l)---obl(8l,6l,7l)---obl(7l,8l,4l)---cycle;
+infill obl(2l,5r,3l)---obl(3l,2l,6r)---obl(6r,3l,5r)---obl(5r,6r,2l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_dot:
+bskchar "Box-dot operator";
+beginarithchar(chars.math_box_dot); uni "0x22A1";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+z0=.5[z1,z3];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+dot(0);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_asterisk:
+bskchar "Box-asterisk operator";
+beginarithchar(chars.math_box_asterisk); uni "0x29C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+z5=.5[z1l,z3l]; ast:=3/4stem; vast=.7stem;
+pos6(ast,0); x6=x5;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x5:
+ size:= (lft w-u-x5)/cosd(30)-.5ast; fi;
+y6=y5+size;
+p:=z5---z6r{dir120}..z6l---z5;
+p:=subpath (xpart(p intersectiontimes ((x5,y5+vast)--(w,y5+vast))),
+ xpart(p intersectiontimes ((x5,y5+vast)--(0,y5+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z5,i).. endfor cycle;
+penlabels(1,2,3,4,6); labels(5);
+endchar;
+
+iff known chars.math_box_circle:
+bskchar "Box-circle operator";
+beginarithchar(chars.math_box_circle); uni "0x29C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,270); pos12(rule_thickness,270);
+lft x9=lft x12=u; x10=x11=w-x9;
+y9=y10; y11=y12; .5[y9,y11]=math_axis; y9r-y11r=x10-x9;
+x9l:=x12l:=x9l+rule_thickness-currentbreadth; x10l:=x11l:=w-x9l;
+filldraw obl(9r,12r,10r)---obl(10r,9r,11r)---obl(11r,10r,12r)---obl(12r,11r,9r)---cycle;
+infill obl(9l,12l,10l)---obl(10l,9l,11l)---obl(11l,10l,12l)---obl(12l,11l,9l)---cycle;
+lft x6=4u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness-3u;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_box_triangle:
+bskchar "Box-triangle operator";
+beginarithchar(chars.math_box_triangle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+x7=.5[x5,x6]=.5w; x6-x5=1.5(y7-y5)=w-7u;
+y5=y6; 1/3[y5,y7]=math_axis;
+y5'=y6'=y5+(rule_thickness-currentbreadth);
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw obl(5,7,6)---obl(6,5,7)---obl(7,6,5)---cycle;
+oblu:=2oblu;
+infill obl(5',7',6')---obl(6',5',7')---obl(7',6',5')---cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_box_division:
+bskchar "Box-division operator";
+beginarithchar(chars.math_box_division); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+.5[x5,x6]=.5w=x7=x8; lft x5=rt x1l+u; y5=y6=math_axis;
+.5[y7,y8]=y5; y7-y8=.75(x6-x5);
+filldraw bskrule(5,6,hair,hair)---cycle;
+dot(7); dot(8);
+penlabels(1,2,3,4); penlabels(5,6);
+endchar;
+
+iff known chars.math_box_box:
+bskchar "Box-box operator";
+beginarithchar(chars.math_box_box); uni "0x29C8";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,270); pos8(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y7]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+.5[x1,x2]=.5[x5,x7]; x5=x8; x6=x7; y5=y6; y7=y8; y5r-y7r=x6-x5=w-7u;
+x5l:=x8l:=x5l+rule_thickness-currentbreadth; x6l:=x7l:=w-x5l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+filldraw obl(5r,8r,6r)---obl(6r,5r,7r)---obl(7r,6r,8r)---obl(8r,7r,5r)---cycle;
+infill obl(5l,8l,6l)---obl(6l,5l,7l)---obl(7l,6l,8l)---obl(8l,7l,5l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_diamond_wider:
+bskchar "Wider diamond";
+beginarithchar(chars.math_diamond_wider); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; y4l=h+o;
+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_triangle:
+bskchar "Diamond-triangle operator";
+beginarithchar(chars.math_diamond_triangle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; y4l=h+o;
+x7=.5[x5,x6]=.5w; x6-x5=1.5(y7-y5)=w-7.5u;
+y5=y6; .2[y5,y7]=math_axis;
+y5'=y6'=y5+(rule_thickness-currentbreadth);
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+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;
+oblu:=f_obl;
+filldraw obl(5,7,6)---obl(6,5,7)---obl(7,6,5)---cycle;
+oblu:=2oblu;
+infill obl(5',7',6')---obl(6',5',7')---obl(7',6',5')---cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_diamond_circle:
+bskchar "Diamond-circle operator";
+beginarithchar(chars.math_diamond_circle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=4u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness-3u;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+pos9(rule_thickness,0); pos10(rule_thickness,90); pos11(rule_thickness,180); pos12(rule_thickness,270);
+lft x9l=u; rt x11l=w-u; y9=y11=.5[y10,y12]=math_axis; x10=x12=.5w; y12l=h+o;
+filldraw obl(9l,12l,10l)---obl(10l,9l,11l)--obl(11l,10l,12l)---obl(12l,11l,9l)---cycle;
+oblu:=2oblu;
+infill obl(9r,12r,10r)---obl(10r,9r,11r)--obl(11r,10r,12r)---obl(12r,11r,9r)---cycle;
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_diamond_minus:
+bskchar "Diamond-minus operator";
+beginarithchar(chars.math_diamond_minus); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis=y5=y6; x2=x4=.5w; y4l=h+o;
+x5=x1; x6=x3;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(4r,3r,1r)---obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+(tim0,tim1)=subpath(0,3) of p0 intersectiontimes p1;
+(tim2-3,tim3)=subpath(3,length p0) of p0 intersectiontimes p1;
+(tim4,tim5)=subpath(0,3) of p0 intersectiontimes p2;
+(tim6-6,tim7)=subpath(6,length p0) of p0 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim6),length p0) of p0
+ ..subpath(0,rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_diamond_vbar:
+bskchar "Diamond-vertical bar operator";
+beginarithchar(chars.math_diamond_vbar); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=x5=x6=.5w; y4l=h+o;
+y5=y2; y6=y4;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+(tim0,tim1)=subpath(0,3) of p0 intersectiontimes p1;
+(tim2-3,tim3)=subpath(3,length p0) of p0 intersectiontimes p1;
+(tim4,tim5)=subpath(0,3) of p0 intersectiontimes p2;
+(tim6-6,tim7)=subpath(6,length p0) of p0 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim6),length p0) of p0
+ ..subpath(0,rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_diamond_plus:
+bskchar "Diamond-plus operator";
+beginarithchar(chars.math_diamond_plus); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=y7=y8=math_axis; x2=x4=x5=x6=.5w; y4l=h+o;
+y5=y2; y6=y4; x7=x1; x8=x3;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+p5=obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---obl(1r,4r,2r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+p3=z8l--z7l;
+p4=z7r--z8r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p3;
+(tim2-1,tim3)=subpath(1,length p0) of p0 intersectiontimes p2;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6-2,tim7)=subpath(2,4) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p3;
+(tim10,tim11)=p3 intersectiontimes p1;
+(tim12-4,tim13)=subpath(4,6) of p0 intersectiontimes p4;
+(tim14-6,tim15)=subpath(6,8) of p0 intersectiontimes p1;
+(tim16,tim17)=p1 intersectiontimes p4;
+(tim18-4,tim19)=subpath(4,7) of p5 intersectiontimes p2;
+(tim20-6,tim21)=subpath(6,length p5) of p5 intersectiontimes p4;
+(tim22,tim23)=p4 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim1).zpet) of p3..cycle;
+infill subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p3,tim9),rundy(p3,tim10).zpet) of p3
+ ..subpath(rundy(p1,tim11),rundy(p1,tim7).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p1,tim15),rundy(p1,tim16).zpet) of p1
+ ..subpath(rundy(p4,tim17),rundy(p4,tim13).zpet) of p4..cycle;
+infill subpath(rundy(p5,tim18),rundy(p5,tim20).zpet) of p5
+ ..subpath(rundy(p4,tim21),rundy(p4,tim22).zpet) of p4
+ ..subpath(rundy(p2,tim23),rundy(p2,tim19).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_diamond_times:
+bskchar "Diamond-times operator";
+beginarithchar(chars.math_diamond_times); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,225); pos6(rule_thickness,225);
+pos7(rule_thickness,135); pos8(rule_thickness,135);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; y4l=h+o;
+z5=.5[z2,z3]; z6=.5[z1,z4]; z7=.5[z1,z2]; z8=.5[z3,z4];
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+p5=obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---obl(1r,4r,2r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+p3=z8l--z7l;
+p4=z7r--z8r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p3;
+(tim2-1,tim3)=subpath(1,length p0) of p0 intersectiontimes p2;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6-2,tim7)=subpath(2,4) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p3;
+(tim10,tim11)=p3 intersectiontimes p1;
+(tim12-4,tim13)=subpath(4,6) of p0 intersectiontimes p4;
+(tim14-6,tim15)=subpath(6,8) of p0 intersectiontimes p1;
+(tim16,tim17)=p1 intersectiontimes p4;
+(tim18-4,tim19)=subpath(4,7) of p5 intersectiontimes p2;
+(tim20-6,tim21)=subpath(6,length p5) of p5 intersectiontimes p4;
+(tim22,tim23)=p4 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim1).zpet) of p3..cycle;
+infill subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p3,tim9),rundy(p3,tim10).zpet) of p3
+ ..subpath(rundy(p1,tim11),rundy(p1,tim7).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p1,tim15),rundy(p1,tim16).zpet) of p1
+ ..subpath(rundy(p4,tim17),rundy(p4,tim13).zpet) of p4..cycle;
+infill subpath(rundy(p5,tim18),rundy(p5,tim20).zpet) of p5
+ ..subpath(rundy(p4,tim21),rundy(p4,tim22).zpet) of p4
+ ..subpath(rundy(p2,tim23),rundy(p2,tim19).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+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_thick:
+bskchar "Thick similarity sign";
+beginchar(chars.math_sim_thick, 14u#, v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+{{ numeric old_curve, old_hair; old_curve:=curve; old_hair:=hair;
+ save curve, hair; numeric curve, hair;
+ curve:=1.5old_curve; hair:=1.5old_hair;
+ vlnka(0,1);
+}};
+endchar;
+
+iff known chars.math_sim_dots:
+bskchar "Similarity sign with dots";
+beginchar(chars.math_sim_dots, 14u#, v_center(x_height#)); uni "0x223B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+x2=x3=.5w; .5[y2,y3]=.5[y0,y1]=math_axis; top y2+.5dot_size=h;
+vlnka(0,1);
+dot(2); dot(3);
+endchar;
+
+iff known chars.math_sim_dot:
+bskchar "Similarity sign with dot";
+beginchar(chars.math_sim_dot, 14u#, v_center(x_height#)); uni "0x2A6A";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+x2=.5w; .5[y0,y1]=math_axis; top y2+.5dot_size=h;
+vlnka(0,1);
+dot(2);
+endchar;
+
+iff known chars.math_sim_dots_rising:
+bskchar "Similarity sign with rising dots";
+beginchar(chars.math_sim_dots_rising, 14u#, v_center(.8x_height#)); uni "0x2A6B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+.5[x2,x3]=.5w; rt x2=x1a;
+.5[y2,y3]=.5[y0,y1]=math_axis; top y2+.5dot_size=h;
+vlnka(0,1);
+dot(2); dot(3);
+endchar;
+
+iff known chars.math_sim_BB:
+bskchar "Blackboard-bold similarity sign";
+beginchar(chars.math_sim_BB, 14u#, v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+{{ numeric old_curve, old_hair; old_curve:=curve; old_hair:=hair;
+ save curve, hair; numeric curve, hair;
+ curve:=1.5old_curve; hair:=1.5old_hair;
+ vlnka(0,1);
+}};
+path p[]; numeric tim[];
+p100:=subpath(0,4) of _vlnka;
+p101:=subpath(5,infinity) of _vlnka;
+z100=bsktouch(subpath(0,2) of p100,dir135,p101,dir-45);
+z101=bsktouch(subpath(2,infinity) of p100,dir135,p101,dir-45);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y0r-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y0)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+oblu:=curve;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.math_sim_not:
+bskchar "Not similarity sign";
+beginchar(chars.math_sim_not, 14u#, v_center(.7x_height#)); uni "0x2241";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread, tim[]; spread:=.5x_height;
+.5[y0,y1]=math_axis;
+vlnka(0,1).nodraw;
+top y2=h; bot y3=-d; .5[x2,x3]=.5w; x2=x1a;
+pos2(rule_thickness,angle(z3-z2)+90); pos3(rule_thickness,angle(z3-z2)+90);
+bskpoints(2,3,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z2l---z3ll..{z2-z3}z3r;
+p3:=z3r---z2rr..{z3-z2}z2l;
+(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,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(2,3); labels(2rr,3ll);
+endchar;
+
+iff known chars.math_lazyS:
+bskchar "Inverted lazy S sign";
+beginchar(chars.math_lazyS, 14u#, v_center(.5x_height#)); uni "0x223E";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+pos0(rule_thickness,0); pos1(rule_thickness,0); pos2(rule_thickness,250); pos3(rule_thickness,250);
+pos4(hair,90); pos5(hair,90);
+top y2l=top y5r=h; bot y3r=bot y4l=-d; x1-x3=1/4(x1-x0); .5[x0,x1]=.5[x2,x3]=.5w; lft x0l=u;
+y0=y1=.5[y2,y3]; x4=x2; x5=x3;
+filldraw z4l{left}..z0l..z2l..z3l..z1l..{left}z5l..{right}z5r..z1r..z3r..z2r..z0r..{right}z4r..cycle;
+penlabels(0,1,2,3,4,5);
+endchar;
+
+iff known chars.math_sinus:
+bskchar "Sinus sign";
+beginchar(chars.math_sinus, 14u#, v_center(.5x_height#)); uni "0x223F";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+pos0(rule_thickness,0); pos1(rule_thickness,0); pos2(rule_thickness,270); pos3(rule_thickness,270);
+pos4(rule_thickness,180);
+x1-x3=1/4(x1-x0); .5[x0,x1]=.5[x2,x3]=x4=.5w; lft x0l=u;
+y0=y1=.5[y2,y3]=y4=math_axis; y2-y0=(x1-x0)/6.28;
+filldraw z0l{dir45}..{right}z2l..{dir-45}z4l..{right}z3l..{dir45}z1l
+ ..z1r{dir-135}..{left}z3r..{dir135}z4r..{left}z2r..{dir-135}z0r..cycle;
+penlabels(0,1,2,3,4,5);
+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:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+top y1=h; lft x2=u; rt x3=w-u; y2l=y3l=-d;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+penlabels(2,3);
+endchar;
+
+iff known chars.math_sim_eq_neg:
+bskchar "Negated similar or equal sign";
+beginchar(chars.math_sim_eq_neg, 14u#,.25x_height#+1.5u#+math_axis#,.25x_height#+1.5u#-math_axis#); uni "0x2244";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+numeric spread; spread:=.5x_height;
+oblu:=oblu; oblu.more:=2oblu;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+top y1=h; lft x2=u; rt x3=w-u; y2l=y3l=-d;
+vlnka(0,1).nodraw;
+bskpoints(2,3,hair,hair);
+top y4=h; bot y5=-d-2.5rule_thickness; .5[x4,x5]=.5w; x4=x1a;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z4l---z5ll..{z4-z5}z5r;
+p3:=z5r---z4rr..{z5-z4}z4l;
+p4:=z3r--z2rr;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p3 intersectiontimes p4;
+y1'l=y1'r=y2r; z1'l=whatever[z4l,z5l]; z1'r=whatever[z4r,z5r];
+y2'l=y2'r=y2l; z2'l=whatever[z4l,z5l]; z2'r=whatever[z4r,z5r];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..z2l---tobl(2'l,2l,5ll).more---z5ll..z5r---tobl(2'r,5r,3l)---z3ll..z3r
+ ..subpath(0,rundy(p4,(tim11,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim10,2oblu)),rundy(p3,(tim3,2oblu)).zpet) of p3
+ ..subpath(rundy(p0,(tim2,2oblu)),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,2oblu)),infinity) of p1..cycle;
+penlabels(1',2,2',3,4,5,6,7); labels(2rr,3ll,4rr,5ll);
+endchar;
+
+iff known chars.math_eq_double_sim:
+bskchar "Double equal or similar sign";
+beginchar(chars.math_eq_double_sim, 14u#, v_center(.95x_height#+2u#)); uni "0x2A73";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+bot y0=-d; lft x2=lft x4=u; rt x3=rt x5=w-u; y4r=y5r=h; y2=y3=y4-.45x_height;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_sim_eq_double:
+bskchar "Similar or double equal sign";
+beginchar(chars.math_sim_eq_double, 14u#, v_center(.95x_height#+2u#)); uni "0x2245";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_congruent_dot:
+bskchar "Congruent with dot";
+beginchar(chars.math_congruent_dot, 14u#, .775x_height#+u#+math_axis#,.475x_height#+u#-math_axis#); uni "0x2A6D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h-.3x_height; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+x6=.5w; top y6+.5dot_size=h;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+dot(6);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_sim_neq_double:
+bskchar "Similar or not double equal sign";
+beginchar(chars.math_sim_neq_double, 14u#, v_center(.95x_height#+2u#)); uni "0x2246";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka(0,1);
+top top y6=bot y1a.r; bot y7=-d-2.5rule_thickness; .5[x6,x7]=.5w; x6-x7=3u;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(2,3,hair,hair); bskpoints(4,5,hair,hair);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y2'l=y2'r=y2l; y3'l=y3'r=y2r; y4'l=y4'r=y4l; y5'l=y5'r=y4r;
+z5'l=whatever[z6l,z7l]; z5'r=whatever[z6r,z7r];
+z4'l=whatever[z6l,z7l]; z4'r=whatever[z6r,z7r];
+z3'l=whatever[z6l,z7l]; z3'r=whatever[z6r,z7r];
+z2'l=whatever[z6l,z7l]; z2'r=whatever[z6r,z7r];
+filldraw z4l---obl(4'l,4l,3'l).more---obl(3'l,4'l,2r)---z2rr..z2l---obl(2'l,2l,7l).more---z7l..z7r---obl(2'r,7r,3l)---z3ll..z3r---obl(3'r,3r,4'r).more---obl(4'r,3'r,5l)---z5ll..z5r---obl(5'r,5r,6r).more---z6r..z6l---obl(5'l,6l,4r)---z4rr..cycle;
+penlabels(2,2',3,3',4,4',5,5',6,7);
+endchar;
+
+iff known chars.math_sim_eq_double_neg:
+bskchar "Negated similar or double equal sign";
+beginchar(chars.math_sim_eq_double_neg, 14u#, v_center(.95x_height#+2u#)); uni "0x2247";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+numeric spread; spread:=.5x_height;
+oblu:=oblu; oblu.more:=2oblu;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka(0,1).nodraw;
+bskpoints(2,3,hair,hair); bskpoints(4,5,hair,hair);
+top y6=h; bot y7=-d-2.5rule_thickness; .5[x6,x7]=.5w; x6=x1a;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z6l---z7ll..{z6-z7}z7r;
+p3:=z7r---z6rr..{z7-z6}z6l;
+p4:=z5r--z4rr;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p3 intersectiontimes p4;
+y2'l=y2'r=y2l; z2'l=whatever[z6l,z7l]; z2'r=whatever[z6r,z7r];
+y3'l=y3'r=y2r; z3'l=whatever[z6l,z7l]; z3'r=whatever[z6r,z7r];
+y4'l=y4'r=y4l; z4'l=whatever[z6l,z7l]; z4'r=whatever[z6r,z7r];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..z4l---obl(4'l,4l,3'l).more---obl(3'l,4'l,2r)---z2rr..z2l
+ ---obl(2'l,2l,7l).more---z7ll..z7r
+ ---obl(2'r,7r,3l)---z3ll..z3r---obl(3'r,3r,4'r).more---obl(4'r,3'r,5l)
+ ---z5ll..z5r
+ ..subpath(0,rundy(p4,(tim11,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim10,2oblu)),rundy(p3,(tim3,2oblu)).zpet) of p3
+ ..subpath(rundy(p0,(tim2,2oblu)),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,2oblu)),infinity) of p1..cycle;
+penlabels(2,2',3,3',4,4',5,6,7); labels(2rr,3ll,4rr,5ll);
+endchar;
+
+iff known chars.math_eq_sim:
+bskchar "Equal or similar sign";
+beginchar(chars.math_eq_sim, 14u#, v_center(.5x_height#+3u#)); uni "0x2242";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=(h+d)-3u;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+bot y0=-d; lft x2=u; rt x3=w-u; y2r=y3r=h;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+endchar;
+
+iff known chars.math_approx:
+bskchar "Approximate 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_approx_thick:
+bskchar "Thick approximate sign";
+beginchar(chars.math_approx_thick, 14u#, v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5(h+d);
+top y1=h; bot y2=-d;
+{{ numeric old_curve, old_hair; old_curve:=curve; old_hair:=hair;
+ save curve, hair; numeric curve, hair;
+ curve:=1.5old_curve; hair:=1.5old_hair;
+ vlnka(0,1);
+ vlnka(2,3);
+}};
+endchar;
+
+iff known chars.math_sim_minus_sim:
+bskchar "Similar-minus-similar sign";
+beginchar(chars.math_sim_minus_sim, 14u#, v_center(1.5x_height#)); uni "0x2A6C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; bot y2=-d;
+lft x4=u; rt x5=w-u; y4=y5=math_axis;
+vlnka(0,1);
+vlnka(2,3);
+filldraw bskrule(4,5,hair,hair);
+penlabels(4,5);
+endchar;
+
+iff known chars.math_approx_circumflex:
+bskchar "Approximate sign with circumflex accent";
+beginchar(chars.math_approx_circumflex, 14u#, asc_height#,.5x_height#-math_axis#); uni "0x2A6F";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+top y1=.5x_height+math_axis; bot y2=-d; x5=.5w+u;
+vlnka(0,1);
+vlnka(2,3);
+circumflex(4,5,6);
+endchar;
+
+iff known chars.math_tilde_triple:
+bskchar "Triple tilde";
+beginchar(chars.math_tilde_triple, 14u#, v_center(1.2x_height#)); uni "0x224B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.4x_height;
+top y1=h; bot y2=-d; .5[y4,y5]=math_axis;
+vlnka(0,1);
+vlnka(2,3);
+vlnka(4,5);
+endchar;
+
+iff known chars.math_approx_bar:
+bskchar "Approximate sign with lower bar";
+beginchar(chars.math_approx_bar, 14u#, v_center(x_height#+3u#)); uni "0x224A";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; bot y2=-d+3u;
+y4l=y5l=-d; lft x4=u; rt x5=w-u;
+vlnka(0,1);
+vlnka(2,3);
+filldraw bskrule(4,5,hair,hair);
+penlabels(4,5);
+endchar;
+
+iff known chars.math_approx_eq_double:
+bskchar "Approximate sign with lower bar";
+beginchar(chars.math_approx_eq_double, 14u#, v_center(x_height#+2u#+.45x_height#)); uni "0x2A70";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1=h; bot y2=-d+2u+.45x_height;
+y6l=y7l=-d; y4=y5=y6+.45x_height; lft x4=lft x6=u; rt x5=rt x7=w-u;
+vlnka(0,1);
+vlnka(2,3);
+filldraw bskrule(4,5,hair,0);
+filldraw bskrule(7,6,hair,0);
+penlabels(4,5,6,7);
+endchar;
+
+iff known chars.math_approx_neg:
+bskchar "Negated approximate sign";
+beginchar(chars.math_approx_neg, 14u#, v_center(x_height#)); uni "0x2249";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread; spread:=.5(h+d);
+top y1=h; bot y2=-d;
+vlnka(0,1).nodraw; p0:=_vlnka;
+vlnka(2,3).nodraw;
+.5[y4,y5]=math_axis;top y4=h+rule_thickness; .5[x4,x5]=.5w; rt x4=lft x1a;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=subpath(0,4) of p0;
+p2:=subpath(5,infinity) of p0;
+p3:=subpath(0,4) of _vlnka;
+p4:=subpath(5,infinity) of _vlnka;
+p5:=z4l---z5ll..{z4-z5}z5r;
+p6:=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=p1 intersectiontimes p5;
+(tim2,tim3)=p1 intersectiontimes p6;
+(tim4,tim5)=p2 intersectiontimes p6;
+(tim6,tim7)=p2 intersectiontimes p5;
+(tim8,tim9)=p3 intersectiontimes p5;
+(tim10,tim11)=p3 intersectiontimes p6;
+(tim12,tim13)=p4 intersectiontimes p6;
+(tim14,tim15)=p4 intersectiontimes p5;
+filldraw subpath(0,rundy(p1,(tim0,2oblu)).zpet) of p1
+ ..subpath(rundy(p5,(tim1,2oblu)),rundy(p5,tim15).zpet) of p5
+ ..subpath(rundy(p4,tim14),infinity) of p4
+ ..subpath(0,rundy(p3,(tim8,2oblu)).zpet) of p3
+ ..subpath(rundy(p5,(tim9,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p6,tim11).zpet) of p6
+ ..subpath(rundy(p3,tim10),infinity) of p3
+ ..subpath(0,rundy(p4,(tim12,2oblu)).zpet) of p4
+ ..subpath(rundy(p6,(tim13,2oblu)),rundy(p6,tim3).zpet) of p6
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p6,(tim5,2oblu)),infinity) of p6
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p2,tim6),infinity) of p2..cycle;
+penlabels(4,5);
+endchar;
+
+iff known chars.math_ceiling_left:
+bskchar "Left ceiling bracket";
+beginchar(chars.math_ceiling_left,5.5u#,body_height#,paren_depth#); uni "0x2308";
+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+hair*left..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+breadth*left..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+breadth*left..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+breadth*left..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+breadth*left..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 "0x230A";
+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+hair*left..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+breadth*left..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+breadth*left..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+breadth*left..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+breadth*left..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 "0x2309";
+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+hair*right..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+breadth*right..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+breadth*right..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+breadth*right..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+breadth*right..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 "0x230B";
+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+hair*right..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+breadth*right..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+breadth*right..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+breadth*right..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+breadth*right..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_logical_not_double:
+bskchar "Logical not sign (double stroked)";
+beginchar(chars.math_logical_not_double,13u#, x_height#,0); uni "0x2AEC";
+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);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x1=lft x5=u; rt x3r=w-u; x2=x3r; x4=x3l;
+top y1=top y2=x_height; y3=.2x_height; y4=y5=bar_height;
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---obl(4r,2l,5r)---z5rr..z5l---obl(4l,5l,3l)---z3ll
+ ..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,3ll,4ll,5rr);
+endchar;
+
+iff known chars.math_logical_not_inv:
+bskchar "Inverted logical not sign";
+beginchar(chars.math_logical_not_inv,13u#, x_height#,0); uni "0x2310";
+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,180);
+rt x1=w-u; lft x3r=u; x2=x3r;
+y1=y2=.5[bar_height,x_height]; y3-y1=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_logical_not_inv_double:
+bskchar "Inverted logical not sign (double stroked)";
+beginchar(chars.math_logical_not_inv_double,13u#, x_height#,0); uni "0x2AED";
+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,180);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+rt x1=rt x5=w-u; lft x3r=u; x2=x3r; x4=x3l;
+top y1=top y2=x_height; y3=.2x_height; y4=y5=bar_height;
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---obl(4r,2l,5r)---z5rr..z5l---obl(4l,5l,3l)---z3ll
+ ..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,3ll,4ll,5rr);
+endchar;
+
+iff known chars.math_product_interior:
+bskchar "Interior product sign";
+beginchar(chars.math_product_interior,13u#, x_height#,0); uni "0x2A3C";
+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=math_axis; y3=h;
+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_product_interior_right:
+bskchar "Righthand interior product sign";
+beginchar(chars.math_product_interior_right,13u#, x_height#,0); uni "0x2A3D";
+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,180);
+rt x1=w-u; lft x3r=u; x2=x3r;
+y1=y2=math_axis; y3=h;
+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_exists_not:
+bskchar "Existential quantifier with negation";
+beginchar(chars.math_exists_not,10u#,asc_height#+1/3desc_depth#,1/3desc_depth#); uni "0x2204";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oblu.m; oblu.m:=oblu;
+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=asc_height; 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;
+top rt z7=(w-2.5u,h); top lft z8=(2.5u,-d);
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(2,1,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y7'l=y7'r=y1r; y8'l=y8'r=y5l; y7''l=y7''r=y1l; y8''l=y8''r=y5r;
+y3'l=y3'r=y3l; y3''l=y3''r=y3r;
+z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+z3''l=whatever[z7l,z8l]; z3''r=whatever[z7r,z8r];
+z7'l=whatever[z7l,z8l]; z7'r=whatever[z7r,z8r];
+z7''l=whatever[z7l,z8l]; z7''r=whatever[z7r,z8r];
+z8'l=whatever[z7l,z8l]; z8'r=whatever[z7r,z8r];
+z8''l=whatever[z7l,z8l]; z8''r=whatever[z7r,z8r];
+filldraw z1r---obl(7'l,1r,7l)---z7l..z7rr---tobl(7'r,7rr,2r)---z2
+ ..z2r+o*down---z4r---obl(8'r,4r,8r)---z8r..z8ll
+ ---obl(8'l,8l,5l)---z5l..z5rr---obl(8''l,5r,3'l)
+ ---obl(3'l,8''l,3l)--z3l..z3r---obl(3''l,3r,7''l)---obl(7''l,3''l,1l)
+ ---z1ll..cycle;
+infill obl(2l,7''r,6r).m---obl(6r,2l,3''r)---obl(3''r,6r,7''r)
+ ---obl(7''r,3''r,2l).m---cycle;
+infill obl(3'r,8''r,6l)---obl(6l,3'r,4l)---obl(4l,6l,8''r)---obl(8''r,4l,3'r)---cycle;
+penlabels(1,2,3,3',3'',4,5,6,7,7',7'',8,8',8''); labels(1ll,5rr,7rr,8ll);
+endchar;
+
+iff known chars.math_exists_not_vert:
+bskchar "Existential quantifier with vertical negation";
+beginchar(chars.math_exists_not_vert,10u#,asc_height#+1/3desc_depth#,1/3desc_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oblu.m; oblu.m:=oblu;
+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=asc_height; 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;
+top y7=h; top y8=-d; x7=x8=.5w;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(2,1,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y7'l=y7'r=y1r; y8'l=y8'r=y5l; y7''l=y7''r=y1l; y8''l=y8''r=y5r;
+y3'l=y3'r=y3l; y3''l=y3''r=y3r;
+z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+z3''l=whatever[z7l,z8l]; z3''r=whatever[z7r,z8r];
+z7'l=whatever[z7l,z8l]; z7'r=whatever[z7r,z8r];
+z7''l=whatever[z7l,z8l]; z7''r=whatever[z7r,z8r];
+z8'l=whatever[z7l,z8l]; z8'r=whatever[z7r,z8r];
+z8''l=whatever[z7l,z8l]; z8''r=whatever[z7r,z8r];
+filldraw z1r---obl(7'l,1r,7l).m---z7l..z7rr---obl(7'r,7r,2r).m---z2
+ ..z2r+o*down---z4r---obl(8'r,4r,8r).m---z8r..z8ll
+ ---obl(8'l,8l,5l).m---z5l..z5rr---obl(8''l,5r,3'l).m
+ ---obl(3'l,8''l,3l).m---z3l..z3r---obl(3''l,3r,7''l).m---obl(7''l,3''l,1l).m
+ ---z1ll..cycle;
+infill obl(2l,7''r,6r).m---obl(6r,2l,3''r)---obl(3''r,6r,7''r).m
+ ---obl(7''r,3''r,2l).m---cycle;
+infill obl(3'r,8''r,6l).m---obl(6l,3'r,4l)---obl(4l,6l,8''r)---obl(8''r,4l,3'r).m---cycle;
+penlabels(1,2,3,3',3'',4,5,6,7,7',7'',8,8',8''); labels(1ll,5rr,7rr,8ll);
+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_hardy_neg:
+bskchar "Negated Hardy's asypmtotic equivalence sign";
+beginchar(chars.math_hardy_neg,14u#,v_center(x_height#)); uni "0x226D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+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;
+.5[y7,y8]=math_axis; bot y8=-d-2.5rule_thickness; .5[x7,x8]=.5w; x7=x3-2u;
+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);
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(7,8,rule_thickness,rule_thickness);
+p0:=(z1l+hair*unitvector(z2-z1)...z2l...z3l)..(z3r..z2r..z1r)..cycle;
+p1:=(z4l...z5l...z6l)..(z6r+hair*unitvector(z5-z6)..z5r..z4r)..cycle;
+p2:=z7l--z8ll;
+p3:=z8r--z7rr;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p2;
+(tim2-3,tim3)=subpath(3,length p1) of p1 intersectiontimes p2;
+(tim4,tim5)=subpath(0,2) of p1 intersectiontimes p2;
+(tim6,tim7)=subpath(0,2) of p1 intersectiontimes p3;
+(tim8-2,tim9)=subpath(2,length p1) of p1 intersectiontimes p3;
+(tim10,tim11)=subpath(0,2) of p0 intersectiontimes p3;
+(tim12-3,tim13)=subpath(3,length p0) of p0 intersectiontimes p3;
+(tim14-3,tim15)=subpath(3,length p0) of p0 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),length p1) of p1
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p2,(tim5,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p1,tim6),rundy(p1,(tim8,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim9,2oblu)),rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p0,tim10),rundy(p0,(tim12,2oblu)).zpet) of p0
+ ..subpath(rundy(p3,(tim13,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p0,tim14),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(7rr,8ll);
+endchar;
+
+iff known chars.math_logor_curly:
+bskchar "Curly logical or sign";
+beginchar(chars.math_logor_curly,10u#,.8asc_height#,0); uni "0x22CE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x0'-.5o=.5[x1,x2]=.5w; bot y0=0; y0'=2/3[y0,y1];
+rt x1=w-u; y1+.5rule_thickness=h; y2=y1;
+pos0(rule_thickness,0);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{down}z0l;
+p2:=z0r{up}..{z2-z0'}z2l;
+z3=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z3--(w,y3)));
+tim2=xpart(p2 intersectiontimes (z3--(0,y3)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{down}z0l..z0r{up}..{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',3);
+endchar;
+
+iff known chars.math_logand_curly:
+bskchar "Curly logical and sign";
+beginchar(chars.math_logand_curly,10u#,.8asc_height#,0); uni "0x22CF";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x0'-.5o=.5[x1,x2]=.5w; top y0=h; y0'=2/3[y0,y1];
+rt x1=w-u; y1-.5rule_thickness=0; y2=y1;
+pos0(rule_thickness,0);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{up}z0l;
+p2:=z0r{down}..{z2-z0'}z2r;
+z3=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z3--(w,y3)));
+tim2=xpart(p2 intersectiontimes (z3--(0,y3)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{up}z0l..z0r{down}..{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',3);
+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',3);
+endchar;
+
+iff known chars.math_precedes_not:
+bskchar "Not precedes sign";
+beginchar(chars.math_precedes_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2280";
+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=vround((math_axis#+.5x_height#)*hppp); 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)));
+top rt z4=(w-2u,h); top lft z5=(2u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l;
+p4:=z0r{right}..{z1-z0'}z1r..{z0'-z1}z1l;
+p5:=z5r{z5-z4}..z5ll---z4l;
+p6:=z4l{z4-z5}..z4rr---z5r;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),infinity) of p6
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5); labels(0',4rr,5ll);
+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 "0x2AAF";
+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_precedes_neq:
+bskchar "Precedes or not equals to sign";
+beginchar(chars.math_precedes_neq,12u#,v_center(x_height#+3u#)); uni "0x2AB1";
+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;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-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;
+bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+penlabels(0,1,2,3,4,5,6); labels(0');
+endchar;
+
+iff known chars.math_precedes_neq_vert:
+bskchar "Precedes or not equals to sign with vertical stroke";
+beginchar(chars.math_precedes_neq_vert,12u#,v_center(x_height#+3u#)); uni "non"; %"0x2AB1.vert";
+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;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-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;
+bskpoints(3,4,hair,hair);
+x5=x6=.5[x3,x4]; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+oblu:=f_obl;
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+penlabels(0,1,2,3,4,5,6); labels(0');
+endchar;
+
+iff known chars.math_precedes_eq_double:
+bskchar "Precedes and double equals to sign";
+beginchar(chars.math_precedes_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB3";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; 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;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-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;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x0; x4=x6=x1; y5l=y6l=-d; y3=y4=y5+.45x_height;
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+penlabels(0,1,2,3,4,5,6); labels(0',4ll,5ll);
+endchar;
+
+iff known chars.math_precedes_not_eq_double:
+bskchar "Precedes and not double equals to sign";
+beginchar(chars.math_precedes_not_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB5";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; 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;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-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;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x0; x4=x6=x1; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top rt z7=(x2-2u,y2l-rule_thickness); .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,0); bskpoints(6,5,hair,0);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+oblu:=f_obl; oblu.more:=2f_obl;
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6rr).more---z6rr..z6l
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5ll).more---z5ll
+ ..z5r---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_precedes_sim:
+bskchar "Precedes or similar to sign";
+beginchar(chars.math_precedes_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x227E";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; 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;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+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;
+vlnka(3,4);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_precedes_not_sim:
+bskchar "Precedes and not similar to sign";
+beginchar(chars.math_precedes_not_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x22E8";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; 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;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+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;
+vlnka(3,4).nodraw;
+top y6-bot y7=.7x_height; .5[y6,y7]=.5[y3,y4]; .5[x6,x7]=.5w; x6=x4a;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+p3:=subpath(0,4) of _vlnka;
+p4:=subpath(5,infinity) of _vlnka;
+p5:=z6l---z7ll..{z6-z7}z7r;
+p6:=z7r---z6rr..{z7-z6}z6l;
+(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,2oblu)).zpet) of p3
+ ..subpath(rundy(p5,(tim4,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p6,tim6).zpet) of p6
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p6,(tim8,2oblu)),infinity) of p6
+ ..subpath(0,rundy(p5,tim10).zpet) of p5
+ ..subpath(rundy(p4,tim9),infinity) of p4..cycle;
+penlabels(0,1,2,6,7); labels(0');
+endchar;
+
+iff known chars.math_precedes_approx:
+bskchar "Precedes or approximately equal to sign";
+beginchar(chars.math_precedes_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2AB7";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.4x_height+rule_thickness; 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;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.4x_height; y6-y3=spread;
+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;
+vlnka(3,4); vlnka(6,7);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_precedes_not_approx:
+bskchar "Precedes and not approximately equal to sign";
+beginchar(chars.math_precedes_not_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2AB9";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+y7=y7'-.5o=.5[y8,y9]=math_axis+.4x_height+rule_thickness; lft x7=1.5u; x7'=2/3[x7,x8];
+top y8=h; x8+.5rule_thickness=w-u; x9=x8;
+pos7(rule_thickness,90);
+pos8(rule_thickness,angle(z8-z7')+90); pos9(rule_thickness,angle(z9-z7')+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+p6:=z8l{z7'-z8}..{left}z7l;
+p7:=z7r{right}..{z9-z7'}z9r;
+z12=bsktouch(p6,down,p7,up);
+tim16=xpart(p6 intersectiontimes (z12--(x12,h)));
+tim17=xpart(p7 intersectiontimes (z12--(x12,-d)));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+filldraw z9l+.5hair*unitvector(z7'-z9){z7'-z9}..{left}z7l..z7r{right}
+ ..{z8-z7'}z8r..{z7'-z8}z8l..subpath (0,rundy(p6,tim16).zpet) of p6
+ ..subpath(rundy(p7,tim17),infinity) of p7..cycle;
+penlabels(5,6,7,8,9); labels(7');
+endchar;
+
+iff known chars.math_precedes_eq_not:
+bskchar "Not precedes or equals to sign";
+beginchar(chars.math_precedes_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+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];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); 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);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+y6l=y7l=math_axis-.5x_height-1.5u; x6=x0; x7=x1; bskpoints(6,7,hair,hair);
+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)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l;
+p4:=z0r{right}..{z1-z0'}z1r..{z0'-z1}z1l;
+p5:=z5r{z5-z4}..z5ll---z4l;
+p6:=z4l{z4-z5}..z4rr---z5r;
+p7:=z6l{left}..z6rr---z7r;
+p8:=z7r{right}..z7ll---z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,tim15).zpet) of p6
+ ..subpath(rundy(p7,tim16),infinity) of p7
+ ..subpath(0,rundy(p8,(tim18,f_obl)).zpet) of p8
+ ..subpath(rundy(p6,(tim17,f_obl)),infinity) of p6
+ ..subpath(0,rundy(p5,tim19).zpet) of p5
+ ..subpath(rundy(p8,tim20),infinity) of p8
+ ..subpath(0,rundy(p7,(tim22,f_obl)).zpet) of p7
+ ..subpath(rundy(p5,(tim21,f_obl)),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_precedes_eq_curved:
+bskchar "Precedes or curvy equals to sign";
+beginchar(chars.math_precedes_eq_curved,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+u=x1;
+bot y4=-d; y0-y3=y2-y4;
+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,angle(z2-z0')+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)));
+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 z4l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z3l..z3r{right}..{z2-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_precedes_eq_curved_not:
+bskchar "Not precedes or curved equals to sign";
+beginchar(chars.math_precedes_eq_curved_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x22E0";
+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];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); 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);
+pos6(rule_thickness,90); pos7(rule_thickness,angle(z2-z0')+90);
+bot y7=.5x_height-math_axis; y0-y6=y2-y7; x6=x0; x7=x1-u;
+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)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l;
+p4:=z0r{right}..{z1-z0'}z1r..{z0'-z1}z1l;
+p5:=z5r{z5-z4}..z5ll---z4l;
+p6:=z4l{z4-z5}..z4rr---z5r;
+p7:=z6r{right}..{z2-z0'}z7r;
+p8:=z7l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,tim15).zpet) of p6
+ ..subpath(rundy(p7,tim16),infinity) of p7
+ ..subpath(0,rundy(p8,(tim18,f_obl)).zpet) of p8
+ ..subpath(rundy(p6,(tim17,f_obl)),infinity) of p6
+ ..subpath(0,rundy(p5,tim19).zpet) of p5
+ ..subpath(rundy(p8,tim20),infinity) of p8
+ ..subpath(0,rundy(p7,(tim22,f_obl)).zpet) of p7
+ ..subpath(rundy(p5,(tim21,f_obl)),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_eq_precedes:
+bskchar "Equals to or precedes sign";
+beginchar(chars.math_eq_precedes,12u#,v_center(x_height#+3u#)); uni "0x22DE";
+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;
+bot y2=-d; x1+.5rule_thickness=w-u; x2=x4+u=x1;
+top y4=h; y0-y3=y1-y4;
+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,angle(z1-z0')+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)));
+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 z4l+.5hair*unitvector(z0'-z1){z0'-z1}..{left}z3l..z3r{right}..{z1-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_precedes_double:
+bskchar "Double precedes sign";
+beginchar(chars.math_precedes_double,15u#,v_center(x_height#)); uni "0x2ABB";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=y4=y4'-.5o=.5[y5,y6]=math_axis; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=top y5=h; x1+.5rule_thickness=w-4.5u; x2=x1;
+lft x4=7.5u; x4'=2/3[x4,x5]; x5+.5rule_thickness=w-u; x6=x5;
+pos0(rule_thickness,90); pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos4(rule_thickness,90); pos5(rule_thickness,angle(z5-z4')+90); pos6(rule_thickness,angle(z6-z4')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+p3:=z5l{z4'-z5}..{left}z4l;
+p4:=z4r{right}..{z6-z4'}z6r;
+z3=bsktouch(p1,down,p2,up);
+z7=bsktouch(p3,down,p4,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+tim3=xpart(p3 intersectiontimes (z7--(x7,h)));
+tim4=xpart(p4 intersectiontimes (z7--(x7,-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;
+filldraw z6l+.5hair*unitvector(z4'-z2){z4'-z6}..{left}z4l..z4r{right}..{z5-z4'}z5r
+ ..{z4'-z5}z5l..subpath (0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+penlabels(0,1,2,4,5,6); labels(0',3,4',7);
+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_not:
+bskchar "Not follows sign";
+beginchar(chars.math_follows_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2281";
+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=vround((math_axis#+.5x_height#)*hppp); 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)));
+top rt z4=(w-2u,h); top lft z5=(2u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l;
+p4:=z0r{left}..{z1-z0'}z1l..{z0'-z1}z1r;
+p5:=z5r---z4rr..{z5-z4}z4l;
+p6:=z4l---z5ll..{z4-z5}z5r;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),infinity) of p6
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5); labels(0',4rr,5ll);
+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 "0x2AB0";
+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_follows_neq:
+bskchar "Follows or not equals to sign";
+beginchar(chars.math_follows_neq,12u#,v_center(x_height#+3u#)); uni "0x2AB2";
+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;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+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,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_neq_vert:
+bskchar "Follows or not equals to sign with vertical stroke";
+beginchar(chars.math_follows_neq_vert,12u#,v_center(x_height#+3u#)); uni "non"; %"0x2AB2.vert";
+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;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+x5=x6=.5[x3,x4]; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+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;
+oblu:=f_obl;
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_eq_double:
+bskchar "Follows and double equals to sign";
+beginchar(chars.math_follows_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB4";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; 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;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-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;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x1; x4=x6=x0; y5l=y6l=-d; y3=y4=y5+.45x_height;
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+penlabels(0,1,2,3,4,5,6); labels(0',4ll,5ll);
+endchar;
+
+iff known chars.math_follows_not_eq_double:
+bskchar "Follows and not double equals to sign";
+beginchar(chars.math_follows_not_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB6";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; 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;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-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;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x1; x4=x6=x0; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x2+2u; .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,0); bskpoints(6,5,hair,0);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl; oblu.more:=2f_obl;
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6rr).more---z6rr..z6l
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5ll).more---z5ll
+ ..z5r---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_follows_sim:
+bskchar "Follows or similar to sign";
+beginchar(chars.math_follows_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x227F";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; 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;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+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;
+vlnka(3,4);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_follows_not_sim:
+bskchar "Follows and not similar to sign";
+beginchar(chars.math_follows_not_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x22E9";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; 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;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+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;
+vlnka(3,4).nodraw;
+top y6-bot y7=.7x_height; .5[y6,y7]=.5[y3,y4]; .5[x6,x7]=.5w; x6=x4a;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+p3:=subpath(0,4) of _vlnka;
+p4:=subpath(5,infinity) of _vlnka;
+p5:=z6l---z7ll..{z6-z7}z7r;
+p6:=z7r---z6rr..{z7-z6}z6l;
+(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,2oblu)).zpet) of p3
+ ..subpath(rundy(p5,(tim4,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p6,tim6).zpet) of p6
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p6,(tim8,2oblu)),infinity) of p6
+ ..subpath(0,rundy(p5,tim10).zpet) of p5
+ ..subpath(rundy(p4,tim9),infinity) of p4..cycle;
+penlabels(0,1,2,6,7); labels(0');
+endchar;
+
+iff known chars.math_follows_approx:
+bskchar "Follows or approximately equal to sign";
+beginchar(chars.math_follows_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2AB8";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.4x_height+rule_thickness; 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;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.4x_height; y6-y3=spread;
+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;
+vlnka(3,4); vlnka(6,7);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_follows_not_approx:
+bskchar "Follows and not approximately equal to sign";
+beginchar(chars.math_follows_not_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2ABA";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+y7=y7'-.5o=.5[y8,y9]=math_axis+.4x_height+rule_thickness; rt x7=w-1.5u; x7'=2/3[x7,x8];
+top y8=h; x8-.5rule_thickness=u; x9=x8;
+pos7(rule_thickness,90);
+pos8(rule_thickness,angle(z8-z7')+90); pos9(rule_thickness,angle(z9-z7')+90);
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+p7:=z8r{z7'-z8}..{right}z7l;
+p8:=z7r{left}..{z9-z7'}z9l;
+z12=bsktouch(p7,down,p8,up);
+tim16=xpart(p7 intersectiontimes (z12--(x12,h)));
+tim17=xpart(p8 intersectiontimes (z12--(x12,-d)));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+filldraw z9r+.5hair*unitvector(z7'-z9){z7'-z9}..{right}z7l..z7r{left}..{z8-z7'}z8l
+ ..{z7'-z8}z8r..subpath (0,rundy(p7,tim16).zpet) of p7
+ ..subpath(rundy(p8,tim17),infinity) of p8..cycle;
+penlabels(5,6,7,8,9); labels(7');
+endchar;
+
+iff known chars.math_follows_eq_not:
+bskchar "Not follows or equals to sign";
+beginchar(chars.math_follows_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+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];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+y6l=y7l=math_axis-.5x_height-1.5u; x6=x0; x7=x1; bskpoints(6,7,hair,hair);
+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)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l;
+p4:=z0r{left}..{z1-z0'}z1l..{z0'-z1}z1r;
+p5:=z5r---z4rr..{z5-z4}z4l;
+p6:=z4l---z5ll..{z4-z5}z5r;
+p7:=z6l{right}..z6rr---z7r;
+p8:=z7r{left}..z7ll---z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,(tim15,f_obl)).zpet) of p6
+ ..subpath(rundy(p7,(tim16,f_obl)),infinity) of p7
+ ..subpath(0,rundy(p8,tim18).zpet) of p8
+ ..subpath(rundy(p6,tim17),infinity) of p6
+ ..subpath(0,rundy(p5,(tim19,f_obl)).zpet) of p5
+ ..subpath(rundy(p8,(tim20,f_obl)),infinity) of p8
+ ..subpath(0,rundy(p7,tim22).zpet) of p7
+ ..subpath(rundy(p5,tim21),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_follows_eq_curved:
+bskchar "Follows or curvy equals to sign";
+beginchar(chars.math_follows_eq_curved,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=x0;
+top y1=h; x1-.5rule_thickness=u; x2=x4-u=x1;
+bot y4=-d; y0-y3=y2-y4;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,270); pos4(rule_thickness,angle(z2-z0')+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)));
+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 z4l+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z3l..z3r{left}..{z2-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_eq_curved_not:
+bskchar "Not follows or curved equals to sign";
+beginchar(chars.math_follows_eq_curved_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x22E1";
+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];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos6(rule_thickness,90); pos7(rule_thickness,angle(z2-z0')-90);
+bot y7=.5x_height-math_axis; y0-y6=y2-y7; x6=x0; x7=x1+u;
+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)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l;
+p4:=z0r{left}..{z1-z0'}z1l..{z0'-z1}z1r;
+p5:=z5r---z4rr..{z5-z4}z4l;
+p6:=z4l---z5ll..{z4-z5}z5r;
+p7:=z6r{left}..{z2-z0'}z7r;
+p8:=z7l+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,(tim15,f_obl)).zpet) of p6
+ ..subpath(rundy(p7,(tim16,f_obl)),infinity) of p7
+ ..subpath(0,rundy(p8,tim18).zpet) of p8
+ ..subpath(rundy(p6,tim17),infinity) of p6
+ ..subpath(0,rundy(p5,(tim19,f_obl)).zpet) of p5
+ ..subpath(rundy(p8,(tim20,f_obl)),infinity) of p8
+ ..subpath(0,rundy(p7,tim22).zpet) of p7
+ ..subpath(rundy(p5,tim21),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_eq_follows:
+bskchar "Equals to or follows sign";
+beginchar(chars.math_eq_follows,12u#,v_center(x_height#+3u#)); uni "0x22DF";
+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=x0;
+bot y2=-d; x1-.5rule_thickness=u; x2=x4-u=x1;
+top y4=h; y0-y3=y1-y4;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,270); pos4(rule_thickness,angle(z1-z0')+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)));
+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 z4l+.5hair*unitvector(z0'-z1){z0'-z1}..{right}z3l..z3r{left}..{z1-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_double:
+bskchar "Double follows sign";
+beginchar(chars.math_follows_double,15u#,v_center(x_height#)); uni "0x2ABC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=y4=y4'-.5o=.5[y5,y6]=math_axis; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=top y5=h; x1-.5rule_thickness=4.5u; x2=x1;
+rt x4=w-7.5u; x4'=2/3[x4,x5]; x5-.5rule_thickness=u; x6=x5;
+pos0(rule_thickness,90); pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos4(rule_thickness,90); pos5(rule_thickness,angle(z5-z4')+90); pos6(rule_thickness,angle(z6-z4')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+p3:=z5r{z4'-z5}..{right}z4l;
+p4:=z4r{left}..{z6-z4'}z6l;
+z3=bsktouch(p1,down,p2,up);
+z7=bsktouch(p3,down,p4,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+tim3=xpart(p3 intersectiontimes (z7--(x7,h)));
+tim4=xpart(p4 intersectiontimes (z7--(x7,-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;
+filldraw z6r+.5hair*unitvector(z4'-z6){z4'-z6}..{right}z4l..z4r{left}..{z5-z4'}z5l
+ ..{z4'-z5}z5r..subpath (0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+penlabels(0,1,2,4,5,6); labels(0',3,4',7);
+endchar;
+
+iff known chars.math_precedes_relation:
+bskchar "Precedes under relation sign";
+beginchar(chars.math_precedes_relation,12u#,v_center(1.3x_height#)); uni "0x22B0";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos0(rule_thickness,90);
+pos1(rule_thickness,180); pos1'(rule_thickness,-90);
+pos2(rule_thickness,0); pos2'(rule_thickness,-90);
+y0=y0'-.5o=.5[y1,y2]=.5[y1',y2']=math_axis; lft x0=1.5u; x0'=.85[x0,x1];
+top y1=h-.25x_height; x1+.5rule_thickness=w-u; x2=x1;
+top y1'l=h; x1'=x2'=x1r-rule_thickness;
+p1:=z1'l{right}..z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r..{left}z2'r;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+filldraw z2'l{right}..z2l{z0'-z2}..{left}z0l..z0r{right}..{z1-z0'}z1r..{left}z1'r
+ ..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,1',2,2'); labels(0',3);
+endchar;
+
+iff known chars.math_follows_relation:
+bskchar "Follows under relation sign";
+beginchar(chars.math_follows_relation,12u#,v_center(1.3x_height#)); uni "0x22B1";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos0(rule_thickness,90);
+pos1(rule_thickness,180); pos1'(rule_thickness,90);
+pos2(rule_thickness,0); pos2'(rule_thickness,90);
+y0=y0'-.5o=.5[y1,y2]=.5[y1',y2']=math_axis; rt x0=w-1.5u; x0'=.85[x0,x1];
+top y1=h-.25x_height; x1-.5rule_thickness=u; x2=x1;
+top y1'r=h; x1'=x2'=x1l+rule_thickness;
+p1:=z1'r{left}..z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l..{right}z2'l;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+filldraw z2'r{left}..z2r{z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l..{right}z1'l
+ ..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,1',2,2'); 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 "0x2206";
+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 "0x29E0";
+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.math_null_set:
+bskchar "Null set";
+beginarithchar(chars.math_null_set); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,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=dbf;
+filldraw dvojsipka(0,1,2,3)..cycle;
+endchar;
+
+iff known chars.arrow_double_right_long:
+bskchar "Long double rightward arrow";
+beginchar(chars.arrow_double_right_long,22u#,v_center(5u#)); uni "0x27F9";
+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=dbf;
+filldraw dvojsipka(0,1,2,3)..cycle;
+endchar;
+
+iff known chars.arrow_double_right_not:
+bskchar "Double rightward arrow with negation";
+beginchar(chars.arrow_double_right_not,15u#,v_center(7u#)); uni "0x21CF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+.5[x4,x5]=.5[x0c,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,2,3);
+p2=z4l--z5ll;
+p1=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw 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(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap5,(tim6,2oblu)),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,(tim11,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap3,(tim10,2oblu)),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,(tim15,2oblu)).zpet) of p1
+ ..subpath(rundy(bskap4,(tim14,2oblu)),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_right_not_vert:
+bskchar "Double rightward arrow with vertical negation";
+beginchar(chars.arrow_double_right_not_vert,15u#,v_center(7u#)); uni "0x2903";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+x4=x5=.5[x0c,x1]; .5[y4,y5]=y0; top y5=h;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,2,3);
+p2=z4l--z5ll;
+p1=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw 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(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(bskap5,tim6),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(bskap3,tim10),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(bskap4,tim14),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+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=dbf;
+filldraw dvojsipka(0,1,3,2)..cycle;
+endchar;
+
+iff known chars.arrow_double_left_long:
+bskchar "Long double leftward arrow";
+beginchar(chars.arrow_double_left_long,22u#,v_center(5u#)); uni "0x27F8";
+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=dbf;
+filldraw dvojsipka(0,1,3,2)..cycle;
+endchar;
+
+iff known chars.arrow_double_left_not:
+bskchar "Double leftward arrow with negation";
+beginchar(chars.arrow_double_left_not,15u#,v_center(7u#)); uni "0x21CD";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+.5[x4,x5]=.5[x0c,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,3,2);
+p1=z4l--z5ll;
+p2=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw 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(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap5,(tim6,2oblu)),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,(tim11,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap3,(tim10,2oblu)),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,(tim15,2oblu)).zpet) of p1
+ ..subpath(rundy(bskap4,(tim14,2oblu)),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_left_not_vert:
+bskchar "Double leftward arrow with vertical negation";
+beginchar(chars.arrow_double_left_not_vert,15u#,v_center(7u#)); uni "0x2902";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+x4=x5=.5[x0c,x1]; .5[y4,y5]=y0; top y5=h;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,3,2);
+p1=z4l--z5ll;
+p2=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw 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(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(bskap5,tim6),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(bskap3,tim10),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(bskap4,tim14),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+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=dbf;
+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=dbf;
+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=dbf;
+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=dbf;
+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.arrow_double_left_right_long:
+bskchar "Long double left-right arrow";
+beginchar(chars.arrow_double_left_right_long,25u#,v_center(5u#)); uni "0x27FA";
+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=dbf;
+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.arrow_left_right_black:
+bskchar "Black left-right arrow";
+beginchar(chars.arrow_left_right_black,18u#,v_center(5u#)); uni "0x2B0C";
+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=dbf;
+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;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_double_left_right_not:
+bskchar "Double left-right arrow with negation";
+beginchar(chars.arrow_double_left_right_not,18u#,v_center(7u#)); uni "0x21CE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+.5[x4,x5]=.5[x0,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=z4l---z5ll..{z4-z5}z5r;
+p2:=z5r---z4rr..{z5-z4}z4l;
+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,tim11)=bskap4 intersectiontimes p1;
+(tim2,tim12)=bskap5 intersectiontimes p1;
+(tim3,tim13)=oldap4 intersectiontimes p2;
+(tim4,tim14)=oldap5 intersectiontimes p2;
+(tim5,tim15)=bskap6 intersectiontimes p1;
+(tim6,tim16)=bskap3 intersectiontimes p1;
+(tim7,tim17)=oldap6 intersectiontimes p2;
+(tim8,tim18)=oldap3 intersectiontimes p2;
+filldraw subpath(rundy(bskap4,(tim1,2oblu)),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),rundy(bskap5,tim2).zpet) of bskap5
+ ..subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(0,rundy(p2,(tim13,2oblu)).zpet) of p2
+ hide(bskat:=oldat)
+ ..subpath(rundy(oldap4,(tim3,2oblu)),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),rundy(oldap5,tim4).zpet) of oldap5
+ ..subpath(rundy(p2,tim14),infinity) of p2
+ ..subpath(0,rundy(p1,(tim11,2oblu)).zpet) of p1..cycle
+ ;
+bskat:=ooldat;
+infill subpath(rundy(bskap6,(tim5,2oblu)),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),rundy(bskap3,tim6).zpet) of bskap3
+ ..subpath(rundy(p1,tim16),rundy(p1,(tim15,oblu)).zpet) of p1..cycle;
+infill subpath(rundy(oldap6,(tim7,2oblu)),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),rundy(oldap3,tim8).zpet) of oldap3
+ ..subpath(rundy(p2,tim18),rundy(p2,(tim17,oblu)).zpet) of p2..cycle;
+penlabels(2,3,4,5,102,103); labels(1rr,4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_left_right_not_vert:
+bskchar "Double left-right arrow with vertical negation";
+beginchar(chars.arrow_double_left_right_not_vert,18u#,v_center(7u#)); uni "0x2904";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+x4=x5=.5[x0,x1]; .5[y4,y5]=y0; top y5=h;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=z4l---z5ll..{z4-z5}z5r;
+p2:=z5r---z4rr..{z5-z4}z4l;
+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,tim11)=bskap4 intersectiontimes p1;
+(tim2,tim12)=bskap5 intersectiontimes p1;
+(tim3,tim13)=oldap4 intersectiontimes p2;
+(tim4,tim14)=oldap5 intersectiontimes p2;
+(tim5,tim15)=bskap6 intersectiontimes p1;
+(tim6,tim16)=bskap3 intersectiontimes p1;
+(tim7,tim17)=oldap6 intersectiontimes p2;
+(tim8,tim18)=oldap3 intersectiontimes p2;
+filldraw subpath(rundy(bskap4,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),rundy(bskap5,tim2).zpet) of bskap5
+ ..subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(0,rundy(p2,tim13).zpet) of p2
+ hide(bskat:=oldat)
+ ..subpath(rundy(oldap4,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),rundy(oldap5,tim4).zpet) of oldap5
+ ..subpath(rundy(p2,tim14),infinity) of p2
+ ..subpath(0,rundy(p1,tim11).zpet) of p1..cycle
+ ;
+bskat:=ooldat;
+infill subpath(rundy(bskap6,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),rundy(bskap3,tim6).zpet) of bskap3
+ ..subpath(rundy(p1,tim16),rundy(p1,tim15).zpet) of p1..cycle;
+infill subpath(rundy(oldap6,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),rundy(oldap3,tim8).zpet) of oldap3
+ ..subpath(rundy(p2,tim18),rundy(p2,tim17).zpet) of p2..cycle;
+penlabels(2,3,4,5,102,103); labels(1rr,4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_left_right_not_out:
+bskchar "Double left-right arrow with (outer) negation";
+beginchar(chars.arrow_double_left_right_not_out,18u#,v_center(7u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+.5[x4,x5]=.5[x0,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=z4l---z5ll..{z4-z5}z5r;
+p2:=z5r---z4rr..{z5-z4}z4l;
+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,tim11)=bskap4 intersectiontimes p1;
+(tim2,tim12)=bskap5 intersectiontimes p1;
+(tim3,tim13)=oldap4 intersectiontimes p2;
+(tim4,tim14)=oldap5 intersectiontimes p2;
+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(rundy(bskap4,(tim1,2oblu)),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),rundy(bskap5,tim2).zpet) of bskap5
+ ..subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(0,rundy(p2,(tim13,2oblu)).zpet) of p2
+ hide(bskat:=oldat)
+ ..subpath(rundy(oldap4,(tim3,2oblu)),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),rundy(oldap5,tim4).zpet) of oldap5
+ ..subpath(rundy(p2,tim14),infinity) of p2
+ ..subpath(0,rundy(p1,(tim11,2oblu)).zpet) of p1..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,4,5,102,103); labels(1rr,4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_up_white_bar:
+bskchar "Upward white arrow from bar";
+beginchar(chars.arrow_double_up_white_bar,9u#,asc_height#,0); uni "0x21EA";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=math_axis; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*up;
+x4=x5=x2; x6=x7=x3; bot y4=bot y6=-d; top y5=top y7=bot y2l-2rule_thickness;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0p.r,y0a)..cycle;
+filldraw obl(4l,6r,5l)---obl(5l,4l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)---cycle;
+infill obl(4r,6l,5r)---obl(5r,4r,7l)---obl(7l,5r,6l)---obl(6l,7l,4r)---cycle;
+penlabels(4,5,6,7); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_pedestal:
+bskchar "Upward white arrow on pedestal";
+beginchar(chars.arrow_double_up_white_pedestal,9u#,asc_height#,0); uni "0x21EB";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=3/4[h,-d]; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+filldraw subpath(5,13) of p---obl(3l,0p.l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)
+ ---obl(4l,6r,5l)---obl(5l,4l,2r)---obl(2r,5l,0q.r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(2',0q.l,5r)---obl(5r,2',4r)
+ ---obl(4r,5r,6l)---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---(x0p.r,y0a)..cycle;
+penlabels(4,5,6,7); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_pedestal_hbar:
+bskchar "Upward white arrow on pedestal with horizontal bar";
+beginchar(chars.arrow_double_up_white_pedestal_hbar,9u#,asc_height#,0); uni "0x21EC";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=3/4[h,-d]; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+x8=x2l; x9=x3r; y8=y9=y0a-rule_thickness;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+filldraw subpath(5,13) of p---obl(3l,0p.l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)
+ ---obl(4l,6r,5l)---obl(5l,4l,2r)---obl(2r,5l,0q.r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(8r,0q.l,9r)---obl(9r,8r,0p.r)---(x0p.r,y0a)..cycle;
+infill obl(9l,3',8l)---obl(8l,9l,2')---obl(2',0q.l,5r)---obl(5r,2',4r)---obl(4r,5r,6l)
+ ---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---cycle;
+penlabels(4,5,6,7,8,9); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_pedestal_vbar:
+bskchar "Upward white arrow on pedestal with vertical bar";
+beginchar(chars.arrow_double_up_white_pedestal_vbar,9u#,asc_height#,0); uni "0x21ED";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]=x8=x9; x3-x2=dbf;
+top y0=h+apex_o; bot y1=3/4[h,-d]; y2=y3=y1;
+p0:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+y8=y4r; y9=y0;
+p1=whitehead(0,1,2,3);
+p2=z8l+2oblu*up--z9l;
+p3=z9r--z8r+2oblu*up;
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p1 intersectiontimes p3;
+filldraw subpath(5,13) of p0---obl(3l,0p.l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)
+ ---obl(4l,6r,5l)---obl(5l,4l,2r)---obl(2r,5l,0q.r)---cycle;
+infill subpath(rundy(p1,(tim1,2oblu)),infinity) of p1..(x0q.l,y0a)---obl(2',0q.l,5r)
+ ---obl(5r,2',4r)---obl(4r,5r,6l)---obl(8l,4r,9l)
+ ---subpath(0,rundy(p2,(tim2,2oblu)).zpet) of p2..cycle;
+infill subpath(0,rundy(p1,(tim3,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim4,2oblu)),infinity) of p3
+ ---obl(8r,9r,6l)---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---(x0p.r,y0a)..cycle;
+penlabels(4,5,6,7,8,9); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_doublehead:
+bskchar "Upward doublehead white arrow";
+beginchar(chars.arrow_double_up_white_doublehead,9u#,asc_height#,0); uni "0x21EE";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180);
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o-4rule_thickness; bot y1=-d; y2=y3=y1;
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*up;
+p0:=dvojsipka(0,1,2,3);
+p1:=subpath(4,14) of p0 shifted (0,4rule_thickness);
+p2:=whitehead(0,1,2,3);
+(tim0-6,tim1)=subpath(6,infinity) of p0 intersectiontimes subpath(0,5) of p1;
+(tim2-9,tim3-6)=subpath(9,infinity) of p0 intersectiontimes subpath(6,infinity) of p1;
+tim4-6=xpart(subpath(6,infinity) of p0 intersectiontimes (z2'--(x2',h)));
+tim5-9=xpart(subpath(9,infinity) of p0 intersectiontimes (z3'--(x3',h)));
+filldraw obl(2r,3l,0q.r)---subpath(5,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),13) of p0---obl(3l,0p.l,2r)---cycle;
+infill p2..(x0q.l,y0a)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0p.r,y0a)..cycle;
+infill ((x0p.r,y0a)..p2..(x0q.l,y0a)) shifted (0,4rule_thickness)
+ ..subpath(rundy(p0,(tim4,2oblu)),rundy(p0,(tim5,2oblu)).zpet) of p0..cycle;
+labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_doublehead_pedestal:
+bskchar "Upward doublehead white arrow on pedestal";
+beginchar(chars.arrow_double_up_white_doublehead_pedestal,9u#,asc_height#,0); uni "0x21EF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o-4rule_thickness; bot y1=3/4[h,-d]; y2=y3=y1;
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+p0:=dvojsipka(0,1,2,3);
+p1:=z2l--(subpath(4,14) of p0 shifted (0,4rule_thickness))--z3l;
+p2:=whitehead(0,1,2,3);
+(tim0-6,tim1)=subpath(6,infinity) of p0 intersectiontimes subpath(0,6) of p1;
+(tim2-9,tim3-7)=subpath(9,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+tim4-6=xpart(subpath(6,infinity) of p0 intersectiontimes (z2'--(x2',h)));
+tim5-9=xpart(subpath(9,infinity) of p0 intersectiontimes (z3'--(x3',h)));
+filldraw obl(3l,0p.l,7r)---obl(7r,3l,6r)---obl(6r,7r,4l)---obl(4l,6r,5l)
+ ---obl(5l,4l,2r)---obl(2r,5l,0q.r)
+ ---subpath(5,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),13) of p0---cycle;
+infill p2..(x0q.l,y0a)---obl(2',0q.l,5r)---obl(5r,2',4r)
+ ---obl(4r,5r,6l)---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---(x0p.r,y0a)..cycle;
+infill ((x0p.r,y0a)..p2..(x0q.l,y0a)) shifted (0,4rule_thickness)
+ ..subpath(rundy(p0,(tim4,2oblu)),rundy(p0,(tim5,2oblu)).zpet) of p0..cycle;
+labels(1rr,2',3'); penlabels(4,5,6,7);
+endchar;
+
+iff known chars.arrow_double_down_white:
+bskchar "Downward white arrow";
+beginchar(chars.arrow_double_down_white,9u#,asc_height#,0); uni "0x21E9";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o=.5[x2,x3]; x3-x2=dbf;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+p:=dvojsipka(0,1,3,2);
+z2'-z2r=z3'-z3l=(rule_thickness-currentbreadth)*down;
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+infill whitehead(0,1,3,2)..(x0q.l,y0a)---obl(3',0q.l,2')---obl(2',3',0p.r)---(x0p.r,y0a)..cycle;
+labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_down_black:
+bskchar " Downward black arrow";
+beginchar(chars.arrow_down_black,9u#,asc_height#,0); uni "0x2B07";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o=.5[x2,x3]; x3-x2=dbf;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+p:=dvojsipka(0,1,3,2);
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_double_up_down_white:
+bskchar "Double white up-down arrow";
+beginchar(chars.arrow_double_up_down_white,9u#,asc_height#,0); uni "0x21F3";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,0); pos101(rule_thickness,180);
+x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=dbf;
+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;
+p0=whitehead(0,1,3,2);
+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;
+p1=whitehead(100,101,102,103);
+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)));
+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;
+infill p0..(x0q.l,y0a)---(x100p.r,y100a)..p1..(x100q.l,y100a)---(x0p.r,y0a)..cycle;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_up_down_black:
+bskchar "Black up-down arrow";
+beginchar(chars.arrow_up_down_black,9u#,asc_height#,0); uni "0x2B0D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,0); pos101(rule_thickness,180);
+x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=dbf;
+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;
+p0=whitehead(0,1,3,2);
+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;
+p1=whitehead(100,101,102,103);
+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)));
+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;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_double_right_white:
+bskchar "Rightward white arrow";
+beginchar(chars.arrow_double_right_white,15u#,v_center(5u#)); uni "0x21E8";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*right;
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+infill whitehead(0,1,2,3)..(x0a,y0q.l)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0a,y0p.r)..cycle;
+labels(2',3');
+endchar;
+
+iff known chars.arrow_right_black:
+bskchar "Rightward black arrow";
+beginchar(chars.arrow_right_black,15u#,v_center(5u#)); uni "0x27A1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,2,3);
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+endchar;
+
+iff known chars.arrow_double_up_white:
+bskchar "Upward white arrow";
+beginchar(chars.arrow_double_up_white,9u#,asc_height#,0); uni "0x21E7";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=-d; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*up;
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0p.r,y0a)..cycle;
+labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_up_black:
+bskchar "Upward black arrow";
+beginchar(chars.arrow_up_black,9u#,asc_height#,0); uni "0x2B06";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=-d; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+endchar;
+
+iff known chars.arrow_double_left_white:
+bskchar "Leftward white arrow";
+beginchar(chars.arrow_double_left_white,15u#,v_center(5u#)); uni "0x21E6";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,3,2);
+z2'-z2r=z3'-z3l=(rule_thickness-currentbreadth)*left;
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+infill whitehead(0,1,3,2)..(x0a,y0q.l)---obl(3',0q.l,2')---obl(2',3',0p.r)---(x0a,y0p.r)..cycle;
+labels(2',3');
+endchar;
+
+iff known chars.arrow_left_black:
+bskchar "Leftward black arrow";
+beginchar(chars.arrow_left_black,15u#,v_center(5u#)); uni "0x2B05";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,3,2);
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+endchar;
+
+iff known chars.arrow_double_right_white_round:
+bskchar "Double rightward white arrow with rounded end";
+beginchar(chars.arrow_double_right_white_round,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos4(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=w-x0+.5(y2-y3); y0=y1r=y4=math_axis=.5[y2,y3]; y2-y3=dbf; lft x4l=u;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..subpath(4,14) of p..cycle;
+infill subpath(0,3) of p..z4r..subpath(15,infinity) of p..cycle;
+penlabels(4);
+endchar;
+
+iff known chars.arrow_double_left_white_round:
+bskchar "Double leftward white arrow with rounded end";
+beginchar(chars.arrow_double_left_white_round,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90); pos4(rule_thickness,180);
+lft x0=u; x1=x2=x3=w-x0-.5(y2-y3); y0=y1r=y4=math_axis=.5[y2,y3]; y2-y3=dbf; rt x4l=w-u;
+p:=dvojsipka(0,1,3,2);
+filldraw z4l..subpath(4,14) of p..cycle;
+infill subpath(0,3) of p..z4r..subpath(15,infinity) of p..cycle;
+penlabels(4);
+endchar;
+
+iff known chars.arrow_double_right_white_bar:
+bskchar "Double white rightward arrow from bar";
+beginchar(chars.arrow_double_right_white_bar,15u#,v_center(7u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'l=y2l; y3'r=y3r; x2'=x3'=x4r;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..z4r---obl(2'r,4r,0q.r)---subpath(5,13) of p---obl(3'l,0p.l,5r)---z5r..z5l---cycle;
+infill whitehead(0,1,2,3)..(x0a,y0q.l)---obl(2'l,0q.l,3')---obl(3'r,2',0p.r)---(x0a,y0p.r)..cycle;
+penlabels(2',3',4,5);
+endchar;
+
+iff known chars.arrow_double_right_white_wall:
+bskchar "Double white rightward arrow from wall";
+beginchar(chars.arrow_double_right_white_wall,15u#,v_center(7u#)); uni "0x21F0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'l=y2l; y3'r=y3r; x2'=x3'=x6r; y6=y4; y7=y5; x6=x7=x4+3rule_thickness;
+y4r:=y6l:=y4r-(rule_thickness-currentbreadth); x2'l:=x6l;
+y5r:=y7l:=y5r+(rule_thickness-currentbreadth); x3'r:=x7l;
+p:=dvojsipka(0,1,2,3);
+filldraw obl(4l,5l,6r)---obl(6r,4l,2'r)---obl(2'r,6r,0q.r)
+ ---subpath(5,13) of p---obl(3'l,0p.l,7r)---obl(7r,3'l,5l)---obl(5l,7r,4l)---cycle;
+infill whitehead(0,1,2,3)..(x0a,y0q.l)---obl(2'l,0q.l,6l)---obl(6l,2'l,4r)
+ ---obl(4r,6l,5r)---obl(5r,4r,7l)---obl(7l,5r,3'r)---obl(3'r,7l,0p.r)---(x0a,y0p.r)..cycle;
+penlabels(2',3',4,5,6,7);
+endchar;
+
+iff known chars.arrow_double_right_bar:
+bskchar "Double rightward arrow from bar";
+beginchar(chars.arrow_double_right_bar,15u#,v_center(7u#)); uni "0x2907";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4r;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..z4r---obl(2'r,4r,0q.r)---subpath(5,13) of p---obl(3'l,0p.l,5r)---z5r..z5l---cycle;
+infill subpath(0,2) of p---obl(2'l,0q.l,3'r)---obl(3'r,2'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5); labels(2',3');
+endchar;
+
+iff known chars.arrow_double_right_bar_long:
+bskchar "Long double rightward arrow from bar";
+beginchar(chars.arrow_double_right_bar_long,22u#,v_center(7u#)); uni "0x27FE";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4r;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..z4r---obl(2'r,4r,0q.r)---subpath(5,13) of p---obl(3'l,0p.l,5r)---z5r..z5l---cycle;
+infill subpath(0,2) of p---obl(2'l,0q.l,3'r)---obl(3'r,2'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5); labels(2',3');
+endchar;
+
+iff known chars.arrow_double_left_bar:
+bskchar "Double leftward arrow from bar";
+beginchar(chars.arrow_double_left_bar,15u#,v_center(7u#)); uni "0x2906";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90); pos2'(rule_thickness,-90); pos3'(rule_thickness,-90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+lft x0=u; x1=x2=x3=x4r=x5r=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4l;
+p:=dvojsipka(0,1,3,2);
+filldraw z5r..z5l---obl(3'r,5l,0q.r)---subpath(5,13) of p---obl(2'l,0p.l,4l)---z4l..z4r---cycle;
+infill subpath(0,2) of p---obl(3'l,0q.l,2'r)---obl(2'r,3'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5);
+endchar;
+
+iff known chars.arrow_double_left_bar_long:
+bskchar "Long double leftward arrow from bar";
+beginchar(chars.arrow_double_left_bar_long,22u#,v_center(7u#)); uni "0x27FD";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90); pos2'(rule_thickness,-90); pos3'(rule_thickness,-90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+lft x0=u; x1=x2=x3=x4r=x5r=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4l;
+p:=dvojsipka(0,1,3,2);
+filldraw z5r..z5l---obl(3'r,5l,0q.r)---subpath(5,13) of p---obl(2'l,0p.l,4l)---z4l..z4r---cycle;
+infill subpath(0,2) of p---obl(3'l,0q.l,2'r)---obl(2'r,3'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5);
+endchar;
+
+iff known chars.arrow_triple_right:
+bskchar "Triple rightward arrow";
+beginchar(chars.arrow_triple_right,15u#,v_center(6u#)); uni "0x21DB";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{
+ numeric old_arr; old_arr:=arrsize; save arrwidth, arrsize;
+ numeric arrwidth, arrsize; arrsize=1.2arrwidth=if not boldmath: 1.2\\ else: 1.5\\fi old_arr;
+ pos1(rule_thickness,90);
+ rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3];
+ y2-y3=(if not boldmath: 5 else: 3.75 fi)*rule_thickness;
+ filldraw trojsipka(0,1,2,3)..cycle;
+}};
+endchar;
+
+iff known chars.arrow_triple_left:
+bskchar "Triple leftward arrow";
+beginchar(chars.arrow_triple_left,15u#,v_center(6u#)); uni "0x21DA";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{
+ numeric old_arr; old_arr:=arrsize; save arrwidth, arrsize;
+ numeric arrwidth, arrsize; arrsize=1.2arrwidth=if not boldmath: 1.2\\ else: 1.5\\fi old_arr;
+ pos1(rule_thickness,-90);
+ lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3];
+ y3-y2=(if not boldmath: 5 else: 3.75 fi)*rule_thickness;
+ filldraw trojsipka(0,1,2,3)..cycle;
+}};
+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:
+bskchar "Left white curly brace";
+beginchar(chars.math_curly_brace_white_left,7u#, body_height#,paren_depth#); uni "0x2983";
+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;
+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(p2,tim3),rundy(p2,(tim2,hair)).zpet) of p2
+ ..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+pos2'(hair,135); pos6'(hair,225); z2'r=z2r; z6'r=z6r;
+pos3'(hair,190); pos5'(hair,170); z3'r=z3r; z5'r=z5r;
+p3=z4l{right}..z3'l..z2'l..{z1l-z2r}z1l;
+p4=z7l{z6r-z7l}..z6'l..z5'l..{left}z4r;
+z8=bsktouch(p3,down,p4,up);
+tim4=xpart(p3 intersectiontimes (z8--(x8,h)));
+tim5=xpart(p4 intersectiontimes (z8--(x8,0)));
+(tim6,tim7)=p3 intersectiontimes p2;
+(tim8,tim9)=p4 intersectiontimes p2;
+infill subpath(rundy(p4,tim8),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..reverse subpath(rundy(p2,tim9),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2'r,3'r,5'r,6'r);
+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:
+bskchar "Right white curly brace";
+beginchar(chars.math_curly_brace_white_right,7u#, body_height#,paren_depth#); uni "0x2984";
+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;
+pos2'(hair,45); pos6'(hair,-45); z2'r=z2r; z6'r=z6r;
+pos3'(hair,-10); pos5'(hair,10); z3'r=z3r; z5'r=z5r;
+p3=z4l{left}..z3'l..z2'l..{z1l-z2r}z1l;
+p4=z7l{z6r-z7l}..z6'l..z5'l..{right}z4r;
+z8=bsktouch(p3,down,p4,up);
+tim4=xpart(p3 intersectiontimes (z8--(x8,h)));
+tim5=xpart(p4 intersectiontimes (z8--(x8,0)));
+(tim6,tim7)=p3 intersectiontimes p2;
+(tim8,tim9)=p4 intersectiontimes p2;
+infill subpath(rundy(p4,tim8),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..reverse subpath(rundy(p2,tim9),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2'r,3'r,5'r,6'r);
+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 not testdpi:tobl(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 not testdpi: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 not testdpi: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 not testdpi: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_paragraph_bullet_left:
+bskchar "Leftwards paragraph bullet";
+beginchar(chars.sign_paragraph_bullet_left,11u#,x_height#,0); uni "0x204C";
+adjust_fit(0,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,90); pos7(cap_curve,180);
+pos8(cap_hair,270);
+bot y1=bot y3=bot y8r=0; top y2=top y4=top y6r=h;
+rt x1r= rt x2r= w-2.5u; x3=x4=x2-3rule_thickness;
+lft x7r=u; y7=.5[y8,y6]; x8=x6;
+x6=.5[x7l,x4l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
+cap_serifs_tr(2r); cap_serifs_br(1r);
+filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
+ ...z6r{left}..z7r..z8r---cycle;
+infill z4r+oblu*down..z2l+oblu*down---z1l+oblu*up..z3r+oblu*up---cycle;
+penlabels(1,2,3,4,4',5,6,7,8);
+endchar;
+
+iff known chars.sign_paragraph_bullet_right:
+bskchar "Rightward paragraph bullet";
+beginchar(chars.sign_paragraph_bullet_right,11u#,x_height#,0); uni "0x204D";
+adjust_fit(0,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);
+bot y1=bot y3=bot y8l=0; top y2=top y4=top y6l=h;
+lft x1l= lft x2l=2.5u; x3=x4=x2+3rule_thickness;
+x5=x3r; 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---cycle;
+infill z4l+oblu*down..z2r+oblu*down---z1r+oblu*up..z3l+oblu*up---cycle;
+penlabels(1,2,3,4,4',5,6,7,89);
+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:
+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[], shift; oblu:=4oblu; shift:=rule_thickness-currentbreadth;
+pos1(rule_thickness,0); pos4(rule_thickness,0);
+pos7(cap_curve,0);
+x1=x4=x7=.5w=.5[x6r,x2r]=.5[x5r,x3r]; y4=h;
+lft x3r=u; y3r=y5r=bar_height; bot y2r=bot y6r=curve;
+x1-x2r=(x2r-x3r); y1=h-.25[x_height,h];
+y7=-hair;
+p1=z1l..z2r..z3r..{up}z4l;
+p2=z4r{down}..z5r..z6r..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),y5r)));
+z100=(0,ypart(point tim1 of p1));
+tim3=xpart(p3 intersectiontimes (z100--(w,y100)));
+tim4=xpart(p4 intersectiontimes (z100--(w,y100)));
+p5=subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1;
+p6=subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4;
+pos2(rule_thickness,angle(direction 1 of p1)+90); pos3(rule_thickness,angle(direction 2 of p1)+90);
+pos5(rule_thickness,angle(direction 1 of p2)+90); pos6(rule_thickness,angle(direction 2 of p2)+90);
+y4'l=y4'r=y4; x4'l-x4l=x4r-x4'r=shift;
+p7=z1l..z2l..z3l..{up}z4'l;
+p8=z4'r{down}..z5l..z6l..z1r;
+z8=bsktouch(subpath(1,infinity) of p7,right,p8,left);
+tim7=xpart(p7 intersectiontimes (z8--(0,y8)));
+tim8=xpart(p8 intersectiontimes (z8--(w,y8)));
+filldraw p5..p6..cycle;
+infill subpath(0,rundy(p7,(tim7,2f_obl)).zpet) of p7..subpath(rundy(p8,(tim8,2f_obl)),infinity) of p8..cycle;
+penlabels(1,2,3,4,5,6,7);
+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:
+bskchar "White club suit";
+beginchar(chars.sign_club_suit_white,13u#, asc_height#,0); uni "0x2667";
+adjust_fit(0,0);
+pickup tiny.nib;
+save spd; vardef spd(expr tim, pp):= shift*unitvector((direction tim of pp) rotated 90) enddef;
+path p[]; numeric tim[], shift; oblu:=2oblu; shift:=rule_thickness-currentbreadth;
+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;
+infill z2+shift*right{down}..z4+spd(1,p0)..z5+spd(2,p0)..z6+spd(3,p0)..z3+shift*left{up}..{z2-z7}.5[z3,z7]+spd(5,p0)..z7+spd(6,p0)..z7'+spd(7,p0)..{left}z1+shift*down..z8'+spd(9,p0)..z8+spd(10,p0)..{z8-z3}.5[z8,z2]+spd(11,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_hat_wide_widest:
+bskchar "Wide than widest hat accent";
+beginchar(chars.math_accent_hat_wide_widest,33u#,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_very_wide:
+bskchar "Very wide hat accent";
+beginchar(chars.math_accent_hat_very_wide,41u#,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_triangle_wide:
+bskchar "Wide triangle accent";
+beginchar(chars.math_accent_triangle_wide,9u#,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(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_wider:
+bskchar "Wider triangle accent";
+beginchar(chars.math_accent_triangle_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(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_widest:
+bskchar "Widest triangle accent";
+beginchar(chars.math_accent_triangle_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(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_wide_widest:
+bskchar "Wide than widest triangle accent";
+beginchar(chars.math_accent_triangle_wide_widest,33u#,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(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_very_wide:
+bskchar "Very wide triangle accent";
+beginchar(chars.math_accent_triangle_very_wide,41u#,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(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',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_accent_tilde_wide_widest:
+bskchar "Wide than widest tilde accent";
+beginchar(chars.math_accent_tilde_wide_widest,33u#,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_very_wide:
+bskchar "Very wide tilde accent";
+beginchar(chars.math_accent_tilde_very_wide,41u#,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+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..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+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..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+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..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+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..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+breadth*left..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+breadth*left..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+breadth*right
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..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+breadth*right---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..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+breadth*right---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..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+breadth*right---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..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+breadth*right..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+breadth*right..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; top y7r=h+o;
+2(x4l-x6)=y7-y6r=if h-x_height<2cap_curve: .45\\fi 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(1.25curve,50); pos2(1.25curve,50);
+top y1r=h+apex_o; bot y2l=0;
+lft x1l=u; rt x2r=w-u;
+theta=angle(z1-z2)-90;
+pos3(like_stem,theta); pos4(like_stem,theta);
+pos5(curve,50); pos6(curve,50); pos7(like_stem,theta);
+pos8(1.25curve,30); pos9(hair,-90); pos10(like_stem,-10); pos11(like_hair,theta-90);
+pos12(stem-o,-90); pos13(like_hair,theta-90); pos14(.85like_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.math_beth:
+bskchar "The Hebrew letter beth";
+beginchar(chars.math_beth,12u#,asc_height#,0); uni "0x2136";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos1(like_stem,90); pos2(like_stem,90); pos3(hair,0); penpos4(hair,0);
+pos5(like_stem,90); penpos6(hair,30);
+bot y1l=bot y2l=bot y3=-d; lft x1=u; rt x2=w-u;
+x1r:=x1r+curve; x2l:=x2l-.75curve; x3r=x2l-stem; x4l=x3;
+y5r=h-.5stem; x5=x1r+.5u; y4=y5l+o; y4r:=y5r+o; z5'=(x6r,y5l);
+lft x6l=1.5u; top y6r=h+o;
+p0:=z1l{dir80}..z1r...{dir10}z2r;
+p1:=z2r..z2l{left}...{dir190}z1l;
+p2:=z6r{dir-80}..z5r{right}..{right}z4r+o*left..z4r+o*down{down}..{down}z3r;
+p3:=z3l{up}..{up}z4l+oblu*down..z4l+oblu*left{left}..z5l{left}..z5'..{dir90}z6l;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 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),infinity) of p0..p1..cycle;
+penlabels(1,2,3,4,5,6); labels(5');
+endchar;
+
+iff known chars.math_gimel:
+bskchar "The Hebrew letter gimel";
+beginchar(chars.math_gimel,9u#,asc_height#,0); uni "0x2137";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos0(like_stem,160); pos1(like_stem,90); pos2(like_stem,90); pos3(.5[hair,stem],0);
+penpos4(hair,0); pos5(like_stem,90); penpos6(hair,30);
+bot y1l=bot y2l=-d; lft x1=u; rt x2=w-u; y3=.5x_height;
+x1r:=x1r+curve; x2l:=x2l-.75curve; x3l=x2l-stem; x4l=x3r;
+y5r=h-.5stem; x5=x1r+.5u; y4=y5l; y4r:=y5r-o; z5'=(x6r,y5l);
+lft x6l=1.5u; top y6r=h+o; y0r=y3; rt x0l=w-u;
+p0:=z2l..z3l{up}..{up}z4l+oblu*down..z4l+oblu*left{left}..z5l{left}..z5'..{dir90}z6l
+ ..z6r{dir-80}..z5r{right}..{right}z4r+o*left..z4r+o*down{down}..{down}z3r
+ ..{right}z2r{down}..z2l;
+p1:=z1l{dir80}..z1r..{up}z0r;
+p2:=z0l{down}..{dir190}z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..cycle;
+penlabels(0,1,2,3,4,5,6); labels(5');
+endchar;
+
+iff known chars.math_dalet:
+bskchar "The Hebrew letter dalet";
+beginchar(chars.math_dalet,10.5u#,asc_height#,0); uni "0x2138";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(like_stem,0); pos2(.5[hair,stem],0);
+penpos3(hair,0); pos4(like_stem,90); penpos5(hair,30);
+bot y1l=-d; rt x1r=w-1.5u; y2=.5x_height;
+lft x2l=x1l; x3l=x2r;
+y4r=h-.5stem; x4=u+curve; y3=y4l; y3'=y4r+o; x3'=x3r+.5u; z4'=(x5r,y4l);
+lft x5l=u; top y5r=h+o;
+filldraw z1l..z2l{up}..{up}z3l+oblu*down..z3l+oblu*left{left}..z4l{left}..z4'..{dir90}z5l
+ ..z5r{dir-80}..z4r{right}..{right}z3'+o*left..z3'+o*down{down}..z3r+o*down{down}
+ ..{down}z2r..{down}z1r..{up}cycle;
+penlabels(1,2,3,4,5); labels(3',4');
+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;
+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,if bold_face:.5\\fi curve)).zpet) of p3
+ ..subpath(rundy(p0,(tim7,curve)),infinity) of p0
+ ..z7l--(x7l+o,y4+hair){dir80}
+ ..subpath(tim2, rundy(p1,tim9).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,if bold_face:.5\\fi curve)).zpet) of p6
+ ..subpath(rundy(p1,(tim13,curve)),infinity) of p1..cycle;
+oblu:=2.5f_obl;
+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_dolar_old:
+bskchar "The old-style dollar sign";
+beginchar(chars.sign_dolar_old,11u#, asc_height#, 0); uni "non"; %"0x0024.alt";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h;
+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); pos10(hair,0); pos11(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; x10=x11; .5[x8,x10]=x3; x8-x10=2u; top y8=top y10=h+o; bot y9=bot y11=-o;
+bskpoints(8,9,.5hair,.5hair); bskpoints(10,11,.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);
+p12=(x10l,y3)--(x10l,y6); p14=p2 shifted (z10r-z10l);
+p13=(x11l,y6)--z11l; p15=p13 shifted (z10r-z10l);
+p16=(x11r,y6)--(x11r,y5); p18=p16 shifted (z10l-z10r);
+p17=(x10r,y5)--z10r; p19=p17 shifted (z10l-z10r);
+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;
+tim23=xpart(p0 intersectiontimes ((x10r,y3)--z10r));
+tim24=xpart(p0 intersectiontimes ((x10l,y3)--z10l));
+(tim25,tim26)=p0 intersectiontimes p12;
+(tim27,tim28)=p0 intersectiontimes p13;
+tim29=xpart(p1 intersectiontimes ((x11l,y3)--z11l));
+tim30=xpart(p1 intersectiontimes p15);
+(tim31,tim32)=p1 intersectiontimes p19;
+(tim33,tim34)=p1 intersectiontimes p18;
+(tim35,tim36)=p1 intersectiontimes p17;
+(tim37,tim38)=p1 intersectiontimes p16;
+(tim39,tim40)=p0 intersectiontimes p15;
+(tim41,tim42)=p0 intersectiontimes p16;
+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,tim23).zpet) of p0
+ ..{up}z10rr..z10l---(x10l,y10rr)
+ ..subpath(rundy(p0,tim24),rundy(p0,tim25).zpet) of p0
+ ..subpath(rundy(p12,(tim26,curve)), infinity) of p12
+ --subpath(0,rundy(p13,(tim28,if bold_face:.5\\fi curve)).zpet) of p13
+ ..subpath(rundy(p0,(tim27,curve)),infinity) of p0
+ ..z7l--(x7l+o,y4+hair){dir80}
+ ..subpath(tim2,rundy(p1,tim29).zpet) of p1
+ ..{down}z11ll..z11r---(x11r,y11ll)
+ ..subpath(rundy(p1,tim30),rundy(p1,tim9).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,if bold_face:.5\\fi curve)).zpet) of p6
+ ..subpath(rundy(p1,(tim13,curve)),infinity) of p1..cycle;
+oblu:=2.5f_obl;
+infill subpath(rundy(p1,tim31).zpet,rundy(p1,tim33)) of p1
+ ..subpath(rundy(p18,tim34),infinity) of p18
+ --subpath(0,rundy(p19,tim32).zpet) of p19..cycle;
+infill subpath(rundy(p7,tim18),infinity) of p7
+ --subpath(0,rundy(p8,tim16).zpet) of p8
+ .. .5[point tim15 of p1,point tim35 of p1]
+ ..(reverse subpath(0,rundy(p17,tim36).zpet) of p17)
+ ..(reverse subpath(rundy(p16,tim38),infinity) of p16)
+ .. .5[point tim37 of p1,point tim17 of p1]
+ ..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;
+infill subpath(rundy(p2,tim6),infinity) of p2
+ --subpath(0,rundy(p3,tim8).zpet) of p3
+ .. .5[point tim7 of p0,point tim39 of p0]
+ ..(reverse subpath(0,rundy(p15,tim40).zpet) of p15)
+ ..(subpath(0,rundy(p16,tim42).zpet) of p16)
+ .. .5[point tim5 of p0,point tim41 of p0]
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11); labels(8rr,9ll);
+endchar;
+
+iff known chars.sign_pound:
+bskchar "Pound sign";
+beginchar(chars.sign_pound,11.5u#,asc_height#,0); uni "0x00A3";
+italcorr asc_height#*slant-u#;
+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
+ ---tobl(7r,1l,6rr)---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 testdpi:+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;
+
+iff known chars.math_multimap:
+bskchar "Multimap symbol";
+beginchar(chars.math_multimap,16u#,v_center(.6x_height#)); uni "0x22B8";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; lft x9=u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10l---z9l..z9rr---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimapdot:
+bskchar "Multimap symbol with dot";
+beginchar(chars.math_multimapdot,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; lft x9=u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10l---z9l..z9rr---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimap_inverted:
+bskchar "Inverted multimap symbol";
+beginchar(chars.math_multimap_inverted,16u#,v_center(.6x_height#)); uni "0x27DC";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; rt x9=w-u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10r---z9rr..z9l---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimapdot_inverted:
+bskchar "Inverted multimap symbol with dot";
+beginchar(chars.math_multimapdot_inverted,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; rt x9=w-u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10r---z9rr..z9l---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimap_both:
+bskchar "Multimap-both symbol";
+beginchar(chars.math_multimap_both,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,2),length p2) of p2
+ ..subpath(0,rundy(p2,2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill p1;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_both:
+bskchar "Multimap-both symbol with dots";
+beginchar(chars.math_multimapdot_both,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,2),length p1) of p1
+ ..subpath(0,rundy(p1,2).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_left_both:
+bskchar "Multimap-both symbol with left dot";
+beginchar(chars.math_multimapdot_left_both,16u#,v_center(.6x_height#)); uni "0x22B7";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,2),length p2) of p2
+ ..subpath(0,rundy(p2,2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill p1;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_right_both:
+bskchar "Multimap-both symbol with right dot";
+beginchar(chars.math_multimapdot_right_both,16u#,v_center(.6x_height#)); uni "0x22B6";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,2),length p1) of p1
+ ..subpath(0,rundy(p1,2).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimap_both_vert:
+bskchar "Vertical multimap-both symbol";
+beginchar(chars.math_multimap_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,0),rundy(p2,length p2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+infill p1;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_both_vert:
+bskchar "Vertical multimap-both symbol with dots";
+beginchar(chars.math_multimapdot_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_top_both_vert:
+bskchar "Vertical multimap-both symbol with top dot";
+beginchar(chars.math_multimapdot_top_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_bot_both_vert:
+bskchar "Vertical multimap-both symbol with botttom dot";
+beginchar(chars.math_multimapdot_bot_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,0),rundy(p2,length p2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+infill p1;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_line_vert_circle:
+bskchar "Vertical line with circle above";
+beginchar(chars.math_multimap_both_vert,7u#,body_height#,paren_depth#); uni "0x2AEF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=z4l+rule_thickness*down; bot z9=(x10,-d);;
+bskpoints(9,10,rule_thickness,rule_thickness);
+p=draw_circle.l;
+filldraw subpath(0,rundy(p,4).zpet) of p..z10l---z9l..z9rr---z10r
+ ..subpath(rundy(p,4),length p) of p..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_circle_line_vert:
+bskchar "Vertical line with circle below";
+beginchar(chars.math_circle_line_vert,7u#,body_height#,paren_depth#); uni "0x2AF0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+top z10=(x9,h); z9=z8l+rule_thickness*up;
+bskpoints(9,10,rule_thickness,rule_thickness);
+p=draw_circle.l;
+filldraw z10ll---z9l..subpath(rundy(p,0),rundy(p,length p).zpet) of p..z9r---z10r..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(10ll);
+endchar;
+
+iff known chars.math_circle_tack_down:
+bskchar "Down tack with circle below";
+beginchar(chars.math_circle_tack_down,7u#,body_height#,paren_depth#); uni "0x2AF1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+x10=x9; y10=y11l; z9=z8l+rule_thickness*up;
+lft x11=u; rt x12=w-u; top y11r=top y12r=h;
+bskpoints(11,12,rule_thickness,rule_thickness);
+p=draw_circle.l;
+filldraw z12ll---obl(10l,12ll,9l)---z9l
+ ..subpath(rundy(p,0),rundy(p,length p).zpet) of p
+ ..z9r---obl(10r,9r,11l)---z11l..z11rr---z12r..cycle;
+infill draw_circle.r;
+penlabels(9,10,11,12); labels(11rr,12ll);
+endchar;
+
+iff known chars.math_dfourier:
+bskchar "Dfourier symbol";
+beginchar(chars.math_dfourier,13u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; x9=.5[x10,x11]; y9=y10;
+top rt z11=(w-u,h);
+pos11(rule_thickness,angle(z9-z11)-90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10r---obl(9r,10r,11r)---z11r..z11ll---obl(9l,11l,10l)---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+endchar;
+
+iff known chars.math_dfourier_inverted:
+bskchar "Inverted dfourier symbol";
+beginchar(chars.math_dfourier_inverted,13u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; x9=.5[x10,x11]; y9=y10;
+top lft z11=(u,h);
+pos11(rule_thickness,angle(z9-z11)+90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10l---obl(9l,10l,11l)---z11ll..z11r---obl(9r,11r,10r)---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+endchar;
+
+iff known chars.math_ztrans:
+bskchar "Z transformation symbol";
+beginchar(chars.math_ztrans,19u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; x9=.5[x10,x11]; y9=y10;
+top rt z11=(w-8u,h);
+pos11(rule_thickness,angle(z9-z11)-90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10r---obl(9r,10r,11r)---z11r..z11ll---obl(9l,11l,10l)---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+save x,y;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos12(rule_thickness,90); pos13(rule_thickness,90);
+z12=z6l+rule_thickness*left; y12=y13; x13=w-8u;
+bskpoints(13,12,hair,hair);
+p2=draw_circle.l;
+p3=z12l---z13l..z13rr---z12r;
+filldraw subpath(0,rundy(p2,6).zpet) of p2
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p2,6),length p2) of p2..cycle;
+penlabels(12,13); labels(13rr);
+endchar;
+
+iff known chars.math_ztrans_inv:
+bskchar "Inverted Z transformation symbol";
+beginchar(chars.math_ztrans_inv,19u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; x9=.5[x10,x11]; y9=y10;
+top lft z11=(8u,h);
+pos11(rule_thickness,angle(z9-z11)-90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10l---obl(9l,10l,11r)---z11r..z11ll---obl(9r,11l,10r)---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos12(rule_thickness,90); pos13(rule_thickness,90);
+z12=z2l+rule_thickness*right; y12=y13; x13=8u;
+bskpoints(13,12,hair,hair);
+p2=draw_circle.l;
+p3=z12r---z13rr..z13l---z12l;
+filldraw subpath(0,rundy(p2,2).zpet) of p2
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p2,2),length p2) of p2..cycle;
+penlabels(12,13); labels(13rr);
+endchar;
+
+iff known chars.math_lambda:
+bskchar "Stylized lambda symbol";
+beginchar(chars.math_lambda,13u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=1.5oblu;
+numeric thr;
+lft x1=u+.5rule_thickness; x2=w-x1; top y1=h; bot y2=0;
+x3l=x1l; y3l=y2; y4l=.5[x_height,bar_height];
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0);
+z4l=whatever[z2l,z1l];
+thr:=rule_thickness/abs(sind(angle(z3l-z4l)));
+pos3(thr,0); z4r=whatever[z2l,z1l]=z3r+whatever*(z4l-z3l);
+filldraw z1l---obl(4l,1l,3l)---z3l..z3r---obl(4r,3r,2l).more---z2l..z2r---z1r..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lambda_refl:
+bskchar "Reflected stylized lambda symbol";
+beginchar(chars.math_lambda_refl,13u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=1.5oblu;
+numeric thr;
+rt x1=w-u-.5rule_thickness; x2=w-x1; top y1=h; bot y2=0;
+x3l=x1l; y3l=y2; y4l=.5[x_height,bar_height]-.5rule_thickness;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0);
+z4l=whatever[z2r,z1r];
+thr:=rule_thickness/abs(sind(angle(z3l-z4l)));
+pos3(thr,0); z4r=whatever[z2r,z1r]=z3r+whatever*(z4l-z3l);
+filldraw z1r---obl(4r,1r,3r)---z3r..z3l---obl(4l,3l,2r).more---z2r..z2l---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_right_angle_nw:
+bskchar "Northwest right angle symbol";
+beginchar(chars.math_right_angle_nw,10u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+lft x1l=lft x2l=u; rt x3=w-u;
+top y2=top y3l=h; y2-y1=x3-x2l; y2r:=y2-rule_thickness+currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_nw_dot:
+bskchar "Northwest right angle symbol with dot";
+beginchar(chars.math_right_angle_nw_dot,10u#,asc_height#,0); uni "0x27D4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+lft x1l=lft x2l=u; rt x3=w-u; z4=.5[z1,z3];
+top y2=top y3l=h; y2-y1=x3-x2l; y2r:=y2-rule_thickness+currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+dot(4);
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_ne:
+bskchar "Northeast right angle symbol";
+beginchar(chars.math_right_angle_ne,10u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+rt x1r=rt x2r=w-u; lft x3=u;
+top y2=top y3r=h; y2-y1=x2r-x3; y2l:=y2-rule_thickness+currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_sw:
+bskchar "Southwest right angle symbol";
+beginchar(chars.math_right_angle_sw,10u#,8u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+lft x1l=lft x2l=u; rt x3=w-u;
+bot y2=bot y3l=0; y1-y2=x3-x2l; y2r:=y2+rule_thickness-currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_se:
+bskchar "Southeast right angle symbol";
+beginchar(chars.math_right_angle_se,10u#,8u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+rt x1r=rt x2r=w-u; lft x3=u;
+bot y2=bot y3r=0; y1-y2=x2r-x3; y2l:=y2+rule_thickness-currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_se_dot:
+bskchar "Southeast right angle symbol with dot";
+beginchar(chars.math_right_angle_se_dot,10u#,8u#,0); uni "0x27D3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+rt x1r=rt x2r=w-u; lft x3=u; z4=.5[z1,z3];
+bot y2=bot y3r=0; y1-y2=x2r-x3; y2l:=y2+rule_thickness-currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+dot(4);
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_axis_line_short:
+bskchar "Short axis line";
+beginchar(chars.math_axis_line_short,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(rule_thickness,90); pos1(rule_thickness,90);
+y0=y1=math_axis; lft x0=1.5u; x1=w-x0;
+filldraw bskrule(0,1,rule_thickness,rule_thickness);
+penlabels(0,1);
+endchar;
+
+iff known chars.math_angle:
+bskchar "Simple angle sign";
+beginchar(chars.math_angle,12u#,.8asc_height#,0); uni "0x2220";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric thr;
+rt x1=w-u-.5rule_thickness; x2=w-x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x4=w-u; z3r=whatever[z2r,z1r];
+bskpoints(4,3,rule_thickness,rule_thickness);
+filldraw z1r---obl(3r,1r,4r).more---z4rr..z4l---obl(2l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(4rr);
+endchar;
+
+iff known chars.math_angle_arc:
+bskchar "Simple angle sign with arc";
+beginchar(chars.math_angle_arc,12u#,.8asc_height#,0); uni "0x2221";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric thr; path p[];
+rt x1=w-u-.5rule_thickness; x2=w-x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=.5[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+bskpoints(4,3,rule_thickness,rule_thickness);
+p0=z6r{dir(angle(z1-z2)-90)}..{down}z5r;
+p1=z6l{dir(angle(z1-z2)-90)}..{down}z5l;
+p2=z1r--z6r;
+p3=z5r--z4rr;
+p4=z3r--z6l;
+p5=z5l--z3r;
+filldraw subpath(0,rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p3,0),1) of p3{right}
+ ..z4l---obl(2l,4l,1l)---z1l..cycle;
+infill subpath(rundy(p5,0),rundy(p5,(1,2oblu)).zpet) of p5
+ ..subpath(rundy(p4,(0,2oblu)),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p1,0),rundy(p1,1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right:
+bskchar "Simple right-angle sign";
+beginchar(chars.math_angle_right,12u#,.8asc_height#,0); uni "0x221F";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric thr;
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x4=w-u; z3r=whatever[z2r,z1r];
+bskpoints(4,3,rule_thickness,rule_thickness);
+filldraw z1r---obl(3r,1r,4r).more---z4rr..z4l---obl(2l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right_arc:
+bskchar "Simple right-angle sign with arc";
+beginchar(chars.math_angle_right_arc,12u#,.8asc_height#,0); uni "0x22BE";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=.5[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+bskpoints(4,3,rule_thickness,rule_thickness);
+p0=z6r{dir(angle(z1-z2)-90)}..{down}z5r;
+p1=z6l{dir(angle(z1-z2)-90)}..{down}z5l;
+p2=z1r--z6r;
+p3=z5r--z4rr;
+p4=z3r--z6l;
+p5=z5l--z3r;
+filldraw subpath(0,rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p3,0),1) of p3{right}
+ ..z4l---obl(2l,4l,1l)---z1l..cycle;
+infill subpath(rundy(p5,0),rundy(p5,(1,2oblu)).zpet) of p5
+ ..subpath(rundy(p4,(0,2oblu)),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p1,0),rundy(p1,1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right_arc_dot:
+bskchar "Simple right-angle sign with arc and dot inside";
+beginchar(chars.math_angle_right_arc_dot,12u#,.8asc_height#,0); uni "0x299D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=2/3[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+bskpoints(4,3,rule_thickness,rule_thickness);
+p0=z6r{dir(angle(z1-z2)-90)}..{down}z5r;
+p1=z6l{dir(angle(z1-z2)-90)}..{down}z5l;
+p2=z1r--z6r;
+p3=z5r--z4rr;
+p4=z3r--z6l;
+p5=z5l--z3r;
+z7=.5[z3r+oblu*dir45, (z3r--z3r+w*dir45) intersectionpoint p1];
+filldraw subpath(0,rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p3,0),1) of p3{right}
+ ..z4l---obl(2l,4l,1l)---z1l..cycle;
+infill subpath(rundy(p5,0),rundy(p5,(1,2oblu)).zpet) of p5
+ ..subpath(rundy(p4,(0,2oblu)),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p1,0),rundy(p1,1).zpet) of p1..cycle;
+dot(7);
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right_square:
+bskchar "Simple right-angle sign with square";
+beginchar(chars.math_angle_right_square,12u#,.8asc_height#,0); uni "0x299C";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=.5[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+z7r=(x5r,y6r); z7l=(x5l,y6l);
+bskpoints(4,3,rule_thickness,rule_thickness);
+filldraw z1r---obl(6r,1r,7r)---obl(7r,6r,5r)---obl(5r,7r,4r)---z4rr..z4l
+ ---obl(2l,4l,1l)---z1l..cycle;
+infill obl(6l,3r,7l)---obl(7l,6l,5l)---obl(5l,7l,3r)---obl(3r,5l,6l)---cycle;
+penlabels(1,2,3,4,5,6,7); labels(4rr);
+endchar;
+
+iff known chars.math_angle_3D:
+bskchar "Threedimensional angle sign";
+beginchar(chars.math_angle_3D,12u#,.8asc_height#,0); uni "0x27C0";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric thr;
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x4=w-u; z3r=whatever[z2r,z1r];
+x5=x4-.5rule_thickness; y5=y1-.5rule_thickness; y6r=y4r; x6l=x1r;
+pos5(rule_thickness,angle(z5-z2)-90);
+z6r=z5r+whatever*(z2-z5); z6l=z5l+whatever*(z2-z5); z6=.5[z6l,z6r];
+bskpoints(4,3,rule_thickness,rule_thickness); bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1r---obl(6l,1r,5l).more--z5l..z5rr---obl(6r,5r,4r).more---z4rr..z4l---obl(2l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_propto_circ:
+bskchar "Proportionality sign made from circles";
+beginchar(chars.math_propto_circ,1.5x_height#+2u#,x_height#,0);
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric shift, tim[]; path p[];
+lft x6=u+.5rule_thickness; y2=y0=.5h; x0=x8; y8-y4=x2-x6; top y8=h;
+circle_points(rule_thickness);
+forsuffixes $=8,7,6,5,4: z$ll-z$l=z$rr-z$r=shift*right; endfor;
+z6ll=z2r;
+p0=z2l{up}..z1l..{left}z8l..z7l..{down}z6l..z5l..{right}z4l..z3l..{up}z2l;
+p1=z8ll{left}..z7ll..{down}z2r;
+p2=z2r{down}..z5ll..{right}z4ll;
+z9=bsktouch(p0,right,p1,left); z10=bsktouch(p0,right,p2,left);
+tim0=xpart(p0 intersectiontimes (z9--(x8,y9)));
+tim1=xpart(p1 intersectiontimes (z9--(x8ll,y9)));
+tim2=xpart(p0 intersectiontimes (z10--(x8,y10)));
+tim3=xpart(p2 intersectiontimes (z10--(x8ll,y10)));
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..z4rr{left}..z2l{up}..{right}z8rr..cycle;
+infill draw_circle.r;
+labels(8ll,8rr,7ll,7rr,6ll,6rr,5ll,5rr,4ll,4rr);
+endchar;
+
+iff known chars.math_sim_inv:
+bskchar "Inverted similarity sign";
+beginchar(chars.math_sim_inv, 14u#, v_center(.5x_height#)); uni "0x223D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+vlnka_inv(0,1);
+endchar;
+
+iff known chars.math_sim_inv_eq:
+bskchar "Inverted similar or equal sign";
+beginchar(chars.math_sim_inv_eq, 14u#, v_center(.5x_height#+3u#)); uni "0x22CD";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=(h+d)-3u;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+top y0=h; lft x2=u; rt x3=w-u; y2l=y3l=-d;
+vlnka_inv(0,1);
+filldraw bskrule(2,3,hair,hair);
+endchar;
+
+iff known chars.math_sim_inv_eq_double:
+bskchar "Inverted similar or double equal sign (All equal to)";
+beginchar(chars.math_sim_inv_eq_double, 14u#, v_center(.95x_height#+2u#)); uni "0x224C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y0=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka_inv(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_division_times:
+bskchar "Division times sign";
+beginarithchar(chars.math_division_times); uni "0x22C7";
+pickup tiny.nib;
+oblu:=1.5oblu; oblu.more:=2f_obl;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+y5=y6=.5[y13,y14]=math_axis; lft x5=u; rt x6=w-u;
+x13=x14=.5w; top y13+.25dot_size=y3r;
+bskpoints(5,6,hair,hair);
+z7=whatever[z4l,z3l]=whatever[z1l,z2l];
+z8=whatever[z1r,z2r]=whatever[z5l,z6l];
+z9=whatever[z3l,z4l]=whatever[z5r,z6r];
+z10=whatever[z3r,z4r]=whatever[z1r,z2r];
+z11=whatever[z2l,z1l]=whatever[z5r,z6r];
+z12=whatever[z4r,z3r]=whatever[z5l,z6l];
+filldraw z4l---obl(7,4l,1l)---z1l..z1r---obl(8,1r,5l).more---z5l
+ ..z5rr---obl(9,5r,3l).more---z3l..z3r---obl(10,3r,2r)---z2r
+ ..z2l---obl(11,2l,6r).more---z6r..z6ll---obl(12,6l,4r).more---z4r..cycle;
+dot(13); dot(14);
+penlabels(1,2,3,4,5,6); labels(5rr,6ll,7,8,9,10,11,12);
+endchar;
+
+iff known chars.math_sunrise:
+bskchar "Sunrise symbol";
+beginchar(chars.math_sunrise,13u#,.425x_height#+.5rule_thickness#+math_axis#,.225x_height#+.5rule_thickness#-math_axis#); uni "0x224F";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos1'(rule_thickness,180); pos2'(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2; x5=.5[x1,x2]=.5[x1',x2'];
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=.45x_height;
+top y5r=h+o; y1'=y2'=y1r; x2'-x1'=2(y5-y2'); y2'l:=y1'l:=y2l;
+bskpoints(1,2,hair,0);
+p0=z1r--z1'r;
+p1=z1'r{up}..z5r..{down}z2'r;
+p2=z2'r--z2r;
+p3=z2ll--z2'l;
+p4=z2'l{up}..z5l..{down}z1'l;
+p5=z1'l--z1l;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,2).zpet) of p1
+ ..subpath(rundy(p2,0),infinity) of p2{right}
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,2).zpet) of p4
+ ..subpath(rundy(p5,0),infinity) of p5..cycle;
+filldraw bskrule(4,3,hair,0);
+penlabels(1,1',2,2',3,4,5);
+endchar;
+
+iff known chars.math_equals_bumpy:
+bskchar "Equals sign with bumpy";
+beginchar(chars.math_equals_bumpy,13u#,.65x_height#+.5rule_thickness#+math_axis#,.5x_height#+.5rule_thickness#-math_axis#); uni "0x2AAE";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos5(rule_thickness,90); pos1'(rule_thickness,180); pos2'(rule_thickness,0);
+lft x1=lft x6=u; x2+x1=w; x3=x1; x4=x7=x2; x5=.5[x1,x2]=.5[x1',x2'];
+y1=y2; y3=y4; y6=y7; .5[y1,y6]=y3=math_axis; y1-y3=.45x_height;
+top y5r=h+o; y1'=y2'=y1r; x2'-x1'=2(y5-y2'); y2'l:=y1'l:=y2l;
+bskpoints(1,2,hair,0);
+p0=z1r--z1'r;
+p1=z1'r{up}..z5r..{down}z2'r;
+p2=z2'r--z2r;
+p3=z2ll--z2'l;
+p4=z2'l{up}..z5l..{down}z1'l;
+p5=z1'l--z1l;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,2).zpet) of p1
+ ..subpath(rundy(p2,0),infinity) of p2{right}
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,2).zpet) of p4
+ ..subpath(rundy(p5,0),infinity) of p5..cycle;
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(7,6,hair,0);
+penlabels(1,1',2,2',3,4,5,6,7);
+endchar;
+
+iff known chars.math_over_water:
+bskchar "Over water symbol";
+beginchar(chars.math_over_water,13u#,.225x_height#+.5rule_thickness#+math_axis#,.425x_height#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,270); pos3'(rule_thickness,180); pos4'(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2; x5=.5[x1,x2]=.5[x3',x4'];
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=.45x_height;
+bot y5r=-d-o; y3'=y4'=y3l; x4'-x3'=2(y3'-y5);
+y4'l:=y3'l:=y4r;
+bskpoints(4,3,hair,0);
+p1=z3ll--z3'r;
+p2=z3'r{down}..z5r..{up}z4'r;
+p3=z4'r--z4l;
+p4=z4r--z4'l;
+p5=z4'l{down}..z5l..{up}z3'l;
+p6=z3'l--z3r;
+filldraw bskrule(1,2,hair,0);
+filldraw subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p2,0),rundy(p2,2).zpet) of p2
+ ..subpath(rundy(p3,0),infinity) of p3{right}
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p5,0),rundy(p5,2).zpet) of p5
+ ..subpath(rundy(p6,0),infinity) of p6..cycle;
+penlabels(1,2,3,3',4,4',5,6);
+endchar;
+
+iff known chars.math_sunrise_water:
+bskchar "Sunrise over water symbol";
+beginchar(chars.math_sunrise_water,13u#,v_center(.85x_height#+rule_thickness#)); uni "0x224E";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos1'(rule_thickness,180); pos2'(rule_thickness,0);
+pos6(rule_thickness,270); pos3'(rule_thickness,180); pos4'(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2; x5=x6=.5[x1,x2]=.5[x1',x2']=.5[x3',x4'];
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=.45x_height;
+top y5r=h+o; bot y6r=-d-o; y1'=y2'=y1r; y3'=y4'=y3l; x2'-x1'=x4'-x3'=2(y5-y2');
+y2'l:=y1'l:=y2l; y4'l:=y3'l:=y4r;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+p0=z1r--z1'r;
+p1=z1'r{up}..z5r..{down}z2'r;
+p2=z2'r--z2r;
+p3=z2ll--z2'l;
+p4=z2'l{up}..z5l..{down}z1'l;
+p5=z1'l--z1l;
+p6=z3ll--z3'r;
+p7=z3'r{down}..z6r..{up}z4'r;
+p8=z4'r--z4l;
+p9=z4r--z4'l;
+p10=z4'l{down}..z6l..{up}z3'l;
+p11=z3'l--z3r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,2).zpet) of p1
+ ..subpath(rundy(p2,0),infinity) of p2{right}
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,2).zpet) of p4
+ ..subpath(rundy(p5,0),infinity) of p5..cycle;
+filldraw subpath(0,rundy(p6,1).zpet) of p6
+ ..subpath(rundy(p7,0),rundy(p7,2).zpet) of p7
+ ..subpath(rundy(p8,0),infinity) of p8{right}
+ ..subpath(0,rundy(p9,1).zpet) of p9
+ ..subpath(rundy(p10,0),rundy(p10,2).zpet) of p10
+ ..subpath(rundy(p11,0),infinity) of p11..cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6);
+endchar;
+
+iff known chars.math_pitchfork:
+bskchar "Pitchfork symbol";
+beginchar(chars.math_pitchfork,11u#,asc_height#,0); uni "0x22D4";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bot y1=bot y5=bot y6=-d; top y3l=.7h; top y7=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,0,hair);
+p0=z1l---z2l...{right}z3l;
+p1=z3l{right}...z4l---z5l;
+p2=z5rr---z4r...{left}z3r;
+p3=z3r{left}...z2r---z1rr;
+p4=z6l--z7ll;
+p5=z7r--z6r;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p5;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p5,(tim5,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim6,2oblu)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr,7ll);
+endchar;
+
+iff known chars.math_pitchfork_top:
+bskchar "Pitchfork symbol with top";
+beginchar(chars.math_pitchfork_top,11u#,asc_height#,0); uni "0x2ADA";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+bot y1=bot y5=bot y6=-d; top y3l=.7h; top y8r=top y9r=h; y7=y8l;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3-(x3-x2); .5[x8,x9]=x7; x9-x8=1.5(y7-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(8,9,hair,hair);
+p0=z1l---z2l...{right}z3l;
+p1=z3l{right}...z4l---z5l;
+p2=z5rr---z4r...{left}z3r;
+p3=z3r{left}...z2r---z1rr;
+p4=z6l---obl(7l,6l,8l)---z8l..z8rr---z9r;
+p5=z9ll---obl(7r,9l,6r)---z6r;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p5;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p5,(tim5,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim6,2oblu)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,7ll,8rr,9ll);
+endchar;
+
+iff known chars.math_intersection_trans:
+bskchar "Transversal intersection symbol";
+beginchar(chars.math_intersection_trans,11u#,asc_height#,.5desc_depth#); uni "0x2ADB";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bot y1=bot y5=0; bot y6=-d; top y3l=.7h; top y7=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,0,hair);
+p0=z1l---z2l...{right}z3l;
+p1=z3l{right}...z4l---z5l;
+p2=z5rr---z4r...{left}z3r;
+p3=z3r{left}...z2r---z1rr;
+p4=z6l--z7ll;
+p5=z7r--z6r;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p5;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p5,(tim5,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim6,2oblu)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr,7ll);
+endchar;
+
+iff known chars.math_iron_cross:
+bskchar "Iron cross";
+beginchar(chars.math_iron_cross,asc_height#+2u#,asc_height#,0); uni "0x2720";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric crw, tim[]; crw:=x_height; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos1'(crw,0); pos2'(crw,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos3'(crw,90); pos4'(crw,90);
+x1=x2=x1'=x2'=.5w; x3=x1l; x4=x1r; top y1'=h; bot y2'=-d;
+y3=y4=y3'=y4'=.5[h,-d]; y1=y3r; y2=y3l; lft x3'=u; rt x4'=w-u;
+p1=z1'l..z1l---z2l..z2'l;
+p2=z2'r..z2r---z1r..z1'r;
+p3=z3'l..z3l---z4l..z4'l;
+p4=z4'r..z4r---z3r..z3'r;
+(tim0,tim1)=p1 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p3;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7)=p2 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4{down}
+ ..rt z3'..{down}subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p1,tim2),infinity) of p1{right}
+ ..top z2'..{right}subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),infinity) of p3{up}
+ ..lft z4'..{up}subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p2,tim6),infinity) of p2{left}
+ ..bot z1'..{left}cycle;
+penlabels(1,1',2,2',3,3',4,4');
+endchar;
+
+iff known chars.math_bourbaki_C:
+bskchar "Bourbaki C symbol";
+beginchar(chars.math_bourbaki_C,9.5u#, body_height#,0); uni "0x2201";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(bourstem,180); pos2(bourstem,180); pos3(bourstem,270);
+pos4(bourstem,0); pos5(bourstem,0); pos6(bourstem,90);
+pos7(bourstem,180); pos8(bourstem,180);
+rt x1l= rt x2l=rt x7l=rt x8l=w-u; lft x4l=lft x5l=u;
+x3=x6=.5w; top y3l=h+o; bot y6l=-d-o;
+y2-y1=y8-y7=bourstem; y4=y2; y5=y7; y3-y2=y7-y6=x2-x3-currentbreadth;
+y2l:=y4l:=y2l+.35bourstem; y5l:=y7l:=y5l-.35bourstem;
+if y1-y8<bourstem: numeric posuv; posuv:=.5(bourstem-(y1-y8));
+ y1:=y1+posuv; y1l:=y1r:=y1; y8:=y8-posuv; y8r:=y8l:=y8;
+fi
+bskpoints(1,2,0,rule_thickness); bskpoints(8,7,0,rule_thickness);
+filldraw z1rr---z2r..z3r..z4r---z5r..z6r..z7r---z8rr..z8l
+ ---z7l..z6l..z5l---z4l..z3l..z2l---z1l..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,8rr);
+endchar;
+
+iff known chars.math_bourbaki_T:
+bskchar "Bourbaki T symbol";
+beginchar(chars.math_bourbaki_T,11u#, x_height#,.75desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+pos1(bourstem,0); pos2(bourstem,0);
+pos3(bourstem,90); pos4(bourstem,90);
+x1=x2=.5w; top y3r=top y4r=h; bot y1=-d; y2=y3l;
+lft x3=u; rt x4=w-u;
+bskpoints(3,4,rule_thickness,rule_thickness);
+filldraw z1r---obl(2r,1r,4l)---z4ll..z4r---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(3rr,4ll);
+endchar;
+
+iff known chars.math_vert_slurs:
+bskchar "Vertical crossings slurs";
+beginchar(chars.math_vert_slurs,7u#,asc_height#,desc_depth#); uni "0x226C";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(.75rule_thickness,0); pos2(rule_thickness,0); pos3(.75rule_thickness,0);
+pos4(.75rule_thickness,0); pos5(rule_thickness,0); pos6(.75rule_thickness,0);
+top y1=top y4=h+apex_o; bot y3=bot y6=-d-apex_o; y2=y5=.5[h,-d];
+lft x2l=u; rt x5r=w-u; rt x1l=rt x3l=w-2u; lft x4l=lft x6l=2u;
+p1=z1l..{down}z2l..z3l;
+p2=z6r..z5r{up}..z4r;
+p3=z4l..{down}z5l..z6l;
+p4=z3r..{up}z2r..z1r;
+z7=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z7--(w,y7)));
+tim2=xpart(p2 intersectiontimes (z7--(0,y7)));
+(tim3,tim4)=p3 intersectiontimes p1;
+(tim5-1,tim6)=subpath(1,infinity) of p1 intersectiontimes p3;
+z8=bsktouch(subpath(1,infinity) of p1,left,p2,right);
+tim7=xpart(p1 intersectiontimes (z8--(w,y8)));
+tim8=xpart(p2 intersectiontimes (z8--(0,y8)));
+(tim9,tim10)=p4 intersectiontimes p2;
+(tim11,tim12-1)=p4 intersectiontimes subpath(1,infinity) of p2;
+(tim13,tim14)=p4 intersectiontimes p3;
+(tim15-1,tim16)=subpath(1,infinity) of p4 intersectiontimes p3;
+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(p1,tim4),rundy(p1,tim5).zpet) of p1
+ ..subpath(rundy(p3,tim6),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p1,tim7),infinity) of p1
+ ..subpath(0,rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p2,tim10),rundy(p2,tim12).zpet) of p2
+ ..subpath(rundy(p4,tim11),infinity) of p4..cycle;
+oblu:=2oblu;
+infill subpath(rundy(p4,tim13),rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim16),rundy(p3,tim14).zpet) of p3..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_ring_equals:
+bskchar "Ring in equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_ring_equals,13u#,v_center(spread#+rule_thickness#)); uni "0x2256";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,180);
+pos7(rule_thickness,270); pos8(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis=y6=y8; top y1r=h; y5=y1; y7=y3;
+x5=x7=.5w=.5[x6,x8]; y5-y7=x8-x6;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+p0=z5r{left}..{down}z6r..{right}z7r;
+p1=z7r{right}..{up}z8r..{left}z5r;
+p2=z1l--z2ll;
+p3=z4r--z3r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p3,tim3),infinity) of p3{left}
+ ..z3ll---z4l
+ ..subpath(0,rundy(p3,tim5).zpet) of p3
+ ..subpath(rundy(p1,tim4),rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p2,tim7),infinity) of p2
+ ..z2r---z1r..cycle;
+infill z5l{left}..z6l{down}..z7l{right}..{up}z8l..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2ll,3ll);
+endchar;
+
+iff known chars.sign_check:
+bskchar "Check mark";
+beginchar(chars.sign_check,12u#,asc_height#,0); uni "0x2713";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos1(bourstem,30); pos2(bourstem,30); pos3(rule_thickness,135);
+top y1r=bar_height; lft x1l=u; bot y2l=-apex_o;
+z2-z1=whatever*dir-50;
+rt x3l=w-u; top y3r=h;
+z0=whatever[z1,z2]=whatever[z1r,z2l];
+p0=z2r..controls (z0+(bourstem-currentbreadth)*dir30)..z1r;
+p1=z3r..{down}z2l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw z1l..controls z0..z2l..z2+o*dir-60..z2r{up}..z3l&z3l..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+penlabels(1,2,3,4); labels(0);
+endchar;
+
+iff known chars.math_stylized_F:
+bskchar "The stylized letter F (msbm)";
+beginchar(chars.math_stylized_F,10u#,5.5u#+math_axis#,5.5u#-math_axis#); uni "non";
+italcorr (5u#+math_axis#)*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(rule_thickness,-90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h+o; y3l=y2l; rt x3=w-u;
+lft x1l=u; x2=x1; y2r:=y3r;
+y6=.52[y1,y2]; y5l=y6l; y5r=y6r; x6=x2r+3/8(x3-x2r);
+z5l=whatever[z1r,z2r]; z5r=whatever[z1r,z2r];
+bskpoints(3,2,0,rule_thickness);
+filldraw z1l---obl(2l,1l,3l)---z3l..z3rr---obl(2r,3r,5r)
+ ---obl(5r,2r,6r)---z6r..z6l---obl(5l,6l,1r)---obl(1r,5l,1l)---cycle;
+penlabels(1,2,3,4,5,6); labels(3rr);
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.math_reversed_F:
+bskchar "The reversed turned letter F (msbm)";
+beginchar(chars.math_reversed_F,9u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos6(rule_thickness,-90);
+top y1=h+o; bot y2=-d; y3l=y2l; lft x3=u;
+rt x1l=w-u; x2=x1; y2r:=y3r;
+y6=.52[y1,y2]; y5l=y6l; y5r=y6r; x6=x2l+3/8(x3-x2r)-cap_stem;
+z5l=whatever[z1r,z2r]; z5r=whatever[z1r,z2r];
+bskpoints(3,2,0,rule_thickness);
+filldraw z1l---obl(2l,1l,3l)---z3l..z3rr---obl(2r,3r,5r)
+ ---obl(5r,2r,6r)---z6r..z6l---obl(5l,6l,1r)---z1r---cycle;
+penlabels(1,2,3,4,5,6); labels(3rr);
+endchar;
+
+iff known chars.math_inverted_G:
+bskchar "The inverted letter G (msbm)";
+beginchar(chars.math_inverted_G,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,270);
+rt x1l=w-u+o; lft x3r=u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+pos6(rule_thickness,90); pos7(rule_thickness,90); lft x6=u; x7-x6=beak;
+z5=(.5[x6,x7],y3+.2h);
+y6=y7=y3-.2h+cap_hair;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+p2:=z6l--z7l;
+tim0=xpart(p0 intersectiontimes ((x4,y5)--(0,y5)));
+(tim1,tim2)=p0 intersectiontimes p2;
+tim3=xpart(p1 intersectiontimes (z7l--(-u,y7l)));
+tim4=xpart(p1 intersectiontimes ((x4,y5)--(0,y5)));
+filldraw subpath(rundy(p0,tim0),length p0) of p0
+ ..subpath(0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy(p2,tim2),infinity) of p2..z7r---z6r
+ ..reverse subpath(0,rundy(p1,tim3).zpet) of p1
+ ..reverse subpath(rundy(p1,tim4),length p1) of p1..cycle
+ ;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_ampersand_bin:
+bskchar "Binary ampersand";
+beginchar(chars.math_ampersand_bin, 14u#, asc_height#, 0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, tim[];
+path p[];
+oblu:=2oblu;
+pos1(rule_thickness,180); pos4(rule_thickness,-90); pos5(rule_thickness,180);
+rt x1r=w-u-hair; y1=y2; top y4l=h+o; x4-x3'=(y4-y3');
+lft x3l=3u+stem;
+rt x2r=x1r-(y2r+u); y3l=x_height; y2r=.25x_height;
+alpha=diag_ratio(2,rule_thickness,y3l-y2r,x3l-x2r);
+pos2(alpha*rule_thickness,0); pos2'(rule_thickness,90); pos3(alpha*rule_thickness,0); pos3'(rule_thickness,0);
+.5[x3'r,rt x5r-.5 hair]=x4; y5=y3'=.5[x_height,h];
+x3'r-x3r=(y3'-y3)*cosd(angle(z3-z2));
+bot y2'l=-o; x2'=.5[x2r,x1l];
+pos6(rule_thickness,180); pos7(rule_thickness,270); pos8(rule_thickness,-45); pos9(rule_thickness,270); pos10(rule_thickness,-90);
+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;
+rt x10l=w-u; y10l=y9;
+p0=z1l{z2'+u*right-z1l}..{left}z2'l..z2l---z3l..z3'l..z4l..{down}z5l..{down}z6l;
+p1=z6l{down}..z7l..z8l..{right}z9l..{right}z10l..
+ {left}z10r..z9r{left}..z8r..z7r..{up}z6r;
+p2=z6r{up}..z5r{up}..z4r..z3'r..z3r---z2r..z2'r{right}..{up}z1r;
+(tim0,tim1-7)=p0 intersectiontimes (subpath (7,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-6,tim9)=(subpath(6,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).zpet) of p2
+ ..subpath(rundy(p1,2),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,2',3,3',4,5,6,7,8,9,10);
+endchar;
+
+iff known chars.math_ampersand_bin_rev:
+bskchar "Reversed binary ampersand";
+beginchar(chars.math_ampersand_bin_rev, 14u#, asc_height#, 0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, tim[];
+path p[];
+oblu:=2oblu;
+pos1(rule_thickness,0); pos4(rule_thickness,90); pos5(rule_thickness,0);
+lft x1r=u+hair; y1=y2; bot y4l=-d-o; x4-x3'=(y4-y3');
+rt x3l=w-3u-stem;
+lft x2r=x1r+(h-y2r+u); y3l=h-x_height; y2r=h-.25x_height;
+alpha=diag_ratio(2,rule_thickness,y3l-y2r,x3l-x2r);
+pos2(alpha*rule_thickness,180); pos2'(rule_thickness,-90); pos3(alpha*rule_thickness,180); pos3'(rule_thickness,180);
+.5[x3'r,lft x5r+.5 hair]=x4; y5=y3'=.5[h-x_height,0];
+x3'r-x3r=-(y3'-y3)*cosd(angle(z3-z2));
+top y2'l=h+o; x2'=.5[x2r,x1l];
+pos6(rule_thickness,0); pos7(rule_thickness,90); pos8(rule_thickness,135); pos9(rule_thickness,90); pos10(rule_thickness,90);
+rt x6r=w-u; y6r-y7r=x7-x6; top y7r=h+o; x7=x3; x8=x2;
+y8=h-bar_height; bot y9l=h-x_height-o; x9=.5[x8,u]-.5hair;
+lft x10l=u; y10l=y9;
+p0=z1l{z2'+u*left-z1l}..{right}z2'l..z2l---z3l..z3'l..z4l..{up}z5l..{up}z6l;
+p1=z6l{up}..z7l..z8l..{left}z9l..{left}z10l..
+ {right}z10r..z9r{right}..z8r..z7r..{down}z6r;
+p2=z6r{down}..z5r{down}..z4r..z3'r..z3r---z2r..z2'r{left}..{down}z1r;
+(tim0,tim1-7)=p0 intersectiontimes (subpath (7,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-6,tim9)=(subpath(6,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).zpet) of p2
+ ..subpath(rundy(p1,2),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,2',3,3',4,5,6,7,8,9,10);
+endchar;
+iff known chars.math_Ydown:
+bskchar "Ydown";
+beginchar(chars.math_Ydown,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos0(rule_thickness,0);
+x1=x2=.5w; bot y1=-d; y2=math_axis; z0=z2;
+lft x3l=u; rt x4r=w-u; top y3l=top y4r=h-.25rule_thickness;
+pos3(rule_thickness,angle(z3l-z2l)-90); pos4(rule_thickness,angle(z4r-z2r)-90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_Yup:
+bskchar "Yup";
+beginchar(chars.math_Yup,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos0(rule_thickness,0);
+x1=x2=.5w; top y1=h; y2=math_axis; z0=z2;
+lft x3r=u; rt x4l=w-u; bot y3r=bot y4l=-d+.25rule_thickness;
+pos3(rule_thickness,angle(z3r-z2l)+90); pos4(rule_thickness,angle(z4l-z2r)+90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_Yleft:
+bskchar "Yleft";
+beginchar(chars.math_Yleft,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos0(rule_thickness,90);
+lft x1=u; x2=.5w; y1=y2=math_axis; z0=z2;
+rt x3l=rt x4r=w-u; bot y3l=-d+.25rule_thickness; top y4r=h-.25rule_thickness;
+pos3(rule_thickness,angle(z3l-z2l)+90); pos4(rule_thickness,angle(z4r-z2r)+90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_Yright:
+bskchar "Yright";
+beginchar(chars.math_Yright,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos0(rule_thickness,90);
+rt x1=w-u; x2=.5w; y1=y2=math_axis; z0=z2;
+lft x3l=lft x4r=u; bot y3l=-d+.25rule_thickness; top y4r=h-.25rule_thickness;
+pos3(rule_thickness,angle(z3l-z2l)-90); pos4(rule_thickness,angle(z4r-z2r)-90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_baro:
+bskchar "Vertical bar through circle";
+beginarithchar(chars.math_baro); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,0); pos10(rule_thickness,0);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5w; x2-x6=y8-y4=w-6u;
+circle_points(rule_thickness);
+x9=x10=.5w; .5[y9,y10]=math_axis; top y9=h;
+bskpoints(9,10,hair,hair);
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9rr{up}..z9l---z10ll..z10r---z9rr;
+(tim0,tim1-1)=subpath(0,1) of p0 intersectiontimes subpath(1,2) of p2;
+(tim2-3,tim3)=subpath(3,5) of p0 intersectiontimes subpath(0,2) of p2;
+(tim4-3,tim5-3)=subpath(3,5) of p0 intersectiontimes subpath(3,4) of p2;
+(tim6-7,tim7-3)=subpath(7,8) of p0 intersectiontimes subpath(3,4) of p2;
+(tim8,tim9-1)=subpath(0,1) of p1 intersectiontimes subpath(1,2) of p2;
+(tim10-3,tim11)=subpath(3,5) of p1 intersectiontimes subpath(0,2) of p2;
+(tim12-3,tim13-3)=subpath(3,5) of p1 intersectiontimes subpath(3,4) of p2;
+(tim14-7,tim15-3)=subpath(7,8) of p1 intersectiontimes subpath(3,4) of p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p0,tim4),rundy(p0,8).zpet) of p0
+ ..subpath(rundy(p2,tim7),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10).zpet,rundy(p1,tim8)) of p1..cycle;
+infill subpath(rundy(p2,tim15).zpet,rundy(p2,tim13)) of p2
+ ..subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_moo:
+bskchar "Moo";
+beginarithchar(chars.math_moo); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,-90); pos6(rule_thickness,180); pos7(rule_thickness,90); pos8(rule_thickness,180);
+x1=x2=.5[x3,x4]=.5[x6,x8]=.5[x5,x7]=.5w; lft x3=u;
+top y1=h; 2y2=y3l=y4l=math_axis; bot y5r=bot y7l=-d; x5=.5[x2,x6]; x5-x6=.75(y2-y5);
+y6=y8=y2;
+z3'r=(x2l,y3r); z3'l=(x2l,y3l); z4'r=(x2r,y4r); z4'l=(x2r,y4l);
+p0=z2l{down}..z5l..{up}z6l..z6r{down}..z5r..{up}z2r;
+p1=z2l{down}..z7l..{up}z8l..z8r{down}..z7r..{up}z2r;
+z0=bsktouch(subpath(1,infinity) of p0,right,subpath(1,infinity) of p1,left);
+tim0-1=xpart(subpath(1,infinity) of p0 intersectiontimes (z0--(x5,y0)));
+tim1=xpart(subpath(0,1) of p1 intersectiontimes (z0--(x5,y0)));
+filldraw z1l---obl(3'r,1l,3r)---z3r..z3l---obl(3'l,3l,2l)
+ ---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---obl(4'l,2r,4l)---z4l..z4r
+ ---obl(4'r,4r,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4',5,6,7,8); labels(0);
+endchar;
+
+iff known chars.math_strict_if:
+bskchar "Strict if";
+beginchar(chars.math_strict_if,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,-90); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+y1=y2=.5[y6,y8]=.5[y5,y7]=math_axis;
+lft x1=u; x2=x6=x8=2/3w; rt x5l=rt x7r=w-u; y5=.5[y2,y6]; top y6l=h;
+p0=z2l{right}..z5l..{left}z6l..z6r{right}..z5r..{left}z2r;
+p1=z2l{right}..z7l..{left}z8l..z8r{right}..z7r..{left}z2r;
+bskpoints(1,2,hair,hair);
+z0=bsktouch(subpath(1,infinity) of p0,down,p1,up);
+tim0=xpart(subpath(0,1) of p0 intersectiontimes (z0+down--(x0,y7)));
+tim1-4=xpart(subpath(4,infinity) of p1 intersectiontimes (z0--(x0,y5)));
+if tim1<4: tim1:=4.75 fi;
+filldraw z1l---subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),infinity) of p0---z1rr..cycle;
+penlabels(1,2,5,6,7,8); labels(0,1rr);
+endchar;
+
+iff known chars.math_strict_fi:
+bskchar "Strict fi";
+beginchar(chars.math_strict_fi,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,-90); pos7(rule_thickness,180); pos8(rule_thickness,-90);
+y1=y2=.5[y6,y8]=.5[y5,y7]=math_axis;
+rt x1=w-u; x2=x6=x8=1/3w; lft x5l=lft x7r=u; y5=.5[y2,y6]; top y6l=h;
+p0=z2l{left}..z5l..{right}z6l..z6r{left}..z5r..{right}z2r;
+p1=z2l{left}..z7l..{right}z8l..z8r{left}..z7r..{right}z2r;
+bskpoints(1,2,hair,hair);
+z0=bsktouch(subpath(1,infinity) of p0,down,p1,up);
+tim0=xpart(subpath(0,1) of p0 intersectiontimes (z0--(x0,y7)));
+tim1-4=xpart(subpath(4,infinity) of p1 intersectiontimes (z0--(x0,y5)));
+if tim1<4: tim1:=4.75 fi;
+filldraw z1l---subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),infinity) of p0---z1rr..cycle;
+penlabels(1,2,5,6,7,8); labels(0,1rr);
+endchar;
+
+iff known chars.math_bracket_bag_simple_left:
+bskchar "Simple left bag bracket";
+beginchar(chars.math_bracket_bag_simple_left,7u#,body_height#,paren_depth#); uni "0x27C5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,-90); pos3(rule_thickness,180);
+pos4(rule_thickness,180); pos5(rule_thickness,-90); pos6(rule_thickness,-90);
+lft x1l=u; top y2l=h+o; y1=y3+rule_thickness; y2-y1=x2-x1; .5[x1,x3]=x2; x3=w-2u;
+y4=.5[math_axis,-d]; x4=x2; x5=w-2u; bot y5r=-d-o; rt x6=w-u; y6r=y5;
+draw z1l{up}..z2l..z3l---z4l..z5l---z6l..z6r---z5r..z4r---z3r..z2r..{down}z1r..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_bracket_bag_simple_right:
+bskchar "Simple right bag bracket";
+beginchar(chars.math_bracket_bag_simple_right,7u#,body_height#,paren_depth#); uni "0x27C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,180); pos2(rule_thickness,-90); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,-90); pos6(rule_thickness,-90);
+rt x1l=w-u; top y2l=h+o; y1=y3+rule_thickness; y2-y1=x1-x2; .5[x1,x3]=x2; x3=2u;
+y4=.5[math_axis,-d]; x4=x2; x5=2u; bot y5r=-d-o; lft x6=u; y6r=y5;
+draw z1l{up}..z2l..z3l---z4l..z5l---z6l..z6r---z5r..z4r---z3r..z2r..{down}z1r..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_accumulate_upside:
+bskchar "Upside-down upwards accumulate symbol";
+beginchar(chars.math_accumulate_upside,12u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x1r; x1=x1'-.5o=.5[x2,x3]=.5w; y1'=2/3[y1,y2]; y1=y0+arrsize;
+rt x2=w-u; y2+.5rule_thickness=h; y3=y2; top y0=-d-apex_o;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+p1:=z2r{z1'-z2}..{down}z1l;
+p2:=z1r{up}..{z3-z1'}z3l;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw z3r+.5hair*unitvector(z1'-z3){z1'-z3}..{down}(reverse sipka(0,1)){up}..{z2-z1'}z2l
+ ..{z1'-z2}z2r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_accumulate:
+bskchar "Upwards accumulate symbol";
+beginchar(chars.math_accumulate,12u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x1; x1=x1'-.5o=.5[x2,x3]=.5w; y1=y0-arrsize; y1'=2/3[y1,y2]; bot y0=h+apex_o;
+rt x2=w-u; y2-.5rule_thickness=-d; y3=y2;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+p1:=z2l{z1'-z2}..{up}z1l;
+p2:=z1r{down}..{z3-z1'}z3r;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw z3l+.5hair*unitvector(z1'-z3){z1'-z3}..{up}(sipka(0,1) shifted (z1l-z0a.r)){down}
+ ..{z2-z1'}z2r..{z1'-z2}z2l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_accumulate_downwards:
+bskchar "Downwards accumulate symbol";
+beginchar(chars.math_accumulate_downwards,18u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x1=x1'-.5o=.5[x2,x3]=.5w; top y1=h; y1'=2/3[y1,y2];
+rt x2=w-4u; y2-.5rule_thickness=-d+.5arrsize; y3=y2;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+z0=z3+arrsize*unitvector(z3-z1');
+z5=z2+arrsize*unitvector(z2-z1');
+p1:=z2l{z1'-z2}..{up}z1l;
+p2:=z1r{down}..{z3-z1'}z3r;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw sipka(0,3){z1'-z3}..{up}z1l..z1r{down}
+ ..{z2-z1'}sipka(5,2){z1'-z2}..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_accumulate_downwards_upside:
+bskchar "Upside-down downwards accumulate symbol";
+beginchar(chars.math_accumulate_downwards_upside,18u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x1=x1'-.5o=.5[x2,x3]=.5w; y1'=2/3[y1,y2]; bot y1=-d;
+rt x2=w-4u; y2+.5rule_thickness=h-.5arrsize; y3=y2;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+z0=z3+arrsize*unitvector(z3-z1');
+z5=z2+arrsize*unitvector(z2-z1');
+p1:=z2r{z1'-z2}..{down}z1l;
+p2:=z1r{up}..{z3-z1'}z3l;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw (reverse sipka(0,3))..z3r+.5hair*unitvector(z1'-z3){z1'-z3}..{down}z1l..z1r{up}
+ ..{z2-z1'}(reverse sipka(5,2)){z1'-z2}..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_hamiltonian_conjugate:
+bskchar "Hamiltonian conjugate matrix sign";
+beginarithchar(chars.math_hamiltonian_conjugate); uni "0x22B9";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=x4=.5w=.5[x5,x8]=.5[x6,x7]; lft x5=u; x7-x6=y2-y3;
+top y1=h; bot y4=-d; .5[y2,y3]=y5=y6=y7=y8=math_axis; bot y2-top y3=3rule_thickness;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,rule_thickness,rule_thickness);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+filldraw bskrule(7,8,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.sign_caret:
+bskchar "Caret sign";
+beginchar(chars.sign_caret,5u#,0,.5desc_depth#); uni "0x2038";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h; bot y1r=-d;
+{{ save rule_thickness; rule_thickness:=hair;
+ logand(0,1,2);
+}};
+endchar;
+
+iff known chars.sign_caret_insertion:
+bskchar "Caret insertion sign";
+beginchar(chars.sign_caret_insertion,6u#,bar_height#,.5desc_depth#); uni "0x2041";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=2.5u; top y0=0; bot y1r=-d;
+{{ save rule_thickness; rule_thickness:=hair;
+ logand(0,1,2).nodraw;
+}};
+y3=h; z3=whatever[z1l,z0r]; z3l-z3r=z1l-z1r; .5[z3l,z3r]=z3;
+bskpoints(1,3,hair,hair);
+z2'=point infinity of _logand;
+z3'=whatever[point 0 of _logand,z2']=whatever[z3l,z1l];
+filldraw z3r---_logand---obl(3',2',3l)---z3ll..cycle;
+penlabels(3); labels(3ll,3');
+endchar;
+
+iff known chars.sign_tironian:
+bskchar "Tironian sign et";
+beginchar(chars.sign_tironian,9u#,x_height#,.5desc_depth#); uni "0x204A";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(3rule_thickness,90);
+rt x1r+2u=rt x2r=w-u; bot y1=-d; y2=h;
+lft x3=u; y3r=y2; y2'=top y3l; z2'=whatever[z2l,z1l];
+p0:=z1r---obl(2r,1r,3l){z3-z2}..z3r;
+p1=z3r---z3l..z3l+2oblu*right---z2';
+filldraw subpath(0,rundy(p0,infinity).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1..z2'+oblu*down---z1l..cycle;
+penlabels(1,2,3); labels(2');
+endchar;
+
+iff known chars.math_projection_z:
+bskchar "Z projection";
+beginchar(chars.math_projection_z,7u#,v_center(asc_height#)); uni "0x2A21";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=3oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+lft x1l=lft x2l=2u; top y2=h; bot y1=-d; rt x3r=w-u;
+z3r=z2r+whatever*dir-45;
+pos3(rule_thickness,angle(z2r-z3r)-90);
+x3'=x2r; z3'=z3l+whatever*(z2r-z3r);
+bskpoints(1,2,0,rule_thickness);
+filldraw z1l---z2l..z2r---z3r..z3l---obl(3',3l,1r)---z1rr..cycle;
+penlabels(1,2,3); labels(1rr,3');
+endchar;
+
+iff known chars.math_triangle_operator:
+bskchar "Triangle for operator triangled operators";
+beginchar(chars.math_triangle_operator,17u#,v_center(asc_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+penlabels(1,2,3); labels(1',2');
+endchar;
+
+iff known chars.math_triangle_triangle:
+bskchar "Triangle with triangle inside";
+beginchar(chars.math_triangle_triangle,17u#,v_center(asc_height#)); uni "0x27C1";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+x6r=x6l=.5w=.5[x4l,x5l]; y4l=y5l; 1/3[y4l,y6r]=1/3[y2l,y3r];
+y6r-y4l=.5(y3r-y1l); x5l-x4l=.5(x2l-x1l);
+z4r-z4l=(rule_thickness-currentbreadth,0) rotated (angle(z6r-z4l)-90);
+z5r-z5l=(-rule_thickness+currentbreadth,0) rotated (angle(z6r-z5l)-90);
+z6l=z4r+whatever*(z6r-z4l)=z5r+whatever*(z6r-z5l);
+y4'=y5'=y4l+rule_thickness-currentbreadth; z4'=whatever[z4r,z6l]; z5'=whatever[z5r,z6l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+filldraw obl(4l,6r,5l)---obl(5l,4l,6r)---obl(6r,5l,4l)---cycle;
+infill obl(4',6l,5')---obl(5',4',6l)---obl(6l,5',4')---cycle;
+penlabels(1,2,3,4,5,6); labels(1',2',4',5');
+endchar;
+
+iff known chars.math_triangle_plus:
+bskchar "Triangle-plus operator";
+beginchar(chars.math_triangle_plus,17u#,v_center(asc_height#)); uni "0x2A39";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+x6=x7=.5[x4,x5]=.5w;
+x5-x4=1/3(x2l-x1l); y4=y5=.5[y6,y7]=1/3[y1l,y3r]; y6-y7=x5-x4;
+bskpoints(4,5,hair,hair); bskpoints(7,6,.5hair,.5hair);
+z8=whatever[z7l,z6l]=whatever[z4l,z5l];
+z9=whatever[z7r,z6r]=whatever[z4l,z5l];
+z10=whatever[z7r,z6r]=whatever[z4r,z5r];
+z11=whatever[z7l,z6l]=whatever[z4r,z5r];
+filldraw z4l---obl(8,4l,7l)---z7l..z7rr---obl(9,7r,5l)---z5ll..z5r---
+ obl(10,5r,6r)---z6r..z6ll---obl(11,6l,4r)---z4rr..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8,9,10,11);
+endchar;
+
+iff known chars.math_triangle_minus:
+bskchar "Triangle-minus operator";
+beginchar(chars.math_triangle_minus,17u#,v_center(asc_height#)); uni "0x2A3A";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+y4=y5=1/3[y1l,y3r]; .5[x4,x5]=.5w; x5-x4=1/3(x2l-x1l);
+filldraw bskrule(4,5,hair,hair);
+penlabels(1,2,3,4,5); labels(1',2');
+endchar;
+
+iff known chars.math_triangle_times:
+bskchar "Triangle-times operator";
+beginchar(chars.math_triangle_times,17u#,v_center(asc_height#)); uni "0x2A3B";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+pos4(rule_thickness,135); pos5(rule_thickness,135);
+pos6(rule_thickness,45); pos7(rule_thickness,45);
+.5[x6,x5]=.5w;
+x4r=x6l; x5l=x7r; x7r-x4l=.25(x2l-x1l);
+y4l=y7l; y5r=y6r; .5[y5r,y4l]=1/3[y1l,y3r]; y6r-y4l=x5l-x6l;
+bskpoints(4,5,hair,hair); bskpoints(7,6,.5hair,.5hair);
+z8=whatever[z7l,z6l]=whatever[z4l,z5l];
+z9=whatever[z7r,z6r]=whatever[z4l,z5l];
+z10=whatever[z7r,z6r]=whatever[z4r,z5r];
+z11=whatever[z7l,z6l]=whatever[z4r,z5r];
+oblu:=2.2oblu;
+filldraw z4l---obl(8,4l,7l)---z7l..z7rr---obl(9,7r,5l)---z5ll..z5r---
+ obl(10,5r,6r)---z6r..z6ll---obl(11,6l,4r)---z4rr..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8,9,10,11);
+endchar;
+
+iff known chars.math_domain_antirestriction:
+bskchar "Domain antirestriction";
+beginchar(chars.math_domain_antirestriction,15u#,v_center(asc_height#)); uni "0x2A64";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=4oblu;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+rt x1r=rt x2r=w-u; lft x3l=u; y3l=y4=y5=math_axis; y1r=h; y2r=-d;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3l-z1r)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3l-z2r)-90);
+z3r=z1l+whatever*(z3l-z1r)=z2l+whatever*(z3l-z2r);
+x1'=x2'=x1r-rule_thickness+currentbreadth; z1'=whatever[z1l,z3r]; z2'=whatever[z2l,z3r];
+x5=x1'; z4r=whatever[z1',z3r];
+filldraw obl(1r,3l,2r)---obl(2r,1r,3l)---obl(3l,2r,1r)---cycle;
+oblu:=2oblu;
+infill obl(1',4r,5r)---obl(5r,1',4r)---obl(4r,5r,1').more---cycle;
+infill obl(2',4l,5l)---obl(5l,2',4l)---obl(4l,5l,2').more---cycle;
+penlabels(1,2,3,4,5); labels(1',2');
+endchar;
+
+iff known chars.math_range_antirestriction:
+bskchar "Range antirestriction";
+beginchar(chars.math_range_antirestriction,15u#,v_center(asc_height#)); uni "0x2A65";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=4oblu;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x1l=lft x2l=u; rt x3r=w-u; y3r=y4=y5=math_axis; y1l=h; y2l=-d;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+x1'=x2'=x1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+x5=x1'; z4r=whatever[z1',z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1',4r,5r)---obl(5r,1',4r)---obl(4r,5r,1').more---cycle;
+infill obl(2',4l,5l)---obl(5l,2',4l)---obl(4l,5l,2').more---cycle;
+penlabels(1,2,3,4,5); labels(1',2');
+endchar;
+
+iff known chars.math_triangle_left_large_op:
+bskchar "Large left triangle operator";
+beginchar(chars.math_triangle_left_large_op,10u#,v_center(asc_height#)); uni "0x2A1E";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x1r=rt x2r=w-u; lft x3l=u; y3l=math_axis; y1r=h; y2r=-d;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3l-z1r)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3l-z2r)-90);
+z3r=z1l+whatever*(z3l-z1r)=z2l+whatever*(z3l-z2r);
+x1'=x2'=x1r-rule_thickness+currentbreadth; z1'=whatever[z1l,z3r]; z2'=whatever[z2l,z3r];
+filldraw obl(1r,3l,2r)---obl(2r,1r,3l)---obl(3l,2r,1r)---cycle;
+oblu:=2oblu;
+infill obl(1',3r,2')---obl(2',1',3r)---obl(3r,2',1')---cycle;
+penlabels(1,2,3); labels(1',2');
+endchar;
+
+iff known chars.math_nonforking:
+bskchar "Nonforking sign";
+beginchar(chars.math_nonforking,11u#,.8asc_height#,0); uni "0x2ADD";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+top y1=top y5=.6h; top y6=h; bot y3l=y7=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,hair,hair);
+p0=z4r{down}...z3r...z2r---z1rr;
+p1=z7r--z6rr;
+p2=z6l--z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr
+ ---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),infinity) of p0..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr,6rr);
+endchar;
+
+iff known chars.math_forking:
+bskchar "Forking sign";
+beginchar(chars.math_forking,11u#,.8asc_height#,0); uni "0x2ADC";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+top y1=top y5=.6h; top y6=h; bot y3l=y7=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3+(x3-x2);
+bot y8=-d; y9=x_height+.5rule_thickness; lft x8=.5u; x9=w-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,hair,hair);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0=z1l---z2l...z3l...z4l---z5l..{down}z5rr;
+p1=z4r{down}...z3r...z2r---z1rr;
+p2=z7r--z6rr;
+p3=z6l--z7l;
+p4=z9ll---z8l;
+p5=z8rr--z9r;
+(tim0,tim1)=p1 intersectiontimes p2;
+(tim2,tim3)=p1 intersectiontimes p3;
+(tim4,tim5)=p0 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes p5;
+(tim8,tim9)=p2 intersectiontimes p5;
+(tim10,tim11)=p2 intersectiontimes p4;
+(tim12,tim13)=p3 intersectiontimes p4;
+(tim14,tim15)=p1 intersectiontimes p4;
+(tim16,tim17)=p3 intersectiontimes p5;
+(tim18,tim19)=p1 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p4,tim5),infinity) of p4
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ---subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p5,tim9),infinity) of p5
+ ..subpath(0,rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p4,tim13),rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+infill subpath(rundy(p3,(tim16,2oblu)),rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p1,tim2),rundy(p1,tim18).zpet) of p1
+ ..subpath(rundy(p5,tim19),rundy(p5,(tim17,2oblu)).zpet) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,6rr,8rr,9ll);
+endchar;
+
diff --git a/fonts/boisik/bsksyol10.mf b/fonts/boisik/bsksyol10.mf
new file mode 100644
index 0000000000..4c438eba03
--- /dev/null
+++ b/fonts/boisik/bsksyol10.mf
@@ -0,0 +1,107 @@
+% Boisik Math Symbols Outline 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYOL"; 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#:=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
+flare#:=32/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#:=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_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:=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
+
+bsk_outline#:=.1pt#;
+generate bskmathsy % switch to the driver file
diff --git a/fonts/boisik/bsksysl10.mf b/fonts/boisik/bsksysl10.mf
new file mode 100644
index 0000000000..71ca90e4f8
--- /dev/null
+++ b/fonts/boisik/bsksysl10.mf
@@ -0,0 +1,89 @@
+% Boisik Slanted Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYSL"; 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:=.2; pr.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?
+
+% 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/fonts/boisik/example/boisik-idiot.pdf b/fonts/boisik/example/boisik-idiot.pdf
new file mode 100644
index 0000000000..729f4b06e6
--- /dev/null
+++ b/fonts/boisik/example/boisik-idiot.pdf
Binary files differ
diff --git a/fonts/boisik/example/boisik-idiot.tex b/fonts/boisik/example/boisik-idiot.tex
new file mode 100644
index 0000000000..4a95fadff9
--- /dev/null
+++ b/fonts/boisik/example/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/fonts/boisik/example/boisik.pdf b/fonts/boisik/example/boisik.pdf
new file mode 100644
index 0000000000..91d4155525
--- /dev/null
+++ b/fonts/boisik/example/boisik.pdf
Binary files differ
diff --git a/fonts/boisik/example/boisik.tex b/fonts/boisik/example/boisik.tex
new file mode 100644
index 0000000000..9d3fe23dc7
--- /dev/null
+++ b/fonts/boisik/example/boisik.tex
@@ -0,0 +1,49 @@
+\documentclass{article}
+\usepackage{color,graphicx,boisik,textcomp}
+\pagestyle{empty}
+\pdfpkresolution 1200
+\pagecolor{black}
+\definecolor{modra}{rgb}{.372,.486,1}
+\definecolor{cervena}{rgb}{1,.219,.556}
+\font\logo bskrlogo10 at 30pt
+\font\bskex bskex10 at 8pt
+\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}$\P$}\ }\ht0=0pt\dp0=0pt\lower.8ex\box0}}
+\def\Boisik{{\color{modra}Boisik}}
+\def\BOISIK{\logo Bo\kern-2pt\reflectbox{\char131}\kern-2.5pt\raisebox{-3pt}[0pt]{s}\kern-2.5pt\char131\kern-1ptk}
+\begin{document}
+\mbox{}\unitlength1pt
+\put(5,0){\color{modra}\BOISIK}
+\put(0,-10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt}
+\put(0,-6){\color{modra}\hbox to 10.7cm{\hfill \normalfont METAFONT TYPEFACE FOR \TeX}}
+\color{white}\fontsize{8}{10}\selectfont
+\put(65,-40){\hbox to 8.2cm{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{\textbf{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{\textit{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{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{\textbf{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{\textit{a b c d e \ae{} f g $\varg$ h i j k l m n o \oe{} p q r s \ss{} t u v w x y z}}}
+\put(65,-100){\hbox to 8.2cm{0 1 2 3 4 5 6 7 8 9 ( $\{$ [ + -- * / : ; = \# \% \& @ \char141\ ] $\}$ )}}
+\put(65,-112){\hbox to 8.2cm{fi \char130\ ff fl ffi ffl \char128\ \char129\ \i{} \j{} \ss{} \ae{} \oe{} \o{} \AE{} \OE{} \O{} \$ . , \char23\ \char22\ \char32\ \char21\ \char24\ \char18\ \char254\ \char255\ \~\ ` ' "}}
+\put(65,-122){\hbox to 8.2cm{$\Gamma\Delta~\Theta\Lambda~\Xi~\Pi~\Sigma~\Upsilon~\Phi~\Psi~\Omega~
+\alpha~\beta~\varbeta~\gamma~\delta~\epsilon~\zeta~\eta~\theta~\iota~\kappa~\varkappa~\lambda~\mu~\nu~\pi~\sampi~\varrho~\sigma~\varsigma~\tau~
+\upsilon~\phi~\varphi~\chi~\psi$}}
+\put(65,-132){\hbox to 8.2cm{$\ell~\wp~\partial~{\star}~\Re~\Im~\natural~\flat~\sharp~{<}~{>}~{\triangleleft}~{\smile}~{\triangleright}~{\leftharpoonup}~
+{\leftarrow}~{\rightarrow}~{\uparrow}{\downarrow}~{\Lleftarrow}~{\infty}~{\in}~{\boxtimes}~{\gnapprox}~{\odot}~{\dashv}$\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,-14){$\downarrow$}\put(30,14){$\uparrow$}\put(11,-13.5){\rotatebox{90}{\f\reflectbox{\char60}}}
+\color{modra}\put(5,7.5){\textbf*}\put(9,8){\textbf*}\put(23,10){\textbf*}
+}
+\newpage\hsize 8.2cm\oddsidemargin 2.4cm\parindent 0pt\everypar{\para}
+\color{white}\fontsize{8}{12}\selectfont
+The `\Boisik\kern-.25ex' font is a Metafont typeface greatly inspired by Baskerville design. It is intended for mathematical typesetting: \Boisik{} supports all characters and math symbols described in the book `\kern-.15ex{\textit{Computer Modern Typefaces}}' by \textsc{D. E. Knuth}. Symbols from $\mathbb{AMS}$ font set (\textit{msam} and \textit{msbm}) and few others are supported too. Also letters for the Czech language and text companion symbols are available.\hfill {\def\,{\kern.2ex}\color{cervena}Á\,á\,Č\,č\,Ď\,ď\kern.3exÉ\,é\,Ě\,ě\,Í\,í\,Ň\,ň\,Ř\,ř\,Š\,š\,Ť\,ť\,Ů\,ů\,Ú\,ú\,Ý\,ý\,Ž\,ž\,\textmho\,\textmusicalnote\,\textonehalf\,\textmu}
+
+Current status of \Boisik{} is an alpha version: many features are missing, many don't work. I hope (\textbf{not guarantee}) in the improvement in the future. Note that the $\mathsf{Sans}$-$\mathsf{serif}$ math alphabet is faked one---\Boisik{} will never have sans-serif variant.\vskip 1mm
+
+\mbox{}\put(-63,10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt}
+Please, don't use \Boisik{} if you need excellent stability, precision, and quality of typesetting.
+\end{document}
diff --git a/fonts/boisik/example/bskrlogo10.mf b/fonts/boisik/example/bskrlogo10.mf
new file mode 100644
index 0000000000..169612b937
--- /dev/null
+++ b/fonts/boisik/example/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/fonts/boisik/example/table.pdf b/fonts/boisik/example/table.pdf
new file mode 100644
index 0000000000..57b58c5be7
--- /dev/null
+++ b/fonts/boisik/example/table.pdf
Binary files differ
diff --git a/fonts/boisik/example/table.tex b/fonts/boisik/example/table.tex
new file mode 100644
index 0000000000..5d767bd128
--- /dev/null
+++ b/fonts/boisik/example/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\char'314&\sy\char'315&\sy\char'324&\sy\char'325\cr
+\sy\char'303&\sy\char'371&\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'267\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'200&\sy\char'201&\sy\char'202&\sy\char'013\cr
+\sy\char'074&\sy\char'075&\sy\char'100&\sy\char'155\cr
+\sy\char'374&\sy\char'375&\sy\char'376&\sy\char'373\cr
+}
+\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/fonts/boisik/example/testfont.pdf b/fonts/boisik/example/testfont.pdf
new file mode 100644
index 0000000000..d4125cb14a
--- /dev/null
+++ b/fonts/boisik/example/testfont.pdf
Binary files differ
diff --git a/fonts/boisik/example/testfont.tex b/fonts/boisik/example/testfont.tex
new file mode 100644
index 0000000000..8fde757eaf
--- /dev/null
+++ b/fonts/boisik/example/testfont.tex
@@ -0,0 +1,225 @@
+% A testbed for font evaluation (see The METAFONTbook, Appendix H)
+% -- modified for Boisik
+
+\tracinglostchars=0
+\tolerance=1000
+\raggedbottom
+\nopagenumbers
+\parindent=0pt
+\newlinechar=`@
+\hyphenpenalty=200
+\doublehyphendemerits=30000
+\hyphenation{prom-i-nent}
+\vsize 26.5cm
+\newcount\m \newcount\n \newcount\p \newdimen\dim
+\chardef\other=12
+
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+\def\hours{\n=\time \divide\n 60
+ \m=-\n \multiply\m 60 \advance\m \time
+ \twodigits\n\twodigits\m}
+\def\twodigits#1{\ifnum #1<10 0\fi \number#1}
+
+\def\init{\message{@Name of the font to test = }
+ \read-1 to\fontname \startfont
+ \message{Now type a test command (\string\help\space for help):}}
+\def\startfont{\font\testfont=\fontname \spaceskip=0pt
+ \leftline{\sevenrm Test of \fontname\unskip}
+ \medskip
+ \testfont \setbaselineskip
+ \ifdim\fontdimen6\testfont<10pt \rightskip=0pt plus 20pt
+ \else\rightskip=0pt plus 2em \fi
+ \spaceskip=\fontdimen2\testfont % space between words (\raggedright)
+ \xspaceskip=\fontdimen2\testfont \advance\xspaceskip by\fontdimen7\testfont}
+
+{\catcode`\|=0 \catcode`\\=\other
+|gdef|help{|message{%
+\init switches to another font;@%
+\end or \bye finishes the run;@%
+\table prints the font layout in tabular format;@%
+\text prints a sample text, assuming TeX text font conventions;@%
+\sample combines \table and \text;@%
+\mixture mixes a background character with a series of others;@%
+\alternation interleaves a background character with a series;@%
+\alphabet prints all lowercase letters within a given background;@%
+\ALPHABET prints all uppercase letters within a given background;@%
+\series prints a series of letters within a given background;@%
+\lowers prints a comprehensive test of lowercase;@%
+\uppers prints a comprehensive test of uppercase;@%
+\digits prints a comprehensive test of numerals;@%
+\math prints a comprehensive test of TeX math italic;@%
+\names prints a text that mixes upper and lower case;@%
+\punct prints a punctuation test;@%
+\bigtest combines many of the above routines;@%
+\help repeats this message;@%
+and you can use ordinary TeX commands (e.g., to \input a file).}}}
+
+\def\setbaselineskip{\setbox0=\hbox{\n=0
+\loop\char\n \ifnum \n<255 \advance\n 1 \repeat}
+\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 }
+
+\def\setchar#1{{\escapechar-1\message{\string#1 character = }%
+ \def\do##1{\catcode`##1=\other}\dospecials
+ \read-1 to\next
+ \expandafter\finsetchar\next\next#1}}
+\def\finsetchar#1#2\next#3{\global\chardef#3=`#1
+ \ifnum #3=`\# \global\chardef#3=#2 \fi}
+\def\promptthree{\setchar\background
+ \setchar\starting \setchar\ending}
+
+\def\mixture{\promptthree \domix\mixpattern}
+\def\alternation{\promptthree \domix\altpattern}
+\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1}
+\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0}
+\def\domix#1{\par\chardef\0=\background \n=\starting
+ \loop \chardef\1=\n %
+%moje zmena
+\setbox0=\hbox{\1}\def\delej{#1\endgraf}\ifdim\wd0=0pt \ifdim\ht0=0pt \ifdim\dp0=0pt \let\delej\relax \fi \fi \fi
+ \delej\ifnum \n<\ending \advance\n 1 \repeat \ifnum\n=90\0'\endgraf\fi}
+
+\def\!{\discretionary{\background}{\background}{\background}}
+\def\series{\promptthree \!\doseries\starting\ending\par}
+\def\doseries#1#2{\n=#1\loop\char\n\!\ifnum\n<#2\advance\n 1 \repeat}
+\def\complower{\!\doseries{`a}{`z}\doseries{'31}{'34}\par}
+\def\compupper{\!\doseries{`A}{`Z}\doseries{'35}{'37}\par}
+\def\compdigs{\!\doseries{`0}{`9}\par}
+\def\alphabet{\setchar\background\complower}
+\def\ALPHABET{\setchar\background\compupper}
+
+\def\lowers{\docomprehensive\complower{`a}{`z}{'31}{'34}}
+\def\uppers{\docomprehensive\compupper{`A}{`Z}{'35}{'37}}
+\def\digits{\docomprehensive\compdigs{`0}{`4}{`5}{`9}}
+\def\docomprehensive#1#2#3#4#5{\par\chardef\background=#2
+ \loop{#1} \ifnum\background<#3\m=\background\advance\m 1
+ \chardef\background=\m \repeat \chardef\background=#4
+ \loop{#1} \ifnum\background<#5\m=\background\advance\m 1
+ \chardef\background=\m \repeat}
+
+\def\names{ {\AA}ngel\aa\ Beatrice Claire
+ Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris
+ Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave
+ Pauline Qu\^eneau Roxanne Sabine T\~a{\'\j}a Ur\v{s}ula
+ Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie\par}
+\def\punct{\par\dopunct{min}\dopunct{pig}\dopunct{hid}
+ \dopunct{HIE}\dopunct{TIP}\dopunct{fluff}
+ \$1,234.56 + 7/8 = 9\% @ \#0\par}
+\def\dopunct#1{#1,\ #1:\ #1;\ `#1'\ ?`#1?\ !`#1!\ (#1)\ [#1]\ #1*\ #1.\par}
+
+\def\bigtest{\sample
+ hamburgefonstiv HAMBURGEFONSTIV\par
+ \names \punct \lowers \uppers \digits}
+
+\def\math{\textfont1=\testfont \skewchar\testfont=\skewtrial
+ \mathchardef\Gamma="100 \mathchardef\Delta="101
+ \mathchardef\Theta="102 \mathchardef\Lambda="103 \mathchardef\Xi="104
+ \mathchardef\Pi="105 \mathchardef\Sigma="106 \mathchardef\Upsilon="107
+ \mathchardef\Phi="108 \mathchardef\Psi="109 \mathchardef\Omega="10A
+ \def\ii{i} \def\jj{j}
+ \def\\##1{|##1|+}\mathtrial
+ \def\\##1{##1_2+}\mathtrial
+ \def\\##1{##1^2+}\mathtrial
+ \def\\##1{##1/2+}\mathtrial
+ \def\\##1{2/##1+}\mathtrial
+ \def\\##1{##1,{}+}\mathtrial
+ \def\\##1{d##1+}\mathtrial
+ \let\ii=\imath \let\jj=\jmath \def\\##1{\hat##1+}\mathtrial}
+\newcount\skewtrial \skewtrial='177
+\def\mathtrial{$\\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 \\a \\b \\c \\d \\e \\f \\g
+ \\h \\\ii \\\jj \\k \\l \\m \\n \\o \\p \\q \\r \\s \\t \\u \\v \\w \\x \\y
+ \\z \\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta \\\eta \\\theta
+ \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi \\\rho \\\sigma \\\tau
+ \\\upsilon \\\phi \\\chi \\\psi \\\omega \\\vartheta \\\varpi \\\varphi
+ \\\Gamma \\\Delta \\\Theta \\\Lambda \\\Xi \\\Pi \\\Sigma \\\Upsilon
+ \\\Phi \\\Psi \\\Omega \\\partial \\\ell \\\wp$\par}
+\def\mathsy{\begingroup\skewtrial='060 % for math symbol font tests
+ \def\mathtrial{$\\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$\par}
+ \math\endgroup}
+
+\def\oct#1{\hbox{\rm\'{}\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\hex#1{\hbox{\rm\H{}\tt#1}} % hexadecimal constant
+\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal
+ \m=\n \divide\m by 64 \xdef\0{\the\m}%
+ \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}}
+\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}%
+ \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F%
+ \global\p=\lastpenalty}} % \p=1 if none of the characters exist
+\def\oddline{\cr
+ \noalign{\nointerlineskip}
+ \multispan{19}\hrulefill&
+ \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr
+ \noalign{\nointerlineskip}}
+\newif\ifskipping
+\def\evenline{\loop\skippingfalse
+ \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m
+ \expandafter\setdigs\meaning\next \testrow
+ \ifnum\p=1 \skippingtrue \fi\fi
+ \ifskipping \global\advance\n 16 \repeat
+ \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi
+ \next}
+\def\morechart{\cr\noalign{\hrule\penalty5000}
+ \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m}
+ \chartline \evenline}
+\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&}
+\def\chartstrut{\lower4.5pt\vbox to14pt{}}
+\def\table{$$\global\n=0
+ \halign to.8\hsize\bgroup
+ \chartstrut##\tabskip0pt plus10pt&
+ &\hfil##\hfil&\vrule##\cr
+ \lower6.5pt\null
+ &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline}
+\def\endchart{\cr\noalign{\hrule}
+ \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B&
+ &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par}
+\def\:{\setbox0=\hbox{\noboundary\char\n\noboundary}%
+ \ifdim\ht0>7.5pt\reposition
+ \else\ifdim\dp0>2.5pt\reposition\fi\fi
+ \box0\global\advance\n 1 }
+\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0
+ \advance\dim 2pt \dp0=\dim}
+\def\centerlargechars{
+ \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}}
+
+\def\text{{\advance\baselineskip-4pt
+On November 14, 1885, Senator \& Mrs.~Leland Stanford called
+together at their San Francisco mansion the 24~prominent men who had
+been chosen as the first trustees of The Leland Stanford Junior University.
+They handed to the board the Founding Grant of the University, which they
+had executed three days before. This document---with various amendments,
+legislative acts, and court decrees---remains as the University's charter.
+In bold, sweeping language it stipulates that the objectives of the University
+are ``to qualify students for personal success and direct usefulness in life;
+and to promote the publick welfare by exercising an influence in behalf of
+humanity and civilization, teaching the blessings of liberty regulated by
+law, and inculcating love and reverence for the great principles of
+government as derived from the inalienable rights of man to life, liberty,
+and the pursuit of happiness.'' \moretext
+(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)\par}}
+\def\moretext{?`But aren't Kafka's Schlo{\ss} and {\AE}sop's {\OE}uvres
+often na{\"\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's official r\^ole
+in fluffy souffl\'es? }
+\def\omitaccents{\let\moretext=\relax}
+
+\def\sample{\table\text}
+
+%\ifx\noinit!\else\init\fi
+\def\bskfont#1{\def\fontname{#1}\startfont\table}
+\def\ep{\vfill\eject}
+\bskfont{bskr10}\ep
+\bskfont{bski10}\ep
+\bskfont{bskiu10}\ep
+\bskfont{bskrw10}\ep
+\bskfont{bskr10-T1}\ep
+\bskfont{bskr10-TS1}\ep
+\bskfont{bsksc10}\ep
+\bskfont{bskmi10}\ep
+\bskfont{bsksy10}\ep
+\bskfont{bskms10}\ep
+\bskfont{bskex10}\ep
+\bskfont{bskma10}
+\bskfont{bskhc10}
+\end
diff --git a/fonts/boisik/il2bsk.fd b/fonts/boisik/il2bsk.fd
new file mode 100644
index 0000000000..ec2dbf6903
--- /dev/null
+++ b/fonts/boisik/il2bsk.fd
@@ -0,0 +1,14 @@
+\ProvidesFile{il2bsk.fd}[2009/08/21 v0.5 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} {<-14> bskrb10 <14-> bskrb14}{}
+\DeclareFontShape{IL2}{bsk}{b} {n} {<-> bskrsb10}{}
+\DeclareFontShape{IL2}{bsk}{bx}{it}{<-> bskib10}{}
+\endinput
diff --git a/fonts/boisik/il2bskf.fd b/fonts/boisik/il2bskf.fd
new file mode 100644
index 0000000000..1a0a66a07a
--- /dev/null
+++ b/fonts/boisik/il2bskf.fd
@@ -0,0 +1,9 @@
+\ProvidesFile{il2bskf.fd}[2009/08/21 v0.5 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/fonts/boisik/lblbskm.fd b/fonts/boisik/lblbskm.fd
new file mode 100644
index 0000000000..c0447be344
--- /dev/null
+++ b/fonts/boisik/lblbskm.fd
@@ -0,0 +1,7 @@
+\ProvidesFile{lblbskm.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{LBL}{bskm}{\skewchar\font130 }
+\DeclareFontShape{LBL}{bskm}{m}{it}{<->bskmi10}{}
+\DeclareFontShape{LBL}{bskm}{b}{it}{<->bskmib10}{}
+\DeclareFontShape{LBL}{bskm}{m}{oi}{<->bskmiol10}{}
+\DeclareFontShape{LBL}{bskm}{bx}{it}{<->ssub*bskm/b/it}{}
+\endinput
diff --git a/fonts/boisik/lblcmr.fd b/fonts/boisik/lblcmr.fd
new file mode 100644
index 0000000000..9156176b60
--- /dev/null
+++ b/fonts/boisik/lblcmr.fd
@@ -0,0 +1,3 @@
+\ProvidesFile{lblcmr.fd}
+\DeclareFontFamily{LBL}{cmr}{}
+\DeclareFontShape{LBL}{cmr}{m}{n}{<->cmmi10}{}
diff --git a/fonts/boisik/lblenc.def b/fonts/boisik/lblenc.def
new file mode 100644
index 0000000000..c4d5af2c5a
--- /dev/null
+++ b/fonts/boisik/lblenc.def
@@ -0,0 +1,7 @@
+\ProvidesFile{lblenc.def}[2009/08/21 v0.5 Boisik encoding similar to OML]
+\DeclareFontEncoding{LBL}{}{}
+\DeclareFontSubstitution{LBL}{bskm}{m}{it}
+\DeclareTextSymbol{\textless}{LBL}{`\<}
+\DeclareTextSymbol{\textgreater}{LBL}{`\>}
+\DeclareTextAccent{\t}{LBL}{130}
+\endinput
diff --git a/fonts/boisik/lbmbsk.fd b/fonts/boisik/lbmbsk.fd
new file mode 100644
index 0000000000..40f1a7f74a
--- /dev/null
+++ b/fonts/boisik/lbmbsk.fd
@@ -0,0 +1,14 @@
+\ProvidesFile{lbmbsk.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{LBM}{bsk}{}
+\DeclareFontShape{LBM}{bsk}{m} {n} {<->ssub*bskms/m/n}{}
+\DeclareFontShape{LBM}{bsk}{m} {sl}{<->ssub*bskms/m/sl}{}
+\DeclareFontShape{LBM}{bsk}{m} {ol}{<->ssub*bskms/m/ol}{}
+\DeclareFontShape{LBM}{bsk}{l} {n} {<->ssub*bskms/m/n}{}
+\DeclareFontShape{LBM}{bsk}{m} {sc}{<->ssub*bskms/m/n}{}
+\DeclareFontShape{LBM}{bsk}{m} {it}{<->ssub*bskms/m/sl}{}
+\DeclareFontShape{LBM}{bsk}{m} {oi}{<->ssub*bskms/m/n}{}
+\DeclareFontShape{LBM}{bsk}{m} {ui}{<->ssub*bskms/m/n}{}
+\DeclareFontShape{LBM}{bsk}{bx}{n} {<->ssub*bskms/b/n}{}
+\DeclareFontShape{LBM}{bsk}{b} {n} {<->ssub*bskms/b/n}{}
+\DeclareFontShape{LBM}{bsk}{bx}{it}{<->ssub*bskms/b/sl}{}
+\endinput
diff --git a/fonts/boisik/lbmbskms.fd b/fonts/boisik/lbmbskms.fd
new file mode 100644
index 0000000000..565d875fbf
--- /dev/null
+++ b/fonts/boisik/lbmbskms.fd
@@ -0,0 +1,10 @@
+\ProvidesFile{lbmbskms.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{LBM}{bskms}{\skewchar\font130 }
+\DeclareFontShape{LBM}{bskms}{m}{n} {<->bskms10}{}
+\DeclareFontShape{LBM}{bskms}{b}{n} {<->bskmsb10}{}
+\DeclareFontShape{LBM}{bskms}{m}{sl}{<->bskmssl10}{}
+\DeclareFontShape{LBM}{bskms}{b}{sl}{<->bskmsbsl10}{}
+\DeclareFontShape{LBM}{bskms}{m}{it}{<->bskmssl10}{}
+\DeclareFontShape{LBM}{bskms}{b}{it}{<->bskmsbsl10}{}
+\DeclareFontShape{LBM}{bskms}{m}{ol}{<->bskmsol10}{}
+\endinput
diff --git a/fonts/boisik/lbmcmr.fd b/fonts/boisik/lbmcmr.fd
new file mode 100644
index 0000000000..67486dc0dc
--- /dev/null
+++ b/fonts/boisik/lbmcmr.fd
@@ -0,0 +1,3 @@
+\ProvidesFile{lbmcmr.fd}
+\DeclareFontFamily{LBM}{cmr}{}
+\DeclareFontShape{LBM}{cmr}{m}{n}{<->cmr10}{}
diff --git a/fonts/boisik/lbmenc.def b/fonts/boisik/lbmenc.def
new file mode 100644
index 0000000000..3b079b2229
--- /dev/null
+++ b/fonts/boisik/lbmenc.def
@@ -0,0 +1,7 @@
+\ProvidesFile{lbmenc.def}[2009/08/21 v0.5 Boisik encoding for second math symbol font]
+\DeclareFontEncoding{LBM}{}{}
+\DeclareTextSymbol{\textsection}{LBM}{240}
+\DeclareTextSymbol{\textdagger}{LBM}{241}
+\DeclareTextSymbol{\textdaggerdbl}{LBM}{242}
+\DeclareTextSymbol{\textparagraph}{LBM}{243}
+\endinput \ No newline at end of file
diff --git a/fonts/boisik/lbsbsk.fd b/fonts/boisik/lbsbsk.fd
new file mode 100644
index 0000000000..394f55d7e8
--- /dev/null
+++ b/fonts/boisik/lbsbsk.fd
@@ -0,0 +1,14 @@
+\ProvidesFile{lbsbsk.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{LBS}{bsk}{}
+\DeclareFontShape{LBS}{bsk}{m} {n} {<->ssub*bsksy/m/n}{}
+\DeclareFontShape{LBS}{bsk}{m} {sl}{<->ssub*bsksy/m/sl}{}
+\DeclareFontShape{LBS}{bsk}{m} {ol}{<->ssub*bsksy/m/ol}{}
+\DeclareFontShape{LBS}{bsk}{l} {n} {<->ssub*bsksy/m/n}{}
+\DeclareFontShape{LBS}{bsk}{m} {sc}{<->ssub*bsksy/m/n}{}
+\DeclareFontShape{LBS}{bsk}{m} {it}{<->ssub*bsksy/m/sl}{}
+\DeclareFontShape{LBS}{bsk}{m} {oi}{<->ssub*bsksy/m/n}{}
+\DeclareFontShape{LBS}{bsk}{m} {ui}{<->ssub*bsksy/m/n}{}
+\DeclareFontShape{LBS}{bsk}{bx}{n} {<->ssub*bsksy/b/n}{}
+\DeclareFontShape{LBS}{bsk}{b} {n} {<->ssub*bsksy/b/n}{}
+\DeclareFontShape{LBS}{bsk}{bx}{it}{<->ssub*bsksy/b/sl}{}
+\endinput
diff --git a/fonts/boisik/lbsbsksy.fd b/fonts/boisik/lbsbsksy.fd
new file mode 100644
index 0000000000..b5f397e233
--- /dev/null
+++ b/fonts/boisik/lbsbsksy.fd
@@ -0,0 +1,7 @@
+\ProvidesFile{lbsbsksy.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{LBS}{bsksy}{\skewchar\font130 }
+\DeclareFontShape{LBS}{bsksy}{m}{n}{<->bsksy10}{}
+\DeclareFontShape{LBS}{bsksy}{b}{n}{<->bsksyb10}{}
+\DeclareFontShape{LBS}{bsksy}{m}{sl}{<->bsksysl10}{}
+\DeclareFontShape{LBS}{bsksy}{m}{ol}{<->bsksyol10}{}
+\endinput
diff --git a/fonts/boisik/lbscmr.fd b/fonts/boisik/lbscmr.fd
new file mode 100644
index 0000000000..7d066efb04
--- /dev/null
+++ b/fonts/boisik/lbscmr.fd
@@ -0,0 +1,3 @@
+\ProvidesFile{lbscmr.fd}
+\DeclareFontFamily{LBS}{cmr}{}
+\DeclareFontShape{LBS}{cmr}{m}{n}{<->cmsy10}{}
diff --git a/fonts/boisik/lbsenc.def b/fonts/boisik/lbsenc.def
new file mode 100644
index 0000000000..ddfcc7e401
--- /dev/null
+++ b/fonts/boisik/lbsenc.def
@@ -0,0 +1,13 @@
+\ProvidesFile{lbsenc.def}[2009/08/21 v0.5 Boisik encoding for math symbol font]
+\DeclareFontEncoding{LBS}{}{}
+\DeclareTextSymbol{\textasteriskcentered}{LBS}{123}
+\DeclareTextSymbol{\textbackslash}{LBS}{110}
+\DeclareTextSymbol{\textbar}{LBS}{106}
+\DeclareTextSymbol{\textbardbl}{LBS}{107}
+\DeclareTextSymbol{\textbraceleft}{LBS}{102}
+\DeclareTextSymbol{\textbraceright}{LBS}{103}
+\DeclareTextSymbol{\textbullet}{LBS}{15}
+\DeclareTextSymbol{\textperiodcentered}{LBS}{121}
+\DeclareTextSymbol{\textbigcircle}{LBS}{13}
+\DeclareTextCommand{\textcircled}{LBS}[1]{\hmode@bgroup\ooalign{\hfil\raise.07ex\hbox{\upshape#1}\hfil\crcr\char13}\egroup}
+\endinput
diff --git a/fonts/boisik/ot1bsk.fd b/fonts/boisik/ot1bsk.fd
new file mode 100644
index 0000000000..577b198e36
--- /dev/null
+++ b/fonts/boisik/ot1bsk.fd
@@ -0,0 +1,15 @@
+\ProvidesFile{ot1bsk.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{OT1}{bsk}{}
+\DeclareFontShape{OT1}{bsk}{m} {n} {<-> bskr10}{}
+\DeclareFontShape{OT1}{bsk}{m} {sl}{<-> bskrsl10}{}
+\DeclareFontShape{OT1}{bsk}{m} {ol}{<-> bskrol10}{}
+\DeclareFontShape{OT1}{bsk}{m} {it}{<-> bski10}{}
+\DeclareFontShape{OT1}{bsk}{m} {oi}{<-> bskiol10}{}
+\DeclareFontShape{OT1}{bsk}{m} {ui}{<-> bskiu10}{}
+\DeclareFontShape{OT1}{bsk}{l} {n} {<-> bskrl10}{}
+\DeclareFontShape{OT1}{bsk}{m} {sc}{<-> bsksc10}{}
+\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/fonts/boisik/ot1bskf.fd b/fonts/boisik/ot1bskf.fd
new file mode 100644
index 0000000000..cd2b568909
--- /dev/null
+++ b/fonts/boisik/ot1bskf.fd
@@ -0,0 +1,10 @@
+\ProvidesFile{ot1bskf.fd}[2009/08/21 v0.5 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/fonts/boisik/ts1bsk.fd b/fonts/boisik/ts1bsk.fd
new file mode 100644
index 0000000000..b1a925f7e8
--- /dev/null
+++ b/fonts/boisik/ts1bsk.fd
@@ -0,0 +1,5 @@
+\ProvidesFile{ts1bsk.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{TS1}{bsk}{}
+\DeclareFontShape{TS1}{bsk}{m}{n} {<-> bskr10-TS1}{}
+\DeclareFontShape{TS1}{bsk}{m}{it}{<-> bski10-TS1}{}
+\endinput
diff --git a/fonts/boisik/ubskex.fd b/fonts/boisik/ubskex.fd
new file mode 100644
index 0000000000..6f9446fdea
--- /dev/null
+++ b/fonts/boisik/ubskex.fd
@@ -0,0 +1,5 @@
+\ProvidesFile{ubskex.fd}[2009/08/21 v0.5 Boisik font]
+\DeclareFontFamily{U}{bskex}{}
+\DeclareFontShape{U}{bskex}{m}{n}{<->sfixed*bskex10}{}
+\DeclareFontShape{U}{bskex}{b}{n}{<->sfixed*bskexb10}{}
+\endinput