From 0c24cadd71e215e7b621e5a0b324e596e4aad957 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 14 Aug 2008 00:13:22 +0000 Subject: new baskerville-ish font boisik (12aug08) git-svn-id: svn://tug.org/texlive/trunk@10327 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/fonts/boisik/README | 39 + .../texmf-dist/doc/fonts/boisik/boisik-idiot.pdf | Bin 0 -> 333608 bytes .../texmf-dist/doc/fonts/boisik/boisik-idiot.tex | 55 + Master/texmf-dist/doc/fonts/boisik/boisik.pdf | Bin 0 -> 151534 bytes Master/texmf-dist/doc/fonts/boisik/boisik.tex | 54 + Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf | 87 + Master/texmf-dist/doc/fonts/boisik/table.pdf | Bin 0 -> 427849 bytes Master/texmf-dist/doc/fonts/boisik/table.tex | 157 + .../fonts/source/public/boisik/bskbase.mf | 976 +++ .../fonts/source/public/boisik/bskex10.mf | 78 + .../fonts/source/public/boisik/bskext.mf | 12 + .../fonts/source/public/boisik/bski10.mf | 69 + .../fonts/source/public/boisik/bskib10.mf | 69 + .../fonts/source/public/boisik/bskiol10.mf | 71 + .../fonts/source/public/boisik/bskital.mf | 21 + .../fonts/source/public/boisik/bskiu10.mf | 69 + .../fonts/source/public/boisik/bskiub10.mf | 69 + .../fonts/source/public/boisik/bskletters-i.mf | 3875 ++++++++++ .../fonts/source/public/boisik/bskletters-o.mf | 1739 +++++ .../fonts/source/public/boisik/bskletters-r.mf | 6900 ++++++++++++++++++ .../fonts/source/public/boisik/bskligtab-i.mf | 90 + .../fonts/source/public/boisik/bskligtab-sc.mf | 88 + .../fonts/source/public/boisik/bskligtab.mf | 102 + .../fonts/source/public/boisik/bsklist-T1.mf | 258 + .../fonts/source/public/boisik/bsklist-TS1.mf | 130 + .../fonts/source/public/boisik/bsklist-ex.mf | 213 + .../fonts/source/public/boisik/bsklist-lc.mf | 65 + .../fonts/source/public/boisik/bsklist-mi-up.mf | 33 + .../fonts/source/public/boisik/bsklist-mi.mf | 103 + .../fonts/source/public/boisik/bsklist-sc.mf | 57 + .../fonts/source/public/boisik/bsklist-sy.mf | 130 + .../fonts/source/public/boisik/bsklist-uc.mf | 122 + .../fonts/source/public/boisik/bskmath.mf | 26 + .../fonts/source/public/boisik/bskmathsy.mf | 17 + .../fonts/source/public/boisik/bskmi10.mf | 69 + .../fonts/source/public/boisik/bskr10-T1.mf | 82 + .../fonts/source/public/boisik/bskr10-TS1.mf | 82 + .../fonts/source/public/boisik/bskr10.mf | 69 + .../fonts/source/public/boisik/bskrb10.mf | 70 + .../fonts/source/public/boisik/bskrc10.mf | 69 + .../fonts/source/public/boisik/bskrcb10.mf | 69 + .../fonts/source/public/boisik/bskrf10.mf | 69 + .../fonts/source/public/boisik/bskrl10.mf | 69 + .../fonts/source/public/boisik/bskrol10.mf | 70 + .../fonts/source/public/boisik/bskroman.mf | 19 + .../fonts/source/public/boisik/bskrsb10.mf | 69 + .../fonts/source/public/boisik/bskrsl10.mf | 70 + .../fonts/source/public/boisik/bskrw10.mf | 70 + .../texmf-dist/fonts/source/public/boisik/bsksc.mf | 38 + .../fonts/source/public/boisik/bsksc10.mf | 70 + .../fonts/source/public/boisik/bsksy10.mf | 89 + .../fonts/source/public/boisik/bsksymbols.mf | 7565 ++++++++++++++++++++ Master/texmf-dist/tex/latex/boisik/boisik.sty | 13 + Master/texmf-dist/tex/latex/boisik/il2bsk.fd | 15 + Master/texmf-dist/tex/latex/boisik/il2bskf.fd | 10 + Master/texmf-dist/tex/latex/boisik/omlbskm.fd | 8 + Master/texmf-dist/tex/latex/boisik/omsbsksy.fd | 8 + Master/texmf-dist/tex/latex/boisik/omxbskex.fd | 6 + Master/texmf-dist/tex/latex/boisik/ot1bsk.fd | 11 + Master/texmf-dist/tex/latex/boisik/ot1bskf.fd | 11 + 60 files changed, 24564 insertions(+) create mode 100644 Master/texmf-dist/doc/fonts/boisik/README create mode 100644 Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf create mode 100644 Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex create mode 100644 Master/texmf-dist/doc/fonts/boisik/boisik.pdf create mode 100644 Master/texmf-dist/doc/fonts/boisik/boisik.tex create mode 100644 Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf create mode 100644 Master/texmf-dist/doc/fonts/boisik/table.pdf create mode 100644 Master/texmf-dist/doc/fonts/boisik/table.tex create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskbase.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskex10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskext.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bski10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskib10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskital.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskmath.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskr10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskroman.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsksc.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf create mode 100644 Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf create mode 100644 Master/texmf-dist/tex/latex/boisik/boisik.sty create mode 100644 Master/texmf-dist/tex/latex/boisik/il2bsk.fd create mode 100644 Master/texmf-dist/tex/latex/boisik/il2bskf.fd create mode 100644 Master/texmf-dist/tex/latex/boisik/omlbskm.fd create mode 100644 Master/texmf-dist/tex/latex/boisik/omsbsksy.fd create mode 100644 Master/texmf-dist/tex/latex/boisik/omxbskex.fd create mode 100644 Master/texmf-dist/tex/latex/boisik/ot1bsk.fd create mode 100644 Master/texmf-dist/tex/latex/boisik/ot1bskf.fd (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/fonts/boisik/README b/Master/texmf-dist/doc/fonts/boisik/README new file mode 100644 index 00000000000..148d007916e --- /dev/null +++ b/Master/texmf-dist/doc/fonts/boisik/README @@ -0,0 +1,39 @@ +Boisik +============ +Font Boisik is a serifed font (inspired by Baskerville typeface) written in +Metafont. It comprises roman and italic text fonts and math text fonts. + +Font is licensed under GPL version 2. Font is in development and its application +is not recommended in instances, where stability of typesetting is important. +The font is provided "as is" without warranty of any kind. + +For more info see homepage http://mitek.webpark.cz/boisik. + +Usage +============ +LaTeX: \usepackage{boisik} +TeX: use font directly, e.g. \font\rm bskr10 + +Installation +============ +1) put *.mf files to directory used by Metafont, + e.g. /usr/share/temxf/fonts/source/public/boisik, +2) put LaTeX files (boisik.sty, *.fd) to directory used by LaTeX, + e.g. /usr/share/temxf/tex/latex/boisik, +3) rebuild database if needed (e.g. texhash). + +Contact +============ +Homepage: http://mitek.webpark.cz/boisik +Email: mitek at email dot cz (add text `[BSK]' to subject) + +Basic fonts +============ +Roman: bskr10, bskrb10 +Italic: bski10, bskib10 +Math: bskmi10, bsksy10, bskex10 + +Examples +============ +http://mitek.webpark.cz/boisik/boisik.pdf +http://mitek.webpark.cz/boisik/boisik-idiot.pdf diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf new file mode 100644 index 00000000000..f849e5cd844 Binary files /dev/null and b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.pdf differ diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex new file mode 100644 index 00000000000..9c39d4aed32 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/boisik/boisik-idiot.tex @@ -0,0 +1,55 @@ +\input czech.sty +\def\uv#1{\char254 #1\char255\relax} +\footline{} +\overfullrule 0pt +\advance\vsize by 30pt +\font\tit bskrc10 at 7pt +\font\rm bskr10 +\font\it bski10 +\font\itb bskib10 +\font\bf bskrb10 +\font\cr bskrc10 +\font\crb bskrcb10 +\font\iu bskiu10 +\font\iub bskiub10 +\font\rl bskrl10 +\font\sc bsksc10 +\font\sl bskrsl10 +\long\def\text#1#2{\noindent\rlap{\hbox to \hsize{\hfill {\special{ps:.2 0 .8 setrgbcolor}\tit Boisik #2}}}\vrule width \hsize height -2.8pt depth 3.2pt\special{ps:0 0 0 setrgbcolor}\par +Oho! zvolal, prohlížeje si krasopiseckou ukázku, kterou mu kníže podal, \uv{To je jako tištěný vzorec! a vzácný vzorec! Podívej se, Gaňo, to je talent!} Na silném velínovém papíře napsal kníže středověkým ruským písmem větu: + +\hfill{#1\uv{Bohabojný opat Pafnutij se vlastní rukou podepsal.}}\hfill\null + +\uv{Tohleto,} vysvětloval kníže s neobyčejným uspokojením a nadšením, \uv{je vlastní podpis opata Pafnutije podle kopie ze čtrnáctého století. Podepisovali se překrásně, všichni ti naši staří opati a metropolité, většinou s takovým vkusem, s takovou péčí! Nemáte snad náhodou Pogodinovo vydání, generále? Tadyhle jsem zas užil jiného písma; je to oválné veliké francouzské písmo z minulého století, některá písmena se dokonce psala jinak, je to písmo lidové, písmo veřejných písařů převzaté z jejich vzorců, měl jsem jeden; jistě uznáte, že má své přednosti. Podívejte se na to oválné d, a. Vložil jsem do ruských písmen francouzský charakter, což je velmi nesnadné, ale zdařilo se mi to. A tady máte jiné krásné, originální písmo. Tahle věta ,Píle zmůže vše`, to je ruské písmo písařské, přesněji vojenských písařů. Tak se píše úřední listina významné osobě, je to rovněž oválné a pěkné, silné písmo, je to napsáno tučně, ale s pozoruhodným vkusem. Krasopisec by si nedovolil takový rozmach, nebo lépe řečeno pokus o rozmach, tadyhle ty nedokončené ocásky, vidíte, ale vcelku, všimněte si, má to svůj styl a opravdu, jeví se v tom celá duše vojenského písaře; chtěla by se rozletět, nadání by se rádo uplatnilo, ale vojenský límec tu duši notně škrtí; kázeň se projevuje i~v~rukopise, to je báječné! Nedávno jsem žasl nad jedním takovým vzorkem, přišel jsem k němu náhodou a ještě k tomu víte kde? -- ve Švýcarech! No, a tohle je prosté, obyčejné, pravé anglické písmo; větší eleganci si už nemůžeme představit, to je prostě nádhera, perla, klenot; naprosto bezvadné; a zde máte variantu, tentokráte francouzskou; získal jsem ji od jednoho francouzského obchodního cestujícího; totéž anglické písmo, stínování je však o poznání výraznější, tlustší, a hle, světelná proporce je již porušena; také si všimněte, že i ovál je pozměněn, je poněkud okrouhlejší a ještě k tomu si tu troufáme na krasopisné ozdoby, a to je velmi nebezpečná věc! Ozdoby vyžadují neobyčejný vkus, ale jestliže se podaří, jestliže jsme vystihli proporci, pak je takové písmo nade všechny, můžeme se do něho až zamilovat.} + +\uv{Oho! do jakých jemností zabíháte!} smál se generál, \uv{příteli, vy nejste jenom krasopisec, ale hotový umělec, viď, Gaňo?} + +\uv{Podivuhodné!} řekl Gaňa \dots\par\vfill +} +\rm\text{\bf}{Roman} +\rl\text{\bf}{Roman Light} +\eject +\cr\text{\crb}{Roman Condensed} +\sc\text{\bf}{Small Caps} +\eject +\it\text{\itb}{Italic} +\iu\text{\iub}{Italic Unslanted} +\eject +\sl\text{\bf}{Roman Slanted} + +\special{ps:.2 0 .8 setrgbcolor} +\noindent\rlap{\hbox to \hsize{\vrule width 6cm height 5pt depth -3.6pt\hfill {\it F. M. Dostojevskij: \itb Idiot}\hfill\vrule width 6cm height 5pt depth -3.6pt}}\vrule width \hsize height -3.2pt depth 3.6pt +\special{ps:0 0 0 setrgbcolor}\vfill + +\def\veta{Ozdoby vyžadují neobyčejný vkus, ale jestliže se podaří, jestliže jsme vystihli proporci, pak je takové písmo nade všechny, můžeme se do něho až zamilovat.\par} +\rm\veta +\cr\veta +\rl\veta +\bf\veta +\crb\veta +\sl\veta +\sc\veta +\it\veta +\iu\veta +\itb\veta +\end diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik.pdf b/Master/texmf-dist/doc/fonts/boisik/boisik.pdf new file mode 100644 index 00000000000..a6b861078b4 Binary files /dev/null and b/Master/texmf-dist/doc/fonts/boisik/boisik.pdf differ diff --git a/Master/texmf-dist/doc/fonts/boisik/boisik.tex b/Master/texmf-dist/doc/fonts/boisik/boisik.tex new file mode 100644 index 00000000000..191f1d45fa6 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/boisik/boisik.tex @@ -0,0 +1,54 @@ +\documentclass{article} +\usepackage{color,graphicx} +\pagestyle{empty} +\pdfpkresolution 1200 +\pagecolor{black} +\definecolor{modra}{rgb}{.372,.486,1} +\definecolor{cervena}{rgb}{1,.219,.556} +\font\logo bskrlogo10 at 30pt +\font\bskt bskr10 +\font\bsk bskr10 at 8pt +\font\bskbf bskrb10 at 8pt +\font \bski bski10 at 8pt +\font \bskmi bskmi10 at 8pt +\font \bsksy bsksy10 at 8pt +\font \bskex bskex10 at 8pt +\font \bsksyb bsksy10 at 12pt +\font\f bskmi10 at 30pt +\pdfvorigin 1sp \pdfhorigin 1sp +\pdfpagewidth 11cm \pdfpageheight 6cm +\topmargin -.45in +\oddsidemargin -.15in +\def\para{\leavevmode\llap{\setbox0=\hbox{{\color{modra}\bsksyb\char123}\ }\ht0=0pt\dp0=0pt\lower.8ex\box0}} +\def\Boisik{{\color{modra}Boisik}} +\begin{document} +\mbox{}\unitlength1pt +\put(5,0){\color{modra}\logo Bo\kern-2pt\reflectbox{\char131}\kern-2.5pt\raisebox{-3pt}[0pt]{s}\kern-2.5pt\char131\kern-1ptk} +\put(0,-10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt} +\put(0,-6){\color{modra}\hbox to 10.7cm{\hfill \bskt MET\kern-.6exAF\kern-.2exONT TYP\kern-.2exEF\kern-.5exA\kern-.35exCE F\kern-.2exOR \TeX}} +\color{white} +\put(65,-40){\hbox to 8.2cm{\bsk A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}} +\put(65,-50){\hbox to 8.2cm{\bskbf A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}} +\put(65,-60){\hbox to 8.2cm{\bski A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}} +\put(65,-70){\hbox to 8.2cm{\bsk a b c d e f g h i j k l m n o p q r s t u v w x y z}} +\put(65,-80){\hbox to 8.2cm{\bskbf a b c d e f g h i j k l m n o p q r s t u v w x y z}} +\put(65,-90){\hbox to 8.2cm{\bski a b c d e f g h i j k l m n o p q r s t u v w x y z}} +\put(65,-100){\hbox to 8.2cm{\bsk 0 1 2 3 4 5 6 7 8 9 ( [ + - -- --- * / : ; = \char35\ \% \char141\ ] )}} +\put(65,-112){\hbox to 8.2cm{\bsk fi \char130\ ff fl ffi ffl \char128\ \char129\ \char16\ \char17\ \char25\ \char26\ \char27\ \char28\ \char29\ \char30\ \char31\ \char36\ . , \char23\ \char22\ \char32\ \char21\ \char24\ \char18\ \char254\ \char255\ ` ' "}} +\put(65,-122){\hbox to 8.2cm{\bsk \char0\ \char1\ \char2\ \char3\ \char4\ \char5\ \char6\ \char7\ \char8\ \char9\ \char10\ \char126\bskmi\ \char11\ \char12\ \char13\ \char14\ \char15\ \char16\ \char17\ \char18\ \char19\ \char20\ \char21\ \char22\ \char23\ \char25\ \char37\ \char27\ \char28\ \char29\ \char30\ \char 31\ \char32}} +\put(65,-132){\hbox to 8.2cm{\bskmi \char96\ \char125\ \char64\ \char63\ \char92\ \char91\ \char93\ \char60\ \char62\ \char47\ \char94\ \char46\ \char40\ \char41\ \bsksy \char32\ \char33\ \char34\ \char35\ \char49\ \char50\ \char12\ \char97\ \color{modra}\bskex \char112\ \char84\ \char85}} +\put(5,-80){\color{cervena}\font\bskex bskex10 at 30pt \bskex \put(0,0){\rotatebox{90}{\reflectbox{\char82}}} +\put(0,-10){\bsksy \char35}\put(30,18){\bsksy \char34}\put(11,-13.5){\rotatebox{90}{\f\reflectbox{\char60}}} +\color{modra}\put(5,7.5){\bskbf *}\put(9,8){\bskbf *} +\put(23,10){\bskbf *} +} +\newpage\hsize 8.2cm\oddsidemargin 2.4cm\parindent 0pt +\color{white}\bsk +\para The `\Boisik\kern-.25ex' font is a Metafont typeface greatly inspired by Baskerville design. It is proposed as an alternative of Computer Modern fonts for mathematical typesetting: \Boisik{} will support all characters described in the book `\kern-.15ex{\bski Computer Modern Typefaces}' by D. E. Knuth. In addition, there is a character support for the Czech language. \hfill {\color{cervena}Á\,á\,Č\,č\,Ď\,ď\,\kern.2exÉ\,é\,Ě\,ě\,Í\,í\,Ň\,ň\,Ř\,ř\,Š\,š\,Ť\kern.1exť\,Ů\,ů\,Ú\,ú\,Ý\kern.1exý\,Ž\,ž} + +\para Current status of \Boisik{} is an alpha version: many features are missing, many don't work. I hope ({\bskbf not guarantee}) in the improvement in the future. Especially, next releases may extend symbols coverage to support following fonts: {\bski msam} and {\bski msbm} math fonts and text companion.\vskip 1mm + +\mbox{}\put(-63,10){\color{cervena}\vrule width 10.7cm height .8pt depth 0pt} +\para Please, don't use \Boisik{} if you need excellent stability, precision, and quality of typesetting. + +\end{document} diff --git a/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf b/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf new file mode 100644 index 00000000000..169612b9371 --- /dev/null +++ b/Master/texmf-dist/doc/fonts/boisik/bskrlogo10.mf @@ -0,0 +1,87 @@ +% Boisik Logo Roman 10 point (contains logo_i) +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRLOGO"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +crisp#:=0pt#; % diameter of serif corners +tiny#:=8/36pt#; % diameter of rounded corners +fine#:=7/36pt#; % diameter of sharply rounded corners +thin_join#:=7/36pt#; % width of extrafine details +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +flare#:=33/36pt#; % diameter of bulbs or breadth of terminals +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +notch_cut#:=10pt#; % maximum breadth above or below notches +bar#:=11/36pt#; % lowercase bar thickness +slab#:=11/36pt#; % serif and arm thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +cap_band#:=11/36pt#; % uppercase thickness above/below lobes +cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +stem_corr#:=1/36pt#; % for small refinements of stem breadth +vair_corr#:=1/36pt#; % for small refinements of hairline height +apex_corr#:=0pt#; % extra width at diagonal junctions +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls +beak_darkness:=11/30; % fraction of triangle inside beak serifs +ligs:=2; % level of ligatures to be included + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +hefty:=false; % should we try hard not to be overweight? +serifs:=true; % should serifs and bulbs be attached? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +low_asterisk:=false; % should the asterisk be centered at the axis? +math_fitting:=false; % should math-mode spacing be used? + +chars.logo_i:=oct"203"; +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/doc/fonts/boisik/table.pdf b/Master/texmf-dist/doc/fonts/boisik/table.pdf new file mode 100644 index 00000000000..83b91edacad Binary files /dev/null and b/Master/texmf-dist/doc/fonts/boisik/table.pdf differ diff --git a/Master/texmf-dist/doc/fonts/boisik/table.tex b/Master/texmf-dist/doc/fonts/boisik/table.tex new file mode 100644 index 00000000000..2741c41db1b --- /dev/null +++ b/Master/texmf-dist/doc/fonts/boisik/table.tex @@ -0,0 +1,157 @@ +\ifx\bskfont\undefined\def\bskfont{bskr10}\fi +\font\bsk \bskfont\space at 3cm +\font\bski bski10 at 3cm +\font\mi bskmi10 at 3cm +\font\mex bskex10 at 3cm +\font\sy bsksy10 at 3cm +\font\btit bskr10 +\overfullrule0pt +\footline={\hss\btit\special{ps:.2 0 .8 setrgbcolor} Font `Boisik'\special{ps:0 0 0 setrgbcolor}\hss} +\bsk \vsize 24cm \leavevmode\vskip -1.3in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +á&b&č&ď\cr +e&f&g&h\cr +i&j&k&ĺ\cr +m&n&ö&p\cr +q&ř&š&ť\cr +ů&v&w&x\cr +\i&ý&z&\j\cr +}\vfill\break\leavevmode\vskip-1in% +\halign{&\vrule width 0pt height 2.7cm depth 1cm\hbox to 4cm{\hfill # \hfill}\cr +0&1&2&3\cr +4&5&6&7\cr +(&8&9&)\cr +\char92&[&]&"\cr +:&.&,&;\cr +-&--&---&=\cr +?&?`&!&!`\cr +} +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +A&B&C&D\cr +E&F&G&H\cr +I&J&K&\char 32L\cr +M&N&O&P\cr +Q&R&S&T\cr +U&V&\hss W\hss&X\cr +&Y&Z\cr +} +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +\#&@&\%&\char141\cr +\char26&\char27&\char29&\char30\cr +\$&\char25&\char28&\char 31\cr +\char158&+&/&\char159\cr +`&\&&*&'\cr +fi&ff&fl&\char254\cr +\char128&ffl&ffi&\char129\cr +}\vfill +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +\char0&\char1&\char2&\char3\cr +\char4&\char5&\char6&\char7\cr +\char8&\char9&\char10&\cr +\mi\char0&\mi\char1&\mi\char2&\mi\char3\cr +\mi\char4&\mi\char5&\mi\char6&\mi\char7\cr +\mi\char8&\mi\char9&\mi\char10&\cr +} +\break\leavevmode\vskip-1in\bski +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +A&B&C&D\cr +E&F&G&H\cr +I&J&K&L\cr +M&N&O&P\cr +Q&R&S&T\cr +U&V&\hss W\hss&X\cr +&Y&Z\cr +} +\break\leavevmode\vskip-1in% +\halign{&\vrule width 0pt height 2.7cm depth 1cm\hbox to 4cm{\hfill # \hfill}\cr +0&1&2&3\cr +4&5&6&7\cr +(&8&9&)\cr +\char92&[&]&"\cr +:&.&,&;\cr +-&--&---&=\cr +?&?`&!&!`\cr +} +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +a&b&c&d\cr +e&f&g&h\cr +i&j&k&l\cr +m&n&o&p\cr +q&r&s&t\cr +u&v&w&x\cr +\i&y&z&\j\cr +} +\break\leavevmode\vskip-1in\mi +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +a&b&c&d\cr +e&f&g&h\cr +i&j&k&l\cr +m&n&o&p\cr +q&r&s&t\cr +u&v&w&x\cr +&y&z&\cr +} +\break\leavevmode\vskip-1in\bski +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +\#&@&\%&\char141\cr +\char26&\char27&\char29&\char30\cr +\$&\char25&\char28&\char 31\cr +\char158&+&/&\char159\cr +`&\&&*&'\cr +fi&ff&fl&\char254\cr +\char128&ffl&ffi&\char129\cr +}\vfill +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +\mi\char11&\mi\char15&\mi\char19&\mi\char20\cr +\mi\char23&\mi\char25\char153&\mi\char27\char155&\mi\char28\char156\cr +\mi\char29\char157&\mi\char33&\mi\char34&\mi\char36\char164\cr +\mi\char12\char140&\mi\char14&\mi\char18&\mi\char21\char149\cr +\mi\char13\char141&\mi\char17\char145&\mi\char22\char150&\mi\char35\cr +\mi\char26&\mi\char37&\mi\char38&\mi\char39\char167\cr +\mi\char16\rlap{\char24}&\mi\char30\char158&\mi\char31&\mi\char32\char160\cr +} +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +\mex\lower-1.5ex\hbox{\char'160}&\mex\lower-1.5ex\hbox{\char'110}&\mex\lower-1.5ex\hbox{\char'122}&\mex\lower-1.5ex\hbox{\char'120}\cr +\mex\lower-1.5ex\hbox{\char'115}&\mex\lower-1.5ex\hbox{\char'117}&\mex\lower-1.5ex\hbox{\char'113}&\mex\lower-1.5ex\hbox{\char'121}\cr +\mex\lower-1.5ex\hbox{\char'106}&\mex\lower-1.5ex\hbox{\char'123}&\mex\lower-1.5ex\hbox{\char'124}&\mex\lower-1.5ex\hbox{\char'125}\cr +\mex\lower-1.5ex\hbox{\char'126}&\mex\lower-1.5ex\hbox{\char'127}&\mex\lower-1.5ex\hbox{\char'140}&\mex\hbox{\char'146}\cr +\mex\lower-1.5ex\hbox{\char'020\char'021}&\mex\lower-1.5ex\hbox{\char'156\char'157}&\mex\lower-1.5ex\hbox{\char'150\char'151}&\mex\lower-1.5ex\hbox{\char'104\char'105}\cr +} +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 2.9cm\hbox to 4cm{\hfill # \hfill}\cr +\sy\char'032&\sy\char'036&\sy\char'166&\sy\char'157\cr +\sy\char'070&\sy\char'071&\sy\char'072&\sy\char'073\cr +\sy\char'061&\sy\char'062&\sy\char'063&\sy\char'162\cr +\sy\char2&\sy\char3&\sy\char4&\sy\char5\cr +\sy\char6&\sy\char7&\sy\char14&\sy\char'057\cr +\sy\char'022&\sy\char'024&\sy\char'026&\sy\char'034\cr +\sy\char'030&\sy\char'031&\sy\char'047&\sy\char'066\cr +\sy\char'015&\sy\char'064&\sy\char'020&\sy\char'077\cr +} +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +\sy\char'170&\sy\char'172&\sy\char'173&\sy\char'060\cr +\sy\char'174&\sy\char'175&\sy\char'176&\sy\char'177\cr +\sy\char'040&\sy\char'044&\sy\char'050&\sy\char'054\cr +\sy\char'045&\sy\char'046&\sy\char'055&\sy\char'056\cr +\sy\char'010&\sy\char'011&\sy\char'012&\sy\char'013\cr +\sy\char'074&\sy\char'075&\sy\char'100&\sy\char'155\cr +} +\end +\break\leavevmode\vskip-1in +\halign{&\vrule width 0pt height 3cm\hbox to 4cm{\hfill # \hfill}\cr +\sy A&\sy B&\sy C&\sy D\cr +\sy E&\sy F&\sy G&\sy H\cr +\sy I&\sy J&\sy K&\sy L\cr +\sy M&\sy N&\sy O&\sy P\cr +\sy Q&\sy R&\sy S&\sy T\cr +\sy U&\sy V&\sy \hss W\hss&\sy X\cr +&\sy Y&\sy Z\cr +} +\end diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf new file mode 100644 index 00000000000..436053a6431 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf @@ -0,0 +1,976 @@ +% The base file for Boisik font +% Based on cmbase.mf + +bskbase:=1; % when |bskbase| is known, this file has been input + +let bskchar=\; % `|bskchar|' should precede each character +let generate=input; % `|generate|' should follow the parameters + +autorounding:=0; smoothing:=0; % we do our own rounding +def autorounded = interim autorounding:=2 enddef; + +newinternal slant,fudge,math_spread,superness,superpull,beak_darkness,ligs; +boolean square_dots,hefty,serifs, medieval, monofig, bulbes, + monospace,variant_g,low_asterisk,math_fitting; + +boolean dark,dark.dark,skewed,skewed.skewed; % for fast option testing +dark=skewed=false; dark.dark=skewed.skewed=true; + +def infill text t:= cullit; path _p; _p:=t; erase fill _p; draw _p; +enddef; + +let bskboundary=relax; + +vardef Vround primary y = y_:=vround y; + if y_\vert b/y\vert$, +% compute the value $\alpha=(x\6{++}y)/y$ such that $ax+b\alpha=c$ + numeric aa_,bb_,cc_; bb_=b/y; cc_=c/y; aa_=a*a-bb_*bb_; + (a*(cc_++sqrt aa_)-bb_*cc_)/aa_ enddef; + +def compute_spread(expr normal_spread,big_spread)= + spread#:=math_spread[normal_spread,big_spread]; + spread:=2ceiling(spread#*hppp/2)+eps; enddef; + +def v_center(expr h_sharp) = + .5h_sharp+math_axis#, .5h_sharp-math_axis# enddef; + +def beginarithchar(expr c) = % ensure consistent dimensions for $+$, $-$, etc. + if monospace: beginchar(c,9.5u#,27/7u#+math_axis#,27/7u#-math_axis#); + else: beginchar(c,13u#,5.5u#+math_axis#,5.5u#-math_axis#); fi + italcorr math_axis#*slant-.5u#; + adjust_fit(0,0); enddef; + +boolean test, test.alt; test=false; test.alt=true; + +%%%%%%%%%%%Dots and commas +def dot(suffix $):= + filldraw if square_dots: unitsquare shifted (.5,.5) scaled dot_size + else: fullcircle scaled dot_size shifted z$ + fi; + labels($); +enddef; + +def comma(suffix $)(expr dim, jut, depth):= + {{ save p, oblu; path p[]; oblu:=.6dim; + numeric jutting; + jutting=if jut=infinity: hair else: jut fi; + if square_dots: + else: penpos$'(dim,0); penpos$''(dim,90); z$'=z$''=z$; + z$'''=(x$'r+jutting,y$''l); z$~=.5[z$,z$'l]+depth*down; + p0:=z$'r{up}..z$''r{left}..{down}z$'l..{right}z$''l..cycle; + p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z$~; + filldraw z$~..z$'''..subpath (1.5,rundy(p0,3.5).zpet) of p0.. + subpath(rundy(p1,(0,.4dim)),infinity) of p1&cycle; + labels($,$''',$~); penlabels($',$''); + fi + }} +enddef; + +def ammoc(suffix $)(expr dim, jut, depth):= + {{ save p, oblu; path p[]; oblu:=.6dim; + numeric jutting; + jutting=if jut=infinity: hair else: jut fi; + if square_dots: + else: penpos$'(dim,180); penpos$''(dim,270); z$'=z$''=z$; + z$'''=(x$'r-jutting,y$''l); z$~=.5[z$,z$'l]+depth*up; + p0:=z$'r{down}..z$''r{right}..{up}z$'l..{left}z$''l..cycle; + p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z$~; + filldraw z$~..z$'''..subpath (1.5,rundy(p0,3.5).zpet) of p0.. + subpath(rundy(p1,(0,.4dim)),infinity) of p1&cycle; + labels($,$''',$~); penlabels($',$''); + fi + }} +enddef; + +def turn_comma(suffix $)(expr dim, jut, depth):= + {{ save p, oblu; path p[]; oblu:=.6dim; + numeric jutting; + jutting=if jut=infinity: hair else: jut fi; + if square_dots: + else: penpos$'(dim,0); penpos$''(dim,90); z$'=z$''=z$; + z$'''=(x$'r+jutting,y$''l); z$~=.5[z$,z$'l]+depth*down; + p0:=z$'r{up}..z$''r{left}..{down}z$'l..{right}z$''l..cycle; + p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z$~; + filldraw (z$~..z$'''..subpath (1.5,rundy(p0,3.5).zpet) of p0.. + subpath(rundy(p1,0),infinity) of p1 &cycle) + reflectedabout((x$,0),(x$,h)); + labels($,$''',$~); penlabels($',$''); + fi + }} +enddef; + +%%%%%%%%%%%Serifs +pair serif_bend, cap_serif_bend; + +def lowercase_points(suffix $,$$)(expr size)suffix modifier:= + pos$(stem,0); pos$$(stem,0); x$=x$$; + serif_bot($); drop_serif($$)(size).modifier; + penlabels($,$$); +enddef; + +vardef lowercase_stem_draw(suffix $,$$):= + z$$r..{(x$a-x$r,-.25serif_drop)}z$$a&z$$a---obl($$b,$$a,$a)---z$a..z$b{left}..{right}z$c + ..z$+ser_boule*up.. + z$d{right}..{left}z$e..{up}z$f +enddef; + +vardef lowercase_stem_upper(suffix $,$$):= + (reverse (z$$r..{(x$a-x$r,-.25serif_drop)}z$$a&z$$a---obl($$b,$$a,$a))) +enddef; + +vardef lowercase_lower_u_serif(suffix $)(expr jut):= + z$f{down}..{right}z$e..{left}z$d.. {z$b-z$f}.5[z$,z$l]+jut*down..z$l+jut*down--z$a +enddef; + +vardef broken_stem_draw(suffix @,$,$$):= + z@--z$$r+.2u*left..{(x$a-x$r,-.25serif_drop)}z$$a&z$$a---z$$b + if known correct: if correct: +.75u*left.. else:-- fi else: +.75u*left.. fi + z$$b+u*down---z$a if known correct: if correct:.. else: -- fi else: .. fi + z$b{left}..z$c{right}..z$+ser_boule*up..{right}z$d..{left}z$e + if known correct: if correct:..{up} else: -- fi else: ..{up} fi z$f +enddef; + +def lowercase_stem(suffix $,$$)(expr size)suffix modifier:= + lowercase_points($,$$,size).modifier; + filldraw lowercase_stem_draw($,$$)---z$$r&cycle; + enddef; + +def serif_bot(suffix $):= + z$a=z$l+stem*up; z$b=z$c+(o,0) rotated 30; z$c=z$l+jut*left; + z$d=z$r+jut*right; z$e=z$d+(-o,0) rotated -30; z$f=z$r+stem*up; + labels($a,$b,$c,$d,$e,$f); +enddef; + +def drop_serif(suffix $)(expr size)suffix modifier= + z$a=z$l+size*left+if not test.modifier: .5\\fi serif_drop*down; + z$b=(x$l,y$a-.25serif_drop); + labels($a,$b); +enddef; + +def serifs_tl(suffix $):= + z$a=z$+jut*left; z$b=z$+.5ser_height*down; z$c=z$a+.707serif_o*down; + labels($a,$b,$c) +enddef; + +def serifs_tr(suffix $):= + z$a=z$+jut*right; z$b=z$+.5ser_height*down; z$c=z$a+.707serif_o*down; + labels($a,$b,$c) +enddef; + +def serifs_bl(suffix $):= + z$a=z$+jut*left; z$b=z$+.72ser_height*up; z$c=z$a+.707serif_o*up; + labels($a,$b,$c) +enddef; + +def serifs_br(suffix $):= + z$a=z$+jut*right; z$b=z$+.72ser_height*up; z$c=z$a+.707serif_o*up; + labels($a,$b,$c) +enddef; + +def cap_serifs_tl(suffix $):= + z$a=z$+cap_jut*left; z$b=z$+.7ser_height*down; z$c=z$a+serif_o*down; + labels($a,$b,$c) +enddef; + +def cap_serifs_tr(suffix $):= + z$a=z$+cap_jut*right; z$b=z$+.7ser_height*down; z$c=z$a+serif_o*down; + labels($a,$b,$c) +enddef; + +def cap_serifs_bl(suffix $):= + z$a=z$+cap_jut*left; z$b=z$+ser_height*up; z$c=z$a+serif_o*up; + labels($a,$b,$c) +enddef; + +def cap_serifs_bl_p(suffix $)(expr coe):= + z$a=z$+coe*cap_jut*left; z$b=z$+ser_height*up; z$c=z$a+serif_o*up; + labels($a,$b,$c) +enddef; + +def cap_serifs_br(suffix $):= + z$a=z$+cap_jut*right; z$b=z$+ser_height*up; z$c=z$a+serif_o*up; + labels($a,$b,$c) +enddef; + +def cap_serifs_br_p(suffix $)(expr coe):= + z$a=z$+coe*cap_jut*right; z$b=z$+ser_height*up; z$c=z$a+serif_o*up; + labels($a,$b,$c) +enddef; + +vardef diag_serif(suffix $,$$):= + y$bb=y$b; z$bb=whatever[z$,z$$]; + z$bb{z$-z$$} +enddef; + +def ital_serif(suffix $,$$):= + if unknown x$'l: x$'l=.5u; fi + y$'r=y$-.75serif_drop; + pos$'(hair,60); + y$''=y$'r-1.5curve; z$''=whatever[z$l,z$$l]; + penlabels($',$''); + path _is; + _is:=z$r---z$l+o*down..{dir200}z$'r..z$'l&z$'l{right}..{down}z$''; +enddef; + +def ital_hook(suffix $,$$)suffix modifier:= + if not known x$$l: rt x$$l=w; fi + y$$=.4bar_height; bot y$'l=-o; x$'=.45[x$,x$$]; + pos$$(hair,150); pos$'(.5[hair,stem],90); penlabels($$,$'); + z$$'=z$$r+hair*up; labels($$'); + path _ih; + _ih:=z$l{down}..z$'l..z$$l if test.modifier and (dpi<=300):-- else:..z$$'&z$$'..fi z$$r..z$'r..{up}z$r; +enddef; + +def ital_kooh(suffix $,$$):= + if not known x$$r: x$$r=0; fi + y$$=H-.25bar_height; top y$'r=H+o; x$'=.45[x$,x$$]; + pos$$(hair,150); pos$'(.5[hair,stem],100); penlabels($$,$'); + z$$'=z$$l+hair*dir(-110); labels($$'); + path _ik; + _ik:=z$r{up}..z$'r..z$$r{dir-120}..z$$'&z$$'..z$$l{dir60}..z$'l..{down}z$l; +enddef; + +%%%%%%%%Arms +vardef arm_bot_r_points(suffix $, $$)suffix modifier= + numeric thick; thick=if test.modifier: alt_cap_hair else: cap_hair fi - currentbreadth; + pos$$(beak,-90); z$$a=z$$r+2u*unitvector(z$-z$$r); + z$$b=z$$r+.1u*down+1/3u*left; + x$$c=.35[x$$b,x$$a]; y$$c=y$$; + z$$d=z$$a+ser_height*left+thick*up; + z$$e=z$+thick*up+cap_jut*right; z$$f=z$+.75ser_height*up; + if (x$$dx$$e): x$$d:=x$$e fi; + z$$l.o=z$$l+serif_o*right+serif_o*down; + penlabels($$); labels($$a,$$b,$$c,$$d,$$e, $$f); + z$---z$$a...z$$b--z$$r---z$$l..{down}z$$l.o&z$$l.o..z$$c...z$$d---z$$e..{up}z$$f +enddef; + +def arm_bot_l(suffix $, $$)suffix modifier= + filldraw arm_bot_l_points($, $$).modifier--cycle; +enddef; + +vardef arm_top_r_points(suffix $, $$)suffix modifier= + numeric thick; thick=if test.modifier: alt_cap_hair else: cap_hair fi - currentbreadth; + pos$$(.65beak,90); z$$a=z$$r+2u*left; + z$$b=z$$r+1/3u*left; z$$c=z$$l+serif_o*left; + z$$d=z$$a+.75stem*left+thick*down; + z$$.$=z$+thick*down+cap_jut*right; z$$.$a=z$+.55ser_height*down; + penlabels($$); labels($$a,$$b,$$c,$$d,$$.$, $$.$a); + z$---z$$a{right}..{dir0}z$$b..z$$r+cap_hair*down---z$$l..z$$c{dir125}..z$$d---z$$.$..{down}z$$.$a +enddef; + +def arm_top_r(suffix $, $$)suffix modifier= + filldraw arm_top_r_points($, $$).modifier--cycle; +enddef; + +vardef arm_top_l_points(suffix $, $$)suffix modifier= + numeric thick; thick=if test.modifier: alt_cap_hair else: cap_hair fi - currentbreadth; + pos$$(.65beak,90); z$$a=z$$r+2u*right; + z$$b=z$$r+1/3u*right; z$$c=z$$l+serif_o*right; + z$$d=z$$a+.75stem*right+thick*down; + z$$e=z$+thick*down+cap_jut*left; z$$f=z$+.55ser_height*down; + penlabels($$); labels($$a,$$b,$$c,$$d,$$e, $$f); + z$---z$$a{left}..{left}z$$b..z$$r+cap_hair*down---z$$l..z$$c{dir55}..z$$d---z$$e..{down}z$$f +enddef; + +def arm_top_l(suffix $, $$)suffix modifier= + filldraw arm_top_l_points($, $$).modifier--cycle; +enddef; + +%%%%%%%Stroke endings +vardef smitko(suffix $)(expr size):= %draw bulb j, J , 3 + pos$(size,150); z$'=z$+.2size*up+o*right; z$''=z$+.5(size-currentbreadth)*dir-135; + labels($',$''); + z$''..z$'..z$l if bulbes:--.5[z$l,z$'']..{down}.5[z$l,z$'']fi +enddef; + +vardef one_serif(suffix $):= % serif for numeral 1 + rt z$a=(w-u,y$r); z$b=z$r+.75u*up; z$c=z$a+.5serif_o*up; + lft z$d=(u,y$l); z$e=z$l+.75u*up; z$f=z$d+.5serif_o*up; + labels($a,$b,$c,$d,$e,$f); + z$e..{left}z$f..z$d{right}..z$+ser_boule*up..{right}z$a..{left}z$c..z$b +enddef; + +%%%%%%%Simple macros +def bskpoints(suffix $,$$)(expr bjut, ejut):= + z$$ll=z$$l-bjut*unitvector(z$$-z$); z$rr=z$r-ejut*unitvector(z$-z$$); +enddef; + +vardef bskrule(suffix $,$$)(expr bjut, ejut):= + bskpoints($,$$,bjut,ejut); + z$l---z$$ll..z$$r---z$rr..cycle +enddef; + +%%%%%%%Macros for Unicode +string charuni, empty; empty:=""; +numeric uniproc; uniproc:=0; + +def uni text t:= + charuni:=t; +enddef; + +extra_beginchar:=extra_beginchar&"charuni:=empty; numeric oblu; oblu:=f_obl;"; + +%%%%%%Rounding +def obl(suffix $,$$,$$$)suffix modifier:= % rounded corners + if monospace and ((stem-hair)<.2hair): + z$ + else: + z$+(oblu.modifier,0) rotated(angle(z$$-z$)) ... z$+(oblu.modifier,0) rotated(angle(z$$$-z$)) + fi +enddef; + +boolean smer, smer.zpet; smer:=true; smer.zpet:=false; +vardef rundy(expr p, t)suffix modifier:= %rounded paths + numeric _rnd, _rndb, _oblu; + if monospace and ((stem-hair)<.2hair): + if numeric t: t else: xpart(t) fi + else: + _rnd:=if numeric t: t else: xpart(t) fi; + if _rnd=infinity: _rnd:=length(p); fi; + _rndb:=_rnd; + _oblu:=if numeric t: oblu else: ypart(t) fi; + forever: + _rnd:=_rnd if (smer.modifier): + else: - fi 0.01; + exitif length (point _rnd of p - point _rndb of p) >= _oblu; + exitif (_rnd>length(p)) or (_rnd<0); + endfor; + if (_rnd>length(p)) or (_rnd<0): _rndb else: _rnd fi + fi + enddef; + +vardef bsktouch(expr _pa,_dira,_pb,_dirb):= + ((_pa shifted (.5currentbreadth*_dira)) intersectionpoint (_pb shifted (.5currentbreadth*_dirb))) +enddef; + +%%%%%%Symbols +def zeroent(suffix $)(expr ll, rr):= % Numeral zero for percent sign + pos$a(ll,0); pos$b(vair,90); pos$c(rr,0); pos$d(vair,270); + x$a.l - x$c.r=-4.5u; x$b=x$d=.5[x$a,x$c]; + y$d.r - y$b.l=if monospace: .75\\fi bar_height; y$c=y$a=.5[y$b,y$d]; + filldraw z$a.l{down}..z$b.l..z$c.r..z$d.l..{down}cycle; + infill z$a.r{up}..z$d.r..z$c.l..z$b.r..{up}cycle; + penlabels($a,$b,$c,$d); +enddef; + +vardef bskfrench(suffix $,$$):= %French quote + save p; save tim; + path p; numeric tim[]; + pos$(hair,0); pos$'(hair,0); pos$$(curve,0); + .5[y$,y$']=y$$; x$=x$'; x$l-x$$r=stem; + p:=z$'r{dir110}..{dir120}z$$r{dir60}..{dir70}z$r; + tim1=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$r,y$$)) shifted (hair*down) )); + tim2=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$r,y$$)) shifted (hair*up) )); + filldraw z$l{dir-120}..{dir-140}z$$l{dir-50}..{dir-60}z$'l.. + subpath(0,tim1) of p..subpath(tim2,infinity) of p..cycle; + penlabels($,$',$$); +enddef; + +vardef bskfrenchr(suffix $,$$):= %Reversed french quote + save p; save tim; + path p; numeric tim[]; + pos$(hair,0); pos$'(hair,0); pos$$(curve,0); + .5[y$,y$']=y$$; x$=x$'; x$r-x$$l=-stem; + p:=z$'l{dir70}..{dir60}z$$l{dir120}..{dir110}z$l; + tim1=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$l,y$$)) shifted (hair*down) )); + tim2=xpart(p intersectiontimes ( ((x$$l,y$$)--(x$l,y$$)) shifted (hair*up) )); + filldraw z$r{dir-60}..{dir-40}z$$r{dir-130}..{dir-120}z$'r.. + subpath(0,tim1) of p..subpath(tim2,infinity) of p..cycle; + penlabels($,$',$$); +enddef; + +def less(suffix @,$,$$):= + numeric _theta; + pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@; + if (unknown y$) and (unknown y$$): y$r=h+.5rule_thickness; fi; + if (unknown x$r) and (unknown x$$r): x$r=w-x@l; fi; + _theta:=angle(z$r-z@r); + pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta+45); + z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta-90); + z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta+45); + z@'''=whatever[z@',z$r]=whatever[z@'',z$$r]; + y@l'=y@l+o; z@l'=whatever[z@l,z$l]; + bskpoints(@,$,hair,hair); + filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle; + penlabels(@,$,$$); labels(@',@'',@''',$ll,@l'); +enddef; + +def greater(suffix @,$,$$):= + numeric _theta; + pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@; + if (unknown y$) and (unknown y$$): y$l=h; fi; + if (unknown x$l) and (unknown x$$l): x$l=w-x@r; fi; + _theta:=angle(z$l-z@r); + pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta-45); + z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta+90); + z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta-45); + z@'''=whatever[z@',z$r]=whatever[z@'',z$$r]; + y@r'=y@r+o; z@r'=whatever[z@r,z$r]; + bskpoints($,@,hair,hair); + filldraw z@r..z@r'---z$rr..z$l---obl(@''',$l,$$r)---z$$r..z$$l---cycle; + penlabels(@,$,$$); labels(@',@'',@''',$rr,@r'); +enddef; + +def logor(suffix @,$,$$):= %Logical or shape + numeric _theta; + pos@(rule_thickness,90); y$=y$$; .5[x$l,x$$l]=x@; + if (unknown y$) and (unknown y$$): y$l=h; fi; + if unknown x$l: lft x$l=u; fi; + _theta:=angle(z$l-z@l); + pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta+45); + z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta-90); + z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta+45); + z@'''=whatever[z@',z$r]=whatever[z@'',z$$r]; + x@l'=x@l-o; z@l'=whatever[z@l,z$l]; + bskpoints(@,$,hair,hair); + filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle; + penlabels(@,$,$$); labels(@',@'',@''',$ll,@l'); +enddef; + +def logand(suffix @,$,$$):= %Logical and shape + numeric _theta; + pos@(rule_thickness,90); y$=y$$; .5[x$r,x$$r]=x@; + if (unknown y$) and (unknown y$$): y$r=-d; fi; + if unknown x$r: lft x$r=u; fi; + _theta:=angle(z$r-z@r); + pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta-45); + z@'=z@l+(rule_thickness-currentbreadth)*dir(_theta+90); + z@''=z@l+(rule_thickness-currentbreadth)*dir(_theta-45); + z@'''=whatever[z@',z$l]=whatever[z@'',z$$r]; + x@r'=x@r-o; z@r'=whatever[z@r,z$r]; + bskpoints(@,$,hair,hair); + filldraw z@r..z@r'---z$r...z$ll---obl(@''',$l,$$r)---z$$r..z$$l---cycle; + penlabels(@,$,$$); labels(@',@'',@''',$ll,@r'); +enddef; + +def circle_points(expr sirka):= + x4=x8=.5[x2,x6]; x1=x3=superness[x4,x2]; x5=x7=superness[x4,x6]; + y2=y6=.5[y4,y8]; y1=y7=superness[y2,y8]; y3=y5=superness[y2,y4]; + path _circle_path; + _circle_path:=z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left} + ...z5{z6-z4}...z6{up}...z7{z8-z6}...cycle; + pos2(sirka,180); pos4(sirka,90); pos6(sirka,0); pos8(sirka,270); + pos1(sirka,angle(direction 1 of _circle_path)+270); + pos3(sirka,angle(direction 3 of _circle_path)+270); + pos5(sirka,angle(direction 5 of _circle_path)-90); + pos7(sirka,angle(direction 7 of _circle_path)-90); + penlabels(1,2,3,4,5,6,7,8); +enddef; + +def draw_circle suffix smer:= + z8.smer{right}...z1.smer{z2-z8}...z2.smer{down}...z3.smer{z4-z2}...z4.smer{left}...z5.smer{z6-z4}...z6.smer{up}...z7.smer{z8-z6}...cycle +enddef; + +vardef vlnka(suffix $,$$):= + y$a.l=y$$; y$$a.r=y$; .5[x$,x$$]=.5[x$a,x$$a]=.5w; + if unknown x$ : lft x$ =u; fi; + top y$$- bot y$= spread; + if unknown y$$: top y$$=h; fi + x$$-x$$a=1/4(x$$-x$); + pos$(hair,0); pos$$(hair,0); pos$a(curve,290); pos$$a(curve,250); + z$$a.s=z$$a.r+curve*unitvector(z$$-z$); + filldraw z$r{z$a-z$}..z$a.r..z$$a.r..z$$a.s..{z$$-z$$a.r}z$$r.. + z$$l{z$$a-z$$}..z$$a.l..z$a.l..{z$-z$a.l}z$l..cycle; + penlabels($,$a,$$,$$a); labels($$a.s); +enddef; + +def sipka_points(suffix $,$$):= + numeric bskaw, bskat, bsktim[]; bskaw=abs(z$$l-z$$r)+currentbreadth; + pair bskadir; bskadir=unitvector(z$-z$$r); bskat=angle(bskadir); + path bskap[]; + pos$a(bskaw,bskat+90); z$a.r=z$-bskadir*arrsize; + z$b=z$a.r+arrwidth*dir(bskat-90); + z$c=z$a.l+((1/3arrsize,0) rotated bskat); + z$d=z$a.r+((1/3arrsize,0) rotated bskat); + z$e=z$a.r+(arrwidth-.5currentbreadth)*dir(bskat+90); + bskap0:=z$b+(hair*up rotated bskat){dir(bskat+45)}..z$c; + bskap1:=z$d..{dir(bskat+135)}z$e+(hair*down rotated bskat); + bsktim0=xpart(bskap0 intersectiontimes ((z$a.l--z$) shifted (.35arrwidth*dir(bskat-90)))); + bsktim1=xpart(bskap1 intersectiontimes ((z$a.r--z$) shifted (.35arrwidth*dir(bskat+90)))); + penlabels($,$$,$a); labels($c,$b,$c,$d,$e); +enddef; + +vardef sipka(suffix $,$$):= + sipka_points($,$$); + z$a.r{bskadir}..subpath(bsktim1,infinity) of bskap1&z$e+(hair*down rotated bskat){dir(bskat+135)} + ..z$e{dir(bskat-45)}..{dir(bskat-30)}z${dir(bskat-160)}..{dir(bskat-135)}z$b + ..{dir(bskat+45)}z$b+(hair*up rotated bskat)&subpath (0,bsktim0) of bskap0..{-bskadir}z$a.l +enddef; + +vardef sipka_ext(suffix $,$$):= + numeric bskaw, bskat, bsktim[]; bskaw=abs(z$$l-z$$r)+currentbreadth; + pair bskadir; bskadir=unitvector(z$-z$$); bskat=angle(bskadir); + path bskap[]; + pos$a(bskaw,bskat+90); z$a=z$-bskadir*arrsize; + z$b=z$a.r+arrwidth*dir(bskat-90); + z$c=z$a.l+((1/3arrsize,0) rotated bskat); + z$d=z$a.r+((1/3arrsize,0) rotated bskat); + z$e=z$a.r+(arrwidth-.5currentbreadth)*dir(bskat+90); + bskap0:=z$b+(hair*up rotated bskat){dir(bskat+45)}..z$c; + bskap1:=z$d..{dir(bskat+135)}z$e+(hair*down rotated bskat); + bsktim0=xpart(bskap0 intersectiontimes ((z$a.l--z$) shifted (.35arrwidth*dir(bskat-90)))); + bsktim1=xpart(bskap1 intersectiontimes ((z$a.r--z$) shifted (.35arrwidth*dir(bskat+90)))); + penlabels($,$$,$a); labels($c,$b,$c,$d,$e); + z$a.r{bskadir}..subpath(bsktim1,infinity) of bskap1&z$e+(hair*down rotated bskat){dir(bskat+135)} + ..z$e{dir(bskat-45)}..{dir(bskat-30)}z${dir(bskat-160)}..{dir(bskat-135)}z$b + ..{dir(bskat+45)}z$b+(hair*up rotated bskat)&subpath (0,bsktim0) of bskap0..{-bskadir}z$a.l +enddef; + +def dvojsipka_points(suffix $,$$,@,@@):= + bsktim100=xpart(bskap0 intersectiontimes (z@@--z@@+(z$-z$$r))); + bsktim101=xpart(bskap1 intersectiontimes (z@--z@+(z$-z$$r))); + z$p=point bsktim100 of bskap0; z$p.r-z$p.l=z$$r-z$$l; .5[z$p.r,z$p.l]=z$p; + z$q=point bsktim101 of bskap1; z$q.r-z$q.l=z$$r-z$$l; .5[z$q.r,z$q.l]=z$q; + z@r-z@l=z$$r-z$$l; .5[z@.r,z@.l]=z@; z@@r-z@@l=z$$r-z$$l; .5[z@@.r,z@@.l]=z@@; + bskap3=z@l+(z$-z$$r)--z@l; bskap4=z@r--z@r+(z$-z$$r); + (bsktim11,bsktim12)=bskap1 intersectiontimes bskap3; + (bsktim13,bsktim14)=bskap1 intersectiontimes bskap4; + bskap5=z@@l+(z$-z$$r)--z@@l; bskap6=z@@r--z@@r+(z$-z$$r); + (bsktim15,bsktim16)=bskap0 intersectiontimes bskap5; + (bsktim17,bsktim18)=bskap0 intersectiontimes bskap6; +penlabels($p,$q); +enddef; + +vardef dvojsipka(suffix $,$$,@,@@):= + sipka_points($,$$); + dvojsipka_points($,$$,@,@@); + oblu:=f_obl; + penlabels(@,@@); + subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1.. + subpath(rundy(bskap3,bsktim12),infinity) of bskap3.. + subpath(0,rundy(bskap4,bsktim14).zpet) of bskap4.. + subpath(rundy(bskap1,bsktim13),infinity) of bskap1 + &z$e+(hair*down rotated bskat){dir(bskat+135)}..z$e{dir(bskat-45)}.. + {dir(bskat-30)}z${dir(bskat-160)}..{dir(bskat-135)}z$b.. + {dir(bskat+45)}z$b+(hair*up rotated bskat)& + subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0.. + subpath(rundy(bskap5,bsktim16),infinity) of bskap5.. + subpath(0,rundy(bskap6,bsktim18).zpet) of bskap6.. + subpath(rundy(bskap0,bsktim17),infinity) of bskap0 +enddef; + +%%%%%%%%%%Accents +boolean capital, capital.capital; capital:=false; capital.capital:=true; + +def grave(suffix $,$$)suffix modifier:= + pos$(stem,10); pos$$(hair,0); + x$$-x$=.25w; + if unknown y$ : top y$=h; fi + if unknown y$$: y$$=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$] fi; fi + bskpoints($,$$,hair,hair); + filldraw z$$r---z$rr..z$---z$l--z$$l--cycle; + penlabels($,$$);labels($rr,$$rr); +enddef; + +def d_grave(suffix $,$$,@,@@)(expr mid)suffix modifier:= + y$=y@; y$$=y@@; + .5[.5[x$,x$$],.5[x@,x@@]]=mid; x$$-x$=x@@-x@; + pos$(stem,10); pos$$(hair,0); pos@(stem,10); pos@@(hair,0); + x$$-x$=2u; + if unknown y$ : top y$=h; fi + if unknown y$$: y$$=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$] fi; fi + bskpoints($,$$,hair,hair); bskpoints(@,@@,hair,hair); + filldraw z$$r---z$rr..z$---z$l--z$$l--cycle; + filldraw z@@r---z@rr..z@---z@l--z@@l--cycle; + penlabels($,$$,@,@@);labels($rr,$$rr,@rr,@@rr); +enddef; + +def acute(suffix $,$$)suffix modifier:= + pos$(stem,-10); pos$$(hair,0); + if (unknown x$) or (unknown x$$): x$-x$$=.25w; fi + if unknown y$ : top y$=h; fi + if unknown y$$: y$$=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$] fi; fi + bskpoints($,$$,hair,hair); + filldraw z$$r---z$rr..z$---z$l{z$$-z$l}..{z$$l-z$}z$$l--cycle; + penlabels($,$$);labels($rr,$$rr); +enddef; + +vardef acute_slope(suffix $,$$)(expr slope)suffix modifier:= + save w; w:=4slope; + acute($,$$).modifier; +enddef; + +def hacek(suffix $,$$,$$$)suffix modifier:= + {{ save oblu; oblu:=f_obl; + y$=y$$$; .55[x$,x$$$]=x$$; + if unknown y$ : top y$=h; fi + if unknown y$$l: top y$$l=if capital.modifier: cap_height + .5u else: 1/4[x_height,y$] + fi; fi + pos$(hair,10); pos$$$(hair,0); pos$$(stem,90); pos$$'(stem,0); + if unknown x$: x$$$-x$=5.5u; fi; + z$$'=z$$+.25tiny*left; + filldraw z$$$l---obl($$r,$$$l,$r)---z$r..z$---z$$'l..if not capital.modifier: z$$l.. fi z$$'r---z$$$r--cycle; + penlabels($,$$,$$',$$$); + }} +enddef; + +def circumflex(suffix $,$$,$$$)suffix modifier:= + {{ save oblu; oblu:=f_obl; + y$=y$$$; .55[x$,x$$$]=x$$; + if unknown y$$l: top y$$l=h; fi + if unknown y$l : top y$l=if capital.modifier: cap_height + .75u else: 1/2[x_height,top y$$] + fi; fi + pos$(hair,-10); pos$$$(hair,0); pos$$(.2[stem,hair],270); pos$$'(stem,0); + if unknown x$: x$$$-x$=6u; fi; + z$$'=z$$+.25tiny*left; + filldraw z$$$l---obl($$r,$$$l,$r)---z$r..z$---z$$'l..z$$l..z$$'r---z$$$r--cycle; + penlabels($,$$,$$',$$$); + }} +enddef; + +def breve(suffix $,$$,$$$)suffix modifier:= + y$=y$$$; .55[x$,x$$$]=x$$; + if unknown y$ : top y$=h; fi + if unknown y$$l: bot bot y$$l=if capital.modifier: cap_height else: 1/3[x_height, top y$]; + fi; fi + pos$(hair,10); pos$$$(hair,0); pos$$(.75[hair,stem],90); + if unknown x$$$ or unknown x$: x$$$-x$=w-2u; fi; + y$$$r:=y$$$r-.5tiny; + filldraw z$l{down}..z$$l..{up}z$$$r--z$$$l{down}..z$$r..{up}z$r--cycle; + penlabels($,$$,$$$); +enddef; + +def tieacc(suffix $,$$,$$$)suffix modifier:= + y$=y$$$; .55[x$,x$$$]=x$$; + if unknown y$$r : top y$$l=h; fi + if unknown y$: bot y$=if capital.modifier: cap_height else: 1/3[x_height, top y$$]; + fi; fi + pos$(hair,-10); pos$$$(hair,0); pos$$(.75[hair,stem],270); + if unknown x$$$ or unknown x$: x$$$-x$=w-2u; fi; + y$$$r:=y$$$r-.5tiny; + filldraw z$l{up}..z$$l..{down}z$$$r--z$$$l{up}..z$$r..{down}z$r--cycle; + penlabels($,$$,$$$); +enddef; + +def macron(suffix $,$$):= + y$=y$$; + if unknown y$: top y$=h; fi + if unknown x$$: x$$-x$=5u; fi + if (unknown x$) or (unknown x$$): .5[x$,x$$]=.5w; fi + pos$(hair,90); pos$$(hair,90); + filldraw bskrule($$,$,hair,hair); + penlabels($,$$); +enddef; + +def ring(suffix $,$$)suffix modifier:= + numeric ring_stroke; ring_stroke:=2/3[tiny,hair]; + .5[z$$a,z$$c]=.5[z$$b,z$$d]=z$; + x$$b=x$$d; y$$a=y$$c; y$$d-y$$b=(x$$c-x$$a); x$$a.l=x$$; + if unknown x$$: lft x$$=1.5u; fi + if unknown y$ : y$=if capital.modifier: .5[h,cap_height] else: .5[1/4[x_height,h],h] + fi; fi + pos$$a(ring_stroke,0); pos$$b(ring_stroke,90); + pos$$c(ring_stroke,180); pos$$d(ring_stroke,270); + filldraw z$$a.l{down}..z$$b.l..z$$c.l..z$$d.l..cycle; + infill z$$a.r{down}..z$$b.r..z$$c.r..z$$d.r..cycle; + penlabels($$a,$$b,$$c,$$d); labels($); +enddef; + +vardef dotabove(suffix $):= + save dot_size; dot_size:=stem; + if unknown y$: top y$=h; fi + y$:=y$-.5dot_size; + dot($); +enddef; + +def umlaut(suffix $,$$):= + y$=y$$; + if unknown x$ : lft x$ =u +.5dot_size; fi + if unknown x$$: lft x$$=w-u-.5dot_size; fi + dotabove($); dotabove($$); +enddef; + +def h_umlaut(suffix $,$$,@,@@)(expr slope)suffix modifier:= + y$=y$$; y@=y@@; + if unknown x$: lft x$=u+slope; fi + if unknown x$$: rt x$$=w-u; fi + acute_slope($,@,slope).modifier; acute_slope($$,@@,slope).modifier; +enddef; + +vardef tilde(suffix $,$$)suffix modifier:= + save tstem; tstem:=if capital.modifier: .7\\fi stem; + y$a.l=y$$; y$$a.r=y$; .5[x$,x$$]=.5[x$a,x$$a]=if known x.tilde: x.tilde else: .5w fi; + if unknown x$ : x$ =u; fi; + if unknown y$$: top y$$=h; fi + if unknown y$ : bot y$=if capital.modifier: cap_height else:1/3[x_height,top y$$] + fi; fi + x$$-x$$a=1/4(x$$-x$); + pos$(hair,0); pos$$(hair,0); pos$a(tstem,270); pos$$a(tstem,270); + filldraw z$r{z$a-z$}..z$a.r..z$$a.r..{z$$-z$$a}z$$r.. + z$$l{z$$a-z$$}..z$$a.l..z$a.l..{z$-z$a}z$l..cycle; + penlabels($,$a,$$,$$a); +enddef; + +def pol_cross(suffix $,$$):= + x$$-x$=4u; y$$-y$=stem; + if unknown y$: .5[y$,y$$]=.8[bar_height,x_height]; fi + pos$(bar,angle(z$$-z$)+90); pos$$(bar,angle(z$$-z$)+90); + filldraw bskrule($,$$,bar,bar); + penlabels($,$$); +enddef; + +%%%%%%Font making macros (some from cmbase) +newinternal l,r,shrink_fit; % adjustments to spacing + +def charscription(expr width, height, depth)(text t):= + def _saved_char := t; enddef; + _saved_w:=width; _saved_h:=height; _saved_d:=depth; + let bskcharscriptcmd=relax; +enddef; + +def multiply(expr x)(text t) = + forsuffixes xx=t: + multiply_:= xx; save xx; xx:=multiply_/x; + endfor; +enddef; + +def usechar text t= +{{ + save t_, WW, HH, DD; + WW:=w; HH:=h; DD:=d; + if not monospace: + save w,h,d; numeric w,h,d; + w=_saved_w; h=_saved_h; d=_saved_d; + else: + save h,d; numeric h,d; + h=_saved_h; d=_saved_d; + fi; + def t_ = transformed currenttransform t enddef; + _saved_char; +}}; +enddef; + +def restore_pars = w:=WW; h:=HH; d:=DD; enddef; + +def do_expansion(expr expansion_factor) = + forsuffixes $=u,jut,cap_jut,beak_jut,apex_corr: + $:=$.#*expansion_factor*hppp; endfor +enddef; + +def normal_adjust_fit(expr left_adjustment,right_adjustment) = + numeric charwd_in; charwd_in=charwd; + l:=-hround(left_adjustment*hppp)-letter_fit; + interim xoffset:=-l; + charwd:=charwd+2letter_fit#+left_adjustment+right_adjustment; + r:=l+hround(charwd*hppp)-shrink_fit; + w:=r-hround(right_adjustment*hppp)-letter_fit; + do_expansion(w/(charwd_in*hppp)); + enddef; + +def mono_adjust_fit(expr left_adjustment,right_adjustment) = + numeric charwd_in; charwd_in=charwd; + numeric expansion_factor; + mono_charwd#=2letter_fit# + +expansion_factor*(charwd+left_adjustment+right_adjustment); + l:=-hround(left_adjustment*expansion_factor*hppp)-letter_fit; + interim xoffset:=-l; + r:=l+mono_charwd-shrink_fit; + w:=r-hround(right_adjustment*expansion_factor*hppp)-letter_fit; + charwd:=mono_charwd#; charic:=mono_charic#; + do_expansion(w/(charwd_in*hppp)); + enddef; + +extra_endchar:=extra_endchar&"r:=r+shrink_fit;w:=r-l;"; + +def ignore_math_fit(expr left_adjustment,right_adjustment) = enddef; +def do_math_fit(expr left_adjustment,right_adjustment) = + l:=l-hround(left_adjustment*hppp); interim xoffset:=-l; + charwd:=charwd+left_adjustment+right_adjustment; + r:=l+hround(charwd*hppp)-shrink_fit; + charic:=charic-right_adjustment; + if charic<0: charic:=0; fi enddef; +def zero_width = charwd:=0; r:=l-shrink_fit enddef; +def change_width = if not monospace: % change width by $\pm1$ + if r+shrink_fit-l=floor(charwd*hppp): w:=w+1; r:=r+1; + else: w:=w-1; r:=r-1; fi fi enddef; +def center_on(expr x) = if not monospace: % change width for symmetric fit + r:=r+2x-w; w:=2x; fi enddef; +def padded expr del_sharp = + charht:=charht+del_sharp; chardp:=chardp+del_sharp enddef; + +def font_setup = + if monospace: let adjust_fit=mono_adjust_fit; + def mfudged=fudged enddef; + mono_charic#:=body_height#*slant; + if mono_charic#<0: mono_charic#:=0; fi + mono_charwd#:=9.5u#; define_whole_pixels(mono_charwd); + else: let adjust_fit=normal_adjust_fit; + def mfudged= enddef; fi + if math_fitting: let math_fit=do_math_fit + else: let math_fit=ignore_math_fit fi; + def medfig := if medieval: x_height# else: fig_height# fi enddef; + def medfigd := if medieval: desc_depth# else: 0 fi enddef; + def medfigu := if medieval: x_height else: fig_height fi enddef; + def medfigdu := if medieval: desc_depth else: 0 fi enddef; + def figw(text x) := if monofig: 9u# else: x# fi enddef; + def figwu(text x) := if monofig: 9u else: x fi enddef; + if unknown Acc_height#: Acc_height#:=cap_height#+.3x_height#; fi + define_pixels(u,width_adj,serif_fit,cap_serif_fit,jut,cap_jut,beak, + bar_height,punct_fit); + define_whole_pixels(letter_fit,tiny,ser_boule); + define_whole_vertical_pixels(body_height,asc_height,drop_stem, + cap_height,fig_height,com_height,x_height,Acc_height,comma_depth,desc_depth,serif_drop); + define_whole_blacker_pixels(hair,like_hair,stem,like_stem,curve,like_curve, + dot_size,cap_hair,like_cap_hair,alt_cap_hair,cap_stem,like_cap_stem,cap_curve,like_cap_curve); + define_whole_vertical_blacker_pixels(vair,bar,cap_bar); + define_corrected_pixels(o,apex_o); + forsuffixes $=hair,stem,cap_stem: + fudged$.#:=fudge*$.#; fudged$:=hround(fudged$.#*hppp+blacker); + forever: exitif fudged$>.9fudge*$; fudged$:=fudged$+1; endfor endfor + rule_thickness:=ceiling(rule_thickness#*hppp); + heavy_rule_thickness:=ceiling(3rule_thickness#*hppp); + oo:=vround(.5o#*hppp*o_correction)+eps; + apex_oo:=vround(.5apex_o#*hppp*o_correction)+eps; + lowres_fix(stem,curve) 1.3; + lowres_fix(stem,curve) 1.2; + lowres_fix(cap_stem,cap_curve) 1.2; + lowres_fix(hair,cap_hair,alt_cap_hair) 1.2; + lowres_fix(cap_bar,bar) 1.2; + ess:=(ess#/stem#)*stem; cap_ess:=(cap_ess#/cap_stem#)*cap_stem; + dw:=(curve#-stem#)*hppp; bold:=curve#*hppp+blacker; + serif_bend:=.25o*down; + dh#:=.6designsize; define_whole_vertical_pixels(dh); + more_super:=max(superness,sqrt .77superness); + hein_super:=max(superness,sqrt .81225258superness); % that's $2^{-.3}$ + clear_pen_memory; + if tiny=0: tiny:=1; fi +%%% fine $ %%%% temporary formatting convention for MFT + if tiny>fudged.hair: tiny:=fudged.hair; fi + tiny.breadth:=tiny; + pickup if tiny=0: nullpen else: pencircle scaled tiny; tiny:=tiny-eps fi; + tiny.nib:=savepen; breadth_[tiny.nib]:=tiny; + forsuffixes $$=lft,rt,top,bot: shiftdef(tiny.$$,$$ 0); endfor +%%% @ $ %%%% restore ordinary formatting for $ + min_Vround:=tiny.breadth; + if min_Vround 4/3): true else: false fi; + if known bsk_outline#: %Don't work correctly at small resolutions + define_whole_pixels(bsk_outline); + numeric bskoutsize; bskoutsize:= tiny-bsk_outline; if bskoutsize<1: bskoutsize:=1; fi; + pickup pencircle scaled bskoutsize; bskoutlinepen.nib:=savepen; + breadth_[bskoutlinepen.nib]:=bskoutsize; forsuffixes $$=lft,rt,top,bot: shiftdef(bskoutlinepen.$$,$$ 0); endfor + def bsk_savepen:= pen bsk_pen; bsk_pen:=currentpen; enddef; + def bsk_restorepen:= currentpen:=bsk_pen; enddef; + let bskfilldraw = filldraw; + def infill text t:= bsk_savepen; path _bp; _bp:=t; cullit; + picture bskpict; bskpict:=currentpicture; currentpicture:=nullpicture; + draw _bp; cullit; fill _bp; cull currentpicture keeping (2,2); + pickup bskoutlinepen.nib; erase draw _bp; + bsk_restorepen; + currentpicture:=currentpicture+bskpict; bskpict:=nullpicture; + enddef; + def filldraw text t:= bsk_savepen; path _bp; _bp:=t; bskfilldraw _bp; cullit; pickup bskoutlinepen.nib; erase bskfilldraw _bp; cullit; bsk_restorepen; enddef; + fi; + if not known dpi: begingroup interim warningcheck:=0; numeric dpi; dpi:=pixels_per_inch; endgroup; fi; + enddef; + +vardef clockwise primary c = + if turningcheck>0: + interim autorounding:=0; + if turningnumber c > 0: reverse fi + fi + c enddef; + +def shiftdef(suffix $)(expr delta) = + vardef $ primary x = x+delta enddef enddef; + +def makebox(text rule) = + for y=0,asc_height,body_height,x_height,bar_height,-desc_depth,-body_depth: + rule((l,y)t_,(r,y)t_); endfor % horizontals + for x=l,r: rule((x,-body_depth)t_,(x,body_height)t_); endfor % verticals + rule((r,-body_depth),(r,body_height)); + for x=u*(1+floor(l/u)) step u until r-1: + rule((x,-body_depth)t_,(x,body_height)t_); endfor % more verticals + if charic<>0: + rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_)); fi % italic correction + enddef; +def maketicks(text rule) = + for y=0,h.o_,-d.o_: + rule((l,y),(l+10,y)); rule((r-10,y),(r,y)); endfor % horizontals + for x=l,r: + rule((x,10-d.o_),(x,-d.o_)); rule((x,h.o_-10),(x,h.o_)); endfor % verticals + if charic<>0: + rule((r+charic*pt,h.o_-10),(r+charic*pt,h.o_)); fi % italic correction + enddef; +rulepen:=pensquare; + +vardef penpos@#(expr b,d) = + if known b: if b<=0: errmessage "bad penpos"; fi fi + (x@#r-x@#l,y@#r-y@#l)=(b,0) rotated d; + x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef; + +newinternal currentbreadth; +vardef pos@#(expr b,d) = +% if known b: if b<=currentbreadth: errmessage "bad pos"; fi fi + (x@#r-x@#l,y@#r-y@#l)=(b-currentbreadth,0) rotated d; + x@#=.5(x@#l+x@#r); y@#=.5(y@#l+y@#r) enddef; +def numeric_pickup_ primary q = + currentpen:=pen_[q]; + pen_lft:=pen_lft_[q]; pen_rt:=pen_rt_[q]; + pen_top:=pen_top_[q]; pen_bot:=pen_bot_[q]; + currentpen_path:=pen_path_[q]; + if known breadth_[q]: currentbreadth:=breadth_[q]; fi enddef; + +vardef ic# = charic enddef; +vardef h# = charht enddef; +vardef w# = charwd enddef; +vardef d# = chardp enddef; + +let {{=begingroup; let }}=endgroup; +def .... = .. tension atleast .9 .. enddef; +def less_tense = save ...; let ...=.... enddef; +def ?? = hide(showvariable x,y) enddef; + +let semi_ =;; let colon_ = :; let endchar_ = endchar; +def iff expr b = if b:let next_=use_it else:let next_=lose_it fi; next_ enddef; +def use_it = let : = restore_colon; enddef; +def restore_colon = let : = colon_; enddef; +def lose_it = let endchar=fi; inner bskchar; let ;=fix_ semi_ if false enddef; +def fix_=let ;=semi_; let endchar=endchar_; outer bskchar; enddef; +def always_iff = let : = endgroup; killboolean enddef; +def killboolean text t = use_it enddef; +outer bskchar; + +endinput diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskex10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskex10.mf new file mode 100644 index 00000000000..5048f1375c1 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskex10.mf @@ -0,0 +1,78 @@ +% Boisik Math Italic 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKMI"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=22/36pt#; % lowercase stem breadth +curve#:=25/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=28/36pt#; +like_curve#:=36/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=27/36pt#; % uppercase stem breadth +cap_curve#:=31/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=36/36pt#; +like_cap_curve#:=44/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=27/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=true; % should math-mode spacing be used? + +% verbatim copy from cmex10.mf +fontdimen 8: + rule_thickness#, % default\_rule\_thickness + 40/36pt#, % big\_op\_spacing1 + 60/36pt#, % big\_op\_spacing2 + 72/36pt#, % big\_op\_spacing3 + 216/36pt#, % big\_op\_spacing4 + 36/36pt#; % big\_op\_spacing5 + +generate bskext % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskext.mf b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf new file mode 100644 index 00000000000..e2242841872 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf @@ -0,0 +1,12 @@ +%Boisik driver file for extensible math symbols +mode_setup; font_setup; + +input bsklist-ex; +input bsksymbols; + +font_normal_space 5u#; +font_normal_stretch 3u#; font_normal_shrink 2u#; +font_quad 15u#; + font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bski10.mf b/Master/texmf-dist/fonts/source/public/boisik/bski10.mf new file mode 100644 index 00000000000..834f70c0b7d --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bski10.mf @@ -0,0 +1,69 @@ +% Boisik Italic 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKI"; font_size 10pt#; + +u#:=17/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=6/36pt#; % diameter of rounded corners +hair#:=8/36pt#; % lowercase hairline breadth +stem#:=20/36pt#; % lowercase stem breadth +curve#:=23/36pt#; % lowercase curve breadth +like_hair#:=10/36pt#; +like_stem#:=22/36pt#; +like_curve#:=26/36pt#; +ess#:=24/36pt#; % breadth in middle of lowercase s +dot_size#:=25/36pt#; % diameter of dots +cap_hair#:=10/36pt#; % uppercase hairline breadth +alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth +cap_stem#:=23/36pt#; % uppercase stem breadth +cap_curve#:=25/36pt#; % uppercase curve breadth +like_cap_hair#:=12/36pt#; +like_cap_stem#:=26/36pt#; +like_cap_curve#:=30/36pt#; +cap_ess#:=28/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=23/36pt#; % protrusion of lowercase serifs +cap_jut#:=28/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=9/36pt#; % vertical diameter of hairlines +bar#:=9/36pt#; % lowercase bar thickness +cap_bar#:=9/36pt#; % uppercase bar thickness +serif_drop#:=12/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=.2; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskital % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf new file mode 100644 index 00000000000..b48ca282564 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf @@ -0,0 +1,69 @@ +% Boisik Bold Italic 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKIB"; font_size 10pt#; + +u#:=20.4/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=9/36pt#; % diameter of rounded corners +hair#:=15/36pt#; % lowercase hairline breadth +stem#:=32/36pt#; % lowercase stem breadth +curve#:=40/36pt#; % lowercase curve breadth +like_hair#:=15/36pt#; +like_stem#:=32/36pt#; +like_curve#:=40/36pt#; +ess#:=34/36pt#; % breadth in middle of lowercase s +dot_size#:=41/36pt#; % diameter of dots +cap_hair#:=16/36pt#; % uppercase hairline breadth +alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth +cap_stem#:=40/36pt#; % uppercase stem breadth +cap_curve#:=48/36pt#; % uppercase curve breadth +like_cap_hair#:=16/36pt#; +like_cap_stem#:=40/36pt#; +like_cap_curve#:=48/36pt#; +cap_ess#:=41/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.6pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=.2; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskital % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf new file mode 100644 index 00000000000..86f4b9d90d1 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskiol10.mf @@ -0,0 +1,71 @@ +% Boisik Italic Outline 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKIOL"; font_size 10pt#; + +u#:=17/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=6/36pt#; % diameter of rounded corners +hair#:=8/36pt#; % lowercase hairline breadth +stem#:=20/36pt#; % lowercase stem breadth +curve#:=23/36pt#; % lowercase curve breadth +like_hair#:=10/36pt#; +like_stem#:=22/36pt#; +like_curve#:=26/36pt#; +ess#:=24/36pt#; % breadth in middle of lowercase s +dot_size#:=25/36pt#; % diameter of dots +cap_hair#:=10/36pt#; % uppercase hairline breadth +alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth +cap_stem#:=23/36pt#; % uppercase stem breadth +cap_curve#:=25/36pt#; % uppercase curve breadth +like_cap_hair#:=12/36pt#; +like_cap_stem#:=26/36pt#; +like_cap_curve#:=30/36pt#; +cap_ess#:=28/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=23/36pt#; % protrusion of lowercase serifs +cap_jut#:=28/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=9/36pt#; % vertical diameter of hairlines +bar#:=9/36pt#; % lowercase bar thickness +slab#:=9/36pt#; % serif and arm thickness +cap_bar#:=9/36pt#; % uppercase bar thickness +serif_drop#:=12/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=.2; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +bsk_outline#:=.1pt#; +generate bskital % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskital.mf b/Master/texmf-dist/fonts/source/public/boisik/bskital.mf new file mode 100644 index 00000000000..f502609f43a --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskital.mf @@ -0,0 +1,21 @@ +%Boisik driver file for text italic fonts +mode_setup; font_setup; + +let bskboundary=endinput; +input bsklist-uc; +input bsklist-lc; +chars.sign_pound:=ASCII"$"; + +input bskletters-r; +input bskletters-i; +input bskletters-o; +input bsksymbols; + +input bskligtab-i; + +font_normal_space 5u#; +font_normal_stretch 3u#; font_normal_shrink 2u#; +font_quad 15u#; + font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf new file mode 100644 index 00000000000..7fe49ed5f73 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskiu10.mf @@ -0,0 +1,69 @@ +% Boisik Italic Unslanted 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKIU"; font_size 10pt#; + +u#:=17/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=6/36pt#; % diameter of rounded corners +hair#:=8/36pt#; % lowercase hairline breadth +stem#:=20/36pt#; % lowercase stem breadth +curve#:=23/36pt#; % lowercase curve breadth +like_hair#:=10/36pt#; +like_stem#:=22/36pt#; +like_curve#:=26/36pt#; +ess#:=24/36pt#; % breadth in middle of lowercase s +dot_size#:=25/36pt#; % diameter of dots +cap_hair#:=10/36pt#; % uppercase hairline breadth +alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth +cap_stem#:=23/36pt#; % uppercase stem breadth +cap_curve#:=25/36pt#; % uppercase curve breadth +like_cap_hair#:=12/36pt#; +like_cap_stem#:=26/36pt#; +like_cap_curve#:=30/36pt#; +cap_ess#:=28/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=23/36pt#; % protrusion of lowercase serifs +cap_jut#:=28/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=9/36pt#; % vertical diameter of hairlines +bar#:=9/36pt#; % lowercase bar thickness +cap_bar#:=9/36pt#; % uppercase bar thickness +serif_drop#:=12/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskital % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf new file mode 100644 index 00000000000..41f83b76e64 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf @@ -0,0 +1,69 @@ +% Boisik Bold Italic Unslanted 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKIUB"; font_size 10pt#; + +u#:=20.4/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=9/36pt#; % diameter of rounded corners +hair#:=15/36pt#; % lowercase hairline breadth +stem#:=32/36pt#; % lowercase stem breadth +curve#:=40/36pt#; % lowercase curve breadth +like_hair#:=15/36pt#; +like_stem#:=32/36pt#; +like_curve#:=40/36pt#; +ess#:=34/36pt#; % breadth in middle of lowercase s +dot_size#:=41/36pt#; % diameter of dots +cap_hair#:=16/36pt#; % uppercase hairline breadth +alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth +cap_stem#:=40/36pt#; % uppercase stem breadth +cap_curve#:=48/36pt#; % uppercase curve breadth +like_cap_hair#:=16/36pt#; +like_cap_stem#:=40/36pt#; +like_cap_curve#:=48/36pt#; +cap_ess#:=41/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.6pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskital % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf new file mode 100644 index 00000000000..9e6b56d6e10 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf @@ -0,0 +1,3875 @@ +%Boisik Latin letters in italic form + +charscription(10.5u,x_height,0)( +path p[]; numeric tim[]; oblu:=2oblu; +pos1(stem,0); pos2(stem,0); +x1=x2; rt x2r=w-2.5u; +top y1=h-hair; y2=.35bar_height; +pos4(hair,90); pos5(curve,180); pos6(.5[hair,stem],-90); +pos7(stem,0); x7=x1; y7=.5bar_height; +top y4r=h+o; x4=.5w+u; y5=bar_height; lft x5r=u; +bot y6r=-o; x6=x4-u; +p0=z4r{left}..z5r..z6r..{up}z7r; +ital_hook(2,3); +p1=_ih; +p2=z4l{left}..z5l..z6l..{up}z7l---z1l; +(tim0,tim1)=p0 intersectiontimes p1; +filldraw subpath(rundy(p1,tim1),infinity) of p1---z1r + ..subpath(0,rundy(p0,tim0).zpet) of p0..cycle; +infill p2..cycle; +penlabels(0,1,2,4,5,6,7); +); + +iff known chars.latin_a: +bskchar "The italic letter a"; +beginchar(chars.latin_a,10.5u#,x_height#,0); uni "0x0061"; +italcorr x_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_aacute: +bskchar "The italic letter a with acute"; +beginchar(chars.latin_aacute,10.5u#,asc_height#,0); uni "0x00E1"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x4; acute(100,101); +endchar; + +iff known chars.latin_agrave: +bskchar "The italic letter a with grave"; +beginchar(chars.latin_agrave,10.5u#,asc_height#,0); uni "0x00E0"; +italcorr x_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x1; grave(100,101); +endchar; + +iff known chars.latin_aumlaut: +bskchar "The italic letter a with umlaut"; +beginchar(chars.latin_aumlaut,10.5u#,asc_height#-dot_size#,0); uni "0x00E4"; +italcorr (asc_height#-dot_size#)*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x6; x101-x100=1/3w; umlaut(100,101); +endchar; + +iff known chars.latin_adoublegrave: +bskchar "The italic letter a with doublegrave"; +beginchar(chars.latin_adoublegrave,10.5u#,asc_height#,0); uni "0x0201"; +italcorr x_height#*slant-.5u#; +pickup tiny.nib; +adjust_fit(0,0); +usechar; +x102-x100=3u; +d_grave(100,101,102,103,x6); +endchar; + +iff known chars.latin_acircumflex: +bskchar "The italic letter a with circumflex"; +beginchar(chars.latin_acircumflex,10.5u#,asc_height#-.1x_height#,0); uni "0x00E2"; +italcorr .5[asc_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; +circumflex(100,101,102); +endchar; + +iff known chars.latin_acaron: +bskchar "The italic letter a with caron"; +beginchar(chars.latin_acaron,10.5u#,asc_height#,0); uni "0x01CE"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; +hacek(100,101,102); +endchar; + +iff known chars.latin_abreve: +bskchar "The italic letter a with breve"; +beginchar(chars.latin_abreve,10.5u#,asc_height#+apex_o#,0); uni "0x0103"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; x102-x100=5u; +breve(100,101,102); +endchar; + +iff known chars.latin_ainvbreve: +bskchar "The italic letter a with inverted breve"; +beginchar(chars.latin_ainvbreve,10.5u#,asc_height#,0); uni "0x0203"; +italcorr .5[asc_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; x102-x100=5u; +tieacc(100,101,102); +endchar; + +iff known chars.latin_amacron: +bskchar "The italic letter a with macron"; +beginchar(chars.latin_amacron,10.5u#,.5[asc_height#,x_height#],0); uni "0x0101"; +italcorr .5[asc_height#,x_height#]*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +macron(100,101); +endchar; + +iff known chars.latin_atilde: +bskchar "The italic letter a with tilde"; +beginchar(chars.latin_atilde,10.5u#,asc_height#,0); uni "0x00E3"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=6u; lft x.tilde=x6; +tilde(100,101); +endchar; + +iff known chars.latin_aring: +bskchar "The italic letter a with ring"; +beginchar(chars.latin_aring,10.5u#,asc_height#,0); uni "0x00E5"; +italcorr .5[asc_height#,x_height#]*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x100=x4; x100-x101=1.3u; +ring(100,101); +endchar; + +iff known chars.latin_adotabove: +bskchar "The italic letter a with dot above"; +beginchar(chars.latin_adotabove,10.5u#,asc_height#-.5dot_size#,0); uni "0x0227"; +italcorr x_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; +dotabove(100); +endchar; + +iff known chars.latin_a_feminine: +bskchar "Feminine ordinal indicator (superscript italic a)"; +beginchar(chars.latin_a_feminine,6.25u#,asc_height#-.5x_height#,0); uni "0x00AA"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +multiply(.85)(curve,hair,vair); +usechar shifted (-u,-y6r) scaled .5 shifted (u+HH*slant,HH); +endchar; + +iff known chars.latin_aogonek: +bskchar "The italic letter a with ogonek"; +beginchar(chars.latin_a,10.5u#,x_height#,.85desc_depth#); uni "0x0105"; +italcorr x_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(stem,0); pos2(stem,0); +x1=x2; rt x2r=w-2.5u; +top y1=h-hair; y2=.35bar_height; +pos4(hair,90); pos5(curve,180); pos6(.5[hair,stem],-90); +pos7(stem,0); x7=x1; y7=.5bar_height; +pos8(stem,0); pos9(curve,0); pos10(hair,45); pos11(hair,160); +top y4r=h+o; x4=.5w+u; y5=bar_height; lft x5r=u; +bot y6r=-o; x6=x4-u; +x8=x9l+1.5u; z8r=z2'l; x10-x9l=3u; rt x11l=x10+1.5u; +y9=-.5d; bot y10l=-d; y11=-2/3d; +p0=z4r{left}..z5r..z6r..{up}z7r; +ital_hook(2,3); +p1=_ih; +p2=z4l{left}..z5l..z6l..{up}z7l---z1l; +p3=z8l{z9l-z8r}..z9l...z10l..{z8-z9}z11l..z11r{z9-z8}..z10r..z9r..z8r; +(tim2,tim3-2)=p1 intersectiontimes subpath(2,infinity) of p3; +(tim4,tim5)=p0 intersectiontimes p1; +filldraw subpath(rundy(p3,0),rundy(p3,tim3).zpet) of p3 + ..subpath(rundy(p1,tim2),infinity) of p1---z1r + ..subpath(0,rundy(p0,tim4).zpet) of p0..cycle; +infill p2..cycle; +penlabels(0,1,2,4,5,6,7,8,9,10,11); +endchar; + +iff known chars.latin_b: +bskchar "The italic letter b"; +beginchar(chars.latin_b,11.25u#,asc_height#,0); uni "0x0062"; +italcorr bar_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=3oblu; +pos1(stem,0); pos2(stem,0); +x1=x2; lft x1l=2.75u; +y1=h; y2=.5bar_height; +ital_serif(1,2); +pos3(.5[hair,stem],90); pos4(curve,180); +pos5(hair,-90); pos6(stem,0); +x3=.5[w-u,x2]-u; bot y3l=-o; +rt x4l=w-u; y4=bar_height; +x5=x3+1.5u; top y5l=x_height+o; +x6=x2; y6=.5bar_height; +p0=z2r--z1r; +p1=z2l..z3l..z4l..{left}z5l..{down}z6l; +(tim0,tim1)=p0 intersectiontimes p1; +filldraw subpath(rundy(p0,tim0),infinity) of p0.._is---subpath(0,rundy(p1,tim1).zpet) of p1..cycle; +infill z6r{down}..z3r..z4r..{left}z5r..cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_blank_b: +bskchar "Blank italic b sign"; +beginchar(chars.sign_blank_b,11.25u#,asc_height#,0); uni "non"; +italcorr bar_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=3f_obl; oblu.light:=2f_obl; +pos1(stem,0); pos2(stem,0); +x1=x2; lft x1l=2.75u; +y1=h; y2=.5bar_height; +ital_serif(1,2); +pos3(.5[hair,stem],90); pos4(curve,180); +pos5(hair,-90); pos6(stem,0); +x3=.5[w-u,x2]-u; bot y3l=-o; +rt x4l=w-u; y4=bar_height; +x5=x3+1.5u; top y5l=x_height+o; +x6=x2; y6=.5bar_height; +lft x7=.5u; x8=.5w+u; y8=.6[x_height,h]; y7=x_height; +theta:=angle(z8-z7)+90; +pos7(bar,theta); pos8(bar,theta); +x7'l=x7'r=x1l; x8'l=x8'r=x1r; bskpoints(7,8,hair,hair); +z7'l=whatever[z7l,z8l]; z8'l=whatever[z7l,z8l]; +z7'r=whatever[z7r,z8r]; z8'r=whatever[z7r,z8r]; +p0=z2r---obl(8'l,2r,8l).light---z8ll..z8r---obl(8'r,8r,1r).light---z1r; +p1=z2l..z3l..z4l..{left}z5l..{down}z6l; +(tim0,tim1)=p0 intersectiontimes p1; +filldraw subpath(rundy(p0,tim0),infinity) of p0.._is + ---obl(7'r,1'',7r).light---z7rr..z7l + ---obl(7'l,7l,2l)---subpath(0,rundy(p1,tim1).zpet) of p1..cycle; +infill z6r{down}..z3r..z4r..{left}z5r..cycle; labels(8ll,7rr); +penlabels(1,2,3,4,5,6,7,7',8,8'); +endchar; + +charscription(9u,x_height,0)( +numeric cend; cend:=stem; +pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20); +pos0(hair,135); +lft x1l=u; y1=.5h; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=h+o; +rt x0l=w-u; y0=.25h; +rt x4r=w-1.25u; top y4r=.9h; +z4'=z4l+.75stem*unitvector(z4-z3); +filldraw z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4r..z4'..{up}z4l.. + z3r{left}..z1r..{right}z2r..{dir80}z0r..cycle; +penlabels(0,1,2,3,4); labels(4'); +); + +iff known chars.latin_c: +bskchar "The italic letter c"; +beginchar(chars.latin_c,9u#,x_height#,0); uni "0x0063"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_ccaron: +bskchar "The italic letter c with caron"; +beginchar(chars.latin_ccaron,9u#,asc_height#,0); uni "0x010D"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3; +hacek(100,101,102); +endchar; + +iff known chars.latin_cacute: +bskchar "The italic letter c with acute"; +beginchar(chars.latin_cacute,9u#,asc_height#,0); uni "0x0107"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; +acute(100,101); +endchar; + +iff known chars.latin_ccircumflex: +bskchar "The italic letter c with circumflex"; +beginchar(chars.latin_ccircumflex,9u#,asc_height#-.1x_height#,0); uni "0x0109"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x101=x3; +circumflex(100,101,102); +endchar; + +iff known chars.latin_cdotabove: +bskchar "The italic letter c with dot above"; +beginchar(chars.latin_cdotabove,9u#,asc_height#-.5dot_size#,0); uni "0x010B"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x3; +dotabove(100); +endchar; + +iff known chars.latin_ccedilla: +bskchar "The italic letter c with cedilla"; +beginchar(chars.latin_ccedilla,9u#,x_height#,.65desc_depth#); uni "0x00E7"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric cend, tim[]; cend:=stem; +path p[]; +pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20); +pos0(hair,135); +pos5(.5stem,0); pos6(.5stem,0); pos7(.8stem,0); pos8(.5stem,-110); +lft x1l=u; y1=.5h; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=h+o; +rt x0l=w-u; y0=.25h; +rt x4r=w-1.25u; top y4r=.9h; +z4'=z4l+.75stem*unitvector(z4-z3); +x5r=x6r; z5r=z2l; y6=-hair; y7=-.5d; +rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d; +p1:=z0l{dir-100}..{left}z2l..z1l..{right}z3l; +p2:=z6r..{down}z7r..{left}z8r..{right}z8l..{up}z7l..z6l--z5l; +p3:=z5r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2; +tim1=xpart(p1 intersectiontimes (z6l--(x6l,y2r))); +filldraw subpath(0,rundy(p1,1).zpet) of p1..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3..subpath(rundy(p1,tim1),infinity) of p1..z4r..z4'..{up}z4l.. + z3r{left}..z1r..{right}z2r..{dir80}z0r..cycle; +penlabels(0,1,2,3,4,5,6,7,8); labels(4'); +endchar; + +iff known chars.sign_cent: +bskchar "Cent sign"; +beginchar(chars.sign_cent,9u#,asc_height#,comma_depth#); uni "0x00A2"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric cend, tim[]; cend:=stem; +path p[]; +pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20); +pos0(hair,135); +lft x1l=u; y1=.5x_height; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=x_height+o; +rt x0l=w-u; y0=.25x_height; +rt x4r=w-1.25u; top y4r=.9x_height; +z4'=z4l+.75stem*unitvector(z4-z3); +top z5=(x3,h); z6=(x3,-d); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90); +bskpoints(5,6,hair,hair); +p0:=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4r..z4'..{up}z4l; +p1:=z4l{up}..z3r{left}..z1r..{right}z2r..{dir80}z0r; +p2:=z6ll---z5l; +p3:=z5rr---z6r; +(tim0,tim1)=p0 intersectiontimes p3; +(tim2,tim3)=p0 intersectiontimes p2; +(tim4-2,tim5)=subpath (2,infinity) of p0 intersectiontimes p2; +(tim6-2,tim7)=subpath (2,infinity) of p0 intersectiontimes p3; +(tim8,tim9)=p1 intersectiontimes p3; +(tim10-2,tim11)=subpath(2,infinity) of p1 intersectiontimes p3; +(tim12,tim13)=p1 intersectiontimes p2; +(tim14-2,tim15)=subpath(2,infinity) of p1 intersectiontimes p2; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p3,tim1),infinity) of p3 + ---subpath(0,rundy(p2,tim3).zpet) of p2 + ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0 + ..subpath(rundy(p2,tim5),infinity) of p2 + ..subpath(0,rundy(p3,tim7).zpet) of p3 + ..subpath(rundy(p0,tim6),infinity) of p0 + ..subpath(0,rundy(p1,tim8).zpet) of p1 + ..subpath(rundy(p3,tim9),rundy(p3,tim11).zpet) of p3 + ..subpath(rundy(p1,tim10),infinity) of p1..cycle; +infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1 + ..subpath(rundy(p2,tim15),rundy(p2,tim13).zpet) of p2 + ..cycle; +penlabels(0,1,2,3,4,5,6); labels(4'); +endchar; + +iff known chars.sign_cent_old: +bskchar "Old style cent sign"; +beginchar(chars.sign_cent,9u#,asc_height#,comma_depth#); uni "non"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric cend, tim[]; cend:=stem; +path p[]; +pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20); +pos0(hair,135); +lft x1l=u; y1=.5x_height; x2=.5w+u; x3=.5w+1.25u; bot y2l=-o; top y3l=x_height+o; +rt x0l=w-u; y0=.25x_height; +rt x4r=w-1.25u; top y4r=.9x_height; +z4'=z4l+.75stem*unitvector(z4-z3); +z5=(w-u,h); z6=(u,-d); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90); +bskpoints(5,6,hair,hair); +p0:=z0l{dir-100}..{left}z2l..z1l..{right}z3l..z4r..z4'..{up}z4l; +p1:=z4l{up}..z3r{left}..z1r..{right}z2r..{dir80}z0r; +p2:=z6ll---z5l; +p3:=z5rr---z6r; +(tim0,tim1)=p0 intersectiontimes p3; +(tim2,tim3)=p0 intersectiontimes p2; +(tim4-2,tim5)=subpath (2,infinity) of p0 intersectiontimes p2; +(tim6-2,tim7)=subpath (2,infinity) of p0 intersectiontimes p3; +(tim8,tim9)=p1 intersectiontimes p3; +(tim10-2,tim11)=subpath(2,infinity) of p1 intersectiontimes p3; +(tim12,tim13)=p1 intersectiontimes p2; +(tim14-2,tim15)=subpath(2,infinity) of p1 intersectiontimes p2; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p3,tim1),infinity) of p3 + ---subpath(0,rundy(p2,tim3).zpet) of p2 + ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0 + ..subpath(rundy(p2,tim5),infinity) of p2 + ..subpath(0,rundy(p3,tim7).zpet) of p3 + ..subpath(rundy(p0,tim6),infinity) of p0 + ..subpath(0,rundy(p1,tim8).zpet) of p1 + ..subpath(rundy(p3,tim9),rundy(p3,tim11).zpet) of p3 + ..subpath(rundy(p1,tim10),infinity) of p1..cycle; +infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1 + ..subpath(rundy(p2,tim15),rundy(p2,tim13).zpet) of p2 + ..cycle; +penlabels(0,1,2,3,4,5,6); labels(4'); +endchar; + +charscription(11u,asc_height,0)( +numeric tim[]; path p[]; oblu:=3oblu; +pos1(stem,0); pos2(stem,0); +x1=x2; rt x1r=w-2u; x1'l=x1l-2stem; +y1=h; y2=.35bar_height; +ital_serif(1,2); ital_hook(2,3); +pos4(hair,-90); pos5(curve,180); +pos6(.5[hair,stem],90); pos7(stem,0); +x4=.5[u,x2]-u; bot y4r=-o; +lft x5r=u; y5=bar_height; +x6=x4+1.5u; top y6r=x_height+o; +x7=x2; y7=bar_height; +p0=z7l--reverse _is; +p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r; +p2=reverse _ih..z7l; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2-1,tim3)=subpath(1,infinity) of p2 intersectiontimes p1; +filldraw subpath(rundy(p0,tim0),infinity) of p0 + ---subpath(0,rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1 + ..cycle; +infill z7l{down}..z4l..z5l..{right}z6l..cycle; +penlabels(1,2,4,5,6,7); +); + +iff known chars.latin_d: +bskchar "The italic letter d"; +beginchar(chars.latin_d,11u#,asc_height#,0); uni "0x0064"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_dcaron: +bskchar "The italic letter d with caron (treated like comma)"; +beginchar(chars.latin_dcaron,11u#,asc_height#,0); uni "0x010F"; +italcorr asc_height#*slant+1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +y100''r=h; rt x100'''=w+.5u; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_dstroke: +bskchar "The italic letter d with stroke"; +beginchar(chars.latin_dstroke,11u#,asc_height#,0); uni "0x0111"; +italcorr .4[x_height#,asc_height#]*slant+.5u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; +pos1(stem,0); pos2(stem,0); +pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90); +x1=x2; rt x1r=w-2u; x1'l=x1l-2stem; +y1=h; y2=.35bar_height; +ital_serif(1,2); ital_hook(2,3); +pos4(hair,-90); pos5(curve,180); +pos6(.5[hair,stem],90); pos7(stem,0); +x4=.5[u,x2]-u; bot y4r=-o; +lft x5r=u; y5=bar_height; +x6=x4+1.5u; top y6r=x_height+o; +x7=x2; y7=bar_height; +x9-x8=4u; y9=y9'=y8=y8'=.4[x_height,h]; .5[x8,x9]=x1; +x8'=x1l; x9'=x1r; bskpoints(8,9,hair,hair); +p0=z7l---obl(8'l,7l,8l)---z8l..z8rr---obl(8'r,8r,1l)---reverse _is + ---obl(9'r,1r,9r)---z9r..z9ll---obl(9'l,9l,2r); +p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r; +p2=reverse _ih..z7l; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2-1,tim3)=subpath(1,infinity) of p2 intersectiontimes p1; +oblu:=3oblu; +filldraw subpath(rundy(p0,tim0),infinity) of p0 + ---subpath(0,rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1 + ..cycle; +infill z7l{down}..z4l..z5l..{right}z6l..cycle; +penlabels(1,2,4,5,6,7,8,8',9,9'); labels(8rr,9ll); +endchar; + +iff known chars.sign_dong: +bskchar "Dong sign"; +beginchar(chars.sign_dong,11u#,asc_height#,2rule_thickness#+o#); uni "0x20AB"; +italcorr .4[x_height#,asc_height#]*slant+.5u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; +pos1(stem,0); pos2(stem,0); +pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90); +pos10(rule_thickness,90); pos11(rule_thickness,90); +x1=x2; rt x1r=w-2u; x1'l=x1l-2stem; +y1=h; y2=.35bar_height; +ital_serif(1,2); ital_hook(2,3); +pos4(hair,-90); pos5(curve,180); +pos6(.5[hair,stem],90); pos7(stem,0); +x4=.5[u,x2]-u; bot y4r=-o; +lft x5r=u; y5=bar_height; +x6=x4+1.5u; top y6r=x_height+o; +x7=x2; y7=bar_height; +x8=.5[x5,x6]; rt x9=w-.5u; y9=y9'=y8=y8'=.4[x_height,h]; +x8'=x1l; x9'=x1r; bskpoints(8,9,hair,hair); +bot y10l=bot y11l=-d; lft x10=u; rt x11=w-u; +p0=z7l---obl(8'l,7l,8l)---z8l..z8rr---obl(8'r,8r,1l)---reverse _is + ---obl(9'r,1r,9r)---z9r..z9ll---obl(9'l,9l,2r); +p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r; +p2=reverse _ih..z7l; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2-1,tim3)=subpath(1,infinity) of p2 intersectiontimes p1; +oblu:=3oblu; +filldraw subpath(rundy(p0,tim0),infinity) of p0 + ---subpath(0,rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1 + ..cycle; +infill z7l{down}..z4l..z5l..{right}z6l..cycle; +filldraw bskrule(10,11,rule_thickness,rule_thickness); +penlabels(1,2,4,5,6,7,8,8',9,9'); labels(8rr,9ll); +endchar; + +iff known chars.latin_eth: +bskchar "The italic letter eth"; +beginchar(chars.latin_eth,10u#,asc_height#,0); uni "0x00F0"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[], theta; oblu:=2oblu; +pos1(curve,0); pos2(hair,90); pos3(hair,180); pos4(hair,270); +pos5(curve,180); pos6(hair,-90); +lft x1l=u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3; +rt x5l=w-u; y5l=y3l+stem; top y6l=h+o; lft x6=u; +p0=z2r{right}..z5r..{dir170}z6r; x3l=xpart (((w,y3)--(.5w,y3))intersectionpoint p0); +p1=z2l{left}..z1l..z4l..{down}z3l; +p2=z2r{right}..z5r..{dir170}z6r; +z0=bsktouch(p1,right,p2,left); +tim1=xpart(p1 intersectiontimes (z0--(x4,y0))); +tim2=xpart(p2 intersectiontimes (z0--(w,y0))); +p3:=z6l{dir-10}..z5l..{left}z2l; +p4:=z2l{left}..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p2,tim2),infinity) of p2; +tim0=xpart(p3 intersectiontimes ((0,.5[x_height,h])--(w,.5[x_height,h]))); +top y8=h; x8=.5[x5,x4]; z7=z8+5u*unitvector(((direction tim0 of p3) rotated -95)); +if y7y11l: + p2:=z11l---obl(18r,11l,9r)---obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6'; + p3:=z13l{left}..{down}z11l; +else: + p2:=obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6'; + p3:=z13l{left}..{down}z11l---obl(18r,11l,9r); +fi + (tim2,tim3)=p2 intersectiontimes p3; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..cycle + ; +infill subpath(0,rundy(p2,(tim2,f_obl)).zpet) of p2 + ..subpath(rundy(p3,(tim3,f_obl)),infinity) of p3..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20); labels(5',6',15',16'); +endchar; + +iff known chars.latin_ffi and not monospace: +bskchar "The italic ligature ffi"; +beginchar(chars.latin_ffi,17.5u#,asc_height#,desc_depth#); uni "0xFB03"; +italcorr asc_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +path p[]; +pos1(stem,0); pos2(stem,0); pos3(hair,-90); +pos4(hair,-90); pos5(stem,-150); pos6(stem,30); +pos11(stem,0); pos12(stem,0); pos13(hair,-90); +pos14(hair,-90); pos15(stem,-150); penpos16(dot_size,0); +pos21(stem,0); pos22(stem,0); +x1=x2=.5*7u; x11=x12=x6; +y2=y12=-.5d; .5[y1,y2]=.5(h-d); y11=y1; +bot y4r=bot y14r=-d-o; x4=.5u; lft x5r=x4-x1; y5l=y15l=.75[y4l,y2]; +x14=.5[x15,x11]; lft x15r=x2r+2hair; x16-x11=4/3(x12-x15); x13=.5[x11,x16]; +z5'=z5l+.5stem*unitvector(z5-z4); +top y3l=top y13l=h+o; x6-x1=x2-x5; y6r=y16r=y3-1.5like_stem; x3=.5[x1,x6]; +z6'=z6+.25stem*unitvector(z6-z3); +z15'=z15l+.5stem*unitvector(z15-z14); z16'=z16+.25stem*unitvector(z16-z13); +pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90); +pos17(hair,90); pos18(hair,90); pos19(hair,90); pos20(hair,90); +y7=y8=y9=y10=y17=y18=y19=y20=bot x_height; +x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u; +x11-x17=x20-x11; x18=x11l; x19=x11r; lft x17=6u; +x21r=x22r=x16; y21=x_height-.3bar_height; y22=.35bar_height; +ital_hook(22,23).alt; +p0:=z4r{right}..z2r---obl(9l,2r,18l)---obl(18l,9l,12l)---z12l..{left}z14l + ..z15l{up} ..z15'..z15r..z14r{right}..z12r---obl(19l,12r,20l)---z20l + ..z21l---_ih---z21r..z20r---obl(19r,20r,11r)---z11r ..{right}z13r + ..{dir-120}z16l..z16r{up}..z13l{left}..{down}z11l; +p1:=z6r{up}..{left}z3l..z1l---obl(8r,1l,7r)--z7r..z7l---obl(8l,7l,2l) + ---z2l..z4l{left}..{up}z5l..z5'..z5r..{right}z4r; +if y6l>y11l: + p2:=z11l---obl(18r,11l,9r)---obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6'; + p3:=z13l{left}..{down}z11l; +else: + p2:=obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6'; + p3:=z13l{left}..{down}z11l---obl(18r,11l,9r); +fi +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p3; +{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= if pair t: xpart(t) else: t fi enddef; fi +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..cycle; +infill subpath(0,rundy(p2,(tim2,f_obl)).zpet) of p2 + ..subpath(rundy(p3,(tim3,f_obl)),infinity) of p3..cycle; +}}; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22); labels(5',6',15',16'); +endchar; + +iff known chars.latin_ffl and not monospace: +bskchar "The italic ligature ffl"; +beginchar(chars.latin_ffl,18u#,asc_height#,desc_depth#); uni "0xFB04"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +path p[]; +pos1(stem,0); pos2(stem,0); pos3(hair,-90); +pos4(hair,-90); pos5(stem,-150); pos6(stem,30); +pos11(stem,0); pos12(stem,0); pos13(hair,-90); +pos14(hair,-90); pos15(stem,-150); penpos16(dot_size,0); +pos21(stem,0); pos22(stem,0); +x1=x2=.5*7u; x11=x12=x6; +y2=y12=-.5d; .5[y1,y2]=.5(h-d); y11=y1; +bot y4r=bot y14r=-d-o; x4=.5u; lft x5r=x4-x1; y5l=y15l=.75[y4l,y2]; +x14=.5[x15,x11]; lft x15r=x2r+2hair; x16-x11=4/3(x12-x15); x13=.5[x11,x16]; +z5'=z5l+.5stem*unitvector(z5-z4); +top y3l=top y13l=h+o; x6-x1=x2-x5; y6r=y16r=y3-1.5like_stem; x3=.5[x1,x6]; +z6'=z6+.25stem*unitvector(z6-z3); +z15'=z15l+.5stem*unitvector(z15-z14); z16'=z16+.25stem*unitvector(z16-z13); +pos7(hair,90); pos8(hair,90); pos9(hair,90); pos10(hair,90); +pos17(hair,90); pos18(hair,90); pos19(hair,90); pos20(hair,90); +y7=y8=y9=y10=y17=y18=y19=y20=bot x_height; +x1-x7=x10-x1; x8=x1l; x9=x1r; lft x7=.5u; +x11-x17=x20-x11; x18=x11l; x19=x11r; lft x17=6u; +x21=x22=x16; y21=h; y22=.35bar_height; +ital_hook(22,23).alt; +p0:=z4r{right}..z2r---obl(9l,2r,18l)---obl(18l,9l,12l)---z12l..{left}z14l + ..z15l{up} ..z15'..z15r..z14r{right}..z12r---obl(19l,12r,20l)---z20l + ..z20r---obl(19r,20r,11r)---z11r ..{right}z13r + ..z21l+1.5curve*down---_ih---z21r---z21l+o*down + ..z13l{left}..{down}z11l; +p1:=z6r{up}..{left}z3l..z1l---obl(8r,1l,7r)--z7r..z7l---obl(8l,7l,2l) + ---z2l..z4l{left}..{up}z5l..z5'..z5r..{right}z4r; +if y6l>y11l: + p2:=z11l---obl(18r,11l,9r)---obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6'; + p3:=z13l{left}..{down}z11l; +else: + p2:=obl(9r,18r,1r)---z1r..{right}z3r..z6l..z6'; + p3:=z13l{left}..{down}z11l---obl(18r,11l,9r); +fi +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p3; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..cycle; +infill subpath(0,rundy(p2,(tim2,hair)).zpet) of p2 + ..subpath(rundy(p3,(tim3,hair)),infinity) of p3..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22); labels(5',6',15',16'); +endchar; + +charscription(10.5u,x_height,desc_depth)( +path p[]; numeric tim[]; oblu:=2oblu; +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +lft x1l=1.75u; rt x3l=w-2.25u; y1=y3=.5[y4l,y2l]; .5[x2,x4]=.5[x1,x3]; x2=x4; +bot y2l=1/3bar_height+.25stem; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l; +tim1=xpart(p0 intersectiontimes ((0,y2l+tiny)--(w,y2l+tiny))); +z5r=point tim1 of p0; +tim2=xpart(p0 intersectiontimes ((x5r-hair+tiny,0)--(x5r-hair+tiny,h))); +z5l=point tim2 of p0; z5=.5[z5l,z5r]; +lft z5'=(1.75u,0); +pos6(stem,90); pos8(hair,270); +y7l=-.5d; y6=0; x6=.5w; x6r:=x6r-.5hair; +rt x7l=w-2u; x8=x2; bot y8r=-d; +pos9(dot_size,180); lft x9r=u; top y9=-.5d; +p1=subpath(0,.5tim2) of p0 .. z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l; +pos7(stem,angle(direction 3 of p1)+90); +y9'-y9=.1d; z9'=whatever[z9,z5]; +pos10(hair,135); pos11(hair,135); z11-z10=tiny*dir45; +z10=(.5[z2,z4]--(w-u,h+u)) intersectionpoint p0; +pos12(stem,45); pos12'(stem,45); x12r=w-u; y12l=y11l; z12'=z12+.5tiny*dir135; +p2=.5[z2,z4]---z11l..{dir-60}z12'l--z12l; +p3=z12r---z12'r..z11r---z10r--z10; +p4=z8r{right}..z7r..{dir190}z6r..{dir30}z5r; +(tim3,tim4)=p0 intersectiontimes p2; +(tim5,tim6)=p3 intersectiontimes p0; +filldraw p1..{(w,h)-z9l}z9l..z9'{left}..{down}z9r.. + subpath(0,rundy(p4,(infinity,if bold_face: 1.5f_obl else: oblu fi)).zpet) of p4 + ..subpath(rundy(p0,tim1),rundy(p0,tim3).zpet) of p0.. + subpath(rundy(p2,1),infinity) of p2{dir0}.. + subpath(0,rundy(p3,(2,hair)).zpet) of p3.. + subpath(rundy(p0,(tim6, if bold_face: f_obl else: oblu fi)),infinity) of p0-- cycle; +infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9'); +); + +iff known chars.latin_g: +bskchar "The italic letter g"; +beginchar(chars.latin_g,10.5u#,x_height#,desc_depth#); uni "0x0067"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_gacute: +bskchar "The italic letter g with acute"; +beginchar(chars.latin_gacute,10.5u#,asc_height#,desc_depth#); uni "0x01F5"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4-o; +acute(100,101); +endchar; + +iff known chars.latin_gcaron: +bskchar "The italic letter g with caron"; +beginchar(chars.latin_gcaron,10.5u#,asc_height#,desc_depth#); uni "0x01E7"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; +hacek(100,101,102); +endchar; + +iff known chars.latin_gcircumflex: +bskchar "The italic letter g with circumflex"; +beginchar(chars.latin_gcircumflex,10.5u#,asc_height#-.1x_height#,desc_depth#); uni "0x011D"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; +circumflex(100,101,102); +endchar; + +iff known chars.latin_gcedilla: +bskchar "The italic letter g with cedilla (treated as comma)"; +beginchar(chars.latin_gcedilla,10.5u#,x_height#+.75comma_depth#+o#,desc_depth#); uni "0x0123"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x100=x4; bot y100''r=x_height+2o; +ammoc(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_gdotabove: +bskchar "The italic letter g with dot above"; +beginchar(chars.latin_gdotabove,10.5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0121"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; +dotabove(100); +endchar; + +iff known chars.latin_gbreve: +bskchar "The italic letter g with breve"; +beginchar(chars.latin_gbreve,10.5u#,asc_height#,desc_depth#); uni "0x011F"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; x102-x100=5u; +breve(100,101,102); +endchar; + +charscription(12u,asc_height,0)( +numeric tim[]; oblu:=3oblu; +path p[]; +pos1(stem,0); pos2(stem,0); pos2'(.8stem,5); +pos3(hair,90); pos4(stem,0); pos5(stem,0); +x1=x2=x2'; x1l=2.5u; +y1=h; y2=u; bot y2'=0; +x4=x5; rt x4r=w-2u; y4=.5[bar_height,x_height]; y5=.35bar_height; +top y3r=x_height+o; x3=.5[x2,x4]+.5u; +ital_serif(1,2); ital_hook(5,6); +p0=z4r..z3r..{down}z2l; +p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l; +p1=z2r---z1r.._is---z2l..z2'l..z2'r; +(tim0,tim1)=p0 intersectiontimes p1; +filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle; +penlabels(1,2,2',3,4,5); +); + +iff known chars.latin_h: +bskchar "The italic letter h"; +beginchar(chars.latin_h,12u#,asc_height#,0); uni "0x0068"; +italcorr .5[bar_height#,x_height#]*slant-.75u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_hcaron: +bskchar "The italic letter h with caron"; +beginchar(chars.latin_hcaron,12u#,asc_height#,0); uni "0x021F"; +italcorr .5[bar_height#,x_height#]*slant-.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +lft x101=x3+o; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair; +hacek(100,101,102); +endchar; + +iff known chars.latin_hcircumflex: +bskchar "The italic letter h with circumflex"; +beginchar(chars.latin_hcircumflex,12u#,asc_height#,0); uni "0x0125"; +italcorr .5[bar_height#,x_height#]*slant-.75u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +lft x101=x3+o; x102-x100=4.5u; +circumflex(100,101,102); +endchar; + +iff known chars.latin_hstroke: +bskchar "The italic letter h with stroke"; +beginchar(chars.latin_hstroke,12u#, asc_height#, 0); uni "0x0127"; +italcorr .5[bar_height#,x_height#]*slant-.75u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric tim[]; +path p[]; +pos1(stem,0); pos2(stem,0); pos2'(.8stem,5); +pos3(hair,90); pos4(stem,0); pos5(stem,0); +pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90); +x1=x2=x2'; x1l=2.5u; +y1=h; y2=u; bot y2'=0; +x4=x5; rt x4r=w-2u; y4=.5[bar_height,x_height]; y5=.35bar_height; +top y3r=x_height+o; x3=.5[x2,x4]+.5u; +ital_serif(1,2); ital_hook(5,6); +x8-x7=4u; y8=y8'=y7=y7'=.4[x_height,h]; .5[x7,x8]=x1; +x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair); +p0=z4r..z3r..{down}z2l; +p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l; +p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r)---z1r.._is + ---obl(7'r,1l,7r)---z7rr..z7l---obl(7'l,7l,2l)---z2l..z2'l..z2'r; +(tim0,tim1)=p0 intersectiontimes p1; +oblu:=3oblu; +filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle; +penlabels(1,2,2',3,4,5,7,7',8,8'); labels(7',8'); +endchar; + +iff known chars.latin_hbar: +bskchar "The italic letter h with bar (Dirac constant)"; +beginchar(chars.latin_hbar,12u#, asc_height#, 0); uni "0x210F"; +italcorr .5[bar_height#,x_height#]*slant-.75u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; oblu.more:=2f_obl; +numeric tim[], theta; +path p[]; +pos1(stem,0); pos2(stem,0); pos2'(.8stem,5); +pos3(hair,90); pos4(stem,0); pos5(stem,0); +x1=x2=x2'; x1l=2.5u; +y1=h; y2=u; bot y2'=0; +x4=x5; rt x4r=w-2u; y4=.5[bar_height,x_height]; y5=.35bar_height; +top y3r=x_height+o; x3=.5[x2,x4]+.5u; +ital_serif(1,2); ital_hook(5,6); +x8-x7=4u; y8-y7=stem; .5[y7,y8]=.35[x_height,h]; .5[x7,x8]=x1; +theta:=angle(z8-z7)+90; +pos7(bar,theta); pos8(bar,theta); +x7'l=x7'r=x1l; x8'l=x8'r=x1r; bskpoints(7,8,hair,hair); +z7'l=whatever[z7l,z8l]; z8'l=whatever[z7l,z8l]; +z7'r=whatever[z7r,z8r]; z8'r=whatever[z7r,z8r]; +p0=z4r..z3r..{down}z2l; +p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l; +p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r).more---z1r.._is + ---obl(7'r,1l,7r)---z7rr..z7l---obl(7'l,7l,2l).more---z2l..z2'l..z2'r; +(tim0,tim1)=p0 intersectiontimes p1; +oblu:=3f_obl; +filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle; +penlabels(1,2,2',3,4,5,7,7',8,8'); labels(7',8'); +endchar; + +charscription(6u,x_height,0)( +numeric H; H=x_height; +pos1(stem,0); pos2(stem,0); +.5[x1,x2]=.5w; x1-x2=0; +y1=H-.3bar_height; y2=.35bar_height; +ital_kooh(1,4); ital_hook(2,3); +filldraw _ih---_ik---cycle; +penlabels(0,1,2); +); + +iff known chars.latin_dotless_i: +bskchar "The italic dotless i"; +beginchar(chars.latin_dotless_i,6u#, x_height#, 0); uni "0x0131"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_i: +bskchar "The italic letter i"; +beginchar(chars.latin_i,6u#, asc_height#-.5dot_size#, 0); uni "0x0069"; +italcorr (asc_height#-.5dot_size#)*slant-1.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +top z0=(x1l,h-.5dot_size); dot(0); +endchar; + +iff known chars.latin_iacute: +bskchar "The italic letter i with acute"; +beginchar(chars.latin_iacute,6u#, asc_height#, 0); uni "0x00ED"; +italcorr asc_height#*slant-1.5u#; +adjust_fit(0,0); +pickup tiny.nib; +x101=x1'; +usechar; +acute(100,101); +endchar; + +iff known chars.latin_igrave: +bskchar "The italic letter i with grave"; +beginchar(chars.latin_igrave,6u#,asc_height#,0); uni "0x00EC"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2l; +grave(100,101); +endchar; + +iff known chars.latin_idoublegrave: +bskchar "The italic letter i with double grave"; +beginchar(chars.latin_idoublegrave,6u#,asc_height#,0); uni "0x0209"; +italcorr x_height#*slant-1.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x102-x100=2.25u; x103r=x2r; +d_grave(100,101,102,103,whatever); +endchar; + +iff known chars.latin_imacron: +bskchar "The italic letter i with macron"; +beginchar(chars.latin_imacron,6u#,.5[asc_height#,x_height#],0); uni "0x012B"; +italcorr .5[asc_height#,x_height#]*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x2,x3]; x100=.5u; +macron(100,101); +endchar; + +iff known chars.latin_icircumflex: +bskchar "The italic letter i with circumflex"; +beginchar(chars.latin_icircumflex,6u#,asc_height#-.1x_height#,0); uni "0x00EE"; +italcorr .5[asc_height#,x_height#]*slant+.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2l; +circumflex(100,101,102); +endchar; + +iff known chars.latin_iumlaut: +bskchar "The italic letter i with umlaut"; +beginchar(chars.latin_iumlaut,6u#,asc_height#-dot_size#,0); uni "0x00EF"; +italcorr (asc_height#-dot_size#)*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x2l; x100-x101=1.8dot_size; +umlaut(100,101); +endchar; + +iff known chars.latin_ibreve: +bskchar "The italic letter i with breve"; +beginchar(chars.latin_ibreve,6u#,asc_height#,0); uni "0x012D"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2l; +breve(100,101,102); +endchar; + +iff known chars.latin_iinvbreve: +bskchar "The italic letter i with inverted breve"; +beginchar(chars.latin_iinvbreve,6u#,asc_height#,0); uni "0x020B"; +italcorr .5[x_height#,asc_height#]*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2l; +tieacc(100,101,102); +endchar; + +iff known chars.latin_itilde: +bskchar "The italic letter i with tilde"; +beginchar(chars.latin_itilde,6u#,asc_height#,0); uni "0x0129"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=5.5u; rt x.tilde=x2l; +tilde(100,101); +endchar; + +iff known chars.latin_icaron: +bskchar "The italic letter i with caron"; +beginchar(chars.latin_icaron,6u#,asc_height#,0); uni "0x01D0"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x1',x1l]; x102-x100=4.5u; +hacek(100,101,102); +endchar; + +iff known chars.latin_iogonek: +bskchar "The italic letter i with ogonek"; +beginchar(chars.latin_i,6u#, asc_height#-.5dot_size#,.85desc_depth#); uni "0x012F"; +italcorr (asc_height#-.5dot_size#)*slant-1.75u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +pos1(stem,0); pos2(stem,0); +pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160); +.5[x1,x2]=.5w; x1-x2=0; +y1=x_height-.3bar_height; y2=.35bar_height; +x5=x6l+1.5u; z5l=z2'l; x7-x6l=3u; rt x8l=x7+1.5u; +y6=-.5d; bot y7l=-d; y8=-2/3d; +ital_kooh(1,4); ital_hook(2,3); +p1:=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r; +tim1=xpart(_ih intersectiontimes (z5r--(x5r,y2r))); +filldraw subpath(0,rundy(_ih,1).zpet) of _ih + ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1 + ..subpath(rundy(_ih,tim1),infinity) of _ih---_ik---cycle; +top z0=(x1l,h-.5dot_size); dot(0); +penlabels(0,1,2,5,6,7,8); +endchar; + +charscription(5u,x_height,.75desc_depth)( +numeric H; H=x_height; +pos1(stem,0); pos2(stem,0); +pos4(hair,-90); pos5(stem,-150); +x1=x2; rt x1r=w-u; +y1=H-.3bar_height; y2=-1/2d; +if monospace: x5r=0; x4=.5[x5,x2]; x3r=u; +else: x4=u; lft x5r=x4-x1; fi +ital_kooh(1,3); +bot y4r=-d-o; +y5l=.75[y4l,y2]; +z5'=z5l+.5stem*unitvector(z5-z4); +filldraw z4r{right}..z2r---_ik---z2l..{left}z4l..z5l{up}..z5'..z5r..cycle; +penlabels(0,1,2,4,5); labels(5'); +); + +iff known chars.latin_dotless_j: +bskchar "The italic dotless j"; +beginchar(chars.latin_dotless_j,5u#,x_height#,.75desc_depth#); uni "non"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_j: +bskchar "The italic letter j"; +beginchar(chars.latin_j,5u#,asc_height#-.5dot_size#,.75desc_depth#); uni "0x006A"; +italcorr (asc_height#-.5dot_size#)*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +top z0=(x1l,h-.5dot_size); dot(0); +endchar; + +iff known chars.latin_jcircumflex: +bskchar "The italic letter j with circumflex"; +beginchar(chars.latin_jcircumflex,5u#,asc_height#-.1x_height#,1.5like_cap_curve#); uni "0x0135"; +italcorr .5[asc_height#,x_height#]*slant+u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x1',x2l]; +circumflex(100,101,102); +endchar; + +iff known chars.latin_ij: +bskchar "The italic letter ij"; +beginchar(chars.latin_ij,9.5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0133"; +italcorr (asc_height#-.5dot_size#)*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric shift; shift:=w-5u; +usechar shifted (shift*right); +pos6(stem,0); pos7(stem,0); +.5[x6,x7]=3u; x6-x7=0; +y6=x_height-.3bar_height; y7=.35bar_height; +lft x8l=6u; +ital_kooh(6,9); ital_hook(7,8); +filldraw _ih---_ik---cycle; +top z0=(x1l+shift,h-.5dot_size); dot(0); +top z10=(x6l,h-.5dot_size); dot(10); +penlabels(6,7); +endchar; + +charscription(10u,asc_height,0)( +numeric tim[]; oblu:=3oblu; +path p[]; +pos1(stem,0); pos2(stem,0); pos2'(.8stem,5); +pos3(hair,130); pos3'(hair,-40); pos4(curve,60); pos5(stem,0); +x1=x2=x2'; x1l=2.5u; +y1=h; y2=u; bot y2'=0; +rt x4r=w-u; top y4r=x_height+o; y5=.35bar_height; +z4'=(x2r,.5[x_height,bar_height]); +z7=(x2r,.8bar_height); +z3=.4[z4',z4]+stem*(unitvector(z4-z4') rotated 90); +z3'=.5[z7,z4]+stem*(unitvector(z4-z7) rotated -90); +x5l=.4[x4,x2]; +ital_serif(1,2); ital_hook(5,6); x5'l:=x5'l+2hair; x5'r:=x5'r+2hair; +z8'-z8=z5r-z5l; y8=x_height; z8=z5l+whatever*dir115; +z4'''-z4'=(hair-currentbreadth)*down; +z7-z7''=(.5[hair,stem]-currentbreadth)*down; +p1=z2r---z1r.._is---z2l..z2'l..z2'r; +p2=z7..z3'r..z4r..z3r..z4'; +p3=z6'..z6r..z5'r..z5r---z8'; +p4=z7''..z3'l..z4l..z3l..z4'''; +p5=z4'''--z7''; +p6=z8---z5l..z5'l..z6l..z6'; +z9=bsktouch(subpath(1,infinity) of p2,left,p1,right); +tim0-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z9--(x3,y9))); +tim1=xpart(p1 intersectiontimes (z9--(0,y9))); +(tim2,tim3)=p2 intersectiontimes p3; +(tim4,tim5)=p2 intersectiontimes p6; +filldraw subpath(rundy(p1,tim1),infinity) of p1 + ---z7+oblu*down + ..point .5tim4 of p2 + ..subpath(rundy(p6,tim5),infinity) of p6 + &subpath(0,rundy(p3,tim3).zpet) of p3 + ..subpath(rundy(p2,tim2),rundy(p2,tim0).zpet) of p2..cycle; +oblu:=f_obl; +infill subpath(rundy(p4,0),rundy(p4,length p4).zpet) of p4 + ..subpath(rundy(p5,0),rundy(p5,1).zpet) of p5..cycle; +penlabels(1,2,2',3,3',4,5); labels(4',4''',7,7'',8,8'); +); + +iff known chars.latin_k: +bskchar "The italic letter k"; +beginchar(chars.latin_k,10u#,asc_height#,0); uni "0x006B"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_kcaron: +bskchar "The italic letter k with caron"; +beginchar(chars.latin_kcaron,10u#,asc_height#,0); uni "0x01E9"; +italcorr asc_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x100=x1r+u; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair; +hacek(100,101,102); +endchar; + +iff known chars.latin_kcedilla: +bskchar "The italic letter k with cedilla (treated as comma)"; +beginchar(chars.latin_kcedilla,10u#,asc_height#,.75comma_depth#); uni "0x0137"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +lft x100=.5w; top y100''r=-o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_kra: +bskchar "The italic letter kra"; +beginchar(chars.latin_kra,11.5u#,x_height#,0); uni "0x0138"; +italcorr x_height#*slant-.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(stem,0); pos2(stem,0); +pos3(whatever,0); pos5(whatever,0); +bot y1=0; top y2=h; lft x1l=lft x2l=2u; +rt x3r=w-3u; top y3=h; rt x5r=w-4u; y5=.35bar_height; +y4r=.45h; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90); +z3l=z4l+whatever*(z3r-z4r); +x6l=x4r+hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90); +z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; +x4'=x2r; z4'=whatever[z3l,z4l]; +ital_serif(2,1); ital_hook(5,7); +_ih:=z5l..z5'l..z7l..z7'&z7'..z7r..z5'r..z5r; +serif_bot(1); serifs_tl(3l); serifs_tr(3r); +z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); +z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); +z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); +z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r)); +x2'''=x1r; z2'''=whatever[z3l,z4l]; +filldraw z1a{down}..{left}z1b..z1c---z1d..z1e{left}..z1f---z4r..z4r'' if x6l'>x4r'': ..z6l' fi + ..z6l''---z5l..z5'l..z7l..z7'&z7'..z7r..z5'r..z5r---z6r'..z6r'' + ---diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a..z3l.c{dir0}..diag_serif(3l,4l) + ---obl(2''',3l,2r)---_is---cycle; +penlabels(1,2,3,4,5,6); labels(2',2'',2''',2'''',4',4r',4r'',6l',6l'',6r',6r''); +endchar; + +charscription(6.5u,asc_height,0)( +pos1(stem,0); pos2(stem,0); +x1=x2=.5w; +y1=h; y2=.35bar_height; +ital_serif(1,2); ital_hook(2,3); +filldraw z2r--z1r.._is---_ih..cycle; +penlabels(1,2); +); + +iff known chars.latin_l: +bskchar "The italic letter l"; +beginchar(chars.latin_l,6.5u#, asc_height#, 0); uni "0x006C"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_lacute: +bskchar "The italic letter l with acute"; +beginchar(chars.latin_lacute,6.5u#, asc_height#+.3x_height#, 0); uni "0x013A"; +italcorr (asc_height#+.3x_height#)*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x101=x1l; x100r=w-u; y101=asc_height+.75u; +acute(100,101).capital; +endchar; + +iff known chars.latin_lcaron: +bskchar "The italic letter l with caron (treated like comma)"; +beginchar(chars.latin_lcaron,6.5u# if bold_face: +.5u# fi, asc_height#, 0); uni "0x013E"; +italcorr asc_height#*slant+.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +y100''r=h; x100'''=w-.5u; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_ldot: +bskchar "The italic letter l with middle dot"; +beginchar(chars.latin_l,6.5u#+dot_size#,asc_height#,0); uni "0x0140"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +top y100=x_height; x100+.5dot_size=w-u; +dot(100); +endchar; + +iff known chars.latin_lcedilla: +bskchar "The italic letter l with cedilla (treated as comma)"; +beginchar(chars.latin_lcedilla,6.5u#,asc_height#,.75comma_depth#); uni "0x013C"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x100=x2'; top y100''r=-2o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_ldotabove: +bskchar "The italic letter l with dot above"; +beginchar(chars.latin_ldotabove,6.5u#,Acc_height#+o#,0); uni "non"; +italcorr Acc_height#*slant-1.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x100=x1; +dotabove(100); +endchar; + +iff known chars.latin_lslash: +bskchar "The italic letter l with slash"; +beginchar(chars.latin_lslash,6.5u#, asc_height#, 0); uni "0x0142"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; oblu.more:=2f_obl; +numeric theta; +pos1(stem,0); pos2(stem,0); +x1=x2=.5w; +y1=h; y2=.35bar_height; +x5-x4=4u; .5[x4,x5]=x1; y5-y4=stem; .5[y4,y5]=.8[bar_height,x_height]; +theta=angle(z5-z4)+90; +pos4(bar,theta); pos5(bar,theta); +x4'l=x4'r=x1l; x5'l=x5'r=x1r; +z4'l=whatever[z4l,z5l]; z5'l=whatever[z4l,z5l]; +z4'r=whatever[z4r,z5r]; z5'r=whatever[z4r,z5r]; +bskpoints(4,5,bar,bar); +ital_serif(1,2); ital_hook(2,3); +filldraw z2r---obl(5'l,2r,5l)---z5ll..z5r---obl(5'r,5r,1r).more + ---z1r.._is---obl(4'r,1l,4r)---z4rr..z4l + ---obl(4'l,4l,2l).more---_ih..cycle; +penlabels(1,2,4,4',5,5'); +endchar; + +iff known chars.latin_m: +bskchar "The italic letter m"; +beginchar(chars.latin_m,16u#,x_height#,0); uni "0x006D"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=3oblu; +numeric H; H=x_height; +path p[]; +pos1(stem,0); pos2(stem,0); pos2'(.8stem,5); +pos3(hair,90); pos4(stem,0); pos5(stem,0); +pos5'(.8stem,5); pos8(hair,90); pos9(stem,0); +pos10(stem,0); +x1=x2=x2'; x1l=2.5u; +y1=H-.3bar_height; y2=u; bot y2'=0; +x4=x5=x5'=.5w; y4=.5[bar_height,x_height]; +rt x9r=w-2.5u; x10=x9; y10=.35bar_height; y9=y4; +y5=u; bot y5'=0; y8=y3; x8=.5[x4,x9]+.5u; +top y3r=x_height+o; x3=.5[x2,x4]+.5u; +ital_kooh(1,7); ital_hook(10,11); +p0=z4r..z3r..{down}z2l; +p1=z2r---z1r.._ik---z2l..z2'l..z2'r; +p2=z9r..z8r..{down}z5l; +p2:=z9r{up}..{direction 1 of p2}z8r..{down}z5l; +(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p1; +(tim2,tim3)=p2 intersectiontimes p0; +if tim2<1: tim2:=xpart(p2 intersectiontimes ((z4l--z9l) shifted (.15hair*up))); + tim3:=xpart(p0 intersectiontimes ((z4r--z1r) shifted (.15hair*up))); +fi +filldraw z2r if monospace:---z1r else:{up}fi..z3l..z4l---z5l..z5'l..z5'r..z5r + if monospace:---z4r..else:{up}..fi{right}z8l..z9l + ---_ih---subpath(0,rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p0,tim3),rundy(p0,tim0).zpet) of p0 if monospace:{left}fi + ..subpath(rundy(p1,tim1),infinity) of p1 + ..{up}cycle; +penlabels(1,2,2',3,4,5,5',8,9,10); +endchar; + +charscription(11.5u,x_height,0)( +numeric tim[]; oblu:=3oblu; +numeric H; H=x_height; +path p[]; +pos1(stem,0); pos2(stem,0); pos2'(.8stem,5); +pos3(hair,90); pos4(stem,0); pos5(stem,0); +x1=x2=x2'; x1l=2.5u; +y1=H-.3bar_height; y2=u; bot y2'=0; +x4=x5; rt x4r=w-2.5u; y4=.5[bar_height,x_height]; y5=.35bar_height; +top y3r=x_height+o; x3=.5[x2,x4]+.5u; +ital_kooh(1,7); ital_hook(5,6); +p0=z4r..z3r..{down}z2l; +p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l; +p1=z2r---z1r.._ik---z2l..z2'l..z2'r; +(tim0,tim1)=p0 intersectiontimes p1; +filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle; +penlabels(1,2,2',3,4,5); +); + +iff known chars.latin_n: +bskchar "The italic letter n"; +beginchar(chars.latin_n,11.5u#, x_height#, 0); uni "0x006E"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_ncaron: +bskchar "The italic letter n with caron"; +beginchar(chars.latin_ncaron,11.5u#, asc_height#, 0); uni "0x0148"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.6[x1,x3]; +hacek(100,101,102); +endchar; + +iff known chars.latin_nacute: +bskchar "The italic letter n with acute"; +beginchar(chars.latin_nacute,11.5u#,asc_height#,0); uni "0x0144"; +italcorr asc_height#*slant-2.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x3,x2r]; +acute(100,101); +endchar; + +iff known chars.latin_napostrophe: +bskchar "The italic letter n with apostrophe"; +beginchar(chars.latin_napostrophe,11.5u#,asc_height#+o#,0); uni "0x0149"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x100=.5u; top y100=h-.5dot_size; +comma(100,dot_size,.9hair,.8comma_depth); +endchar; + +iff known chars.latin_ngrave: +bskchar "The italic letter n with grave"; +beginchar(chars.latin_ngrave,11.5u#,asc_height#,0); uni "0x01F9"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3; +grave(100,101); +endchar; + +iff known chars.latin_ntilde: +bskchar "The italic letter n with tilde"; +beginchar(chars.latin_ntilde,11.5u#,asc_height#,0); uni "0x00F1"; +italcorr asc_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=6u; x.tilde=.5[x1r,x4l]; +tilde(100,101); +endchar; + +iff known chars.latin_ncedilla: +bskchar "The italic letter n with cedilla (treated as comma)"; +beginchar(chars.latin_ncedilla,11.5u#,x_height#,.75comma_depth#); uni "0x0146"; +italcorr x_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=.65[x2,x5]; top y100''r=-o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_eng: +bskchar "The italic letter eng"; +beginchar(chars.latin_eng,10u#, x_height#, desc_depth#); uni "0x014B"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=3oblu; +path p[]; +pos1(stem,0); pos2(stem,0); pos2'(.8stem,5); +pos3(hair,90); pos4(stem,0); pos5(stem,0); +pos7(hair,-90); pos8(stem,-150); +x1=x2=x2'; x1l=2.5u; +y1=x_height-.3bar_height; y2=u; bot y2'=0; +x4=x5; rt x4r=w-u; y4=.5[bar_height,x_height]; y5=-.5d; +top y3r=x_height+o; x3=.5[x2,x4]+.5u; +ital_kooh(1,6); +bot y7r=-d; top y8=y7+like_curve; lft x8r-x5=-5u; rt x5r-x7=3u; +z8'=z8l+.5stem*unitvector(z8-z7); +p0=z4r..z3r..{down}z2l; +p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l; +p1=z2r---z1r.._ik---z2l..z2'l..z2'r; +(tim0,tim1)=p0 intersectiontimes p1; +filldraw z2r{up}..z3l..z4l---z5l..{left}z7l..z8l{up}..z8' + ..z8r..z7r{right}..z5r---subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle; +penlabels(1,2,2',3,4,5,7,8); labels(8'); +endchar; + +charscription(10u,x_height,0)( +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; +bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle; +infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; +penlabels(1,2,3,4); +); + +iff known chars.latin_o: +bskchar "The italic letter o"; +beginchar(chars.latin_o,10u#,x_height#,0); uni "0x006F"; +italcorr .5x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_oacute: +bskchar "The italic letter o with acute"; +beginchar(chars.latin_oacute,10u#,asc_height#,0); uni "0x00F3"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4l; +acute(100,101); +endchar; + +iff known chars.latin_oumlaut: +bskchar "The italic letter o with umlaut"; +beginchar(chars.latin_oumlaut,10u#,asc_height#-dot_size#,0); uni "0x00F6"; +italcorr (asc_height#-dot_size#)*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x4l; x101-x100=2/3(x3-x1); +umlaut(100,101); +endchar; + +iff known chars.latin_ocircumflex: +bskchar "The italic letter o with circumflex"; +beginchar(chars.latin_ocircumflex,10u#,asc_height#-.1x_height#,0); uni "0x00F4"; +italcorr .5[asc_height#,x_height#]*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +numeric oblu; oblu:=hair; +x101=x4r; +circumflex(100,101,102); +endchar; + +iff known chars.latin_ograve: +bskchar "The italic letter o with grave"; +beginchar(chars.latin_ograve,10u#,asc_height#,0); uni "0x00F2"; +italcorr .5x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4+u; +grave(100,101); +endchar; + +iff known chars.latin_odoublegrave: +bskchar "The italic letter o with double grave"; +beginchar(chars.latin_odoublegrave,10u#,asc_height#,0); uni "0x020D"; +italcorr .5x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x102-x100=3u; x102=x4; +d_grave(100,101,102,103,whatever); +endchar; + +iff known chars.latin_ocaron: +bskchar "The italic letter o with caron"; +beginchar(chars.latin_ocaron,10u#,asc_height#,0); uni "0x01D2"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; +hacek(100,101,102); +endchar; + +iff known chars.latin_otilde: +bskchar "The italic letter o with tilde"; +beginchar(chars.latin_otilde,10u#,asc_height#,0); uni "0x00F5"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=6u; +tilde(100,101); +endchar; + +iff known chars.latin_omacron: +bskchar "The italic letter o with macron"; +beginchar(chars.latin_omacron,10u#,.5[asc_height#,x_height#],0); uni "0x014D"; +italcorr .5[asc_height#,x_height#]*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +macron(100,101); +endchar; + +iff known chars.latin_odotabove: +bskchar "The italic letter o with dot above"; +beginchar(chars.latin_odotabove,10u#,asc_height#-.5dot_size#,0); uni "0x022F"; +italcorr .5x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; +dotabove(100); +endchar; + +iff known chars.latin_ohumlaut: +bskchar "The italic letter o with Hungarian umlaut"; +beginchar(chars.latin_ohumlaut,10u#,asc_height#,0); uni "0x0151"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=3u; .5[x100,x101]=x4r+1.75u; +h_umlaut(100,101,102,103,2u); +endchar; + +iff known chars.latin_obreve: +bskchar "The italic letter o with breve"; +beginchar(chars.latin_obreve,10u#,asc_height#+o#,0); uni "0x014F"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; x102-x100=5u; +breve(100,101,102); +endchar; + +iff known chars.latin_oinvbreve: +bskchar "The italic letter o with inverted breve"; +beginchar(chars.latin_oinvbreve,10u#,asc_height#+o#,0); uni "0x020F"; +italcorr .5[asc_height#,x_height#]*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; x102-x100=5u; +tieacc(100,101,102); +endchar; + +iff known chars.latin_o_masculine: +bskchar "Masculine ordinal indicator (superscript latin o)"; +beginchar(chars.latin_o_masculine,6u#,asc_height#-.5x_height#,0); uni "0x00BA"; +italcorr (asc_height#-.75x_height#)*slant; +adjust_fit(0,0); +pickup tiny.nib; +multiply(.85)(curve,hair,vair); +usechar shifted (-x1l,-y4l) scaled .5 shifted (HH*slant,HH); +endchar; + +charscription(10u,x_height,.85desc_depth)( +path p[]; +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; +bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u; +bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d; +p0=z1l{down}..z2l..{up}z3l..z4l..{down}z1l; +p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r; +filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0 + ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1 + ..subpath(rundy(p1,(1,stem)),infinity) of p0..cycle; +infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; +penlabels(1,2,3,4,5,6,7,8); +); + +iff known chars.latin_oogonek: +bskchar "The italic letter o with ogonek"; +beginchar(chars.latin_oogonek,10u#,x_height#,.85desc_depth#); uni "0x01EB"; +italcorr .5x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_oogonekmacron: +bskchar "The italic letter o with ogonek and macron"; +beginchar(chars.latin_oogonekmacron,10u#,.5[asc_height#,x_height#],.85desc_depth#); uni "0x01ED"; +italcorr .5[asc_height#,x_height#]*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +macron(100,101); +endchar; + +charscription(10u,x_height,0)( +numeric tim[]; path p[]; +oblu:=2oblu; +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90); +z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l]; +p0:=z1l{down}..z2l..z3l..z4l..{down}z1l; +p1:=z1r{up}..z4r..z3r..z2r..{up}z1r; +bskpoints(5,6,hair,hair); +(tim1,tim2)=p0 intersectiontimes (z5l--z6l); +(tim3,tim4)=p0 intersectiontimes (z6r--z5r); +(tim5,tim6)=p0 intersectiontimes (z0r--z5r); +(tim7,tim8)=p0 intersectiontimes (z5l--z0l); +(tim11,tim12)=p1 intersectiontimes (z0r--z6r); +(tim13,tim14)=p1 intersectiontimes (z0r--z5r); +(tim15,tim16)=p1 intersectiontimes (z0l--z6l); +(tim17,tim18)=p1 intersectiontimes (z5l--z0l); +filldraw subpath (0,rundy(p0,tim1).zpet) of p0 + ..subpath(rundy((z5l--z6ll),tim2),infinity) of (z5l--z6ll) + ..subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r) + ..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0 + ..subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5rr) + ..subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l) + ..subpath(rundy(p0,tim7),infinity) of p0--cycle; +infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r) + ..subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1 + ..subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle; +infill subpath (0, rundy(p1,tim17).zpet) of p1 + ..subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l) + ..subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l) + ..subpath(rundy(p1,tim15),infinity) of p1--cycle; +penlabels(0,1,2,3,4,5,6); +); + +iff known chars.latin_oslash: +bskchar "The italic letter o slash"; +beginchar(chars.latin_oslash,10u#,x_height#,0); uni "0x00F8"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_oslashacute: +bskchar "The italic letter o slash with acute"; +beginchar(chars.latin_oslashacute,10u#,asc_height#,0); uni "0x01FF"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4l; +acute(100,101); +endchar; + +iff known chars.latin_p: +bskchar "The italic letter p"; +beginchar(chars.latin_p,12u#,.5[asc_height#,x_height#],desc_depth#); uni "0x0070"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=3oblu; +pos1(stem,0); pos2(stem,0); pos11(stem,0); +pos1'(1.3stem,10); pos7(hair,0); pos8(hair,-40); +x1=x1'=x2=x11; lft x1l=2.75u; +y1=x_height+o; y2=.5bar_height; bot y11=-d; top y1'r=h; +pos3(.5[hair,stem],90); pos4(curve,180); +pos5(hair,-90); pos6(stem,0); +x3=.5[w-u,x2]-u; bot y3l=-o; +rt x4l=w-u; y4=bar_height; +x5=x3+1.5u; top y5l=x_height+o; +x6=x2; y6=.5bar_height; +serif_bot(11); forsuffixes $=11b,11c,11d,11e: x$:=x$+hair; endfor; +p0=z2r---z1r..{up}z1'r..{down}z1'l; +p1=z2l..z3l..z4l..{left}z5l..{down}z6l; +p2=z11f--z2r; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p1; +y7=ypart(point tim0 of p0)+stem; x7l=x1l; +y8=3/4bar_height; lft x8l=.5u; +p3=z8r{dir30}..z7r{up}; +p4=z7l---z11a; +(tim4,tim5)=p3 intersectiontimes p4; +filldraw subpath(rundy(p0,(tim0,2curve)),infinity) of p0 + ..z7l..{dir-150}z8l + ..subpath(0,rundy(p3,tim4).zpet) of p3 + ..subpath(rundy(p4,tim5),infinity) of p4 + ..{left}z11b..z11c---z11d..{left}z11e + ..{up}subpath(0,rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p2,tim3),rundy(p1,(tim1,1.5curve)).zpet) of p1..cycle; +infill z6r{down}..z3r..z4r..{left}z5r..cycle; +penlabels(1,1',2,3,4,5,6,7,8,11); +endchar; + +iff known chars.latin_thorn: +bskchar "The italic letter thorn"; +beginchar(chars.latin_p,12u#,asc_height#,desc_depth#); uni "0x0070"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=3oblu; +pos1(stem,0); pos2(stem,0); pos11(stem,0); +pos1'(stem,0); pos7(hair,0); pos8(hair,-40); +x1=x1'=x2=x11; lft x1l=2.75u; +y1=x_height+o; y2=.5bar_height; bot y11=-d; top y1'r=h; +ital_serif(1',2); +pos3(.5[hair,stem],90); pos4(curve,180); +pos5(hair,-90); pos6(stem,0); +x3=.5[w-u,x2]-u; bot y3l=-o; +rt x4l=w-u; y4=bar_height; +x5=x3+1.5u; top y5l=x_height+o; +x6=x2; y6=.5bar_height; +serif_bot(11); forsuffixes $=11b,11c,11d,11e: x$:=x$+hair; endfor; +p0=z2r---z1r..{up}_is; +p1=z2l..z3l..z4l..{left}z5l..{down}z6l; +p2=z11f--z2r; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p1; +y7=ypart(point tim0 of p0)+stem; x7l=x1l; +y8=3/4bar_height; lft x8l=.5u; +p3=z8r{dir30}..z7r{up}; +p4=z7l---z11a; +(tim4,tim5)=p3 intersectiontimes p4; +filldraw subpath(rundy(p0,(tim0,2curve)),infinity) of p0 + ..z7l..{dir-150}z8l + ..subpath(0,rundy(p3,tim4).zpet) of p3 + ..subpath(rundy(p4,tim5),infinity) of p4 + ..{left}z11b..z11c---z11d..{left}z11e + ..{up}subpath(0,rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p2,tim3),rundy(p1,(tim1,1.5curve)).zpet) of p1..cycle; +infill z6r{down}..z3r..z4r..{left}z5r..cycle; +penlabels(1,1',2,3,4,5,6,7,8,11); +endchar; + +iff known chars.latin_q: +bskchar "The italic letter q"; +beginchar(chars.latin_q,10.5u#,x_height#,desc_depth#); uni "0x0071"; +italcorr x_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=3oblu; +pos1(stem,0); pos2(stem,0); +x1=x2; rt x1r=w-2u; +y1=h; y2=-d; z1'=z1r+.5stem*dir60; +serif_bot(2); forsuffixes $=2b,2c,2d,2e: x$:=x$-hair; endfor; +pos4(hair,-90); pos5(curve,180); +pos6(.5[hair,stem],90); pos7(stem,0); +x4=.5[u,x2]-.5u; bot y4r=-o; +lft x5r=u; y5=bar_height; +x6=x4+u; top y6r=x_height+o; +x7=x2; y7=bar_height; +p0=z7l..{dir40}z1'{dir-120}..z1r---z2f..{right}z2e..z2d---z2c..{right}z2b..z2a---z7l; +p1=z7r{down}..z4r..z5r..{right}z6r..{down}z7r; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2-4,tim3)=subpath(4,infinity) of p0 intersectiontimes p1; +filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0 + ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1 + ..cycle; +infill z7l{down}..z4l..z5l..{right}z6l..cycle; +penlabels(1,2,4,5,6,7); labels(1'); +endchar; + +charscription(9u if bold_face:+u fi,x_height, 0)( +path p[]; numeric tim[]; oblu:=3oblu; +pos1(stem,0); pos1'(.5[hair,stem],100); pos2(stem,0); pos2'(.8stem,5); +pos3(stem,30); pos4(hair,90); pos5(hair,135); pos6(hair,180); +pos7(hair,150); y7=x_height-.25bar_height; x7r=0; +z7'=z7l+hair*dir(-110); +x1l=3u; x2=x2'=x1; y1=bar_height; y2=u; bot y2'=0; +top y1'r=h+o; x1'=1.5u; +rt x3r=w-u; y3r=y4-.75like_stem; +top z4r=(x3l-2hair,x_height+o); +z3'=z3+.25stem*unitvector(z3-z4); +x6l=x1r; y6=.8bar_height; +z5=.75[z6,z4]+.75stem*(unitvector(z4-z6) rotated 90); +z8=.6[z1,z1']+.6stem*(unitvector(z1'-z1) rotated -90); pos8(stem,angle(z1'-z1)-90); +p1:=z2r---z6l..z5l..{right}z4l..z3l..z3'..z3r{up}..{dir180}z4r..z5r..{down}z6r; +p2:=z1r{up}..z8r..{left}z1'r..z7r{dir-120}..z7'&z7'..z7l{dir60}..{right}z1'l..z8l..z1l---z2l..z2'l..z2'r..{up}z2r; +(tim1-8,tim2)=subpath(8,infinity) of p1 intersectiontimes p2 if hppp<=300: shifted right fi; +filldraw subpath(0,rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p2,tim2),infinity) of p2---cycle; +penlabels(1,1',2,2',3,4,5,6,7,8); labels(3',7'); +); + +iff known chars.latin_r: +bskchar "The italic letter r"; +beginchar(chars.latin_r,9u# if bold_face: +u# fi, x_height#, 0); uni "0x0072"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_racute: +bskchar "The italic letter r with acute"; +beginchar(chars.latin_racute,9u# if bold_face: +u# fi, asc_height#, 0); uni "0x0155"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x1r; +acute(100,101); +endchar; + +iff known chars.latin_rcaron: +bskchar "The italic letter r with caron"; +beginchar(chars.latin_rcaron,9u# if bold_face: +u# fi, asc_height#, 0); uni "0x0159"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x1r; +hacek(100,101,102); +endchar; + +iff known chars.latin_rdoublegrave: +bskchar "The italic letter r with double grave"; +beginchar(chars.latin_rdoublegrave,9u#,asc_height#,0); uni "0x0211"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x102-x100=3u; +d_grave(100,101,102,103,x1); +endchar; + +iff known chars.latin_rcedilla: +bskchar "The italic letter r with cedilla (treated as comma)"; +beginchar(chars.latin_rcedilla,9u#,x_height#,.75comma_depth#); uni "0x0157"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x1; top y100''r=-2o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_rinvbreve: +bskchar "The italic letter r with inverted breve"; +beginchar(chars.latin_rinvbreve,9u#,asc_height#,0); uni "0x0213"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x1r; x102-x100=5u; +tieacc(100,101,102); +endchar; + +charscription(7u,x_height,0)( +numeric theta; +lft x1l=1.5u; rt x2r=w-1.2u; +h-y1l=.9y2r=2.2u; +theta=angle(z1l-z2r)-135; +pos1(stem,theta); pos2(stem,theta); +pos3(hair,-90); pos4(hair,-90); +pos5(.75[hair,stem],30); pos6(.75[hair,stem],20); +x3-o=x4=.5w; top y3l=h+o; bot y4l=-o; +rt x5r=w-u; y5r=y3-.75like_stem; +lft x6l=u; y6l=y4+like_stem; +z5'=z5l+.25stem*unitvector(z5-z3); +z6'=z6+.25stem*unitvector(z6-z4); +filldraw z5r..z3l{left}..z1l..tension atleast 1.5..z2l + ..{left}z4l..z6r{up}..z6'..z6l..{right}z4r..z2r + ..tension atleast 1.5..z1r..{right}z3r..z5l..z5'..cycle; +penlabels(0,1,2,3,4,5,6); labels(5',6'); +); + +iff known chars.latin_s: +bskchar "The italic letter s"; +beginchar(chars.latin_s,7u#, x_height#, 0); uni "0x0073"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_scaron: +bskchar "The italic letter s with caron"; +beginchar(chars.latin_scaron,7u#, asc_height#, 0); uni "0x0161"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3; x100r=u; +hacek(100,101,102); +endchar; + +iff known chars.latin_scircumflex: +bskchar "The italic letter s with circumflex"; +beginchar(chars.latin_scircumflex,7u#, asc_height#-.1x_height#, 0); uni "0x015D"; +italcorr .5[asc_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3; x102-x100=5u; +circumflex(100,101,102); +endchar; + +iff known chars.latin_sacute: +bskchar "The italic letter s with acute"; +beginchar(chars.latin_sacute,7u#, asc_height#, 0); uni "0x015B"; +italcorr asc_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3; +acute(100,101); +endchar; + +iff known chars.latin_scommabelow: +bskchar "The italic letter s with comma below"; +beginchar(chars.latin_scommabelow,7u#,x_height#,.75comma_depth#); uni "0x0219"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; top y100''r=-2o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_scedilla: +bskchar "The italic letter s with cedilla"; +beginchar(chars.latin_scedilla,7u#, x_height#, .65desc_depth#); uni "0x015F"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric theta, tim[]; +path p[]; +lft x1l=1.5u; rt x2r=w-1.2u; +h-y1l=.9y2r=2.2u; +theta=angle(z1l-z2r)-135; +pos1(stem,theta); pos2(stem,theta); +pos3(hair,-90); pos4(hair,-90); +pos5(.75[hair,stem],30); pos6(.75[hair,stem],20); +pos7(.5stem,0); pos8(.5stem,0); pos9(.8stem,0); pos10(.5stem,-110); +x3-o=x4=.5w; top y3l=h+o; bot y4l=-o; +rt x5r=w-u; y5r=y3-.75like_stem; +lft x6l=u; y6l=y4+like_stem; +z5'=z5l+.25stem*unitvector(z5-z3); +z6'=z6+.25stem*unitvector(z6-z4); +x7r=x8r; z7l=z4r; y8=-hair; y9=-.5d; +rt x9r-lft x10r=4u; x7r-lft x10r=2u; y10r=-d; +p1:=z6r{up}..z6'..z6l..{right}z4r..z2r..tension atleast 1.5..z1r..{right}z3r..z5l..z5'; +p2:=z8r..{down}z9r..{left}z10r..{right}z10l..{up}z9l..z8l--z7l; +p3:=reverse(z7r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2); +tim1=xpart(p1 intersectiontimes (z8l--(x7l,y4l))); +filldraw z5r..z3l{left}..z1l..tension atleast 1.5..z2l + ..{left}z4l..{up}z6r..subpath(0,rundy(p1,3).zpet) of p1 + ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3 + ..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(0,1,2,3,4,5,6,7,8,9,10); labels(5',6'); +endchar; + +iff known chars.latin_long_s: +bskchar "The italic letter long s"; +beginchar(chars.latin_long_s,7u#,asc_height#,desc_depth#); uni "0x017F"; +italcorr asc_height#*slant+3.5u#; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(stem,0); pos2(stem,0); pos3(hair,-90); +pos4(hair,-90); pos5(stem,-150); pos6(stem,30); +x1=x2; x1=.5w; +y2=-.5d; .5[y1,y2]=.5(h-d); +bot y4r=-d-o; if monospace: lft x5r=0; x4=.5[x5,x2]; else: x4=.5u; lft x5r=x4-x1; fi y5l=.75[y4l,y2]; +z5'=z5l+.5stem*unitvector(z5-z4); +top y3l=h+o; x6-x1=x2-x5; y6r=y3-1.5like_stem; x3=.5[x1,x6]; +z6'=z6+.25stem*unitvector(z6-z3); +pos7(hair,90); pos8(hair,90); +y7=y8=bot x_height; +x8=x1l; lft x7=.5u; +filldraw z4r{right}..z2r---z1r + ..{right}z3r..z6l..z6'..z6r{up}..z3l{left} + ..z1l---obl(8r,1l,7r)---z7r..z7l + ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up} + ..z5'..z5r..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10); labels(5',6'); +endchar; + +iff known chars.latin_eszet: +bskchar "The italic german eszet"; +beginchar(chars.latin_eszet,10u#,asc_height#,desc_depth#); uni "0x00DF"; +italcorr .5[asc_height#,x_height#]*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric theta; +oblu:=2oblu; +pos1(stem,0); pos2(stem,0); pos3(hair,-90); +pos4(hair,-90); pos5(stem,-150); pos6(hair,0); +x1=x2; x1=3u; +y2=-.5d; .5[y1,y2]=.5(h-d); +bot y4r=-d-o; if monospace: lft x5r=0; x4=.5[x5,x2]; else: x4=.5u; lft x5r=x4-x1; fi +y5l=.75[y4l,y2]; +z5'=z5l+.5stem*unitvector(z5-z4); +top y3l=h+o; x6-x1=x2-x5; y6r=.5[y3,y12]; x3=.5[x1,x6]; +pos7(hair,90); pos8(hair,90); +y7=y8=bot x_height; +x8=x1l; lft x7=.75u; +lft x10l=x1r+2u; rt x11r=w-u; +x_height-y10l=.9y11r=2.2u; +theta=angle(z10l-z11r)-135; +pos10(stem,theta); pos11(stem,theta); +pos12(hair,-90); pos13(hair,-90); +pos14(.75[hair,stem],20); +x12-o=x13=x3+1.2u; top y12l=x_height+o; bot y13l=-o; +lft x14l=x1r+1.5u; y14l=y13+like_stem; +z14'=z14+.25stem*unitvector(z14-z13); +filldraw z4r{right}..z2r---z1r + ..{right}z3r..z6l + ..z12l{z8-z6}..z10l..tension atleast 1.5..z11l + ..{left}z13l..z14r{up}..z14'..z14l..{right}z13r..z11r + ..tension atleast 1.5..z10r..{z6-z8}z12r + ..z6r..z3l{left} + ..z1l---obl(8r,1l,7r)---z7r..z7l + ---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up} + ..z5'..z5r..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14); labels(5',14'); +endchar; + +charscription(7.5u,.4[asc_height,x_height],0)( +oblu:=2oblu; +pos1(stem,0); pos1'(.8stem,5); pos2(stem,0); +pos4(hair,90); pos4'(hair,90); pos5(hair,90); pos5'(hair,90); +x1=x1'=x2=.5w; +y1=h-u; top y1'=h; y2=.35bar_height; +y4=y4'=y5=y5'=bot x_height; lft x4=u; rt x5=w-u; +x4'=x1l; x5'=x1r; +ital_hook(2,3).alt; +filldraw z1l---obl(4'r,1l,4r)---z4r..z4l---obl(4'l,4l,2l) + ---_ih---obl(5'l,2r,5l)---z5l..z5r---obl(5'r,5r,1r) + ---z1r..z1'r..z1'l--cycle; +penlabels(1,1',2,4,4',5,5'); +); + +iff known chars.latin_t: +bskchar "The italic letter t"; +beginchar(chars.latin_t,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0074"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_tcommabelow: +bskchar "The italic letter t with comma below"; +beginchar(chars.latin_tcommabelow,7.5u#,.4[asc_height#,x_height#],.75comma_depth#); uni "0x021B"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x2'l; top y100''r=-2o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_tcaron: +bskchar "The italic letter t with caron (treated like comma)"; +beginchar(chars.latin_tcaron,7.5u# if bold_face: +.5u# fi, asc_height#, 0); uni "0x0165"; +italcorr asc_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +rt x100'''=w-u; top y100''r=h; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_tcedilla: +bskchar "The italic letter t with cedilla"; +beginchar(chars.latin_tcedilla,7.5u#,.4[asc_height#,x_height#],.65desc_depth#); uni "0x0163"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; +oblu:=2oblu; +pos1(stem,0); pos1'(.8stem,5); pos2(stem,0); +pos4(hair,90); pos4'(hair,90); pos5(hair,90); pos5'(hair,90); +pos6(.5stem,0); pos7(.5stem,0); pos8(.8stem,0); pos9(.5stem,-110); +x1=x1'=x2=.5w; +y1=h-u; top y1'=h; y2=.35bar_height; +y4=y4'=y5=y5'=bot x_height; lft x4=u; rt x5=w-u; +x4'=x1l; x5'=x1r; +x6r=x7r; z6l=z2'l; y7=-hair; y8=-.5d; +rt x8r-lft x9r=4u; x6r-lft x9r=2u; y9r=-d; +ital_hook(2,3).alt; +p1:=z7r..{down}z8r..{left}z9r..{right}z9l..{up}z8l..z7l--z6l; +p2:=reverse(z6r{down}..subpath (rundy(p1,(0,curve)),infinity) of p1); +tim1=xpart(_ih intersectiontimes (z7l--(x6l,y2'))); +tim2=xpart(_ih intersectiontimes (z7r--(x6r,y2'))); +filldraw z1l---obl(4'r,1l,4r)---z4r..z4l---obl(4'l,4l,2l) + ---subpath(0,rundy(_ih,tim1).zpet) of _ih + ..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2 + ..subpath(rundy(_ih,tim2),infinity) of _ih---obl(5'l,2r,5l)---z5l..z5r---obl(5'r,5r,1r) + ---z1r..z1'r..z1'l--cycle; +penlabels(1,1',2,4,4',5,5',6,7,8,9); +endchar; + +iff known chars.latin_tstroke: +bskchar "The italic letter t with stroke"; +beginchar(chars.latin_tstroke,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0167"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(stem,0); pos1'(.8stem,5); pos2(stem,0); +pos4(hair,90); pos4'(hair,90); pos5(hair,90); pos5'(hair,90); +pos6(bar,90); pos6'(bar,90); pos7(bar,90); pos7'(bar,90); +x1=x1'=x2=.5w; +y1=h-u; top y1'=h; y2=.35bar_height; +y4=y4'=y5=y5'=bot x_height; lft x4=u; rt x5=w-u; +x4'=x1l; x5'=x1r; +x7-x6=4u; y7=y7'=y6=y6'=bar_height; .5[x6,x7]=x1; +x6'=x1l; x7'=x1r; bskpoints(6,7,.5bar,.5bar); +ital_hook(2,3).alt; +filldraw z1l---obl(4'r,1l,4r)---z4r..z4l---obl(4'l,4l,2l) + ---obl(6'r,4'l,6r)---z6rr..z6l---obl(6'l,6l,2l) + ---_ih---obl(7'l,2r,7l)---z7ll..z7r---obl(7'r,7r,1r)---obl(5'l,2r,5l)---z5l..z5r---obl(5'r,5r,1r) + ---z1r..z1'r..z1'l--cycle; +penlabels(1,1',2,4,4',5,5',6,6',7,7'); labels(6rr,7ll); +endchar; + +charscription(10.5u,x_height,0)( +numeric H; H=x_height; +numeric tim[], dl; path p[]; oblu:=2oblu; +pos1(stem,0); pos2(stem,0); +pos3(stem,0); pos3'(.8stem,5); pos4(stem,0); +pos6(.5[hair,stem],90); pos7(hair,180); +x1=x2; lft x1l=2u; x3=x3'=x4; rt x3r=w-2u; +y1=H-.3bar_height; y2=y4=.35bar_height; +y3=h-u; top y3'=h; bot y6l=-o; x6=1/3[x2,x4]; +x7r=x3l; y7=bar_height; +ital_kooh(1,0); ital_hook(4,5).alt; +p0=reverse _ik---z2r..z6r..z7r---z3l..z3'l..z3'r..z3r---reverse _ih..{up}z7r; +p1=z7l{down}..z6l..z2l---z1l; +dl:=length p0; +z8=bsktouch(subpath(dl-2,dl) of p0,left,p1,right); +tim0-dl+2=xpart(subpath(dl-2,dl) of p0 intersectiontimes (z8--(w,y8))); +tim1=xpart(p1 intersectiontimes (z8--(x6,y8))); +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1..cycle; +penlabels(0,1,2,3,3',4,6,7); +); + +iff known chars.latin_u: +bskchar "The italic letter u"; +beginchar(chars.latin_u,10.5u#, x_height#, 0); uni "0x0075"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_uacute: +bskchar "The italic letter u with acute"; +beginchar(chars.latin_uacute,10.5u#, asc_height#, 0); uni "0x00FA"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x6; +acute(100,101); +endchar; + +iff known chars.latin_uring: +bskchar "The italic letter u with ring"; +beginchar(chars.latin_uring,10.5u#, asc_height#, 0); uni "0x016F"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=.5[x1r,x3l]; lft x101=.5[x6,x2r]; +ring(100,101); +endchar; + +iff known chars.latin_uumlaut: +bskchar "The italic letter u with umlaut"; +beginchar(chars.latin_uumlaut,10.5u#, asc_height#-dot_size#, 0); uni "0x00FC"; +italcorr (asc_height#-dot_size#)*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x100=x1r; rt x101=x3l; +umlaut(100,101); +endchar; + +iff known chars.latin_ugrave: +bskchar "The italic letter u with grave"; +beginchar(chars.latin_ugrave,10.5u#,asc_height#,0); uni "0x00F9"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x1r,x3l]; +grave(100,101); +endchar; + +iff known chars.latin_udoublegrave: +bskchar "The italic letter u with double grave"; +beginchar(chars.latin_udoublegrave,10.5u#,asc_height#,0); uni "0x0215"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x102-x100=3u; +d_grave(100,101,102,103,x6); +endchar; + +iff known chars.latin_umacron: +bskchar "The italic letter u with macron"; +beginchar(chars.latin_umacron,10.5u#,.5[asc_height#,x_height#],0); uni "0x016B"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x1r; x101=x3l; +macron(100,101); +endchar; + +iff known chars.latin_ucaron: +bskchar "The italic letter u with caron"; +beginchar(chars.latin_ucaron,10.5u#,asc_height#,0); uni "0x01D4"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x1,x3]; +hacek(100,101,102); +endchar; + +iff known chars.latin_ucircumflex: +bskchar "The italic letter u with circumflex"; +beginchar(chars.latin_ucircumflex,10.5u#,asc_height#-.1x_height#,0); uni "0x00FB"; +italcorr x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x1,x3]; +circumflex(100,101,102); +endchar; + +iff known chars.latin_ubreve: +bskchar "The italic letter u with breve"; +beginchar(chars.latin_ubreve,10.5u#,asc_height#,0); uni "0x016D"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x1; x102=x3; +breve(100,101,102); +endchar; + +iff known chars.latin_uinvbreve: +bskchar "The italic letter u with inverted breve"; +beginchar(chars.latin_uinvbreve,10.5u#,asc_height#,0); uni "0x0217"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x1; x102=x3; +tieacc(100,101,102); +endchar; + +iff known chars.latin_uhumlaut: +bskchar "The italic letter u with Hungarian umlaut"; +beginchar(chars.latin_uhumlaut,10.5u#,asc_height#,0); uni "0x0171"; +italcorr asc_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=3u; .5[x100,x101]=x3l-o; +h_umlaut(100,101,102,103,2u); +endchar; + +iff known chars.latin_utilde: +bskchar "The italic letter u with tilde"; +beginchar(chars.latin_utilde,10.5u#,asc_height#,0); uni "0x0169"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=6u; +tilde(100,101); +endchar; + +iff known chars.latin_uogonek: +bskchar "The italic letter u with ogonek"; +beginchar(chars.latin_uogonek,10.5u#, x_height#, .85desc_depth#); uni "0x0173"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[], dl; path p[]; oblu:=2oblu; +pos1(stem,0); pos2(stem,0); +pos3(stem,0); pos3'(.8stem,5); pos4(stem,0); +pos6(.5[hair,stem],90); pos7(hair,180); +pos8(stem,0); pos9(curve,0); pos10(hair,45); pos11(hair,160); +x1=x2; lft x1l=2u; x3=x3'=x4; rt x3r=w-2u; +y1=x_height-.3bar_height; y2=y4=.35bar_height; +y3=h-u; top y3'=h; bot y6l=-o; x6=1/3[x2,x4]; +x7r=x3l; y7=bar_height; +ital_kooh(1,0); ital_hook(4,5).alt; +x8=x9l+1.5u; z8r=z4'l; x10-x9l=3u; rt x11l=x10+1.5u; +y9=-.5d; bot y10l=-d; y11=-2/3d; +p0=reverse _ik---z2r..z6r..z7r---z3l..z3'l..z3'r..z3r---reverse _ih..{up}z7r; +p1=z7l{down}..z6l..z2l---z1l; +p2=reverse(z8l{z9l-z8r}..z9l...z10l..{z8-z9}z11l..z11r{z9-z8}..z10r..z9r..z8r); +dl:=length p0; +z12=bsktouch(subpath(dl-2,dl) of p0,left,p1,right); +tim1=xpart(p1 intersectiontimes (z12--(x6,y12))); +tim2=xpart(p0 intersectiontimes ((x8r,-2o)--(x8r,y6))); +filldraw subpath(0,rundy(p0,tim2).zpet) of p0 + ..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2 + ..subpath(rundy(p1,tim1),infinity) of p1..cycle; +penlabels(0,1,2,3,3',4,6,7,8,9,10,11); +endchar; + +iff known chars.latin_v: +bskchar "The italic letter v"; +beginchar(chars.latin_v,11u#,x_height#,0); uni "0x0076"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +pos1(stem,0); pos2(curve,10); pos3(hair,90); +pos6(.5[hair,stem],180); pos7(stem,240); +top y1=h; x1=4u; +lft x2l=2u; y2l=.4bar_height; +bot y3l=-o; x3=.55w; +rt x6l=w-u; y6=bar_height; +top y7l=h+o; x7r=x6r-curve; +z7'=z7+.25stem*unitvector(z7-z6); +z1'=z1l+stem*unitvector(z2l-z1l); +pos4(hair,170); pos5(curve,90); pos1'(1/3[hair,stem],angle(z1l-z2l)); +y4=y1'l-hair; lft x4r=0; top y5r=h+o; x5=1/3[x4,x1]; +p0=z1'l{left}..z5l..{dir-80}z4l; +p1=reverse (z1'l{down}..z2l..{right}z3l); +filldraw subpath(rundy(p0,0),infinity) of p0 + ..{dir110}z4r..z5r..{right}z1'r..z1 + ..z1r{down}..z2r..{right}z3r..{up}z6r + ..{z7r-z6}z7r..z7'..{right}z7l..{down}z6l + ..subpath(0,rundy(p1,length p1).zpet) of p1..cycle; +penlabels(1,1',2,3,4,5,6,7); labels(9'); +endchar; + +charscription(15u,x_height,0)( +numeric tim[]; oblu:=2oblu; +path p[]; +pos1(stem,0); pos2(curve,10); pos3(hair,90); +pos6(.5[hair,stem],180); pos7(stem,240); +top y1=h; x1=4u; +lft x2l=2u; y2l=.4bar_height; +bot y3l=-o; x3=1/3w; +rt x6l=w-u; y6=bar_height; +top y7l=h+o; x7r=x6r-1.5curve; +z7'=z7+.25stem*unitvector(z7-z6); +z1'=z1l+stem*unitvector(z2l-z1l); +pos4(hair,170); pos5(curve,90); pos1'(1/3[hair,stem],angle(z1l-z2l)); +y4=y1'l-hair; lft x4r=0; top y5r=h+o; x5=1/3[x4,x1]; +pos8(hair,180); pos9(hair,-90); pos10(.5[hair,stem],0); pos11(.5[hair,stem],90); +y8=y10=.5bar_height; .5[x8,x10]=x9=.55w; x8-x10=1/8w; top y9l=.8x_height; +.5[x3,x11]=.5w+.5u; y11l=y3l; +p0=z1'l{left}..z5l..{dir-80}z4l; +p1=z11l{left}..z10l..z9l..z8l..{left}z3l..z2l..{up}z1'l; +p2=z3r{right}..z8r..z9r..z10r..{right}z11r; +(tim0,tim1)=p2 intersectiontimes p1; +(tim2,tim3-3)=p2 intersectiontimes subpath(3,4) of p1; +(tim4,tim5)=subpath(0,1) of p1 intersectiontimes p2; +(tim6,tim7-2)=subpath (0,1) of p1 intersectiontimes subpath (2,infinity) of p1; +(tim8,tim9-2)=subpath(0,1) of p2 intersectiontimes subpath(2,infinity) of p2; +filldraw subpath(rundy(p0,0),infinity) of p0 + ..{dir110}z4r..z5r..{right}z1'r..z1..z1r{down}..z2r + ..subpath(0,rundy(p2,tim5).zpet) of p2 + ..subpath(rundy(p1,tim4),rundy(p1,tim3).zpet) of p1 + ..subpath(rundy(p2,tim2),infinity) of p2 + ..z6r..{z7r-z6}z7r..z7'..{right}z7l..{dir-80}z6l + ..subpath(0,rundy(p1,tim6).zpet) of p1 + ..subpath(rundy(p1,tim7),rundy(p1,length p1).zpet) of p1..cycle; +infill subpath(rundy(p2,tim8),rundy(p2,tim9).zpet) of p2..cycle; +penlabels(1,1',2,3,4,5,6,7,8,9,10,11); labels(7'); +); + +iff known chars.latin_w: +bskchar "The italic letter w"; +beginchar(chars.latin_w,15u#,x_height#,0); uni "0x0077"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_wcircumflex: +bskchar "The italic letter w with circumflex"; +beginchar(chars.latin_wcircumflex,15u#,asc_height#-.1x_height#,0); uni "0x0175"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x9; +circumflex(100,101,102); +endchar; + +iff known chars.latin_wgrave: +bskchar "The italic letter w with grave"; +beginchar(chars.latin_wgrave,15u#,asc_height#,0); uni "0x1E81"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x9; +grave(100,101); +endchar; + +iff known chars.latin_wacute: +bskchar "The italic letter w with acute"; +beginchar(chars.latin_wacute,15u#,asc_height#,0); uni "0x1E83"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x9,x10]; +acute(100,101); +endchar; + +iff known chars.latin_wumlaut: +bskchar "The italic letter w with umlaut"; +beginchar(chars.latin_wumlaut,15u#,asc_height#-dot_size#,0); uni "0x1E85"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x3; x101=x11; +umlaut(100,101); +endchar; + +iff known chars.latin_x: +bskchar "The italic letter x"; +beginchar(chars.latin_x,11u#,x_height#,0); uni "0x0078"; +italcorr x_height#*slant+.5u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +path p[]; +pos1(stem,10); pos2(hair,150); pos1'(.5[hair,stem],100); +pos3(stem,10); pos4(hair,150); pos3'(.5[hair,stem],90); +pos11(.8stem,170); pos12(hair,30); pos11'(.5[hair,stem],80); +pos13(.8stem,170); pos14(hair,30); pos13'(.5[hair,stem],90); +y1=y11=bar_height; lft x1l=4u; x11r=w-x1r; +x2r=.5u; y2=y12=h-.25bar_height; top y1'r=h+o=top y11'r; x1'=u; x11'=w-u; x12l=w-.25u; +z2'=z2l+hair*dir(-110); z12'=z12l+hair*dir(-80); +rt x3r=w-3.5u; y3=y13=.3bar_height; x13r=w-x3r; +rt x4l=w-.5u; top y4=y14=.4bar_height; bot y3'l=bot y13'l=-o; x3'=.45[x3,x4]; x13'=.45[x13,x14]; +lft x14r=0; +z4'=z4r+hair*up; z14'=z14r+hair*up; +p0=z2'..z2l{dir60}..z1'l..z1l---z3l..z3'l..z4l if dpi>300:..z4'&z4'.. else:&z4l{up}..{down}z4r& fi z4r..z3'r..z3r---z1r..z1'r..z2r+left{dir-100}..z2'+left; +p1=if dpi>300:z12'.. fi z12l..z11'l..z11l---z13l..z13'l..z14l if dpi>300:..z14'&z14'..else:&z14l{up}..{down}z14r& fi z14r..z13'r..z13r---z11r..z11'r..z12r if dpi>300:..z12'fi; +(tim0,tim1-4)=p0 intersectiontimes subpath (4,infinity) of p1; +(tim2,tim3)=subpath (0,4) of p1 intersectiontimes p0; +(tim4-4,tim5)=subpath(4,infinity) of p0 intersectiontimes p1; +numeric node; node:=if dpi>300:9 else: 8 fi; +(tim6-node,tim7-node)=subpath (node,infinity) of p1 intersectiontimes subpath(node,infinity) of p0; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..reverse subpath(rundy(p1,tim2),rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p0,tim3),rundy(p0,tim4).zpet) of p0 + ..reverse subpath(0,rundy(p1,tim5).zpet) of p1 + ..reverse subpath(rundy(p1,tim6),infinity) of p1 + ..subpath(rundy(p0,tim7),infinity) of p0 + ..cycle; +penlabels(1,1',2,3,3',4,11,11',12,13,13',14); labels(2',4',12',14'); +endchar; + +charscription(10.5u,x_height,desc_depth)( +numeric tim[]; oblu:=2oblu; +path p[]; +pos1(stem,10); pos2(hair,150); pos1'(.5[hair,stem],100); +pos3(stem,10); pos4(hair,-40); pos5(.5[hair,stem],-90); +pos6(stem,30); pos8(stem,0); pos9(stem,60); +y1=bar_height; lft x1l=3.5u; +x2r=0; y2=h-.25bar_height; top y1'r=h+o; x1'=u; +z2'=z2l+hair*dir(-110); +x3l=.5w; y3=0; y4=-.75d; z4=z3+whatever*dir-100; +bot y5r=-d; x6l=.5u; x5=.5[x6,x4]; y6l=y5+like_stem; +z6'=z6+.25stem*unitvector(z6-z5); +rt x8r=w-u; y8=bar_height; +top y9r=h+o; x9r=x8l-stem; +z9'=z9+.25stem*unitvector(z9-z8); +p0=z5r{right}..z4r..z3r---z1r..z1'r..z2r{dir-120}..z2'& + z2'..z2l{dir60}..z1'l..z1l---z3l..z4l..{left}z5l..z6r..z6'..z6l..{right}z5r; +p1=z4r..{up}z8r..{left}z9r..z9'..{z8-z9l}z9l..{dir-80}z8l + ..{direction 11 of p0}z4l; +(tim1,tim2)=p0 intersectiontimes p1; +tim3-1=xpart(subpath(1,infinity) of p1 intersectiontimes ((0,-o)--(w,-o))); +filldraw z5r{right}..z4r..subpath(1,rundy(p1,tim3).zpet) of p1..subpath(rundy(p0,2),infinity) of p0..cycle; +penlabels(1,1',2,3,4,5,6,8,9); labels(2',6',9'); +); + +iff known chars.latin_y: +bskchar "The italic letter y"; +beginchar(chars.latin_y,10.5u#,x_height#,desc_depth#); uni "0x0079"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_ygrave: +bskchar "The italic letter y with grave"; +beginchar(chars.latin_ygrave,10.5u#,asc_height#,desc_depth#); uni "0x1EF3"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x1r,x9l]; +grave(100,101); +endchar; + +iff known chars.latin_yacute: +bskchar "The italic letter y with acute"; +beginchar(chars.latin_yacute,10.5u#,asc_height#,desc_depth#); uni "0x00FD"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x1; +acute(100,101); +endchar; + +iff known chars.latin_ymacron: +bskchar "The italic letter y with macron"; +beginchar(chars.latin_ymacron,10.5u#,.5[asc_height#,x_height#],desc_depth#); uni "0x0233"; +italcorr .5[asc_height#,x_height#]*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x8; +macron(100,101); +endchar; + +iff known chars.latin_yumlaut: +bskchar "The italic letter y with umlaut"; +beginchar(chars.latin_yumlaut,10.5u#,asc_height#-dot_size#,desc_depth#); uni "0x00FF"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x1l-.5dot_size; x101=x9; +umlaut(100,101); +endchar; + +iff known chars.latin_ycircumflex: +bskchar "The italic letter y with circumflex"; +beginchar(chars.latin_ycircumflex,10.5u#,asc_height#-.1x_height#,desc_depth#); uni "0x0177"; +italcorr .5[asc_height#,x_height#]*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +numeric oblu; oblu:=hair; +x101=x3; +circumflex(100,101,102); +endchar; + +charscription(9.5u,x_height,0)( +numeric alpha; oblu:=2oblu; +path p[]; +lft x1l=u; bot y1l=0; rt x2r=w-u; top y2r=h; +x2r-x2l=x1r-x1l; +alpha=diag_ratio(2,stem,y2r-y1l,x2r-x1l); +pos1(alpha*stem,0); pos2(alpha*stem,0); +pos1'(.5[hair,stem],angle(z2-z1)); pos2'(.5[hair,stem],angle(z2-z1)); +pos3(hair,170); pos4(curve,90); +pos5(hair,170); pos6(1.25curve,90); +z1'=z1r+stem*unitvector(z2r-z1r); +z2'=z2l+stem*unitvector(z1l-z2l); +y3=y2'l-hair; lft x3r=u; top y4r=h+o; x4=1/3[x3,x2]; +bot y5=y1'r+hair; rt x5r=w-u; bot y6l=-o-.25curve; x6=1/3[x5,x1]; +p1=z1l{(z2-z1) rotated -5}..z2'l; +p2=z2'l{left}..z4l..{dir-100}z3l; +p3=z2r{(z1-z2)rotated 5}..z1'r; +p4=z1'r{right}..z6r..{dir90}z5r; +filldraw subpath(0,rundy(p1,1).zpet) of p1 + ..subpath(rundy(p2,0),infinity) of p2 + ..{dir90}z3r..z4r..{right}z2'r..z2 + ..subpath(0,rundy(p3,1).zpet) of p3 + ..subpath(rundy(p4,0),infinity) of p4 + ..z5l{dir-80}..z6l..{left}z1'l..z1..cycle; +penlabels(1,1',2,2',3,4,5,6); +); + +iff known chars.latin_z: +bskchar "The italic letter z"; +beginchar(chars.latin_z,9.5u#,x_height#,0); uni "0x007A"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_zcaron: +bskchar "The italic letter z with caron"; +beginchar(chars.latin_zcaron,9.5u#,asc_height#,0); uni "0x017E"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5[x3r,x2r]; +hacek(100,101,102); +endchar; + +iff known chars.latin_zdotabove: +bskchar "The italic letter z with dot above"; +beginchar(chars.latin_zdotabove,9.5u#,asc_height#-.5dot_size#,0); uni "0x017C"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=.5[x3r,x2r]; +dotabove(100); +endchar; + +iff known chars.latin_zacute: +bskchar "The italic letter z with acute"; +beginchar(chars.latin_zacute,9.5u#,asc_height#,0); uni "0x017A"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.25[x101,x100]=.5[x3r,x2r]; +acute(100,101); +endchar; + +skal:=.5; +charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)( +numeric sair; sair=if medieval: vair else: hair fi; +pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h+o; +filldraw z1l{down}..z2l..z3l..z4l..{down}cycle; +infill z1r{up}..z4r..z3r..z2r..{up}cycle; +penlabels(1,2,3,4); +); + +iff known chars.numeral_zero: +bskchar "The italic numeral 0"; +beginchar(chars.numeral_zero,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x0030"; +italcorr .5x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_zero: +bskchar "The superscript italic numeral 0"; +beginchar(chars.superscript_numeral_zero,if monofig: 5.5u# else: if medieval: 5.75u# else:6.5u#fi fi,asc_height#,0); uni "0x2070"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair); +usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)( +path p; +numeric sair; sair=if medieval: vair else: hair fi; +pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270); +lft x1l=u; rt x3l=w-u; y1=y3=y0=.5h; .5[x2,x4]=.5[x1,x3]=x0; x2-x4=0; bot y2l=-o; top y4r=h+o; +p:=z1r{up}..z4r..z3r..z2r..{up}cycle; +z5=p intersectionpoint ((x0,.25[y4r,y3])--(w,.25[y4r,y3])); z6=z5+stem*unitvector(z0-z5); .5[z6,z7]=z0; +pos6(hair,angle(z7-z6)+90); pos7(hair,angle(z7-z6)+90); +filldraw z1l{down}..z2l..z3l..z4l..{down}cycle; +infill p; +filldraw bskrule(6,7,hair,hair); +penlabels(0,1,2,3,4,5,6,7); +); + +iff known chars.numeral_zero_slash: +bskchar "The italic numeral 0 with slash"; +beginchar(chars.numeral_zero_slash,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "non"; +italcorr .5x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_zero_slash: +bskchar "The superscript italic numeral 0 with slash"; +beginchar(chars.superscript_numeral_zero_slash,if monofig: 5.5u# else: if medieval: 5.75u# else:6.5u#fi fi,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair); +usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(8u),medfigu,0)( +oblu:=2.2f_obl; +path p[]; +pos1(dig_stem,0); pos2(dig_stem,0); +pos3(hair,90); +x1=.5w; bot y1=0; x2=x1; top y2=h; +lft x3=u; x4=x1l; +y3=if medieval:.5[x_height,bar_height] else: .25[x_height,h] fi; y4=y2-hair; +p1=z3l{right}..z4; p0=z4---one_serif(1); +filldraw subpath(rundy(p0,0),infinity) of p0---z2r{dir200}..{left}z3r.. + subpath(0,rundy(p1,1).zpet) of p1..cycle; +penlabels(1,2,3); labels(4); +); + +let _saved_char_one=_saved_char; +numeric _saved_w_one; _saved_w_one:=_saved_w; + +iff known chars.numeral_one: +bskchar "The italic numeral 1"; +beginchar(chars.numeral_one,figw(8u),medfig,0); uni "0x0031"; +italcorr x_height#*slant-2u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_one: +bskchar "The superscript italic numeral 1"; +beginchar(chars.superscript_numeral_one,if monofig: 5.5u# else: 5u# fi,asc_height#,0); uni "0x00B9"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair,serif_o,dig_stem); +usechar shifted (-x3,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(if medieval: 9u else: 10u fi),medfigu,0)( +path p[]; numeric tim[]; oblu:=2f_obl; +pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos4(hair,0); pos0(vair,-60); +pos6(1.2curve,270); pos7(hair,-10); +lft x1r=u; y1=2/3h+hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=.35[x2,x1]; +rt x3r=w-if medieval:1.5\\ fi u; y3=2/3h; lft x4l=u; bot y4=-apex_o; +p0:=z0l{dir60}..z0r{dir-120}..z1r..{right}z2r..{down}z3r..{down}z4r; +tim0=xpart(p0 intersectiontimes ((0,y4+.1bar_height)--(w,y4+.1bar_height))); +pos5(hair,angle(direction tim0 of p0)); z5=point tim0 of p0; +bot y7=y5r+hair; rt x7r=w-u; y6=0; x6=1/2[x7,x4]; +p1=z5l{(x3-x4,.5bar_height)}..z6l..{dir80}z7l; +z9=bsktouch(p0,right,p1,up); +tim1=xpart(p0 intersectiontimes (z9--(0,y9))); +tim2=xpart(p1 intersectiontimes (z9--(x9,0))); +filldraw subpath(0,rundy(p0,tim1).zpet) of p0 + ..subpath(rundy(p1,tim2),infinity) of p1..z7r{dir-100}..z6r + ..z4r..{up}z4l..z3l{up}..z2l{left}..z1l..cycle; +penlabels(0,1,2,3,4,5,6,7,8); +); + +iff known chars.numeral_two: +bskchar "The numeral 2"; +beginchar(chars.numeral_two,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x0032"; +italcorr 2/3h#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_two: +bskchar "The superscript numeral 2"; +beginchar(chars.superscript_numeral_two,if monofig: 5.5u# else: if medieval: 5.5u# else: 6u# fi fi,asc_height#,0); uni "0x00B2"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair); +usechar shifted (-x1r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +iff known chars.fraction_one_half: +bskchar "Fraction one half"; +beginchar(chars.fraction_one_half,5.5u#,asc_height#,0); uni "0x00BD"; +adjust_fit(0,0); +pickup tiny.nib; +numeric zv; zv:=if medieval: .5 else: .4 fi; +multiply(1.7zv)(curve,hair,vair); +usechar shifted (-x2-hair,0) scaled zv shifted (.5WW,0); +save x,y; +let _saved_char=_saved_char_one; +_saved_w:=_saved_w_one; +usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); +pos10(hair,90); pos11(hair,90); +lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: + .5hair fi; +filldraw bskrule(10,11,hair,hair); +penlabels(10,11); +endchar; + +charscription(figwu(9.5u),medfigu,medfigdu)( +numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi; +path p[]; +pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos4(.45[hair,stem],0); pos0(vair,-60); +pos5(hair,90); pos6(curve,0); pos7(like_hair,270); +lft x1r=1.5u; y1=y3+hair; top y2r=h+o; x2=.5w-hair; y0l=y3-hair; x0=.35[x2,x1]; +rt x3r=w-1.75u; y3=if medieval: 2/3h else: .8h fi; lft x4l=1.5u; +bot y4l=.5(h-d); z4'=(x4l,y4l-like_hair); +x5=.5w; y5=min(y4+stem,.5[x_height,bar_height]); rt x6r=w-u; y6=.5[y4,-d]; +x7=.55[x5,x4]; bot y7r=-d; rt x8r=u; y8=y7+1.5like_stem; +p0=z4l{dir60}..{up}z3l..z2l{left}..z1l..{dir60}z0l; +p1=z0l{dir60}..{dir-120}z0r..z1r..{right}z2r..z3r{down}..{dir-130}z4r..z4'..{dir40}z4l; +p2=z4l..z5r..z6r..z7r..smitko(8,curve)..z7l..z6l..z5l..z4'; +p3=subpath(3,infinity) of p2; +z9=bsktouch(p1,down,p2,up); +tim1-3=xpart(subpath(3,infinity) of p1 intersectiontimes (z9--(x9,y3))); +tim2=xpart(p2 intersectiontimes (z9--(x9,y6))); +(tim3,tim4-3)=p1 intersectiontimes p3; +filldraw p0..subpath(0,rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p2,tim2),rundy(p2,(tim4,f_obl)).zpet) of p2 + ..subpath(tim3,infinity) of p1 + ..cycle; +penlabels(0,1,2,3,4,5,6,7,8); labels(4',9); +); + +let _saved_char_three=_saved_char; +numeric _saved_w_three; _saved_w_three:=_saved_w; + +iff known chars.numeral_three: +bskchar "The numeral 3"; +beginchar(chars.numeral_three,figw(9.5u),medfig,medfigd); uni "0x0033"; +italcorr if medieval: 2/3h# else: .8h# fi*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_three: +bskchar "The superscript numeral 3"; +beginchar(chars.superscript_numeral_three,if monofig: 5.5u# else: 5.75u# fi,asc_height#,0); uni "0x00B3"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,stem,like_hair,like_stem); +usechar shifted (-x8r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +iff known chars.fraction_one_third: +bskchar "Fraction one third"; +beginchar(chars.fraction_one_third,5.5u#,asc_height#,0); uni "0x2153"; +adjust_fit(0,0); +pickup tiny.nib; +numeric zv; zv:=if medieval: .5 else: .4 fi; +multiply(1.7zv)(curve,hair,stem,like_hair,like_stem); +usechar shifted (-x2-hair,0) scaled zv shifted (.5WW,0); +save x,y; +let _saved_char=_saved_char_one; +_saved_w:=_saved_w_one; +usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); +pos10(hair,90); pos11(hair,90); +lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: + .5hair fi; +filldraw bskrule(10,11,hair,hair); +penlabels(10,11); +endchar; + +charscription(figwu(12u),medfigu,medfigdu)( +path p[]; numeric tim[]; oblu:=2f_obl; +pos1(stem,0); pos2(.95stem,0); pos3(hair,0); pos4(hair,90); pos5(stem,90); +pos6(hair,0); pos8(hair,0); +rt x1r= rt x2r=w-3.5u; bot y1=-d; top y2=if medieval: .45bar_height else: .9x_height fi; +lft x3l=u; y3l=if medieval: -stem else: .5x_height fi; +z4l=(x1r+hair,y3l); rt x5r=w-u; y5l=y3l; y3l:=y3l+hair; +z2'=z2r+(stem-currentbreadth)*up; z4'=z4r+hair*up; +top y6=h; x6r=x2l-o; z7l=z3l; pos7(stem,angle(z1-z3)); z7'=1/3[z7r,z4]; z7''=z7'+stem*right; +x8=x6; y8l=h+apex_o; +p0:=z1r---z2r..{up}z2'..z2l---z1l; +p1:=z3r{z2-z3}..z4l..z5l..z5r..z4r..{z3-z2}z3l; p1:=subpath(0,3) of p1; +p2:=z5r{z4-z5r}..z4'..{z3-z2}z3l; +p3:=z8l..z6l{z7'-z6}..z7l; +p4:=z7r..{z6-z7''}z6r..z8r; +(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p1; +(tim2,tim3)=subpath(0,1) of p0 intersectiontimes p2; +(tim4-1,tim5)=subpath(1,infinity) of p0 intersectiontimes p2; +(tim6-1,tim7)=subpath(1,infinity) of p0 intersectiontimes p1; +z9=bsktouch(p2,up,p4,left); +tim8=xpart(p2 intersectiontimes (z9--(x9,-d))); +tim9=xpart(p4 intersectiontimes (z9--(w,y9))); +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),infinity) of p1 + ..subpath(0,rundy(p2,tim3).zpet) of p2 + ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0 + ..subpath(rundy(p2,tim5),rundy(p2,tim8).zpet) of p2 + ..subpath(rundy(p4,tim9),infinity) of p4..p3 + ..subpath(0,rundy(p1,tim7).zpet) of p1 + ..subpath(rundy(p0,tim6),infinity) of p0..cycle; +penlabels(1,2,3,4,5,6,7,8); labels(2',4',7',7'',9); +); + +let _saved_char_four=_saved_char; +numeric _saved_w_four; _saved_w_four:=_saved_w; + +iff known chars.numeral_four: +bskchar "The numeral 4"; +beginchar(chars.numeral_four,figw(12u),medfig,medfigd); uni "0x0034"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_four: +bskchar "The superscript numeral 4"; +beginchar(chars.superscript_numeral_four,if monofig: 5.5u# else: 7u# fi,asc_height#,0); uni "0x2074"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair,dig_stem); +usechar shifted (-x3l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +iff known chars.fraction_one_quarter: +bskchar "Fraction one quarter"; +beginchar(chars.fraction_one_quarter,7u#,asc_height#,0); uni "0x00BC"; +adjust_fit(0,0); +pickup tiny.nib; +numeric zv; zv:=if medieval: .5 else: .4 fi; +multiply(1.7zv)(curve,hair,stem,like_hair,like_stem); +usechar shifted (-.5w,0) scaled zv shifted (.5WW,0); +save x,y; +let _saved_char=_saved_char_one; +_saved_w:=_saved_w_one; +usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); +pos10(hair,90); pos11(hair,90); +lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi; +filldraw bskrule(10,11,hair,hair); +penlabels(10,11); +endchar; + +iff known chars.fraction_three_quarters: +bskchar "Fraction three quarters"; +beginchar(chars.fraction_three_quarters,7u#,asc_height#,0); uni "0x00BE"; +adjust_fit(0,0); +pickup tiny.nib; +numeric zv; zv:=if medieval: .5 else: .4 fi; +multiply(1.7zv)(curve,hair,stem,like_hair,like_stem); +let _saved_char=_saved_char_four; +_saved_w:=_saved_w_four; +usechar shifted (-.5w,0) scaled zv shifted (.5WW,0); +save x,y; +let _saved_char=_saved_char_three; +_saved_w:=_saved_w_three; +usechar shifted -(x2+hair,if medieval: y7 else: 0 fi) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); +pos10(hair,90); pos11(hair,90); +lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi; +filldraw bskrule(10,11,hair,hair); +penlabels(10,11); +endchar; + +charscription(figwu(if medieval: 10.5u else: 9.5u fi),medfigu,medfigdu)( +numeric theta; theta=if medieval: 0 else: 10 fi; +path p[]; numeric tim; +oblu:=2f_obl; +pos1(hair,0); pos1''(hair,0); pos2(hair,0); pos3(stem,65); +pos4(hair,-90); pos5(curve,180); pos6(hair,90); pos7(hair,30); +x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1; +y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; z3r=z2r; z2'=(x2r,.5[y4,y2]); +x4=.5w; rt x5l=w-u; +y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem); +y5=.48[y4,y6]; +x6=.5w-o; bot y6l=-d; z1''=.75[z1,z2]+o*right; +lft x7l=u; y7=y6+.15x_height; +x8=w-u; y8=y1+.5apex_o; +z1'=z1r+if bold_face:.8\\fi curve*down; +p0=z1l{down}..z1''l..{down}z2l..{down}z3l..(x3r,y3l)..{up}z3r..{up}z2r..{right}z4r.. + {down}z5r..{left}z6r..z7r..z7l{(z6-z7) rotated -15}..z6l{right}.. + {up}z5l; +p1=z5l{up}..z4l..z2'; +p2=z2r{up}..z1''r..{up}z1r; +p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l; +tim=xpart(p2 intersectiontimes ((0,y1')--(w,y1'))); +filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,tim).zpet) of p2.. +subpath(rundy(p3,0),infinity) of p3&cycle; +penlabels(1,2,3,4,5,6,7); labels(1',2',8); +); + +iff known chars.numeral_five: +bskchar "The numeral 5"; +beginchar(chars.numeral_five,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x0035"; +italcorr medfig*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_five: +bskchar "The superscript numeral 5"; +beginchar(chars.superscript_numeral_five,if monofig: 5.5u# else: if medieval: 6.25u# else: 5.75u#fi fi,asc_height#,0); uni "0x2075"; +adjust_fit(0,0); +pickup tiny.nib; boolean superscript; superscript=true; +multiply(1.7skal)(curve,hair,stem); +usechar shifted (-x7r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(10u),fig_height,0)( +path p[]; numeric tim[]; oblu:=2oblu; +pos1(vair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +pos5(curve,0); pos6(hair,-90); pos7(hair,210); +rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3; +lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem; +rt x7l=w-u; y7=y6r-.15x_height; +p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0); +p1=z2l{right}..z3l..z4l..{down}z1l; +p2=z2r{left}..z5r..{right}z6r; +z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right); +tim1=xpart(p1 intersectiontimes (z0--(x4,y0))); +tim2=xpart(p2 intersectiontimes (z0--(0,y0))); +filldraw z7r..z7l{(z6-z7) rotated -15}..{left}z6l..z5l..{right}z2l.. + subpath(0,rundy(p1,tim1).zpet) of p1.. + subpath(rundy(p2,tim2),infinity) of p2..cycle; +infill z1r{up}..z4r..z3r..z2r..cycle; +penlabels(0,1,2,3,4,5,6,7); +); + +iff known chars.numeral_six: +bskchar "The numeral 6"; +beginchar(chars.numeral_six,figw(10u),fig_height#,0); uni "0x0036"; +italcorr fig_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_six: +bskchar "The superscript numeral 6"; +beginchar(chars.superscript_numeral_six,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2076"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair,stem); +usechar shifted (-x5l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(11u),medfigu,medfigdu)( +path p; numeric tim[]; +pos1(hair,0); pos2(curve,0); pos3(curve,90); pos4(.35x_height,90); pos1'(hair,90); +rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem; +y3r=y1r+.5stem=y4r; +lft x4l=u; x3=x4r+2hair; x3l:=x3l+o; +top y5r=y3; x5r=x5l=1/3[x3,x1']; y4r-y5r=1.5(y3l-y5l); +p:=z2l{dir80}...{z1-z2r}z1l; +y1-y0=hair-currentbreadth; +tim1=xpart(p intersectiontimes ((0,y0)--(w,y0))); z1'=point tim1 of p + u*left; +filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p,(tim1,curve)).zpet) of p..z1'l{left} + ..z5l..z3l..{z4l-z4r}z4l..z4l+left..z4..z4r&z4r..z5r..{right}z1'r--cycle; +penlabels(1,1',2,3,4,5); +); + +iff known chars.numeral_seven: +bskchar "The numeral 7"; +beginchar(chars.numeral_seven,figw(11u),medfig,medfigd); uni "0x0037"; +italcorr medfig*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_seven: +bskchar "The superscript numeral 7"; +beginchar(chars.superscript_numeral_seven,if monofig: 5.5u# else: 6.5u# fi,asc_height#,0); uni "0x2077"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,stem); +usechar shifted (-x4l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(8.5u),fig_height,0)( +path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl; +testem=.5[curve, hair]; tlstem=.75[curve,stem]; +pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0); +pos5(vair,90); pos6(vair,90); +lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h; +x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3]; +p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90); +p1=z6r{left}..z3r..z0r..z2r..z5r{left}; +p2=z4l{down}..z0{dir-160}..{down}z1l; +p3=z5l{right}..z2l..z0l..z3l..{right}z6l; +p4=z1r{up}..z0{dir20}..{up}z4r; +p5=z6l{left}..z3l..z0l..z2l..z5l{left}; +(tim1,tim2)=p1 intersectiontimes p2; +(tim3,tim4)=p3 intersectiontimes p4; +(tim5,tim6)=p5 intersectiontimes p2; +(tim7,tim8)=p1 intersectiontimes p4; +filldraw subpath(0,rundy(p1,tim1).zpet) of p1.. + subpath(rundy(p2,tim2),infinity) of p2.. + subpath(0,rundy(p3,tim3).zpet) of p3.. + subpath(rundy(p4,tim4),infinity) of p4..cycle; +infill subpath(0,rundy(p5,tim5).zpet) of p5 .. + (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle; +infill subpath(rundy(p1,tim7),infinity) of p1.. + subpath(0,rundy(p4,tim8).zpet) of p4..cycle; +penlabels(0,1,2,3,4,5,6); +); + +iff known chars.numeral_eight: +bskchar "The numeral 8"; +beginchar(chars.numeral_eight,figw(8.5u),fig_height#,0); uni "0x0038"; +italcorr .76fig_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_eight: +bskchar "The superscript numeral 8"; +beginchar(chars.superscript_numeral_eight,if monofig: 5.5u# else: 5.25u# fi,asc_height#,0); uni "0x2078"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair,stem); +usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(10u),medfigu,medfigdu)( +path p[]; numeric tim[]; oblu:=2oblu; +pos1(vair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90); +pos5(curve,0); pos6(hair,-90); pos7(hair,210); +lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi; +rt x5r=w-u; y5r=y1r-stem; +bot y6r=-d-o; x6=.5w-.75stem; +lft x7r=u; y7=y6+.15x_height; +p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0); +p1=z2r{right}..z1r{up}..z4r..z3r; +p2=z4l{right}..z5l..{left}z6l; +z0=bsktouch(p1,right,p2,left); +tim1=xpart(p1 intersectiontimes (z0--(.5w,y0))); +tim2=xpart(p2 intersectiontimes (z0--(w,y0))); +filldraw z7l..{(z6-z7) rotated -15}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r.. + subpath(0,rundy(p1,tim1).zpet) of p1.. + subpath(rundy(p2,tim2),infinity) of p2..cycle; +infill z1l{up}..z4l..z3l..z2l..cycle; +penlabels(1,2,3,4,5,6,7); +); + +iff known chars.numeral_nine: +bskchar "The numeral 9"; +beginchar(chars.numeral_nine,figw(10u),medfig,medfigd); uni "0x0039"; +italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_nine: +bskchar "The superscript numeral 9"; +beginchar(chars.superscript_numeral_nine,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2079"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair); +usechar shifted (-x3r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +iff known chars.sign_query: +bskchar "Italic question mark"; +beginchar(chars.sign_query, 9u#+punct_fit#, asc_height#, 0); uni "0x003F"; +italcorr .5[asc_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); +pos4(curve,0); pos5(hair,90); pos6(vair,120); +lft x1r=u+punct_fit; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-punct_fit)+punct_fit-hair; +y0l=y1-2hair; x0=.35[x2,x1]; +rt x3r=w-u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height; +x5=.5(w-punct_fit)+punct_fit; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0; +filldraw z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l + ..{dir-120}z0r..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r + ..cycle; +bot z100=(x5,.5dot_size); dot(100); +penlabels(0,1,2,3,4,5,6); +endchar; + +iff known chars.sign_turned_query: +bskchar "Turned italic question mark"; +beginchar(chars.sign_turned_query, 9u#, asc_height#-desc_depth#, desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos0(vair,60); pos1(.45[hair,stem],180); pos2(hair,-90); pos3(curve,0); +pos4(curve,0); pos5(hair,-90); pos6(vair,240); +lft x1r=u; y1=-d+(asc_height-.5[asc_height,x_height])-hair; bot y2r=-d-o; x2=.5w-hair; +y0l=y1+2hair; x0=.35[x2,x1]; +rt x3r=w-u; y3=-d+(asc_height-.5[asc_height,x_height])+hair; x4=x0; y4=-d+(asc_height-bar_height); +x5=.5w; top y5l=h-2dot_size; x6-x5=x0-x1; y6-y5=y1-y0; +filldraw z6l{dir120}..z5l..z4l..z3l{down}..z2l{left}..z1l..{dir-60}z0l + ..{dir150}z0r..z1r..{right}z2r..{up}z3r..z4r..z5r..{dir-60}z6r + ..cycle; +top z100=(x5,h-.5dot_size); dot(100); +penlabels(0,1,2,3,4,5,6); +endchar; + +iff known chars.sign_spanish_query: +bskchar "Reversed italic question mark"; +beginchar(chars.sign_spanish_query, 9u#, asc_height#-desc_depth#, desc_depth#); uni "0x00BF"; +adjust_fit(0,0); +pickup tiny.nib; +pos0(vair,120); pos1(.45[hair,stem],0); pos2(hair,-90); pos3(curve,180); +pos4(curve,180); pos5(hair,-90); pos6(vair,-60); +rt x1r=w-u; y1=-d+(asc_height-.5[asc_height,x_height])-hair; bot y2r=-d-o; x2=.5w+hair; +y0l=y1+2hair; x0=.35[x2,x1]; +lft x3r=u; y3=y1+2hair; x4=x0; y4=-d+(asc_height-bar_height); +x5=.5w; top y5l=h-2dot_size; x6-x5=x0-x1; y6-y5=y1-y0; +filldraw z6l{dir60}..z5l..z4l..z3l{down}..z2l{right}..z1l..{dir240}z0l + ..{dir60}z0r..z1r..{left}z2r..{up}z3r..z4r..z5r..{dir240}z6r + ..cycle; +top z100=(x5,h-.5dot_size); dot(100); +penlabels(0,1,2,3,4,5,6); +endchar; + +iff known chars.sign_at: +bskchar "Italic at sign"; +beginchar(chars.sign_at, 16u#, asc_height#-.3desc_depth#, .6desc_depth#); uni "0x0040"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric H, W, shift; H:=.9x_height; W=.9*10.5u; oblu:=2oblu; +path p[]; numeric tim[]; +shift=.5(w-W)+.5u; +pos1(stem,0); pos2(stem,0); +x1=x2; rt x2r=W-if monospace:1.5u else: 2u fi+shift; +top y1=H-hair; y2=.35bar_height; +pos4(hair,90); pos5(curve,180); pos6(.5[hair,stem],-90); +pos7(stem,0); x7=x1; y7=.5bar_height; +pos11(hair,0); pos12(hair,90); pos13(hair,180); pos14(hair,270); pos15(hair,0); +top y4r=H+o; x4=.5W+u+shift; y5=.9bar_height; lft x5r=if monospace: .25u else: 1.5u fi +shift; +bot y6r=-o; x6=x4-u; +rt x11r=w if not monospace: -.5u fi; lft x13r=u; y11=y13=bar_height; y15=if monospace:-u else: 0fi; rt x15r=w; +top y12r=h+o; bot y14r=-d+o; x12=x14-u=.5w; +p0=z4r{left}..z5r..z6r..{up}z7r; +ital_hook(2,3); +p1=z2l{down}..z2'l..{up}z11r; +p2=z4l{left}..z5l..z6l..{up}z7l---z1l; +(tim0,tim1)=p0 intersectiontimes p1; +filldraw subpath(rundy(p1,tim1),2) of p1..{left}z12r..z13r + ..{right}z14r..{z3'-.5[z15,z2']}z15r..z15l{.5[z15,z2']-z3'} + ..z14l{left}..z13l..{right}z12l..{down}z11l..z2'r..{up}z2r + ---z1r..subpath(0,rundy(p0,tim0).zpet) of p0..cycle; +infill p2..cycle; +penlabels(0,1,2,3,4,5,6,7,11,12,13,14,15); +endchar; + +iff known chars.sign_ampersand: +bskchar "Italic ampersand"; +beginchar(chars.sign_ampersand, 16u#, asc_height#, 0); uni "0x0026"; +italcorr .5[asc_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=2oblu; +pos1(cap_stem,0); pos2(cap_hair,90); pos3(.5[cap_hair,cap_stem],180); +pos4(cap_hair,0); pos4'(cap_hair,60); pos4''(.5[cap_hair,cap_stem],-150); +pos5(cap_curve,180); pos6(cap_hair,-90); pos7(cap_hair,0); +pos8(cap_hair,30); pos9(cap_hair,-60); pos10(cap_hair,-60); +pos11(cap_curve,-60); pos12(cap_curve,-60); +rt x1=w-7u; top y2r=h+o; x2=.35w; lft x3r=2u; +y3=.5[h,x_height]; y2-y1=3/4(x1-x2); +bot y4=x_height; x4=x2+o; y5=.5y4; +lft x5r=u; rt x6=if monospace:.6w else:.55w fi; bot y6r=-o; +rt x7r=w-2.5u; y7=.35[bar_height,x_height]; +x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x4-x3); +z1'=z1+.2cap_curve*down+o*left; z1''=z1+.5(cap_curve-currentbreadth)*dir45; +z8=z7+cap_stem*unitvector(z2-z7); +.5[z9r,z10r]=z8; z10r-z9r=whatever*(dir45); +lft x10r=w-2u; z12r=z10l+u*unitvector(z10-z8); +z11l=z9r+u*unitvector(z8-z10); +z8'=z8+1.5(cap_hair-currentbreadth)*unitvector(z8-z7); +p0=z8l..z7l..{left}z6l..z5l..z4'l..z4l{down}..z4''l..z3l{up}..z2l..{down}z1l; +p1=z1l{down}..z1'..z1r..z1''..z2r..{down}z3r..z4''r..{up}z4r..z4'r..z5r..{right}z6r..z7r..z8r; +p2=z8r..z10r..z12l..{z9-z10}z10l...z8'...z9l..z11r..z9r{z10-z9}..z8l; +(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1; +(tim2-3,tim3)=subpath(3,infinity) of p0 intersectiontimes p1; +(tim4,tim5-4)=p1 intersectiontimes subpath(4,7) of p0; +(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0; +filldraw subpath(0,rundy(p1,(tim0,f_obl)).zpet) of p1 + ..subpath(rundy(p1,(tim1,f_obl)),rundy(p1,infinity).zpet) of p1 + ..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2 + ..subpath(rundy(p0,0),rundy(p0,tim2).zpet) of p0 + ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2f_obl)).zpet) of p1 + ..subpath(rundy(p0,tim5),infinity) of p0..cycle; +oblu:=.5f_obl; +infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle; +penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11,12); labels(1',1''); +endchar; + diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf new file mode 100644 index 00000000000..9dcc4239b2a --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf @@ -0,0 +1,1739 @@ +%Boisik letters in other forms (greek, calligraphic) + +iff known chars.greek_Gamma: +bskchar "The Greek letter Gamma"; +beginchar(chars.greek_Gamma,11u#,cap_height#,0); uni "0x0393"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h; lft x1l= lft x2l=2u; +cap_serifs_bl(1l); cap_serifs_br(1r); +cap_serifs_tl(2l); +top y3r=h; rt x3r=w-u; +numeric oldbeak; oldbeak:=beak; beak:=1.25beak; +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---(reverse arm_top_r_points(2r,3)) + ---z2l.a..{right}z2l.c..z2l.b---cycle; +beak:=oldbeak; +penlabels(1,2); +endchar; + +iff known chars.greek_Delta: +bskchar "The Greek letter Delta"; +beginchar(chars.greek_Delta,14u#,cap_height#,0); uni "0x0394"; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +numeric alpha, right_stem, left_stem, old_jut; +pickup tiny.nib; +old_jut:=cap_jut; +{{ save cap_jut; cap_jut=old_jut-.5u; +lft x1l=1.5u; rt x2r=w-1.5u; bot y1l=bot y2r=0; +x3l=.5w; top y3l=h+apex_o; +left_stem=cap_hair; +right_stem=cap_stem; +alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l); +pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); +pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); +z1'l=z3l=z2'r; +z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem]; +z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; +cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l); +filldraw z1l.a---z2r.a..{left}z2r.c..diag_serif(2r,3l)---z3l--- + diag_serif(1l,3l)..z1l.c{left}..cycle; +infill z2l.c{right}..diag_serif(2l,3')---z3'r...z3'l---diag_serif(1r,3') + ..z1r.c---cycle; +penlabels(1,1',2,2',3,3'); +}}; +endchar; + +iff known chars.greek_Delta_alt: +bskchar "The Greek letter Delta alternative"; +beginchar(chars.greek_Delta_alt,13u#,cap_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric alpha, right_stem, left_stem, old_jut; +pickup tiny.nib; +old_jut:=cap_jut; +lft x1l=u; rt x2r=w-u; bot y1l=bot y2r=0; +x3l=.5w; top y3l=h+apex_o; +left_stem=cap_hair; +right_stem=cap_stem; +alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l); +pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); +pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); +z1'l=z3l=z2'r; +y1r:=y2l:=y1r+serif_o; +z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem]; +z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; +filldraw z1l---z2r--z3l--cycle; +infill (x1r+serif_o,y1r)--(x2l-serif_o,y2l)---z3'r...z3'l---cycle; +penlabels(1,2,3); +endchar; + +iff known chars.greek_Theta: +bskchar "The Greek letter Theta"; +beginchar(chars.greek_Theta,14u#,cap_height#,0); uni "0x0398"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); +lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; +filldraw z1l{down}..z2l..z3l..z4l..{down}cycle; +infill z1r{up}..z4r..z3r..z2r..{up}cycle; +z5=.5[z4,z2]; +pos6(.65beak,80); pos7(.65beak,85); +y6=y7=y5; .5[x6,x7]=x5; x7-x6=.47(x3r-x1r); +z6'r-z6r=z6'l-z6l=z7r-z7'r=z7l-z7'l=(serif_o,0); +y6l:=y6l-o; y7r:=y7r+o; +pos8(cap_hair,90); pos9(cap_hair,90); +y8=y9; .5[z8,z9]=z5; x9-x8=1/3(x7-x6); +filldraw z8r..{dir80}z6'r..z6r---z6l..{dir80}z6'l..z8l---z9l + ..{dir-95}z7'l..z7l---z7r..{dir-95}z7'r..z9r---cycle; +penlabels(1,2,3,4,5,6,6',7,7',8,9); +endchar; + +iff known chars.greek_Lambda: +bskchar "The Greek letter Lambda"; +beginchar(chars.greek_Lambda,13u#,cap_height#,0); uni "0x039B"; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +numeric alpha, right_stem, left_stem; +pickup tiny.nib; +lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0; +x3l=.5w; top y3l=h+apex_o; +left_stem=cap_hair; +right_stem=cap_stem; +alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l); +pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); +pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); +z1'l=z3l=z2'r; +z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem]; +z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; +cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l); +filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)---z3l--- + diag_serif(2r,3l)..{right}z2r.c..z2r.a{left}..z2r+ser_boule*up.. + {left}z2l.a..{right}z2l.c..diag_serif(2l,3')---z3'r...z3'l--- + diag_serif(1r,3') ..z1r.c{right}..z1r.a{left}..cycle; +penlabels(1,1',2,2',3,3'); +endchar; + +iff known chars.greek_Xi: +bskchar "The Greek letter Xi"; +beginchar(chars.greek_Xi,13.5u#,cap_height#,0); uni "0x039E"; +italcorr cap_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric ofs; +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h; x1=x2=.5w; +cap_serifs_bl(1l); cap_serifs_br(1r); +top y3r=top y4r=h; rt x3r=w-u-o; lft x4r=u+o; +bot y5r=0; rt x5l=w-u; +{{ + numeric oldbeak, old_jut; oldbeak:=beak; old_jut=cap_jut; save beak, cap_jut; + beak:=.9oldbeak; cap_jut:=if bold_face: .7\\ fi old_jut; + p0:=reverse arm_top_r_points(2r,3).alt; p1:=arm_top_l_points(2l,4).alt; + p2:=arm_bot_r_points(1r,5).alt; p2:=subpath(1, length(p2)-1) of p2; +}}; +p3:=reverse (p2 reflectedabout (z1r.c,z1r.a)); +ofs:=if monospace and (x3d-x2rx9r: oblu:=f_obl; fi +infill (x1l,y5'r)..{left}z9r---obl(8r,9r,2l')--- + obl(2l',7l,1l)--cycle; +penlabels(1,2,2l',5,5',6,6',7,8,8',9); +); + +iff known chars.latin_AE: +bskchar "The ligature AE"; +beginchar(chars.latin_AE,18u#,cap_height#,0); uni "0x00C6"; +italcorr cap_height#*slant-u#; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_AEmacron: +bskchar "The ligature AE with macron"; +beginchar(chars.latin_AEmacron,18u#,Acc_height#-.1x_height#,0); uni "0x01E2"; +italcorr cap_height#*slant-u#; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x6; +macron(100,101); +endchar; + +iff known chars.latin_AEacute: +bskchar "The ligature AE with acute"; +beginchar(chars.latin_AEacute,18u#,Acc_height#,0); uni "0x01FC"; +italcorr cap_height#*slant-u#; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +x101=x2; +acute(100,101).capital; +endchar; + +iff known chars.latin_OE: +bskchar "The ligature OE"; +beginchar(chars.latin_OE,19u#,cap_height#,0); uni "0x0152"; +italcorr cap_height#*slant-1.5u#; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +numeric alpha; +path p; +pos1(cap_stem,0); pos2(cap_stem,0); +pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); +bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; +top y4r=h; rt x4r=w-2.5u; +lft x1l=lft x2l=8.5u; +pos7(cap_curve,0); lft x7l=u-o; y7=.5h; +y5=y5'=y6=y6'=.5[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u; +cap_serifs_tl(2l); cap_serifs_bl(1l); +if monospace: + pos3(beak,-90); %Bottom arm + z3c=(x3-2/3u,y3); z3d=(.5[x3e,x3c],y3e); + z3e=z1r+(alt_cap_hair-currentbreadth,cap_jut); + z3f=z1r+.75ser_height*up; + penlabels(3); labels(3c,3d,3e,3f); + pos4(.65beak,90); %Top arm + z4a=z2r+.55ser_height*down; z4b=z2r+(cap_jut,-cap_hair+currentbreadth); + z4c=z4l+serif_o*left; + penlabels(4); labels(4a,4b,4c); +else: p=reverse arm_top_r_points(2r,4); +fi; +filldraw z2l.a+o*up..z7l..z1l.a+o*down{right}..z1+ser_boule*up.. + if monospace: z1r---z3r+o*left..z3r+o*up---z3l..z3l+o*left{down} + ..z3c..z3d---z3e..{up}z3f + else: arm_bot_r_points(1r,3).alt fi + ---z5'l{dir80}..z5l---z6l.. + z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r.. + {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r--- + if monospace: z4a{up}..z4b---z4b+o*right..{dir-45}z4c..z4l + ---z4r+o*down..z4r+o*left---z2r + else: p fi + ..z2..cycle; +infill z1l.b{down}..{left}z1l.c+top o*down..z7r..{right}z2l.c+top o*up..z2l.b---cycle; +penlabels(1,2,2l',5,5',6,6',7); +endchar; + +iff known chars.latin_F: +bskchar "The letter F"; +beginchar(chars.latin_F,12u#,cap_height#,0); uni "0x0046"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +path p; +pos1(cap_stem,0); pos2(cap_stem,0); +pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); +bot y1=0; top y2=h; +top y3r=h; rt x3r=w-u; +lft x1l=lft x2l=2u; +y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x3-x2r); x5'=x2r; x6'-x6=1.5u; +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); +p=reverse arm_top_r_points(2r,3); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..{left}z1r.c..z1r.b---z5'l{dir80}..z5l--- + z6l..z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r.. + {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r--- + p--z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,5,5',6,6'); +endchar; + +charscription(14.3u,cap_height,0)( +path p, po; numeric tim[], sersh; +sersh=.15tiny; +pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); +lft x1l=u-o; rt x3r=w-2.3u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o; +penpos6(beak,0); rt x6r=w-u; +p:=z1r{down}..z2r..z3r..z4r..{down}cycle; +po:=z1l{down}..z2l..z3l..z4l..{down}cycle; +tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p); +z5'=(x6,y3+.2h); +z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3); +z5'd=(z5'c--z5'b) intersectionpoint po; z5'e=.35[z5'b,z5'd]; +tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes po); +x5''a=x6r-.5cap_stem; y5''a=y3-.2h; z5''=z5''a+serif_o*left; +y6=y5''a+cap_hair; +z5''b=(x5''a-sersh,cap_hair); z5''c=(.5[x4,x1r],y3); +z5''d=(z5''c--z5''b) intersectionpoint po; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left; +tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes po); +tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p); +if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi +filldraw z1r{up}..z4r..{direction tim1 of reverse p}z5'..z5'a--z5'b---z5'e..subpath (tim3,5) of po.. + reverse (subpath(0,tim5) of p---z5''f..{left}z6l..z6l+serif_o*up--z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e.. + reverse subpath (1,tim4) of po) & cycle; +penlabels(1,2,3,4,6); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f); +); + +iff known chars.latin_G: +bskchar "The letter G"; +beginchar(chars.latin_G,14.3u#,cap_height#,0); uni "0x0047"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Gacute: +bskchar "The letter G with acute"; +beginchar(chars.latin_Gacute,14.3u#,Acc_height#,0); uni "0x01F4"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x4; +acute(100,101).capital; +endchar; + +iff known chars.latin_Gcaron: +bskchar "The letter G with caron"; +beginchar(chars.latin_Gcaron,14.3u#,Acc_height#,0); uni "0x01E6"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; +hacek(100,101,102).capital; +endchar; + +iff known chars.latin_Gcircumflex: +bskchar "The letter G with circumflex"; +beginchar(chars.latin_Gcircumflex,14.3u#,Acc_height#,0); uni "0x011C"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; +circumflex(100,101,102).capital; +endchar; + +iff known chars.latin_Gcedilla: +bskchar "The letter G with cedilla (treated as comma)"; +beginchar(chars.latin_Gcedilla,14.3u#,cap_height#,.75comma_depth#); uni "0x0122"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x2; top y100''r=-2o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_Gdotabove: +bskchar "The letter G with dot above"; +beginchar(chars.latin_Gdotabove,14.3u#,Acc_height#,0); uni "0x0120"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; +dotabove(100); +endchar; + +iff known chars.latin_Gbreve: +bskchar "The letter G with breve"; +beginchar(chars.latin_Gbreve,14.3u#,Acc_height#+o#,0); uni "0x011E"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; x102-x100=5u; bot y101l=top y4l+o; +breve(100,101,102).capital; +endchar; + +iff known chars.sign_guarani: +bskchar "Guarani sign"; +beginchar(chars.sign_guarani,14.3u#,Acc_height#,Acc_height#-cap_height#); uni "0x20B2"; +italcorr cap_height#*slant-2u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[], sersh; +sersh=.15tiny; +pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); +pos7(hair,0); pos8(hair,0); +lft x1l=u-o; rt x3r=w-2.3u; y1=y3=.5cap_height; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=cap_height+o; +penpos6(beak,0); rt x6r=w-u; x7=x8=x4; top y7=h; bot y8=-d; +p0:=z1r{down}..z2r..z3r..z4r..{down}z1r; +p1:=z1l{up}..z4l..z3l..z2l..{up}z1l; +p2:=z7r--z8r; +p3:=z8l--z7l; +tim1= ypart(((.5w,y3+.2cap_height)--(2w,y3+.2cap_height)) intersectiontimes p0); +z5'=(x6,y3+.2cap_height); +z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,cap_height+o); z5'c=(.35[x4,x3r],y3); +if xpart(point tim1 of p0) > x5'a: x5'a:=xpart(point tim1 of p0)+1 fi; +z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd]; +tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes p1); +x5''a=x6r-.5cap_stem; y5''a=y3-.2h; z5''=z5''a+serif_o*left; +y6=y5''a+cap_hair; +z5''b=(x5''a-sersh,cap_hair); z5''c=(.5[x4,x1r],y3); +z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left; +tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); +tim2=ypart((z5''f--(x5''f,0)) intersectiontimes p0); +if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi +(tim5-2,tim6)=subpath(2,infinity) of p0 intersectiontimes p2; +(tim7-2,tim8)=subpath(2,infinity) of p0 intersectiontimes p3; +(tim9,tim10)=subpath(0,3) of p0 intersectiontimes p2; +(tim11-2,tim12)=subpath(2,infinity) of p1 intersectiontimes p2; +(tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p3; +(tim15,tim16)=subpath(0,2) of p1 intersectiontimes p3; +(tim17,tim18)=subpath(0,2) of p1 intersectiontimes p2; +(tim19,tim20)=subpath(0,3) of p0 intersectiontimes p3; +filldraw z5'e---z5'b--z5'a..subpath(tim1,rundy(p0,tim5).zpet) of p0 + ..subpath(rundy(p2,tim6),rundy(p2,tim10).zpet) of p2 + ..subpath(rundy(p0,tim9),tim2) of p0---z5''f..{left}z6l + ..z6l+serif_o*up--z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e + ..subpath(tim4,rundy(p1,tim11).zpet) of p1 + ..subpath(rundy(p2,tim12),infinity) of p2 + ..subpath(0,rundy(p3,tim14).zpet) of p3 + ..subpath(rundy(p1,tim13),infinity) of p1 + ..subpath(0,rundy(p1,tim15).zpet) of p1 + ..subpath(rundy(p3,tim16),infinity) of p3 + ..subpath(0,rundy(p2,tim18).zpet) of p2 + ..subpath(rundy(p1,tim17),tim3) of p1..cycle; +infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3 + ..subpath(rundy(p0,tim7),infinity) of p0 + ..subpath(0,rundy(p0,tim19).zpet) of p0..cycle; +penlabels(1,2,3,4,6,7,8); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f); +endchar; + +charscription(15u,cap_height,0)( +pos1(cap_stem,0); pos2(cap_stem,0); +pos3(cap_stem,0); pos4(cap_stem,0); +bot y1=0; top y2=h; +lft x1l=lft x2l=2u; +cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); +bot y3=0; top y4=h; +rt x3r=rt x4r=w-2u; +cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r); +pos5(cap_hair,90); pos6(cap_hair,90); +pos7(ser_height,90); pos8(ser_height,90); +y5=y6=.52h; x5=x1r.a; x6=x3l.a; +y7=y8=y5; x7=x1r; x8=x3l; +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir80}..z5l---z6l.. + {dir-80}z8l---z3l.b{down}..{left}z3l.c..z3l.a{right}.. + z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b---z4r.b.. + {right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b--- + z8r{dir-100}..z6r---z5r..{dir100}z7r---z2r.b..{right}z2r.c.. + z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4,5,6,7,8); +); + +iff known chars.latin_H: +bskchar "The letter H"; +beginchar(chars.latin_H,15u#,cap_height#,0); uni "0x0048"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Hcaron: +bskchar "The letter H with caron"; +beginchar(chars.latin_Hcaron,15u#,Acc_height#,0); uni "0x021E"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=.5w; +hacek(100,101,102).capital; +endchar; + +iff known chars.latin_Hcircumflex: +bskchar "The letter H with circumflex"; +beginchar(chars.latin_Hcircumflex,15u#,Acc_height#,0); uni "0x0124"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=.5w; +circumflex(100,101,102).capital; +endchar; + +iff known chars.latin_Hstroke: +bskchar "The letter H with stroke"; +beginchar(chars.latin_Hstroke,15u#,cap_height#,0); uni "0x0126"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +pos1(cap_stem,0); pos2(cap_stem,0); +pos3(cap_stem,0); pos4(cap_stem,0); +bot y1=0; top y2=h; +lft x1l=lft x2l=2u; +cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); +bot y3=0; top y4=h; +rt x3r=rt x4r=w-2u; +cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r); +pos5(cap_hair,90); pos6(cap_hair,90); +pos7(ser_height,90); pos8(ser_height,90); +y5=y6=.52h; x5=x1r.a; x6=x3l.a; +y7=y8=y5; x7=x1r; x8=x3l; +forsuffixes i=10,11,12,13,14,15: pos.i(bar,90); y[i]=.35[x_height,h]; endfor; +lft x10=.75u; x15=w-x10; x11=x1l; x12=x1r; x13=x3l; x14=x3r; +bskpoints(10,15,.5hair,.5hair); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir80}..z5l---z6l.. + {dir-80}z8l---z3l.b{down}..{left}z3l.c..z3l.a{right}.. + z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b--- + obl(14l,3r,15l)---z15ll..z15r---obl(14r,15r,4r)--- + z4r.b..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b--- + obl(13r,4l,12r)---obl(12r,13r,2r)--- + z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b--- + obl(11r,2l,10r)---z10rr..z10l---obl(11l,10l,1l)---cycle; +infill obl(13l,12l,8r)---z8r{dir-100}..z6r---z5r..{dir100}z7r---obl(12l,7r,13l)---cycle; +penlabels(1,2,3,4,5,6,7,8,10,11,12,13,14,15); labels(15ll,10rr); +endchar; + +charscription(6u,cap_height,0)( +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h; +x1=x2=.5w; +cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c.. + z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2); +); + +iff known chars.latin_I: +bskchar "The letter I"; +beginchar(chars.latin_I,6u#,cap_height#,0); uni "0x0049"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_I_dotless: +bskchar "The letter I (dotless I for Small Caps)"; +beginchar(chars.latin_I_dotless,6u#,cap_height#,0); uni "non"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Iacute: +bskchar "The letter I with acute"; +beginchar(chars.latin_Iacute,6u#,Acc_height#,0); uni "0x00CD"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +.5[x100,x101]=x2; x100r-x101=3u; +acute(100,101).capital; +endchar; + +iff known chars.latin_Igrave: +bskchar "The letter I with grave"; +beginchar(chars.latin_Igrave,6u#,Acc_height#,0); uni "0x00CC"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +.5[x100,x101]=x2; +grave(100,101).capital; +endchar; + +iff known chars.latin_Idoublegrave: +bskchar "The letter I with double grave"; +beginchar(chars.latin_Idoublegrave,6u#,Acc_height#,0); uni "0x0208"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x102-x100=3u; +d_grave(100,101,102,103,x1l).capital; +endchar; + +iff known chars.latin_Imacron: +bskchar "The letter I with macron"; +beginchar(chars.latin_Imacron,6u#,Acc_height#-.1x_height#,0); uni "0x012A"; +italcorr (Acc_height#-.1x_height#)*slant+.2u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +macron(100,101); +endchar; + +iff known chars.latin_Icircumflex: +bskchar "The letter I with circumflex"; +beginchar(chars.latin_Icircumflex,6u#,Acc_height#,0); uni "0x00CE"; +italcorr (cap_height#+.75u#)*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=x2; +circumflex(100,101,102).capital; +endchar; + +iff known chars.latin_Iumlaut: +bskchar "The letter I with umlaut"; +beginchar(chars.latin_Iumlaut,6u#,Acc_height#,0); uni "0x00CF"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +.5[x100,x101]=x2; x100-x101=3u; +umlaut(100,101); +endchar; + +iff known chars.latin_Idotabove: +bskchar "The letter I with dot above"; +beginchar(chars.latin_Idotabove,6u#,Acc_height#,0); uni "0x0130"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x100=x2; +dotabove(100); +endchar; + +iff known chars.latin_Ibreve: +bskchar "The letter I with breve"; +beginchar(chars.latin_Ibreve,6u#,Acc_height#,0); uni "0x012C"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=x2+o; +breve(100,101,102).capital; +endchar; + +iff known chars.latin_Iinvbreve: +bskchar "The letter I with inverted breve"; +beginchar(chars.latin_Iinvbreve,6u#,Acc_height#+o#,0); uni "0x020A"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=x2+o; +bot bot y100=cap_height+o; +tieacc(100,101,102).capital; +endchar; + +iff known chars.latin_Itilde: +bskchar "The letter I with tilde"; +beginchar(chars.latin_Itilde,6u#,Acc_height#,0); uni "0x0128"; +italcorr Acc_height#*slant+.5u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101-x100=6u; bot y100=top y2+o; +tilde(100,101).capital; +endchar; + +iff known chars.latin_Icaron: +bskchar "The letter I with caron"; +beginchar(chars.latin_Icaron,6u#,Acc_height#,0); uni "0x01CF"; +italcorr Acc_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=x2; +hacek(100,101,102).capital; +endchar; + +iff known chars.latin_Iogonek: +bskchar "The letter I with ogonek"; +beginchar(chars.latin_Iogonek,7u#,cap_height#,.85desc_depth#); uni "0x012E"; +italcorr cap_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +path p; +pos1(cap_stem,0); pos2(cap_stem,0); +pos3(stem,0); pos4(curve,0); pos5(hair,45); pos6(hair,160); +bot y1=0; top y2=h; +x1=x2=.5w; +x3=x4l+1.5u; x3=x1l; x5-x4l=3u; rt x6l=x5+1.5u; +bot y3=0; y4=-.5d; bot y5l=-d; y6=-2/3d; +cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); +p:=z3l{z4l-z3r}..z4l...z5l..{z3-z4}z6l..z6r{z4-z3}..z5r..z4r..z3r; +filldraw z1l.b{down}..{left}z1l.c..z3l+hair*left + ..subpath(rundy(p,0),rundy(p,length p).zpet) of p + ..z3r+hair*right---z1r.a..z1r.c{left}..z1r.b + ---z2r.b..{right}z2r.c.. + z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4,5,6); +endchar; + +charscription(7u,cap_height,.6desc_depth)( +pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); +bot y1=-cap_hair; top y2=h; rt x1r=rt x2r=w-2u; +bot y3r=-d; x3=if monospace: .3w else: u fi; top y4=-.3d; x4l=if monospace: cap_stem else: -u fi; +cap_serifs_tl(2l); cap_serifs_tr(2r); +filldraw z3r{right}...z1r--- z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b--- + z1l...{left}z3l..reverse smitko(4,cap_stem)..cycle; +penlabels(1,2,3,4); labels(4',4'',4'''); +); + +iff known chars.latin_J: +bskchar "The letter J"; +beginchar(chars.latin_J,7u#,cap_height#,.6desc_depth#); uni "0x004A"; +italcorr cap_height#*slant+.5u#; +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_J_dotless: +bskchar "The letter J (dotless J for Small Caps)"; +beginchar(chars.latin_J_dotless,7u#,cap_height#,.6desc_depth#); uni "non"; +italcorr cap_height#*slant+.5u#; +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Jcircumflex: +bskchar "The letter J with circumflex"; +beginchar(chars.latin_Jcircumflex,7u#,Acc_height#,.6desc_depth#); uni "0x0134"; +italcorr (cap_height#+.75u#)*slant+.5u#; +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=x2; +circumflex(100,101,102).capital; +endchar; + +iff known chars.latin_IJ: +bskchar "The letter IJ"; +beginchar(chars.latin_IJ,12.5u#,cap_height#,.6desc_depth#); uni "0x0132"; +italcorr cap_height#*slant+.5u#; +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +numeric shift; shift=w-7u; +usechar shifted (shift*right); +pos5(cap_stem,0); pos6(cap_stem,0); +bot y5=0; top y6=h; +lft x5l=2u; x5=x6; +cap_serifs_tl(6l); cap_serifs_tr(6r); cap_serifs_bl(5l); cap_serifs_br(5r); +filldraw z5l.b{down}..{left}z5l.c..z5l.a{right}..z5+ser_boule*up.. + {right}z5r.a..z5r.c{left}..z5r.b---z6r.b..{right}z6r.c.. + z6r.a---z6l.a..{right}z6l.c..z6l.b---cycle; +penlabels(5,6); +endchar; + +charscription(14u,cap_height,0)( +pos1(cap_stem,0); pos2(cap_stem,0); +pos3(whatever,0); pos5(whatever,0); +bot y1=0; top y2=h; lft x1l=lft x2l=2u; +rt x3r=w-3.5u; top y3=h; rt x5r=w-2u; bot y5r=0; +y4r=.4h; x4r=x2r; z4l=z4r+(cap_hair-tiny,0) rotated (angle(z3r-z4r)+90); +z3l=z4l+whatever*(z3r-z4r); +x6l=x4r+cap_hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)+90); +z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; +x4'=x2r; z4'=whatever[z3l,z4l]; +cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); +cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_br(5r); cap_serifs_bl(5l); +z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); +z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); +z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); +z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r)); +x2'=x6l; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---z4r..z4r'' + if x6l'>x4r'': ..z6l' fi ..z6l''---diag_serif(5l,6l).. + {left}z5l.c..z5l.a{right}..z5+ser_boule*up..{right}z5r.a.. + {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r''--- + diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a.. + z3l.c{dir0}..diag_serif(3l,4l)---z2'..z2''--- + z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); +); + +iff known chars.latin_K: +bskchar "The letter K"; +beginchar(chars.latin_K,14u#,cap_height#,0); uni "0x004B"; +italcorr cap_height#*slant-u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Kcaron: +bskchar "The letter K with caron"; +beginchar(chars.latin_Kcaron,14u#,Acc_height#,0); uni "0x01E8"; +italcorr cap_height#*slant-u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=.5[x2r.a,x3l.a]; +hacek(100,101,102).capital; +endchar; + +iff known chars.latin_Kcedilla: +bskchar "The letter K with cedilla (treated as comma)"; +beginchar(chars.latin_Kcedilla,14u#,cap_height#,.75comma_depth#); uni "0x0136"; +italcorr cap_height#*slant-u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x100=.5[x1r.a,x5l.a]; top y100''r=0; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +charscription(12.5u,cap_height,0)( +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; +lft x1l=lft x2l=2u; +cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + arm_bot_r_points(1r,3).alt---z2r.b..{right}z2r.c..z2r.a--- + z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2); +); + +iff known chars.latin_L: +bskchar "The letter L"; +beginchar(chars.latin_L,12.5u#,cap_height#,0); uni "0x004C"; +italcorr .5bar_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Ldot: +bskchar "The letter L with middle dot"; +beginchar(chars.latin_L,14u#,cap_height#,0); uni "0x013F"; +italcorr x_height#*slant+.35dot_size#; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +top y100=x_height; rt x100+.5dot_size=w-.5u; +dot(100); +endchar; + +iff known chars.latin_Lacute: +bskchar "The letter L with acute"; +beginchar(chars.latin_Lacute,12.5u#,Acc_height#,0); uni "0x0139"; +italcorr .5bar_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +x101=x2l; +acute(100,101).capital; +endchar; + +iff known chars.latin_Lcaron: +bskchar "The letter L with caron (treated like comma)"; +beginchar(chars.latin_Lcaron,12.5u#,asc_height#,0); uni "0x013D"; +italcorr .5bar_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +y100''r=h; lft x100'l=rt x2r.a+stem; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_Lcedilla: +bskchar "The letter L with cedilla (treated as comma)"; +beginchar(chars.latin_Lcedilla,12.5u#,cap_height#,.75comma_depth#); uni "0x013B"; +italcorr .5bar_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +x100=.5w; top y100''r=-o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_Ldotabove: +bskchar "The letter L with dot above"; +beginchar(chars.latin_Ldotabove,12.5u#,Acc_height#,0); uni "non"; +italcorr .5bar_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +usechar; +x100=x2; +dotabove(100); +endchar; + +iff known chars.latin_Lslash: +bskchar "The letter L with slash"; +beginchar(chars.latin_Lslash,12.5u#,cap_height#,0); uni "0x0141"; +italcorr .5bar_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +numeric theta; +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; +lft x1l=lft x2l=2u; +cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); +x5-x4=4u; x4r=x2l.a; y5-y4=stem; .5[y4,y5]=.8[bar_height,x_height]; +theta=angle(z5-z4)+90; +pos4(bar,theta); pos5(bar,theta); +x4'l=x4'r=x1l; x5'l=x5'r=x1r; +z4'l=whatever[z4l,z5l]; z5'l=whatever[z4l,z5l]; +z4'r=whatever[z4r,z5r]; z5'r=whatever[z4r,z5r]; +bskpoints(4,5,bar,bar); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + arm_bot_r_points(1r,3).alt---obl(5'l,1r,5l)---z5ll..z5r---obl(5'r,5r,2r)--- + z2r.b..{right}z2r.c..z2r.a--- + z2l.a..{right}z2l.c..z2l.b---obl(4'r,2l,4r)---z4rr..z4l---obl(4'l,4l,1l)---cycle; +penlabels(1,2,4,4',5,5'); labels(4rr,5ll); +endchar; + +charscription(17u,cap_height,0)( +pos1(cap_hair,0); pos2(cap_hair,0); +pos3(cap_stem,0); pos4(cap_stem,0); +penpos5(whatever,0); penpos6(whatever,90); +penpos10(whatever,0); penpos11(whatever,90); +bot y1=0; top y2=h; lft x1l=lft x2l=2u; +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r); +bot y3=0; top y4=h; rt x3r=rt x4r=w-2u; +cap_serifs_bl_p(3l,.9); cap_serifs_br(3r); cap_serifs_tr(4r); +z5r=z2l; z6l=(.49w, if monospace and (x3l-x1r<3cap_stem): 2/3(x3l-x1r) else: -apex_o fi); +z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90); +z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); +y2'=y5'=y2l.b-cap_hair-o; x2'=x2r; z5'=whatever[z6l,z5r]; z5''=(.5[x2',x5'],y2'+o); +z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); +z10r=z4l; z11l=z6l; +z12=z11l+(cap_hair-tiny,0) rotated (angle(z10r-z11l)+90); +z10l=z12+whatever*(z10r-z11l); z11r=z12+whatever*(z10r-z11l); +z4''=whatever[z10l,z11r]=whatever[z5l,z6r]; +y4'=y6'=y4''+cap_hair; z4'=whatever[z10l,z11r]; z6'=whatever[z6r,z5l]; +y3'=y3''=y2'; x3'=x3l; z3''=whatever[z11l,z10r]; +z10'=z10l+(cap_hair,0) rotated(angle(z11l-z10r)); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a.. + z1r.c{left}..z1r.b---z2'..if not bold_face:z5''.. fi z5'---z6l---z3''..z3'---z3l.b.. + {left}z3l.c..z3l.a{right}..z3+ser_boule*up..{right}z3r.a..{left}z3r.c.. + z3r.b---z4r.b..{right}z4r.c..z4r.a---z4..z10'---z4'..z6'---z8..z5---z2l.a.. + {right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4,5,6,10,11); labels(2',3',3'',4',4'',5',5'',6',7,8,9,10',12); +); + +let _saved_char_m=_saved_char; +numeric _saved_w_m; _saved_w_m:=_saved_w; + +iff known chars.latin_M: +bskchar "The letter M"; +beginchar(chars.latin_M,17u#,cap_height#,0); uni "0x004D"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +charscription(14u,cap_height,0)( +pos1(cap_hair,0); pos2(cap_hair,0); +pos3(cap_hair,0); pos4(cap_hair,0); +penpos5(whatever,0); penpos6(whatever,90); +bot y1=0; top y2=h; +lft x1l=lft x2l=2u; +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r); +bot y3=-apex_o; top y4=h; +rt x3r=rt x4r=w-2u; +cap_serifs_tl(4l); cap_serifs_tr(4r); +z5r=z2l; z6l=z3l; +z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90); +z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); +y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r]; +y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l]; +z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); +filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---z2'..z5'---z6l..z3r--- + z4r.b..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b--- + z4'..z6'---z8..z5---z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4,5,6); labels(2',4',5',6',7,8,9); +); + +iff known chars.latin_N: +bskchar "The letter N"; +beginchar(chars.latin_N,14u#,cap_height#,0); uni "0x004E"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Ncaron: +bskchar "The letter N with caron"; +beginchar(chars.latin_Ncaron,14u#,Acc_height#,0); uni "0x0147"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101=.5w; y101l=y4; +hacek(100,101,102).capital; +endchar; + +iff known chars.latin_Nacute: +bskchar "The letter N with acute"; +beginchar(chars.latin_Nacute,14u#,Acc_height#,0); uni "0x0143"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x100r=x4l.a; +acute(100,101).capital; +endchar; + +iff known chars.latin_Ngrave: +bskchar "The letter N with grave"; +beginchar(chars.latin_Ngrave,14u#,Acc_height#,0); uni "0x01F8"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +lft x100l=x5l; +grave(100,101).capital; +endchar; + +iff known chars.latin_Ntilde: +bskchar "The letter N with tilde"; +beginchar(chars.latin_Ntilde,14u#,Acc_height#,0); uni "0x00D1"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x101-x100=6u; bot y100=top y5+hair; +tilde(100,101).capital; +endchar; + +iff known chars.latin_Ncedilla: +bskchar "The letter N with cedilla (treated as comma)"; +beginchar(chars.latin_N,14u#,Acc_height#,.75comma_depth#); uni "0x0145"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +x100=.5w; top y100''r=0; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_Eng: +bskchar "The letter Eng"; +beginchar(chars.latin_Eng,14u#, cap_height#, desc_depth#); uni "0x014A"; +italcorr .75cap_height#*slant; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +path p[]; numeric tim[]; +pos1(cap_stem,0); pos2(cap_stem,0); +pos3(cap_stem,0); pos4(cap_stem,0); pos5(1.5cap_hair,90); pos6(cap_hair,180); +pos7(cap_hair,-90); +lft x1l=2u; bot y1=0; top y2=h+apex_o; x1=x2; +rt x3r=w-u; y3=.5bar_height; +x4=x3; y4=.75h; y5r=h; x5=.5[x3l,x1r]; +x6l=x1r; y6=.6h; y6l:=y6l-hair; +bot y7r=-o; x3-x7=3u; top y8=y7+like_curve; x7-x8l=2u; +cap_serifs_bl(1l); cap_serifs_br(1r); drop_serif(2,cap_jut); +p1:=z6l{up}..z5l..z4l---z3l...{left}z7l..reverse smitko(8,cap_stem)..{right}z7r..{up}z3r; +p2:=z3r---z4r..z5r..{down}z6r; +p3:=z1r.b--z2r; +(tim1,tim2)=p2 intersectiontimes p3; +z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi +filldraw p1..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..{up}z1' + --z2r+.2u*left..{(x1l.a-x1l,-.25serif_drop)}z2a&z2a + ---z2b+.75u*left..z2b+u*down---z1l.b..z1l.c{left} + ..{right}z1l.a..z1+ser_boule*up..{right}z1r.a..{left}z1r.c + ..{up}z1r.b---cycle; +penlabels(1,2,3,4,5,6,7,8); labels(1'); +endchar; + +charscription(14.3u,cap_height,0)( +pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); +lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; +filldraw z1l{down}..z2l..z3l..z4l..{down}cycle; +infill z1r{up}..z4r..z3r..z2r..{up}cycle; +penlabels(1,2,3,4); +); + +iff known chars.latin_O: +bskchar "The letter O"; +beginchar(chars.latin_O,14.3u#,cap_height#,0); uni "0x004F"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Ograve: +bskchar "The letter O with grave"; +beginchar(chars.latin_Ograve,14.3u#,Acc_height#,0); uni "0x00D2"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4+u; +grave(100,101).capital; +endchar; + +iff known chars.latin_Odoublegrave: +bskchar "The letter O with double grave"; +beginchar(chars.latin_Odoublegrave,14.3u#,Acc_height#,0); uni "0x020C"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x102-x100=3u; x102=x4; +d_grave(100,101,102,103,whatever).capital; +endchar; + +iff known chars.latin_Oacute: +bskchar "The letter O with acute"; +beginchar(chars.latin_Oacute,14.3u#,Acc_height#,0); uni "0x00D3"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4-u; +acute(100,101).capital; +endchar; + +iff known chars.latin_Oumlaut: +bskchar "The letter O with umlaut"; +beginchar(chars.latin_Oumlaut,14.3u#,Acc_height#,0); uni "0x00D6"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=rt x4; x101-x100=.4(x3-x1); +umlaut(100,101); +endchar; + +iff known chars.latin_Ocircumflex: +bskchar "The letter O with circumflex"; +beginchar(chars.latin_Ocircumflex,14.3u#,Acc_height#,0); uni "0x00D4"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4+hair; +circumflex(100,101,102).capital; +endchar; + +iff known chars.latin_Ocaron: +bskchar "The letter O with caron"; +beginchar(chars.latin_Ocaron,14.3u#,Acc_height#,0); uni "0x01D1"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4; +hacek(100,101,102).capital; +endchar; + +iff known chars.latin_Otilde: +bskchar "The letter O with tilde"; +beginchar(chars.latin_Otilde,14.3u#,Acc_height#,0); uni "0x00D5"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=6u; bot y100=top y4l+o; +tilde(100,101).capital; +endchar; + +iff known chars.latin_Omacron: +bskchar "The letter O with macron"; +beginchar(chars.latin_Omacron,14.3u#,Acc_height#-.1x_height#,0); uni "0x014C"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +macron(100,101); +endchar; + +iff known chars.latin_Odotabove: +bskchar "The letter O with dot above"; +beginchar(chars.latin_Odotabove,14.3u#,Acc_height#,0); uni "0x022E"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; +dotabove(100); +endchar; + +iff known chars.latin_Ohumlaut: +bskchar "The letter O with Hungarian umlaut"; +beginchar(chars.latin_Ohumlaut,14.3u#,Acc_height#,0); uni "0x0150"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=3u; .5[x100,x101]=.5w+1.5u; +h_umlaut(100,101,102,103,2u).capital; +endchar; + +iff known chars.latin_Obreve: +bskchar "The letter O with breve"; +beginchar(chars.latin_Obreve,14.3u#,Acc_height#+o#,0); uni "0x014E"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5w+o; x102-x100=5u; +bot y101l=top y4l+o; +breve(100,101,102).capital; +endchar; + +iff known chars.latin_Oinvbreve: +bskchar "The letter O with inverted breve"; +beginchar(chars.latin_Oinvbreve,14.3u#,Acc_height#+o#,0); uni "0x020E"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=.5w+o; x102-x100=5u; +bot y100=top y4l; +tieacc(100,101,102).capital; +endchar; + +charscription(14.3u,cap_height,.85desc_depth)( +path p[]; +pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); +pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160); +lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; +x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u; +bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d; +p0=z1l{down}..z2l..z3l..z4l..{down}z1l; +p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r; +filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0 + ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1 + ..subpath(rundy(p1,(1,if bold_face:.5\\ fi stem)),infinity) of p0..cycle; +infill z1r{up}..z4r..z3r..z2r..{up}cycle; +penlabels(1,2,3,4,5,6,7,8); +); + +iff known chars.latin_Oogonek: +bskchar "The letter O with ogonek"; +beginchar(chars.latin_Oogonek,14.3u#,cap_height#,.85desc_depth#); uni "0x01EA"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Oogonekmacron: +bskchar "The letter O with ogonek and macron"; +beginchar(chars.latin_Oogonekmacron,14.3u#,Acc_height#-.1x_height#,.85desc_depth#); uni "0x01EC"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +macron(100,101); +penlabels(1,2,3,4,5,6,7,8); +endchar; + +charscription(14.3u,cap_height,0)( +path p[]; numeric tim[]; +oblu:=2oblu; +numeric inoblu; inoblu:=1.5f_obl; +pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); +lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; +z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90); +z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l]; +p0:=z1l{down}..z2l..z3l..z4l..{down}z1l; +p1:=z1r{up}..z4r..z3r..z2r..{up}z1r; +bskpoints(5,6,hair,hair); +(tim1,tim2)=p0 intersectiontimes (z5l--z6l); +(tim3,tim4)=p0 intersectiontimes (z6r--z5r); +(tim5,tim6)=p0 intersectiontimes (z0r--z5r); +(tim7,tim8)=p0 intersectiontimes (z5l--z0l); +(tim11,tim12)=p1 intersectiontimes (z0r--z6r); +(tim13,tim14)=p1 intersectiontimes (z5r--z0r); +(tim15,tim16)=p1 intersectiontimes (z6l--z0l); +(tim17,tim18)=p1 intersectiontimes (z5l--z0l); +filldraw subpath (0,rundy(p0,tim1).zpet) of p0..subpath(rundy((z5l--z6ll),tim2),infinity) of (z5l--z6ll).. + subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r).. + subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0.. + subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5rr).. + subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l) .. + subpath(rundy(p0,tim7),infinity) of p0--cycle; +infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r).. + subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1.. + subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle; +infill subpath (0, rundy(p1,(tim17,inoblu)).zpet) of p1.. + subpath(rundy(z5l--z0l,(tim18,inoblu)),infinity) of (z5l--z0l).. + subpath(0,rundy(z0l--z5l,tim16).zpet) of (z0l--z6l).. + subpath(rundy(p1,(tim15,inoblu)),infinity) of p1--cycle; +penlabels(0,1,2,3,4,5,6); +); + +iff known chars.latin_Oslash: +bskchar "The letter O slash"; +beginchar(chars.latin_Oslash,14.3u#,cap_height#,0); uni "0x00D8"; +italcorr cap_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_Oslashacute: +bskchar "The letter O slash with acute"; +beginchar(chars.latin_Oslashacute,14.3u#,Acc_height#,0); uni "0x01FE"; +italcorr cap_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4-u; +acute(100,101).capital; +endchar; + +charscription(12.5u,cap_height,0)( +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h-drop_stem; +lft x1l= lft x2l= 2u; +pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180); +pos6(cap_hair,90); pos7(.8ser_height,90); +x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-u; +x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi; +y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; +y5=.5[y4,y6]; +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); +filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir70}.. + (x7l if x7l+cap_hairx1r: -u fi; +y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; +y5=.5[y4,y6]; +lft x8=.5u; x8'=x1l; x9'=x1r; x9=.5[x6,x5]; +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); +y8=.65y7l; +if y8y7l: y1r.b:=y7l; fi +filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir70}.. + (x7l if x7l+cap_hairx1r: -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_curvex1r: -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_curvey11): + subpath(tim8,tim6) of p0 + else: + subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0 + fi + ..cycle; +penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12); +); + +bskboundary; + +iff known chars.latin_a: +bskchar "The letter a"; +beginchar(chars.latin_a,9u#,x_height#,0); uni "0x0061"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_aacute: +bskchar "The letter a with acute"; +beginchar(chars.latin_aacute,9u#,asc_height#,0); uni "0x00E1"; +italcorr asc_height#*slant-1.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3; acute(100,101); +endchar; + +iff known chars.latin_agrave: +bskchar "The letter a with grave"; +beginchar(chars.latin_agrave,9u#,asc_height#,0); uni "0x00E0"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x100l=x4l; grave(100,101); +endchar; + +iff known chars.latin_aumlaut: +bskchar "The letter a with umlaut"; +beginchar(chars.latin_aumlaut,9u#,asc_height#-dot_size#,0); uni "0x00E4"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x3; umlaut(100,101); +endchar; + +iff known chars.latin_adoublegrave: +bskchar "The letter a with doublegrave"; +beginchar(chars.latin_adoublegrave,9u#,asc_height#,0); uni "0x0201"; +pickup tiny.nib; +adjust_fit(0,0); +usechar; +x102-x100=3u; +d_grave(100,101,102,103,x3l); +endchar; + +iff known chars.latin_acircumflex: +bskchar "The letter a with circumflex"; +beginchar(chars.latin_acircumflex,9u#,asc_height#-.1x_height#,0); uni "0x00E2"; +italcorr .5[asc_height#,x_height#]*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3+2o; +circumflex(100,101,102); +endchar; + +iff known chars.latin_acaron: +bskchar "The letter a with caron"; +beginchar(chars.latin_acaron,9u#,asc_height#,0); uni "0x01CE"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x3; +hacek(100,101,102); +endchar; + +iff known chars.latin_abreve: +bskchar "The letter a with breve"; +beginchar(chars.latin_abreve,9u#,asc_height#+apex_o#,0); uni "0x0103"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x101=x3+o; x102-x100=5u; +breve(100,101,102); +endchar; + +iff known chars.latin_ainvbreve: +bskchar "The letter a with inverted breve"; +beginchar(chars.latin_ainvbreve,9u#,asc_height#,0); uni "0x0203"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x101=x3+o; x102-x100=5u; +tieacc(100,101,102); +endchar; + +iff known chars.latin_amacron: +bskchar "The letter a with macron"; +beginchar(chars.latin_amacron,9u#,.5[asc_height#,x_height#],0); uni "0x0101"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4r; +macron(100,101); +endchar; + +iff known chars.latin_atilde: +bskchar "The letter a with tilde"; +beginchar(chars.latin_atilde,9u#,asc_height#,0); uni "0x00E3"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=6u; lft x.tilde=x3; +tilde(100,101); +endchar; + +iff known chars.latin_aring: +bskchar "The letter a with ring"; +beginchar(chars.latin_aring,9u#,asc_height#,0); uni "0x00E5"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +lft x100=x3; x100-x101=1.3u; +ring(100,101); +endchar; + +iff known chars.latin_adotabove: +bskchar "The letter a with dot above"; +beginchar(chars.latin_adotabove,9u#,asc_height#-.5dot_size#,0); uni "0x0227"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x3l; +dotabove(100); +endchar; + +iff known chars.latin_a_feminine: +bskchar "Feminine ordinal indicator (superscript a)"; +beginchar(chars.latin_a_feminine,5.5u#,asc_height#-.5x_height#,0); uni "0x00AA"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(.85)(curve,hair,vair); +usechar shifted (-x8l+o,-y3r) scaled .5 shifted (u+(HH-.5x_height)*slant,HH); +endchar; + +iff known chars.latin_aogonek: +bskchar "The letter a with ogonek"; +beginchar(chars.latin_aogonek,9u#,x_height#,.85desc_depth#); uni "0x0105"; +adjust_fit(0,0); +pickup tiny.nib; +numeric aend; aend:=stem; oblu:=2oblu; +path p[]; numeric tim[]; +pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0); +pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right; +pos13(stem,0); pos14(curve,0); pos15(hair,45); pos16(hair,160); +z4''=z4+.5(aend-currentbreadth)*dir135; +rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve; +x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r]; +x3=.5[x1r,lft u]; top y3r=h+o; +y4''=.5[y2,y3l]; lft x4r=u+o; +z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1); +x13-x14l=1.5u; x13r=x0'; x15-x14l=3u; rt x16l-x15=1.5u; +y13=0; y14=-.5d; bot y15l=-d; y16=-2/3d; +pos6(hair,angle(z7-z6l)+90); +pos8(curve,30); lft x8l=u; y8r=y7-like_hair; +pos9(hair,120); x9r=x3; y9l=o; +pos10(hair,angle(z1-z9l)+90); z10l=z1; +p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l.. + {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r.. + {right}z0'r..{z0r-z0'}z0r; +p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l; +p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r; +p3:=reverse (z13l{z14l-z13r}..z14l...z15l..{z13-z14}z16l..z16r{z14-z13}..z15r..z14r..z13r); +(tim1,tim2)=p0 intersectiontimes p1; +(tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0; +(tim5,tim6)=p2 intersectiontimes p0; +(tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0; +filldraw subpath(0,rundy(p0,1).zpet) of p0 + ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3 + ..subpath(rundy(p0,1),rundy(p0,tim1).zpet) of p0.. + subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1.. + subpath(rundy(p0,tim4),infinity) of p0..cycle; +z11=point rundy(p0,tim8).zpet of p0; +z12=point rundy(p0,tim6) of p0; +infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2.. + if (y12>y11): + subpath(tim8,tim6) of p0 + else: + subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0 + fi + ..cycle; +penlabels(0,0',1,2,3,4,5,6,8,9,10,13,14,15,16); labels(4',4'',7,11,12); +endchar; + +iff known chars.latin_b: +bskchar "The letter b"; +beginchar(chars.latin_b,11u#,asc_height#,0); uni "0x0062"; +italcorr .5x_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3]; +x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; +if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; +bot y2l=-o; top y4l=x_height+o; +lft x5l=2u; bot y5=-d; top y6r=h; +{{ + numeric oldserif; oldserif:=serif_drop; + save serif_drop; serif_drop:=.81oldserif; + lowercase_points(5,6,jut); +}}; +p0=z1l{up}..z4l..z3l..z2l..{z1r-z2r}z1'l---cycle; +p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; +p2=z5f--z6r; +tim1 =xpart(subpath (0,3) of p0 intersectiontimes p2); +tim2-3=xpart(subpath (3,5) of p0 intersectiontimes ((0,hair)--(w,hair))); +z7=point tim1 of p0 + like_stem*up; +tim3 =xpart(p0 intersectiontimes ((0,y7-.5hair)--(w,y7-.5hair))); +y0=ypart(point tim2 of p0)+o; z0=whatever[z5l,z5f]; +if (abs(z0-z1'l))y5: y1':=y5; fi; +tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); +filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'--- + lowercase_stem_draw(1,2)---cycle; +penlabels(3,4,5,6); labels(1'); +); + +iff known chars.latin_h: +bskchar "The letter h"; +beginchar(chars.latin_h,11u#, asc_height#, 0); uni "0x0068"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_hcaron: +bskchar "The letter h with caron"; +beginchar(chars.latin_hcaron,11u#,asc_height#,0); uni "0x021F"; +italcorr asc_height#*slant-1.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +lft x101=x5+hair; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair; +hacek(100,101,102); +endchar; + +iff known chars.latin_hcircumflex: +bskchar "The letter h with circumflex"; +beginchar(chars.latin_hcircumflex,11u#,asc_height#,0); uni "0x0125"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +lft x101=x5+hair; x102-x100=4.5u; +circumflex(100,101,102); +endchar; + +iff known chars.latin_hstroke: +bskchar "The letter h with stroke"; +beginchar(chars.latin_hstroke,11u#, asc_height#, 0); uni "0x0127"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2f_obl; oblu.light:=f_obl; +pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); +pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90); +x8-x7=4u; y8=y8'=y7=y7'=.4[x_height,h]; lft x7=.5u; +x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair); +lft x1l=2u; bot y1=0; top y2=h; +rt x3r=w-2u; bot y3=0; serif_bot(3); +x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r]; +x6l=x1r; y6=.5x_height; +lowercase_points(1,2,jut); +p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; +p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; +p3:=z1f--z2r; +(tim1,tim2)=p2 intersectiontimes p3; +z1'=point tim2 of p3+(like_stem+hair+tiny)*up; +if y1'>y5: y1':=y5; fi; +tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); +filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---obl(8'l,1',8l).light + ---z8ll..z8r---obl(8'r,8r,2).light---subpath(0,3) of lowercase_stem_draw(1,2) + ---obl(7'r,2l,7r).light---z7rr..z7l---obl(7'l,7l,1l).light + ---subpath(4,infinity) of lowercase_stem_draw(1,2)---cycle; +penlabels(3,4,5,6,7,7',8,8'); labels(1',7rr,8ll); +endchar; + +iff known chars.latin_hbar: +bskchar "The letter h with bar (Dirac constant)"; +beginchar(chars.latin_hbar,11u#, asc_height#, 0); uni "0x210F"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +path p[]; numeric tim[], theta; oblu:=2f_obl; oblu.light:=f_obl; +pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); +x8-x7=4u; .5[y8,y7]=.35[x_height,h]; y8-y7=stem; lft x7=.5u; +theta:=angle(z8-z7)+90; +pos7(bar,theta); pos8(bar,theta); +x7'l=x7'r=x1l; x8'l=x8'r=x1r; bskpoints(7,8,hair,hair); +z7'l=whatever[z7l,z8l]; z8'l=whatever[z7l,z8l]; +z7'r=whatever[z7r,z8r]; z8'r=whatever[z7r,z8r]; +lft x1l=2u; bot y1=0; top y2=h; +rt x3r=w-2u; bot y3=0; serif_bot(3); +x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r]; +x6l=x1r; y6=.5x_height; +lowercase_points(1,2,jut); +p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; +p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; +p3:=z1f--z2r; +(tim1,tim2)=p2 intersectiontimes p3; +z1'=point tim2 of p3+(like_stem+hair+tiny)*up; +if y1'>y5: y1':=y5; fi; +tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); +filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---obl(8'l,1',8l).light + ---z8ll..z8r---obl(8'r,8r,2).light---subpath(0,3) of lowercase_stem_draw(1,2) + ---obl(7'r,2l,7r).light---z7rr..z7l---obl(7'l,7l,1l).light + ---subpath(4,infinity) of lowercase_stem_draw(1,2)---cycle; +penlabels(3,4,5,6,7,7',8,8'); labels(1',7rr,8ll); +endchar; + +charscription(6u,x_height,0)( +oblu:=2oblu; +x1=.5w; bot y1=0; top y2=x_height; +lowercase_stem(1,2,1.2jut).alt; +); + +iff known chars.latin_dotless_i: +bskchar "The dotless i"; +beginchar(chars.latin_dotless_i,6u#, x_height#, 0); uni "0x0131"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_i: +bskchar "The letter i"; +beginchar(chars.latin_i,6u#, asc_height#-.5dot_size#, 0); uni "0x0069"; +italcorr (asc_height#-.5dot_size#)*slant-1.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +x3=x1-ddot; top y3=h-.5dot_size; +usechar; +dot(3); +endchar; + +iff known chars.latin_iacute: +bskchar "The letter i with acute"; +beginchar(chars.latin_iacute,6u#, asc_height#, 0); uni "0x00ED"; +italcorr asc_height#*slant-u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +x101=x2l; +usechar; +acute(100,101); +endchar; + +iff known chars.latin_igrave: +bskchar "The letter i with grave"; +beginchar(chars.latin_igrave,6u#,asc_height#,0); uni "0x00EC"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x2; +grave(100,101); +endchar; + +iff known chars.latin_idoublegrave: +bskchar "The letter i with double grave"; +beginchar(chars.latin_idoublegrave,6u#,asc_height#,0); uni "0x0209"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x102-x100=2.5u; x103r=x2r; +d_grave(100,101,102,103,whatever); +endchar; + +iff known chars.latin_imacron: +bskchar "The letter i with macron"; +beginchar(chars.latin_imacron,6u#,.5[asc_height#,x_height#],0); uni "0x012B"; +italcorr .5[asc_height#,x_height#]*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=w-u; x100=.5u; +macron(100,101); +endchar; + +iff known chars.latin_icircumflex: +bskchar "The letter i with circumflex"; +beginchar(chars.latin_icircumflex,6u#,asc_height#-.1x_height#,0); uni "0x00EE"; +italcorr .5[asc_height#,x_height#]*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x2l; +circumflex(100,101,102); +endchar; + +iff known chars.latin_iumlaut: +bskchar "The letter i with umlaut"; +beginchar(chars.latin_iumlaut,6u#,asc_height#-dot_size#,0); uni "0x00EF"; +italcorr (asc_height#-dot_size#)*slant-.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +.5[x100,x101]=x2l; x100-x101=1.8dot_size; +umlaut(100,101); +endchar; + +iff known chars.latin_ibreve: +bskchar "The letter i with breve"; +beginchar(chars.latin_ibreve,6u#,asc_height#,0); uni "0x012D"; +italcorr asc_height#*slant-u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x2l-o; +breve(100,101,102); +endchar; + +iff known chars.latin_iinvbreve: +bskchar "The letter i with inverted breve"; +beginchar(chars.latin_iinvbreve,6u#,asc_height#,0); uni "0x020B"; +italcorr x_height#*slant-.25u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x2l; +tieacc(100,101,102); +endchar; + +iff known chars.latin_itilde: +bskchar "The letter i with tilde"; +beginchar(chars.latin_itilde,6u#,asc_height#,0); uni "0x0129"; +italcorr asc_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101-x100=5.5u; rt x.tilde=x2l; +tilde(100,101); +endchar; + +iff known chars.latin_icaron: +bskchar "The letter i with caron"; +beginchar(chars.latin_icaron,6u#,asc_height#,0); uni "0x01D0"; +italcorr asc_height#*slant-.25u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x2l; x102-x100=4.5u; +hacek(100,101,102); +endchar; + +iff known chars.latin_iogonek: +bskchar "The letter i with ogonek"; +beginchar(chars.latin_iogonek,6u#,asc_height#-.5dot_size#,.85desc_depth#); uni "0x012F"; +italcorr (asc_height#-.5dot_size#)*slant-1.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +oblu:=2oblu; +path p[]; numeric tim[]; +x1=.5w; bot y1=0; top y2=x_height; +lowercase_points(1,2,1.2jut).alt; +p0:=lowercase_stem_draw(1,2)--z2r; +pos3(stem,0); pos4(curve,0); pos5(hair,45); pos6(hair,160); +x3-x4l=1.5u; x3=x1; x5-x4l=3u; rt x6l-x5=1.5u; +y3=0; y4=-.5d; bot y5l=-d; y6=-2/3d; +p1:=z3l{z4l-z3r}..z4l...z5l..{z3-z4}z6l..z6r{z4-z3}..z5r..z4r..z3r; +tim0=xpart(p0 intersectiontimes ((x3l,0)--(x3l,y1b))); +tim1=xpart(p0 intersectiontimes ((x3r,0)--(x3r,y1b))); +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1 + ..subpath(rundy(p0,tim1),infinity) of p0..cycle; +x0=x1-ddot; top y0=h-.5dot_size; +dot(0); +penlabels(3,4,5,6); +endchar; + +iff known chars.logo_i: +bskchar "The letter i for logo"; +beginchar(chars.logo_i,6u#, asc_height#-.5dot_size#, comma_depth#); uni "non"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +x3=x1-ddot; top y3=h-.5dot_size; +oblu:=2oblu; +x1=.5w; bot y1=0; top y2=x_height; +lowercase_points(1,2,1.2jut).alt; +z5=z1b-z1c; +y1c:=-d; y1a:=0; +x4=x1; z4=whatever[z1c,z1d]+o*up; +z6=z1c+ z5 rotated angle(z1d-z1c); +filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---z1a..z6{z1c-z1d}..{z1d-z1c}z1c + ..z4..{z1d-z1c}z1d{right}..{left}z1e..{up}z1f---z2r&cycle; +dot(3); +labels(1a,1b,1c,4,6); +endchar; + +charscription(5u,x_height,desc_depth)( +oblu:=2oblu; +pos3(hair,-90); +bot y1=-d+like_curve; top y2=x_height; rt x1r=w-u; +bot y3r=-d; x3=if monospace: .4w else: u fi; top y4=y1; if monospace: x4=u; else: x4l=-u; fi; +lowercase_points(1,2,1.2jut).alt; +filldraw z3r{right}...{up}z1r--z2r..{(x2a-x1r,-.25serif_drop)}z2a& + z2a---obl(2b,2a,1a)---z1l...{left}z3l..reverse smitko(4,stem)..cycle; +penlabels(1,2,3,4); labels(4',4'',4'''); +); + +iff known chars.latin_dotless_j: +bskchar "The dotless j"; +beginchar(chars.latin_dotless_j,5u#,x_height#,desc_depth#); uni "non"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_j: +bskchar "The letter j"; +beginchar(chars.latin_j,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x006A"; +italcorr (asc_height#-.5dot_size#)*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +top y5=h-.5dot_size; x5=x1-ddot; +usechar; +dot(5); +endchar; + +iff known chars.latin_jcircumflex: +bskchar "The letter j with circumflex"; +beginchar(chars.latin_jcircumflex,5u#,asc_height#-.1x_height#,1.5like_cap_curve#); uni "0x0135"; +italcorr .5[asc_height#,x_height#]*slant+1.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2l; +circumflex(100,101,102); +endchar; + +iff known chars.latin_ij: +bskchar "The letter ij"; +beginchar(chars.latin_ij,9.5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0133"; +italcorr (asc_height#-.5dot_size#)*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric shift; shift:=w-5u; +usechar shifted (shift*right); +oblu:=2f_obl; +lft x5l=2u; bot y5=0; top y6=x_height; +top y7=top y8=h-.5dot_size; x7=x5-ddot; x8=x1-ddot+shift; +lowercase_stem(5,6,1.2jut).alt; +dot(7); dot(8); +endchar; + +charscription(10.5u,asc_height,0)( +pos3(whatever,0); pos5(whatever,0); +bot y1=0; top y2=h; lft x1l=2u; +rt x3r=w-3u; top y3=x_height; rt x5r=w-2u; bot y5r=0; +lowercase_points(1,2,jut); +y4r=.45x_height; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90); +z3l=z4l+whatever*(z3r-z4r); +x6l=x4r+hair+.75u; z6l=whatever[z4r,z3r]; +z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90); +z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; +x4'=x2r; z4'=whatever[z3l,z4l]; +serifs_tl(3l); serifs_tr(3r); serifs_br(5r); serifs_bl(5l); +z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); +z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); +z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); +z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); +z6r''=(z6r+(u,0) rotated (angle(z3r-z4r))) + shifted ((hair-currentbreadth)*unitvector(z3r-z4r) rotated -90); +z2'=z4'+(1.5u,0) rotated (angle(z3l-z4l)); z2''=z4'+(0,2u); +filldraw z1a{down}..{left}z1b..z1c{right}..z1+ser_boule*up..{right}z1d.. + z1e{left}..z1f---obl(4r,1f,4r'')..z4r''..z6l''--- + obl(5l,6l'',5r){right}..z5r+.5ser_boule*up..{right}z5r.a.. + {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r'' + if not bold_face: ---diag_serif(3r,4r) fi ..{dir0}z3r.c..z3r.a---z3l.a..z3l.c{dir0}.. + diag_serif(3l,4l)---z2'..{up}z2''--z2r + ..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a) + ---cycle; +penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); +); + +iff known chars.latin_k: +bskchar "The letter k"; +beginchar(chars.latin_k,10.5u#,asc_height#,0); uni "0x006B"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_kcaron: +bskchar "The letter k with caron"; +beginchar(chars.latin_kcaron,10.5u#,asc_height#,0); uni "0x01E9"; +italcorr asc_height#*slant-.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=x1r+u; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair; +hacek(100,101,102); +endchar; + +iff known chars.latin_kcedilla: +bskchar "The letter k with cedilla (treated as comma)"; +beginchar(chars.latin_kcedilla,10.5u#,asc_height#,.75comma_depth#); uni "0x0137"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +lft x100=.5w; top y100''r=-o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_kra: +bskchar "The letter kra"; +beginchar(chars.latin_kra,11.5u#,x_height#,0); uni "0x0138"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +oblu:=2oblu; +pos1(stem,0); pos2(stem,0); +pos3(whatever,0); pos5(whatever,0); +bot y1=0; top y2=h; lft x1l=lft x2l=2u; +rt x3r=w-3u; top y3=h; rt x5r=w-2u; bot y5r=0; +y4r=.45h; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90); +z3l=z4l+whatever*(z3r-z4r); +x6l=x4r+hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90); +z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; +x4'=x2r; z4'=whatever[z3l,z4l]; +serif_bot(1); drop_serif(2,jut).alt; +serif_bot(5); +serifs_tl(3l); serifs_tr(3r); +z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); +z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); +z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); +z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r)); +x2'=x1r; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u); +z5l.b=z5a; z5r.b=z5f; +filldraw z1a{down}..{left}z1b..z1c---z1d..z1e{left}..z1f---z4r..z4r'' if x6l'>x4r'': ..z6l' fi + ..z6l''---diag_serif(5l,6l)..{left}z5b..z5c---z5d..{left}z5e..diag_serif(5r,6r)---z6r' + ..z6r''--- diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a.. z3l.c{dir0}..diag_serif(3l,4l) + ---obl(2',3l,2'')---z2''--z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---cycle; +penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); +endchar; + +charscription(6u,asc_height,0)( +x1=.5w; bot y1=0; top y2=h; +lowercase_stem(1,2,jut); +); + +iff known chars.latin_l: +bskchar "The letter l"; +beginchar(chars.latin_l,6u#, asc_height#, 0); uni "0x006C"; +italcorr asc_height#*slant-1.75u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_lacute: +bskchar "The letter l with acute"; +beginchar(chars.latin_lacute,6u#, asc_height#+.3x_height#, 0); uni "0x013A"; +italcorr asc_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=.5[x2a,x2l]; x100r=w-u; y101=asc_height+.75u; +acute(100,101).capital; +endchar; + +iff known chars.latin_lcaron: +bskchar "The letter l with caron (treated like comma)"; +beginchar(chars.latin_lcaron,6u#, asc_height#, 0); uni "0x013E"; +italcorr asc_height#*slant+u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +y100''r=h; x100'''=w; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_ldot: +bskchar "The letter l with middle dot"; +beginchar(chars.latin_l,6u#+dot_size#,asc_height#,0); uni "0x0140"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +top y100=x_height; x100+.5dot_size=w-u; +dot(100); +endchar; + +iff known chars.latin_lcedilla: +bskchar "The letter l with cedilla (treated as comma)"; +beginchar(chars.latin_lcedilla,6u#,asc_height#,.75comma_depth#); uni "0x013C"; +italcorr asc_height#*slant-1.75u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=.5w; top y100''r=-o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_ldotabove: +bskchar "The letter l with dot above"; +beginchar(chars.latin_ldotabove,6u#,Acc_height#+o#,0); uni "non"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=x1; +dotabove(100); +endchar; + +iff known chars.latin_lslash: +bskchar "The letter l with slash"; +beginchar(chars.latin_lslash,6u#,asc_height#,0); uni "0x0142"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric theta; +x1=.5w; bot y1=0; top y2=h; +lowercase_points(1,2,jut); +x4-x3=4u; .5[x3,x4]=x1; y4-y3=stem; .5[y3,y4]=.8[bar_height,x_height]; +theta=angle(z4-z3)+90; +pos3(bar,theta); pos4(bar,theta); +x3'l=x3'r=x1l; x4'l=x4'r=x1r; +z3'l=whatever[z3l,z4l]; z4'l=whatever[z3l,z4l]; +z3'r=whatever[z3r,z4r]; z4'r=whatever[z3r,z4r]; +bskpoints(3,4,bar,bar); +filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---obl(3'r,2l,3r) + ---z3rr..z3l---obl(3'l,3l,1l)---z1a..z1b{left}..{right}z1c..z1+ser_boule*up + ..z1d{right}..{left}z1e..{up}z1f---obl(4'l,1r,4l)---z4ll..z4r + ---obl(4'r,4r,2r)---z2r..cycle; +penlabels(1,2,3,3',4,4'); labels(3rr,4ll); +endchar; + +iff known chars.latin_m: +bskchar "The letter m"; +beginchar(chars.latin_m,16u#, x_height#, 0); uni "0x006D"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +path p[]; numeric tim[]; boolean correct; correct:=true; +oblu:=6oblu; +pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); +pos7(stem,0); pos8(stem,0); pos9(n_str_hair,90); pos10(hair,180); +lft x1l=2u; bot y1=0; top y2=h+apex_o; +x3=.5w; bot y3=bot y7=0; x4=x3; y4=y8=.75x_height; y5r=y9r=x_height; x5=.5[x3l,x1r]; +x6l=x1r; y6=y10=if monospace: .75 else: .6 fi\\ x_height; x10l=x3r; +rt x7r=w-2u; x8=x7; x9=.5[x7l,x3r]; +{{ if monospace and (x3l-x1l-stem-tiny<2jut): correct:=false; save jut; numeric jut; jut:=.4(x3l-x1l-stem-.5tiny); fi +serif_bot(3); serif_bot(7); lowercase_points(1,2,jut);}}; +p1:=z6l{up}..z5l..z4l---z3a if correct:.. else: -- fi z3b{left}..{right}z3c; +p2:=z3d{right}..{left}z3e if correct:..{up} else: -- fi z3f---z10l..z9l.. + z8l---z7a if correct:.. else: -- fi z7b{left}..z7c{right}.. + z7+ser_boule*up..{right}z7d..{left}z7e + if correct:.. else: -- fi z7f---z8r..z9r..{down}z10r; +p21:=subpath(6,infinity) of p2; +p3:=z4r{up}..z5r..{down}z6r; +p4:=z1f--z2r; +tim3=xpart(p3 intersectiontimes p4); +z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi +z0=(x4r,y1'); +tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair))); +tim2=xpart(p3 intersectiontimes (z0--(x5,y0))); +filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21.. + subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: oblu fi)).zpet) of p3..broken_stem_draw(1',1,2)---cycle; +penlabels(3,4,5,6,7,8,9,10); labels(0,1'); +endchar; + +charscription(11.5u,x_height,0)( +path p[]; numeric tim[]; oblu:=8oblu; +pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); +lft x1l=2u; bot y1=0; top y2=h+apex_o; +rt x3r=w-2u; bot y3=0; serif_bot(3); +x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r]; +x6l=x1r; y6=.6x_height; y6l:=y6l-hair; +lowercase_points(1,2,jut); +p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; +p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; +p3:=z1f--z2r; +(tim1,tim2)=p2 intersectiontimes p3; +z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi +filldraw p1..z3+ser_boule*up..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle; +penlabels(3,4,5,6); labels(1'); +); + +iff known chars.latin_n: +bskchar "The letter n"; +beginchar(chars.latin_n,11.5u#, x_height#, 0); uni "0x006E"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_ncaron: +bskchar "The letter n with caron"; +beginchar(chars.latin_ncaron,11.5u#, asc_height#, 0); uni "0x0148"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x5; +hacek(100,101,102); +endchar; + +iff known chars.latin_nacute: +bskchar "The letter n with acute"; +beginchar(chars.latin_nacute,11.5u#,asc_height#,0); uni "0x0144"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=.5[x5,x2r]; +acute(100,101); +endchar; + +iff known chars.latin_napostrophe: +bskchar "The letter n with apostrophe"; +beginchar(chars.latin_napostrophe,11.5u#,asc_height#+o#,0); uni "0x0149"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +lft x100=.5u; top y100=h-.5dot_size; +comma(100,dot_size,.9hair,.8comma_depth); +endchar; + +iff known chars.latin_ngrave: +bskchar "The letter n with grave"; +beginchar(chars.latin_ngrave,11.5u#,asc_height#,0); uni "0x01F9"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x5; +grave(100,101); +endchar; + +iff known chars.latin_ntilde: +bskchar "The letter n with tilde"; +beginchar(chars.latin_ntilde,11.5u#,asc_height#,0); uni "0x00F1"; +italcorr asc_height#*slant-1.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101-x100=6u; x.tilde=.5[x1r,x4l]; +tilde(100,101); +endchar; + +iff known chars.latin_ncedilla: +bskchar "The letter n with cedilla (treated as comma)"; +beginchar(chars.latin_ncedilla,11.5u#,x_height#,.75comma_depth#); uni "0x0146"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=.5w; top y100''r=-o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_eng: +bskchar "The letter eng"; +beginchar(chars.latin_eng,10.5u#, x_height#, desc_depth#); uni "0x014B"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=8oblu; +pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); +pos7(hair,-90); +lft x1l=2u; bot y1=0; top y2=h+apex_o; +rt x3r=w-u; y3=-.5d; +x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r]; +x6l=x1r; y6=.6x_height; y6l:=y6l-hair; +bot y7r=-d; x3-x7=3u; top y8=y7+like_curve; x7-x8l=2u; +lowercase_points(1,2,jut); +p1:=z6l{up}..z5l..z4l---z3l...{left}z7l..reverse smitko(8,stem)..{right}z7r..{up}z3r; +p2:=z3r---z4r..z5r..{down}z6r; +p3:=z1f--z2r; +(tim1,tim2)=p2 intersectiontimes p3; +z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi +filldraw p1..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle; +penlabels(3,4,5,6,7,8); labels(1'); +endchar; + +charscription(10u,x_height,0)( +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle; +infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; +penlabels(1,2,3,4); +); + +iff known chars.latin_o: +bskchar "The letter o"; +beginchar(chars.latin_o,10u#,x_height#,0); uni "0x006F"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_oacute: +bskchar "The letter o with acute"; +beginchar(chars.latin_oacute,10u#,asc_height#,0); uni "0x00F3"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4l; +acute(100,101); +endchar; + +iff known chars.latin_oumlaut: +bskchar "The letter o with umlaut"; +beginchar(chars.latin_oumlaut,10u#,asc_height#-dot_size#,0); uni "0x00F6"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +.5[x100,x101]=x4l; x101-x100=2/3(x3-x1); +umlaut(100,101); +endchar; + +iff known chars.latin_ocircumflex: +bskchar "The letter o with circumflex"; +beginchar(chars.latin_ocircumflex,10u#,asc_height#-.1x_height#,0); uni "0x00F4"; +italcorr .5[x_height#,asc_height#]*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; +circumflex(100,101,102); +endchar; + +iff known chars.latin_ograve: +bskchar "The letter o with grave"; +beginchar(chars.latin_ograve,10u#,asc_height#,0); uni "0x00F2"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4+u; +grave(100,101); +endchar; + +iff known chars.latin_odoublegrave: +bskchar "The letter o with double grave"; +beginchar(chars.latin_odoublegrave,10u#,asc_height#,0); uni "0x020D"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x102-x100=3u; x102=x4; +d_grave(100,101,102,103,whatever); +endchar; + +iff known chars.latin_ocaron: +bskchar "The letter o with caron"; +beginchar(chars.latin_ocaron,10u#,asc_height#,0); uni "0x01D2"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; +hacek(100,101,102); +endchar; + +iff known chars.latin_otilde: +bskchar "The letter o with tilde"; +beginchar(chars.latin_otilde,10u#,asc_height#,0); uni "0x00F5"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=6u; +tilde(100,101); +endchar; + +iff known chars.latin_omacron: +bskchar "The letter o with macron"; +beginchar(chars.latin_omacron,10u#,.5[asc_height#,x_height#],0); uni "0x014D"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +macron(100,101); +endchar; + +iff known chars.latin_odotabove: +bskchar "The letter o with dot above"; +beginchar(chars.latin_odotabove,10u#,asc_height#-.5dot_size#,0); uni "0x022F"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; +dotabove(100); +endchar; + +iff known chars.latin_ohumlaut: +bskchar "The letter o with Hungarian umlaut"; +beginchar(chars.latin_ohumlaut,10u#,asc_height#,0); uni "0x0151"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101-x100=3u; .5[x100,x101]=x4+1.75u; +h_umlaut(100,101,102,103,2u); +endchar; + +iff known chars.latin_obreve: +bskchar "The letter o with breve"; +beginchar(chars.latin_obreve,10u#,asc_height#+o#,0); uni "0x014F"; +italcorr asc_height#*slant-1.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; x102-x100=5u; +breve(100,101,102); +endchar; + +iff known chars.latin_oinvbreve: +bskchar "The letter o with inverted breve"; +beginchar(chars.latin_oinvbreve,10u#,asc_height#+o#,0); uni "0x020F"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4r; x102-x100=5u; +tieacc(100,101,102); +endchar; + +iff known chars.latin_o_masculine: +bskchar "Masculine ordinal indicator (superscript o)"; +beginchar(chars.latin_o_masculine,6u#,asc_height#-.5x_height#,0); uni "0x00BA"; +italcorr (asc_height#-.75x_height#)*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +multiply(.85)(curve,hair,vair); +usechar shifted (-x1l,-y4l) scaled .5 shifted (u+(HH-.5x_height)*slant,HH); +endchar; + +charscription(10u,x_height,.85desc_depth)( +path p[]; +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u; +bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d; +p0=z1l{down}..z2l..{up}z3l..z4l..{down}z1l; +p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r; +filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0 + ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1 + ..subpath(rundy(p1,(1,stem)),infinity) of p0..cycle; +infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; +penlabels(1,2,3,4,5,6,7,8); +); + +iff known chars.latin_oogonek: +bskchar "The letter o with ogonek"; +beginchar(chars.latin_oogonek,10u#,x_height#,.85desc_depth#); uni "0x01EB"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_oogonekmacron: +bskchar "The letter o with ogonek and macron"; +beginchar(chars.latin_oogonekmacron,10u#,.5[asc_height#,x_height#],.85desc_depth#); uni "0x01ED"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +macron(100,101); +endchar; + +charscription(10u,x_height,0)( +numeric tim[]; path p[]; +oblu:=2oblu; +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90); +z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l]; +p0:=z1l{down}..z2l..z3l..z4l..{down}z1l; +p1:=z1r{up}..z4r..z3r..z2r..{up}z1r; +bskpoints(5,6,hair,hair); +(tim1,tim2)=p0 intersectiontimes (z5l--z6l); +(tim3,tim4)=p0 intersectiontimes (z6r--z5r); +(tim5,tim6)=p0 intersectiontimes (z0r--z5r); +(tim7,tim8)=p0 intersectiontimes (z5l--z0l); +(tim11,tim12)=p1 intersectiontimes (z0r--z6r); +(tim13,tim14)=p1 intersectiontimes (z0r--z5r); +(tim15,tim16)=p1 intersectiontimes (z0l--z6l); +(tim17,tim18)=p1 intersectiontimes (z5l--z0l); +filldraw subpath (0,rundy(p0,tim1).zpet) of p0..subpath(rundy((z6l--z5l),tim2),infinity) of (z5l---z6ll).. + subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r).. + subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0.. + subpath(rundy(z0r--z5r,tim6),infinity) of (z0r---z5rr).. + subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l) .. + subpath(rundy(p0,tim7),infinity) of p0--cycle; +infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r).. + subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1.. + subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle; +infill subpath (0, rundy(p1,tim17).zpet) of p1.. + subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l).. + subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l).. + subpath(rundy(p1,tim15),infinity) of p1--cycle; +penlabels(0,1,2,3,4,5,6); +); + +iff known chars.latin_oslash: +bskchar "The letter o slash"; +beginchar(chars.latin_oslash,10u#,x_height#,0); uni "0x00F8"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_oslashacute: +bskchar "The letter o slash with acute"; +beginchar(chars.latin_oslashacute,10u#,asc_height#,0); uni "0x01FF"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x4l; +acute(100,101); +endchar; + +iff known chars.latin_p: +bskchar "The letter p"; +beginchar(chars.latin_p,11u#,x_height#,desc_depth#); uni "0x0070"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +path p[]; numeric tim[]; +pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5h; .5[x2,x4]=.5[x1,x3]; +x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; +if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; +bot y2l=-o; top y4l=h+o; +lft x5l=2u; bot y5=-d; top y6r=h+o; +lowercase_points(5,6,jut); +p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l; +p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; +p2=z5r---lowercase_stem_draw(5,6); +p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; +z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right); +tim1=xpart(p0 intersectiontimes (z0--(x2,y0))); +tim2=xpart(p2 intersectiontimes (z0--(0,y0))); +z7=bsktouch(subpath(3,infinity) of p0,left,p2,right); +tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7))); +tim4=xpart(p2 intersectiontimes (z7--(0,y7))); +filldraw subpath (rundy(p0,tim1), rundy(p0,tim3).zpet) of p0 + ..subpath(rundy(p2,tim4),infinity) of p2 + ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle; +infill p3..cycle; +penlabels(1,1',2,3,4); labels(7); +endchar; + +iff known chars.latin_thorn: +bskchar "The letter thorn"; +beginchar(chars.latin_thorn,11u#,asc_height#,desc_depth#); uni "0x00FE"; +italcorr .5x_height#*slant-.25u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +path p[]; numeric tim[]; +pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3]; +x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; +if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; +bot y2l=-o; top y4l=x_height+o; +lft x5l=2u; bot y5=-d; top y6r=h; +lowercase_points(5,6,jut); +p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l; +p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; +p2=z5r---lowercase_stem_draw(5,6); +p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; +z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right); +tim1=xpart(p0 intersectiontimes (z0--(x2,y0))); +tim2=xpart(p2 intersectiontimes (z0--(0,y0))); +z7=bsktouch(subpath(3,infinity) of p0,left,p2,right); +tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7))); +tim4=xpart(p2 intersectiontimes (z7--(0,y7))); +filldraw subpath (rundy(p0,tim1), rundy(p0,(tim3,2oblu)).zpet) of p0 + ..subpath(rundy(p2,tim4),infinity) of p2 + ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle; +infill p3..cycle; +penlabels(1,1',2,3,4); labels(0,7); +endchar; + +iff known chars.latin_q: +bskchar "The letter q"; +beginchar(chars.latin_q,11u#,x_height#,desc_depth#); uni "0x0071"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2.5oblu; +pos1(curve,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270); +lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5h; .5[x2,x4]=.5[x1,x3]; +x2-x4=-.5u; x3'r=x3r; y3'=.3x_height; +if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi; +bot y2l=-o; top y4l=h+o; +rt x5r=w-2u; bot y5=-d; top y6r=h; +lowercase_points(5,6,jut); +p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l; +p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r; +p2=z5a--z6l; +p3=reverse lowercase_stem_draw(5,6); +tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2); +tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0))); +if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi; +tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o))); +z7=point tim1 of p0 + like_stem*up; if y7>y6r-.8hair: y7:=y6r-.8hair; fi +p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r; +bot rt z9=(w-u,x_height+o); z9'=z6r+stem*down; +tim4=xpart(p0 intersectiontimes ((.5w,y7)--(w,y7))); +filldraw subpath (tim2, rundy(p0,tim4).zpet) of p0..bot z6---z9--z9+down{z7-z9}.. + {down}z9'---subpath (0,tim3) of p3..cycle; +infill p4..cycle; +penlabels(1,3',2,3,4); labels(7,9,9'); +endchar; + +charscription(8.5u,x_height,0)( +path p[]; numeric tim[]; +pos3(like_curve,0); pos5(hair,90); pos6(hair,180); +lft x1l=2u; bot y1=0; top y2=h+apex_o; +rt x3r=w-u; y3r=y5l-.75like_stem; +y5r=x_height; x5=.5w+.5like_stem; +x6l=x1r; y6=.6x_height; +z4=(x3l,x_height+o); +lowercase_points(1,2,jut); +p2:=z3r{up}..{dir180}z4..{down}z6r; +p1:=z6l{up}..{dir10}z5l..z5l+(hair,-o)...z3l..z3+o*down..z3r; +p3:=z1f--z2r; +(tim1,tim2)=p2 intersectiontimes p3; +z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up; +if y1'>y5r: y1':=y5r-.5hair; fi; +tim3-1=xpart(subpath (1,2) of p2 intersectiontimes ((0,y1')--(w,y1'))); +filldraw p1..subpath (0,tim3) of p2..broken_stem_draw(1',1,2)---cycle; +penlabels(3,5,6); labels(1',4,7); +); + +iff known chars.latin_r: +bskchar "The letter r"; +beginchar(chars.latin_r,8.5u#, x_height#, 0); uni "0x0072"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_racute: +bskchar "The letter r with acute"; +beginchar(chars.latin_racute,8.5u#, asc_height#, 0); uni "0x0155"; +italcorr asc_height#*slant-.75u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x101=.5[x2r,x5]; +acute(100,101); +endchar; + +iff known chars.latin_rcaron: +bskchar "The letter r with caron"; +beginchar(chars.latin_rcaron,8.5u#, asc_height#, 0); uni "0x0159"; +italcorr asc_height#*slant-.75u#; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x101=.5[x2r,x5]; +hacek(100,101,102); +endchar; + +iff known chars.latin_rdoublegrave: +bskchar "The letter r with double grave"; +beginchar(chars.latin_rdoublegrave,8.5u#,asc_height#,0); uni "0x0211"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x102-x100=3u; +d_grave(100,101,102,103,.5[x5r,x2]); +endchar; + +iff known chars.latin_rcedilla: +bskchar "The letter r with cedilla (treated as comma)"; +beginchar(chars.latin_rcedilla,8.5u#,x_height#,.75comma_depth#); uni "0x0157"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x100=x1; top y100''r=-o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_rinvbreve: +bskchar "The letter r with inverted breve"; +beginchar(chars.latin_rinvbreve,8.5u#,asc_height#,0); uni "0x0213"; +italcorr .5[bar_height#,x_height#]*slant; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +usechar; +x101=.45[x4,x2r]; x102-x100=4.5u; +tieacc(100,101,102); +endchar; + +charscription(7.7u,x_height,0)( +numeric exc; exc=(w-u)/h; oblu:=1.5oblu; +path p[]; numeric tim[]; +pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90); +pos5(stem,180); pos6(stem,180); +y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc; +y6=.5[y4r,y3]-.5hair; rt x6l=w-u; +x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o; +y3=.5[y2l,y4r]+.5hair; +pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-x5r; y1=y5-.5hair; y1'=h+o; +pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o; +p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r; +p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; +tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h))); +tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h))); +filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l + ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)), infinity) of p1..cycle; +penlabels(0,1,1',2,3,4,5,6,7,7'); +); + +iff known chars.latin_s: +bskchar "The letter s"; +beginchar(chars.latin_s,7.7u#, x_height#, 0); uni "0x0073"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_scaron: +bskchar "The letter s with caron"; +beginchar(chars.latin_scaron,7.7u#, asc_height#, 0); uni "0x0161"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2; x100r=u; +hacek(100,101,102); +endchar; + +iff known chars.latin_scircumflex: +bskchar "The letter s with circumflex"; +beginchar(chars.latin_scircumflex,7.7u#, asc_height#-.1x_height#, 0); uni "0x015D"; +italcorr .5[asc_height#,x_height#]*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2+o; x102-x100=5u; +circumflex(100,101,102); +endchar; + +iff known chars.latin_sacute: +bskchar "The letter s with acute"; +beginchar(chars.latin_sacute,7.7u#, asc_height#, 0); uni "0x015B"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x101=x2-u; +acute(100,101); +endchar; + +iff known chars.latin_scommabelow: +bskchar "The letter s with comma below"; +beginchar(chars.latin_scommabelow,7.7u#,x_height#,.75comma_depth#); uni "0x0219"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x4; top y100''r=-2o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_scedilla: +bskchar "The letter s with cedilla"; +beginchar(chars.latin_scedilla,7.7u#, x_height#,.65desc_depth#); uni "0x015F"; +italcorr x_height#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric exc; exc=(w-u)/h; oblu:=1.5hair; +path p[]; numeric tim[]; +pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90); +pos5(stem,180); pos6(stem,180); +pos8(.5stem,0); pos9(.5stem,0); pos10(.8stem,0); pos11(.5stem,-110); +y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc; +y6=.5[y4r,y3]-.5hair; rt x6l=w-u; +x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o; +y3=.5[y2l,y4r]+.5hair; +pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-x5r; y1=y5-.5hair; y1'=h+o; +pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o; +x8=x9; z8l=z4l; y9=-hair; y10=-.5d; +rt x10r-lft x11r=4u; x8r-lft x11r=2u; y11r=-d; +p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r; +p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; +p2:=z9r..{down}z10r..{left}z11r..{right}z11l..{up}z10l..z9l--z8l; +p3:=reverse(z8r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2); +tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h))); +tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h))); +if tim2>1: tim2:=1; fi; +tim3=xpart(p1 intersectiontimes (z9l--(x8l,y6))); +filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l + ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)),rundy(p1,1).zpet) of p1 + ..subpath(rundy(p3,(0,hair)),rundy(p3,infinity).zpet) of p3 + ..subpath(rundy(p1,tim3),infinity) of p1 + ..cycle; +penlabels(0,1,1',2,3,4,5,6,7,7',8,9,10,11); +endchar; + +iff known chars.latin_eszet: +bskchar "The german eszet"; +beginchar(chars.latin_eszet,11.5u#, asc_height#, 0); uni "0x00DF"; +italcorr .5[asc_height#,x_height#]*slant-1.25u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric tim; +path p[]; +pos3(hair,-90); pos4(stem,180); pos4'(stem,180); +pos6(stem,180); pos7(.9stem,180); pos8(hair,90); +lft x1l=2.5u; bot y1=0; top y2=.4[x_height,h]; +top y3l=h+o; x3=.5w+.5u; .5[x2r,x4]=x3; y4=y2+hair; +lowercase_points(1,2,jut); if not bold_face: y2r:=y2r+hair; fi; x1d:=x1d-hair; +z3'r=z3r+.5hair*right; +pos5(hair,90); pos5'(hair,90); +y5=y5'=bot x_height; +lft x5=u; x5'=x1l; x6r=x2r+stem+u; rt x7l=w-u; y7=.25x_height; y6=.5[x_height,y9]; +bot y8l=-o; x8=x9=.5[x6,x7]; y9=.5[x_height,y8l]+.5hair; y7r:=y7-.225stem; +pos9(curve,angle((x7r-x6r,x_height))+180); +pos10(hair,0); pos10'(hair,0); rt x10r=x6r; x10'r=x10r+o; y10=.5[y8r,y9]+.5hair; y10'=-o; +p0:=z10l{dir-80}..{right}z8l; +tim=xpart(p0 intersectiontimes (z10'r--z9r)); +filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..{left}z1e.. + {up}z1f---z2r...{right}z3r..z4r{down}..z6r..z9r..{down}z7r..{left}z8r.. + {up}z10r..z10l---z10'l..z10'r..subpath (rundy(p0,tim),1) of p0..z7l{up}.. + z9l..z6l..z4l{up}..z3l..z2l---obl(5'r,2l,5r)---z5r..z5l--- + obl(5'l,5l,1l)---cycle; +penlabels(3,4,5,5',6,7,8,9,10,10'); +endchar; + +iff known chars.latin_long_s: +bskchar "The letter long s"; +beginchar(chars.latin_long_s,6.5u#, asc_height#, 0); uni "0x017F"; +italcorr asc_height#*slant+1.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric fend; fend:=stem; +pos3(hair,-90); pos4(fend,180); +lft x1l=2.5u; bot y1=0; top y2=h-like_curve; +top y3l=h+o; x3=if monospace: .6[w,x1r] else: w-1.25u fi; +.5[x2r,x4]=x3; y4''=y3r-like_hair; +z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +lowercase_points(1,2,jut); +if not bold_face: y2r:=y2r+hair; fi; +z3'r=z3r+.5hair*right; +pos5(hair,90); pos5'(hair,90); +y5=y5'=bot x_height; +lft x5=u; x5'=x1l; +filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d.. + {left}z1e..{up}z1f---z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l--- + obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle; +penlabels(3,4,5,5'); labels(4',4''); +endchar; + +charscription(7.5u,.4[asc_height,x_height], 0)( +pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180); +x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u; +y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); +top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; +pos5(hair,90); pos6(hair,90); +y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; +filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}..{left}z3l + ..z2l---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100).. + z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle; +penlabels(0,1,1',2,3,4,5,6); labels(1''r); +); + +iff known chars.latin_t: +bskchar "The letter t"; +beginchar(chars.latin_t,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0074"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_tcommabelow: +bskchar "The letter t with comma below"; +beginchar(chars.latin_tcommabelow,7.5u#,.4[asc_height#,x_height#],.75comma_depth#); uni "0x021B"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +x100=x3-o; top y100''r=-2o; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_tcaron: +bskchar "The letter t with caron (treated like comma)"; +beginchar(chars.latin_tcaron,7.5u#, asc_height#, 0); uni "0x0165"; +italcorr asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +rt x100'''=w-u; top y100''r=h; +comma(100,.75dot_size,.5hair,.75comma_depth); +endchar; + +iff known chars.latin_tcedilla: +bskchar "The letter t with cedilla"; +beginchar(chars.latin_tcedilla,7.5u#,.4[asc_height#,x_height#],.65desc_depth#); uni "0x0163"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; +pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180); +pos7(.5stem,0); pos8(.5stem,0); pos9(.8stem,0); pos10(.5stem,-110); +x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u; +y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); +top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; +pos5(hair,90); pos6(hair,90); +y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; +x7l=x8l; z7r=z3r; y8=-hair; y9=-.5d; +rt x9r-lft x10r=4u; x7r-lft x10r=2u; y10r=-d; +p1:=z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..z2l; +p2:=z8r..{down}z9r..{left}z10r..{right}z10l..{up}z9l..z8l--z7l; +p3:=z7r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2; +tim1=xpart(p1 intersectiontimes (z8l--(x7l,y2))); +filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--subpath(0,rundy(p1,1).zpet) of p1..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3..subpath(rundy(p1,tim1),infinity) of p1---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100)..z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle; +penlabels(0,1,1',2,3,4,5,6,7,8,9,10); labels(1''r); +endchar; + +iff known chars.latin_tstroke: +bskchar "The letter t with stroke"; +beginchar(chars.latin_tstroke,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0167"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180); +pos5(hair,90); pos6(hair,90); +pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90); +x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u; +y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); +top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; +y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; +x8-x7=4u if bold_face: +.5u fi; y8=y8'=y7=y7'=bar_height; .5[x7,x8]=x1+o; +x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair); +filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)} + ..{left}z3l..z2l---obl(7'l,2l,7l)---z7l..z7rr---obl(7'r,7rr,1l) + ---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100) + ..z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r) + ---obl(8'r,1r,8r)---z8r..z8ll---obl(8'l,8l,2r)---cycle; +penlabels(0,1,1',2,3,4,5,6,7,7',8,8'); labels(1''r,7rr,8ll); +endchar; + +charscription(11u,x_height,0)( +path p[]; numeric tim[]; +pos1(stem,0); pos2(stem,0); pos4(stem,0); +pos5(n_str_hair,90); pos6(hair,90); +lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4; +bot y3=0; top y2= top y4=h; y4=y4'; +y1=.25x_height; +serifs_tl(2l); serifs_tl(4l); +lowercase_points(3,4',jut); +y5l=0; x5=.5[x3l,x1r]; +x6l=x3l; y6=.4x_height; +oblu:=.5f_obl; +p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right + ..z2l.b---z1l..z5l..{up}z6l; +p2:=z6l---(reverse lowercase_lower_u_serif(3,.5hair))---obl(4r,3f,4l) + ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b; +tim0=y3a-like_hair; +tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0))); +tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0))); +filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle; +penlabels(1,2,4,5,6,7); +); + +iff known chars.latin_u: +bskchar "The letter u"; +beginchar(chars.latin_u,11u#, x_height#, 0); uni "0x0075"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_uacute: +bskchar "The letter u with acute"; +beginchar(chars.latin_uacute,11u#, asc_height#, 0); uni "0x00FA"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=.5[x2r,x4'a]; +acute(100,101); +endchar; + +iff known chars.latin_uring: +bskchar "The letter u with ring"; +beginchar(chars.latin_uring,11u#, asc_height#, 0); uni "0x016F"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=.5[x2r,x4'a]; lft x101=x2r; +ring(100,101); +endchar; + +iff known chars.latin_uumlaut: +bskchar "The letter u with umlaut"; +beginchar(chars.latin_uumlaut,11u#, asc_height#-dot_size#, 0); uni "0x00FC"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=x2; x101=x4l; +umlaut(100,101); +endchar; + +iff known chars.latin_ugrave: +bskchar "The letter u with grave"; +beginchar(chars.latin_ugrave,11u#,asc_height#,0); uni "0x00F9"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x5; +grave(100,101); +endchar; + +iff known chars.latin_udoublegrave: +bskchar "The letter u with double grave"; +beginchar(chars.latin_udoublegrave,11u#,asc_height#,0); uni "0x0215"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x102-x100=3u; +d_grave(100,101,102,103,x5-o); +endchar; + +iff known chars.latin_umacron: +bskchar "The letter u with macron"; +beginchar(chars.latin_umacron,11u#,.5[asc_height#,x_height#],0); uni "0x016B"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=x1r; x101=x3l; +macron(100,101); +endchar; + +iff known chars.latin_ucaron: +bskchar "The letter u with caron"; +beginchar(chars.latin_ucaron,11u#,asc_height#,0); uni "0x01D4"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x5; +hacek(100,101,102); +endchar; + +iff known chars.latin_ucircumflex: +bskchar "The letter u with circumflex"; +beginchar(chars.latin_ucircumflex,11u#,asc_height#-.1x_height#,0); uni "0x00FB"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x5; +circumflex(100,101,102); +endchar; + +iff known chars.latin_ubreve: +bskchar "The letter u with breve"; +beginchar(chars.latin_ubreve,11u#,asc_height#,0); uni "0x016D"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x5; x102-x100=5u; +breve(100,101,102); +endchar; + +iff known chars.latin_uinvbreve: +bskchar "The letter u with inverted breve"; +beginchar(chars.latin_uinvbreve,11u#,asc_height#,0); uni "0x0217"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x5; x102-x100=5u; +tieacc(100,101,102); +endchar; + +iff known chars.latin_uhumlaut: +bskchar "The letter u with Hungarian umlaut"; +beginchar(chars.latin_uhumlaut,11.3u#,asc_height#,0); uni "0x0171"; +italcorr asc_height#*slant-1.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101-x100=3u; .5[x100,x101]=x5+1.5u; +h_umlaut(100,101,102,103,2u); +endchar; + +iff known chars.latin_utilde: +bskchar "The letter u with tilde"; +beginchar(chars.latin_utilde,11u#,asc_height#,0); uni "0x0169"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101-x100=6u; x.tilde=x5-o; +tilde(100,101); +endchar; + +iff known chars.latin_uogonek: +bskchar "The letter u with ogonek"; +beginchar(chars.latin_uogonek,11u#,x_height#,.85desc_depth#); uni "0x0173"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +path p[]; numeric tim[]; +pos1(stem,0); pos2(stem,0); pos4(stem,0); +pos5(n_str_hair,90); pos6(hair,90); +lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4; +bot y3=0; top y2= top y4=h; y4=y4'; +y1=.25x_height; +serifs_tl(2l); serifs_tl(4l); +lowercase_points(3,4',jut); +y5l=0; x5=.5[x3l,x1r]; +x6l=x3l; y6=.4x_height; +pos8(stem,0); pos9(curve,0); pos10(hair,45); pos11(hair,160); +x8-x9l=1.5u; x8l=x3l; x10-x9l=3u; rt x11l-x10=1.5u; +bot y8=0; y9=-.5d; bot y10l=-d; y11=-2/3d; +oblu:=.5f_obl; +p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right + ..z2l.b---z1l..z5l..{up}z6l; +p2:=z6l---reverse (z3f{down}..{right}z3e..{left}z3d..z8r..z9r..z10r + ..{z8-z9}z11r..z11l{z9-z8}..z10l..z9l..{z8r-z9l}z8l---z3a) + ---obl(4r,3f,4l) ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b; +tim0=y3a-like_hair; +tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0))); +tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0))); +filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle; +penlabels(1,2,4,5,6,7,8,9,10,11); +endchar; + +iff known chars.latin_v: +bskchar "The letter v"; +beginchar(chars.latin_v,11u#,x_height#,0); uni "0x0076"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +numeric alpha, right_stem, left_stem; +pickup tiny.nib; +lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; +x3l=.5w; bot y3l=-apex_o; +left_stem=stem; +right_stem=hair; +alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l); +pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); +pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); +pos4(.65hair,90); pos5(.65hair,90); +z1'l=z3l=z2'r; +z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; +y3'l=y3'r=y3'+.25[hair,stem]; +z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; +serifs_tl(1l); serifs_tr(1r); +serifs_tr(2r); serifs_tl(2l); +filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l-- + diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c + ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3') + ..z1r.c{right}..z1r.a{left}..z1+serif_bend..{left}cycle; +penlabels(1,1',2,2',3,3',4,5,6,7); +endchar; + +charscription(14.5u,x_height,0)( +numeric alpha[], right_stem, left_stem; +oblu:=2oblu; +lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; +x3=.5w if monospace: +.5(stem-hair) fi; +top y3=h if monospace and (x2r-x1l<4stem): -1/3(x2r-x1l) else: +o fi; +.5[x4,x5]=x3; x5-x4=.35w; +bot y4=bot y5=-apex_o; +left_stem=stem; +right_stem=hair; +alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l); +alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5); +alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3); +alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4); +pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0); +serifs_tl(1l); serifs_tr(1r); +serifs_tl(2l); serifs_tr(2r); +bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5); +y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny); +z0=whatever[z4,z4']=whatever[z5,z5']; +z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right]; +z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left]; +filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---z4---obl(0,4,5)---z5 + ---diag_serif(2r,5)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c + ..diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r) + ---diag_serif(1r,1'')..z1r.c{right}..z1r.a{left}.. + z1+serif_bend..{left}cycle; +penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5'); +); + +iff known chars.latin_w: +bskchar "The letter w"; +beginchar(chars.latin_w,14.5u#,x_height#,0); uni "0x0077"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.latin_wcircumflex: +bskchar "The letter w with circumflex"; +beginchar(chars.latin_wcircumflex,14.5u#,asc_height#-.1x_height#,0); uni "0x0175"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x101=x4'+o; +circumflex(100,101,102); +endchar; + +iff known chars.latin_wgrave: +bskchar "The letter w with grave"; +beginchar(chars.latin_wgrave,14.5u#,asc_height#,0); uni "0x1E81"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +.5[x100,x101]=x4'-u; +grave(100,101); +endchar; + +iff known chars.latin_wacute: +bskchar "The letter w with acute"; +beginchar(chars.latin_wacute,14.5u#,asc_height#,0); uni "0x1E83"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +.5[x100,x101]=x4'; +acute(100,101); +endchar; + +iff known chars.latin_wumlaut: +bskchar "The letter w with umlaut"; +beginchar(chars.latin_wumlaut,14.5u#,asc_height#-dot_size#,0); uni "0x1E85"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +usechar; +x100=x1''; x101=x2''; +umlaut(100,101); +endchar; + +iff known chars.latin_x: +bskchar "The letter x"; +beginchar(chars.latin_x,11.5u#,x_height#,0); uni "0x0078"; +italcorr x_height#*slant-.25u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric alpha[]; +oblu:=1.5oblu; +lft x1l=2.25u; top y1l=h; rt x2r=w-2u; bot y2r=0; +x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0; +alpha1=diag_ratio(2,stem,y1l-y2r,x1l-x2r); +alpha2=diag_ratio(1,hair,y3r-y4l,x3r-x4l); +pos1(alpha1*stem,0); pos2(alpha1*stem,0); +pos3(alpha2*hair,0); pos4(alpha2*hair,0); +serifs_tl(1l); serifs_tr(1r); serifs_bl(2l); serifs_br(2r); +serifs_tl(3l); serifs_tr(3r); serifs_bl(4l); serifs_br(4r); +z1'=whatever[z1l,z2l]=whatever[z3l,z4l]; +z2'=whatever[z1r,z2r]=whatever[z3r,z4r]; +z3'=whatever[z1r,z2r]=whatever[z3l,z4l]; +z4'=whatever[z1l,z2l]=whatever[z3r,z4r]; +filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l) + ---diag_serif(4l,1')..{left}z4l.c..z4l.a{right}.. + z4+ser_boule*up..{right}z4r.a..{left}z4r.c + ..diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l).. + {left}z2l.c..z2l.a{right}..z2+ser_boule*up..{right}z2r.a..{left}z2r.c.. + diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2').. + {right}z3r.c..{left}z3r.a..z3..{left}z3l.a..{right}z3l.c.. + diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3').. + {right}z1r.c..{left}z1r.a..z1+serif_bend..{left}cycle; +penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5'); +endchar; + +charscription(11.5u,x_height,desc_depth)( +numeric alpha, right_stem, left_stem, tim[]; oblu:=2oblu; +path p[]; +lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; +x3l=.52w; bot y3l=-u; +left_stem=stem; +right_stem=hair; +alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l); +pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); +pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); +pos4(whatever,0); pos5(dot_size,260); +z1'l=z3l=z2'r; +z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; +y3'l=y3'r=y3'+.25[hair,stem]; +z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; +serifs_tl(1l); serifs_tr(1r); +serifs_tr(2r); serifs_tl(2l); +y4=-d+dot_size+hair; z4l=whatever[z2l,z3']; z4r=whatever[z3l,z2r]; +y6=y3'l; z6=whatever[z3l,z1l]; +bot y5r=-d; x5=x1; rt z5'=(x5-1/3dot_size,y5); if rt x5'oblu.light:..z4r fi + ..obl(4r',4r,2r).light---z2r-- + z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi + ---z1l.b..{dir181}z1l.a{right}..z1+ser_boule*up.. + {right}z1r.a{dir179}..cycle; +infill obl(4',4r,2'')---obl(2'',4',1')---obl(1',2'',4')---cycle; +penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r'); +); + +let _saved_char_four=_saved_char; +numeric _saved_w_four; _saved_w_four:=_saved_w; + +iff known chars.numeral_four: +bskchar "The numeral 4"; +beginchar(chars.numeral_four,figw(12u),medfig,medfigd); uni "0x0034"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_four: +bskchar "The superscript numeral 4"; +beginchar(chars.superscript_numeral_four,if monofig: 5.5u# else: 7u# fi,asc_height#,0); uni "0x2074"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair,dig_stem); +usechar shifted (-x3l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +iff known chars.fraction_one_quarter: +bskchar "Fraction one quarter"; +beginchar(chars.fraction_one_quarter,7u#,asc_height#,0); uni "0x00BC"; +adjust_fit(0,0); +pickup tiny.nib; +numeric zv; zv:=if medieval: .5 else: .4 fi; +multiply(1.7zv)(curve,hair,stem,like_hair,like_stem); +usechar shifted (-.5w,0) scaled zv shifted (.5WW,0); +save x,y; +let _saved_char=_saved_char_one; +_saved_w:=_saved_w_one; +usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); +pos10(hair,90); pos11(hair,90); +lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi; +filldraw bskrule(10,11,hair,hair); +penlabels(10,11); +endchar; + +iff known chars.fraction_three_quarters: +bskchar "Fraction three quarters"; +beginchar(chars.fraction_three_quarters,7u#,asc_height#,0); uni "0x00BE"; +adjust_fit(0,0); +pickup tiny.nib; +numeric zv; zv:=if medieval: .5 else: .4 fi; +multiply(1.7zv)(curve,hair,stem,like_hair,like_stem); +let _saved_char=_saved_char_four; +_saved_w:=_saved_w_four; +usechar shifted (-.5w,0) scaled zv shifted (.5WW,0); +save x,y; +let _saved_char=_saved_char_three; +_saved_w:=_saved_w_three; +usechar shifted -(x2+hair,if medieval: y7 else: 0 fi) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); +pos10(hair,90); pos11(hair,90); +lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi; +filldraw bskrule(10,11,hair,hair); +penlabels(10,11); +endchar; + +charscription(figwu(if medieval: 10.5u else: 9.5u fi),medfigu,medfigdu)( +numeric theta; theta=if medieval: 0 else: 10 fi; +path p[]; +oblu:=2f_obl; +pos1(hair,0); pos2(hair,0); pos3(stem,75); +pos4(hair,-90); pos5(curve,180); pos6(hair,90); +x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1; +y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; z3r=z2r; z2'=(x2r,.5[y4,y2]); +x4=.5w; rt x5l=w-u; +y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem); +y5=.48[y4,y6]; +x6=.5w-o; bot y6l=-d; +lft x7r=u; y7=y6+if known superscript: 3 else: 4 fi /3like_curve; x8=w-u; y8=y1+.5apex_o; +z1'=z1r+if bold_face:.8\\fi curve*down; +p0=z1l---z2l..{down}z3l..(x3r,y3l)..{up}z3r..{up}z2r..{right}z4r.. + {down}z5r..{left}z6r..(reverse smitko(7,curve))..z6l{right}.. + {up}z5l; +p1=z5l{up}..z4l..z2'; +p2=z2'--z1'; +p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l; +filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,infinity).zpet) of p2.. +subpath(rundy(p3,0),infinity) of p3&cycle; +penlabels(1,2,3,4,5,6,7); labels(1',2',8); +); + +iff known chars.numeral_five: +bskchar "The numeral 5"; +beginchar(chars.numeral_five,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x0035"; +italcorr h#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_five: +bskchar "The superscript numeral 5"; +beginchar(chars.superscript_numeral_five,if monofig: 5.5u# else: if medieval: 6.25u# else: 5.75u#fi fi,asc_height#,0); uni "0x2075"; +adjust_fit(0,0); +pickup tiny.nib; boolean superscript; superscript=true; +multiply(1.7skal)(curve,hair,stem); +usechar shifted (-x7r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(10u),fig_height,0)( +path p[]; numeric tim[]; oblu:=2oblu; +pos1(vair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +pos5(curve,0); pos6(hair,-90); pos7(curve,160); +rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3; +lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem; +rt x7l=w-u; y7=y6r-like_stem; +p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0); +p1=z2l{right}..z3l..z4l..{down}z1l; +p2=z2r{left}..z5r..{right}z6r; +z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right); +tim1=xpart(p1 intersectiontimes (z0--(x4,y0))); +tim2=xpart(p2 intersectiontimes (z0--(0,y0))); +filldraw z7r{down}..z7l{up}..{left}z6l..z5l..{right}z2l.. + subpath(0,rundy(p1,tim1).zpet) of p1.. + subpath(rundy(p2,tim2),infinity) of p2..cycle; +infill z1r{up}..z4r..z3r..z2r..cycle; +penlabels(0,1,2,3,4,5,6,7); +); + +iff known chars.numeral_six: +bskchar "The numeral 6"; +beginchar(chars.numeral_six,figw(10u),fig_height#,0); uni "0x0036"; +italcorr .5[fig_height#,x_height#]*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_six: +bskchar "The superscript numeral 6"; +beginchar(chars.superscript_numeral_six,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2076"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair,stem); +usechar shifted (-x5l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(11u),medfigu,medfigdu)( +path p; numeric tim[]; +pos1(hair,0); pos2(curve,0); pos3(stem,90); pos4(.4(h+d),80); +rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem; +y3r=y1r; y4r=y1r+if not medieval: .5\\fi stem; lft x4l=u; x3=x4r+hair; x3l:=x3l+o; +p:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p + u*left; +filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p,(tim1,curve)).zpet) of p..z1' + ---z3l..{z4l-z4r}z4l..z4l+left--z4r{down}..z3r---cycle; +penlabels(1,2,3,4); labels(1'); +); + +iff known chars.numeral_seven: +bskchar "The numeral 7"; +beginchar(chars.numeral_seven,figw(11u),medfig,medfigd); uni "0x0037"; +italcorr h#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_seven: +bskchar "The superscript numeral 7"; +beginchar(chars.superscript_numeral_seven,if monofig: 5.5u# else: 6.5u# fi,asc_height#,0); uni "0x2077"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,stem); +usechar shifted (-x4l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(9u),fig_height,0)( +path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl; +testem=.5[curve, hair]; tlstem=.75[curve,stem]; +pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0); +pos5(vair,90); pos6(vair,90); +lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h; +x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3]; +p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90); +p1=z6r{left}..z3r..z0r..z2r..z5r{left}; +p2=z4l{down}..z0{dir-160}..{down}z1l; +p3=z5l{right}..z2l..z0l..z3l..{right}z6l; +p4=z1r{up}..z0{dir20}..{up}z4r; +p5=z6l{left}..z3l..z0l..z2l..z5l{left}; +(tim1,tim2)=p1 intersectiontimes p2; +(tim3,tim4)=p3 intersectiontimes p4; +(tim5,tim6)=p5 intersectiontimes p2; +(tim7,tim8)=p1 intersectiontimes p4; +filldraw subpath(0,rundy(p1,tim1).zpet) of p1.. + subpath(rundy(p2,tim2),infinity) of p2.. + subpath(0,rundy(p3,tim3).zpet) of p3.. + subpath(rundy(p4,tim4),infinity) of p4..cycle; +infill subpath(0,rundy(p5,tim5).zpet) of p5 .. + (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle; +infill subpath(rundy(p1,tim7),infinity) of p1.. + subpath(0,rundy(p4,tim8).zpet) of p4..cycle; +penlabels(0,1,2,3,4,5,6); +); + +iff known chars.numeral_eight: +bskchar "The numeral 8"; +beginchar(chars.numeral_eight,figw(9u),fig_height#,0); uni "0x0038"; +italcorr .5[fig_height#,x_height#]*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_eight: +bskchar "The superscript numeral 8"; +beginchar(chars.superscript_numeral_eight,if monofig: 5.5u# else: 5.5u# fi,asc_height#,0); uni "0x2078"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair,stem); +usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +charscription(figwu(10u),medfigu,medfigdu)( +path p[]; numeric tim[]; oblu:=2oblu; +pos1(vair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90); +pos5(curve,0); pos6(hair,-90); pos7(curve,160); +lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi; +rt x5r=w-u; y5r=y1r-stem; +bot y6r=-d-o; x6=.5w-.75stem; +lft x7r=u; y7=y6r+like_stem; +p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0); +p1=z2r{right}..z1r{up}..z4r..z3r; +p2=z4l{right}..z5l..{left}z6l; +z0=bsktouch(p1,right,p2,left); +tim1=xpart(p1 intersectiontimes (z0--(.5w,y0))); +tim2=xpart(p2 intersectiontimes (z0--(w,y0))); +filldraw z7l{up}..{down}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r.. + subpath(0,rundy(p1,tim1).zpet) of p1.. + subpath(rundy(p2,tim2),infinity) of p2..cycle; +infill z1l{up}..z4l..z3l..z2l..cycle; +penlabels(1,2,3,4,5,6,7); +); + +iff known chars.numeral_nine: +bskchar "The numeral 9"; +beginchar(chars.numeral_nine,figw(10u),medfig,medfigd); uni "0x0039"; +italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.superscript_numeral_nine: +bskchar "The superscript numeral 9"; +beginchar(chars.superscript_numeral_nine,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2079"; +adjust_fit(0,0); +pickup tiny.nib; +multiply(1.7skal)(curve,hair,vair); +usechar shifted (-x3r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); +endchar; + +iff known chars.sign_query: +bskchar "Question mark"; +beginchar(chars.sign_query, 9.5u#+punct_fit#, asc_height#, 0); uni "0x003F"; +italcorr .5[asc_height#,x_height#]*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +bot z0=(2u+.5dot_size+punct_fit,.5dot_size); dot(0); +pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0); +z2'=z2+.2curve*down+o*right; +z2''=z2+.5(curve-currentbreadth)*dir135; +x1=.45(w-punct_fit)+punct_fit; top y1r=h+o; +y2''=1/4[h,x_height]; lft x2r=u+punct_fit; +rt x3r=w-u; y3=.5[y1r,y4l]; +lft x4l=x0+.25stem-.25dot_size; y4=.75x_height; +z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]]; +p0=z3r{down}..z4; +p1=z4r--z5r; +filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r.. + subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; +penlabels(1,2,3,4,5); labels(2',2'',4'); +endchar; + +iff known chars.sign_turned_query: +bskchar "Turned question mark"; +beginchar(chars.sign_turned_query, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +top z0=(2u+.5dot_size,h-.5dot_size); dot(0); +pos1(hair,-90); pos2(curve,180); pos3(curve,0); pos4(like_hair,135); pos5(hair,0); +z2'=z2+.2curve*up+o*right; +z2''=z2+.5(curve-currentbreadth)*dir-135; +x1=.45w; bot y1r=-d-o; +y2''=1/4[-d,-d+(asc_height-x_height)]; lft x2r=u; +rt x3r=w-u; y3=.5[y1r,y4l]; +lft x4l=x0+.25stem-.25dot_size; y4=-d+(asc_height-.75x_height); +z4'=(x4l-.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]]; +p0=z3r{up}..z4; +p1=z4r--z5r; +filldraw z5l---z4'..z4l..z3l{down}..z1l{left}..{dir70}z2l..z2'..{down}z2r..z2''..{right}z1r.. + subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; +penlabels(1,2,3,4,5); labels(2',2'',4'); +endchar; + +iff known chars.sign_spanish_query: +bskchar "Reversed question mark"; +beginchar(chars.sign_spanish_query, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "0x00BF"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +top z0=(w-2u-.5dot_size,h-.5dot_size); dot(0); +pos1(hair,-90); pos2(curve,0); pos3(curve,180); pos4(like_hair,45); pos5(hair,180); +z2'=z2+.2curve*up+o*left; +z2''=z2+.5(curve-currentbreadth)*dir-45; +x1=.55w; bot y1r=-d-o; +y2''=1/4[-d,-d+(asc_height-x_height)]; rt x2r=w-u; +lft x3r=u; y3=.5[y1r,y4l]; +rt x4l=x0-.25stem+.25dot_size; y4=-d+(asc_height-.75x_height); +z4'=(x4l+.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]]; +p0=z3r{up}..z4; +p1=z4r--z5r; +filldraw z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r..z2''..{left}z1r.. + subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; +penlabels(1,2,3,4,5); labels(2',2'',4'); +endchar; + +iff known chars.sign_ampersand: +bskchar "Ampersand"; +beginchar(chars.sign_ampersand, 14u#, asc_height#, 0); uni "0x0026"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric alpha, tim[]; +path p[]; +numeric radius; radius:=2hair; oblu:=2oblu; +pos1(hair,180); pos4(hair,-90); pos5(hair,180); +rt x1r=w-u-hair; y1=y2; top y4l=h+o; x4-x3'=if monospace:expansion_factor*fi (y4-y3'); +lft x3l=if monospace: 2u else:3u fi +stem; +rt x2r=x1r-if monospace:.85expansion_factor*fi(y2r+u); y3l=x_height; y2r=.25x_height; +alpha=diag_ratio(2,stem,y3l-y2r,x3l-x2r); +pos2(alpha*stem,0); pos3(alpha*stem,0); pos3'(stem,0); +.5[x3'r,rt x5r-if not monospace:.5\\fi hair]=x4; y5=y3'=.5[x_height,h]; +x3'r-x3r=(y3'-y3)*cosd(angle(z3-z2)); +bot y2'=-o; x2'=.5[x2r,x1l]; +pos6(curve,180); pos7(.5[hair,stem],270); pos8(hair,-45); pos9(hair,270); pos10(stem,180); +lft x6r=u; y6r-y7r=x7-x6; bot y7r=-o; x7=x3; x8=x2; +y8=bar_height; top y9l=x_height+o; x9=.5[x8,w-u]+.5hair; +z10'=z10+.2stem*down+o*left; z10''=z10+.5(stem-currentbreadth)*dir 45; +rt x10l=w-u; y10''=y9r-hair; +p0=z1l{z2'+u*right-z1l}..{left}z2'..z2l---z3l..z3'l..z4l..{down}z5l..{down}z6l; +p1=z6l{down}..z7l..z8l..{right}z9l..z10''..{down}z10l..z10'.. + z10r..z9r{left}..z8r..z7r..{up}z6r; +p2=z6r{up}..z5r{up}..z4r..z3'r..z3r---z2r..{up}z1r; +(tim0,tim1-9)=p0 intersectiontimes (subpath (9,infinity) of p1); +(tim2,tim3)=p2 intersectiontimes p0; +(tim4-3,tim5-5)=(subpath(3,infinity) of p2) intersectiontimes subpath(5,infinity) of p0; +(tim6-3,tim7)=(subpath(3,infinity) of p2) intersectiontimes p1; +(tim8-8,tim9)=(subpath(8,infinity) of p1) intersectiontimes p2; +(tim10,tim11-3)=p2 intersectiontimes subpath (3,infinity) of p2; +(tim12,tim13)=p1 intersectiontimes p0; +(tim14,tim15-5)=p0 intersectiontimes subpath(5,infinity) of p0; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..subpath (0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0..subpath(rundy(p2,tim4),rundy(p2,(tim6,hair)).zpet) of p2..subpath(rundy(p1,(2,f_obl)),8) of p1..subpath (8,rundy(p1,tim8).zpet) of p1..subpath(rundy(p2,tim9),infinity) of p2..cycle; +infill subpath(rundy(p2,tim10),rundy(p2,tim11).zpet) of p2..cycle; +infill subpath(0,rundy(p1,tim12).zpet) of p1 + ..subpath(rundy(p0,tim13),rundy(p0,tim14).zpet) of p0 + ..subpath(rundy(p0,tim15),infinity) of p0..cycle; +penlabels(1,2,3,3',4,5,6,7,8,9,10); labels(2',10',10''); +endchar; + +iff known chars.sign_at: +bskchar "At sign"; +beginchar(chars.sign_at, 16u#, asc_height#-.3desc_depth#, .6desc_depth#); uni "0x0040"; +adjust_fit(0,0); +pickup tiny.nib; +numeric aend,H,W,shift; aend:=stem; H:=x_height; W=9u; oblu:=2oblu; +path p[]; numeric tim[]; +shift=.5(w-W) if not monospace: + hair fi; +pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0); +pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right; +z4''=z4+.5(aend-currentbreadth)*dir135; +rt x1r=W-u- if monospace: .25\\fi stem +shift; x2=x1; y1=stem+hair; y2=H-like_curve; +x0l=W if not monospace: -.75u fi +shift; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r]; +x3=.5[x1r,lft u+shift]; top y3r=H+o; +y4''=.5[y2,y3l]; lft x4r=u if not monospace:+o fi +shift; +z5l=z2l; z6l=z5l+like_hair*down; z7=(u+shift,y1); +pos6(hair,angle(z7-z6l)+90); +pos8(curve,30); lft x8l=if not monospace: u+ fi shift; y8r=y7-hair; +pos9(hair,120); x9r=x3; y9l=o; +pos10(hair,angle(z1-z9l)+90); z10l=z1; +pos11(hair,0); pos12(hair,90); pos13(hair,180); pos14(hair,270); +pos15(hair,0); +lft x13r=u; y13=bar_height; y15=if monospace: 0 else:.2bar_height fi; rt x15r=w-u; +top y12r=h+o; bot y14r=-d+o; x12=x14=.5w; +z11r=(z12r{right}..{dir(angle(z0'l-z0r)+10)}z0l) intersectionpoint + ((.5w,y13)--(w,y13)); +p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l.. + {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r.. + {right}z0'r..{dir(angle(z0r-z0'l)+10)}z0r..{up}z11l..{left}z12l..z13l.. + {right}z14l..{dir(angle(z0r-z0'l)+10)}z15l..z15r{dir(angle(z0'l-z0r)+10)} + ..z14r{left}..z13r..{right}z12r..{down}z11r; +p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l; +p2=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r; +(tim1,tim2)=p0 intersectiontimes p1; +(tim3-2,tim4)=subpath(2,infinity) of p1 intersectiontimes p0; +(tim5,tim6)=p2 intersectiontimes p0; +(tim7-2,tim8)=subpath(2,infinity) of p2 intersectiontimes p0; +filldraw subpath(0,rundy(p0,tim1).zpet) of p0.. + subpath(rundy(p1,tim2),rundy(p1,tim3).zpet) of p1.. + subpath(rundy(p0,tim4),length p0) of p0..cycle; +if bold_face: oblu:=.75f_obl; fi +infill subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2.. + subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0..cycle; +penlabels(0,0',1,2,3,4,5,6,8,9,10,11,12,13,14,15); labels(4',4'',7); +endchar; + diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf new file mode 100644 index 00000000000..30aed95b08a --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf @@ -0,0 +1,90 @@ +%Boisik Italic ligtables + +def mkr:= kern -.5u# enddef; +def vkr:= kern -u# enddef; +def xkr:= kern -1.5u# enddef; +def ukr:= kern -2u# enddef; +def wkr:= kern -2.25u# enddef; +def kkr:= kern u# enddef; +ligtable "a": chars.latin_aacute: "b" vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, chars.latin_ffi vkr, chars.latin_ffl vkr, "h" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "k" vkr, "p" mkr, "r" mkr, chars.latin_rcaron mkr, "v" mkr, "w" mkr, "x" kern .5u#, "y" mkr, chars.latin_yacute mkr, "z" mkr, chars.latin_zcaron mkr, "'" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "b": "b" mkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, chars.latin_ffi vkr, chars.latin_ffl vkr, ")" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "s" mkr, chars.latin_scaron mkr, "t" mkr, chars.latin_tcaron mkr, "z" mkr, chars.latin_zcaron mkr, "." mkr, "," mkr, "'" vkr; +ligtable "c": chars.latin_ccaron: "b" mkr, "f" mkr, "g" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" mkr, chars.latin_tcaron mkr, "z" mkr, chars.latin_zcaron mkr, ")" mkr, "'" vkr; +ligtable "e": chars.latin_ecaron: chars.latin_eacute: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" vkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "z" mkr, chars.latin_zcaron mkr, ")" mkr, "'" mkr; +ligtable "f": "f" =: chars.latin_ff, "i" =: chars.latin_fi, "l" =: chars.latin_fl, chars.latin_lacute =: chars.latin_flacute, chars.latin_lcaron =: chars.latin_flcaron, "a" mkr, chars.latin_aacute mkr, "b" kern 2u#, "c" mkr, chars.latin_ccaron kern 1.5u#, "e" mkr, chars.latin_ecaron kern 1.5u#, "h" kern 2u#, "j" =: chars.latin_fj, "k" kern 2u#, chars.latin_ncaron kern 2u#, "o" mkr, chars.latin_oacute mkr, chars.latin_rcaron kern 2u#, chars.latin_scaron kern 2u#, chars.latin_uumlaut kern u#, chars.latin_zcaron kern u#, "(" kern 1.5u#, ")" kern 1.75u#, "]" kern 2u#, "." vkr, "," vkr, "!" kern 1.5u#, "?" kern 1.5u#, "'" kern 1.5u#, "`" kern 1.5u#, chars.sign_czech_closing_quotes kern 2u#; +ligtable chars.latin_ff: "i" =: chars.latin_ffi, "l" =: chars.latin_ffl; +ligtable "g": "a" mkr, chars.latin_aacute mkr, "f" kern 2u#, "j" kern 1.5u#, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr; +ligtable "h": "b" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "i": chars.latin_iacute: "b" mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "l" mkr,chars.latin_lacute mkr, chars.latin_lcaron mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#; +ligtable "j": "b" mkr, "f" kern 2u#, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "t" mkr, chars.latin_tcaron mkr; +ligtable "k": "b" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr, "p" mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#, "'" mkr; +ligtable "l": chars.latin_lacute: "b" mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "l" mkr,chars.latin_lacute mkr, chars.latin_lcaron mkr, "k" mkr, "p" mkr, "t" mkr, "x" kern .5u#; +ligtable "m": "b" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "n": chars.latin_ncaron: "b" mkr, "h" mkr, "k" mkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "t" mkr, chars.latin_tcaron mkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "o": chars.latin_oacute: chars.latin_oumlaut: chars.latin_ocircumflex: "b" vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, chars.latin_ffi vkr, chars.latin_ffl vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "z" mkr, ")" mkr, "'" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "p": "b" vkr, "h" vkr, "k" mkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "t" vkr, chars.latin_tcaron vkr, ")" mkr, "'" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "q": "b" vkr, "f" kern 1.5u#, "h" vkr, "j" kern 1.5u#, "k" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "z" mkr, chars.latin_zcaron mkr, "'" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "r": chars.latin_rcaron: "a" vkr, chars.latin_aacute vkr, "b" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "g" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" mkr, "o" vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, chars.latin_oumlaut vkr, "t" mkr, chars.latin_tcaron mkr, "/" vkr, ")" mkr, "." ukr, "," ukr, "'" vkr; +ligtable "s": "b" vkr, "c" mkr, chars.latin_ccaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" mkr, chars.latin_tcaron mkr, "'" vkr; +ligtable "t": chars.latin_tcaron: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "o" mkr, "p" mkr, "t" mkr, "x" kern .5u#; +ligtable "u": chars.latin_uacute: chars.latin_uumlaut: chars.latin_uring: "b" vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, "x" kern .5u#, "'" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "v": "a" mkr, chars.latin_aacute mkr, "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" vkr, "/" mkr, "'" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "w": "a" mkr, chars.latin_aacute mkr, "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "o" mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, "p" mkr, "t" vkr, "/" mkr, "'" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "y": chars.latin_yacute: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lcaron vkr, chars.latin_lacute vkr, "p" mkr, "t" vkr, chars.latin_tcaron vkr, ")" vkr, "]" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "z": chars.latin_zcaron: "b" vkr, "h" vkr, "k" vkr, "l" vkr, chars.latin_lacute vkr, chars.latin_lcaron vkr, "p" mkr, "t" vkr, ")" mkr, "'" mkr; +ligtable "A": chars.latin_Aacute: "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, ")" mkr, "'" kern -3u#, "`" kern -3u#, chars.sign_czech_closing_quotes kern -3u#; +ligtable "B": "A" vkr, chars.latin_Aacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_O mkr, "Q" mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "'" mkr; +ligtable "C": chars.latin_Ccaron: "A" mkr, chars.latin_Aacute mkr, "J" vkr; +ligtable "D": chars.latin_Dcaron: "A" ukr, chars.latin_Aacute ukr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" xkr, chars.latin_Zcaron xkr, "," xkr, "." xkr, "/" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "E": chars.latin_Ecaron: chars.latin_Eacute: "A" vkr, chars.latin_Aacute vkr, "J" mkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" mkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Z mkr; +ligtable "F": "a" vkr, "c" vkr, "e" vkr, "o" vkr, "p" mkr, "r" mkr, "s" vkr, "u" mkr, "y" mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -2.5u#, "." kern -2.5u#; +ligtable "G": "A" xkr, chars.latin_Aacute xkr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" xkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Zcaron mkr, chars.sign_czech_closing_quotes mkr; +ligtable "H": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr; +ligtable "I": chars.latin_Iacute: "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr; +ligtable "J": "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," ukr; +ligtable "K": "r" mkr, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" vkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "T" vkr, chars.latin_Tcaron vkr, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr; +ligtable "L": "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "V" kern -3u#, "W" kern -2.5u#, "Y" kern -3u#, chars.latin_Yacute kern -3u#, chars.sign_czech_closing_quotes ukr; +ligtable "M": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#; +ligtable "N": chars.latin_Ncaron: "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," vkr; +ligtable "O": chars.latin_Oacute: "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Eacute mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" vkr, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," vkr, "." vkr, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "P": "a" mkr, chars.latin_aacute mkr, "c" vkr, "e" vkr, chars.latin_eacute vkr, "o" vkr, chars.latin_oacute vkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "S" mkr, chars.latin_Scaron mkr, "V" mkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, "," kern -2.5u#, "." kern -2.5u#, "/" xkr; +ligtable "Q": "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, chars.latin_Eacute mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 4u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Racute mkr, chars.latin_Rcaron mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," kern .75u#, "." kern -.75u#, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "R": chars.latin_Rcaron: chars.latin_Racute: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" xkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "]" mkr; +ligtable "S": chars.latin_Scaron: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," mkr; +ligtable "T": "a" ukr, chars.latin_aacute ukr, "c" vkr, chars.latin_ccaron mkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron mkr, "f" mkr, "o" ukr, chars.latin_oacute ukr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring mkr, "y" ukr, chars.latin_yacute ukr, chars.latin_Tcaron: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -3u#, "." kern -3u#, "/" vkr; +ligtable "U": chars.latin_Uacute: chars.latin_Uring: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," xkr; +ligtable "V": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "s" ukr, chars.latin_scaron vkr, "y" mkr, chars.latin_yacute mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr; +ligtable "W": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "s" ukr, chars.latin_scaron vkr, "y" mkr, chars.latin_yacute mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr; +ligtable "X": "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" mkr, chars.latin_Scaron mkr; +ligtable "Y": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "r" vkr, chars.latin_rcaron mkr, "s" ukr, chars.latin_scaron vkr, "u" vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, chars.latin_Yacute: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr; +ligtable "Z": chars.latin_Zcaron: "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "/" xkr; + +ligtable "!": "`" =: chars.sign_spanish_shriek; +ligtable "?": "`" =: chars.sign_spanish_query; +ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash; +ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash if medieval:, "4" kern -1u# fi; +ligtable ".": "'" ukr, "`" ukr; +ligtable ",": "j" kern .5u#, "f" kern u#, "J" kern 2u#, "'" ukr, "`" ukr; +ligtable "'": "A" wkr, chars.latin_Aacute wkr, "a" mkr, "c" vkr, "d" vkr, "e" vkr, "m" mkr, "n" mkr, "o" vkr, "q" vkr, "s" vkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, "z" mkr if medieval:, "4" wkr, "5" mkr, "9" vkr fi, "/" wkr; +ligtable "`": "A" wkr if medieval:, "4" wkr fi, "/" kern -3u#; +ligtable chars.sign_czech_quotes: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "T" wkr, chars.latin_Tcaron wkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "a" mkr, chars.latin_aacute mkr, "b" ukr, "h" mkr, "j" kern .5u#, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oacute vkr, "r" mkr, chars.latin_rcaron mkr, "t" mkr, chars.latin_tcaron mkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr; +ligtable "(": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_ecaron vkr, chars.latin_eacute ukr, "f" ukr, chars.latin_ff ukr, chars.latin_fi ukr, chars.latin_fl ukr, chars.latin_flacute ukr, chars.latin_flcaron ukr, chars.latin_ffi ukr, chars.latin_ffl ukr, "i" mkr, chars.latin_iacute mkr, "j" kern 1.5u#, "m" vkr, "n" vkr, chars.latin_ncaron mkr, "o" ukr, chars.latin_oacute ukr, chars.latin_oumlaut ukr, chars.latin_ocircumflex ukr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" ukr, chars.latin_uacute ukr, chars.latin_uring ukr, "v" ukr, "w" ukr, "x" vkr, "y" mkr, chars.latin_yacute mkr, "z" vkr, chars.latin_zcaron mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" kern .75u#, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "0" vkr; +ligtable ")": "J" kern 1u#; +ligtable "[": "A" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "f" kern 3u#, "o" mkr, chars.latin_oacute mkr, "q" mkr; +ligtable "]": "J" kern u#; +ligtable "/": "A" wkr, chars.latin_Aacute wkr, "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "q" vkr, "o" ukr, chars.latin_oacute ukr, "q" ukr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr; +ligtable chars.polish_cross: "l" kern -if monospace: 9u# else: 6u# fi -2letter_fit#, "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#); + + +if (not monofig) and medieval: + ligtable "0": "/" vkr, "." mkr, "," mkr, "'" mkr, chars.sign_czech_quotes vkr, chars.sign_czech_closing_quotes vkr; + ligtable "1": chars.sign_endash kern -2u#, "'" mkr, chars.sign_czech_closing_quotes ukr; + ligtable "2": "'" mkr, chars.sign_czech_closing_quotes vkr; + ligtable "3": "." mkr, "'" mkr, chars.sign_czech_closing_quotes ukr; + ligtable "4": chars.sign_endash kern -1u#, "." mkr, "'" ukr, chars.sign_czech_closing_quotes ukr; + ligtable "5": "." mkr, chars.sign_czech_quotes mkr; + ligtable "6": "/" mkr; + ligtable "7": "-" kern -u#, "." kern -3.5u#, "," kern -3.5u#, "/" ukr; + ligtable "8": "/" mkr; + ligtable "9": "'" mkr, chars.sign_czech_closing_quotes vkr; +fi + diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf new file mode 100644 index 00000000000..d3b95788e78 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf @@ -0,0 +1,88 @@ +%Boisik Small Caps ligtables + +def mkr:= kern -.5u# enddef; +def vkr:= kern -u# enddef; +def xkr:= kern -1.5u# enddef; +def ukr:= kern -2u# enddef; +def wkr:= kern -2.25u# enddef; +def kkr:= kern u# enddef; +ligtable "a": "á": "c" vkr, "č" vkr, "g" vkr, "j" vkr, "o" vkr, "ó" vkr, "q" vkr, "s" mkr, "š" mkr, "t" kern -3u#, "ť" kern -3u#, "u" xkr, "ů" xkr, "ú" xkr, "v" kern -3u#, "w" kern -3u#, "y" kern -3u#, "ý" kern -3u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, ")" vkr, "]" vkr, "'" kern -4u#, "`" kern -4u#, chars.sign_czech_closing_quotes kern -3u#; +ligtable "b": "a" mkr, "á" mkr, "t" mkr, "ť" mkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "z" mkr, "ž" mkr, "'" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "d": "ď": "a" wkr, "á" wkr, "e" mkr, "ě" mkr, "é" mkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "ý" vkr, "z" vkr, "ž" vkr, ")" mkr, "." vkr, "," vkr, "'" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "e": "ě": "é": "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "t" vkr, "u" vkr, "v" vkr, "w" vkr, "y" vkr, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "f": "a" wkr, "á" ukr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "/" vkr, "." kern -3u#, "," kern -3u#; +ligtable "g": "a" vkr, "á" vkr, "t" mkr, "ť" mkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "ý" vkr, "z" mkr, "ž" mkr; +ligtable "h": "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr; +ligtable "i": "a" mkr, "á" mkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr; +ligtable "j": "a" ukr, "á" ukr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "s" mkr, "š" mkr; +ligtable "k": "a" mkr, "á" mkr, "c" ukr, "č" ukr, "g" ukr, "o" ukr, "ó" ukr, "q" ukr, "t" vkr, "ť" vkr, "u" vkr, "ů" vkr, "ú" vkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "'" mkr, "`" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "l": "a" mkr, "á" mkr, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "t" kern -3.5u#, "ť" kern -3.5u#, "u" mkr, "ú" mkr, "ů" mkr, "v" wkr, "w" wkr, "y" wkr, "ý" wkr, "z" mkr, "ž" mkr, "'" wkr, "`" wkr, chars.sign_czech_closing_quotes wkr; +ligtable "m": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr; +ligtable "n": "ň": "a" xkr, "á" xkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr; +ligtable "o": "ó": "a" ukr, "á" ukr, "t" xkr, "ť" xkr, "v" vkr, "w" vkr, "x" xkr, "y" vkr, "ý" vkr, "z" mkr, "ž" mkr, ")" mkr, "." vkr, "," vkr, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "p": "a" wkr, "á" wkr, "c" vkr, "č" vkr, "g" vkr, "j" vkr, "o" vkr, "ó" vkr, "q" vkr, "s" mkr, "š" mkr, "v" vkr, "w" vkr, "x" ukr, "y" ukr, "ý" ukr, "z" mkr, "ž" mkr, "/" mkr, "." wkr, "," wkr, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "q": "a" vkr, "á" vkr, "j" kern 2u#, "t" mkr, "ť" mkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "ý" vkr, "," kern u#, "'" vkr, "`" vkr, chars.sign_czech_closing_quotes mkr; +ligtable "r": "ř": "a" vkr, "á" vkr, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "t" vkr, "ť" vkr, "u" vkr, "ů" vkr, "ú" vkr, "v" wkr, "w" wkr, "y" wkr, "ý" wkr, "z" vkr, "ž" vkr, ")" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "s": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "t" vkr, "ť" vkr, "v" vkr, "w" vkr, "x" mkr, "y" wkr, "ý" wkr; +ligtable "t": "ť": "a" ukr, "á" mkr, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "s" mkr, "š" mkr, "," wkr, "." wkr, ";" vkr, ":" vkr, "/" mkr; +ligtable "u": "ů": "ú": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr; +ligtable "v": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "s" mkr, "š" mkr, "," wkr, "." wkr, "/" vkr; +ligtable "w": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "s" mkr, "š" mkr, "," wkr, "." wkr, "/" vkr; +ligtable "x": "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr; +ligtable "y": "ý": "a" wkr, "á" wkr, "c" ukr, "č" ukr, "g" ukr, "o" ukr, "ó" ukr, "q" ukr, "s" vkr, "," wkr, "." wkr, "/" vkr; +ligtable "z": "a" vkr, "á" vkr, "c" mkr, "č" mkr, "g" mkr, "o" mkr, "ó" mkr, "q" mkr, "t" vkr, "ť" vkr, "v" vkr; +ligtable "A": chars.latin_Aacute: "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "'" wkr, "`" wkr, chars.sign_czech_closing_quotes wkr; +ligtable "B": "A" vkr, chars.latin_Aacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_O mkr, "Q" mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr; +ligtable "C": chars.latin_Ccaron: "A" mkr, chars.latin_Aacute mkr, "J" vkr; +ligtable "D": chars.latin_Dcaron: "A" ukr, chars.latin_Aacute ukr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" xkr, chars.latin_Zcaron xkr, "," xkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "E": chars.latin_Ecaron: chars.latin_Eacute: "A" vkr, chars.latin_Aacute vkr, "J" mkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" mkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Z mkr, "'" mkr; +ligtable "F": "a" kern -4u#, "á" kern -4u#, "c" wkr, "č" wkr, "g" wkr, "j" mkr, "o" wkr, "ó" wkr, "q" wkr, "s" mkr, "š" mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -2.5u#, ":" vkr, ";" vkr; +ligtable "G": "a" mkr, "á" mkr, "A" xkr, chars.latin_Aacute xkr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" xkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Zcaron mkr, chars.sign_czech_closing_quotes mkr; +ligtable "H": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr; +ligtable "I": chars.latin_Iacute: "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr; +ligtable "J": "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," ukr; +ligtable "K": "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" vkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "T" vkr, chars.latin_Tcaron vkr, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr, ")" mkr, "'" xkr, "`" vkr, chars.sign_czech_closing_quotes xkr; +ligtable "L": "v" wkr, "w" wkr, "y" wkr, "ý" wkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "V" kern -3u#, "W" kern -2.5u#, "Y" kern -3u#, chars.latin_Yacute kern -3u#, ")" mkr, chars.sign_czech_closing_quotes vkr; +ligtable "M": "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#; +ligtable "N": chars.latin_Ncaron: "a" vkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," vkr; +ligtable "O": chars.latin_Oacute: "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Eacute mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" vkr, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," vkr, "." vkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "P": "a" kern -3u#, "á" kern -3u#, "c" mkr, "č" mkr, "o" mkr, "ó" mkr, "q" mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "S" mkr, chars.latin_Scaron mkr, "V" mkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, "," kern -2.5u#, "." kern -2.5u#, "/" ukr; +ligtable "Q": "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, chars.latin_Eacute mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 4u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Racute mkr, chars.latin_Rcaron mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," kern .75u#, "]" kern u#, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "R": chars.latin_Rcaron: chars.latin_Racute: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" xkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, chars.sign_czech_closing_quotes xkr; +ligtable "S": chars.latin_Scaron: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," mkr, "." mkr; +ligtable "T": "a" kern -4u#, "á" kern -4u#, "c" ukr, "č" ukr, "g" ukr, "o" ukr, "ó" ukr, "q" ukr, chars.latin_Tcaron: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -3u#, "." kern -3u#, ":" vkr, ";" vkr, "/" ukr; +ligtable "U": chars.latin_Uacute: chars.latin_Uring: "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," xkr, "." xkr; +ligtable "V": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, ":" vkr, ";" vkr, "/" wkr; +ligtable "W": "a" kern -3.5u#, "á" kern -3.5u#, "c" vkr, "č" vkr, "g" vkr, "o" vkr, "ó" vkr, "q" vkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3u#, "." kern -3u#, "/" wkr, ":" vkr, ";" vkr; +ligtable "X": "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" mkr, chars.latin_Scaron mkr; +ligtable "Y": "a" kern -4u#, "á" kern -4u#, "b" wkr, "c" wkr, "č" wkr, "d" vkr, "ď" vkr, "e" vkr, "é" vkr, "ě" vkr, "f" vkr, "g" wkr, "h" vkr, "i" vkr, "í" vkr, "j" wkr, "k" vkr, "l" vkr, "ĺ" vkr, "ľ" vkr, "m" vkr, "n" vkr, "ň" vkr, "o" wkr, "ó" wkr, "p" vkr, "q" wkr, "r" vkr, "ř" vkr, "s" wkr, "š" vkr, "u" vkr, "ů" vkr, "ú" vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, "y" vkr, chars.latin_Yacute: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" wkr, ":" vkr, ";" vkr; +ligtable "Z": chars.latin_Zcaron: "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr; + + +ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash; +ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash if medieval:, "4" kern -1u# fi; +ligtable ".": "'" ukr, "`" ukr; +ligtable ",": "j" kern .5u#, "J" kern 1.5u#, "'" ukr, "`" ukr; +ligtable "'": "a" kern -3u#, "á" kern -3u#, "A" wkr, chars.latin_Aacute wkr if medieval:, "4" wkr, "5" mkr, "9" vkr fi, "/" wkr; +ligtable "`": "a" kern -3u#, "á" kern -3u#, "A" wkr if medieval:, "4" wkr fi, "/" kern -3u#; +ligtable chars.sign_czech_quotes: "c" vkr, "č" vkr, "g" vkr, "j" kern 2u#, "o" vkr, "ó" vkr, "u" mkr, "ů" mkr, "ú" mkr, "v" wkr, "w" vkr, "y" wkr, "ý" wkr, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "T" wkr, chars.latin_Tcaron wkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr; +ligtable "(": "a" wkr, "á" wkr, "c" mkr, "č" mkr, "g" mkr, "j" kern u#, "o" mkr, "ó" mkr, "q" mkr, "y" mkr, "ý" mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" kern .75u#, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "0" vkr; +ligtable ")": "J" kern 1u#; +ligtable "[": "a" vkr, "á" vkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "A" vkr; +ligtable "/": "a" wkr, "A" wkr, chars.latin_Aacute wkr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr; +ligtable chars.polish_cross: "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#); +ligtable "!": "`" =: chars.sign_spanish_shriek; +ligtable "?": "`" =: chars.sign_spanish_query; + +if (not monofig) and medieval: + ligtable "0": "/" vkr, "." mkr, "," mkr, chars.sign_czech_closing_quotes mkr; + ligtable "1": chars.sign_endash kern -2u#, chars.sign_czech_closing_quotes vkr; + ligtable "2": chars.sign_czech_closing_quotes mkr; + ligtable "3": "." mkr, chars.sign_czech_closing_quotes mkr; + ligtable "4": chars.sign_endash kern -1u#, "." mkr, chars.sign_czech_closing_quotes mkr; + ligtable "5": "." mkr; + ligtable "6": "/" mkr; + ligtable "7": "-" kern -u#, "." kern -3.5u#, "," kern -3.5u#, "/" ukr; + ligtable "8": "/" mkr; + ligtable "9": chars.sign_czech_closing_quotes mkr; +fi diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf new file mode 100644 index 00000000000..048a9731f39 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf @@ -0,0 +1,102 @@ +%Boisik Roman ligtables + +def mkr:= kern -.5u# enddef; +def vkr:= kern -u# enddef; +def xkr:= kern -1.5u# enddef; +def ukr:= kern -2u# enddef; +def wkr:= kern -2.25u# enddef; +def kkr:= kern u# enddef; +ligtable "a": "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" vkr, "m" mkr, "n" mkr, chars.latin_ncaron mkr, "p" vkr, "q" mkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" vkr, chars.latin_tcaron vkr, "u" kern -.6u#, chars.latin_uacute kern -.6u#, chars.latin_uring kern -.6u#, "v" vkr, "w" vkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "z" mkr, chars.latin_zcaron mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" xkr, "O" mkr, chars.latin_Oacute mkr, "T" kern -4u#, chars.latin_Tcaron kern -4u#, "U" xkr, chars.latin_Uring xkr, chars.latin_Uacute xkr, "V" kern -2.5u#, "W" ukr, "X" vkr, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr; +ligtable chars.latin_aacute: "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" vkr, "m" mkr, "n" mkr, chars.latin_ncaron mkr, "p" vkr, "q" mkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" vkr, chars.latin_tcaron vkr, "u" kern -.6u#, chars.latin_uacute kern -.6u#, chars.latin_uring kern -.6u#, "v" vkr, "w" vkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "z" mkr, chars.latin_zcaron mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" xkr, "O" mkr, chars.latin_Oacute mkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "U" xkr, "V" xkr, "W" xkr, "X" vkr, "Y" wkr, chars.latin_Yacute wkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes mkr; +ligtable "b": "b" mkr, "j" mkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, chars.latin_yacute mkr, "A" mkr, chars.latin_Aacute mkr, "T" ukr, chars.latin_Tcaron ukr, "V" ukr, "W" kern -1.75u#, "X" xkr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "," mkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr; +ligtable "c": "A" vkr, chars.latin_Aacute vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" xkr, "W" vkr, "X" vkr, "Y" xkr, chars.latin_Yacute xkr, "," mkr, "'" ukr, ")" vkr; +ligtable chars.latin_ccaron: "A" vkr, chars.latin_Aacute vkr, "T" vkr, chars.latin_Tcaron vkr, "V" mkr, "W" mkr, "X" vkr, "Y" mkr, chars.latin_Yacute mkr, "," mkr, "'" mkr, ")" mkr; +ligtable "d": "c" mkr, chars.latin_ccaron mkr, "d" vkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "o" vkr, chars.latin_oacute vkr, "t" mkr, chars.latin_tcaron mkr, "y" mkr; +ligtable chars.latin_dcaron: "c" mkr, chars.latin_ccaron mkr, "d" vkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, chars.latin_iacute kern .5u#, "o" vkr, chars.latin_oacute vkr, chars.latin_scaron kern u#, "t" mkr, chars.latin_tcaron mkr; +ligtable "e": "a" kern .5u#, chars.latin_aacute kern .5u#, "y" vkr, chars.latin_yacute vkr, "T" kern -3.5u#, "," mkr, "'" vkr, ")" vkr; +ligtable chars.latin_eacute: chars.latin_ecaron: "a" kern .5u#, chars.latin_aacute kern .5u#, "y" vkr, chars.latin_yacute vkr, "," mkr, ")" mkr; +ligtable "f": "a" mkr, chars.latin_aacute mkr, "b" kern .75u#, "c" mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, "f" =: chars.latin_ff, "g" mkr, "h" kkr, "i" =: chars.latin_fi, "k" kkr, "l" =: chars.latin_fl, "o" mkr, chars.latin_oacute mkr, "q" mkr, chars.latin_scaron kkr, "A" vkr, chars.latin_Aacute vkr, "B" kkr, "D" kkr, chars.latin_Dcaron kkr, "E" kkr, chars.latin_Eacute kkr, chars.latin_Ecaron kkr, "F" kkr, "H" kkr, "I" kkr, chars.latin_Iacute kkr, "K" kkr, "L" kkr, "M" kkr, "N" kkr, chars.latin_Ncaron kkr, "P" kkr, "R" kkr, chars.latin_Racute kkr, chars.latin_Rcaron kkr, "T" kkr, chars.latin_Tcaron kkr, "U" kkr, chars.latin_Uacute kkr, chars.latin_Uring kkr, "V" kkr, "W" kkr, "X" kkr, "Y" kkr, chars.latin_Yacute kkr, "Z" kern .5u#, chars.latin_Zcaron kern .5u#, "," mkr, "'" kkr, "]" kern .5u#, "`" kern u#, chars.sign_czech_closing_quotes kern u#; +ligtable chars.latin_ff: "a" mkr, chars.latin_aacute mkr, "b" kern .75u#, "c" mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, "f" =: chars.latin_ff, "g" mkr, "h" kkr, "i" =: chars.latin_ffi, "k" kkr, "l" =: chars.latin_ffl, "o" mkr, chars.latin_oacute mkr, "q" mkr, chars.latin_scaron kkr, "A" vkr, chars.latin_Aacute vkr, "B" kkr, "D" kkr, chars.latin_Dcaron kkr, "E" kkr, chars.latin_Eacute kkr, chars.latin_Ecaron kkr, "F" kkr, "H" kkr, "I" kkr, chars.latin_Iacute kkr, "K" kkr, "L" kkr, "M" kkr, "N" kkr, chars.latin_Ncaron kkr, "P" kkr, "R" kkr, chars.latin_Racute kkr, chars.latin_Rcaron kkr, "T" kkr, chars.latin_Tcaron kkr, "U" kkr, chars.latin_Uacute kkr, chars.latin_Uring kkr, "V" kkr, "W" kkr, "X" kkr, "Y" kkr, chars.latin_Yacute kkr, "Z" kern .5u#, chars.latin_Zcaron kern .5u#, "," mkr, "'" kkr; +ligtable "g": "a" mkr, chars.latin_aacute mkr, chars.latin_agrave mkr, "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "h" mkr, "j" kkr, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "A" vkr, chars.latin_Aacute vkr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 1.5u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" vkr, chars.latin_Scaron vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" ukr, "W" vkr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr; +ligtable "h": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, chars.latin_oe mkr, "j" vkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "O" mkr, chars.latin_Oacute mkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr, chars.sign_czech_closing_quotes vkr; +ligtable "i": chars.latin_iacute: chars.latin_fi: chars.latin_ffi: "c" vkr, chars.latin_ccaron vkr, "d" mkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, "g" vkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" mkr, chars.latin_lacute mkr, chars.latin_lcaron mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "x" mkr, "A" mkr, chars.latin_Aacute mkr, chars.latin_Agrave mkr, "J" xkr; +ligtable "j": "j" kern 1.5u#, "t" mkr, chars.latin_tcaron mkr, "A" mkr, chars.latin_Agrave mkr, chars.latin_Aacute mkr, "J" kern 1.5u#, chars.sign_czech_closing_quotes kern .5u#; +ligtable "k": "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "o" vkr, chars.latin_oumlaut vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, "q" vkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uring vkr, chars.latin_Uacute vkr, "V" kern -2.5u#, "W" ukr, "X" mkr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" wkr, ")" ukr, chars.sign_czech_closing_quotes vkr; +ligtable "l": chars.latin_fl: chars.latin_ffl: chars.latin_flacute: chars.latin_flcaron: "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, "g" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "l" mkr, chars.latin_lcaron mkr, chars.latin_lacute mkr, "m" mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, chars.latin_oumlaut vkr, "q" vkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "J" xkr, "V" vkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, chars.sign_czech_closing_quotes mkr; +ligtable "m": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr, "m" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "n": chars.latin_ncaron: "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flcaron mkr, chars.latin_flacute mkr, "g" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "l" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "p" kern -.25u#, "q" mkr, "r" kern -.25u#, chars.latin_rcaron kern -.25u#, chars.latin_racute kern -.25u#, "t" vkr, chars.latin_tcaron vkr, "u" kern -.25u#, chars.latin_uring kern -.25u#, chars.latin_uacute kern -.25u#, chars.latin_uumlaut kern -.25u#, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#, "T" kern -3.2u#, chars.latin_Tcaron kern -3.2u#, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr, ")" vkr, chars.sign_czech_closing_quotes vkr; +ligtable "o": "b" mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oumlaut vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, "p" mkr, "q" vkr, "r" mkr, chars.latin_rcaron mkr, chars.latin_racute mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uumlaut mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" mkr, "y" vkr, chars.latin_yacute vkr, "A" vkr, chars.latin_Aacute vkr, "J" vkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr; +ligtable chars.latin_oacute: chars.latin_ocircumflex: chars.latin_oumlaut: "b" mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, chars.latin_flacute vkr, chars.latin_flcaron vkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "k" mkr, "l" mkr, "n" mkr, chars.latin_ncaron mkr, "o" vkr, chars.latin_oumlaut vkr, chars.latin_oacute vkr, chars.latin_ocircumflex vkr, "p" mkr, "q" vkr, "r" mkr, chars.latin_rcaron mkr, chars.latin_racute mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uumlaut mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" mkr, "y" vkr, chars.latin_yacute vkr, "A" vkr, chars.latin_Aacute vkr, "J" vkr, "T" vkr, chars.latin_Tcaron vkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" ukr, "Y" vkr, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, chars.sign_czech_closing_quotes vkr; +ligtable "p": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" kern -.25u#, chars.latin_ff kern -.25u#, chars.latin_fi kern -.25u#, chars.latin_fl kern -.25u#, chars.latin_ffi kern -.25u#, chars.latin_ffl kern -.25u#, chars.latin_flacute kern -.25u#, chars.latin_flcaron kern -.25u#, "j" mkr, "l" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "t" mkr, chars.latin_tcaron mkr, "v" vkr, "w" mkr, "y" vkr, chars.latin_yacute vkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" xkr, chars.latin_Aacute xkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" kern -2.75u#, "W" ukr, "X" vkr, "Y" kern -2.75u#, chars.latin_Yacute kern -2.75u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, ")" ukr, chars.sign_czech_closing_quotes vkr; +ligtable "q": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" kkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, "q" mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" mkr, chars.latin_tcaron mkr, "A" vkr, chars.latin_Aacute vkr, "J" kkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "'" ukr; +ligtable "r": "a" vkr, chars.latin_aacute vkr, chars.latin_agrave vkr, "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flcaron mkr, chars.latin_flacute mkr, "g" kern -.75u#, "h" mkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "k" mkr, "l" vkr, "m" kern -.25u#, "n" kern -.25u#, chars.latin_ncaron kern -.25u#, "o" vkr, chars.latin_oacute vkr, chars.latin_oumlaut vkr, chars.latin_ocircumflex vkr, "p" kern -.25u#, "q" vkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron vkr, "t" mkr, chars.latin_tcaron mkr, "v" mkr, "w" mkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "A" ukr, chars.latin_Aacute ukr, chars.latin_Agrave ukr, "B" vkr, "D" vkr, chars.latin_Dcaron vkr, "E" vkr, chars.latin_Ecaron vkr, chars.latin_Eacute vkr, "F" vkr, "H" vkr, "I" vkr, chars.latin_Iacute vkr, "J" xkr, "K" vkr, "L" vkr, "M" vkr, "N" vkr, chars.latin_Ncaron vkr, "P" vkr, "R" vkr, chars.latin_Racute vkr, chars.latin_Rcaron vkr, "S" vkr, chars.latin_Scaron vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "U" vkr, chars.latin_Uring vkr, chars.latin_Uacute vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," xkr, "'" ukr, ")" vkr; +ligtable chars.latin_rcaron: chars.latin_racute: "a" vkr, chars.latin_aacute vkr, chars.latin_agrave vkr, "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flcaron mkr, chars.latin_flacute mkr, "g" kern -.75u#, "h" mkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "k" mkr, "l" vkr, "m" kern -.25u#, "n" kern -.25u#, chars.latin_ncaron kern -.25u#, "o" vkr, chars.latin_oacute vkr, chars.latin_oumlaut vkr, chars.latin_ocircumflex vkr, "p" kern -.25u#, "q" vkr, "r" mkr, chars.latin_racute mkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron vkr, "t" mkr, chars.latin_tcaron mkr, "v" mkr, "w" mkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "A" ukr, chars.latin_Aacute ukr, chars.latin_Agrave ukr, "B" vkr, "D" vkr, chars.latin_Dcaron vkr, "E" vkr, chars.latin_Ecaron vkr, chars.latin_Eacute vkr, "F" vkr, "H" vkr, "I" vkr, chars.latin_Iacute vkr, "J" xkr, "K" vkr, "L" vkr, "M" vkr, "N" vkr, chars.latin_Ncaron vkr, "P" vkr, "R" vkr, chars.latin_Racute vkr, chars.latin_Rcaron vkr, "S" vkr, chars.latin_Scaron vkr, "T" kern -u#, chars.latin_Tcaron kern -u#, "U" vkr, chars.latin_Uring vkr, chars.latin_Uacute vkr, "V" kern -1.5u#, "W" vkr, "X" kern -1.5u#, "Y" kern -1.5u#, chars.latin_Yacute kern -1.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," xkr, "'" ukr, ")" vkr; +ligtable "s": "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" mkr, "k" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" kern -.75u#, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" vkr, chars.latin_Agrave vkr, chars.latin_Aacute vkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" kern -2.5u#, "W" ukr, "X" kern -1.25u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr; +ligtable chars.latin_scaron: "b" mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, chars.latin_flacute mkr, chars.latin_flcaron mkr, "g" mkr, "h" mkr, "i" mkr, chars.latin_iacute mkr, "j" mkr, "k" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "v" vkr, "w" kern -.75u#, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" vkr, chars.latin_Agrave vkr, chars.latin_Aacute vkr, "J" vkr, "T" kern -u#, chars.latin_Tcaron kern -u#, "V" kern -u#, "W" mkr, "X" kern -1.25u#, "Y" kern -u#, chars.latin_Yacute kern -u#, "Z" vkr, chars.latin_Zcaron vkr, "," mkr, "'" ukr, ")" vkr; +ligtable "t": "c" mkr, chars.latin_tcaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "v" mkr, "J" vkr, "T" xkr, chars.latin_Tcaron xkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "," mkr, ")" mkr; +ligtable chars.latin_tcaron: "c" mkr, chars.latin_tcaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "J" vkr, "T" mkr, chars.latin_Tcaron mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "," mkr, ")" mkr; +ligtable "u": chars.latin_uring: "j" vkr, "t" kern -.3u#, chars.latin_tcaron kern -.3u#, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "'" ukr, ")" mkr; +ligtable chars.latin_uumlaut: "j" vkr, "t" kern -.3u#, chars.latin_tcaron kern -.3u#, "J" vkr, "T" kern -u#, chars.latin_Tcaron kern -3u#, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr, "'" vkr, ")" mkr; +ligtable chars.latin_uacute: "j" vkr, "t" kern -.3u#, chars.latin_tcaron kern -.3u#, "J" vkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "'" ukr, ")" mkr; +ligtable "v": "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "y" mkr, chars.latin_yacute mkr, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" ukr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," kern -2.5u#, "." kern -2.5u#, "'" ukr, ")" ukr, "/" vkr; +ligtable "w": "a" mkr, chars.latin_aacute mkr, chars.latin_agrave mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "g" mkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, "q" mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "z" kern -.25u#, chars.latin_zcaron kern -.25u#, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" kern -1.25u#, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" ukr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," kern -2.5u#, "." kern -2.5u#, "'" ukr, ")" ukr, "/" vkr; +ligtable "x": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "j" mkr, "o" mkr, chars.latin_oacute mkr, chars.latin_ocircumflex mkr, chars.latin_oumlaut mkr, "q" mkr, "s" kern -.25u#, chars.latin_scaron kern -.25u#, "t" mkr, chars.latin_tcaron mkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "'" ukr, ")" vkr; +ligtable "y": "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "g" mkr, "l" mkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" mkr, chars.latin_tcaron mkr, "z" mkr, chars.latin_zcaron mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" kern -1.25u#, "S" mkr, chars.latin_Scaron mkr, "T" kern -2.5u#, chars.latin_Tcaron kern -2.5u#, "V" ukr, "W" xkr, "X" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" vkr, chars.latin_Zcaron vkr, "," ukr, "." ukr, "'" ukr, ")" ukr, "/" vkr; +ligtable chars.latin_yacute: "a" mkr, chars.latin_agrave mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "g" mkr, "l" mkr, "o" mkr, chars.latin_oumlaut mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "z" mkr, chars.latin_zcaron mkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" kern -1.25u#, "S" mkr, chars.latin_Scaron mkr, "T" kern -1.5u#, chars.latin_Tcaron kern -1.5u#, "V" vkr, "W" mkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" vkr, chars.latin_Zcaron vkr, "," ukr, "." ukr, "'" ukr, ")" ukr, "/" vkr; +ligtable "z": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "j" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, "q" mkr, "t" mkr, chars.latin_tcaron mkr, "A" mkr, chars.latin_Aacute mkr, chars.latin_Agrave mkr, "J" vkr, "T" kern -3u#, chars.latin_Tcaron kern -3u#, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "Z" mkr, chars.latin_Zcaron mkr, "'" ukr, ")" vkr; +ligtable chars.latin_zcaron: "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "j" mkr, "l" mkr, "o" mkr, chars.latin_ocircumflex mkr, chars.latin_oacute mkr, chars.latin_oumlaut mkr, "q" mkr, "t" mkr, chars.latin_tcaron mkr, "A" mkr, chars.latin_Aacute mkr, chars.latin_Agrave mkr, "J" vkr, "T" kern -u#, chars.latin_Tcaron kern -u#, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "Z" mkr, chars.latin_Zcaron mkr, "'" ukr, ")" vkr; +ligtable "A": chars.latin_Aacute: "a" mkr, chars.latin_aacute mkr, "b" mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr,"g" mkr, "i" mkr, chars.latin_iacute mkr, "j" ukr, "o" vkr, chars.latin_oacute vkr, "p" mkr, "q" vkr, "s" mkr, chars.latin_scaron mkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uacute vkr, ")" vkr, chars.latin_uring vkr, "v" kern -3u#, "w" kern -2.8u#, "y" kern -3u#, chars.latin_yacute kern -3u#, "z" mkr, chars.latin_zcaron mkr, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" xkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "S" mkr, chars.latin_Scaron mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "U" ukr, chars.latin_Uring ukr, chars.latin_Uacute ukr, "V" kern -3.5u#, "W" kern -3.5u#, "Y" kern -3.5u#, chars.latin_Yacute kern -3.5u#, "'" wkr, "`" wkr, chars.sign_czech_closing_quotes wkr; +ligtable "B": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "g" mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" mkr, chars.latin_tcaron mkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, chars.latin_yacute mkr, "z" mkr, chars.latin_zcaron mkr, "A" vkr, chars.latin_Aacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_O mkr, "Q" mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr; +ligtable "C": chars.latin_Ccaron: "j" kern -.25u#, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, "A" mkr, chars.latin_Aacute mkr, "J" vkr; +ligtable "D": chars.latin_Dcaron: "A" ukr, chars.latin_Aacute ukr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" kern -2.5u#, "W" ukr, "X" kern -2.5u#, "Y" kern -2.5u#, chars.latin_Yacute kern -2.5u#, "Z" xkr, chars.latin_Zcaron xkr, "," xkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "E": chars.latin_Ecaron: chars.latin_Eacute: "t" vkr, chars.latin_tcaron vkr, "v" xkr, "w" xkr, "y" xkr, chars.latin_yacute vkr, "z" mkr, "A" vkr, chars.latin_Aacute vkr, "J" mkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" mkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Z mkr, "'" mkr; +ligtable "F": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron xkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron xkr, "g" ukr, "i" mkr, chars.latin_iacute mkr, "j" mkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, chars.latin_racute vkr, "s" ukr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" xkr, "w" xkr, "x" xkr, "y" xkr, chars.latin_yacute xkr, "z" xkr, chars.latin_zcaron vkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -2.5u#, ":" vkr, ";" vkr; +ligtable "G": "j" mkr, "t" mkr, chars.latin_tcaron mkr, "v" vkr, "w" vkr, "x" mkr, "y" vkr, chars.latin_yacute vkr, "A" xkr, chars.latin_Aacute xkr, "J" xkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" xkr, "W" xkr, "X" xkr, "Y" xkr, chars.latin_Yacute xkr, "Z" mkr, chars.latin_Zcaron mkr, chars.sign_czech_closing_quotes mkr; +ligtable "H": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uring mkr, chars.latin_uacute mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr; +ligtable "I": chars.latin_Iacute: "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr; +ligtable "J": "a" vkr, chars.latin_aacute vkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, "g" vkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" vkr, chars.latin_oacute vkr, "p" vkr, "q" vkr, "r" vkr, chars.latin_racute vkr, chars.latin_rcaron mkr, "s" vkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" vkr, chars.latin_zcaron vkr, "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," ukr; +ligtable "K": "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "j" vkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" kern -2.5u#, "w" kern -2.5u#, "y" kern -2.5u#, chars.latin_yacute kern -2.5u#, "C" xkr, chars.latin_Ccaron xkr, "G" xkr, "J" vkr, "O" xkr, chars.latin_Oacute xkr, "Q" xkr, "T" vkr, chars.latin_Tcaron vkr, "V" vkr, "W" vkr, "Y" vkr, chars.latin_Yacute vkr, ")" mkr, "'" xkr, "`" vkr, chars.sign_czech_closing_quotes xkr; +ligtable "L": "j" vkr, "t" vkr, chars.latin_tcaron vkr, "v" ukr, "w" xkr, "y" ukr, chars.latin_yacute ukr, "J" mkr, "T" kern -3.5u#, chars.latin_Tcaron kern -3.5u#, "V" kern -3u#, "W" kern -2.5u#, "Y" kern -3u#, chars.latin_Yacute kern -3u#, ")" mkr, chars.sign_czech_closing_quotes vkr; +ligtable "M": "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uring mkr, chars.latin_uacute mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" kern -.25u#, chars.latin_Scaron kern -.25u#; +ligtable "N": chars.latin_Ncaron: "a" mkr, chars.latin_aacute mkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_eacute mkr, chars.latin_ecaron mkr, "g" mkr, "j" vkr, "o" mkr, chars.latin_oacute mkr, "q" mkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr, "z" mkr, chars.latin_zcaron mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" vkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," vkr; +ligtable "O": chars.latin_Oacute: "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Eacute mkr, chars.latin_Ecaron mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" vkr, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Rcaron mkr, chars.latin_Racute mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uacute mkr, chars.latin_Uring mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," vkr, "." vkr, ")" mkr, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "P": "a" mkr, chars.latin_aacute mkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron vkr, "g" vkr, "j" mkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "s" vkr, chars.latin_scaron vkr, "A" kern -3u#, chars.latin_Aacute kern -3u#, "J" xkr, "S" mkr, chars.latin_Scaron mkr, "V" mkr, "W" mkr, "X" mkr, "Y" mkr, chars.latin_Yacute mkr, "," kern -2.5u#, "." kern -2.5u#, "/" ukr; +ligtable "Q": "g" kkr, "j" kern 2u#, "p" kern .5u#, "A" ukr, chars.latin_Aacute ukr, "B" mkr, "D" mkr, chars.latin_Dcaron mkr, "E" mkr, chars.latin_Ecaron mkr, chars.latin_Eacute mkr, "F" mkr, "H" mkr, "I" mkr, chars.latin_Iacute mkr, "J" kern 4u#, "K" mkr, "L" mkr, "M" mkr, "N" mkr, chars.latin_Ncaron mkr, "P" mkr, "R" mkr, chars.latin_Racute mkr, chars.latin_Rcaron mkr, "S" mkr, chars.latin_Scaron mkr, "T" vkr, chars.latin_Tcaron vkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" xkr, "W" vkr, "X" vkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," kern .75u#, "]" kern u#, "'" mkr, chars.sign_czech_closing_quotes mkr; +ligtable "R": chars.latin_Rcaron: chars.latin_Racute: "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "j" mkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "s" mkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" kern -.75u#, chars.latin_uring kern -.75u#, chars.latin_uacute kern -.75u#, "v" xkr, "w" xkr, "y" xkr, chars.latin_yacute xkr, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" xkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "T" xkr, chars.latin_Tcaron xkr, "U" vkr, chars.latin_Uacute vkr, chars.latin_Uring vkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, chars.sign_czech_closing_quotes xkr; +ligtable "S": chars.latin_Scaron: "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "t" vkr, chars.latin_tcaron vkr, "u" mkr, chars.latin_uacute mkr, chars.latin_uring mkr, "v" xkr, "w" vkr, "x" vkr, "y" xkr, chars.latin_yacute xkr, "z" mkr, chars.latin_zcaron mkr, "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "T" mkr, chars.latin_Tcaron mkr, "U" mkr, chars.latin_Uring mkr, chars.latin_Uacute mkr, "V" vkr, "W" vkr, "X" mkr, "Y" vkr, chars.latin_Yacute vkr, "Z" mkr, chars.latin_Zcaron mkr, "," mkr, "." mkr; +ligtable "T": chars.latin_Tcaron: "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" ukr, "j" mkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, chars.latin_racute vkr, "s" ukr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" vkr, chars.latin_uacute vkr, chars.latin_uring vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" vkr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," kern -3u#, "." kern -3u#, ":" vkr, ";" vkr, "/" ukr; +ligtable "U": chars.latin_Uacute: chars.latin_Uring: "a" vkr, chars.latin_aacute vkr, "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_eacute vkr, chars.latin_ecaron mkr, "f" vkr, chars.latin_ff vkr, chars.latin_fi vkr, chars.latin_fl vkr, chars.latin_ffl vkr, chars.latin_ffi vkr, "g" vkr, "i" vkr, chars.latin_iacute vkr, "j" vkr, "m" vkr, "n" vkr, chars.latin_ncaron vkr, "o" vkr, chars.latin_oacute vkr, "p" vkr, "q" vkr, "r" vkr, chars.latin_racute vkr, "s" vkr, "t" xkr, chars.latin_tcaron xkr, "u" vkr, chars.latin_uring vkr, chars.latin_uacute vkr, "v" vkr, "w" vkr, "x" vkr, "y" vkr, chars.latin_yacute vkr, "z" vkr, chars.latin_zcaron mkr, "A" xkr, chars.latin_Aacute xkr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "," xkr, "." xkr; +ligtable "V": "a" ukr, chars.latin_aacute ukr, "c" ukr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" ukr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "m" xkr, "n" xkr, chars.latin_ncaron xkr, "o" ukr, chars.latin_oacute ukr, "p" xkr, "q" ukr, "r" xkr, chars.latin_racute xkr, "s" ukr, "t" ukr, chars.latin_tcaron ukr, "u" xkr, chars.latin_uacute xkr, chars.latin_uring xkr, "v" xkr, "w" xkr, "x" xkr, "y" xkr, chars.latin_yacute xkr, "z" ukr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, ":" vkr, ";" vkr, "/" wkr; +ligtable "W": "a" ukr, chars.latin_aacute ukr, "c" ukr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron mkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" ukr, "i" mkr, chars.latin_iacute mkr, "j" vkr, "m" xkr, "n" xkr, chars.latin_ncaron xkr, "o" ukr, chars.latin_oacute ukr, "p" xkr, "q" ukr, "r" xkr, chars.latin_racute xkr, "s" ukr, "t" ukr, chars.latin_tcaron ukr, "u" xkr, chars.latin_uacute xkr, chars.latin_uring xkr, "v" xkr, "w" xkr, "x" xkr, "y" xkr, chars.latin_yacute xkr, "z" ukr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3u#, "." kern -3u#, "/" wkr, ":" vkr, ";" vkr; +ligtable "X": "c" vkr, chars.latin_ccaron vkr, "d" vkr, chars.latin_dcaron vkr, "e" vkr, chars.latin_ecaron vkr, chars.latin_eacute vkr, "g" mkr, "j" mkr, "o" vkr, chars.latin_oacute vkr, "q" vkr, "t" vkr, chars.latin_tcaron vkr, "u" vkr, chars.latin_uring vkr, chars.latin_uacute vkr, "v" wkr, "w" wkr, "y" wkr, chars.latin_yacute wkr, "z" mkr, chars.latin_zcaron mkr, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" mkr, chars.latin_Scaron mkr; +ligtable "Y": chars.latin_Yacute: "a" wkr, chars.latin_aacute wkr, "c" wkr, chars.latin_ccaron vkr, "d" wkr, chars.latin_dcaron wkr, "e" wkr, chars.latin_eacute wkr, chars.latin_ecaron vkr, "f" mkr, chars.latin_ff mkr, chars.latin_fi mkr, chars.latin_fl mkr, chars.latin_ffi mkr, chars.latin_ffl mkr, "g" wkr, "i" mkr, chars.latin_iacute vkr, "j" vkr, "m" ukr, "n" ukr, chars.latin_ncaron vkr, "o" wkr, chars.latin_oacute wkr, "p" ukr, "q" wkr, "r" ukr, chars.latin_racute ukr, chars.latin_rcaron mkr, "s" wkr, "t" wkr, chars.latin_tcaron wkr, "u" ukr, chars.latin_uacute ukr, chars.latin_uring vkr, "v" ukr, "w" ukr, "x" ukr, "y" ukr, chars.latin_yacute ukr, "z" wkr, chars.latin_zcaron mkr, "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" wkr, ":" vkr, ";" vkr; +ligtable "Z": chars.latin_Zcaron: "j" mkr, "t" mkr, chars.latin_tcaron mkr, "u" mkr, chars.latin_uring mkr, chars.latin_uacute mkr, "v" xkr, "w" xkr, "y" xkr, chars.latin_yacute xkr, "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr; + +ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash; +ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash if medieval:, "4" kern -1u# fi; +ligtable ".": "'" ukr, "`" ukr; +ligtable ",": "j" kern .5u#, "J" kern 1.5u#, "'" ukr, "`" ukr; +ligtable "'": "A" wkr, chars.latin_Aacute wkr, "a" mkr, "c" vkr, "d" vkr, "e" vkr, "m" mkr, "n" mkr, "o" vkr, "q" vkr, "s" vkr, "v" mkr, "w" mkr, "x" mkr, "y" mkr, "z" mkr if medieval:, "4" wkr, "5" mkr, "9" vkr fi, "/" wkr; +ligtable "`": "A" wkr if medieval:, "4" wkr fi, "/" kern -3u#; +ligtable chars.sign_czech_quotes: "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "T" wkr, chars.latin_Tcaron wkr, "V" ukr, "W" ukr, "Y" ukr, chars.latin_Yacute ukr, "j" kern .5u#, "v" vkr, "w" vkr, "y" vkr, chars.latin_yacute vkr; +ligtable "(": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_ecaron vkr, chars.latin_eacute ukr, "f" ukr, chars.latin_ff ukr, chars.latin_fi ukr, chars.latin_fl ukr, chars.latin_flacute ukr, chars.latin_flcaron ukr, chars.latin_ffi ukr, chars.latin_ffl ukr, "i" mkr, chars.latin_iacute mkr, "j" kern 1.5u#, "m" vkr, "n" vkr, chars.latin_ncaron mkr, "o" ukr, chars.latin_oacute ukr, chars.latin_oumlaut ukr, chars.latin_ocircumflex ukr, "q" ukr, "r" vkr, chars.latin_rcaron mkr, "s" vkr, chars.latin_scaron mkr, "t" vkr, chars.latin_tcaron vkr, "u" ukr, chars.latin_uacute ukr, chars.latin_uring ukr, "v" ukr, "w" ukr, "x" vkr, "y" mkr, chars.latin_yacute mkr, "z" vkr, chars.latin_zcaron mkr, "A" ukr, chars.latin_Aacute ukr, "C" mkr, chars.latin_Ccaron mkr, "G" mkr, "J" kern .75u#, "O" mkr, chars.latin_Oacute mkr, "Q" mkr, "S" mkr, chars.latin_Scaron mkr, "0" vkr; +ligtable ")": "J" kern 1u#; +ligtable "[": "A" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, "q" mkr; +ligtable "/": "A" wkr, chars.latin_Aacute wkr, "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "q" vkr, "o" ukr, chars.latin_oacute ukr, "q" ukr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr; +ligtable chars.polish_cross: "l" kern -if monospace: 9u# else: 6u# fi -2letter_fit#, "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#); +ligtable "!": "`" =: chars.sign_spanish_shriek; +ligtable "?": "`" =: chars.sign_spanish_query; + +if (not monofig) and medieval: + ligtable "0": "/" vkr, "." mkr, "," mkr, chars.sign_czech_closing_quotes mkr; + ligtable "1": chars.sign_endash kern -2u#, chars.sign_czech_closing_quotes vkr; + ligtable "2": chars.sign_czech_closing_quotes mkr; + ligtable "3": "." mkr, chars.sign_czech_closing_quotes mkr; + ligtable "4": chars.sign_endash kern -1u#, "." mkr, chars.sign_czech_closing_quotes mkr; + ligtable "5": "." mkr; + ligtable "6": "/" mkr; + ligtable "7": "-" kern -u#, "." kern -3.5u#, "," kern -3.5u#, "/" ukr; + ligtable "8": "/" mkr; + ligtable "9": chars.sign_czech_closing_quotes mkr; +fi + diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf new file mode 100644 index 00000000000..0f7b9dc7c2c --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-T1.mf @@ -0,0 +1,258 @@ +%Boisik list for text fonts in T1 encoding (unsupported) + +chars.latin_grave:=0; +chars.latin_acute:=1; +chars.latin_circumflex:=2; +chars.latin_tilde:=3; +chars.latin_umlaut:=4; +chars.latin_hungarian_umlaut:=5; +chars.latin_ring:=6; +chars.latin_hacek:=7; +chars.latin_breve:=8; +chars.latin_macron:=9; +chars.latin_dot_above:=10; +chars.latin_cedilla:=11; +chars.latin_ogonek:=12; +chars.sign_czech_quote:=13; +chars.sign_french_quote_left:=14; +chars.sign_french_quote_right:=15; +chars.sign_czech_closing_quotes:=16; +chars.sign_quotes:=17; +chars.sign_czech_quotes:=18; +chars.sign_french_quotes_left:=19; +chars.sign_french_quotes_right:=20; +chars.sign_endash:=21; +chars.sign_emdash:=22; +chars.sign_compound_word:=23; +chars.sign_zero_permile_sign:=24; +chars.latin_dotless_i:=25; +chars.latin_dotless_j:=26; +chars.latin_ff:=27; +chars.latin_fi:=28; +chars.latin_fl:=29; +chars.latin_ffi:=30; +chars.latin_ffl:=31; +chars.sign_blank_space:=32; +chars.sign_exclamation:=33; +chars.sign_straight_quotes:=34; +chars.sign_hash:=35; +chars.sign_dolar:=36; +chars.sign_percent:=37; +chars.sign_ampersand:=38; +chars.sign_aposthrope:=39; +chars.sign_parent_left:=40; +chars.sign_parent_right:=41; +chars.sign_asterisk:=42; +chars.sign_plus:=43; +chars.sign_comma:=44; +chars.sign_hyphen:=45; +chars.sign_period:=46; +chars.sign_slash:=47; +chars.numeral_zero:=48; +chars.numeral_one:=49; +chars.numeral_two:=50; +chars.numeral_three:=51; +chars.numeral_four:=52; +chars.numeral_five:=53; +chars.numeral_six:=54; +chars.numeral_seven:=55; +chars.numeral_eight:=56; +chars.numeral_nine:=57; +chars.sign_colon:=58; +chars.sign_semicolon:=59; +chars.math_less:=60; +chars.sign_equals:=61; +chars.math_greater:=62; +chars.sign_query:=63; +chars.sign_at:=64; +chars.latin_A:=65; +chars.latin_B:=66; +chars.latin_C:=67; +chars.latin_D:=68; +chars.latin_E:=69; +chars.latin_F:=70; +chars.latin_G:=71; +chars.latin_H:=72; +chars.latin_I:=73; +chars.latin_J:=74; +chars.latin_K:=75; +chars.latin_L:=76; +chars.latin_M:=77; +chars.latin_N:=78; +chars.latin_O:=79; +chars.latin_P:=80; +chars.latin_Q:=81; +chars.latin_R:=82; +chars.latin_S:=83; +chars.latin_T:=84; +chars.latin_U:=85; +chars.latin_V:=86; +chars.latin_W:=87; +chars.latin_X:=88; +chars.latin_Y:=89; +chars.latin_Z:=90; +chars.sign_bracket_left:=91; +chars.sign_backslash:=92; +chars.sign_bracket_right:=93; +chars.sign_circumflex:=94; +chars.sign_underbar:=95; +chars.sign_aposthrope_reverse:=96; +chars.latin_a:=97; +chars.latin_b:=98; +chars.latin_c:=99; +chars.latin_d:=100; +chars.latin_e:=101; +chars.latin_f:=102; +chars.latin_g:=103; +chars.latin_h:=104; +chars.latin_i:=105; +chars.latin_j:=106; +chars.latin_k:=107; +chars.latin_l:=108; +chars.latin_m:=109; +chars.latin_n:=110; +chars.latin_o:=111; +chars.latin_p:=112; +chars.latin_q:=113; +chars.latin_r:=114; +chars.latin_s:=115; +chars.latin_t:=116; +chars.latin_u:=117; +chars.latin_v:=118; +chars.latin_w:=119; +chars.latin_x:=120; +chars.latin_y:=121; +chars.latin_z:=122; +chars.math_curly_brace_left:=123; +chars.sign_vertical:=124; +chars.math_curly_brace_right:=125; +chars.sign_tilde:=126; +chars.sign_hyphenchar:=127; +chars.latin_Abreve:=128; +chars.latin_Aogonek:=129; +chars.latin_Cacute:=130; +chars.latin_Ccaron:=131; +chars.latin_Dcaron:=132; +chars.latin_Ecaron:=133; +chars.latin_Eogonek:=134; +chars.latin_Gbreve:=135; +chars.latin_Lacute:=136; +chars.latin_Lcaron:=137; +chars.latin_Lslash:=138; +chars.latin_Nacute:=139; +chars.latin_Ncaron:=140; +chars.latin_Eng:=141; +chars.latin_Ohumlaut:=142; +chars.latin_Racute:=143; +chars.latin_Rcaron:=144; +chars.latin_Sacute:=145; +chars.latin_Scaron:=146; +chars.latin_Scedilla:=147; +chars.latin_Tcaron:=148; +chars.latin_Tcedilla:=149; +chars.latin_Uhumlaut:=150; +chars.latin_Uring:=151; +chars.latin_Yumlaut:=152; +chars.latin_Zacute:=153; +chars.latin_Zcaron:=154; +chars.latin_Zdotabove:=155; +chars.latin_IJ:=156; +chars.latin_Idotabove:=157; +chars.latin_dstroke:=158; +chars.math_section:=159; +chars.latin_abreve:=160; +chars.latin_aogonek:=161; +chars.latin_cacute:=162; +chars.latin_ccaron:=163; +chars.latin_dcaron:=164; +chars.latin_ecaron:=165; +chars.latin_eogonek:=166; +chars.latin_gbreve:=167; +chars.latin_lacute:=168; +chars.latin_lcaron:=169; +chars.latin_lslash:=170; +chars.latin_nacute:=171; +chars.latin_ncaron:=172; +chars.latin_eng:=173; +chars.latin_ohumlaut:=174; +chars.latin_racute:=175; +chars.latin_rcaron:=176; +chars.latin_sacute:=177; +chars.latin_scaron:=178; +chars.latin_scedilla:=179; +chars.latin_tcaron:=180; +chars.latin_tcedilla:=181; +chars.latin_uhumlaut:=182; +chars.latin_uring:=183; +chars.latin_yumlaut:=184; +chars.latin_zacute:=185; +chars.latin_zcaron:=186; +chars.latin_zdotabove:=187; +chars.latin_ij:=188; +chars.sign_spanish_shriek:=189; +chars.sign_spanish_query:=190; +chars.sign_pound:=191; +chars.latin_Agrave:=192; +chars.latin_Aacute:=193; +chars.latin_Acircumflex:=194; +chars.latin_Atilde:=195; +chars.latin_Aumlaut:=196; +chars.latin_Aring:=197; +chars.latin_AE:=198; +chars.latin_Ccedilla:=199; +chars.latin_Egrave:=200; +chars.latin_Eacute:=201; +chars.latin_Ecircumflex:=202; +chars.latin_Eumlaut:=203; +chars.latin_Igrave:=204; +chars.latin_Iacute:=205; +chars.latin_Icircumflex:=206; +chars.latin_Iumlaut:=207; +chars.latin_Dstroke:=208; +chars.latin_Ntilde:=209; +chars.latin_Ograve:=210; +chars.latin_Oacute:=211; +chars.latin_Ocircumflex:=212; +chars.latin_Otilde:=213; +chars.latin_Oumlaut:=214; +chars.latin_OE:=215; +chars.latin_Oslash:=216; +chars.latin_Ugrave:=217; +chars.latin_Uacute:=218; +chars.latin_Ucircumflex:=219; +chars.latin_Uumlaut:=220; +chars.latin_Yacute:=221; +chars.latin_Thorn:=222; +chars.latin_SS:=223; +chars.latin_agrave:=224; +chars.latin_aacute:=225; +chars.latin_acircumflex:=226; +chars.latin_atilde:=227; +chars.latin_aumlaut:=228; +chars.latin_aring:=229; +chars.latin_ae:=230; +chars.latin_ccedilla:=231; +chars.latin_egrave:=232; +chars.latin_eacute:=233; +chars.latin_ecircumflex:=234; +chars.latin_eumlaut:=235; +chars.latin_igrave:=236; +chars.latin_iacute:=237; +chars.latin_icircumflex:=238; +chars.latin_iumlaut:=239; +chars.latin_eth:=240; +chars.latin_ntilde:=241; +chars.latin_ograve:=242; +chars.latin_oacute:=243; +chars.latin_ocircumflex:=244; +chars.latin_otilde:=245; +chars.latin_oumlaut:=246; +chars.latin_oe:=247; +chars.latin_oslash:=248; +chars.latin_ugrave:=249; +chars.latin_uacute:=250; +chars.latin_ucircumflex:=251; +chars.latin_uumlaut:=252; +chars.latin_yacute:=253; +chars.latin_thorn:=254; +chars.latin_eszet:=255; diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf new file mode 100644 index 00000000000..07ab2fabc82 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf @@ -0,0 +1,130 @@ +%Boisik list for text fonts in TS1 encoding (unsupported) + +chars.latin_grave_capital:=0; +chars.latin_acute_capital:=1; +chars.latin_circumflex_capital:=2; +chars.latin_tilde_capital:=3; +chars.latin_umlaut_capital:=4; +chars.latin_hungarian_umlaut_capital:=5; +chars.latin_ring_capital:=6; +chars.latin_hacek_capital:=7; +chars.latin_breve_capital:=8; +chars.latin_macron_capital:=9; +chars.latin_dot_above_capital:=10; +chars.latin_cedilla_capital:=11; +chars.latin_ogonek:=12; +chars.sign_straight_quote_base:=13; +chars.sign_straight_quotes_base:=18; +chars.sign_twelvedash:=21; +chars.sign_themdash:=22; +chars.sign_compound_word_capital:=23; +chars.arrow_left:=24; +chars.arrow_right:=25; +chars.latin_tie:=26; +chars.latin_tie_capital:=27; +chars.latin_inverted_breve:=28; +chars.latin_inverted_breve_capital:=29; +chars.sign_compound_word_asc:=31; +chars.sign_blank_b:=32; +chars.sign_dolar:=36; +chars.sign_straight_quote:=39; +chars.math_asterisk:=42; +chars.sign_comma:=44; +chars.sign_double_hyphen:=45; +chars.sign_period:=46; +chars.sign_slash_frac:=47; +chars.numeral_zero:=48; +chars.numeral_one:=49; +chars.numeral_two:=50; +chars.numeral_three:=51; +chars.numeral_four:=52; +chars.numeral_five:=53; +chars.numeral_six:=54; +chars.numeral_seven:=55; +chars.numeral_eight:=56; +chars.numeral_nine:=57; +chars.math_angle_left:=60; +chars.math_minus:=61; +chars.math_angle_right:=62; +chars.sign_Mho:=77; +chars.math_circle_copy:=79; +chars.sign_Ohm:=87; +chars.sign_bracket_semantic_left:=91; +chars.sign_bracket_semantic_right:=93; +chars.arrow_up:=94; +chars.arrow_down:=95; +chars.sign_backprime:=96; +chars.sign_born:=98; +chars.sign_divorce:=99; +chars.sign_died:=100; +chars.sign_leaf:=108; +chars.sign_marriage:=109; +chars.sign_note:=110; +chars.sign_tilde_low:=126; +chars.sign_double_hyphenchar:=127; +chars.sign_breve:=128; +chars.sign_hacek:=129; +chars.sign_prime_double:=130; +chars.sign_backprime_double:=131; +chars.math_dag:=132; +chars.math_dagger:=133; +chars.math_vertical_double:=134; +chars.sign_permile:=135; +chars.math_bullet:=136; +chars.sign_centigrade:=137; +chars.sign_dollar_old:=138; +chars.sign_cent_old:=139; +chars.latin_f:=140; +chars.sign_cedi:=141; +chars.sign_won:=142; +chars.sign_naira:=143; +chars.sign_guarani:=144; +chars.sign_peso:=145; +chars.sign_lira:=146; +chars.sign_recipe:=147; +chars.sign_interrobang:=148; +chars.sign_gnaborretni :=149; +chars.sign_dong:=150; +chars.sign_trademark:=151; +chars.sign_pertenthousand:=152; +chars.sign_pilcrow:=153; +chars.sign_baht:=154; +chars.sign_numero:=155; +chars.sign_abzueglich:=156; +chars.sign_estimated:=157; +chars.math_circle_op:=158; +chars.sign_service:=159; +chars.sign_bracket_quill_left:=160; +chars.sign_bracket_quill_right:=161; +chars.sign_cent:=162; +chars.sign_pound:=163; +chars.sign_currency:=164; +chars.sign_yen:=165; +chars.sign_broken_bar:=166; +chars.math_section:=167; +chars.latin_umlaut:=168; +chars.sign_copyright:=169; +chars.latin_a_feminine:=170; +chars.sign_copyleft:=171; +chars.math_logical_not:=172; +chars.sign_published:=173; +chars.sign_registered:=174; +chars.latin_macron:=175; +chars.sign_degree:=176; +chars.math_plus_minus:=177; +chars.superscript_numeral_two:=178; +chars.superscript_numeral_three:=179; +chars.sign_prime:=180; +chars.text_greek_mu:=181; +chars.sign_paragraph:=182; +chars.sign_middle_dot:=183; +chars.sign_reference:=184; +chars.superscript_numeral_one:=185; +chars.latin_o_masculine:=186; +chars.sign_surd:=187; +chars.fraction_one_quarter:=188; +chars.fraction_one_half:=189; +chars.fraction_three_quarters:=190; +chars.sign_euro:=191; +chars.math_times:=214; +chars.math_division:=246; diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf new file mode 100644 index 00000000000..e9dc43d6e4d --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf @@ -0,0 +1,213 @@ +%Boisik list for extensible math font + +chars.math_sum_text:=80; +chars.math_sum_disp:=88; +chars.math_prod_text:=81; +chars.math_prod_disp:=89; +chars.math_coprod_text:=96; +chars.math_coprod_disp:=97; +chars.math_int_text:=82; +chars.math_int_disp:=90; +chars.math_oint_text:=72; +chars.math_oint_disp:=73; +chars.math_union_text:=83; +chars.math_union_disp:=91; +chars.math_intersection_text:=84; +chars.math_intersection_disp:=92; +chars.math_multiunion_text:=85; +chars.math_multiunion_disp:=93; +chars.math_squnion_text:=70; +chars.math_squnion_disp:=71; +chars.math_lattice_inf_text:=86; +chars.math_lattice_inf_disp:=94; +chars.math_lattice_sup_text:=87; +chars.math_lattice_sup_disp:=95; +chars.math_circle_dot_text:=74; +chars.math_circle_dot_disp:=75; +chars.math_circle_plus_text:=76; +chars.math_circle_plus_disp:=77; +chars.math_circle_times_text:=78; +chars.math_circle_times_disp:=79; +chars.math_curly_brace_left_big:=8; +chars.math_curly_brace_left_Big:=110; +chars.math_curly_brace_left_bigg:=26; +chars.math_curly_brace_left_Bigg:=40; +chars.math_curly_brace_left_top:=56; +chars.math_curly_brace_left_bot:=58; +chars.math_curly_brace_left_mid:=60; +chars.math_curly_brace_left_ext:=62; +chars.math_curly_brace_right_big:=9; +chars.math_curly_brace_right_Big:=111; +chars.math_curly_brace_right_bigg:=27; +chars.math_curly_brace_right_Bigg:=41; +chars.math_curly_brace_right_top:=57; +chars.math_curly_brace_right_bot:=59; +chars.math_curly_brace_right_mid:=61; +chars.math_curly_brace_right_ext:=128; +chars.math_parent_left_big:=0; +chars.math_parent_left_Big:=16; +chars.math_parent_left_bigg:=18; +chars.math_parent_left_Bigg:=32; +chars.math_parent_left_top:=48; +chars.math_parent_left_bot:=64; +chars.math_parent_left_mid:=66; +chars.math_parent_right_big:=1; +chars.math_parent_right_Big:=17; +chars.math_parent_right_bigg:=19; +chars.math_parent_right_Bigg:=33; +chars.math_parent_right_top:=49; +chars.math_parent_right_bot:=65; +chars.math_parent_right_mid:=67; +chars.math_accent_hat_wide:=98; +chars.math_accent_hat_wider:=99; +chars.math_accent_hat_widest:=100; +chars.math_accent_tilde_wide:=101; +chars.math_accent_tilde_wider:=102; +chars.math_accent_tilde_widest:=103; +chars.math_root_big:=112; +chars.math_root_Big:=113; +chars.math_root_bigg:=114; +chars.math_root_Bigg:=115; +chars.math_root_bottom:=116; +chars.math_root_mid:=117; +chars.math_root_top:=118; +chars.arrow_double_ext_top:=126; +chars.arrow_double_ext_mid:=119; +chars.arrow_double_ext_bot:=127; +chars.arrow_ext_top:=120; +chars.arrow_ext_mid:=63; +chars.arrow_ext_bot:=121; +chars.math_vertical_ext:=12; +chars.math_double_vertical_ext:=13; +chars.math_slash_big:=14; +chars.math_slash_Big:=46; +chars.math_slash_bigg:=30; +chars.math_slash_Bigg:=44; +chars.math_backslash_big:=15; +chars.math_backslash_Big:=47; +chars.math_backslash_bigg:=31; +chars.math_backslash_Bigg:=45; +chars.math_angle_left_big:=10; +chars.math_angle_left_Big:=68; +chars.math_angle_left_bigg:=28; +chars.math_angle_left_Bigg:=42; +chars.math_angle_right_big:=11; +chars.math_angle_right_Big:=69; +chars.math_angle_right_bigg:=29; +chars.math_angle_right_Bigg:=43; +chars.math_bracket_left_big:=2; +chars.math_bracket_left_Big:=104; +chars.math_bracket_left_bigg:=20; +chars.math_bracket_left_Bigg:=34; +chars.math_bracket_left_top:=50; +chars.math_bracket_left_mid:=54; +chars.math_bracket_left_bot:=52; +chars.math_bracket_right_big:=3; +chars.math_bracket_right_Big:=105; +chars.math_bracket_right_bigg:=21; +chars.math_bracket_right_Bigg:=35; +chars.math_bracket_right_top:=51; +chars.math_bracket_right_mid:=55; +chars.math_bracket_right_bot:=53; +chars.math_ceiling_left_big:=6; +chars.math_ceiling_left_Big:=108; +chars.math_ceiling_left_bigg:=24; +chars.math_ceiling_left_Bigg:=38; +chars.math_ceiling_right_big:=7; +chars.math_ceiling_right_Big:=109; +chars.math_ceiling_right_bigg:=25; +chars.math_ceiling_right_Bigg:=39; +chars.math_floor_left_big:=4; +chars.math_floor_left_Big:=106; +chars.math_floor_left_bigg:=22; +chars.math_floor_left_Bigg:=36; +chars.math_floor_right_big:=5; +chars.math_floor_right_Big:=107; +chars.math_floor_right_bigg:=23; +chars.math_floor_right_Bigg:=37; + +charlist chars.math_squnion_text: chars.math_squnion_disp; +charlist chars.math_oint_text: chars.math_oint_disp; +charlist chars.math_circle_dot_text: chars.math_circle_dot_disp; +charlist chars.math_circle_plus_text: chars.math_circle_plus_disp; +charlist chars.math_circle_times_text: chars.math_circle_times_disp; +charlist chars.math_sum_text: chars.math_sum_disp; +charlist chars.math_prod_text: chars.math_prod_disp; +charlist chars.math_int_text: chars.math_int_disp; +charlist chars.math_union_text: chars.math_union_disp; +charlist chars.math_multiunion_text: chars.math_multiunion_disp; +charlist chars.math_lattice_inf_text: chars.math_lattice_inf_disp; +charlist chars.math_lattice_sup_text: chars.math_lattice_sup_disp; +charlist chars.math_coprod_text: chars.math_coprod_disp; + +charlist chars.math_parent_left_big: + chars.math_parent_left_Big: chars.math_parent_left_bigg: chars.math_parent_left_Bigg: + chars.math_parent_left_top; % left parentheses +charlist chars.math_parent_right_big: + chars.math_parent_right_Big: chars.math_parent_right_bigg: chars.math_parent_right_Bigg: + chars.math_parent_right_top; % right parentheses +charlist chars.math_bracket_left_big: + chars.math_bracket_left_Big: chars.math_bracket_left_bigg: chars.math_bracket_left_Bigg: + chars.math_bracket_left_top; % left brackets +charlist chars.math_bracket_right_big: + chars.math_bracket_right_Big: chars.math_bracket_right_bigg: chars.math_bracket_right_Bigg: + chars.math_bracket_right_top; % right brackets +charlist chars.math_floor_left_big: + chars.math_floor_left_Big: chars.math_floor_left_bigg: chars.math_floor_left_Bigg: + chars.math_bracket_left_bot; % left floors +charlist chars.math_floor_right_big: + chars.math_floor_right_Big: chars.math_floor_right_bigg: chars.math_floor_right_Bigg: + chars.math_bracket_right_bot; % right floors +charlist chars.math_ceiling_left_big: + chars.math_ceiling_left_Big: chars.math_ceiling_left_bigg: chars.math_ceiling_left_Bigg: + chars.math_bracket_left_mid; % left ceilings +charlist chars.math_ceiling_right_big: + chars.math_ceiling_right_Big: chars.math_ceiling_right_bigg: chars.math_ceiling_right_Bigg: + chars.math_bracket_right_mid; % right ceilings +charlist chars.math_curly_brace_left_big: + chars.math_curly_brace_left_Big: chars.math_curly_brace_left_bigg: chars.math_curly_brace_left_Bigg: + chars.math_curly_brace_left_top; % left braces +charlist chars.math_curly_brace_right_big: + chars.math_curly_brace_right_Big: chars.math_curly_brace_right_bigg: chars.math_curly_brace_right_Bigg: + chars.math_curly_brace_right_top; % right braces +charlist chars.math_angle_left_big: + chars.math_angle_left_Big: chars.math_angle_left_bigg: chars.math_angle_left_Bigg; % left angle brackets +charlist chars.math_angle_right_big: + chars.math_angle_right_Big: chars.math_angle_right_bigg: chars.math_angle_right_Bigg; % right angle brackets +charlist chars.math_slash_big: + chars.math_slash_Big: chars.math_slash_bigg: chars.math_slash_Bigg; % slashes +charlist chars.math_backslash_big: + chars.math_backslash_Big: chars.math_backslash_bigg: chars.math_backslash_Bigg; % backslashes +charlist chars.math_root_big: + chars.math_root_Big: chars.math_root_bigg: chars.math_root_Bigg: + chars.math_root_bottom; % radical signs + +extensible chars.math_vertical_ext: 0,0,0,chars.math_vertical_ext; % vertical line +extensible chars.math_double_vertical_ext: 0,0,0,chars.math_double_vertical_ext; % double vertical line +extensible chars.math_parent_left_top: chars.math_parent_left_top,0,chars.math_parent_left_bot,chars.math_parent_left_mid; % left parenthesis +extensible chars.math_parent_right_top: chars.math_parent_right_top,0,chars.math_parent_right_bot,chars.math_parent_right_mid; % right parenthesis +extensible chars.math_bracket_left_top: chars.math_bracket_left_top,0,chars.math_bracket_left_bot,chars.math_bracket_left_mid; % left bracket +extensible chars.math_bracket_right_top: chars.math_bracket_right_top,0,chars.math_bracket_right_bot,chars.math_bracket_right_mid; % right bracket +extensible chars.math_bracket_left_bot: 0,0,chars.math_bracket_left_bot,chars.math_bracket_left_mid; % left floor bracket +extensible chars.math_bracket_right_bot: 0,0,chars.math_bracket_right_bot,chars.math_bracket_right_mid; % right floor bracket +extensible chars.math_bracket_left_mid: chars.math_bracket_left_top,0,0,chars.math_bracket_left_mid; % left ceiling bracket +extensible chars.math_bracket_right_mid: chars.math_bracket_right_top,0,0,chars.math_bracket_right_mid; % right ceiling bracket +extensible chars.math_curly_brace_left_top: chars.math_curly_brace_left_top,chars.math_curly_brace_left_mid,chars.math_curly_brace_left_bot,chars.math_curly_brace_left_ext; % left brace +extensible chars.math_curly_brace_right_top: chars.math_curly_brace_right_top,chars.math_curly_brace_right_mid,chars.math_curly_brace_right_bot,chars.math_curly_brace_right_ext; % right brace +extensible chars.math_curly_brace_left_mid: 0,0,0,chars.arrow_ext_mid; % arrow extension modules only +extensible chars.math_curly_brace_right_mid: 0,0,0,chars.arrow_double_ext_mid; % double arrow extension modules only +extensible chars.math_curly_brace_left_ext: 0,0,0,chars.math_curly_brace_left_ext; % left brace extension modules only +extensible chars.math_curly_brace_right_ext: 0,0,0,chars.math_curly_brace_right_ext; % right brace extension modules only +extensible chars.arrow_ext_mid: chars.arrow_ext_top,0,chars.arrow_ext_bot,chars.arrow_ext_mid; % updownarrow +extensible chars.math_parent_left_mid: 0,0,0,chars.math_parent_left_mid; % left parenthesis extension modules only +extensible chars.math_parent_right_mid: 0,0,0,chars.math_parent_right_mid; % right parenthesis extension modules only +extensible chars.math_root_bottom: chars.math_root_top,0,chars.math_root_bottom,chars.math_root_mid; % radical sign +extensible chars.arrow_double_ext_mid: chars.arrow_double_ext_top,0,chars.arrow_double_ext_bot,chars.arrow_double_ext_mid; % double updownarrow +extensible chars.arrow_ext_top: chars.arrow_ext_top,0,0,chars.arrow_ext_mid; % uparrow +extensible chars.arrow_ext_bot: 0,0,chars.arrow_ext_bot,chars.arrow_ext_mid; % downarrow +extensible chars.arrow_double_ext_top: chars.arrow_double_ext_top,0,0,chars.arrow_double_ext_mid; % double uparrow +extensible chars.arrow_double_ext_bot: 0,0,chars.arrow_double_ext_bot,chars.arrow_double_ext_mid; % double downarrow +%extensible oct"072": oct"070",0,oct"072",oct"076"; % sharp left parenthesis +%extensible oct"073": oct"071",0,oct"073",oct"076"; % sharp right parenthesis +%extensible oct"100": oct"070",0,oct"073",oct"076"; % left moustache +%extensible oct"101": oct"071",0,oct"072",oct"076"; % right moustache diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf new file mode 100644 index 00000000000..88f6818de3d --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-lc.mf @@ -0,0 +1,65 @@ +%Boisik list for text fonts (lowercase) + +chars.latin_a:=ASCII"a"; +chars.latin_aacute:=oct"341"; +chars.latin_agrave:=oct"270"; +chars.latin_aumlaut:=oct"344"; +chars.latin_b:=ASCII"b"; +chars.latin_c:=ASCII"c"; +chars.latin_ccaron:=oct"350"; +chars.latin_d:=ASCII"d"; +chars.latin_dcaron=oct"357"; +chars.latin_e:=ASCII"e"; +chars.latin_eacute:=oct"351"; +chars.latin_ecaron:=oct"354"; +chars.latin_f:=ASCII"f"; +chars.latin_g:=ASCII"g"; +chars.latin_h:=ASCII"h"; +chars.latin_dotless_i:=oct"020"; +chars.latin_i:=ASCII"i"; +chars.latin_iacute:=oct"355"; +chars.latin_dotless_j:=oct"021"; +chars.latin_j:=ASCII"j"; +chars.latin_k:=ASCII"k"; +chars.latin_l:=ASCII"l"; +chars.latin_lcaron:=oct"265"; +chars.latin_lacute:=oct"345"; +chars.latin_m:=ASCII"m"; +chars.latin_n:=ASCII"n"; +chars.latin_ncaron:=oct"362"; +chars.latin_o:=ASCII"o"; +chars.latin_oacute:=oct"363"; +chars.latin_oumlaut:=oct"366"; +chars.latin_ocircumflex:=oct"364"; +chars.latin_p:=ASCII"p"; +chars.latin_q:=ASCII"q"; +chars.latin_r:=ASCII"r"; +chars.latin_rcaron:=oct"370"; +chars.latin_racute:=oct"340"; +chars.latin_s:=ASCII"s"; +chars.latin_scaron:=oct"271"; +chars.latin_t:=ASCII"t"; +chars.latin_tcaron:=oct"273"; +chars.latin_u:=ASCII"u"; +chars.latin_uring:=oct"371"; +chars.latin_uacute:=oct"372"; +chars.latin_uumlaut:=oct"374"; +chars.latin_v:=ASCII"v"; +chars.latin_w:=ASCII"w"; +chars.latin_x:=ASCII"x"; +chars.latin_y:=ASCII"y"; +chars.latin_yacute:=oct"375"; +chars.latin_z:=ASCII"z"; +chars.latin_zcaron:=oct"276"; +chars.latin_ae:=26; +chars.latin_oe:=27; +chars.latin_eszet:=25; +chars.latin_oslash:=oct"034"; +chars.latin_ff:=oct"013"; +chars.latin_fi:=oct"014"; +chars.latin_fl:=oct"015"; +chars.latin_ffi:=oct"016"; +chars.latin_ffl:=oct"017"; +chars.latin_flcaron:=128; +chars.latin_flacute:=129; +chars.latin_fj:=130; diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf new file mode 100644 index 00000000000..9cc7599a7ad --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf @@ -0,0 +1,33 @@ +%Boisik list for math font (upright symbols) + +chars.harpoon_left_up:=40; +chars.harpoon_left_down:=41; +chars.harpoon_right_up:=42; +chars.harpoon_right_down:=43; +chars.arrow_hook_left:=44; +chars.arrow_hook_right:=45; +chars.math_triangle_right:=46; +chars.math_triangle_left:=47; +chars.numeral_zero:=48; +chars.numeral_one:=49; +chars.numeral_two:=50; +chars.numeral_three:=51; +chars.numeral_four:=52; +chars.numeral_five:=53; +chars.numeral_six:=54; +chars.numeral_seven:=55; +chars.numeral_eight:=56; +chars.numeral_nine:=57; +chars.sign_period:=58; +chars.sign_comma:=59; +chars.math_less:=60; +chars.math_virgule:=61; +chars.math_greater:=62; +chars.math_five_star:=63; + +chars.symbol_flat:=91; +chars.symbol_natural:=92; +chars.symbol_sharp:=93; +chars.symbol_smile:=94; +chars.symbol_frown:=95; + diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf new file mode 100644 index 00000000000..35e3e4cf6e0 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf @@ -0,0 +1,103 @@ +%Boisik list for math font (slanted symbols) + +chars.greek_Gamma:=0; +chars.greek_Delta:=1; +chars.greek_Theta:=2; +chars.greek_Lambda:=3; +chars.greek_Xi:=4; +chars.greek_Pi:=5; +chars.greek_Sigma:=6; +chars.greek_Upsilon:=7; +chars.greek_Phi:=8; +chars.greek_Psi:=9; +chars.greek_Omega:=10; +chars.greek_alpha:=11; +chars.greek_beta:=12; chars.greek_beta_curved:=12+128; +chars.greek_gamma:=13; chars.greek_gamma_curved:=13+128; +chars.greek_delta:=14; +chars.greek_epsilon:=15; +chars.greek_zeta:=16; +chars.greek_eta:=17; chars.greek_eta_curved:=17+128; +chars.greek_theta:=18; +chars.greek_iota:=19; +chars.greek_kappa:=20; +chars.greek_lambda:=21; chars.greek_lambda_curved:=21+128; +chars.greek_mu:=22; chars.greek_mu_curved:=22+128; +chars.greek_nu:=23; +chars.greek_xi:=24; +chars.greek_pi:=25; chars.greek_pi_curved:=25+128; +chars.greek_rho:=26; +chars.greek_sigma:=27; chars.greek_sigma_curved:=27+128; +chars.greek_tau:=28; chars.greek_tau_curved:=28+128; +chars.greek_upsilon:=29; chars.greek_upsilon_curved:=29+128; +chars.greek_phi:=30; chars.greek_phi_curved:=30+128; +chars.greek_chi:=31; +chars.greek_psi:=32; chars.greek_psi_curved:=32+128; +chars.greek_omega:=33; +chars.greek_varepsilon:=34; +chars.greek_vartheta:=35; +chars.greek_varpi:=36; chars.greek_varpi_curved:=36+128; +chars.greek_varrho:=37; +chars.greek_varsigma:=38; +chars.greek_varphi:=39; chars.greek_varphi_curved:=39+128; + +chars.math_partial:=64; +chars.latin_A:=ASCII"A"; +chars.latin_B:=ASCII"B"; +chars.latin_C:=ASCII"C"; +chars.latin_D:=ASCII"D"; +chars.latin_E:=ASCII"E"; +chars.latin_F:=ASCII"F"; +chars.latin_G:=ASCII"G"; +chars.latin_H:=ASCII"H"; +chars.latin_I:=ASCII"I"; +chars.latin_J:=ASCII"J"; +chars.latin_K:=ASCII"K"; +chars.latin_L:=ASCII"L"; +chars.latin_M:=ASCII"M"; +chars.latin_N:=ASCII"N"; +chars.latin_O:=ASCII"O"; +chars.latin_P:=ASCII"P"; +chars.latin_Q:=ASCII"Q"; +chars.latin_R:=ASCII"R"; +chars.latin_S:=ASCII"S"; +chars.latin_T:=ASCII"T"; +chars.latin_U:=ASCII"U"; +chars.latin_V:=ASCII"V"; +chars.latin_W:=ASCII"W"; +chars.latin_X:=ASCII"X"; +chars.latin_Y:=ASCII"Y"; +chars.latin_Z:=ASCII"Z"; +chars.math_ell:=96; +chars.latin_a:=ASCII"a"; +chars.latin_b:=ASCII"b"; +chars.latin_c:=ASCII"c"; +chars.latin_d:=ASCII"d"; +chars.latin_e:=ASCII"e"; +chars.latin_f:=ASCII"f"; +chars.latin_g:=ASCII"g"; +chars.latin_h:=ASCII"h"; +chars.latin_i:=ASCII"i"; +chars.latin_j:=ASCII"j"; +chars.latin_k:=ASCII"k"; +chars.latin_l:=ASCII"l"; +chars.latin_m:=ASCII"m"; +chars.latin_n:=ASCII"n"; +chars.latin_o:=ASCII"o"; +chars.latin_p:=ASCII"p"; +chars.latin_q:=ASCII"q"; +chars.latin_r:=ASCII"r"; +chars.latin_s:=ASCII"s"; +chars.latin_t:=ASCII"t"; +chars.latin_u:=ASCII"u"; +chars.latin_v:=ASCII"v"; +chars.latin_w:=ASCII"w"; +chars.latin_x:=ASCII"x"; +chars.latin_y:=ASCII"y"; +chars.latin_z:=ASCII"z"; +chars.latin_dotless_i:=123; +chars.latin_dotless_j:=124; +chars.math_weierstrass_p:=125; +chars.math_accent_arrow:=126; +chars.math_accent_tie:=127; + diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf new file mode 100644 index 00000000000..cc19c4017e0 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sc.mf @@ -0,0 +1,57 @@ +%Boisik list for text fonts (small caps) + +chars.latin_A:=ASCII"a"; +chars.latin_Aacute:=oct"341"; +chars.latin_Agrave:=oct"270"; +chars.latin_Aumlaut:=oct"344"; +chars.latin_B:=ASCII"b"; +chars.latin_C:=ASCII"c"; +chars.latin_Ccaron:=oct"350"; +chars.latin_D:=ASCII"d"; +chars.latin_Dcaron=oct"357"; +chars.latin_E:=ASCII"e"; +chars.latin_Eacute:=oct"351"; +chars.latin_Ecaron:=oct"354"; +chars.latin_F:=ASCII"f"; +chars.latin_G:=ASCII"g"; +chars.latin_H:=ASCII"h"; +chars.latin_I_dotless:=oct"020"; +chars.latin_I:=ASCII"i"; +chars.latin_Iacute:=oct"355"; +chars.latin_J_dotless:=oct"021"; +chars.latin_J:=ASCII"j"; +chars.latin_K:=ASCII"k"; +chars.latin_L:=ASCII"l"; +chars.latin_Lcaron:=oct"265"; +chars.latin_Lacute:=oct"345"; +chars.latin_M:=ASCII"m"; +chars.latin_N:=ASCII"n"; +chars.latin_Ncaron:=oct"362"; +chars.latin_O:=ASCII"o"; +chars.latin_Oacute:=oct"363"; +chars.latin_Oumlaut:=oct"366"; +chars.latin_Ocircumflex:=oct"364"; +chars.latin_P:=ASCII"p"; +chars.latin_Q:=ASCII"q"; +chars.latin_R:=ASCII"r"; +chars.latin_Rcaron:=oct"370"; +chars.latin_Racute:=oct"340"; +chars.latin_S:=ASCII"s"; +chars.latin_Scaron:=oct"271"; +chars.latin_T:=ASCII"t"; +chars.latin_Tcaron:=oct"273"; +chars.latin_U:=ASCII"u"; +chars.latin_Uring:=oct"371"; +chars.latin_Uacute:=oct"372"; +chars.latin_Uumlaut:=oct"374"; +chars.latin_V:=ASCII"v"; +chars.latin_W:=ASCII"w"; +chars.latin_X:=ASCII"x"; +chars.latin_Y:=ASCII"y"; +chars.latin_Yacute:=oct"375"; +chars.latin_Z:=ASCII"z"; +chars.latin_Zcaron:=oct"276"; +chars.latin_AE:=26; +chars.latin_OE:=27; +chars.latin_SS:=25; +chars.latin_Oslash:=oct"034"; diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf new file mode 100644 index 00000000000..9d7568ef613 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf @@ -0,0 +1,130 @@ +%Boisik list for math symbol font + +chars.math_minus:=0; +chars.math_cdot:=1; +chars.math_times:=2; +chars.math_asterisk:=3; +chars.math_division:=4; +chars.math_diamond_op:=5; +chars.math_plus_minus:=6; +chars.math_minus_plus:=7; +chars.math_circle_plus:=8; +chars.math_circle_minus:=9; +chars.math_circle_times:=10; +chars.math_circle_divide:=11; +chars.math_circle_dot:=12; +chars.math_circle_copy:=13; +chars.math_circle_op:=14; +chars.math_bullet:=15; +chars.math_hardy:=16; +chars.math_equivalence:=17; +chars.math_subset_eq:=18; +chars.math_superset_eq:=19; +chars.math_less_eq:=20; +chars.math_greater_eq:=21; +chars.math_precedes_eq:=22; +chars.math_follows_eq:=23; +chars.math_sim:=24; +chars.math_approx:=25; +chars.math_subset:=26; +chars.math_superset:=27; +chars.math_much_less:=28; +chars.math_much_greater:=29; +chars.math_precedes:=30; +chars.math_follows:=31; +chars.arrow_left:=32; +chars.arrow_right:=33; +chars.arrow_up:=34; +chars.arrow_down:=35; +chars.arrow_left_right:=36; +chars.arrow_NE:=37; +chars.arrow_SE:=38; +chars.math_sim_eq:=39; +chars.arrow_double_left:=40; +chars.arrow_double_right:=41; +chars.arrow_double_up:=42; +chars.arrow_double_down:=43; +chars.arrow_double_left_right:=44; +chars.arrow_NW:=45; +chars.arrow_SW:=46; +chars.math_propto:=47; +chars.math_prime:=48; +chars.math_infinity:=49; +chars.math_element:=50; +chars.math_ownership:=51; +chars.math_triangle_up:=52; +chars.math_triangle_down:=53; +chars.math_zero_slash:=54; +chars.math_maps_to:=55; +chars.math_forall:=56; +chars.math_exists:=57; +chars.math_logical_not:=58; +chars.math_empty_set:=59; +chars.math_Re:=60; +chars.math_Im:=61; +chars.math_lattice_top:=62; +chars.math_lattice_bottom:=63; +chars.math_aleph:=64; +chars.cal_A:=65; +chars.cal_B:=66; +chars.cal_C:=67; +chars.cal_D:=68; +chars.cal_E:=69; +chars.cal_F:=70; +chars.cal_G:=71; +chars.cal_H:=72; +chars.cal_I:=73; +chars.cal_J:=74; +chars.cal_K:=75; +chars.cal_L:=76; +chars.cal_M:=77; +chars.cal_N:=78; +chars.cal_O:=79; +chars.cal_P:=80; +chars.cal_Q:=81; +chars.cal_R:=82; +chars.cal_S:=83; +chars.cal_T:=84; +chars.cal_U:=85; +chars.cal_V:=86; +chars.cal_W:=87; +chars.cal_X:=88; +chars.cal_Y:=89; +chars.cal_Z:=90; +chars.math_union:=91; +chars.math_intersection:=92; +chars.math_multiunion:=93; +chars.math_logand:=94; +chars.math_logor:=95; +chars.math_lattice_left:=96; +chars.math_lattice_right:=97; +chars.math_floor_left:=98; +chars.math_floor_right:=99; +chars.math_ceiling_left:=100; +chars.math_ceiling_right:=101; +chars.math_curly_brace_left:=102; +chars.math_curly_brace_right:=103; +chars.math_angle_left:=104; +chars.math_angle_right:=105; +chars.math_vertical:=106; +chars.math_vertical_double:=107; +chars.arrow_up_down:=108; +chars.arrow_double_up_down:=109; +chars.math_backslash:=110; +chars.math_wreath:=111; +chars.math_root:=112; +chars.math_coprod:=113; +chars.math_nabla:=114; +chars.math_int:=115; +chars.math_squnion:=116; +chars.math_sqintersection:=117; +chars.math_sqsubset_eq:=118; +chars.math_sqsuperset_eq:=119; +chars.math_section:=120; +chars.math_dag:=121; +chars.math_dagger:=122; +chars.sign_paragraph:=123; +chars.sign_club_suit:=124; +chars.sign_diamond_suit:=125; +chars.sign_heart_suit:=126; +chars.sign_spade_suit:=127; diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf new file mode 100644 index 00000000000..6ff299126c9 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-uc.mf @@ -0,0 +1,122 @@ +%Boisik list for text fonts (uppercase) + +chars.sign_hyphen:=ASCII"-"; +chars.sign_hyphen_alt:=oct"234"; +chars.sign_plus:=ASCII"+"; +chars.sign_endash:=oct"173"; +chars.sign_emdash:=oct"174"; +chars.sign_parent_left:=ASCII"("; +chars.sign_parent_right:=ASCII")"; +chars.sign_bracket_left:=ASCII"["; +chars.sign_bracket_right:=ASCII"]"; +chars.sign_quotes:=34; +chars.sign_opening_quotes:=oct"134"; +chars.sign_czech_quotes:=254; +chars.sign_czech_closing_quotes:=255; +chars.sign_french_quotes_left:=158; +chars.sign_french_quotes_right:=159; +chars.sign_aposthrope:=ASCII"'"; +chars.sign_aposthrope_reverse:=ASCII"`"; +chars.sign_comma:=ASCII","; +chars.sign_period:=ASCII"."; +chars.sign_colon:=ASCII":"; +chars.sign_semicolon:=ASCII";"; +chars.sign_exclamation:=ASCII"!"; +chars.sign_spanish_shriek:=oct"074"; +chars.sign_spanish_query:=oct"076"; +chars.sign_equals:=ASCII"="; +chars.sign_slash:=ASCII"/"; +chars.sign_asterisk:=ASCII"*"; +chars.sign_hash:=ASCII"#"; +chars.sign_percent:=ASCII"%"; +chars.sign_permile:=141; +chars.sign_query:=ASCII"?"; +chars.sign_ampersand:=ASCII"&"; +chars.sign_at:=ASCII"@"; +chars.numeral_zero:=ASCII"0"; +chars.numeral_one:=ASCII"1"; +chars.numeral_two:=ASCII"2"; +chars.numeral_three:=ASCII"3"; +chars.numeral_four:=ASCII"4"; +chars.numeral_five:=ASCII"5"; +chars.numeral_six:=ASCII"6"; +chars.numeral_seven:=ASCII"7"; +chars.numeral_eight:=ASCII"8"; +chars.numeral_nine:=ASCII"9"; +chars.latin_A:=ASCII"A"; +chars.latin_Aacute:=oct"301"; +chars.latin_Agrave:=oct"230"; +chars.latin_Aumlaut:=oct"304"; +chars.latin_B:=ASCII"B"; +chars.latin_C:=ASCII"C"; +chars.latin_Ccaron:=oct"310"; +chars.latin_D:=ASCII"D"; +chars.latin_Dcaron:=oct"317"; +chars.latin_E:=ASCII"E"; +chars.latin_Eacute:=oct"311"; +chars.latin_Ecaron:=oct"314"; +chars.latin_F:=ASCII"F"; +chars.latin_G:=ASCII"G"; +chars.latin_H:=ASCII"H"; +chars.latin_I:=ASCII"I"; +chars.latin_Iacute:=oct"315"; +chars.latin_J:=ASCII"J"; +chars.latin_K:=ASCII"K"; +chars.latin_L:=ASCII"L"; +chars.latin_Lacute:=oct"305"; +chars.latin_Lcaron:=oct"245"; +chars.latin_M:=ASCII"M"; +chars.latin_N:=ASCII"N"; +chars.latin_Ncaron:=oct"322"; +chars.latin_O:=ASCII"O"; +chars.latin_Oacute:=oct"323"; +chars.latin_Oumlaut:=oct"326"; +chars.latin_Ocircumflex:=oct"324"; +chars.latin_P:=ASCII"P"; +chars.latin_Q:=ASCII"Q"; +chars.latin_R:=ASCII"R"; +chars.latin_Racute:=oct"300"; +chars.latin_Rcaron:=oct"330"; +chars.latin_S:=ASCII"S"; +chars.latin_Scaron:=oct"251"; +chars.latin_T:=ASCII"T"; +chars.latin_Tcaron:=oct"253"; +chars.latin_U:=ASCII"U"; +chars.latin_Uacute:=oct"332"; +chars.latin_Uring:=oct"331"; +chars.latin_Uumlaut:=oct"334"; +chars.latin_V:=ASCII"V"; +chars.latin_W:=ASCII"W"; +chars.latin_X:=ASCII"X"; +chars.latin_Y:=ASCII"Y"; +chars.latin_Yacute:=oct"335"; +chars.latin_Z:=ASCII"Z"; +chars.latin_Zcaron:=oct"256"; +chars.latin_AE:=29; +chars.latin_OE:=30; +chars.latin_grave:=18; +chars.latin_acute:=19; +chars.latin_hacek:=20; +chars.latin_circumflex:=oct"136"; +chars.latin_breve:=21; +chars.latin_macron:=22; +chars.latin_ring:=23; +chars.latin_dot_above:=95; +chars.latin_umlaut:=127; +chars.latin_tilde:=126; +chars.latin_ogonek:=157; +chars.latin_cedilla:=24; +chars.latin_hungarian_umlaut:=125; +chars.polish_cross:=oct"040"; +chars.latin_Oslash:=oct"037"; +chars.greek_Gamma:=0; +chars.greek_Delta:=1; +chars.greek_Theta:=2; +chars.greek_Lambda:=3; +chars.greek_Xi:=4; +chars.greek_Pi:=5; +chars.greek_Sigma:=6; +chars.greek_Upsilon:=7; +chars.greek_Phi:=8; +chars.greek_Psi:=9; +chars.greek_Omega:=10; diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf new file mode 100644 index 00000000000..3221329b278 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf @@ -0,0 +1,26 @@ +%Boisik driver file for math symbols and letters +mode_setup; font_setup; + +let bskboundary=endinput; +numeric chars[]; +input bsklist-mi; +input bsksymbols; +input bskletters-o; +input bskletters-r; +input bskletters-i; + +%Non-slanted characters +save chars; numeric chars[]; +slant:=mono_charic#:=0; +currenttransform:=identity yscaled aspect_ratio scaled granularity; +let bskboundary=relax; +input bsklist-mi-up; +input bsksymbols; +input bskletters-r; + +font_normal_space 5u#; +font_normal_stretch 3u#; font_normal_shrink 2u#; +font_quad 15u#; +font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf new file mode 100644 index 00000000000..da66c25853d --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf @@ -0,0 +1,17 @@ +%Boisik driver file for math symbols +mode_setup; font_setup; + +input bsklist-sy; +input bskletters-o; +font_slant slant; + +slant:=0; +currenttransform:=identity yscaled aspect_ratio scaled granularity; +input bsksymbols; + +font_normal_space 5u#; +font_normal_stretch 3u#; font_normal_shrink 2u#; +font_quad 15u#; + font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf new file mode 100644 index 00000000000..b8d892193d1 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf @@ -0,0 +1,69 @@ +% Boisik Math Italic 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKMI"; font_size 10pt#; + +u#:=18/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=6/36pt#; % diameter of rounded corners +hair#:=8/36pt#; % lowercase hairline breadth +stem#:=20/36pt#; % lowercase stem breadth +curve#:=23/36pt#; % lowercase curve breadth +like_hair#:=10/36pt#; +like_stem#:=22/36pt#; +like_curve#:=26/36pt#; +ess#:=24/36pt#; % breadth in middle of lowercase s +dot_size#:=25/36pt#; % diameter of dots +cap_hair#:=10/36pt#; % uppercase hairline breadth +alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth +cap_stem#:=23/36pt#; % uppercase stem breadth +cap_curve#:=25/36pt#; % uppercase curve breadth +like_cap_hair#:=12/36pt#; +like_cap_stem#:=26/36pt#; +like_cap_curve#:=30/36pt#; +cap_ess#:=28/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=23/36pt#; % protrusion of lowercase serifs +cap_jut#:=28/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=9/36pt#; % vertical diameter of hairlines +bar#:=9/36pt#; % lowercase bar thickness +cap_bar#:=9/36pt#; % uppercase bar thickness +serif_drop#:=12/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=.2; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=true; % should math-mode spacing be used? + +generate bskmath % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf b/Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf new file mode 100644 index 00000000000..1a544e3ac00 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskr10-T1.mf @@ -0,0 +1,82 @@ +% Boisik Roman 10 point with T1 encoding (unsupported) +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRT1"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +mode_setup; font_setup; + +input bsklist-T1; + +input bskletters-r; +input bskletters-o; +input bsksymbols; + +font_normal_space 5u#; +font_normal_stretch 3u#; font_normal_shrink 2u#; +font_quad 15u#; + font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf new file mode 100644 index 00000000000..1233878455c --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskr10-TS1.mf @@ -0,0 +1,82 @@ +% Boisik Roman 10 point Text Companion (TS1 encoding) (unsupported) +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRTC"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +mode_setup; font_setup; + +input bsklist-TS1; + +input bskletters-r; +input bskletters-o; +input bsksymbols; + +font_normal_space 5u#; +font_normal_stretch 3u#; font_normal_shrink 2u#; +font_quad 15u#; + font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskr10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskr10.mf new file mode 100644 index 00000000000..29605c265a9 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskr10.mf @@ -0,0 +1,69 @@ +% Boisik Roman 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKR"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf new file mode 100644 index 00000000000..2a9c0c6ff3b --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf @@ -0,0 +1,70 @@ +% Boisik Roman Bold 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRB"; font_size 10pt#; + +u#:=24/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +Acc_height#:=300/36pt#; % height of accented caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=90/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=9/36pt#; % diameter of rounded corners +hair#:=20/36pt#; % lowercase hairline breadth +stem#:=37/36pt#; % lowercase stem breadth +curve#:=45/36pt#; % lowercase curve breadth +like_hair#:=20/36pt#; +like_stem#:=37/36pt#; +like_curve#:=45/36pt#; +ess#:=39/36pt#; % breadth in middle of lowercase s +dot_size#:=46/36pt#; % diameter of dots +cap_hair#:=21/36pt#; % uppercase hairline breadth +alt_cap_hair#:=23/36pt#; % alternative uppercase hairline breadth +cap_stem#:=45/36pt#; % uppercase stem breadth +cap_curve#:=53/36pt#; % uppercase curve breadth +like_cap_hair#:=21/36pt#; +like_cap_stem#:=45/36pt#; +like_cap_curve#:=53/36pt#; +cap_ess#:=46/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.6pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=20/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf new file mode 100644 index 00000000000..418ee624492 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrc10.mf @@ -0,0 +1,69 @@ +% Boisik Roman Condensed 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRC"; font_size 10pt#; + +u#:=.85*20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf new file mode 100644 index 00000000000..42fc20b162f --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrcb10.mf @@ -0,0 +1,69 @@ +% Boisik Roman Condensed Bold 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRCB"; font_size 10pt#; + +u#:=.85*22/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=12/36pt#; % lowercase hairline breadth +stem#:=30/36pt#; % lowercase stem breadth +curve#:=38/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=40/36pt#; % diameter of dots +cap_hair#:=14/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=38/36pt#; % uppercase stem breadth +cap_curve#:=46/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf new file mode 100644 index 00000000000..04a30cd5ee6 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrf10.mf @@ -0,0 +1,69 @@ +% Boisik Roman Figural 10 point (new-style figures) +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRF"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=0pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=false; %no medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf new file mode 100644 index 00000000000..d0b1035c762 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrl10.mf @@ -0,0 +1,69 @@ +% Boisik Roman Light 10 point (parameters from bski10) +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRL"; font_size 10pt#; + +u#:=17/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=6/36pt#; % diameter of rounded corners +hair#:=8/36pt#; % lowercase hairline breadth +stem#:=20/36pt#; % lowercase stem breadth +curve#:=23/36pt#; % lowercase curve breadth +like_hair#:=10/36pt#; +like_stem#:=22/36pt#; +like_curve#:=26/36pt#; +ess#:=24/36pt#; % breadth in middle of lowercase s +dot_size#:=25/36pt#; % diameter of dots +cap_hair#:=10/36pt#; % uppercase hairline breadth +alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth +cap_stem#:=23/36pt#; % uppercase stem breadth +cap_curve#:=25/36pt#; % uppercase curve breadth +like_cap_hair#:=12/36pt#; +like_cap_stem#:=26/36pt#; +like_cap_curve#:=30/36pt#; +cap_ess#:=28/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=23/36pt#; % protrusion of lowercase serifs +cap_jut#:=28/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=9/36pt#; % vertical diameter of hairlines +bar#:=9/36pt#; % lowercase bar thickness +cap_bar#:=9/36pt#; % uppercase bar thickness +serif_drop#:=12/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf new file mode 100644 index 00000000000..727ea02cc18 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrol10.mf @@ -0,0 +1,70 @@ +% Boisik Roman Outline 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKROL"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +bsk_outline#:=.1pt#; +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf new file mode 100644 index 00000000000..2685c40d298 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf @@ -0,0 +1,19 @@ +%Boisik driver file for roman fonts +mode_setup; font_setup; + +input bsklist-lc; +input bsklist-uc; +chars.sign_dolar:=ASCII"$"; + +input bskletters-r; +input bskletters-o; +input bsksymbols; + +input bskligtab; + +font_normal_space 5u#; +font_normal_stretch 3u#; font_normal_shrink 2u#; +font_quad 15u#; + font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf new file mode 100644 index 00000000000..e5326a8e5f0 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrsb10.mf @@ -0,0 +1,69 @@ +% Boisik Roman Semibold 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRSB"; font_size 10pt#; + +u#:=22/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=12/36pt#; % lowercase hairline breadth +stem#:=30/36pt#; % lowercase stem breadth +curve#:=38/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=40/36pt#; % diameter of dots +cap_hair#:=14/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=38/36pt#; % uppercase stem breadth +cap_curve#:=46/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf new file mode 100644 index 00000000000..be81bb76f13 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrsl10.mf @@ -0,0 +1,70 @@ +% Boisik Roman Slanted 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKR"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +flare#:=33/36pt#; % diameter of bulbs or breadth of terminals +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=.15; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf new file mode 100644 index 00000000000..ca6797f06c6 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bskrw10.mf @@ -0,0 +1,70 @@ +% Boisik Roman Fixed Width 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKRW"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +flare#:=33/36pt#; % diameter of bulbs or breadth of terminals +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=38/36pt#; +like_cap_curve#:=46/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=true; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=true; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bskroman % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksc.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksc.mf new file mode 100644 index 00000000000..43a5f7ad9a8 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsksc.mf @@ -0,0 +1,38 @@ +%Boisik driver file for small caps fonts +mode_setup; font_setup; + +input bsklist-uc; +chars.sign_dolar:=ASCII"$"; +chars.arrow_up:=oct"013"; +chars.arrow_down:=oct"014"; +chars.math_less:=oct"015"; +chars.math_greater:=oct"017"; + +input bskletters-r; +input bskletters-o; +input bsksymbols; + +save chars; numeric chars[]; + +input bsklist-sc; + +save Acc_height; +forsuffixes $= u, width_adj, cap_serif_fit, letter_fit, + body_height, cap_height, Acc_height, x_height, bar_height, comma_depth, com_height, + flare, cap_hair, alt_cap_hair, stem, cap_stem, cap_curve, like_cap_hair, like_cap_stem, like_cap_curve, + cap_jut, beak_jut, beak, slab, cap_bar, + o, apex_o: if known lower.$.#: $.#:=lower.$.#; fi endfor +if known lower.fudge: fudge:=lower.fudge; fi; +font_setup; + +input bskletters-r; + +input bsklist-uc; +input bskligtab-sc; + +font_normal_space 5.5u#; +font_normal_stretch 3u#; font_normal_shrink 1.5u#; +font_quad 15u#; + font_extra_space 2u#; +font_x_height 159/36pt#; +bye. diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf new file mode 100644 index 00000000000..77c8d666221 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsksc10.mf @@ -0,0 +1,70 @@ +% Boisik Small Caps 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSSC"; font_size 10pt#; + +u#:=20/36pt#; lower.u#:=15/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; lower.body_height#:=200/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; lower.cap_height#:=185/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; lower.x_height#:=119/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; lower.bar_height#:=75/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; lower.comma_depth#:=55/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; lower.com_height#:=101/36pt#; %height of B bar +lower.Acc_height#:=255/36pt#; + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=24/36pt#; % lowercase stem breadth +curve#:=27/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=30/36pt#; +like_curve#:=38/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; lower.cap_hair#:=10/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; lower.alt_cap_hair#:=13/36pt#; % alternative uppercase hairline breadth +cap_stem#:=30/36pt#; lower.cap_stem#:=25/36pt#; % uppercase stem breadth +cap_curve#:=34/36pt#; lower.cap_curve#:=28/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; lower.like_cap_hair#:=12.5/36pt#; +like_cap_stem#:=38/36pt#; lower.like_cap_stem#:=32/36pt#; +like_cap_curve#:=46/36pt#; lower.like_cap_curve#:=38/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=25/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; lower.cap_jut#:=21/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; lower.beak#:=58/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; lower.cap_bar#:=9.5/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; lower.o#:=3/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; lower.apex_o#:=5/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=false; % should math-mode spacing be used? + +generate bsksc % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf new file mode 100644 index 00000000000..67d243f3407 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf @@ -0,0 +1,89 @@ +% Boisik Math Symbols 10 point +if unknown bskbase: input bskbase fi + +font_identifier:="BSKSY"; font_size 10pt#; + +u#:=20/36pt#; % unit width +width_adj#:=0pt#; % width adjustment for certain characters +serif_fit#:=0pt#; % extra sidebar near lowercase serifs +cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs +letter_fit#:=0pt#; % extra space added to all sidebars + +body_height#:=270/36pt#; % height of tallest characters +asc_height#:=255/36pt#; % height of lowercase ascenders +cap_height#:=246/36pt#; % height of caps +fig_height#:=240/36pt#; % height of numerals +x_height#:=159/36pt#; % height of lowercase without ascenders +math_axis#:=95/36pt#; % axis of symmetry for math symbols +bar_height#:=100/36pt#; % height of crossbar in lowercase e +comma_depth#:=70/36pt#; % depth of comma below baseline +desc_depth#:=115/36pt#; % depth of lowercase descenders +com_height#:=135/36pt#; %height of B bar + +tiny#:=8/36pt#; % diameter of rounded corners +hair#:=10/36pt#; % lowercase hairline breadth +stem#:=22/36pt#; % lowercase stem breadth +curve#:=25/36pt#; % lowercase curve breadth +like_hair#:=12/36pt#; +like_stem#:=28/36pt#; +like_curve#:=36/36pt#; +ess#:=32/36pt#; % breadth in middle of lowercase s +dot_size#:=30/36pt#; % diameter of dots +cap_hair#:=12/36pt#; % uppercase hairline breadth +alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth +cap_stem#:=27/36pt#; % uppercase stem breadth +cap_curve#:=31/36pt#; % uppercase curve breadth +like_cap_hair#:=14/36pt#; +like_cap_stem#:=36/36pt#; +like_cap_curve#:=44/36pt#; +cap_ess#:=39/36pt#; % breadth in middle of uppercase s +rule_thickness#:=.4pt#; % thickness of lines in math symbols + +jut#:=27/36pt#; % protrusion of lowercase serifs +cap_jut#:=30/36pt#; % protrusion of uppercase serifs +beak#:=80/36pt#; % vertical protrusion of beak serifs +vair#:=10/36pt#; % vertical diameter of hairlines +bar#:=11/36pt#; % lowercase bar thickness +cap_bar#:=11/36pt#; % uppercase bar thickness +serif_drop#:=15/36pt#; % vertical drop of sloped serifs +punct_fit#:=1pt#; +drop_stem#:=0/36pt#; +ser_boule#:=0/36pt#; +o#:=4/36pt#; % amount of overshoot for curves +apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions + +slant:=0; % tilt ratio $(\Delta x/\Delta y)$ +fudge:=1; % factor applied to weights of heavy characters +math_spread:=0; % extra openness of math symbols +superness:=1/sqrt2; % parameter for superellipses +superpull:=1/6; % extra openness inside bowls + +medieval:=true; %medieval numerals +monofig:=false; %should numerals have fixed width +bulbes:=false; +square_dots:=false; % should dots be square? +monospace:=false; % should all characters have the same width? +variant_g:=false; % should an italic-style g be used? +math_fitting:=true; % should math-mode spacing be used? + +% verbatim copy from cmsy10.mf +subs:=7/10; % subscripts to 10pt will normally be in 7pt type +rth#:=.4pt#; % assume that rules will come from cmex10 +fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed + math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1 + math_axis#+1.51rth#+30/36pt#, % num2 + math_axis#+1.51rth#+48/36pt#, % num3 + -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1 + -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2 + 8.99pt#-subs*asc_height#, % sup1 + 8.49pt#-subs*asc_height#, % sup2 + 104/36pt#, % sup3 + 54/36pt#, % sub1 + -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2 + subs*asc_height#-36/36pt#, % sup\_drop + 18/36pt#, % sub\_drop + 23.9pt#, % delim1 + 10.1pt#, % delim2 + math_axis#; % axis\_height + +generate bskmathsy % switch to the driver file diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf new file mode 100644 index 00000000000..d1b1db9aca7 --- /dev/null +++ b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf @@ -0,0 +1,7565 @@ +%Boisik symbols + +numeric bourstem; bourstem:=1.5stem; +numeric arrsize, arrwidth; arrsize=1.2arrwidth=3curve; + +iff known chars.sign_parent_left: +bskchar "Left parenthesis"; +beginchar(chars.sign_parent_left,6u#,body_height#,paren_depth#); uni "0x0028"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(curve,0); +rt x1r=w-u; rt x3r=w-u; lft x2l=u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(hair, angle((x1r,y1l)-z2)-90); pos3(hair,angle((x3r,y3l)-z2)+90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.sign_parent_right: +bskchar "Right parenthesis"; +beginchar(chars.sign_parent_right,6u#,body_height#,paren_depth#); uni "0x0029"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(curve,180); +lft x1r=u; lft x3r=u; rt x2l=w-u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(hair, angle((x1r,y1l)-z2)+90); pos3(hair,angle((x3r,y3l)-z2)-90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.sign_bracket_left: +bskchar "Left bracket"; +beginchar(chars.sign_bracket_left,5.5u#,body_height#,paren_depth#); uni "0x005B"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos4(hair,270); +lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.sign_bracket_right: +bskchar "Right bracket"; +beginchar(chars.sign_bracket_right,5.5u#,body_height#,paren_depth#); uni "0x005D"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos4(hair,270); +rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.sign_bracket_semantic_left: +bskchar "Left semantic bracket"; +beginchar(chars.sign_bracket_semantic_left,7u#,body_height#,paren_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos4(hair,270); +pos5(.5[hair,stem],0); pos6(.5[hair,stem],0); +lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +y5=y1l; y6=y4l; x5=x6=.5[x1,x2l]; +rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle; +infill obl(2l,5l,3l)---obl(3l,2l,6l)---obl(6l,3l,5l)---obl(5l,6l,2l)---cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_bracket_semantic_right: +bskchar "Right semantic bracket"; +beginchar(chars.sign_bracket_semantic_right,7u#,body_height#,paren_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos4(hair,270); +pos5(.5[hair,stem],180); pos6(.5[hair,stem],180); +rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l); +y5=y1l; y6=y4l; x5=x6=.5[x1,x2l]; +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle; +infill obl(2l,5l,3l)---obl(3l,2l,6l)---obl(6l,3l,5l)---obl(5l,6l,2l)---cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_bracket_quill_left: +bskchar "Left bracket with quill"; +beginchar(chars.sign_bracket_quill_left,5.5u#,body_height#,paren_depth#); uni "0x2045"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos4(hair,270); +pos5(hair,90); pos6(hair,90); +lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +y5=y6=.5[y1,y4]; x5=x2l; x6=x1; +rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l) + ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_bracket_quill_right: +bskchar "Right bracket with quill"; +beginchar(chars.sign_bracket_quill_right,5.5u#,body_height#,paren_depth#); uni "0x2046"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos4(hair,270); +pos5(hair,90); pos6(hair,90); +rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +y5=y6=.5[y1,y4]; x5=x2l; x6=x1; +lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l) + ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_quotes: +bskchar "Quotes"; +beginchar(chars.sign_quotes,8.5u#,asc_height#,0); uni "0x0022"; +adjust_fit(0,0); +pickup tiny.nib; +x1=w-u-.5dot_size-hair; top y1=h-.5dot_size; +y2=y1; x2=u+.5dot_size; +comma(1,dot_size,infinity,comma_depth); comma(2,dot_size,infinity,comma_depth); +endchar; + +charscription(8.5u,asc_height,0)( +x1=w-u-.5dot_size; top y1=h-comma_depth; +y2=y1; x2=u+.5dot_size+hair; +ammoc(1,dot_size,infinity,comma_depth); ammoc(2,dot_size,infinity,comma_depth); +); + +iff known chars.sign_opening_quotes: +bskchar "Opening quotes"; +beginchar(chars.sign_opening_quotes,8.5u#,asc_height#,0); uni "0x201C"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_czech_closing_quotes: +bskchar "Czech closing quotes"; +beginchar(chars.sign_czech_closing_quotes,8.5u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_czech_quotes: +bskchar "Czech opening quotes"; +beginchar(chars.sign_czech_quotes,8.5u#,.5dot_size#,comma_depth#); uni "0x201E"; +adjust_fit(0,0); +pickup tiny.nib; +x1=w-u-.5dot_size-hair; top y1=h; +y2=y1; x2=u+.5dot_size; +comma(1,dot_size,infinity,comma_depth); comma(2,dot_size,infinity,comma_depth); +endchar; + +iff known chars.sign_turn_quotes: +bskchar "Turned quotes"; +beginchar(chars.sign_turn_quotes,8.5u#,asc_height#,0); uni "0x201F"; +adjust_fit(0,0); +pickup tiny.nib; +x1=w-u-.5dot_size; top y1=h-.5dot_size; +y2=y1; x2=u+.5dot_size+hair; +turn_comma(1,dot_size,infinity,comma_depth); turn_comma(2,dot_size,infinity,comma_depth); +endchar; + +iff known chars.sign_czech_quote: +bskchar "Czech opening quote"; +beginchar(chars.sign_czech_quote,4.5u#,.5dot_size#,comma_depth#); uni "0x201A"; +adjust_fit(0,0); +pickup tiny.nib; +x1=w-u-.5dot_size-hair; top y1=h; +comma(1,dot_size,infinity,comma_depth); +endchar; + +iff known chars.sign_aposthrope: +bskchar "Aposthrope"; +beginchar(chars.sign_aposthrope,4.5u#,asc_height#,0); uni "0x0027"; +adjust_fit(0,0); +pickup tiny.nib; +lft x1=w-u-.5dot_size-hair; top y1=h-.5dot_size; +comma(1,dot_size,.9hair,comma_depth); +endchar; + +iff known chars.sign_aposthrope_reverse: +bskchar "Reverse aposthrope"; +beginchar(chars.sign_aposthrope_reverse,4.5u#,asc_height#,0); uni "0x0060"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w+.5hair; top y1=h-comma_depth; +ammoc(1,dot_size,.9hair,comma_depth); +endchar; + +iff known chars.sign_comma: +bskchar "Comma"; +beginchar(chars.sign_comma,4.5u#,dot_size#,comma_depth#); uni "0x002C"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w-.5hair; top y1=h-.5dot_size; +comma(1,dot_size,infinity,d); +endchar; + +iff known chars.sign_comma_under: +bskchar "Comma under baseline"; +beginchar(chars.sign_comma_under,4.5u#,0,comma_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w-.5hair; top y1=h-.5dot_size; +comma(1,dot_size,infinity,d); +endchar; + +iff known chars.sign_comma_double_tail: +bskchar "Double-tailed comma"; +beginchar(chars.sign_comma_double_tail,4.5u#,dot_size#,comma_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim; oblu:=.6dot_size; +path p[]; +x1=.5w-.5hair; top y1=h-.5dot_size; +if square_dots: +else: + penpos1'(dot_size,0); penpos1''(dot_size,90); z1'=z1''=z1; + z1'''=(x1'r+hair,y1''l); z1~=.75[z1,z1'r]+d*down; + p0:=z1'r{up}..z1''r{left}..{down}z1'l..{right}z1''l..cycle; + p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z1~; + p2:=subpath(rundy(p1,(0,.4dot_size)),infinity) of p1&z1~..z1'''..subpath (1.5,2) of p0; + tim=xpart(p2 intersectiontimes (z1--(x1,h))); + p3:=subpath(0,tim) of p2; + p4:=reverse p3 reflectedabout(z1''r,z1''l); + filldraw p3..p4 shifted left ..cycle; +labels(1,1''',1~); penlabels(1',1''); +fi +endchar; + +iff known chars.sign_comma_ammoc: +bskchar "Comma-ammoc"; +beginchar(chars.sign_comma_ammoc,4.5u#,x_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=.6dot_size; +x1=.5w-.5hair=x2; y1=y2=.5[h,-d]; +if square_dots: +else: + penpos1'(dot_size,0); penpos1''(dot_size,90); z1'=z1''=z1; + penpos2'(dot_size,180); penpos2''(dot_size,-90); z2'=z2''=z2; + z1'''=(x1'r+hair,y1''l); z1~=.5[z1,z1'l]+comma_depth*down; + z2'''=(x2'r-hair,y2''l); z2~=.5[z2,z2'l]+comma_depth*up; + p0:=z1'r{up}..z1''r{left}..{down}z1'l..{right}z1''l..cycle; + p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z1~; + p2:=z2'r{down}..z2''r{right}..{up}z2'l..{left}z2''l..cycle; + p3:=point 3.5 of p2{direction 3.5 of p2 rotated -120}..z2~; + p4:=z1~..z1'''..subpath (1.5,rundy(p0,3.5).zpet) of p0 + ..subpath(rundy(p1,(0,.4dot_size)),infinity) of p1; + p5:=reverse (z2~..z2'''..subpath (1.5,rundy(p2,3.5).zpet) of p2 + ..subpath(rundy(p3,(0,.4dot_size)),infinity) of p3); + (tim1,tim2)=p4 intersectiontimes p5; + (tim3,tim4)=reverse p4 intersectiontimes p5; + filldraw subpath(0,rundy(p4,tim1).zpet) of p4 + ..reverse subpath(0,rundy(p5,tim2).zpet) of p5 + &subpath(infinity,rundy(p5,tim4)) of p5 + ..reverse subpath(0,tim3) of reverse p4&cycle; + labels(1,1''',1~,2,2''',2~); penlabels(1',1'',2',2''); +fi +endchar; + +iff known chars.sign_period: +bskchar "Period"; +beginchar(chars.sign_period,4.5u#,dot_size#,0); uni "0x002E"; +adjust_fit(0,0); +pickup tiny.nib; +bot z1=(.5w,.5h); dot(1); +endchar; + +iff known chars.sign_period_old_figured: +bskchar "Period (for some old style figures)"; +beginchar(chars.sign_period_old_figured,4.5u#,dot_size#-medfigd,medfigd); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +bot z1=(.5w,.5(h-d)); dot(1); +endchar; + +iff known chars.sign_ellipsis: +bskchar "Ellipsis (horizontal)"; +beginchar(chars.sign_ellipsis,16u#,dot_size#,0); uni "0x2026"; +adjust_fit(0,0); +pickup tiny.nib; +y1=y2=y3; bot y1=.5h; +x3-x2=x2-x1; .5w=x2; x1=2.25u; +dot(1); dot(2); dot(3); +endchar; + +iff known chars.math_ellipsis_centered: +bskchar "Centered horizontal ellipsis"; +beginchar(chars.math_ellipsis_centered,16u#,v_center(dot_size#)); uni "0x22EF"; +adjust_fit(0,0); +pickup tiny.nib; +y1=y2=y3; y1=math_axis; +x3-x2=x2-x1; .5w=x2; x1=2.25u; +dot(1); dot(2); dot(3); +endchar; + +iff known chars.sign_colon: +bskchar "Colon"; +beginchar(chars.sign_colon,4.5u#,x_height#,0); uni "0x003A"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2=.5w; top y1=h-.5dot_size; bot y2=.5dot_size; +dot(1); dot(2); +endchar; + +iff known chars.math_ellipsis_vert: +bskchar "Vertical ellipsis"; +beginchar(chars.math_ellipsis_vert,4.5u#,v_center(1.5x_height#)); uni "0x22EE"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2=x3=.5w; y2=.5[y1,y3]=math_axis; y1-y2=5.75u; +dot(1); dot(2); dot(3); +endchar; + +iff known chars.math_ellipsis_down_right: +bskchar "Diagonal ellipsis down right"; +beginchar(chars.math_ellipsis_down_right,16u#,v_center(1.5x_height#)); uni "0x22F1"; +adjust_fit(0,0); +pickup tiny.nib; +x3-x2=x2-x1; .5w=x2; x1=2.25u; +y2=.5[y1,y3]=math_axis; y1-y2=5.75u; +dot(1); dot(2); dot(3); +endchar; + +iff known chars.math_ellipsis_up_right: +bskchar "Diagonal ellipsis up right"; +beginchar(chars.math_ellipsis_up_right,16u#,v_center(1.5x_height#)); uni "0x22F0"; +adjust_fit(0,0); +pickup tiny.nib; +x3-x2=x2-x1; .5w=x2; x3=2.25u; +y2=.5[y1,y3]=math_axis; y1-y2=5.75u; +dot(1); dot(2); dot(3); +endchar; + +iff known chars.sign_tri_colon: +bskchar "Triangular colon"; +beginchar(chars.sign_tri_colon,4.5u#,x_height#,0); uni "0x02D0"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=.15dot_size; +x1=x2=.5w; top y1=h; bot y2=0; +penpos1(dot_size,0); penpos2(dot_size,0); +penpos1'(dot_size,90); penpos2'(dot_size,-90); +z1'r=z1; z2'r=z2; +filldraw obl(1'l,1l,1r)---obl(1r,1'l,1l)---obl(1l,1r,1'l)---cycle; +filldraw obl(2'l,2l,2r)---obl(2r,2'l,2l)---obl(2l,2r,2'l)---cycle; +penlabels(1,1',2,2'); +endchar; + +iff known chars.sign_tri_colon_half: +bskchar "Half triangular colon"; +beginchar(chars.sign_tri_colon_half,4.5u#,x_height#,0); uni "0x02D1"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=.15dot_size; +x1=.5w; top y1=h; +penpos1(dot_size,0); penpos1'(dot_size,90); +z1'r=z1; +filldraw obl(1'l,1l,1r)---obl(1r,1'l,1l)---obl(1l,1r,1'l)---cycle; +penlabels(1,1'); +endchar; + +iff known chars.sign_semicolon: +bskchar "Semicolon"; +beginchar(chars.sign_semicolon,4.5u#,x_height#,comma_depth#); uni "0x003B"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size; +dot(1); comma(2,dot_size,.5hair,d); +endchar; + +iff known chars.sign_commacolon: +bskchar "Commacolon"; +beginchar(chars.sign_commacolon,4.5u#,x_height#,comma_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size; +comma(1,dot_size,.5hair,d); comma(2,dot_size,.5hair,d); +endchar; + +iff known chars.sign_ammoc_comma: +bskchar "Ammoc above comma"; +beginchar(chars.sign_ammoc_comma,4.5u#,x_height#,comma_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size; +comma(2,dot_size,.5hair,d); ammoc(1,dot_size,.5hair,d); +endchar; + +iff known chars.sign_commas_joined: +bskchar "Two joined commas"; +beginchar(chars.sign_commas_joined,4.5u#,x_height#,comma_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +oblu:=.6dot_size; +x1=.5w-.5hair=x2; top y1=h-.5dot_size; bot y2=.5dot_size; +if square_dots: +else: + penpos1'(dot_size,0); penpos1''(dot_size,90); z1'=z1''=z1; + penpos2'(dot_size,180); penpos2''(dot_size,-90); z2'=z2''=z2; + z1'''=(x1'r+hair,y1''l); z1~=.5[z1,z1'l]+comma_depth*down; + z2'''=(x2'r-hair,y2''l); z2~=.5[z2,z2'l]+comma_depth*up; + z3~=.5[z1~,z2~]; + p0:=z1'r{up}..z1''r{left}..{down}z1'l..{right}z1''l..cycle; + p1:=point 3.5 of p0{direction 3.5 of p0 rotated -120}..z3~; + p2:=z2'r{down}..z2''r{right}..{up}z2'l..{left}z2''l..cycle; + p3:=point 3.5 of p2{direction 3.5 of p2 rotated -120}..z3~; + filldraw z3~..z1'''..subpath (1.5,rundy(p0,3.5).zpet) of p0 + ..subpath(rundy(p1,(0,.4dot_size)),infinity) of p1..z2''' + ..subpath (1.5,rundy(p2,3.5).zpet) of p2 + ..subpath(rundy(p3,(0,.4dot_size)),infinity) of p3&cycle; + labels(1,1''',1~,2,2''',2~,3~); penlabels(1',1'',2',2''); +fi +endchar; + +iff known chars.sign_exclamation: +bskchar "Exclamation point"; +beginchar(chars.sign_exclamation,5u#+punct_fit#,asc_height#,0); uni "0x0021"; +adjust_fit(0,0); +pickup tiny.nib; +bot z1=(.5w+.5punct_fit,.5dot_size); dot(1); +penpos2(dot_size,0); pos3(hair,0); x2=x3=x1; +y2=h-.5stem; bot y3=dot_size+stem; y3r:=y3r+.5hair; +filldraw z2l---z3l..{.5[z2,z2r]-z3r}z3r..{z2r-z3r}z2r..cycle; +penlabels(2,3); +endchar; + +iff known chars.sign_spanish_shriek: +bskchar "Spanish open exclamation point"; +beginchar(chars.sign_spanish_shriek,5u#,asc_height#-desc_depth#,desc_depth#); uni "0x00A1"; +adjust_fit(0,0); +pickup tiny.nib; +top z1=(.5w,h-.5dot_size); dot(1); +penpos2(dot_size,0); pos3(hair,0); x2=x3=x1; +y2=-d+.5stem; top y3=h-dot_size-stem; y3r:=y3r-.5hair; +filldraw z2l---z3l..{.5[z2,z2r]-z3r}z3r..{z2r-z3r}z2r..cycle; +penlabels(2,3); +endchar; + +iff known chars.sign_equals: +bskchar "Equals sign"; +compute_spread(.45x_height#,.55x_height#); +beginchar(chars.sign_equals,13u#,v_center(spread#+rule_thickness#)); uni "0x003D"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,90); pos4(rule_thickness,90); +lft x1=u; x2+x1=w; x3=x1; x4=x2; +y1=y2; y3=y4; .5[y1,y3]=math_axis; top y1r=h; +filldraw bskrule(1,2,hair,0); +filldraw bskrule(4,3,hair,0); +penlabels(1,2,3,4); +endchar; + +iff known chars.sign_circled_equals: +bskchar "Equals sign in circle"; +compute_spread(.45x_height#,.55x_height#); +beginchar(chars.sign_circled_equals,17u#,v_center(14u#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos11(rule_thickness,90); pos12(rule_thickness,90); +pos13(rule_thickness,90); pos14(rule_thickness,90); +lft x6=u; x2=w-x6; y2=math_axis; top y8=h; +lft x11=3u; x12+x11=w; x13=x11; x14=x12; +y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread; +circle_points(rule_thickness); +filldraw draw_circle.l; +infill draw_circle.r; +filldraw bskrule(11,12,hair,0); +filldraw bskrule(14,13,hair,0); +penlabels(11,12,13,14); +endchar; + +iff known chars.sign_neq: +bskchar "Not equals sign"; +compute_spread(.45x_height#,.55x_height#); +beginchar(chars.sign_neq,13u#,v_center(.75(body_height#+desc_depth#))); uni "0x2260"; +adjust_fit(0,0); +pickup tiny.nib; oblu.more:=2f_obl; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,90); pos4(rule_thickness,90); +lft x1=u; x2+x1=w; x3=x1; x4=x2; +y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread; +top rt z5=(w-2u,h); top lft z6=(2u,-d); +pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90); +bskpoints(1,2,hair,0); bskpoints(4,3,hair,0); +bskpoints(5,6,rule_thickness,rule_thickness); +z1'=whatever[z5l,z6l]=whatever[z1r,z2r]; +z2'=whatever[z5r,z6r]=whatever[z1r,z2r]; +z3'=whatever[z5r,z6r]=whatever[z1l,z2l]; +z4'=whatever[z5r,z6r]=whatever[z3r,z4r]; +z5'=whatever[z5r,z6r]=whatever[z3l,z4l]; +z6'=whatever[z5l,z6l]=whatever[z3l,z4l]; +z7'=whatever[z5l,z6l]=whatever[z3r,z4r]; +z8'=whatever[z5l,z6l]=whatever[z1l,z2l]; +filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,2r).more---z2r + ..z2ll---obl(3',2l,4')---obl(4',3',4r).more---z4r..z4l + ---obl(5',4l,6r)---z6r..z6ll---obl(6',6l,3l).more---z3ll + ..z3r---obl(7',3r,8')---obl(8',7',1l).more---z1l..cycle; +penlabels(1,2,3,4,5,6); labels(2ll,3ll,5rr,6ll,1',2',3',4',5',6',7',8'); +endchar; + +iff known chars.sign_slash: +bskchar "Slash"; +beginchar(chars.sign_slash,10u#,body_height#,desc_depth#); uni "0x002F"; +adjust_fit(0,0); +pickup rule.nib; +top rt z1=(w-u,h); bot lft z2=(u,-d); +pickup tiny.nib; +pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.sign_backslash: +bskchar "Backslash sign"; +beginchar(chars.sign_backslash,10u#,body_height#,desc_depth#); uni "0x005C"; +adjust_fit(0,0); +pickup rule.nib; +top lft z1=(u,h); bot rt z2=(w-u,-d); +pickup tiny.nib; +pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.sign_slash_frac: +bskchar "Fraction slash"; +beginchar(chars.sign_slash_frac,2u#,body_height#,paren_depth#); uni "0x2044"; +adjust_fit(0,0); +pickup rule.nib; +top rt z1=(4u,h); bot lft z2=(-4u,-d); +pickup tiny.nib; +pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.sign_plus: +bskchar "Plus sign"; +beginarithchar(chars.sign_plus); uni "0x002B"; +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,0); pos4(rule_thickness,0); +lft x1=u; rt x2=w-u; y1=y2=math_axis; +x3=x4=.5w; top y3=h; bot y4=-d; +bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair); +z5=whatever[z4l,z3l]=whatever[z1l,z2l]; +z6=whatever[z4r,z3r]=whatever[z1l,z2l]; +z7=whatever[z4r,z3r]=whatever[z1r,z2r]; +z8=whatever[z4l,z3l]=whatever[z1r,z2r]; +filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r--- + obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4); labels(5,6,7,8); +endchar; + +iff known chars.sign_tilde: +bskchar "Tilde"; +beginchar(chars.sign_tilde,11u#,.3[asc_height#,x_height#],0); uni "0x007E"; +adjust_fit(0,0); +pickup tiny.nib; +numeric spread; spread:=3curve; +vlnka(0,1); +endchar; + +iff known chars.sign_tilde_low: +bskchar "Low lying tilde"; +beginchar(chars.sign_tilde_low,11u#,bar_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric spread; spread:=3curve; +bot y0=0; +vlnka(0,1); +endchar; + +iff known chars.sign_asterisk: +bskchar "Asterisk"; +beginchar(chars.sign_asterisk,8u#,body_height#,0); uni "0x002A"; +adjust_fit(0,0); +pickup tiny.nib; +numeric size, ast, vast; +path p; +z0=.5(w,h); ast:=3/4stem; vast=.55stem; +pos1(ast,0); x1=x0; +size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x0: + size:= (lft w-u-x0)/cosd(30)-.5ast; fi; +y1=y0+size; +p:=z0---z1r{dir120}..z1l---z0; +p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))), + xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p; +filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle; +labels(0); penlabels(1); +endchar; + +iff known chars.sign_hash: +bskchar "Number sign"; +beginchar(chars.sign_hash,13u#,body_height#,0); uni "0x0023"; +adjust_fit(0,0); +pickup tiny.nib; +path p; +x1r-x3r=x2l-x4l=.35w; rt x1r=w-3u; lft x4l=3u; +y1r=y3r=h; y2l=y4l=0; +lft x5-rule_thickness=lft x7=u; rt x6=rt x8+rule_thickness=w-u; +y5=y6; y7=y8; .5[y5,y7]=.5h; y5-y7=.55x_height; +numeric theta; theta=angle(z1r-z2l)+90; +pos1(rule_thickness,theta); pos2(rule_thickness,theta); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +pos5(rule_thickness,90); pos6(rule_thickness,90); +pos7(rule_thickness,90); pos8(rule_thickness,90); +bskpoints(2,1,rule_thickness,0); bskpoints(4,3,0,rule_thickness); +bskpoints(6,5,rule_thickness,0); bskpoints(8,7,0,rule_thickness); +y10=y11=y12=y5r; z10=whatever[z1r,z2r]; z11=whatever[z3l,z4l]; z12=whatever[z3r,z4r]; +y13=y5l; z13=whatever[z3r,z4r]; y14=y7r; z14=whatever[z3r,z4r]; +y15=y16=y17=y18=y7l; z15=whatever[z3r,z4r]; z16=whatever[z3l,z4l]; z17=whatever[z1r,z2r]; +y19=y8r; y20=y5l; z18=whatever[z2l,z1l]; z19=whatever[z1l,z2l]; z20=whatever[z1l,z2l]; +y21=y5r; z21=whatever[z1l,z2l]; +filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r..z5l + ---obl(13,5l,14)---obl(14,13,7r)---z7r..z7l---obl(15,7l,4l)---z4rr..z4l + ---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l..z8r + ---obl(19,8r,20)---obl(20,19,6l)---z6l..z6r---obl(21,6r,1r)---z1ll..cycle; +z0=(x10,y20); z0'=(x11,y13); z0''=(x16,y14); z0'''=(x17,y19); +infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle; +penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21); +endchar; + +iff known chars.sign_zero_permile_sign: +bskchar "Zero for permile sign"; +beginchar(chars.sign_zero_permile_sign,7u#,body_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +bot y1b.l=0; lft x1a.l=u; +zeroent(1,hair,stem); +endchar; + +iff known chars.sign_percent: +bskchar "Percent sign"; +beginchar(chars.sign_percent,15u#,body_height#,0); uni "0x0025"; +adjust_fit(0,0); +numeric theta; +pickup tiny.nib; +top y1d.r=h; lft x1a.l=u; +bot y2b.l=0; rt x2c.r=w-u; +top y4=h; bot y3=0; x3=3u; x4=w-3u; +theta:=angle(z4-z3)-90; +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +zeroent(1,stem,hair); zeroent(2,hair,stem); +filldraw bskrule(3,4,rule_thickness,rule_thickness); +penlabels(3,4); +endchar; + +iff known chars.sign_abzueglich: +bskchar "Abzueglich sign"; +beginchar(chars.sign_abzueglich,8u#,body_height#,0); uni "0x2052"; +adjust_fit(0,0); +numeric theta; +pickup tiny.nib; +top y1=h-.5dot_size; lft x1=u+.5dot_size; +bot y2=.5dot_size; rt x2=w-u-.5dot_size; +top y4=h; bot y3=0; x3=u; x4=w-u; +theta:=angle(z4-z3)-90; +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +dot(1); dot(2); +filldraw bskrule(3,4,rule_thickness,rule_thickness); +penlabels(3,4); +endchar; + +iff known chars.sign_permile: +bskchar "One per thousand sign"; +beginchar(chars.sign_permile,21u#,body_height#,0); uni "0x2030"; +adjust_fit(0,0); +numeric theta; +pickup tiny.nib; +top y1d.r=h; lft x1a.l=u; +bot y2b.l=bot y3b.l=0; +rt x2c.r=lft x3a.l-1.5u; rt x3c.r=w-u; +zeroent(1,if monospace: .7\\fi stem,hair); zeroent(3,hair,if monospace: .7\\fi stem); +zeroent(2,hair,if monospace: .7\\fi stem); +top y5=h; bot y4=0; x4=2u; x5=.5[x2c,x3a]; +theta:=angle(z5-z4)-90; +pos4(rule_thickness,theta); pos5(rule_thickness,theta); +filldraw bskrule(4,5,rule_thickness,rule_thickness); +penlabels(4,5); +endchar; + +iff known chars.sign_pertenthousand: +bskchar "One per ten thousand sign"; +beginchar(chars.sign_pertenthousand,27u#,body_height#,0); uni "0x2031"; +adjust_fit(0,0); +numeric theta; +pickup tiny.nib; +top y1d.r=h; lft x1a.l=u; +bot y2b.l=bot y3b.l=bot y4b.l=0; +rt x2c.r=lft x3a.l-1.5u; rt x3c.r=lft x4a.l-1.5u; rt x4c.r=w-u; +zeroent(1,if monospace: .7\\fi stem,hair); zeroent(4,hair,if monospace: .7\\fi stem); +zeroent(3,hair,if monospace: .7\\fi stem); zeroent(2,hair,if monospace: .7\\fi stem); +top y6=h; bot y5=0; x5=2u; x6=.5[x2c,x3a]; +theta:=angle(z6-z5)-90; +pos5(rule_thickness,theta); pos6(rule_thickness,theta); +filldraw bskrule(5,6,rule_thickness,rule_thickness); +penlabels(5,6); +endchar; + +iff known chars.sign_french_quotes_left: +bskchar "French quotes left"; +beginchar(chars.sign_french_quotes_left,9u#,x_height#,0); uni "0x00AB"; +adjust_fit(0,0); +pickup tiny.nib; +top y1=top y3=h; bot y1'=bot y3'=0; lft x2l=u; rt x3r=w-u; +bskfrench(1,2); bskfrench(3,4); +endchar; + +iff known chars.sign_french_quotes_right: +bskchar "French quotes right"; +beginchar(chars.sign_french_quotes_right,9u#,x_height#,0); uni "0x00BB"; +adjust_fit(0,0); +pickup tiny.nib; +top y1=top y3=h; bot y1'=bot y3'=0; rt x2r=w-u; lft x3l=u; +bskfrenchr(1,2); bskfrenchr(3,4); +endchar; + +iff known chars.sign_french_quote_left: +bskchar "French quote left"; +beginchar(chars.sign_french_quote_left,4.5u#,x_height#,0); uni "0x2039"; +adjust_fit(0,0); +pickup tiny.nib; +top y1=h; bot y1'=0; lft x2l=u; +bskfrench(1,2);; +endchar; + +iff known chars.sign_french_quote_right: +bskchar "French quote right"; +beginchar(chars.sign_french_quote_right,4.5u#,x_height#,0); uni "0x203A"; +adjust_fit(0,0); +pickup tiny.nib; +top y1=h; bot y1'=0; rt x2r=w-u; +bskfrenchr(1,2); +endchar; + +iff known chars.sign_blank_space: +bskchar "Blank-space sign"; +beginchar(chars.sign_blank_space,9.5u#,.5x_height#,.5desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,0); pos2(hair,0); pos3(hair,0); pos4(hair,0); +top y1=top y4=h; bot y2=bot y3=-d; +x1l=x2l=u; x3r=x4r=w-x1l; +bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair); +y2r:=y3l:=y3+hair-currentbreadth; +filldraw z1l---obl(2l,1l,3)---obl(3r,2l,4r)---z4r..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4); labels(2ll,3rr); +endchar; + +iff known chars.sign_straight_quote: +bskchar "Straight single quote"; +beginchar(chars.sign_straight_quote,4.5u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(dot_size,0); pos2(hair,0); +x1=x1'=x2=.5w; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size; +filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle; +penlabels(1,2); labels(1'); +endchar; + +iff known chars.sign_straight_quote_base: +bskchar "Straight single quote on baseline"; +beginchar(chars.sign_straight_quote_base,4.5u#,.5dot_size#,comma_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(dot_size,0); pos2(hair,0); +x1=x1'=x2=.5w; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size; +filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle; +penlabels(1,2); labels(1'); +endchar; + +iff known chars.sign_straight_quotes: +bskchar "Straight double quotes"; +beginchar(chars.sign_straight_quotes,8u#,asc_height#,0); uni "non"; +italcorr asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +pos1(dot_size,0); pos2(hair,0); pos3(dot_size,0); pos4(hair,0); +x1=x1'=x2; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size; +x3=x3'=x4; y3=y1; y3'=y1'; y4=y2; +.5[x1,x3]=.5w; lft x1l=1.5u; +filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle; +filldraw z4r{up}...{up}z3r...z3'...z3l{down}...{down}z4l..cycle; +penlabels(1,2,3,4); labels(1',3'); +endchar; + +iff known chars.sign_straight_quotes_base: +bskchar "Straight double quote on baseline"; +beginchar(chars.sign_straight_quotes_base,8u#,.5dot_size#,comma_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(dot_size,0); pos2(hair,0); pos3(dot_size,0); pos4(hair,0); +x1=x1'=x2; top y1'=h; y1'-y2=comma_depth; y1'-y1=.5dot_size; +x3=x3'=x4; y3=y1; y3'=y1'; y4=y2; +.5[x1,x3]=.5w; lft x1l=1.5u; +filldraw z2r{up}...{up}z1r...z1'...z1l{down}...{down}z2l..cycle; +filldraw z4r{up}...{up}z3r...z3'...z3l{down}...{down}z4l..cycle; +penlabels(1,2,3,4); labels(1',3'); +endchar; + +charscription(6u,x_height,0)( +pos1(stem,90); pos2(stem,90); +y1r=y2r=.6h; rt x2=w-u; +lft x1=.5u; +filldraw bskrule(1,2,hair,hair); +penlabels(1,2); +); + +iff known chars.sign_hyphen: +bskchar "Hyphen"; +beginchar(chars.sign_hyphen,6u#,x_height#,0); uni "0x002D"; +italcorr .5x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_hyphen_alt: +bskchar "Hyphen (at alternative char position)"; +beginchar(chars.sign_hyphen_alt,6u#,x_height#,0); uni "0x2010"; +italcorr .5x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_hyphen_soft: +bskchar "Soft hyphen"; +beginchar(chars.sign_hyphen_soft,6u#,x_height#,0); uni "0x00AD"; +italcorr .5x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_hyphenchar: +bskchar "Hyphenchar"; +beginchar(chars.sign_hyphenchar,3u#,x_height#,0); uni "non"; +italcorr .5x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +charscription(6u,x_height,0)( +pos1(stem,90); pos2(stem,90); +pos3(stem,90); pos4(stem,90); +y1r=y2r=.6h; +y3r=y4r; y1l-y3r=.25x_height; +rt x2=w-u; +lft x1=.5u; x3=x1; x4=x2; +filldraw bskrule(1,2,hair,hair); +filldraw bskrule(3,4,hair,hair); +penlabels(1,2,3,4); +); + +iff known chars.sign_double_hyphen: +bskchar "Double hyphen"; +beginchar(chars.sign_double_hyphen,6u#,x_height#,0); uni "non"; +italcorr .5x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_double_hyphenchar: +bskchar "Double hyphenchar"; +beginchar(chars.sign_double_hyphenchar,3u#,x_height#,0); uni "non"; +italcorr .5x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_endash: +bskchar "En dash"; +beginchar(chars.sign_endash,9u#,x_height#,0); uni "0x2013"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos2(hair,90); +top y1r=top y2r=2/3h; +lft x1=if monospace: u else: 0 fi; x2=w-x1; +filldraw bskrule(1,2,.5hair,.5hair); +penlabels(1,2); endchar; + +iff known chars.sign_figdash: +bskchar "Figural dash"; +beginchar(chars.sign_figdash,figw(10u),x_height#,0); uni "0x2012"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos2(hair,90); +top y1r=top y2r=2/3h; +lft x1=0; x2=w-x1; +filldraw bskrule(1,2,.5hair,.5hair); +penlabels(1,2); endchar; + +iff known chars.sign_twelvedash: +bskchar "Twelve u dash"; +beginchar(chars.sign_twelvedash,12u#,x_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos2(hair,90); +top y1r=top y2r=2/3h; +lft x1=0; x2=w-x1; +filldraw bskrule(1,2,.5hair,.5hair); +penlabels(1,2); endchar; + +iff known chars.sign_themdash: +bskchar "Three quarters em dash"; +beginchar(chars.sign_themdash,13.5u#,x_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos2(hair,90); +top y1r=top y2r=2/3h; +lft x1=0; x2=w-x1; +filldraw bskrule(1,2,.5hair,.5hair); +penlabels(1,2); endchar; + +iff known chars.sign_emdash: +bskchar "Em dash"; +beginchar(chars.sign_emdash,18u#,x_height#,0); uni "0x2014"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); pos2(hair,90); +top y1r=top y2r=2/3h; +lft x1=0; rt x2=w; +filldraw bskrule(1,2,.5hair,.5hair); +penlabels(1,2); endchar; + +iff known chars.sign_underbar: +bskchar "Underbar sign"; +beginchar(chars.sign_underbar,9u#,0,desc_depth#-.5rule_thickness#); uni "0x005F"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); +top y1r=top y2r=2/3h; +lft x1=0; x2=w-x1; +filldraw bskrule(1,2,.5hair,.5hair); +penlabels(1,2); +endchar; + +iff known chars.latin_grave: +bskchar "Grave accent"; +beginchar(chars.latin_grave,6u#,asc_height#,0); uni "0x0060"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +grave(0,1); +endchar; + +iff known chars.latin_grave_capital: +bskchar "Grave accent (capital)"; +beginchar(chars.latin_grave_capital,6u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +grave(0,1).capital; +endchar; + +iff known chars.latin_acute: +bskchar "Acute accent"; +beginchar(chars.latin_acute,6u#,asc_height#,0); uni "0x00B4"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +acute(0,1); +endchar; + +iff known chars.latin_acute_capital: +bskchar "Acute accent (capital)"; +beginchar(chars.latin_acute_capital,6u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +acute(0,1).capital; +endchar; + +iff known chars.latin_hacek: +bskchar "Check accent (hacek)"; +beginchar(chars.latin_hacek,7u#,asc_height#,0); uni "0x02C7"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +hacek(0,1,2); +endchar; + +iff known chars.latin_hacek_capital: +bskchar "Check accent (hacek) (capital)"; +beginchar(chars.latin_hacek_capital,7u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +hacek(0,1,2).capital; +endchar; + +iff known chars.sign_hacek: +bskchar "Hacek"; +beginchar(chars.sign_hacek,9u#,asc_height#,0); uni "0x02C7"; +adjust_fit(0,0); +pickup tiny.nib; +x0=u; x2=w-u; +hacek(0,1,2); +endchar; + +iff known chars.sign_circumflex: +bskchar "Circumflex"; +beginchar(chars.sign_circumflex,8u#,asc_height#,0); uni "0x005E"; +adjust_fit(0,0); +pickup tiny.nib; +lft x1=.5w+o; +circumflex(0,1,2); +endchar; + +iff known chars.latin_circumflex: +bskchar "Circumflex accent"; +beginchar(chars.latin_circumflex,7u#,asc_height#,0); uni "0x02C6"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +circumflex(0,1,2); +endchar; + +iff known chars.latin_circumflex_capital: +bskchar "Circumflex accent (capital)"; +beginchar(chars.latin_circumflex_capital,7u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +circumflex(0,1,2).capital; +endchar; + +iff known chars.latin_breve: +bskchar "Breve accent"; +beginchar(chars.latin_breve,7u#,asc_height#,0); uni "0x02D8"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +breve(0,1,2); +endchar; + +iff known chars.latin_breve_capital: +bskchar "Breve accent (capital)"; +beginchar(chars.latin_breve_capital,7u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +breve(0,1,2).capital; +endchar; + +iff known chars.sign_breve: +bskchar "Breve"; +beginchar(chars.sign_breve,9u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x2=w-u; x0=u; +breve(0,1,2); +endchar; + +iff known chars.latin_inverted_breve: +bskchar "Inverted breve accent"; +beginchar(chars.latin_inverted_breve,7u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +tieacc(0,1,2); +endchar; + +iff known chars.latin_inverted_breve_capital: +bskchar "Inverted breve accent (capital)"; +beginchar(chars.latin_inverted_breve_capital,7u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +tieacc(0,1,2).capital; +endchar; + +iff known chars.latin_tie: +bskchar "Tie accent"; +beginchar(chars.latin_tie,7u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=w; x2-x0=6u; +tieacc(0,1,2); +endchar; + +iff known chars.latin_tie_capital: +bskchar "Tie accent (capital)"; +beginchar(chars.latin_tie_capital,7u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=w; x2-x0=6u; +tieacc(0,1,2).capital; +endchar; + +iff known chars.latin_macron: +bskchar "Macron accent"; +beginchar(chars.latin_macron,7u#,.5[asc_height#,x_height#],0); uni "0x00AF"; +adjust_fit(0,0); +pickup tiny.nib; +lft x1=u; +macron(0,1); +endchar; + +iff known chars.latin_macron_capital: +bskchar "Macron accent (capital)"; +beginchar(chars.latin_macron_capital,7u#,Acc_height#-.1x_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +lft x1=u; +macron(0,1); +endchar; + +iff known chars.latin_ring: +bskchar "Ring accent (krouzek)"; +beginchar(chars.latin_ring,6u#,asc_height#,0); uni "0x02DA"; +adjust_fit(0,0); +pickup tiny.nib; +x0=.5w; +ring(0,1); +endchar; + +iff known chars.latin_ring_capital: +bskchar "Ring accent (capital)"; +beginchar(chars.latin_ring_capital,6u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x0=.5w; +ring(0,1).capital; +endchar; + +iff known chars.latin_dot_above: +bskchar "Dot accent"; +beginchar(chars.latin_dot_above,6u#,asc_height#,0); uni "0x02D9"; +adjust_fit(0,0); +pickup tiny.nib; +x0=.5w; +dotabove(0); +endchar; + +iff known chars.latin_dot_above_capital: +bskchar "Dot accent (capital)"; +beginchar(chars.latin_dot_above_capital,6u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x0=.5w; +dotabove(0); +endchar; + +iff known chars.latin_umlaut: +bskchar "Umlaut accent"; +beginchar(chars.latin_umlaut,8u#,asc_height#,0); uni "0x00A8"; +adjust_fit(0,0); +pickup tiny.nib; +.5[x0,x1]=.5w; +umlaut(0,1); +endchar; + +iff known chars.latin_umlaut_capital: +bskchar "Umlaut accent (capital)"; +beginchar(chars.latin_umlaut_capital,8u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +.5[x0,x1]=.5w; +umlaut(0,1); +endchar; + +iff known chars.latin_tilde: +bskchar "Tilde accent"; +beginchar(chars.latin_tilde,8u#,asc_height#,0); uni "0x02DC"; +adjust_fit(0,0); +pickup tiny.nib; +tilde(0,1); +endchar; + +iff known chars.latin_tilde_capital: +bskchar "Tilde accent (capital)"; +beginchar(chars.latin_tilde_capital,8u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +tilde(0,1).capital; +endchar; + +iff known chars.latin_hungarian_umlaut: +bskchar "Hungarian umlaut accent"; +beginchar(chars.latin_hungarian_umlaut,6u#,asc_height#,0); uni "0x02DD"; +adjust_fit(0,0); +pickup tiny.nib; +h_umlaut(0,1,0',1',.2w); +endchar; + +iff known chars.latin_hungarian_umlaut_capital: +bskchar "Hungarian umlaut accent (capital)"; +beginchar(chars.latin_hungarian_umlaut_capital,6u#,Acc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +h_umlaut(0,1,0',1',.2w).capital; +endchar; + +iff known chars.polish_cross: +bskchar "Cross for Polish l"; +beginchar(chars.polish_cross,6u#,x_height#,0); uni "non"; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +.5[x1,x2]=.5w; +pol_cross(1,2); +endchar; + +iff known chars.latin_ogonek: +bskchar "Ogonek accent"; +beginchar(chars.latin_ogonek,7u#,0,.85desc_depth#); uni "0x02DB"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(stem,0); pos2(curve,0); pos3(hair,45); pos4(hair,160); +x1=3.5u; x2l=2u; x3=w-2u; rt x4l=w-.5u; +y1=0; y2=-.5d; bot y3l=-d; y4=-2/3d; +filldraw z1l{z2l-z1r}..z2l...z3l..{z1-z2}z4l..z4r{z2-z1}..z3r..z2r..z1r&z1r..z1+.5o*up..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.latin_cedilla: +bskchar "Cedilla accent"; +beginchar(chars.latin_cedilla,6u#,0,.65desc_depth#); uni "0x00B8"; +adjust_fit(0,0); +pickup tiny.nib; +path p; oblu:=3oblu; +pos1(.5stem,0); pos2(.5stem,0); pos3(.8stem,0); pos4(.5stem,-110); +x1r=x2r=.5w; y1=0; y2=-hair; rt x3r=w-u; y3=-.5d; +lft x4r=u; +y4r=-d; +p:=z2r..{down}z3r..{left}z4r..{right}z4l..{up}z3l..z2l--z1l; +filldraw z1r{down}..subpath (rundy(p,0),infinity) of p--cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.latin_cedilla_capital: +bskchar "Cedilla accent (capital)"; +beginchar(chars.latin_cedilla_capital,6u#,0,.65desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p; oblu:=3oblu; +pos1(.5stem,0); pos2(.5stem,0); pos3(stem,0); pos4(.5stem,-110); +x1r=x2r=.5w; y1=0; y2=-hair; rt x3r=w-u; y3=-.5d; +lft x4r=u; +y4r=-d; +p:=z2r..{down}z3r..{left}z4r..{right}z4l..{up}z3l..z2l--z1l; +filldraw z1r{down}..subpath (rundy(p,0),infinity) of p--cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_lattice_left: +bskchar "Left turnstile"; +beginchar(chars.math_lattice_left,12u#,asc_height#,0); uni "0x22A2"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,90); pos4(rule_thickness,90); +bot y1=-d; top y2=h; y3=y4=.5[y1,y2]; +lft x1l=lft x2l=u; rt x4=w-u; x3=x2r; +bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); +filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)--- + z2r..z2ll---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_lattice_right: +bskchar "Right turnstile"; +beginchar(chars.math_lattice_right,12u#,asc_height#,0); uni "0x22A3"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,90); pos4(rule_thickness,90); +bot y1=-d; top y2=h; y3=y4=.5[y1,y2]; +rt x1r=rt x2r=w-u; lft x4=u; x3=x2l; +bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); +filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll--- + obl(3l,4l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_lattice_top: +bskchar "Lattice top"; +beginchar(chars.math_lattice_top,14u#,asc_height#,0); uni "0x22A4"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,0); pos4(rule_thickness,0); +top y1r=top y2r=h; y3=y1l; bot y4=-d; +x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u; +bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); +filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll--- + obl(3l,4l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_lattice_bottom: +bskchar "Lattice bottom"; +beginchar(chars.math_lattice_bottom,14u#,asc_height#,0); uni "0x22A5"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,270); pos2(rule_thickness,270); +pos3(rule_thickness,0); pos4(rule_thickness,0); +bot y1r=bot y2r=-d; y3=y1l; top y4=h; +x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u; +bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); +filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll--- + obl(3l,4l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_triangle_up: +bskchar "Big triangle up"; +beginchar(chars.math_triangle_up,17u#,asc_height#,desc_depth#); uni "0x25B3"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; rt x2=w-u; x3=.5[x1,x2]; +bot y1=bot y2=0; top y3=h+o; +y1'=y2'=y1+lw; +x1'-x1=x2-x2'=lw/sind(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +oblu:=2oblu; +infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_right: +bskchar "Triangle pointing right"; +beginchar(chars.math_triangle_right,x_height#+2u#,v_center(x_height#)); uni "0x22B3"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair; +top y1=h; bot y2=0; +x1'=x2'=x1+lw; +y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +oblu:=2oblu; +infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_left: +bskchar "Triangle pointing left"; +beginchar(chars.math_triangle_left,x_height#+2u#,v_center(x_height#)); uni "0x22B2"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair; +top y1=h; bot y2=0; +x1'=x2'=x1-lw; +y1'-y1=y2-y2'=lw/cosd(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +oblu:=2oblu; +infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_black_right: +bskchar "Black triangle pointing right"; +beginchar(chars.math_triangle_black_right,x_height#+2u#,v_center(x_height#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair; +top y1=h; bot y2=0; +x1'=x2'=x1+lw; +y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_black_left: +bskchar "Black triangle pointing left"; +beginchar(chars.math_triangle_black_left,x_height#+2u#,v_center(x_height#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair; +top y1=h; bot y2=0; +x1'=x2'=x1-lw; +y1'-y1=y2-y2'=lw/cosd(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_black_up: +bskchar "Big black triangle up"; +beginchar(chars.math_triangle_black_up,17u#,asc_height#,desc_depth#); uni "0x25B2"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; rt x2=w-u; x3=.5[x1,x2]; +bot y1=bot y2=-d; top y3=h+o; +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +labels(1,2,3); +endchar; + +iff known chars.math_triangle_down: +bskchar "Big triangle down"; +beginchar(chars.math_triangle_down,17u#,asc_height#,desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; rt x2=w-u; x3=.5[x1,x2]; +top y1=top y2=h-d; bot y3=-d-o; +y1'=y2'=y1-lw; +x1'-x1=x2-x2'=-lw/sind(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +oblu:=2oblu; +infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_black_down: +bskchar "Big black triangle down"; +beginchar(chars.math_triangle_black_down,17u#,asc_height#,desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; rt x2=w-u; x3=.5[x1,x2]; +top y1=top y2=h; bot y3=-d-o; +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +labels(1,2,3); +endchar; + +iff known chars.math_big_triangle_right: +bskchar "Big triangle right"; +beginchar(chars.math_big_triangle_right,17u#,asc_height#,0desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=lft x2=u; rt x3=w-u; +top y1=h+o; bot y2=-d-o; y3=.5[y1,y2]; +x1'=x2'=x1+lw; +y1'-y1=y2-y2'=-lw/cosd(angle(z3-z2)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +oblu:=2oblu; +infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_black_right: +bskchar "Big black triangle right"; +beginchar(chars.math_triangle_black_right,17u#,asc_height#,0desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=lft x2=u; rt x3=w-u; +top y1=h+o; bot y2=-d-o; y3=.5[y1,y2]; +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +labels(1,2,3); +endchar; + +iff known chars.math_big_triangle_left: +bskchar "Big triangle left"; +beginchar(chars.math_big_triangle_left,17u#,asc_height#,0desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +rt x1=rt x2=w-u; lft x3=u; +top y1=h+o; bot y2=-d-o; y3=.5[y1,y2]; +x1'=x2'=x1-lw; +y1'-y1=y2-y2'=lw/cosd(angle(z3-z2)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +oblu:=2oblu; +infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle; +labels(1,1',2,2',3,3'); +endchar; + +iff known chars.math_triangle_black_left: +bskchar "Big black triangle left"; +beginchar(chars.math_triangle_black_left,17u#,asc_height#,0desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +rt x1=rt x2=w-u; lft x3=u; +top y1=h+o; bot y2=-d-o; y3=.5[y1,y2]; +filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle; +labels(1,2,3); +endchar; + +iff known chars.math_curved_triangle_up: +bskchar "Big curved triangle up"; +beginchar(chars.math_curved_triangle_up,17u#,asc_height#,desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; rt x2=w-u; x3=.5[x1,x2]; +bot y1=bot y2=-d; top y3=h+o; +y1'=y2'=y1+lw; +x1'-x1=x2-x2'=lw/sind(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +z2''=.5[z1,z2]+hair*up; +filldraw obl(1,3,2)..z2''..obl(2,1,3)---obl(3,2,1)---cycle; +oblu:=2oblu; +infill obl(1',3',2')..z2''+lw*up..obl(2',1',3')---obl(3',2',1')---cycle; +labels(1,1',1'',2,2',2'',3,3'); +endchar; + +iff known chars.math_curved_triangle_up_black: +bskchar "Big curved triangle up"; +beginchar(chars.math_curved_triangle_up_black,17u#,asc_height#,desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric lw; +lw=rule_thickness-currentbreadth; +lft x1=u; rt x2=w-u; x3=.5[x1,x2]; +bot y1=bot y2=-d; top y3=h+o; +y1'=y2'=y1+lw; +x1'-x1=x2-x2'=lw/sind(angle(z3-z1)); +z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1); +z1''=.5[z1,z3]+2hair*dir(angle(z3-z1)-90); +z2''=.5[z1,z2]+hair*up; +z3''=.5[z2,z3]+2hair*dir(angle(z3-z2)+90); +filldraw z1+oblu*right{right}..z2''..{right}z2+oblu*left.. + z2+oblu*unitvector(z3-z2){z3-z2} + ..z3''...{z3-z2}z3+oblu*unitvector(z2-z3)..z3+oblu*unitvector(z1-z3){z1-z3}.. + z1''..{z1-z3}z1+oblu*unitvector(z3-z1)..cycle; +labels(1,1',1'',2,2',2'',3,3',3''); +endchar; + +iff known chars.math_sum_text: +bskchar "\textstyle summation sign"; +beginchar(chars.math_sum_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +numeric alpha, top_stem, top_arm, bot_arm; +top_arm=Vround rule_thickness; +bot_arm=Vround .5[cap_stem,rule_thickness]; +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=-d; top y2=h; +lft x1l=lft x2l-o=.5u; +bot y3r=-d; top y4r=h; rt x3l=w-u; x4r=w-2u; +pos3(beak,-90); z3d=(x3r-2ser_height,y1+bot_arm); +pos4(.65beak,90); z4d=(x4r-ser_height,y2r.b); +z3l.o=z3l+o*left; z4l.o=z4l+o*left; +x5r=.5w-o; y5=.5[h,-d]+cap_hair; +alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r); +pos5(alpha*cap_stem,0); +alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r); +pos6(alpha*cap_hair,0); z5r=z6r; +z1r-z1r.b=bot_arm*down; +y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r); +z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1']; +y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5'); +filldraw z3l..{dir-110}z3l.o..z3d + ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d) + ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5') + ---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l)---cycle; +penlabels(1,2,3,4,5,6); labels(1',1r.b,4d,4l.o,5',2r.b); +endchar; + +iff known chars.math_sum_disp: +bskchar "\displaystyle summation sign"; +beginchar(chars.math_sum_disp,19u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +numeric alpha, top_stem, top_arm, bot_arm; +top_arm=Vround 1.5rule_thickness; +bot_arm=Vround cap_stem; +pos1(1.5cap_stem,0); pos2(1.5cap_stem,0); +bot y1=-d; top y2=h; +lft x1l=lft x2l-o=.5u; +bot y3r=-d; top y4r=h; rt x3l=w-u; x4r=w-2u; +pos3(1.25beak,-90); z3d=(x3r-2ser_height,y1+bot_arm); +pos4(.8beak,90); z4d=(x4r-ser_height,y2r.b); +z3l.o=z3l+o*left; z4l.o=z4l+o*left; +x5r=.5w-o; y5=.5[h,-d]+cap_hair; +alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r); +pos5(1.5alpha*cap_stem,0); +alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r); +pos6(1.5alpha*cap_hair,0); z5r=z6r; +z1r-z1r.b=bot_arm*down; +y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r); +z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1']; +y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5'); +filldraw z3l..{dir-110}z3l.o..z3d + ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d) + ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5') + ---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l)---cycle; +penlabels(1,2,3,4,5,6); labels(1',4d,4l.o,5',2r.b); +endchar; + +iff known chars.math_prod_text: +bskchar "\textstyle product sign"; +beginchar(chars.math_prod_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(1.1cap_stem,0); pos2(1.1cap_stem,0); +pos3(1.1cap_stem,0); pos4(1.1cap_stem,0); +bot y1=bot y3=-d; top y2=top y4=h; +lft x1l=lft x2l=u; +x3r=x4r=w-x1l; +{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem]; + cap_serifs_tl(2l); cap_serifs_tr(2r); + cap_serifs_tl(4l); cap_serifs_tr(4r); + cap_serifs_br(1r); cap_serifs_bl(3l); +}}; +cap_serifs_bl(1l); +cap_serifs_br(3r); +z2'=(x2r,y2r.b-1.2stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c-hair); +filldraw z1l.b{down}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b--- + z2'..{right}z3'..z4' + ---z3l.b..{left}z3l.c..z3l.a---z3r.a..z3r.c{left}..z3r.b---z4r.b.. + {right}z4r.c..{left}z4r.a..{left}z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4); labels(2',3',4'); +endchar; + +iff known chars.math_prod_disp: +bskchar "\displaystyle product sign"; +beginchar(chars.math_prod_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(1.5cap_stem,0); pos2(1.5cap_stem,0); +pos3(1.5cap_stem,0); pos4(1.5cap_stem,0); +bot y1=bot y3=-d; top y2=top y4=h; +lft x1l=lft x2l=u; +x3r=x4r=w-x1l; +{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem]; + cap_serifs_tl(2l); cap_serifs_tr(2r); + cap_serifs_tl(4l); cap_serifs_tr(4r); + cap_serifs_br(1r); cap_serifs_bl(3l); +}}; +cap_serifs_bl(1l); +cap_serifs_br(3r); +z2'=(x2r,y2r.b-1.5stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c-cap_hair); +filldraw z1l.b{down}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b--- + z2'..{right}z3'..z4' + ---z3l.b..{left}z3l.c..z3l.a---z3r.a..z3r.c{left}..z3r.b---z4r.b.. + {right}z4r.c..{left}z4r.a..{left}z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4); labels(2',3',4'); +endchar; + +iff known chars.math_coprod: +bskchar "Coproduct sign"; +beginchar(chars.math_coprod,12u#,cap_height#,0); uni "0x2210"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +pos1(cap_stem,0); pos2(cap_stem,0); +pos3(cap_stem,0); pos4(cap_stem,0); +top y1=top y3=h; bot y2=bot y4=-d; +lft x1l=lft x2l=1.5u; +x3r=x4r=w-x1l; +{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem]; + cap_serifs_bl(2l); cap_serifs_br(2r); + cap_serifs_bl(4l); cap_serifs_br(4r); + cap_serifs_tr(1r); cap_serifs_tl(3l); + cap_serifs_tl(1l); cap_serifs_tr(3r); +}}; +z2'=(x2r,y2r.b+.5stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c); +filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b + ---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a + ..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a + ..{left}z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4); labels(2',3',4'); +endchar; + +iff known chars.math_coprod_text: +bskchar "\textstyle coproduct sign"; +beginchar(chars.math_coprod_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(1.1cap_stem,0); pos2(1.1cap_stem,0); +pos3(1.1cap_stem,0); pos4(1.1cap_stem,0); +top y1=top y3=h; bot y2=bot y4=-d; +lft x1l=lft x2l=1.5u; +x3r=x4r=w-x1l; +{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem]; + cap_serifs_bl(2l); cap_serifs_br(2r); + cap_serifs_bl(4l); cap_serifs_br(4r); + cap_serifs_tr(1r); cap_serifs_tl(3l); + cap_serifs_tl(1l); cap_serifs_tr(3r); +}}; +z2'=(x2r,y2r.b+.75stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c+hair); +filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b + ---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a + ..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a + ..{left}z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4); labels(2',3',4'); +endchar; + +iff known chars.math_coprod_disp: +bskchar "\displaystyle coproduct sign"; +beginchar(chars.math_coprod_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(1.5cap_stem,0); pos2(1.5cap_stem,0); +pos3(1.5cap_stem,0); pos4(1.5cap_stem,0); +top y1=top y3=h; bot y2=bot y4=-d; +lft x1l=lft x2l=1.5u; +x3r=x4r=w-x1l; +{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem]; + cap_serifs_bl(2l); cap_serifs_br(2r); + cap_serifs_bl(4l); cap_serifs_br(4r); + cap_serifs_tr(1r); cap_serifs_tl(3l); + cap_serifs_tl(1l); cap_serifs_tr(3r); +}}; +z2'=(x2r,y2r.b+1.2stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c+cap_hair); +filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b + ---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a + ..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a + ..{left}z2l.a..{right}z2l.c..z2l.b---cycle; +penlabels(1,2,3,4); labels(2',3',4'); +endchar; + +iff known chars.math_int: +bskchar "Integral sign"; +beginchar(chars.math_int,10u#,asc_height#,desc_depth#); uni "0x222B"; +italcorr asc_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric fend; fend:=1.5stem; +pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d]; +pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180); +top y2=h-like_curve; +x3-lft x2l=2u; +top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair; +rt x4l=w-u; +z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +y2r:=y2l+hair; z3'r=z3r+.5hair*right; +.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1; +pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0); +bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair; +y5r:=y5r-hair; +z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135); +y1r:=y1r-o; y1l:=y1l+o; +filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r + ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle; +penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7''); +endchar; + +iff known chars.math_int_text: +bskchar "\textstyle integral sign"; +beginchar(chars.math_int_text,8.5u#,0,11/6dh#); uni "non"; +italcorr 3u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric fend; fend:=1.5stem; +pos1(bourstem,0); x1=good.x .5w; y1=.5[h,-d]; +pos2(stem,0); pos3(hair,-90); pos4(fend,180); +top y2=h-like_curve; x3-lft x2l=.85*2.75u; +top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair; +rt x4l=w+curve; z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +y2r:=y2l+hair; z3'r=z3r+.5hair*right; +.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1; +pos5(stem,180); pos6(hair,-90); pos7(fend,0); +bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair; +y5r:=y5r-hair; +z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135); +y1r:=y1r-o; y1l:=y1l+o; +filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r + ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle; +penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7''); +endchar; + +iff known chars.math_int_disp: +bskchar "\displaystyle integral sign"; +beginchar(chars.math_int_disp,17u#,0,4dh#); uni "non"; +italcorr 6u#; +adjust_fit(0,-ic#); +pickup tiny.nib; +numeric fend; fend:=1.5bourstem; +pos1(1.5bourstem,0); x1=good.x .5w; y1=.5[h,-d]; +pos2(.5[stem,bourstem],0); pos3(hair,-90); pos4(fend,180); +top y2=h-like_curve; x3-lft x2l=2.75u; +top y3l=h+o; .45[x2r,x4]=x3; y4''=y3r-1.5like_hair; +rt x4l=w+curve; z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +y2r:=y2l+hair; z3'r=z3r+.5hair*right; +.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1; +pos5(.5[stem,bourstem],180); pos6(hair,-90); pos7(fend,0); +bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair; +y5r:=y5r-hair; +z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135); +y1r:=y1r-o; y1l:=y1l+o; +filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r + ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle; +penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7''); +endchar; + +iff known chars.math_oint_text: +bskchar "\textstyle contour integral sign"; +beginchar(chars.math_oint_text,8.5u#,0,11/6dh#); uni "non"; +italcorr 3u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu; +path p[]; +pos9(bourstem,0); x9=good.x .5w; y9=.5[h,-d]; +pos10(stem,0); pos11(hair,-90); pos12(fend,180); +top y10=h-like_curve; x11-lft x10l=.85*2.75u; +top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair; +rt x12l=w+curve; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45; +y10r:=y10l+hair; z11'r=z11r+.5hair*right; +.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9; +pos13(stem,180); pos14(hair,-90); pos15(fend,0); +bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair; +y13r:=y13r-hair; +z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135); +y9r:=y9r-o; y9l:=y9l+o; +lft x6=u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9; +circle_points(rule_thickness); +p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r + ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle; +p1=reverse (draw_circle.l); +(tim0,tim1)=p0 intersectiontimes p1; +(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1; +(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1; +(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1 + ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0 + ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1 + ..subpath(rundy(p0,tim6),length p0) of p0&cycle; +p2=reverse (draw_circle.r); +(tim8,tim9)=p0 intersectiontimes p2; +(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2; +(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2; +(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2; +infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle; +infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15''); +endchar; + +iff known chars.math_oint_disp: +bskchar "\displaystyle contour integral sign"; +beginchar(chars.math_oint_disp,17u#,0,4dh#); uni "non"; +italcorr 6u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric fend, tim[]; fend:=1.5bourstem; oblu:=4oblu; +path p[]; +pos9(1.5bourstem,0); x9=good.x .5w; y9=.5[h,-d]; +pos10(.5[stem,bourstem],0); pos11(hair,-90); pos12(fend,180); +top y10=h-like_curve; x11-lft x10l=2.75u; +top y11l=h+o; .45[x10r,x12]=x11; y12''=y11r-like_hair; +rt x12l=w+curve; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45; +y10r:=y10l+hair; z11'r=z11r+.5hair*right; +.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9; +pos13(.5[stem,bourstem],180); pos14(hair,-90); pos15(fend,0); +bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair; +y13r:=y13r-hair; +z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135); +y9r:=y9r-o; y9l:=y9l+o; +lft x6=u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9; +circle_points(1.2rule_thickness); +p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r + ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle; +p1=reverse (draw_circle.l); +(tim0,tim1)=p0 intersectiontimes p1; +(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1; +(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1; +(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1 + ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0 + ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1 + ..subpath(rundy(p0,tim6),length p0) of p0&cycle; +p2=reverse (draw_circle.r); +(tim8,tim9)=p0 intersectiontimes p2; +(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2; +(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2; +(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2; +infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle; +infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15''); +endchar; + +iff known chars.math_sqintersection: +bskchar "Square set intersection sign"; +beginchar(chars.math_sqintersection,11u#,.8asc_height#,0); uni "0x2293"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0); +bot y1=bot y4=-d; top y2=top y3=h; +lft x1l=lft x2l=u; x3r=x4r=w-x1l; +bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair); +y2r:=y3l:=y3-rule_thickness+currentbreadth; +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_squnion: +bskchar "Square set union sign"; +beginchar(chars.math_squnion,11u#,.8asc_height#,0); uni "0x2294"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0); +top y1=top y4=h; bot y2=bot y3=-d; +lft x1l=lft x2l=u; x3r=x4r=w-x1l; +bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair); +y2r:=y3l:=y3+rule_thickness-currentbreadth; +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_squnion_text: +bskchar "\textstyle square set union sign"; +beginchar(chars.math_squnion_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(stem,0); pos2(stem,0); pos3(stem,0); pos4(stem,0); +top y1=top y4=h; bot y2=bot y3=-d; +lft x1l=lft x2l=u; x3r=x4r=w-x1l; +bskpoints(1,2,stem,stem); bskpoints(3,4,stem,stem); +y2r:=y3l:=y3+stem-currentbreadth; +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..z1..cycle; +penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_squnion_disp: +bskchar "\displaystyle square set union sign"; +beginchar(chars.math_squnion_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(bourstem,0); pos2(bourstem,0); pos3(bourstem,0); pos4(bourstem,0); +top y1=top y4=h; bot y2=bot y3=-d; +lft x1l=lft x2l=u; x3r=x4r=w-x1l; +bskpoints(1,2,stem,stem); bskpoints(3,4,stem,stem); +y2r:=y3l:=y3+bourstem-currentbreadth; +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4+2o*up..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..z1+2o*up..cycle; +penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_union: +bskchar "Set union sign"; +beginchar(chars.math_union,11u#,.8asc_height#,0); uni "0x222A"; +italcorr .8asc_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90); +pos4(rule_thickness,180); pos5(rule_thickness,180); +top y1=top y5=h; bot y3l=-d-o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3+(x3-x2); +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_union_text: +bskchar "\textstyle set union sign"; +beginchar(chars.math_union_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(stem,0); pos2(stem,0); pos3(.9stem,90); pos4(stem,180); pos5(stem,180); +top y1=top y5=h; bot y3l=-d-o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3+(x3-x2); +bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem); +filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_union_disp: +bskchar "\displaystyle set union sign"; +beginchar(chars.math_union_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(bourstem,0); pos2(bourstem,0); pos3(.9bourstem,90); pos4(bourstem,180); pos5(bourstem,180); +top y1=top y5=h; bot y3l=-d-o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3+(x3-x2); +bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem); +filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*up..z5rr---z4r...z3r...z2r---z1rr..z1+2o*up..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_multiunion: +bskchar "Multiset union sign"; +beginchar(chars.math_multiunion,11u#,.8asc_height#,0); uni "0x228E"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); +pos4(rule_thickness,180); pos5(rule_thickness,180); +top y1=top y5=h; bot y3l=-d-o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3+(x3-x2); +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle; +pos6(rule_thickness,90); pos7(rule_thickness,90); +pos8(rule_thickness,0); pos9(rule_thickness,0); +lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1]; +x8=x9=.5w; y8-y9=x7-x6; +bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair); +z10=whatever[z9l,z8l]=whatever[z6l,z7l]; +z11=whatever[z9r,z8r]=whatever[z6l,z7l]; +z12=whatever[z9r,z8r]=whatever[z6r,z7r]; +z13=whatever[z9l,z8l]=whatever[z6r,z7r]; +filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r--- + obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle; +penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr); +endchar; + +iff known chars.math_multiunion_text: +bskchar "\textstyle multiset union sign"; +beginchar(chars.math_multiunion_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(stem,0); pos2(stem,0); pos3(.9stem,90); pos4(stem,180); pos5(stem,180); +top y1=top y5=h; bot y3l=-d-o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3+(x3-x2); +bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem); +filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle; +pos6(rule_thickness,90); pos7(rule_thickness,90); +pos8(rule_thickness,0); pos9(rule_thickness,0); +lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1]; +x8=x9=.5w; y8-y9=x7-x6; +bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair); +z10=whatever[z9l,z8l]=whatever[z6l,z7l]; +z11=whatever[z9r,z8r]=whatever[z6l,z7l]; +z12=whatever[z9r,z8r]=whatever[z6r,z7r]; +z13=whatever[z9l,z8l]=whatever[z6r,z7r]; +filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r--- + obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle; +penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr); +endchar; + +iff known chars.math_multiunion_disp: +bskchar "\displaystyle multiset union sign"; +beginchar(chars.math_multiunion_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(bourstem,0); pos2(bourstem,0); pos3(.9bourstem,90); pos4(bourstem,180); pos5(bourstem,180); +top y1=top y5=h; bot y3l=-d-o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3+(x3-x2); +bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem); +filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*up..z5rr---z4r...z3r...z2r---z1rr..z1+2o*up..cycle; +pos6(stem,90); pos7(stem,90); +pos8(stem,0); pos9(stem,0); +lft x6=rt x1r + bourstem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1]; +x8=x9=.5w; y8-y9=x7-x6; +bskpoints(6,7,stem,stem); bskpoints(9,8,.5stem,.5stem); +z10=whatever[z9l,z8l]=whatever[z6l,z7l]; +z11=whatever[z9r,z8r]=whatever[z6l,z7l]; +z12=whatever[z9r,z8r]=whatever[z6r,z7r]; +z13=whatever[z9l,z8l]=whatever[z6r,z7r]; +filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r--- + obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle; +penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr); +endchar; + +iff known chars.math_intersection: +bskchar "Set intersection sign"; +beginchar(chars.math_intersection,11u#,.8asc_height#,0); uni "0x2229"; +italcorr .8asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90); +pos4(rule_thickness,180); pos5(rule_thickness,180); +bot y1=bot y5=-d; top y3l=h+o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3-(x3-x2); +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_intersection_text: +bskchar "\textstyle set intersection sign"; +beginchar(chars.math_intersection_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(stem,0); pos2(stem,0); pos3(.9stem,-90); pos4(stem,180); pos5(stem,180); +bot y1=bot y5=-d; top y3l=h+o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3-(x3-x2); +bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem); +filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_intersection_disp: +bskchar "\displaystyle set intersection sign"; +beginchar(chars.math_intersection_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(bourstem,0); pos2(bourstem,0); pos3(.9bourstem,-90); pos4(bourstem,180); pos5(bourstem,180); +bot y1=bot y5=-d; top y3l=h+o; +lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w; +y2=y4=y3-(x3-x2); +bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem); +filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*down..z5rr---z4r...z3r...z2r---z1rr..z1+2o*down..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_infinity: +bskchar "Infinity sign"; +beginchar(chars.math_infinity,16u#,x_height#,0); uni "0x221E"; +italcorr x_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric testem, tlstem, tim[]; oblu:=2oblu; +testem=.5[curve, hair]; tlstem=.75[curve,stem]; +pos1(testem,90); pos2(tlstem,270); pos3(tlstem,270); pos4(testem,90); +pos5(vair,180); pos6(vair,180); +lft x6r=u; rt x5l=w-u; +bot y3r=bot y1l=-o; top y4r=top y2l=h+o; +x3=x4=.27(w-2u)+u; x1=x2=.76(w-2u)+u; +y5=y6=.5h; z0=(.5w,.5h); +p0:=z6{down}..z3..z0..z2..{up}z5; pos0(curve,angle(direction 2 of p0)-90); +p1=z6r{down}..z3r..z0r..z2r..z5r{down}; +p2=z4l{right}..z0{dir-70}..{right}z1l; +p3=z5l{up}..z2l..z0l..z3l..{up}z6l; +p4=z1r{left}..z0{dir110}..{left}z4r; +p5=z6l{down}..z3l..z0l..z2l..z5l{down}; + +z10=bsktouch(p1,right,p2,left); +tim1=xpart(p1 intersectiontimes (z10--(x3,y10))); +tim2=xpart(p2 intersectiontimes (z10--(x1,y10))); +z11=bsktouch(p3,left,p4,right); +tim3=xpart(p3 intersectiontimes (z11--(x2,y11))); +tim4=xpart(p4 intersectiontimes (z11--(x3,y11))); +(tim5,tim6)=p5 intersectiontimes p2; +(tim7,tim8)=p1 intersectiontimes p4; + +filldraw subpath(0,rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p2,tim2),infinity) of p2 + ..subpath(0,rundy(p3,tim3).zpet) of p3 + ..subpath(rundy(p4,tim4),infinity) of p4..cycle; +infill subpath(0,rundy(p5,tim5).zpet) of p5 .. + (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle; +infill subpath(rundy(p1,tim7),infinity) of p1 + ..subpath(0,rundy(p4,tim8).zpet) of p4..cycle; +penlabels(0,1,2,3,4,5,6); +endchar; + +iff known chars.math_propto: +bskchar "Proportionality sign"; +beginchar(chars.math_propto,12u#,x_height#,0); uni "0x221D"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric testem, tlstem, tim[]; oblu:=2oblu; +testem=.5[curve, hair]; tlstem=.75[curve,stem]; +pos1(testem,90); pos2(testem,270); pos3(tlstem,270); pos4(testem,90); +pos5(vair,180); pos6(vair,180); +lft x6r=u; rt x5l=w+2u; +bot y3r=bot y1l=-o; top y4r=top y2l=h+o; +x3=x4=.5[x6,x0]-o; x1=w-u-.5testem; x2=w-u-.5tlstem; +y5=y6=.5h; z0=.5[z6,z5]; +p0:=z6{down}..z3..z0..z2..{up}z5; pos0(curve,angle(direction 2 of p0)-90); +p1=z6r{down}..z3r..z0r..z2r..z5r{down}; +p2=z4l{right}..z0{dir-70}..{right}z1l; +p3=z5l{up}..z2l..z0l..z3l..{up}z6l; +p4=z1r{left}..z0{dir110}..{left}z4r; +p5=z6l{down}..z3l..z0l..z2l..z5l{down}; + +z10=bsktouch(p1,right,p2,left); +tim1=xpart(p1 intersectiontimes (z10--(x3,y10))); +tim2=xpart(p2 intersectiontimes (z10--(x1,y10))); +z11=bsktouch(p3,left,p4,right); +tim3=xpart(p3 intersectiontimes (z11--(x2,y11))); +tim4=xpart(p4 intersectiontimes (z11--(x3,y11))); +(tim5,tim6)=p5 intersectiontimes p2; +(tim7,tim8)=p1 intersectiontimes p4; + +filldraw subpath(0,rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p2,tim2),infinity) of p2 + ..subpath(0,rundy(p4,tim8).zpet) of p4 + ..subpath(2,3) of p1 + ..subpath(1,rundy(p3,tim3).zpet) of p3 + ..subpath(rundy(p4,tim4),infinity) of p4..cycle; +infill subpath(0,rundy(p5,tim5).zpet) of p5 .. + (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle; +penlabels(0,1,2,3,4,5,6); +endchar; + +iff known chars.sign_surd: +bskchar "Root sign (surd)"; +beginchar(chars.sign_surd,10u#,asc_height#,0); uni "0x221A"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=220; +pos0(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,theta-90); pos4(rule_thickness,theta-90); +x1l=good.x(w-2u); top y1l=h-o+apex_o; +x2l=5u; bot y2l=-d-apex_o; +y0r=y1r; x0r=w; +bot y3l=2/3[h,-d]; lft x3r=2u; +x4l=u; z4l=z3l+whatever*dir(theta); +z3'=z3r+(stem-currentbreadth)*unitvector(z3-z4); +z2'=z2r+(stem-currentbreadth)*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +p3:=(x1l,y0l){dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z0l---(x1l+f_obl,y0l)..subpath(rundy(p3,(0,f_obl)),infinity) of p3 + &subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p1,tim1),rundy(p1,(length p1,f_obl)).zpet) of p1 + ..z1r+f_obl*right---z0r..cycle; +penlabels(0,1,2,3,4); labels(2',2'',3',5); +endchar; + +iff known chars.sign_root: +bskchar "Root sign (text)"; +beginchar(chars.sign_root,14u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=95; +pos2(rule_thickness,90); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +x1l=good.x(w-u+.5); top y1l=h-o+apex_o; +x2l=.5w; bot y2l=-d-apex_o; +bot y3l=2/3[h,-d]; lft x3r=3u; +x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta); +z3'=z3r+(stem-currentbreadth)*unitvector(z3-z4); +z2'=z2r+(stem-currentbreadth)*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(1,2,3,4); labels(2',2'',3'); +endchar; + +iff known chars.math_root: +bskchar "Root sign (math)"; +beginchar(chars.math_root,14u#,rule_thickness#,body_height#+paren_depth#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=95; +pos2(rule_thickness,90); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +x1l=good.x(w+.5); bot y1l=0; +x2l=.5w; bot y2l=-d-apex_o; +bot y3l=2/3[h,-d]; lft x3r=3u; +x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta); +z3'=z3r+(stem-currentbreadth)*unitvector(z3-z4); +z2'=z2r+(stem-currentbreadth)*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(1,2,3,4); labels(2',2'',3'); +endchar; + +iff known chars.math_root_big: +bskchar "\big root sign"; +beginchar(chars.math_root_big,18u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=95; +pos2(rule_thickness,90); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +x1l=good.x(w+.5); bot y1l=0; +x2l=.5w; bot y2l=-d-apex_o; +bot y3l=2/3[h,-d]; lft x3r=3u; +x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta); +z3'=z3r+stem*unitvector(z3-z4); +z2'=z2r+stem*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(1,2,3,4); labels(2',2'',3'); +endchar; + +iff known chars.math_root_Big: +bskchar "\Big root sign"; +beginchar(chars.math_root_Big,18u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=95; +pos2(rule_thickness,90); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +x1l=good.x(w+.5); bot y1l=0; +x2l=.5w; bot y2l=-d-apex_o; +bot y3l=2/3[h,-d]; lft x3r=3u; +x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta); +z3'=z3r+stem*unitvector(z3-z4); +z2'=z2r+stem*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(1,2,3,4); labels(2',2'',3'); +endchar; + +iff known chars.math_root_bigg: +bskchar "\bigg root sign"; +beginchar(chars.math_root_bigg,18u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=95; +pos2(rule_thickness,90); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +x1l=good.x(w+.5); bot y1l=0; +x2l=.5w; bot y2l=-d-apex_o; +bot y3l=2/3[h,-d]; lft x3r=3u; +x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta); +z3'=z3r+stem*unitvector(z3-z4); +z2'=z2r+stem*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(1,2,3,4); labels(2',2'',3'); +endchar; + +iff known chars.math_root_Bigg: +bskchar "\Bigg root sign"; +beginchar(chars.math_root_Bigg,18u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=95; +pos2(rule_thickness,90); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +x1l=good.x(w+.5); bot y1l=0; +x2l=.5w; bot y2l=-d-apex_o; +bot y3l=2/3[h,-d]; lft x3r=3u; +x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta); +z3'=z3r+stem*unitvector(z3-z4); +z2'=z2r+stem*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''{dir(angle(z1-z2)+2)}..{dir(angle(z1-z2)-2)}z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z1l{dir(angle(z2-z1)-2)}..{dir(angle(z2-z1)+2)}z2l&subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(1,2,3,4); labels(2',2'',3'); +endchar; + +iff known chars.math_root_bottom: +bskchar "Extensible root sign---bottom"; +beginchar(chars.math_root_bottom,19u#,0,3dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +numeric theta; theta:=95; +pos2(rule_thickness,90); +pos3(rule_thickness,theta); pos4(rule_thickness,theta); +y1l=h; x1l=x2l=w-6u; bot y2l=-d-apex_o; +bot y3l=2/3[h,-d]; lft x3r=3u; +x4l=u; z4l=z3l+whatever*((z3-z2) rotated theta); +z3'=z3r+stem*unitvector(z3-z4); +z2'=z2r+stem*unitvector(z3-z4); +z2''=z2r+(rule_thickness-currentbreadth)*unitvector(z2l-z1l) rotated -90; +pos1(rule_thickness,angle(z2''-z2r)); +p0:=z2l{dir(angle(z3-z2)-5)}..{dir(angle(z3-z2)+5)}z3l; +p1:=z2''--z1r; +p2:=z3'{dir(angle(z2'-z3')+5)}..{dir(angle(z2'-z3')-5)}z2'; +z5=bsktouch(p1,left,p2,right); +tim1=xpart(p1 intersectiontimes (z5--(w,y5))); +tim2=xpart(p2 intersectiontimes (z5--(0,y5))); +filldraw z1l--z2l&subpath(0,rundy(p0,1).zpet) of p0 + ..subpath (rundy(z3l--z4l,0),infinity) of (z3l--z4l)..z4r + ---subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p1,tim1),infinity) of p1 + ..cycle; +penlabels(1,2,3,4); labels(2',2'',3'); +endchar; + +iff known chars.math_root_mid: +bskchar "Extensible root sign---extension module"; +beginchar(chars.math_root_mid,19u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +pos1(rule_thickness,180); pos2(rule_thickness,180); +y1=h; x1l=x2l=w-6u; bot y2=-d; +filldraw z1l---z2l..z2r---z1r..cycle; +penlabels(1,2); +endchar; + +iff known chars.math_root_top: +bskchar "Extensible root sign---top"; +beginchar(chars.math_root_top,19u#,rule_thickness#,dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,90); +y1=-d; x1r=x2r=w-6u; bot y3l=0; y3r=y2; +x3=good.x(w+.5); y2r:=y3l; +filldraw z1l---obl(2l,1l,3r)---z3r..z3l---hide(oblu:=2oblu)obl(2r,3l,1r)---z1r..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_root_end: +bskchar "Root sign ending"; +beginchar(chars.math_root_end,3u#,rule_thickness#,2rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,0); +x1=0; rt x2=w-u; bot y1l=0; y2=y1; +lft x3l=x1+o; y3=-d; +filldraw z1r---z2r..z2l{dir(angle(z3r-z2r)-40)}..z3r..{dir60}z3l...{left}z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_partial: +bskchar "Partial difference sign"; +beginchar(chars.math_partial,9u#,asc_height#,0); uni "0x2202"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(vair,180); pos2(hair,90); pos3(curve,0); pos4(hair,270); +pos5(curve,180); pos6(hair,-90); pos7(curve,0); +lft x3l=u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3; +rt x5l=w-u; y5l=y1r+stem; top y6l=h+o; x6=.5w+.5stem; +x7=x6-like_stem; y7=y6r-2/3like_stem; +p0=z2r{right}..z5r..{dir180}z6r; x1r=xpart (((0,y1)--(w,y1))intersectionpoint p0); +p1=z2l{left}..z3l..z4l{right}..{down}z1l; +z8=bsktouch(p0,left,subpath(1,infinity) of p1,right); +tim1=xpart(p1 intersectiontimes (z8--(x4,y8))); +tim2=xpart(p0 intersectiontimes (z8--(w,y8))); +filldraw z7r{down}..z7l{up}..{dir0}z6l...z5l..{left}z2l..subpath(0,rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p0,tim2),infinity) of p0..cycle; +infill z1r{up}..z4r{left}..z3r..z2r..cycle; +penlabels(1,2,3,4,5,6,7); +endchar; + +iff known chars.math_dag: +bskchar "Dagger symbol"; +beginchar(chars.math_dag,10u#,asc_height#,0); uni "0x2020"; +adjust_fit(0,0); +pickup tiny.nib; +numeric am; am=.5[hair,stem]; +pos1(hair,0); pos2(curve,0); pos3(hair,0); +pos4(am,90); pos5(curve,90); pos6(curve+hair,0); +pos7(am,90); pos8(curve,90); +x1=x2=x6=.5w; bot y1=-d-apex_o; y2=x_height-curve; bot z3=(x2,x_height+curve); +top y6=h; +z4-z3r=z3l-z7=1.5stem*right; rt z5=(w-1.25u,y4); x8=w-x5; y8=y5; +filldraw z1r{up}..z2r---obl(3r,2r,4l)---z4l..{right}z5l..(lft w-u,y5) + ..{left}z5r..z4r---obl(3r,4r,6r)..{up}z6r..top top z6 + ..z6l{down}..obl(3l,6l,7r)---z7r..{left}z8r..(rt u,y8) + ..{right}z8l..z7l---obl(3l,7l,2l)---z2l..{down}z1l..cycle; +penlabels(1,2,3,4,5,6,7,8); +endchar; + +iff known chars.math_dagger: +bskchar "Double dagger symbol"; +beginchar(chars.math_dagger,10u#,asc_height#,0); uni "0x2021"; +adjust_fit(0,0); +pickup tiny.nib; +numeric am; am=.5[hair,stem]; +pos1(hair,0); pos2(curve,0); pos3(hair,0); +pos4(am,90); pos5(curve,90); pos6(curve+hair,0); +pos7(am,90); pos8(curve,90); +pos9(curve,0); pos10(hair,0); +pos11(am,90); pos12(curve,90); pos13(curve+hair,0); +pos14(am,90); pos15(curve,90); +x2=x6=x9=x10=x13=.5w; y2=x_height-.5curve; bot z3=(x2,x_height+curve); +z4-z3r=z3l-z7=z11-z10r=z10l-z14=1.5stem*right; rt z5=(w-1.25u,y4); +x8=x15=w-x5; y8=y5; x12=x5; y15=y12=y11; +.5[y2,y9]=.5(h-d)=.5[y3,y10]; top y6=h; bot y13=-d; +z1=.5[z2,z9]; +filldraw z2r---obl(3r,2r,4l)---z4l..{right}z5l..(lft w-u,y5) + ..{left}z5r..z4r---obl(3r,4r,6r)..{up}z6r..top top z6 + ..z6l{down}..obl(3l,6l,7r)---z7r..{left}z8r..(rt u,y8) + ..{right}z8l..z7l---obl(3l,7l,2l)---z2l..z1l + ..z9l---obl(10l,9l,14r)---z14r..{left}z15r..(rt u,y15) + ..{right}z15l..z14l---obl(10r,14l,13l)..{down}z13l..bot bot z13 + ..{up}z13r..obl(10r,13r,11l)---z11l..{right}z12l..(lft w-u,y12) + ..{left}z12r..z11r---obl(10r,11r,9r)---z9r..z1r..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); +endchar; + +iff known chars.sign_died: +bskchar "Died symbol"; +beginchar(chars.sign_died,9u#,.5[asc_height#,x_height#],0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric am; am=.5[hair,stem]; +pos1(curve,0); pos2(hair,0); +pos3(am,90); pos4(curve,90); pos5(curve,0); +pos6(am,90); pos7(curve,90); +x1=x2=x5=.5w; bot y1=-d; y2=.65h; top y5=h; +z3-z2r=z2l-z6=1.5stem*right; rt z4=(w-u,y3); x7=w-x4; y7=y4; +filldraw z1r---obl(2r,1r,3l)---z3l..{right}z4l--z4r..z3r + ---obl(2r,3r,5r)---z5r..z5+o*up..z5l---obl(2l,5l,6r) + ---z6r..{left}z7r--z7l..z6l---obl(2l,6l,1l)---z1l--cycle; +penlabels(1,2,3,4,5,6,7); +endchar; + +iff known chars.arrow_right: +bskchar "Rightward arrow"; +beginchar(chars.arrow_right,15u#,v_center(5u#)); uni "0x2192"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); +rt x0=w-u; x1=w-x0; y0=y1r=math_axis; +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1l..z1rr---cycle; +labels(1rr); +endchar; + +iff known chars.arrow_hook_left: +bskchar "Left hook for rightward arrows"; +beginchar(chars.arrow_hook_left,5u#,math_axis#+4u#,-math_axis#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0); pos4(rule_thickness,270); +y1r=y2r=math_axis; rt x2=w-u; x1=x2+hair; +x3l=u; x4=x2; y3=.5[y2,y4]; y4l=h; +x4l:=x4l-hair; +filldraw z1l---z2l..z3l{up}..{right}z4l..{left}z4r..{down}z3r..z2r---z1r..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.arrow_left: +bskchar "Leftward arrow"; +beginchar(chars.arrow_left,15u#,v_center(5u#)); uni "0x2190"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); +lft x0=u; x1=w-x0; y0=y1l=math_axis; +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1rr..z1l---cycle; +labels(1rr); +endchar; + +iff known chars.arrow_hook_right: +bskchar "Right hook for leftward arrow"; +beginchar(chars.arrow_hook_right,5u#,math_axis#+4u#,-math_axis#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270); +y1l=y2l=math_axis; lft x2=u; x1=x2-hair; +x3l=w-u; x4=x2; y3=.5[y2,y4]; y4l=h; +x4r:=x4r+hair; +filldraw z1l---z2l..z3l{up}..{left}z4l..{right}z4r..{down}z3r..z2r---z1r..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.arrow_up: +bskchar "Upward arrow"; +beginchar(chars.arrow_up,9u#,asc_height#,0); uni "0x2191"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); +x0=x1l=.5w-o; +top y0=h+apex_o; bot y1=-d; +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1rr..z1l---cycle; +labels(1rr); +endchar; + +iff known chars.arrow_down: +bskchar "Downward arrow"; +beginchar(chars.arrow_down,9u#,asc_height#,0); uni "0x2193"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); +x0=x1r=.5w+o; +top y0=-d-apex_o; bot y1=h; +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1l..z1rr---cycle; +labels(1rr); +endchar; + +iff known chars.harpoon_right_up: +bskchar "Rightward up harpoon"; +beginchar(chars.harpoon_right_up,15u#,v_center(5u#)); uni "0x21C0"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); +rt x0=w-u; x1=w-x0; y0=y1r=math_axis; +bskpoints(1,0,hair,hair); +filldraw subpath (0,4) of sipka(0,1)...{left}z0a.l---z1l..z1rr---cycle; +labels(1rr); +endchar; + +iff known chars.harpoon_right_down: +bskchar "Rightward down harpoon"; +beginchar(chars.harpoon_right_down,15u#,v_center(5u#)); uni "0x21C1"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); +rt x0=w-u; x1=w-x0; y0=y1r=math_axis; +bskpoints(1,0,hair,hair); +filldraw subpath (4,infinity) of sipka(0,1)---z1l..z1rr---cycle; +labels(1rr); +endchar; + +iff known chars.harpoon_left_up: +bskchar "Leftward up harpoon"; +beginchar(chars.harpoon_left_up,15u#,v_center(5u#)); uni "0x21BC"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); +rt x1=w-u; x1=w-x0; y0=y1l=math_axis; +bskpoints(1,0,hair,hair); +filldraw subpath (4,infinity) of sipka(0,1)---z1rr..z1l---cycle; +labels(1rr); +endchar; + +iff known chars.harpoon_left_down: +bskchar "Leftward down harpoon"; +beginchar(chars.harpoon_left_down,15u#,v_center(5u#)); uni "0x21BD"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); +rt x1=w-u; x1=w-x0; y0=y1l=math_axis; +bskpoints(1,0,hair,hair); +filldraw subpath (0,4) of sipka(0,1)...{right}z0a.l---z1rr..z1l---cycle; +labels(1rr); +endchar; + +iff known chars.arrow_left_right: +bskchar "Left-right arrow"; +beginchar(chars.arrow_left_right,18u#,v_center(5u#)); uni "0x2194"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos0(rule_thickness,90); +lft x0=u; x1=w-x0; y0=y1=math_axis; +filldraw sipka(0,1)---sipka(1,0)---cycle; +endchar; + +iff known chars.arrow_up_down: +bskchar "Up-down arrow"; +beginchar(chars.arrow_up_down,9u#,asc_height#,0); uni "0x2195"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos0(rule_thickness,0); +x0=x1l=.5w; top y0=h+apex_o; bot y1=-d-apex_o; +filldraw sipka(0,1)---sipka(1,0)---cycle; +endchar; + +iff known chars.arrow_right_raise: +bskchar "Rightward raising arrow"; +beginchar(chars.arrow_right_raise,15u#,v_center(5u#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path arr; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos0'(rule_thickness,0); +lft x1=u; x2=.5[x1,x3]; x3=w-u-arrsize*cosd(30); +bot y1l=bot y2l=0; y3=bar_height; +arr:=z1---z2..{dir30}z3; +pos3(rule_thickness,angle(direction infinity of arr) + 90); +z0'=z0-direction infinity of arr; +z0a=z3; +filldraw z1r{right}..z2r..{dir30}z3r..sipka(0,0')..z3l{dir210}..z2l..{left}z1l..cycle; +penlabels(1,2,3); +labels(1rr); +endchar; + +iff known chars.arrow_up_start: +bskchar "Upward arrow with starting bar"; +beginchar(chars.arrow_up_start,9u#,asc_height#,0); uni "0x21A5"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); +pos2(rule_thickness,90); pos3(rule_thickness,90); +x0=x1l=.5w-o; +bot y2l=bot y3l=0; lft x2=u; x3=w-x2; +top y0=h+apex_o; y1=y3r; +filldraw sipka(0,1)---obl(1r,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1l,2r,0a.r)---cycle; +penlabels(2,3); +endchar; + +iff known chars.math_accent_arrow: +bskchar "Arrow (vector) math accent"; +beginchar(chars.math_accent_arrow,9u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +{{ save arrwidth, arrsize; + arrsize:=3hair; 1.2arrwidth=arrsize; + pos1(.25[hair,stem],90); + y0=y1=h-.5arrwidth; + x0=w-u; lft x1=u; + filldraw sipka(0,1)---z1l..z1r---cycle; +}}; +penlabels(1); +endchar; + +iff known chars.arrow_NE: +bskchar "Northeast arrow"; +beginchar(chars.arrow_NE,20u#,asc_height#,asc_depth#); uni "0x2197"; +adjust_fit(0,0); +pickup tiny.nib; +rt x0=w-u; lft x1l=u+.5(rule_thickness-.5currentbreadth); +top y0=h; bot y1l=-d; +pos1(rule_thickness,angle(z0-z1l)+90); +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1l..z1rr---cycle; +labels(1rr); +endchar; + +iff known chars.arrow_SE: +bskchar "Southeast arrow"; +beginchar(chars.arrow_SE,20u#,asc_height#,asc_depth#); uni "0x2198"; +adjust_fit(0,0); +pickup tiny.nib; +rt x0=w-u; lft x1r=u+.5(rule_thickness-.5currentbreadth); +bot y0=-d; top y1r=h; +pos1(rule_thickness,angle(z0-z1r)+90); +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1l..z1rr---cycle; +labels(1rr); +endchar; + +iff known chars.arrow_NW: +bskchar "Northwest arrow"; +beginchar(chars.arrow_NW,20u#,asc_height#,asc_depth#); uni "0x2196"; +adjust_fit(0,0); +pickup tiny.nib; +lft x0=u; rt x1l=w-u; +top y0=h; bot y1l=-d+.5(rule_thickness-.5currentbreadth); +pos1(rule_thickness,angle(z0-z1l)+90); +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1l..z1rr---cycle; +labels(1rr); +endchar; + + +iff known chars.arrow_SW: +bskchar "Southwest arrow"; +beginchar(chars.arrow_SW,20u#,asc_height#,asc_depth#); uni "0x2199"; +adjust_fit(0,0); +pickup tiny.nib; +lft x0=u; rt x1r=w-u; +bot y0=-d; top y1r=h-.5(rule_thickness-.5currentbreadth); +pos1(rule_thickness,angle(z0-z1r)+90); +bskpoints(1,0,hair,hair); +filldraw sipka(0,1)---z1l..z1rr---cycle; +labels(1rr); +endchar; + +iff known chars.math_accent_tie: +bskchar "Tie math accent"; +beginchar(chars.math_accent_tie,6u#,asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +x1=.5w; +tieacc(0,1,2); +endchar; + +iff known chars.math_ell: +bskchar "Ell (lowercase script-like letter l)"; +beginchar(chars.math_ell,8u#,asc_height#,0); uni "0x2113"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; +path p[]; +pos1(stem,180); pos2(hair,90); pos3(.45[hair,stem],0); pos4(hair,270); pos0(vair,-60); +pos1'(stem,180); +lft x1'r=1.5u; y1=3hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=w-u; +rt x3r=w-1.5u; y3=.7h; lft x4l=1.5u; +x1=.5[x2,x3]; y1'=y3+hair; +bot y4r=0; z4'=(x4-like_hair,y4); +p0=z4l..{up}z3l..z2l{left}..z1'l..z1l..{dir60}z0l; +p1=z0l{dir60}..{dir-120}z0r..z1r..z1'r..{right}z2r..z3r{down}..{dir-140}z4r..z4'..{right}z4l; +p2=subpath(2,infinity) of p0; +p3=subpath (0,3) of reverse p1; +p4=reverse p0; +p5=reverse subpath(2,6) of p1; +(tim1,tim2)=p0 intersectiontimes p2; +(tim3,tim4)=p3 intersectiontimes subpath (0,3) of p1; +(tim5,tim6-4)=p4 intersectiontimes subpath (4,infinity) of p1; +(tim7,tim8)=p0 intersectiontimes subpath(0,3) of p1; +filldraw subpath(0,rundy(p3,(tim3,curve)).zpet) of p3 + ..reverse subpath (0,rundy(p1,(tim4,curve)).zpet) of p1 + ..subpath (0,rundy(p4,tim5).zpet) of p4 + ..reverse subpath (rundy(p1,tim8),rundy(reverse p1,tim6).zpet) of p1 + ..reverse subpath (0,rundy(p0,tim7).zpet) of p0&cycle; +oblu:=curve; +infill subpath (rundy(p0,tim1),2) of p0& subpath(0,rundy(p2,tim2).zpet) of p2 ..cycle; +penlabels(0,1,1',2,3,4); labels(4'); +endchar; + +iff known chars.math_weierstrass_p: +bskchar "Weierstrass p"; +beginchar(chars.math_weierstrass_p,12u#,x_height#,desc_depth#); uni "0x2118"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +oblu:=2oblu; +pos0(.45[hair,stem],-40); pos1(hair,-10); pos2(hair,0); pos3(hair,270); pos4(curve,180); +pos5(hair,90); pos5'(vair,300); pos6(stem,0); pos7(hair,90); +rt x4l=w-u; y4=.5h; top y3l=h+o; bot y1r=-d+.25x_height; lft x1l=2u; +x0l=u; bot y0r=-d; +x3=.5[x2,x4]; y2=y4; z2=z1+whatever*dir80; +bot y5l=0; x5=x3; +z5'=(.5[x5,x8],.5[y5,y4]); +x6l=u+stem; z6=z2l+whatever*dir(200); +x7=u; y7r=h-o; +pos8(stem,angle(z7r-z2r)-90); +z8=z2l; +p0:=z5l{right}..z4l..z3l..z2l..{down}z1l..z0l; +p1:=z5'{up}..z8r..{left}z7r; +z10=bsktouch(p0,left,p1,right); +tim0=xpart(p0 intersectiontimes (z10--(x3,y10))); +tim1=xpart(p1 intersectiontimes (z10--(0,y10))); +filldraw z0r..z1r{up}..z2r..z3r..z4r..{left}z5r..{dir60}z5'r..{dir-120}z5'l + ..subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1 + --z7l{right}..z6l + ..{down}z1l..{direction infinity of p0}z0l..{(direction infinity of p0) rotated 180}cycle; +penlabels(0,1,2,3,4,5,5',6,7,8); labels(9,10); +endchar; + +iff known chars.math_logor: +bskchar "Logical or sign"; +beginchar(chars.math_logor,12u#,.8asc_height#,0); uni "0x2228"; +italcorr .8asc_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +x0=.5w; bot y0=-d-apex_o; +logor(0,1,2); +endchar; + +iff known chars.math_lattice_sup_text: +bskchar "\textstyle lattice supremum sign"; +beginchar(chars.math_lattice_sup_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +x0=.5w; bot y0=-d-apex_o; +{{ save rule_thickness; rule_thickness:=stem; logor(0,1,2); }}; +endchar; + +iff known chars.math_lattice_sup_disp: +bskchar "\displaystyle lattice supremum sign"; +beginchar(chars.math_lattice_sup_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +x0=.5w; bot y0=-d-apex_o; +{{ save rule_thickness; rule_thickness:=bourstem; logor(0,1,2); }}; +endchar; + +iff known chars.math_logand: +bskchar "Logical and sign"; +beginchar(chars.math_logand,12u#,.8asc_height#,0); uni "0x2227"; +italcorr .8asc_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +x0=.5w; top y0=h+apex_o; +logand(0,1,2); +endchar; + +iff known chars.math_lattice_inf_text: +bskchar "\textstyle lattice infinum sign"; +beginchar(chars.math_lattice_inf_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +x0=.5w; top y0=h+apex_o; +{{ save rule_thickness; rule_thickness:=stem; logand(0,1,2); }}; +endchar; + +iff known chars.math_lattice_inf_disp: +bskchar "\displaystyle lattice infinum sign"; +beginchar(chars.math_lattice_inf_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +x0=.5w; top y0=h+apex_o; +{{ save rule_thickness; rule_thickness:=bourstem; logand(0,1,2); }}; +endchar; + +iff known chars.math_less: +bskchar "Less than sign"; +beginchar(chars.math_less,12u#,v_center(8u#)); uni "0x003C"; +italcorr h#*slant; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +lft x0l=u; y0=math_axis; +less(0,1,2); +endchar; + +iff known chars.math_less_eq: +bskchar "Less than or equal to sign"; +beginchar(chars.math_less_eq,12u#,v_center(11u#)); uni "0x2264"; +italcorr h#*slant; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +lft x0l=u; y0=math_axis+2u; +pos3(rule_thickness,90); pos4(rule_thickness,90); +lft x3=u; rt x4=w-u; y3l=y4l=-d; +bskpoints(3,4,hair,hair); +filldraw z3rr..z3l---z4ll..z4r---cycle; +less(0,1,2); +penlabels(3,4); +endchar; + +iff known chars.math_much_less: +bskchar "Much less than sign"; +beginchar(chars.math_much_less,17u#,v_center(9u#)); uni "0x226A"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +lft x0l=u; rt x1r=w-6u; y0=y3=math_axis; +lft x3l=6u; rt x4r=w-u; +less(0,1,2); +less(3,4,5); +endchar; + +iff known chars.math_greater: +bskchar "Greater than sign"; +beginchar(chars.math_greater,12u#,v_center(8u#)); uni "0x003E"; +italcorr math_axis#*slant; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +rt x0r=w-u; y0=math_axis; +greater(0,1,2); +endchar; + +iff known chars.math_greater_eq: +bskchar "Greater than or equal to sign"; +beginchar(chars.math_greater_eq,12u#,v_center(11u#)); uni "0x2265"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +rt x0r=w-u; y0=math_axis+2u; +pos3(rule_thickness,90); pos4(rule_thickness,90); +lft x3=u; rt x4=w-u; y3l=y4l=-d; +bskpoints(3,4,hair,hair); +filldraw z3rr..z3l---z4ll..z4r---cycle; +greater(0,1,2); +penlabels(3,4); +endchar; + +iff known chars.math_much_greater: +bskchar "Much greater than sign"; +beginchar(chars.math_much_greater,17u#,v_center(9u#)); uni "0x226B"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +rt x0r=w-u; lft x1l=6u; y0=y3=math_axis; +rt x3r=w-6u; lft x4l=u; +greater(0,1,2); +greater(3,4,5); +endchar; + +iff known chars.math_five_star: +bskchar "Five-pointed star"; +beginchar(chars.math_five_star,x_height#+2u#,v_center(x_height#)); uni "0x22C6"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2.5oblu; +z0=(.5w,math_axis); +x1=x0; top y1=h+apex_o; pos1(hair,0); +forsuffixes i=2,3,4,5: + z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1)); +endfor +forsuffixes i=11,12,13,14,15: + z[i]=z0; pos.i(curve,72(i-1)); +endfor + z[105]=whatever[z5l,z15l]=whatever[z1r,z11r]; +for i=1 upto 4: + z[100+i]=whatever[z[i].l,z[i+10].l]=whatever[z[i+1].r,z[i+11].r]; +endfor; +filldraw z1l---obl(101,1l,2r)---z2r..z2l---obl(102,2l,3r)---z3r..z3l + ---obl(103,3l,4r)---z4r..z4l---obl(104,4l,5r)---z5r..z5l + ---obl(105,5l,1r)---z1r..cycle; +penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105); +endchar; + +iff known chars.math_five_star_empty: +bskchar "Five-pointed star with empty center"; +beginchar(chars.math_five_star_empty,x_height#+2u#,v_center(x_height#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2.5oblu; +z0=(.5w,math_axis); +x1=x0; top y1=h+apex_o; pos1(hair,0); +forsuffixes i=2,3,4,5: + z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1)); +endfor +forsuffixes i=11,12,13,14,15: + z[i]=z0; pos.i(curve,72(i-1)); +endfor + z[105]=whatever[z5l,z15l]=whatever[z1r,z11r]; +for i=1 upto 4: + z[100+i]=whatever[z[i].l,z[i+10].l]=whatever[z[i+1].r,z[i+11].r]; +endfor; +filldraw z1l---obl(101,1l,2r)---z2r..z2l---obl(102,2l,3r)---z3r..z3l + ---obl(103,3l,4r)---z4r..z4l---obl(104,4l,5r)---z5r..z5l + ---obl(105,5l,1r)---z1r..cycle; +infill fullcircle scaled 2stem shifted z0; +penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105); +endchar; + +iff known chars.sign_born: +bskchar "Born sign"; +beginchar(chars.sign_born,x_height#+2u#,v_center(x_height#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2.5oblu; +z0=(.5w,math_axis); +x1=x0; top y1=h+apex_o; pos1(hair,0); +forsuffixes i=2,3,4,5: + z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1)); +endfor +forsuffixes i=11,12,13,14,15: + z[i]=z0; pos.i(curve,72(i-1)); +endfor +z6=z1; +forsuffixes i=1,2,3,4,5: + z[100+i]=.5[z[i],z[i+1]]+.2x_height*unitvector(z[i+1]-z[i]) rotated 90; +endfor; +filldraw z1l---obl(101,1l,2r)---z2r..z2l---obl(102,2l,3r)---z3r + ..z3l---obl(103,3l,4r)---z4r..z4l---obl(104,4l,5r)---z5r + ..z5l---obl(105,5l,1r)---z1r..cycle; +penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105); +endchar; + +iff known chars.sign_five_star: +bskchar "Five-pointed rounded star"; +beginchar(chars.sign_five_star,x_height#+2u#,v_center(x_height#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2.5oblu; +z0=(.5w,math_axis); +x1=x0; top y1=h+apex_o; pos1(hair,0); +forsuffixes i=2,3,4,5: + z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1)); +endfor +forsuffixes i=11,12,13,14,15: + z[i]=z0; pos.i(curve,72(i-1)); +endfor +z6=z1; +forsuffixes i=1,2,3,4,5: + z[100+i]=.5[z[i],z[i+1]]+.15x_height*unitvector(z[i+1]-z[i]) rotated 90; +endfor; +filldraw z1l..z101..z2r..z2l..z102..z3r..z3l..z103..z4r..z4l..z104..z5r..z5l..z105..z1r..cycle; +penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105); +endchar; + +iff known chars.math_sqsubset: +bskchar "Square subset sign"; +beginchar(chars.math_sqsubset,12u#,v_center(x_height#)); uni "0x228F"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90); +top y1l=top y2l=h; bot y3r=bot y4r=-d; +rt x1=rt x4=w-u; x2=x3=w-x1; +bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair); +x2r:=x3l:=x3+rule_thickness-currentbreadth; +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_sqsubset_eq: +bskchar "Square subset or equal to sign"; +beginchar(chars.math_sqsubset_eq,12u#,v_center(x_height#+3u#)); uni "0x2291"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90); +pos5(rule_thickness,90); pos6(rule_thickness,90); +top y1l=top y2l=h; bot y3r=bot y4r=-d+3u; +rt x1=rt x4=w-u; x2=x3=w-x1; +bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair); +x2r:=x3l:=x3+rule_thickness-currentbreadth; +lft x5=u; rt x6=w-u; y5l=y6l=-d; +bskpoints(5,6,hair,hair); +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..cycle; +filldraw z5rr..z5l---z6ll..z6r---cycle; +penlabels(1,2,3,4,5,6); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_subset: +bskchar "Proper subset sign"; +beginchar(chars.math_subset,12u#,v_center(x_height#)); uni "0x2282"; +italcorr h#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180); +pos4(rule_thickness,270); pos5(rule_thickness,270); +top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]-o; +rt x1=rt x5=w-u-2o; lft x3r=u; +x2=x4=x3+(y2-y3); +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_subset_eq: +bskchar "Subset or equal to sign"; +beginchar(chars.math_subset_eq,12u#,v_center(x_height#+3u#)); uni "0x2286"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180); +pos4(rule_thickness,270); pos5(rule_thickness,270); +pos6(rule_thickness,90); pos7(rule_thickness,90); +top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o; +rt x1=rt x5=w-u-2o; lft x3r=u; +x2=x4=x3+(y2-y3); +lft x6=u; rt x7=w-u; y6l=y7l=-d; +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +bskpoints(6,7,hair,hair); +filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle; +filldraw z6rr..z6l---z7ll..z7r---cycle; +penlabels(1,2,3,4,5,6,7); labels(1rr,5rr); +endchar; + +iff known chars.math_sqsuperset: +bskchar "Square superset sign"; +beginchar(chars.math_sqsuperset,12u#,v_center(x_height#)); uni "0x2290"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90); +top y1l=top y2l=h; bot y3r=bot y4r=-d; +lft x1=lft x4=u; x2=x3=w-x1; +bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair); +x2r:=x3l:=x3-rule_thickness+currentbreadth; +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_sqsuperset_eq: +bskchar "Square superset or equal to sign"; +beginchar(chars.math_sqsuperset_eq,12u#,v_center(x_height#+3u#)); uni "0x2292"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90); +pos5(rule_thickness,90); pos6(rule_thickness,90); +top y1l=top y2l=h; bot y3r=bot y4r=-d+3u; +lft x1=lft x4=u; x2=x3=w-x1; +bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair); +x2r:=x3l:=x3-rule_thickness+currentbreadth; +lft x5=u; rt x6=w-u; y5l=y6l=-d; +bskpoints(5,6,hair,hair); +filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r) + --obl(2r,3l,1r)---z1rr..cycle; +filldraw z5rr..z5l---z6ll..z6r---cycle; +penlabels(1,2,3,4,5,6); labels(1rr,2ll,3rr,4ll); +endchar; + +iff known chars.math_superset: +bskchar "Proper superset sign"; +beginchar(chars.math_superset,12u#,v_center(x_height#)); uni "0x2283"; +italcorr h#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0); +pos4(rule_thickness,270); pos5(rule_thickness,270); +top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; +lft x1=lft x5=u+2o; rt x3r=w-u; +x2=x4=x3-(y2-y3); +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle; +penlabels(1,2,3,4,5); labels(1rr,5rr); +endchar; + +iff known chars.math_superset_eq: +bskchar "Superset or equal to sign"; +beginchar(chars.math_superset_eq,12u#,v_center(x_height#+3u#)); uni "0x2287"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0); +pos4(rule_thickness,270); pos5(rule_thickness,270); +pos6(rule_thickness,90); pos7(rule_thickness,90); +top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o; +lft x1=lft x5=u+2o; rt x3r=w-u; +x2=x4=x3-(y2-y3); +lft x6=u; rt x7=w-u; y6l=y7l=-d; +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +bskpoints(6,7,hair,hair); +filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle; +filldraw z6rr..z6l---z7ll..z7r---cycle; +penlabels(1,2,3,4,5,6,7); labels(1rr,5rr); +endchar; + +iff known chars.math_element: +bskchar "Element sign"; +beginchar(chars.math_element,9u#,v_center(x_height#+u#)); uni "0x2208"; +italcorr h#*slant; +adjust_fit(0,0); +pickup tiny.nib; +path p; numeric tim[]; oblu:=4oblu; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180); +pos4(rule_thickness,270); pos5(rule_thickness,270); +pos6(rule_thickness,90); pos7(rule_thickness,90); +top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; +rt x1=rt x5=w-u-2o; lft x3r=u; +x2=x4=x3+(y2-y3); +y6=y7=y3; x7=x1; x6=x3r; +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +p:=z1l---z2l...z3l...z4l---z5l; +tim1=xpart(p intersectiontimes (z6r--z7r)); +tim2=xpart(p intersectiontimes (z6l--z7l)); +filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l).. +subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle; +penlabels(1,2,3,4,5,6,7); labels(1rr,5rr); +endchar; + +iff known chars.math_ownership: +bskchar "Ownership sign"; +beginchar(chars.math_ownership,9u#,v_center(x_height#+u#)); uni "0x220B"; +adjust_fit(0,0); +pickup tiny.nib; +path p; numeric tim[]; oblu:=4oblu; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0); +pos4(rule_thickness,270); pos5(rule_thickness,270); +pos6(rule_thickness,90); pos7(rule_thickness,90); +top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; +lft x1=lft x5=u+2o; rt x3r=w-u; +x2=x4=x3-(y2-y3); +y6=y7=y3; x7=x1; x6=x3r; +bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); +p:=z1l---z2l...z3l...z4l---z5l; +tim1=xpart(p intersectiontimes (z6r--z7r)); +tim2=xpart(p intersectiontimes (z6l--z7l)); +filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---z7r..z7l---(x3l-stem,y6l).. +subpath(rundy(p,tim2),infinity) of p..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle; +penlabels(1,2,3,4,5,6,7); labels(1rr,5rr); +endchar; + +iff known chars.symbol_smile: +bskchar "Smile"; +beginchar(chars.symbol_smile,17u#,v_center(.6x_height#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p; +lft x1=u; top y1=h; z2=z1+hair*down; +rt x3=w-u; y3=y1+.5apex_o; +bot y4=-d-o; +p:=z2..{dir70}z3; +x4=xpart(directionpoint right of p); +filldraw z2..z4..{dir70}z3{dir-140}..z1&z1{dir-100}..z2&cycle; +labels(1,2,3,4); +endchar; + +iff known chars.symbol_smile_eyes: +bskchar "Smile with eyes"; +beginchar(chars.symbol_smile_eyes,17u#,.65[asc_height#,x_height#],.3x_height#-math_axis#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p; +lft x1=u; top y1=math_axis+.3x_height; z2=z1+hair*down; +rt x3=w-u; y3=y1+.5apex_o; +bot y4=-d-o; +p:=z2..{dir70}z3; +x4=xpart(directionpoint right of p); +filldraw z2..z4..{dir70}z3{dir-140}..z1&z1{dir-100}..z2&cycle; +top y5=h-.5dot_size-o; y6=y5+o; +.5[x5,x6]=x4; x5=.5[x1,x4]; +dot(5); dot(6); +labels(1,2,3,4,5,6); +endchar; + +iff known chars.symbol_frown: +bskchar "Frown"; +beginchar(chars.symbol_frown,17u#,v_center(.5x_height#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p; +lft x1=u; bot y1=-d; z2=z1+hair*up; +rt x3=w-u; y3=y1-.5apex_o; +top y4=h+o; +p:=z2..{dir-70}z3; +x4=xpart(directionpoint right of p); +filldraw z2..z4..{dir-70}z3{dir140}..z1&z1{dir100}..z2&cycle; +labels(1,2,3,4); +endchar; + +iff known chars.symbol_flat: +bskchar "Musical flat sign"; +beginchar(chars.symbol_flat,7u#,asc_height#,0); uni "0x266D"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2.5oblu; +pos1(hair,0); pos2(hair,0); +pos3(curve,0); pos4(hair,90); pos5(vair,135); +lft x1l=u; x2=x1; top y1=h; bot y2=-d; x5l=x1r; y5=.5[y4,y3]; +rt x3r=w-u; y3=.75x_height; top y4r=x_height+o; x4=.5[x3,x2r]; +p0=z2r+up--z1r; +p1=z2r..{up}z3r..z4r..z5r; +p2=z5l..z4l..z3l{down}..z2r; +(tim1,tim2)=p0 intersectiontimes p1; +tim3=xpart(p0 intersectiontimes p2); +filldraw z1l---z2l--subpath (0, rundy(p1,tim2).zpet) of p1 + ..subpath(rundy(p0,tim1),infinity) of p0..cycle; +infill subpath (rundy(p2,0),rundy(p2,length p2).zpet) of p2 + ..subpath(rundy(p0,0),rundy(p0,tim3).zpet) of p0..cycle; +penlabels(1,2,3,4,5); +endchar; + +iff known chars.symbol_sharp: +bskchar "Musical sharp sign"; +beginchar(chars.symbol_sharp,7.5u#,asc_height#,0); uni "0x266F"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2; x3=x4; .5[x1,x3]=.5w; x3=2u; +top y1r=top y3r+stem=h; y2l-stem=y4l=0; +lft x5=lft x7=u; rt x6=rt x8=w-u; +y5=y6-stem; y7=y8-stem; .5[y5,y7]=.5h; y5-y7=.6x_height; +pos1(hair,180); pos2(hair,180); +pos3(hair,180); pos4(hair,180); +pos5(stem,90); pos6(stem,90); +pos7(stem,90); pos8(stem,90); +bskpoints(2,1,rule_thickness,0); bskpoints(4,3,0,rule_thickness); +bskpoints(6,5,rule_thickness,0); bskpoints(8,7,0,rule_thickness); +z10=whatever[z1r,z2r]=whatever[z6r,z5r]; +z11=whatever[z3l,z4l]=whatever[z6r,z5r]; +z12=whatever[z3r,z4r]=whatever[z6r,z5r]; +z13=whatever[z3r,z4r]=whatever[z6l,z5l]; +z14=whatever[z3r,z4r]=whatever[z7r,z8r]; +z15=whatever[z3r,z4r]=whatever[z7l,z8l]; +z16=whatever[z3l,z4l]=whatever[z7l,z8l]; +z17=whatever[z1r,z2r]=whatever[z7l,z8l]; +z18=whatever[z2l,z1l]=whatever[z7l,z8l]; +z19=whatever[z1l,z2l]=whatever[z7r,z8r]; +z20=whatever[z1l,z2l]=whatever[z5l,z6l]; +z21=whatever[z1l,z2l]=whatever[z6r,z5r]; +filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r--z5l + ---obl(13,5l,14)---obl(14,13,7r)---z7r--z7l---obl(15,7l,4l)---z4rr--z4l + ---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l--z8r + ---obl(19,8r,20)---obl(20,19,6l)---z6l--z6r---obl(21,6r,1r)---z1ll..cycle; +z0=(x10,y20); z0'=(x11,y13); z0''=(x16,y14); z0'''=(x17,y19); +infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle; +penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21); +endchar; + +iff known chars.symbol_natural: +bskchar "Musical natural sign"; +beginchar(chars.symbol_natural,6.5u#,asc_height#,comma_depth#); uni "0x266E"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,180); pos2(hair,180); +pos3(hair,180); pos4(hair,180); +pos5(stem,90); pos6(stem,90); +pos7(stem,90); pos8(stem,90); +top y1=h; bot y4=-d; y1-y2=y3-y4; +lft x1r=u; rt x4l=w-u; x2=x1; x3=x4; +y6l=y5r=x_height; y3=y6r; x6=x3; x5=x1l; x8=x4r; +y7l=y2; z8-z7=z6-z5; +bskpoints(2,1,rule_thickness,rule_thickness); +bskpoints(4,3,rule_thickness,rule_thickness); +x5'=x7'; x6'=x8'; x5'-x5=x6-x6'=rule_thickness-currentbreadth; +z5'=whatever[z5l,z6l]; z6'=whatever[z5l,z6l]; +z7'=whatever[z7r,z8r]; z8'=whatever[z7r,z8r]; +filldraw z1r---obl(2r,1r,8l)---obl(8l,2r,4r)---z4rr..z4l---obl(3l,4l,5r)---obl(5r,3l,1l)---z1ll..cycle; +infill obl(5',6',7')---obl(7',5',8')---obl(8',7',6')---obl(6',8',5')---cycle; +penlabels(1,2,3,4,5,6,7,8); labels(1ll,4rr,5',6',7',8'); +endchar; + +iff known chars.math_virgule: +bskchar "Virgule"; +beginchar(chars.math_virgule,8u#,v_center(16u#)); uni "0x2215"; +adjust_fit(0,0); +pickup rule.nib; +top rt z1=(w-u,h); bot lft z2=(u,-d); +pickup tiny.nib; +pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_backslash: +bskchar "Backslash"; +beginchar(chars.math_backslash,8u#,v_center(16u#)); uni "0x2216"; +adjust_fit(0,0); +pickup rule.nib; +top lft z1=(u,h); bot rt z2=(w-u,-d); +pickup tiny.nib; +pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_zero_slash: +bskchar "Zero width slash"; +beginchar(chars.math_zero_slash,12u#,asc_height#,asc_depth#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +top rt z1=(w-2u,h); lft x2=2u; .5[y1,y2]=math_axis; +pickup tiny.nib; +pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); zero_width; +endchar; + +iff known chars.math_maps_to: +bskchar "Zero width maps to"; +beginchar(chars.math_maps_to,12u#,v_center(.5x_height#)); uni "non"; +adjust_fit(0,0); +oblu:=1.5oblu; +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,90); pos4(rule_thickness,90); +lft x1l=u; x2=x1; x3=x1r; y3=.5[y1,y2]=math_axis; +top y1=h; z4=z3+max(oblu,.5u)*right; +bskpoints(2,1,rule_thickness,rule_thickness); +filldraw z1ll---z2l..z2r---obl(3l,2r,4l)---z4l--z4r---obl(3r,4r,1r)---z1r..cycle; +penlabels(1,2,3,4); labels(1ll); zero_width; +endchar; + +charscription(5u,body_height,paren_depth)( +x1=x2=.5w; top y1=h; bot y2=-d; +pos1(rule_thickness,0); pos2(rule_thickness,0); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +); + +iff known chars.sign_vertical: +bskchar "Vertical line sign"; +beginchar(chars.sign_vertical,5u#,body_height#,paren_depth#); uni "0x007C"; +italcorr body_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.math_vertical: +bskchar "Vertical line"; +beginchar(chars.math_vertical,5u#,body_height#,paren_depth#); uni "0x2223"; +italcorr body_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_broken_bar: +bskchar "Broken bar sign"; +beginchar(chars.sign_broken_bar,5u#,body_height#,paren_depth#); uni "0x00A6"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2=x3=x4=.5w; top y1=h; bot y4=-d; .5[y2,y3]=.5[h,-d]; bot y2-top y3=3rule_thickness; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,0); pos4(rule_thickness,0); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +filldraw bskrule(3,4,rule_thickness,rule_thickness); +penlabels(1,2,3,4); +endchar; + +iff known chars.math_vertical_double: +bskchar "Double vertical line"; +beginchar(chars.math_vertical_double,8u#,body_height#,paren_depth#); uni "0x2225"; +adjust_fit(0,0); +pickup tiny.nib; +x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; bot y2=bot y4=-d; +x3-x1=max(3curve,3u); +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,0); pos4(rule_thickness,0); +filldraw bskrule(1,2,rule_thickness,rule_thickness); +filldraw bskrule(4,3,rule_thickness,rule_thickness); +penlabels(1,2,3,4); +endchar; + +iff known chars.math_times: +bskchar "Times operator sign"; +beginarithchar(chars.math_times); uni "0x00D7"; +pickup tiny.nib; +oblu:=2.2oblu; +pos1(rule_thickness,135); pos2(rule_thickness,135); +pos3(rule_thickness,45); pos4(rule_thickness,45); +lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u; +bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u; +bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair); +z5=whatever[z4l,z3l]=whatever[z1l,z2l]; +z6=whatever[z4r,z3r]=whatever[z1l,z2l]; +z7=whatever[z4r,z3r]=whatever[z1r,z2r]; +z8=whatever[z4l,z3l]=whatever[z1r,z2r]; +filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r--- + obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4); labels(5,6,7,8); +endchar; + +iff known chars.math_plus_minus: +bskchar "Plus-minus sign"; +beginarithchar(chars.math_plus_minus); uni "0x00B1"; +pickup tiny.nib; +oblu:=2.2oblu; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,0); pos4(rule_thickness,0); +pos9(rule_thickness,90); pos10(rule_thickness,90); +lft x1=u; rt x2=w-u; y1=y2=math_axis; x9=x1; x10=x2; +x3=x4=.5w; top y3=h; y4=y9r; y9=y10; bot y9l=-d; +bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair); +bskpoints(9,10,hair,hair); +z5=whatever[z4l,z3l]=whatever[z1l,z2l]; +z6=whatever[z4r,z3r]=whatever[z1l,z2l]; +z7=whatever[z4r,z3r]=whatever[z1r,z2r]; +z8=whatever[z4l,z3l]=whatever[z1r,z2r]; +filldraw z1l---obl(5,1l,4l)---obl(4l,5,9r)---z9rr..z9l---z10ll..z10r---obl(4r,10r,6) + ---obl(6,4r,2l)---z2ll..z2r---obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4,9,10); labels(5,6,7,8); +endchar; + +iff known chars.math_minus_plus: +bskchar "Minus-plus sign"; +beginarithchar(chars.math_minus_plus); uni "0x2213"; +pickup tiny.nib; +oblu:=2.2oblu; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,0); pos4(rule_thickness,0); +pos9(rule_thickness,90); pos10(rule_thickness,90); +lft x1=u; rt x2=w-u; y1=y2=math_axis; x9=x1; x10=x2; +x3=x4=.5w; y3=y9l; y4=-d; y9=y10; top y9r=h; +bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair); +bskpoints(9,10,hair,hair); +z5=whatever[z4l,z3l]=whatever[z1l,z2l]; +z6=whatever[z4r,z3r]=whatever[z1l,z2l]; +z7=whatever[z4r,z3r]=whatever[z1r,z2r]; +z8=whatever[z4l,z3l]=whatever[z1r,z2r]; +filldraw z1l---obl(5,1l,4l)---z4l...z4rr---obl(6,4r,2l)---z2ll..z2r + ---obl(7,2r,3r)---obl(3r,7,10l)---z10ll..z10r---z9rr..z9l + ---obl(3l,9l,8)---obl(8,3l,1r)---z1rr..cycle; +penlabels(1,2,3,4,9,10); labels(5,6,7,8); +endchar; + +iff known chars.math_minus: +bskchar "Minus sign"; +beginarithchar(chars.math_minus); uni "0x2212"; +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); +lft x1=u; rt x2=w-u; y1=y2=math_axis; +bskpoints(1,2,hair,hair); +filldraw z1rr..z1l---z2ll..z2r---cycle; +penlabels(1,2); +endchar; + +iff known chars.math_division: +bskchar "Division sign"; +beginarithchar(chars.math_division); uni "0x00F7"; +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); +lft x1=u; rt x2=w-u; y1=y2=math_axis; +x3=x4=.5w; .5[y3,y4]=y1; y3-y4=x_height; +bskpoints(1,2,hair,hair); +filldraw z1rr..z1l---z2ll..z2r---cycle; +dot(3); dot(4); +penlabels(1,2); +endchar; + +iff known chars.math_cdot: +bskchar "Verticaly raised period"; +beginchar(chars.math_cdot, 5u#, v_center(dot_size#)); uni "0x22C5"; +italcorr math_axis#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +y1=math_axis; x1=.5w; +dot(1); +endchar; + +iff known chars.sign_middle_dot: +bskchar "Middle dot"; +beginchar(chars.sign_middle_dot, 5u#,x_height#, 0); uni "0x00B7"; +italcorr bar_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +y1=bar_height; x1=.5w; +dot(1); +endchar; + +iff known chars.math_equivalence: +bskchar "Equivalence sign"; +beginchar(chars.math_equivalence,13u#,5.5u#+math_axis#,5.5u#-math_axis#); uni "0x2261"; +italcorr h#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,90); pos2(rule_thickness,90); +pos3(rule_thickness,90); pos4(rule_thickness,90); +pos5(rule_thickness,90); pos6(rule_thickness,90); +lft x1=u; rt x2=w-u; y1=y2=math_axis; +y3=y4; y5=y6; .5[y3,y5]=y1; +x3=x5=x1; x4=x6=x2; +y3-y5=x_height; +bskpoints(3,4,hair,hair); +bskpoints(5,6,hair,hair); +filldraw z1l---z2l..z2r---z1r..cycle; +filldraw z3rr..z3l---z4ll..z4r---cycle; +filldraw z5rr..z5l---z6ll..z6r---cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.math_circle_op: +bskchar "Circle operator"; +beginchar(chars.math_circle_op,8u#,v_center(6u#)); uni "0x2218"; +adjust_fit(0,0); +pickup tiny.nib; +z0=(.5w,.5h); +filldraw fullcircle scaled (w-rt 2u) shifted z0; +infill fullcircle scaled (w-rt 2u-rule_thickness+currentbreadth) shifted z0; +endchar; + +iff known chars.math_bullet: +bskchar "Bullet"; +beginchar(chars.math_bullet,8u#,v_center(6u#)); uni "0x2219"; +adjust_fit(0,0); +pickup tiny.nib; +z0=(.5w,.5h); +filldraw fullcircle scaled (w-rt 2u) shifted z0; +endchar; + +iff known chars.math_diamond_op: +bskchar "Diamond operator"; +beginchar(chars.math_diamond_op,9u#,v_center(7u#)); uni "0x22C4"; +italcorr math_axis#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric st; st:=rule_thickness; +pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; +y4-y2=x3-x1; +filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle; +oblu:=2oblu; +infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_diamond_op_dot: +bskchar "Diamond operator with dot"; +beginchar(chars.math_diamond_op_dot,9u#,v_center(7u#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric st; st:=rule_thickness; +pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; +y4-y2=x3-x1; +filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle; +infill fullcircle scaled (x2-x1) shifted .5[z1,z3]; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_asterisk: +bskchar "Asterisk on axis"; +beginchar(chars.math_asterisk,8u#,v_center(x_height#)); uni "0x2217"; +adjust_fit(0,0); +pickup tiny.nib; +numeric size, ast, vast; +path p; +z0=.5(w,h); ast:=3/4stem; vast=.7stem; +pos1(ast,0); x1=x0; +size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x0: + size:= (lft w-u-x0)/cosd(30)-.5ast; fi; +y1=y0+size; +p:=z0---z1r{dir120}..z1l---z0; +p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))), + xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p; +filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle; +labels(0); penlabels(1); +endchar; + +iff known chars.math_diamond_curved_dot: +bskchar "Curved diamond with dot"; +beginchar(chars.math_diamond_curved_dot,9u#,v_center(7u#)); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric st; st:=rule_thickness; +pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; +z0=.5[z1,z3]; +y4-y2=x3-x1; +filldraw z1l.. .75[z0,.5[z1,z2]] ..z2l& z2l.. .75[z0,.5[z3,z2]] ..z3l& z3l.. .75[z0,.5[z3,z4]] ..z4l& z4l.. .75[z0,.5[z1,z4]] ..z1l&cycle; +infill fullcircle scaled (x2-x1) shifted .5[z1,z3]; +penlabels(1,2,3,4); labels(0); +endchar; + +iff known chars.math_circle_minus: +bskchar "Circle-minus operator"; +beginarithchar(chars.math_circle_minus); uni "0x2296"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +pos9(rule_thickness,90); pos10(rule_thickness,90); +lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness; +y9=y10=y2; x9-x6r=x2r-x10=curve; +circle_points(rule_thickness); +path p; +filldraw draw_circle.l; +p:=subpath (-2,2) of (draw_circle.r); +tim1=xpart(p intersectiontimes ((0,y9r)--(x4,y9r))); +tim2=xpart(p intersectiontimes ((x4,y9r)--(w,y9r))); +infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z10r---z9r..cycle; +p:=subpath (2,6) of (draw_circle.r); +tim3=xpart(p intersectiontimes ((x4,y9l)--(w,y9l))); +tim4=xpart(p intersectiontimes ((x4,y9l)--(0,y9l))); +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z9l---z10l..cycle; +penlabels(9,10); +endchar; + +iff known chars.math_circle_divide: +bskchar "Circle-divide operator"; +beginarithchar(chars.math_circle_divide); uni "0x2298"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness; +circle_points(rule_thickness); +pos9(rule_thickness,angle(direction 1 of _circle_path)); +pos10(rule_thickness,angle(direction 5 of _circle_path)+180); +z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5); +path p; +filldraw draw_circle.l; +p:=subpath (-3,1) of (draw_circle.r); +tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l])); +tim2=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l])); +infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z9l---z10l..cycle; +p:=subpath (1,5) of (draw_circle.r); +tim4=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r])); +tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r])); +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z10r---z9r..cycle; +penlabels(9,10); +endchar; + +iff known chars.math_circle_dot: +bskchar "Circle-dot operator"; +beginarithchar(chars.math_circle_dot); uni "0x2299"; +adjust_fit(0,0); +pickup tiny.nib; +lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness; +y2=y0; x0=x8; +circle_points(rule_thickness); +filldraw draw_circle.l; +infill draw_circle.r; +dot(0); +endchar; + +iff known chars.math_circle_dot_text: +bskchar "\textstyle circle-dot operator"; +beginchar(chars.math_circle_dot_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +lft x6=u; x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8-y4=x2-x6; +circle_points(stem); +filldraw draw_circle.l; +infill draw_circle.r; +filldraw fullcircle scaled 2stem shifted z0; +endchar; + +iff known chars.math_circle_dot_disp: +bskchar "\displaystyle circle-dot operator"; +beginchar(chars.math_circle_dot_disp,20u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +lft x6=u; x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8-y4=x2-x6; +circle_points(bourstem); +filldraw draw_circle.l; +infill draw_circle.r; +filldraw fullcircle scaled (2*.5[bourstem,stem]) shifted z0; +endchar; + +iff known chars.math_circle_times: +bskchar "Circle-times operator"; +beginarithchar(chars.math_circle_times); uni "0x2297"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness; +circle_points(rule_thickness); +pos9(rule_thickness,angle(direction 1 of _circle_path)); +pos10(rule_thickness,angle(direction 5 of _circle_path)+180); +pos11(rule_thickness,angle(direction 3 of _circle_path)); +pos12(rule_thickness,angle(direction 7 of _circle_path)+180); +z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5); +z11=z3+curve*unitvector(z7-z3); z12=z7+curve*unitvector(z3-z7); +path p; +filldraw draw_circle.l; +p:=subpath (-1,1) of (draw_circle.r); +tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l])); +tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l])); +z100=whatever[z12l,z11l]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle; +p:=subpath (1,3) of (draw_circle.r); +tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r])); +tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l])); +z101=whatever[z12l,z11l]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle; +p:=subpath (3,5) of (draw_circle.r); +tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r])); +tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r])); +z102=whatever[z12r,z11r]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle; +p:=subpath (5,7) of (draw_circle.r); +tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l])); +tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r])); +z103=whatever[z12r,z11r]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle; +penlabels(9,10,11,12); +endchar; + +iff known chars.math_circle_times_text: +bskchar "\textstyle Circle-times operator"; +beginchar(chars.math_circle_times_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6; +circle_points(stem); +pos9(stem,angle(direction 1 of _circle_path)); +pos10(stem,angle(direction 5 of _circle_path)+180); +pos11(stem,angle(direction 3 of _circle_path)); +pos12(stem,angle(direction 7 of _circle_path)+180); +z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5); +z11=z3+curve*unitvector(z7-z3); z12=z7+curve*unitvector(z3-z7); +path p; +filldraw draw_circle.l; +p:=subpath (-1,1) of (draw_circle.r); +tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l])); +tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l])); +z100=whatever[z12l,z11l]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle; +p:=subpath (1,3) of (draw_circle.r); +tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r])); +tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l])); +z101=whatever[z12l,z11l]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle; +p:=subpath (3,5) of (draw_circle.r); +tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r])); +tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r])); +z102=whatever[z12r,z11r]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle; +p:=subpath (5,7) of (draw_circle.r); +tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l])); +tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r])); +z103=whatever[z12r,z11r]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle; +penlabels(9,10,11,12); +endchar; + +iff known chars.math_circle_times_disp: +bskchar "\displaystyle Circle-times operator"; +beginchar(chars.math_circle_times_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6; +circle_points(bourstem); +pos9(bourstem,angle(direction 1 of _circle_path)); +pos10(bourstem,angle(direction 5 of _circle_path)+180); +pos11(bourstem,angle(direction 3 of _circle_path)); +pos12(bourstem,angle(direction 7 of _circle_path)+180); +z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5); +z11=z3+curve*unitvector(z7-z3); z12=z7+curve*unitvector(z3-z7); +path p; +filldraw draw_circle.l; +p:=subpath (-1,1) of (draw_circle.r); +tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l])); +tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l])); +z100=whatever[z12l,z11l]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle; +p:=subpath (1,3) of (draw_circle.r); +tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r])); +tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l])); +z101=whatever[z12l,z11l]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle; +p:=subpath (3,5) of (draw_circle.r); +tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r])); +tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r])); +z102=whatever[z12r,z11r]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle; +p:=subpath (5,7) of (draw_circle.r); +tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l])); +tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r])); +z103=whatever[z12r,z11r]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle; +penlabels(9,10,11,12); +endchar; + +iff known chars.math_circle_plus: +bskchar "Circle-plus operator"; +beginarithchar(chars.math_circle_plus); uni "0x2295"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness; +circle_points(rule_thickness); +pos9(rule_thickness,angle(direction 2 of _circle_path)); +pos10(rule_thickness,angle(direction 6 of _circle_path)+180); +pos11(rule_thickness,angle(direction 4 of _circle_path)); +pos12(rule_thickness,angle(direction 8 of _circle_path)+180); +z9=z2+curve*unitvector(z6-z2); z10=z6+curve*unitvector(z2-z6); +z11=z4+curve*unitvector(z8-z4); z12=z8+curve*unitvector(z4-z8); +path p; +filldraw draw_circle.l; +p:=subpath (0,2) of (draw_circle.r); +tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l])); +tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l])); +z100=whatever[z12l,z11l]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle; +p:=subpath (2,4) of (draw_circle.r); +tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r])); +tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l])); +z101=whatever[z12l,z11l]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle; +p:=subpath (4,6) of (draw_circle.r); +tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r])); +tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r])); +z102=whatever[z12r,z11r]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle; +p:=subpath (6,8) of (draw_circle.r); +tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l])); +tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r])); +z103=whatever[z12r,z11r]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle; +penlabels(9,10,11,12); +endchar; + +iff known chars.math_circle_plus_text: +bskchar "\textstyle circle-plus operator"; +beginchar(chars.math_circle_plus_text,14u#,0,10/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6; +circle_points(stem); +pos9(stem,angle(direction 2 of _circle_path)); +pos10(stem,angle(direction 6 of _circle_path)+180); +pos11(stem,angle(direction 4 of _circle_path)); +pos12(stem,angle(direction 8 of _circle_path)+180); +z9=z2+curve*unitvector(z6-z2); z10=z6+curve*unitvector(z2-z6); +z11=z4+curve*unitvector(z8-z4); z12=z8+curve*unitvector(z4-z8); +path p; +filldraw draw_circle.l; +p:=subpath (0,2) of (draw_circle.r); +tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l])); +tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l])); +z100=whatever[z12l,z11l]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle; +p:=subpath (2,4) of (draw_circle.r); +tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r])); +tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l])); +z101=whatever[z12l,z11l]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle; +p:=subpath (4,6) of (draw_circle.r); +tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r])); +tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r])); +z102=whatever[z12r,z11r]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle; +p:=subpath (6,8) of (draw_circle.r); +tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l])); +tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r])); +z103=whatever[z12r,z11r]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle; +penlabels(9,10,11,12); +endchar; + +iff known chars.math_circle_plus_disp: +bskchar "\displaystyle circle-plus operator"; +beginchar(chars.math_circle_plus_disp,18u#,0,14/6dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=2oblu; +lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6; +circle_points(bourstem); +pos9(bourstem,angle(direction 2 of _circle_path)); +pos10(bourstem,angle(direction 6 of _circle_path)+180); +pos11(bourstem,angle(direction 4 of _circle_path)); +pos12(bourstem,angle(direction 8 of _circle_path)+180); +z9=z2+curve*unitvector(z6-z2); z10=z6+curve*unitvector(z2-z6); +z11=z4+curve*unitvector(z8-z4); z12=z8+curve*unitvector(z4-z8); +path p; +filldraw draw_circle.l; +p:=subpath (0,2) of (draw_circle.r); +tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l])); +tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l])); +z100=whatever[z12l,z11l]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle; +p:=subpath (2,4) of (draw_circle.r); +tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r])); +tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l])); +z101=whatever[z12l,z11l]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle; +p:=subpath (4,6) of (draw_circle.r); +tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r])); +tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r])); +z102=whatever[z12r,z11r]=whatever[z9r,z10r]; +infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle; +p:=subpath (6,8) of (draw_circle.r); +tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l])); +tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r])); +z103=whatever[z12r,z11r]=whatever[z9l,z10l]; +infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle; +penlabels(9,10,11,12); +endchar; + +iff known chars.math_circle_copy: +bskchar "Circle for copyright"; +beginchar(chars.math_circle_copy,20u#,asc_height#,desc_depth#); uni "0x25EF"; +pickup tiny.nib; +adjust_fit(0,0); +lft x6=u; x2=w-x6; y2=.5[h,-d]; top y8=h; +circle_points(rule_thickness); +filldraw draw_circle.l; +infill draw_circle.r; +endchar; + +iff known chars.math_prime: +bskchar "Prime symbol"; +beginchar(chars.math_prime,4u#+curve#,.8asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +y2=u; y1+.5curve=h; x2=.5u+.5stem; x1+.5curve=w-.5curve; +numeric theta; theta:=angle(z1-z2)-90; +penpos1(curve,theta); pos2(stem,theta); +z1'=z1l+.5curve*dir(theta+50); +bskpoints(2,1,curve,curve); +filldraw z1ll{dir(angle(z2l-z1l)+5)}...z2l&z2l..z2rr---z1r...z1'..cycle; +penlabels(1,2); labels(1',1ll,2rr); +endchar; + +charscription(4u,asc_height,0)( +h-y2=.7(.8asc_height-u); y1+.35curve=h; x2=.5u+.35stem; x1+.35curve=w-.35curve; +numeric theta; theta:=angle(z1-z2)-90; +penpos1(.7curve,theta); pos2(.7stem,theta); +z1'=z1l+.35curve*dir(theta+50); +bskpoints(2,1,.7curve,.7curve); +filldraw z1ll{dir(angle(z2l-z1l)+5)}...z2l&z2l..z2rr---z1r...z1'..cycle; +penlabels(1,2); labels(1',1ll,2rr); +); + +iff known chars.sign_prime: +bskchar "Prime sign (superscript)"; +beginchar(chars.sign_prime,4u#,asc_height#,0); uni "0x2032"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_prime_double: +bskchar "Double prime sign (superscript)"; +beginchar(chars.sign_prime_double,7u#,asc_height#,0); uni "0x2033"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +save x,y; +usechar shifted (WW-4u,0); +endchar; + +iff known chars.sign_prime_triple: +bskchar "Triple prime sign (superscript)"; +beginchar(chars.sign_prime_triple,10u#,asc_height#,0); uni "0x2034"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +save x,y; +usechar shifted (WW-7u,0); +save x,y; +usechar shifted (WW-4u,0); +endchar; + +iff known chars.sign_prime_quadruple: +bskchar "Quadruple prime sign (superscript)"; +beginchar(chars.sign_prime_quadruple,13u#,asc_height#,0); uni "0x2057"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +save x,y; +usechar shifted (WW-10u,0); +save x,y; +usechar shifted (WW-7u,0); +save x,y; +usechar shifted (WW-4u,0); +endchar; + +iff known chars.math_backprime: +bskchar "Back prime symbol"; +beginchar(chars.math_backprime,4u#+curve#,.8asc_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +y2=u; y1+.5curve=h; x2=w-.5u-.5stem; x1-.5curve=.5curve; +numeric theta; theta:=angle(z1-z2)-90; +penpos1(curve,theta); pos2(stem,theta); +z1'=z1r+.5curve*dir(theta+140); +bskpoints(1,2,curve,curve); +filldraw z1rr{dir(angle(z2r-z1r)-5)}...z2r&z2r..z2ll---z1l...z1'..cycle; +penlabels(1,2); labels(1',1rr,2ll); +endchar; + +charscription(4u,asc_height,0)( +h-y2=.7(.8asc_height-u); y1+.35curve=h; x2=w-.5u-.35stem; x1-.35curve=.35curve; +numeric theta; theta:=angle(z1-z2)-90; +penpos1(.7curve,theta); pos2(.7stem,theta); +z1'=z1r+.35curve*dir(theta+140); +bskpoints(1,2,.7curve,.7curve); +filldraw z1rr{dir(angle(z2r-z1r)-5)}...z2r&z2r..z2ll---z1l...z1'..cycle; +penlabels(1,2); labels(1',1rr,2ll); +); + +iff known chars.sign_backprime: +bskchar "Back prime sign (superscript)"; +beginchar(chars.sign_backprime,4u#,asc_height#,0); uni "0x2035"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_backprime_double: +bskchar "Double back prime sign"; +beginchar(chars.sign_backprime_double,7u#,asc_height#,0); uni "0x2036"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +save x,y; +usechar shifted (WW-4u,0); +endchar; + +iff known chars.sign_backprime_triple: +bskchar "Triple back prime sign"; +beginchar(chars.sign_backprime_triple,10u#,asc_height#,0); uni "0x2037"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +save x,y; +usechar shifted (WW-7u,0); +save x,y; +usechar shifted (WW-4u,0); +endchar; + +iff known chars.math_sim: +bskchar "Similarity sign"; +beginchar(chars.math_sim, 14u#, v_center(.5x_height#)); uni "0x223C"; +adjust_fit(0,0); +pickup tiny.nib; +numeric spread; spread:=h+d; +vlnka(0,1); +endchar; + +iff known chars.math_sim_eq: +bskchar "Similar or equal sign"; +beginchar(chars.math_sim_eq, 14u#, v_center(.5x_height#+3u#)); uni "0x2243"; +adjust_fit(0,0); +pickup tiny.nib; +numeric spread; spread:=(h+d)-3u; +pos2(rule_thickness,90); pos3(rule_thickness,90); +top y1=h; lft x2=u; rt x3=w-u; y2l=y3l=-d; +bskpoints(2,3,hair,hair); +vlnka(0,1); +filldraw z2rr..z2l---z3ll..z3r---cycle; +endchar; + +iff known chars.math_approx: +bskchar "Approximity sign"; +beginchar(chars.math_approx, 14u#, v_center(x_height#)); uni "0x2248"; +adjust_fit(0,0); +pickup tiny.nib; +numeric spread; spread:=.5(h+d); +top y1=h; bot y2=-d; +vlnka(0,1); +vlnka(2,3); +endchar; + +iff known chars.math_ceiling_left: +bskchar "Left ceiling bracket"; +beginchar(chars.math_ceiling_left,5.5u#,body_height#,paren_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); +lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u; +top y2r=top y1r=h; bot y3r=-d; +rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_left_big: +bskchar "\big left ceiling bracket"; +beginchar(chars.math_ceiling_left_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=hair; +pos1(breadth,90); +lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_left_Big: +bskchar "\Big left ceiling bracket"; +beginchar(chars.math_ceiling_left_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.25[hair,stem]; +pos1(breadth,90); +lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_left_bigg: +bskchar "\bigg left ceiling bracket"; +beginchar(chars.math_ceiling_left_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.5[hair,stem]; +pos1(breadth,90); +lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_left_Bigg: +bskchar "\Bigg left ceiling bracket"; +beginchar(chars.math_ceiling_left_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.75[hair,stem]; +pos1(breadth,90); +lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_left: +bskchar "Left floor bracket"; +beginchar(chars.math_floor_left,5.5u#,body_height#,paren_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos3(hair,270); +lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u; +top y1r=h; bot y2r=bot y3r=-d; +rt z1l=(x1r+.5[stem,hair],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_left_big: +bskchar "\big left floor bracket"; +beginchar(chars.math_floor_left_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=hair; +pos3(breadth,270); +lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u; +top y1r=h; bot y2r=bot y3r=-d; +rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_left_Big: +bskchar "\Big left floor bracket"; +beginchar(chars.math_floor_left_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.25[hair,stem]; +pos3(breadth,270); +lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth; +top y1r=h; bot y2r=bot y3r=-d; +rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_left_bigg: +bskchar "\bigg left floor bracket"; +beginchar(chars.math_floor_left_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.5[hair,stem]; +pos3(breadth,270); +lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth; +top y1r=h; bot y2r=bot y3r=-d; +rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_left_Bigg: +bskchar "\Bigg left floor bracket"; +beginchar(chars.math_floor_left_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.75[hair,stem]; +pos3(breadth,270); +lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth; +top y1r=h; bot y2r=bot y3r=-d; +rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_right: +bskchar "Right ceiling bracket"; +beginchar(chars.math_ceiling_right,5.5u#,body_height#,paren_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(hair,90); +rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u; +top y2r=top y1r=h; bot y3r=-d; +lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_right_big: +bskchar "\big right ceiling bracket"; +beginchar(chars.math_ceiling_right_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=hair; +pos1(breadth,90); +rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_right_Big: +bskchar "\Big right ceiling bracket"; +beginchar(chars.math_ceiling_right_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.25[hair,stem]; +pos1(breadth,90); +rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_right_bigg: +bskchar "\big right ceiling bracket"; +beginchar(chars.math_ceiling_right_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.5[hair,stem]; +pos1(breadth,90); +rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_ceiling_right_Bigg: +bskchar "\Bigg right ceiling bracket"; +beginchar(chars.math_ceiling_right_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.75[hair,stem]; +pos1(breadth,90); +rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_right: +bskchar "Right floor bracket"; +beginchar(chars.math_floor_right,5.5u#,body_height#,paren_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos3(hair,270); +rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u; +top y1r=h; bot y2r=bot y3r=-d; +lft z1l=(x1r-.5[stem,hair],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_right_big: +bskchar "\big right floor bracket"; +beginchar(chars.math_floor_right_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=hair; +pos3(breadth,270); +rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u; +top y1r=h; bot y2r=bot y3r=-d; +lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_right_Big: +bskchar "\Big right floor bracket"; +beginchar(chars.math_floor_right_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.25[hair,stem]; +pos3(breadth,270); +rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u; +top y1r=h; bot y2r=bot y3r=-d; +lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_right_bigg: +bskchar "\bigg right floor bracket"; +beginchar(chars.math_floor_right_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.5[hair,stem]; +pos3(breadth,270); +rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u; +top y1r=h; bot y2r=bot y3r=-d; +lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_floor_right_Bigg: +bskchar "\Bigg right floor bracket"; +beginchar(chars.math_floor_right_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.75[hair,stem]; +pos3(breadth,270); +rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u; +top y1r=h; bot y2r=bot y3r=-d; +lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_logical_not: +bskchar "Logical not sign"; +beginchar(chars.math_logical_not,13u#, x_height#,0); uni "0x00AC"; +italcorr x_height#*slant-.5u#; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0); +lft x1=u; rt x3r=w-u; x2=x3r; +y1=y2=.5[bar_height,x_height]; y1-y3=1/3(x2-x1); if y3300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r + ---obl(4'r,3r,2l)..z2l+oblu*down---cycle; +penlabels(1,2,3,4,4',5,6,7,8,9); +endchar; + +iff known chars.sign_paragraph_empty: +bskchar "Paragraph sign (alternative)"; +beginchar(chars.sign_paragraph_empty,11u#,cap_height#,0); uni "non"; +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270); +pos5(.75ser_height,90); pos6(cap_hair,90); pos7(cap_curve,180); +pos8(cap_hair,270); pos9(.8ser_height,270); +bot y1=bot y3=0; top y2=top y4=top y6r=h; +rt x1r= rt x2r= w-2u; x3=x4=x2-3rule_thickness; +x5=x9=x3l; y8r=y9r; y8=bar_height; lft x7r=u; y7=.5[y8,y6]; x8=x6; +x6=.5[x7l,x3l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o; +cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(3l); +filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left} + ...z6r{left}..z7r..z8r--- + if dpi>300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r + ---obl(4'r,3r,2l)..z2l+oblu*down---cycle; +infill z9l{down}..{left}z8l..z7l..{right}z6l..{down}z5l..cycle; +penlabels(1,2,3,4,4',5,6,7,8,9); +endchar; + +iff known chars.sign_paragraph_reversed: +bskchar "Reversed paragraph sign"; +beginchar(chars.sign_paragraph_reversed,11u#,cap_height#,0); uni "0x204B"; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270); +pos5(.75ser_height,90); pos6(cap_hair,270); pos7(cap_curve,180); +pos8(cap_hair,90); pos9(.8ser_height,90); +bot y1=bot y3=0; top y2=top y4=top y6l=h; +lft x1l= lft x2l=2u; x3=x4=x2+3rule_thickness; +x5=x9=x3r; y8l=y9l; y8=bar_height; rt x7l=w-u; y7=.5[y8,y6]; x8=x6; +x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5r=y4r-serif_o; +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r); +filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c + ..z2l.a{right}...{right}z6l..z7l..z8l--- + if dpi>300:obl(9l,8l,3r) else: z9l fi + ---z3r.b..{right}z3r.c..z3r.a---z3l---obl(4'l,3l,2r) + ..z2r+oblu*down---cycle; +penlabels(1,2,3,4,4',5,6,7,8,9); +endchar; + +iff known chars.sign_paragraph_reversed_empty: +bskchar "Reversed paragraph sign (alternative)"; +beginchar(chars.sign_paragraph_reversed_empty,11u#,cap_height#,0); uni "non"; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270); +pos5(.75ser_height,270); pos6(cap_hair,270); pos7(cap_curve,180); +pos8(cap_hair,90); pos9(.8ser_height,90); +bot y1=bot y3=0; top y2=top y4=top y6l=h; +lft x1l= lft x2l=2u; x3=x4=x2+3rule_thickness; +x5=x9=x3r; y8l=y9l; y8=bar_height; rt x7l=w-u; y7=.5[y8,y6]; x8=x6; +x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5l=y4l-serif_o; +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r); +filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c + ..z2l.a{right}...{right}z6l..z7l..z8l--- + if dpi>300:obl(9l,8l,3r) else: z9l fi + ---z3r.b..{right}z3r.c..z3r.a---z3l---obl(4'l,3l,2r) + ..z2r+oblu*down---cycle; +infill z9r{down}..{right}z8r..z7r..{left}z6r..{down}z5r..cycle; +penlabels(1,2,3,4,4',5,6,7,8,9); +endchar; + +iff known chars.sign_pilcrow: +bskchar "Pilcrow sign"; +beginchar(chars.sign_pilcrow,8u#,cap_height#,0); uni "non"; +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(cap_hair,90); pos4(cap_curve,180); +pos5(cap_hair,270); pos6(.8ser_height,270); +bot y1=0; top y2=top y3r=h; +rt x1r= rt x2r= w-2u; +x6=x1l; y5r=y6r; y5=bar_height; lft x4r=u; y4=.5[y5,y3]; x5=x3; +x3=.5[x4l,x1l]; +cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(1l); +filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left} + ...z3r{left}..z4r..z5r---obl(6r,5r,1l)---z1l.b..{left}z1l.c..z1l.a---cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_pilcrow_empty: +bskchar "Pilcrow sign (alternative)"; +beginchar(chars.sign_pilcrow_empty,8u#,cap_height#,0); uni "non"; +adjust_fit(0,cap_serif_fit#); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(cap_hair,90); pos4(cap_curve,180); +pos5(cap_hair,270); pos6(.8ser_height,270); +bot y1=0; top y2=top y3r=h; +rt x1r= rt x2r= w-2u; +x6=x1l; y5r=y6r; y5=bar_height; lft x4r=u; y4=.5[y5,y3]; x5=x3; +x3=.5[x4l,x1l]; y2l:=y2l-.75ser_height; +cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(1l); +filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left} + ...z3r{left}..z4r..z5r---obl(6r,5r,1l)---z1l.b..{left}z1l.c..z1l.a---cycle; +infill z6l{down}..{left}z5l..z4l..{right}z3l..{down}z2l..cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_diamond_suit: +bskchar "Diamond suit"; +beginchar(chars.sign_diamond_suit,13u#, asc_height#,0); uni "0x2662"; +adjust_fit(0,0); +pickup tiny.nib; +string tx; path p[]; numeric tim[]; +pos1(rule_thickness,-90); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,180); +x1=x3=.5w; lft x2l=u; x4l=w-x2l; top y1l=h+apex_o; bot y3l=-d-apex_o; .5[y1,y3]=y2=y4; z0=(x1,y2); +for i=1 upto 4: + z[i+100]=.5[z[i],z[i mod 4 +1]]+.5u*unitvector(z0-.5[z[i],z[i mod 4 +1]]); + tx:="pos"&decimal (100+i)&"(rule_thickness,"&decimal (90*i-135)&")";scantokens tx; +endfor; +filldraw lft z1l..z101l..top z2l&top z2l{left}..bot z2l&bot z2l..z102l..lft z3l&lft z3l{down}..rt z3l& + rt z3l..z103l..bot z4l&bot z4l{right}..top z4l&top z4l..z104l..rt z1l&rt z1l{up}..lft z1l&cycle; +p1=lft z1r..z101r..top z2r; +p2=bot z2r..z102r..lft z3r; +p3=rt z3r..z103r..bot z4r; +p4=top z4r..z104r..rt z1r; +tim0=xpart(p1 intersectiontimes ((0,y1r-2oblu)--(w,y1r-2oblu))); +tim1=xpart(p1 intersectiontimes ((x2r+oblu,0)--(x2r+oblu,h))); +tim2=xpart(p2 intersectiontimes ((x2r+oblu,0)--(x2r+oblu,h))); +tim3=xpart(p2 intersectiontimes ((0,y3r+2oblu)--(w,y3r+2oblu))); +tim4=xpart(p3 intersectiontimes ((0,y3r+2oblu)--(w,y3r+2oblu))); +tim5=xpart(p3 intersectiontimes ((x4r-oblu,0)--(x4r-oblu,h))); +tim6=xpart(p4 intersectiontimes ((x4r-oblu,0)--(x4r-oblu,h))); +tim7=xpart(p4 intersectiontimes ((0,y1r-2oblu)--(w,y1r-2oblu))); +infill subpath(tim0,tim1) of p1..subpath(tim2,tim3) of p2 + ..subpath(tim4,tim5) of p3..subpath(tim6,tim7) of p4..cycle; +penlabels(0,1,2,3,4,101,102,103,104); +endchar; + +iff known chars.sign_diamond_suit_black: +bskchar "Black diamond suit"; +beginchar(chars.sign_diamond_suit_black,13u#, asc_height#,0); uni "0x2666"; +adjust_fit(0,0); +pickup tiny.nib; +string tx; path p[]; numeric tim[]; +pos1(rule_thickness,-90); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,180); +x1=x3=.5w; lft x2l=u; x4l=w-x2l; top y1l=h+apex_o; bot y3l=-d-apex_o; .5[y1,y3]=y2=y4; z0=(x1,y2); +for i=1 upto 4: + z[i+100]=.5[z[i],z[i mod 4 +1]]+.5u*unitvector(z0-.5[z[i],z[i mod 4 +1]]); + tx:="pos"&decimal (100+i)&"(rule_thickness,"&decimal (90*i-135)&")";scantokens tx; +endfor; +filldraw lft z1l..z101l..top z2l&top z2l{left}..bot z2l&bot z2l..z102l..lft z3l&lft z3l{down}..rt z3l& + rt z3l..z103l..bot z4l&bot z4l{right}..top z4l&top z4l..z104l..rt z1l&rt z1l{up}..lft z1l&cycle; +penlabels(0,1,2,3,4,101,102,103,104); +endchar; + +iff known chars.sign_heart_suit: +bskchar "Heart suit"; +beginchar(chars.sign_heart_suit,13u#, asc_height#,0); uni "0x2661"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,270); pos3(rule_thickness,0); pos4(rule_thickness,0); +pos5(rule_thickness,180); pos6(rule_thickness,270); +x1=x4+o=.5w=.5[x6,x2]=.5[x5,x3]; y4l=-d; +lft x3l=u; y3=y5=x_height; top y2l=top y6l=h; +x1-x2=(x2-x3); y1l=.5[x_height,h]; +p1=z1l..z2l..z3l..{down}z4l; +p2=z4r{up}..z5l..z6l..z1r; +p3=z1l+tiny*left..z2r..z3r..{down}z4; +p4=z4{up}..z5r..z6r..z1r+tiny*right; +tim1=xpart(p1 intersectiontimes ((x1,y1+oblu)--(0,y1+oblu))); +tim2=xpart(p2 intersectiontimes ((x1,y1+oblu)--(x6,y1+oblu))); +filldraw subpath (tim1,infinity) of p1..subpath(0,tim2) of p2..cycle; +oblu:=2oblu; +tim3=xpart(p3 intersectiontimes ((w,y4+oblu)--(0,y4+oblu))); +tim4=xpart(p4 intersectiontimes ((w,y4+oblu)--(0,y4+oblu))); +infill subpath(0,tim3) of p3..subpath(tim4,infinity) of p4..cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_heart_suit_black: +bskchar "Black heart suit"; +beginchar(chars.sign_heart_suit_black,13u#, asc_height#,0); uni "0x2665"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(rule_thickness,0); pos2(rule_thickness,270); pos3(rule_thickness,0); pos4(rule_thickness,0); +pos5(rule_thickness,180); pos6(rule_thickness,270); +x1=x4+o=.5w=.5[x6,x2]=.5[x5,x3]; y4l=-d; +lft x3l=u; y3=y5=x_height; top y2l=top y6l=h; +x1-x2=(x2-x3); y1l=.5[x_height,h]; +p1=z1l..z2l..z3l..{down}z4l; +p2=z4r{up}..z5l..z6l..z1r; +p3=z1l+tiny*left..z2r..z3r..{down}z4; +p4=z4{up}..z5r..z6r..z1r+tiny*right; +tim1=xpart(p1 intersectiontimes ((x1,y1+oblu)--(0,y1+oblu))); +tim2=xpart(p2 intersectiontimes ((x1,y1+oblu)--(x6,y1+oblu))); +filldraw subpath (tim1,infinity) of p1..subpath(0,tim2) of p2..cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_spade_suit: +bskchar "Spade suit"; +beginchar(chars.sign_spade_suit,13u#, asc_height#,0); uni "0x2660"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=4oblu; +pos1(rule_thickness,0); pos4(rule_thickness,0); +pos7(cap_curve,0); +x1=x4=x7=.5w=.5[x6,x2]=.5[x5,x3]; y4=h; +lft x3=u; y3=y5=bar_height; bot y2=bot y6=curve; +x1-x2=(x2-x3); y1=h-.25[x_height,h]; +y7=-hair; +p1=z1l..z2..z3..{up}z4l; +p2=z4r{down}..z5..z6..z1r; +p3=z7l--z1l; +p4=z1r--z7r; +tim1=xpart(p1 intersectiontimes ((x1-.5(stem-currentbreadth),0)--(x1-.5(stem-currentbreadth),h))); +tim2=xpart(p2 intersectiontimes ((x1+.5(stem-currentbreadth),0)--(x1+.5(stem-currentbreadth),y5))); +z100=(0,ypart(point tim1 of p1)); +tim3=xpart(p3 intersectiontimes (z100--(w,y100))); +tim4=xpart(p4 intersectiontimes (z100--(w,y100))); +filldraw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1 + ..subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4..cycle; +penlabels(1,4,7); labels(2,3,5,6); +endchar; + +iff known chars.sign_spade_suit_white: %FIXME +bskchar "White spade suit"; +beginchar(chars.sign_spade_suit_white,13u#, asc_height#,0); uni "0x2664"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=4oblu; +pos1(rule_thickness,0); pos4(rule_thickness,0); +pos7(cap_curve,0); +x1=x4=x7=.5w=.5[x6,x2]=.5[x5,x3]; y4=h; +lft x3=u; y3=y5=bar_height; bot y2=bot y6=curve; +x1-x2=(x2-x3); y1=h-.25[x_height,h]; +y7=-hair; +p1=z1l..z2..z3..{up}z4l; +p2=z4r{down}..z5..z6..z1r; +p3=z7l--z1l; +p4=z1r--z7r; +tim1=xpart(p1 intersectiontimes ((x1-.5(stem-currentbreadth),0)--(x1-.5(stem-currentbreadth),h))); +tim2=xpart(p2 intersectiontimes ((x1+.5(stem-currentbreadth),0)--(x1+.5(stem-currentbreadth),y5))); +z100=(0,ypart(point tim1 of p1)); +tim3=xpart(p3 intersectiontimes (z100--(w,y100))); +tim4=xpart(p4 intersectiontimes (z100--(w,y100))); +draw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1 + ..subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4..cycle; +penlabels(1,4,7); labels(2,3,5,6); +endchar; + +iff known chars.sign_club_suit: +bskchar "Club suit"; +beginchar(chars.sign_club_suit,13u#, asc_height#,0); uni "0x2663"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos5(rule_thickness,0); pos5'(cap_curve,0); +top z1=(.5w,h); lft x2=u; rt x3=w-u; y2=y3=bar_height; +.5[x4,x6]=x1=x5=x5'; y4=y6=curve; y5=.45[y2,y4]; z4=whatever[(x2,0),z3]; y5'=-hair; +z7=.5[z1,z3]+.5(y5-y4)*unitvector((z1-z3)rotated 90); +z8=.5[z1,z2]+.5(y5-y4)*unitvector((z1-z2)rotated -90); +y7'=.5[y7,y1]; x7'=1/3[x7,x3]; +y8'=.5[y8,y1]; x8'=1/3[x8,x2]; +p0=z2{down}..z4..z5..z6..{up}z3.. {z2-z7}.5[z3,z7]..z7..z7'..{left}z1 + ..z8'..z8..{z8-z3}.5[z8,z2]..{down}z2; +p1=z5l--z5'l; p2=z5'r--z5r; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p0; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1 + ..subpath(0,rundy(p0,tim2).zpet) of p2..subpath(rundy(p0,tim3),infinity) of p0 + &cycle; +labels(1,2,3,4,6,7,7',8,8'); penlabels(5,5'); +endchar; + +iff known chars.sign_club_suit_white: %FIXME +bskchar "White club suit"; +beginchar(chars.sign_club_suit_white,13u#, asc_height#,0); uni "0x2667"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos5(rule_thickness,0); pos5'(cap_curve,0); +top z1=(.5w,h); lft x2=u; rt x3=w-u; y2=y3=bar_height; +.5[x4,x6]=x1=x5=x5'; y4=y6=curve; y5=.45[y2,y4]; z4=whatever[(x2,0),z3]; y5'=-hair; +z7=.5[z1,z3]+.5(y5-y4)*unitvector((z1-z3)rotated 90); +z8=.5[z1,z2]+.5(y5-y4)*unitvector((z1-z2)rotated -90); +y7'=.5[y7,y1]; x7'=1/3[x7,x3]; +y8'=.5[y8,y1]; x8'=1/3[x8,x2]; +p0=z2{down}..z4..z5..z6..{up}z3.. {z2-z7}.5[z3,z7]..z7..z7'..{left}z1 + ..z8'..z8..{z8-z3}.5[z8,z2]..{down}z2; +p1=z5l--z5'l; p2=z5'r--z5r; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p0; +draw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1 + ..subpath(0,rundy(p0,tim2).zpet) of p2..subpath(rundy(p0,tim3),infinity) of p0 + &cycle; +labels(1,2,3,4,6,7,7',8,8'); penlabels(5,5'); +endchar; + +iff known chars.math_section: +bskchar "Section sign"; +beginchar(chars.math_section,8u#,asc_height#, .5asc_height#-.75bar_height#-.5cap_hair#-.5o#); uni "0x00A7"; +adjust_fit(0,0); +pickup tiny.nib; +numeric exc; exc=(w-u)/(h-.5bar_height); +path p[]; numeric tim[]; oblu:=2.5oblu; +pos2(cap_hair,90); pos3(cap_curve,angle((w-u,h-.5bar_height))+180); pos4(cap_hair,90); +pos12(cap_hair,90); pos13(cap_curve,angle((w-u,h-.5bar_height))+180); pos14(cap_hair,90); +pos5(cap_stem,180); pos6(cap_stem,180); +pos15(cap_stem,180); pos16(cap_stem,180); +z2-z12=z3-z13=z4-z14=z5-z15=z6-z16=z2r-z3; +y5=.5[y2l,y3]+.5like_cap_hair; x3-x5l=.5(y2l-y3l)*exc; +y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u; +x2=x3=x4=.5w; top y2r=h+o; y4l=.5bar_height; +y3=.5[y2r,y4r]+.5cap_hair; +pos1(cap_hair,0); x1r=w-x5r; y1=y5-.5cap_hair; +pos7(cap_hair,0); x7l=w-x6l; y7=y16+.5cap_hair; +p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r; +p1=z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; +p2=z12r{left}..z15r..z13r..z16r..{left}z14r..{up}z7r; +p3=z7l{dir-80}..z14l{right}..z16l..z13l..z15l..{right}z12l; +tim1=xpart(p0 intersectiontimes ((.5w,y2-.5cap_hair)--(w,y2-.5cap_hair))); +(tim2,tim3)=p0 intersectiontimes p2; +tim4=xpart(p3 intersectiontimes ((.5w,y14+cap_hair)--(0,y14+cap_hair))); +(tim5,tim6)=p3 intersectiontimes p1; +(tim7,tim8)=p0 intersectiontimes p3; +(tim9,tim10)=p0 intersectiontimes subpath(0,3.5) of p3; +filldraw z1r--(x1r-.5o,h+o){dir-100}..subpath(tim1,rundy(p0,tim2).zpet) of p0 + ..subpath(rundy(p2,tim3),infinity) of p2..z7l--(x7l+o,bot y14l){dir80} + ..subpath(tim4,rundy(p3,tim5).zpet) of p3 + ..subpath(rundy(p1,tim6),infinity) of p1..cycle; +oblu:=f_obl; +infill subpath(rundy(p0,tim7),rundy(p0,tim9).zpet) of p0 + ..subpath(rundy(p3,tim10),rundy(p3,tim8).zpet) of p3..cycle; +penlabels(0,1,2,3,4,5,6,7,12,13,14,15,16); +endchar; + +iff known chars.math_accent_hat_wide: +bskchar "Wide hat accent"; +beginchar(chars.math_accent_hat_wide,9u#,.5[asc_height#,body_height#],0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3]; +pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(stem,0); pos3(hair,0); +z2'=z2+.25tiny*left; +filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle; +penlabels(1,2,2',3); +endchar; + +iff known chars.math_accent_hat_wider: +bskchar "Wider hat accent"; +beginchar(chars.math_accent_hat_wider,17u#,body_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3]; +pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(1.75stem,0); pos3(hair,0); +z2'=z2+.25tiny*left; +filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle; +penlabels(1,2,2',3); +endchar; + +iff known chars.math_accent_hat_widest: +bskchar "Widest hat accent"; +beginchar(chars.math_accent_hat_widest,25u#,body_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3]; +pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(1.75stem,0); pos3(hair,0); +z2'=z2+.25tiny*left; +filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle; +penlabels(1,2,2',3); +endchar; + +iff known chars.math_accent_tilde_wide: +bskchar "Wide tilde accent"; +beginchar(chars.math_accent_tilde_wide,9u#,.5[asc_height#,body_height#],0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +lft x0=0; y0=.6[x_height,h]; +tilde(0,1); +endchar; + +iff known chars.math_accent_tilde_wider: +bskchar "Wider tilde accent"; +beginchar(chars.math_accent_tilde_wider,17u#,body_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +lft x0=0; y0=.6[x_height,h]; +tilde(0,1); +endchar; + +iff known chars.math_accent_tilde_widest: +bskchar "Widest tilde accent"; +beginchar(chars.math_accent_tilde_widest,25u#,body_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +lft x0=0; y0=.6[x_height,h]; +tilde(0,1); +endchar; + +iff known chars.math_parent_left_big: +bskchar "\big left parenthesis"; +beginchar(chars.math_parent_left_big,6u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(bourstem,0); +rt x1r=w-u; rt x3r=w-u; lft x2l=u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(.5[stem,hair], angle((x1r,y1l)-z2)-90); pos3(.5[stem,hair],angle((x3r,y3l)-z2)+90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_left_Big: +bskchar "\Big left parenthesis"; +beginchar(chars.math_parent_left_Big,7u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.05bourstem,0); +rt x1r=w-u; rt x3r=w-u; lft x2l=u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(.45[stem,hair], angle((x1r,y1l)-z2)-90); pos3(.45[stem,hair],angle((x3r,y3l)-z2)+90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_left_bigg: +bskchar "\bigg left parenthesis"; +beginchar(chars.math_parent_left_bigg,9u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.1bourstem,0); +rt x1r=w-u; rt x3r=w-u; lft x2l=u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(.4[stem,hair], angle((x1r,y1l)-z2)-90); pos3(.4[stem,hair],angle((x3r,y3l)-z2)+90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_left_Bigg: +bskchar "\Bigg left parenthesis"; +beginchar(chars.math_parent_left_Bigg,10u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.5bourstem,0); +rt x1r=w-u; rt x3r=w-u; lft x2l=u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(stem, angle((x1r,y1l)-z2)-90); pos3(stem,angle((x3r,y3l)-z2)+90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_left_top: +bskchar "Extensible left parenthesis---top"; +beginchar(chars.math_parent_left_top,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.5bourstem,0); +rt x1r=w-u; lft x2l=u; +bot y2=-d; top y1l=h+apex_o; +pos1(stem, angle((x1r,y1l)-z2)-90); +filldraw z2r{up}..z1r&z1r{up}..z1l&z1l..{down}z2l--cycle; +penlabels(1,2); +endchar; + +iff known chars.math_parent_left_bot: +bskchar "Extensible left parenthesis---bot"; +beginchar(chars.math_parent_left_bot,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.5bourstem,0); +rt x1r=w-u; lft x2l=u; +top y2=h; bot y1l=-d-apex_o; +pos1(stem,angle((x1r,y1l)-z2)+90); +filldraw z1r..{up}z2r--z2l{down}..z1l&z1l..{up}z1r&cycle; +penlabels(1,2); +endchar; + +iff known chars.math_parent_left_mid: +bskchar "Extensible left parenthesis---mid"; +beginchar(chars.math_parent_left_mid,10.5u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(1.5bourstem,0); pos2(1.5bourstem,0); +lft x1l=lft x2l=u; +top y1=h; bot y2=-d; +filldraw z1l--z2l--z2r--z1r--cycle; +penlabels(1,2); +endchar; + +iff known chars.math_parent_right_big: +bskchar "\big right parenthesis"; +beginchar(chars.math_parent_right_big,6u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(bourstem,180); +lft x1r=u; lft x3r=u; rt x2l=w-u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(.5[stem,hair], angle((x1r,y1l)-z2)+90); pos3(.5[stem,hair],angle((x3r,y3l)-z2)-90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_right_Big: +bskchar "\Big right parenthesis"; +beginchar(chars.math_parent_right_Big,7u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.05bourstem,180); +lft x1r=u; lft x3r=u; rt x2l=w-u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(.45[stem,hair], angle((x1r,y1l)-z2)+90); pos3(.45[stem,hair],angle((x3r,y3l)-z2)-90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_right_bigg: +bskchar "\bigg right parenthesis"; +beginchar(chars.math_parent_right_bigg,9u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.1bourstem,180); +lft x1r=u; lft x3r=u; rt x2l=w-u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(.4[stem,hair], angle((x1r,y1l)-z2)+90); pos3(.4[stem,hair],angle((x3r,y3l)-z2)-90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_right_Bigg: +bskchar "\Bigg right parenthesis"; +beginchar(chars.math_parent_right_Bigg,10u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.5bourstem,180); +lft x1r=u; lft x3r=u; rt x2l=w-u; +y2=.5[y1l,y3l]; top y1l=h+apex_o; bot y3l=-d-apex_o; +pos1(stem, angle((x1r,y1l)-z2)+90); pos3(stem,angle((x3r,y3l)-z2)-90); +filldraw z3r..z2r{up}..z1r&z1r{up}..z1l&z1l..z2l{down}..z3l&z3l..{up}z3r&cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_right_top: +bskchar "Extensible right parenthesis---top"; +beginchar(chars.math_parent_right_top,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.5bourstem,180); +lft x1r=u; rt x2l=w-u; +bot y2=-d; top y1l=h+apex_o; +pos1(stem, angle((x1r,y1l)-z2)+90); +filldraw z2r{up}..z1r&z1r{up}..z1l&z1l..{down}z2l--cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_parent_right_bot: +bskchar "Extensible right parenthesis---bot"; +beginchar(chars.math_parent_right_bot,10.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos2(1.5bourstem,180); +lft x1r=u; rt x2l=w-u; +top y2=h; bot y1l=-d-apex_o; +pos1(stem, angle((x1r,y1l)-z2)-90); +filldraw z1r..{up}z2r--z2l{down}..z1l&z1l..{up}z1r&cycle; +penlabels(1,2); +endchar; + +iff known chars.math_parent_right_mid: +bskchar "Extensible right parenthesis---mid"; +beginchar(chars.math_parent_right_mid,10.5u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(1.5bourstem,0); pos2(1.5bourstem,0); +rt x1r=rt x2r=w-u; +top y1=h; bot y2=-d; +filldraw z1l--z2l--z2r--z1r--cycle; +penlabels(1,2); +endchar; + +{{ save arrwidth, arrsize; numeric arrwidth, arrsize; + arrwidth=arrsize/1.2=4u; + iff known chars.arrow_double_ext_top: + bskchar "Extensible double vertical arrow--top"; + beginchar(chars.arrow_double_ext_top,10u#,0,dh#); uni "non"; + adjust_fit(0,0); + pickup tiny.nib; + pos1(rule_thickness,180); + x0=x1r=.5w=.5[x2,x3]; x3-x2=4rule_thickness; + top y0=h+apex_o; bot y1=-d; y2=y3=y1; + filldraw dvojsipka(0,1,2,3)..cycle; + labels(1rr); + endchar; + + iff known chars.arrow_double_ext_bot: + bskchar "Extensible double vertical arrow---bot"; + beginchar(chars.arrow_double_ext_bot,10u#,0,dh#); uni "non"; + adjust_fit(0,0); + pickup tiny.nib; + pos1(rule_thickness,0); + x0=x1r=.5w=.5[x2,x3]; x3-x2=4rule_thickness; + top y0=-d-apex_o; bot y1=h; y2=y3=y1; + filldraw dvojsipka(0,1,3,2)..cycle; + labels(1rr); + endchar; + + iff known chars.arrow_ext_top: + bskchar "Extensible vertical arrow---top"; + beginchar(chars.arrow_ext_top,10u#,0,dh#); uni "non"; + adjust_fit(0,0); + pickup tiny.nib; + pos1(rule_thickness,0); + x0=x1=.5w; + top y0=h+apex_o; bot y1=-d; + filldraw sipka_ext(0,1)---z1r..z1l---cycle; + endchar; + + iff known chars.arrow_ext_bot: + bskchar "Extensible vertical arrow---bot"; + beginchar(chars.arrow_ext_bot,10u#,0,dh#); uni "non"; + adjust_fit(0,0); + pickup tiny.nib; + pos1(rule_thickness,0); + x0=x1=.5w; + top y0=-d-apex_o; bot y1=h; + filldraw sipka_ext(0,1)---z1l..z1r---cycle; + endchar; +}}; + +iff known chars.arrow_ext_mid: +bskchar "Extensible vertical arrow---middle"; +beginchar(chars.arrow_ext_mid,10u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); +x1=x2=.5w; +top y1=h; bot y2=-d; +filldraw z1r..z1l---z2l..z2r---cycle; +endchar; + +iff known chars.arrow_double_ext_mid: +bskchar "Extensible double vertical arrow---middle"; +beginchar(chars.arrow_double_ext_mid,10u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,0); pos4(rule_thickness,0); +x1=x2; x3=x4; .5[x1,x3]=.5w; +x3-x2=4rule_thickness; +top y1=top y3=h; bot y2=bot y4=-d; +filldraw z1r..z1l---z2l..z2r---cycle; +filldraw z3r..z3l---z4l..z4r---cycle; +endchar; + +iff known chars.math_vertical_ext: +bskchar "Extensible vertical line"; +beginchar(chars.math_vertical_ext,6u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); +x1=x2=.5w; +top y1=h; bot y2=-d; +filldraw z1r..z1l---z2l..z2r---cycle; +endchar; + +iff known chars.math_double_vertical_ext: +bskchar "Extensible double vertical line"; +beginchar(chars.math_double_vertical_ext,10u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rule_thickness,0); pos2(rule_thickness,0); +pos3(rule_thickness,0); pos4(rule_thickness,0); +x1=x2; x3=x4; .5[x1,x3]=.5w; +x3-x2=4rule_thickness; +top y1=top y3=h; bot y2=bot y4=-d; +filldraw z1r..z1l---z2l..z2r---cycle; +filldraw z3r..z3l---z4l..z4r---cycle; +endchar; + +iff known chars.math_slash_big: +bskchar "\big slash"; +beginchar(chars.math_slash_big,10u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=rule_thickness; +top rt z1=(w-u,h); bot lft z2=(u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_slash_Big: +bskchar "\Big slash"; +beginchar(chars.math_slash_Big,13u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=1.1rule_thickness; +top rt z1=(w-u,h); bot lft z2=(u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_slash_bigg: +bskchar "\bigg slash"; +beginchar(chars.math_slash_bigg,17u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=1.25rule_thickness; +top rt z1=(w-u,h); bot lft z2=(u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_slash_Bigg: +bskchar "\Bigg slash"; +beginchar(chars.math_slash_Bigg,21u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=1.5rule_thickness; +top rt z1=(w-u,h); bot lft z2=(u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_backslash_big: +bskchar "\big slash"; +beginchar(chars.math_backslash_big,10u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=rule_thickness; +top lft z1=(u,h); bot rt z2=(w-u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_backslash_Big: +bskchar "\Big slash"; +beginchar(chars.math_backslash_Big,13u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=1.1rule_thickness; +top lft z1=(u,h); bot rt z2=(w-u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_backslash_bigg: +bskchar "\bigg slash"; +beginchar(chars.math_backslash_bigg,17u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=1.25rule_thickness; +top lft z1=(u,h); bot rt z2=(w-u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_backslash_Bigg: +bskchar "\Bigg slash"; +beginchar(chars.math_backslash_Bigg,21u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup rule.nib; +numeric breadth; breadth:=1.5rule_thickness; +top lft z1=(u,h); bot rt z2=(w-u,-d); +pickup tiny.nib; +pos1(breadth,angle(z2-z1)+90); pos2(breadth,angle(z2-z1)+90); +filldraw bskrule(2,1,rule_thickness,rule_thickness); +penlabels(1,2); +endchar; + +iff known chars.math_bracket_left_big: +bskchar "\big left bracket"; +beginchar(chars.math_bracket_left_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=hair; +pos1(breadth,90); pos4(breadth,270); +lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_left_Big: +bskchar "\Big left bracket"; +beginchar(chars.math_bracket_left_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.25[hair,stem]; +pos1(breadth,90); pos4(breadth,270); +lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_left_bigg: +bskchar "\bigg left bracket"; +beginchar(chars.math_bracket_left_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.5[hair,stem]; +pos1(breadth,90); pos4(breadth,270); +lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_left_Bigg: +bskchar "\Bigg left bracket"; +beginchar(chars.math_bracket_left_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.75[hair,stem]; +pos1(breadth,90); pos4(breadth,270); +lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_left_top: +bskchar "Extensible left bracket---top"; +beginchar(chars.math_bracket_left_top,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=stem; +pos1(breadth,90); +lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth; +top y2r=top y1r=h; bot y3r=-d; +rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_bracket_left_bot: +bskchar "Extensible left bracket---bottom"; +beginchar(chars.math_bracket_left_bot,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=.75[hair,stem]; +pos3(breadth,270); +lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth; +top y1r=h; bot y2r=bot y3r=-d; +rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_bracket_left_mid: +bskchar "Extensible left bracket---mid"; +beginchar(chars.math_bracket_left_mid,7.5u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rt stem,0); pos2(rt stem,0); +lft x1l=lft x2l=1.75u; +top y1=h; bot y2=-d; +filldraw z1r---z2r..z2l---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_bracket_right_big: +bskchar "\big right bracket"; +beginchar(chars.math_bracket_right_big,5.5u#,rule_thickness#,2dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth=hair; +pos1(breadth,90); pos4(breadth,270); +rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_right_Big: +bskchar "\Big right bracket"; +beginchar(chars.math_bracket_right_Big,6u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth=.25[hair,stem]; +pos1(breadth,90); pos4(breadth,270); +rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_right_bigg: +bskchar "\bigg right bracket"; +beginchar(chars.math_bracket_right_bigg,6.5u#,rule_thickness#,4dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth=.5[hair,stem]; +pos1(breadth,90); pos4(breadth,270); +rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_right_Bigg: +bskchar "\Bigg right bracket"; +beginchar(chars.math_bracket_right_Bigg,7u#,rule_thickness#,5dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth=.75[hair,stem]; +pos1(breadth,90); pos4(breadth,270); +rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=bot y4r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l); +filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3,4); +endchar; + +iff known chars.math_bracket_right_top: +bskchar "Extensible right bracket---top"; +beginchar(chars.math_bracket_right_top,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=stem; +pos1(breadth,90); +rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth; +top y2r=top y1r=h; bot y3r=-d; +lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r); +filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_bracket_right_bot: +bskchar "Extensible right bracket---bottom"; +beginchar(chars.math_bracket_right_bot,7.5u#,rule_thickness#,3dh#-rule_thickness#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric breadth; breadth:=stem; +pos3(breadth,270); +rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u; +top y1r=h; bot y2r=bot y3r=-d; +lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l); +filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.math_bracket_right_mid: +bskchar "Extensible right bracket---mid"; +beginchar(chars.math_bracket_right_mid,7.5u#,0,dh#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(rt stem,0); pos2(rt stem,0); +rt x1r=rt x2r=w-1.75u; +top y1=h; bot y2=-d; +filldraw z1r---z2r..z2l---z1l..cycle; +penlabels(1,2,3); +endchar; + +iff known chars.text_greek_mu: +bskchar "Micro sign (text Greek letter mu)"; +beginchar(chars.text_greek_mu,11u#,x_height#,desc_depth#); uni "0x00B5"; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=2oblu; +pos1(stem,0); pos2(stem,0); pos2'(stem,0); +pos3(stem,0); pos4(hair,90); pos5(stem,70); +pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(stem,180); +pos10(stem,0); pos11(stem,0); pos12(hair,90); pos13(.5[stem,hair],90); +lft x1l=lft x2l=1.5u; top y1=h; y2=0; y2'=bar_height; x2'=x1; +x3l=x2; y3=-d+1.5curve; bot y4l=-d; x4-x3r=y3-y4; y5l=y4; x5-x4=stem; +drop_serif(1,jut); x1b:=.5[x1a,x1l]; +rt x10r=w-2u; y6=y8=bar_height; bot y7l=-o; x7=.5w; +x6=x2; top y9=h; x9=x10; +z8r=z10l; x11=x10; y11=curve; rt x13=w-.5u; bot y12l=bot bot y13l=-o; x12=.5[x13,x10]; +bskpoints(9,10,hair,hair); +p0=z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b..z2'l + ---z2l..z3l..{right}z4l..z5l..z5r..z4r{left}..z3r..z2r---z1r; +p1=z12l{right}..z13l..z13r..{left}z12r..z11r---z9l..{down}z9rr---z10l..z7r..{up}z6r; +p2=z6l{down}..z7l..{up}z8l; +p3=z10l{down}..z11l..{right}z12l; +z14=bsktouch(subpath(5,infinity) of p0,right,p2,left); +tim0-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z14--(0,y14))); +tim1=xpart(p2 intersectiontimes (z14--(x7,y14))); +z0=bsktouch(p2,right,p3,left); +tim2=xpart(p2 intersectiontimes (z0--(.5w,y0))); +tim3=xpart(p3 intersectiontimes (z0--(w,y0))); +(tim4,tim5-5)=p1 intersectiontimes subpath(5,infinity) of p0; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p2,tim1),rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p3,tim3),infinity) of p3 + ..subpath(0,rundy(p1,tim4).zpet) of p1 + ..subpath(rundy(p0,tim5),infinity) of p0..cycle; +penlabels(1,2,2',3,4,5,6,7,8,9,10,11,12,13); labels(0,9rr); +endchar; + +iff known chars.math_Re: +bskchar "The real part sign"; +beginchar(chars.math_Re,13.5u#,cap_height#,0); uni "0x211C"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=2oblu; +pos1(cap_hair,90); pos2(cap_hair,90); pos3(cap_hair,120); +pos4(cap_hair,-90); pos5(cap_hair,-90); +pos7(cap_stem,0); pos8(cap_stem,0); +pos9(cap_hair,90); pos10(cap_hair,180); +pos11(cap_hair,180); pos12(cap_hair,135); pos12'(.5[cap_hair,stem],135); +pos13(cap_hair,-90); pos14(cap_hair,180); +pos15(cap_stem,0); pos16(cap_stem,0); +pos17(cap_hair,90); pos18(hair,150); +y1=y2+o=.5[x_height,bar_height]; +x1=5u; x3l=w-2.25u; y3=y1+stem; +top y4l=h; x4=2/3[x1,x2]; x5=x1-o; z5=z4+whatever*dir(210); +z2=z3+whatever*dir30; +x7r=x8r=x1; y8=y5; y7=.5bar_height; +top y9r=h+o; x9=.5[x8,u]; x11=.5[x10,x9]; z11=whatever[z4,z5]; +lft x10l=u; y10=y8; x12=x11+o; y12=y1; +bot y13r=-o; x13=.5[x12,x9]; lft x14r=u; y14=cap_curve; +x15+o=x16=x2; y15=y2l; y16=.75y7; rt x18l=w-u; y18=.75y7; bot y17l=-o; z17=z18+whatever*dir(45); +lft x12'r=u; z12'l=z12l+whatever*dir(225); z12''=z12'+.2stem*dir(90); +p0=z1l--z2l---z3l..z4l---z5l; +pos6(cap_stem,angle(direction 2.5 of p0)+90); +z6l=point 2.5 of p0; +p1=z7r---z8r..z9r---z10r&z10r..z11r..{dir225}z12r..z12''..z12'r..z12'l..z12l{dir45}..z11l + ..z10l+o*unitvector(z11l-z10l)..z10l+o*unitvector(z9l-z10l)---z9l..z8l---z7l..{left}z13l + --z14l--z14r--z13r{right}..{up}z7r; +p2=z16l{z16-z15}..{right}z17l..{dir70}z18l--z18r{dir-110}..z17r{left}..z16r---(x15r,h); +p3=z5r---z4r..z6r..z3r---z2r--z1r; +(tim0,tim1)=p2 intersectiontimes p0; +(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1; +filldraw z7r---obl(1l,7r,15l)---obl(15l,1l,16l) + ---subpath(0,rundy(p2,tim0).zpet) of p2 + ..subpath(rundy(p0,tim1),rundy(p0,tim2).zpet) of p0 + ..subpath(rundy(p1,tim3),infinity) of p1..cycle; +infill subpath(rundy(p3,0),rundy(p3,length p3).zpet) of p3 + ..subpath(rundy(z1r--z5r,0),rundy(z1r--z5r,1).zpet) of (z1r--z5r) + ..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12',13,14,15,16,17,18); labels(12''); +endchar; + +iff known chars.math_Im: +bskchar "The imaginary part sign"; +beginchar(chars.math_Im,11u#,cap_height#,0); uni "0x2111"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(cap_hair,-30); pos2(cap_hair,240); pos2'(.5[cap_hair,cap_stem],-90); +pos3(cap_curve,0); pos4(cap_stem,-30); pos5(cap_hair,-90); +pos6(cap_curve,50); pos7(cap_hair,90); pos8(cap_hair,90); +pos9(cap_hair,135); pos10(.5[cap_hair,cap_stem],240); +lft x1l=u; .5[x2,x3]=.5w; rt x3r=w-2u; bot y2'r=-o; x2'=.5w; +y1=.25bar_height; y2r=.25bar_height; y3=.35x_height; y4l=bot y5r=x_height; +x4r=.65w; x5l=w-1.5u; x6=x4l-.5stem; top y7r=h+o; y6r=y7-stem; +z8=z5+sqrt2*cap_curve*dir85; x7=x2+.5stem; lft x9l=1.25u; y9r=y6r; +y10l=.5[y6l,y5l]; x10=.35[x7,x9]; z10'=z10+.2stem*up+.2(stem-currentbreadth)*left; +filldraw z1l{dir60}..z2l..z2'l..z3l..z4l..{dir-20}z5l..z5r{dir160} + ..z4r..{down}z3r..z2'r..z2r..{dir240}z1r..cycle; +filldraw z10r..z9r..z7r..z6r..{dir40}z8r..z8l{dir220}..z6l + ..z7l..z9l..z10'..z10l&z10l..{left}cycle; +penlabels(1,2,2',3,4,5,6,7,8,9,10); labels(10'); +endchar; + +iff known chars.math_aleph: +bskchar "The Hebrew letter aleph"; +beginchar(chars.math_aleph,12u#,asc_height#,0); uni "0x2135"; +adjust_fit(0,0); +pickup tiny.nib; +numeric theta, tim[]; path p[]; oblu:=2.2oblu; +pos1(cap_curve,50); pos2(cap_curve,50); +top y1r=h+apex_o; bot y2l=0; +lft x1l=u; rt x2r=w-u; +theta=angle(z1-z2)-90; +pos3(cap_stem,theta); pos4(cap_stem,theta); +pos5(curve,50); pos6(curve,50); pos7(cap_stem,theta); +pos8(cap_curve,30); pos9(hair,-90); pos10(cap_stem,-10); pos11(cap_hair,theta-90); +pos12(stem-o,-90); pos13(cap_hair,theta-90); pos14(.85cap_stem,theta-90); +.5[x3,x4]=x4-x3=.5w; z3=whatever[z1,z2]+stem*down; z4=whatever[z1,z2]+stem*up; +top y5r=h; rt x6r=w-u; z5=z6+whatever*dir(theta+90); bot y6l=x_height; +z7=.5[z5,z6]; +y8=.25bar_height; lft x9l=2u; bot y9r=0; x8l=x3r; lft x12l=u; bot y12r=y9r; +lft x10l=u; z10=whatever[z7l,(.5w,x_height)]; +z11=.5[.5[z7l,z10],z3]; +z12'=z12+.2stem*right+.2(stem-currentbreadth)*dir45; +.75[z11,z13]=.5[z3,z4]; z14=z7; +p0=z1r{left}..z1l..z3l---z4l..{down}z2l..{up}z2r..z4r---z3r..{up}z1r; +p1=z5r{left}..z5l..z7l..{down}z6l..{up}z6r..z7r..{up}z5r; +p2=z11l{z10-z11}..{down}z10l..z8l..{left}z9l..z12'{up}..z12l + ..z12r..{right}z9r..z8r..{up}z10r..{z11-z10}z11r; +p3=reverse (z13l{dir theta}..{dir theta}z14l--z14r{dir (theta+180)}..{dir (theta+180)}z13r); +(tim0,tim1)=p0 intersectiontimes p2; +(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p2; +(tim4,tim5)=p0 intersectiontimes p3; +(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p3; +(tim8,tim9)=p3 intersectiontimes p1; +(tim10-2,tim11)=subpath(2,infinity) of p3 intersectiontimes p1; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0 + ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2 + ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0 + ..subpath(rundy(p3,tim5),rundy(p3,tim8).zpet) of p3 + ..subpath(rundy(p1,tim9),infinity) of p1 + ..subpath(0,rundy(p1,(tim11,1.5hair)).zpet) of p1 + ..subpath(rundy(p3,(tim10,1.5hair)),rundy(p3,tim7).zpet) of p3 + ..subpath(rundy(p0,tim6),infinity) of p0 + ..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14); +endchar; + +iff known chars.sign_dolar: +bskchar "The dollar sign"; +beginchar(chars.sign_dolar,9u#, asc_height#, 0); uni "0x0024"; +adjust_fit(0,0); +pickup tiny.nib; +numeric exc; exc=(w-u)/h; %FIXME oblu +path p[]; numeric tim[]; +pos2(hair,90); pos3(.9curve,angle((w-u,h))+180); pos4(hair,90); +pos5(stem,180); pos6(stem,180); pos8(hair,0); pos9(hair,0); +y5=.5[y2l,y3]+.5hair; x3-x5=.8(y2l-y3l)*exc; +y6=.5[y4r,y3]-.5hair; rt x6l=w-u; +x2=x3=x4=.5w; top y2r=h-hair; bot y4l=hair; +y3=.5[y2l,y4r]+.5hair; +x8=x9=x3; top y8=h+o; bot y9=-o; +bskpoints(8,9,.5hair,.5hair); +pos1(hair,0); x1r=w-x5r; y1=y5-.5hair; +pos7(hair,0); x7l=w-x6l; y7=y6+.5hair; +p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r; +p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; +p2=(x8l,y3)--(x8l,y6); p9=p2 shifted (z8r-z8l); +p3=(x9l,y6)--z9l; p10=p3 shifted (z8r-z8l); +p4=z9r--(x9r,y6); +p5=(x9r,y6)--(x9r,y5); p7=p5 shifted (z8l-z8r); +p6=(x8r,y5)--z8r; p8=p6 shifted (z8l-z8r); +tim1=xpart(p0 intersectiontimes ((.5w,y2-.5hair)--(w,y2-.5hair))); +tim2=xpart(p1 intersectiontimes ((.5w,y4+hair)--(0,y4+hair))); +tim3=xpart(p0 intersectiontimes ((x8r,y3)--z8r)); +tim4=xpart(p0 intersectiontimes ((x8l,y3)--z8l)); +(tim5,tim6)=p0 intersectiontimes p2; +(tim7,tim8)=p0 intersectiontimes p3; +tim9=xpart(p1 intersectiontimes p3); +tim10=xpart(p1 intersectiontimes p4); +(tim11,tim12)=p1 intersectiontimes p5; +(tim13,tim14)=p1 intersectiontimes p6; +(tim15,tim16)=p1 intersectiontimes p8; +(tim17,tim18)=p1 intersectiontimes p7; +(tim19,tim20)=p0 intersectiontimes p10; +(tim21,tim22)=p0 intersectiontimes p9; +filldraw z1r--(x1r-.5o,y2-.5hair){dir-100}..subpath(tim1,rundy(p0,tim3).zpet) of p0 + ..{up}z8rr..z8l---(x8l,y8rr).. + subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0 + ..subpath(rundy(p2,(tim6,curve)), infinity) of p2-- + subpath(0,rundy(p3,(tim8,curve)).zpet) of p3 + ..subpath(rundy(p0,(tim7,curve)),infinity) of p0 ..z7l--(x7l+o,y4+hair){dir80}.. + subpath(tim2, rundy(p1,tim3).zpet) of p1..{down}z9ll..z9r---(x9r,y9ll).. + subpath(rundy(p1,tim10),rundy(p1,tim11).zpet) of p1.. + subpath(rundy(p5,(tim12,curve)),infinity) of p5.. + subpath(0,rundy(p6,(tim14,curve)).zpet) of p6 + ..subpath(rundy(p1,(tim13,curve)),infinity) of p1..cycle; +oblu:=curve;%2.5f_obl; FIXME +infill subpath(rundy(p1,tim15).zpet,rundy(p1,tim17)) of p1.. + subpath(rundy(p7,tim18),infinity) of p7 + --subpath(0,rundy(p8,tim16).zpet) of p8..cycle; +if bold_face: oblu:=f_obl; fi +infill subpath(rundy(p0,tim19).zpet,rundy(p0,tim21)) of p0.. + subpath(rundy(p9,tim20),infinity) of p9 + --subpath(0,rundy(p10,tim22)) of p10..cycle; +penlabels(0,1,2,3,4,5,6,7,8,9); labels(8rr,9ll); +endchar; + +iff known chars.sign_pound: +bskchar "Pound sign"; +beginchar(chars.sign_pound,11.5u#,asc_height#,0); uni "0x00A3"; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); +pos4(cap_hair,-90); pos5(stem,30); +pos6(bar,90); pos7(bar,90); pos8(bar,90); pos9(bar,90); +x1=x2=3u; y2=.5bar_height; .5[y1,y2]=.5h; +bot y4r=0; x4=.5u; x5r=w-1.5u; +top y3l=h+o; y5r=y3-1.5like_stem; x3=.5[x1,x5]; +z5'=z5+.25stem*unitvector(z5-z3); +y6=y7=y8=y9=2/3[bar_height,x_height]; +x1-x6=.5(x9-x1); x7=x1l; x8=x1r; lft x6=if monospace: 0 else: .5u fi; +bot y10r=0; rt x10r=w-u; z11r=(x2r,y4r); +bskpoints(6,9,bar,bar); +{{ save beak; numeric beak; beak=.5bar_height; + filldraw arm_bot_r_points(11r,10)..z2r---obl(8l,2r,9l) + ---z9ll..z9r---obl(8r,9r,1r)---z1r ..{right}z3r + ..z5l..z5'..z5r{up}..z3l{left}..z1l + ---obl(7r,1l,6r)---z6rr..z6l---obl(7l,6l,2l) + ---z2l..{left}z4l..z4r---cycle; +}}; +penlabels(1,2,3,4,5,6,7,8,9); labels(5',6rr,9ll); +endchar; + +iff known chars.sign_lira: +bskchar "Lira sign"; +beginchar(chars.sign_lira,11.5u#,asc_height#,0); uni "0x20A4"; +adjust_fit(serif_fit#,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); +pos4(cap_hair,-90); pos5(stem,30); +pos6(bar,90); pos7(bar,90); pos8(bar,90); pos9(bar,90); +pos12(bar,90); pos13(bar,90); pos14(bar,90); pos15(bar,90); +x1=x2=3u; y2=.5bar_height; .5[y1,y2]=.5h; +bot y4r=0; x4=.5u; x5r=w-1.5u; +top y3l=h+o; y5r=y3-1.5like_stem; x3=.5[x1,x5]; +z5'=z5+.25stem*unitvector(z5-z3); +y6=y7=y8=y9; y12=y13=y14=y15; y6l-y12r=max(4hair,.3x_height); top y9r=x_height; +x1-x6=.5(x9-x1); x7=x13=x1l; x8=x14=x1r; lft x6=lft x12=if monospace: 0 else: .5u fi; x15=x9; +bot y10r=0; rt x10r=w-u; z11r=(x2r,y4r); +bskpoints(6,9,bar,bar); bskpoints(12,15,bar,bar); +{{ save beak; numeric beak; beak=.5bar_height; + filldraw arm_bot_r_points(11r,10)..z2r---obl(14l,2r,15l)---z15ll..z15r---obl(14r,15r,8l)---obl(8l,2r,9l) + ---z9ll..z9r---obl(8r,9r,1r)---z1r ..{right}z3r + ..z5l..z5'..z5r{up}..z3l{left}..z1l + ---obl(7r,1l,6r)---z6rr..z6l---obl(7l,6l,2l) + ---obl(13r,7l,12r)---z12r..z12l---obl(13l,12l,2l) + ---z2l..{left}z4l..z4r---cycle; +}}; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(5',6rr,12rr,9ll,15ll); +endchar; + +iff known chars.sign_compound_word: +bskchar "Compound word mark"; +beginchar(chars.sign_compound_word,0,x_height#,0); uni "non"; +charwd:=0; +endchar; + +iff known chars.sign_compound_word_capital: +bskchar "Capital compound word mark"; +beginchar(chars.sign_compound_word_capital,0,cap_height#,0); uni "non"; +charwd:=0; +endchar; + +iff known chars.sign_compound_word_asc: +bskchar "Ascender height compound word mark"; +beginchar(chars.sign_compound_word_asc,0,asc_height#,0); uni "non"; +charwd:=0; +endchar; + +iff known chars.sign_degree: +bskchar "Degree sign"; +beginchar(chars.sign_degree,6u#,asc_height#,0); uni "0x00B0"; +adjust_fit(0,0); +pickup tiny.nib; +pos1a(hair,0); pos1b(hair,90); +pos1c(hair,180); pos1d(hair,270); +z0=(.5w,h-2u)=.5[z1a,z1c]=.5[z1b,z1d]; +x1b=x1d; y1a=y1c; y1d-y1b=(x1c-x1a); x1a.l=x1; lft x1=u; +filldraw z1a.l{down}..z1b.l..z1c.l..z1d.l..cycle; +infill z1a.r{down}..z1b.r..z1c.r..z1d.r..cycle; +penlabels(1a,1b,1c,1d); labels(0); +endchar; + +iff known chars.sign_space: +bskchar "Space"; +beginchar(chars.sign_space,5u#,x_height#,0); uni "0x0020"; +endchar; + +iff known chars.sign_space_nb: +bskchar "Non-breaking space"; +beginchar(chars.sign_space_nb,5u#,x_height#,0); uni "0x00A0"; +endchar; + +iff known chars.sign_reference: +bskchar "Reference mark sign"; +beginchar(chars.sign_reference,13u#,cap_height#,0); uni "0x203B"; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +pos1(rule_thickness,135); pos2(rule_thickness,135); +pos3(rule_thickness,45); pos4(rule_thickness,45); +lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u; +bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u; +z0=.5[z1,z2]; +bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair); +z5=whatever[z4l,z3l]=whatever[z1l,z2l]; +z6=whatever[z4r,z3r]=whatever[z1l,z2l]; +z7=whatever[z4r,z3r]=whatever[z1r,z2r]; +z8=whatever[z4l,z3l]=whatever[z1r,z2r]; +for i=0 upto 3: z[10+i]=z0+(.25w,0) rotated (i*90); endfor; +filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r--- + obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle; +dot(10); dot(11); dot(12); dot(13); +penlabels(1,2,3,4); labels(5,6,7,8); +endchar; + +charscription(14u,cap_height,0)( +path p[]; +pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); +pos5(cap_hair,0); pos6(cap_hair,180); +pos5'(cap_hair,0); pos6'(cap_hair,180); +lft x1l=u; x3l=w-x1l; y1=y3=x_height; +.5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; +.5[x5,x6]=x2; y5=y6=.5bar_height; x6-x5=.4(x3r-x1r); +z5'-z5=z6'-z6=o*down; +x7r=x6r; x7l=x5r; bot y7l=bot y7r=0; +bot y8r=bot y9r=0; rt x8l=w-u; lft x9l=u; +{{ numeric oldbeak; oldbeak:=beak; save beak; numeric beak; beak:=.65oldbeak; +p0=arm_bot_r_points(7r,8).alt; z10=(x6l,y8d); +p1=arm_bot_l_points(7l,9).alt; z11=(x5l,y9d); +}}; +p2:=z5'l..z1l..z4l..z3l..z6'l; +filldraw subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2 + ..{down}z10+oblu*up--obl(10,6l,8d)---z8d...z8c..z8l.o + &z8l.o{up}..z8l---z8r--z8b...z8a---z7r--z6r..z3r..z4r + ..z1r..z5r--z7l---z9a...z9b--z9r---z9l..{down}z9l.o + &z9l.o..z9c...z9d---obl(11,9d,5l)--z11+oblu*up{up} + ..cycle; +penlabels(1,2,3,4,5,5',6,6',7,10,11); +); + +iff known chars.sign_Ohm: +bskchar "Ohm sign (modified greek letter Omega)"; +beginchar(chars.sign_Ohm,14u#,cap_height#,0); uni "0x2126"; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +endchar; + +iff known chars.sign_Mho: +bskchar "Mho sign (rotated Ohm sign)"; +beginchar(chars.sign_Mho,14u#,cap_height#,0); uni "0x2127"; +adjust_fit(0,0); +pickup tiny.nib; +usechar rotatedaround((.5[x1,x3],.5h),180); +endchar; + +iff known chars.sign_info: +bskchar "Info sign"; +beginchar(chars.sign_info,8u#,asc_height#,0); uni "0x2139"; +adjust_fit(0,0); +pickup tiny.nib; +pos1(3u,0); pos2(3u,0); +x1=x2=rt x3=.5w; bot y1=0; y2=x_height; +top y3+1.5u=h; +serif_bot(1); drop_serif(2)(1.5u).alt; +filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a + ---obl(2b,2a,1a)---z1a..z1b{left}..{right}z1c + ..z1+ser_boule*up.. z1d{right}..{left}z1e..{up}z1f--cycle; +filldraw fullcircle scaled 3u shifted z3; +penlabels(1,2,3); +endchar; + +iff known chars.sign_currency: +bskchar "Currency sign"; +beginchar(chars.sign_currency,10u#,x_height#,0); uni "0x00A4"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; +.5[x2,x6]=.5w; x2-x6=y8-y4; y2=y0=.5h; top y8=h; x0=x8; +circle_points(hair); +p0:=draw_circle.l; +forsuffixes i=1,3,5,7: + z[i+10]=z.i; pos[i+10](hair,angle(z[i]-z0)+90); + z[i+11]=z.i+3hair*unitvector(z[i]-z0); pos[i+11](hair,angle(z[i]-z0)+90); + p[i]=z[i+10].r--z[i+11].r; + p[i+1]=z[i+11].l--z[i+10].l; +endfor; +filldraw forsuffixes i=1,3,5,7: + subpath(i-1,rundy(p0,i).zpet) of p0..subpath(rundy(p[i],0),infinity) of p[i] + ..subpath(0,rundy(p[i+1],1).zpet) of p[i+1] .. subpath(rundy(p0,i),i+1) of p0.. + endfor + cycle; +infill draw_circle.r; +penlabels(0,11,12,13,14,15,16,17,18); +endchar; + +iff known chars.sign_diameter: +bskchar "Diameter sign"; +beginchar(chars.sign_diameter,14u#,asc_height#,0); uni "0x2300"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(hair,0); pos2(hair,90); pos3(hair,180); pos4(hair,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x2,x4]=.5[x1,x3]; x2-x4=0; y4-y2=x3-x1; .5[y4,y2]=.5h; +top z5=(x1,-apex_o); bot z6=(x3,h+o); +pos5(hair,angle(z5-z6)+90); pos6(hair,angle(z5-z6)+90); +z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l]; +p0:=z1l{down}..z2l..z3l..z4l..{down}z1l; +p1:=z1r{up}..z4r..z3r..z2r..{up}z1r; +p2:=z5r--z0r--z6r; +p3:=z6l--z0l--z5l; +(tim0,tim1-.5)=p0 intersectiontimes subpath(.5,infinity) of p2; +(tim2,tim3)=(subpath (0,1) of p3) intersectiontimes p0; +(tim4-1,tim5)=(subpath (1,infinity) of p3) intersectiontimes p0; +(tim6,tim7)=p2 intersectiontimes p0; +filldraw subpath (rundy(p0,tim7),rundy(p0,tim0).zpet) of p0..subpath(rundy(p2,tim1),infinity) of p2{z6-z5} + ..subpath(0,rundy(p3,tim2).zpet) of p3..subpath(rundy(p0,tim3),infinity) of p0 + ..subpath(0,rundy(p0,tim5).zpet) of p0..subpath(rundy(p3,tim4),infinity) of p3 + ..subpath(0,rundy(p2,tim6).zpet) of p2..cycle; +numeric tim[]; +(tim1,tim2)=p1 intersectiontimes p2; +(tim3,tim4)=p1 intersectiontimes subpath(0,1) of p2; +infill subpath(rundy(p2,tim4),rundy(p2,tim2).zpet) of p2 + ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle; +(tim5,tim6)=p1 intersectiontimes p3; +(tim7,tim8-1)=p1 intersectiontimes subpath(1,infinity) of p3; +infill subpath(rundy(p3,tim6),rundy(p3,tim8).zpet) of p3..subpath(rundy(p1,tim7),infinity) of p1 + ..subpath(0,rundy(p1,tim5).zpet) of p1..cycle; +penlabels(1,2,3,4,5,6); +endchar; + +iff known chars.sign_slash_asterisk: +bskchar "Slash and asterisk"; +beginchar(chars.sign_slash_asterisk,10u#,body_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric size, ast, vast; +path p; +ast=3/4stem; vast=.55stem; +pos1(ast,0); x1=x0=w-3.25u; +size=1/4h; if (size+.5ast)*cosd(30) > (lft w)-u-x0: + size:= (lft w-u-x0)/cosd(30)-.5ast; fi; +y1=y0+size; y0=size; +top rt z2=(w-2u,h); bot lft z3=(u,-d); +pos2(rule_thickness,angle(z3-z2)+90); pos3(rule_thickness,angle(z3-z2)+90); +p:=z0---z1r{dir120}..z1l---z0; +p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))), + xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p; +filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle; +filldraw bskrule(3,2,rule_thickness,rule_thickness); +labels(0); penlabels(1,2,3); +endchar; + +iff known chars.sign_divorce: +bskchar "Divorce symbol"; +beginchar(chars.sign_divorce,15u#,x_height#,0); uni "0x26AE"; +adjust_fit(0,0); +pickup tiny.nib; +numeric size; size=min(5u,h); +pos3(stem,0); pos4(2/3stem,0); pos5(stem,0); +y1=y2=.5h; x1=u+.5size; x1=w-x2; +x3=x4=x5; z4=.5[z1,z2]; y3=h; y5=-d; +filldraw z3r..z4r..z5r--z5l..z4l..z3l--cycle; +filldraw fullcircle scaled (size) shifted z1; +infill fullcircle scaled (size-hair+currentbreadth) shifted z1; +filldraw fullcircle scaled (size) shifted z2; +infill fullcircle scaled (size-hair+currentbreadth) shifted z2; +labels(1,2); penlabels(3,4,5); +endchar; + +iff known chars.sign_marriage: +bskchar "Marriage symbol"; +beginchar(chars.sign_marriage,10u#,x_height#,0); uni "0x26AD"; +adjust_fit(0,0); +pickup tiny.nib; +numeric size, tim[]; size=min(5u,h); +path p[]; +pos1(hair,0); pos11(hair,0); +x0=u+.5size; x10=w-x0; y0=y10=.5h=y1=y11; x11-x10=x1-x0=.5size; +forsuffixes i=2,3,4,5,6,7,8: + z[i]=z0+(z1-z0) rotated (45*(i-1)); pos[i](hair,45*(i-1)); endfor +forsuffixes i=12,13,14,15,16,17,18: + z[i]=z10+(z11-z10) rotated (45*(i-11)); pos[i](hair,45*(i-11)); endfor +p1=z1r{up}..z2r..z3r{left}..z4r..z5r{down}..z6r..z7r{right}..z8r..{up}z1r; +p2=z15r{down}..z16r..z17r{right}..z18r..{up}z11r..z12r..{left}z13r..z14r..{down}z15r; +p3=z1l{up}..z2l..z3l{left}..z4l..z5l{down}..z6l..z7l{right}..z8l..{up}z1l; +p4=z15l{down}..z16l..z17l{right}..z18l..{up}z11l..z12l..{left}z13l..z14l..{down}z15l; +(tim1,tim2)=p1 intersectiontimes p2; +(tim3-2,tim4)=subpath(2,infinity) of p1 intersectiontimes p2; +(tim5,tim6)=p3 intersectiontimes p2; +(tim7-2,tim8)=subpath(2,infinity) of p3 intersectiontimes p2; +(tim9,tim10)=p4 intersectiontimes p1; +(tim11-2,tim12)=subpath(2,infinity) of p4 intersectiontimes p1; +(tim13,tim14)=p3 intersectiontimes p4; +(tim15-2,tim16)=subpath(2,infinity) of p3 intersectiontimes p4; +filldraw subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1 + ..subpath(rundy(p2,tim4),rundy(p2,tim2).zpet) of p2..cycle; +infill subpath(0,rundy(p2,tim8).zpet) of p2 + ..reverse subpath (rundy(p3,tim5),rundy(p3,tim7).zpet) of p3 + ..subpath(rundy(p2,tim6),infinity) of p2..cycle; +infill subpath(0,rundy(p1,tim12).zpet) of p1 + ..reverse subpath(rundy(p4,tim9),rundy(p4,tim11).zpet) of p4 + ..subpath(rundy(p1,tim10),infinity) of p1..cycle; +infill subpath(0,rundy(p3,tim13).zpet) of p3 + ..subpath(rundy(p4,tim14),infinity) of p4 + ..subpath(0,rundy(p4,tim16).zpet) of p4 + ..subpath(rundy(p3,tim15),infinity) of p3..cycle; +penlabels(0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18); +endchar; + +iff known chars.sign_estimated: +bskchar "Estimated sign"; +beginchar(chars.sign_estimated,13u#,cap_height#,0); uni "0x212E"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[], shift, est_height; +oblu:=2.5f_obl; est_height:=.5[bar_height,x_height]; +penpos1(cap_curve,0); pos2(hair,90); pos3(hair,270); penpos4(cap_curve,180); +lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o; +rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1; +p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; +p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0'; +tim1=xpart(p0 intersectiontimes ((.5w,est_height)--(w,est_height))); +tim2=xpart(p1 intersectiontimes ((.5w,est_height)--(w,est_height))); +shift:=lft xpart(point tim1 of p0)- w+u; +x4l:=x4l-shift; x4r:=x4r-shift; +p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; +p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi; +tim3=xpart(p0 intersectiontimes ((w,est_height)--(x3,est_height))); +tim4=xpart(p1 intersectiontimes ((0,est_height)--(x3,est_height))); +tim5=xpart(p1 intersectiontimes ((0,est_height)--(x3,est_height))); +tim6=xpart(p1 intersectiontimes ((w,est_height+bar-tiny)--(x3,est_height+bar-tiny))); +tim7=xpart(p1 intersectiontimes ((0,est_height+bar-tiny)--(x3,est_height+bar-tiny))); +p2=point tim3 of p0 -- point tim4 of p1; +p3=point tim7 of p1 -- point tim6 of p1; +filldraw subpath(0,rundy(p0,(tim3,hair)).zpet) of p0--(subpath(0,rundy(p2,1).zpet) of p2).. + subpath(rundy(p1,(tim5,if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1 + {z0-z0'-o*down}..cycle; +oblu:=1.5f_obl; +infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet) + of p3..cycle; +penlabels(1,2,3,4); labels(0,0'); +endchar; + +iff known chars.special_two: +bskchar "Special two"; +beginchar(chars.special_two,12u#,cap_height#,.5desc_depth#); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; +pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); +pos5(cap_hair,135); pos6(cap_hair,180); +pos5'(cap_hair,135); pos6'(cap_hair,180); +lft x1l=u-o; rt x3l=w-u+o; y1=y3=x_height; +.5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; +x5=x2; y6=.35bar_height; y5=.75x_height; x6=.25[x4,x1r]; +z6'-z6=o*down; z5'-z5=o*dir45; +pos7(whatever,0); +z7=(x2,0); x7r=x6l; +bot y8r=0; rt x8l=w-u; +{{ numeric oldbeak; oldbeak:=beak; save beak; numeric beak; beak:=.65oldbeak; +p0=arm_bot_r_points(7r,8); y8f:=.5[y8f,y8d]; +}}; +filldraw z5'l---z5l..z1l{up}..z4l..z3l..{z6-z3}z6'l.. + ((z8f...z8d...z8c..z8l.o&z8l.o{up}..z8l---z8r--z8b..z8a---z7r) + rotatedaround(z7r,30) shifted ((x8r-x7r)*(1-cosd30),-d)) + ..z6r{z3-z6}..z3r..z4r..z1r{down}..z5r---z5'r--cycle; +penlabels(1,2,3,4,5,5',6,6',7); +endchar; + +iff known chars.special_sum: +bskchar "Special summation"; +beginchar(chars.special_sum,13u#,cap_height#,0); uni "non"; +adjust_fit(cap_serif_fit#,0); +pickup tiny.nib; +path p[]; +numeric alpha, top_stem; oblu:=2oblu; +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h; +lft x1l=lft x2l-o=2u; +cap_serifs_bl(1l); cap_serifs_tl(2l); cap_serifs_br(1r); cap_serifs_tr(2r); +bot y3r=0; top y4r=h; rt x3r=w-u; x4r=w-2.5u; +x5r=.5w; y5=.5[x_height,bar_height]; +alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r); +pos5(alpha*cap_stem,0); pos7(alpha*cap_stem,180); y5=y7; +alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r); +pos6(alpha*cap_hair,0); z5r=z6r; pos8(alpha*cap_hair,180); y8=y6; +p1:=arm_bot_r_points(1r,3).alt; +p2:=arm_top_r_points(2r,4); +y1'=y1l.b; z1'=z6l+whatever*(z3.f-z6r); +z5'=whatever[z2l.b,z5l]=whatever[z6l,z1']; +.5[x7,x5]=.5[x8,x6]=x2; +z7'=whatever[z2r.b,z8l]=whatever[z7l,z1']; +z2'=whatever[z2l.b,z5']=whatever[z7',z2r]; +filldraw subpath(0, length(p1)-1) of p1..z3f---obl(5r,3f,2r.b)--- + z2r.b..(reverse subpath(0,length(p2)-1) of p2)---z2l.a.. + {right}z2l.c..obl(2l.b,2l.c,7r)---obl(7r,2l.b,1l.b)--z1l.b + ..{left}z1l.c..z1l.a---cycle; +infill obl(5',2l.b,1')---obl(1',5',7')---obl(7',1',2r.b)---obl(2',7',5')---cycle; +pos9(cap_hair,0); pos10(cap_hair,0); +y9=.5[y5,y2']; y10=.5[y5,y1']; +z9=z2'+whatever*down; z10=z1'+whatever*up; +filldraw bskrule(9,10,.5hair,.5hair); ; +penlabels(1,2,5,6,7,8); labels(1',1'',2',5',7'); +endchar; + +iff known chars.special_alpha: +bskchar "Special alpha"; +beginchar(chars.special_alpha,11u#,x_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; path p[]; oblu:=2oblu; +pos0(hair,-90); pos1(stem,0); pos2(stem,0); +pos3(hair,-90); pos4(curve,180); pos5(hair,90); +pos6(hair,0); pos7(hair,90); pos8(stem,180); +top y0l=h; x0=w-u; +rt x1r=w-1.5u; x2=x1-stem; top y1=h-u; y2=.5bar_height; +x3=.5x2; x5=.55x1; bot y3r=-o; top y5r=h+o; +lft x4r=u; y4=y6=bar_height; x6=.25[x2,x5]; +x7=w-1.75u; bot y7l=-o; lft x8l=w-.5u; y8=.75curve; +z8'=z8+.2stem*right+o*up; z8''=z8+.5(stem-currentbreadth)*dir225; +p0=z0r{left}..z1r---z2r..z3r..z4r..z5r..z6r..{right}z7r..z8''..{up}z8r; +p1=z8r{up}..z8'..z8l..z7l{left}..z6l..z5l..z4l..z3l..z2l---z1l..z0l; +(tim0,tim1-5)=p0 intersectiontimes subpath (5,infinity) of p0; +(tim2,tim3)=p1 intersectiontimes p0; +(tim4-5,tim5-6)=subpath(5,infinity) of p0 intersectiontimes subpath (6,infinity) of p1; +(tim6,tim7-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1; +filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p0,tim1),infinity) of p0 + ..subpath(0,rundy(p1,tim2).zpet) of p1 + ..subpath(rundy(p0,tim3),rundy(p0,(tim4,y6-y2)).zpet) of p0 + ..subpath(rundy(p1,(tim5,y6-y2)),infinity) of p1..cycle; +infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle; +penlabels(0,1,2,3,4,5,6,7,8); labels(8',8''); +endchar; + +iff known chars.special_infinity: +bskchar "Special infinity sign"; +beginchar(chars.special_infinity,16u#,x_height#,0); uni "non"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric testem, tlstem, tim[]; oblu:=2oblu; +testem=.5[curve, hair]; tlstem=.75[curve,stem]; +pos1(testem,90); pos2(tlstem,270); pos3(tlstem,270); pos4(testem,90); +pos5(vair,180); pos6(vair,180); +lft x6r=u; rt x5l=w-u; +bot y3r=bot y1l=-o; top y4r=top y2l=h+o; +x3=x4=.27(w-2u)+u; x1=x2=.76(w-2u)+u; +y5=y6=.5h; z0=(.5w,.5h); +pos7(hair,180); pos8(stem,180); z7=(.35[x4,x6],.9bar_height); y8=y3r; x8=x7; +pos9(.5[hair,stem],180); y9=.75[x_height,bar_height]; x9r=x6l; +pos10(hair,-90); z10=z9+stem*unitvector(dir-45); +p0:=z6{down}..z3..z0..z2..{up}z5; pos0(curve,angle(direction 2 of p0)-90); +p1=z6r{down}..z3r..z0r..z2r..z5r{down}; +p2=z10l..z9l{up}..z4l{right}..z0{dir-70}..{right}z1l; +p3=z5l{up}..z2l..z0l..z3l..{up}z6l; +p4=z1r{left}..z0{dir110}..{left}z4r..{down}z9r..z10r; +p5=z6l{down}..z3l..z0l..z2l..z5l{down}; + +z11=bsktouch(p1,right,p2,left); +tim1=xpart(p1 intersectiontimes (z11--(x3,y11))); +tim2=xpart(p2 intersectiontimes (z11--(x1,y11))); +z12=bsktouch(p3,left,p4,right); +tim3=xpart(p3 intersectiontimes (z12--(x2,y12))); +tim4=xpart(p4 intersectiontimes (z12--(x3,y12))); +(tim5,tim6)=p1 intersectiontimes p4; +(tim9,tim10)=p2 intersectiontimes p3; + +tim7=xpart(p1 intersectiontimes (z7r--z8r)); +tim8=xpart(p3 intersectiontimes (z7l--z8l)); +p6=point tim8 of p3{direction tim8 of p3 rotated -90}..z7l&z7l..z7r& +z7r..{direction tim7 of p1 rotated -90}point tim7 of p1; +filldraw subpath(rundy(p6,(0,f_obl)),rundy(p6,(infinity,f_obl)).zpet) of p6 + ..subpath(rundy(p1,tim7),rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p2,tim2),infinity) of p2 + ..subpath(0,rundy(p3,tim3).zpet) of p3 + ..subpath(rundy(p4,tim4),infinity) of p4 + ..subpath(0,rundy(p2,tim9).zpet) of p2 + ..subpath(rundy(p3,tim10),rundy(p3,(tim8,f_obl)).zpet) of p3 + ..cycle + ; +infill subpath(rundy(p1,tim5),infinity) of p1 + ..subpath(0,rundy(p4,tim6).zpet) of p4..cycle; +penlabels(0,1,2,3,4,5,6,7,8,9,10); +endchar; + +iff known chars.sign_note: +bskchar "Note symbol"; +beginchar(chars.sign_note,10u#,asc_height#,0); uni "0x266A"; +adjust_fit(0,0); +pickup tiny.nib; oblu:=2oblu; +pos3(hair,0); pos5(hair,0); pos6(hair,90); pos7(hair,45); +path p[]; numeric tim[]; +rt x1=u; bot y2=-o; .5[y4,y2]=y1=y3; x2=x4=.5[x3r,x1]; y4-y2=2/3(x3-x1); x3r=w-4u; +x3=x5+hair; top y5=h; z5r=z6r; +rt x7=w-u; y7=.5[bar_height,x_height]; +p0:=z4{left}..z1{down}..z2{right}..{up}z3r..{left}z4; +p1:=z5l{down}..{down}z3l; +p2:=z3r{up}..{up}z6l; +p3:=z6l{z3-z4}..{z3-z4}z7l..{z4-z3}z7r..{left}z6r; +z0=bsktouch(p0,up,p1,left); +tim0=xpart(p0 intersectiontimes (z0--(x0,y3))); +tim1=xpart(p1 intersectiontimes (z0--(w,y0))); +filldraw subpath(0,3) of p0..subpath(0,rundy(p2,infinity).zpet) of p2..subpath(rundy(p3,0),infinity) of p3..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle; +labels(1,2,4); penlabels(3,5,6,7); +endchar; + +iff known chars.sign_angle_arc: +bskchar "Angle arc symbol"; +beginchar(chars.sign_angle_arc,12u#,v_center(x_height#)); uni "0x2222"; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric theta, tim[]; +pos1(rule_thickness,0); +lft x1l=u; y1=math_axis; +y2r=x_height; +x2r=w-x1l; x2=x3; .5[y2r,y3r]=y1; +theta:=angle(z2r-z1r); +pos2(rule_thickness,theta-90); pos3(rule_thickness,theta+45); +z1'=z1l+(rule_thickness-currentbreadth)*dir(theta-90); +z1''=z1l+(rule_thickness-currentbreadth)*dir(theta+45); +z1'''=whatever[z1',z2r]=whatever[z1'',z3r]; +y1l'=y1l+o; z1l'=whatever[z1l,z2l]; +bskpoints(1,2,hair,hair); +pos4(rule_thickness,0); x4r=.8[x1,x2]; x6=x5; .5[y5,y6]=y4=y1; +z5=(fullcircle scaled (2 abs(z4-z1)) shifted z1) intersectionpoint ((0,h)--(w,h)); +pos5(rule_thickness,angle(z5-z1)); pos6(rule_thickness,angle(z6-z1)); +p0:=z1l..z1l'---z2ll..{z1'''-z2r}z2r; +oblu:=2oblu; p1:=z2r---obl(1''',2r,3r)---z3r; oblu:=f_obl; +p2:=z3r{z3r-z1'''}..z3l---z1l; +p3:=z5r..{down}z4r..z6r; +p4:=z6l..{up}z4l..z5l; +(tim0,tim1)=p0 intersectiontimes p4; +(tim2,tim3)=p0 intersectiontimes p3; +(tim4,tim5)=p1 intersectiontimes p3; +(tim6-1,tim7)=subpath(1,infinity) of p1 intersectiontimes p3; +(tim8,tim9)=p2 intersectiontimes p3; +(tim10,tim11)=p2 intersectiontimes p4; +(tim12,tim13)=subpath(0,1) of p1 intersectiontimes p4; +(tim14-1,tim15)=subpath(1,infinity) of p1 intersectiontimes p4; +filldraw subpath(0,rundy(p0,tim1).zpet) of p0 + ..subpath(rundy(p4,tim1),infinity) of p4 + ..subpath(0,rundy(p3,tim3).zpet) of p3 + ..subpath(rundy(p0,tim2),infinity) of p0 + ..subpath(0,rundy(p1,tim4).zpet) of p1 + ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3 + ..subpath(rundy(p1,tim6),infinity) of p1 + ..subpath(0,rundy(p2,tim8).zpet) of p2 + ..subpath(rundy(p3,tim9),infinity) of p3 + ..subpath(0,rundy(p4,tim11).zpet) of p4 + ..subpath(rundy(p2,tim10),infinity) of p2..cycle; +infill subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1 + ..subpath(rundy(p4,tim15),rundy(p4,tim13).zpet) of p4 ..cycle; +penlabels(1,2,3,4,5,6); labels(1',1'',1''',2ll,1l'); +endchar; + +iff known chars.sign_numero: +bskchar "Numero sign"; +beginchar(chars.sign_numero,16u#,cap_height#,0); uni "0x2116"; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; oblu:=3oblu; +numeric tim[]; path p[]; +pos1(cap_hair,0); pos2(cap_hair,0); +pos3(cap_hair,0); pos4(cap_hair,0); +penpos5(whatever,0); penpos6(whatever,90); +pos0(hair,-90); pos0'(stem,250); +pos10(hair,-90); pos11(.85curve,180); pos12(hair,90); pos13(.85curve,0); +bot y1=.25bar_height; top y2=h; +lft x1l=lft x2l=2.5u; +bot y3=-apex_o; rt x3r=rt x4r=w-6u; +z5r=z2l; z6l=z3l; +cap_serifs_tl(2l); +bot y0r=-o; x1-x0=y1-y0; x0'r=.5u; y0'-y0=.5(x1-x0); +z0''=z0'+.5(stem-currentbreadth)*dir135; +z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90); +z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); +y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r]; +y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l]; +z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); +y10-y4=x10-x3; top y10l=h+o; x10=.5[x11,x13]; lft x13l=rt x4r+hair; +.5[y10,y12]=y11=y13; y10-y12=(sqrt2)*(x11-x13); +x11l=w-u; x12=x10; +p0:=z0'l{up}..z0''..z0'r..z0r{right}..z1r---z2'..z5' + ---z6l..z3r---z4r..z10r{right}..{down}z11r..z12r..{up}z13r..{right}z10r; +p1:=z10l{left}..z13l{down}..z12l..z11l{up}..{left}z10l..z4l + ---z4'..z6'---z8..z5---z2l.a..{right}z2l.c..z2l.b---z1l..{left}z0l..{up}z0'l; +z14=bsktouch(subpath(0,1) of p1,left,subpath(8,infinity) of p0,right); +tim0=xpart(p0 intersectiontimes (z14--(.5w,y14))); +tim1=xpart(p1 intersectiontimes (z14--(x10,y14))); +filldraw subpath(rundy(p1,tim1),infinity) of p1 + ..subpath(0,rundy(p0,tim0).zpet) of p0..cycle; +infill z10r{right}..z11r{down}..z12r..{up}z13r..cycle; +penlabels(0,0',1,2,3,4,5,6,10,11,12,13); labels(0'',2',4',5',6',7,8,9,14); +endchar; + +iff known chars.sign_leaf: +bskchar "Leaf"; +beginchar(chars.sign_leaf, 14u#,asc_height#,0); uni "0xEB42"; %Uni form LM +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[], theta; theta:=20; +lft bot z1r=(1.5u,-apex_o); top z2r=(w-u,h+apex_o); z0=.5[z1,z2]; +pos1(hair,angle(z2r-z1r)-90); pos2(hair,angle(z2r-z1r)-90); +z3=(w-2.5u,bar_height); z4=z3 reflectedabout(z1,z2); +p1:=z1{dir-theta}..z3..{up}z2; pos3(hair,angle(point 1 of p1)-90); +p2:=z2{left}..z4..{dir(-90+theta)}z1; pos4(hair,angle(point 1 of p2)-90); +p3:=z2l+(hair-currentbreadth)*down{left}..z4r..{dir(-90+theta)}z1l+(hair-currentbreadth)*right; +p4:=z1r+(hair-currentbreadth)*up{dir-theta}..z3l..{up}z2r+(hair-currentbreadth)*left; +z5=2/3[z2,z1]; z6=1/3[z2,z1]; +pos5(hair,angle(z2-z1)-90); pos6(hair,angle(z2-z1)-90); +pos5'(hair,angle(z2-z1)-90); pos6'(hair,angle(z2-z1)-90); +z5'=z5+(hair-currentbreadth)*unitvector(z0-z5); +z6'=z6+(hair-currentbreadth)*unitvector(z0-z6); +tim0=xpart(p3 intersectiontimes (z6--z6+5(z4-z0))); z7=point tim0 of p3; +tim1=xpart(p4 intersectiontimes (z6--z6+5(z3-z0))); z8=point tim1 of p4; +tim2=xpart(p3 intersectiontimes (z5--z5+5(z4-z0))); z9=point tim2 of p3; +tim3=xpart(p4 intersectiontimes (z5--z5+5(z3-z0))); z10=point tim3 of p4; +z7l=point rundy(p3,(tim0,hair-currentbreadth)) of p3; +z8l=point rundy(p4,(tim1,hair-currentbreadth)).zpet of p4; +z9l=point rundy(p3,(tim2,hair-currentbreadth)) of p3; +z10l=point rundy(p4,(tim3,hair-currentbreadth)).zpet of p4; +p5:=z1l---obl(5l,1l,9l)---z9l; +p6:=z10l---obl(5r,10l,1r)--z1r; +p7:=z7---obl(6l,7,2l)---z2l; +p8:=z2r---obl(6r,2r,8)--z8; +p9:=z7l---obl(6'l,7l,5'l)---obl(5'l,6'l,9)---z9; +p10:=z8l---obl(6'r,8l,5'r)---obl(5'r,6'r,10)---z10; +filldraw z1r{dir-theta}..z3r..{up}z2r..z2l{left}..z4l..{dir(-90+theta)}z1l..cycle; +infill subpath(rundy(p3,(0,2oblu)),rundy(p3,tim0).zpet) of p3 + ..subpath(rundy(p7,0),rundy(p7,(infinity,2oblu)).zpet) of p7..cycle; +infill subpath(rundy(p4,tim1),rundy(p4,(infinity,2oblu)).zpet) of p4 + ..subpath(rundy(p8,(0,2oblu)),rundy(p8,infinity).zpet) of p8..cycle; +infill subpath(rundy(p3,(tim2,2oblu)),rundy(p3,infinity).zpet) of p3 + ..subpath(rundy(p5,0),rundy(p5,infinity).zpet) of p5..cycle; +infill subpath(rundy(p4,0),rundy(p4,(tim3,2oblu)).zpet) of p4 + ..subpath(rundy(p6,0),rundy(p6,infinity).zpet) of p6..cycle; +infill subpath(rundy(p9,0),rundy(p9,infinity).zpet) of p9 + ..reverse subpath (rundy(p2,tim0),rundy(p2,tim2).zpet) of p2..cycle; +infill subpath(rundy(p10,0),rundy(p10,infinity).zpet) of p10 + ..subpath (rundy(p1,tim3),rundy(p1,tim1).zpet) of p1..cycle; +penlabels(0,1,2,3,4,5,5',6,6',7,8,9,10); +endchar; + diff --git a/Master/texmf-dist/tex/latex/boisik/boisik.sty b/Master/texmf-dist/tex/latex/boisik/boisik.sty new file mode 100644 index 00000000000..e0ab776f7f0 --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/boisik.sty @@ -0,0 +1,13 @@ +\ProvidesPackage{boisik}% +[2008/08/11 bsk-v0.1] +\renewcommand{\rmdefault}{bsk} +\DeclareSymbolFont{operators} {IL2}{bskf} {m}{n} +\DeclareSymbolFont{letters} {OML}{bskm} {m}{it} +\DeclareSymbolFont{symbols} {OMS}{bsksy}{m}{n} +\DeclareSymbolFont{largesymbols}{OMX}{bskex}{m}{n} + +\DeclareSymbolFontAlphabet{\mathrm} {operators} +\DeclareSymbolFontAlphabet{\mathnormal}{letters} +\DeclareMathAlphabet{\mathbf} {IL2}{bsk}{b}{n} + +\endinput diff --git a/Master/texmf-dist/tex/latex/boisik/il2bsk.fd b/Master/texmf-dist/tex/latex/boisik/il2bsk.fd new file mode 100644 index 00000000000..c654df0603f --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/il2bsk.fd @@ -0,0 +1,15 @@ +\ProvidesFile{il2bsk.fd} + [2008/08/11 v0.1 Boisik font] +\DeclareFontFamily{IL2}{bsk}{} +\DeclareFontShape{IL2}{bsk}{m}{n}{<-> bskr10}{} +\DeclareFontShape{IL2}{bsk}{m}{sl}{<-> bskrsl10}{} +\DeclareFontShape{IL2}{bsk}{m}{ol}{<-> bskrol10}{} +\DeclareFontShape{IL2}{bsk}{l}{n}{<-> bskrl10}{} +\DeclareFontShape{IL2}{bsk}{m}{sc}{<-> bsksc10}{} +\DeclareFontShape{IL2}{bsk}{m}{it}{<-> bski10}{} +\DeclareFontShape{IL2}{bsk}{m}{oi}{<-> bskiol10}{} +\DeclareFontShape{IL2}{bsk}{m}{ui}{<-> bskiu10}{} +\DeclareFontShape{IL2}{bsk}{bx}{n}{<-> bskrb10}{} +\DeclareFontShape{IL2}{bsk}{b}{n}{<-> bskrsb10}{} +\DeclareFontShape{IL2}{bsk}{bx}{it}{<-> bskib10}{} +\endinput diff --git a/Master/texmf-dist/tex/latex/boisik/il2bskf.fd b/Master/texmf-dist/tex/latex/boisik/il2bskf.fd new file mode 100644 index 00000000000..a1309a80a01 --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/il2bskf.fd @@ -0,0 +1,10 @@ +\ProvidesFile{il2bskf.fd} + [2008/08/11 v0.1 Boisik font] +\DeclareFontFamily{IL2}{bskf}{} +\DeclareFontShape{IL2}{bskf}{m}{n}{<-> bskrf10}{} +\DeclareFontShape{IL2}{bskf}{m}{sl}{<-> bski10}{} +\DeclareFontShape{IL2}{bskf}{m}{it}{<-> bski10}{} +\DeclareFontShape{IL2}{bskf}{bx}{n}{<-> bskrb10}{} +\DeclareFontShape{IL2}{bskf}{b}{n}{<-> bskrsb10}{} +\DeclareFontShape{IL2}{bskf}{bx}{it}{<-> bskib10}{} +\endinput diff --git a/Master/texmf-dist/tex/latex/boisik/omlbskm.fd b/Master/texmf-dist/tex/latex/boisik/omlbskm.fd new file mode 100644 index 00000000000..162cfbecb55 --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/omlbskm.fd @@ -0,0 +1,8 @@ +\ProvidesFile{omlbskm.fd} + [2008/08/11] +\DeclareFontFamily{OML}{bskm}{\skewchar\font127 } +\DeclareFontShape{OML}{bskm}{m}{it}{<->bskmi10}{} +\DeclareFontShape{OML}{bskm}{b}{it}{<->bskmib10}{} +\DeclareFontShape{OML}{bskm}{m}{oi}{<->bskmiol10}{} +\DeclareFontShape{OML}{bskm}{bx}{it}{<->ssub*bskm/b/it}{} +\endinput diff --git a/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd b/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd new file mode 100644 index 00000000000..eb913c70ebb --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/omsbsksy.fd @@ -0,0 +1,8 @@ +\ProvidesFile{omsbsksy.fd} + [2008/08/11] +\DeclareFontFamily{OMS}{bsksy}{} +\DeclareFontShape{OMS}{bsksy}{m}{n}{<->bsksy10}{} +\DeclareFontShape{OMS}{bsksy}{m}{ol}{<->bsksyol10}{} +\DeclareFontShape{OMS}{bsksy}{ub}{n}{<->bsksyh10}{} +%\DeclareFontShape{OMS}{bsksy}{b}{n}{<->bsksyb10}{} +\endinput diff --git a/Master/texmf-dist/tex/latex/boisik/omxbskex.fd b/Master/texmf-dist/tex/latex/boisik/omxbskex.fd new file mode 100644 index 00000000000..562081311bb --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/omxbskex.fd @@ -0,0 +1,6 @@ +\ProvidesFile{omxbskex.fd} + [2008/08/11] +\DeclareFontFamily{OMX}{bskex}{} +\DeclareFontShape{OMX}{bskex}{m}{n}{<->sfixed*bskex10}{} +\DeclareFontShape{OMX}{bskex}{b}{n}{<->sfixed*bskexb10}{} +\endinput diff --git a/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd b/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd new file mode 100644 index 00000000000..5660cd1bd1f --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/ot1bsk.fd @@ -0,0 +1,11 @@ +\ProvidesFile{ot1bsk.fd} + [2008/08/11 v0.1 Boisik font] +\DeclareFontFamily{OT1}{bsk}{} +\DeclareFontShape{OT1}{bsk}{m}{n}{<-> bskr10}{} +\DeclareFontShape{OT1}{bsk}{m}{sl}{<-> bski10}{} +\DeclareFontShape{OT1}{bsk}{m}{it}{<-> bski10}{} +\DeclareFontShape{OT1}{bsk}{bx}{n}{<-> bskrb10}{} +\DeclareFontShape{OT1}{bsk}{b}{n}{<-> bskrsb10}{} +\DeclareFontShape{OT1}{bsk}{bx}{it}{<-> bskib10}{} +\DeclareFontShape{OT1}{bsk}{bx}{sl}{<-> bskib10}{} +\endinput diff --git a/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd b/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd new file mode 100644 index 00000000000..97402217fb8 --- /dev/null +++ b/Master/texmf-dist/tex/latex/boisik/ot1bskf.fd @@ -0,0 +1,11 @@ +\ProvidesFile{ot1bskf.fd} + [2008/08/11 v0.1 Boisik font] +\DeclareFontFamily{OT1}{bskf}{} +\DeclareFontShape{OT1}{bskf}{m}{n}{<-> bskrf10}{} +\DeclareFontShape{OT1}{bskf}{m}{sl}{<-> bski10}{} +\DeclareFontShape{OT1}{bskf}{m}{it}{<-> bski10}{} +\DeclareFontShape{OT1}{bskf}{bx}{n}{<-> bskrb10}{} +\DeclareFontShape{OT1}{bskf}{b}{n}{<-> bskrsb10}{} +\DeclareFontShape{OT1}{bskf}{bx}{it}{<-> bskib10}{} +\DeclareFontShape{OT1}{bskf}{bx}{sl}{<-> bskib10}{} +\endinput -- cgit v1.2.3