summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-08-23 23:43:42 +0000
committerKarl Berry <karl@freefriends.org>2009-08-23 23:43:42 +0000
commit9c8a12c7a481e50886b68b686e6a7e1ae0d9e358 (patch)
tree8a9e7ad0eab763406a723a4464fee78e031a0079 /Master/texmf-dist
parent5233802c550f0cc1a8fb76ed9399eb1ce51e9600 (diff)
boisik 0.5 (21aug09)
git-svn-id: svn://tug.org/texlive/trunk@14833 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/README8
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdfbin333608 -> 0 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/boisik.pdfbin151534 -> 0 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/boisik.tex54
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/boisik-idiot.pdfbin0 -> 334567 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/boisik-idiot.tex (renamed from Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex)2
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/boisik.pdfbin0 -> 173146 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/boisik.tex49
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/bskrlogo10.mf (renamed from Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf)0
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/table.pdf (renamed from Master/texmf-dist/doc/fonts/boisik/table.pdf)bin427849 -> 464850 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/table.tex (renamed from Master/texmf-dist/doc/fonts/boisik/table.tex)10
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/testfont.pdfbin0 -> 868879 bytes
-rw-r--r--Master/texmf-dist/doc/fonts/boisik/example/testfont.tex225
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskarr10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskarrows.mf11
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskbase.mf170
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskext.mf3
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskhc10.mf101
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bski10-TS1.mf84
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskib10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf274
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf5030
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf4282
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ar.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-bb.mf130
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf22
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ma.mf264
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf26
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf47
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ms.mf153
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf211
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskma10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmab10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmath.mf158
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmathma.mf65
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmathms.mf72
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf42
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmib10.mf70
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskms10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmsb10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmsbsl10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmssl10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskroman.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksyb10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksybsl10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf20162
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksyol10.mf107
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksysl10.mf89
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfmbin0 -> 1244 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfmbin0 -> 948 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfmbin0 -> 680 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfmbin0 -> 1436 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfmbin0 -> 6324 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfmbin0 -> 6328 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfmbin0 -> 6324 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfmbin0 -> 6140 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfmbin0 -> 6148 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfmbin0 -> 1632 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfmbin0 -> 1696 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfmbin0 -> 2848 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfmbin0 -> 2856 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfmbin0 -> 1652 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfmbin0 -> 1656 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfmbin0 -> 1732 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfmbin0 -> 1884 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfmbin0 -> 1432 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfmbin0 -> 1348 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfmbin0 -> 12336 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfmbin0 -> 12156 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfmbin0 -> 12500 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfmbin0 -> 1232 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfmbin0 -> 5756 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfmbin0 -> 1584 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfmbin0 -> 1544 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfmbin0 -> 1664 bytes
-rw-r--r--Master/texmf-dist/tex/latex/boisik/boisik.sty638
-rw-r--r--Master/texmf-dist/tex/latex/boisik/il2bsk.fd23
-rw-r--r--Master/texmf-dist/tex/latex/boisik/il2bskf.fd3
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lblbskm.fd7
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lblcmr.fd3
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lblenc.def7
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbmbsk.fd14
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbmbskms.fd10
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbmcmr.fd3
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbmenc.def7
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbsbsk.fd14
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbsbsksy.fd7
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbscmr.fd3
-rw-r--r--Master/texmf-dist/tex/latex/boisik/lbsenc.def13
-rw-r--r--Master/texmf-dist/tex/latex/boisik/omlbskm.fd8
-rw-r--r--Master/texmf-dist/tex/latex/boisik/omsbsksy.fd8
-rw-r--r--Master/texmf-dist/tex/latex/boisik/omxbskex.fd6
-rw-r--r--Master/texmf-dist/tex/latex/boisik/ot1bsk.fd18
-rw-r--r--Master/texmf-dist/tex/latex/boisik/ot1bskf.fd3
-rw-r--r--Master/texmf-dist/tex/latex/boisik/ts1bsk.fd5
-rw-r--r--Master/texmf-dist/tex/latex/boisik/ubskex.fd5
110 files changed, 33070 insertions, 564 deletions
diff --git a/Master/texmf-dist/doc/fonts/boisik/README b/Master/texmf-dist/doc/fonts/boisik/README
index 148d007916e..7dfb79366cf 100644
--- a/Master/texmf-dist/doc/fonts/boisik/README
+++ b/Master/texmf-dist/doc/fonts/boisik/README
@@ -12,6 +12,7 @@ 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
@@ -31,7 +32,12 @@ Basic fonts
============
Roman: bskr10, bskrb10
Italic: bski10, bskib10
-Math: bskmi10, bsksy10, bskex10
+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
============
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf
deleted file mode 100644
index f849e5cd844..00000000000
--- a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik.pdf b/Master/texmf-dist/doc/fonts/boisik/boisik.pdf
deleted file mode 100644
index a6b861078b4..00000000000
--- a/Master/texmf-dist/doc/fonts/boisik/boisik.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik.tex b/Master/texmf-dist/doc/fonts/boisik/boisik.tex
deleted file mode 100644
index 191f1d45fa6..00000000000
--- a/Master/texmf-dist/doc/fonts/boisik/boisik.tex
+++ /dev/null
@@ -1,54 +0,0 @@
-\documentclass{article}
-\usepackage{color,graphicx}
-\pagestyle{empty}
-\pdfpkresolution 1200
-\pagecolor{black}
-\definecolor{modra}{rgb}{.372,.486,1}
-\definecolor{cervena}{rgb}{1,.219,.556}
-\font\logo bskrlogo10 at 30pt
-\font\bskt bskr10
-\font\bsk bskr10 at 8pt
-\font\bskbf bskrb10 at 8pt
-\font \bski bski10 at 8pt
-\font \bskmi bskmi10 at 8pt
-\font \bsksy bsksy10 at 8pt
-\font \bskex bskex10 at 8pt
-\font \bsksyb bsksy10 at 12pt
-\font\f bskmi10 at 30pt
-\pdfvorigin 1sp \pdfhorigin 1sp
-\pdfpagewidth 11cm \pdfpageheight 6cm
-\topmargin -.45in
-\oddsidemargin -.15in
-\def\para{\leavevmode\llap{\setbox0=\hbox{{\color{modra}\bsksyb\char123}\ }\ht0=0pt\dp0=0pt\lower.8ex\box0}}
-\def\Boisik{{\color{modra}Boisik}}
-\begin{document}
-\mbox{}\unitlength1pt
-\put(5,0){\color{modra}\logo Bo\kern-2pt\reflectbox{\char131}\kern-2.5pt\raisebox{-3pt}[0pt]{s}\kern-2.5pt\char131\kern-1ptk}
-\put(0,-10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt}
-\put(0,-6){\color{modra}\hbox to 10.7cm{\hfill \bskt MET\kern-.6exAF\kern-.2exONT TYP\kern-.2exEF\kern-.5exA\kern-.35exCE F\kern-.2exOR \TeX}}
-\color{white}
-\put(65,-40){\hbox to 8.2cm{\bsk A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}}
-\put(65,-50){\hbox to 8.2cm{\bskbf A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}}
-\put(65,-60){\hbox to 8.2cm{\bski A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}}
-\put(65,-70){\hbox to 8.2cm{\bsk a b c d e f g h i j k l m n o p q r s t u v w x y z}}
-\put(65,-80){\hbox to 8.2cm{\bskbf a b c d e f g h i j k l m n o p q r s t u v w x y z}}
-\put(65,-90){\hbox to 8.2cm{\bski a b c d e f g h i j k l m n o p q r s t u v w x y z}}
-\put(65,-100){\hbox to 8.2cm{\bsk 0 1 2 3 4 5 6 7 8 9 ( [ + - -- --- * / : ; = \char35\ \% \char141\ ] )}}
-\put(65,-112){\hbox to 8.2cm{\bsk fi \char130\ ff fl ffi ffl \char128\ \char129\ \char16\ \char17\ \char25\ \char26\ \char27\ \char28\ \char29\ \char30\ \char31\ \char36\ . , \char23\ \char22\ \char32\ \char21\ \char24\ \char18\ \char254\ \char255\ ` ' "}}
-\put(65,-122){\hbox to 8.2cm{\bsk \char0\ \char1\ \char2\ \char3\ \char4\ \char5\ \char6\ \char7\ \char8\ \char9\ \char10\ \char126\bskmi\ \char11\ \char12\ \char13\ \char14\ \char15\ \char16\ \char17\ \char18\ \char19\ \char20\ \char21\ \char22\ \char23\ \char25\ \char37\ \char27\ \char28\ \char29\ \char30\ \char 31\ \char32}}
-\put(65,-132){\hbox to 8.2cm{\bskmi \char96\ \char125\ \char64\ \char63\ \char92\ \char91\ \char93\ \char60\ \char62\ \char47\ \char94\ \char46\ \char40\ \char41\ \bsksy \char32\ \char33\ \char34\ \char35\ \char49\ \char50\ \char12\ \char97\ \color{modra}\bskex \char112\ \char84\ \char85}}
-\put(5,-80){\color{cervena}\font\bskex bskex10 at 30pt \bskex \put(0,0){\rotatebox{90}{\reflectbox{\char82}}}
-\put(0,-10){\bsksy \char35}\put(30,18){\bsksy \char34}\put(11,-13.5){\rotatebox{90}{\f\reflectbox{\char60}}}
-\color{modra}\put(5,7.5){\bskbf *}\put(9,8){\bskbf *}
-\put(23,10){\bskbf *}
-}
-\newpage\hsize 8.2cm\oddsidemargin 2.4cm\parindent 0pt
-\color{white}\bsk
-\para The `\Boisik\kern-.25ex' font is a Metafont typeface greatly inspired by Baskerville design. It is proposed as an alternative of Computer Modern fonts for mathematical typesetting: \Boisik{} will support all characters described in the book `\kern-.15ex{\bski Computer Modern Typefaces}' by D. E. Knuth. In addition, there is a character support for the Czech language. \hfill {\color{cervena}Á\,á\,È\,è\,Ï\,ï\,\kern.2exÉ\,é\,Ì\,ì\,Í\,í\,Ò\,ò\,Ø\,ø\,©\,¹\,«\kern.1ex»\,Ù\,ù\,Ú\,ú\,Ý\kern.1exý\,®\,¾}
-
-\para Current status of \Boisik{} is an alpha version: many features are missing, many don't work. I hope ({\bskbf not guarantee}) in the improvement in the future. Especially, next releases may extend symbols coverage to support following fonts: {\bski msam} and {\bski msbm} math fonts and text companion.\vskip 1mm
-
-\mbox{}\put(-63,10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt}
-\para Please, don't use \Boisik{} if you need excellent stability, precision, and quality of typesetting.
-
-\end{document}
diff --git a/Master/texmf-dist/doc/fonts/boisik/example/boisik-idiot.pdf b/Master/texmf-dist/doc/fonts/boisik/example/boisik-idiot.pdf
new file mode 100644
index 00000000000..729f4b06e6b
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/example/boisik-idiot.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex b/Master/texmf-dist/doc/fonts/boisik/example/boisik-idiot.tex
index 9c39d4aed32..4a95fadff9b 100644
--- a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex
+++ b/Master/texmf-dist/doc/fonts/boisik/example/boisik-idiot.tex
@@ -1,4 +1,4 @@
-\input czech.sty
+%\input czech.sty
\def\uv#1{\char254 #1\char255\relax}
\footline{}
\overfullrule 0pt
diff --git a/Master/texmf-dist/doc/fonts/boisik/example/boisik.pdf b/Master/texmf-dist/doc/fonts/boisik/example/boisik.pdf
new file mode 100644
index 00000000000..91d41555250
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/example/boisik.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/example/boisik.tex b/Master/texmf-dist/doc/fonts/boisik/example/boisik.tex
new file mode 100644
index 00000000000..9d3fe23dc7c
--- /dev/null
+++ b/Master/texmf-dist/doc/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/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf b/Master/texmf-dist/doc/fonts/boisik/example/bskrlogo10.mf
index 169612b9371..169612b9371 100644
--- a/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf
+++ b/Master/texmf-dist/doc/fonts/boisik/example/bskrlogo10.mf
diff --git a/Master/texmf-dist/doc/fonts/boisik/table.pdf b/Master/texmf-dist/doc/fonts/boisik/example/table.pdf
index 83b91edacad..57b58c5be72 100644
--- a/Master/texmf-dist/doc/fonts/boisik/table.pdf
+++ b/Master/texmf-dist/doc/fonts/boisik/example/table.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/table.tex b/Master/texmf-dist/doc/fonts/boisik/example/table.tex
index 2741c41db1b..5d767bd1280 100644
--- a/Master/texmf-dist/doc/fonts/boisik/table.tex
+++ b/Master/texmf-dist/doc/fonts/boisik/example/table.tex
@@ -128,8 +128,8 @@ fi&ff&fl&\char254\cr
\sy\char'032&\sy\char'036&\sy\char'166&\sy\char'157\cr
\sy\char'070&\sy\char'071&\sy\char'072&\sy\char'073\cr
\sy\char'061&\sy\char'062&\sy\char'063&\sy\char'162\cr
-\sy\char2&\sy\char3&\sy\char4&\sy\char5\cr
-\sy\char6&\sy\char7&\sy\char14&\sy\char'057\cr
+\sy\char'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
@@ -137,13 +137,13 @@ fi&ff&fl&\char254\cr
\break\leavevmode\vskip-1in
\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
\sy\char'170&\sy\char'172&\sy\char'173&\sy\char'060\cr
-\sy\char'174&\sy\char'175&\sy\char'176&\sy\char'177\cr
+\sy\char'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'010&\sy\char'011&\sy\char'012&\sy\char'013\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
}
-\end
\break\leavevmode\vskip-1in
\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr
\sy A&\sy B&\sy C&\sy D\cr
diff --git a/Master/texmf-dist/doc/fonts/boisik/example/testfont.pdf b/Master/texmf-dist/doc/fonts/boisik/example/testfont.pdf
new file mode 100644
index 00000000000..d4125cb14a7
--- /dev/null
+++ b/Master/texmf-dist/doc/fonts/boisik/example/testfont.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/fonts/boisik/example/testfont.tex b/Master/texmf-dist/doc/fonts/boisik/example/testfont.tex
new file mode 100644
index 00000000000..8fde757eaf5
--- /dev/null
+++ b/Master/texmf-dist/doc/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/Master/texmf-dist/fonts/source/public/boisik/bskarr10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskarr10.mf
new file mode 100644
index 00000000000..fa02c49f7c5
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskarrows.mf b/Master/texmf-dist/fonts/source/public/boisik/bskarrows.mf
new file mode 100644
index 00000000000..d2a8b6ff2f1
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
index 436053a6431..da24993fd16 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
@@ -11,14 +11,19 @@ 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;
-
+ 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;
@@ -43,13 +48,13 @@ def beginarithchar(expr c) = % ensure consistent dimensions for $+$, $-$, etc.
italcorr math_axis#*slant-.5u#;
adjust_fit(0,0); enddef;
-boolean test, test.alt; test=false; test.alt=true;
+boolean test, test.alt, test.nodraw; test=false; test.alt=true; test.nodraw:=true;
%%%%%%%%%%%Dots and commas
def dot(suffix $):=
- filldraw if square_dots: unitsquare shifted (.5,.5) scaled dot_size
- else: fullcircle scaled dot_size shifted z$
- fi;
+ 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;
@@ -221,16 +226,16 @@ def ital_hook(suffix $,$$)suffix modifier:=
pos$$(hair,150); pos$'(.5[hair,stem],90); penlabels($$,$');
z$$'=z$$r+hair*up; labels($$');
path _ih;
- _ih:=z$l{down}..z$'l..z$$l if test.modifier and (dpi<=300):-- else:..z$$'&z$$'..fi z$$r..z$'r..{up}z$r;
+ _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 $,$$):=
+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..z$$r{dir-120}..z$$'&z$$'..z$$l{dir60}..z$'l..{down}z$l;
+ _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
@@ -326,8 +331,11 @@ 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
@@ -339,6 +347,30 @@ def obl(suffix $,$$,$$$)suffix modifier:= % rounded corners
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;
@@ -359,7 +391,7 @@ vardef rundy(expr p, t)suffix modifier:= %rounded paths
enddef;
vardef bsktouch(expr _pa,_dira,_pb,_dirb):=
- ((_pa shifted (.5currentbreadth*_dira)) intersectionpoint (_pb shifted (.5currentbreadth*_dirb)))
+ ((_pa shifted (max(1,.5currentbreadth)*_dira)) intersectionpoint (_pb shifted (max(1,.5currentbreadth)*_dirb)))
enddef;
%%%%%%Symbols
@@ -398,10 +430,10 @@ vardef bskfrenchr(suffix $,$$):= %Reversed french quote
penlabels($,$',$$);
enddef;
-def less(suffix @,$,$$):=
- numeric _theta;
+def less(suffix @,$,$$)suffix modifier:=
+ numeric _theta; path _less;
pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@;
- if (unknown y$) and (unknown y$$): y$r=h+.5rule_thickness; fi;
+ if (unknown 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);
@@ -410,14 +442,15 @@ def less(suffix @,$,$$):=
z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
y@l'=y@l+o; z@l'=whatever[z@l,z$l];
bskpoints(@,$,hair,hair);
- filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle;
+ _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 @,$,$$):=
- numeric _theta;
- pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@;
- if (unknown y$) and (unknown y$$): y$l=h; fi;
+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);
@@ -426,14 +459,15 @@ def greater(suffix @,$,$$):=
z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
y@r'=y@r+o; z@r'=whatever[z@r,z$r];
bskpoints($,@,hair,hair);
- filldraw z@r..z@r'---z$rr..z$l---obl(@''',$l,$$r)---z$$r..z$$l---cycle;
+ _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 @,$,$$):= %Logical or shape
- numeric _theta;
+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$) and (unknown y$$): y$l=h; fi;
+ 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);
@@ -442,14 +476,15 @@ def logor(suffix @,$,$$):= %Logical or shape
z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
x@l'=x@l-o; z@l'=whatever[z@l,z$l];
bskpoints(@,$,hair,hair);
- filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle;
+ _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 @,$,$$):= %Logical and shape
- numeric _theta;
+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$) and (unknown y$$): y$r=-d; fi;
+ 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);
@@ -458,7 +493,8 @@ def logand(suffix @,$,$$):= %Logical and shape
z@'''=whatever[z@',z$l]=whatever[z@'',z$$r];
x@r'=x@r-o; z@r'=whatever[z@r,z$r];
bskpoints(@,$,hair,hair);
- filldraw z@r..z@r'---z$r...z$ll---obl(@''',$l,$$r)---z$$r..z$$l---cycle;
+ _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;
@@ -480,7 +516,7 @@ def draw_circle suffix smer:=
z8.smer{right}...z1.smer{z2-z8}...z2.smer{down}...z3.smer{z4-z2}...z4.smer{left}...z5.smer{z6-z4}...z6.smer{up}...z7.smer{z8-z6}...cycle
enddef;
-vardef vlnka(suffix $,$$):=
+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;
@@ -488,11 +524,36 @@ vardef vlnka(suffix $,$$):=
x$$-x$$a=1/4(x$$-x$);
pos$(hair,0); pos$$(hair,0); pos$a(curve,290); pos$$a(curve,250);
z$$a.s=z$$a.r+curve*unitvector(z$$-z$);
- filldraw z$r{z$a-z$}..z$a.r..z$$a.r..z$$a.s..{z$$-z$$a.r}z$$r..
- z$$l{z$$a-z$$}..z$$a.l..z$a.l..{z$-z$a.l}z$l..cycle;
penlabels($,$a,$$,$$a); labels($$a.s);
enddef;
+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);
@@ -568,6 +629,41 @@ vardef dvojsipka(suffix $,$$,@,@@):=
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;
@@ -733,7 +829,7 @@ newinternal l,r,shrink_fit; % adjustments to spacing
def charscription(expr width, height, depth)(text t):=
def _saved_char := t; enddef;
- _saved_w:=width; _saved_h:=height; _saved_d:=depth;
+ _saved_w:=width; _saved_u:=u; _saved_h:=height; _saved_d:=depth;
let bskcharscriptcmd=relax;
enddef;
@@ -749,7 +845,7 @@ def usechar text t=
WW:=w; HH:=h; DD:=d;
if not monospace:
save w,h,d; numeric w,h,d;
- w=_saved_w; h=_saved_h; d=_saved_d;
+ 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;
@@ -903,7 +999,8 @@ def font_setup =
enddef;
def filldraw text t:= bsk_savepen; path _bp; _bp:=t; bskfilldraw _bp; cullit; pickup bskoutlinepen.nib; erase bskfilldraw _bp; cullit; bsk_restorepen; enddef;
fi;
- if not known dpi: begingroup interim warningcheck:=0; numeric dpi; dpi:=pixels_per_inch; endgroup; fi;
+ 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 =
@@ -920,11 +1017,14 @@ def makebox(text rule) =
for y=0,asc_height,body_height,x_height,bar_height,-desc_depth,-body_depth:
rule((l,y)t_,(r,y)t_); endfor % horizontals
for x=l,r: rule((x,-body_depth)t_,(x,body_height)t_); endfor % verticals
- rule((r,-body_depth),(r,body_height));
+ 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_)); fi % italic correction
+ 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_:
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskext.mf b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
index e2242841872..a7af914a754 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
@@ -4,9 +4,6 @@ mode_setup; font_setup;
input bsklist-ex;
input bsksymbols;
-font_normal_space 5u#;
-font_normal_stretch 3u#; font_normal_shrink 2u#;
font_quad 15u#;
- font_extra_space 2u#;
font_x_height 159/36pt#;
bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskhc10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskhc10.mf
new file mode 100644
index 00000000000..98a6b14e29c
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bski10-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bski10-TS1.mf
new file mode 100644
index 00000000000..ec354c9f0b0
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
index b48ca282564..29af7e9af71 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
@@ -37,7 +37,7 @@ like_cap_hair#:=16/36pt#;
like_cap_stem#:=40/36pt#;
like_cap_curve#:=48/36pt#;
cap_ess#:=41/36pt#; % breadth in middle of uppercase s
-rule_thickness#:=.6pt#; % thickness of lines in math symbols
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
jut#:=25/36pt#; % protrusion of lowercase serifs
cap_jut#:=30/36pt#; % protrusion of uppercase serifs
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
index 41f83b76e64..afd5515056c 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
@@ -37,7 +37,7 @@ like_cap_hair#:=16/36pt#;
like_cap_stem#:=40/36pt#;
like_cap_curve#:=48/36pt#;
cap_ess#:=41/36pt#; % breadth in middle of uppercase s
-rule_thickness#:=.6pt#; % thickness of lines in math symbols
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
jut#:=25/36pt#; % protrusion of lowercase serifs
cap_jut#:=30/36pt#; % protrusion of uppercase serifs
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
index 9e6b56d6e10..feefcf51b1c 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
@@ -1,5 +1,7 @@
%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);
@@ -27,6 +29,7 @@ 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:
@@ -220,12 +223,13 @@ 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 "non";
+beginchar(chars.sign_blank_b,11.25u#,asc_height#,0); uni "0x2422";
italcorr bar_height#*slant;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
@@ -276,6 +280,7 @@ 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:
@@ -468,6 +473,7 @@ italcorr asc_height#*slant-.5u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(mft+.5u#,ic#);
endchar;
iff known chars.latin_dcaron:
@@ -622,6 +628,7 @@ 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:
@@ -924,6 +931,7 @@ filldraw z4r{right}..z2r---obl(9l,2r,10l)
..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;
@@ -1145,7 +1153,7 @@ else:
fi
(tim0,tim1)=p0 intersectiontimes p1;
(tim2,tim3)=p2 intersectiontimes p3;
-{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= if pair t: xpart(t) else: t fi enddef; fi
+{{ 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
@@ -1248,6 +1256,7 @@ italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(.5u#,ic#-1.5u#);
endchar;
iff known chars.latin_gacute:
@@ -1316,6 +1325,34 @@ 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[];
@@ -1342,6 +1379,7 @@ 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:
@@ -1392,6 +1430,7 @@ p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r)---z1r.._is
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;
@@ -1424,6 +1463,7 @@ p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r).more---z1r.._is
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;
@@ -1432,7 +1472,7 @@ numeric H; H=x_height;
pos1(stem,0); pos2(stem,0);
.5[x1,x2]=.5w; x1-x2=0;
y1=H-.3bar_height; y2=.35bar_height;
-ital_kooh(1,4); ital_hook(2,3);
+ital_kooh(1,4).alt; ital_hook(2,3);
filldraw _ih---_ik---cycle;
penlabels(0,1,2);
);
@@ -1444,6 +1484,7 @@ 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:
@@ -1454,6 +1495,7 @@ 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:
@@ -1597,7 +1639,7 @@ 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);
+ital_kooh(1,3).alt;
bot y4r=-d-o;
y5l=.75[y4l,y2];
z5'=z5l+.5stem*unitvector(z5-z4);
@@ -1612,6 +1654,7 @@ 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:
@@ -1622,6 +1665,7 @@ 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:
@@ -1701,6 +1745,7 @@ italcorr x_height#*slant;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(-u#,ic#-.5u#);
endchar;
iff known chars.latin_kcaron:
@@ -1768,10 +1813,11 @@ penlabels(1,2);
iff known chars.latin_l:
bskchar "The italic letter l";
beginchar(chars.latin_l,6.5u#, asc_height#, 0); uni "0x006C";
-italcorr asc_height#*slant-1.25u#;
+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:
@@ -1856,7 +1902,7 @@ endchar;
iff known chars.latin_m:
bskchar "The italic letter m";
beginchar(chars.latin_m,16u#,x_height#,0); uni "0x006D";
-italcorr x_height#*slant-2u#;
+italcorr 1/3x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; oblu:=3oblu;
@@ -1872,7 +1918,7 @@ x4=x5=x5'=.5w; y4=.5[bar_height,x_height];
rt x9r=w-2.5u; x10=x9; y10=.35bar_height; y9=y4;
y5=u; bot y5'=0; y8=y3; x8=.5[x4,x9]+.5u;
top y3r=x_height+o; x3=.5[x2,x4]+.5u;
-ital_kooh(1,7); ital_hook(10,11);
+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;
@@ -1889,6 +1935,7 @@ filldraw z2r if monospace:---z1r else:{up}fi..z3l..z4l---z5l..z5'l..z5'r..z5r
..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)(
@@ -1901,7 +1948,7 @@ x1=x2=x2'; x1l=2.5u;
y1=H-.3bar_height; y2=u; bot y2'=0;
x4=x5; rt x4r=w-2.5u; y4=.5[bar_height,x_height]; y5=.35bar_height;
top y3r=x_height+o; x3=.5[x2,x4]+.5u;
-ital_kooh(1,7); ital_hook(5,6);
+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;
@@ -1914,10 +1961,11 @@ penlabels(1,2,2',3,4,5);
iff known chars.latin_n:
bskchar "The italic letter n";
beginchar(chars.latin_n,11.5u#, x_height#, 0); uni "0x006E";
-italcorr x_height#*slant-2u#;
+italcorr 1/3x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_ncaron:
@@ -2030,6 +2078,7 @@ italcorr .5x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(mft,ic#);
endchar;
iff known chars.latin_oacute:
@@ -2171,7 +2220,7 @@ italcorr (asc_height#-.75x_height#)*slant;
adjust_fit(0,0);
pickup tiny.nib;
multiply(.85)(curve,hair,vair);
-usechar shifted (-x1l,-y4l) scaled .5 shifted (HH*slant,HH);
+usechar shifted (-x1l,-y2l) scaled .5 shifted (u+HH*slant,HH);
endchar;
charscription(10u,x_height,.85desc_depth)(
@@ -2302,11 +2351,12 @@ filldraw subpath(rundy(p0,(tim0,2curve)),infinity) of p0
..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 "0x0070";
+beginchar(chars.latin_p,12u#,asc_height#,desc_depth#); uni "0x00FE";
italcorr bar_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
@@ -2370,6 +2420,7 @@ filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
..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)(
@@ -2401,6 +2452,7 @@ italcorr x_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#-2u#);
endchar;
iff known chars.latin_racute:
@@ -2484,6 +2536,7 @@ italcorr x_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5u#,ic#-.5u#);
endchar;
iff known chars.latin_scaron:
@@ -2652,6 +2705,7 @@ 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:
@@ -2740,7 +2794,7 @@ x1=x2; lft x1l=2u; x3=x3'=x4; rt x3r=w-2u;
y1=H-.3bar_height; y2=y4=.35bar_height;
y3=h-u; top y3'=h; bot y6l=-o; x6=1/3[x2,x4];
x7r=x3l; y7=bar_height;
-ital_kooh(1,0); ital_hook(4,5).alt;
+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;
@@ -2759,6 +2813,7 @@ italcorr x_height#*slant-.75u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_uacute:
@@ -2950,6 +3005,7 @@ filldraw subpath(rundy(p0,0),infinity) of p0
..{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)(
@@ -2996,6 +3052,7 @@ italcorr bar_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.25u#,ic#-.5u#);
endchar;
iff known chars.latin_wcircumflex:
@@ -3061,12 +3118,14 @@ rt x3r=w-3.5u; y3=y13=.3bar_height; x13r=w-x3r;
rt x4l=w-.5u; top y4=y14=.4bar_height; bot y3'l=bot y13'l=-o; x3'=.45[x3,x4]; x13'=.45[x13,x14];
lft x14r=0;
z4'=z4r+hair*up; z14'=z14r+hair*up;
-p0=z2'..z2l{dir60}..z1'l..z1l---z3l..z3'l..z4l if dpi>300:..z4'&z4'.. else:&z4l{up}..{down}z4r& fi z4r..z3'r..z3r---z1r..z1'r..z2r+left{dir-100}..z2'+left;
-p1=if dpi>300:z12'.. fi z12l..z11'l..z11l---z13l..z13'l..z14l if dpi>300:..z14'&z14'..else:&z14l{up}..{down}z14r& fi z14r..z13'r..z13r---z11r..z11'r..z12r if dpi>300:..z12'fi;
+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 dpi>300:9 else: 8 fi;
+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
@@ -3076,6 +3135,7 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..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)(
@@ -3110,6 +3170,7 @@ 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:
@@ -3202,6 +3263,7 @@ italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#-.25u#);
endchar;
iff known chars.latin_zcaron:
@@ -3746,16 +3808,16 @@ endchar;
iff known chars.sign_query:
bskchar "Italic question mark";
-beginchar(chars.sign_query, 9u#+punct_fit#, asc_height#, 0); uni "0x003F";
+beginchar(chars.sign_query, 9u#, asc_height#, 0); uni "0x003F";
italcorr .5[asc_height#,x_height#]*slant;
-adjust_fit(0,0);
+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+punct_fit; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-punct_fit)+punct_fit-hair;
+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=.5(w-punct_fit)+punct_fit; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+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;
@@ -3763,6 +3825,128 @@ 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";
@@ -3799,6 +3983,58 @@ 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";
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
index 9dcc4239b2a..e2e274ed0ca 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
@@ -1,11 +1,8 @@
-%Boisik letters in other forms (greek, calligraphic)
+%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;
-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;
+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);
@@ -17,14 +14,112 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
---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_Delta:
-bskchar "The Greek letter Delta";
-beginchar(chars.greek_Delta,14u#,cap_height#,0); uni "0x0394";
-adjust_fit(cap_serif_fit#,cap_serif_fit#);
-numeric alpha, right_stem, left_stem, old_jut;
+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;
@@ -44,16 +139,57 @@ 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_alt:
-bskchar "The Greek letter Delta alternative";
-beginchar(chars.greek_Delta_alt,13u#,cap_height#,0); uni "non";
-adjust_fit(0,0);
+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;
-numeric alpha, right_stem, left_stem, old_jut;
+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;
@@ -67,15 +203,138 @@ 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);
+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;
@@ -86,18 +345,13 @@ 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;
+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;
-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#);
+charscription(13u,cap_height,0)(
numeric alpha, right_stem, left_stem;
-pickup tiny.nib;
lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0;
x3l=.5w; top y3l=h+apex_o;
left_stem=cap_hair;
@@ -114,6 +368,49 @@ filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)---
{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:
@@ -146,14 +443,82 @@ 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_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#);
+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;
@@ -168,14 +533,51 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
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_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);
+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);
@@ -197,14 +599,114 @@ filldraw subpath(0, length(p1)-1) of p1..z3f---obl(5r,3f,2r.b)---
{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);
@@ -216,21 +718,105 @@ 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
+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;
-path p[]; numeric tim[]; oblu:=2oblu;
-pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+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;
@@ -243,9 +829,8 @@ x5=x6=.5w;
}};
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;
+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));
@@ -267,12 +852,7 @@ infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2 ..
penlabels(1,2,3,4,5,6);
endchar;
-iff known chars.greek_Psi:
-bskchar "The Greek letter Psi";
-beginchar(chars.greek_Psi,14u#,cap_height#,0); uni "0x03A8";
-italcorr .5[x_height#,cap_height#]*slant;
-adjust_fit(0,0);
-pickup tiny.nib;
+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);
@@ -295,14 +875,83 @@ filldraw subpath(0,rundy(p2,length(p2)).zpet) of p2..p3..
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_Omega:
-bskchar "The Greek letter Omega";
-beginchar(chars.greek_Omega,14u#,cap_height#,0); uni "0x03A9";
-italcorr x_height#*slant;
+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);
@@ -322,6 +971,399 @@ filldraw z5'l{z1-z5}..z1l..z4l..z3l..{z6-z3}z6'l..z8f...z8d...z8c..
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:
@@ -352,6 +1394,78 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p0,tim1),infinity)
..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:
@@ -386,6 +1500,90 @@ filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
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:
@@ -420,6 +1618,122 @@ filldraw z0r..subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
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:
@@ -448,7 +1762,63 @@ filldraw subpath(0,rundy(p0,(tim0,.7(y7r-y2))).zpet) of p0
..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;
@@ -463,7 +1833,7 @@ pos0(stem,150);
pos1(hair,90); pos2(stem,0); pos3(.9stem,0); pos4(hair,-90); pos5(hair,180);
pos6(hair,180); pos7(hair,90); pos8(stem,0);
x1=.5[u,x2]; top y1r=h+o; lft x0r=u; y0=y1-stem; z0'=(x0r,y0l);
-x3=x2=.5w-.5stem; y3=-2/3d; y2=bar_height; bot y4r=-d; y3-y4=(x3-x4);
+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;
@@ -482,6 +1852,67 @@ filldraw subpath(0,rundy(p0,(tim0,y7r-y2)).zpet) of p0
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:
@@ -506,6 +1937,77 @@ 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:
@@ -533,6 +2035,163 @@ 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:
@@ -567,6 +2226,95 @@ filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
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:
@@ -598,13 +2346,86 @@ filldraw subpath(0,rundy(p0,tim0).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(serif_fit#,0);
+adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; path p[];
pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
@@ -615,20 +2436,153 @@ 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
+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(serif_fit#,0);
+adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; path p[];
pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
@@ -647,16 +2601,60 @@ p1=z4r---z3r..z2r..{z4-z1}z1r;
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(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+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;
@@ -675,7 +2673,26 @@ infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
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);
+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:
@@ -709,6 +2726,85 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..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:
@@ -727,6 +2823,118 @@ 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:
@@ -762,6 +2970,180 @@ filldraw z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b
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";
@@ -788,6 +3170,69 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
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";
@@ -957,7 +3402,7 @@ iff known chars.greek_mu:
bskchar "The Greek letter mu";
beginchar(chars.greek_mu,10.5u#,x_height#,desc_depth#); uni "0x03BC";
italcorr x_height#*slant-.75u#;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; path p[]; oblu:=2hair;
pos1(stem,0); pos2(stem,0); pos2'(stem,0);
@@ -965,7 +3410,43 @@ pos3(stem,0);
pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(stem,180);
pos10(stem,0); pos11(stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
lft x1l=lft x2l=1.5u; top y1=h; y2=0;
-x3l=x2; bot y3=-d+o;
+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];
@@ -986,6 +3467,51 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..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;
@@ -1045,6 +3571,54 @@ 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:
@@ -1086,20 +3660,170 @@ filldraw subpath(0,rundy(p0,tim8).zpet) of p0..subpath(rundy(p0,tim9),rundy(p0,t
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";
+bskchar "The Greek letter omicron";
beginchar(chars.greek_omicron,9u#,x_height#,0); uni "0x03BF";
italcorr bar_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
-pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+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;
-penlabels(1,2,3,4);
+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:
@@ -1132,6 +3856,78 @@ filldraw subpath(0,rundy(p0,tim0).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:
@@ -1164,18 +3960,75 @@ filldraw subpath(0,rundy(p0,tim0).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(curve,0); pos7(stem,90);
+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;
@@ -1205,7 +4058,18 @@ infill subpath(0,rundy(p0,tim2).zpet) of p0
..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'');
+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:
@@ -1248,6 +4112,7 @@ infill subpath(0,rundy(p0,tim2).zpet) of p0
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:
@@ -1270,6 +4135,64 @@ 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";
@@ -1292,6 +4215,70 @@ 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";
@@ -1306,6 +4293,72 @@ 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)));
@@ -1337,6 +4390,7 @@ filldraw z1l{up}..z4l..subpath(1,rundy(p0,tim0).zpet) of p0
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:
@@ -1356,6 +4410,56 @@ 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:
@@ -1379,6 +4483,55 @@ 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:
@@ -1402,6 +4555,7 @@ 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:
@@ -1422,6 +4576,53 @@ 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:
@@ -1443,17 +4644,73 @@ 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(.5[stem,curve],0); pos2(hair,90); pos3(.5[stem,curve],180); pos4(hair,270);
+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);
@@ -1483,7 +4740,26 @@ 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);
+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:
@@ -1527,17 +4803,62 @@ infill subpath (0, rundy(p1,tim17).zpet) of p1
..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(.5[hair,stem],0); pos4(stem,0); pos5(hair,90);
-pos6(stem,180); pos7(hair,-90); pos8(hair,0); pos9(hair,0);
+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;
@@ -1556,7 +4877,28 @@ filldraw subpath(0,rundy(p0,tim0).zpet) 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'');
+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:
@@ -1590,6 +4932,7 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..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:
@@ -1627,6 +4970,87 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
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";
@@ -1663,6 +5087,94 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..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:
@@ -1701,6 +5213,7 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..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:
@@ -1735,5 +5248,1378 @@ filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
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/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
index bf4606bcb02..2fa53b208f6 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
@@ -1,4 +1,7 @@
%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;
@@ -16,7 +19,7 @@ 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--
+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}..
@@ -152,6 +155,18 @@ 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";
@@ -184,12 +199,36 @@ infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle;
penlabels(1,1',2,2',3,3',4,5,6,7,8,9); labels(3'');
endchar;
-iff known chars.latin_B:
-bskchar "The letter B";
-beginchar(chars.latin_B,13u#,cap_height#,0); uni "0x0042";
-italcorr .5[x_height#,cap_height#]*slant-.25u#;
-adjust_fit(cap_serif_fit#,0);
+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;
@@ -214,6 +253,136 @@ filldraw subpath(0,rundy(p0,tim1).zpet) of p0
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)(
@@ -246,11 +415,12 @@ 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 "0x10C";
+beginchar(chars.latin_Ccaron,13.3u#,Acc_height#,0); uni "0x010C";
italcorr cap_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
@@ -292,6 +462,27 @@ 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";
@@ -350,6 +541,62 @@ 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";
@@ -436,6 +683,29 @@ infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3
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;
@@ -458,6 +728,7 @@ 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:
@@ -471,6 +742,49 @@ 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;
@@ -533,6 +847,7 @@ 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:
@@ -647,6 +962,17 @@ 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";
@@ -706,9 +1032,30 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z7l+hai
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;
+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;
@@ -732,7 +1079,7 @@ if monospace:
penlabels(4); labels(4a,4b,4c);
else: p=reverse arm_top_r_points(2r,4);
fi;
-x2l'=x2l; z2l'=whatever[z2l+alpha*cap_hair*right,z7];
+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');
@@ -752,7 +1099,7 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
diag_serif(7r,2r)---obl(8l,7r,9l)---z9l{right}..(x1l,y5'l)---cycle;
oblu:=2oblu; if x8r+oblu>x9r: oblu:=f_obl; fi
infill (x1l,y5'r)..{left}z9r---obl(8r,9r,2l')---
- obl(2l',7l,1l)--cycle;
+ obl(2l',7l,1l).more--cycle;
penlabels(1,2,2l',5,5',6,6',7,8,8',9);
);
@@ -830,12 +1177,7 @@ infill z1l.b{down}..{left}z1l.c+top o*down..z7r..{right}z2l.c+top o*up..z2l.b---
penlabels(1,2,2l',5,5',6,6',7);
endchar;
-iff known chars.latin_F:
-bskchar "The letter F";
-beginchar(chars.latin_F,12u#,cap_height#,0); uni "0x0046";
-italcorr cap_height#*slant;
-adjust_fit(cap_serif_fit#,0);
-pickup tiny.nib;
+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);
@@ -851,31 +1193,78 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
{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, po; numeric tim[], sersh;
+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;
-p:=z1r{down}..z2r..z3r..z4r..{down}cycle;
-po:=z1l{down}..z2l..z3l..z4l..{down}cycle;
-tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p);
+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 po; z5'e=.35[z5'b,z5'd];
-tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes po);
+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 po; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left;
-tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes po);
-tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p);
+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 p}z5'..z5'a--z5'b---z5'e..subpath (tim3,5) of po..
- reverse (subpath(0,tim5) of p---z5''f..{left}z6l..z6l+serif_o*up--z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e..
- reverse subpath (1,tim4) of po) & cycle;
+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);
);
@@ -886,6 +1275,7 @@ 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:
@@ -954,6 +1344,58 @@ 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";
@@ -1039,6 +1481,7 @@ 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:
@@ -1063,6 +1506,19 @@ 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";
@@ -1097,6 +1553,30 @@ infill obl(13l,12l,8r)---z8r{dir-100}..z6r---z5r..{dir100}z7r---obl(12l,7r,13l)-
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;
@@ -1115,6 +1595,7 @@ 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:
@@ -1247,6 +1728,17 @@ 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";
@@ -1270,6 +1762,20 @@ filldraw z1l.b{down}..{left}z1l.c..z3l+hair*left
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;
@@ -1287,6 +1793,7 @@ 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:
@@ -1309,6 +1816,40 @@ 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";
@@ -1362,6 +1903,7 @@ 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:
@@ -1386,6 +1928,52 @@ 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;
@@ -1404,6 +1992,7 @@ italcorr .5bar_height#*slant;
adjust_fit(cap_serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_Ldot:
@@ -1461,6 +2050,32 @@ 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";
@@ -1525,6 +2140,53 @@ 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)(
@@ -1557,6 +2219,7 @@ 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:
@@ -1614,6 +2277,87 @@ 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";
@@ -1658,6 +2402,7 @@ 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:
@@ -1793,6 +2538,49 @@ 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);
@@ -1910,6 +2698,32 @@ 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:
@@ -1962,6 +2776,30 @@ 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";
@@ -1988,12 +2826,7 @@ infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle;
penlabels(1,2,3,4,5,6,7);
endchar;
-iff known chars.latin_Q:
-bskchar "The letter Q";
-beginchar(chars.latin_Q,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x0051";
-italcorr .5cap_height#*slant+.5u#;
-adjust_fit(0,0);
-pickup tiny.nib;
+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];
@@ -2007,7 +2840,7 @@ x6=x1r; z6=z5+whatever*(direction tim1 of p0) rotated 180;
pos8(cap_curve,angle(z2-z4));
z7=z6; x8=.5[x5r,x3r]; y8r=-d; x9=w if not monospace: +cap_stem fi; y9=.5y6;
p1:=z5l{z6-z5}..{z6-z3}z6l;
-p2:=z9{dir-125}..z8l..{z6-z3}z7l..z7r{if dpi<=300:dir40 else:(x4,y3)-z6 fi}..z8r..{dir70}z9;
+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;
@@ -2021,6 +2854,89 @@ filldraw subpath(0,rundy(p0,tim6).zpet) of p0..
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:
@@ -2100,6 +3016,7 @@ 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:
@@ -2158,6 +3075,35 @@ 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";
@@ -2194,6 +3140,45 @@ 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";
@@ -2243,6 +3228,57 @@ 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[];
@@ -2254,6 +3290,10 @@ 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)));
@@ -2270,6 +3310,25 @@ 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:
@@ -2316,6 +3375,27 @@ 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";
@@ -2327,6 +3407,28 @@ 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";
@@ -2396,6 +3498,7 @@ 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:
@@ -2420,6 +3523,18 @@ 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";
@@ -2435,6 +3550,24 @@ _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";
@@ -2505,6 +3638,7 @@ 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:
@@ -2628,7 +3762,6 @@ 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";
@@ -2640,6 +3773,45 @@ 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";
@@ -2668,6 +3840,27 @@ filldraw z1l---z1l.a..{right}z1l.c..z1l.b
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";
@@ -2675,7 +3868,33 @@ italcorr cap_height#*slant+.75u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
numeric alpha, right_stem, left_stem;
pickup tiny.nib;
-lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+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;
@@ -2688,11 +3907,12 @@ 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;
+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)(
@@ -2730,6 +3950,7 @@ 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:
@@ -2776,12 +3997,103 @@ usechar;
umlaut(100,101);
endchar;
-iff known chars.latin_X:
-bskchar "The letter X";
-beginchar(chars.latin_X,15u#,cap_height#,0); uni "0x0058";
-italcorr cap_height#*slant+.4u#;
+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;
@@ -2805,6 +4117,59 @@ filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)---
{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)(
@@ -2829,10 +4194,11 @@ penlabels(1,2,3,4); labels(0',0'',0''',0,0'''',2',4l');
iff known chars.latin_Y:
bskchar "The letter Y";
beginchar(chars.latin_Y,14u#,cap_height#,0); uni "0x0059";
-italcorr cap_height#*slant+.75u#;
+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:
@@ -2890,6 +4256,42 @@ 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";
@@ -2952,6 +4354,7 @@ italcorr cap_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5u#,.75ic#);
endchar;
iff known chars.latin_Zcaron:
@@ -2987,6 +4390,43 @@ usechar;
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[];
@@ -3026,8 +4466,6 @@ infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12);
);
-bskboundary;
-
iff known chars.latin_a:
bskchar "The letter a";
beginchar(chars.latin_a,9u#,x_height#,0); uni "0x0061";
@@ -3214,6 +4652,111 @@ infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
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";
@@ -3248,9 +4791,94 @@ 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 "non";
+beginchar(chars.sign_blank_b,11u#,asc_height#,0); uni "0x2422";
italcorr .5x_height#*slant;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
@@ -3356,6 +4984,54 @@ 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";
@@ -3379,7 +5055,7 @@ filldraw subpath(0,rundy(p1,2).zpet) of p1
..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
..subpath(rundy(p1,tim1),infinity) of p1..
z4r..z4'..{dir(angle(z4l-z4')-20)}z4l..
- z3'r..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up-- else: --- fi cycle;
+ 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;
@@ -3411,7 +5087,7 @@ p3:=z5rr---z6r;
(tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3;
(tim12,tim13)=p1 intersectiontimes p2;
(tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2;
-{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
+{{ 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
@@ -3457,7 +5133,7 @@ p3:=z5rr---z6r;
(tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3;
(tim12,tim13)=p1 intersectiontimes p2;
(tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2;
-{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
+{{ 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
@@ -3508,7 +5184,7 @@ iff known chars.latin_d:
bskchar "The letter d";
beginchar(chars.latin_d,11u#,asc_height#,0); uni "0x0064";
italcorr asc_height#*slant-.75u#;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,serif_fit#);
pickup tiny.nib;
usechar;
endchar;
@@ -3517,13 +5193,96 @@ iff known chars.latin_dcaron:
bskchar "The letter d with caron (treated like comma)";
beginchar(chars.latin_dcaron,11u#,asc_height#,0); uni "0x010F";
italcorr asc_height#*slant+2u#;
-adjust_fit(serif_fit#,0);
+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";
@@ -3661,7 +5420,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi;
+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)));
@@ -3797,6 +5556,95 @@ 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";
@@ -3862,7 +5710,7 @@ x4l:=x4l-shift; x4r:=x4r-shift;
x5l=x6l; z5r=z2l; y6=-hair; y7=-.5d;
rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d;
p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up fi;
+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)));
@@ -3905,7 +5753,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+o*up}z0 else: z0' fi if dpi<=300: +up fi;
+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)));
@@ -3954,7 +5802,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+.5o*up}z0 else: z0' fi if dpi<=300: +up fi;
+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)));
@@ -3967,22 +5815,31 @@ 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;
+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)
+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'');
);
@@ -4042,6 +5899,65 @@ filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
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";
@@ -4082,6 +5998,46 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
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;
@@ -4186,6 +6142,53 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l..
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";
@@ -4308,6 +6311,59 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
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);
@@ -4419,6 +6475,117 @@ 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);
@@ -4468,6 +6635,65 @@ 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";
@@ -4662,6 +6888,61 @@ 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";
@@ -4763,6 +7044,78 @@ 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;
@@ -4822,6 +7175,76 @@ 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";
@@ -4922,6 +7345,34 @@ 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";
@@ -4973,8 +7424,95 @@ z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
z0=(x4r,y1');
tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair)));
tim2=xpart(p3 intersectiontimes (z0--(x5,y0)));
-filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21..
- subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: oblu fi)).zpet) of p3..broken_stem_draw(1',1,2)---cycle;
+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;
@@ -5064,6 +7602,60 @@ 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";
@@ -5246,6 +7838,49 @@ 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);
@@ -5366,6 +8001,83 @@ 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";
@@ -5401,7 +8113,7 @@ iff known chars.latin_q:
bskchar "The letter q";
beginchar(chars.latin_q,11u#,x_height#,desc_depth#); uni "0x0071";
italcorr x_height#*slant;
-adjust_fit(serif_fit#,0);
+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);
@@ -5429,6 +8141,84 @@ 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);
@@ -5513,6 +8303,62 @@ 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[];
@@ -5586,6 +8432,64 @@ 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";
@@ -5683,7 +8587,7 @@ top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o;
pos5(hair,90); pos6(hair,90);
y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down;
filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}..{left}z3l
- ..z2l---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100)..
+ ..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);
);
@@ -5719,6 +8623,34 @@ 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";
@@ -5766,6 +8698,24 @@ filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}
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);
@@ -5918,6 +8868,65 @@ 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";
@@ -5977,6 +8986,64 @@ filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
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;
@@ -6060,6 +9127,79 @@ 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";
@@ -6092,6 +9232,69 @@ filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)
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[];
@@ -6190,6 +9393,86 @@ 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;
@@ -6251,13 +9534,61 @@ usechar;
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 y4r=h+o;
+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);
@@ -6282,6 +9613,54 @@ 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;
@@ -6353,6 +9732,45 @@ 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);
@@ -6406,6 +9824,61 @@ 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[];
@@ -6469,6 +9942,87 @@ 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);
@@ -6547,6 +10101,56 @@ 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[];
@@ -6590,6 +10194,85 @@ 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);
@@ -6628,6 +10311,77 @@ 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);
@@ -6657,6 +10411,46 @@ 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];
@@ -6703,6 +10497,103 @@ 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);
@@ -6742,19 +10633,92 @@ 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#+punct_fit#, asc_height#, 0); uni "0x003F";
+beginchar(chars.sign_query, 9.5u#, asc_height#, 0); uni "0x003F";
italcorr .5[asc_height#,x_height#]*slant-.25u#;
-adjust_fit(0,0);
+adjust_fit(punct_fit#,0);
pickup tiny.nib;
path p[];
-bot z0=(2u+.5dot_size+punct_fit,.5dot_size); dot(0);
+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-punct_fit)+punct_fit; top y1r=h+o;
-y2''=1/4[h,x_height]; lft x2r=u+punct_fit;
+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]];
@@ -6765,6 +10729,126 @@ filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{r
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";
@@ -6809,6 +10893,45 @@ filldraw z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r..z2'
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";
@@ -6892,9 +11015,8 @@ p2=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r;
filldraw subpath(0,rundy(p0,tim1).zpet) of p0..
subpath(rundy(p1,tim2),rundy(p1,tim3).zpet) of p1..
subpath(rundy(p0,tim4),length p0) of p0..cycle;
-if bold_face: oblu:=.75f_obl; fi
+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/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
index 30aed95b08a..48bae140b01 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
@@ -58,8 +58,8 @@ ligtable "X": "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.
ligtable "Y": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "r" vkr, chars.latin_rcaron mkr, "s" ukr, chars.latin_scaron vkr, "u" vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, chars.latin_Yacute: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr;
ligtable "Z": chars.latin_Zcaron: "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "/" xkr;
-ligtable "!": "`" =: chars.sign_spanish_shriek;
-ligtable "?": "`" =: chars.sign_spanish_query;
+ligtable "!": "`" =: chars.sign_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;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
index d3b95788e78..a557c7dd849 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
@@ -71,8 +71,8 @@ ligtable ")": "J" kern 1u#;
ligtable "[": "a" vkr, "á" vkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "A" vkr;
ligtable "/": "a" wkr, "A" wkr, chars.latin_Aacute wkr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr;
ligtable chars.polish_cross: "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#);
-ligtable "!": "`" =: chars.sign_spanish_shriek;
-ligtable "?": "`" =: chars.sign_spanish_query;
+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;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
index 048a9731f39..ed29032a97f 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
@@ -84,8 +84,8 @@ ligtable ")": "J" kern 1u#;
ligtable "[": "A" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, "q" mkr;
ligtable "/": "A" wkr, chars.latin_Aacute wkr, "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "q" vkr, "o" ukr, chars.latin_oacute ukr, "q" ukr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr;
ligtable chars.polish_cross: "l" kern -if monospace: 9u# else: 6u# fi -2letter_fit#, "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#);
-ligtable "!": "`" =: chars.sign_spanish_shriek;
-ligtable "?": "`" =: chars.sign_spanish_query;
+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;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
index 07ab2fabc82..28cbd4d774c 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
@@ -83,7 +83,7 @@ chars.sign_peso:=145;
chars.sign_lira:=146;
chars.sign_recipe:=147;
chars.sign_interrobang:=148;
-chars.sign_gnaborretni :=149;
+chars.sign_gnaborretni:=149;
chars.sign_dong:=150;
chars.sign_trademark:=151;
chars.sign_pertenthousand:=152;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ar.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ar.mf
new file mode 100644
index 00000000000..25510364146
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bsklist-bb.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-bb.mf
new file mode 100644
index 00000000000..7b2efdd7e7a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
index e9dc43d6e4d..73d9f6db501 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
@@ -61,9 +61,18 @@ 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;
@@ -125,6 +134,8 @@ 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;
@@ -134,12 +145,23 @@ 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
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ma.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ma.mf
new file mode 100644
index 00000000000..4575df449b2
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
index 9cc7599a7ad..55ab3aca391 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
@@ -1,33 +1,7 @@
%Boisik list for math font (upright symbols)
-chars.harpoon_left_up:=40;
-chars.harpoon_left_down:=41;
-chars.harpoon_right_up:=42;
-chars.harpoon_right_down:=43;
-chars.arrow_hook_left:=44;
-chars.arrow_hook_right:=45;
-chars.math_triangle_right:=46;
-chars.math_triangle_left:=47;
-chars.numeral_zero:=48;
-chars.numeral_one:=49;
-chars.numeral_two:=50;
-chars.numeral_three:=51;
-chars.numeral_four:=52;
-chars.numeral_five:=53;
-chars.numeral_six:=54;
-chars.numeral_seven:=55;
-chars.numeral_eight:=56;
-chars.numeral_nine:=57;
chars.sign_period:=58;
chars.sign_comma:=59;
chars.math_less:=60;
chars.math_virgule:=61;
chars.math_greater:=62;
-chars.math_five_star:=63;
-
-chars.symbol_flat:=91;
-chars.symbol_natural:=92;
-chars.symbol_sharp:=93;
-chars.symbol_smile:=94;
-chars.symbol_frown:=95;
-
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
index 35e3e4cf6e0..a6a429cffaa 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
@@ -41,6 +41,28 @@ 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";
@@ -68,6 +90,13 @@ 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";
@@ -97,7 +126,19 @@ chars.latin_y:=ASCII"y";
chars.latin_z:=ASCII"z";
chars.latin_dotless_i:=123;
chars.latin_dotless_j:=124;
-chars.math_weierstrass_p:=125;
-chars.math_accent_arrow:=126;
-chars.math_accent_tie:=127;
+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/Master/texmf-dist/fonts/source/public/boisik/bsklist-ms.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ms.mf
new file mode 100644
index 00000000000..f1df6921416
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
index 9d7568ef613..c47f413df8e 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
@@ -1,21 +1,22 @@
%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.math_minus:=0;
-chars.math_cdot:=1;
-chars.math_times:=2;
-chars.math_asterisk:=3;
-chars.math_division:=4;
-chars.math_diamond_op:=5;
-chars.math_plus_minus:=6;
-chars.math_minus_plus:=7;
-chars.math_circle_plus:=8;
-chars.math_circle_minus:=9;
-chars.math_circle_times:=10;
+chars.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;
@@ -24,6 +25,7 @@ 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;
@@ -32,6 +34,7 @@ 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;
@@ -40,6 +43,7 @@ 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;
@@ -48,6 +52,7 @@ 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;
@@ -56,6 +61,7 @@ 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;
@@ -64,6 +70,7 @@ 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;
@@ -72,6 +79,7 @@ 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;
@@ -80,6 +88,7 @@ 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;
@@ -88,14 +97,16 @@ chars.cal_T:=84;
chars.cal_U:=85;
chars.cal_V:=86;
chars.cal_W:=87;
+
chars.cal_X:=88;
chars.cal_Y:=89;
chars.cal_Z:=90;
-chars.math_union:=91;
-chars.math_intersection:=92;
-chars.math_multiunion:=93;
-chars.math_logand:=94;
-chars.math_logor:=95;
+chars.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;
@@ -104,6 +115,7 @@ 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;
@@ -112,6 +124,7 @@ 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;
@@ -120,11 +133,161 @@ chars.math_squnion:=116;
chars.math_sqintersection:=117;
chars.math_sqsubset_eq:=118;
chars.math_sqsuperset_eq:=119;
-chars.math_section:=120;
-chars.math_dag:=121;
-chars.math_dagger:=122;
-chars.sign_paragraph:=123;
-chars.sign_club_suit:=124;
-chars.sign_diamond_suit:=125;
-chars.sign_heart_suit:=126;
-chars.sign_spade_suit:=127;
+
+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/Master/texmf-dist/fonts/source/public/boisik/bskma10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskma10.mf
new file mode 100644
index 00000000000..9141cd111db
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskmab10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmab10.mf
new file mode 100644
index 00000000000..c5c8c01d51e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
index 3221329b278..abd80116234 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
@@ -9,6 +9,8 @@ input bskletters-o;
input bskletters-r;
input bskletters-i;
+font_slant slant;
+
%Non-slanted characters
save chars; numeric chars[];
slant:=mono_charic#:=0;
@@ -16,11 +18,159 @@ currenttransform:=identity yscaled aspect_ratio scaled granularity;
let bskboundary=relax;
input bsklist-mi-up;
input bsksymbols;
-input bskletters-r;
-font_normal_space 5u#;
-font_normal_stretch 3u#; font_normal_shrink 2u#;
font_quad 15u#;
-font_extra_space 2u#;
font_x_height 159/36pt#;
+
+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/Master/texmf-dist/fonts/source/public/boisik/bskmathma.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathma.mf
new file mode 100644
index 00000000000..d09206e11d5
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskmathms.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathms.mf
new file mode 100644
index 00000000000..fc2c5eda0b4
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
index da66c25853d..bf4f37d1d80 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
@@ -5,13 +5,45 @@ input bsklist-sy;
input bskletters-o;
font_slant slant;
-slant:=0;
-currenttransform:=identity yscaled aspect_ratio scaled granularity;
+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_normal_space 5u#;
-font_normal_stretch 3u#; font_normal_shrink 2u#;
font_quad 15u#;
- font_extra_space 2u#;
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/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
index b8d892193d1..ec7029954e5 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
@@ -58,7 +58,7 @@ 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
+medieval:=false; %medieval numerals
monofig:=false; %should numerals have fixed width
bulbes:=false;
square_dots:=false; % should dots be square?
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmib10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmib10.mf
new file mode 100644
index 00000000000..4b14c63be7e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskms10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskms10.mf
new file mode 100644
index 00000000000..fc2e7f55d1f
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskmsb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmsb10.mf
new file mode 100644
index 00000000000..2b0b77f4b83
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskmsbsl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmsbsl10.mf
new file mode 100644
index 00000000000..23b51b0d992
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskmssl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmssl10.mf
new file mode 100644
index 00000000000..efb4d5ad66a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
index 2a9c0c6ff3b..afefae0c352 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
@@ -38,7 +38,7 @@ like_cap_hair#:=21/36pt#;
like_cap_stem#:=45/36pt#;
like_cap_curve#:=53/36pt#;
cap_ess#:=46/36pt#; % breadth in middle of uppercase s
-rule_thickness#:=.6pt#; % thickness of lines in math symbols
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
jut#:=25/36pt#; % protrusion of lowercase serifs
cap_jut#:=30/36pt#; % protrusion of uppercase serifs
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
index 2685c40d298..44327e855c6 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
@@ -9,7 +9,15 @@ input bskletters-r;
input bskletters-o;
input bsksymbols;
-input bskligtab;
+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#;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
index 67d243f3407..314bc0f0f88 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
@@ -52,7 +52,7 @@ 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)$
+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
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksyb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksyb10.mf
new file mode 100644
index 00000000000..18b8d63d3c6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bsksybsl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksybsl10.mf
new file mode 100644
index 00000000000..ca0a937edd6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
index d1b1db9aca7..b388ad27cf4 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
@@ -1,7 +1,9 @@
%Boisik symbols
numeric bourstem; bourstem:=1.5stem;
-numeric arrsize, arrwidth; arrsize=1.2arrwidth=3curve;
+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";
@@ -38,7 +40,8 @@ pos1(hair,90); pos4(hair,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -51,13 +54,14 @@ pos1(hair,90); pos4(hair,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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 "non";
+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);
@@ -66,14 +70,15 @@ lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
y5=y1l; y6=y4l; x5=x6=.5[x1,x2l];
rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle;
+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 "non";
+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);
@@ -82,7 +87,8 @@ rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
y5=y1l; y6=y4l; x5=x6=.5[x1,x2l];
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle;
+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;
@@ -98,8 +104,8 @@ lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
y5=y6=.5[y1,y4]; x5=x2l; x6=x1;
rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)
- ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -114,8 +120,44 @@ rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
y5=y6=.5[y1,y4]; x5=x2l; x6=x1;
lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)
- ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -129,6 +171,16 @@ 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;
@@ -189,6 +241,15 @@ 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";
@@ -198,6 +259,24 @@ 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";
@@ -286,6 +365,23 @@ 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";
@@ -315,6 +411,147 @@ 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";
@@ -344,6 +581,26 @@ 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";
@@ -381,6 +638,42 @@ 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";
@@ -428,16 +721,32 @@ endchar;
iff known chars.sign_exclamation:
bskchar "Exclamation point";
-beginchar(chars.sign_exclamation,5u#+punct_fit#,asc_height#,0); uni "0x0021";
-adjust_fit(0,0);
+beginchar(chars.sign_exclamation,5u#,asc_height#,0); uni "0x0021";
+adjust_fit(punct_fit#,0);
pickup tiny.nib;
-bot z1=(.5w+.5punct_fit,.5dot_size); dot(1);
+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";
@@ -465,6 +774,49 @@ 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#);
@@ -513,6 +865,435 @@ filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,2r).more---z2r
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";
@@ -525,6 +1306,38 @@ 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";
@@ -537,6 +1350,18 @@ 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";
@@ -549,6 +1374,127 @@ 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";
@@ -567,6 +1513,268 @@ filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
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";
@@ -586,6 +1794,16 @@ 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";
@@ -605,6 +1823,79 @@ 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";
@@ -631,7 +1922,72 @@ filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r..z
---obl(13,5l,14)---obl(14,13,7r)---z7r..z7l---obl(15,7l,4l)---z4rr..z4l
---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l..z8r
---obl(19,8r,20)---obl(20,19,6l)---z6l..z6r---obl(21,6r,1r)---z1ll..cycle;
-z0=(x10,y20); z0'=(x11,y13); z0''=(x16,y14); z0'''=(x17,y19);
+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;
@@ -751,7 +2107,7 @@ endchar;
iff known chars.sign_blank_space:
bskchar "Blank-space sign";
-beginchar(chars.sign_blank_space,9.5u#,.5x_height#,.5desc_depth#); uni "non";
+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);
@@ -889,6 +2245,23 @@ 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";
@@ -902,7 +2275,7 @@ penlabels(1,2); endchar;
iff known chars.sign_figdash:
bskchar "Figural dash";
-beginchar(chars.sign_figdash,figw(10u),x_height#,0); uni "0x2012";
+beginchar(chars.sign_figdash,9u#,x_height#,0); uni "0x2012";
adjust_fit(0,0);
pickup tiny.nib;
pos1(hair,90); pos2(hair,90);
@@ -944,6 +2317,17 @@ 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";
@@ -956,6 +2340,32 @@ 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";
@@ -1073,6 +2483,60 @@ 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";
@@ -1280,6 +2744,47 @@ filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
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";
@@ -1296,6 +2801,38 @@ filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
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";
@@ -1312,6 +2849,103 @@ filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
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";
@@ -1328,6 +2962,386 @@ filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
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";
@@ -1338,7 +3352,7 @@ lw=rule_thickness-currentbreadth;
lft x1=u; rt x2=w-u; x3=.5[x1,x2];
bot y1=bot y2=0; top y3=h+o;
y1'=y2'=y1+lw;
-x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+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;
@@ -1348,13 +3362,13 @@ endchar;
iff known chars.math_triangle_right:
bskchar "Triangle pointing right";
-beginchar(chars.math_triangle_right,x_height#+2u#,v_center(x_height#)); uni "0x22B3";
+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=0;
+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);
@@ -1366,13 +3380,13 @@ endchar;
iff known chars.math_triangle_left:
bskchar "Triangle pointing left";
-beginchar(chars.math_triangle_left,x_height#+2u#,v_center(x_height#)); uni "0x22B2";
+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=0;
+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);
@@ -1390,7 +3404,7 @@ pickup tiny.nib;
numeric lw;
lw=rule_thickness-currentbreadth;
lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
-top y1=h; bot y2=0;
+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);
@@ -1406,14 +3420,416 @@ pickup tiny.nib;
numeric lw;
lw=rule_thickness-currentbreadth;
rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
-top y1=h; bot y2=0;
+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";
@@ -1437,7 +3853,7 @@ lw=rule_thickness-currentbreadth;
lft x1=u; rt x2=w-u; x3=.5[x1,x2];
top y1=top y2=h-d; bot y3=-d-o;
y1'=y2'=y1-lw;
-x1'-x1=x2-x2'=-lw/sind(angle(z3-z1));
+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;
@@ -1530,7 +3946,7 @@ 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));
+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;
@@ -1561,12 +3977,199 @@ filldraw z1+oblu*right{right}..z2''..{right}z2+oblu*left..
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[];
+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];
@@ -1587,8 +4190,8 @@ y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
filldraw z3l..{dir-110}z3l.o..z3d
- ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d)
- ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
+ ---obl(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;
@@ -1598,7 +4201,7 @@ bskchar "\displaystyle summation sign";
beginchar(chars.math_sum_disp,19u#,0,14/6dh#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
-path p[];
+path p[]; olbu.more:=2oblu;
numeric alpha, top_stem, top_arm, bot_arm;
top_arm=Vround 1.5rule_thickness;
bot_arm=Vround cap_stem;
@@ -1619,12 +4222,37 @@ y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
filldraw z3l..{dir-110}z3l.o..z3d
- ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d)
- ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
+ ---obl(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";
@@ -1675,9 +4303,34 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b---
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 "0x2210";
+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;
@@ -1697,7 +4350,7 @@ 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');
+penlabels(1,2,3,4); labels(2',3',4'); %math_fit
endchar;
iff known chars.math_coprod_text:
@@ -1750,7 +4403,33 @@ endchar;
iff known chars.math_int:
bskchar "Integral sign";
-beginchar(chars.math_int,10u#,asc_height#,desc_depth#); uni "0x222B";
+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;
@@ -1774,11 +4453,232 @@ filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
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#;
-adjust_fit(0,0);
+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];
@@ -1801,8 +4701,8 @@ endchar;
iff known chars.math_int_disp:
bskchar "\displaystyle integral sign";
beginchar(chars.math_int_disp,17u#,0,4dh#); uni "non";
-italcorr 6u#;
-adjust_fit(0,-ic#);
+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];
@@ -1822,11 +4722,138 @@ filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
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#;
-adjust_fit(0,0);
+italcorr 3u#+curve#;
+adjust_fit(0,-2.5u#);
pickup tiny.nib;
numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
path p[];
@@ -1869,8 +4896,8 @@ endchar;
iff known chars.math_oint_disp:
bskchar "\displaystyle contour integral sign";
beginchar(chars.math_oint_disp,17u#,0,4dh#); uni "non";
-italcorr 6u#;
-adjust_fit(0,0);
+italcorr 6u#+curve#;
+adjust_fit(0,-5.5u#);
pickup tiny.nib;
numeric fend, tim[]; fend:=1.5bourstem; oblu:=4oblu;
path p[];
@@ -1910,6 +4937,1150 @@ infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rund
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";
@@ -1925,6 +6096,41 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
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";
@@ -1940,6 +6146,26 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
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";
@@ -1955,6 +6181,21 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4..z4ll---obl(3l,4l,2r)
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";
@@ -1970,6 +6211,62 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4+2o*up..z4ll---obl(3l,4l,2r)
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";
@@ -1986,6 +6283,166 @@ 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";
@@ -2014,6 +6471,43 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*up..z5rr---z4r...z3r...z2r---z1rr..z
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";
@@ -2040,6 +6534,31 @@ filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
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";
@@ -2090,6 +6609,58 @@ filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
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";
@@ -2106,6 +6677,116 @@ 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";
@@ -2134,6 +6815,166 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*down..z5rr---z4r...z3r...z2r---z1rr.
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";
@@ -2154,7 +6995,6 @@ 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)));
@@ -2163,7 +7003,6 @@ 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
@@ -2175,6 +7014,37 @@ infill subpath(rundy(p1,tim7),infinity) of p1
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";
@@ -2484,12 +7354,12 @@ 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[];
+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---hide(oblu:=2oblu)obl(2r,3l,1r)---z1r..cycle;
+filldraw z1l---obl(2l,1l,3r)---z3r..z3l---obl(2r,3l,1r).more---z1r..cycle;
penlabels(1,2,3);
endchar;
@@ -2510,6 +7380,7 @@ 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;
@@ -2527,6 +7398,7 @@ filldraw z7r{down}..z7l{up}..{dir0}z6l...z5l..{left}z2l..subpath(0,rundy(p1,tim1
..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:
@@ -2605,6 +7477,259 @@ 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";
@@ -2618,6 +7743,57 @@ 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";
@@ -2630,6 +7806,206 @@ 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";
@@ -2643,6 +8019,160 @@ 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";
@@ -2657,6 +8187,68 @@ 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";
@@ -2664,12 +8256,519 @@ adjust_fit(0,0);
pickup tiny.nib;
pos1(rule_thickness,0);
x0=x1r=.5w+o;
-top y0=-d-apex_o; bot y1=h;
+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";
@@ -2718,6 +8817,86 @@ 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";
@@ -2728,6 +8907,100 @@ 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";
@@ -2738,6 +9011,29 @@ 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";
@@ -2772,6 +9068,121 @@ filldraw sipka(0,1)---obl(1r,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1l,2r,0a.r)---
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";
@@ -2800,6 +9211,33 @@ 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";
@@ -2813,6 +9251,49 @@ 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";
@@ -2826,6 +9307,64 @@ 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";
@@ -2840,12 +9379,75 @@ 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;
-x1=.5w;
+x0=.5w; x2=w+5u+2letter_fit;
tieacc(0,1,2);
endchar;
@@ -2853,6 +9455,7 @@ 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[];
@@ -2880,11 +9483,13 @@ filldraw subpath(0,rundy(p3,(tim3,curve)).zpet) of p3
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[];
@@ -2910,6 +9515,7 @@ filldraw z0r..z1r{up}..z2r..z3r..z4r..{left}z5r..{dir60}z5'r..{dir-120}z5'l
--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:
@@ -2923,6 +9529,186 @@ 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";
@@ -2943,6 +9729,84 @@ 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";
@@ -2954,6 +9818,203 @@ 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";
@@ -2974,6 +10035,85 @@ 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";
@@ -2985,6 +10125,76 @@ 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";
@@ -2992,12 +10202,381 @@ italcorr h#*slant;
adjust_fit(0,0);
pickup tiny.nib;
oblu:=2oblu;
-lft x0l=u; y0=math_axis+2u;
+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);
-filldraw z3rr..z3l---z4ll..z4r---cycle;
+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;
@@ -3013,6 +10592,563 @@ 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";
@@ -3024,6 +11160,77 @@ 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";
@@ -3031,15 +11238,533 @@ italcorr x_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
oblu:=2oblu;
-rt x0r=w-u; y0=math_axis+2u;
+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);
-filldraw z3rr..z3l---z4ll..z4r---cycle;
+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";
@@ -3052,6 +11777,788 @@ 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";
@@ -3101,6 +12608,28 @@ 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";
@@ -3162,6 +12691,41 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
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";
@@ -3176,11 +12740,119 @@ 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;
+ ---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";
@@ -3197,6 +12869,60 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr
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";
@@ -3216,6 +12942,710 @@ 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";
@@ -3231,6 +13661,41 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
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";
@@ -3250,6 +13715,114 @@ 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";
@@ -3266,6 +13839,60 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr.
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";
@@ -3285,6 +13912,881 @@ 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";
@@ -3308,6 +14810,398 @@ subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr
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";
@@ -3330,9 +15224,241 @@ subpath(rundy(p,tim2),infinity) of p..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr.
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 "non";
+beginchar(chars.symbol_smile,17u#,v_center(.6x_height#)); uni "0x2323";
adjust_fit(0,0);
pickup tiny.nib;
path p;
@@ -3363,9 +15489,20 @@ 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 "non";
+beginchar(chars.symbol_frown,17u#,v_center(.5x_height#)); uni "0x2322";
adjust_fit(0,0);
pickup tiny.nib;
path p;
@@ -3378,6 +15515,17 @@ 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";
@@ -3430,7 +15578,7 @@ z21=whatever[z1l,z2l]=whatever[z6r,z5r];
filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r--z5l
---obl(13,5l,14)---obl(14,13,7r)---z7r--z7l---obl(15,7l,4l)---z4rr--z4l
---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l--z8r
- ---obl(19,8r,20)---obl(20,19,6l)---z6l--z6r---obl(21,6r,1r)---z1ll..cycle;
+ ---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);
@@ -3535,6 +15683,94 @@ 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";
@@ -3548,6 +15784,20 @@ 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";
@@ -3562,6 +15812,231 @@ 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";
@@ -3581,6 +16056,502 @@ filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
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";
@@ -3624,17 +16595,160 @@ filldraw z1l---obl(5,1l,4l)---z4l...z4rr---obl(6,4r,2l)---z2ll..z2r
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";
@@ -3668,9 +16782,259 @@ 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#,5.5u#+math_axis#,5.5u#-math_axis#); uni "0x2261";
+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;
@@ -3681,11 +17045,37 @@ 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;
@@ -3694,9 +17084,9 @@ bskchar "Circle operator";
beginchar(chars.math_circle_op,8u#,v_center(6u#)); uni "0x2218";
adjust_fit(0,0);
pickup tiny.nib;
-z0=(.5w,.5h);
+z0=(.5w,math_axis);
filldraw fullcircle scaled (w-rt 2u) shifted z0;
-infill fullcircle scaled (w-rt 2u-rule_thickness+currentbreadth) shifted z0;
+infill fullcircle scaled (w-rt 2u-rule_thickness+.5currentbreadth) shifted z0;
endchar;
iff known chars.math_bullet:
@@ -3704,18 +17094,55 @@ bskchar "Bullet";
beginchar(chars.math_bullet,8u#,v_center(6u#)); uni "0x2219";
adjust_fit(0,0);
pickup tiny.nib;
-z0=(.5w,.5h);
+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;
-numeric st; st:=rule_thickness;
-pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270);
+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;
@@ -3729,8 +17156,7 @@ bskchar "Diamond operator with dot";
beginchar(chars.math_diamond_op_dot,9u#,v_center(7u#)); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
-numeric st; st:=rule_thickness;
-pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270);
+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;
@@ -3738,6 +17164,72 @@ 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";
@@ -3745,7 +17237,7 @@ adjust_fit(0,0);
pickup tiny.nib;
numeric size, ast, vast;
path p;
-z0=.5(w,h); ast:=3/4stem; vast=.7stem;
+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;
@@ -3757,6 +17249,54 @@ 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";
@@ -3795,6 +17335,62 @@ 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";
@@ -3819,6 +17415,112 @@ 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";
@@ -3832,6 +17534,18 @@ 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";
@@ -3895,8 +17609,47 @@ infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)-
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";
+bskchar "\textstyle circle-times operator";
beginchar(chars.math_circle_times_text,14u#,0,10/6dh#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
@@ -3935,7 +17688,7 @@ penlabels(9,10,11,12);
endchar;
iff known chars.math_circle_times_disp:
-bskchar "\displaystyle Circle-times operator";
+bskchar "\displaystyle circle-times operator";
beginchar(chars.math_circle_times_disp,18u#,0,14/6dh#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
@@ -4012,6 +17765,45 @@ infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)-
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";
@@ -4090,6 +17882,261 @@ infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)-
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";
@@ -4101,6 +18148,608 @@ 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";
@@ -4232,21 +18881,324 @@ 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:=(h+d)-3u;
+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 z2rr..z2l---z3ll..z3r---cycle;
+filldraw bskrule(2,3,hair,hair);
endchar;
iff known chars.math_approx:
-bskchar "Approximity sign";
+bskchar "Approximate sign";
beginchar(chars.math_approx, 14u#, v_center(x_height#)); uni "0x2248";
adjust_fit(0,0);
pickup tiny.nib;
@@ -4256,16 +19208,145 @@ 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 "non";
+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..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+hair*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4279,7 +19360,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4293,7 +19374,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4307,7 +19388,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4321,20 +19402,20 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+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 "non";
+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..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+hair*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4348,7 +19429,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4362,7 +19443,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4376,7 +19457,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4390,20 +19471,20 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+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 "non";
+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..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+hair*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4417,7 +19498,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4431,7 +19512,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4445,7 +19526,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4459,20 +19540,20 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+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 "non";
+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..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+hair*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4486,7 +19567,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4500,7 +19581,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4514,7 +19595,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4528,7 +19609,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4548,6 +19629,90 @@ 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";
@@ -4591,6 +19756,80 @@ filldraw z1r---z2..z2r+o*down---z4r---z5l..z5rr---obl(4l,5r,6l)---obl(6l,4l,3l)
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";
@@ -4606,6 +19845,91 @@ 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";
@@ -4625,12 +19949,55 @@ 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');
+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 "0x227C";
+beginchar(chars.math_precedes_eq,12u#,v_center(x_height#+3u#)); uni "0x2AAF";
adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; oblu:=2oblu;
@@ -4653,6 +20020,487 @@ 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";
@@ -4675,9 +20523,52 @@ filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z
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 "0x227D";
+beginchar(chars.math_follows_eq,12u#,v_center(x_height#+3u#)); uni "0x2AB0";
adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; oblu:=2oblu;
@@ -4700,6 +20591,531 @@ 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";
@@ -4950,7 +21366,7 @@ endchar;
iff known chars.math_laplace:
bskchar "Laplace operator";
-beginchar(chars.math_laplace,13u#,cap_height#,0); uni "non";
+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;
@@ -4998,7 +21414,7 @@ endchar;
iff known chars.math_dalembert:
bskchar "D'Alembert operator";
-beginchar(chars.math_dalembert,13u#,.9cap_height#,0); uni "non";
+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);
@@ -5097,33 +21513,280 @@ infill subpath(rundy(p3,tim6),rundy(p3,tim8).zpet) of p3..subpath(rundy(p1,tim7)
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=4rule_thickness;
+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=4rule_thickness;
+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=4rule_thickness;
+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);
@@ -5135,7 +21798,7 @@ beginchar(chars.arrow_double_down,9u#,asc_height#,0); uni "0x21D3";
adjust_fit(0,0);
pickup tiny.nib;
pos1(rule_thickness,0);
-x0=x1r=.5w+o=.5[x2,x3]; x3-x2=4rule_thickness;
+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);
@@ -5148,7 +21811,7 @@ adjust_fit(0,0);
pickup tiny.nib;
numeric oldtim[], tim[], oldat, ooldat; path oldap[];
pos1(rule_thickness,0); pos101(rule_thickness,180);
-x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=4rule_thickness;
+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;
@@ -5197,7 +21860,57 @@ adjust_fit(0,0);
pickup tiny.nib;
numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[];
pos1(rule_thickness,90); pos101(rule_thickness,-90);
-y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=4rule_thickness;
+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;
@@ -5240,6 +21953,747 @@ infill subpath(tim5,rundy(bskap6,bsktim18).zpet) of bskap6
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";
@@ -5425,9 +22879,9 @@ filldraw (tim0,h)--(tim0,-d)--(tim1,-d)--(tim1,h)--cycle;
penlabels(1,2,3,4,5,6,7);
endchar;
-iff known chars.math_curly_brace_white_left:%FIXME
+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 "non";
+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[];
@@ -5441,11 +22895,23 @@ p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
p2=(x1-stem,-d-stem)--(x1-stem,h+stem);
(tim0-2,tim2)=subpath(2,infinity) of p0 intersectiontimes p2;
(tim1,tim3)=p1 intersectiontimes p2;
-draw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
- ..subpath(0,rundy(p1,tim1).zpet) of p1
- ..subpath(rundy(p2,tim3),rundy(p2,(tim2,hair)).zpet) of p2
- ..subpath(rundy(p0,tim0),infinity) of p0..cycle;
-penlabels(1,2,3,4,5,6,7);
+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:
@@ -5633,9 +23099,9 @@ filldraw (tim0,h)--(tim0,-d)--(tim1,-d)--(tim1,h)--cycle;
penlabels(1,2,3,4,5,6,7);
endchar;
-iff known chars.math_curly_brace_white_right:%FIXME
+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 "non";
+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[];
@@ -5654,7 +23120,19 @@ draw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
..subpath(rundy(p2,tim3),rundy(p2,tim2).zpet) of p2
..subpath(rundy(p0,tim0),infinity) of p0
..cycle;
-penlabels(1,2,3,4,5,6,7);
+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:
@@ -5724,7 +23202,7 @@ x6=.5[x7l,x3l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(3l);
filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
...z6r{left}..z7r..z8r---
- if dpi>300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
+ 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;
@@ -5746,7 +23224,7 @@ x6=.5[x7l,x3l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(3l);
filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
...z6r{left}..z7r..z8r---
- if dpi>300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
+ 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);
@@ -5769,7 +23247,7 @@ x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5r=y4r-serif_o;
cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r);
filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c
..z2l.a{right}...{right}z6l..z7l..z8l---
- if dpi>300:obl(9l,8l,3r) else: z9l fi
+ 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);
@@ -5792,13 +23270,55 @@ x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5l=y4l-serif_o;
cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r);
filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c
..z2l.a{right}...{right}z6l..z7l..z8l---
- if dpi>300:obl(9l,8l,3r) else: z9l fi
+ 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";
@@ -5958,30 +23478,40 @@ filldraw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity)
penlabels(1,4,7); labels(2,3,5,6);
endchar;
-iff known chars.sign_spade_suit_white: %FIXME
+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[]; oblu:=4oblu;
+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[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];
+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..z2..z3..{up}z4l;
-p2=z4r{down}..z5..z6..z1r;
+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),y5)));
+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)));
-draw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1
- ..subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4..cycle;
-penlabels(1,4,7); labels(2,3,5,6);
+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:
@@ -6008,12 +23538,13 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity)
labels(1,2,3,4,6,7,7',8,8'); penlabels(5,5');
endchar;
-iff known chars.sign_club_suit_white: %FIXME
+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;
-path p[]; numeric tim[]; oblu:=2oblu;
+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;
@@ -6026,9 +23557,10 @@ p0=z2{down}..z4..z5..z6..{up}z3.. {z2-z7}.5[z3,z7]..z7..z7'..{left}z1
p1=z5l--z5'l; p2=z5'r--z5r;
(tim0,tim1)=p0 intersectiontimes p1;
(tim2,tim3)=p2 intersectiontimes p0;
-draw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
+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;
@@ -6106,6 +23638,110 @@ 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";
@@ -6133,6 +23769,24 @@ 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";
@@ -6526,7 +24180,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6540,7 +24195,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6554,7 +24210,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6568,7 +24225,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6582,7 +24240,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -6596,7 +24254,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -6622,7 +24280,8 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6636,7 +24295,7 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6650,7 +24309,7 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6664,7 +24323,7 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+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;
@@ -6678,7 +24337,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -6692,7 +24351,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -6800,7 +24459,8 @@ pos6(cap_curve,50); pos7(cap_hair,90); pos8(cap_hair,90);
pos9(cap_hair,135); pos10(.5[cap_hair,cap_stem],240);
lft x1l=u; .5[x2,x3]=.5w; rt x3r=w-2u; bot y2'r=-o; x2'=.5w;
y1=.25bar_height; y2r=.25bar_height; y3=.35x_height; y4l=bot y5r=x_height;
-x4r=.65w; x5l=w-1.5u; x6=x4l-.5stem; top y7r=h+o; y6r=y7-stem;
+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}
@@ -6816,14 +24476,14 @@ beginchar(chars.math_aleph,12u#,asc_height#,0); uni "0x2135";
adjust_fit(0,0);
pickup tiny.nib;
numeric theta, tim[]; path p[]; oblu:=2.2oblu;
-pos1(cap_curve,50); pos2(cap_curve,50);
+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(cap_stem,theta); pos4(cap_stem,theta);
-pos5(curve,50); pos6(curve,50); pos7(cap_stem,theta);
-pos8(cap_curve,30); pos9(hair,-90); pos10(cap_stem,-10); pos11(cap_hair,theta-90);
-pos12(stem-o,-90); pos13(cap_hair,theta-90); pos14(.85cap_stem,theta-90);
+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];
@@ -6855,12 +24515,84 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
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; %FIXME oblu
+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);
@@ -6894,17 +24626,19 @@ tim10=xpart(p1 intersectiontimes p4);
(tim19,tim20)=p0 intersectiontimes p10;
(tim21,tim22)=p0 intersectiontimes p9;
filldraw z1r--(x1r-.5o,y2-.5hair){dir-100}..subpath(tim1,rundy(p0,tim3).zpet) of p0
- ..{up}z8rr..z8l---(x8l,y8rr)..
- subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
- ..subpath(rundy(p2,(tim6,curve)), infinity) of p2--
- subpath(0,rundy(p3,(tim8,curve)).zpet) of p3
- ..subpath(rundy(p0,(tim7,curve)),infinity) of p0 ..z7l--(x7l+o,y4+hair){dir80}..
- subpath(tim2, rundy(p1,tim3).zpet) of p1..{down}z9ll..z9r---(x9r,y9ll)..
- subpath(rundy(p1,tim10),rundy(p1,tim11).zpet) of p1..
- subpath(rundy(p5,(tim12,curve)),infinity) of p5..
- subpath(0,rundy(p6,(tim14,curve)).zpet) of p6
+ ..{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:=curve;%2.5f_obl; FIXME
+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;
@@ -6915,9 +24649,107 @@ infill subpath(rundy(p0,tim19).zpet,rundy(p0,tim21)) of p0..
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;
@@ -6936,7 +24768,7 @@ bskpoints(6,9,bar,bar);
filldraw arm_bot_r_points(11r,10)..z2r---obl(8l,2r,9l)
---z9ll..z9r---obl(8r,9r,1r)---z1r ..{right}z3r
..z5l..z5'..z5r{up}..z3l{left}..z1l
- ---obl(7r,1l,6r)---z6rr..z6l---obl(7l,6l,2l)
+ ---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);
@@ -7248,7 +25080,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,est_height)--(w,est_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi;
+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)));
@@ -7563,3 +25395,1999 @@ infill subpath(rundy(p10,0),rundy(p10,infinity).zpet) of p10
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/Master/texmf-dist/fonts/source/public/boisik/bsksyol10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksyol10.mf
new file mode 100644
index 00000000000..4c438eba032
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/source/public/boisik/bsksysl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksysl10.mf
new file mode 100644
index 00000000000..71ca90e4f8b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/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/Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfm
new file mode 100644
index 00000000000..117957ecc25
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfm
new file mode 100644
index 00000000000..81010417ee4
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfm
new file mode 100644
index 00000000000..c2122e7eb12
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfm
new file mode 100644
index 00000000000..1939b9f53ee
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfm
new file mode 100644
index 00000000000..0e928c3ae0a
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfm
new file mode 100644
index 00000000000..c3a346c98f4
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfm
new file mode 100644
index 00000000000..0e928c3ae0a
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfm
new file mode 100644
index 00000000000..d78594a041b
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfm
new file mode 100644
index 00000000000..a3aba1157c9
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfm
new file mode 100644
index 00000000000..620ccffcdb6
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfm
new file mode 100644
index 00000000000..53e85c634ab
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfm
new file mode 100644
index 00000000000..934d2a0b4b3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfm
new file mode 100644
index 00000000000..f3394c3ea33
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfm
new file mode 100644
index 00000000000..33d062fd4ee
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfm
new file mode 100644
index 00000000000..3def007aa8f
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfm
new file mode 100644
index 00000000000..de84f9b3fb3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfm
new file mode 100644
index 00000000000..52eab90104c
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfm
new file mode 100644
index 00000000000..28c8190e38f
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfm
new file mode 100644
index 00000000000..105642c0c79
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfm
new file mode 100644
index 00000000000..7e5f67512c3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfm
new file mode 100644
index 00000000000..6d9bcd1ec66
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfm
new file mode 100644
index 00000000000..ec304389117
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfm
new file mode 100644
index 00000000000..6644ab539b7
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfm
new file mode 100644
index 00000000000..38765cb6525
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfm
new file mode 100644
index 00000000000..0b46bd506e8
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfm
new file mode 100644
index 00000000000..7e5f67512c3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfm
new file mode 100644
index 00000000000..f29ef33690d
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfm
new file mode 100644
index 00000000000..325fdcfbbda
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfm
new file mode 100644
index 00000000000..472e2504313
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfm
new file mode 100644
index 00000000000..6bb7b608ec7
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfm
new file mode 100644
index 00000000000..1be76931c94
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfm
new file mode 100644
index 00000000000..576b095e199
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfm
new file mode 100644
index 00000000000..95d3bb03f43
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/boisik/boisik.sty b/Master/texmf-dist/tex/latex/boisik/boisik.sty
index e0ab776f7f0..6f37132b7d2 100644
--- a/Master/texmf-dist/tex/latex/boisik/boisik.sty
+++ b/Master/texmf-dist/tex/latex/boisik/boisik.sty
@@ -1,13 +1,637 @@
-\ProvidesPackage{boisik}%
-[2008/08/11 bsk-v0.1]
+\ProvidesPackage{boisik}[2009/08/21 bsk-v0.5]
\renewcommand{\rmdefault}{bsk}
-\DeclareSymbolFont{operators} {IL2}{bskf} {m}{n}
-\DeclareSymbolFont{letters} {OML}{bskm} {m}{it}
-\DeclareSymbolFont{symbols} {OMS}{bsksy}{m}{n}
-\DeclareSymbolFont{largesymbols}{OMX}{bskex}{m}{n}
+\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}
-\DeclareMathAlphabet{\mathbf} {IL2}{bsk}{b}{n}
+\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/Master/texmf-dist/tex/latex/boisik/il2bsk.fd b/Master/texmf-dist/tex/latex/boisik/il2bsk.fd
index c654df0603f..ec2dbf69030 100644
--- a/Master/texmf-dist/tex/latex/boisik/il2bsk.fd
+++ b/Master/texmf-dist/tex/latex/boisik/il2bsk.fd
@@ -1,15 +1,14 @@
-\ProvidesFile{il2bsk.fd}
- [2008/08/11 v0.1 Boisik font]
+\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}{<-> bskrb10}{}
-\DeclareFontShape{IL2}{bsk}{b}{n}{<-> bskrsb10}{}
+\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/Master/texmf-dist/tex/latex/boisik/il2bskf.fd b/Master/texmf-dist/tex/latex/boisik/il2bskf.fd
index a1309a80a01..1a0a66a07aa 100644
--- a/Master/texmf-dist/tex/latex/boisik/il2bskf.fd
+++ b/Master/texmf-dist/tex/latex/boisik/il2bskf.fd
@@ -1,5 +1,4 @@
-\ProvidesFile{il2bskf.fd}
- [2008/08/11 v0.1 Boisik font]
+\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}{}
diff --git a/Master/texmf-dist/tex/latex/boisik/lblbskm.fd b/Master/texmf-dist/tex/latex/boisik/lblbskm.fd
new file mode 100644
index 00000000000..c0447be3440
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/lblcmr.fd b/Master/texmf-dist/tex/latex/boisik/lblcmr.fd
new file mode 100644
index 00000000000..9156176b60a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/lblcmr.fd
@@ -0,0 +1,3 @@
+\ProvidesFile{lblcmr.fd}
+\DeclareFontFamily{LBL}{cmr}{}
+\DeclareFontShape{LBL}{cmr}{m}{n}{<->cmmi10}{}
diff --git a/Master/texmf-dist/tex/latex/boisik/lblenc.def b/Master/texmf-dist/tex/latex/boisik/lblenc.def
new file mode 100644
index 00000000000..c4d5af2c5aa
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/lbmbsk.fd b/Master/texmf-dist/tex/latex/boisik/lbmbsk.fd
new file mode 100644
index 00000000000..40f1a7f74ab
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/lbmbskms.fd b/Master/texmf-dist/tex/latex/boisik/lbmbskms.fd
new file mode 100644
index 00000000000..565d875fbf5
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/lbmcmr.fd b/Master/texmf-dist/tex/latex/boisik/lbmcmr.fd
new file mode 100644
index 00000000000..67486dc0dc9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/lbmcmr.fd
@@ -0,0 +1,3 @@
+\ProvidesFile{lbmcmr.fd}
+\DeclareFontFamily{LBM}{cmr}{}
+\DeclareFontShape{LBM}{cmr}{m}{n}{<->cmr10}{}
diff --git a/Master/texmf-dist/tex/latex/boisik/lbmenc.def b/Master/texmf-dist/tex/latex/boisik/lbmenc.def
new file mode 100644
index 00000000000..3b079b2229a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/lbsbsk.fd b/Master/texmf-dist/tex/latex/boisik/lbsbsk.fd
new file mode 100644
index 00000000000..394f55d7e89
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/lbsbsksy.fd b/Master/texmf-dist/tex/latex/boisik/lbsbsksy.fd
new file mode 100644
index 00000000000..b5f397e2336
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/lbscmr.fd b/Master/texmf-dist/tex/latex/boisik/lbscmr.fd
new file mode 100644
index 00000000000..7d066efb043
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/boisik/lbscmr.fd
@@ -0,0 +1,3 @@
+\ProvidesFile{lbscmr.fd}
+\DeclareFontFamily{LBS}{cmr}{}
+\DeclareFontShape{LBS}{cmr}{m}{n}{<->cmsy10}{}
diff --git a/Master/texmf-dist/tex/latex/boisik/lbsenc.def b/Master/texmf-dist/tex/latex/boisik/lbsenc.def
new file mode 100644
index 00000000000..ddfcc7e4016
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/omlbskm.fd b/Master/texmf-dist/tex/latex/boisik/omlbskm.fd
deleted file mode 100644
index 162cfbecb55..00000000000
--- a/Master/texmf-dist/tex/latex/boisik/omlbskm.fd
+++ /dev/null
@@ -1,8 +0,0 @@
-\ProvidesFile{omlbskm.fd}
- [2008/08/11]
-\DeclareFontFamily{OML}{bskm}{\skewchar\font127 }
-\DeclareFontShape{OML}{bskm}{m}{it}{<->bskmi10}{}
-\DeclareFontShape{OML}{bskm}{b}{it}{<->bskmib10}{}
-\DeclareFontShape{OML}{bskm}{m}{oi}{<->bskmiol10}{}
-\DeclareFontShape{OML}{bskm}{bx}{it}{<->ssub*bskm/b/it}{}
-\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd b/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd
deleted file mode 100644
index eb913c70ebb..00000000000
--- a/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd
+++ /dev/null
@@ -1,8 +0,0 @@
-\ProvidesFile{omsbsksy.fd}
- [2008/08/11]
-\DeclareFontFamily{OMS}{bsksy}{}
-\DeclareFontShape{OMS}{bsksy}{m}{n}{<->bsksy10}{}
-\DeclareFontShape{OMS}{bsksy}{m}{ol}{<->bsksyol10}{}
-\DeclareFontShape{OMS}{bsksy}{ub}{n}{<->bsksyh10}{}
-%\DeclareFontShape{OMS}{bsksy}{b}{n}{<->bsksyb10}{}
-\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/omxbskex.fd b/Master/texmf-dist/tex/latex/boisik/omxbskex.fd
deleted file mode 100644
index 562081311bb..00000000000
--- a/Master/texmf-dist/tex/latex/boisik/omxbskex.fd
+++ /dev/null
@@ -1,6 +0,0 @@
-\ProvidesFile{omxbskex.fd}
- [2008/08/11]
-\DeclareFontFamily{OMX}{bskex}{}
-\DeclareFontShape{OMX}{bskex}{m}{n}{<->sfixed*bskex10}{}
-\DeclareFontShape{OMX}{bskex}{b}{n}{<->sfixed*bskexb10}{}
-\endinput
diff --git a/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd b/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd
index 5660cd1bd1f..577b198e363 100644
--- a/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd
+++ b/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd
@@ -1,11 +1,15 @@
-\ProvidesFile{ot1bsk.fd}
- [2008/08/11 v0.1 Boisik font]
+\ProvidesFile{ot1bsk.fd}[2009/08/21 v0.5 Boisik font]
\DeclareFontFamily{OT1}{bsk}{}
-\DeclareFontShape{OT1}{bsk}{m}{n}{<-> bskr10}{}
-\DeclareFontShape{OT1}{bsk}{m}{sl}{<-> bski10}{}
-\DeclareFontShape{OT1}{bsk}{m}{it}{<-> bski10}{}
-\DeclareFontShape{OT1}{bsk}{bx}{n}{<-> bskrb10}{}
-\DeclareFontShape{OT1}{bsk}{b}{n}{<-> bskrsb10}{}
+\DeclareFontShape{OT1}{bsk}{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/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd b/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd
index 97402217fb8..cd2b5689094 100644
--- a/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd
+++ b/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd
@@ -1,5 +1,4 @@
-\ProvidesFile{ot1bskf.fd}
- [2008/08/11 v0.1 Boisik font]
+\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}{}
diff --git a/Master/texmf-dist/tex/latex/boisik/ts1bsk.fd b/Master/texmf-dist/tex/latex/boisik/ts1bsk.fd
new file mode 100644
index 00000000000..b1a925f7e8f
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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/Master/texmf-dist/tex/latex/boisik/ubskex.fd b/Master/texmf-dist/tex/latex/boisik/ubskex.fd
new file mode 100644
index 00000000000..6f9446fdea5
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/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