summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-08-23 23:43:42 +0000
committerKarl Berry <karl@freefriends.org>2009-08-23 23:43:42 +0000
commit9c8a12c7a481e50886b68b686e6a7e1ae0d9e358 (patch)
tree8a9e7ad0eab763406a723a4464fee78e031a0079 /Master/texmf-dist/fonts
parent5233802c550f0cc1a8fb76ed9399eb1ce51e9600 (diff)
boisik 0.5 (21aug09)
git-svn-id: svn://tug.org/texlive/trunk@14833 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts')
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskarr10.mf69
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskarrows.mf11
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskbase.mf170
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskext.mf3
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskhc10.mf101
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bski10-TS1.mf84
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskib10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf274
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf5030
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf4282
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf4
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ar.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-bb.mf130
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf22
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ma.mf264
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf26
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf47
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-ms.mf153
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf211
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskma10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmab10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmath.mf158
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmathma.mf65
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmathms.mf72
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf42
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmib10.mf70
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskms10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmsb10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmsbsl10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskmssl10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bskroman.mf10
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf2
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksyb10.mf90
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksybsl10.mf89
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf20162
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksyol10.mf107
-rw-r--r--Master/texmf-dist/fonts/source/public/boisik/bsksysl10.mf89
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfmbin0 -> 1244 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfmbin0 -> 948 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfmbin0 -> 680 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfmbin0 -> 1436 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfmbin0 -> 6324 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfmbin0 -> 6328 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfmbin0 -> 6324 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfmbin0 -> 6140 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfmbin0 -> 6148 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfmbin0 -> 1632 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfmbin0 -> 1696 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfmbin0 -> 2848 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfmbin0 -> 2856 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfmbin0 -> 1652 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfmbin0 -> 1656 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfmbin0 -> 1732 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfmbin0 -> 1884 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfmbin0 -> 1432 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfmbin0 -> 1348 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfmbin0 -> 12336 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfmbin0 -> 12156 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfmbin0 -> 12344 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfmbin0 -> 12500 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfmbin0 -> 1232 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfmbin0 -> 5756 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfmbin0 -> 1584 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfmbin0 -> 1544 bytes
-rw-r--r--Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfmbin0 -> 1664 bytes
76 files changed, 32030 insertions, 451 deletions
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskarr10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskarr10.mf
new file mode 100644
index 00000000000..fa02c49f7c5
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskarr10.mf
@@ -0,0 +1,69 @@
+% Boisik Arrow Set 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKARR"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=-20/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-20/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; ss.hair#:=16/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; ss.dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; ss.cap_hair#:=20/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; ss.alt_cap_hair#:=24/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; ss.cap_bar#:=18/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; boolean ss.square_dots; ss.square_dots:=true; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+generate bskarrows % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskarrows.mf b/Master/texmf-dist/fonts/source/public/boisik/bskarrows.mf
new file mode 100644
index 00000000000..d2a8b6ff2f1
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskarrows.mf
@@ -0,0 +1,11 @@
+%Boisik driver file for additional arrows
+mode_setup; font_setup;
+
+font_slant slant;
+input bsklist-ar;
+input bsksymbols;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+
+bye. \ No newline at end of file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
index 436053a6431..da24993fd16 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskbase.mf
@@ -11,14 +11,19 @@ def autorounded = interim autorounding:=2 enddef;
newinternal slant,fudge,math_spread,superness,superpull,beak_darkness,ligs;
boolean square_dots,hefty,serifs, medieval, monofig, bulbes,
- monospace,variant_g,low_asterisk,math_fitting;
-
+ monospace,variant_g,low_asterisk,math_fitting, testdpi, boldmath;
+
+ boldmath:=false;
+
boolean dark,dark.dark,skewed,skewed.skewed; % for fast option testing
dark=skewed=false; dark.dark=skewed.skewed=true;
def infill text t:= cullit; path _p; _p:=t; erase fill _p; draw _p;
enddef;
+def dinfill text t:= erase draw t;
+enddef;
+
let bskboundary=relax;
vardef Vround primary y = y_:=vround y;
@@ -43,13 +48,13 @@ def beginarithchar(expr c) = % ensure consistent dimensions for $+$, $-$, etc.
italcorr math_axis#*slant-.5u#;
adjust_fit(0,0); enddef;
-boolean test, test.alt; test=false; test.alt=true;
+boolean test, test.alt, test.nodraw; test=false; test.alt=true; test.nodraw:=true;
%%%%%%%%%%%Dots and commas
def dot(suffix $):=
- filldraw if square_dots: unitsquare shifted (.5,.5) scaled dot_size
- else: fullcircle scaled dot_size shifted z$
- fi;
+ filldraw if square_dots: ((.5,.25)..(-.5,.25)---(-.5,-.25)..(0,-.5)..(.5,-.25)---cycle) scaled dot_size
+ else: fullcircle scaled dot_size
+ fi shifted z$;
labels($);
enddef;
@@ -221,16 +226,16 @@ def ital_hook(suffix $,$$)suffix modifier:=
pos$$(hair,150); pos$'(.5[hair,stem],90); penlabels($$,$');
z$$'=z$$r+hair*up; labels($$');
path _ih;
- _ih:=z$l{down}..z$'l..z$$l if test.modifier and (dpi<=300):-- else:..z$$'&z$$'..fi z$$r..z$'r..{up}z$r;
+ _ih:=z$l{down}..z$'l..z$$l if test.modifier and testdpi:-- else:..z$$'&z$$'..fi z$$r..z$'r..{up}z$r;
enddef;
-def ital_kooh(suffix $,$$):=
+def ital_kooh(suffix $,$$)suffix modifier:=
if not known x$$r: x$$r=0; fi
y$$=H-.25bar_height; top y$'r=H+o; x$'=.45[x$,x$$];
pos$$(hair,150); pos$'(.5[hair,stem],100); penlabels($$,$');
z$$'=z$$l+hair*dir(-110); labels($$');
path _ik;
- _ik:=z$r{up}..z$'r..z$$r{dir-120}..z$$'&z$$'..z$$l{dir60}..z$'l..{down}z$l;
+ _ik:=z$r{up}..z$'r..{dir-120}z$$r if test.modifier and testdpi:-- else: ..z$$'--z$$'+right..fi z$$l{dir60}..z$'l..{down}z$l;
enddef;
%%%%%%%%Arms
@@ -326,8 +331,11 @@ numeric uniproc; uniproc:=0;
def uni text t:=
charuni:=t;
+ if t<>"non": t; fi
enddef;
+def unitext(text t):= enddef;
+
extra_beginchar:=extra_beginchar&"charuni:=empty; numeric oblu; oblu:=f_obl;";
%%%%%%Rounding
@@ -339,6 +347,30 @@ def obl(suffix $,$$,$$$)suffix modifier:= % rounded corners
fi
enddef;
+def tobl(suffix $,$$,$$$)suffix modifier:= % rounded corners
+ if monospace and ((stem-hair)<.2hair):
+ z$
+ else:
+ if (abs(z$$-z$)>oblu.modifier):
+ z$+(oblu.modifier,0) rotated(angle(z$$-z$))
+ else:
+ .5[z$,z$$]{z$-z$$}
+ fi
+ ...
+ if (abs(z$$$-z$)>oblu.modifier):
+ z$+(oblu.modifier,0) rotated(angle(z$$$-z$))
+ else:
+ {z$$$-z$}.5[z$,z$$$]
+ fi
+ fi
+enddef;
+
+def ifobl(suffix $,$$,@,@@,#,##):= %rounded pair of corners
+ if abs(z$-z$$)>oblu.#+oblu.##: obl($,@,$$).#---obl($$,$,@@).##
+ else: z$+(oblu.#,0) rotated(angle(z@-z$))... {z$$-z$}.5[z$,z$$]...z$$+(oblu.##,0) rotated(angle(z@@-z$$))
+ fi
+enddef;
+
boolean smer, smer.zpet; smer:=true; smer.zpet:=false;
vardef rundy(expr p, t)suffix modifier:= %rounded paths
numeric _rnd, _rndb, _oblu;
@@ -359,7 +391,7 @@ vardef rundy(expr p, t)suffix modifier:= %rounded paths
enddef;
vardef bsktouch(expr _pa,_dira,_pb,_dirb):=
- ((_pa shifted (.5currentbreadth*_dira)) intersectionpoint (_pb shifted (.5currentbreadth*_dirb)))
+ ((_pa shifted (max(1,.5currentbreadth)*_dira)) intersectionpoint (_pb shifted (max(1,.5currentbreadth)*_dirb)))
enddef;
%%%%%%Symbols
@@ -398,10 +430,10 @@ vardef bskfrenchr(suffix $,$$):= %Reversed french quote
penlabels($,$',$$);
enddef;
-def less(suffix @,$,$$):=
- numeric _theta;
+def less(suffix @,$,$$)suffix modifier:=
+ numeric _theta; path _less;
pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@;
- if (unknown y$) and (unknown y$$): y$r=h+.5rule_thickness; fi;
+ if (unknown y$r) and (unknown y$$r): y$r=h-.5rule_thickness; fi;
if (unknown x$r) and (unknown x$$r): x$r=w-x@l; fi;
_theta:=angle(z$r-z@r);
pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta+45);
@@ -410,14 +442,15 @@ def less(suffix @,$,$$):=
z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
y@l'=y@l+o; z@l'=whatever[z@l,z$l];
bskpoints(@,$,hair,hair);
- filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle;
+ _less:=z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l;
+ if not test.modifier: filldraw _less---cycle; fi;
penlabels(@,$,$$); labels(@',@'',@''',$ll,@l');
enddef;
-def greater(suffix @,$,$$):=
- numeric _theta;
- pos@(rule_thickness,0); x$=x$$; .5[y$r,y$$r]=y@;
- if (unknown y$) and (unknown y$$): y$l=h; fi;
+def greater(suffix @,$,$$)suffix modifier:=
+ numeric _theta; path _greater;
+ pos@(rule_thickness,0); x$=x$$; .5[y$l,y$$l]=y@;
+ if (unknown y$l) and (unknown y$$l): y$l=h-.5rule_thickness; fi;
if (unknown x$l) and (unknown x$$l): x$l=w-x@r; fi;
_theta:=angle(z$l-z@r);
pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta-45);
@@ -426,14 +459,15 @@ def greater(suffix @,$,$$):=
z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
y@r'=y@r+o; z@r'=whatever[z@r,z$r];
bskpoints($,@,hair,hair);
- filldraw z@r..z@r'---z$rr..z$l---obl(@''',$l,$$r)---z$$r..z$$l---cycle;
+ _greater:=z@r..z@r'---z$rr..z$l---obl(@''',$l,$$r)---z$$r..z$$l;
+ if not test.modifier: filldraw _greater---cycle; fi;
penlabels(@,$,$$); labels(@',@'',@''',$rr,@r');
enddef;
-def logor(suffix @,$,$$):= %Logical or shape
- numeric _theta;
+def logor(suffix @,$,$$)suffix modifier:= %Logical or shape
+ numeric _theta; path _logor;
pos@(rule_thickness,90); y$=y$$; .5[x$l,x$$l]=x@;
- if (unknown y$) and (unknown y$$): y$l=h; fi;
+ if (unknown y$l) and (unknown y$$): y$l=h; fi;
if unknown x$l: lft x$l=u; fi;
_theta:=angle(z$l-z@l);
pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta+45);
@@ -442,14 +476,15 @@ def logor(suffix @,$,$$):= %Logical or shape
z@'''=whatever[z@',z$r]=whatever[z@'',z$$r];
x@l'=x@l-o; z@l'=whatever[z@l,z$l];
bskpoints(@,$,hair,hair);
- filldraw z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l---cycle;
+ _logor:=z@l..z@l'---z$ll..z$r---obl(@''',$r,$$r)---z$$r..z$$l;
+ if not test.modifier: filldraw _logor---cycle; fi;
penlabels(@,$,$$); labels(@',@'',@''',$ll,@l');
enddef;
-def logand(suffix @,$,$$):= %Logical and shape
- numeric _theta;
+def logand(suffix @,$,$$)suffix modifier:= %Logical and shape
+ numeric _theta; path _logand;
pos@(rule_thickness,90); y$=y$$; .5[x$r,x$$r]=x@;
- if (unknown y$) and (unknown y$$): y$r=-d; fi;
+ if (unknown y$r) and (unknown y$$): y$r=-d; fi;
if unknown x$r: lft x$r=u; fi;
_theta:=angle(z$r-z@r);
pos$(rule_thickness,_theta-90); pos$$(rule_thickness,_theta-45);
@@ -458,7 +493,8 @@ def logand(suffix @,$,$$):= %Logical and shape
z@'''=whatever[z@',z$l]=whatever[z@'',z$$r];
x@r'=x@r-o; z@r'=whatever[z@r,z$r];
bskpoints(@,$,hair,hair);
- filldraw z@r..z@r'---z$r...z$ll---obl(@''',$l,$$r)---z$$r..z$$l---cycle;
+ _logand:=z@r..z@r'---z$r...z$ll---obl(@''',$l,$$r)---z$$r..{z@r-z$$l}z$$l;
+ if not test.modifier: filldraw _logand---cycle; fi;
penlabels(@,$,$$); labels(@',@'',@''',$ll,@r');
enddef;
@@ -480,7 +516,7 @@ def draw_circle suffix smer:=
z8.smer{right}...z1.smer{z2-z8}...z2.smer{down}...z3.smer{z4-z2}...z4.smer{left}...z5.smer{z6-z4}...z6.smer{up}...z7.smer{z8-z6}...cycle
enddef;
-vardef vlnka(suffix $,$$):=
+vardef vlnka_points(suffix $,$$):=
y$a.l=y$$; y$$a.r=y$; .5[x$,x$$]=.5[x$a,x$$a]=.5w;
if unknown x$ : lft x$ =u; fi;
top y$$- bot y$= spread;
@@ -488,11 +524,36 @@ vardef vlnka(suffix $,$$):=
x$$-x$$a=1/4(x$$-x$);
pos$(hair,0); pos$$(hair,0); pos$a(curve,290); pos$$a(curve,250);
z$$a.s=z$$a.r+curve*unitvector(z$$-z$);
- filldraw z$r{z$a-z$}..z$a.r..z$$a.r..z$$a.s..{z$$-z$$a.r}z$$r..
- z$$l{z$$a-z$$}..z$$a.l..z$a.l..{z$-z$a.l}z$l..cycle;
penlabels($,$a,$$,$$a); labels($$a.s);
enddef;
+vardef vlnka(suffix $,$$)suffix modifier:=
+ vlnka_points($,$$);
+ path _vlnka;
+ _vlnka:=z$r{z$a-z$}..z$a.r..z$$a.r..z$$a.s..{z$$-z$$a.r}z$$r..
+ z$$l{z$$a-z$$}..z$$a.l..z$a.l..{z$-z$a.l}z$l..{z$a-z$}z$r;
+ if not test.modifier: filldraw _vlnka..cycle; fi;
+enddef;
+
+vardef vlnka_inv_points(suffix $,$$):=
+ y$a.r=y$$; y$$a.l=y$; .5[x$,x$$]=.5[x$a,x$$a]=.5w;
+ if unknown x$ : lft x$ =u; fi;
+ top y$- bot y$$= spread;
+ if unknown y$: top y$=h; fi
+ x$$-x$$a=1/4(x$$-x$);
+ pos$(hair,180); pos$$(hair,180); pos$a(curve,250); pos$$a(curve,290);
+ z$$a.s=z$$a.l+curve*unitvector(z$$-z$);
+ penlabels($,$a,$$,$$a); labels($$a.s);
+enddef;
+
+vardef vlnka_inv(suffix $,$$)suffix modifier:=
+ vlnka_inv_points($,$$);
+ path _vlnka_inv;
+ _vlnka_inv:=z$r{z$a-z$}..z$a.r..z$$a.r..{z$$-z$$a.r}z$$r..
+ z$$l{z$$a-z$$}..z$$a.s...z$$a.l..z$a.l..{z$-z$a.l}z$l..{z$a-z$}z$r;
+ if not test.modifier: filldraw _vlnka_inv..cycle; fi;
+enddef;
+
def sipka_points(suffix $,$$):=
numeric bskaw, bskat, bsktim[]; bskaw=abs(z$$l-z$$r)+currentbreadth;
pair bskadir; bskadir=unitvector(z$-z$$r); bskat=angle(bskadir);
@@ -568,6 +629,41 @@ vardef dvojsipka(suffix $,$$,@,@@):=
subpath(rundy(bskap0,bsktim17),infinity) of bskap0
enddef;
+vardef whitehead(suffix $,$$,@,@@):=
+ z$'=z$+(rule_thickness-currentbreadth)*dir(bskat+180);
+ path _whp[]; numeric _wht[];
+ _whp0:=z$'{dir(bskat+180)}..{dir(bskat+160)}point bsktim12 of bskap3;
+ _whp1:=(bskap0 intersectionpoint (z@@r--z@@r+(z$-z$$))){dir(bskat+20)}..{dir(bskat)}z$';
+ (_wht0,_wht1)=(_whp0 shifted ((max(1,.5currentbreadth))*dir(bskat-90)))
+ intersectiontimes (_whp1 shifted ((max(1,.5currentbreadth))*dir(bskat+90)));
+ labels($',$'');
+ subpath(rundy(_whp1,0),rundy(_whp1,_wht1).zpet) of _whp1
+ ..subpath(rundy(_whp0,_wht0),rundy(_whp0,infinity).zpet) of _whp0
+enddef;
+
+vardef trojsipka(suffix $,$$,@,@@):=
+ sipka_points($,$$);
+ dvojsipka_points($,$$,@,@@);
+ oblu:=f_obl;
+ penlabels(@,@@);
+ bskap7=(x$$,y$d)--z$d;
+ bskap8=z$$l+(z$-z$$r)--z$$l;
+ (bsktim19,bsktim20)=bskap0 intersectiontimes bskap8;
+ subpath(0,rundy(bskap7,infinity).zpet) of bskap7..
+ subpath(rundy(bskap1,0),rundy(bskap1,bsktim11).zpet) of bskap1..
+ subpath(rundy(bskap3,bsktim12),infinity) of bskap3..
+ subpath(0,rundy(bskap4,bsktim14).zpet) of bskap4..
+ subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z$e+(hair*down rotated bskat){dir(bskat+135)}..z$e{dir(bskat-45)}..
+ {dir(bskat-30)}z${dir(bskat-160)}..{dir(bskat-135)}z$b..
+ {dir(bskat+45)}z$b+(hair*up rotated bskat)&
+ subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0..
+ subpath(rundy(bskap5,bsktim16),infinity) of bskap5..
+ subpath(0,rundy(bskap6,bsktim18).zpet) of bskap6..
+ subpath(rundy(bskap0,bsktim17),rundy(bskap0,bsktim19).zpet) of bskap0..
+ subpath(rundy(bskap8,bsktim20),infinity) of bskap8
+enddef;
+
%%%%%%%%%%Accents
boolean capital, capital.capital; capital:=false; capital.capital:=true;
@@ -733,7 +829,7 @@ newinternal l,r,shrink_fit; % adjustments to spacing
def charscription(expr width, height, depth)(text t):=
def _saved_char := t; enddef;
- _saved_w:=width; _saved_h:=height; _saved_d:=depth;
+ _saved_w:=width; _saved_u:=u; _saved_h:=height; _saved_d:=depth;
let bskcharscriptcmd=relax;
enddef;
@@ -749,7 +845,7 @@ def usechar text t=
WW:=w; HH:=h; DD:=d;
if not monospace:
save w,h,d; numeric w,h,d;
- w=_saved_w; h=_saved_h; d=_saved_d;
+ w=(u/_saved_u)*_saved_w; h=_saved_h; d=_saved_d;
else:
save h,d; numeric h,d;
h=_saved_h; d=_saved_d;
@@ -903,7 +999,8 @@ def font_setup =
enddef;
def filldraw text t:= bsk_savepen; path _bp; _bp:=t; bskfilldraw _bp; cullit; pickup bskoutlinepen.nib; erase bskfilldraw _bp; cullit; bsk_restorepen; enddef;
fi;
- if not known dpi: begingroup interim warningcheck:=0; numeric dpi; dpi:=pixels_per_inch; endgroup; fi;
+ begingroup interim warningcheck:=0; testdpi:=(pixels_per_inch<=300); endgroup;
+ if unknown bbw: numeric bbw; bbw:=curve; fi %For blackboard-bold letters
enddef;
vardef clockwise primary c =
@@ -920,11 +1017,14 @@ def makebox(text rule) =
for y=0,asc_height,body_height,x_height,bar_height,-desc_depth,-body_depth:
rule((l,y)t_,(r,y)t_); endfor % horizontals
for x=l,r: rule((x,-body_depth)t_,(x,body_height)t_); endfor % verticals
- rule((r,-body_depth),(r,body_height));
+ rule((r,-max(body_depth,d)),(r,body_height));
for x=u*(1+floor(l/u)) step u until r-1:
rule((x,-body_depth)t_,(x,body_height)t_); endfor % more verticals
if charic<>0:
- rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_)); fi % italic correction
+ rule((r+charic*pt,h.o_),(r+charic*pt,.5h.o_));
+ if h=0: rule((r+charic*pt,0),(r+charic*pt,-.5d.o_)); fi
+ fi % italic correction
+for y=math_axis,-d,h: rule((l-3u,y)t_,(r+3u,y)t_); endfor
enddef;
def maketicks(text rule) =
for y=0,h.o_,-d.o_:
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskext.mf b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
index e2242841872..a7af914a754 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskext.mf
@@ -4,9 +4,6 @@ mode_setup; font_setup;
input bsklist-ex;
input bsksymbols;
-font_normal_space 5u#;
-font_normal_stretch 3u#; font_normal_shrink 2u#;
font_quad 15u#;
- font_extra_space 2u#;
font_x_height 159/36pt#;
bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskhc10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskhc10.mf
new file mode 100644
index 00000000000..98a6b14e29c
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskhc10.mf
@@ -0,0 +1,101 @@
+% Boisik Roman Heavy Curves 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKHC"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-20/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=27/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=38/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=60/36pt#; % uppercase stem breadth
+cap_curve#:=64/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=70/36pt#;
+like_cap_curve#:=82/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+let bskboundary=endinput;
+input bsklist-ma;
+input bskletters-r;
+save chars; numeric chars[];
+
+chars.greek_Gamma_SS:=0;
+chars.greek_Delta_SS:=1;
+chars.greek_Theta_SS:=2;
+chars.greek_Lambda_SS:=3;
+chars.greek_Xi_SS:=4;
+chars.greek_Pi_SS:=5;
+chars.greek_Sigma_SS:=6;
+chars.greek_Upsilon_SS:=7;
+chars.greek_Phi_SS:=8;
+chars.greek_Psi_SS:=9;
+chars.greek_Omega_SS:=10;
+chars.greek_Heta_SS:=91;
+chars.greek_Digamma_SS:=92;
+chars.greek_Qoppa_SS:=93;
+chars.greek_Sampi_SS:=94;
+chars.greek_Varsampi_SS:=95;
+chars.greek_Stigma_SS:=127;
+
+input bskletters-o;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bski10-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bski10-TS1.mf
new file mode 100644
index 00000000000..ec354c9f0b0
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bski10-TS1.mf
@@ -0,0 +1,84 @@
+% Boisik Italic 10 point Text Companion (TS1 encoding) (unsupported)
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKITC"; font_size 10pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=6/36pt#; % diameter of rounded corners
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=20/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+like_hair#:=10/36pt#;
+like_stem#:=22/36pt#;
+like_curve#:=26/36pt#;
+ess#:=24/36pt#; % breadth in middle of lowercase s
+dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=12/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=23/36pt#; % uppercase stem breadth
+cap_curve#:=25/36pt#; % uppercase curve breadth
+like_cap_hair#:=12/36pt#;
+like_cap_stem#:=26/36pt#;
+like_cap_curve#:=30/36pt#;
+cap_ess#:=28/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=23/36pt#; % protrusion of lowercase serifs
+cap_jut#:=28/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=9/36pt#; % vertical diameter of hairlines
+bar#:=9/36pt#; % lowercase bar thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+serif_drop#:=12/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=false; % should math-mode spacing be used?
+
+mode_setup; font_setup;
+
+input bsklist-TS1;
+
+let bskboundary = endinput;
+input bskletters-r;
+input bskletters-i;
+input bskletters-o;
+input bsksymbols;
+
+font_normal_space 5u#;
+font_normal_stretch 3u#; font_normal_shrink 2u#;
+font_quad 15u#;
+ font_extra_space 2u#;
+font_x_height 159/36pt#;
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
index b48ca282564..29af7e9af71 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskib10.mf
@@ -37,7 +37,7 @@ like_cap_hair#:=16/36pt#;
like_cap_stem#:=40/36pt#;
like_cap_curve#:=48/36pt#;
cap_ess#:=41/36pt#; % breadth in middle of uppercase s
-rule_thickness#:=.6pt#; % thickness of lines in math symbols
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
jut#:=25/36pt#; % protrusion of lowercase serifs
cap_jut#:=30/36pt#; % protrusion of uppercase serifs
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
index 41f83b76e64..afd5515056c 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskiub10.mf
@@ -37,7 +37,7 @@ like_cap_hair#:=16/36pt#;
like_cap_stem#:=40/36pt#;
like_cap_curve#:=48/36pt#;
cap_ess#:=41/36pt#; % breadth in middle of uppercase s
-rule_thickness#:=.6pt#; % thickness of lines in math symbols
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
jut#:=25/36pt#; % protrusion of lowercase serifs
cap_jut#:=30/36pt#; % protrusion of uppercase serifs
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
index 9e6b56d6e10..feefcf51b1c 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-i.mf
@@ -1,5 +1,7 @@
%Boisik Latin letters in italic form
+def mft = -.5bar_height#*slant enddef;
+
charscription(10.5u,x_height,0)(
path p[]; numeric tim[]; oblu:=2oblu;
pos1(stem,0); pos2(stem,0);
@@ -27,6 +29,7 @@ italcorr x_height#*slant-1.25u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(mft+.5u#,ic#+.5u#);
endchar;
iff known chars.latin_aacute:
@@ -220,12 +223,13 @@ p1=z2l..z3l..z4l..{left}z5l..{down}z6l;
(tim0,tim1)=p0 intersectiontimes p1;
filldraw subpath(rundy(p0,tim0),infinity) of p0.._is---subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
infill z6r{down}..z3r..z4r..{left}z5r..cycle;
+math_fit(-x_height#*slant,ic#);
penlabels(1,2,3,4,5,6);
endchar;
iff known chars.sign_blank_b:
bskchar "Blank italic b sign";
-beginchar(chars.sign_blank_b,11.25u#,asc_height#,0); uni "non";
+beginchar(chars.sign_blank_b,11.25u#,asc_height#,0); uni "0x2422";
italcorr bar_height#*slant;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
@@ -276,6 +280,7 @@ italcorr .5[bar_height#,x_height#]*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(mft,ic#);
endchar;
iff known chars.latin_ccaron:
@@ -468,6 +473,7 @@ italcorr asc_height#*slant-.5u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(mft+.5u#,ic#);
endchar;
iff known chars.latin_dcaron:
@@ -622,6 +628,7 @@ italcorr .5[bar_height#,x_height#]*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(mft,ic#);
endchar;
iff known chars.latin_eacute:
@@ -924,6 +931,7 @@ filldraw z4r{right}..z2r---obl(9l,2r,10l)
..z1l---obl(8r,1l,7r)---z7r..z7l
---obl(8l,7l,2l)---z2l..{left}z4l..z5l{up}
..z5'..z5r..cycle;
+math_fit(desc_depth#*slant+2u#,x_height#*slant-1.5u#);
penlabels(1,2,3,4,5,6,7,8,9,10); labels(5',6');
endchar;
@@ -1145,7 +1153,7 @@ else:
fi
(tim0,tim1)=p0 intersectiontimes p1;
(tim2,tim3)=p2 intersectiontimes p3;
-{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= if pair t: xpart(t) else: t fi enddef; fi
+{{ if testdpi: save rundy; def rundy(expr p,t)suffix modifier:= if pair t: xpart(t) else: t fi enddef; fi
filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),infinity) of p1..cycle;
infill subpath(0,rundy(p2,(tim2,f_obl)).zpet) of p2
@@ -1248,6 +1256,7 @@ italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(.5u#,ic#-1.5u#);
endchar;
iff known chars.latin_gacute:
@@ -1316,6 +1325,34 @@ x101=x4r; x102-x100=5u;
breve(100,101,102);
endchar;
+iff known chars.latin_g_alt:
+bskchar "The variant italic letter g";
+beginchar(chars.latin_g_alt,9u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0);
+x1=x2; rt x2r=w-u;
+top y1=bot y4l-hair; y2=-1/2d;
+pos3(hair,-90); pos3'(stem,-150); pos4(hair,90);
+pos5(curve,180); pos6(.5[hair,stem],-90); pos7(stem,0);
+x7=x1; y7=.5bar_height;
+top y4r=h+o; rt x4=lft x1l-hair; y5=bar_height; lft x5r=u;
+bot y6r=-o; x6=x4-u;
+x3=.5[x3',x1]; lft x3'r=u; bot y3r=-d-o; y3'l=.75[y3l,y2];
+z3''=z3'l+.5stem*unitvector(z3'-z3);
+p0=z4r{left}..z5r..z6r..{up}z7r;
+p1=z3r{right}..z2r---z1r..z1l---z2l..{left}z3l..z3'l{up}..z3''..z3'r..{right}z3r;
+p2=z4l{left}..z5l..z6l..{up}z7l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0,2) of p1..subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1&cycle;
+infill p2..cycle;
+math_fit(mft+u#,ic#-u#);
+penlabels(0,1,2,3,3',4,5,6,7); labels(3'');
+endchar;
+
charscription(12u,asc_height,0)(
numeric tim[]; oblu:=3oblu;
path p[];
@@ -1342,6 +1379,7 @@ italcorr .5[bar_height#,x_height#]*slant-.75u#;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(-u#,ic#);
endchar;
iff known chars.latin_hcaron:
@@ -1392,6 +1430,7 @@ p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r)---z1r.._is
oblu:=3oblu;
filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle;
+math_fit(-u#,ic#);
penlabels(1,2,2',3,4,5,7,7',8,8'); labels(7',8');
endchar;
@@ -1424,6 +1463,7 @@ p1=z2r---obl(8'l,2r,8l)---z8ll..z8r---obl(8'r,8r,1r).more---z1r.._is
oblu:=3f_obl;
filldraw z2r{up}..z3l..z4l---_ih---subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),infinity) of p1..{up}cycle;
+math_fit(-u#,ic#);
penlabels(1,2,2',3,4,5,7,7',8,8'); labels(7',8');
endchar;
@@ -1432,7 +1472,7 @@ numeric H; H=x_height;
pos1(stem,0); pos2(stem,0);
.5[x1,x2]=.5w; x1-x2=0;
y1=H-.3bar_height; y2=.35bar_height;
-ital_kooh(1,4); ital_hook(2,3);
+ital_kooh(1,4).alt; ital_hook(2,3);
filldraw _ih---_ik---cycle;
penlabels(0,1,2);
);
@@ -1444,6 +1484,7 @@ italcorr x_height#*slant-2u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.7x_height#*slant+u#,ic#+.75u#);
endchar;
iff known chars.latin_i:
@@ -1454,6 +1495,7 @@ adjust_fit(0,0);
pickup tiny.nib;
usechar;
top z0=(x1l,h-.5dot_size); dot(0);
+math_fit(-.7x_height#*slant+u#,ic#);
endchar;
iff known chars.latin_iacute:
@@ -1597,7 +1639,7 @@ x1=x2; rt x1r=w-u;
y1=H-.3bar_height; y2=-1/2d;
if monospace: x5r=0; x4=.5[x5,x2]; x3r=u;
else: x4=u; lft x5r=x4-x1; fi
-ital_kooh(1,3);
+ital_kooh(1,3).alt;
bot y4r=-d-o;
y5l=.75[y4l,y2];
z5'=z5l+.5stem*unitvector(z5-z4);
@@ -1612,6 +1654,7 @@ italcorr x_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(desc_depth#*slant+u#,ic#-u#);
endchar;
iff known chars.latin_j:
@@ -1622,6 +1665,7 @@ adjust_fit(0,0);
pickup tiny.nib;
usechar;
top z0=(x1l,h-.5dot_size); dot(0);
+math_fit(desc_depth#*slant+u#,ic#-1.5u#);
endchar;
iff known chars.latin_jcircumflex:
@@ -1701,6 +1745,7 @@ italcorr x_height#*slant;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(-u#,ic#-.5u#);
endchar;
iff known chars.latin_kcaron:
@@ -1768,10 +1813,11 @@ penlabels(1,2);
iff known chars.latin_l:
bskchar "The italic letter l";
beginchar(chars.latin_l,6.5u#, asc_height#, 0); uni "0x006C";
-italcorr asc_height#*slant-1.25u#;
+italcorr asc_height#*slant-1.5u#;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(-1.5u#,ic#);
endchar;
iff known chars.latin_lacute:
@@ -1856,7 +1902,7 @@ endchar;
iff known chars.latin_m:
bskchar "The italic letter m";
beginchar(chars.latin_m,16u#,x_height#,0); uni "0x006D";
-italcorr x_height#*slant-2u#;
+italcorr 1/3x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; oblu:=3oblu;
@@ -1872,7 +1918,7 @@ x4=x5=x5'=.5w; y4=.5[bar_height,x_height];
rt x9r=w-2.5u; x10=x9; y10=.35bar_height; y9=y4;
y5=u; bot y5'=0; y8=y3; x8=.5[x4,x9]+.5u;
top y3r=x_height+o; x3=.5[x2,x4]+.5u;
-ital_kooh(1,7); ital_hook(10,11);
+ital_kooh(1,7).alt; ital_hook(10,11);
p0=z4r..z3r..{down}z2l;
p1=z2r---z1r.._ik---z2l..z2'l..z2'r;
p2=z9r..z8r..{down}z5l;
@@ -1889,6 +1935,7 @@ filldraw z2r if monospace:---z1r else:{up}fi..z3l..z4l---z5l..z5'l..z5'r..z5r
..subpath(rundy(p1,tim1),infinity) of p1
..{up}cycle;
penlabels(1,2,2',3,4,5,5',8,9,10);
+math_fit(0,ic#);
endchar;
charscription(11.5u,x_height,0)(
@@ -1901,7 +1948,7 @@ x1=x2=x2'; x1l=2.5u;
y1=H-.3bar_height; y2=u; bot y2'=0;
x4=x5; rt x4r=w-2.5u; y4=.5[bar_height,x_height]; y5=.35bar_height;
top y3r=x_height+o; x3=.5[x2,x4]+.5u;
-ital_kooh(1,7); ital_hook(5,6);
+ital_kooh(1,7).alt; ital_hook(5,6);
p0=z4r..z3r..{down}z2l;
p0:=z4r{up}..{direction 1 of p0}z3r..{down}z2l;
p1=z2r---z1r.._ik---z2l..z2'l..z2'r;
@@ -1914,10 +1961,11 @@ penlabels(1,2,2',3,4,5);
iff known chars.latin_n:
bskchar "The italic letter n";
beginchar(chars.latin_n,11.5u#, x_height#, 0); uni "0x006E";
-italcorr x_height#*slant-2u#;
+italcorr 1/3x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_ncaron:
@@ -2030,6 +2078,7 @@ italcorr .5x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(mft,ic#);
endchar;
iff known chars.latin_oacute:
@@ -2171,7 +2220,7 @@ italcorr (asc_height#-.75x_height#)*slant;
adjust_fit(0,0);
pickup tiny.nib;
multiply(.85)(curve,hair,vair);
-usechar shifted (-x1l,-y4l) scaled .5 shifted (HH*slant,HH);
+usechar shifted (-x1l,-y2l) scaled .5 shifted (u+HH*slant,HH);
endchar;
charscription(10u,x_height,.85desc_depth)(
@@ -2302,11 +2351,12 @@ filldraw subpath(rundy(p0,(tim0,2curve)),infinity) of p0
..subpath(rundy(p2,tim3),rundy(p1,(tim1,1.5curve)).zpet) of p1..cycle;
infill z6r{down}..z3r..z4r..{left}z5r..cycle;
penlabels(1,1',2,3,4,5,6,7,8,11);
+math_fit(0,ic#);
endchar;
iff known chars.latin_thorn:
bskchar "The italic letter thorn";
-beginchar(chars.latin_p,12u#,asc_height#,desc_depth#); uni "0x0070";
+beginchar(chars.latin_p,12u#,asc_height#,desc_depth#); uni "0x00FE";
italcorr bar_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
@@ -2370,6 +2420,7 @@ filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
..cycle;
infill z7l{down}..z4l..z5l..{right}z6l..cycle;
penlabels(1,2,4,5,6,7); labels(1');
+math_fit(mft,ic#-.5u#);
endchar;
charscription(9u if bold_face:+u fi,x_height, 0)(
@@ -2401,6 +2452,7 @@ italcorr x_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#-2u#);
endchar;
iff known chars.latin_racute:
@@ -2484,6 +2536,7 @@ italcorr x_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5u#,ic#-.5u#);
endchar;
iff known chars.latin_scaron:
@@ -2652,6 +2705,7 @@ italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-x_height#*slant,ic#-.5u#);
endchar;
iff known chars.latin_tcommabelow:
@@ -2740,7 +2794,7 @@ x1=x2; lft x1l=2u; x3=x3'=x4; rt x3r=w-2u;
y1=H-.3bar_height; y2=y4=.35bar_height;
y3=h-u; top y3'=h; bot y6l=-o; x6=1/3[x2,x4];
x7r=x3l; y7=bar_height;
-ital_kooh(1,0); ital_hook(4,5).alt;
+ital_kooh(1,0).alt; ital_hook(4,5).alt;
p0=reverse _ik---z2r..z6r..z7r---z3l..z3'l..z3'r..z3r---reverse _ih..{up}z7r;
p1=z7l{down}..z6l..z2l---z1l;
dl:=length p0;
@@ -2759,6 +2813,7 @@ italcorr x_height#*slant-.75u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_uacute:
@@ -2950,6 +3005,7 @@ filldraw subpath(rundy(p0,0),infinity) of p0
..{z7r-z6}z7r..z7'..{right}z7l..{down}z6l
..subpath(0,rundy(p1,length p1).zpet) of p1..cycle;
penlabels(1,1',2,3,4,5,6,7); labels(9');
+math_fit(-.25u#,ic#-.5u#);
endchar;
charscription(15u,x_height,0)(
@@ -2996,6 +3052,7 @@ italcorr bar_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.25u#,ic#-.5u#);
endchar;
iff known chars.latin_wcircumflex:
@@ -3061,12 +3118,14 @@ rt x3r=w-3.5u; y3=y13=.3bar_height; x13r=w-x3r;
rt x4l=w-.5u; top y4=y14=.4bar_height; bot y3'l=bot y13'l=-o; x3'=.45[x3,x4]; x13'=.45[x13,x14];
lft x14r=0;
z4'=z4r+hair*up; z14'=z14r+hair*up;
-p0=z2'..z2l{dir60}..z1'l..z1l---z3l..z3'l..z4l if dpi>300:..z4'&z4'.. else:&z4l{up}..{down}z4r& fi z4r..z3'r..z3r---z1r..z1'r..z2r+left{dir-100}..z2'+left;
-p1=if dpi>300:z12'.. fi z12l..z11'l..z11l---z13l..z13'l..z14l if dpi>300:..z14'&z14'..else:&z14l{up}..{down}z14r& fi z14r..z13'r..z13r---z11r..z11'r..z12r if dpi>300:..z12'fi;
+p0=z2'..z2l{dir60}..z1'l..z1l---z3l..z3'l..z4l if not testdpi:..z4'&z4'.. else:&z4l{up}..{down}z4r&fi z4r..z3'r..z3r---z1r..z1'r..z2r+left{dir-100}..z2'+left;
+p1=if not testdpi:z12'{z12l-z12'}.. fi z12l..z11'l..z11l---z13l..z13'l..z14l %if not testdpi:..z14'&z14'..else:
+&z14l{up}..{down}z14r&% fi
+z14r..z13'r..z13r---z11r..z11'r..z12r if not testdpi:..z12' fi;
(tim0,tim1-4)=p0 intersectiontimes subpath (4,infinity) of p1;
(tim2,tim3)=subpath (0,4) of p1 intersectiontimes p0;
(tim4-4,tim5)=subpath(4,infinity) of p0 intersectiontimes p1;
-numeric node; node:=if dpi>300:9 else: 8 fi;
+numeric node; node:=if not testdpi:9 else: 8 fi;
(tim6-node,tim7-node)=subpath (node,infinity) of p1 intersectiontimes subpath(node,infinity) of p0;
filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..reverse subpath(rundy(p1,tim2),rundy(p1,tim1).zpet) of p1
@@ -3076,6 +3135,7 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p0,tim7),infinity) of p0
..cycle;
penlabels(1,1',2,3,3',4,11,11',12,13,13',14); labels(2',4',12',14');
+math_fit(.5u#,ic#-.5u#);
endchar;
charscription(10.5u,x_height,desc_depth)(
@@ -3110,6 +3170,7 @@ italcorr bar_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(desc_depth#*slant,ic#-.5u#);
endchar;
iff known chars.latin_ygrave:
@@ -3202,6 +3263,7 @@ italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#-.25u#);
endchar;
iff known chars.latin_zcaron:
@@ -3746,16 +3808,16 @@ endchar;
iff known chars.sign_query:
bskchar "Italic question mark";
-beginchar(chars.sign_query, 9u#+punct_fit#, asc_height#, 0); uni "0x003F";
+beginchar(chars.sign_query, 9u#, asc_height#, 0); uni "0x003F";
italcorr .5[asc_height#,x_height#]*slant;
-adjust_fit(0,0);
+adjust_fit(punct_fit#,0);
pickup tiny.nib;
pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0);
pos4(curve,0); pos5(hair,90); pos6(vair,120);
-lft x1r=u+punct_fit; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-punct_fit)+punct_fit-hair;
+lft x1r=u; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5w-hair;
y0l=y1-2hair; x0=.35[x2,x1];
rt x3r=w-u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
-x5=.5(w-punct_fit)+punct_fit; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+x5=.5w; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
filldraw z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l
..{dir-120}z0r..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r
..cycle;
@@ -3763,6 +3825,128 @@ bot z100=(x5,.5dot_size); dot(100);
penlabels(0,1,2,3,4,5,6);
endchar;
+iff known chars.sign_query_query:
+bskchar "Italic double question mark";
+beginchar(chars.sign_query_query, 15u#, asc_height#, 0); uni "0x2047";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0);
+pos4(curve,0); pos5(hair,90); pos6(vair,120);
+lft x1r=u; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-7u)-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-8u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5(w-7u); bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+filldraw z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l
+ ..{dir-120}z0r..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r
+ ..cycle;
+filldraw (z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l
+ ..{dir-120}z0r..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r
+ ..cycle) shifted (w-u-x3r,0);
+bot z100=(x5,.5dot_size); z101=z100 shifted (w-u-x3r,0);
+dot(100); dot(101);
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_query_exclam:
+bskchar "Italic question and exclamation mark";
+beginchar(chars.sign_query_exclam, 13u#, asc_height#, 0); uni "0x2048";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0);
+pos4(curve,0); pos5(hair,90); pos6(vair,120);
+lft x1r=u; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5(w-4u)-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-5u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5(w-4u); bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+filldraw z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l
+ ..{dir-120}z0r..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r
+ ..cycle;
+bot z100=(x5,.5dot_size); dot(100);
+bot z7=(w-2.5u,.5dot_size); dot(7);
+penpos8(dot_size,0); pos9(hair,0); x8=x9=x7;
+y8=h-.5stem; bot y9=dot_size+stem; y9r:=y9r+.5hair;
+filldraw z8l---z9l..{.5[z8,z8r]-z9r}z9r..{z8r-z9r}z8r..cycle;
+penlabels(0,1,2,3,4,5,6,8,9);
+endchar;
+
+iff known chars.sign_exclam_query:
+bskchar "Exclamation and italic question mark";
+beginchar(chars.sign_exclam_query, 13u#, asc_height#, 0); uni "0x2049";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0);
+pos4(curve,0); pos5(hair,90); pos6(vair,120);
+lft x1r=5u; y1=.5[h,x_height]+hair; top y2r=h+o; x2=4u+.5(w-4u)-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5(w-4u)+4u; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+filldraw z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l
+ ..{dir-120}z0r..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r
+ ..cycle;
+bot z100=(x5,.5dot_size); dot(100);
+bot z7=(2.5u,.5dot_size); dot(7);
+penpos8(dot_size,0); pos9(hair,0); x8=x9=x7;
+y8=h-.5stem; bot y9=dot_size+stem; y9r:=y9r+.5hair;
+filldraw z8l---z9l..{.5[z8,z8r]-z9r}z9r..{z8r-z9r}z8r..cycle;
+penlabels(0,1,2,3,4,5,6,8,9);
+endchar;
+
+iff known chars.sign_interrobang:
+bskchar "Italic interrobang mark";
+beginchar(chars.sign_interrobang, 9u#, asc_height#, 0); uni "0x203D";
+italcorr .5[asc_height#,x_height#]*slant;
+adjust_fit(punct_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos0(vair,-60); pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0);
+pos4(curve,0); pos5(hair,90); pos6(vair,120);
+penpos7(dot_size,0); pos8(hair,0); x7=x8=x5;
+lft x1r=u; y1=.5[h,x_height]+hair; top y2r=h+o; x2=.5w-hair;
+y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-u; y3=.5[h,x_height]-hair; x4=x0; y4=bar_height;
+x5=.5w; bot y5l=2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+y7=y2+o; bot y8=dot_size+stem; y8r:=y8r+.5hair; y7l:=y2l-o;
+p0:=z6l{dir240}..z5l..z4l..z3l{up}..z2l{left}..z1l..{dir60}z0l;
+p1:=z0r{dir-120}..z1r..{right}z2r..{down}z3r..z4r..z5r..{dir60}z6r;
+p2:=reverse (z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle);
+p3:=subpath(-1,length p2-1) of p2;
+y7'=y2r+o; z7'=whatever[z8r,z7r];
+p4:=z8r--z7';
+p5:=z8l--z7l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p2;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,4) of p2;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p3;
+(tim6-3,tim7)=subpath(3,infinity) of p0 intersectiontimes subpath(0,1.75) of p3;
+(tim8,tim9)=subpath(0,3) of p1 intersectiontimes p2;
+(tim10-2,tim11)=subpath(2,3) of p1 intersectiontimes p2;
+(tim12-3,tim13)=subpath(3,4) of p1 intersectiontimes p2;
+(tim14-4,tim15)=subpath(4,6) of p1 intersectiontimes subpath(0,3) of p2;
+(tim16-2,tim17)=subpath(2,infinity) of p0 intersectiontimes p4;
+(tim18-3,tim19)=subpath(3,infinity) of p0 intersectiontimes p4;
+(tim20-3,tim21)=subpath(3,4) of p1 intersectiontimes p5;
+(tim22-4,tim23)=subpath(4,6) of p1 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..{z8r-.5[z7,z7r]}z8r..z8l
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10),rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+oblu:=1.5oblu;
+infill subpath(rundy(p0,tim16),rundy(p0,tim18).zpet) of p0
+ ..subpath(rundy(p4,tim19).zpet,rundy(p4,tim17)) of p4..cycle;
+infill subpath(rundy(p1,tim20),rundy(p1,tim22).zpet) of p1
+ ..subpath(rundy(p5,tim23),rundy(p5,tim21).zpet) of p5..cycle;
+bot z100=(x5,.5dot_size); dot(100);
+penlabels(0,1,2,3,4,5,6,7,8);
+endchar;
+
iff known chars.sign_turned_query:
bskchar "Turned italic question mark";
beginchar(chars.sign_turned_query, 9u#, asc_height#-desc_depth#, desc_depth#); uni "non";
@@ -3799,6 +3983,58 @@ top z100=(x5,h-.5dot_size); dot(100);
penlabels(0,1,2,3,4,5,6);
endchar;
+iff known chars.sign_gnaborretni:
+bskchar "Reversed italic interrobang mark";
+beginchar(chars.sign_gnaborretni, 9u#, asc_height#-desc_depth#, desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos0(vair,120); pos1(.45[hair,stem],0); pos2(hair,-90); pos3(curve,180);
+pos4(curve,180); pos5(hair,-90); pos6(vair,-60);
+penpos7(dot_size,180); pos8(hair,180); x7=x8=x5;
+rt x1r=w-u; y1=-d+(asc_height-.5[asc_height,x_height])-hair; bot y2r=-d-o; x2=.5w+hair;
+y0l=y1+2hair; x0=.35[x2,x1];
+lft x3r=u; y3=y1+2hair; x4=x0; y4=-d+(asc_height-bar_height);
+x5=.5w; top y5l=h-2dot_size; x6-x5=x0-x1; y6-y5=y1-y0;
+top z100=(x5,h-.5dot_size); dot(100);
+y7=y2r-o; top y8=h-dot_size-stem; y8r:=y8r-.5hair; y7l:=y2l+o;
+p0:=z6l{dir60}..z5l..z4l..z3l{down}..z2l{right}..z1l..{dir240}z0l;
+p1:=z0r{dir60}..z1r..{left}z2r..{up}z3r..z4r..z5r..{dir240}z6r;
+p2:=reverse (z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle);
+p3:=subpath(-1,length p2-1) of p2;
+y7'=y2r-o; z7'=whatever[z8r,z7r];
+p4:=z8r--z7';
+p5:=z8l--z7l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p2;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,4) of p2;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p3;
+(tim6-3,tim7)=subpath(3,infinity) of p0 intersectiontimes subpath(0,1.75) of p3;
+(tim8,tim9)=subpath(0,3) of p1 intersectiontimes p2;
+(tim10-2,tim11)=subpath(2,3) of p1 intersectiontimes p2;
+(tim12-3,tim13)=subpath(3,4) of p1 intersectiontimes p2;
+(tim14-4,tim15)=subpath(4,6) of p1 intersectiontimes subpath(0,3) of p2;
+(tim16-2,tim17)=subpath(2,infinity) of p0 intersectiontimes p4;
+(tim18-3,tim19)=subpath(3,infinity) of p0 intersectiontimes p4;
+(tim20-3,tim21)=subpath(3,4) of p1 intersectiontimes p5;
+(tim22-4,tim23)=subpath(4,6) of p1 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..{z8r-.5[z7,z7r]}z8r..z8l
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..subpath(0,rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10),rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+oblu:=1.5oblu;
+infill subpath(rundy(p0,tim16),rundy(p0,tim18).zpet) of p0
+ ..subpath(rundy(p4,tim19).zpet,rundy(p4,tim17)) of p4..cycle;
+infill subpath(rundy(p1,tim20),rundy(p1,tim22).zpet) of p1
+ ..subpath(rundy(p5,tim23),rundy(p5,tim21).zpet) of p5..cycle;
+penlabels(0,1,2,3,4,5,6,7,8);
+endchar;
+
iff known chars.sign_at:
bskchar "Italic at sign";
beginchar(chars.sign_at, 16u#, asc_height#-.3desc_depth#, .6desc_depth#); uni "0x0040";
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
index 9dcc4239b2a..e2e274ed0ca 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-o.mf
@@ -1,11 +1,8 @@
-%Boisik letters in other forms (greek, calligraphic)
+%Boisik letters in other forms (greek, calligraphic, one cyrilic) -- for math only!
+numeric bbs; bbs:=if cap_hair+eps>tiny-eps: 2 else 1 fi; %correction for BB letters
+def mft = -.5bar_height#*slant enddef;
-iff known chars.greek_Gamma:
-bskchar "The Greek letter Gamma";
-beginchar(chars.greek_Gamma,11u#,cap_height#,0); uni "0x0393";
-italcorr cap_height#*slant;
-adjust_fit(cap_serif_fit#,0);
-pickup tiny.nib;
+charscription(11u,cap_height,0)(
pos1(cap_stem,0); pos2(cap_stem,0);
bot y1=0; top y2=h; lft x1l= lft x2l=2u;
cap_serifs_bl(1l); cap_serifs_br(1r);
@@ -17,14 +14,112 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
---z2l.a..{right}z2l.c..z2l.b---cycle;
beak:=oldbeak;
penlabels(1,2);
+);
+
+iff known chars.greek_Gamma:
+bskchar "The Greek letter Gamma";
+beginchar(chars.greek_Gamma,11u#,cap_height#,0); uni "0x0393";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,ic#-5u#);
endchar;
-iff known chars.greek_Delta:
-bskchar "The Greek letter Delta";
-beginchar(chars.greek_Delta,14u#,cap_height#,0); uni "0x0394";
-adjust_fit(cap_serif_fit#,cap_serif_fit#);
-numeric alpha, right_stem, left_stem, old_jut;
+iff known chars.greek_Gamma_BB:
+bskchar "The blackboard-bold Greek letter Gamma";
+beginchar(chars.greek_Gamma_BB,11u#,cap_height#,0); uni "0x213E";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.greek_Gamma_SS:
+bskchar "The sans-serif Greek letter Gamma";
+beginchar(chars.greek_Gamma_SS,11u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90);
+bot y1=0; top y2=h; lft x1l= lft x2l=2u;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+cap_serifs_tl(2l);
+top y3r=h; rt x3r=w-u; z2'=(x2r,y3l);
+oblu:=cap_hair;
+filldraw z1l.b..z1..z1r.b---obl(2',1r,3l)---z3l+cap_stem*left...z3...z3r+cap_stem*left
+ ---z2..z2l.b---cycle;
+penlabels(1,2,3); labels(2');
+math_fit(0,ic#-4u#);
+endchar;
+
+charscription(12u,cap_height,0)(
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
+bot y1=0; top y2=h;
+top y3r=h; rt x3r=w-u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x3-x2r); x5'=x2r; x6'-x6=1.5u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+p=reverse arm_top_r_points(2r,3);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..{left}z1r.c..z1r.b---z5'l{dir80}..z5l---
+ z6l..z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'...z6r
+ ---z5r..{dir100}z5'r---p--z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,5,5',6,6');
+);
+
+iff known chars.greek_Digamma:
+bskchar "The Greek letter Digamma";
+beginchar(chars.greek_Digamma,12u#,cap_height#,0); uni "0x03DC";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.greek_Digamma_BB:
+bskchar "The blackboard-bold Greek letter Digamma";
+beginchar(chars.greek_Digamma_BB,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.greek_Digamma_SS:
+bskchar "The sans-serif Greek letter Digamma";
+beginchar(chars.greek_Digamma_SS,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90);
+bot y1=0; top y2=h;
+top y3r=h; rt x3r=w-u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x3-x2r); x5'=x2r; x6'-x6=1.5u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+z2'=(x2r,y3l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1..z1r.b---z5'l{dir80}..z5l---
+ z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,3l)---z3l+cap_stem*left
+ ...z3...z3r+cap_stem*left---z2..z2l.b---cycle;
+penlabels(1,2,3,5,5',6); labels(2',6');
+math_fit(0,ic#-3u#);
+endchar;
+
+charscription(14u,cap_height,0)(
+numeric alpha, right_stem, left_stem, old_jut;
old_jut:=cap_jut;
{{ save cap_jut; cap_jut=old_jut-.5u;
lft x1l=1.5u; rt x2r=w-1.5u; bot y1l=bot y2r=0;
@@ -44,16 +139,57 @@ infill z2l.c{right}..diag_serif(2l,3')---z3'r...z3'l---diag_serif(1r,3')
..z1r.c---cycle;
penlabels(1,1',2,2',3,3');
}};
+);
+
+iff known chars.greek_Delta:
+bskchar "The Greek letter Delta";
+beginchar(chars.greek_Delta,14u#,cap_height#,0); uni "0x0394";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
endchar;
-iff known chars.greek_Delta_alt:
-bskchar "The Greek letter Delta alternative";
-beginchar(chars.greek_Delta_alt,13u#,cap_height#,0); uni "non";
-adjust_fit(0,0);
+iff known chars.greek_Delta_BB:
+bskchar "The blackboard-bold Greek letter Delta";
+beginchar(chars.greek_Delta_BB,14u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
-numeric alpha, right_stem, left_stem, old_jut;
+usechar;
+numeric oblu.more; oblu.more:=2oblu;
+bot y100=y2r.c; z100=whatever[z3l,z2r];
+infill ifobl(3',3l,2l,2r,,more)---obl(100,3l,2r.c)..z2r---obl(2l,2r,3')---cycle;
+labels(100);
+endchar;
+
+iff known chars.greek_Delta_SS:
+bskchar "The sans-serif Greek letter Delta";
+beginchar(chars.greek_Delta_SS,14u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
+numeric alpha, right_stem, left_stem, old_jut;
old_jut:=cap_jut;
+{{ save cap_jut; cap_jut=old_jut-.5u;
+lft x1l=1.5u; rt x2r=w-1.5u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
+filldraw z1---z2...diag_serif(2r,3l)---z3l---
+ diag_serif(1l,3l)...cycle;
+infill z2l.c{right}..diag_serif(2l,3')---z3'r...z3'l---diag_serif(1r,3')
+ ..z1r.c---cycle;
+penlabels(1,1',2,2',3,3');
+}};
+endchar;
+
+charscription(13u,cap_height,0)(
+numeric alpha, right_stem, left_stem;
lft x1l=u; rt x2r=w-u; bot y1l=bot y2r=0;
x3l=.5w; top y3l=h+apex_o;
left_stem=cap_hair;
@@ -67,15 +203,138 @@ z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
filldraw z1l---z2r--z3l--cycle;
infill (x1r+serif_o,y1r)--(x2l-serif_o,y2l)---z3'r...z3'l---cycle;
-penlabels(1,2,3);
+penlabels(1,2,3,3');
+);
+
+iff known chars.greek_Delta_alt:
+bskchar "The Greek letter Delta alternative";
+beginchar(chars.greek_Delta_alt,13u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_Delta_alt_BB:
+bskchar "The blackboard-bold Greek letter Delta alternative";
+beginchar(chars.greek_Delta_alt_BB,13u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+oblu:=2f_obl;
+infill ifobl(3'r,3l,2l,2l,,)---ifobl(2r,2l,3l,3'r,,)---cycle;
+endchar;
+
+charscription(9u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,90); pos4(cap_hair,90); pos5(ser_height,90);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+y3=y4=y5=.52h; x3=x1r.a; rt x4=w-u; x5=x1r;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a
+ ..z1r.c{left}..z1r.b---z5l{dir80}..z3l---z4l..z4r---z3r..{dir100}z5r
+ ---z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5);
+);
+
+iff known chars.greek_Heta:
+bskchar "The Greek letter Heta";
+beginchar(chars.greek_Heta,9u#,cap_height#,0); uni "0x0370";
+italcorr .5cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,ic#-2u#);
endchar;
+iff known chars.greek_Heta_BB:
+bskchar "The blackboard-bold Greek letter Heta";
+beginchar(chars.greek_Heta_BB,9u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+iff known chars.greek_Heta_SS:
+bskchar "The sans-serif Greek letter Heta";
+beginchar(chars.greek_Heta_SS,9u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,90); pos4(cap_hair,90); pos5(ser_height,90);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+y3=y4=y5=.52h; x3=x1r.a; rt x4=w-u; x5=x1r;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1l.b..z1..z1r.b---z5l{dir80}..z3l---z4l..z4r---z3r..{dir100}z5r
+ ---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+charscription(14u,cap_height,0)(
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+z5=.5[z4,z2];
+pos6(.65beak,80); pos7(.65beak,85);
+y6=y7=y5; .5[x6,x7]=x5; x7-x6=.47(x3r-x1r);
+z6'r-z6r=z6'l-z6l=z7r-z7'r=z7l-z7'l=(serif_o,0);
+y6l:=y6l-o; y7r:=y7r+o;
+pos8(cap_hair,90); pos9(cap_hair,90);
+y8=y9; .5[z8,z9]=z5; x9-x8=1/3(x7-x6);
+filldraw z8r..{dir80}z6'r..z6r---z6l..{dir80}z6'l..z8l---z9l
+ ..{dir-95}z7'l..z7l---z7r..{dir-95}z7'r..z9r---cycle;
+penlabels(1,2,3,4,5,6,6',7,7',8,9);
+);
+
iff known chars.greek_Theta:
bskchar "The Greek letter Theta";
beginchar(chars.greek_Theta,14u#,cap_height#,0); uni "0x0398";
italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
+usechar;
+math_fit(-.5cap_height#*slant+.5u#,.5cap_height#*slant);
+endchar;
+
+iff known chars.greek_Theta_BB:
+bskchar "The blackboard-bold Greek letter Theta";
+beginchar(chars.greek_Theta_BB,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_Theta_SS:
+bskchar "The sans-serif Greek letter Theta";
+beginchar(chars.greek_Theta_SS,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
@@ -86,18 +345,13 @@ y6=y7=y5; .5[x6,x7]=x5; x7-x6=.47(x3r-x1r);
z6'r-z6r=z6'l-z6l=z7r-z7'r=z7l-z7'l=(serif_o,0);
y6l:=y6l-o; y7r:=y7r+o;
pos8(cap_hair,90); pos9(cap_hair,90);
-y8=y9; .5[z8,z9]=z5; x9-x8=1/3(x7-x6);
-filldraw z8r..{dir80}z6'r..z6r---z6l..{dir80}z6'l..z8l---z9l
- ..{dir-95}z7'l..z7l---z7r..{dir-95}z7'r..z9r---cycle;
+y8=y9; .5[z8,z9]=z5; x9-x8=(x7-x6);
+filldraw z8r..z8l---z9l..z9r---cycle;
penlabels(1,2,3,4,5,6,6',7,7',8,9);
endchar;
-iff known chars.greek_Lambda:
-bskchar "The Greek letter Lambda";
-beginchar(chars.greek_Lambda,13u#,cap_height#,0); uni "0x039B";
-adjust_fit(cap_serif_fit#,cap_serif_fit#);
+charscription(13u,cap_height,0)(
numeric alpha, right_stem, left_stem;
-pickup tiny.nib;
lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0;
x3l=.5w; top y3l=h+apex_o;
left_stem=cap_hair;
@@ -114,6 +368,49 @@ filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)---
{left}z2l.a..{right}z2l.c..diag_serif(2l,3')---z3'r...z3'l---
diag_serif(1r,3') ..z1r.c{right}..z1r.a{left}..cycle;
penlabels(1,1',2,2',3,3');
+);
+
+iff known chars.greek_Lambda:
+bskchar "The Greek letter Lambda";
+beginchar(chars.greek_Lambda,13u#,cap_height#,0); uni "0x039B";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_Lambda_BB:
+bskchar "The blackboard-bold Greek letter Lambda";
+beginchar(chars.greek_Lambda_BB,13u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+numeric oblu.more; oblu.more:=2oblu;
+bot y100=y2r.c; z100=whatever[z3l,z2r];
+infill ifobl(3',3l,2r,2l,,more)---obl(100,3l,2r.c)..z2r---obl(2l,2r,3')---cycle;
+labels(100);
+endchar;
+
+iff known chars.greek_Lambda_SS:
+bskchar "The sans-serif Greek letter Lambda";
+beginchar(chars.greek_Lambda_SS,13u#,cap_height#,0); uni "non";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem;
+lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
+filldraw z1...diag_serif(1l,3l)---z3l---
+ diag_serif(2r,3l)...z2...diag_serif(2l,3')---z3'r...z3'l---
+ diag_serif(1r,3')...cycle;
+penlabels(1,1',2,2',3,3');
endchar;
iff known chars.greek_Xi:
@@ -146,14 +443,82 @@ y8=y9; .5[z8,z9]=.5[z6,z7]; x9-x8=1/3(x7-x6);
filldraw z8r..{up}z6'r..z6r---z6l..{up}z6'l..z8l---z9l
..{down}z7'l..z7l---z7r..{down}z7'r..z9r---cycle;
penlabels(1,2,6,7,8,9);
+math_fit(-.25u#,.5u#);
endchar;
-iff known chars.greek_Pi:
-bskchar "The Greek letter Pi";
-beginchar(chars.greek_Pi,13u#,cap_height#,0); uni "0x03A0";
-italcorr cap_height#*slant;
-adjust_fit(cap_serif_fit#,cap_serif_fit#);
+iff known chars.greek_Xi_BB:
+bskchar "The blackboard-bold Greek letter Xi";
+beginchar(chars.greek_Xi_BB,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.25u#;
+adjust_fit(0,0);
pickup tiny.nib;
+path p[]; numeric ofs;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h; x1=x2=.5w;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+top y3r=top y4r=h; rt x3r=w-u-o; lft x4r=u+o;
+bot y5r=0; rt x5l=w-u;
+{{
+ numeric oldbeak, old_jut; oldbeak:=beak; old_jut=cap_jut; save beak, cap_jut, alt_cap_hair;
+ beak:=.9oldbeak; cap_jut:=if bold_face: .7\\ fi old_jut;
+ alt_cap_hair:=if .5beak>cap_stem: cap_stem else: .4beak; fi;
+ p0:=reverse arm_top_r_points(2r,3).alt; p1:=arm_top_l_points(2l,4).alt;
+ p2:=arm_bot_r_points(1r,5).alt;
+ p2:=z5a{right}...z5b--z5r---z5l..{down}z5l.o&z5l.o..z5c...{left}z5d---z5e;
+}};
+p3:=reverse (p2 reflectedabout (z1r.c,z1r.a));
+ofs:=if monospace and (x3d-x2r<stem): 2.3 else: 1 fi;
+filldraw subpath(ofs, infinity) of p0--subpath(0,length(p1)-ofs) of p1--cycle;
+filldraw p2--(p3 shifted (2u-xpart(point 2 of p3),0))--cycle;
+pos6(.65beak,90); pos7(.65beak,90);
+y6=y7=.5h+o; .5[x6,x7]=.5w; x7-x6=.47(x3r-x4r);
+z6'r-z6r=z6'l-z6l=z7r-z7'r=z7l-z7'l=(serif_o,0);
+pos8(cap_hair,90); pos9(cap_hair,90);
+y8=y9; .5[z8,z9]=.5[z6,z7]; x9-x8=1/3(x7-x6);
+filldraw z8r..{up}z6'r..z6r---z6l..{up}z6'l..z8l---z9l
+ ..{down}z7'l..z7l---z7r..{down}z7'r..z9r---cycle;
+p100:=subpath(0,1) of p2;
+p101:=subpath(5,infinity) of p2;
+p102:=reverse (p100 reflectedabout (z1,z2));
+p103:=reverse (p101 reflectedabout (z1,z2));
+z100=(x5l.o,.5[y5,y5b]);
+z101=z100 reflectedabout (z1,z2);
+infill subpath(0,rundy(p100,infinity).zpet) of p100..{up}z100
+ ..subpath(rundy(p101,0),infinity) of p101
+ ---subpath(0,rundy(p103,infinity).zpet) of p103..{down}z101
+ ..subpath(rundy(p102,0),infinity) of p102---cycle;
+infill (x3a,y3d)..z3a---z4a..(x4a,y4d)---cycle;
+penlabels(1,2,6,7,8,9); labels(100,101);
+endchar;
+
+iff known chars.greek_Xi_SS:
+bskchar "The sans-serif Greek letter Xi";
+beginchar(chars.greek_Xi_SS,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric ofs, tharm;
+tharm:=if ((substring(0,5) of font_identifier_) = "BSKHC"): cap_stem else: cap_hair fi;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90); pos4(cap_hair,90);
+pos5(tharm,-90); pos5'(tharm,-90);
+bot y1=0; top y2=h; x1=x2=.5w;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+top y3r=top y4r=h; rt x3r=w-u-o; lft x4r=u+o;
+bot y5r=bot y5'r=0; rt x5l=w-u; lft x5'=u;
+pos6(.65beak,90); pos7(.65beak,90);
+y6=y7=.5h+o; .5[x6,x7]=.5w; x7-x6=.47(x3r-x4r);
+z6'r-z6r=z6'l-z6l=z7r-z7'r=z7l-z7'l=(serif_o,0);
+pos8(cap_hair,90); pos9(cap_hair,90);
+y8=y9; .5[z8,z9]=.5[z6,z7]; x9-x8=(x7-x6);
+filldraw z8r..z8l---z9l..z9r---cycle;
+filldraw z4l+cap_stem*right---z3l+cap_stem*left...z3...z3r+cap_stem*left
+ ---z4r+cap_stem*right...z4...cycle;
+filldraw z5'l+cap_stem*right---z5l+cap_stem*left...z5...z5r+cap_stem*left
+ ---z5'r+cap_stem*right...z5'...cycle;
+penlabels(1,2,3,4,5,5',6,7,8,9);
+endchar;
+
+charscription(13u,cap_height,0)(
pos1(cap_stem,0); pos2(cap_stem,0);
pos3(cap_stem,0); pos4(cap_stem,0);
bot y1=0; top y2=h;
@@ -168,14 +533,51 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b---z4r.b..
{right}z4r.c..z4r.a---z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
penlabels(1,2,3,4);
+);
+
+iff known chars.greek_Pi:
+bskchar "The Greek letter Pi";
+beginchar(chars.greek_Pi,13u#,cap_height#,0); uni "0x03A0";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
endchar;
-iff known chars.greek_Sigma:
-bskchar "The Greek letter Sigma";
-beginchar(chars.greek_Sigma,13u#,cap_height#,0); uni "0x03A3";
-italcorr cap_height#*slant-1.25u#;
-adjust_fit(cap_serif_fit#,0);
+iff known chars.greek_Pi_BB:
+bskchar "The blackboard-bold Greek letter Pi";
+beginchar(chars.greek_Pi_BB,13u#,cap_height#,0); uni "0x213F";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+bot z102=(x3r,y3r.c); top z103=(x4r,y4r.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(102,3r.c,4r)---obl(103,3r,4r.c)...z4r---cycle;
+endchar;
+
+iff known chars.greek_Pi_SS:
+bskchar "The sans-serif Greek letter Pi";
+beginchar(chars.greek_Pi_SS,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=0; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r);
+filldraw z1l.b...z1...z1r.b---z2r.b..z2r.c---z4l.c..z4l.b
+ ---z3l.b...z3...z3r.b---z4r.b..
+ z4---z2r.a---z2..z2l.b---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+charscription(13u,cap_height,0)(
path p[];
numeric alpha, top_stem; oblu:=2oblu;
pos1(cap_stem,0); pos2(cap_stem,0);
@@ -197,14 +599,114 @@ filldraw subpath(0, length(p1)-1) of p1..z3f---obl(5r,3f,2r.b)---
{right}z2l.c..z2l.b---obl(5',2l.b,1')---z1'..{left}z1l.c..
z1l.a---cycle;
penlabels(1,2,5,6); labels(1',5');
+);
+
+iff known chars.greek_Sigma:
+bskchar "The Greek letter Sigma";
+beginchar(chars.greek_Sigma,13u#,cap_height#,0); uni "0x03A3";
+italcorr cap_height#*slant-1.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,.5bar_height#*slant);
+endchar;
+
+iff known chars.greek_Sigma_BB:
+bskchar "The blackboard-bold Greek letter Sigma";
+beginchar(chars.greek_Sigma_BB,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-1.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+y100=y101=y2; z100=whatever[z5',z2l.b]; z101=whatever[z2r.b,z5r];
+infill ifobl(5r,5',101,100,,)---ifobl(100,101,5',5r,,)---cycle;
+endchar;
+
+iff known chars.greek_Sigma_SS:
+bskchar "The sans-serif Greek letter Sigma";
+beginchar(chars.greek_Sigma_SS,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-1.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p[];
+numeric alpha, top_stem; oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); pos4(cap_hair,90);
+bot y1=0; top y2=h;
+lft x1l=lft x2l-o=2u;
+cap_serifs_bl(1l); cap_serifs_tl(2l); cap_serifs_br(1r); cap_serifs_tr(2r);
+bot y3r=0; top y4r=h; rt x3r=w-u; x4r=w-2.5u; z3'=(x1r,y3l); z2'=(x2r+oblu,y4l);
+x5r=if ((substring(0,5) of font_identifier_)="BSKHC"): .5[x4,x2r] else: .5w-o fi;
+y5=.5[x_height,bar_height];
+alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r);
+pos5(alpha*cap_stem,0);
+alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r);
+pos6(alpha*cap_hair,0); z5r=z6r;
+y1'=y1l.b; z1'=z6l+whatever*(z3'-z6r);
+z5'=whatever[z2l.b,z5l]=whatever[z6l,z1'];
+filldraw z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(3',3,5r)---obl(5r,3',2r.b)---
+ z2r.b..z2'---z4l+cap_stem*left...z4...z4r+cap_stem*left---z2
+ ..z2l.b---obl(5',2l.b,1')---z1'..z1---cycle;
+penlabels(1,2,3,4,5,6); labels(1',2',3',5');
endchar;
+charscription(14u,cap_height,0)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,210); pos3'(cap_curve,-90);
+pos4(cap_hair,-30); pos4'(cap_curve,-90);
+x1=x2=.5w; bot y1=0; top y2=x_height;
+x3l=w-u; y3=y4+o=.1[x_height,h]; top y3'l=top y4'l=h+o;
+x3'=.45[x2,x3]; x4'=.5[x2,x4]; x4l=u;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+p0=z3l{up}..{left}z3'l..{down}z2l;
+p1=z2r{up}..z4'l{left}..{down}z4l;
+(tim1,tim2)=p0 intersectiontimes p1;
+filldraw z2l---z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a..z1r.c{left}..z1r.b---z2r...z3'r..{down}z3r
+ ..subpath(0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy(p1,tim2),infinity) of p1..z4r{up}..z4'r...cycle;
+penlabels(1,2,3,3',4,4');
+);
+
iff known chars.greek_Upsilon:
bskchar "The Greek letter Upsilon";
beginchar(chars.greek_Upsilon,14u#,cap_height#,0); uni "0x03A5";
italcorr x_height#*slant+.5u#;
adjust_fit(0,0);
pickup tiny.nib;
+usechar;
+math_fit(-x_height#*slant,ic#-4u#);
+endchar;
+
+iff known chars.greek_Upsilon_BB:
+bskchar "The blackboard-bold Greek letter Upsilon";
+beginchar(chars.greek_Upsilon_BB,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=p1;
+p101:=z4r{up}..z4'r..{down}z2l;
+z100=bsktouch(p100,right,p101,left);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(x4',y100)));
+bot z101=(x1l,y1l.c);
+oblu.f:=f_obl;
+oblu:=bbw;
+infill subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101
+ ---obl(101,2l,1l.c).f...z1l
+ ---if (x1r-x1l)>oblu: obl(1r,1l,2r) else: z1..z1r+oblu*up fi---cycle;
+labels(100,101);
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.greek_Upsilon_SS:
+bskchar "The sans-serif Greek letter Upsilon";
+beginchar(chars.greek_Upsilon_SS,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
path p[]; numeric tim[]; oblu:=2oblu;
pos1(cap_stem,0); pos2(cap_stem,0);
pos3(cap_hair,210); pos3'(cap_curve,-90);
@@ -216,21 +718,105 @@ cap_serifs_bl(1l); cap_serifs_br(1r);
p0=z3l{up}..{left}z3'l..{down}z2l;
p1=z2r{up}..z4'l{left}..{down}z4l;
(tim1,tim2)=p0 intersectiontimes p1;
-filldraw z2l---z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
- {right}z1r.a..z1r.c{left}..z1r.b---z2r...z3'r..{down}z3r
+filldraw z2l---z1l.b...z1...z1r.b---z2r...z3'r..{down}z3r
..subpath(0,rundy(p0,tim1).zpet) of p0
..subpath(rundy(p1,tim2),infinity) of p1..z4r{up}..z4'r...cycle;
penlabels(1,2,3,3',4,4');
+math_fit(0,ic#-3u#);
endchar;
+charscription(13u,cap_height,0)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_stem,0); pos6(cap_stem,0);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; .5[y2,y4]=top y1;
+y2=1/3x_height if bold_face: +.5cap_hair fi; bot y5=0; top y6=h;
+x5=x6=.5w;
+{{
+ numeric old_serif; old_serif:=ser_height;
+ save ser_heigth;
+ ser_height:= if bold_face: .6\\fi old_serif;
+ cap_serifs_tl(6l); cap_serifs_tr(6r); cap_serifs_bl(5l); cap_serifs_br(5r);
+}};
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+p2:=z1r{up}..z4r..z3r..z2r..{up}cycle;
+p3:=z5l.b{down}..{left}z5l.c..z5l.a{right}..z5+ser_boule*up..
+ {right}z5r.a..z5r.c{left}..{up}z5r.b;
+p4:=z6r.b{up}..{right}z6r.c..z6r.a---z6l.a..{right}z6l.c..{down}z6l.b;
+p5:=z6l.b--z5l.b;
+p6:=z6r.b--z5r.b;
+tim1=xpart(p1 intersectiontimes (z5r.b--z6r.b));
+tim2=xpart(p1 intersectiontimes (z6r.b--(x6r.b,y1)));
+tim3=xpart(p1 intersectiontimes (z6l.b--(x6l.b,y1)));
+tim4=xpart(p1 intersectiontimes (z5l.b--z6l.b));
+(tim5,tim6)=p2 intersectiontimes p5;
+(tim7,tim8)=p2 intersectiontimes subpath(.5,1) of p5;
+(tim9,tim10)=p2 intersectiontimes p6;
+(tim11,tim12)=p2 intersectiontimes subpath(.5,1) of p6;
+z0=directionpoint right of p1;
+filldraw if y0<y5r.b+tiny: subpath(rundy(p3,0),rundy(p3,infinity).zpet) of fi p3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1..p4
+ ..subpath(rundy(p1,tim3),length(p1)) of p1
+ ..subpath(0,rundy(p1,tim4).zpet) of p1..cycle;
+infill subpath(0,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p5,tim6),rundy(p5,tim8).zpet) of p5
+ ..subpath(rundy(p2,tim7),length(p2)) of p2&cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p6,tim12).zpet,rundy(p6,tim10)) of p6..cycle;
+penlabels(1,2,3,4,5,6);
+);
+
iff known chars.greek_Phi:
bskchar "The Greek letter Phi";
beginchar(chars.greek_Phi,13u#,cap_height#,0); uni "0x03A6";
italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
-path p[]; numeric tim[]; oblu:=2oblu;
-pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+usechar;
+math_fit(-.5cap_height#*slant,0);
+endchar;
+
+iff known chars.greek_Phi_BB:
+bskchar "The blackboard-bold Greek letter Phi";
+beginchar(chars.greek_Phi_BB,13u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+oblu:=f_obl;
+bot z104=(x5l,y5l.c); z105=(x6l,y6l.c);
+infill obl(6r,6l,5r)---obl(5r,6r,5l)---z5l...obl(104,5l.c,6l)---obl(105,5l,6l.c)...z6l---cycle;
+labels(100,101,102,103,104,105);
+endchar;
+
+iff known chars.greek_Phi_SS:
+bskchar "The sans-serif Greek letter Phi";
+beginchar(chars.greek_Phi_SS,12u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], thc; oblu:=2oblu;
+thc=if ((substring(0,5) of font_identifier_)="BSKHC"): cap_hair else: cap_curve fi;
+pos1(thc,0); pos2(cap_hair,90); pos3(thc,180); pos4(cap_hair,270);
pos5(cap_stem,0); pos6(cap_stem,0);
lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; .5[y2,y4]=top y1;
y2=1/3x_height if bold_face: +.5cap_hair fi; bot y5=0; top y6=h;
@@ -243,9 +829,8 @@ x5=x6=.5w;
}};
p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
p2:=z1r{up}..z4r..z3r..z2r..{up}cycle;
-p3:=z5l.b{down}..{left}z5l.c..z5l.a{right}..z5+ser_boule*up..
- {right}z5r.a..z5r.c{left}..{up}z5r.b;
-p4:=z6r.b{up}..{right}z6r.c..z6r.a---z6l.a..{right}z6l.c..{down}z6l.b;
+p3:=z5l.b{down}...z5...{up}z5r.b;
+p4:=z6r.b{up}...z6...{down}z6l.b;
p5:=z6l.b--z5l.b;
p6:=z6r.b--z5r.b;
tim1=xpart(p1 intersectiontimes (z5r.b--z6r.b));
@@ -267,12 +852,7 @@ infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2 ..
penlabels(1,2,3,4,5,6);
endchar;
-iff known chars.greek_Psi:
-bskchar "The Greek letter Psi";
-beginchar(chars.greek_Psi,14u#,cap_height#,0); uni "0x03A8";
-italcorr .5[x_height#,cap_height#]*slant;
-adjust_fit(0,0);
-pickup tiny.nib;
+charscription(14u,cap_height,0)(
path p[]; numeric tim[]; oblu:=2oblu;
pos1(cap_stem,0); pos2(cap_stem,0);
pos3(cap_hair,90); pos4(cap_hair,90);
@@ -295,14 +875,83 @@ filldraw subpath(0,rundy(p2,length(p2)).zpet) of p2..p3..
subpath(0,rundy(p6,length(p6)).zpet) of p6..(x1r,y4r+oblu)---p4
---(x1l,y3r+oblu)..subpath(rundy(p1,0),infinity) of p1..cycle;
penlabels(1,2,3,4,5,6,7,8);
+);
+
+iff known chars.greek_Psi:
+bskchar "The Greek letter Psi";
+beginchar(chars.greek_Psi,14u#,cap_height#,0); uni "0x03A8";
+italcorr .5[x_height#,cap_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-.7cap_height#*slant,0);
endchar;
-iff known chars.greek_Omega:
-bskchar "The Greek letter Omega";
-beginchar(chars.greek_Omega,14u#,cap_height#,0); uni "0x03A9";
-italcorr x_height#*slant;
+iff known chars.greek_Psi_BB:
+bskchar "The blackboard-bold Greek letter Psi";
+beginchar(chars.greek_Psi_BB,14u#,cap_height#,0); uni "non";
+italcorr .5[x_height#,cap_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+oblu:=1.25bbw;
+p100=p1;
+p101=p2;
+p102=p5;
+p103=p6;
+z100=bsktouch(p100,bbs*down,subpath(0,1) of p101,up);
+z101=bsktouch(subpath(0,1) of p100,bbs*down,p101,up);
+z102=bsktouch(p102,bbs*up,subpath(0,1) of p103,down);
+z103=bsktouch(subpath(0,1) of p102,bbs*up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,0)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,h)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,0)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,x_height)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,h)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,0)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,h)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim106),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+oblu:=f_obl;
+bot z104=(x1l,y1l.c); z105=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(104,1l.c,2l)---obl(105,1l,2l.c)...z2l---cycle;
+labels(100,101,102,103,104,105);
+endchar;
+
+iff known chars.greek_Psi_SS:
+bskchar "The sans-serif Greek letter Psi";
+beginchar(chars.greek_Psi_SS,13u#,cap_height#,0); uni "non";
+italcorr .5[x_height#,cap_height#]*slant;
adjust_fit(0,0);
pickup tiny.nib;
+path p[]; numeric tim[], thc; oblu:=2oblu;
+thc=if ((substring(0,5) of font_identifier_)="BSKHC"): cap_hair else: cap_curve fi;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_hair,90); pos4(cap_hair,90);
+pos5(thc,0); pos6(thc,180);
+pos7(cap_hair,90); pos8(cap_hair,90);
+x1=x2=.5w; top y2=h; bot y1=0;
+y3l=y4l=top .55bar_height; y5=y6=.5[bar_height,x_height]; top y7r=top y8r=.55[x_height,h];
+x3=x1l; x4=x1r; x3-x5=y5-y3r; x6-x4=y6-y4r;
+lft x7l=u; rt x8r=w-u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+p1:=z3r{left}..{up}z5r..{left}z7r;
+p2:=z7l{right}..{down}z5l..{right}z3l;
+p3:=z1l.b{down}...z1...{up}z1r.b;
+p4:=z2r.b{up}...z2...{down}z2l.b;
+p5:=z4l{right}..{up}z6l..{right}z8l;
+p6:=z8r{left}..{down}z6r..{left}z4r;
+filldraw subpath(0,rundy(p2,length(p2)).zpet) of p2..p3..
+ subpath(rundy(p5,0),infinity) of p5..
+ subpath(0,rundy(p6,length(p6)).zpet) of p6..(x1r,y4r+oblu)---p4
+ ---(x1l,y3r+oblu)..subpath(rundy(p1,0),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+charscription(14u,cap_height,0)(
path p[];
pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
pos5(cap_hair,0); pos6(cap_hair,180);
@@ -322,6 +971,399 @@ filldraw z5'l{z1-z5}..z1l..z4l..z3l..{z6-z3}z6'l..z8f...z8d...z8c..
z3r..z4r..z1r..z5r{z5-z1}..z7l---z9a...z9b--z9r---z9l..
{down}z9l.o&z9l.o..z9c...z9d..z9f..cycle;
penlabels(1,2,3,4,5,5',6,6',7);
+);
+
+iff known chars.greek_Omega:
+bskchar "The Greek letter Omega";
+beginchar(chars.greek_Omega,14u#,cap_height#,0); uni "0x03A9";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,.5bar_height#*slant);
+endchar;
+
+iff known chars.greek_Omega_BB:
+bskchar "The blackboard-bold Greek letter Omega";
+beginchar(chars.greek_Omega_BB,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+numeric tim[];
+oblu:=1.25bbw;
+p100:=z5'l{z1-z5}..z1l..z4l..z3l..{z6-z3}z6'l;
+p101:=z6r{z3-z6}..z3r..z4r..z1r..{z5-z1}z5r;
+z100=bsktouch(subpath(0,1) of p100,bbs*right,p101,left);
+z101=bsktouch(subpath(0,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(2,infinity) of p100,bbs*down,p101,up);
+z103=bsktouch(p100,bbs*left,subpath(0,1) of p101,right);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(x4,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,h+u)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,h+u)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y3)));
+tim106=xpart(p100 intersectiontimes (z103--(w,y103)));
+tim107=xpart(p101 intersectiontimes (z103--(x4,y103)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p100,tim104),rundy(p100,tim106).zpet) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_Omega_SS:
+bskchar "The sans-serif Greek letter Omega";
+beginchar(chars.greek_Omega_SS,14u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_hair,0); pos6(cap_hair,180);
+pos5'(cap_hair,0); pos6'(cap_hair,180);
+pos8(cap_hair,-90); pos9(cap_hair,-90);
+lft x1l=u+o; x3l=w-x1l; y1=y3=x_height;
+.5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+.5[x5,x6]=x2; y5=y6=.5bar_height; x6-x5=.35(x3r-x1r);
+z5'-z5=z6'-z6=o*down;
+x7r=x6l; x7l=x5l; bot y7l=bot y7r=0;
+bot y8r=bot y9r=0; rt x8l=w-u; lft x9l=u;
+filldraw z5'l{z1-z5}..z1l..z4l..z3l..{z6-z3}z6'l..(x7r,y8l)---z8l+cap_stem*left
+ ...z8...z8r+cap_stem*left---z7r..z6r{z3-z6}..z3r..z4r..z1r..z5r{z5-z1}
+ ..z7l---z9r+cap_stem*right...z9...z9l+cap_stem*right---(x7l,y9l)..cycle;
+penlabels(1,2,3,4,5,5',6,6',7,8,9);
+endchar;
+
+charscription(14u,cap_height,0)(
+path p[]; numeric tim[], theta;
+pos0(cap_hair,180); pos1(cap_hair,90); pos3(cap_hair,-90); pos0'(cap_hair,180);
+lft x0r=u; y0=2/3[x_height,h]; top y1r=h+o; bot y3=0; x1=4u; x3=.5w-u;
+y0'=h-y0; x3-x0'=x1-x0;
+y2=x_height; rt x2=w-u-.5cap_curve;
+p0:=z0..z1..z2..{left}z3..z0'; theta=angle(direction 2 of p0)+90; pos2(cap_curve,theta);
+p1:=z0r..z1r..z2r..z3r{left}..z0'r;
+p2:=z0'l..z3l{right}..z2l..z1l..z0l;
+pos4(cap_hair,theta-90); pos5(cap_hair,theta-90);
+z4=p0 intersectionpoint ((0,1/2[x_height,h])--(w,1/2[x_height,h]));
+z5=p0 intersectionpoint ((0,1/2[x_height,bar_height])--(w,1/2[x_height,bar_height]));
+pos6(cap_stem,theta-100); pos7(cap_stem,theta-80);
+pos6'(.5[cap_hair,cap_stem],theta-90); pos7'(.5[cap_hair,cap_stem],theta-90);
+x4-x6=.4w; z6r=z4l+whatever*dir(theta+5);
+z7l=z5r-abs(z6r-z4l)*dir(theta+5);
+z6'l=z6l+1/3(z4l-z6l)+.5hair*dir(theta-90);
+z7'r=z7r+1/3(z5r-z7r)+.5hair*dir(theta+90);
+p3:=reverse(z4l---z6'l..z6l&z6l..z6r..z6'r---z4r);
+p4:=z5r---z7'r..z7r&z7r..z7l..z7'l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(0,0',1,2,3,4,5,6,6',7,7');
+);
+
+iff known chars.greek_Sampi:
+bskchar "The Greek letter Sampi";
+beginchar(chars.greek_Sampi,14u#,cap_height#,0); uni "0x03E0";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-x_height#*slant,0);
+endchar;
+
+iff known chars.greek_Sampi_BB:
+bskchar "The blackboard-bold Greek letter Sampi";
+beginchar(chars.greek_Sampi_BB,14u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100=subpath(1,3) of p1;
+p101=subpath(1,3) of p2;
+z100=bsktouch(subpath(0,1) of p100,bbs*down,p101,up);
+z101=bsktouch(p100,bbs*up,subpath(0,1) of p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,2h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3r-u-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.greek_Sampi_SS:
+bskchar "The sans-serif Greek letter Sampi";
+beginchar(chars.greek_Sampi_SS,13u#,cap_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+pos0(cap_hair,180); pos1(cap_hair,90); pos3(cap_hair,-90); pos0'(cap_hair,180);
+lft x0r=u; y0=2/3[x_height,h]; top y1r=h+o; bot y3=0; x1=4u; x3=.5w-u;
+y0'=h-y0; x3-x0'=x1-x0;
+y2=x_height; rt x2=w-u-.5cap_curve;
+p0:=z0..z1..z2..{left}z3..z0'; theta=angle(direction 2 of p0)+90; pos2(cap_curve,theta);
+p1:=z0r..z1r..z2r..z3r{left}..z0'r;
+p2:=z0'l..z3l{right}..z2l..z1l..z0l;
+pos4(cap_hair,theta-90); pos5(cap_hair,theta-90);
+z4=p0 intersectionpoint ((0,1/2[x_height,h])--(w,1/2[x_height,h]));
+z5=p0 intersectionpoint ((0,1/2[x_height,bar_height])--(w,1/2[x_height,bar_height]));
+pos6(cap_hair,theta-100); pos7(cap_hair,theta-80);
+pos6'(cap_hair,theta-90); pos7'(cap_hair,theta-90);
+x4-x6=.4w; z6r=z4l+whatever*dir(theta+10);
+z7l=z5r-abs(z6r-z4l)*dir(theta+5);
+z6'l=z6l+1/3(z4l-z6l);
+z7'r=z7r+1/3(z5r-z7r);
+p3:=reverse(z4l---z6l&z6l..z6r---z4r);
+p4:=z5r---z7r&z7r..z7l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(0,0',1,2,3,4,5,6,6',7,7');
+endchar;
+
+charscription(14u,cap_height,0)(
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0); pos5(cap_stem,0); pos6(cap_stem,0);
+bot y1=bot y3=bar_height; top y2=top y4=h; bot y5=0; y6=y2l.c;
+lft x1l=lft x2l=2u; rt x3r=rt x4r=w-2u; x5=x6=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_br(3r);
+cap_serifs_bl(5l); cap_serifs_br(5r);
+{{ numeric old_jut; old_jut:=cap_jut; save cap_jut; cap_jut:=.75old_jut;
+ cap_serifs_bl(3l); cap_serifs_br(1r);
+}};
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a
+ ..z1r.c{left}..z1r.b---z2r.b..z2r.c---obl(6l,2r.c,5l)---z5l.b..{left}z5l.c
+ ..z5l.a{right}..z5+ser_boule*up..{right}z5r.a..z5r.c{left}..z5r.b
+ ---obl(6r,5r,4l.c)---z4l.c..z4l.b---z3l.b{down}..{left}z3l.c..z3l.a{right}
+ ..z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c
+ ..z4r.a---z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6);
+);
+
+iff known chars.greek_Varsampi:
+bskchar "The Archaic Greek letter Sampi";
+beginchar(chars.greek_Varsampi,14u#,cap_height#,0); uni "0x0372";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+math_fit(-bar_height#*slant,u#);
+endchar;
+
+iff known chars.greek_Varsampi_BB:
+bskchar "The blackboard-bold Archaic Greek letter Sampi";
+beginchar(chars.greek_Varsampi_BB,14u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+bot z102=(x3r,y3r.c); top z103=(x4r,y4r.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(102,3r.c,4r)---obl(103,3r,4r.c)...z4r---cycle;
+infill ifobl(6r,6l,5r,5l,,)---ifobl(5l,5r,6l,6r,,)--cycle;
+endchar;
+
+iff known chars.greek_Varsampi_SS:
+bskchar "The sans-serif Archaic Greek letter Sampi";
+beginchar(chars.greek_Varsampi_SS,14u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric thc;
+thc=if ((substring(0,5) of font_identifier_)="BSKHC"): cap_hair else: cap_stem fi;
+pos1(thc,0); pos2(thc,0);
+pos3(thc,0); pos4(thc,0); pos5(cap_stem,0); pos6(cap_stem,0);
+bot y1=bot y3=bar_height; top y2=top y4=h; bot y5=0; y6=y2l.c;
+lft x1l=lft x2l=2u; rt x3r=rt x4r=w-2u; x5=x6=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_br(3r);
+cap_serifs_bl(5l); cap_serifs_br(5r);
+{{ numeric old_jut; old_jut:=cap_jut; save cap_jut; cap_jut:=.75old_jut;
+ cap_serifs_bl(3l); cap_serifs_br(1r);
+}};
+filldraw z1l.b{down}...z1...z1r.b---z2r.b..z2r.c---obl(6l,2r.c,5l)---z5l.b...z5
+ ...z5r.b---obl(6r,5r,4l.c)---z4l.c..z4l.b---z3l.b...z3...z3r.b---z4r.b
+ ...z4---z2...z2l.b---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+charscription(14u,cap_height,desc_depth)(
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_stem,0); pos6(cap_stem,0);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+x5=x6=x2; y5=y2; bot y6=-d;
+cap_serifs_bl(6l); cap_serifs_br(6r);
+p0=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1=z5l---z6l.b..{left}z6l.c..{right}z6l.a..z6+ser_boule*up..{right}z6r.a..z6r.c{left}..z6r.b---z5r;
+(tim0,tim1)=p0 intersectiontimes subpath(0,1) of p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+);
+
+iff known chars.greek_Qoppa:
+bskchar "The Archaic Greek letter Qoppa";
+beginchar(chars.greek_Qoppa,14u#,cap_height#,desc_depth#); uni "0x03D8";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-.5cap_height#*slant,ic#-2u#);
+endchar;
+
+iff known chars.greek_Qoppa_BB:
+bskchar "The blackboard-bold Archaic Greek letter Qoppa";
+beginchar(chars.greek_Qoppa_BB,14u#,cap_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+bot z104=(x6l,y6l.c);
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+oblu:=f_obl;
+infill ifobl(5l,5r,6l,6r,,)---obl(6r,5r,6l)---z6l...obl(104,6l.c,5l)---cycle;
+labels(100,101,102,103,104);
+endchar;
+
+iff known chars.greek_Qoppa_SS:
+bskchar "The sans-serif Archaic Greek letter Qoppa";
+beginchar(chars.greek_Qoppa_SS,14u#,cap_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+pos5(cap_stem,0); pos6(cap_stem,0);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+x5=x6=x2; y5=y2r; bot y6=-d;
+cap_serifs_bl(6l); cap_serifs_br(6r);
+p0=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1=z5l---z6l.b..z6..z6r.b---z5r;
+(tim0,tim1)=p0 intersectiontimes subpath(0,1) of p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+charscription(13.3u,cap_height,.75desc_depth)(
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(cap_stem,90); pos3(cap_hair,180); pos4(cap_hair,270);
+pos6(cap_stem,90); pos7(cap_hair,0); pos8(cap_stem,-90); pos8'(.9cap_stem,-90);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+y6=y2; rt x7r=w-u; bot y8r=-d; x7-x6=.5(y6-y8); x8=.5[x2,x6]; y7=.5[y6,y8];
+z8'r=z8r+cap_stem*right;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+z5'=((.5w,y3+.2h)--(2w,y3+.2h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
+z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3);
+z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1);
+filldraw subpath(-1,tim1) of reverse p0..z5'a--z5'b---z5'e..subpath (tim3,5) of p1
+ ---z6l..{down}z7l..z8'l..z8l..z8r---z8'r..{up}z7r..z6r---cycle;
+penlabels(1,2,3,4,6,7,8,8'); labels(5,5',5'a,5'b,5'c,5'd,5'e);
+);
+
+iff known chars.greek_Stigma:
+bskchar "The Greek letter Stigma";
+beginchar(chars.greek_Stigma,13.3u#,cap_height#,.75desc_depth#); uni "0x03DA";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-.5cap_height#*slant,0);
+endchar;
+
+iff known chars.greek_Stigma_BB:
+bskchar "The blackboard-bold Greek letter Stigma";
+beginchar(chars.greek_Stigma_BB,13.3u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=subpath(-1,1) of p0---z6r..{down}z7r;
+p101:=reverse (subpath(-1,1) of p1---z6l..{down}z7l);
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(p100,bbs*left,subpath(0,1) of p101,right);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(w,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(0,y101)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.greek_Stigma_SS:
+bskchar "The sans-serif Greek letter Stigma";
+beginchar(chars.greek_Stigma_SS,13.3u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(cap_stem,90); pos4(cap_hair,270);
+pos3(if ((substring(0,5) of font_identifier_)="BSKHC"):1.2\\fi cap_hair,180);
+pos6(cap_stem,90); pos7(cap_hair,0); pos8(cap_stem,-90); pos8'(.9cap_stem,-90);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+y6=y2; rt x7r=w-u; bot y8r=-d; x7-x6=.5(y6-y8); x8=.5[x2,x6]; y7=.5[y6,y8];
+z8'r=z8r+if ((substring(0,5) of font_identifier_)="BSKHC"):.5\\ fi cap_stem*right;
+if ((substring(0,5) of font_identifier_)="BSKHC"):
+ p0:=z1r{down}..z2r..z3r..{left}z4r..{down}cycle;
+ p1:=z1l{down}..z2l..z3l..{left}z4l..{down}cycle;
+else:
+ p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+ p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+fi
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
+tim3= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p1);
+filldraw subpath(-1,tim1) of reverse p0..subpath (tim3,5) of p1
+ ---z6l..{down}z7l..z8'l..z8l..z8r---z8'r..{up}z7r..z6r---cycle;
+penlabels(1,2,3,4,6,7,8,8');
endchar;
iff known chars.greek_alpha:
@@ -352,6 +1394,78 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p0,tim1),infinity)
..subpath(rundy(p1,(tim5,.5bar_height)),infinity) of p1..cycle;
infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle;
penlabels(0,1,2,3,4,5,6,7,8); labels(8',8'');
+math_fit(mft,.5u#);
+endchar;
+
+iff known chars.greek_alpha_BB:
+bskchar "The blackboard-bold Greek letter alpha";
+beginchar(chars.greek_alpha_BB,10.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,-90); pos1(.5[stem,hair],0); pos2(.5[stem,hair],0);
+pos3(hair,-90); pos4(cap_stem,180); pos5(hair,90);
+pos6(hair,0); pos7(hair,90); pos8(stem,180);
+top y0l=h; x0=w-u;
+rt x1r=w-1.5u; x2=x1-stem; top y1=h-u; y2=.5bar_height;
+lft x3=.5x2; lft x5=.55x1; bot y3r=-o; top y5r=h+o;
+lft x4r=u; y4=bar_height; y6=.55bar_height; x6=x2;
+x7=w-2u; bot y7l=-o; lft x8l=w-u; y8=.75curve;
+z8'=z8+.2stem*right+o*up; z8''=z8+.5(stem-currentbreadth)*dir225;
+p0=z0r{left}..z1r...z2r..z3r..z4r..z5r..z6r..{right}z7r..z8''..z8r;
+p1=z8r..z8'..z8l..z7l{left}..z6l..z5l..z4l..z3l..z2l---z1l..z0l;
+(tim0,tim1-5)=p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3)=p1 intersectiontimes p0;
+(tim4-4,tim5-6)=subpath(4,infinity) of p0 intersectiontimes subpath (6,infinity) of p1;
+(tim6,tim7-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,.5bar_height)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,.5bar_height)),infinity) of p1..cycle;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle;
+p100=subpath(3,5) of p0;
+p101=subpath(5,7) of p1;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3r-u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y5r+u+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(8',8'',100,101);
+endchar;
+
+iff known chars.greek_alpha_SS:
+bskchar "The sans-serif Greek letter alpha";
+beginchar(chars.greek_alpha_SS,10.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,0); pos1(.5[stem,hair],0); pos2(.5[stem,hair],0);
+pos3(hair,-90); pos4(curve,180); pos5(hair,90);
+pos6(hair,0); pos7(hair,0); pos8(stem,180);
+top y0l=h; x0r=w-u;
+rt x1r=w-1.5u; x2=x1-stem; top y1=h-u; y2=.5bar_height;
+x3=.5x2; x5=.55x1; bot y3r=-o; top y5r=h+o;
+lft x4r=u; y4=bar_height; y6=.75bar_height; x6=x2;
+x7=w-u; bot y7l=-o; lft x8l=w-u; y8=.75curve;
+z8'=z8+.2stem*right+o*up; z8''=z8+.5(stem-currentbreadth)*dir225;
+p0=z0r..z1r...z2r..z3r..z4r..z5r..z6r..{z7-z6}z7r;
+p1=z7l{z6-z7}..z6l..z5l..z4l..z3l..z2l---z1l..z0l;
+(tim0,tim1-5)=p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3)=p1 intersectiontimes p0;
+(tim4-4,tim5-4)=subpath(4,infinity) of p0 intersectiontimes subpath (3,infinity) of p1;
+(tim6,tim7-4)=subpath(0,3) of p1 intersectiontimes subpath (4,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,.5bar_height)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,.5bar_height)),infinity) of p1..cycle;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(8',8'');
endchar;
iff known chars.greek_beta:
@@ -386,6 +1500,90 @@ filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
oblu:=f_obl;
infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
penlabels(0,1,2,3,4,5,5',5'',6,7,8); labels(8',8'');
+math_fit(desc_depth#*slant,ic#);
+endchar;
+
+iff known chars.greek_beta_BB:
+bskchar "The blackboard-bold Greek letter beta";
+beginchar(chars.greek_beta_BB,9.5u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(.8cap_stem,180); pos2(.8cap_stem,180);
+pos3(hair,90); pos4(stem,0); pos5(hair,180); pos5'(hair,120); pos5''(.5[hair,stem],-30);
+pos6(cap_stem,-30); pos7(hair,-90); pos8(stem,180);
+lft x1r=lft x2r=u; y1=-d; y2=.5[h,x_height];
+x3=.5w-stem; top y3r=h+o; rt x4r=w-2.5u; rt x6r=w-u;
+y5=.25[x_height,bar_height]; y4=.5[x_height,h]; y6=.5[y5,0];
+x5=x3; x7=.5[x2l,x6]; bot y7r=-o;
+x5'=x5''=.5[x4,x5]; .5[y5',y5'']=y5; y5'-y5''=.5(x4-x5);
+x8r=x2l+stem; y8=.25bar_height;
+z8'=z8+.2stem*right+o*down; z8''=z8+.5(stem-currentbreadth)*dir135;
+p0=z1r---z2r..z3r..z4r..z5''r..z5r..z5'r..z6r..{left}z7r..z8r..z8''..z8l{down}..z8';
+p1=z8'..z7l{right}..z6l..z5'l..z5l..z5''l..z4l..z3l..z2l---z1l;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,infinity) of p1;
+tim4-3=xpart(subpath(3,5) of p0 intersectiontimes p1);
+(tim5-6,tim6-5)=subpath(6,infinity) of p0 intersectiontimes subpath (5,infinity) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,infinity) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),infinity) of p1..z1+tiny*down..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+p100=subpath(0,2) of p0;
+p101=subpath(7,infinity) of p1;
+p102=subpath(5,infinity) of p0;
+p103=subpath(0,4) of p1;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3r+u)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p102 intersectiontimes (z101--(x101,-d)));
+tim103=xpart(p103 intersectiontimes (z101--(x101,y6)));
+oblu:=.8bbw;
+infill subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101..z1+tiny*down..cycle;
+infill subpath(rundy(p0,tim1),rundy(p0,tim102+5).zpet) of p0
+ ..subpath(rundy(p103,tim103),rundy(p103,tim2).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,5,5',5'',6,7,8); labels(8',8'',100,101);
+endchar;
+
+iff known chars.greek_beta_SS:
+bskchar "The sans-serif Greek letter beta";
+beginchar(chars.greek_beta_SS,9u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,180); pos2(hair,180);
+pos3(hair,90); pos4(stem,0); pos5(hair,180); pos5'(hair,120); pos5''(.5[hair,stem],-30);
+pos6(curve,-30); pos7(hair,-90); pos8(hair,-90);
+lft x1r=lft x2r=u; y1=-d; y2=.5[h,x_height];
+x3=.5w-stem; top y3r=h+o; rt x4r=w-2.5u; rt x6r=w-u;
+y5=.25[x_height,bar_height]; y4=.5[x_height,h]; y6=.5[y5,0];
+x5=x3; x7=.5[x2l,x6]; bot y7r=-o;
+x5'=x5''=.5[x4,x5]; .5[y5',y5'']=y5; y5'-y5''=.5(x4-x5);
+x8r=x2l+stem; y8r=y7r;
+z8'=z8+.2stem*right+o*down; z8''=z8+.5(stem-currentbreadth)*dir135;
+p0=z1r---z2r..z3r..z4r..z5''r..z5r..z5'r..z6r..{left}z7r..z8r..{right}z8l;
+p1=z8l---z7l..z6l..z5'l..z5l..z5''l..z4l..z3l..z2l---z1l;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,infinity) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,infinity) of p1;
+tim4-3=xpart(subpath(3,5) of p0 intersectiontimes p1);
+(tim5-6,tim6-5)=subpath(6,infinity) of p0 intersectiontimes subpath (5,infinity) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,infinity) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+penlabels(0,1,2,3,4,5,5',5'',6,7,8); labels(8',8'');
endchar;
iff known chars.greek_beta_curved:
@@ -420,6 +1618,122 @@ filldraw z0r..subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
oblu:=f_obl;
infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
penlabels(0,1,2,3,4,5,5',5'',6,7,8); labels(8',8'');
+math_fit(desc_depth#*slant,ic#);
+endchar;
+
+iff known chars.greek_varbeta:
+bskchar "The Greek letter beta---alternative";
+beginchar(chars.greek_varbeta,9.5u#,asc_height#,0); uni "0x03D0";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,90); pos3(hair,0); pos4(hair,180);
+pos4'(hair,120); pos4''(.5[hair,stem],-30);
+pos5(curve,-30); pos6(hair,-90);
+lft x1r=u; y1=.5h;
+x2=x4=.5w-.5stem; top y2r=h+o; rt x3r=w-2.5u; rt x5r=w-u;
+y4=.25[x_height,bar_height]; y3=.5[x_height,h]; y5=.5[y4,0];
+x6=.5[x1l,x5]; bot y6r=-o;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x3-x4);
+p0=z1r..z2r..z3r..z4''r..z4r..z4'r..z5r..{left}z6r..cycle;
+p1=z1l..z6l{right}..z5l..z4'l..z4l..z4''l..z3l..z2l..cycle;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,length p0) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,length p1) of p1;
+tim4-2=xpart(subpath(2,4) of p0 intersectiontimes p1);
+(tim5-5,tim6-4)=subpath(5,length p0) of p0 intersectiontimes subpath (4,length p1) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,length p1) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),length p0) of p0&cycle;
+infill subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),length p1) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6);
+math_fit(-.5asc_height#*slant,ic#);
+endchar;
+
+iff known chars.greek_varbeta_BB:
+bskchar "The blackboard-bold Greek letter beta---alternative";
+beginchar(chars.greek_varbeta_BB,10u#,asc_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,180); pos2(hair,90); pos3(hair,0); pos4(hair,180);
+pos4'(hair,120); pos4''(.5[hair,stem],-30);
+pos5(cap_stem,-30); pos6(hair,-90);
+lft x1r=u; y1=.5h;
+x2=x4=.5w; top y2r=h+o; rt x3r=w-2.5u; rt x5r=w-u;
+y4=.25[x_height,bar_height]; y3=.5[x_height,h]; y5=.5[y4,0];
+x6=.5[x1l,x5]; bot y6r=-o;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x3-x4);
+p0=z1r..z2r..z3r..z4''r..z4r..z4'r..z5r..{left}z6r..cycle;
+p1=z1l..z6l{right}..z5l..z4'l..z4l..z4''l..z3l..z2l..cycle;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,length p0) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,length p1) of p1;
+tim4-2=xpart(subpath(2,4) of p0 intersectiontimes p1);
+(tim5-5,tim6-4)=subpath(5,length p0) of p0 intersectiontimes subpath (4,length p1) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,length p1) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),length p0) of p0&cycle;
+infill subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),length p1) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+p100=subpath(-1,1) of p0;
+p101=subpath(-1,1) of p1;
+p102=subpath(5,infinity) of p0;
+p103=subpath(0,3) of p1;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,2h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6r-u-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,-d)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y5)));
+oblu:=.8bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+infill subpath(rundy(p0,tim1),rundy(p0,tim104+5).zpet) of p0
+ ..subpath(rundy(p103,tim105),rundy(p103,tim2).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6); labels(100,101,102);
+endchar;
+
+iff known chars.greek_varbeta_SS:
+bskchar "The sans-serif Greek letter beta---alternative";
+beginchar(chars.greek_varbeta_SS,9.5u#,asc_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,90); pos3(hair,0); pos4(hair,180);
+pos4'(hair,120); pos4''(.5[hair,stem],-30);
+pos5(curve,-30); pos6(hair,-90);
+lft x1r=u; y1=.5h;
+x2=x4=.5w-.5stem; top y2r=h+o; rt x3r=w-2.5u; rt x5r=w-u;
+y4=.25[x_height,bar_height]; y3=.5[x_height,h]; y5=.5[y4,0];
+x6=.5[x1l,x5]; bot y6r=-o;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x3-x4);
+p0=z1r..z2r..z3r..z4''r..z4r..z4'r..z5r..{left}z6r..cycle;
+p1=z1l..z6l{right}..z5l..z4'l..z4l..z4''l..z3l..z2l..cycle;
+(tim0,tim1-5)=subpath (0,4) of p0 intersectiontimes subpath (5,length p0) of p0;
+(tim2,tim3-4)=subpath(0,3) of p1 intersectiontimes subpath(4,length p1) of p1;
+tim4-2=xpart(subpath(2,4) of p0 intersectiontimes p1);
+(tim5-5,tim6-4)=subpath(5,length p0) of p0 intersectiontimes subpath (4,length p1) of p1;
+tim7=xpart(subpath(0,3) of p1 intersectiontimes subpath (4,length p1) of p1);
+filldraw subpath(0,rundy(p0,(tim0,hair)).zpet) of p0
+ ..subpath(rundy(p0,(tim1,hair)),length p0) of p0&cycle;
+infill subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p1,tim6),length p1) of p1..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p1,tim6).zpet,rundy(p1,tim7)) of p1..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6);
endchar;
iff known chars.greek_gamma:
@@ -448,7 +1762,63 @@ filldraw subpath(0,rundy(p0,(tim0,.7(y7r-y2))).zpet) of p0
..subpath(rundy(p0,tim3),rundy(p0,tim4).zpet) of p0
..subpath(rundy(p1,tim5),infinity) of p1
&z0l..z0'..cycle;
-;
+penlabels(0,1,2,3,4,5,6,7); labels(0');
+math_fit(-bar_height#*slant-.5u#,0);
+endchar;
+
+iff known chars.greek_gamma_BB:
+bskchar "The blackboard-bold Greek letter gamma";
+beginchar(chars.greek_gamma_BB,11u#,x_height#,desc_depth#); uni "0x213D";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,150);
+pos1(stem,90); pos2(hair,0); pos3(hair,0); pos4(hair,-90); pos5(hair,180);
+pos6(hair,180); pos7(hair,135);
+x1=.5[u,x2]; top y1r=h+o; lft x0r=u; y0=bar_height; z0'=(x0r,y0l);
+x2=.75w; x3=w-2.5u; y3=-3/4d; y2=.5bar_height; bot y4r=-d; y3-y4=2(x3-x4);
+.3[x5,x3]=x4; y5=y3;
+x6r=x2r; y6=y2;
+top y7r=h; rt x7=w-u;
+p0=z0r..z1r..z2r...z3r..z4r..z5r..z6r..{dir45}z7r;
+p1=z7l{dir-135}..z6l..z5l..z4l..z3l...z2l..z1l..z0l;
+(tim0,tim1-5)=subpath(0,3) of p0 intersectiontimes subpath(5,infinity) of p0;
+(tim2,tim3-1)=subpath(0,2) of p1 intersectiontimes subpath (1,3) of p0;
+(tim4-4,tim5-4)=subpath(4,infinity) of p0 intersectiontimes subpath(4,infinity) of p1;
+filldraw subpath(0,rundy(p0,(tim0,.7(y7r-y2))).zpet) of p0
+ ..subpath(rundy(p0,(tim1,.7(y7r-y2))),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(4,rundy(p0,tim4).zpet) of p0 shifted ((cap_stem-hair-currentbreadth)*left)
+ ..z1l..z0l&z0l..z0'..cycle;
+infill subpath(rundy(p1,1),rundy(p1,tim2).zpet) of p1..subpath(rundy(p0,tim3),4) of p0..subpath(4,rundy(p0,6).zpet) of p0 shifted ((cap_stem-hair-currentbreadth)*left)..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0');
+endchar;
+
+iff known chars.greek_gamma_SS:
+bskchar "The sans-serif Greek letter gamma";
+beginchar(chars.greek_gamma_SS,11u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(hair,150);
+pos1(stem,90); pos2(hair,0); pos3(hair,0); pos4(hair,-90); pos5(hair,180);
+pos6(hair,180); pos7(hair,135);
+x1=.5[u,x2]; top y1r=h+o; lft x0r=u; y0=bar_height; z0'=(x0r,y0l);
+x2=.75w; x3r=x6l; y3=-3/4d; y2=.5bar_height; bot y4r=-d; y3-y4=2(x3-x4);
+.3[x5,x3]=x4; y5=y3;
+x6r=x2r; y6=y2;
+top y7r=h; rt x7=w-u;
+p0=z0r..z1r..z2r...z3r..z4r..z5r..z6r..{dir45}z7r;
+p1=z7l{dir-135}..z6l..z5l..z4l..z3l...z2l..z1l..z0l;
+(tim0,tim1-5)=subpath(0,3) of p0 intersectiontimes subpath(5,infinity) of p0;
+(tim2,tim3-1)=subpath(0,2) of p1 intersectiontimes subpath (1,3) of p0;
+(tim4-4,tim5-4)=subpath(4,infinity) of p0 intersectiontimes subpath(4,infinity) of p1;
+filldraw subpath(0,rundy(p0,(tim0,.7(y7r-y2))).zpet) of p0
+ ..subpath(rundy(p0,(tim1,.7(y7r-y2))),infinity) of p0
+ ..subpath(0,rundy(p1,1).zpet) of p1---z3r..z4r...z5r---z2l
+ ..subpath(rundy(p1,5),infinity) of p1..cycle;
penlabels(0,1,2,3,4,5,6,7); labels(0');
endchar;
@@ -463,7 +1833,7 @@ pos0(stem,150);
pos1(hair,90); pos2(stem,0); pos3(.9stem,0); pos4(hair,-90); pos5(hair,180);
pos6(hair,180); pos7(hair,90); pos8(stem,0);
x1=.5[u,x2]; top y1r=h+o; lft x0r=u; y0=y1-stem; z0'=(x0r,y0l);
-x3=x2=.5w-.5stem; y3=-2/3d; y2=bar_height; bot y4r=-d; y3-y4=(x3-x4);
+x3=x2=.5w-.5stem; y3=-2/3d; y2=bar_height; bot y4r=-d; y3-y4=4/3(x3-x4);
.3[x5,x3]=x4; y5=-1/2d; x6=.35[x2l,x8]; y6=y2;
x7=x8-stem; top y7r=.25[h,bar_height]; rt x8r=w-u; y8=y7-stem;
z8'=z8+.2stem*down+o*left; z8''=z8+.5(stem-currentbreadth)*dir45;
@@ -482,6 +1852,67 @@ filldraw subpath(0,rundy(p0,(tim0,y7r-y2)).zpet) of p0
oblu:=x3l-x5;
infill subpath(rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..cycle;
penlabels(0,1,2,3,4,5,6,7,8); labels(0',8',8'');
+math_fit(-.5u#,ic#-3u#);
+endchar;
+
+iff known chars.greek_digamma:
+bskchar "The Greek letter digamma";
+beginchar(chars.greek_digamma,9u#,x_height#,desc_depth#); uni "0x03DD";
+italcorr x_height#*slant-.5u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(hair,0); pos2(hair,0); pos3(curve,100);
+pos3'(stem,90); pos4(stem,90); pos5(curve,90); pos5'(stem,80);
+lft x1l=lft x2l=u; bot y1=-d; top y2=h-hair; top y3r=top y3'r=h; rt x3l=w-1.25u;
+x3'=1/3[x2,x3]; x4=x1r; y4=.25bar_height; y5'r=y4r; y5=y5';
+x5-x4=.85(x3-x2); x5'=1/3[x4,x5];
+y2r:=y2r-stem+currentbreadth;
+bskpoints(1,2,0,hair);
+filldraw z1l---obl(2l,1l,3'r)---z3'r..{dir-10}z3r..{dir200}z3l..z3'l
+ ---obl(2r,3'l,1r)---obl(4r,2r,5'r)---z5'r..{right}z5r..z5l{dir190}
+ ..z5'l---obl(4l,5'l,1r)---z1rr..cycle;
+penlabels(1,2,3,3',4,5,5'); labels(1rr);
+math_fit(0,-.5u#);
+endchar;
+
+iff known chars.greek_digamma_BB:
+bskchar "The blackboard-bold Greek letter digamma";
+beginchar(chars.greek_digamma_BB,9.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(curve,100);
+pos3'(stem,90); pos4(stem,90); pos5(curve,90); pos5'(stem,80);
+lft x1l=lft x2l=u; bot y1=-d; top y2=h-hair; top y3r=top y3'r=h; rt x3l=w-1.25u;
+x3'=1/3[x2,x3]; x4=x1r; y4=.25bar_height; y5'r=y4r; y5=y5';
+x5-x4=.85(x3-x2); x5'=1/3[x4,x5];
+y2r:=y2r-stem+currentbreadth;
+bskpoints(1,2,0,hair);
+filldraw z1l---obl(2l,1l,3'r)---z3'r..{dir-10}z3r..{dir200}z3l..z3'l
+ ---obl(2r,3'l,1r)---obl(4r,2r,5'r)---z5'r..{right}z5r..z5l{dir190}
+ ..z5'l---obl(4l,5'l,1r)---z1rr..cycle;
+penlabels(1,2,3,3',4,5,5'); labels(1rr);
+z100=(x2r,y2);
+infill ifobl(2l,2r,1l,1r,,)---z1rr..z1l---cycle;
+endchar;
+
+iff known chars.greek_digamma_SS:
+bskchar "The sans-serif Greek letter digamma";
+beginchar(chars.greek_digamma_SS,9u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(hair,0); pos2(hair,0); pos3(curve,100);
+pos3'(stem,90); pos4(stem,90); pos5(curve,90); pos5'(stem,80);
+lft x1l=lft x2l=u; bot y1=-d; top y2=h-.2hair; top y3r=top y3'r=h; rt x3l=w-1.25u;
+x3'=1/3[x2,x3]; x4=x1r; y4=.25bar_height; y5'r=y4r; y5=y5';
+x5-x4=.85(x3-x2); x5'=1/3[x4,x5];
+y2r:=y2r-stem+currentbreadth;
+bskpoints(1,2,0,hair);
+filldraw z1l---obl(2l,1l,3'r)---z3'r..{dir-10}z3r..{dir200}z3l..z3'l
+ ---obl(2r,3'l,1r)---obl(4r,2r,5'r)---z5'r..{right}z5r..z5l{dir190}
+ ..z5'l---obl(4l,5'l,1r)---z1rr..cycle;
+penlabels(1,2,3,3',4,5,5'); labels(1rr);
endchar;
iff known chars.greek_delta:
@@ -506,6 +1937,77 @@ tim1-5=xpart(subpath(5,infinity) of p1 intersectiontimes (z0--(x4,y0)));
filldraw subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle;
infill z1r{up}..z4r..z5l..z2r..{up}cycle;
penlabels(1,2,3,4,5,6,7,8,9); labels(9',9'');
+math_fit(mft,u#);
+endchar;
+
+iff known chars.greek_delta_BB:
+bskchar "The blackboard-bold Greek letter delta";
+beginchar(chars.greek_delta_BB,9.5u#,asc_height#,0); uni "non";
+italcorr .5[x_height#,asc_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270); pos5(hair,180);
+pos6(.8cap_stem,180); pos7(hair,180); pos8(hair,90); pos9(stem,0);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x1,x3]=lft x2; x4=x2-stem;
+bot y2l=-o; y4l=.9x_height; z5l=z3r; y6=x_height; x6=.25[x3,x4];
+y7=h-curve; x7=x4; top y8r=h+o; x8=.5[x4,x6];
+rt x9r=w-u; y9''-y8r=2/3(x8-x9);
+z9'=z9+.2stem*down+o*left; z9''=z9+.5(stem-currentbreadth)*dir45;
+p0=z3r..z6r..z7r..{right}z8r..z9''..z9r{down}..z9'..z9l..{left}z8l;
+p1=z8l{left}....z7l..z6l..z3l..z2l..{up}z1l..z4l..z5l;
+z0=bsktouch(subpath(0,2) of p0,left,subpath(5,infinity) of p1,right);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z0--(w,y0)));
+tim1-5=xpart(subpath(5,infinity) of p1 intersectiontimes (z0--(x4,y0)));
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+infill z1r{up}..z4r..z5l..z2r..{up}cycle;
+p100=subpath(4,6) of p1;
+p101=subpath(0,3) of (z4r..{down}z1r..z2r..z5l..cycle);
+p102=subpath(1,4) of p1;
+p103=subpath(0,2) of p0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,up,p101,down);
+z103=bsktouch(p102,left,p103,right);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y4l+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(if boldmath:x2 else:x102 fi,y2l-5)));
+tim105=xpart(p101 intersectiontimes (z102--(if boldmath:x2 else:x102 fi,y1)));
+tim106=xpart(p102 intersectiontimes (z103--(w,y103)));
+tim107=xpart(p103 intersectiontimes (z103--(0,y103)));
+tim108=xpart(p103 intersectiontimes ((x2,y3)--(w,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim106),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p101,tim105),rundy(p101,3).zpet) of p101
+ ..subpath(rundy(p103,tim108),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(9',9'',100,101,102,103);
+endchar;
+
+iff known chars.greek_delta_SS:
+bskchar "The sans-serif Greek letter delta";
+beginchar(chars.greek_delta_SS,9u#,asc_height#,0); uni "non";
+italcorr .5[x_height#,asc_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270); pos5(hair,180);
+pos6(stem,180); pos7(hair,180); pos8(hair,90); pos9(hair,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x1,x3]=x2; x4=x2-stem;
+bot y2l=-o; y4l=.9x_height; z5l=z3r; y6=x_height; x6=.25[x3,x4];
+y7=h-curve; x7=x4; top y8r=h+o; x8=.5[x4,x6];
+rt x9r=w-u; top y9r=bot y8r;
+p0=z3r..z6r..z7r..{right}z8r---z9r..z9l---z8l;
+p1=z8l{left}....z7l..z6l..z3l..z2l..{up}z1l..z4l..z5l;
+z0=bsktouch(subpath(0,2) of p0,left,subpath(5,infinity) of p1,right);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z0--(w,y0)));
+tim1-5=xpart(subpath(5,infinity) of p1 intersectiontimes (z0--(x4,y0)));
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+infill z1r{up}..z4r..z5l..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
endchar;
iff known chars.greek_epsilon:
@@ -533,6 +2035,163 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
..subpath(rundy(p0,tim3),infinity) of p0..cycle;
penlabels(0,1,2,3,4,5,6,7); labels(1',1'',7ll);
+math_fit(mft,ic#-u#);
+endchar;
+
+iff known chars.greek_epsilon_BB:
+bskchar "The blackboard-bold Greek letter epsilon";
+beginchar(chars.greek_epsilon_BB,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(hair,90); pos3(cap_stem,180);
+pos4(hair,-90); pos5(vair,-45);
+pos6(hair,90); pos7(hair,90);
+rt x1=w-u; top y2r=h+o; x2=.5w+u; lft x3r=u;
+y3=bar_height-.5stem; y1=.35[x_height,bar_height];
+x4=x2+o; bot y4r=-o;
+rt x5=w-u; y5=.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+z1'=z1+.2stem*down+o*left; z1''=z1+.5(stem-currentbreadth)*dir45;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{up}..z2l..{down}z1l..z1'..z1r..z1''..z2r..{down}z3r..z4r..z5r;
+p1=z6l---z7ll..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p1 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0..cycle;
+p100=subpath(8,10) of p0;
+p101=subpath(1,3) of p0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4r-u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2r+u+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(1',1'',7ll,100,101);
+endchar;
+
+iff known chars.greek_epsilon_SS:
+bskchar "The sans-serif Greek letter epsilon";
+beginchar(chars.greek_epsilon_SS,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(hair,90); pos3(stem,180);
+pos4(hair,-90); pos5(vair,-45);
+pos6(hair,90); pos7(hair,90);
+rt x1=w-u; top y2r=h+o; x2=.5w+u; lft x3r=u; top y1r=y2r;
+y3=bar_height-.5stem;
+x4=x2+o; bot y4r=-o;
+rt x5=w-u; y5=.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{up}..z2l...{right}z1l..z1r{left}...z2r..{down}z3r..z4r..z5r;
+p1=z6l---z7ll..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p1 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(7ll);
+endchar;
+
+iff known chars.greek_epsilon_turned:
+bskchar "The turned Greek letter epsilon";
+beginchar(chars.greek_epsilon_turned,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,-90); pos3(stem,0);
+pos4(hair,90); pos5(vair,135);
+pos6(hair,-90); pos7(hair,-90);
+lft x1=u; bot y2r=-o; x2=.5w-u; rt x3r=w-u;
+y3=x_height-bar_height+.5stem; y1=x_height-.35[x_height,bar_height];
+x4=x2-o; top y4r=h+o;
+lft x5=u; y5=x_height-.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+z1'=z1+.2stem*up+o*right; z1''=z1+.5(stem-currentbreadth)*dir225;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{down}..z2l..{up}z1l..z1'..z1r..z1''..z2r..{up}z3r..z4r..z5r;
+p1=z6l---z7ll..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p1 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(1',1'',7ll);
+math_fit(-.5u#,.5u#);
+endchar;
+
+iff known chars.greek_epsilon_turned_BB:
+bskchar "The blackboard-bold turned Greek letter epsilon";
+beginchar(chars.greek_epsilon_turned_BB,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(hair,-90); pos3(cap_stem,0);
+pos4(hair,90); pos5(vair,135);
+pos6(hair,-90); pos7(hair,-90);
+lft x1=u; bot y2r=-o; x2=.5w-u; rt x3r=w-u;
+y3=x_height-bar_height+.5stem; y1=x_height-.35[x_height,bar_height];
+x4=x2-o; top y4r=h+o;
+lft x5=u; y5=x_height-.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+z1'=z1+.2stem*up+o*right; z1''=z1+.5(stem-currentbreadth)*dir225;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{down}..z2l..{up}z1l..z1'..z1r..z1''..z2r..{up}z3r..z4r..z5r;
+p1=z6l---z7ll..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p1 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0..cycle;
+p100=subpath(8,10) of p0;
+p101=subpath(1,3) of p0;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4r+u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2r-u-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(1',1'',7ll,100,101);
+endchar;
+
+iff known chars.greek_epsilon_turned_SS:
+bskchar "The sans-serif turned Greek letter epsilon";
+beginchar(chars.greek_epsilon_turned_SS,7.2u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,-90); pos2(hair,-90); pos3(stem,0);
+pos4(hair,90); pos5(vair,135);
+pos6(hair,-90); pos7(hair,-90);
+lft x1=u; bot y2r=-o; x2=.5w-u; rt x3r=w-u; bot y1r=y2r;
+y3=x_height-bar_height+.5stem;
+x4=x2-o; top y4r=h+o;
+lft x5=u; y5=x_height-.15bar_height;
+y6=y7=y3; x6=x3; x7=x1l;
+bskpoints(6,7,hair,hair);
+p0=z5l..z4l..z3l{down}..z2l...{left}z1l..z1r{right}...z2r..{up}z3r..z4r..z5r;
+p1=z6l---z7ll..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,infinity) of p1 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(7ll);
endchar;
iff known chars.greek_varepsilon:
@@ -567,6 +2226,95 @@ filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
oblu:=.5f_obl;
infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'');
+math_fit(mft,ic#-u#);
+endchar;
+
+iff known chars.greek_varepsilon_BB:
+bskchar "The blackboard-bold Greek letter epsilon---alternative";
+beginchar(chars.greek_varepsilon_BB,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(hair,90); pos3(.5[hair,cap_stem],180);
+pos4(hair,0); pos4'(hair,60); pos4''(.5[hair,stem],-150);
+pos5(cap_stem,180); pos6(hair,-90); pos7(vair,-45);
+rt x1=w-u; top y2r=h+o; x2=.5w+u; lft x3r=1.75u;
+y3=.65[x_height,bar_height]; y1=.5[x_height,bar_height];
+1/3[y4,y3]=bar_height; x4=x2; y5=.5bar_height;
+lft x5r=u; x6=x2+o; bot y6r=-o;
+rt x7=w-u; y7=.25bar_height;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x4-x3);
+z1'=z1+.2curve*down+o*left; z1''=z1+if boldmath: .75 else: .5\\fi(curve-currentbreadth)*dir45;
+p0=z7l..z6l..z5l..z4'l..z4l{down}..z4''l..z3l{up}..z2l..{down}z1l;
+p1=z1l{down}..z1'..z1r..z1''..z2r..{down}z3r..z4''r..{up}z4r..z4'r..{down}z5r..z6r..z7r;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2,tim3-5)=p0 intersectiontimes subpath(5,7) of p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,infinity) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,hair)),infinity) of p1
+ ..{direction infinity of p1}z7r..{direction 0 of p0}z7l
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2hair)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=.5f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+p100=subpath(8,10) of p1;
+p101=subpath(1,4) of p0;
+p102=subpath(4,6) of p1;
+p103=subpath(5,7) of p0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6r-u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+tim102=xpart(p100 intersectiontimes ((0,y4)--(x4',y4)));
+tim103=xpart(p101 intersectiontimes ((0,y4)--(x4',y4)));
+tim104=xpart(p102 intersectiontimes (z101--(x101,y2r+u+5)));
+tim105=xpart(p103 intersectiontimes (z101--(x101,y3)));
+tim106=xpart(p102 intersectiontimes ((0,y4)--(x4',y4)));
+tim107=xpart(p103 intersectiontimes ((0,y4)--(x4',y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+oblu:=.5bbw;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'',100,101);
+endchar;
+
+iff known chars.greek_varepsilon_SS:
+bskchar "The sans-serif Greek letter epsilon---alternative";
+beginchar(chars.greek_varepsilon_SS,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(hair,90); pos3(.5[hair,stem],180);
+pos4(hair,0); pos4'(hair,60); pos4''(.5[hair,stem],-150);
+pos5(curve,180); pos6(hair,-90); pos7(vair,-45);
+rt x1=w-u; top y2r=h+o; x2=.5w+u; lft x3r=1.75u;
+y3=.65[x_height,bar_height]; y1=.5[x_height,bar_height];
+1/3[y4,y3]=bar_height; x4=x2-hair; y5=.5bar_height;
+lft x5r=u; x6=x2+o; bot y6r=-o;
+rt x7=w-u; y7=.25bar_height;
+x4'=x4''=.5[x3,x4]; .5[y4',y4'']=y4; y4'-y4''=.5(x4-x3);
+z1'=z1+.2curve*down+o*left; z1''=z1+.5(curve-currentbreadth)*dir45;
+p0=z7l..z6l..z5l..z4'l..z4l{down}..z4''l..z3l{up}..z2l..{down}z1l;
+p1=z1l{down}..z1r{up}..z2r..{down}z3r..z4''r..{up}z4r..z4'r..{down}z5r..z6r..z7r;
+(tim0,tim1-5)=subpath(0,6) of p1 intersectiontimes subpath (5,infinity) of p1;
+(tim2,tim3-3)=p0 intersectiontimes subpath(3,5) of p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,infinity) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,hair)),infinity) of p1
+ ..{direction infinity of p1}z7r..{direction 0 of p0}z7l
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2hair)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=.5f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'');
endchar;
iff known chars.greek_zeta:
@@ -598,13 +2346,86 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,(tim5,hair)),infinity) of p1..cycle;
infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
penlabels(0,1,2,3,4,5,6,7,8); labels(0',0'',6',6'');
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_zeta_BB:
+bskchar "The blackboard-bold Greek letter zeta";
+beginchar(chars.greek_zeta_BB,9u#,asc_height#,.5desc_depth#); uni "non";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(.8cap_stem,180); pos0(hair,0); pos7(hair,180);
+pos3(cap_stem,240); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+pos8(hair,-90);
+lft x2r=u; top y1r=h-stem; y2=x_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-2u; y0=y1-.5stem; x3=.5w; top y3=.5bar_height-.5d+.25cap_stem;
+x6=x5-stem; y6=y5+.5stem; x7=x1-stem; top y7=h;
+x8=.5[x1,x0]; .5[y8,y1]=y0;
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+p0=z7r{down}..z8r..z0r..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l;
+p1=z6l..z5l..z4l..z3l..z2l..z1l..z0l..z8l..{up}z7l;
+(tim0,tim1-1)=p0 intersectiontimes subpath(1,infinity) of p0;
+(tim2,tim3)=p1 intersectiontimes subpath (0,1) of p0;
+(tim4-1,tim5-7)=subpath(1,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+(tim6-7,tim7)=subpath(7,infinity) of p1 intersectiontimes subpath(0,6) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,hair)),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
+p100=subpath(3,6) of p0;
+p101=subpath(2,5) of p1;
+z100=bsktouch(p100,dir15,p101,dir-135);
+z101=bsktouch(p100,dir-45,p101,dir135);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y7)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',0'',6',6'',100,101);
+endchar;
+
+iff known chars.greek_zeta_SS:
+bskchar "The sans-serif Greek letter zeta";
+beginchar(chars.greek_zeta_SS,9u#,asc_height#,.5desc_depth#); uni "non";
+italcorr asc_height#*slant-1.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(stem,180); pos0(hair,0); pos7(hair,180);
+pos3(curve,240); pos4(hair,180); pos5(hair,100); pos6(hair,90);
+pos8(hair,-90);
+lft x2r=u; top y1r=h-stem; y2=x_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-2u; y0=y1-.5stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5; x7=x1-stem; top y7=h;
+x8=.5[x1,x0]; .5[y8,y1]=y0;
+p0=z7r{down}..z8r..z0r..z1r..z2r..z3r..z4r..z5r---z6r;
+p1=z6l---z5l..z4l..z3l..z2l..z1l..z0l..z8l..{up}z7l;
+(tim0,tim1-1)=p0 intersectiontimes subpath(1,infinity) of p0;
+(tim2,tim3)=p1 intersectiontimes subpath (0,1) of p0;
+(tim4-1,tim5-7)=subpath(1,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+(tim6-7,tim7)=subpath(7,infinity) of p1 intersectiontimes subpath(0,6) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,hair)),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',0'');
endchar;
iff known chars.greek_eta:
bskchar "The Greek letter eta";
beginchar(chars.greek_eta,9.5u#,x_height#,desc_depth#); uni "0x03B7";
italcorr x_height#*slant-.5u#;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; path p[];
pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
@@ -615,20 +2436,153 @@ y3=y1-hair=bar_height;
z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
y5=y3; y6=-d; rt x5l=w-u; x6=x5; x7=.55[x5l,x3r]; top y7r=h+o;
bskpoints(5,6,hair,hair);
-p0=z1l{z1-z4}..z2l..z3l---z4l..z4'..z4r---z3r..z7r..z5r
+p0=z1l{z1-z4}..z2l..z3l---z4l...z4'...z4r---z3r..z7r..z5r
---z6r..z6ll---z5l..z7l..z3l;
p1=z4r---z3r..z2r..{z4-z1}z1r;
(tim0-7,tim1)=subpath (7,infinity) of p0 intersectiontimes p1;
filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),infinity) of p1..cycle;
penlabels(1,2,3,4,5,6,7,8,8',9,10); labels(6ll);
+math_fit(-u#,.5u#);
+endchar;
+
+iff known chars.greek_eta_BB:
+bskchar "The blackboard-bold Greek letter eta";
+beginchar(chars.greek_eta_BB,9.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(.8cap_stem,0); pos4(.8cap_stem,0);
+pos5(.8cap_stem,180); pos6(.8cap_stem,180); pos7(hair,-90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=1/3w;
+y3=y1-hair=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+y5=y3; y6=-d; rt x5l=w-u; x6=x5; x7=.55[x5l,x3r]; top y7r=h+o;
+bskpoints(5,6,hair,hair);
+p0=z1l{z1-z4}..z2l..z3l---z4l...z4'...z4r---z3r..z7r..z5r
+ ---z6r..z6ll---z5l..z7l..z3l;
+p1=z4r---z3r..z2r..{z4-z1}z1r;
+(tim0-7,tim1)=subpath (7,infinity) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+p100=subpath(1,3) of p0;
+p101=subpath(0,2) of p1;
+p102=subpath(7,9) of p0;
+p103=subpath(10,12) of p0;
+z100=bsktouch(p100,dir45,p101,dir-135);
+z101=bsktouch(p102,dir45,p103,dir-135);
+tim100=xpart(p100 intersectiontimes (z100--z1));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+u+5)));
+tim102=xpart(p102 intersectiontimes (z101--(x101-1,y5)));
+tim103=xpart(p103 intersectiontimes (z101--(x101-1,y2r+u+5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),infinity) of p100..z4'
+ ..subpath(0,rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim102),infinity) of p102
+ ..subpath(0,rundy(p103,tim103).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,10); labels(6ll,100,101);
+endchar;
+
+iff known chars.greek_eta_SS:
+bskchar "The sans-serif Greek letter eta";
+beginchar(chars.greek_eta_SS,9.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
+pos5(stem,180); pos6(stem,180); pos7(hair,-90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=1/3w;
+y3=y1-hair=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+y5=y3; y6=-d; rt x5l=w-u; x6=x5; x7=.55[x5l,x3r]; top y7r=h+o;
+bskpoints(5,6,hair,hair);
+p0=z2l{right}..z3l---z4l...z4'...z4r---z3r..z7r..z5r
+ ---z6r..z6ll---z5l..z7l..z3l;
+p1=z4r---z3r..{left}z2r;
+(tim0-7,tim1)=subpath (7,infinity) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,10); labels(6ll);
+endchar;
+
+iff known chars.greek_heta:
+bskchar "The Greek letter heta";
+beginchar(chars.greek_heta,8u#,x_height#,0); uni "0x0371";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
+pos5(bar,90); pos6(bar,90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=3u;
+y3=y1-hair=y5=y6=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+x5=x3r; rt x6=w-u;
+p0=z1l{z1-z4}..z2l..z3l---z4l...z4'...z4r---obl(5l,4r,6l)---z6l..z6r---z5r+oblu*right;
+p1=z4r---z3r..z2r..{z4-z1}z1r;
+filldraw p0..subpath(rundy(p1,1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4');
+math_fit(-u#,.5u#);
+endchar;
+
+iff known chars.greek_heta_BB:
+bskchar "The blackboard-bold Greek letter heta";
+beginchar(chars.greek_heta_BB,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(.8cap_stem,0); pos4(.8cap_stem,0);
+pos5(bar,90); pos6(bar,90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=3u;
+y3=y1-hair=y5=y6=bar_height;
+z2=z1+whatever*dir70; y4=cap_hair; z4'=(x4r,y4r-hair);
+x5=x3r; rt x6=w-u;
+p0=z1l{z1-z4}..z2l..z3l---z4l...z4'...z4r---obl(5l,4r,6l)---z6l..z6r---z5r+oblu*right;
+p1=z4r---z3r..z2r..{z4-z1}z1r;
+filldraw p0..subpath(rundy(p1,1),infinity) of p1..cycle;
+p100=subpath(1,3) of p0;
+p101=subpath(0,2) of p1;
+z100=bsktouch(p100,dir45,p101,dir-135);
+tim100=xpart(p100 intersectiontimes (z100--z1));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+u+5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),infinity) of p100..z4'
+ ..subpath(0,rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6); labels(4',100);
+endchar;
+
+iff known chars.greek_heta_SS:
+bskchar "The sans-serif Greek letter heta";
+beginchar(chars.greek_heta_SS,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
+pos5(bar,90); pos6(bar,90);
+top y2r=x_height+o;
+x3=x4; lft x1l=.5u; lft x3=3u;
+y3=y1-hair=y5=y6=bar_height;
+z2=z1+whatever*dir70; y4=hair; z4'=(x4r,y4r-hair);
+x5=x3r; rt x6=w-u;
+p0=z2l{right}..z3l---z4l...z4'...z4r---obl(5l,4r,6l)---z6l..z6r---z5r+oblu*right;
+p1=z4r---z3r..{left}z2r;
+filldraw p0..subpath(rundy(p1,1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4');
endchar;
iff known chars.greek_eta_curved:
bskchar "The Greek letter eta (curved version)";
beginchar(chars.greek_eta_curved,9.5u#,x_height#,desc_depth#); uni "non";
italcorr x_height#*slant-.5u#;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; path p[];
pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0);
@@ -647,16 +2601,60 @@ p1=z4r---z3r..z2r..{z4-z1}z1r;
filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),infinity) of p1..cycle;
penlabels(1,2,3,4,5,6,7,8,8',9,10);
+math_fit(-u#,.5u#);
endchar;
+charscription(9.5u,asc_height,0)(
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(hair,90); pos6(.5[hair,stem],90); pos7(hair,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o;
+z5=z1+.25stem*down; z7=z3+.25stem*up; z6=.5[z5,z7];
+p0=z5l..z6l..z7l;
+p1=z5r..z6r..z7r;
+p2=z1r{up}..z4r..{down}z3r..z2r..{up}z1r;
+p3=z2r..{up}z1r..z4r..{down}z3r..z2r;
+(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p2;
+(tim2-1,tim3)=subpath(1,2) of p0 intersectiontimes p2;
+(tim4,tim5)=subpath(0,1) of p1 intersectiontimes p3;
+(tim6-1,tim7)=subpath(1,2) of p1 intersectiontimes p3;
+filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim1).zpet) of p2..cycle;
+infill subpath(rundy(p1,tim4),rundy(p1,tim6).zpet) of p1
+ .. reverse subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..cycle;
+penlabels(1,2,3,4,5,6,7);
+);
+
iff known chars.greek_theta:
bskchar "The Greek letter theta";
beginchar(chars.greek_theta,9.5u#,asc_height#,0); uni "0x03B8";
italcorr .75asc_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
+usechar;
+math_fit(-.5asc_height#*slant,ic#-1.5u#);
+endchar;
+
+iff known chars.greek_theta_SS:
+bskchar "The sans-serif Greek letter theta";
+beginchar(chars.greek_theta_SS,9.5u#,asc_height#,0); uni "non";
+italcorr .75asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_theta_BB:
+bskchar "The blackboard-bold Greek letter theta";
+beginchar(chars.greek_theta_BB,9.75u#,asc_height#,0); uni "non";
+italcorr .75asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
numeric tim[]; path p[]; oblu:=2oblu;
-pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos1(cap_stem,0); pos2(hair,90); pos3(.8cap_stem,180); pos4(hair,270);
pos5(hair,90); pos6(.5[hair,stem],90); pos7(hair,90);
lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
bot y2l=-o; top y4l=h+o;
@@ -675,7 +2673,26 @@ infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
infill subpath(rundy(p1,tim4),rundy(p1,tim6).zpet) of p1
.. reverse subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
..cycle;
-penlabels(1,2,3,4,5,6,7);
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6,7); labels(100,101,102,103);
endchar;
iff known chars.greek_vartheta:
@@ -709,6 +2726,85 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,(tim4,hair)),infinity) of p1..cycle;
infill subpath (rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
penlabels(1,2,3,4,5,6,7,8,9);
+math_fit(-bar_height#*slant+.25u#,ic#-u#);
+endchar;
+
+iff known chars.greek_vartheta_BB:
+bskchar "The blackboard-bold Greek letter theta---alternative";
+beginchar(chars.greek_vartheta_BB,10u#,asc_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,90); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(cap_stem,180); pos7(hair,-90);
+pos8(hair,-30); pos8'(hair,30); pos9(hair,90);
+top y2r=x_height; bot y5l=-o; rt x5=.5[x4l,x6];
+x3=x4l; lft x1l=.5u; x3l-x1r=max(curve,1.5u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+z2=z1+whatever*dir60;
+y4-y5=y2-y3; rt x6l=w-1.75u; y6=bar_height;
+top y7=h+o; x7=x5;
+y8=2/3[x_height,h]; 1/4[x8,x6]=x7;
+y9=.35[x_height,bar_height]; x9=w-u;
+p0=z1r{up}..z2r..z3r..z4r..z5r..{up}z6r..{left}z7r..z8r..{z9-z3}z9r;
+p1=z9l{z3-z9}..z8l..{right}z7l..{down}z6l..z5l..z4l..z3l..z2l..{down}z1l;
+(tim0,tim1)=subpath(0,6) of p0 intersectiontimes subpath(0,1) of p1;
+(tim2-2,tim3-7)=subpath(2,infinity) of p1 intersectiontimes subpath(7,infinity) of p0;
+(tim4-2,tim5)=subpath (2,infinity) of p1 intersectiontimes subpath(0,1) of p1;
+tim6=xpart(p0 intersectiontimes subpath (0,1) of p1);
+tim7-7=ypart(subpath (0,6) of p0 intersectiontimes subpath(7,infinity) of p0);
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..{z9-z4}z9r..z9l{z4-z9}
+ ..subpath(rundy(p1,(tim4,hair)),infinity) of p1..cycle;
+infill subpath (rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
+p100=subpath(4,6) of p0;
+p101=subpath(2,4) of p1;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--z8));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y7l+u+5)));
+tim102=xpart(p100 intersectiontimes (z101--z3));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5l-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(100,101);
+endchar;
+
+iff known chars.greek_vartheta_SS:
+bskchar "The sans-serif Greek letter theta---alternative";
+beginchar(chars.greek_vartheta_SS,9u#,asc_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,0); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(curve,180); pos7(hair,-90);
+pos8(hair,-30); pos8'(hair,30); pos9(hair,90);
+top y2=x_height; bot y5l=-o; x5=.5[x3,x6];
+if boldmath:lft x4l=x3l; else: x4l=x3; fi;
+lft x1l=.5u; x3l-x1r=max(curve,1.5u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+x2l=x3l;
+y4-y5=y2-y3; rt x6l=w-1.75u; y6=bar_height;
+top y7=h+o; x7=x5;
+y8=2/3[x_height,h]; 1/4[x8,x6]=x7;
+y9=.35[x_height,bar_height]; x9=w-u;
+p0=z2r---z3r..z4r..z5r..{up}z6r..{left}z7r..z8r..{z9-z3}z9r;
+p1=z9l{z3-z9}..z8l..{right}z7l..{down}z6l..z5l..z4l..z3l---z2l;
+(tim0,tim1)=subpath(0,5) of p0 intersectiontimes subpath(0,1) of p1;
+(tim2-2,tim3-6)=subpath(2,infinity) of p1 intersectiontimes subpath(6,infinity) of p0;
+(tim4-2,tim5)=subpath (2,infinity) of p1 intersectiontimes subpath(0,1) of p1;
+tim6=xpart(p0 intersectiontimes subpath (0,1) of p1);
+tim7-6=ypart(subpath (0,5) of p0 intersectiontimes subpath(6,infinity) of p0);
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..{z9-z4}z9r..z9l{z4-z9}
+ ..subpath(rundy(p1,(tim4,hair)),infinity) of p1..cycle;
+infill subpath (rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
endchar;
iff known chars.greek_iota:
@@ -727,6 +2823,118 @@ filldraw z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b
..z2'l..{-direction 0 of p0}z2l..z3l..{up}z4r..{down}z4l
..z3r..p0&cycle;
penlabels(1,2,2',3,4);
+math_fit(-x_height#*slant+u#,0);
+endchar;
+
+iff known chars.greek_iota_BB:
+bskchar "The blackboard-bold Greek letter iota";
+beginchar(chars.greek_iota_BB,6.5u#,x_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[];
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.9cap_stem,0);
+pos3(hair,90); pos4(hair,0);
+lft x1l=x2l=1.5u; top y1=h; y2=.5y4; y2'=bar_height; x2'l=.25[x1,x1l];
+rt x4r=w-u; top y4=.5bar_height; bot y3l=0; lft x3=.5[x4,x2];
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+p0=z2r..z2'r..z1r;
+filldraw z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b
+ ..z2'l..{-direction 0 of p0}z2l..z3l..{up}z4r..{down}z4l
+ ..z3r..p0&cycle;
+numeric tim[];
+p100=subpath(0,4) of (z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l..z3l..{up}z4r);
+p101=subpath(1,infinity) of (z4l{down}..z3r..p0);
+z100=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3l-2u-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(tim100,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*down..cycle;
+penlabels(1,2,2',3,4); labels(100);
+endchar;
+
+iff known chars.greek_iota_SS:
+bskchar "The sans-serif Greek letter iota";
+beginchar(chars.greek_iota_SS,6u#,x_height#,0); uni "non";
+adjust_fit(-.5u#,0);
+pickup tiny.nib;
+path p[];
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(hair,90); pos4(hair,0);
+lft x1l=x2l=1.5u; top y1=h; y2=.5y4; y2'=bar_height; x2'l=.25[x1,x1l];
+rt x4r=w-u; top y4=.5bar_height; bot y3l=0; x3=.5[x4,x2];
+drop_serif(1,jut);
+p0=z2r..z2'r..z1r;
+filldraw z1r{left}..{down}z1.b
+ ..z2'l..{-direction 0 of p0}z2l..z3l..{up}z4r..{down}z4l
+ ..z3r..p0&cycle;
+penlabels(1,2,2',3,4);
+endchar;
+
+iff known chars.greek_iota_turned:
+bskchar "The turned Greek letter iota";
+beginchar(chars.greek_iota_turned,6u#,x_height#,0); uni "0x2129";
+adjust_fit(serif_fit#,0);
+italcorr x_height#*slant;
+pickup tiny.nib;
+path p[];
+pos1(stem,180); pos2(stem,180); pos2'(1.1stem,180);
+pos3(hair,-90); pos4(hair,180);
+rt x1l=x2l=w-1.5u; bot y1=0; y2=.5(x_height+y4); y2'=x_height-bar_height; x2'l=.25[x1,x1l];
+lft x4r=u; bot y4=x_height-.5bar_height; top y3l=h; x3=.5[x4,x2];
+z1a=z1l+(jut,.5serif_drop); z1b=(x1l,y1a+.25serif_drop); x1b:=.5[x1a,x1l];
+p0=z2r..z2'r..z1r;
+filldraw z1r..{x1l-x1r,.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b..z2'l
+ ..{-direction 0 of p0}z2l..z3l..{down}z4r..{up}z4l..z3r..p0&cycle;
+penlabels(1,2,2',3,4); labels(1a,1b);
+math_fit(-bar_height#*slant,ic#-.75u#);
+endchar;
+
+iff known chars.greek_iota_turned_BB:
+bskchar "The blackboard-bold turned Greek letter iota";
+beginchar(chars.greek_iota_turned_BB,6u#,x_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+italcorr x_height#*slant;
+pickup tiny.nib;
+path p[];
+pos1(.8cap_stem,180); pos2(.8cap_stem,180); pos2'(.9cap_stem,180);
+pos3(hair,-90); pos4(hair,180);
+rt x1l=x2l=w-1.5u; bot y1=0; y2=.5(x_height+y4); y2'=x_height-bar_height; x2'l=.25[x1,x1l];
+lft x4r=u; bot y4=x_height-.5bar_height; top y3l=h; x3=.5[x4,x2];
+z1a=z1l+(jut,.5serif_drop); z1b=(x1l,y1a+.25serif_drop); x1b:=.5[x1a,x1l];
+p0=z2r..z2'r..z1r;
+filldraw z1r..{x1l-x1r,.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b..z2'l
+ ..{-direction 0 of p0}z2l..z3l..{down}z4r..{up}z4l..z3r..p0&cycle;
+numeric tim[];
+p100=subpath(0,4) of (z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l..z3l..{down}z4r);
+p101=subpath(1,infinity) of (z4l{up}..z3r..p0);
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3l+2u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(tim100,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*up..cycle;
+penlabels(1,2,2',3,4); labels(1a,1b,100);
+endchar;
+
+iff known chars.greek_iota_turned_SS:
+bskchar "The sans-serif turned Greek letter iota";
+beginchar(chars.greek_iota_turned_SS,6u#,x_height#,0); uni "non";
+adjust_fit(0,-.5u#);
+italcorr x_height#*slant;
+pickup tiny.nib;
+path p[];
+pos1(stem,180); pos2(stem,180); pos2'(1.1stem,180);
+pos3(hair,-90); pos4(hair,180);
+rt x1l=x2l=w-1.5u; bot y1=0; y2=.5(x_height+y4); y2'=x_height-bar_height; x2'l=.25[x1,x1l];
+lft x4r=u; bot y4=x_height-.5bar_height; top y3l=h; x3=.5[x4,x2];
+z1a=z1l+(jut,.5serif_drop); z1b=(x1l,y1a+.25serif_drop);
+p0=z2r..z2'r..z1r;
+filldraw z1r{right}..z1.b{up}..z2'l
+ ..{-direction 0 of p0}z2l..z3l..{down}z4r..{up}z4l..z3r..p0&cycle;
+penlabels(1,2,2',3,4); labels(1a,1b);
endchar;
iff known chars.greek_kappa:
@@ -762,6 +2970,180 @@ filldraw z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b
penlabels(1,2,2',2'',3,4,5,6,6',7); labels(7',7'');
endchar;
+iff known chars.greek_kappa_BB:
+bskchar "The blackboard-bold Greek letter kappa";
+beginchar(chars.greek_kappa_BB,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.9cap_stem,0);
+pos3(hair,-90); pos4(hair,-90); pos5(.8cap_stem,0);
+lft x1l=lft x2l=1.5u; top y1=h; y2=.25bar_height; y2'=bar_height; x2'l=.25[x1,x1l];
+x4l=.5u; y4r=y3; bot y3l=0; rt x3=.4[x4,x2];
+bot y5=0; rt x5r=w-2u; serifs_br(5r); z5'b=z5r.b+(hair-currentbreadth)*right;
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+pos6(hair,90); top y6r=h+o; x7-x6=y6-y7;
+pos7(curve,0); z7'=z7+.2curve*down+o*left; z7''=z7+.5(curve-currentbreadth)*dir45;
+y7=h-stem; rt x7r=w-.75u;
+pos2''(.5[hair,stem],angle(z6l-z2'r)+90); z2''r=z2'r;
+pos6'(hair,180); y6'=y7; z6'=whatever[z6,z2''];
+p0=z2r..z2'r..z1r;
+p1=z2''l{right}..{up}z6'l..z6l{right}..z7l..z7'..z7r{up}..z7''..{left}z6r..{down}z6'r..{left}z2''r;
+p2=z2'l---diag_serif(5r,2'l)..z5r---z5r.a..{left}z5r.c
+ ..z5r.bb+(.8cap_stem-currentbreadth)*right---z2'l+(.8cap_stem-currentbreadth)*right;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw z1r..{x1l-x1r,-.25serif_drop}z1.a&z1.a{z1b-z1a}..z1.b
+ ..z2'l..{-direction 0 of p0}z2l..z3l..{z4-z3}z4l..{z3-z4}z4r..z3r
+ ..subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,(length p2,curve)).zpet) of p2
+ ..subpath(rundy(p1,(0,curve)),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+p100=subpath(0,4) of (z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l..z3l..{z4-z3}z4l);
+p101=subpath(1,infinity) of (z4r{z3-z4}..z3r..p0);
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2')));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3r-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(tim100,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*down..cycle;
+penlabels(1,2,2',2'',3,4,5,6,6',7); labels(7',7'',100);
+endchar;
+
+iff known chars.greek_kappa_SS:
+bskchar "The sans-serif Greek letter kappa";
+beginchar(chars.greek_kappa_SS,8u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(-.5u#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(stem,0); pos4(hair,-90); pos5(stem,0);
+lft x1l=lft x2l=1.5u; top y1=h; y2=.25bar_height; y2'=bar_height; x2'l=.25[x1,x1l];
+x4l=.5u; y4r=y3; bot y3l=0; x3r=x2;
+bot y5=0; rt x5r=w-u; serifs_br(5r); z5'b=z5r.b+(hair-currentbreadth)*right;
+drop_serif(1,jut);
+pos6(hair,120); top y7r=h+o; x6=.5[x7,x2];
+pos7(hair,120);
+rt x7r=w-.75u; z7=z6+whatever*dir30;
+pos2''(.5[hair,stem],angle(z6l-z2'r)+90); z2''r=z2'r;
+p0=z2r..z2'r..z1r;
+p1=z2''l{right}...z6l...z7l&z7l{dir30}..z7r&z7r...z6r...{left}z2''r;
+p3:=diag_serif(5r,2'l);
+p2=z2'l---z5r
+ ..z5r.bb+(stem-currentbreadth)*right---z2'l+(stem-currentbreadth)*right;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw z1r{left}..{down}z1.b
+ ..z2'l..{-direction 0 of p0}z2l...z3l..z3r
+ ...subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,(length p2,curve)).zpet) of p2
+ ..subpath(rundy(p1,(0,curve)),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+penlabels(1,2,2',2'',3,4,5,6,7);
+endchar;
+
+iff known chars.greek_varkappa:
+bskchar "The Greek letter kappa---alternative";
+beginchar(chars.greek_varkappa,12u#,x_height#,0); uni "0x03F0";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], theta; path p[]; oblu:=2oblu;
+x1=2u+.5stem; x2=w-2u-.5stem; bot y1=.4stem; top y2=h+o-.5stem;
+lft bot z1'r=(u,0); rt top z2'l=(w-u,h);
+theta:=angle(z2-z1);
+pos1(.8stem,theta-90); pos2(stem,theta-90);
+pos1'(stem,-90); pos2'(stem,-90);
+pos3(hair,theta-90); pos4(curve,75); pos5(hair,theta+90);
+pos6(hair,theta-90); pos7(curve,105); pos8(hair,theta+90);
+z3r=z1l; top y4r=h+o; x4=2u; lft x5r=u; y4-y5=1.2(x4-x5);
+z6l=z2r; bot y7l=-o; x7=w-x4; rt x8l=w-u; y8-y7=1.2(x8-x7);
+p0:=z1'l..z1l{dir(theta+10)}..{dir(theta-10)}z2l..z2'l..z2'r..z2r{dir(theta+170)}..{dir(theta+190)}z1r..z1'r..cycle;
+p1:=z3l{dir(theta+10)}..z4l{left}..{down}z5l--z5r{up}..z4r{right}..{dir(theta+180)}z3r;
+p2:=z6r{dir(theta+190)}..{right}z7r..{up}z8r..{down}z8l..z7l{left}..{dir(theta)}z6l;
+z10=bsktouch(subpath(3,infinity) of p1,right,p0,up);
+z11=bsktouch(subpath(5,infinity) of p0,right,subpath(1,infinity) of p2,up);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z10--(x10,0)));
+tim1-1=xpart(subpath(1,infinity) of p1 intersectiontimes (z10--(0,y10)));
+tim2-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z11--(w,bar_height)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z11--(x11,h)));
+filldraw subpath(rundy(p1,0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,5).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),length p0) of p0..cycle;
+penlabels(1,1',2,2',3,4,5,6,7,8); labels(10,11,12,13);
+math_fit(-.5u#,0);
+endchar;
+
+iff known chars.greek_varkappa_BB:
+bskchar "The blackboard-bold Greek letter kappa---alternative";
+beginchar(chars.greek_varkappa_BB,12u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], theta; path p[]; oblu:=2oblu;
+x1=2u+.4cap_stem; x2=w-2u-.4cap_stem; bot y1=.4cap_stem; top y2=h+o-.4cap_stem;
+lft bot z1'r=(u,0); rt top z2'l=(w-u,h);
+theta:=angle(z2-z1);
+pos1(.8cap_stem,theta-90); pos2(.8cap_stem,theta-90);
+pos1'(.8cap_stem,-90); pos2'(.8cap_stem,-90);
+pos3(hair,theta-90); pos4(curve,75); pos5(hair,theta+90);
+pos6(hair,theta-90); pos7(curve,105); pos8(hair,theta+90);
+z3r=z1l; top y4r=h+o; x4=2u; lft x5r=u; y4-y5=1.2(x4-x5);
+z6l=z2r; bot y7l=-o; x7=w-x4; rt x8l=w-u; y8-y7=1.2(x8-x7);
+p0:=z1'l..z1l{dir(theta+10)}..{dir(theta-10)}z2l..z2'l..z2'r..z2r{dir(theta+170)}..{dir(theta+190)}z1r..z1'r..cycle;
+p1:=z3l{dir(theta+10)}..z4l{left}..{down}z5l--z5r{up}..z4r{right}..{dir(theta+180)}z3r;
+p2:=z6r{dir(theta+190)}..{right}z7r..{up}z8r..{down}z8l..z7l{left}..{dir(theta)}z6l;
+z10=bsktouch(subpath(3,infinity) of p1,right,p0,up);
+z11=bsktouch(subpath(5,infinity) of p0,right,subpath(1,infinity) of p2,up);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z10--(x10,0)));
+tim1-1=xpart(subpath(1,infinity) of p1 intersectiontimes (z10--(0,y10)));
+tim2-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z11--(w,bar_height)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z11--(x11,h)));
+filldraw subpath(rundy(p1,0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,5).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),length p0) of p0..cycle;
+penlabels(1,1',2,2',3,4,5,6,7,8); labels(10,11,12,13);
+infill subpath(rundy(p0,0),rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p0,5),rundy(p0,length p0).zpet) of p0..cycle;
+endchar;
+
+iff known chars.greek_varkappa_SS:
+bskchar "The sans-serif Greek letter kappa---alternative";
+beginchar(chars.greek_varkappa_SS,11u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], theta; path p[]; oblu:=2oblu;
+x1=2u+.5stem; x2=w-2u-.5stem; bot y1=.4stem; top y2=h+o-.5stem;
+lft bot z1'r=(u,0); rt top z2'l=(w-u,h);
+theta:=angle(z2-z1);
+pos1(.8stem,theta-90); pos2(stem,theta-90);
+pos1'(stem,-90); pos2'(stem,-90);
+pos3(hair,theta-90); pos4(curve,0); pos5(hair,theta+90);
+pos6(hair,theta-90); pos7(curve,0); pos8(hair,theta+90);
+z3r=z1l; top y4r=h; x4=2u; lft x5r=u; y4-y5=1.2(x4-x5);
+z6l=z2r; bot y7l=0; x7=w-x4; rt x8l=w-u; y8-y7=1.2(x8-x7);
+p0:=z1'l..z1l{dir(theta+10)}..{dir(theta-10)}z2l..z2'l..z2'r..z2r{dir(theta+170)}..{dir(theta+190)}z1r..z1'r..cycle;
+p1:=z3l{dir(theta+10)}..{up}z4l..z4r{down}..{dir(theta+180)}z3r;
+p2:=z6r{dir(theta+190)}..{down}z7r..{up}z7l..{dir(theta)}z6l;
+z10=bsktouch(subpath(2,infinity) of p1,right,p0,up);
+z11=bsktouch(subpath(5,infinity) of p0,right,subpath(1,infinity) of p2,up);
+tim0=xpart(subpath(0,2) of p0 intersectiontimes (z10--(x10,0)));
+tim1-1=xpart(subpath(1,infinity) of p1 intersectiontimes (z10--(0,y10)));
+tim2-1=xpart(subpath(1,infinity) of p2 intersectiontimes (z11--(w,bar_height)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z11--(x11,h)));
+filldraw subpath(rundy(p1,0),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,5).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),length p0) of p0..cycle;
+penlabels(1,1',2,2',3,4,5,6,7,8); labels(10,11,12,13);
+endchar;
+
iff known chars.greek_lambda:
bskchar "The Greek letter lambda";
beginchar(chars.greek_lambda,10u#,asc_height#,0); uni "0x03BB";
@@ -788,6 +3170,69 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'');
endchar;
+iff known chars.greek_lambda_BB:
+bskchar "The blackboard-bold Greek letter lambda";
+beginchar(chars.greek_lambda_BB,10u#,asc_height#,0); uni "non";
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[], thstem; path p[]; oblu:=2oblu;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=.8cap_stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(hair,90); pos5(hair+o,90);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+bot y1'=0; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h+o;
+lft x5=o; y5r=y4r; x4=.5x2l;
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+p0=z2l---z1l..z1'..{right}z3l..{left}z3r..z1r---z2r..z4r---z5r..z5l---z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+p100=z3r{left}..z1r---z2r..z4r---z5r;
+p101=z5l---z4l..z2l---z1l..z1'..{right}z3l;
+z100=bsktouch(subpath(0,2) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(1,2) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3l-5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y4r+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'',100,101);
+endchar;
+
+iff known chars.greek_lambda_SS:
+bskchar "The sans-serif Greek letter lambda";
+beginchar(chars.greek_lambda_SS,10u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], thstem; path p[]; oblu:=2oblu;
+x1r=w-1.5u; y1r=curve; x2l=2.5u; top y2l=h-curve;
+thstem:=stem/sind(angle(z2l-z1r));
+pos1(thstem,0); pos2(thstem,0);
+pos3(hair,90); pos4(thstem,0); pos5(hair+o,90);
+pos6(hair,0); pos7(stem,0); pos8(curve,-10);
+bot y1'=-o; z1'=whatever[z2l,z1l]+.5(x1-x1l)*right;
+bot y3l=-o; x3=w; top y4r=h;
+lft x5=o; y5r=y4r; z4r=whatever[z2r,z1r];
+y6=x_height; z6r=whatever[z1r,z2r];
+y7=curve; bot y8r=0; lft x7l=u; lft x8l=u;
+p0=z2l---z1l...z1'...z1r---z4r..z4l;
+p1=z6l{dir225}..{down}z7l---z8l..z8r---z7r{up}..{dir45}z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(1',5',5'');
+endchar;
+
iff known chars.greek_lambda_bar:
bskchar "The Greek letter lambda with bar";
beginchar(chars.greek_lambda_bar,10u#,asc_height#,0); uni "non";
@@ -957,7 +3402,7 @@ iff known chars.greek_mu:
bskchar "The Greek letter mu";
beginchar(chars.greek_mu,10.5u#,x_height#,desc_depth#); uni "0x03BC";
italcorr x_height#*slant-.75u#;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; path p[]; oblu:=2hair;
pos1(stem,0); pos2(stem,0); pos2'(stem,0);
@@ -965,7 +3410,43 @@ pos3(stem,0);
pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(stem,180);
pos10(stem,0); pos11(stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
lft x1l=lft x2l=1.5u; top y1=h; y2=0;
-x3l=x2; bot y3=-d+o;
+x3l=if slant=0: x2l else: x2 fi; bot y3=-d+o;
+rt x10r=w-2u; y6=y8=bar_height; bot y7l=-o; x7=.5w;
+x6=x2; top y9=h; x9=x10;
+z8r=z10l; x11=x10; y11=curve; rt x13=w-.5u; bot y12l=bot bot y13l=-o; x12=.5[x13,x10];
+bskpoints(9,10,hair,hair); bskpoints(3,1,hair,hair);
+p0=z1r..z1l---z3l..z3rr---z1r;
+p1=z12l{right}..z13l..z13r..{left}z12r..z11r---z9l..{down}z9rr---z10l..z7r..{up}z6r;
+p2=z6l{down}..z7l..{up}z8l;
+p3=z10l{down}..z11l..{right}z12l;
+z0=bsktouch(subpath(2,infinity) of p0,right,p2,down);
+tim0-2=xpart(subpath(2,infinity) of p0 intersectiontimes (z0--(0,x0)));
+tim1=xpart(p2 intersectiontimes (z0--(x0,h)));
+z14=bsktouch(p2,down,p3,left);
+tim2=xpart(p2 intersectiontimes (z14--(x14,h)));
+tim3=xpart(p3 intersectiontimes (z14--(w,y14)));
+(tim4,tim5-2)=p1 intersectiontimes subpath(2,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p3,tim3),infinity) of p3
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+penlabels(1,2,3,6,7,8,9,10,11,12,13); labels(0,9rr,3rr,14);
+endchar;
+
+iff known chars.greek_mu_BB:
+bskchar "The blackboard-bold Greek letter mu";
+beginchar(chars.greek_mu_BB,10.75u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.8cap_stem,0);
+pos3(.8cap_stem,0);
+pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(.8cap_stem,180);
+pos10(.8cap_stem,0); pos11(.8cap_stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
+lft x1l=lft x2l=1.5u; top y1=h; y2=0;
+x3l=if slant=0: x2l else: x2 fi; bot y3=-d+o;
rt x10r=w-2u; y6=y8=bar_height; bot y7l=-o; x7=.5w;
x6=x2; top y9=h; x9=x10;
z8r=z10l; x11=x10; y11=curve; rt x13=w-.5u; bot y12l=bot bot y13l=-o; x12=.5[x13,x10];
@@ -986,6 +3467,51 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p3,tim3),infinity) of p3
..subpath(0,rundy(p1,tim4).zpet) of p1
..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+p100=subpath(3,5) of p1;
+p101=z9rr---z10l---z11l..{right}z12l;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(0,y100)));
+oblu:=f_obl;
+infill subpath(rundy(p101,0),rundy(p101,tim101).zpet) of p101
+ ..subpath(rundy(p100,tim100),rundy(p100, length p100).zpet) of p100..cycle;
+infill subpath(rundy(p0,1),rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p0,3),rundy(p0,4).zpet) of p0..cycle;
+penlabels(1,2,3,6,7,8,9,10,11,12,13); labels(0,9rr,3rr,14,100);
+endchar;
+
+iff known chars.greek_mu_SS:
+bskchar "The sans-serif Greek letter mu";
+beginchar(chars.greek_mu_SS,10.5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2hair;
+pos1(stem,0); pos2(stem,0); pos2'(stem,0);
+pos3(stem,0);
+pos6(hair,0); pos7(hair,90); pos8(hair,180); pos9(stem,180);
+pos10(stem,0); pos11(stem,0); pos12(hair,90); pos13(.5[stem,hair],90);
+lft x1l=lft x2l=1.5u; top y1=h; y2=0;
+x3l=if slant=0: x2l else: x2 fi; bot y3=-d+o;
+rt x10r=w-2u; y6=y8=bar_height; bot y7l=-o; x7=.5w;
+x6=x2; top y9=h; x9=x10;
+z8r=z10l; x11=x10; y11=curve; rt x13=w-.5u; bot y12l=bot bot y13l=-o; x12=.5[x13,x10];
+bskpoints(9,10,hair,hair); bskpoints(3,1,hair,hair);
+p0=z1r..z1l---z3l..z3rr---z1r;
+p1=z12l{right}..z13l..z13r..{left}z12r..z11r---z9l..{down}z9rr---z10l..z7r..{up}z6r;
+p2=z6l{down}..z7l..{up}z8l;
+p3=z10l{down}..z11l..{right}z12l;
+z0=bsktouch(subpath(2,infinity) of p0,right,p2,down);
+tim0-2=xpart(subpath(2,infinity) of p0 intersectiontimes (z0--(0,x0)));
+tim1=xpart(p2 intersectiontimes (z0--(x0,h)));
+z14=bsktouch(p2,down,p3,left);
+tim2=xpart(p2 intersectiontimes (z14--(x14,h)));
+tim3=xpart(p3 intersectiontimes (z14--(w,y14)));
+(tim4,tim5-2)=p1 intersectiontimes subpath(2,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),1) of p2
+ ..subpath(rundy(p1,4),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
penlabels(1,2,3,6,7,8,9,10,11,12,13); labels(0,9rr,3rr,14);
endchar;
@@ -1045,6 +3571,54 @@ filldraw z2r..{up}z3r..subpath(0,rundy(p1,1).zpet) of p1
..subpath(rundy(p0,tim0),infinity) of p0&z1r..{x1l-x1r,-.25serif_drop}z1.a
&z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l--cycle;
penlabels(1,2,2',3);
+math_fit(-x_height#*slant+u#,-u#);
+endchar;
+
+iff known chars.greek_nu_BB:
+bskchar "The blackboard-bold Greek letter nu";
+beginchar(chars.greek_nu_BB,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos2'(.9cap_stem,0);
+pos3(stem,-10);
+lft x1l=lft x2l=1.5u; top y1=h; bot y2=0; y2'=bar_height; x2'l=.25[x1,x1l];
+rt x3r=w-u; top y3l=h;
+drop_serif(1,jut); x1b:=.5[x1a,x1l];
+p0=z2r..z2'r..z1r;
+tim0=xpart(p0 intersectiontimes ((0,y2r+hair-currentbreadth)--(w,y2r+hair-currentbreadth)));
+p1=z3l{down}..point tim0 of p0;
+filldraw z2r..{up}z3r..subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p0,tim0),infinity) of p0&z1r..{x1l-x1r,-.25serif_drop}z1.a
+ &z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l--cycle;
+p100=z1.a{z1b-z1a}..z1.b..z2'l..{-direction 0 of p0}z2l;
+p101=p0;
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,(infinity,.8bbw)).zpet) of p100
+ ..subpath(rundy(p101,(0,.8bbw)),rundy(p101,length(p101)).zpet) of p101
+ ..z1l+tiny*down..cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.greek_nu_SS:
+bskchar "The sans-serif Greek letter nu";
+beginchar(chars.greek_nu_SS,8.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(-.5u#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,0); pos2(stem,0); pos2'(1.1stem,0);
+pos3(stem,-10);
+lft x1l=lft x2l=1.5u; top y1=h; bot y2=0; y2'=bar_height; x2'l=.25[x1,x1l];
+rt x3r=w-u; top y3l=h;
+drop_serif(1,jut);
+p0=z2r..z2'r..z1r;
+tim0=xpart(p0 intersectiontimes ((0,y2r+hair-currentbreadth)--(w,y2r+hair-currentbreadth)));
+p1=z3l{down}..point tim0 of p0;
+filldraw z2r..{up}z3r..subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p0,tim0),infinity) of p0&z1r{left}..{down}z1.b..z2'l..{-direction 0 of p0}z2l--cycle;
+penlabels(1,2,2',3);
endchar;
iff known chars.greek_xi:
@@ -1086,20 +3660,170 @@ filldraw subpath(0,rundy(p0,tim8).zpet) of p0..subpath(rundy(p0,tim9),rundy(p0,t
infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
infill subpath(rundy(p1,tim14),rundy(p1,tim15).zpet) of p1..cycle;
penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); labels(0',0'',6',6'');
+math_fit(mft,0);
+endchar;
+
+iff known chars.greek_xi_BB:
+bskchar "The blackboard-bold Greek letter xi";
+beginchar(chars.greek_xi_BB,9u#,asc_height#,.5desc_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(.8cap_stem,180); pos0(hair,0); pos7(.8cap_stem,180);
+pos3(cap_stem,240); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+pos8(hair,-90); pos9(hair,90); pos10(hair,0); pos11(hair,-90);
+pos12(hair,180);
+lft x2r=u; top y1r=.35[x_height,bar_height]; y2=.5x_height; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-2u; y0=y1-stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5+.5stem; lft x7r=1.5u; y7=.35[y1,y9];
+x8=.25[x1,x0]; .25[y8,y1]=y0; top y9r=h-.75stem; x10-x9=x0-x1;
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+rt x10r=w-u; y10=y9-.5stem; y10=.5[y11,y9]; x11=.5[x9,x10];
+top y12=h; x12=x9-stem;
+p0=z12r..z11r..z10r..z9r..z7r{down}..z8r..{up}z0r..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l;
+p1=z6l..z5l..z4l..z3l..z2l..z1l..{down}z0l..z8l..{up}z7l..z9l..z10l..z11l..z12l;
+(tim0,tim1-5)=p0 intersectiontimes subpath(5,infinity) of p0;
+(tim2,tim3-4)=p1 intersectiontimes subpath (4,5) of p0;
+(tim4-5,tim5-7)=subpath(5,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+(tim6-7,tim7)=subpath(7,infinity) of p1 intersectiontimes subpath(0,6) of p1;
+(tim8,tim9-1)=p0 intersectiontimes subpath(1,infinity) of p0;
+(tim10,tim11)=p1 intersectiontimes subpath(0,1) of p0;
+(tim12-2,tim13-11)=subpath(2,4) of p0 intersectiontimes subpath(11,infinity) of p1;
+(tim14-8,tim15-11)=subpath(8,10) of p1 intersectiontimes subpath(11,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p0,tim9),rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,hair)),rundy(p1,tim10).zpet) of p1
+ ..subpath(rundy(p0,tim11),rundy(p0,(tim12,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim13,hair)),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
+infill subpath(rundy(p1,tim14),rundy(p1,tim15).zpet) of p1..cycle;
+p100=subpath(7,10) of p0;
+p101=subpath(2,5) of p1;
+p102=subpath(3,5) of p0;
+p103=subpath(7,10) of p1;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,right,subpath(0,1) of p101,left);
+z102=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(w,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y4)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+tim104=xpart(p102 intersectiontimes (z102--(0,y102)));
+tim105=xpart(p103 intersectiontimes (z102--(x11,y102)));
+tim106=xpart(p102 intersectiontimes ((0,.5[y1,y0])--(x8,.5[y1,y0])));
+tim107=xpart(p103 intersectiontimes ((0,.5[y1,y0])--(x8,.5[y1,y0])));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); labels(0',0'',6',6'',100,101,102);
+endchar;
+
+iff known chars.greek_xi_SS:
+bskchar "The sans-serif Greek letter xi";
+beginchar(chars.greek_xi_SS,9u#,asc_height#,.5desc_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(hair,90); pos2(stem,180); pos0(hair,0); pos7(stem,180);
+pos3(curve,240); pos4(hair,180); pos5(hair,100); pos6(hair,90);
+pos8(hair,-90); pos9(hair,90); pos10(hair,0); pos11(hair,-90);
+pos12(hair,180);
+lft x2r=u; top y1r=.35[x_height,bar_height]; y2=.5x_height; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-2u; y0=y1-stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5; lft x7r=1.5u; y7=.35[y1,y9];
+x8=.25[x1,x0]; .25[y8,y1]=y0; top y9r=h-.75stem; x10-x9=x0-x1;
+rt x10r=w-u; y10=y9-.5stem; y10=.5[y11,y9]; x11=.5[x9,x10];
+top y12=h; x12=x9-stem;
+p0=z12r..z11r..z10r..z9r..z7r{down}..z8r..{up}z0r..z1r..z2r..z3r..z4r..z5r---z6r;
+p1=z6l---z5l..z4l..z3l..z2l..z1l..{down}z0l..z8l..{up}z7l..z9l..z10l..z11l..z12l;
+(tim0,tim1-5)=p0 intersectiontimes subpath(5,infinity) of p0;
+(tim2,tim3-4)=p1 intersectiontimes subpath (4,5) of p0;
+(tim4-5,tim5-7)=subpath(5,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+(tim6-7,tim7)=subpath(7,infinity) of p1 intersectiontimes subpath(0,6) of p1;
+(tim8,tim9-1)=p0 intersectiontimes subpath(1,infinity) of p0;
+(tim10,tim11)=p1 intersectiontimes subpath(0,1) of p0;
+(tim12-2,tim13)=subpath(2,4) of p0 intersectiontimes p1;
+(tim14-8,tim15-11)=subpath(8,10) of p1 intersectiontimes subpath(11,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0..subpath(rundy(p0,tim9),rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p0,tim1),infinity) of p0
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),rundy(p0,(tim4,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim5,hair)),rundy(p1,tim10).zpet) of p1
+ ..subpath(rundy(p0,tim11),rundy(p0,(tim12,hair)).zpet) of p0
+ ..subpath(rundy(p1,(tim13,hair)),infinity) of p1..cycle;
+infill subpath(rundy(p1,tim7),rundy(p1,tim6).zpet) of p1..cycle;
+infill subpath(rundy(p1,tim14),rundy(p1,tim15).zpet) of p1..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); labels(0',0'',6',6'');
endchar;
+charscription(9u,x_height,0)(
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o;
+filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+);
+
iff known chars.greek_omicron:
-bskchar "The greek letter omicron";
+bskchar "The Greek letter omicron";
beginchar(chars.greek_omicron,9u#,x_height#,0); uni "0x03BF";
italcorr bar_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
-pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+usechar;
+endchar;
+
+iff known chars.greek_omicron_SS:
+bskchar "The sans-serif Greek letter omicron";
+beginchar(chars.greek_omicron_SS,9u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_omicron_BB:
+bskchar "The blackboard-bold Greek letter omicron";
+beginchar(chars.greek_omicron_BB,9u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
bot y2l=-o; top y4l=h+o;
filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
-penlabels(1,2,3,4);
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(1,2,3,4); labels(100,101,102,103);
endchar;
iff known chars.greek_pi:
@@ -1132,6 +3856,78 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
..subpath(rundy(p0,tim6),infinity) of p0&cycle;
penlabels(1,2,3,4,5,6,7,8,8');
+math_fit(-.5[x_height#,bar_height#]*slant,-.5u#);
+endchar;
+
+iff known chars.greek_pi_BB:
+bskchar "The blackboard-bold Greek letter pi";
+beginchar(chars.greek_pi_BB,11u#,x_height#,0); uni "0x213C";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,90); pos5(cap_stem,10); pos6(.5[hair,cap_stem],0);
+pos7(.5[hair,cap_stem],0); pos8(cap_stem,-10); pos8'(.5[curve,cap_stem],0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; y4r=y3r; x2l:=x2l+.5stem;
+x5=x6r; bot y5l=1.5o; y5r:=y5r+o;
+z6r=z3; y7=y6; x7l=x2+stem; bot y8=0; x8r=x7l;
+y8'=.5bar_height; z8'l=whatever[z8l,z7l]+.5hair*right;
+y6l:=y6l-o;
+p0=z1r..z2r---z4r..z4l{down}..z3l..{left}z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{dir-70}z5l..(x5r,0)..z5r{dir130}..{up}z6r);
+p2=reverse(z7l---z8'l..z8l&z8l..z8r..z8'r---z7r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+if tim2=-1: tim2:=4; tim3:=length(p1); fi
+(tim4,tim5)=p0 intersectiontimes p2;
+(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ if not boldmath:..subpath(rundy(p0,(tim2,2hair)),rundy(p0,(tim4,2hair)).zpet) of p0 fi
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0&cycle;
+p100=subpath(0,rundy(p2,3).zpet) of p2..subpath(rundy(p2,3),infinity) of p2;
+oblu:=1.25bbw;
+tim100=ypart(p0 intersectiontimes p100);
+tim101-1=ypart(p0 intersectiontimes subpath(1,infinity) of p100);
+infill subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+infill subpath(rundy(p100,tim100),rundy(p100,tim101).zpet) of p100..cycle;
+penlabels(1,2,3,4,5,6,7,8,8');
+endchar;
+
+iff known chars.greek_pi_SS:
+bskchar "The sans-serif Greek letter pi";
+beginchar(chars.greek_pi_SS,11u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,90); pos5(curve,10); pos6(.5[hair,stem],0);
+pos7(.5[hair,stem],0); pos8(curve,0); pos8'(curve,0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; y4r=y3r; x2l:=x2l+.5stem;
+x5=x6; bot y5l=o;
+z6r=z3; y7=y6; x7l=x2+stem; bot y8=0; x8=x7;
+y8'=.5bar_height; z8'l=whatever[z8l,z7l];
+y6l:=y6l-o;
+p0=z1r..z2r---z4r..z4l{down}..z3l---z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{down}z5l..z5r{up}..{up}z6r);
+p2=reverse(z7l---z8'l..z8l&z8l..z8r...z8'r---z7r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+(tim4,tim5)=p0 intersectiontimes p2;
+(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,(tim2,hair)),rundy(p0,(tim4,hair)).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0&cycle;
+penlabels(1,2,3,4,5,6,7,8,8');
endchar;
iff known chars.greek_pi_curved:
@@ -1164,18 +3960,75 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
..subpath(rundy(p0,tim6),infinity) of p0&cycle;
penlabels(1,2,3,4,5,6,7,8,8');
+math_fit(-.5[x_height#,bar_height#]*slant,-.5u#);
endchar;
+charscription(13.5u,x_height,0)(
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,90); pos2(hair,180); pos3(stem,270);
+pos4(hair,90); pos4'(hair,240); pos4''(.5[hair,stem],-60);
+pos5(hair,270); pos6(curve,0); pos7(stem,90);
+pos8(hair,90); pos9(stem,90); pos10(stem,90); pos11(hair,90);
+top y1r=h; lft x2r=1.5u; y2=.5h; bot y3r=-o;
+rt x1=x3; .5[x3,x5]=.5w; x5-x3=1/3w;
+1/3[x4,x3]=.45w; y4l=bar_height;
+bot y5r=-o; y6=y2; rt x6r=w-u;
+x7-x6=(x2-x1); top y7r=h;
+y4'=y4''=.6bar_height; .5[x4',x4'']=x4; x4'-x4''=.35(y3-y4);
+z1'=z1+.2curve*right+o*up; z1''=z1+.5(curve-currentbreadth)*dir135;
+z7'=z7+.2curve*right+o*down; z7''=z7+.5(curve-currentbreadth)*dir45;
+lft x8=.5u; y8r=y9r; top y9r=top y10r=h; x9=.5[x8,x1];
+rt x11=w-.5u; x10=.5[x11,x7]; y11r=y10r;
+p0=z7'{right}..z6l..z5l..z4'l..z4l{right}..z4''l..z3l{left}..z2l..{right}z1l;
+p1=z1l{right}..z1'..z1r..z1''..z2r..{right}z3r..z4''r..{left}z4r..z4'r..{right}z5r..z6r..z7''..z7r;
+p2=z8l{right}..z9l...z10l..{right}z11l..{left}z11r..z10r...z9r..{left}z8r;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,6) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+(tim8,tim9-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim10-10,tim11)=subpath (10,infinity) of p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p1,tim9),rundy(p1,(tim0,f_obl)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,f_obl)),rundy(p1,tim10).zpet) of p1
+ ..subpath(rundy(p2,tim11),infinity) of p2..cycle;
+infill subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2f_obl)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11); labels(1',1'',7',7'');
+);
+
iff known chars.greek_varpi:
bskchar "The Greek letter pi---alternative";
beginchar(chars.greek_varpi,13.5u#,x_height#,0); uni "0x03D6";
italcorr x_height#*slant+.5u#;
adjust_fit(0,0);
pickup tiny.nib;
+usechar;
+math_fit(mft-.5u#,u#);
+endchar;
+
+iff known chars.greek_varpi_SS:
+bskchar "The sans-serif Greek letter pi---alternative";
+beginchar(chars.greek_varpi_SS,13.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_varpi_BB:
+bskchar "The blackboard-bold Greek letter pi---alternative";
+beginchar(chars.greek_varpi_BB,13.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
numeric tim[]; path p[]; oblu:=2oblu;
pos1(stem,90); pos2(hair,180); pos3(stem,270);
pos4(hair,90); pos4'(hair,240); pos4''(.5[hair,stem],-60);
-pos5(hair,270); pos6(curve,0); pos7(stem,90);
+pos5(hair,270); pos6(cap_stem,0); pos7(stem,90);
pos8(hair,90); pos9(stem,90); pos10(stem,90); pos11(hair,90);
top y1r=h; lft x2r=1.5u; y2=.5h; bot y3r=-o;
rt x1=x3; .5[x3,x5]=.5w; x5-x3=1/3w;
@@ -1205,7 +4058,18 @@ infill subpath(0,rundy(p0,tim2).zpet) of p0
..subpath(rundy(p0,tim5),infinity) of p0..cycle;
oblu:=f_obl;
infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
-penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11); labels(1',1'',7',7'');
+p100=subpath(0,2) of p0;
+p101=subpath(9,11) of p1;
+z100=bsktouch(subpath(0,1) of p100,1.5up,p101,1.5down);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y7r+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5r-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11); labels(1',1'',7',7'',100,101);
endchar;
iff known chars.greek_varpi_curved:
@@ -1248,6 +4112,7 @@ infill subpath(0,rundy(p0,tim2).zpet) of p0
oblu:=f_obl;
infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
penlabels(0,1,2,3,4,4',4'',5,6,7,8,9,10,11); labels(1',1'',7',7'');
+math_fit(mft-.5u#,u#);
endchar;
iff known chars.greek_rho:
@@ -1270,6 +4135,64 @@ infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
penlabels(1,2,3,4,5,6); labels(5');
endchar;
+iff known chars.greek_rho_BB:
+bskchar "The blackboard-bold Greek letter rho";
+beginchar(chars.greek_rho_BB,9u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(.8cap_stem,180); pos4(hair,270);
+pos5(cap_stem,20); pos6(.5[cap_stem,hair],0);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+bot y5l=-d; y6=-.5d; x6=x1r; x6r=lft x5l; x5'=x5r; y5'=y5l;
+p0=z5l{up}..z6l..{up}z1l..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r{down}..z6r..z5r..z5'..{up}z5l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0, rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+p100=subpath(0,3) of p0;
+p101=subpath(1,5) of (z3r{up}..z4r..{down}p1);
+p102=subpath(3,5) of p0;
+p103=subpath(1,3) of z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p102,down,p103,up);
+z102=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4l+u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p102 intersectiontimes (z101--(x101,y4l+5)));
+tim103=xpart(p103 intersectiontimes (z101--(x101,y3)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-u-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,infinity).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim102),rundy(p102,tim104).zpet) of p102
+ ..reverse subpath(rundy(p103,tim103),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6); labels(5',100,101,102);
+endchar;
+
+iff known chars.greek_rho_SS:
+bskchar "The sans-serif Greek letter rho";
+beginchar(chars.greek_rho_SS,8.5u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(curve,0);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+bot y5=-d; x1=x5;
+p0=z5l---z1l..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r---z5r..{up}z5l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0, rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
iff known chars.greek_varrho:
bskchar "The Greek letter rho---alternative";
beginchar(chars.greek_varrho,8.5u#,x_height#,desc_depth#); uni "0x03F1";
@@ -1292,6 +4215,70 @@ infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
penlabels(1,2,3,4,5,6,7,8,9); labels(9');
endchar;
+iff known chars.greek_varrho_BB:
+bskchar "The blackboard-bold Greek letter rho---alternative";
+beginchar(chars.greek_varrho_BB,9u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(.8cap_stem,180); pos4(hair,270);
+pos5(cap_stem,0); pos6(.8cap_stem,0); pos7(hair,90); pos8(hair,0); pos9(stem,-60);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+y5=.5[y6,y1]; x5r=x6r=x1r;
+y7=.5[y6,y9]; x7=x2; rt x8r=w-u; y8=.5[y7,y9]; y8-y9=3/4stem;
+bot y9r=-d; x9r=x8-stem; .5[x9',x9r]=x9l; y9'=y9l;
+p0=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r---z5r..z6r..{z8-z9}z7r..{down}z8r..z9r..z9'..z9l..{up}z8l..{z9-z8}z7l..z6l..z5l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0, rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+p100=subpath(9,infinity) of p1..subpath(0,1) of p0;
+p101=subpath(1,5) of (z3r{up}..z4r..{down}subpath(0,3) of p1);
+p102=subpath(1,3) of p0;
+p103=subpath(1,3) of z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,down,p103,up);
+z103=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4l+u+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y9)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y6)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y4l+5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y3)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y2l-u-5)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y3)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..reverse subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(9',100,101,102,103);
+endchar;
+
+iff known chars.greek_varrho_SS:
+bskchar "The sans-serif Greek letter rho---alternative";
+beginchar(chars.greek_varrho_SS,8.5u#,x_height#,.75desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(stem,0); pos6(stem,0); pos7(hair,90); pos8(hair,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+y5=.5[y6,y1]; rt x5r=x6r=x1r;
+y7l=y8l=-d; x7=x2; rt x8r=w-2u; y6=.5y7;
+p0=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+p1=z1r---z5r..z6r..z7r---z8r..z8l---z7l..z6l..z5l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0, rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(9');
+endchar;
+
iff known chars.greek_sigma:
bskchar "The Greek letter sigma";
beginchar(chars.greek_sigma,9.5u#,x_height#,0); uni "0x03C3";
@@ -1306,6 +4293,72 @@ bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
top y5l=h+o; y6l=y5l; rt x6r=w-u; x5=w-3u;
p0=z6l{right}..{down}z6r..z5r..z4r;
p1=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+z0=bsktouch(subpath(1.98,infinity) of p0,down,p1,right);
+tim0=xpart(p0 intersectiontimes (z0--(x0,h)));
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+filldraw z1l{up}..z4l--subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_sigma_BB:
+bskchar "The blackboard-bold Greek letter sigma";
+beginchar(chars.greek_sigma_BB,9.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(.8cap_stem,180); pos4(hair,270);
+pos5(.35[stem,hair],-90); pos6(hair,-90);
+lft x1l=u; rt x3l=w-u-stem; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+top y5l=h+o; y6l=y5l; rt x6r=w-u; x5=w-3u;
+p0=z6l{right}..{down}z6r..z5r..z4r;
+p1=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
+z0=bsktouch(subpath(2,infinity) of p0,down,p1,right);
+tim0=xpart(p0 intersectiontimes (z0--(x0,h)));
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+filldraw z1l{up}..z4l--subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z6l--z4l..z1l{down}..z2l..{up}z3l..cycle;
+p102:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p102,down);
+z103=bsktouch(subpath(2,3) of p100,down,p102,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(if boldmath:x2 else:x102 fi,y1)));
+tim105=xpart(p102 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p102 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p102,tim107),rundy(p102,tim105).zpet) of p102..cycle;
+penlabels(1,2,3,4,5,6); labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_sigma_SS:
+bskchar "The sans-serif Greek letter sigma";
+beginchar(chars.greek_sigma_SS,9.5u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(stem,180); pos4(hair,270);
+pos5(.35[stem,hair],-90); pos6(hair,-90);
+lft x1l=u; rt x3l=w-u-stem; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+top y5l=h+o; y6l=y5l; rt x6r=w-u; x5=w-3u;
+p0=z6l{right}..z6r---z5r..z4r;
+p1=z1l{up}..z4l..{down}z3l..z2l..{up}z1l;
z0=bsktouch(subpath(2,infinity) of p0,down,p1,right);
tim0=xpart(p0 intersectiontimes (z0--(x0,h)));
tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
@@ -1337,6 +4390,7 @@ filldraw z1l{up}..z4l..subpath(1,rundy(p0,tim0).zpet) of p0
infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
penlabels(1,2,3,4,5,5',6);
labels(0);
+math_fit(mft-.5u#,0);
endchar;
iff known chars.greek_varsigma:
@@ -1356,6 +4410,56 @@ z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
filldraw z0r..z0''..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l
..z5l..z4l..z3l..z2l..z1l..{down}z0l..z0'..cycle;
penlabels(0,1,2,3,4,5,6); labels(0',0'',6',6'');
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_varsigma_BB:
+bskchar "The blackboard-bold Greek letter sigma---alternative";
+beginchar(chars.greek_varsigma_BB,8u#,x_height#,.5desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(hair,90); pos2(.8cap_stem,180); pos0(stem,0);
+pos3(cap_stem,240); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+lft x2r=u; top y1r=h+o; y2=bar_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-u; y0=y1-stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5+.5stem;
+z0'=z0+.2stem*down+o*left; z0''=z0+.5(stem-currentbreadth)*dir45;
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+p0:=z0r..z0''..z1r..z2r..z3r..z4r..z5r..z6''..z6'..z6l..z5l..z4l..z3l..z2l..z1l..{down}z0l..z0'..cycle;
+filldraw p0;
+p100=subpath(2,5) of p0;
+p101=subpath(11,14) of p0;
+z100=bsktouch(p100,bbs*dir45,subpath(0,2) of p101,dir-135);
+z101=bsktouch(p100,dir-45,p101,dir135);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2)));
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6); labels(0',0'',6',6'',100,101);
+endchar;
+
+iff known chars.greek_varsigma_SS:
+bskchar "The sans-serif Greek letter sigma---alternative";
+beginchar(chars.greek_varsigma_SS,8u#,x_height#,.5desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(stem,180); pos0(stem,0);
+pos3(curve,240); pos4(hair,180); pos5(hair,100); pos6(hair,90);
+lft x2r=u; top y1r=h+o; y2=bar_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0r=w-u; y0=y1-stem; x3=.5w; y3=.5bar_height-.5d;
+x6=x5-stem; y6=y5;
+z0'=z0+.2stem*down+o*left; z0''=z0+.5(stem-currentbreadth)*dir45;
+filldraw z0r{up}..{left}z1r..z2r..z3r..z4r..z5r---z6r
+ ..z6l---z5l..z4l..z3l..z2l..{right}z1l..{down}z0l..cycle;
+penlabels(0,1,2,3,4,5,6); labels(0',0'');
endchar;
iff known chars.greek_tau:
@@ -1379,6 +4483,55 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
..subpath(rundy(p0,tim2),infinity) of p0&cycle;
penlabels(1,2,3,4,5,6);
+math_fit(-.5[x_height#,bar_height#]*slant,ic#-3u#);
+endchar;
+
+iff known chars.greek_tau_BB:
+bskchar "The blackboard-bold Greek letter tau";
+beginchar(chars.greek_tau_BB,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(curve,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,90); pos5(cap_stem,10); pos6(.5[hair,cap_stem],0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; y4r=y3r; x2l:=x2l+.5stem;
+z6=.5[z2,z3]+o*left; x5=x6-o; bot y5l=0; y5r:=y5r+o;
+p0=z1r..z2r---z4r..z4l{down}..z3l..{left}z2l..{dir-60}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{dir-60}z5l..(x5r,0)..z5r{dir130}..{up}z6r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+oblu:=1.25bbw;
+infill subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_tau_SS:
+bskchar "The sans-serif Greek letter tau";
+beginchar(chars.greek_tau_SS,9u#,x_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,180); pos2(stem,90); pos3(stem,90);
+pos4(hair,90); pos5(curve,0); pos6(.5[hair,stem],0);
+lft x1r=u; y1=y2l-stem;
+rt x4l=w-u; .5[x2,x3]=.5w; x3-x2=.5(w-u);
+top y2r=top y3r=h; y4r=y3r; x2l:=x2l+.5stem;
+z6=.5[z2,z3]+o*left; x5=x6-o; bot y5l=0; y5r:=y5r+o;
+p0=z1r..z2r---z4r..z4l{left}...z3l..{left}z2l..{dir-90}z1l..{dir150}z1r;
+p1=reverse(z6l{down}..{down}z5l..z5r{up}..{up}z6r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-1)=p0 intersectiontimes subpath (1,infinity) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0&cycle;
+penlabels(1,2,3,4,5,6);
endchar;
iff known chars.greek_tau_curved:
@@ -1402,6 +4555,7 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
..subpath(rundy(p0,tim2),infinity) of p0&cycle;
penlabels(1,2,3,4,5,6);
+math_fit(-.5[x_height#,bar_height#]*slant,ic#-3u#);
endchar;
iff known chars.greek_upsilon:
@@ -1422,6 +4576,53 @@ z5'=z5+.2curve*down+o*left; z5''=z5+.5(curve-currentbreadth)*dir135;
filldraw z1r---z2r..z3r..{up}z4r..z5'..{up}z5r..z5''
..z5l..{down}z4l..z3l..z2l---z1l..cycle;
penlabels(1,2,3,4,5); labels(5',5'');
+math_fit(mft,0);
+endchar;
+
+iff known chars.greek_upsilon_BB:
+bskchar "The blackboard-bold Greek letter upsilon";
+beginchar(chars.greek_upsilon_BB,8.5u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(hair,90);
+pos4(hair,180); pos5(curve,180);
+top y1=h-o; bot y3l=-o; x3=.5[x2,x4];
+lft x2l=u; x1=x2;
+y2=.5h;
+rt x4l=w-u; y4=bar_height;
+top y5''=h+o;
+x5-x4=.45(y4-y5);
+z5'=z5+.2curve*down+o*left; z5''=z5+.5(curve-currentbreadth)*dir135;
+filldraw z1r---z2r..z3r..{up}z4r..z5'..{up}z5r..z5''
+ ..z5l..{down}z4l..z3l..z2l---z1l..cycle;
+path p[]; numeric tim[];
+p100=z1r---z2r..z3r..{up}z4r;
+p101=z4l{down}..z3l..z2l---z1l;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3l-u-5)));
+infill subpath(rundy(p100,0),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,infinity)) of p101..cycle;
+penlabels(1,2,3,4,5); labels(5',5'',100);
+endchar;
+
+iff known chars.greek_upsilon_SS:
+bskchar "The sans-serif Greek letter upsilon";
+beginchar(chars.greek_upsilon_SS,8.5u#,x_height#,0); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(hair,90);
+pos4(hair,180); pos5(hair,180);
+top y1=h; bot y3l=-o; x3=.5[x2,x4];
+lft x2l=u; x1=x2;
+y2=.5h;
+rt x4l=w-u; y4=bar_height;
+x5=x4; y5=h;
+filldraw z1r---z2r..z3r..{up}z4r..{up}z5r
+ ..{down}z5l..{down}z4l..z3l..z2l---z1l..cycle;
+penlabels(1,2,3,4,5);
endchar;
iff known chars.greek_upsilon_curved:
@@ -1443,17 +4644,73 @@ z7'=z7+.2curve*down+o*left; z7''=z7+.5(curve-currentbreadth)*dir135;
filldraw z1r{up}..z2r..z3r..z4r..z5r..{up}z6r..z7'..{up}z7r..z7''
..z7l..{down}z6l..z5l..z4l..z3l..z2l..{down}z1l..cycle;
penlabels(1,2,3,4,5,6,7); labels(7',7'');
+math_fit(mft,.5u#);
endchar;
+charscription(12u,asc_height,desc_depth)(
+numeric tim[]; path p[];
+oblu:=2oblu;
+pos1(.5[stem,curve],0); pos2(hair,90); pos3(.5[stem,curve],180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5x_height; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=x_height+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+y5=h; y6=-d; x5=x6=.5w; pos5(hair, 0); pos6(hair,0);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+bskpoints(5,6,hair,hair);
+(tim1,tim2)=p0 intersectiontimes (z5l--z6l);
+(tim3,tim4)=p0 intersectiontimes (z6r--z5r);
+(tim5,tim6)=p0 intersectiontimes (z0r--z5r);
+(tim7,tim8)=p0 intersectiontimes (z5l--z0l);
+(tim11,tim12)=p1 intersectiontimes (z0r--z6r);
+(tim13,tim14)=p1 intersectiontimes (z5r--z0r);
+(tim15,tim16)=p1 intersectiontimes (z0l--z6l);
+(tim17,tim18)=p1 intersectiontimes (z5l--z0l);
+filldraw subpath (0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy((z6l--z5l),tim2),infinity) of (z5l--z6l)
+ ..subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r)
+ ..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5r)
+ ..subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l)
+ ..subpath(rundy(p0,tim7),infinity) of p0--cycle;
+infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r)
+ ..subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1
+ ..subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle;
+infill subpath (0, rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l)
+ ..subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l)
+ ..subpath(rundy(p1,tim15),infinity) of p1--cycle;
+penlabels(0,1,2,3,4,5,6);
+);
+
iff known chars.greek_phi:
bskchar "The Greek letter phi";
beginchar(chars.greek_phi,12u#,asc_height#,desc_depth#); uni "0x03C6";
italcorr .5x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
+usechar;
+math_fit(mft-.5u#,ic#-.5u#);
+endchar;
+
+iff known chars.greek_phi_SS:
+bskchar "The sans-serif Greek letter phi";
+beginchar(chars.greek_phi_SS,12u#,asc_height#,desc_depth#); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_phi_BB:
+bskchar "The blackboard-bold Greek letter phi";
+beginchar(chars.greek_phi_BB,12u#,asc_height#,desc_depth#); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
numeric tim[]; path p[];
oblu:=2oblu;
-pos1(.5[stem,curve],0); pos2(hair,90); pos3(.5[stem,curve],180); pos4(hair,270);
+pos1(.9cap_stem,0); pos2(hair,90); pos3(.9cap_stem,180); pos4(hair,270);
lft x1l=u; rt x3l=w-u; y1=y3=.5x_height; .5[x2,x4]=.5[x1,x3]; x2=x4;
bot y2l=-o; top y4l=x_height+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
y5=h; y6=-d; x5=x6=.5w; pos5(hair, 0); pos6(hair,0);
@@ -1483,7 +4740,26 @@ infill subpath (0, rundy(p1,tim17).zpet) of p1
..subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l)
..subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l)
..subpath(rundy(p1,tim15),infinity) of p1--cycle;
-penlabels(0,1,2,3,4,5,6);
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6); labels(100,101,102,103);
endchar;
iff known chars.greek_phi_curved:
@@ -1527,17 +4803,62 @@ infill subpath (0, rundy(p1,tim17).zpet) of p1
..subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l)
..subpath(rundy(p1,tim15),infinity) of p1--cycle;
penlabels(0,1,2,3,4,5,6,7);
+math_fit(mft-.5u#,ic#-.5u#);
endchar;
+charscription(12u,x_height,desc_depth)(
+numeric tim[]; path p[]; oblu:=2hair;
+pos2(hair,-45); pos3(.5[hair,stem],0); pos4(stem,0); pos5(hair,90);
+pos6(stem,180); pos7(hair,-90); pos8(hair,0); pos9(hair,0);
+top y2l=x_height; bot y5l=-o; x5=.5[x3,x6];
+lft x3l=u; y3=bar_height;
+z2=z3+whatever*dir60;
+rt x6l=w-u; y6=bar_height;
+top y7l=h+o; .5[x8,x6]=x7;
+y8=.5bar_height; y9=-d; x8=x9=.5[x3,x7];
+p0=z2r..z3r..z5r..{up}z6r..z7r..z8r---z9r;
+p1=z9l---z8l..z7l..{down}z6l..z5l..z3l..z2l;
+(tim0,tim1)=p0 intersectiontimes subpath(0,3) of p1;
+(tim2-3,tim3)=subpath (3,infinity) of p1 intersectiontimes p0;
+(tim4,tim5-4)= subpath(0,3) of p1 intersectiontimes subpath(4,infinity) of p1;
+(tim6,tim7-5)=subpath(0,4) of p0 intersectiontimes subpath(5,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p1,tim5),infinity) of p1..cycle;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
+penlabels(2,3,4,5,6,7,8,9); labels(7',7'');
+);
+
iff known chars.greek_varphi:
bskchar "The Greek letter phi---alternative";
beginchar(chars.greek_varphi,12u#,x_height#,desc_depth#); uni "0x03D5";
italcorr bar_height#*slant;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
+usechar;
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_varphi_SS:
+bskchar "The sans-serif Greek letter phi---alternative";
+beginchar(chars.greek_varphi_SS,12u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.greek_varphi_BB:
+bskchar "The blackboard-bold Greek letter phi---alternative";
+beginchar(chars.greek_varphi_BB,12.5u#,x_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
numeric tim[]; path p[]; oblu:=2hair;
-pos2(hair,-45); pos3(.5[hair,stem],0); pos4(stem,0); pos5(hair,90);
-pos6(stem,180); pos7(hair,-90); pos8(hair,0); pos9(hair,0);
+pos2(hair,-45); pos3(.75[hair,cap_stem],0); pos4(stem,0); pos5(hair,90);
+pos6(cap_stem,180); pos7(hair,-90); pos8(hair,0); pos9(hair,0);
top y2l=x_height; bot y5l=-o; x5=.5[x3,x6];
lft x3l=u; y3=bar_height;
z2=z3+whatever*dir60;
@@ -1556,7 +4877,28 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(0,rundy(p1,tim4).zpet) of p1
..subpath(rundy(p1,tim5),infinity) of p1..cycle;
infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
-penlabels(2,3,4,5,6,7,8,9); labels(7',7'');
+p100:=subpath(0,2) of p0;
+p101:=reverse subpath(4,infinity) of p1;
+p102:=subpath(2,4) of p0;
+p103:=reverse subpath(2,4) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y8)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y9)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l+u+5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y6)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y7l+5)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y6)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y9)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101).zpet,rundy(p101,tim103)) of p101..cycle;
+infill subpath(rundy(p102,tim104).zpet,rundy(p102,tim106)) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(2,3,4,5,6,7,8,9); labels(7',7'',100,101,102,103);
endchar;
iff known chars.greek_varphi_curved:
@@ -1590,6 +4932,7 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p1,tim5),infinity) of p1..cycle;
infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0..cycle;
penlabels(1,2,3,4,5,6,7,8,9,10); labels(7',7'');
+math_fit(mft-.5u#,0);
endchar;
iff known chars.greek_chi:
@@ -1627,6 +4970,87 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
penlabels(0,1,2,3,4,5,6,7,8,9); labels(0',5');
endchar;
+iff known chars.greek_chi_BB:
+bskchar "The blackboard-bold Greek letter chi";
+beginchar(chars.greek_chi_BB,12u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(stem,150); pos1(hair,90); pos4(hair,90); pos5(stem,150);
+pos6(hair,0); pos7(hair,0); pos8(curve,0); pos9(curve,0);
+top y1r=h+o; bot y4l=-d;
+.5[x1,x4-u]=.5[x2,x3-u]=.5w;
+x1=2u; x3-x2=1/4w+.5u; y2=bar_height; -d+h-y2=y3;
+pos2(.8cap_stem,angle(z2-z3)-90); pos3(.8cap_stem,angle(z2-z3)-90);
+lft x0r=u; y0=y1-stem; z0'=(x0r,y0l);
+rt x5l=w; y5=y4+stem; z5'=(x5l,y5r);
+top y6=h-curve; bot y7=-d+curve; rt x6r=w-2.5u-o; x7l=w-x6r;
+y8=-d; z8r=whatever[z7l,z6l]+o*left; y9=h; z9l=whatever[z6l,z7l]+o*right;
+p0=z0r{up}..z1r{right}..z2r---z3r..{right}z4r..z5r;
+p1=z5r..z5'..z5l..z4l{left}..z3l---z2l..{left}z1l..z0l;
+p2=z6l---z7l..z8l&z8l..z8r..z7r---z6r..z9r&z9r..z9l..cycle;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3-4)=p0 intersectiontimes subpath(4,length p2) of p2;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,length p2) of p2;
+(tim6,tim7)=p1 intersectiontimes subpath(0,1) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(rundy(p2,tim3),length p2) of p2
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..reverse subpath(rundy(p2,tim7),rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1
+ ..z0l..z0'..cycle;
+p100=reverse subpath(1,4) of p0;
+p101=reverse subpath(3,6) of p1;
+z100=bsktouch(subpath(0,2) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,2) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l-5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1r+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(0',5',100,101);
+endchar;
+
+iff known chars.greek_chi_SS:
+bskchar "The sans-serif Greek letter chi";
+beginchar(chars.greek_chi_SS,12u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(-.5u#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos0(stem,150); pos1(hair,90); pos4(hair,90); pos5(stem,150);
+pos6(hair,0); pos7(hair,0); pos8(hair,0); pos9(hair,0);
+top y1r=h+o; bot y4l=-d;
+.5[x1,x4-u]=.5[x2,x3-u]=.5w;
+x1=2u; x3-x2=1/4w+.5u; y2=bar_height; -d+h-y2=y3;
+pos2(stem,angle(z2-z3)-90); pos3(stem,angle(z2-z3)-90);
+lft x0r=u; y0=y1-stem; z0'=(x0r,y0l);
+rt x5l=w; y5=y4+stem; z5'=(x5l,y5r);
+top y6=h-curve; bot y7=-d+curve; rt x6r=w-2.5u-o; x7l=w-x6r;
+y8=-d; z8r=whatever[z7l,z6l]; y9=h; z9l=whatever[z6l,z7l]+o*right;
+p0=z1r{right}..z2r---z3r..{right}z4r;
+p1=z4l{left}..z3l---z2l..{left}z1l;
+p2=z6l---z7l..z8l&z8l..z8r..z7r---z6r..z9r&z9r..z9l..cycle;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3-4)=p0 intersectiontimes subpath(4,length p2) of p2;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,length p2) of p2;
+(tim6,tim7)=p1 intersectiontimes subpath(0,1) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(rundy(p2,tim3),length p2) of p2
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..reverse subpath(rundy(p2,tim7),rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(0',5');
+endchar;
+
iff known chars.greek_psi:
bskchar "The Greek letter psi";
beginchar(chars.greek_psi,12u#,asc_height#,desc_depth#); uni "0x03C8";
@@ -1663,6 +5087,94 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(0,rundy(p2,tim7).zpet) of p2
..subpath(rundy(p1,tim6),infinity) of p1..cycle;
penlabels(1,2,3,4,5,6,7,8,9); labels(7',7'');
+math_fit(mft-.5u#,ic#-.5u#);
+endchar;
+
+iff known chars.greek_psi_BB:
+bskchar "The blackboard-bold Greek letter psi";
+beginchar(chars.greek_psi_BB,12u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,90); pos3(.8cap_stem,0); pos4(cap_stem,0); pos5(hair,90);
+pos6(hair,180); pos7(curve,180);
+pos8(hair,0); pos9(hair,0); pos10(curve,0);
+top y2r=x_height; bot y5l=-o; x5=.5[x4l,x6];
+x3=x4; lft x1l=.5u; x3l-x1r=max(1.5curve,2u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+z2=z1+whatever*dir60;
+y4-y5=y2-y3; rt x6l=w-u; y6=bar_height;
+top y7''=x_height+o;
+x7-x6=.45(y6-y7);
+z7'=z7+.2curve*down+o*left; z7''=z7+.5(curve-currentbreadth)*dir135;
+y8=h; y9=-d; x8=x9=.5[x3r,x7l];
+p0=z1r{up}..z2r..z3r..z4r..{right}z5r..{up}z6r..z7'..{up}z7r;
+p1=z7r{up}..z7l..{down}z6l..{left}z5l..z4l..z3l..z2l..{down}z1l;
+p2=z9l--z8l;
+p3=z8r--z9r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ &subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+p100:=subpath(1,4) of p0;
+p101:=subpath(3,6) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y8)));
+tim101=xpart(p101 intersectiontimes (z100--z1));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y9)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(7',7'',100,101);
+endchar;
+
+iff known chars.greek_psi_SS:
+bskchar "The sans-serif Greek letter psi";
+beginchar(chars.greek_psi_SS,12u#,asc_height#,desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(-1.5u#,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(vair,180); pos2(hair,0); pos3(stem,0); pos4(stem,0); pos5(hair,90);
+pos6(hair,180); pos7(curve,180);
+pos8(hair,0); pos9(hair,0); pos10(curve,0);
+top y2r=x_height; bot y5l=-o; x5=.5[x4l,x6];
+if boldmath:lft x4l=x3l; else: x4l=x3; fi;
+lft x1l=.5u; x3l-x1r=max(1.5curve,2u);
+y2l-y1=1.5(x3-x1); y3=.35[y1,y2];
+x2l=x3l;
+y4-y5=y2-y3; rt x6l=w-u; y6=bar_height;
+top y7=x_height;
+x7-x6=.45(y6-y7);
+y8=h; y9=-d; x8=x9=.5[x3r,x7l];
+p0=z2r---z3r..z4r..z5r..{up}z6r..z7r;
+p1=z7l..{down}z6l..z5l..z4l..z3l---z2l;
+p2=z9l--z8l;
+p3=z8r--z9r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
endchar;
iff known chars.greek_psi_curved:
@@ -1701,6 +5213,7 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(0,rundy(p2,tim7).zpet) of p2
..subpath(rundy(p1,tim6),infinity) of p1..cycle;
penlabels(1,2,3,4,5,6,7,8,9,10); labels(7',7'');
+math_fit(mft-.5u#,ic#-.5u#);
endchar;
iff known chars.greek_omega:
@@ -1735,5 +5248,1378 @@ filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
oblu:=f_obl;
infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'',7',7'');
+math_fit(mft-.5u#,ic#);
+endchar;
+
+iff known chars.greek_omega_BB:
+bskchar "The blackboard-bold Greek letter omega";
+beginchar(chars.greek_omega_BB,13.5u#,x_height#,0); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,90); pos2(hair,180); pos3(stem,270);
+pos4(hair,90); pos4'(hair,240); pos4''(.5[hair,stem],-60);
+pos5(hair,270); pos6(cap_stem,0); pos7(stem,90);
+top y1r=h; lft x2r=u; y2=.5h; bot y3r=-o;
+rt x1=x3; .5[x3,x5]=.5w; x5-x3=1/3w;
+1/3[x4,x3]=.45w; y4l=bar_height;
+bot y5r=-o; y6=y2; rt x6r=w-.5u;
+x7-x6=(x2-x1); top y7r=h;
+y4'=y4''=.6bar_height; .5[x4',x4'']=x4; x4'-x4''=.35(y3-y4);
+z1'=z1+.2curve*right+o*up; z1''=z1+if not boldmath:.5\\fi(curve-currentbreadth)*dir135;
+z7'=z7+if boldmath: .3 else: .2\\fi curve*right+o*down; z7''=z7+if not boldmath:.5\\fi(curve-currentbreadth)*dir45;
+p0=z7'{right}..z6l..z5l..z4'l..z4l{right}..z4''l..z3l{left}..z2l..{right}z1l;
+p1=z1l{right}..z1'..z1r..z1''..z2r..{right}z3r..z4''r..{left}z4r..z4'r..{right}z5r..z6r..z7''..z7r;
+(tim0,tim1-7)=subpath(0,6) of p1 intersectiontimes subpath (7,infinity) of p1;
+(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,6) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,hair)),infinity) of p1..z7l
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2hair)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+p100=subpath(0,2) of p0;
+p101=subpath(9,11) of p1;
+z100=bsktouch(subpath(0,1) of p100,1.5up,p101,1.5down);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y7r+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5r-u-5)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7); labels(1',1'',7',7'',100,101);
+endchar;
+
+iff known chars.greek_omega_SS:
+bskchar "The sans-serif Greek letter omega";
+beginchar(chars.greek_omega_SS,13.5u#,x_height#,0); uni "non";
+italcorr .5x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[]; oblu:=2oblu;
+pos1(stem,90); pos2(hair,180); pos3(stem,270);
+pos4(hair,90); pos4'(hair,240); pos4''(.5[hair,stem],-60);
+pos5(hair,270); pos6(curve,0); pos7(stem,90);
+top y1r=h; lft x2r=u; y2=.5h; bot y3r=-o;
+rt x1=x3; .5[x3,x5]=.5w; x5-x3=1/3w;
+1/3[x4,x3]=.45w; y4l=bar_height;
+bot y5r=-o; y6=y2; rt x6r=w-.5u;
+x7-x6=(x2-x1); top y7r=h;
+y4'=y4''=.6bar_height; .5[x4',x4'']=x4; x4'-x4''=.35(y3-y4);
+p0=z7l{right}..z6l..z5l..z4'l..z4l{right}..z4''l..z3l{left}..z2l..{right}z1l;
+p1=z1l{right}..z1r{left}..z2r..{right}z3r..z4''r..{left}z4r..z4'r..{right}z5r..z6r..z7r;
+(tim0,tim1-5)=subpath(0,4) of p1 intersectiontimes subpath (5,infinity) of p1;
+(tim2-1,tim3)=subpath(1,infinity) of p0 intersectiontimes p1;
+(tim4,tim5-4)=p1 intersectiontimes subpath(4,6) of p0;
+(tim6,tim7-4)=subpath(0,4) of p0 intersectiontimes subpath(4,infinity) of p0;
+filldraw subpath(0,rundy(p1,(tim0,hair)).zpet) of p1
+ ..subpath(rundy(p1,(tim1,hair)),infinity) of p1..z7l
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,(tim4,1.2hair)).zpet) of p1
+ ..subpath(rundy(p0,tim5),infinity) of p0..cycle;
+oblu:=f_obl;
+infill subpath(rundy(p0,tim6),rundy(p0,tim7).zpet) of p0 ..cycle;
+penlabels(0,1,2,3,4,4',4'',5,6,7);
+endchar;
+
+iff known chars.greek_sampi:
+bskchar "The Greek letter sampi";
+beginchar(chars.greek_sampi,12u#,x_height#,desc_depth#); uni "0x03E1";
+adjust_fit(0,if slant<>0: -.75u# else: 0 fi);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+oblu:=2oblu;
+pos1(hair,90); pos3(hair,0);
+top y1r=h+o; bot y3=-d; lft x1=2u; rt x3r=w-u;
+z2=1/3[.5[z1,z3],(x3,y1)];
+p0:=z1..z2..z3; theta=angle(direction 1 of p0)+90; pos2(curve,theta);
+p1:=z1r..z2r..z3r;
+p2:=z3l..z2l..z1l;
+pos4(hair,theta-90); pos5(hair,theta-90);
+z4=p0 intersectionpoint ((0,bar_height)--(w,bar_height));
+z5=p0 intersectionpoint ((0,0)--(w,0));
+pos6(curve,theta-100); pos7(curve,theta-80);
+pos6'(.5[curve,stem],theta-90); pos7'(.5[curve,stem],theta-90);
+lft x6l=u; z6r=z4l+whatever*dir(theta);
+z7l=z5r-abs(z6r-z4l)*dir(theta);
+z6'l=z6l+1/3(z4l-z6l)+.5hair*dir(theta-90);
+z7'r=z7r+1/3(z5r-z7r)+.5hair*dir(theta+90);
+p3:=reverse(z4l---z6'l..z6l&z6l..z6r..z6'r---z4r);
+p4:=z5r---z7'r..z7r&z7r..z7l..z7'l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(1,2,3,4,5,6,6',7,7');
+math_fit(-.5[x_height#,bar_height#]*slant+.5u#,0);
+endchar;
+
+iff known chars.greek_sampi_BB:
+bskchar "The blackboard-bold Greek letter sampi";
+beginchar(chars.greek_sampi_BB,12u#,x_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+oblu:=2oblu;
+pos1(hair,90); pos3(hair,0);
+top y1r=h+o; bot y3=-d; lft x1=2u; rt x3r=w-u;
+z2=1/3[.5[z1,z3],(x3,y1)];
+p0:=z1..z2..z3; theta=angle(direction 1 of p0)+90; pos2(cap_stem,theta);
+p1:=z1r..z2r..z3r;
+p2:=z3l..z2l..z1l;
+pos4(hair,theta-90); pos5(hair,theta-90);
+z4=p0 intersectionpoint ((0,bar_height)--(w,bar_height));
+z5=p0 intersectionpoint ((0,0)--(w,0));
+pos6(curve,theta-100); pos7(curve,theta-80);
+pos6'(.5[curve,stem],theta-90); pos7'(.5[curve,stem],theta-90);
+lft x6l=u; z6r=z4l+whatever*dir(theta);
+z7l=z5r-abs(z6r-z4l)*dir(theta);
+z6'l=z6l+1/3(z4l-z6l)+.5hair*dir(theta-90);
+z7'r=z7r+1/3(z5r-z7r)+.5hair*dir(theta+90);
+p3:=reverse(z4l---z6'l..z6l&z6l..z6r..z6'r---z4r);
+p4:=z5r---z7'r..z7r&z7r..z7l..z7'l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+z100=bsktouch(subpath(0,1) of p1,dir210,p2,dir30);
+z101=bsktouch(p1,left,subpath(0,1) of p2,right);
+tim100=xpart(p1 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p2 intersectiontimes (z100--(0,y100)));
+tim102=xpart(p1 intersectiontimes (z101--(w,y101)));
+tim103=xpart(p2 intersectiontimes (z101--(0,y101)));
+oblu:=bbw;
+infill subpath(rundy(p1,tim100),rundy(p1,tim102).zpet) of p1
+ ..subpath(rundy(p2,tim103),rundy(p2,tim101).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,6',7,7'); labels(100,101);
+endchar;
+
+iff known chars.greek_sampi_SS:
+bskchar "The sans-serif Greek letter sampi";
+beginchar(chars.greek_sampi_SS,12u#,x_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+oblu:=2oblu;
+pos1(hair,90); pos3(hair,0);
+top y1r=h+o; bot y3=-d; lft x1=2u; rt x3r=w-u;
+z2=1/3[.5[z1,z3],(x3,y1)];
+p0:=z1..z2..z3; theta=angle(direction 1 of p0)+90; pos2(curve,theta);
+p1:=z1r..z2r..z3r;
+p2:=z3l..z2l..z1l;
+pos4(hair,theta-90); pos5(hair,theta-90);
+z4=p0 intersectionpoint ((0,bar_height)--(w,bar_height));
+z5=p0 intersectionpoint ((0,0)--(w,0));
+pos6(curve,theta-100); pos7(curve,theta-80);
+lft x6l=1.25u; z6r=z4r+whatever*dir(theta);
+z7l=z5r-abs(z6r-z4l)*dir(theta);
+p3:=reverse(z4l---z6l&z6l..z6r---z4r);
+p4:=z5r---z7r&z7r..z7l---z5l;
+(tim0,tim1)=p2 intersectiontimes p4;
+(tim2,tim3-1)=p2 intersectiontimes subpath(1,infinity) of p4;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7-1)=p2 intersectiontimes subpath(1,infinity) of p3;
+filldraw subpath(0,rundy(p2,tim0).zpet) of p2
+ ..subpath(rundy(p4,tim1),rundy(p4,tim3).zpet) of p4
+ ..subpath(rundy(p2,tim2),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p2,tim6),infinity) of p2..p1..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.greek_varsampi:
+bskchar "The Archaic Greek letter sampi";
+beginchar(chars.greek_varsampi,12u#,asc_height#,0); uni "0x0373";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,-10); pos2(.5[hair,stem],0); pos1'(.5[curve,stem],0);
+pos3(curve,10); pos4(.5[hair,stem],0); pos5(stem,0); pos6(stem,0);
+bot y1=bot y3=.5[x_height,bar_height]; top y2=top y4=h; bot y5=0;
+y2r:=y4l:=y6=y2-bar+tiny; y3r:=y3r+o;
+lft x1l=u; rt x4r=w-u; x5=x6=.5w; x2'=x2r; x4'=x4l; x3=x4r;
+x2l=x1r; y1'-y1=.5bar_height; z1'l=whatever[z2l,z1l]+.5hair*right;
+bskpoints(5,6,0,hair);
+filldraw z1'l..z1l&z1l..z1r..z1'r---obl(2r,1'r,6l)---obl(6l,2r,5l)---z5l..z5rr
+ ---obl(6r,5r,4l)---z4l+oblu*left..z4l+oblu*down{down}..{dir-70}z3l
+ ..(x3r,y1)..z3r{dir130}..{up}obl(4r,3r,2l)---obl(2l,4r,1l)---cycle;
+penlabels(1,1',2,3,4,5,6); labels(3ll,5rr);
+math_fit(-.5[x_height#,bar_height#]*slant,ic#-3u#);
+endchar;
+
+iff known chars.greek_varsampi_BB:
+bskchar "The blackboard-bold Archaic Greek letter sampi";
+beginchar(chars.greek_varsampi_BB,12u#,asc_height#,0); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,-10); pos2(.5[hair,stem],0); pos1'(.5[curve,stem],0);
+pos3(curve,10); pos4(.5[hair,stem],0); pos5(.8cap_stem,0); pos6(.8cap_stem,0);
+bot y1=bot y3=.5[x_height,bar_height]; top y2=top y4=h; bot y5=0;
+y2r:=y4l:=y6=y2-bar+tiny; y3r:=y3r+o;
+lft x1l=u; rt x4r=w-u; x5=x6=.5w; x2'=x2r; x4'=x4l; x3=x4r;
+x2l=x1r; y1'-y1=.5bar_height; z1'l=whatever[z2l,z1l]+.5hair*right;
+bskpoints(5,6,0,hair);
+filldraw z1'l..z1l&z1l..z1r..z1'r---obl(2r,1'r,6l)---obl(6l,2r,5l)---z5l..z5rr
+ ---obl(6r,5r,4l)---z4l+oblu*left..z4l+oblu*down{down}..{dir-70}z3l
+ ..(x3r,y1)..z3r{dir130}..{up}obl(4r,3r,2l)---obl(2l,4r,1l)---cycle;
+penlabels(1,1',2,3,4,5,6); labels(3ll,5rr);
+infill ifobl(6r,6l,5r,5l,,)---ifobl(5l,5r,6l,6r,,)--cycle;
+endchar;
+
+iff known chars.greek_varsampi_SS:
+bskchar "The sans-serif Archaic Greek letter sampi";
+beginchar(chars.greek_varsampi_SS,12u#,asc_height#,0); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,0); pos2(.5[hair,stem],0); pos1'(.5[curve,stem],0);
+pos3(curve,0); pos4(.5[hair,stem],0); pos5(stem,0); pos6(stem,0);
+bot y1=bot y3=.5[x_height,bar_height]; top y2=top y4=h; bot y5=0;
+y2r:=y4l:=y6=y2-bar+tiny;
+lft x1l=u; rt x4r=w-u; x5=x6=.5w; x2'=x2r; x4'=x4l; x3=x4;
+x2=x1; y1'-y1=.5bar_height; z1'l=whatever[z2l,z1l];
+bskpoints(5,6,0,hair);
+filldraw z1'l..z1l&z1l..z1r...z1'r---obl(2r,1'r,6l)---obl(6l,2r,5l)---z5l..z5rr
+ ---obl(6r,5r,4l)---z4l+oblu*left..z4l+oblu*down{down}..{down}z3l
+ ..z3r{up}..{up}obl(4r,3r,2l)---obl(2l,4r,1l)---cycle;
+penlabels(1,1',2,3,4,5,6); labels(3ll,5rr);
+endchar;
+
+iff known chars.greek_qoppa:
+bskchar "The Archaic Greek letter qoppa";
+beginchar(chars.greek_qoppa,9u#,x_height#,2/3desc_depth#); uni "0x03D9";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(.75[stem,hair],0); pos6(curve,-20);
+pos6'(.5[stem,hair],0); pos6''(.9curve,-20);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; z5=z2l; x6=x5r; bot y6r=-d;
+z6'=2/3[z6l,z5l];
+z6''=z6+.5stem*up;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1:=z5l---z6'l---z6''l...z6l..z6r...z6''r---z6'r---z5r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p0,1),infinity) of p0&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,6',6'');
+math_fit(mft-.5u#,ic#-.5u#);
+endchar;
+
+iff known chars.greek_qoppa_BB:
+bskchar "The blackboard-bold Archaic Greek letter qoppa";
+beginchar(chars.greek_qoppa_BB,9u#,x_height#,2/3desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+pos5(.75[stem,hair],0); pos6(curve,-20);
+pos6'(.5[stem,hair],0); pos6''(.9curve,-20);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; z5=z2l; x6=x5r; bot y6r=-d;
+z6'=2/3[z6l,z5l];
+z6''=z6+.5stem*up;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1:=z5l---z6'l---z6''l...z6l..z6r...z6''r---z6'r---z5r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p0,1),infinity) of p0&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..{up}z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+penlabels(1,2,3,4,5,6,6',6''); labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_qoppa_SS:
+bskchar "The sans-serif Archaic Greek letter qoppa";
+beginchar(chars.greek_qoppa_SS,9u#,x_height#,2/3desc_depth#); uni "non";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(.75[stem,hair],0); pos6(curve,0);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=-o; top y4l=h+o; z5=z2l; x6=x5; bot y6=-d;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+p1:=z5l---z6l..z6r---z5r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1
+ ..subpath(rundy(p0,1),infinity) of p0&cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.greek_stigma:
+bskchar "The Greek letter stigma";
+beginchar(chars.greek_stigma,9u#,x_height#,.5desc_depth#); uni "0x03DB";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,90); pos2(hair,180); pos0(stem,90); pos0'(hair,90);
+pos3(stem,270); pos3'(stem,270); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+lft x2r=u; top y1r=h+o; y2=bar_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0'=w-u; x0=w-2.5u; y0=y1; y0'r=y0r; x3=.5w; bot y3r=bot y3'r=-o;
+x6=x5-stem; y6=y5+.5stem; x4-x3'=.75(y3'-y4);
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+filldraw z0r---z1r..z2r..z3r---z3'r..z4r..z5r..z6''..z6'..z6l
+ ..z5l{right}..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l..z0'r---cycle;
+penlabels(0,0',1,2,3,3',4,5,6); labels(6',6'');
+math_fit(mft-.5u#,0);
+endchar;
+
+iff known chars.greek_stigma_BB:
+bskchar "The blackboard-bold Greek letter stigma";
+beginchar(chars.greek_stigma_BB,9u#,x_height#,.5desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(.8cap_stem,90); pos2(hair,180); pos0(.8cap_stem,90); pos0'(hair,90);
+pos3(.8cap_stem,270); pos3'(.8cap_stem,270); pos4(hair,180); pos5(hair,100); pos6(stem,0);
+lft x2r=u; top y1r=h+o; y2=bar_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0'=w-u; x0=w-2.5u; y0=y1; y0'r=y0r; x3=.5w; bot y3r=bot y3'r=-o;
+x6=x5-stem; y6=y5+.5stem; x4-x3'=.75(y3'-y4);
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+filldraw z0r---z1r..z2r..z3r---z3'r..z4r..z5r..z6''..z6'..z6l
+ ..z5l{right}..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l..z0'r---cycle;
+penlabels(0,0',1,2,3,3',4,5,6); labels(6',6'');
+path p[]; numeric tim[];
+p100:=subpath(0,6) of (z0'r---z0r---z1r..z2r..z3r---z3'r..z4r..z5r..z6''..z6'..z6l..{right}z5l);
+p101:=subpath(1,infinity) of (z5l{right}..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l);
+z100=bsktouch(subpath(0,3) of p100,right,p101,left);
+z101=bsktouch(subpath(3,4) of p100,right,p101,left);
+z102=bsktouch(subpath(5,infinity) of p100,right,p101,left);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(w,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+tim104=xpart(p100 intersectiontimes (z102--(0,y102)));
+tim105=xpart(p101 intersectiontimes (z102--(w,y102)));
+oblu:=bbw;
+infill subpath(rundy(p100,0),rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),rundy(p101,infinity).zpet) of p101..cycle;
+infill subpath(rundy(p100,tim102),rundy(p100,tim104).zpet) of p100
+ ..subpath(rundy(p101,tim105),rundy(p101,tim103).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.greek_stigma_SS:
+bskchar "The sans-serif Greek letter stigma";
+beginchar(chars.greek_stigma_SS,9u#,x_height#,.5desc_depth#); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,90); pos2(hair,180); pos0(stem,90); pos0'(hair,90);
+pos3(stem,270); pos3'(stem,270); pos4(hair,180); pos5(hair,100); pos6(hair,90);
+lft x2r=u; top y1r=h+o; y2=bar_height-.5d; x1=.5w;
+rt x4r=w-u; y4=-.5d; x5=.5[x3,x4]; bot y5l=-d;
+rt x0'=w-u; x0=w-2.5u; y0=y1; y0'r=y0r; x3=.5w; bot y3r=bot y3'r=-o;
+x6=x5-stem; y6=y5; x4-x3'=.75(y3'-y4);
+z6'=z6+.2stem*up+o*left; z6''=z6+.5(stem-currentbreadth)*dir-45;
+filldraw z0r---z1r..z2r..z3r---z3'r..z4r..z5r---z6r
+ ..z6l---z5l..z4l..z3'l---z3l..z2l..z1l---z0l..{up}z0'l..z0'r---cycle;
+penlabels(0,0',1,2,3,3',4,5,6); labels(6',6'');
+endchar;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% One cyrilic letter
+iff known chars.cyrilic_Sha:
+bskchar "The Cyrilic letter Sha";
+beginchar(chars.cyrilic_Sha,17.5u#,cap_height#,0); uni "0x0428";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+pos5(cap_stem,0); pos6(cap_stem,0);
+bot y1=bot y3=0; top y2=top y4=top y6=h; y5=y1+.5[cap_hair,cap_stem]-currentbreadth;
+lft x1l=lft x2l=2u; rt x3r=rt x4r=w-2u; x5=x6=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_br(3r);
+{{ numeric old_jut; old_jut:=cap_jut; save cap_jut; cap_jut:=.75old_jut;
+ cap_serifs_tl(6l); cap_serifs_tr(6r);
+}};
+y1r:=y3l:=y5;
+oblu:=2oblu;
+filldraw z1l.b{down}..{left}z1l.c..z1l.a---z3r.a..z3r.c{left}..z3r.b---z4r.b
+ ..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b---obl(3l,4l,5r)
+ ---obl(5r,3l,6r)---z6r.b..{right}z6r.c..z6r.a---z6l.a..{right}z6l.c
+ ..z6l.b---obl(5l,6l,1r)---obl(1r,5l,2r)---z2r.b..{right}z2r.c..z2r.a
+ ---z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Next letters are named ``calligraphic'' but they are only ``decorative''
+numeric cal_stem, cal_hair, cal_curve;
+cal_curve=cap_curve+.25cap_hair; cal_stem=cap_stem+.25cap_hair; cal_hair:=.5[cap_hair,cap_stem];
+
+iff known chars.cal_A:
+bskchar "The calligraphic letter A";
+beginchar(chars.cal_A,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0);
+pos7(.65[cal_stem,cal_hair],-10); pos8(cal_stem,10); pos9(cal_hair,90);
+pos11(cal_hair,-10); pos12(.5[cal_stem,cal_hair],60); pos13(.5[cal_stem,cal_hair],60);
+rt x1l=u; y1=cal_stem; bot y2l=-d-o; .5[x1,x3]=x2=x1+cal_stem; y3=.5bar_height;
+y4=.5[bar_height,x_height]; z4=z3+whatever*dir75; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair; y8=cal_curve; y7=y5l-cal_curve; x8r=x7r=x5-.5cal_hair;
+bot y9l=0; x9=.5[x8r,w];
+z10=(w,y8r); z11r=z5r; z12r=z4; y13=y4; x13=x7r;
+p1:=z1r{down}..z2r..z3r..z4r..{right}z5r..{down}z6r;
+p2:=z6l{up}..{left}z5l..z4l..z3l..z2l..{up}z1l;
+p3:=z11l---z7l..z8l..z9l..{dir100}z10;
+p4:=z10+left{dir-80}..z9r..z8r..z7r---z11r;
+p5:=z12r{right}..{dir30}z13r;
+p6:=z13l{dir-120}..{left}z12l;
+(tim1,tim2)=p2 intersectiontimes p4;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p6 intersectiontimes p2;
+(tim7,tim8)=p2 intersectiontimes p3;
+(tim9,tim10)=p2 intersectiontimes p5;
+(tim11,tim12)=p5 intersectiontimes p3;
+filldraw p1..subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(0,rundy(p4,tim2).zpet) of p4
+ ..reverse subpath(rundy(p3,tim3),infinity) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,tim5).zpet) of p6
+ ..subpath(rundy(p2,tim6),infinity) of p2..cycle;
+oblu:=2oblu;
+infill subpath(rundy(p2,tim7),rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p5,tim10),rundy(p5,tim11).zpet) of p5
+ ..reverse subpath(rundy(p3,tim8),rundy(p3,tim12).zpet) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,11,12,13); labels(10);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_B:
+bskchar "The calligraphic letter B";
+beginchar(chars.cal_B,11u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[], bpos;
+bpos=.5[x_height,bar_height];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+pos10(.65[cal_stem,cal_hair],10); pos11(cal_stem,-10);
+pos12(cal_hair,-90); pos13(cal_hair,180);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_hair; y9=bpos+cal_stem; bot y8r=bpos-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=.5(h-bpos); .5[y6,y7]=.5[h,bpos]; x6=x7; rt x6r=w-3.5u;
+y10-y11=1/3bpos; .5[y10,y11]=.5bpos; x10=x11; rt x10r=w-u;
+lft x13r=x2r+cal_stem; y13=cal_stem; bot y12r=-d-o; x12=x13+cal_stem;
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+p2:=z8r{right}..z10l..z11l..z12l..{up}z13l;
+p3:=z13r{down}..z12r..z11r..z10r..{left}z8l;
+z100=bsktouch(p3,up,p1,down);
+tim0=xpart(p3 intersectiontimes (z100--(x100,y11)));
+tim1=xpart(p1 intersectiontimes (z100--(x100,y6)));
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw subpath(0,4) of p0..p2
+ ..subpath(0,rundy(p3,tim0).zpet) of p3
+ ..subpath(rundy(p1,tim1),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); labels(100);
+math_fit(0,.5u#);
+endchar;
+
+iff known chars.cal_C:
+bskchar "The calligraphic letter C";
+beginchar(chars.cal_C,9u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+top y1l=h+o; x1=w-u-cal_hair; rt x2l=w; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/3h;
+bot y5l=-o; x5=.5[x4r,w]; z6=(w,cal_curve+cal_stem);
+filldraw z2l{up}..z1l..z3l..z4l..z5l..{dir90}z6
+ ..z6+left{dir-100}..z5r..z4r..z3r..z1r..{down}z2r..cycle;
+penlabels(1,2,3,4,5,6);
+math_fit(-u#,1.5u#);
+endchar;
+
+iff known chars.cal_D:
+bskchar "The calligraphic letter D";
+beginchar(chars.cal_D,12u#,cap_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+path p[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_stem; y9=cal_stem; bot y8r=-d-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=1/3h; .5[y6,y7]=.5h; x6=x7; rt x6r=w-u;
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw p0..p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_E:
+bskchar "The calligraphic letter E";
+beginchar(chars.cal_E,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_stem,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_hair,180);
+pos7(cal_hair,180); pos8(.5[cal_stem,cal_hair],90);
+pos10(cal_hair,0); pos11(.5[cal_hair,hair],0); pos12(cal_hair,90);
+pos13(cal_hair,60); pos14(cal_hair,60); pos15(cal_stem,75); pos16(cal_stem,75);
+y1=h; bot y3l=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+rt x7l=w-u; lft x6l=x7; bot y7=0; top y6=.5bar_height;
+bot y8l=0; x8=x2l; y7r:=y8r-currentbreadth; top y9=bot y8l; x8l-x9=2(y8r-y8l);
+top y10=h; rt x10r=w-1.5u; z11=z10+cap_stem*dir(-100); z12r=z1l;
+y10r:=bot bot y10r; y10l:=bot bot y10r;
+x10'-x10l=x10-x10r; y10'=y10r;
+y13=y14=.25[y15,y15l]=.52[y1r,y8r]; x13=x2l; x14=.5[x2r,x6l]; x15=x14+cal_hair;
+z16=z15+hair*right;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z9{dir10}..z8l{dir10}..z7l{dir-10}..{dir130}z6l;
+p4:=z6r{dir-40}..z7r{dir160}..{dir190}z8r..{dir190}z9;
+p5:=z11r---z10r..z10..z12r..z4r;
+p6:=z4l..z12l..z10'..z10l---z11l;
+p7:=z13l{dir10}..{dir-10}z14l..z15l..z16l---z16r..z15r..z14r{dir170}..{dir190}z13r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p4;
+(tim4,tim5)=p2 intersectiontimes p4;
+(tim6,tim7)=p2 intersectiontimes p6;
+(tim8,tim9)=p2 intersectiontimes p7;
+(tim10,tim11-2)=p2 intersectiontimes subpath(2,infinity) of p7;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p4,tim3),infinity) of p4..p3
+ ..subpath(0,rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p2,tim4),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p7,tim9),rundy(p7,tim11).zpet) of p7
+ ..subpath(rundy(p2,tim10),rundy(p2,tim6).zpet) of p2
+ ..subpath(rundy(p6,tim7),infinity) of p6
+ ..p5
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); labels(10');
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_F:
+bskchar "The calligraphic letter F";
+beginchar(chars.cal_F,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90);
+pos6(cal_hair,0); pos7(.5[cal_hair,hair],0); pos8(cal_hair,90);
+pos9(cal_hair,60); pos10(cal_hair,60); pos11(cal_stem,75); pos12(cal_stem,75);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+top y6=h; rt x6r=w-1.5u; z7=z6+cap_stem*dir(-100); z8r=z1l;
+y6r:=bot bot y6r; y6l:=bot bot y6r;
+x6'-x6l=x6-x6r; y6'=y6r;
+y9=y10=y11=.52y1r; x9=x2l; x10=.5[x2r,x6]; x11=x10+cal_hair;
+z12=z11+hair*right;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z7r---z6r..z6..z8r..z4r;
+p4:=z4l..z8l..z6'..z6l---z7l;
+p5:=z9l{dir10}..{dir-10}z10l..z11l..z12l---z12r..z11r..z10r{dir170}..{dir190}z9r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p4;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7-2)=p2 intersectiontimes subpath(2,infinity) of p5;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p5,tim5),rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p2,tim6),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p4,tim3),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(6');
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_G:
+bskchar "The calligraphic letter G";
+beginchar(chars.cal_G,9.5u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cal_curve;
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+pos6(cal_hair,180); pos7(cal_hair,0); pos8(cal_hair,90); pos9(cal_hair,180);
+top y1l=h+o; x1=w-u-cal_hair; rt x2l=w; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/3h;
+bot y5l=-o; x5=.5[x4r,w]; z6=(w,y4);
+x7r=x5; y7=-d+cal_stem; bot y8l=-d-o; .5[x7,x9]=x8=x7+cal_stem; y9=-.35d;
+p0:=z2l{up}..z1l..z3l..z4l..z5l..{dir90}z6;
+p1:=z6+left{dir-100}..z5r..z4r..z3r..z1r..{down}z2r;
+p2=z6l{down}..z9l..z8l..{up}z7l..z7r{down}..z8r..z9r..{up}z6r;
+(tim0,tim1)=p0 intersectiontimes p2;
+filldraw reverse p1
+ ..subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(0,rundy(p0,tim0).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_H:
+bskchar "The calligraphic letter H";
+beginchar(chars.cal_H,14.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_hair,-10);
+pos7(.65[cal_stem,cal_hair],-10); pos8(.45[cal_stem,cal_hair],10); pos9(cal_hair,90);
+pos11(cal_hair,60); pos12(cal_hair,60);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r; top y6l=h; x6r=w-u-cal_hair;
+y8=cal_curve; y7=h-cal_curve-cal_hair; x8r=x7r=w-u-1.5cal_hair;
+bot y9l=0; x9=.5[x8r,w]; z10=(w,y8r);
+y11r=y12=.75[bar_height,x_height]; x11r=x2l; x12=x7r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z11l{right}..{dir50}z12l;
+p4:=z12r{dir-150}..{left}z11r;
+p5:=z6l---z7l..z8l..z9l..{dir100}z10;
+p6:=z10+left{dir-80}..z9r..z8r..z7r---z6r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p3;
+(tim4,tim5)=p5 intersectiontimes p3;
+(tim6,tim7)=p5 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p3,tim3),rundy(p3,tim5).zpet) of p3
+ ..subpath(rundy(p5,tim4),infinity) of p5..p6
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p4,tim7),rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p2,tim8),infinity) of p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_I:
+bskchar "The calligraphic letter I";
+beginchar(chars.cal_I,9u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cal_hair,60); pos5(cal_hair,60); pos6(cal_hair,90);
+pos7(cal_hair,90); pos8(cal_hair,60); pos9(cal_hair,60);
+y1=h; bot y3r=0; x1l-x3l=u; x1=.5w;
+x2l=x3r+.5hair; y2=1/3x_height;
+top y5=h; rt x5=rt x8=w-u; lft x4=lft x7=u; z4=whatever[z5r,z1l];
+bot y8=0; z7=whatever[z8l,z3r];
+z6r=z1l; z9l=z3r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r;
+p2:=z5r{dir200}..z6r..{left}z4r;
+p3:=z4l{right}..z6l..{dir20}z5l;
+p4:=z7l{dir20}..z9l..{right}z8l;
+p5:=z8r{left}..z9r..{dir200}z7r;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p1 intersectiontimes p3;
+(tim4,tim5)=p0 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p5;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p5,tim5),infinity) of p5
+ ..p4
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p1,tim6),rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p3,tim3),infinity) of p3
+ ..p2..subpath(0,rundy(p3,tim1).zpet) of p3
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_J:
+bskchar "The calligraphic letter J";
+beginchar(chars.cal_J,8u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30);
+pos3(cap_hair,60); pos4(cap_hair,90); pos5(cal_hair,260);
+pos6(cal_stem,210);
+y1=h; rt x1r=w-u;
+top y3r=h+o; rt x1r-lft x3=4u;
+x2l=x1-u; y2=1/3x_height; z4r=z1r;
+y6=.7bar_height; lft x6r=u; x5=1/3[x6,x2]; y5=0;
+p0:=z1l{z2l-z1l}..z2l..z5l..{up}z6l;
+p1:=z3l{dir-20}..{right}z4l;
+p2:=z6+o*up..z6r{down}..z5r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z3r;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),infinity) of p0..p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_K:
+bskchar "The calligraphic letter K";
+beginchar(chars.cal_K,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_stem,-10);
+pos7(cal_stem,10); pos8(cal_hair,90);
+pos10(cal_stem,20); pos11(cal_hair,-10); pos12(cal_stem,0);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+bot y8l=0; y7=cal_curve; x7r=w-u-1.5cal_hair;
+x8=.5[x7r,w]; z9=(w,y7r);
+x6=x2l; y6=.5[x_height,bar_height]; z11l=z6l; x10r=w-2u; y10=h;
+z12=z10+(u,-cal_stem);;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z9+left{dir-80}..z8r..z7r..z6r;
+p3:=z6l..{dir-60}z7l..z8l..{dir100}z9;
+p4:=z10l{dir-40}..z12l{(z11-z12) rotated 20}..{(z11-z12) rotated -10}z11l;
+p5:=z11r{(z12-z11) rotated -10}..{(z12-z11) rotated 20}z12r..{dir130}z10r;
+p6:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p4;
+(tim4,tim5)=p0 intersectiontimes p3;
+(tim6,tim7)=p6 intersectiontimes p3;
+(tim8,tim9)=p6 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p4,(tim3,.5oblu)),infinity) of p4
+ ..subpath(0,rundy(p3,(tim5,.5oblu)).zpet) of p3
+ ..subpath(rundy(p0,tim4),infinity) of p0
+ ..subpath(0,rundy(p6,tim6).zpet) of p6
+ ..subpath(rundy(p3,tim7),infinity) of p3
+ ..subpath(0,rundy(p2,infinity).zpet) of p2
+ ..subpath(rundy(p5,0),infinity) of p5..z10
+ ..subpath(0,rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p6,tim8),infinity) of p6
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+math_fit(0,u#);
+endchar;
+
+iff known chars.cal_L:
+bskchar "The calligraphic letter L";
+beginchar(chars.cal_L,13.5u#,cap_height#,0); uni "non";
+italcorr 0;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_stem,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90); pos6(cal_hair,180);
+pos7(cal_hair,180); pos8(.5[cal_stem,cal_hair],90);
+y1=h; bot y3l=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+rt x7l=w-u; lft x6l=x7; bot y7=0; top y6=.5bar_height;
+bot y8l=0; x8=x2l; y7r:=y8r-currentbreadth; top y9=bot y8l; x8l-x9=2(y8r-y8l);
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z9{dir10}..z8l{dir10}..z7l{dir-10}..{dir130}z6l;
+p4:=z6r{dir-40}..z7r{dir160}..{dir190}z8r..{dir190}z9;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p4;
+(tim4,tim5)=p2 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p4,tim3),infinity) of p4..p3
+ ..subpath(0,rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p2,tim4),infinity) of p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(9);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_M:
+bskchar "The calligraphic letter M";
+beginchar(chars.cal_M,16u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(hair,-30); pos5(hair,-30); pos6(cal_hair,210); pos7(cal_stem,200);
+pos8(hair,180); pos9(hair,90); pos10(cal_hair,-10);
+pos11(.65[cal_stem,cal_hair],-10); pos12(cal_stem,10); pos13(cal_hair,90);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=u; lft x1l=2u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x4l=0; y4=y1-cal_hair; y5=y6r; z5=z4+whatever*dir60; z6r=z1r+cal_hair*dir60;
+x7=.5w ;y7r=0;
+top y9r=top y10l=h; y8=0; x8l=x7r; x9=w-2u;
+x10r=w-u-cal_hair;
+y12=cal_curve; y11=h-cal_curve-cal_hair; x12r=x11r=w-u-1.5cal_hair;
+bot y13l=0; x13=.5[x12r,w]; z14=(w,y12r);
+p1:=z4r---z5r..z6r..{down}z7r;
+p2:=z7l{up}..z6l..z5l---z4l;
+p3:=z8l{up}..z9l;
+p4:=z9r..{down}z8r;
+p5:=z10l---z11l..z12l..z13l..{dir100}z14;
+p6:=z14+left{dir-80}..z13r..z12r..z11r---z10r;
+(tim0,tim1)=p1 intersectiontimes p4;
+(tim2,tim3)=p3 intersectiontimes p5;
+z100=bsktouch(p4,left,p2,right);
+tim4=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim5=xpart(p2 intersectiontimes(z100--(0,y100)));
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p5,tim3),infinity) of p5
+ ..subpath(0,rundy(p6,infinity).zpet) of p6
+ ..subpath(rundy(p4,0),rundy(p4,tim4).zpet) of p4
+ ..subpath(rundy(p2,tim5),infinity) of p2..cycle;
+math_fit(0,ic#);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.cal_N:
+bskchar "The calligraphic letter N";
+beginchar(chars.cal_N,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(hair,-30); pos5(hair,-30); pos6(cal_hair,210); pos7(cal_stem,200);
+pos8(hair,180); pos9(cal_stem,90); pos10(cal_stem,60);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=u; lft x1l=2u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x4l=0; y4=y1-cal_hair; y5=y6r; z5=z4+whatever*dir60; z6r=z1r+cal_hair*dir60;
+x7=w-3u; y7r=0;
+top y10r=h; y9=h-cal_stem; y8=0; x8l=x7r; x9=w-2.5u; rt x10=w-u;
+p1:=z4r---z5r..z6r..{down}z7r;
+p2:=z7l{up}..z6l..z5l---z4l;
+p3:=z8l{(z9-z8)rotated 10}..{(z9-z8)rotated -10}z9l..{right}z10l;
+p4:=z10r{left}..z9r{(z8-z9)rotated -10}..{(z8-z9) rotated 10}z8r;
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+(tim0,tim1)=p1 intersectiontimes p4;
+z100=bsktouch(p4,left,p2,right);
+tim2=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p2 intersectiontimes(z100--(0,y100)));
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p4,tim2).zpet) of p4
+ ..subpath(rundy(p2,tim3),infinity) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_O:
+bskchar "The calligraphic letter O";
+beginchar(chars.cal_O,10u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+pos6(.65[cal_stem,cal_hair],170);
+top y1l=h+o; x1=w-2u-cal_hair; rt x2l=w-u; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/3h;
+bot y5l=-o; x5=.5[x4r,w];
+y6=.55[y4,y3]; rt x6l=w; y7=y2-cal_hair; lft x7=rt x5;
+filldraw z2l{up}..z1l..z3l..z4l..z5l..z6l..{dir160}z7..{dir-20}z7+down
+ ..z6r..z5r..z4r..z3r..z1r..{down}z2r..cycle;
+penlabels(1,2,3,4,5,6,7);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_P:
+bskchar "The calligraphic letter P";
+beginchar(chars.cal_P,10u#,cap_height#,0); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+path p[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_hair; y9=bar_height+cal_stem; bot y8r=bar_height-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=.5(h-bar_height); .5[y6,y7]=.5[h,bar_height]; x6=x7; rt x6r=w-2u;
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+filldraw z1l{z2l-z1l}..z2l..z3l&z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r..cycle;
+filldraw p0..p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9);
+math_fit(0,-2u#);
+endchar;
+
+iff known chars.cal_Q:
+bskchar "The calligraphic letter Q";
+beginchar(chars.cal_Q,11u#,cap_height#,.75desc_depth#); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(cal_hair,-90); pos2(cal_hair,180);
+pos3(.65[cal_stem,cal_hair],-10); pos4(cal_stem,10); pos5(cal_hair,90);
+pos6(.65[cal_stem,cal_hair],170); pos8(cal_hair,160); pos9(cal_hair,60);
+pos10(cal_hair,90);
+top y1l=h+o; x1=w-3u-cal_hair; rt x2l=w-2u; y2=y1-cal_hair;
+x3=x4; lft x3l=u; .5[y3,y4]=.5h; y3-y4=1/6h;
+bot y5l=1/12h; x5=.5[x4r,x6r]; y8=.5y5; x8r=x2;
+y6=.55[y4,y3]; rt x6l=w-3u; y7=y2-cal_hair; lft x7=rt x5;
+x9=x5; y9l=-.7d; rt x10=w; bot y10l=-d;
+p0:=z9l{z8-z9}..z8l..z2l..z1l..z3l..z4l..z5l..z6l..{dir160}z7..{dir-20}z7+down
+ ..z6r..z5r..z4r..z3r..z1r..z2r..z8r..{z9-z8}z9r;
+p1:=z10r{dir200}..{left}z9;
+p2:=z9l{right}..{dir20}z10l;
+(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p1;
+filldraw subpath(rundy(p2,0),infinity) of p2
+ ..subpath(0,rundy(p1,(tim1,2oblu)).zpet) of p1
+ ..subpath(rundy(p0,(tim0,2oblu)),rundy(p0,infinity).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10);
+math_fit(-u#,u#);
+endchar;
+
+iff known chars.cal_R:
+bskchar "The calligraphic letter R";
+beginchar(chars.cal_R,10.5u#,cap_height#,0); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20); pos4(hair,150);
+pos5(.9cal_hair,80); pos6(.65[cal_stem,cal_hair],10); pos7(cal_stem,-10);
+pos8(cal_hair,-90); pos9(cal_hair,180);
+pos10(.5[cal_stem,cal_hair],0); pos11(cal_stem,10); pos12(cal_hair,90);
+y1=h-cap_stem-cap_hair; bot y3r=0; lft x3l=0; lft x1l=u;
+x2l=x3r+.5hair; y2=1/3x_height;
+lft x9r=x2r+cal_hair; y9=bar_height+cal_stem; bot y8r=bar_height-o; x8=x9+cal_stem;
+x4l=0; top y4=h-cap_stem; top y5r=h; .75[x5,x4]=x1;
+y6-y7=.5(h-bar_height); .5[y6,y7]=.5[h,bar_height]; x6=x7; rt x6r=w-2.5u;
+bot y12l=0; y11=cal_curve; x11r=w-u-1.5cal_hair;
+x12=.5[x11r,w]; z13=(w,y11r);
+x10r=x2l; y10=.5[x_height,bar_height];
+p0:=z4l..z5l..z6l..z7l..z8l..{up}z9l;
+p1:=z9r{down}..z8r..z7r..z6r..z5r..z4r;
+p2:=z13+left{dir-80}..z12r..z11r..z10r..z10l;
+p3:=z10l..{dir-60}z11l..z12l..{dir100}z13;
+p4:=z1l{z2l-z1l}..z2l..z3l;
+p5:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r;
+(tim0,tim1)=p4 intersectiontimes p2;
+(tim2,tim3)=p4 intersectiontimes p3;
+(tim4,tim5)=p5 intersectiontimes p3;
+z100=bsktouch(subpath(1,infinity) of p1,down,p2,up);
+tim6=xpart(p1 intersectiontimes (z100--(x100,h)));
+tim7=xpart(p2 intersectiontimes (z100--(x100,0)));
+(tim8,tim9)=p5 intersectiontimes p2;
+tim10=xpart(p2 intersectiontimes (z8l---(x8,0)));
+filldraw subpath(0,rundy(p4,tim0).zpet) of p4
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim2),infinity) of p4
+ ..subpath(0,rundy(p5,tim4).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1
+ ..subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p2,tim10),rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p5,tim8),infinity) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); labels(100);
+math_fit(0,ic#);
+endchar;
+
+iff known chars.cal_S:
+bskchar "The calligraphic letter S";
+beginchar(chars.cal_S,9u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos2(cal_hair,30); pos3(cal_stem,225); pos4(cal_hair,30);
+pos5(cal_stem,180); pos6(cal_stem,180);
+y5=.5[y2l,y3]+.5like_cap_hair;
+y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u;
+x3=x4=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l];
+y3=.5[y2l,y4r]+.5cap_hair;
+x5l=3u; x1r=w-x5r+.5u;
+pos1(cal_stem,-10); y1=.5[y5,y2l];
+pos7(cap_stem,30); x7l=w-x6l; y7=y6;
+filldraw z1r{dir110}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r..z7l{down}..z4l{right}
+ ..z6l..z3l..z5l..{right}z2l..{dir-70}z1l..cycle;
+math_fit(0,0);
+penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.cal_T:
+bskchar "The calligraphic letter T";
+beginchar(chars.cal_T,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90);
+pos6(cal_hair,0); pos7(.5[cal_hair,hair],0); pos8(cal_hair,90);
+pos9(cal_hair,180); pos10(.5[cal_hair,hair],180);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=.5w;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+top y6=h; rt x6r=w-1.5u; z7=z6+cap_stem*dir(-100); z8r=z1l;
+y6r:=bot bot y6r; y6l:=bot bot y6r;
+x6'-x6l=x6r-x6; y6'=y6r;
+top y9=h; lft x9r=.5u; z10=z9+cap_stem*dir(-70);
+y9r:=y6r; y9l:=y6l;
+x9'-x9l=x9-x9r; y9'=y9r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z8l..z9'..z9l---z10l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..z9..z9r---z10r;
+p3:=z7r---z6r..z6..z8r..z4r;
+p4:=z8l{dir20}..{dir-20}z6'..z6l---z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p4;
+tim4=xpart(p3 intersectiontimes (z8r--(x8r,h+stem)));
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p4,tim3),infinity) of p4
+ ..subpath(0,rundy(p3,tim4)) of p3
+ ..subpath(rundy(p2,4),infinity) of p2
+ ..reverse subpath(rundy(p1,tim1),infinity) of p1
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(6',9');
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_U:
+bskchar "The calligraphic letter U";
+beginchar(chars.cal_U,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30);
+pos3(cap_hair,60); pos4(cap_hair,90); pos5(cal_hair,260);
+pos6(cal_stem,150); pos7(cal_stem,160); pos8(hair,-90);
+y1=h; rt x1r=w-u; x7r=1.5u; y7=.5[x_height,h]; y8l=h+o; x8=x7r-u;
+top y3r=h+o; rt x1r-lft x3=3u;
+x2l=x1-u; z4r=z1r;
+y2=y6=.5bar_height; lft x6r=u; x5=1/3[x6,x2]; y5=0;
+p0:=z1l{z2l-z1l}..z2l..z5l..z6l..{dir80}z7l..{dir200}z8l;
+p1:=z3l{dir-20}..{right}z4l;
+p2:=z8r{dir20}..z7r{dir-100}..z6r..z5r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z3r;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(rundy(p0,tim0),infinity) of p0..p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+math_fit(0,0);
+endchar;
+
+iff known chars.cal_V:
+bskchar "The calligraphic letter V";
+beginchar(chars.cal_V,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(hair,-30); pos3(cal_hair,210); pos4(cal_stem,200);
+pos5(hair,180); pos6(cal_stem,90); pos7(cal_stem,60);
+y3r=h-cap_hair; lft x3r=2u+cal_hair;
+lft x1l=0; y1=.9h; y2=y3r; z2=z1+whatever*dir60;
+x4=.5w; y4r=0;
+top y7r=h; y6=h-cal_stem; y5=0; x5l=x4r; x6=w-2.5u; rt x7=w-u;
+p1:=z1r---z2r..z3r..{down}z4r;
+p2:=z4l{up}..z3l..z2l---z1l;
+p3:=z5l{(z6-z5)rotated -10}..{(z6-z5)rotated 10}z6l..{right}z7l;
+p4:=z7r{left}..z6r{(z5-z6)rotated 10}..{(z5-z6) rotated -10}z5r;
+(tim0,tim1)=p1 intersectiontimes p4;
+z100=bsktouch(p4,left,p2,right);
+tim2=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p2 intersectiontimes(z100--(0,y100)));
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p4,tim2).zpet) of p4
+ ..subpath(rundy(p2,tim3),infinity) of p2..cycle;
+penlabels(1,2,3,4,5,6,7);
+math_fit(0,-2u#);
+endchar;
+
+iff known chars.cal_W:
+bskchar "The calligraphic letter W";
+beginchar(chars.cal_W,16.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(hair,-30); pos2(hair,-30); pos3(cal_hair,210); pos4(cal_stem,200);
+pos5(hair,180); pos6(cal_stem,90); pos7(cal_stem,60);
+pos8(hair,-30); pos9(hair,-30); pos10(cal_hair,210); pos11(cal_stem,200);
+pos12(hair,180); pos13(cal_stem,90); pos14(cal_stem,60);
+y3r=y10r=h-cap_hair; lft x3r=lft x10r-5u=u+cal_hair;
+lft x1l=lft x8l-5u=0; y1=y8=.9h; y2=y9=y3r; z2=z1+whatever*dir60; z9=z8+whatever*dir60;
+x4=.375w; x11=.7w; y4r=y11r=0;
+top y7r=top y14r=h; y6=y13=h-cal_stem; y5=y12=0; x5l=x4r; x12l=x11r; x6=w-6u; x13=w-1.5u;
+rt x7=w-5u; rt x14=w;
+p1:=z1r---z2r..z3r..{down}z4r;
+p2:=z4l{up}..z3l..z2l---z1l;
+p3:=z5l{(z6-z5)rotated -10}..{(z6-z5)rotated 10}z6l..{right}z7l;
+p4:=z7r{left}..z6r{(z5-z6)rotated 10}..{(z5-z6) rotated -10}z5r;
+p5:=z8r---z9r..z10r..{down}z11r;
+p6:=z11l{up}..z10l..z9l---z8l;
+p7:=z12l{(z13-z12)rotated -10}..{(z13-z12)rotated 10}z13l..{right}z14l;
+p8:=z14r{left}..z13r{(z12-z13)rotated 10}..{(z12-z13) rotated -10}z12r;
+(tim0,tim1)=p1 intersectiontimes p4;
+z100=bsktouch(p4,left,p2,right);
+tim2=xpart(p4 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p2 intersectiontimes(z100--(0,y100)));
+(tim4,tim5)=p3 intersectiontimes p5;
+z101=bsktouch(p8,left,p6,right);
+tim6=xpart(p8 intersectiontimes(z101--(w,y101)));
+tim7=xpart(p6 intersectiontimes(z101--(0,y101)));
+(tim8,tim9)=p5 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p3,tim4).zpet) of p3
+ ..subpath(rundy(p5,tim5),infinity) of p5
+ ..p7
+ ..subpath(0,rundy(p8,tim6).zpet) of p8
+ ..subpath(rundy(p6,tim7),2) of p6
+ ..subpath(1,rundy(p5,tim8).zpet) of p5
+ ..subpath(rundy(p4,tim9),rundy(p4,tim2).zpet) of p4
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14); labels(100,101);
+math_fit(0,-u#);
+endchar;
+
+iff known chars.cal_X:
+bskchar "The calligraphic letter X";
+beginchar(chars.cal_X,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0); pos7(cal_stem,-10);
+pos8(cal_stem,10); pos9(cal_hair,90);
+rt x1l=u; y1=cal_stem; bot y2l=-d-o; .45[x1,x3]=x2=x1+cal_stem; y3=.45bar_height;
+y4=1[bar_height,x_height]; z4=z3+whatever*dir75; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair; bot y9l=0; y8=cal_curve; x8r=w-u-1.5cal_hair;
+x9=.5[x8r,w]; z10=(w,y8r);
+lft x7l=u; y7=h;
+p0:=z1r{down}..z2r..z3r..z4r..{right}z5r..{down}z6r;
+p1:=z6l{up}..{left}z5l..z4l..z3l..z2l..{up}z1l;
+p2:=z10+left{dir-80}..z9r..z8r..z7r;
+p3:=z7l..{dir-60}z8l..z9l..{dir100}z10;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4,tim5)=p1 intersectiontimes p2;
+(tim6,tim7)=p1 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..(reverse subpath(0,rundy(p3,tim1).zpet) of p3)
+ ..(reverse subpath(rundy(p2,(tim3,2oblu)),infinity) of p2)
+ ..subpath(rundy(p0,(tim2,2oblu)),infinity) of p0
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..(reverse subpath(0,rundy(p2,tim5).zpet) of p2)
+ ..(reverse subpath(rundy(p3,(tim7,2oblu)),infinity) of p3)
+ ..subpath(rundy(p1,(tim6,2oblu)),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(10);
+math_fit(-.5u#,u#);
+endchar;
+
+iff known chars.cal_Y:
+bskchar "The calligraphic letter Y";
+beginchar(chars.cal_Y,12u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0);
+pos7(hair,-30); pos8(hair,-30); pos9(cal_hair,210); pos10(cal_stem,200);
+y1=cal_stem; bot y2l=-d-o; .5[x1,x3]=x2=4.5u=x1+cal_stem; y3=.5bar_height;
+y4=.5[bar_height,x_height]; z4=z3+whatever*dir80; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair;
+y9r=h-cap_hair; lft x9r=2u+cal_hair;
+lft x7l=u; y7=.9h; y8=y9r; z8=z7+whatever*dir60;
+x10l=x4; y10r=0;
+p1:=z6r{up}..{left}z5r..z4r..z3r..z2r..{up}z1r;
+p2:=z1l{down}..z2l..z3l..z4l..z5l{right}..{down}z6l;
+p3:=z7r---z8r..z9r..{down}z10r;
+p4:=z10l{up}..z9l..z8l---z7l;
+(tim0,tim1)=p3 intersectiontimes p1;
+z100=bsktouch(p1,left,p4,right);
+tim2=xpart(p1 intersectiontimes(z100--(w,y100)));
+tim3=xpart(p4 intersectiontimes(z100--(0,y100)));
+filldraw subpath(0,rundy(p3,tim0).zpet) of p3
+ ..subpath(rundy(p1,tim1),infinity) of p1..p2
+ ..subpath(0,rundy(p1,tim2).zpet) of p1
+ ..subpath(rundy(p4,tim3),infinity) of p4..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(10);
+math_fit(-u#,-2u#);
+endchar;
+
+iff known chars.cal_Z:
+bskchar "The calligraphic letter Z";
+beginchar(chars.cal_Z,11u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,90); pos2(cal_hair,180); pos3(.5[cal_hair,hair],180);
+pos4(cal_stem,-10); pos5(cal_stem,0); pos6(cal_hair,0);
+pos7(cal_hair,90); pos8(cal_stem,70); pos9(hair,90);
+top y2=top y1r=h; lft x2r=0; z3=z2+cap_stem*dir(-70);
+y2r:=bot bot y2r; y2l:=bot bot y2r; rt x1r=w-u;
+x2'-x2l=x2-x2r; y2'=y2r;
+z4r=z1r; y5=bar_height; x5=.5w; top y7l=0; z7r=z6l; lft x6l=u;
+x9=w; bot y9=-cal_hair; y8l=y6; x8=2/3[x7,x9];
+p1:=z1l..z2'..z2l---z3l;
+p2:=z3r---z2r..z2..z1r;
+p3:=z4r..z5r..z6r;
+p4:=z6l..z5l..z4l;
+p5:=z7r..z8r..z9r;
+p6:=z9l..z8l..z7l;
+(tim0,tim1)=p1 intersectiontimes p4;
+(tim2,tim3)=p3 intersectiontimes p5;
+filldraw subpath(rundy(p1,tim0),infinity) of p1
+ ..subpath(0,rundy(p2,infinity).zpet) of p2
+ ..subpath(rundy(p3,0),rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p5,tim3),infinity) of p5
+ ..subpath(0,rundy(p6,infinity).zpet) of p6
+ ..subpath(0,rundy(p4,tim1).zpet) of p4..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(6',9');
+math_fit(0,.5u#);
+endchar;
+
+iff known chars.cal_Gamma:
+bskchar "The calligraphic Greek letter Gamma";
+beginchar(chars.cal_Gamma,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=cap_curve;
+pos1(cal_hair,-30); pos2(cal_hair,-30); pos3(cal_hair,-20);
+pos4(cap_hair,60); pos5(cap_hair,90);
+pos6(cal_hair,0); pos7(.5[cal_hair,hair],0); pos8(cal_hair,90);
+y1=h; bot y3r=0; x1l-x3l=u; rt x1r=4u;
+top y4r=h+o; lft x4=u;
+x2l=x3r+.5hair; y2=1/3x_height; z5r=z1r;
+top y6=h; rt x6r=w-1.5u; z7=z6+cap_stem*dir(-100); z8r=z1l;
+y6r:=bot bot y6r; y6l:=bot bot y6r;
+x6'-x6l=x6-x6r; y6'=y6r;
+p0:=z1l{z2l-z1l}..z2l..z3l;
+p1:=z4l{dir-20}..{right}z5l;
+p2:=z3l..(x3l,y3r)..z3r..z2r..{z1r-z2r}z1r{dir180}..{dir160}z4r;
+p3:=z7r---z6r..z6..z8r..z4r;
+p4:=z4l..z8l..z6'..z6l---z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p4;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p4,tim3),infinity) of p4
+ ..p3
+ ..subpath(0,rundy(p1,tim1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(6');
+math_fit(0,-5u#);
+endchar;
+
+iff known chars.cal_Lambda:
+bskchar "The calligraphic Greek letter Lambda";
+beginchar(chars.cal_Lambda,13.5u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+pos1(cal_hair,0); pos2(cal_hair,90); pos3(cal_hair,180); pos4(cal_hair,180);
+pos5(cal_hair,90); pos6(cal_hair,0);
+pos7(.65[cal_stem,cal_hair],-10); pos8(cal_stem,10); pos9(cal_hair,90);
+pos11(cal_hair,-10);
+rt x1l=u; y1=cal_stem; bot y2l=-d-o; .5[x1,x3]=x2=x1+cal_stem; y3=.5bar_height;
+y4=.5[bar_height,x_height]; z4=z3+whatever*dir75; top y5r=h+o; x5=w-u-cal_hair;
+rt x6r=w; y6=y5-cal_hair; y8=cal_curve; y7=y5l-cal_curve; x8r=x7r=x5-.5cal_hair;
+bot y9l=0; x9=.5[x8r,w];
+z10=(w,y8r); z11r=z5r;
+p1:=z1r{down}..z2r..z3r..z4r..{right}z5r..{down}z6r;
+p2:=z6l{up}..{left}z5l..z4l..z3l..z2l..{up}z1l;
+p3:=z11l---z7l..z8l..z9l..{dir100}z10;
+p4:=z10+left{dir-80}..z9r..z8r..z7r---z11r;
+(tim1,tim2)=p2 intersectiontimes p4;
+(tim3,tim4)=p3 intersectiontimes p2;
+filldraw p1..subpath(0,rundy(p2,tim1).zpet) of p2
+ ..reverse subpath(0,rundy(p4,tim2).zpet) of p4
+ ..reverse subpath(rundy(p3,(tim3,2oblu)),infinity) of p3
+ ..subpath(rundy(p2,(tim4,2oblu)),infinity) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,11); labels(10);
+math_fit(-u#,u#);
endchar;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
index bf4606bcb02..2fa53b208f6 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf
@@ -1,4 +1,7 @@
%Boisik Latin letters in Roman form
+%(plus blackboard-bold and sans-serif variants for math only!)
+
+numeric bbs; bbs:=if cap_hair+eps>tiny-eps: 2 else 1 fi; %correction for BB letters
charscription(14u,cap_height,0)(
numeric alpha, right_stem, left_stem;
@@ -16,7 +19,7 @@ pos4(cap_bar,angle(z3'-z1r)); pos5(cap_bar,angle(z3'-z2l));
z4l=whatever[z1'r,z3']; z5l=whatever[z2'l,z3'];
cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
y3''=y1r.b if bold_face: -hair fi; z3''=whatever[z1r,z3'];
-filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
+filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)---z3l---
diag_serif(2r,3l)..{right}z2r.c..z2r.a{left}..z2r+ser_boule*up..
{left}z2l.a..{right}z2l.c..diag_serif(2l,3')---obl(5l,2l,4l)---
obl(4l,5l,1l)---z3'' ..z1r.c{right}..
@@ -152,6 +155,18 @@ x100=x3l;
dotabove(100);
endchar;
+iff known chars.latin_A_BB:
+bskchar "The blackboard-bold letter A";
+beginchar(chars.latin_A_BB,14u#,cap_height#,0); uni "0x1D538";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+numeric oblu.more; oblu.more:=2oblu;
+bot y100=y2r.c; z100=whatever[z3l,z2r];
+infill ifobl(3',3l,2r,2l,,more)---obl(100,3l,2r.c)..z2r---obl(2l,2r,3')---cycle;
+labels(100);
+endchar;
+
iff known chars.latin_Aogonek:
bskchar "The letter A with ogonek";
beginchar(chars.latin_Aogonek,14u#,cap_height#,.85desc_depth#); uni "0x0104";
@@ -184,12 +199,36 @@ infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle;
penlabels(1,1',2,2',3,3',4,5,6,7,8,9); labels(3'');
endchar;
-iff known chars.latin_B:
-bskchar "The letter B";
-beginchar(chars.latin_B,13u#,cap_height#,0); uni "0x0042";
-italcorr .5[x_height#,cap_height#]*slant-.25u#;
-adjust_fit(cap_serif_fit#,0);
+iff known chars.latin_A_SS:
+bskchar "The sans-serif letter A";
+beginchar(chars.latin_A_SS,14u#,cap_height#,0); uni "0x1D5A0";
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
+numeric alpha, right_stem, left_stem;
+lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0;
+x3l=.5w; top y3l=h+apex_o;
+left_stem=cap_hair;
+right_stem=cap_stem;
+alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+y4=y5=.35h; z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+pos4(cap_bar,angle(z3'-z1r)); pos5(cap_bar,angle(z3'-z2l));
+z4l=whatever[z1'r,z3']; z5l=whatever[z2'l,z3'];
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l);
+y3''=y1r.b if bold_face: -hair fi; z3''=whatever[z1r,z3'];
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+z100l=whatever[z1l,z3l]; z100r=whatever[z1r,z4l];
+z101l=whatever[z2l,z5l]; z101r=whatever[z2r,z3l];
+oblu:=cap_bar;
+filldraw z100l---z3l---z101r..z2..z101l---obl(5l,2l,4l)---obl(4l,5l,1l)---z100r...z1...cycle;
+infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle;
+penlabels(1,1',2,2',3,3',4,5,100,101); labels(3'');
+endchar;
+
+charscription(13u,cap_height,0)(
numeric tim[]; path p[];
pos1(cap_stem,0); pos2(cap_stem,0);
bot y1=0; top y2=h-drop_stem;
@@ -214,6 +253,136 @@ filldraw subpath(0,rundy(p0,tim1).zpet) of p0
infill p1---cycle;
infill p3---cycle;
penlabels(0,1,2,3,4,5,6,7,8,9,10);
+);
+
+iff known chars.latin_B:
+bskchar "The letter B";
+beginchar(chars.latin_B,13u#,cap_height#,0); uni "0x0042";
+italcorr .5[x_height#,cap_height#]*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,.75ic#);
+endchar;
+
+iff known chars.latin_B_BB:
+bskchar "The blackboard-bold letter B";
+beginchar(chars.latin_B_BB,13u#,cap_height#,0); uni "0x1D539";
+italcorr .5[x_height#,cap_height#]*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+z102=bsktouch(subpath(3,4) of p2,bbs*dir-90,p3,dir60);
+z103=bsktouch(subpath(5,6) of p0,bbs*dir90,p1,dir-60);
+tim100-5=xpart(subpath(5,6) of p0 intersectiontimes (z103--(x103,y4r)));
+tim101-3=xpart(subpath(3,4) of p2 intersectiontimes (z102--(x102,y9l+5)));
+tim102=xpart(p3 intersectiontimes (z102--(x102,y10)));
+tim103=xpart(p3 intersectiontimes ((x0-hair-1,y0)--(x0-hair-1,y10)));
+tim104=xpart(p1 intersectiontimes ((x0-hair-1,y0)--(x0-hair-1,y5)));
+tim105=xpart(p1 intersectiontimes (z4+u*right--(x4+u,y5)));
+tim106=xpart(p1 intersectiontimes (z103--(x103,y5)));
+infill subpath(rundy(p0,(tim100,bbw)),rundy(p0,tim1).zpet) of p0
+ ..(reverse subpath(rundy(p2,(tim101,bbw)),rundy(p2,tim2).zpet) of p2)
+ ..(reverse subpath(tim103,rundy(p3,(tim102,bbw)).zpet) of p3)
+ ..subpath(tim104,rundy(p1,(tim106,bbw)).zpet) of p1..cycle;
+labels(102,103);
+endchar;
+
+iff known chars.latin_B_SS:
+bskchar "The sans-serif letter B";
+beginchar(chars.latin_B_SS,13u#,cap_height#,0); uni "0x1D5A1";
+italcorr .5[x_height#,cap_height#]*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(1.5cap_stem,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(cap_hair,90); pos7(1.5cap_stem,90);
+pos8(ser_height,270); pos9(cap_hair,270); pos10(.95cap_curve,180);
+x3=x7=x1r; y7=y6=com_height; rt x5r=w-u; y5=.45[y4,y6];
+bot y3r=bot y4r=0; x6=.5[x7,x9]; x4=.5[x1r,x5l];
+y8l+serif_o=y9l; top y9l=h+drop_stem; x8=x3; x9=.5[x6,x4];
+x5-x10=.3cap_curve; y10=.45[y9,y6];
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+p0=z1l.b{down}..z1..z3r---z4r..z5r..z6r---z7;
+p1=z7l{dir90}..{right}z6l..z5l..{left}z4l..{up}z3l;
+p2=z2l.b{up}..z2---z9l..z10l..z6---z7;
+p3=z7r{dir-90}..{right}z6r..z10r..z9r{left}..{down}z8r;
+z0=bsktouch(p0,2up,p2,2down);
+tim1=xpart(p0 intersectiontimes (z0--(x0,bar_height)));
+tim2=xpart(p2 intersectiontimes (z0--(x0,x_height)));
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0
+ ..(reverse subpath(0,rundy(p2,tim2).zpet) of p2)--cycle;
+infill p1---cycle;
+infill p3---cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10);
+endchar;
+
+iff known chars.sign_baht:
+bskchar "Baht sign";
+beginchar(chars.sign_baht,13u#,Acc_height#,Acc_height#-cap_height#); uni "0x0E3F";
+italcorr .5[x_height#,cap_height#]*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=cap_height-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(.75cap_hair,90); pos7(ser_height,90);
+pos8(.7ser_height,270); pos9(cap_hair,270); pos10(.95cap_curve,180);
+pos11(hair,0); pos12(hair,0);
+x3=x7=x1r; y7=y6=com_height; rt x5r=w-u; y5=.45[y4,y6];
+bot y3r=bot y4r=0; x6=.5[x7,x9]; x4=.5[x1r,x5l];
+y8l+serif_o=y9l; top y9l=cap_height+drop_stem; x8=x3; x9=.5[x6,x4];
+x5-x10=.3cap_curve; y10=.45[y9,y6];
+x11=x12=.5[x4,x9]; top y11=h; bot y12=-d;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+p0=z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r---z4r..z5r..z6r---z7;
+p1=z7l{dir90}..{right}z6l..z5l..{left}z4l..{up}z3l;
+p2=z2l.b{up}..{left}z2l.c..{right}z2l.a..z9l..z10l..z6---z7;
+p3=z7r{dir-90}..{right}z6r..z10r..z9r{left}..{down}z8r;
+p4=z12l--z11l;
+p5=z11r--z12r;
+z0=bsktouch(p0,2up,p2,2down);
+tim1=xpart(p0 intersectiontimes (z0--(x0,bar_height)));
+tim2=xpart(p2 intersectiontimes (z0--(x0,x_height)));
+(tim3,tim4)=p2 intersectiontimes p4;
+(tim5,tim6)=p2 intersectiontimes p5;
+(tim7,tim8)=p0 intersectiontimes p4;
+(tim9,tim10)=p0 intersectiontimes p5;
+(tim11,tim12)=p1 intersectiontimes p4;
+(tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p4;
+(tim15,tim16)=p1 intersectiontimes p5;
+(tim17-2,tim18)=subpath(2,infinity) of p1 intersectiontimes p5;
+(tim19,tim20)=p3 intersectiontimes p4;
+(tim21-2,tim22)=subpath(2,infinity) of p3 intersectiontimes p4;
+(tim23,tim24)=p3 intersectiontimes p5;
+(tim25-2,tim26)=subpath(2,infinity) of p3 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim7).zpet) of p0
+ ..(reverse (subpath(rundy(p5,tim10),infinity) of p5
+ ..subpath(0,rundy(p4,tim8).zpet) of p4))
+ ..subpath(rundy(p0,tim9),rundy(p0,tim1).zpet) of p0
+ ..(reverse (subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p4,tim4),infinity) of p4
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p2,tim5),rundy(p2,tim2).zpet) of p2))
+ --cycle;
+infill subpath(0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p4,tim12).zpet,rundy(p4,tim14)) of p4
+ ..subpath(rundy(p1,tim13),infinity) of p1---cycle;
+infill subpath(rundy(p1,tim15),rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(p5,tim18).zpet,rundy(p5,tim16)) of p5..cycle;
+infill subpath(0,rundy(p3,tim19).zpet) of p3
+ ..subpath(rundy(p4,tim20),rundy(p4,tim22).zpet) of p4
+ ..subpath(rundy(p3,tim21),infinity) of p3---cycle;
+infill subpath(rundy(p3,tim23),rundy(p3,tim25).zpet) of p3
+ ..subpath(rundy(p5,tim26),rundy(p5,tim24).zpet) of p5..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12);
endchar;
charscription(13.3u,cap_height,0)(
@@ -246,11 +415,12 @@ italcorr cap_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5cap_height#*slant+.5u#,.75ic#);
endchar;
iff known chars.latin_Ccaron:
bskchar "The letter C with caron";
-beginchar(chars.latin_Ccaron,13.3u#,Acc_height#,0); uni "0x10C";
+beginchar(chars.latin_Ccaron,13.3u#,Acc_height#,0); uni "0x010C";
italcorr cap_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
@@ -292,6 +462,27 @@ x100=x4;
dotabove(100);
endchar;
+iff known chars.latin_C_BB:
+bskchar "The blackboard-bold letter C";
+beginchar(chars.latin_C_BB,13.3u#,cap_height#,0); uni "0x2102";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=subpath(-1,1) of p0;
+p101:=reverse subpath(-1,1) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(p100,bbs*down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
iff known chars.sign_centigrade:
bskchar "Centigrade sign";
beginchar(chars.sign_centigrade,17.3u#,asc_height#+o#,0); uni "0x2103";
@@ -350,6 +541,62 @@ multiply(1.5*zv)(cap_curve,cap_hair,ser_height,serif_o);
usechar slanted (-slant) shifted -z5''c reflectedabout (origin,(0,h)) slanted (slant) scaled zv shifted (.5WW+slant*5u,.5HH);
endchar;
+iff known chars.sign_euro:
+bskchar "The Euro sign";
+beginchar(chars.sign_euro,12u#,cap_height#,0); uni "0x20AC";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
+pos6(cap_bar,90); pos7(cap_bar,90);
+pos8(.5[cap_stem,cap_hair],90); pos9(.5[cap_stem,cap_hair],90);
+lft x1l=2u; rt x3r=w-o; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+lft x8=.75u; lft x6=u; x9=x4; z6-z8=z7-z9; .5[y6,y8]=bot y1-o; y6l-y8r=cap_bar+cap_stem;
+z9-z8=whatever*dir(10);
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+z5'=((.5w,y3+.3h)--(2w,y3+.3h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.3h)--(2w,y3+.3h)) intersectiontimes reverse p0);
+z5''=((.5w,y3-.3h+o)--(2w,y3-.3h+o)) intersectionpoint p0; tim2= ypart(((.5w,y3-.3h)--(2w,y3-.3h)) intersectiontimes p0);
+z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3);
+z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1);
+z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3);
+z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d];
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+p2:=subpath(0,tim1) of reverse p0..z5'a--z5'b{dir225}..subpath (tim3,5) of p1..
+ reverse (subpath(0,tim2) of p0..z5''a--z5''b{dir135}..
+ reverse subpath (1,tim4) of p1) & cycle;
+p3:=z6l--z7ll;
+p4:=z7r--z6r;
+p5:=z8l--z9ll;
+p6:=z9r--z8r;
+(tim5,tim6)=subpath(0,1) of p2 intersectiontimes p3;
+(tim7,tim8)=subpath(0,1) of p2 intersectiontimes p4;
+(tim9-1,tim10)=subpath(1,length p2) of p2 intersectiontimes p4;
+(tim11-1,tim12)=subpath(1,length p2) of p2 intersectiontimes p3;
+(tim13-1,tim14)=subpath(1,length p2) of p2 intersectiontimes p6;
+(tim15-1,tim16)=subpath(1,length p2) of p2 intersectiontimes p5;
+(tim17-10,tim18)=subpath(10,length p2) of p2 intersectiontimes p5;
+(tim19-10,tim20)=subpath(10,length p2) of p2 intersectiontimes p6;
+filldraw subpath(0,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p3,tim6),infinity) of p3
+ ..subpath(0,rundy(p4,tim8).zpet) of p4
+ ..subpath(rundy(p2,tim7),rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p4,tim10), infinity) of p4
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p2,tim11),rundy(p2,tim13).zpet) of p2
+ ..subpath(rundy(p6,tim14),infinity) of p6
+ ..subpath(0,rundy(p5,tim16).zpet) of p5
+ ..subpath(rundy(p2,tim15),rundy(p2,tim17).zpet) of p2
+ ..subpath(rundy(p5,tim18),infinity) of p5
+ ..subpath(0,rundy(p6,tim20).zpet) of p6
+ ..subpath(rundy(p2,tim19),length p2) of p2..cycle;
+penlabels(1,2,3,4,6,7,8,9); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,);
+endchar;
+
iff known chars.latin_Ccedilla:
bskchar "The letter C with cedilla";
beginchar(chars.latin_Ccedilla,13.3u#,cap_height#,.65desc_depth#); uni "0x00C7";
@@ -436,6 +683,29 @@ infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3
penlabels(1,2,3,4,7,8); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,);
endchar;
+iff known chars.latin_C_SS:
+bskchar "The sans-serif letter C";
+beginchar(chars.latin_C_SS,12.5u#,cap_height#,0); uni "0x1D5A2";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_hair,180); pos4(1.1cap_hair,270);
+lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+z5'=((.5w,y3+.2h)--(2w,y3+.2h)) intersectionpoint p0;
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
+z5''=((.5w,y3-.2h+o)--(2w,y3-.2h+o)) intersectionpoint p0;
+tim2= ypart(((.5w,y3-.2h)--(2w,y3-.2h)) intersectiontimes p0);
+tim3=ypart(((.5w,y3+.2h)--(w,y3+.2h)) intersectiontimes p1);
+tim4=ypart(((.5w,y3-.2h)--(w,y3-.2h)) intersectiontimes p1);
+filldraw subpath(0,tim1) of reverse p0
+ ..subpath (tim3,5) of p1
+ ..reverse (subpath(0,tim2) of p0..reverse subpath (1,tim4) of p1) & cycle;
+penlabels(1,2,3,4); labels(5,5',5'');
+endchar;
+
charscription(15u,cap_height,0)(
pos1(cap_stem,0); pos2(cap_stem,0);
bot y1=0; top y2=h-drop_stem;
@@ -458,6 +728,7 @@ italcorr x_height#*slant-.25u#;
adjust_fit(cap_serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(0,.75ic#);
endchar;
iff known chars.latin_Dcaron:
@@ -471,6 +742,49 @@ x101=.6[x2r,x6];
hacek(100,101,102).capital;
endchar;
+iff known chars.latin_D_BB:
+bskchar "The blackboard-bold letter D";
+beginchar(chars.latin_D_BB,15u#,cap_height#,0); uni "0x1D53B";
+italcorr x_height#*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+p100=z4r{right}..z5r..{left}z6r;
+p101=z6l{right}..z5l..{left}z4l;
+z102=bsktouch(subpath (0,1) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath (0,1) of p101,bbs*up,p100,down);
+tim100=xpart(p100 intersectiontimes (z102--(x102,y4r)));
+tim101=xpart(p101 intersectiontimes (z102--(x102,y5)));
+tim102=xpart(p100 intersectiontimes (z103--(x103,y6r)));
+tim103=xpart(p101 intersectiontimes (z103--(x103,y5)));
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(102,103);
+endchar;
+
+iff known chars.latin_D_SS:
+bskchar "The sans-serif letter D";
+beginchar(chars.latin_D_SS,14u#,cap_height#,0); uni "0x1D5A3";
+italcorr x_height#*slant-.25u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(1.5cap_stem,270); pos4(cap_hair,270); pos5(cap_curve,0);
+pos6(cap_hair,90); pos7(1.5cap_stem,90);
+x3=x7=x1r; y7r+serif_o=y6r; top y6r=h+drop_stem; rt x5r=w-u; y5=.52[y4,y6];
+bot y3r=bot y4r=0; x6=x4 if not monospace and ((substring(0,5) of font_identifier_) <> "BSKHC"):+u fi; x6=.5[x1r,x5l]-u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+filldraw z1l.b{down}..z1..z3r---z4r..z5r..{left}z6r---z2..z2l.b---cycle;
+infill z7l..{right}z6l..z5l..{left}z4l..z3l---cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
charscription(15.5u,cap_height,0)(
pos1(cap_stem,0); pos2(cap_stem,0);
bot y1=0; top y2=h-drop_stem;
@@ -533,6 +847,7 @@ italcorr cap_height#*slant-1.75u#;
adjust_fit(cap_serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_Eacute:
@@ -647,6 +962,17 @@ bot bot y100=cap_height+o;
tieacc(100,101,102).capital;
endchar;
+iff known chars.latin_E_BB:
+bskchar "The blackboard-bold letter E";
+beginchar(chars.latin_E_BB,13.5u#,cap_height#,0); uni "0x1D53C";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+endchar;
+
iff known chars.latin_Eogonek:
bskchar "The letter E with ogonek";
beginchar(chars.latin_Eogonek,13.5u#,cap_height#,.85desc_depth#); uni "0x0118";
@@ -706,9 +1032,30 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z7l+hai
penlabels(1,2,5,5',6,6',7,8,9,10);
endchar;
+iff known chars.latin_E_SS:
+bskchar "The sans-serif letter E";
+beginchar(chars.latin_E_SS,12u#,cap_height#,0); uni "0x1D5A4";
+italcorr cap_height#*slant-1.75u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); pos4(cap_hair,90);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(1.5cap_stem,90);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+top y4r=h; rt x4r=w-2.5u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+4/8(x4-x2r); x5'=x2r; x6'-x6=u;
+cap_serifs_tl(2l); cap_serifs_bl(1l);
+z1'=(x1r,y3l); z2'=(x2r,y4l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1---z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(1',3l,5'l)
+ ---z5'l{dir80}..z5l---z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,4l)
+ ---z4l+cap_stem*left...z4...z4r+cap_stem*left---z2..z2l.b---cycle;
+penlabels(1,2,3,4,5,5',6); labels(1',2',6');
+endchar;
+
charscription(18u,cap_height,0)(
numeric alpha;
-path p;
+path p; oblu.more:=3oblu;
pos1(cap_stem,0); pos2(cap_stem,0);
pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
@@ -732,7 +1079,7 @@ if monospace:
penlabels(4); labels(4a,4b,4c);
else: p=reverse arm_top_r_points(2r,4);
fi;
-x2l'=x2l; z2l'=whatever[z2l+alpha*cap_hair*right,z7];
+x2l'=x2l; z2l'=whatever[z2l+alpha*(cap_hair-.5currentbreadth)*right,z7];
pos9(cap_bar,90); y8r-y8l=cap_bar-tiny; .5[y8r,y8l]=y9=y5;
x1l-x9=x5-x5'; z8r=whatever[z7,z2l']; z8l=whatever[z7,z2l'];
y8'r=y8r; y8'l=y8l; x8'l=x8'r=.5[x8l,x8r]+(x5-x5');
@@ -752,7 +1099,7 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
diag_serif(7r,2r)---obl(8l,7r,9l)---z9l{right}..(x1l,y5'l)---cycle;
oblu:=2oblu; if x8r+oblu>x9r: oblu:=f_obl; fi
infill (x1l,y5'r)..{left}z9r---obl(8r,9r,2l')---
- obl(2l',7l,1l)--cycle;
+ obl(2l',7l,1l).more--cycle;
penlabels(1,2,2l',5,5',6,6',7,8,8',9);
);
@@ -830,12 +1177,7 @@ infill z1l.b{down}..{left}z1l.c+top o*down..z7r..{right}z2l.c+top o*up..z2l.b---
penlabels(1,2,2l',5,5',6,6',7);
endchar;
-iff known chars.latin_F:
-bskchar "The letter F";
-beginchar(chars.latin_F,12u#,cap_height#,0); uni "0x0046";
-italcorr cap_height#*slant;
-adjust_fit(cap_serif_fit#,0);
-pickup tiny.nib;
+charscription(12u,cap_height,0)(
path p;
pos1(cap_stem,0); pos2(cap_stem,0);
pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90);
@@ -851,31 +1193,78 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..
{down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r---
p--z2l.a..{right}z2l.c..z2l.b---cycle;
penlabels(1,2,5,5',6,6');
+);
+
+iff known chars.latin_F:
+bskchar "The letter F";
+beginchar(chars.latin_F,12u#,cap_height#,0); uni "0x0046";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.latin_F_BB:
+bskchar "The blackboard-bold letter F";
+beginchar(chars.latin_F_BB,12u#,cap_height#,0); uni "0x1D53D";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_F_SS:
+bskchar "The sans-serif letter F";
+beginchar(chars.latin_F_SS,11u#,cap_height#,0); uni "0x1D5A5";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+path p;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90);
+pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90);
+bot y1=0; top y2=h;
+top y3r=h; rt x3r=w-u;
+lft x1l=lft x2l=2u;
+y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+4/8(x3-x2r); x5'=x2r; x6'-x6=u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+z2'=(x2r,y3l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1..z1r.b---z5'l{dir80}..z5l---
+ z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,3l)---z3l+cap_stem*left
+ ...z3...z3r+cap_stem*left---z2..z2l.b---cycle;
+penlabels(1,2,3,5,5',6); labels(2',6');
+math_fit(0,ic#-3u#);
endchar;
charscription(14.3u,cap_height,0)(
-path p, po; numeric tim[], sersh;
+path p[]; numeric tim[], sersh;
sersh=.15tiny;
pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
lft x1l=u-o; rt x3r=w-2.3u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
penpos6(beak,0); rt x6r=w-u;
-p:=z1r{down}..z2r..z3r..z4r..{down}cycle;
-po:=z1l{down}..z2l..z3l..z4l..{down}cycle;
-tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p);
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0);
z5'=(x6,y3+.2h);
z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3);
-z5'd=(z5'c--z5'b) intersectionpoint po; z5'e=.35[z5'b,z5'd];
-tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes po);
+z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd];
+tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes p1);
x5''a=x6r-.5cap_stem; y5''a=y3-.2h; z5''=z5''a+serif_o*left;
y6=y5''a+cap_hair;
z5''b=(x5''a-sersh,cap_hair); z5''c=(.5[x4,x1r],y3);
-z5''d=(z5''c--z5''b) intersectionpoint po; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left;
-tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes po);
-tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p);
+z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left;
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1);
+tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p0);
if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi
-filldraw z1r{up}..z4r..{direction tim1 of reverse p}z5'..z5'a--z5'b---z5'e..subpath (tim3,5) of po..
- reverse (subpath(0,tim5) of p---z5''f..{left}z6l..z6l+serif_o*up--z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e..
- reverse subpath (1,tim4) of po) & cycle;
+filldraw z1r{up}..z4r..{direction tim1 of reverse p0}z5'..z5'a--z5'b---z5'e
+ ..subpath (tim3,5) of p1..
+ reverse (subpath(0,tim5) of p0---z5''f..{left}z6l..z6l+serif_o*up
+ --z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e..
+ reverse subpath (1,tim4) of p1) & cycle;
penlabels(1,2,3,4,6); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f);
);
@@ -886,6 +1275,7 @@ italcorr cap_height#*slant-2u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5cap_height#*slant+.5u#,ic#);
endchar;
iff known chars.latin_Gacute:
@@ -954,6 +1344,58 @@ x101=x4; x102-x100=5u; bot y101l=top y4l+o;
breve(100,101,102).capital;
endchar;
+iff known chars.latin_G_BB:
+bskchar "The blackboard-bold letter G";
+beginchar(chars.latin_G_BB,14.3u#,cap_height#,0); uni "0x1D53E";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+usechar;
+oblu.more:=2oblu;
+infill obl(5''a,5''f,5''b)---obl(5''b,5''a,5''d).more
+ ---obl(5''d,5''b,5''f)---obl(5''f,5''e,5''a)---cycle;
+p100:=subpath(-1,1) of p0;
+p101:=reverse subpath(-1,1) of p1;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(p100,bbs*down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.latin_G_SS:
+bskchar "The sans-serif letter G";
+beginchar(chars.latin_G_SS,12.5u#,cap_height#,0); uni "0x1D5A6";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], sersh;
+sersh=.15tiny;
+pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3r=w-1.5u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+penpos6(cap_stem,0); rt x6r=w-u;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p0);
+tim3= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p1);
+z5'=(x3r,y3+.2h);
+y6=bar_height;
+z5''b=(x6r,cap_hair); z5''c=(.5[x4,x1r],y3);
+z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left;
+tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1);
+tim5=ypart((z6l--(x6l,0)) intersectiontimes p0);
+filldraw reverse subpath (tim1,length(p0)) of p0
+ ..subpath (tim3,5) of p1..reverse (subpath(0,tim5) of p0---z6l--z6r---z5''b---z5''e
+ ..reverse subpath (1,tim4) of p1) & cycle;
+penlabels(1,2,3,4,6); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f);
+endchar;
+
iff known chars.sign_guarani:
bskchar "Guarani sign";
beginchar(chars.sign_guarani,14.3u#,Acc_height#,Acc_height#-cap_height#); uni "0x20B2";
@@ -1039,6 +1481,7 @@ italcorr cap_height#*slant+.25u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(0,.75ic#);
endchar;
iff known chars.latin_Hcaron:
@@ -1063,6 +1506,19 @@ x101=.5w;
circumflex(100,101,102).capital;
endchar;
+iff known chars.latin_H_BB:
+bskchar "The blackboard-bold letter H";
+beginchar(chars.latin_H_BB,15u#,cap_height#,0); uni "0x210D";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+bot z102=(x3r,y3r.c); top z103=(x4r,y4r.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(102,3r.c,4r)---obl(103,3r,4r.c)...z4r---cycle;
+endchar;
+
iff known chars.latin_Hstroke:
bskchar "The letter H with stroke";
beginchar(chars.latin_Hstroke,15u#,cap_height#,0); uni "0x0126";
@@ -1097,6 +1553,30 @@ infill obl(13l,12l,8r)---z8r{dir-100}..z6r---z5r..{dir100}z7r---obl(12l,7r,13l)-
penlabels(1,2,3,4,5,6,7,8,10,11,12,13,14,15); labels(15ll,10rr);
endchar;
+iff known chars.latin_H_SS:
+bskchar "The sans-serif letter H";
+beginchar(chars.latin_H_SS,13.5u#,cap_height#,0); uni "0x1D5A7";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=0; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r);
+pos5(cap_hair,90); pos6(cap_hair,90);
+pos7(1.5cap_stem,90); pos8(1.5cap_stem,90);
+y5=y6=.52h; x5=x1r.a; x6=x3l.a;
+y7=y8=y5; x7=x1r; x8=x3l;
+filldraw z1l.b{down}..z1..z1r.b---z7l{dir80}..z5l---z6l..
+ {dir-80}z8l---z3l.b..z3..z3r.b---z4r.b..
+ z4..z4l.b---z8r{dir-100}..z6r---z5r..{dir100}z7r---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
charscription(6u,cap_height,0)(
pos1(cap_stem,0); pos2(cap_stem,0);
bot y1=0; top y2=h;
@@ -1115,6 +1595,7 @@ italcorr cap_height#*slant;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(0,.75ic#);
endchar;
iff known chars.latin_I_dotless:
@@ -1247,6 +1728,17 @@ x101=x2;
hacek(100,101,102).capital;
endchar;
+iff known chars.latin_I_BB:
+bskchar "The blackboard-bold letter I";
+beginchar(chars.latin_I_BB,6u#,cap_height#,0); uni "0x1D540";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+endchar;
+
iff known chars.latin_Iogonek:
bskchar "The letter I with ogonek";
beginchar(chars.latin_Iogonek,7u#,cap_height#,.85desc_depth#); uni "0x012E";
@@ -1270,6 +1762,20 @@ filldraw z1l.b{down}..{left}z1l.c..z3l+hair*left
penlabels(1,2,3,4,5,6);
endchar;
+iff known chars.latin_I_SS:
+bskchar "The sans-serif letter I";
+beginchar(chars.latin_I_SS,6u#,cap_height#,0); uni "0x1D5A8";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h;
+x1=x2=.5w;
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1l.b{down}..z1..z1r.b---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2);
+endchar;
+
charscription(7u,cap_height,.6desc_depth)(
pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90);
bot y1=-cap_hair; top y2=h; rt x1r=rt x2r=w-2u;
@@ -1287,6 +1793,7 @@ italcorr cap_height#*slant+.5u#;
adjust_fit(0,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(.6desc_depth#*slant+1.5u#,ic#-3u#);
endchar;
iff known chars.latin_J_dotless:
@@ -1309,6 +1816,40 @@ x101=x2;
circumflex(100,101,102).capital;
endchar;
+iff known chars.latin_J_BB:
+bskchar "The blackboard-bold letter J";
+beginchar(chars.latin_J_BB,7u#,cap_height#,.6desc_depth#); uni "0x1D541";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+top z100=(x2r,y2r.c);
+p100=z1l{down}..{left}z3l;
+p101=z3r{right}..{up}z1r;
+z101=bsktouch(p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,y3r)));
+infill obl(2l,2r,1l)---subpath(0,rundy(p100,(tim100,.75bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,.75bbw)),infinity) of p101---obl(100,1r,2r.c)...z2r---cycle;
+labels(101);
+endchar;
+
+iff known chars.latin_J_SS:
+bskchar "The sans-serif letter J";
+beginchar(chars.latin_J_SS,7u#,cap_height#,.6desc_depth#); uni "0x1D5A9";
+italcorr cap_height#*slant+.5u#;
+adjust_fit(0,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); pos4(cap_stem,160);
+bot y1=-cap_hair; top y2=h; rt x1r=rt x2r=w-2u;
+bot y3r=-d; x3=u; top y4=-.3d; x4l=-u; z4'=z4+.75currentbreadth*(unitvector(z4l-z4r) rotated 90);
+cap_serifs_tl(2l); cap_serifs_tr(2r);
+filldraw z3r{right}...z1r---z2r.b..z2..z2l.b---z1l...{left}z3l..{up}z4l..
+ if (substring(0,5) of font_identifier_) <> "BSKHC": z4'.. fi {down}z4r..cycle;
+penlabels(1,2,3,4); labels(4');
+endchar;
+
iff known chars.latin_IJ:
bskchar "The letter IJ";
beginchar(chars.latin_IJ,12.5u#,cap_height#,.6desc_depth#); uni "0x0132";
@@ -1362,6 +1903,7 @@ italcorr cap_height#*slant-u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(0,.75ic#);
endchar;
iff known chars.latin_Kcaron:
@@ -1386,6 +1928,52 @@ x100=.5[x1r.a,x5l.a]; top y100''r=0;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_K_BB:
+bskchar "The blackboard-bold letter K";
+beginchar(chars.latin_K_BB,14u#,cap_height#,0); uni "0x1D542";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+bot z102=(lft x5r,y5r.c);
+p100=ifobl(6r,6l,5r,5l,,)---obl(5l,6l,5)---z5r...obl(102,5r.c,6r)---cycle;
+infill p100;
+endchar;
+
+iff known chars.latin_K_SS:
+bskchar "The sans-serif letter K";
+beginchar(chars.latin_K_SS,13u#,cap_height#,0); uni "0x1D5AA";
+italcorr cap_height#*slant-u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(whatever,0); pos5(whatever,0);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+rt x3r=w-3u; top y3=h; rt x5r=w-1.5u; bot y5r=0;
+y4r=.4h; x4r=x2r; z4l=z4r+(cap_hair-tiny,0) rotated (angle(z3r-z4r)+90);
+z3l=z4l+whatever*(z3r-z4r);
+x6l=x4r+cap_hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)+90);
+z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r];
+x4'=x2r; z4'=whatever[z3l,z4l];
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r);
+cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_br(5r); cap_serifs_bl(5l);
+z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r));
+z6l'=z6l+(-u,0) rotated (angle(z3r-z4r));
+z6l''=z6l+(u,0) rotated (angle(z5l-z6l));
+z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r));
+x2'=x6l; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u);
+y100l=y100r=.5[y3l.b,y3]; y101l=y101r=.5[y5l.b,y5];
+z100l=whatever[z3l,z4l]; z100r=whatever[z3r,z4r];
+z101l=whatever[z5l,z6l]; z101r=whatever[z5r,z6r];
+filldraw z1l.b{down}..z1..z1r.b---z4r..z4r''
+ if x6l'>x4r'': ..z6l' fi ..z6l''---z101l..z5..z101r---z6r'..z6r''---
+ z100r...z3...z100l---z2'..z2''---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,100,101); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'');
+endchar;
+
charscription(12.5u,cap_height,0)(
pos1(cap_stem,0); pos2(cap_stem,0);
bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
@@ -1404,6 +1992,7 @@ italcorr .5bar_height#*slant;
adjust_fit(cap_serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_Ldot:
@@ -1461,6 +2050,32 @@ x100=x2;
dotabove(100);
endchar;
+iff known chars.latin_L_BB:
+bskchar "The blackboard-bold letter L";
+beginchar(chars.latin_L_BB,12.5u#,cap_height#,0); uni "0x1D543";
+italcorr .5bar_height#*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+endchar;
+
+iff known chars.latin_L_SS:
+bskchar "The sans-serif letter L";
+beginchar(chars.latin_L_SS,12u#,cap_height#,0); uni "0x1D5AB";
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90);
+bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u;
+lft x1l=lft x2l=2u; z1'=(x1r,y3l);
+cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l);
+oblu:=cap_hair;
+filldraw z1l.b{down}..z1---z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(1',3l,2r)
+ ---z2r.b..z2..z2l.b---cycle;
+penlabels(1,2,3); labels(1');
+endchar;
+
iff known chars.latin_Lslash:
bskchar "The letter L with slash";
beginchar(chars.latin_Lslash,12.5u#,cap_height#,0); uni "0x0141";
@@ -1525,6 +2140,53 @@ italcorr cap_height#*slant+.25u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(0,.75ic#);
+endchar;
+
+iff known chars.latin_M_BB:
+bskchar "The blackboard-bold letter M";
+beginchar(chars.latin_M_BB,17u#,cap_height#,0); uni "0x1D544";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu.more:=3oblu;
+bot z100=(x3r,y3r.c); top z101=(x4r,y4r.c);
+top y102=y2l.c; rt z102=whatever[z5',z6l];
+infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(100,3r.c,4r)---obl(101,3r,4r.c)...z4r---cycle;
+infill z5'---ifobl(6l,4'',5',8,more,)---z8..z5---z2l...obl(102,2l.c,5')---cycle;
+endchar;
+
+iff known chars.latin_M_SS:
+bskchar "The sans-serif letter M";
+beginchar(chars.latin_M_SS,17u#,cap_height#,0); uni "0x1D5AC";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_hair,0); pos2(cap_hair,0);
+pos3(cap_stem,0); pos4(cap_stem,0);
+penpos5(whatever,0); penpos6(whatever,90);
+penpos10(whatever,0); penpos11(whatever,90);
+bot y1=0; top y2=h; lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=0; top y4=h; rt x3r=rt x4r=w-2u;
+cap_serifs_bl_p(3l,.9); cap_serifs_br(3r); cap_serifs_tr(4r);
+z5r=z2l; z6l=(.49w, if monospace and (x3l-x1r<3cap_stem): 2/3(x3l-x1r) else: -apex_o fi);
+z7=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)-90);
+z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l);
+y2'=y5'=y2l.b-cap_hair-o; x2'=x2r; z5'=whatever[z6l,z5r]; z5''=(.5[x2',x5'],y2'+o);
+z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r));
+z10r=z4l; z11l=z6l;
+z12=z11l+(cap_hair-tiny,0) rotated (angle(z10r-z11l)+90);
+z10l=z12+whatever*(z10r-z11l); z11r=z12+whatever*(z10r-z11l);
+z4''=whatever[z10l,z11r]=whatever[z5l,z6r];
+y4'=y6'=y4''+cap_hair; z4'=whatever[z10l,z11r]; z6'=whatever[z6r,z5l];
+y3'=y3''=y2'; x3'=x3l; z3''=whatever[z11l,z10r];
+z10'=z10l+(cap_hair,0) rotated(angle(z11l-z10r));
+y100l=y100r=.5[y1l.b,y1]; x100l=x1l; x100r=x1r;
+filldraw z100l...z1...z100r---z2'+cap_hair*down..z5'+cap_hair*unitvector(z6l-z5')---z6l
+ ---z3''..z3'---z3l.b..z3..z3r.b---z4r.b..z4..z10'---z4'..z6'---z8..z5..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,10,11); labels(2',3',3'',4',4'',5',5'',6',7,8,9,10',12);
endchar;
charscription(14u,cap_height,0)(
@@ -1557,6 +2219,7 @@ italcorr cap_height#*slant+.25u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(0,.75ic#-.5u#);
endchar;
iff known chars.latin_Ncaron:
@@ -1614,6 +2277,87 @@ x100=.5w; top y100''r=0;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_N_BB:
+bskchar "The blackboard-bold letter N";
+beginchar(chars.latin_N_BB,14u#,cap_height#,0); uni "0x2115";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu.more:=3oblu;
+top y100=y2l.c; rt z100=whatever[z5',z6l];
+infill z5'---obl(6l,5',6r).more---obl(6r,6l,8)---z8..z5---z2...obl(100,2l.c,5')---cycle;
+endchar;
+
+iff known chars.latin_N_SS:
+bskchar "The sans-serif letter N";
+beginchar(chars.latin_N_SS,14u#,cap_height#,0); uni "0x1D5AD";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_hair,0); pos2(cap_hair,0);
+pos3(cap_hair,0); pos4(cap_hair,0);
+penpos5(whatever,0); penpos6(whatever,90);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=-apex_o; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r);
+z5r=z2l; z6l=z3l;
+z7=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)-90);
+z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l);
+y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r];
+y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l];
+z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r));
+y100l=y100r=.5[y1l.b,y1]; x100l=x1l; x100r=x1r;
+filldraw z100l...z1...z100r---z2'..z5'---z6l..z3r---
+ z4r.b...z4...z4l.b---z4'..z6'---z8..z5..z2l.b---cycle;
+penlabels(1,2,3,4,5,6,100); labels(2',4',5',6',7,8,9);
+endchar;
+
+iff known chars.sign_naira:
+bskchar "Naira sign";
+beginchar(chars.sign_naira,14u#,cap_height#,0); uni "0x20A6";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_hair,0); pos2(cap_hair,0);
+pos3(cap_hair,0); pos4(cap_hair,0);
+penpos5(whatever,0); penpos6(whatever,90);
+pos9(hair,90); pos10(hair,90); pos11(hair,90); pos12(hair,90);
+bot y1=0; top y2=h;
+lft x1l=lft x2l=2u;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r);
+bot y3=-apex_o; top y4=h;
+rt x3r=rt x4r=w-2u;
+cap_serifs_tl(4l); cap_serifs_tr(4r);
+z5r=z2l; z6l=z3l;
+z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90);
+z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l);
+y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r];
+y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l];
+z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r));
+y9=y10=x_height; y11=y12=bar_height;
+lft x9=lft x11=.5u; rt x10=rt x12=w-.5u;
+y9'r=y10'r=y10''r=y10'''r=y9r; y9'l=y10'l=y10''l=y10'''l=y9l;
+y11'r=y11''r=y11'''r=y12'r=y11r; y11'l=y11''l=y11'''l=y12'l=y11l;
+x9'r=x9'l=x11'l=x11'r=x1l; x11''r=x11''l=x1r; x10'r=x10'l=x12'r=x12'l=x4r;
+x10''r=x10''l=x4l;
+z11'''l=whatever[z5',z6l]; z11'''r=whatever[z5',z6l];
+z10'''l=whatever[z6',z8]; z10'''r=whatever[z6',z8];
+filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a
+ ..z1r.c{left}..z1r.b---obl(11''l,1r,11'''l)---obl(11'''l,11''l,6l)---z6l
+ ..z3r---obl(12'l,3r,12l)---z12l..z12r---obl(12'r,12r,10'l)---obl(10'l,12'r,10l)
+ ---z10l..z10r---obl(10'r,10r,4r)---z4r.b..{right}z4r.c..z4r.a---z4l.a
+ ..{right}z4l.c..z4l.b---obl(10''r,4l,10'''r)---obl(10'''r,10''r,8)---z8..z5
+ ---z2l.a..{right}z2l.c..z2l.b---obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,11'r)
+ ---obl(11'r,9'l,11r)---z11r..z11l---obl(11'l,11l,1l)---cycle;
+infill obl(11''r,11'''r,2')---z2'..z5'---obl(11'''r,5',11''r)---cycle;
+infill obl(10''l,10'''l,4')---z4'..z6'---obl(10'''l,6',10''l)---cycle;
+penlabels(1,2,3,4,5,6,9,10,11,12); labels(2',4',5',6',7,8,9);
+endchar;
+
iff known chars.latin_Eng:
bskchar "The letter Eng";
beginchar(chars.latin_Eng,14u#, cap_height#, desc_depth#); uni "0x014A";
@@ -1658,6 +2402,7 @@ italcorr x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5cap_height#*slant+.5u#,.5cap_height#*slant);
endchar;
iff known chars.latin_Ograve:
@@ -1793,6 +2538,49 @@ bot y100=top y4l;
tieacc(100,101,102).capital;
endchar;
+iff known chars.latin_O_BB:
+bskchar "The blackboard-bold letter O";
+beginchar(chars.latin_O_BB,14.3u#,cap_height#,0); uni "0x1D546";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.latin_O_SS:
+bskchar "The sans-serif letter O";
+beginchar(chars.latin_O_SS,14u#,cap_height#,0); uni "0x1D5AE";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+endchar;
+
charscription(14.3u,cap_height,.85desc_depth)(
path p[];
pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
@@ -1910,6 +2698,32 @@ italcorr .2[x_height#,cap_height#]*slant;
adjust_fit(cap_serif_fit#,0);
pickup tiny.nib;
usechar;
+math_fit(0,ic#-4u#);
+endchar;
+
+iff known chars.latin_P_BB:
+bskchar "The blackboard-bold letter P";
+beginchar(chars.latin_P_BB,12.5u#,cap_height#,0); uni "0x2119";
+italcorr .2[x_height#,cap_height#]*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+p100=z4r{right}..z5r..{left}z6r;
+p101=z6l{right}..z5l..{left}z4l;
+z102=bsktouch(subpath (0,1) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath (0,1) of p101,bbs*up,p100,down);
+tim100=xpart(p100 intersectiontimes (z102--(x102,y5)));
+tim101=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z103--(x103,y5)));
+tim103=xpart(p101 intersectiontimes (z103--(x103,0)));
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(102,103);
+math_fit(0,ic#-2.5u#);
endchar;
iff known chars.sign_published:
@@ -1962,6 +2776,30 @@ infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle;
penlabels(1,2,3,4,5,6,7,8,8',9,9');
endchar;
+iff known chars.latin_P_SS:
+bskchar "The sans-serif letter P";
+beginchar(chars.latin_P_SS,12.5u#,cap_height#,0); uni "0x1D5AF";
+italcorr .2[x_height#,cap_height#]*slant;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(1.5cap_stem,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(1.5cap_stem,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-u;
+x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi;
+y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7;
+y5=.5[y4,y6];
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1);
+filldraw z1l.b..z1..z1r.b---z7l{dir70}..
+ (x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---
+ z6l..z5l..z4l---z2..z2l.b---cycle;
+infill z7r{down}..{right}z6r..z5r..z4r{left}..{down} if y3r>y7r: z3r else: z7r+up fi---cycle;
+penlabels(1,2,3,4,5,6,7);
+math_fit(0,ic#-2.5u#);
+endchar;
+
iff known chars.latin_Thorn:
bskchar "The letter Thorn";
beginchar(chars.latin_Thorn,12u#,cap_height#,0); uni "0x00DE";
@@ -1988,12 +2826,7 @@ infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle;
penlabels(1,2,3,4,5,6,7);
endchar;
-iff known chars.latin_Q:
-bskchar "The letter Q";
-beginchar(chars.latin_Q,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x0051";
-italcorr .5cap_height#*slant+.5u#;
-adjust_fit(0,0);
-pickup tiny.nib;
+charscription(14.3u,cap_height,3.5u if not monospace:+.5cap_curve fi)(
path p[]; numeric tim[]; oblu:=1/3(x2-x1);
pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3];
@@ -2007,7 +2840,7 @@ x6=x1r; z6=z5+whatever*(direction tim1 of p0) rotated 180;
pos8(cap_curve,angle(z2-z4));
z7=z6; x8=.5[x5r,x3r]; y8r=-d; x9=w if not monospace: +cap_stem fi; y9=.5y6;
p1:=z5l{z6-z5}..{z6-z3}z6l;
-p2:=z9{dir-125}..z8l..{z6-z3}z7l..z7r{if dpi<=300:dir40 else:(x4,y3)-z6 fi}..z8r..{dir70}z9;
+p2:=z9{dir-125}..z8l..{z6-z3}z7l..z7r{if testdpi:dir40 else:(x4,y3)-z6 fi}..z8r..{dir70}z9;
p3:=z6r{z3-z6}..{z5-z6}z5r;
(tim2,tim3)=p1 intersectiontimes p2;
(tim4,tim5)=p3 intersectiontimes p2;
@@ -2021,6 +2854,89 @@ filldraw subpath(0,rundy(p0,tim6).zpet) of p0..
subpath(rundy(p0,tim8),infinity) of p0&cycle;
infill z1r{up}..z4r..z3r..z2r..{up}cycle;
penlabels(1,2,3,4,5,6,7,8,9);
+);
+
+iff known chars.latin_Q:
+bskchar "The letter Q";
+beginchar(chars.latin_Q,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x0051";
+italcorr .5cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+math_fit(-.5u#,ic#);
+endchar;
+
+iff known chars.latin_Q_BB:
+bskchar "The blackboard-bold letter Q";
+beginchar(chars.latin_Q_BB,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x211A";
+italcorr .5cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+p102:=subpath(0,1.3) of p2;
+tim99-3=xpart(subpath(3,infinity) of p2 intersectiontimes
+ (point infinity of p102--(xpart(point infinity of p102),-d)));
+p103:=subpath(tim99,infinity) of p2;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up);
+z104=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+tim108=xpart(p102 intersectiontimes (z104--(x104,0)));
+tim109=xpart(p103 intersectiontimes (z104--(x104,-d)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim108),infinity) of p102
+ ..subpath(0,rundy(p103,tim109).zpet) of p103..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.latin_Q_SS:
+bskchar "The sans-serif letter Q";
+beginchar(chars.latin_Q_SS,14.3u#,cap_height#,3.5u#); uni "0x1D5B0";
+italcorr .5cap_height#*slant+.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=1/3(x2-x1);
+pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270);
+lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; bot y2l=-o; top y4l=h+o;
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+tim1= ypart(((.5w, .5cap_hair)--(w,.5cap_hair)) intersectiontimes p0);
+z5r=point tim1 of p0;
+pos5(cap_hair,angle(direction tim1 of p0)-90); pos6(cap_hair,angle(direction tim1 of p0)-90);
+pos7(cap_hair+o,angle(direction tim1 of p0)-90);
+x6=.25[x1,x2]; z6=z5+whatever*(direction tim1 of p0) rotated 180;
+pos8(cap_curve,angle(z2-z4));
+z7=z6; x8=x3; y8r=-d;
+p1:=z5l{z6-z5}..{z6-z3}z6l;
+p2:=z8l{left}..{z6-z3}z7l..z7r{z3-z6}..{right}z8r;
+p3:=z6r{z3-z6}..{z5-z6}z5r;
+(tim2,tim3)=p1 intersectiontimes p2;
+(tim4,tim5)=p3 intersectiontimes p2;
+(tim6,tim7)=p0 intersectiontimes p1;
+(tim8,tim9)=p0 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p1,tim7),rundy(p1,(tim2,hair))) of p1
+ ..subpath(rundy(p2,(tim3,hair)),infinity) of p2
+ ..subpath(0,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p3,tim4),rundy(p3,tim9).zpet) of p3
+ ..subpath(rundy(p0,tim8),infinity) of p0&cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8);
endchar;
iff known chars.latin_Q_alt:
@@ -2100,6 +3016,7 @@ italcorr .2[x_height#,cap_height#]*slant-1.75u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(0,ic#);
endchar;
iff known chars.latin_Racute:
@@ -2158,6 +3075,35 @@ bot y100=top y4l+2o;
tieacc(100,101,102).capital;
endchar;
+iff known chars.latin_R_BB:
+bskchar "The blackboard-bold letter R";
+beginchar(chars.latin_R_BB,14u#,cap_height#,0); uni "0x211D";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c);
+oblu:=f_obl;
+infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle;
+p100=z4r{right}..z5r..{left}z6r;
+p101=z6l{right}..z5l..{left}z4l;
+z102=bsktouch(subpath (0,1) of p100,bbs*up,p101,down);
+y103=y104=y5; z103=whatever[z9r,z8r.bb]; z104=whatever[z9l,z8l];
+bot z105=(lft x8r,y8r.c);
+p102=z8r.bb--z103;
+p103=z104---obl(8l,104,8)---z8r...obl(105,8r.c,9r)---z8r.bb;
+tim100=xpart(p100 intersectiontimes (z102--(x102,y5)));
+tim101=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+(tim102,tim103)=p100 intersectiontimes p103;
+(tim104,tim105)=p101 intersectiontimes p102;
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p103,tim103),infinity) of p103
+ ..subpath(0,rundy(p102,tim105).zpet) of p102
+ ..subpath(rundy(p101,tim104),rundy(p101,tim101).zpet) of p101..cycle;
+labels(102,103,104,8r.bb);
+endchar;
+
iff known chars.sign_registered:
bskchar "Registered sign (circled R)";
beginchar(chars.sign_registered,15u#,asc_height#,0); uni "0x00AE";
@@ -2194,6 +3140,45 @@ multiply(2.5*zv)(cap_curve,cap_hair,ser_height,cap_stem);
usechar shifted -(.5[x8,x2],.5[y4l,y1]) scaled zv shifted (.5WW+ys*slant,ys);
endchar;
+iff known chars.latin_R_SS:
+bskchar "The sans-serif letter R";
+beginchar(chars.latin_R_SS,13.5u#,cap_height#,0); uni "0x1D5B1";
+italcorr .5[x_height#,cap_height#]*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha, tim[]; oblu:=2oblu;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l= lft x2l= 2u;
+pos3(1.5cap_stem,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(1.5cap_stem,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-2u;
+x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi;
+y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7;
+y5=.5[y4,y6];
+rt x8r=w-1.5u; bot y8r=0;
+x9r=x5r if .65cap_curve<u: -u fi; y9r=y6l-cap_hair;
+alpha=diag_ratio(2,cap_stem,y9r-y8r,x8r-x9r);
+pos8(alpha*cap_stem,0); pos9(alpha*cap_stem,0);
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); cap_serifs_br(8r);
+z8'=z8l+(serif_o,0) rotated(angle(z9l-z8l));
+y8''=.5[y8r.b,y8]; z8''=whatever[z8r,z9r];
+p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l..
+ z5l..z4l---z2..{down}z2l.b;
+p1=z8''---z9r..{left}z6r--z6l{(x9l-x6l,0)}..z9l---z8'..z8;
+p2=subpath ((length p1)-4, length p1) of p1;
+(tim1,tim2)=p0 intersectiontimes p2;
+(tim3,tim4)=p0 intersectiontimes p1;
+filldraw z1l.b..z1..z1r.b---
+ subpath(0,rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p2,tim2),infinity) of p2..
+ subpath(0,rundy(p1,tim4).zpet) of p1..
+ subpath(rundy(p0,tim3),infinity) of p0---cycle;
+infill z7r..{right}z6r..z5r..z4r{left}..if y3r>y7r: z3r else: z7r+up fi---cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(8',8'');
+endchar;
+
iff known chars.sign_recipe:
bskchar "Recipe sign";
beginchar(chars.sign_recipe,14u#,cap_height#,0); uni "0x211E";
@@ -2243,6 +3228,57 @@ infill z7r..{right}z6r..z5r..z4r{left}..z3r---cycle;
penlabels(1,2,3,4,5,6,7,8,9,10,10',11,11'); labels(8');
endchar;
+iff known chars.sign_AR:
+bskchar "Aspect ratio sign";
+beginchar(chars.sign_AR,18u#,cap_height#,0); uni "non";
+italcorr .2[x_height#,cap_height#]*slant-1.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha, beta, tim[]; oblu:=2oblu; oblu.more:=3f_obl;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=h-drop_stem;
+lft x1l=lft x2l=8.5u;
+pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180);
+pos6(cap_hair,90); pos7(.8ser_height,90);
+x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-2.5u;
+x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi;
+y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7;
+y5=.5[y4,y6];
+rt x8r=w-2u; bot y8r=0;
+x9r=x5r if .65cap_curve<u: -u fi; y9r=y6l-cap_hair;
+alpha=diag_ratio(2,cap_stem,y9r-y8r,x8r-x9r);
+pos8(alpha*cap_stem,0); pos9(alpha*cap_stem,0);
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); cap_serifs_br(8r);
+z8'=z8l+(serif_o,0) rotated(angle(z9l-z8l));
+lft x10l=2u; y10l=y1;
+beta=diag_ratio(2,cap_hair,y2l-y7l,x2l-x7l);
+pos10(beta*cap_hair,0); pos6'(ser_height,90);
+pos12(cap_bar,90); y11r-y11l=cap_bar-tiny; .5[y11r,y11l]=y12=y6=y6'; x6'=x1l;
+x2l'=x2l; z2l'=whatever[z2l+alpha*(cap_hair-.5currentbreadth)*right,z10];
+x1l-x12=x6-x7; z11r=whatever[z10,z2l']; z11l=whatever[z10,z2l'];
+y11'r=y11r; y11'l=y11l; x11'l=x11'r=.5[x11l,x11r]+(x6-x7);
+cap_serifs_bl(10l); cap_serifs_br(10r);
+p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l..z5l..z4l
+ ---obl(2l,2,10l)---diag_serif(10l,2l)..{left}z10l.c..z10l.a{right}
+ ..z10+ser_boule*up..{right}z10r.a..{left}z10r.c..diag_serif(10r,2r)
+ ---obl(11l,10r,12l)---z12l{right}..{down}(x1l,y6'l);
+p1=z8r.a{right}..z8r.c{left}..diag_serif(8r,9r)---z9r..{left}z6r--
+ z6l{(x9l-x6l,0)}..z9l---z8l{right}...z8+ser_boule*up..{right}z8r.a;
+p2=subpath ((length p1)-4, length p1) of p1;
+(tim1,tim2)=p0 intersectiontimes p2;
+(tim3,tim4)=p0 intersectiontimes p1;
+filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a..z1r.c{left}
+ ..z1r.b---subpath(0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..subpath(0,rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p0,tim3),infinity) of p0---cycle;
+infill z7r..{right}z6r..z5r..z4r{left}..z3r---cycle;
+infill (x1l,y6'r)..{left}z12r---obl(11r,12r,2l')---
+ obl(2l',10l,1l).more---cycle;
+penlabels(1,2,3,4,5,6,6',7,8,9,10,11,12); labels(8');
+endchar;
+
charscription(10u,cap_height,0)(
numeric exc; exc=(w-u)/h;
path p[]; numeric tim[];
@@ -2254,6 +3290,10 @@ x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o;
y3=.5[y2l,y4r]+.5cap_hair;
pos1(cap_hair,0); x1r=w-x5r; y1=y5-.5cap_hair;
pos7(cap_hair,0); x7l=w-x6l; y7=y6+.5cap_hair;
+if x5r<x7r+currentbreadth: %Correction for HC variant
+ numeric sh; sh:=x7r+currentbreadth-x5r;
+ forsuffixes $=5r,5l,5,2l,2r,2: x$:=x$+sh; endfor
+fi
p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
tim1=xpart(p0 intersectiontimes ((.5w,y2-.5cap_hair)--(w,y2-.5cap_hair)));
@@ -2270,6 +3310,25 @@ italcorr cap_height#*slant-u#;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5u#,.75ic#);
+endchar;
+
+iff known chars.sign_circled_S:
+bskchar "Circled S sign";
+beginchar(chars.sign_circled_S,15u#,asc_height#,0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric zv; zv=.6;
+lft x6=u; x2=w-x6; y2=.5h; top y8=h;
+lft x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+multiply(1.5*zv)(cap_curve,cap_hair,cap_stem,ser_height);
+usechar shifted -(x4,.5[y4l,y2r]) scaled zv shifted (.5WW+.5HH*slant,.5HH);
endchar;
iff known chars.latin_Scaron:
@@ -2316,6 +3375,27 @@ x100=x4; top y100''r=-2o;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_S_BB:
+bskchar "The blackboard-bold letter S";
+beginchar(chars.latin_S_BB,10u#, cap_height#, 0); uni "0x1D54A";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+p100=subpath(1,5) of p0;
+p101=subpath(1,5) of p1;
+z100=bsktouch(subpath(0,1) of p100,bbs*down,p101,up);
+z101=bsktouch(subpath(0,1) of p101,bbs*up,p100,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y4l-5)));
+oblu:=1.25bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
iff known chars.latin_SS:
bskchar "Two letters S (Small Caps variant of eszet)";
beginchar(chars.latin_SS,10u#, cap_height#, 0); uni "non";
@@ -2327,6 +3407,28 @@ r:=r+w; charwd:=2charwd;
addto currentpicture also currentpicture shifted (w,0);
endchar;
+iff known chars.latin_S_SS:
+bskchar "The sans-serif letter S";
+beginchar(chars.latin_S_SS,9u#, cap_height#, 0); uni "0x1D5B2";
+italcorr cap_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc, hpa; exc=(w-u)/h;
+pos2(cap_hair,90); pos3(cap_curve,angle((w-u,h))+180); pos4(cap_hair,90);
+pos5(cap_stem,180); pos6(cap_stem,180);
+y5=.5[y2l,y3]+.5like_cap_hair; x3-hpa=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u;
+x3=x4=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l];
+y3=.5[y2l,y4r]+.5cap_hair;
+if hpa-cap_stem+.5currentbreadth<rt u: lft x5r=1.25u; rt x1r=w-u;
+else: x5l=hpa; x1r=w-x5r+.5u; fi;
+pos1(cap_hair,30); y1=.5[y5,y2l];
+pos7(cap_hair,0); x7l=w-x6l; y7=y6;
+filldraw z1r{dir110}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r..z7l{down}..z4l{right}
+ ..z6l..z3l..z5l..{right}z2l..{dir-70}z1..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
iff known chars.sign_service:
bskchar "Service sign";
beginchar(chars.sign_service,14.5u#,asc_height#,0); uni "0x2120";
@@ -2396,6 +3498,7 @@ italcorr cap_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-(cap_height#-beak#)*slant-.5u#,ic#-4.5u#);
endchar;
iff known chars.latin_Tcaron:
@@ -2420,6 +3523,18 @@ x100=x1; top y100''r=-2o;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_T_BB:
+bskchar "The blackboard-bold letter T";
+beginchar(chars.latin_T_BB,15.5u#,cap_height#,0); uni "0x1D54B";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+bot z100=(x1l,y1l.c);
+infill ifobl(2l,2r,1l,1r,,)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
iff known chars.sign_trademark:
bskchar "Trademark sign";
beginchar(chars.sign_trademark,17.5u#,asc_height#,0); uni "0x2122";
@@ -2435,6 +3550,24 @@ _saved_w:=_saved_w_m;
usechar shifted -(_saved_w_m,y2) scaled zv shifted (WW-u*(1-zv),HH);
endchar;
+iff known chars.latin_T_SS:
+bskchar "The sans-serif letter T";
+beginchar(chars.latin_T_SS,14u#,cap_height#,0); uni "0x1D5B3";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90); pos4(cap_hair,90);
+bot y1=0; top y2=h; x1=x2=.5w;
+cap_serifs_bl(1l); cap_serifs_br(1r);
+top y3r=top y4r=h; rt x3r=w-u; lft x4r=u;
+y100=y101=y3l; x100=x1l; x101=x1r;
+oblu:=cap_hair;
+filldraw z1l.b..z1..z1r.b---obl(101,1r,3l)---z3l+cap_stem*left...z3...z3r+cap_stem*left
+ ---z4r+cap_stem*right...z4...z4l+cap_stem*right---obl(100,4l,1l)---cycle;
+penlabels(1,2,3,4); labels(100,101);
+math_fit(0,ic#-3u#);
+endchar;
+
iff known chars.latin_Tcedilla:
bskchar "The letter T with cedilla";
beginchar(chars.latin_Tcedilla,15.5u#,cap_height#,.65desc_depth#); uni "0x0162";
@@ -2505,6 +3638,7 @@ italcorr cap_height#*slant+.75u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(-1/3cap_height#*slant-u#,ic#-2u#);
endchar;
iff known chars.latin_Uacute:
@@ -2628,7 +3762,6 @@ x101-x100=6u; bot y100=top y1+o; x.tilde=x2'r+o;
tilde(100,101).capital;
endchar;
-
iff known chars.latin_Uumlaut:
bskchar "The letter U with umlaut";
beginchar(chars.latin_Uumlaut,14u#,Acc_height#,0); uni "0x00DC";
@@ -2640,6 +3773,45 @@ x100=x1r; x101=x4;
umlaut(100,101);
endchar;
+iff known chars.latin_U_BB:
+bskchar "The blackboard-bold letter U";
+beginchar(chars.latin_U_BB,14u#,cap_height#,0); uni "0x1D54C";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+path p[]; numeric tim[];
+top z100=(x1l,y1l.c);
+p100=z2l{down}..{right}z2'l...{up}z3l;
+p101=z3r{down}..z2'r{left}..{up}z2r;
+z101=bsktouch(p100,bbs*dir135,p101,dir-45);
+tim100=xpart(p100 intersectiontimes (z101--(x101,0)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,y3)));
+infill subpath(0,rundy(p100,(tim100,1.5bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,1.5bbw)),infinity) of p101
+ ---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle;
+labels(101);
+endchar;
+
+iff known chars.latin_U_SS:
+bskchar "The sans-serif letter U";
+beginchar(chars.latin_U_SS,14u#,cap_height#,0); uni "0x1D5B4";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+path p[];
+pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,180); pos4(cap_hair,180);
+top y1=top y4=h; y2=y3=.45(x4-x1);
+y2'l=-.5o; x2'l=.5[x2,x3];
+lft x1l=2u; x2=x1; rt x4r=w-2.5u; x3=x4;
+p1:=z2l{down}...{up}z3l; p2:=z2r{down}...{up}z3r;
+z2'l-z2'r=(((x2'l,h)--(x2'l,-h)) intersectionpoint p1)-(((x2'l,h)--(x2'l,-h)) intersectionpoint p2);
+cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(4l); cap_serifs_tl(4r);
+y100l=y100r=.5[y4l.b,y4]; x100l=x4l; x100r=x4r;
+filldraw z1..z1l.b---z2l...z2'l{right}...z3l---z100l...z4...z100r---z3r...z2'r{left}...z2r---z1r.b..cycle;
+penlabels(1,2,2',3,4,100);
+endchar;
+
iff known chars.latin_Uogonek:
bskchar "The letter U with ogonek";
beginchar(chars.latin_Uogonek,14u#,cap_height#,.85desc_depth#); uni "0x0172";
@@ -2668,6 +3840,27 @@ filldraw z1l---z1l.a..{right}z1l.c..z1l.b
penlabels(1,2,2',3,4,5,6,7,8);
endchar;
+charscription(14u,cap_height,0)(
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.5w+o; bot y3l=-apex_o;
+left_stem=cap_stem;
+right_stem=cap_hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(.65cap_hair,90); pos5(.65cap_hair,90);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[cap_hair,cap_stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(2r); cap_serifs_tl(2l);
+filldraw z1l--z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')
+ ..z1r.c{right}..z1r.a---cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+);
+
iff known chars.latin_V:
bskchar "The letter V";
beginchar(chars.latin_V,14u#,cap_height#,0); uni "0x0056";
@@ -2675,7 +3868,33 @@ italcorr cap_height#*slant+.75u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
numeric alpha, right_stem, left_stem;
pickup tiny.nib;
-lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+usechar;
+math_fit(-cap_height#*slant,ic#-5u#);
+endchar;
+
+iff known chars.latin_V_BB:
+bskchar "The blackboard-bold letter V";
+beginchar(chars.latin_V_BB,14u#,cap_height#,0); uni "0x1D54D";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+usechar;
+oblu.more:=3oblu;
+top y100=y1l.c; z100=whatever[z1l.bb,z3l];
+infill z1l.bb---ifobl(3l,3',1l.bb,1r.bb,more,)---z1r.bb
+ ..obl(1r,3',1l)---z1l...obl(100,1l.c,1l.bb)---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_V_SS:
+bskchar "The sans-serif letter V";
+beginchar(chars.latin_V_SS,13.5u#,cap_height#,0); uni "0x1D5B5";
+italcorr cap_height#*slant+.25u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+lft x1l=2u; rt x2r=w-1.5u; top y1l=top y2r=h;
x3l=.5w+o; bot y3l=-apex_o;
left_stem=cap_stem;
right_stem=cap_hair;
@@ -2688,11 +3907,12 @@ z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
y3'l=y3'r=y3'+.25[cap_hair,cap_stem];
z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(2r); cap_serifs_tl(2l);
-filldraw z1l--z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
- diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
- ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')
- ..z1r.c{right}..z1r.a---cycle;
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+z100l=whatever[z1l,z3l]; z100r=whatever[z1r,z3'];
+z101l=whatever[z3',z2l]; z101r=whatever[z2r,z3l];
+filldraw z1..z100l---z3l---z101r...z2...z101l---z3'r..z3'l---z100r..cycle;
penlabels(1,1',2,2',3,3',4,5,6,7);
+math_fit(0,ic#-2u#);
endchar;
charscription(19u,cap_height,0)(
@@ -2730,6 +3950,7 @@ italcorr cap_height#*slant+.75u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(-cap_height#*slant,ic#-5u#);
endchar;
iff known chars.latin_Wcircumflex:
@@ -2776,12 +3997,103 @@ usechar;
umlaut(100,101);
endchar;
-iff known chars.latin_X:
-bskchar "The letter X";
-beginchar(chars.latin_X,15u#,cap_height#,0); uni "0x0058";
-italcorr cap_height#*slant+.4u#;
+iff known chars.latin_W_BB:
+bskchar "The blackboard-bold letter W";
+beginchar(chars.latin_W_BB,19u#,cap_height#,0); uni "0x1D54E";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu:=f_obl;
+oblu.more:=3f_obl;
+top y100=y1l.c; z100=whatever[z1l.bb,z4];
+infill ifobl(4,1'',1l.bb,1r.bb,more,)---z1r.bb
+ ..obl(1r,1'',1l)---z1l...obl(100,1l.c,1l.bb)---cycle;
+infill ifobl(3,0,2'',5,more,)---ifobl(5,2'',0,3,more,)---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_W_SS:
+bskchar "The sans-serif letter W";
+beginchar(chars.latin_W_SS,18u#,cap_height#,0); uni "0x1D5B6";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+numeric alpha[], right_stem, left_stem;
+oblu:=2oblu;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3=.5w if monospace: +.5(cap_stem-cap_hair) fi; top y3=h if monospace and (x2r-x1l<4cap_stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.37w;
+bot y4=bot y5=-apex_o;
+left_stem=cap_stem;
+right_stem=cap_hair;
+alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l);
+alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5);
+alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3);
+alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4);
+pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0);
+cap_serifs_tl(1l); cap_serifs_tr(1r);
+cap_serifs_tl(2l); cap_serifs_tr(2r);
+bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5);
+y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny);
+z0=whatever[z4,z4']=whatever[z5,z5'];
+z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right];
+z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left];
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+z100l=whatever[z1l,z4]; z100r=whatever[z1r,z1''];
+z101l=whatever[z2'',z2l]; z101r=whatever[z2r,z5];
+filldraw z1..z100l---z4---obl(0,4,5)---z5---z101r...z2...z101l---obl(2'',2l,3)---z3
+ ---obl(1'',3,1r)---z100r..cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.sign_won:
+bskchar "Won sign";
+beginchar(chars.sign_won,19u#,cap_height#,0); uni "0x20A9";
+italcorr cap_height#*slant+.75u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
+numeric alpha[], right_stem, left_stem;
+oblu:=2oblu;
+pos8(hair,90); pos9(hair,90); pos10(hair,90); pos11(hair,90);
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3=.5w if monospace: +.5(cap_stem-cap_hair) fi; top y3=h if monospace and (x2r-x1l<4cap_stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.37w;
+bot y4=bot y5=-apex_o;
+left_stem=cap_stem;
+right_stem=cap_hair;
+alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l);
+alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5);
+alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3);
+alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4);
+pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0);
+cap_serifs_tl(1l); cap_serifs_tr(1r);
+cap_serifs_tl(2l); cap_serifs_tr(2r);
+bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5);
+y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny);
+z0=whatever[z4,z4']=whatever[z5,z5'];
+z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right];
+z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left];
+y8=y9=x_height; y10=y11=bar_height;
+lft x8=lft x10=u; rt x9=rt x11=w-u;
+y8'r=y8''r=y8'''r=y9'r=y9''r=y9'''r=y8r; y8'l=y8''l=y8'''l=y9'l=y9''l=y9'''l=y8l;
+y10'r=y11'r=y10r; y10'l=y11'l=y10l;
+z8'r=whatever[z1l,z4]; z8'l=whatever[z1l,z4]; z10'r=whatever[z1l,z4]; z10'l=whatever[z1l,z4];
+z9'r=whatever[z2r,z5]; z9'l=whatever[z2r,z5]; z11'r=whatever[z2r,z5]; z11'l=whatever[z2r,z5];
+z9''r=whatever[z2'',z2l]; z9''l=whatever[z2'',z2l]; z9'''r=whatever[z2'',z3]; z9'''l=whatever[z2'',z3];
+z8''r=whatever[z1'',z1r]; z8''l=whatever[z1'',z1r]; z8'''r=whatever[z1'',z3]; z8'''l=whatever[z1'',z3];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---obl(8'r,1l,8r)---z8r
+ ..z8l---obl(8'l,8l,10'r)---obl(10'r,8'l,10r)---z10r..z10l---obl(10'l,10l,4)
+ ---z4---obl(0,4,5)---z5---obl(11'l,5,11l)---z11l..z11r---obl(11'r,11r,9'l)
+ ---obl(9'l,11'l,9l)---z9l..z9r---obl(9'r,9r,2r)---diag_serif(2r,5)
+ ..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..diag_serif(2l,2')
+ ---obl(9''r,2l,9'''r)---obl(9'''r,9''r,3)---z3---obl(8'''r,3,8''r)
+ ---obl(8''r,8'''r,1r)---diag_serif(1r,1'')..z1r.c{right}..z1r.a--cycle;
+infill obl(9''l,9'''l,2'')---obl(2'',9''l,9'''l)---obl(9'''l,2'',9''l)---cycle;
+infill obl(8''l,8'''l,1'')---obl(1'',8''l,8'''l)---obl(8'''l,1'',8''l)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(0,1',1'',2',2'',4',5');
+endchar;
+
+charscription(15u,cap_height,0)(
oblu:=1.5oblu;
numeric alpha[];
lft x1l=2.5u; top y1l=h; rt x2r=w-2u; bot y2r=0;
@@ -2805,6 +4117,59 @@ filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)---
{right}z3l.c..diag_serif(3l,3')---obl(3',3l,1r)---
diag_serif(1r,3')..{right}z1r.c..z1r.a---cycle;
penlabels(1,2,3,4); labels(1',2',3',4',5');
+);
+
+iff known chars.latin_X:
+bskchar "The letter X";
+beginchar(chars.latin_X,15u#,cap_height#,0); uni "0x0058";
+italcorr cap_height#*slant+.4u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+math_fit(0,u#);
+endchar;
+
+iff known chars.latin_X_BB:
+bskchar "The blackboard-bold letter X";
+beginchar(chars.latin_X_BB,15u#,cap_height#,0); uni "0x1D54F";
+italcorr cap_height#*slant+.4u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+oblu:=f_obl;
+top y100=y1l.c; bot y101=y2r.c; z100=whatever[z1l.bb,z2l]; z101=whatever[z2r.bb,z1r];
+infill obl(100,1l.c,2l)---obl(2l,100,2r)---z2r...obl(101,2r.c,1r)---obl(1r,101,1l)---z1l...cycle;
+endchar;
+
+iff known chars.latin_X_SS:
+bskchar "The sans-serif letter X";
+beginchar(chars.latin_X_SS,13u#,cap_height#,0); uni "0x1D5B7";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+oblu:=1.5oblu;
+numeric alpha[];
+lft x1l=2u; top y1l=h; x2r=w-x4l; bot y2r=0;
+x3r=w-x1l; top y3r=h; x4l=x1l-.5u; bot y4l=0;
+alpha1=diag_ratio(2,cap_stem,y1l-y2r,x1l-x2r);
+alpha2=diag_ratio(1,cap_hair,y3r-y4l,x3r-x4l);
+pos1(alpha1*cap_stem,0); pos2(alpha1*cap_stem,0);
+pos3(alpha2*cap_hair,0); pos4(alpha2*cap_hair,0);
+cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_bl(2l); cap_serifs_br(2r);
+cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_bl(4l); cap_serifs_br(4r);
+z1'=whatever[z1l,z2l]=whatever[z3l,z4l];
+z2'=whatever[z1r,z2r]=whatever[z3r,z4r];
+z3'=whatever[z1r,z2r]=whatever[z3l,z4l];
+z4'=whatever[z1l,z2l]=whatever[z3r,z4r];
+y100l=y100r=y101l=y101r=.5[y1l.b,y1];
+y102l=y102r=y103l=y103r=.5[y2l.b,y2];
+z100l=whatever[z1l,z2l]; z100r=whatever[z1r,z2r];
+z101l=whatever[z4l,z3l]; z101r=whatever[z4r,z3r];
+z102l=whatever[z1l,z2l]; z102r=whatever[z1r,z2r];
+z103l=whatever[z4l,z3l]; z103r=whatever[z4r,z3r];
+filldraw z100l---obl(1',1l,4l)---z103l...z4...z103r---obl(4',4r,2l)---z102l..z2..z102r
+ ---obl(2',2r,3r)---z101r...z3...z101l---obl(3',3l,1r)---z100r..z1..cycle;
+penlabels(1,2,3,4,100,101,102,103); labels(1',2',3',4',5');
endchar;
charscription(14u,cap_height,0)(
@@ -2829,10 +4194,11 @@ penlabels(1,2,3,4); labels(0',0'',0''',0,0'''',2',4l');
iff known chars.latin_Y:
bskchar "The letter Y";
beginchar(chars.latin_Y,14u#,cap_height#,0); uni "0x0059";
-italcorr cap_height#*slant+.75u#;
+italcorr cap_height#*slant+.5u#;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
usechar;
+math_fit(-cap_height#*slant,ic#-4.5u#);
endchar;
iff known chars.latin_Ygrave:
@@ -2890,6 +4256,42 @@ x101=x2+o;
circumflex(100,101,102).capital;
endchar;
+iff known chars.latin_Y_BB:
+bskchar "The blackboard-bold letter Y";
+beginchar(chars.latin_Y_BB,14u#,cap_height#,0); uni "0x1D550";
+italcorr cap_height#*slant+.75u#;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+usechar;
+bot z100=(x1r,y1r.c); top y101=y3l.c; z101=whatever[z3l.bb,z2l];
+infill obl(3r,3l,2r)---obl(2r,3r,1r)---obl(100,2r,1r.c)...z1r---obl(1l,1r,2l)---obl(2l,1l,3l)---obl(101,2l,3l.c)...z3l---cycle;
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.latin_Y_SS:
+bskchar "The sans-serif letter Y";
+beginchar(chars.latin_Y_SS,14u#,cap_height#,0); uni "0x1D5B8";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=0; top y2=.5h; x1=x2=.5w;
+pos3(whatever,0); pos4(whatever,0);
+lft x3l=2u; rt x4r=w-2u; top y3l=top y4r=h;
+z3r=z2r+whatever*(z3l-z2l); z4l'=z2r+(0,cap_hair-tiny) rotated (angle(z4r-z2r));
+z4l=z4l'+whatever*(z4r-z2r); z2'=whatever[z4l',z4l]=whatever[z2r,z3r];
+z0'=z2r+(u,0) rotated (angle(z4r-z2r)); z0'''=z2l+(u,0) rotated (angle(z3l-z2l));
+z0''=z2'+(u,0) rotated (angle(z4l-z2')); z0''''=z2'+(u,0) rotated (angle(z3r-z2r));
+cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_tr(4r); cap_serifs_tl(4l);
+y100l=y100r=y101l=y101r=.5[y3l.b,y3];
+z100l=whatever[z3l,z2l]; z100r=whatever[z3r,z2'];
+z101l=whatever[z0'',z4l]; z101r=whatever[z2r,z0'];
+filldraw z1l.b..z1..z1r.b---z2r+u*down..z0'---z101r...z4...z101l---z0''...z0''''
+ ---z100r..z3..z100l---z0'''..z2l+u*down---cycle;
+penlabels(1,2,3,4,100,101); labels(0',0'',0''',0,0'''',2',4l');
+math_fit(0,ic#-2u#);
+endchar;
+
iff known chars.sign_yen:
bskchar "Yen symbol";
beginchar(chars.sign_yen,14u#,cap_height#,0); uni "0x00A5";
@@ -2952,6 +4354,7 @@ italcorr cap_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
usechar;
+math_fit(-.5u#,.75ic#);
endchar;
iff known chars.latin_Zcaron:
@@ -2987,6 +4390,43 @@ usechar;
acute(100,101).capital;
endchar;
+iff known chars.latin_Z_BB:
+bskchar "The blackboard-bold letter Z";
+beginchar(chars.latin_Z_BB,13u#,cap_height#,0); uni "0x2124";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+oblu.more:=2oblu;
+y100=y4e; x100=.5[x1r,x4e];
+infill ifobl(2l,2r,1l,1r,,more)---obl(1',2r,1r)...z100..z1r
+ ---obl(1l,1r,2l).more---cycle;
+labels(100);
+endchar;
+
+iff known chars.latin_Z_SS:
+bskchar "The sans-serif letter Z";
+beginchar(chars.latin_Z_SS,13u#,cap_height#,0); uni "0x1D5B9";
+italcorr cap_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha;
+lft x1l=u; bot y1l=0; rt x2r=w-u-o; top y2r=h;
+x2r-x2l=x1r-x1l;
+alpha=diag_ratio(2,cap_stem,y2r-y1l,x2r-x1l);
+pos1(alpha*cap_stem,0); pos2(alpha*cap_stem,0);
+pos4(cap_hair,-90); pos5(cap_hair,90);
+bot y4r=0; rt x4r=w-u; top y5r=h; x5r=1.5u;
+y1'=y4l; z1'=whatever[z1r,z2r];
+y2'=y5l; z2'=whatever[z1l,z2l];
+oblu:=.5[cap_hair,cap_stem];
+filldraw z1l---z4r+cap_stem*left...z4...z4l+cap_stem*left---obl(1',4l,2r)---z2r
+ ---z5r+cap_stem*right...z5...z5l+cap_stem*right---obl(2',5l,1l)---cycle;
+penlabels(1,2,3,4,5); labels(0',0'',0''',0,0'''',2',4l');
+endchar;
+
+bskboundary;
+
charscription(9u,x_height,0)(
numeric aend; aend:=stem; oblu:=2oblu;
path p[]; numeric tim[];
@@ -3026,8 +4466,6 @@ infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12);
);
-bskboundary;
-
iff known chars.latin_a:
bskchar "The letter a";
beginchar(chars.latin_a,9u#,x_height#,0); uni "0x0061";
@@ -3214,6 +4652,111 @@ infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
penlabels(0,0',1,2,3,4,5,6,8,9,10,13,14,15,16); labels(4',4'',7,11,12);
endchar;
+iff known chars.latin_a_BB:
+bskchar "The blackboard-bold letter a";
+beginchar(chars.latin_a_BB,9u#,x_height#,0); uni "0x1D552";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric aend; aend:=.8cap_stem; oblu:=2oblu;
+path p[]; numeric tim[];
+pos0(hair,180); pos0'(.9[stem,hair],90); pos1(.8cap_stem,0); pos2(.8cap_stem,0);
+pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right;
+z4''=z4+.5(aend-currentbreadth)*dir135;
+rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve;
+x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r];
+x3=.5[x1r,lft u]; top y3r=h+o;
+y4''=.5[y2,y3l]; lft x4r=u+o;
+z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1);
+pos6(hair,angle(z7-z6l)+90);
+pos8(cap_stem,30); lft x8l=u; y8=y7-like_hair;
+pos9(hair,120); x9r=x3; y9l=o;
+pos10(hair,angle(z1-z9l)+90); z10l=z1;
+p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l..
+ {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r..
+ {right}z0'r..{z0r-z0'}z0r;
+p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l;
+p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r;
+(tim1,tim2)=p0 intersectiontimes p1;
+(tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0;
+(tim5,tim6)=p2 intersectiontimes p0;
+(tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1..
+ subpath(rundy(p0,tim4),infinity) of p0..cycle;
+z11=point rundy(p0,tim8).zpet of p0;
+z12=point rundy(p0,tim6) of p0;
+infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
+ if (y12>y11):
+ subpath(tim8,tim6) of p0
+ else:
+ subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0
+ fi
+ ..cycle;
+p100:=subpath(1,4) of p0;
+p101:=subpath(9,12) of p0;
+p102:=subpath(1,infinity) of p1;
+p103:=subpath(1,infinity) of p2;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(subpath(1,infinity) of p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,dir-30,p103,dir120);
+tim100=xpart(p100 intersectiontimes (z100--(x100,0'l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3r+5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y9l-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y12)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y2)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y7)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..reverse subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12,100,101,102,103);
+endchar;
+
+iff known chars.latin_a_SS:
+bskchar "The sans-serif letter a";
+beginchar(chars.latin_a_SS,9u#,x_height#,0); uni "0x1D5BA";
+adjust_fit(0,-stem#);
+pickup tiny.nib;
+numeric aend; aend:=stem; oblu:=2oblu;
+path p[]; numeric tim[];
+pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0);
+pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right;
+z4''=z4+.5(aend-currentbreadth)*dir135;
+rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve;
+x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r];
+x3=.5[x1r,lft u]; top y3r=h+o;
+y4''=.5[y2,y3l]; lft x4r=u+o;
+z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1);
+pos6(hair,angle(z7-z6l)+90);
+pos8(curve,30); lft x8l=u; y8r=y7-like_hair;
+pos9(hair,120); x9r=x3; y9l=o;
+pos10(hair,angle(z1-z9l)+90); z10l=z1;
+p0=(x1l,hair)---z2l..{left}z3l..{down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---(x1r,hair)..(x1,0)..{up}(x1l,hair);
+p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l;
+p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r;
+(tim1,tim2)=p0 intersectiontimes p1;
+(tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0;
+(tim5,tim6)=p2 intersectiontimes p0;
+(tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0;
+filldraw subpath(0,rundy(p0,tim1).zpet) of p0..
+ subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1..
+ subpath(rundy(p0,tim4),infinity) of p0..cycle;
+z11=point rundy(p0,tim8).zpet of p0;
+z12=point rundy(p0,tim6) of p0;
+infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2..
+ if (y12>y11):
+ subpath(rundy(p0,(tim8,f_obl)).zpet,rundy(p0,(tim6,f_obl))) of p0
+ else:
+ subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0
+ fi
+ ..cycle;
+penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12);
+endchar;
+
iff known chars.latin_b:
bskchar "The letter b";
beginchar(chars.latin_b,11u#,asc_height#,0); uni "0x0062";
@@ -3248,9 +4791,94 @@ infill p4..cycle;
penlabels(1,1',2,3,4); labels(0,7);
endchar;
+iff known chars.latin_b_BB:
+bskchar "The blackboard-bold letter b";
+beginchar(chars.latin_b_BB,11u#,asc_height#,0); uni "0x1D553";
+italcorr .5x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+rt x1r=2u+.8cap_stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+lft x5l=2u; bot y5=-d; top y6r=h;
+{{
+ numeric oldserif; oldserif:=serif_drop;
+ save serif_drop, stem; serif_drop:=.81oldserif; stem:=.8cap_stem;
+ lowercase_points(5,6,jut);
+}};
+p0=z1l{up}..z4l..z3l..z2l..{z1r-z2r}z1'l---cycle;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5f--z6r;
+tim1 =xpart(subpath (0,3) of p0 intersectiontimes p2);
+tim2-3=xpart(subpath (3,5) of p0 intersectiontimes ((0,hair)--(w,hair)));
+z7=point tim1 of p0 + like_stem*up;
+tim3 =xpart(p0 intersectiontimes ((0,y7-.5hair)--(w,y7-.5hair)));
+y0=ypart(point tim2 of p0)+o; z0=whatever[z5l,z5f];
+if (abs(z0-z1'l))<hair: y0:=y0-2o; fi;
+p4=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+filldraw z0---z5l+apex_o*down---lowercase_stem_upper(5,6)---z7
+ ..subpath (tim3, tim2) of p0..cycle;
+infill p4..cycle;
+p100:=z5a--z5l;
+p101:=z5l+apex_o*down--z0---obl(5f,5l,6r);
+p102:=subpath(1,3) of p0;
+p103:=subpath(1,3) of p4;
+z100=bsktouch(p100,right,p101,dir135);
+z101=bsktouch(p102,down,p103,up);
+z102=bsktouch(p102,up,p103,down);
+tim100=xpart(p100 intersectiontimes (z100--(0,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(w,y100)));
+tim102=xpart(p102 intersectiontimes (z101--(x101,h)));
+tim103=xpart(p103 intersectiontimes (z101--(x101,0)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y3)));
+infill ifobl(6r,6b,5r,5l,more,)---subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---cycle;
+oblu:=bbw;
+infill subpath(rundy(p102,tim102),rundy(p102,tim104).zpet) of p102
+ ..reverse subpath(rundy(p103,tim103),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,1',2,3,4); labels(0,7,100,101,102);
+endchar;
+
+iff known chars.latin_b_SS:
+bskchar "The sans-serif letter b";
+beginchar(chars.latin_b_SS,11u#,asc_height#,0); uni "0x1D5BB";
+italcorr .5x_height#*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=0; top y4l=x_height+o;
+lft x5l=2u; bot y5=-d; top y6r=h;
+{{
+ numeric oldserif; oldserif:=serif_drop;
+ save serif_drop; serif_drop:=.81oldserif;
+ lowercase_points(5,6,jut);
+}};
+p0=z1l{up}..z4l..z3l..z2l..{z1r-z2r}z1'l---cycle;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5f--z6r;
+tim1 =xpart(subpath (0,3) of p0 intersectiontimes p2);
+tim2-3=xpart(subpath (3,5) of p0 intersectiontimes ((0,hair)--(w,hair)));
+z7=point tim1 of p0 + like_stem*up;
+tim3 =xpart(p0 intersectiontimes ((0,y7-.5hair)--(w,y7-.5hair)));
+y0=ypart(point tim2 of p0)+o; z0=whatever[z5l,z5f];
+if (abs(z0-z1'l))<hair: y0:=y0-2o; fi;
+p4=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+filldraw obl(5l,2l,6l)---z6b..z6r---z7..subpath (tim3, 3) of p0---cycle;
+infill p4..cycle;
+penlabels(1,1',2,3,4); labels(0,7);
+endchar;
+
iff known chars.sign_blank_b:
bskchar "Blank b sign";
-beginchar(chars.sign_blank_b,11u#,asc_height#,0); uni "non";
+beginchar(chars.sign_blank_b,11u#,asc_height#,0); uni "0x2422";
italcorr .5x_height#*slant;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
@@ -3356,6 +4984,54 @@ x100=x3;
dotabove(100);
endchar;
+iff known chars.latin_c_BB:
+bskchar "The blackboard-bold letter c";
+beginchar(chars.latin_c_BB,8.5u#,x_height#,0); uni "0x1D554";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend; cend:=stem;
+pos1(cap_stem,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+lft x1l=u; y1=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10;
+rt x4r=w-u; y4r=.85h;
+z4'-z4l=hair*unitvector(z4l-z3r);
+filldraw z0---z0'+o*down..{left}z2l..z1l..{right}z3l..
+ z4r..z4'..{dir(angle(z4l-z4')-20)}z4l..
+ z3'r..z3r{left}..z1r..{right}z2r..z0'---cycle;
+path p[]; numeric tim[];
+oblu:=bbw;
+p100:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l;
+p101:=z3r{left}..z1r..{right}z2r..z0'---z0;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3l+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4); labels(0,0',3'r,4',100,101);
+endchar;
+
+iff known chars.latin_c_SS:
+bskchar "The sans-serif letter c";
+beginchar(chars.latin_c_SS,8.5u#,x_height#,0); uni "0x1D5BC";
+italcorr .5[x_height#,bar_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric cend; cend:=stem;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20);
+lft x1l=u; y1=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10;
+rt x4r=w-u; y4r=.85h;
+z4'-z4l=hair*unitvector(z4l-z3r);
+filldraw z0---z0'+o*down..{left}z2l..z1l..{right}z3l..
+ z4r..z4'..{dir(angle(z4l-z4')-20)}z4l..
+ z3'r..z3r{left}..z1r..{right}z2r..z0'---z0+o*up..cycle;
+penlabels(1,2,3,4); labels(0,0',3'r,4');
+endchar;
+
iff known chars.latin_ccedilla:
bskchar "The letter c with cedilla";
beginchar(chars.latin_ccedilla,8.5u#,x_height#,.65desc_depth#); uni "0x00E7";
@@ -3379,7 +5055,7 @@ filldraw subpath(0,rundy(p1,2).zpet) of p1
..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
..subpath(rundy(p1,tim1),infinity) of p1..
z4r..z4'..{dir(angle(z4l-z4')-20)}z4l..
- z3'r..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up-- else: --- fi cycle;
+ z3'r..z3r{left}..z1r..{right}z2r..z0'if testdpi: +up-- else: --- fi cycle;
penlabels(1,2,3,4,5,6,7,8); labels(0,0',3'r,4');
endchar;
@@ -3411,7 +5087,7 @@ p3:=z5rr---z6r;
(tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3;
(tim12,tim13)=p1 intersectiontimes p2;
(tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2;
-{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
+{{ if testdpi: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p3,tim1),infinity) of p3
---subpath(0,rundy(p2,tim3).zpet) of p2
@@ -3457,7 +5133,7 @@ p3:=z5rr---z6r;
(tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3;
(tim12,tim13)=p1 intersectiontimes p2;
(tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2;
-{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
+{{ if testdpi: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi
filldraw subpath(0,rundy(p0,tim0).zpet) of p0
..subpath(rundy(p3,tim1),infinity) of p3
---subpath(0,rundy(p2,tim3).zpet) of p2
@@ -3508,7 +5184,7 @@ iff known chars.latin_d:
bskchar "The letter d";
beginchar(chars.latin_d,11u#,asc_height#,0); uni "0x0064";
italcorr asc_height#*slant-.75u#;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,serif_fit#);
pickup tiny.nib;
usechar;
endchar;
@@ -3517,13 +5193,96 @@ iff known chars.latin_dcaron:
bskchar "The letter d with caron (treated like comma)";
beginchar(chars.latin_dcaron,11u#,asc_height#,0); uni "0x010F";
italcorr asc_height#*slant+2u#;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,0);
pickup tiny.nib;
usechar;
y100''r=h; rt x100'''=w+u;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_d_BB:
+bskchar "The blackboard-bold letter d";
+beginchar(chars.latin_d_BB,11u#,asc_height#,0); uni "0x1D555";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_stem,0); pos3'(hair,180); pos2(hair,90);
+pos3(hair,180); pos4(hair,270);
+lft x1l=u; lft x3r=w-2u-.8cap_stem; y3=.65x_height; y1=.5x_height;
+.5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=-o; top y4l=x_height+o;
+rt x5r=w-2u; bot y5=-d; top y6r=h;
+{{
+ save stem; stem:=.8cap_stem;
+ lowercase_points(5,6,1.2jut);
+}};
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=lowercase_lower_u_serif(5,hair);
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up;
+tim4 =xpart(p0 intersectiontimes ((.5w,y7-.5hair)--(w,y7-.5hair)));
+if tim4=-1: tim4:=xpart(p0 intersectiontimes ((.5[x4,x7],bar_height)--(.5[x4,x7],h))) fi;
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+filldraw subpath (tim2, tim4) of p0..z7---lowercase_stem_upper(5,6)
+ ---subpath(0,tim3) of p3..cycle;
+oblu.more:=1.25f_obl;
+infill p4..cycle;
+infill ifobl(6r,6b,5r,5l,more,)---z5a..z5..z5f---cycle;
+oblu:=bbw;
+p100:=subpath(2,4) of p0;
+p101:=subpath(1,3) of p4;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,h)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,0)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2l-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,3',2,3,4); labels(7,100,101);
+endchar;
+
+iff known chars.latin_d_SS:
+bskchar "The sans-serif letter d";
+beginchar(chars.latin_d_SS,11u#,asc_height#,0); uni "0x1D5BD";
+italcorr asc_height#*slant-.75u#;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(curve,0); pos3'(hair,180); pos2(hair,90);
+pos3(hair,180); pos4(hair,270);
+lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5x_height;
+.5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=0; top y4l=x_height+o;
+rt x5r=w-2u; bot y5=-d; top y6r=h;
+lowercase_points(5,6,1.2jut);
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=lowercase_lower_u_serif(5,hair);
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up;
+tim4 =xpart(p0 intersectiontimes ((.5w,y7-.5hair)--(w,y7-.5hair)));
+if tim4=-1: tim4:=xpart(p0 intersectiontimes ((.5[x4,x7],bar_height)--(.5[x4,x7],h))) fi;
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+filldraw subpath (2, tim4) of p0..z7---z6b..z6r---obl(5r,6r,2l)---cycle;
+infill p4..cycle;
+penlabels(1,3',2,3,4); labels(7);
+endchar;
+
iff known chars.latin_dstroke:
bskchar "The letter d with stroke";
beginchar(chars.latin_dstroke,11u#,asc_height#,0); uni "0x0111";
@@ -3661,7 +5420,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi:+up fi;
tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
@@ -3797,6 +5556,95 @@ x101=x3; x102-x100=5u;
tieacc(100,101,102);
endchar;
+iff known chars.latin_e_BB:
+bskchar "The blackboard-bold letter e";
+beginchar(chars.latin_e_BB,9u#,x_height#,0); uni "0x1D556";
+italcorr bar_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(hair,270); pos4(cap_stem,180);
+lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1;
+p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi:+up fi;
+tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
+tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim6=xpart(p1 intersectiontimes ((w,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+bar-tiny)--(x3,bar_height+bar-tiny)));
+p2=point tim3 of p0 -- point tim4 of p1;
+p3=point tim7 of p1 -- point tim6 of p1;
+filldraw subpath(0,rundy(p0,(tim3,hair)).zpet) of p0--(subpath(0,rundy(p2,1).zpet) of p2)..
+ subpath(rundy(p1,(tim5,if bold_face: 2f_obl else: oblu fi)),infinity) of p1
+ {z0-z0'-o*down}..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+oblu:=bbw;
+p100:=p0;
+p101:=subpath(1,infinity) of p1;
+p102:=subpath(4,tim3) of p100;
+p103:=subpath(tim6,1) of p1;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y3l+5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y3l+5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+oblu:=.75bbw;
+infill subpath(rundy(p102,tim104),rundy(p102,length(p102)).zpet) of p102
+ ..subpath(rundy(p103,0),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,2,3,4); labels(0,0',100,101,102);
+endchar;
+
+iff known chars.latin_e_SS:
+bskchar "The sans-serif letter e";
+beginchar(chars.latin_e_SS,9u#,x_height#,0); uni "0x1D5BE";
+italcorr bar_height#*slant;
+adjust_fit(-o#,0);
+pickup tiny.nib;
+path p[]; numeric tim[], shift;
+oblu:=2.5oblu;
+pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(curve,180);
+lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o;
+rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1;
+p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0';
+tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
+shift:=lft xpart(point tim1 of p0)- w+u;
+x4l:=x4l-shift; x4r:=x4r-shift;
+p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi:+up fi---z0+o*up;
+tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
+tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
+tim6=xpart(p1 intersectiontimes ((w,bar_height+hair-tiny)--(x3,bar_height+hair-tiny)));
+tim7=xpart(p1 intersectiontimes ((0,bar_height+hair-tiny)--(x3,bar_height+hair-tiny)));
+p2=point tim3 of p0 -- point tim4 of p1;
+p3=point tim7 of p1 -- point tim6 of p1;
+filldraw subpath(0,rundy(p0,(tim3,hair)).zpet) of p0--(subpath(0,rundy(p2,1).zpet) of p2)..
+ subpath(rundy(p1,(tim5,if bold_face: 2f_obl else: oblu fi)),infinity) of p1
+ {z0-z0'-o*down}..cycle;
+oblu:=1.5f_obl;
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
+ of p3..cycle;
+penlabels(1,2,3,4); labels(0,0');
+endchar;
+
iff known chars.latin_eogonek:
bskchar "The letter e with ogonek";
beginchar(chars.latin_eogonek,9u#,x_height#+o#,.85desc_depth#); uni "0x0119";
@@ -3862,7 +5710,7 @@ x4l:=x4l-shift; x4r:=x4r-shift;
x5l=x6l; z5r=z2l; y6=-hair; y7=-.5d;
rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d;
p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up fi;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi: +up fi;
tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
@@ -3905,7 +5753,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+o*up}z0 else: z0' fi if dpi<=300: +up fi;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+o*up}z0 else: z0' fi if testdpi: +up fi;
tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
@@ -3954,7 +5802,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+.5o*up}z0 else: z0' fi if dpi<=300: +up fi;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+.5o*up}z0 else: z0' fi if testdpi: +up fi;
tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height)));
tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height)));
@@ -3967,22 +5815,31 @@ p5=z1l---z11l..{left}z12l..{down}z13l..z13'..{up}z13r..z13''
..{right}z12r...z11r---(x11r,y1);
p6=z10r{dir(angle(z9l-z1))}..z9r..z8r..{z6r-z7-hair*up}z6r;
(tim8,tim9)=p0 intersectiontimes p4;
+if tim8<0: %Hack for math parameters
+ tim8:=xpart(p0 intersectiontimes (z10l--(x2,y10l)));
+ tim9:=0;
+fi
(tim10,tim11)=p4 intersectiontimes p5;
(tim12,tim13)=subpath(2,infinity) of p5 intersectiontimes p0;
(tim14,tim15)=p6 intersectiontimes p0;
+if tim15<0: %Hack for math parameters
+ tim15:=xpart(p0 intersectiontimes (z10r--(x2,y10r)));
+ tim14:=0;
+fi
(tim16,tim17)=p6 intersectiontimes p5;
if tim16<0: tim16:=infinity; fi
-filldraw subpath(0,rundy(p0,tim8).zpet) of p0..
- subpath(rundy(p4,tim9),rundy(p4,tim10).zpet) of p4..
- subpath(rundy(p5,tim11),rundy(p5,2+tim12).zpet) of p5..
- subpath(rundy(p0,tim13),rundy(p0,(tim3,hair)).zpet) of p0--
- subpath(0,rundy(p2,1).zpet) of p2..
- subpath(rundy(p1,(tim5, if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1
- {z0-z0'-o*down}..cycle;
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p4,tim9),rundy(p4,tim10).zpet) of p4
+ ..subpath(rundy(p5,tim11),rundy(p5,2+tim12).zpet) of p5
+ ..subpath(rundy(p0,tim13),rundy(p0,(tim3,hair)).zpet) of p0
+ --subpath(0,rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,(tim5, if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1{z0-z0'-o*down}
+ ..cycle;
oblu:=1.5f_obl;
-infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet)
- of p3..cycle;
-infill subpath(rundy(p6,tim14),rundy(p6,tim16).zpet) of p6..(reverse subpath(0,rundy(p5,tim17).zpet) of p5)
+infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3..cycle;
+infill subpath(rundy(p6,tim14),rundy(p6,tim16).zpet) of p6
+ ..(reverse subpath(0,rundy(p5,tim17).zpet) of p5)
..subpath(3,rundy(p0,tim15)) of p0..cycle;
penlabels(1,2,3,4,5,6,8,9,10,11,12,13); labels(0,0',7,13',13'');
);
@@ -4042,6 +5899,65 @@ filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
penlabels(3,4,5,5',6,6'); labels(4',4'');
endchar;
+iff known chars.latin_f_BB:
+bskchar "The blackboard-bold letter f";
+beginchar(chars.latin_f_BB,6.5u#, asc_height#, 0); uni "0x1D557";
+italcorr asc_height#*slant+1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend; fend:=stem;
+pos3(hair,-90); pos4(fend,180);
+lft x1l=2.5u; bot y1=0; top y2=h-like_curve;
+top y3l=h+o; x3=if monospace: .6[w,x1r] else: w-1.25u fi;
+.5[x2r-.5(cap_stem-stem),x4]=x3; y4''=y3r-like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+save stem; numeric stem; stem:=.8cap_stem;
+lowercase_points(1,2,jut);
+if not bold_face: y2r:=y2r+hair; fi;
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90);
+y5=y5'=y6=y6'=bot x_height;
+lft x5=u; x6=if monospace: 2x1-x5 else: w-u fi; x5'=x1l; x6'=x1r;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..{up}z1f---obl(6'l,1r,6l)---z6l..z6r---obl(6'r,6r,2r)---
+ z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l---
+ obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle;
+path p[]; numeric tim[];
+p100:=z6'r---z2r..{right}z3r;
+p101:=z4l{up}..z4''..z3l..z2l---z5'r;
+bot z100=(x1l,y1b);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z101--(x101,y2)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,y3l+5)));
+infill subpath(rundy(p101,(tim101,bbw)),infinity) of p101---obl(100,2b,1b)
+ ...z1l---obl(1r,1l,2r)---subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..cycle;
+penlabels(3,4,5,5',6,6'); labels(4',4'',100,101);
+endchar;
+
+iff known chars.latin_f_SS:
+bskchar "The sans-serif letter f";
+beginchar(chars.latin_f_SS,6.5u#, asc_height#, 0); uni "0x1D5BF";
+italcorr asc_height#*slant+1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend; fend:=stem;
+pos3(hair,-90); pos4(fend,180);
+lft x1l=2.5u; bot y1=0; top y2=h-like_curve;
+top y3l=h+o; x3=if monospace: .6[w,x1r] else: w-1.25u fi;
+.5[x2r,x4]=x3; y4''=y3r-like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut);
+z3'r=z3r+.5hair*right;
+pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90);
+y5=y5'=y6=y6'=bot x_height;
+lft x5=u; x6=if monospace: 2x1-x5 else: w-u fi; x5'=x1l; x6'=x1r;
+filldraw z1a..z1..z1f---obl(6'l,1r,6l)---z6l..z6r---obl(6'r,6r,2r)---
+ z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l---
+ obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle;
+penlabels(3,4,5,5',6,6'); labels(4',4'');
+endchar;
+
iff known chars.latin_ff:
bskchar "The ligature ff";
beginchar(chars.latin_ff,11u#, asc_height#, 0); uni "0xFB00";
@@ -4082,6 +5998,46 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8'');
endchar;
+iff known chars.latin_ff_alt:
+bskchar "The ligature ff---alternative";
+beginchar(chars.latin_ff_alt,11u#, asc_height#, 0); uni "non"; %"0xFB00";
+italcorr asc_height#*slant+1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend, ijut, tim[]; fend:=stem;
+path p[];
+pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180);
+lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2+like_hair=top y6=h-like_curve;
+top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=y3r-like_hair; lft x4r=w-2.2u-stem;
+y8''=y7r-like_hair; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+x7=if monospace: .6[w,x5r] else: w-1.25u fi; .5[x6r,x8]=x7;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut); lowercase_points(5,6,jut);
+if not bold_face: y2r:=y6r:=y2r+hair; fi;
+ijut=.5hair; x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut;
+z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right;
+pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90);
+pos11(hair,90); pos11'(hair,90);
+y9=y9'=y10=y10'=y11=y11'=bot x_height;
+lft x9=u; x11=if monospace: x5r+x9'-x9 else: w-u fi; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r;
+p0=z8l{up}..z8''..z7l..{down}z6l;
+p1=z4l{up}..z4''..z3l..{down}z2l;
+p2=z2r...{right}z3r..z4r..z4'..{up}z4l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)---
+ z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d..
+ {left}z5e..z5f---obl(11'l,5r,11l)---z11l..z11r---obl(11'r,11r,6r)---
+ z6r...{right}z7r..z8r..z8'..subpath(0,rundy(p0,tim0).zpet) of p0..
+ subpath(rundy(p1,tim1),infinity) of p1
+ --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle;
+infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
+ (reverse subpath(rundy(p0,tim3),infinity) of p0)..
+ (reverse subpath(0,rundy(p2,tim2).zpet) of p2)&cycle;
+penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8'');
+endchar;
+
charscription(11u,asc_height,0)(
numeric fend, tim; fend:=stem;
path p;
@@ -4186,6 +6142,53 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l..
penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8'');
endchar;
+iff known chars.latin_ffl_alt:
+bskchar "The ligature ffl---alternative";
+beginchar(chars.latin_ffl_alt,15u#, asc_height#, 0); uni "non"; %"0xFB04";
+italcorr asc_height#*slant-u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend, ijut, tim[]; fend:=stem;
+path p[];
+pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180);
+lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2+like_hair=top y6=h-like_curve;
+top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=y3r-like_hair; lft x4r=w-6.2u-stem;
+y8''=y7r-top like_hair; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+.5[x6r,x8]=x7;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,jut); lowercase_points(5,6,jut);
+if not bold_face: y2r:=y6r:=y2r+hair; fi;
+ijut=.5hair;
+ x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut;
+z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right;
+bot y12=0; top y13=h; rt x12r=w-2u; x8r=x12l;
+lowercase_points(12,13,jut);
+pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90);
+pos11(hair,90); pos11'(hair,90);
+y9=y9'=y10=y10'=y11=y11'=bot x_height;
+lft x9=u; x11=x5r+x9'-x9; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r;
+p0=z8l{up}..z8''..z7l..{down}z6l;
+p1=z4l{up}..z4''..z3l..{down}z2l;
+p2=z2r...{right}z3r..z4r..z4'..{up}z4l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+tim4=xpart(p0 intersectiontimes ((.75[x12a,x12l],y8r)--(.75[x12a,x12l],h)));
+if x12c-x5d<u: x5d:=x5d-ijut; x5e:=x5e-ijut; fi;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)---
+ z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d..
+ {left}z5e..z5f---obl(11'l,5r,11l)---z11l..z11r---obl(11'r,11r,6r)---
+ z6r...{right}z7r..z8r---z12a..{left}z12b..{right}z12c..z12+ser_boule*up
+ ..z12d{right}..{left}z12e..z12f---z13r{z13a-z13}..
+ subpath(tim4,rundy(p0,(tim0,2hair)).zpet) of p0..
+ subpath(rundy(p1,(tim1,2hair)),infinity) of p1
+ --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle;
+infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l..
+ (reverse subpath(rundy(p0,tim3),infinity) of p0)..
+ (reverse subpath(0,rundy(p2,tim2).zpet) of p2)..cycle;
+penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8'');
+endchar;
+
iff known chars.latin_fi:
bskchar "The ligature fi";
beginchar(chars.latin_fi,11u#, asc_height#, 0); uni "0xFB01";
@@ -4308,6 +6311,59 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
penlabels(3,4,7,8,9,9',10,10',11,11',14); labels(4',4'',8',8'');
endchar;
+iff known chars.latin_ffi_alt:
+bskchar "The ligature ffi---alternative";
+beginchar(chars.latin_ffi_alt,15u#, asc_height#, 0); uni "non"; %"0xFB03";
+italcorr .5[asc_height#,x_height#]*slant-.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric fend, ijut, help, tim[]; fend:=stem;
+path p[];
+pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180);
+lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2+like_hair=top y6=h-like_curve;
+top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=y3r-like_hair; lft x4r=w-6.2u-stem;
+y8''=y7r-top like_hair;
+help:=y8''-.2fend-dot_size-x_height;
+if help<.85stem: y8'':=.5[y3r,x_height]+.5dot_size+tiny; fi
+z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+.5[x6r,x8]=x7;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+lowercase_points(1,2,1.2jut); lowercase_points(5,6,jut);
+if not bold_face: y2r:=y6r:=y2r+hair; fi;
+ijut=.5hair;
+ x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut;
+z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right;
+bot y12=0; top y13=x_height; rt x12r=w-2u; x8r=x12l;
+lowercase_points(12,13,1.2jut);
+pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90);
+pos11(hair,90); pos11'(hair,90); pos14(dot_size+tiny,10);
+y9=y9'=y10=y10'=y11=y11'=bot x_height-.5serif_drop;
+lft x9=u; x11=x5r+x9'-x9; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r;
+lft x14r=x8l; y14=y8l-.5dot_size;
+p0=z8l{up}..z8''..z7l..{down}z6l;
+p1=z4l{up}..z4''..z3l..{down}z2l;
+p2=z2r...{right}z3r..z4r..z4'..{up}z4l;
+p3=z7r{right}..{z8'-z8r}z8r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p2 intersectiontimes p0;
+tim4=xpart(p0 intersectiontimes ((.75[x12a,x12l],y8r)--(.75[x12a,x12l],h)));
+if x12c-x5d<u: x5d:=x5d-ijut; x5e:=x5e-ijut; fi;
+filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..
+ {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)---
+ z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d..
+ {left}z5e..z5f---obl(11'l,5r,11l)---z13a---obl(13b,13a,12a)
+ ---z12a..{left}z12b..{right}z12c..z12+ser_boule*up..z12d{right}..
+ {left}z12e..z12f---z13r---obl(11'r,11r,6r)---
+ z6r...subpath(0,rundy(p3,infinity).zpet) of p3..{down}z14l..z14r{up}..z8''
+ ..subpath(1,rundy(p0,(tim0,2hair)).zpet) of p0..
+ subpath(rundy(p1,(tim1,2hair)),infinity) of p1
+ --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle;
+infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l--
+ (reverse subpath(rundy(p0,tim3),infinity) of p0)..
+ (reverse subpath(0,rundy(p2,tim2).zpet) of p2)&cycle;
+penlabels(3,4,7,8,9,9',10,10',11,11',14); labels(4',4'',8',8'');
+endchar;
+
charscription(11u,x_height,desc_depth)(
path p[]; numeric tim[]; oblu:=2oblu;
pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
@@ -4419,6 +6475,117 @@ x101=x4r; x102-x100=5u;
breve(100,101,102);
endchar;
+iff known chars.latin_g_BB:
+bskchar "The blackboard-bold letter g";
+beginchar(chars.latin_g_BB,11u#,x_height#,desc_depth#); uni "0x1D558";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+lft x1l=1.5u; rt x3l=w-2.5u; y1=y3=.5[y4l,y2l]; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=1/3bar_height+.25stem; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((0,y2l+tiny)--(w,y2l+tiny)));
+z5r=point tim1 of p0;
+tim2=xpart(p0 intersectiontimes ((x5r-hair+tiny,0)--(x5r-hair+tiny,h)));
+z5l=point tim2 of p0; z5=.5[z5l,z5r];
+lft z5'=(1.75u,0);
+pos6(.8cap_stem,90); pos8(hair,270);
+y6l=top y7l+.5stem; y6=0; x6=x5+u; x6r:=x6r+.5hair; rt x7l=w-2.75u;
+x8=x2; bot y8r=-d;
+pos9(dot_size,180); lft x9r=u; top y9=-.45d;
+p1=subpath(0,.5tim2) of p0 .. z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l;
+z7r-z7l=.8cap_stem*dir(angle(direction 3 of p1)+90); z7=.5[z7r,z7l];
+y9'=y7l if not bold_face:-.25dot_size fi; z9'=whatever[z9l,z5];
+pos10(hair,135); pos11(hair,135); z11-z10=tiny*dir45;
+z10=(.5[z2,z4]--(w-u,h)) intersectionpoint p0;
+pos12(stem,45); pos12'(stem,45); x12r=w-u; y12l=y11l; z12'=z12+.5tiny*dir135;
+p2=.5[z2,z4]---z11l..{dir-60}z12'l--z12l;
+p3=z12r---z12'r..z11r---z10r--z10;
+p4=z8r{right}..z7r..{left}z6r..{dir30}z5r;
+(tim3,tim4)=p0 intersectiontimes p2;
+(tim5,tim6)=p3 intersectiontimes p0;
+filldraw p1..{(w,h)-z9l}z9l..z9'{left}..{down}z9r..
+ subpath(0,rundy(p4,(infinity,if bold_face: 1.5f_obl else: oblu fi)).zpet) of p4
+ ..subpath(rundy(p0,tim1),rundy(p0,tim3).zpet) of p0..
+ subpath(rundy(p2,1),infinity) of p2{dir0}..
+ subpath(0,rundy(p3,(2,hair)).zpet) of p3..
+ subpath(rundy(p0,tim6),infinity) of p0-- cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+p100:=p4;
+p101:=z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l;
+p102:=z4r..z1r{down}..z2r..z3r..cycle;
+p103:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+z100=bsktouch(p100,left,subpath(0,2) of p101,right);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(subpath(0,1) of p102,up,p103,down);
+z103=bsktouch(subpath(1,2) of p102,down,p103,up);
+z104=bsktouch(subpath(3,4) of p102,up,p103,down);
+z105=bsktouch(subpath(2,3) of p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(0,y100)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,-d-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y9)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y2l-5)));
+tim108=xpart(p102 intersectiontimes (z104--(x104,y1)));
+tim109=xpart(p103 intersectiontimes (z104--(x104,y4l+5)));
+tim110=xpart(p102 intersectiontimes (z105--(x105,y1)));
+tim111=xpart(p103 intersectiontimes (z105--(x105,y2l-5)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101
+ ..subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107).zpet,rundy(p103,tim105)) of p103..cycle;
+infill subpath(rundy(p102,tim108).zpet,rundy(p102,tim110)) of p102
+ ..subpath(rundy(p103,tim111),rundy(p103,tim109).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9',100,101,102,103,104,105);
+endchar;
+
+iff known chars.latin_g_SS:
+bskchar "The sans-serif letter g";
+beginchar(chars.latin_g_SS,11u#,x_height#,desc_depth#); uni "0x1D5C0";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=1.5u; rt x3l=w-2.5u; y1=y3=.5[y4l,y2l]; .5[x2,x4]=.5[x1,x3]; x2=x4;
+bot y2l=1/3bar_height+.25stem; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((0,y2l+tiny)--(w,y2l+tiny)));
+z5r=point tim1 of p0;
+tim2=xpart(p0 intersectiontimes ((x5r-hair+tiny,0)--(x5r-hair+tiny,h)));
+z5l=point tim2 of p0; z5=.5[z5l,z5r];
+lft z5'=(1.75u,0);
+pos6(stem,90); pos8(hair,270);
+y6l=top y7l+.5stem; y6=0; x6=x5+u; x6r:=x6r-.5hair; rt x7l=w-2.5u;
+x8=x2; bot y8r=-d;
+pos9(stem,180); lft x9r=u; top y9=-.45d;
+p1=subpath(0,.5tim2) of p0 .. z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l;
+z7r-z7l=.8stem*dir(angle(direction 3 of p1)+90); z7=.5[z7r,z7l];
+z9'-z9=(o,hair);
+pos10(hair,135); pos11(hair,135); z11-z10=tiny*dir45;
+z10=(.5[z2,z4]--(w-u,h)) intersectionpoint p0;
+pos12(stem,45); pos12'(stem,45); x12r=w-u; y12l=y11l; z12'=z12+.5tiny*dir135;
+p2=.5[z2,z4]---z11l..{dir-60}z12'l--z12l;
+p3=z12r---z12'r..z11r---z10r--z10;
+p4=z8r{right}..z7r..{left}z6r..{dir30}z5r;
+(tim3,tim4)=p0 intersectiontimes p2;
+(tim5,tim6)=p3 intersectiontimes p0;
+filldraw p1..z9l{up}..z9'{left}..{down}z9r..
+ subpath(0,rundy(p4,(infinity,if bold_face: 1.5f_obl else: oblu fi)).zpet) of p4
+ ..subpath(rundy(p0,tim1),rundy(p0,tim3).zpet) of p0..
+ subpath(rundy(p2,1),infinity) of p2{dir0}..
+ subpath(0,rundy(p3,(2,hair)).zpet) of p3..
+ subpath(rundy(p0,tim6),infinity) of p0-- cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9');
+endchar;
+
charscription(11u,asc_height,0)(
path p[]; numeric tim[]; oblu:=2oblu;
pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
@@ -4468,6 +6635,65 @@ lft x101=x5+hair; x102-x100=4.5u;
circumflex(100,101,102);
endchar;
+iff known chars.latin_h_BB:
+bskchar "The blackboard-bold letter h";
+beginchar(chars.latin_h_BB,11u#, asc_height#, 0); uni "0x1D559";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos3(.8cap_stem,0); pos4(.8cap_stem,0); pos5(n_str_hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.5x_height;
+save stem; stem:=.8cap_stem;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+hair+tiny)*up;
+if y1'>y5: y1':=y5; fi;
+tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair)));
+filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---
+ lowercase_stem_draw(1,2)---cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot z103=(x3r,y3e);
+p100=subpath(3,4) of p2;
+p101=subpath(1,2) of p1;
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101
+ ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle;
+penlabels(3,4,5,6); labels(1',100,101,102);
+endchar;
+
+iff known chars.latin_h_SS:
+bskchar "The sans-serif letter h";
+beginchar(chars.latin_h_SS,11u#, asc_height#, 0); uni "0x1D5C1";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.5x_height;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..{right}z3;
+p2:=z3{right}..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+hair+tiny)*up;
+if y1'>y5: y1':=y5; fi;
+tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair)));
+filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---z2r..z2b---z1a..z1..z1f---cycle;
+penlabels(3,4,5,6); labels(1');
+endchar;
+
iff known chars.latin_hstroke:
bskchar "The letter h with stroke";
beginchar(chars.latin_hstroke,11u#, asc_height#, 0); uni "0x0127";
@@ -4662,6 +6888,61 @@ x101=x2l; x102-x100=4.5u;
hacek(100,101,102);
endchar;
+charscription(6u,x_height,0)(
+oblu:=2oblu;
+x1=.5w; bot y1=0; top y2=x_height;
+save stem; stem:=.8cap_stem;
+lowercase_stem(1,2,1.2jut).alt;
+bot z100=(x1l,y1b);
+oblu:=f_obl; oblu.more:=1.25oblu;
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+);
+
+iff known chars.latin_dotless_i_BB:
+bskchar "The blackboard-bold dotless i";
+beginchar(chars.latin_dotless_i_BB,6u#, x_height#, 0); uni "non";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_i_BB:
+bskchar "The blackboard-bold letter i";
+beginchar(chars.latin_i_BB,6u#, asc_height#-.5dot_size#, 0); uni "0x1D55A";
+italcorr (asc_height#-.5dot_size#)*slant-1.5u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+usechar;
+x3=x1-ddot; top y3=h-.5dot_size;
+dot(3);
+endchar;
+
+charscription(6u,x_height,0)(
+oblu:=2oblu;
+x1=.5w; bot y1=0; top y2=x_height;
+lowercase_points(1,2,1.2jut).alt;
+filldraw z1f---z2r..z2b---z1a..z1..cycle;
+);
+
+iff known chars.latin_dotless_i_SS:
+bskchar "The sans-serif dotless i";
+beginchar(chars.latin_dotless_i_SS,6u#, x_height#, 0); uni "non";
+adjust_fit(serif_fit#-.5u#,serif_fit#-.5u#);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_i_SS:
+bskchar "The sans-serif letter i";
+beginchar(chars.latin_i_SS,6u#, asc_height#-.5dot_size#, 0); uni "0x1D5C2";
+italcorr (asc_height#-.5dot_size#)*slant-1.5u#;
+adjust_fit(serif_fit#-.5u#,serif_fit#-.5u#);
+pickup tiny.nib;
+x3=x1-ddot; top y3=h-.5dot_size;
+usechar;
+dot(3);
+endchar;
+
iff known chars.latin_iogonek:
bskchar "The letter i with ogonek";
beginchar(chars.latin_iogonek,6u#,asc_height#-.5dot_size#,.85desc_depth#); uni "0x012F";
@@ -4763,6 +7044,78 @@ lowercase_stem(5,6,1.2jut).alt;
dot(7); dot(8);
endchar;
+charscription(5u,x_height,desc_depth)(
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(hair,-90);
+bot y1=-d+like_curve; top y2=x_height; rt x1r=w-u;
+bot y3r=-d; x3=if monospace: .4w else: u fi; top y4=y1; if monospace: x4=u; else: x4l=-u; fi;
+save stem; stem:=.8cap_stem;
+lowercase_points(1,2,1.2jut).alt;
+filldraw z3r{right}...{up}z1r--z2r..{(x2a-x1r,-.25serif_drop)}z2a&
+ z2a---obl(2b,2a,1a)---z1l...{left}z3l..reverse smitko(4,stem)..cycle;
+p100:=z1l{down}...{left}z3l;
+p101:=z3r{right}..{up}z1r;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--z1c));
+tim101=xpart(p101 intersectiontimes (z100--(w,-d)));
+oblu:=bbw; oblu.more:=1.25f_obl; oblu.m:=f_obl;
+infill ifobl(2r,2b,1r,1l,more,m)---subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---cycle;
+penlabels(1,2,3,4); labels(4',4'',4''',100);
+);
+
+iff known chars.latin_dotless_j_BB:
+bskchar "The blackboard-bold dotless j";
+beginchar(chars.latin_dotless_j_BB,5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_j_BB:
+bskchar "The blackboard-bold letter j";
+beginchar(chars.latin_j_BB,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x1D55B";
+italcorr (asc_height#-.5dot_size#)*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+top y5=h-.5dot_size; x5=x1-ddot;
+usechar;
+dot(5);
+endchar;
+
+charscription(5u,x_height,desc_depth)(
+oblu:=2oblu;
+pos3(hair,-90); pos4(stem,150);
+bot y1=-d+like_curve; top y2=x_height; rt x1r=w-u;
+bot y3r=-d; x3=if monospace: .4w else: u fi; top y4=y1; if monospace: x4=u; else: x4l=-u; fi;
+lowercase_points(1,2,1.2jut).alt;
+z4'=z4+(o,.2stem); z4''=z4+.5(stem-currentbreadth)*dir-135;
+filldraw z3r{right}...{up}z1r---z2r..z2b---z1l...{left}z3l.. z4l..z4'..z4''..cycle;
+penlabels(1,2,3,4); labels(4',4'',4''');
+);
+
+iff known chars.latin_dotless_j_SS:
+bskchar "The sans-serif dotless j";
+beginchar(chars.latin_dotless_j_SS,5u#,x_height#,desc_depth#); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
+iff known chars.latin_j_SS:
+bskchar "The sans-serif letter j";
+beginchar(chars.latin_j_SS,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x1D5C3";
+italcorr (asc_height#-.5dot_size#)*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+top y5=h-.5dot_size; x5=x1-ddot;
+usechar;
+dot(5);
+endchar;
+
charscription(10.5u,asc_height,0)(
pos3(whatever,0); pos5(whatever,0);
bot y1=0; top y2=h; lft x1l=2u;
@@ -4822,6 +7175,76 @@ lft x100=.5w; top y100''r=-o;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_k_BB:
+bskchar "The blackboard-bold letter k";
+beginchar(chars.latin_k_BB,11u#,asc_height#,0); uni "0x1D55C";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+pos3(whatever,0); pos5(whatever,0);
+bot y1=0; top y2=h; lft x1l=2u;
+rt x3r=w-3u; top y3=x_height; rt x5r=w-2u; bot y5r=0;
+{{save stem; numeric stem; stem:=.8cap_stem;
+lowercase_points(1,2,jut);
+y4r=.45x_height; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90);
+z3l=z4l+whatever*(z3r-z4r);
+x6l=x4r+hair+.75u; z6l=whatever[z4r,z3r];
+z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90);
+}};
+z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r];
+x4'=x2r; z4'=whatever[z3l,z4l];
+serifs_tl(3l); serifs_tr(3r); serifs_br(5r); serifs_bl(5l);
+z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r));
+z6l'=z6l+(-u,0) rotated (angle(z3r-z4r));
+z6l''=z6l+(u,0) rotated (angle(z5l-z6l));
+z6r'=z6r+(u,0) rotated (angle(z5r-z6r));
+z6r''=(z6r+(u,0) rotated (angle(z3r-z4r)))
+ shifted ((hair-currentbreadth)*unitvector(z3r-z4r) rotated -90);
+z2'=z4'+(1.5u,0) rotated (angle(z3l-z4l)); z2''=z4'+(0,2u);
+filldraw z1a{down}..{left}z1b..z1c{right}..z1+ser_boule*up..{right}z1d..
+ z1e{left}..z1f---obl(4r,1f,4r'')..z4r''..z6l''---
+ obl(5l,6l'',5r){right}..z5r+.5ser_boule*up..{right}z5r.a..
+ {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r''
+ if not bold_face: ---diag_serif(3r,4r) fi ..{dir0}z3r.c..z3r.a---z3l.a..z3l.c{dir0}..
+ diag_serif(3l,4l)---z2'..{up}z2''--z2r
+ ..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)
+ ---cycle;
+oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot y101=y5r.c; rt z101=whatever[z5r,z6r];
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill ifobl(6r,6l,5r,5l,,)---obl(5l,6l,5r)...{right}z5r...obl(101,5r.c,6r)---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'');
+endchar;
+
+iff known chars.latin_k_SS:
+bskchar "The sans-serif letter k";
+beginchar(chars.latin_k_SS,10.5u#,asc_height#,0); uni "0x1D5C4";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+pos3(whatever,0); pos5(whatever,0);
+bot y1=0; top y2=h; lft x1l=2u;
+rt x3r=w-3u; top y3=x_height; rt x5r=w-2u; bot y5r=0;
+lowercase_points(1,2,jut);
+y4r=.45x_height; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90);
+z3l=z4l+whatever*(z3r-z4r);
+x6l=x4r+hair+.75u; z6l=whatever[z4r,z3r];
+z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90);
+z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r];
+x4'=x2r; z4'=whatever[z3l,z4l];
+serifs_tl(3l); serifs_tr(3r); serifs_br(5r); serifs_bl(5l);
+z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r));
+z6l'=z6l+(-u,0) rotated (angle(z3r-z4r));
+z6l''=z6l+(u,0) rotated (angle(z5l-z6l));
+z6r'=z6r+(u,0) rotated (angle(z5r-z6r));
+z6r''=(z6r+(u,0) rotated (angle(z3r-z4r)))
+ shifted ((hair-currentbreadth)*unitvector(z3r-z4r) rotated -90);
+z2'=z4'+(1.5u,0) rotated (angle(z3l-z4l)); z2''=z4'+(0,2u);
+y100=y6r''; z100=whatever[z3r,z4r];
+filldraw z1a..z1..z1f---obl(4r,1f,4r'')..z4r''..z6l''---
+ obl(5l,6l'',5r){right}..diag_serif(5r,6r)---z6r'..z100
+ ---z3r..z3l---z2'..{up}z2''---z2r..z2b---cycle;
+penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'',100);
+endchar;
+
iff known chars.latin_kra:
bskchar "The letter kra";
beginchar(chars.latin_kra,11.5u#,x_height#,0); uni "0x0138";
@@ -4922,6 +7345,34 @@ x100=x1;
dotabove(100);
endchar;
+iff known chars.latin_l_BB:
+bskchar "The blackboard-bold letter l";
+beginchar(chars.latin_l_BB,6u#, asc_height#, 0); uni "0x1D55D";
+italcorr asc_height#*slant-1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+save stem; stem:=.8cap_stem;
+x1=.5w; bot y1=0; top y2=h;
+lowercase_stem(1,2,jut);
+oblu.more:=1.25oblu;
+bot z100=(x1l,y1b);
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+endchar;
+
+iff known chars.latin_l_SS:
+bskchar "The sans-serif letter l";
+beginchar(chars.latin_l_SS,6u#, asc_height#, 0); uni "0x1D5C5";
+italcorr asc_height#*slant-1.75u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+pos3(hair,60);
+x1=.5w; bot y1=0; top y2=h;
+lowercase_points(1,2,jut);
+x3=.5[x1,x1e]; bot y3l=-o;
+filldraw z1f---z2r..z2b---z1a...{right}z3l..{left}z3r...cycle;
+penlabels(3);
+endchar;
+
iff known chars.latin_lslash:
bskchar "The letter l with slash";
beginchar(chars.latin_lslash,6u#,asc_height#,0); uni "0x0142";
@@ -4973,8 +7424,95 @@ z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
z0=(x4r,y1');
tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair)));
tim2=xpart(p3 intersectiontimes (z0--(x5,y0)));
-filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21..
- subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: oblu fi)).zpet) of p3..broken_stem_draw(1',1,2)---cycle;
+filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21
+ ..subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: if (substring(0,5) of font_identifier_) = "BSKRW": f_obl else: oblu fi fi)).zpet) of p3
+ ..broken_stem_draw(1',1,2)---cycle;
+penlabels(3,4,5,6,7,8,9,10); labels(0,1');
+endchar;
+
+iff known chars.latin_m_BB:
+bskchar "The blackboard-bold letter m";
+beginchar(chars.latin_m_BB,16u#, x_height#, 0); uni "0x1D55E";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; boolean correct; correct:=true;
+save stem; stem:=.8cap_stem;
+oblu:=6oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+pos7(stem,0); pos8(stem,0); pos9(n_str_hair,90); pos10(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+x3=.5w; bot y3=bot y7=0; x4=x3; y4=y8=.75x_height; y5r=y9r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=y10=if monospace: .75 else: .6 fi\\ x_height; x10l=x3r;
+rt x7r=w-2u; x8=x7; x9=.5[x7l,x3r];
+{{ if monospace and (x3l-x1l-stem-tiny<2jut): correct:=false; save jut; numeric jut; jut:=.4(x3l-x1l-stem-.5tiny); fi
+serif_bot(3); serif_bot(7); lowercase_points(1,2,jut);}};
+p1:=z6l{up}..z5l..z4l---z3a if correct:.. else: -- fi z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e if correct:..{up} else: -- fi z3f---z10l..z9l..
+ z8l---z7a if correct:.. else: -- fi z7b{left}..z7c{right}..
+ z7+ser_boule*up..{right}z7d..{left}z7e
+ if correct:.. else: -- fi z7f---z8r..z9r..{down}z10r;
+p21:=subpath(6,infinity) of p2;
+p3:=z4r{up}..z5r..{down}z6r;
+p4:=z1f--z2r;
+tim3=xpart(p3 intersectiontimes p4);
+z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+z0=(x4r,y1');
+tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair)));
+tim2=xpart(p3 intersectiontimes (z0--(x5,y0)));
+filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21
+ ..subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: if (substring(0,5) of font_identifier_) = "BSKRW": f_obl else: oblu fi fi)).zpet) of p3
+ ..broken_stem_draw(1',1,2)---cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot z103=(x3r,y3e); bot z104=(x7r,y7e);
+p100=subpath(0,1) of p3;
+p101=subpath(1,2) of p1;
+p102=z8r{up}..z9r..{down}z10r;
+p103=z10l{up}..z9l..{down}z8l;
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h+o+5)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+tim102=xpart(p102 intersectiontimes (z102--(x102,h+o+5)));
+tim103=xpart(p103 intersectiontimes (z102--(x102,0)));
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101
+ ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle;
+infill subpath(0,rundy(p102,(tim102,bbw)).zpet) of p102
+ ..subpath(rundy(p103,(tim103,bbw)),infinity) of p103
+ ---obl(7l,8l,7r)---z7r...obl(104,7e,8r)---cycle;
+penlabels(3,4,5,6,7,8,9,10); labels(0,1',100,101,102,103,104);
+endchar;
+
+iff known chars.latin_m_SS:
+bskchar "The sans-serif letter m";
+beginchar(chars.latin_m_SS,16u#, x_height#, 0); uni "0x1D5C6";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; boolean correct; correct:=true;
+oblu:=6oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+pos7(stem,0); pos8(stem,0); pos9(n_str_hair,90); pos10(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+x3=.5w; bot y3=bot y7=0; x4=x3; y4=y8=.75x_height; y5r=y9r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=y10=if monospace: .75 else: .6 fi\\ x_height; x10l=x3r;
+rt x7r=w-2u; x8=x7; x9=.5[x7l,x3r];
+{{ if monospace and (x3l-x1l-stem-tiny<2jut): correct:=false; save jut; numeric jut; jut:=.4(x3l-x1l-stem-.5tiny); fi
+serif_bot(3); serif_bot(7); lowercase_points(1,2,jut);}};
+p1:=z6l{up}..z5l..z4l---z3a..{right}z3;
+p2:=z3{right}..z3f---z10l..z9l..z8l---z7a..z7..z7f---z8r..z9r..{down}z10r;
+p21:=subpath(6,infinity) of p2;
+p3:=z4r{up}..z5r..{down}z6r;
+p4:=z1f--z2r;
+tim3=xpart(p3 intersectiontimes p4);
+z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+z0=(x4r,y1');
+tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair)));
+tim2=xpart(p3 intersectiontimes (z0--(x5,y0)));
+filldraw p1..z3+ser_boule*up..subpath (0,6) of p2
+ ..subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21
+ ..subpath(tim2,rundy(p3,tim3).zpet) of p3
+ ..z1'..z2..z2b---z1a..z1..z1f---cycle;
penlabels(3,4,5,6,7,8,9,10); labels(0,1');
endchar;
@@ -5064,6 +7602,60 @@ x100=.5w; top y100''r=-o;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_n_BB:
+bskchar "The blackboard-bold letter n";
+beginchar(chars.latin_n_BB,11.5u#, x_height#, 0); uni "0x1D55F";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=8oblu;
+save stem; stem:=.8cap_stem;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.6x_height; y6l:=y6l-hair;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c;
+p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+filldraw p1..z3+ser_boule*up..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b); bot z103=(x3r,y3e);
+p100=subpath(3,4) of p2;
+p101=subpath(1,2) of p1;
+z101=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h+o+5)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100
+ ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101
+ ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle;
+penlabels(3,4,5,6); labels(1',100,101,102);
+endchar;
+
+iff known chars.latin_n_SS:
+bskchar "The sans-serif letter n";
+beginchar(chars.latin_n_SS,11.5u#, x_height#, 0); uni "0x1D5C7";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=8oblu;
+pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+rt x3r=w-2u; bot y3=0; serif_bot(3);
+x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r];
+x6l=x1r; y6=.6x_height; y6l:=y6l-hair;
+lowercase_points(1,2,jut);
+p1:=z6l{up}..z5l..z4l---z3a..{right}z3;
+p2:=z3{right}..z3f---z4r..z5r..{down}z6r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi
+filldraw p1..z3+ser_boule*up..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..z1'..z2..z2b---z1a..z1..z1f---cycle;
+penlabels(3,4,5,6); labels(1');
+endchar;
+
iff known chars.latin_eng:
bskchar "The letter eng";
beginchar(chars.latin_eng,10.5u#, x_height#, desc_depth#); uni "0x014B";
@@ -5246,6 +7838,49 @@ multiply(.85)(curve,hair,vair);
usechar shifted (-x1l,-y4l) scaled .5 shifted (u+(HH-.5x_height)*slant,HH);
endchar;
+iff known chars.latin_o_BB:
+bskchar "The blackboard-bold letter o";
+beginchar(chars.latin_o_BB,10u#,x_height#,0); uni "0x1D560";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u;
+filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+endchar;
+
+iff known chars.latin_o_SS:
+bskchar "The sans-serif letter o";
+beginchar(chars.latin_o_SS,10u#,x_height#,0); uni "0x1D5C8";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+usechar;
+endchar;
+
charscription(10u,x_height,.85desc_depth)(
path p[];
pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
@@ -5366,6 +8001,83 @@ infill p3..cycle;
penlabels(1,1',2,3,4); labels(7);
endchar;
+iff known chars.latin_p_BB:
+bskchar "The blackboard-bold letter p";
+beginchar(chars.latin_p_BB,11u#,x_height#,desc_depth#); uni "0x1D561";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+save stem; stem:=.8cap_stem;
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=-o; top y4l=h+o;
+lft x5l=2u; bot y5=-d; top y6r=h+o;
+lowercase_points(5,6,jut);
+p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5r---lowercase_stem_draw(5,6);
+p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right);
+tim1=xpart(p0 intersectiontimes (z0--(x2,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+z7=bsktouch(subpath(3,infinity) of p0,left,p2,right);
+tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7)));
+tim4=xpart(p2 intersectiontimes (z7--(0,y7)));
+filldraw subpath (rundy(p0,tim1), rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p2,tim4),infinity) of p2
+ ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle;
+infill p3..cycle;
+oblu.more:=1.25oblu;
+bot z102=(x5l,y5b);
+infill ifobl(6r,6b,5r,5l,more,)---obl(102,6b,5b)...z5l---obl(5r,5l,6r)---cycle;
+oblu:=bbw;
+p100:=subpath(2,4) of p0;
+p101:=subpath(1,3) of p3;
+z100=bsktouch(p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,h+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,0)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2l-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y3)));
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,1',2,3,4); labels(7,100,101,102);
+endchar;
+
+iff known chars.latin_p_SS:
+bskchar "The sans-serif letter p";
+beginchar(chars.latin_p_SS,11u#,x_height#,desc_depth#); uni "0x1D5C9";
+italcorr .5x_height#*slant-.25u#;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x1'r=x1r; y1'=.2x_height;
+if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi;
+bot y2l=-o; top y4l=h+o;
+lft x5l=2u; bot y5=-d; top y6r=h+o;
+lowercase_points(5,6,jut);
+p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l;
+p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r;
+p2=z5f---z6r..z6b---z5a..z5..{up}z5f;
+p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r;
+z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right);
+tim1=xpart(p0 intersectiontimes (z0--(x2,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+z7=bsktouch(subpath(3,infinity) of p0,left,p2,right);
+tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7)));
+tim4=xpart(p2 intersectiontimes (z7--(0,y7)));
+filldraw subpath (rundy(p0,tim1), rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p2,tim4),infinity) of p2
+ ..{up}subpath(0,rundy(p2,tim2).zpet) of p2..cycle;
+infill p3..cycle;
+penlabels(1,1',2,3,4); labels(7);
+endchar;
+
iff known chars.latin_thorn:
bskchar "The letter thorn";
beginchar(chars.latin_thorn,11u#,asc_height#,desc_depth#); uni "0x00FE";
@@ -5401,7 +8113,7 @@ iff known chars.latin_q:
bskchar "The letter q";
beginchar(chars.latin_q,11u#,x_height#,desc_depth#); uni "0x0071";
italcorr x_height#*slant;
-adjust_fit(serif_fit#,0);
+adjust_fit(0,serif_fit#);
pickup tiny.nib;
path p[]; numeric tim[]; oblu:=2.5oblu;
pos1(curve,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270);
@@ -5429,6 +8141,84 @@ infill p4..cycle;
penlabels(1,3',2,3,4); labels(7,9,9');
endchar;
+iff known chars.latin_q_BB:
+bskchar "The blackboard-bold letter q";
+beginchar(chars.latin_q_BB,11u#,x_height#,desc_depth#); uni "0x1D562";
+italcorr x_height#*slant;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+save stem; stem:=.8cap_stem;
+pos1(cap_stem,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270);
+lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=-o; top y4l=h+o;
+rt x5r=w-2u; bot y5=-d; top y6r=h;
+lowercase_points(5,6,jut);
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=reverse lowercase_stem_draw(5,6);
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up; if y7>y6r-.8hair: y7:=y6r-.8hair; fi
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+bot rt z9=(w-u,x_height+o); z9'=z6r+stem*down;
+tim4=xpart(p0 intersectiontimes ((.5w,y7)--(w,y7)));
+filldraw subpath (tim2, rundy(p0,tim4).zpet) of p0..bot z6---z9--z9+down{z7-z9}..
+ {down}z9'---subpath (0,tim3) of p3..cycle;
+infill p4..cycle;
+bot z100=(x5r,y5e);
+p100:=subpath(2,4) of p0;
+p101:=subpath(1,3) of p4;
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z101--(x101,h+5)));
+tim101=xpart(p101 intersectiontimes (z101--(x101,0)));
+tim102=xpart(p100 intersectiontimes (z102--(x102,y2l-5)));
+tim103=xpart(p101 intersectiontimes (z102--(x102,y3)));
+oblu:=f_obl; oblu.more:=1.25f_obl;
+infill ifobl(6r,6b,5r,5l,more,)---obl(5l,6b,5r)---z5r...obl(100,5e,6r)---cycle;
+oblu:=bbw;
+infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+penlabels(1,3',2,3,4); labels(7,9,9',100,101,102);
+endchar;
+
+iff known chars.latin_q_SS:
+bskchar "The sans-serif letter q";
+beginchar(chars.latin_q_SS,11u#,x_height#,desc_depth#); uni "0x1D5CA";
+italcorr x_height#*slant;
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos1(curve,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270);
+lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5h; .5[x2,x4]=.5[x1,x3];
+x2-x4=-.5u; x3'r=x3r; y3'=.3x_height;
+if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi;
+bot y2l=-o; top y4l=h+o;
+rt x5r=w-2u; bot y5=-d; top y6r=h;
+lowercase_points(5,6,jut);
+p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l;
+p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r;
+p2=z5a--z6l;
+p3=z5f{down}..z5..z5a---z6b..z6r---z5f;
+tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2);
+tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0)));
+if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi;
+tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o)));
+z7=point tim1 of p0 + like_stem*up; if y7>y6r-.8hair: y7:=y6r-.8hair; fi
+p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r;
+bot rt z9=(w-u,x_height+o); z9'=z6r+stem*down;
+tim4=xpart(p0 intersectiontimes ((.5w,y7)--(w,y7)));
+filldraw subpath (tim2, rundy(p0,tim4).zpet) of p0..z6r--subpath (0,tim3) of p3..cycle;
+infill p4..cycle;
+penlabels(1,3',2,3,4); labels(7,9,9');
+endchar;
+
charscription(8.5u,x_height,0)(
path p[]; numeric tim[];
pos3(like_curve,0); pos5(hair,90); pos6(hair,180);
@@ -5513,6 +8303,62 @@ x101=.45[x4,x2r]; x102-x100=4.5u;
tieacc(100,101,102);
endchar;
+iff known chars.latin_r_BB:
+bskchar "The blackboard-bold letter r";
+beginchar(chars.latin_r_BB,8.5u#, x_height#, 0); uni "0x1D563";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+save stem; stem:=.8cap_stem;
+pos3(like_curve,0); pos5(hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+rt x3r=w-u; y3r=y5l-.75like_stem;
+y5r=x_height; x5=.5w+.5like_stem;
+x6l=x1r; y6=.6x_height;
+z4=(x3l,x_height+o);
+lowercase_points(1,2,jut);
+p2:=z3r{up}..{dir180}z4..{down}z6r;
+p1:=z6l{up}..{dir10}z5l..z5l+(hair,-o)...z3l..z3+o*down..z3r;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up;
+if y1'>y5r: y1':=y5r-.5hair; fi;
+tim3-1=xpart(subpath (1,2) of p2 intersectiontimes ((0,y1')--(w,y1')));
+filldraw p1..subpath (0,tim3) of p2..broken_stem_draw(1',1,2)---cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot z100=(x1l,y1b);
+infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle;
+penlabels(3,5,6); labels(1',4,7,100);
+math_fit(0,ic#-1.5u#);
+endchar;
+
+iff known chars.latin_r_SS:
+bskchar "The sans-serif letter r";
+beginchar(chars.latin_r_SS,8.5u#, x_height#, 0); uni "0x1D5CB";
+italcorr .5[bar_height#,x_height#]*slant;
+adjust_fit(serif_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos3(stem,0); pos5(hair,90); pos6(hair,180);
+lft x1l=2u; bot y1=0; top y2=h+apex_o;
+rt x3r=w-u; y3r=y5l-.75like_stem;
+y5r=x_height; x5=.5w+.5like_stem;
+x6l=x1r; y6=.6x_height;
+z4=(x3l,y5r);
+lowercase_points(1,2,jut);
+p2:=z3r{up}..z5r..{down}z6r;
+p1:=z6l{up}..{dir10}z5l...{down}z3l;
+p3:=z1f--z2r;
+(tim1,tim2)=p2 intersectiontimes p3;
+z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up+o*right;
+if y1'>y5r: y1':=y5r-.5hair; fi;
+tim3-1=xpart(subpath (1,2) of p2 intersectiontimes ((0,y1')--(w,y1')));
+filldraw p1..subpath (0,tim3) of p2..z1'..z2..z2b---z1a..z1..z1f---cycle;
+penlabels(3,5,6); labels(1',4,7);
+math_fit(0,ic#-1.5u#);
+endchar;
+
charscription(7.7u,x_height,0)(
numeric exc; exc=(w-u)/h; oblu:=1.5oblu;
path p[]; numeric tim[];
@@ -5586,6 +8432,64 @@ x100=x4; top y100''r=-2o;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_s_BB:
+bskchar "The blackboard-bold letter s";
+beginchar(chars.latin_s_BB,7.7u#, x_height#, 0); uni "0x1D564";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h; oblu:=1.5oblu;
+path p[]; numeric tim[];
+pos2(hair,90); pos3(cap_stem,angle((w-u,h))+180); pos4(hair,90);
+pos5(.8cap_stem,180); pos6(.8cap_stem,180);
+y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o;
+y3=.5[y2l,y4r]+.5hair;
+pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-.5[x5,x5r]; y1=y5-.5hair; y1'=h+o;
+pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h)));
+tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h)));
+filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l
+ ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)), infinity) of p1..cycle;
+oblu:=bbw;
+p100:=subpath(1,5) of p0;
+p101:=subpath(1,5) of p1;
+z100=bsktouch(subpath(0,1) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y4l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(0,1,1',2,3,4,5,6,7,7'); labels(100,101);
+endchar;
+
+iff known chars.latin_s_SS:
+bskchar "The sans-serif letter s";
+beginchar(chars.latin_s_SS,7u#, x_height#, 0); uni "0x1D5CC";
+italcorr x_height#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h; oblu:=1.5oblu;
+path p[]; numeric tim[];
+pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90);
+pos5(stem,180); pos6(stem,180);
+y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5hair; rt x6l=w-u;
+x3=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l]; .5[x2,x4]=x3;
+y3=.5[y2l,y4r]+.5hair;
+pos1(hair,0); x1r=w-x5r; y1=y5+o;
+pos7(hair,0); x7l=w-x6l; y7=y6;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-90}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+filldraw p0..p1..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
iff known chars.latin_scedilla:
bskchar "The letter s with cedilla";
beginchar(chars.latin_scedilla,7.7u#, x_height#,.65desc_depth#); uni "0x015F";
@@ -5683,7 +8587,7 @@ top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o;
pos5(hair,90); pos6(hair,90);
y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down;
filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}..{left}z3l
- ..z2l---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100)..
+ ..z2l---obl(1'l,2l,5l)---z5l..{right}z5r..controls (z1l+hair*dir100)..
z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle;
penlabels(0,1,1',2,3,4,5,6); labels(1''r);
);
@@ -5719,6 +8623,34 @@ rt x100'''=w-u; top y100''r=h;
comma(100,.75dot_size,.5hair,.75comma_depth);
endchar;
+iff known chars.latin_t_BB:
+bskchar "The blackboard-bold letter t";
+beginchar(chars.latin_t_BB,7.5u#,.4[asc_height#,x_height#], 0); uni "0x1D565";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(hair,0); pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(hair,90); pos4(hair,180);
+x1=x2; x2r=.5w; rt x3=.5[x2r,x4]; rt x4l=w-u;
+y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth);
+top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o;
+pos5(hair,90); pos6(hair,90);
+y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down;
+filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}..{left}z3l
+ ..z2l---obl(1'l,2l,5l)---z5l..{right}z5r..controls (z1l+hair*dir100)..
+ z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle;
+path p[]; numeric tim[];
+p100:=subpath(0,2) of (z1r---z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r);
+p101:=subpath(1,infinity) of (z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..{up}z2l);
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y2)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3l-5)));
+z101=2/3[z1r,z0r];
+oblu:=.8bbw;
+infill subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---ifobl(1l,101,2l,1r,,)---cycle;
+penlabels(0,1,1',2,3,4,5,6); labels(1''r,100,101);
+endchar;
+
iff known chars.latin_tcedilla:
bskchar "The letter t with cedilla";
beginchar(chars.latin_tcedilla,7.5u#,.4[asc_height#,x_height#],.65desc_depth#); uni "0x0163";
@@ -5766,6 +8698,24 @@ filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}
penlabels(0,1,1',2,3,4,5,6,7,7',8,8'); labels(1''r,7rr,8ll);
endchar;
+iff known chars.latin_t_SS:
+bskchar "The sans-serif letter t";
+beginchar(chars.latin_t_SS,7.5u#,.4[asc_height#,x_height#], 0); uni "0x1D5CD";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180);
+x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u;
+y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth);
+top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o;
+pos5(hair,90); pos6(hair,90);
+y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down;
+y5'=y5r; x5'=x1l;
+oblu:=cap_hair;
+filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r..z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..z2l---obl(1'l,2l,5l)---z5l..z5r---obl(5',5r,0l)---z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle;
+penlabels(0,1,1',2,3,4,5,6); labels(1''r,5');
+endchar;
+
charscription(11u,x_height,0)(
path p[]; numeric tim[];
pos1(stem,0); pos2(stem,0); pos4(stem,0);
@@ -5918,6 +8868,65 @@ x101-x100=6u; x.tilde=x5-o;
tilde(100,101);
endchar;
+iff known chars.latin_u_BB:
+bskchar "The blackboard-bold letter u";
+beginchar(chars.latin_u_BB,11u#, x_height#, 0); uni "0x1D566";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+path p[]; numeric tim[];
+save stem; stem:=.8cap_stem;
+pos1(stem,0); pos2(stem,0); pos4(stem,0);
+pos5(n_str_hair,90); pos6(hair,90);
+lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4;
+bot y3=0; top y2= top y4=h; y4=y4';
+y1=.25x_height;
+serifs_tl(2l); serifs_tl(4l);
+lowercase_points(3,4',jut);
+y5l=0; x5=.5[x3l,x1r];
+x6l=x3l; y6=.4x_height;
+oblu:=.5f_obl;
+p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right
+ ..z2l.b---z1l..z5l..{up}z6l;
+p2:=z6l---(reverse lowercase_lower_u_serif(3,.5hair))---obl(4r,3f,4l)
+ ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b;
+tim0=y3a-like_hair;
+tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0)));
+tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0)));
+filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle;
+oblu:=2f_obl; oblu.more:=1.25f_obl;
+bot z101=(x2l,y2l.c);
+p100:=z1l{down}..z5l..{up}z6l;
+p101:=z6r{down}..z5r..{up}z1r;
+z100=bsktouch(p100,up,p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y5l-5-u)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+infill ifobl(4'r,4'b,3r,3l,more,)---z3a..z3..z3f---cycle;
+oblu.m:=f_obl; oblu:=bbw;
+infill ifobl(2r,2l.b,1r,1l,more,)
+ ---subpath(0,rundy(p100,tim100).zpet) of p100
+ ..subpath(rundy(p101,tim101),infinity) of p101---cycle;
+penlabels(1,2,4,5,6,7); labels(100,101);
+endchar;
+
+iff known chars.latin_u_SS:
+bskchar "The sans-serif letter u";
+beginchar(chars.latin_u_SS,11u#, x_height#, 0); uni "0x1D5CE";
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos4(stem,0);
+pos5(n_str_hair,90); pos6(hair,90);
+lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4;
+bot y3=0; top y2= top y4=h; y4=y4';
+y1=.25x_height;
+serifs_tl(2l); serifs_tl(4l);
+lowercase_points(3,4',jut);
+y5l=0; x5=.5[x3l,x1r];
+x6l=x3l; y6=.3x_height;
+oblu:=.5f_obl;
+filldraw z6r{down}..z5r..z1r---z2r..z2l.b---z1l..z5l---z3l..z3f---z4r..{down}z4l.b---cycle;
+penlabels(1,2,4,5,6,7);
+endchar;
+
iff known chars.latin_uogonek:
bskchar "The letter u with ogonek";
beginchar(chars.latin_uogonek,11u#,x_height#,.85desc_depth#); uni "0x0173";
@@ -5977,6 +8986,64 @@ filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
penlabels(1,1',2,2',3,3',4,5,6,7);
endchar;
+iff known chars.latin_v_BB:
+bskchar "The blackboard-bold letter v";
+beginchar(chars.latin_v_BB,11u#,x_height#,0); uni "0x1D567";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.5w; bot y3l=-apex_o;
+left_stem=.8cap_stem;
+right_stem=hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(.65hair,90); pos5(.65hair,90);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[hair,stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+serifs_tl(1l); serifs_tr(1r);
+serifs_tr(2r); serifs_tl(2l);
+filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l--
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')
+ ..z1r.c{right}..z1r.a{left}..z1+serif_bend..{left}cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+infill ifobl(1l,1r,3l,3',more,)---ifobl(3',3l,1r,1l,,)---cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.latin_v_SS:
+bskchar "The sans-serif letter v";
+beginchar(chars.latin_v_SS,11u#,x_height#,0); uni "0x1D5CF";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+numeric alpha, right_stem, left_stem;
+pickup tiny.nib;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.5w; bot y3l=-apex_o;
+left_stem=stem;
+right_stem=hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(.65hair,90); pos5(.65hair,90);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[hair,stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+serifs_tl(1l); serifs_tr(1r);
+serifs_tr(2r); serifs_tl(2l);
+filldraw diag_serif(1l,3l)---z3l---diag_serif(2r,3l)...z2
+ ...diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')...z1...cycle;
+penlabels(1,1',2,2',3,3',4,5,6,7);
+math_fit(0,ic#-1u#);
+endchar;
+
charscription(14.5u,x_height,0)(
numeric alpha[], right_stem, left_stem;
oblu:=2oblu;
@@ -6060,6 +9127,79 @@ x100=x1''; x101=x2'';
umlaut(100,101);
endchar;
+iff known chars.latin_w_BB:
+bskchar "The blackboard-bold letter w";
+beginchar(chars.latin_w_BB,14.5u#,x_height#,0); uni "0x1D568";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric alpha[], right_stem, left_stem;
+oblu:=2oblu;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3=.5w if monospace: +.5(stem-hair) fi;
+top y3=h if monospace and (x2r-x1l<4stem): -1/3(x2r-x1l) else: +o fi;
+.5[x4,x5]=x3; x5-x4=.35w;
+bot y4=bot y5=-apex_o;
+left_stem=.8cap_stem;
+right_stem=hair;
+alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l);
+alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5);
+alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3);
+alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4);
+pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0);
+serifs_tl(1l); serifs_tr(1r);
+serifs_tl(2l); serifs_tr(2r);
+bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5);
+y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny);
+z0=whatever[z4,z4']=whatever[z5,z5'];
+z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right];
+z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---z4---obl(0,4,5)---z5
+ ---diag_serif(2r,5)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r)
+ ---diag_serif(1r,1'')..z1r.c{right}..z1r.a{left}..
+ z1+serif_bend..{left}cycle;
+oblu:=f_obl; oblu.more:=1.25oblu; oblu.m:=2oblu;
+infill ifobl(1l,1r,4,1'',more,)---ifobl(1'',4,1r,1l,,)---cycle;
+infill ifobl(0,3,5,2'',more,m)---ifobl(2'',5,3,0,,)---cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.latin_w_SS:
+bskchar "The sans-serif letter w";
+beginchar(chars.latin_w_SS,14.5u#,x_height#,0); uni "0x1D5D0";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric alpha[], right_stem, left_stem;
+oblu:=2oblu;
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3=.5w if monospace: +.5(stem-hair) fi;
+top y3=h if monospace and (x2r-x1l<4stem): -1/3(x2r-x1l) else: +o fi;
+.5[x4,x5]=x3; x5-x4=.35w;
+bot y4=bot y5=-apex_o;
+left_stem=stem;
+right_stem=hair;
+alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l);
+alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5);
+alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3);
+alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4);
+pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0);
+serifs_tl(1l); serifs_tr(1r);
+serifs_tl(2l); serifs_tr(2r);
+bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5);
+y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny);
+z0=whatever[z4,z4']=whatever[z5,z5'];
+z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right];
+z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left];
+filldraw diag_serif(1l,4)---z4---obl(0,4,5)---z5---diag_serif(2r,5)...z2
+ ...diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r)
+ ---diag_serif(1r,1'')...z1...cycle;
+penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5');
+math_fit(0,ic#-1u#);
+endchar;
+
iff known chars.latin_x:
bskchar "The letter x";
beginchar(chars.latin_x,11.5u#,x_height#,0); uni "0x0078";
@@ -6092,6 +9232,69 @@ filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)
penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5');
endchar;
+iff known chars.latin_x_BB:
+bskchar "The blackboard-bold letter x";
+beginchar(chars.latin_x_BB,11.5u#,x_height#,0); uni "0x1D569";
+italcorr x_height#*slant-.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+save stem; stem:=.8cap_stem;
+numeric alpha[];
+oblu:=1.5oblu;
+lft x1l=2.25u; top y1l=h; rt x2r=w-2u; bot y2r=0;
+x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0;
+alpha1=diag_ratio(2,stem,y1l-y2r,x1l-x2r);
+alpha2=diag_ratio(1,hair,y3r-y4l,x3r-x4l);
+pos1(alpha1*stem,0); pos2(alpha1*stem,0);
+pos3(alpha2*hair,0); pos4(alpha2*hair,0);
+serifs_tl(1l); serifs_tr(1r); serifs_bl(2l); serifs_br(2r);
+serifs_tl(3l); serifs_tr(3r); serifs_bl(4l); serifs_br(4r);
+z1'=whatever[z1l,z2l]=whatever[z3l,z4l];
+z2'=whatever[z1r,z2r]=whatever[z3r,z4r];
+z3'=whatever[z1r,z2r]=whatever[z3l,z4l];
+z4'=whatever[z1l,z2l]=whatever[z3r,z4r];
+filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)
+ ---diag_serif(4l,1')..{left}z4l.c..z4l.a{right}..
+ z4+ser_boule*up..{right}z4r.a..{left}z4r.c
+ ..diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l)..
+ {left}z2l.c..z2l.a{right}..z2+ser_boule*up..{right}z2r.a..{left}z2r.c..
+ diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2')..
+ {right}z3r.c..{left}z3r.a..z3..{left}z3l.a..{right}z3l.c..
+ diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3')..
+ {right}z1r.c..{left}z1r.a..z1+serif_bend..{left}cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+bot y100=y2r.c; z100=whatever[z2r.bb,z1r];
+infill ifobl(1r,1l,2r,2l,,more)---obl(2l,1r,2r)---z2r...obl(100,2r.c,1r)---cycle;
+penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5',100);
+endchar;
+
+iff known chars.latin_x_SS:
+bskchar "The sans-serif letter x";
+beginchar(chars.latin_x_SS,11.5u#,x_height#,0); uni "0x1D5D1";
+italcorr x_height#*slant-.25u#;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric alpha[];
+oblu:=1.5oblu;
+lft x1l=2.25u; top y1l=h; rt x2r=w-2u; bot y2r=0;
+x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0;
+alpha1=diag_ratio(2,stem,y1l-y2r,x1l-x2r);
+alpha2=diag_ratio(1,hair,y3r-y4l,x3r-x4l);
+pos1(alpha1*stem,0); pos2(alpha1*stem,0);
+pos3(alpha2*hair,0); pos4(alpha2*hair,0);
+serifs_tl(1l); serifs_tr(1r); serifs_bl(2l); serifs_br(2r);
+serifs_tl(3l); serifs_tr(3r); serifs_bl(4l); serifs_br(4r);
+z1'=whatever[z1l,z2l]=whatever[z3l,z4l];
+z2'=whatever[z1r,z2r]=whatever[z3r,z4r];
+z3'=whatever[z1r,z2r]=whatever[z3l,z4l];
+z4'=whatever[z1l,z2l]=whatever[z3r,z4r];
+filldraw diag_serif(1l,2l)---obl(1',1l,4l)---diag_serif(4l,1')...z4
+ ...diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l)...z2
+ ...diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2')...z3
+ ...diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3')...z1...cycle;
+penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5');
+endchar;
+
charscription(11.5u,x_height,desc_depth)(
numeric alpha, right_stem, left_stem, tim[]; oblu:=2oblu;
path p[];
@@ -6190,6 +9393,86 @@ x101=x3';
circumflex(100,101,102);
endchar;
+iff known chars.latin_y_BB:
+bskchar "The blackboard-bold letter y";
+beginchar(chars.latin_y_BB,11.5u#,x_height#,desc_depth#); uni "0x1D56A";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, tim[]; oblu:=2oblu;
+path p[];
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.52w; bot y3l=-u;
+left_stem=.8cap_stem;
+right_stem=hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(whatever,0); pos5(dot_size,260);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[hair,stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+serifs_tl(1l); serifs_tr(1r);
+serifs_tr(2r); serifs_tl(2l);
+y4=-d+dot_size+hair; z4l=whatever[z2l,z3']; z4r=whatever[z3l,z2r];
+y6=y3'l; z6=whatever[z3l,z1l];
+bot y5r=-d; x5=x1; rt z5'=(x5-1/3dot_size,y5); if rt x5'<u: x5':=lft u;fi
+z4'=z3l+(alpha*right_stem-currentbreadth)*unitvector(z1l-z3l);
+p0=z1l.a{left}..z1l.c{right}..diag_serif(1l,3l)--z4';
+p1=z4'--z4l;
+tim1=xpart(p0 intersectiontimes ((0,y6)--(w,y6)));
+filldraw subpath(0,rundy(p0,infinity).zpet) of p0..subpath(rundy(p1,0),1) of p1
+ ..{left}z5l..z5'..{right}z5r...z4r---z3l---
+ diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c
+ ..diag_serif(2l,3')---z3'r+oblu*unitvector(z2l-z3'r)..
+ z3'l+.75oblu*unitvector(z1r-z3'l)---diag_serif(1r,3')
+ ..z1r.c{right}..z1r.a{left}..z1+serif_bend..{left}cycle;
+oblu:=f_obl; oblu.more:=1.25oblu;
+infill ifobl(1l,1r,4',3',more,)---ifobl(3',4',1r,1l,,)---cycle;
+penlabels(1,1',2,2',3,3',4,5); labels(4',6);
+math_fit(0,ic#-2u#);
+endchar;
+
+iff known chars.latin_y_SS:
+bskchar "The sans-serif letter y";
+beginchar(chars.latin_y_SS,11.5u#,x_height#,desc_depth#); uni "0x1D5D2";
+italcorr x_height#*slant;
+adjust_fit(serif_fit#,serif_fit#);
+pickup tiny.nib;
+numeric alpha, right_stem, left_stem, tim[]; oblu:=2oblu;
+path p[];
+lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h;
+x3l=.52w; bot y3l=-u;
+left_stem=stem;
+right_stem=hair;
+alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l);
+pos1(alpha*left_stem,0); pos2(alpha*right_stem,0);
+pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0);
+pos4(whatever,0); pos5(stem,260);
+z1'l=z3l=z2'r;
+z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l];
+y3'l=y3'r=y3'+.25[hair,stem];
+z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l];
+serifs_tl(1l); serifs_tr(1r);
+serifs_tr(2r); serifs_tl(2l);
+y4=-d+dot_size+hair; z4l=whatever[z2l,z3']; z4r=whatever[z3l,z2r];
+y6=y3'l; z6=whatever[z3l,z1l];
+bot y5r=-d; x5=x1; rt z5'=(x5-1/3dot_size,y5); if rt x5'<u: x5':=lft u;fi
+z4'=z3l+(alpha*right_stem-currentbreadth)*unitvector(z1l-z3l);
+p0=diag_serif(1l,3l)--z4';
+p1=z4'--z4l;
+tim1=xpart(p0 intersectiontimes ((0,y6)--(w,y6)));
+filldraw subpath(0,rundy(p0,infinity).zpet) of p0..subpath(rundy(p1,0),1) of p1
+ ..{left}z5l..z5'..{right}z5r...z4r---z3l---
+ diag_serif(2r,3l)...z2
+ ...diag_serif(2l,3')---z3'r+oblu*unitvector(z2l-z3'r)..
+ z3'l+.75oblu*unitvector(z1r-z3'l)---diag_serif(1r,3')
+ ...z1...cycle;
+penlabels(1,1',2,2',3,3',4,5); labels(4',6);
+math_fit(0,ic#-1u#);
+endchar;
+
charscription(9u,x_height,0)(
oblu:=2oblu;
numeric alpha;
@@ -6251,13 +9534,61 @@ usechar;
acute(100,101);
endchar;
+iff known chars.latin_z_BB:
+bskchar "The blackboard-bold letter z";
+beginchar(chars.latin_z_BB,9u#,x_height#,0); uni "0x1D56B";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+numeric alpha;
+lft x1l=u; bot y1l=0; rt x2r=w-u; top y2r=h;
+x2r-x2l=x1r-x1l;
+alpha=diag_ratio(2,.8cap_stem,y2r-y1l,x2r-x1l);
+pos1(alpha*.8cap_stem,0); pos2(alpha*.8cap_stem,0);
+pos3(.5beak,80); pos4(.6beak,80);
+z3a=z3r+hair*right; z3b=z3r+(stem,-hair+currentbreadth);
+x3l=1.3u; top y3r=h; z3c=z3l+(hair-currentbreadth)*dir(angle(z3l-z3)+90);
+y2'=y2-hair+currentbreadth; z2'=whatever[z2l,z1l];
+y1'=y1+hair-currentbreadth; z1'=whatever[z2r,z1r];
+bot y4l=0; x4r=w-u; z4b=z4r+(hair-currentbreadth)*dir(angle(z4l-z4)-90);
+y4a=y4l+hair-currentbreadth; x4a=.5w;
+filldraw z2r---z3a..z3r---z3l..z3c{dir80}..z3b---obl(2',3b,1l)---z1l---z4l
+---z4r..{down}z4b...if not bold_face: z4a--- else: {left}fi obl(1',4a,2r)---cycle;
+oblu:=f_obl; oblu.more:=2oblu;
+infill ifobl(2l,2r,1l,1r,,more)---ifobl(1',1l,2r,2l,,)---cycle;
+penlabels(1,2,3,4); labels(1',2',3a,3b,3c,4a,4b,4c);
+endchar;
+
+iff known chars.latin_z_SS:
+bskchar "The sans-serif letter z";
+beginchar(chars.latin_z_SS,9u#,x_height#,0); uni "0x1D5D3";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+numeric alpha;
+lft x1l=u; bot y1l=0; rt x2r=w-u; top y2r=h;
+x2r-x2l=x1r-x1l;
+alpha=diag_ratio(2,stem,y2r-y1l,x2r-x1l);
+pos1(alpha*stem,0); pos2(alpha*stem,0);
+pos3(hair,90); pos4(hair,90);
+x3l=1.3u; top y3r=h;
+y2'=y2-hair+currentbreadth; z2'=whatever[z2l,z1l];
+y1'=y1+hair-currentbreadth; z1'=whatever[z2r,z1r];
+bot y4l=0; x4r=w-u;
+filldraw z2r---z3r+stem*right...z3...z3l+stem*right---obl(2',3l,1l)---z1l
+ ---z4l+stem*left...z4...z4r+stem*left---obl(1',4r,2r)---cycle;
+penlabels(1,2,3,4); labels(1',2');
+endchar;
+
bskboundary;
skal:=.5;
charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)(
numeric sair; sair=if medieval: vair else: hair fi;
pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270);
-lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h+o;
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4l=h+o;
filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
infill z1r{up}..z4r..z3r..z2r..{up}cycle;
penlabels(1,2,3,4);
@@ -6282,6 +9613,54 @@ multiply(1.7skal)(curve,hair,vair);
usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
endchar;
+iff known chars.numeral_zero_BB:
+bskchar "The blackboard-bold numeral 0";
+beginchar(chars.numeral_zero_BB,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x1D7D8";
+italcorr .5h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sair; sair=if medieval: vair else: hair fi;
+pos1(cap_stem,0); pos2(sair,90); pos3(cap_stem,180); pos4(sair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+path p[]; numeric tim[];
+p100:=z4r..z1r{down}..z2r..z3r..cycle;
+p101:=reverse z4l..z1l{down}..z2l..z3l..cycle;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(0,1) of p100,up,p101,down);
+z101=bsktouch(subpath(1,2) of p100,down,p101,up);
+z102=bsktouch(subpath(3,4) of p100,up,p101,down);
+z103=bsktouch(subpath(2,3) of p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p100 intersectiontimes (z102--(x102,y1)));
+tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5)));
+tim106=xpart(p100 intersectiontimes (z103--(x103,y1)));
+tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle;
+infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100
+ ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle;
+labels(100,101,102,103);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.numeral_zero_SS:
+bskchar "The sans-serif numeral 0";
+beginchar(chars.numeral_zero_SS,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x1D7E2";
+italcorr .5h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4l=h+o;
+filldraw z1l{down}..z2l..z3l..z4l..{down}cycle;
+infill z1r{up}..z4r..z3r..z2r..{up}cycle;
+penlabels(1,2,3,4);
+endchar;
+
charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)(
path p;
numeric sair; sair=if medieval: vair else: hair fi;
@@ -6353,6 +9732,45 @@ multiply(1.7skal)(curve,hair,vair,serif_o,dig_stem);
usechar shifted (-x3,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
endchar;
+iff known chars.numeral_one_BB:
+bskchar "The blackboard-bold numeral 1";
+beginchar(chars.numeral_one_BB,figw(8u),medfig,0); uni "0x1D7D9";
+adjust_fit(0,serif_fit#);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(hair,90);
+oblu:=f_obl;
+x1=.5w; bot y1=0; x2=x1; top y2=h;
+lft x3=u; x4=x1l;
+if medieval:
+ y3=y2-if monofig: 1.5 \\fi hair; y4=y3-.5o;
+ filldraw one_serif(1)---z2r--z2{dir200}..{left}z3r..z3l---obl(4,3l,1l)--cycle;
+else:
+ y3=.9h-o; y4=y3+o;
+ path p[]; p1=z3l{right}..z4; p0=z4---one_serif(1);
+ filldraw subpath(rundy(p0,0),infinity) of p0---z2r{dir200}..{left}z3r..
+ subpath(0,rundy(p1,1).zpet) of p1..cycle;
+fi
+bot z100=(x1l,y1f);
+infill ifobl(4,2r,1l,1r,,)---obl(1r,2r,1l)---z1l...obl(100,1f,2l)---cycle;
+penlabels(1,2,3); labels(4);
+endchar;
+
+iff known chars.numeral_one_SS:
+bskchar "The sans-serif numeral 1";
+beginchar(chars.numeral_one_SS,figw(8u),medfig,0); uni "0x1D7E3";
+adjust_fit(0,serif_fit#-1.5u#);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0);
+pos3(hair,90);
+oblu:=f_obl;
+x1=.5w; bot y1=0; x2=x1; top y2=h;
+lft x3=u; x4=x1l;
+y3=y2-hair; y4=y3-.5o; z1a=z1l+.75u*up; z1b=z1r+.75u*up;
+filldraw z1a..z1..z1b---z2r--z2{dir200}..{left}z3r..z3l---obl(4,3l,1l)---cycle;
+penlabels(1,2,3); labels(4);
+endchar;
+
charscription(figwu(if medieval: 9u else: 10u fi),medfigu,0)(
path p[]; oblu:=3f_obl;
pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos0(vair,-60);
@@ -6406,6 +9824,61 @@ filldraw bskrule(10,11,hair,hair);
penlabels(10,11);
endchar;
+iff known chars.numeral_two_BB:
+bskchar "The blackboard-bold numeral 2";
+beginchar(chars.numeral_two_BB,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x1D7DA";
+italcorr 2/3h#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3f_obl;
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(cap_stem,0); pos0(vair,-60);
+lft x1r=u; y1=2/3h+hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-if medieval:1.5\\ fi u; y3=2/3h; lft x4l=u; bot y4l=0;
+rt x8=w-u; y8=stem-tiny; y7=-hair; z7=z8+whatever*dir-135;
+x6=x7-hair; bot y6=0;
+p0:=z4l{dir if medieval: 40 else:20 fi}..{up}z3l;
+z4r=(((0,y8)--(w,y8)) intersectionpoint p0)+.5cap_stem*right;
+p1:=z3r{down}..{dir-140}z4r;
+p2=z4r--z8;
+filldraw p0..z2l{left}..z1l..{dir60}z0l..{dir-120}z0r..z1r..{right}z2r..
+ subpath(0,rundy(p1,(1,curve)).zpet) of p1..subpath(rundy(p2,(0,curve)),infinity) of p2&z8
+ ..{dir(angle(z7-z8)+15)}z7+.25vair*right..z7{up}..z6---cycle;
+p100:=p0..{left}z2l;
+p101:=z2r{right}..p1;
+z100=bsktouch(p100,up,subpath(0,1) of p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+5)));
+z101=bsktouch(subpath(0,1) of p100,2dir-45,p101,2dir135);
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim101),rundy(p101,(tim103,.8oblu)).zpet) of p101
+ ..subpath(rundy(p100,(tim102,.8oblu)),rundy(p100,tim100).zpet) of p100
+ ..cycle;
+penlabels(0,1,2,3,4); labels(6,7,8,100,101);
+endchar;
+
+iff known chars.numeral_two_SS:
+bskchar "The sans-serif numeral 2";
+beginchar(chars.numeral_two_SS,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x1D7E4";
+italcorr 2/3h#*slant-.75u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=3f_obl;
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos0(hair,-60);
+lft x1r=u; y1=2/3h+hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=.35[x2,x1];
+rt x3r=w-if medieval:1.5\\ fi u; y3=2/3h; lft x4l=u; bot y4l=0;
+rt x8=w-u; y8=stem-tiny; y7=-hair; z7=z8+whatever*dir-135;
+x6=x7-hair; bot y6=0;
+p0:=z4l{dir if medieval: 40 else:20 fi}..{up}z3l;
+z4r=(((0,y8)--(w,y8)) intersectionpoint p0)+vair*right;
+p1:=z3r{down}..{dir-140}z4r;
+p2=z4r--z8;
+filldraw p0..z2l{left}..z1l..{dir60}z0l..{dir-120}z0r..z1r..{right}z2r..
+ subpath(0,rundy(p1,(1,curve)).zpet) of p1..subpath(rundy(p2,(0,curve)),infinity) of p2&z8...(x7,y6)---cycle;
+penlabels(0,1,2,3,4); labels(6,7,8);
+endchar;
+
charscription(figwu(9.5u),medfigu,medfigdu)(
numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi;
path p[];
@@ -6469,6 +9942,87 @@ filldraw bskrule(10,11,hair,hair);
penlabels(10,11);
endchar;
+iff known chars.numeral_three_BB:
+bskchar "The blackboard-bold numeral 3";
+beginchar(chars.numeral_three_BB,figw(9.5u),medfig,medfigd); uni "0x1D7DB";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi;
+path p[];
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(cap_stem,0); pos4(.45[hair,stem],0); pos0(vair,-60);
+pos5(hair,90); pos6(cap_stem,0); pos7(like_hair,270);
+lft x1r=1.5u; y1=y3+hair; top y2r=h+o; x2=.5w-hair; y0l=y3-hair; x0=.35[x2,x1];
+rt x3r=w-1.75u; y3=if medieval: 2/3h else: .8h fi; lft x4l=1.5u;
+bot y4l=.5(h-d); z4'=(x4l,y4l-like_hair);
+x5=.5w; y5=y4+hair; rt x6r=w-u; y6=.5[y4,-d];
+x7=.55[x5,x4]; bot y7r=-d; rt x8r=u; y8=y7+1.25like_stem;
+p0=z4l{dir40}..{up}z3l..z2l{left}..z1l..{dir60}z0l;
+p1=z0l{dir60}..{dir-120}z0r..z1r..{right}z2r..z3r{down}..{dir-140}z4r..z4'..{dir40}z4l;
+p2=z4l..z5r..z6r..z7r..smitko(8,curve)..z7l..z6l..z5l..z4';
+p3=subpath(3,infinity) of p2;
+z9=bsktouch(p1,down,p2,up);
+tim1-3=xpart(subpath(3,infinity) of p1 intersectiontimes (z9--(x9,y3)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,y6)));
+(tim3,tim4-3)=p1 intersectiontimes p3;
+filldraw p0..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),rundy(p2,(tim4,f_obl)).zpet) of p2
+ ..subpath(tim3,infinity) of p1
+ ..cycle;
+p100:=subpath(0,2) of p0;
+p101:=subpath(3,5) of p1;
+p102:=subpath(1,3) of p2;
+p103:=subpath(5,infinity) of p2;
+z100=bsktouch(p100,up,subpath(0,1) of p101,down);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y3)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+5)));
+z101=bsktouch(subpath(0,1) of p100,dir-50,p101,dir120);
+tim102=xpart(p100 intersectiontimes (z101--(0,y101)));
+tim103=xpart(p101 intersectiontimes (z101--(w,y101)));
+z102=bsktouch(p102,down,p103,up);
+tim104=xpart(p102 intersectiontimes (z102--(x102,y5r+5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y6)));
+z103=bsktouch(p102,bbs*up,p103,down);
+tim106=xpart(p102 intersectiontimes (z103--(x103,y7r-u)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y6)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101
+ ..subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100
+ ..cycle;
+infill subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103
+ ..reverse subpath(rundy(p102,tim106).zpet,rundy(p102,tim104)) of p102
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(4',9,100,101,102,103);
+endchar;
+
+iff known chars.numeral_three_SS:
+bskchar "The sans-serif numeral 3";
+beginchar(chars.numeral_three_SS,figw(9.5u),medfig,medfigd); uni "0x1D7E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi;
+path p[];
+pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos4(.45[hair,stem],0); pos0(hair,-60);
+pos5(hair,90); pos6(curve,0); pos7(hair,270); pos8(curve,150);
+lft x1r=1.5u; y1=y3+hair; top y2r=h+o; x2=.5w-hair; y0l=y3-hair; x0=.35[x2,x1];
+rt x3r=w-1.75u; y3=if medieval: 2/3h else: .8h fi; lft x4l=1.5u;
+bot y4l=.5(h-d); z4'=(x4l,y4l-like_hair);
+x5=.5w; y5=y4+hair; rt x6r=w-u; y6=.5[y4,-d];
+x7=.55[x5,x4]; bot y7r=-d; rt x8r=u; y8=y7+1.25like_stem;
+p0=z4l{dir40}..{up}z3l..z2l{left}..z1l..{dir60}z0l;
+p1=z0l{dir60}..{dir-120}z0r..z1r..{right}z2r..z3r{down}..{dir-140}z4r..z4'..{dir40}z4l;
+p2=z4l..z5r..z6r..z7r..{up}z8r..{down}z8l..z7l..z6l..z5l..z4';
+p3=subpath(3,infinity) of p2;
+z9=bsktouch(p1,down,p2,up);
+tim1-3=xpart(subpath(3,infinity) of p1 intersectiontimes (z9--(x9,y3)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,y6)));
+(tim3,tim4-3)=p1 intersectiontimes p3;
+filldraw p0..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),rundy(p2,(tim4,f_obl)).zpet) of p2
+ ..subpath(tim3,infinity) of p1
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(4',9);
+endchar;
+
charscription(figwu(12u),medfigu,medfigdu)(
oblu:=2f_obl; oblu.light:=.5oblu;
pos1(dig_stem,0); pos2(dig_stem,0); pos4(hair,90); pos5(stem,30);
@@ -6547,6 +10101,56 @@ filldraw bskrule(10,11,hair,hair);
penlabels(10,11);
endchar;
+iff known chars.numeral_four_BB:
+bskchar "The blackboard-bold numeral 4";
+beginchar(chars.numeral_four_BB,figw(12u),medfig,medfigd); uni "0x1D7DC";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2f_obl; oblu.light:=.5oblu;
+pos1(cap_stem,0); pos2(cap_stem,0); pos4(hair,90); pos5(stem,30);
+rt x1r= rt x2r=w-3.5u; bot y1=-d; top y2=h+apex_o;
+lft x3l=u; y3l=if medieval: -stem else: .5x_height fi; z4l=(x1r+hair,y3l); rt x5r=w-u; y5l=y3l;
+z2'=whatever[z2r,z3l]=whatever[z1l,z2l];
+z3l'=z3l+(hair-tiny,0) rotated(angle(z2r-z3l)-90); x2''=x2'; z2''=z3l'+whatever*(z2r-z3l);
+z4'=whatever[z3l',z2'']=whatever[z4r,(x3l,y4r)];
+z4l'=(x1r,y4l); z4r'=(x1r,y4r); z4l''=(x1l,y4l); z4r''=(x1l,y4r); z1'=(x1l,y4r);
+cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1r.b---obl(4l',1r,5l)if bold_face:.light fi
+ ---z5l..z5r if x4-x1r>oblu.light:..z4r fi
+ ..obl(4r',4r,2r).light---z2r--
+ z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi
+ ---z1l.b..{dir181}z1l.a{right}..z1+ser_boule*up..
+ {right}z1r.a{dir179}..cycle;
+infill obl(4',4r,2'')---obl(2'',4',1')---obl(1',2'',4')---cycle;
+bot z100=(x1l,y1l.c);
+oblu:=f_obl; oblu.more:=2oblu;
+infill ifobl(2',2r,100,1r,,more)%obl(2',100,2r)---obl(2r,2',1r).more
+ ---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle;
+penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r');
+endchar;
+
+iff known chars.numeral_four_SS:
+bskchar "The sans-serif numeral 4";
+beginchar(chars.numeral_four_SS,figw(11.5u),medfig,medfigd); uni "0x1D7E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2f_obl; oblu.light:=.5oblu;
+pos1(dig_stem,0); pos2(dig_stem,0); pos4(hair,90); pos5(hair,90);
+rt x1r= rt x2r=w-3u; bot y1=-d; top y2=h+apex_o;
+lft x3l=u; y3l=if medieval: -stem else: .5x_height fi; z4l=(x1r+hair,y3l); rt x5r=w-u; y5l=y3l;
+z2'=whatever[z2r,z3l]=whatever[z1l,z2l];
+z3l'=z3l+(hair-tiny,0) rotated(angle(z2r-z3l)-90); x2''=x2'; z2''=z3l'+whatever*(z2r-z3l);
+z4'=whatever[z3l',z2'']=whatever[z4r,(x3l,y4r)];
+z4l'=(x1r,y4l); z4r'=(x1r,y4r); z4l''=(x1l,y4l); z4r''=(x1l,y4r); z1'=(x1l,y4r);
+cap_serifs_bl(1l); cap_serifs_br(1r);
+filldraw z1r.b---obl(4l',1r,5l)if bold_face:.light fi
+ ---z5l..z5r---obl(4r',4r,2r).light---z2r--
+ z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi
+ ---z1l.b...z1...cycle;
+infill obl(4',4r,2'')---obl(2'',4',1')---obl(1',2'',4')---cycle;
+penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r');
+endchar;
+
charscription(figwu(if medieval: 10.5u else: 9.5u fi),medfigu,medfigdu)(
numeric theta; theta=if medieval: 0 else: 10 fi;
path p[];
@@ -6590,6 +10194,85 @@ multiply(1.7skal)(curve,hair,stem);
usechar shifted (-x7r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
endchar;
+iff known chars.numeral_five_BB:
+bskchar "The blackboard-bold numeral 5";
+beginchar(chars.numeral_five_BB,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x1D7DD";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta; theta=if medieval: 0 else: 10 fi;
+path p[]; numeric tim[];
+oblu:=2f_obl;
+pos1(hair,0); pos2(hair,0); pos3(stem,75);
+pos4(hair,-90); pos5(cap_stem,180); pos6(hair,90);
+x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1;
+y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; z3r=z2r; z2'=(x2r,.5[y4,y2]);
+x4=.5w; rt x5l=w-u;
+y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem);
+y5=.48[y4,y6];
+x6=.5w-o; bot y6l=-d;
+lft x7r=u; y7=y6+if known superscript: 3 else: 4 fi /3like_curve; x8=w-u; y8=y1+.5apex_o;
+z1'=z1r+if bold_face:.8\\fi curve*down;
+p0=z1l---z2l..{down}z3l..(x3r,y3l)..{up}z3r..{up}z2r..{right}z4r..
+ {down}z5r..{left}z6r..(reverse smitko(7,curve))..z6l{right}..
+ {up}z5l;
+p1=z5l{up}..z4l..z2';
+p2=z2'--z1';
+p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l;
+filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,infinity).zpet) of p2..
+subpath(rundy(p3,0),infinity) of p3&cycle;
+p100:=z2'..z4l..{down}z5l..{left}z6l;
+p101:=subpath(6,8) of p0;
+p102:=subpath(0,1) of p3;
+p103:=subpath(1,2) of p3;
+z100=bsktouch(p100,down,p101,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4l+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y5)));
+z101=bsktouch(p100,up,p101,down);
+tim102=xpart(p100 intersectiontimes (z101--(x101,y6l-u)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5)));
+z102=bsktouch(p102,up,p103,down);
+tim104=xpart(p102 intersectiontimes (z102--(x102,y4)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y8)));
+oblu:=bbw;
+infill subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101
+ ..reverse subpath(rundy(p100,tim102).zpet,rundy(p100,tim100)) of p100
+ ..cycle;
+infill subpath(rundy(p102,(0,f_obl)),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p103,tim105),rundy(p103,(1,2f_obl)).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8,100,101,102);
+endchar;
+
+iff known chars.numeral_five_SS:
+bskchar "The sans-serif numeral 5";
+beginchar(chars.numeral_five_SS,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x1D7E6";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta; theta=if medieval: 0 else: 10 fi;
+path p[];
+oblu:=2f_obl;
+pos1(hair,0); pos2(hair,0); pos3(hair,0);
+pos4(hair,-90); pos5(curve,180); pos6(hair,90); pos7(curve,150);
+x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1;
+y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; x3r=x2r; y3r=y2r-hair; z2'=(x2r,.5[y4,y2]);
+x4=.5w; rt x5l=w-u;
+y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem);
+y5=.48[y4,y6];
+x6=.5w-o; bot y6l=-d;
+lft x7r=u; y7=y6+if known superscript: 3 else: 4 fi /3like_curve; x8=w-u; y8=y1+.5apex_o;
+z1'=z1r+if bold_face:.8\\fi curve*down;
+p0=z1l---z2l..{down}z3l..{up}z3r..{up}z2r..{right}z4r..
+ {down}z5r..{left}z6r..{up}z7l..{down}z7r..z6l{right}..
+ {up}z5l;
+p1=z5l{up}..z4l..z2';
+p2=z2'--z1';
+p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l;
+filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,infinity).zpet) of p2..
+subpath(rundy(p3,0),infinity) of p3&cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8);
+endchar;
+
charscription(figwu(10u),fig_height,0)(
path p[]; numeric tim[]; oblu:=2oblu;
pos1(vair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
@@ -6628,6 +10311,77 @@ multiply(1.7skal)(curve,hair,vair,stem);
usechar shifted (-x5l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
endchar;
+iff known chars.numeral_six_BB:
+bskchar "The blackboard-bold numeral 6";
+beginchar(chars.numeral_six_BB,figw(10u),fig_height#,0); uni "0x1D7DE";
+italcorr .5[fig_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270);
+pos5(cap_stem,0); pos6(hair,-90); pos7(curve,160);
+rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3;
+lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem;
+rt x7l=w-u; y7=y6r-like_stem;
+p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0);
+p1=z2l{right}..z3l..z4l..{down}z1l;
+p2=z2r{left}..z5r..{right}z6r;
+z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right);
+tim1=xpart(p1 intersectiontimes (z0--(x4,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+filldraw z7r{down}..z7l{up}..{left}z6l..z5l..{right}z2l..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1r{up}..z4r..z3r..z2r..cycle;
+p100:=z4r..z3r..z2r..{up}z1r..cycle;
+p101:=p1;
+p102:=z6l{left}..z5l..{right}z2l;
+p103:=p2;
+oblu:=1.25bbw;
+z100=bsktouch(p100,up,p101,down);
+z101=bsktouch(p100,down,p101,up);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y1)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y1)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y1)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y6l+5)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim106),rundy(p102,tim104).zpet) of p102
+ ..subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(100,101,102,103);
+endchar;
+
+iff known chars.numeral_six_SS:
+bskchar "The sans-serif numeral 6";
+beginchar(chars.numeral_six_SS,figw(10u),fig_height#,0); uni "0x1D7E7";
+italcorr .5[fig_height#,x_height#]*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270);
+pos5(curve,0); pos6(hair,-90); pos7(curve,160);
+rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3;
+lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem;
+rt x7l=w-u; y7=y6r-like_stem;
+p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0);
+p1=z2l{right}..z3l..z4l..{down}z1l;
+p2=z2r{left}..z5r..{right}z6r;
+z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right);
+tim1=xpart(p1 intersectiontimes (z0--(x4,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(0,y0)));
+filldraw z7r{down}..z7l{up}..{left}z6l..z5l..{right}z2l..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1r{up}..z4r..z3r..z2r..cycle;
+penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
charscription(figwu(11u),medfigu,medfigdu)(
path p; numeric tim[];
pos1(hair,0); pos2(curve,0); pos3(stem,90); pos4(.4(h+d),80);
@@ -6657,6 +10411,46 @@ multiply(1.7skal)(curve,hair,stem);
usechar shifted (-x4l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
endchar;
+iff known chars.numeral_seven_BB:
+bskchar "The blackboard-bold numeral 7";
+beginchar(chars.numeral_seven_BB,figw(11u),medfig,medfigd); uni "0x1D7DF";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(.5cap_stem,0); pos2(cap_stem,0); pos3(stem,90); pos4(.4(h+d),80);
+rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem;
+y3r=y1r; y4r=y1r+if not medieval: .5\\fi stem; lft x4l=u; x3=x4r+hair; x3l:=x3l+o;
+p0:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p0 intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p0 + u*left;
+filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p0,(tim1,curve)).zpet) of p0..z1'
+ ---z3l..{z4l-z4r}z4l..z4l+left--z4r{down}..z3r---cycle;
+p100:=z1r{z2r-z1}...{dir-100}z2r;
+p101:=p0;
+z100=bsktouch(p100,2left,p101,2right);
+tim100=xpart(p100 intersectiontimes (z100--(w,y100)));
+tim101=xpart(p101 intersectiontimes (z100--(0,y100)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),infinity) of p100
+ ..subpath(0,rundy(p101,tim101).zpet) of p101..cycle;
+penlabels(1,2,3,4); labels(1',100);
+endchar;
+
+iff known chars.numeral_seven_SS:
+bskchar "The sans-serif numeral 7";
+beginchar(chars.numeral_seven_SS,figw(11u),medfig,medfigd); uni "0x1D7E8";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+pos1(hair,0); pos2(curve,0); pos3(stem,90); pos4(stem,90);
+rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem;
+y3r=y4r=y1r; lft x4l=u; x3=x4r+hair; x3l:=x3l+o;
+p:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p + u*left;
+filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p,(tim1,curve)).zpet) of p..z1'
+ ---z4l+.5stem*right...z4...z4r+.5stem*right---cycle;
+penlabels(1,2,3,4); labels(1');
+endchar;
+
charscription(figwu(9u),fig_height,0)(
path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl;
testem=.5[curve, hair]; tlstem=.75[curve,stem];
@@ -6703,6 +10497,103 @@ multiply(1.7skal)(curve,hair,vair,stem);
usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
endchar;
+iff known chars.numeral_eight_BB:
+bskchar "The blackboard-bold numeral 8";
+beginchar(chars.numeral_eight_BB,figw(9u),fig_height#,0); uni "0x1D7E0";
+italcorr .5[fig_height#,x_height#]*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl;
+testem=.5[curve, cap_stem]; tlstem=cap_stem;
+pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0);
+pos5(vair,90); pos6(vair,90);
+lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h;
+x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3];
+p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{left}..z3r..z0r..z2r..z5r{left};
+p2=z4l{down}..z0{dir-160}..{down}z1l;
+p3=z5l{right}..z2l..z0l..z3l..{right}z6l;
+p4=z1r{up}..z0{dir20}..{up}z4r;
+p5=z6l{left}..z3l..z0l..z2l..z5l{left};
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p3 intersectiontimes p4;
+(tim5,tim6)=p5 intersectiontimes p2;
+(tim7,tim8)=p1 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..
+ subpath(0,rundy(p3,tim3).zpet) of p3..
+ subpath(rundy(p4,tim4),infinity) of p4..cycle;
+infill subpath(0,rundy(p5,tim5).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle;
+infill subpath(rundy(p1,tim7),infinity) of p1..
+ subpath(0,rundy(p4,tim8).zpet) of p4..cycle;
+p100:=p1;
+p101:=p3;
+p102:=z6l{right}..p2;
+p103:=p4..{left}z6r;
+p104:=p2..{right}z5l;
+p105:=z5r{left}..p4;
+z100=bsktouch(subpath(0,1) of p100,down,p101,up);
+z101=bsktouch(p100,down,subpath(0,1) of p101,up);
+z102=bsktouch(subpath(0,1) of p102,dir45,p103,dir-135);
+z103=bsktouch(subpath(1,infinity) of p102,dir-45,p103,dir135);
+z104=bsktouch(p104,dir-45,subpath(1,2) of p105,dir135);
+z105=bsktouch(p104,dir45,subpath(0,1) of p105,dir-135);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y6r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y3)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y5l-5)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y4)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y6r+5)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y4)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y1)));
+tim108=xpart(p104 intersectiontimes (z104--(x104,y3)));
+tim109=xpart(p105 intersectiontimes (z104--(x104,y1)));
+tim110=xpart(p104 intersectiontimes (z105--(x105,y5l-5)));
+tim111=xpart(p105 intersectiontimes (z105--(x105,y1)));
+oblu:=bbw;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+infill subpath(rundy(p104,tim108),rundy(p104,tim110).zpet) of p104
+ ..subpath(rundy(p105,tim111),rundy(p105,tim109).zpet) of p105..cycle;
+penlabels(0,1,2,3,4,5,6); labels(100,101,102,103,104,105);
+endchar;
+
+iff known chars.numeral_eight_SS:
+bskchar "The sans-serif numeral 8";
+beginchar(chars.numeral_eight_SS,figw(9u),fig_height#,0); uni "0x1D7E9";
+italcorr .5[fig_height#,x_height#]*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl;
+testem=.5[curve, stem]; tlstem=.75[curve,stem];
+pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0);
+pos5(hair,90); pos6(hair,90);
+lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h;
+x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3];
+p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{left}..z3r..z0r..z2r..z5r{left};
+p2=z4l{down}..z0{dir-160}..{down}z1l;
+p3=z5l{right}..z2l..z0l..z3l..{right}z6l;
+p4=z1r{up}..z0{dir20}..{up}z4r;
+p5=z6l{left}..z3l..z0l..z2l..z5l{left};
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p3 intersectiontimes p4;
+(tim5,tim6)=p5 intersectiontimes p2;
+(tim7,tim8)=p1 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..
+ subpath(0,rundy(p3,tim3).zpet) of p3..
+ subpath(rundy(p4,tim4),infinity) of p4..cycle;
+infill subpath(0,rundy(p5,tim5).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle;
+infill subpath(rundy(p1,tim7),infinity) of p1..
+ subpath(0,rundy(p4,tim8).zpet) of p4..cycle;
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
charscription(figwu(10u),medfigu,medfigdu)(
path p[]; numeric tim[]; oblu:=2oblu;
pos1(vair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90);
@@ -6742,19 +10633,92 @@ multiply(1.7skal)(curve,hair,vair);
usechar shifted (-x3r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height);
endchar;
+iff known chars.numeral_nine_BB:
+bskchar "The blackboard-bold numeral 9";
+beginchar(chars.numeral_nine_BB,figw(10u),medfig,medfigd); uni "0x1D7E1";
+italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(vair,0); pos2(hair,-90); pos3(cap_stem,180); pos4(hair,90);
+pos5(cap_stem,0); pos6(hair,-90); pos7(curve,160);
+lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi;
+rt x5r=w-u; y5r=y1r-stem;
+bot y6r=-d-o; x6=.5w-.75stem;
+lft x7r=u; y7=y6r+like_stem;
+p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0);
+p1=z2r{right}..z1r{up}..z4r..z3r;
+p2=z4l{right}..z5l..{left}z6l;
+z0=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(w,y0)));
+filldraw z7l{up}..{down}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1l{up}..z4l..z3l..z2l..cycle;
+p100:=z6r{right}..z5r..z4r..z3r..{right}z2r;
+p101:=z1l{down}..z2l..z3l..z4l..cycle;
+p102:=p100;
+p103:=p2;
+oblu:=1.25bbw;
+z100=bsktouch(subpath(2,infinity) of p100,down,p101,up);
+z101=bsktouch(p100,up,p101,down);
+z102=bsktouch(p102,up,p103,down);
+z103=bsktouch(p102,down,p103,up);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y4r+5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y2r-5)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+tim104=xpart(p102 intersectiontimes (z102--(x102,y6r-5)));
+tim105=xpart(p103 intersectiontimes (z102--(x102,y1)));
+tim106=xpart(p102 intersectiontimes (z103--(x103,y4r+5)));
+tim107=xpart(p103 intersectiontimes (z103--(x103,y1)));
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102
+ ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle;
+penlabels(1,2,3,4,5,6,7); labels(100,101,102,103);
+endchar;
+
+iff known chars.numeral_nine_SS:
+bskchar "The sans-serif numeral 9";
+beginchar(chars.numeral_nine_SS,figw(10u),medfig,medfigd); uni "0x1D7EA";
+italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(hair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90);
+pos5(curve,0); pos6(hair,-90); pos7(curve,160);
+lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi;
+rt x5r=w-u; y5r=y1r-stem;
+bot y6r=-d-o; x6=.5w-.75stem;
+lft x7r=u; y7=y6r+like_stem;
+p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0);
+p1=z2r{right}..z1r{up}..z4r..z3r;
+p2=z4l{right}..z5l..{left}z6l;
+z0=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z0--(.5w,y0)));
+tim2=xpart(p2 intersectiontimes (z0--(w,y0)));
+filldraw z7l{up}..{down}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r..
+ subpath(0,rundy(p1,tim1).zpet) of p1..
+ subpath(rundy(p2,tim2),infinity) of p2..cycle;
+infill z1l{up}..z4l..z3l..z2l..cycle;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
iff known chars.sign_query:
bskchar "Question mark";
-beginchar(chars.sign_query, 9.5u#+punct_fit#, asc_height#, 0); uni "0x003F";
+beginchar(chars.sign_query, 9.5u#, asc_height#, 0); uni "0x003F";
italcorr .5[asc_height#,x_height#]*slant-.25u#;
-adjust_fit(0,0);
+adjust_fit(punct_fit#,0);
pickup tiny.nib;
path p[];
-bot z0=(2u+.5dot_size+punct_fit,.5dot_size); dot(0);
+bot z0=(2u+.5dot_size,.5dot_size); dot(0);
pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0);
z2'=z2+.2curve*down+o*right;
z2''=z2+.5(curve-currentbreadth)*dir135;
-x1=.45(w-punct_fit)+punct_fit; top y1r=h+o;
-y2''=1/4[h,x_height]; lft x2r=u+punct_fit;
+x1=.45w; top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
rt x3r=w-u; y3=.5[y1r,y4l];
lft x4l=x0+.25stem-.25dot_size; y4=.75x_height;
z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]];
@@ -6765,6 +10729,126 @@ filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{r
penlabels(1,2,3,4,5); labels(2',2'',4');
endchar;
+iff known chars.sign_interrobang:
+bskchar "Interrobang mark";
+beginchar(chars.sign_interrobang, 9.5u#, asc_height#, 0); uni "0x203D";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(punct_fit#,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+bot z0=(2u+.5dot_size,.5dot_size); dot(0);
+pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0);
+penpos6(dot_size,0); pos7(hair,0); x6=x7=x0;
+z2'=z2+.2curve*down+o*right;
+z2''=z2+.5(curve-currentbreadth)*dir135;
+x1=.45w; top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
+rt x3r=w-u; y3=.5[y1r,y4l];
+lft x4l=x0+.25stem-.25dot_size; y4=.75x_height;
+z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]];
+y6=h-.5stem; bot y7=dot_size+stem; y7r:=y7r+.5hair;
+p0=z3r{down}..z4;
+p1=z4r--z5r;
+p2=z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r;
+p3=z2r{up}..z2''..{right}z1r..subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1;
+p4=z7l---z6l..z6r{z7r-z6r}..z7r{z7r-.5[z6,z6r]}..{z6l-z7l}z7l;
+(tim0-3,tim1)=subpath(3,infinity) of p2 intersectiontimes subpath(0,2) of p4;
+(tim2,tim3)=subpath(0,2) of p3 intersectiontimes subpath(0,1.5) of p4;
+(tim4,tim5-1)=subpath(0,3) of p3 intersectiontimes subpath(1,infinity) of p4;
+(tim6-3,tim7-2)=subpath(3,6) of p3 intersectiontimes subpath(2,infinity) of p4;
+(tim8,tim9-2)=subpath(0,3) of p2 intersectiontimes subpath(2,infinity) of p4;
+(tim10-3,tim11-1)=subpath(3,5) of p2 intersectiontimes subpath(1,infinity) of p4;
+filldraw subpath(0,rundy(p4,(tim1,2oblu)).zpet) of p4
+ ..subpath(rundy(p2,(tim0,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p4,tim3),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..subpath(rundy(p4,tim7),infinity) of p4..cycle;
+infill subpath(rundy(p2,tim8),rundy(p2,tim10).zpet) of p2
+ ..subpath(rundy(p4,tim11),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(1,2,3,4,5,6,7); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_query_double:
+bskchar "Double question mark";
+beginchar(chars.sign_query_double, 16u#, asc_height#, 0); uni "0x2047";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+bot z0=(2u+.5dot_size,.5dot_size); dot(0);
+pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0);
+z2'=z2+.2curve*down+o*right;
+z2''=z2+.5(curve-currentbreadth)*dir135;
+x1=.45(w-6.5u); top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
+rt x3r=w-8.5u; y3=.5[y1r,y4l];
+lft x4l=x0+.25stem-.25dot_size; y4=.75x_height;
+z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]];
+p0=z3r{down}..z4;
+p1=z4r--z5r;
+z6=z0 shifted (w-u-x3r,0); dot(6);
+filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r..
+ subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle;
+filldraw (z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r..
+ subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle) shifted (w-u-x3r,0);
+penlabels(1,2,3,4,5); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_query_exclam:
+bskchar "Question exclamation mark";
+beginchar(chars.sign_query_exclam, 13.5u#, asc_height#, 0); uni "0x2048";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+bot z0=(2u+.5dot_size,.5dot_size); dot(0);
+pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0);
+z2'=z2+.2curve*down+o*right;
+z2''=z2+.5(curve-currentbreadth)*dir135;
+x1=.45(w-4u); top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=u;
+rt x3r=w-5u; y3=.5[y1r,y4l];
+lft x4l=x0+.25stem-.25dot_size; y4=.75x_height;
+z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]];
+p0=z3r{down}..z4;
+p1=z4r--z5r;
+filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r..
+ subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle;
+bot y6=.5dot_size; x6=w-3u; dot(6);
+penpos7(dot_size,0); pos8(hair,0); x7=x8=x6;
+y7=h-.5stem; bot y8=dot_size+stem; y8r:=y8r+.5hair;
+filldraw z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle;
+penlabels(1,2,3,4,5,7,8,); labels(2',2'',4');
+endchar;
+
+iff known chars.sign_exclam_query:
+bskchar "Exclamation query mark";
+beginchar(chars.sign_exclam_query, 13.5u#, asc_height#, 0); uni "0x2049";
+italcorr .5[asc_height#,x_height#]*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+bot z0=(6u+.5dot_size,.5dot_size); dot(0);
+pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0);
+z2'=z2+.2curve*down+o*right;
+z2''=z2+.5(curve-currentbreadth)*dir135;
+x1=4u+.45(w-4u); top y1r=h+o;
+y2''=1/4[h,x_height]; lft x2r=5u;
+rt x3r=w-u; y3=.5[y1r,y4l];
+lft x4l=x0+.25stem-.25dot_size; y4=.75x_height;
+z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]];
+p0=z3r{down}..z4;
+p1=z4r--z5r;
+filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r..
+ subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle;
+bot y6=.5dot_size; x6=3u; dot(6);
+penpos7(dot_size,0); pos8(hair,0); x7=x8=x6;
+y7=h-.5stem; bot y8=dot_size+stem; y8r:=y8r+.5hair;
+filldraw z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle;
+penlabels(1,2,3,4,5,7,8,); labels(2',2'',4');
+endchar;
+
iff known chars.sign_turned_query:
bskchar "Turned question mark";
beginchar(chars.sign_turned_query, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "non";
@@ -6809,6 +10893,45 @@ filldraw z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r..z2'
penlabels(1,2,3,4,5); labels(2',2'',4');
endchar;
+iff known chars.sign_gnaborretni:
+bskchar "Reversed interrobang mark";
+beginchar(chars.sign_gnaborretni, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+top z0=(w-2u-.5dot_size,h-.5dot_size); dot(0);
+pos1(hair,-90); pos2(curve,0); pos3(curve,180); pos4(like_hair,45); pos5(hair,180);
+penpos6(dot_size,180); pos7(hair,180); x6=x7=x0;
+z2'=z2+.2curve*up+o*left;
+z2''=z2+.5(curve-currentbreadth)*dir-45;
+x1=.55w; bot y1r=-d-o;
+y2''=1/4[-d,-d+(asc_height-x_height)]; rt x2r=w-u;
+lft x3r=u; y3=.5[y1r,y4l];
+rt x4l=x0-.25stem+.25dot_size; y4=-d+(asc_height-.75x_height);
+z4'=(x4l+.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]];
+y6=-d+.5stem; top y7=h-dot_size-stem; y7r:=y7r-.5hair;
+p0=z3r{up}..z4;
+p1=z4r--z5r;
+p2=z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r;
+p3=z2r{down}..z2''..{left}z1r..subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1;
+p4=z7l---z6l..z6r{z7r-z6r}..z7r{z7r-.5[z6,z6r]}..{z6l-z7l}z7l;
+(tim0-3,tim1)=subpath(3,infinity) of p2 intersectiontimes subpath(0,2) of p4;
+(tim2,tim3)=subpath(0,2) of p3 intersectiontimes subpath(0,1.5) of p4;
+(tim4,tim5-1)=subpath(0,3) of p3 intersectiontimes subpath(1,infinity) of p4;
+(tim6-3,tim7-2)=subpath(3,6) of p3 intersectiontimes subpath(2,infinity) of p4;
+(tim8,tim9-2)=subpath(0,3) of p2 intersectiontimes subpath(2,infinity) of p4;
+(tim10-3,tim11-1)=subpath(3,5) of p2 intersectiontimes subpath(1,infinity) of p4;
+filldraw subpath(0,rundy(p4,(tim1,2oblu)).zpet) of p4
+ ..subpath(rundy(p2,(tim0,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim2).zpet) of p3
+ ..subpath(rundy(p4,tim3),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..subpath(rundy(p4,tim7),infinity) of p4..cycle;
+infill subpath(rundy(p2,tim8),rundy(p2,tim10).zpet) of p2
+ ..subpath(rundy(p4,tim11),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(1,2,3,4,5,6,7); labels(2',2'',4');
+endchar;
+
iff known chars.sign_ampersand:
bskchar "Ampersand";
beginchar(chars.sign_ampersand, 14u#, asc_height#, 0); uni "0x0026";
@@ -6892,9 +11015,8 @@ p2=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r;
filldraw subpath(0,rundy(p0,tim1).zpet) of p0..
subpath(rundy(p1,tim2),rundy(p1,tim3).zpet) of p1..
subpath(rundy(p0,tim4),length p0) of p0..cycle;
-if bold_face: oblu:=.75f_obl; fi
+if bold_face: oblu:=.5f_obl; fi
infill subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2..
subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0..cycle;
penlabels(0,0',1,2,3,4,5,6,8,9,10,11,12,13,14,15); labels(4',4'',7);
endchar;
-
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
index 30aed95b08a..48bae140b01 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-i.mf
@@ -58,8 +58,8 @@ ligtable "X": "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" mkr, "O" vkr, chars.
ligtable "Y": "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "g" ukr, "o" ukr, chars.latin_oacute ukr, "p" vkr, "r" vkr, chars.latin_rcaron mkr, "s" ukr, chars.latin_scaron vkr, "u" vkr, "v" mkr, "w" mkr, "y" mkr, chars.latin_yacute mkr, chars.latin_Yacute: "A" kern -3.5u#, chars.latin_Aacute kern -3.5u#, "C" vkr, chars.latin_Ccaron vkr, "G" vkr, "J" vkr, "O" vkr, chars.latin_Oacute vkr, "Q" vkr, "S" vkr, chars.latin_Scaron vkr, "," kern -3.5u#, "." kern -3.5u#, "/" xkr, ":" mkr, ";" mkr;
ligtable "Z": chars.latin_Zcaron: "A" mkr, chars.latin_Aacute mkr, "J" mkr, "V" mkr, "W" mkr, "Y" mkr, chars.latin_Yacute mkr, "/" xkr;
-ligtable "!": "`" =: chars.sign_spanish_shriek;
-ligtable "?": "`" =: chars.sign_spanish_query;
+ligtable "!": "`" =: chars.sign_spanish_shriek, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+ligtable "?": "`" =: chars.sign_spanish_query, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash;
ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash if medieval:, "4" kern -1u# fi;
ligtable ".": "'" ukr, "`" ukr;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
index d3b95788e78..a557c7dd849 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab-sc.mf
@@ -71,8 +71,8 @@ ligtable ")": "J" kern 1u#;
ligtable "[": "a" vkr, "á" vkr, "v" vkr, "w" vkr, "y" vkr, "ý" vkr, "A" vkr;
ligtable "/": "a" wkr, "A" wkr, chars.latin_Aacute wkr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr;
ligtable chars.polish_cross: "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#);
-ligtable "!": "`" =: chars.sign_spanish_shriek;
-ligtable "?": "`" =: chars.sign_spanish_query;
+ligtable "!": "`" =: chars.sign_spanish_shriek, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+ligtable "?": "`" =: chars.sign_spanish_query, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
if (not monofig) and medieval:
ligtable "0": "/" vkr, "." mkr, "," mkr, chars.sign_czech_closing_quotes mkr;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
index 048a9731f39..ed29032a97f 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskligtab.mf
@@ -84,8 +84,8 @@ ligtable ")": "J" kern 1u#;
ligtable "[": "A" vkr, "c" mkr, chars.latin_ccaron mkr, "d" mkr, chars.latin_dcaron mkr, "e" mkr, chars.latin_ecaron mkr, chars.latin_eacute mkr, "o" mkr, chars.latin_oacute mkr, "q" mkr;
ligtable "/": "A" wkr, chars.latin_Aacute wkr, "a" ukr, chars.latin_aacute ukr, "c" ukr, chars.latin_ccaron vkr, "d" ukr, chars.latin_dcaron ukr, "e" ukr, chars.latin_eacute ukr, chars.latin_ecaron vkr, "q" vkr, "o" ukr, chars.latin_oacute ukr, "q" ukr, "/" kern -5u# if medieval:, "0" ukr, "1" vkr, "2" vkr, "3" vkr, "4" kern-4u#, "5" ukr, "7" vkr, "9" ukr fi, "." vkr, "," vkr;
ligtable chars.polish_cross: "l" kern -if monospace: 9u# else: 6u# fi -2letter_fit#, "L" kern -if monospace: 8u# else: 6u# fi -2letter_fit#-(cap_serif_fit#-serif_fit#);
-ligtable "!": "`" =: chars.sign_spanish_shriek;
-ligtable "?": "`" =: chars.sign_spanish_query;
+ligtable "!": "`" =: chars.sign_spanish_shriek, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
+ligtable "?": "`" =: chars.sign_spanish_query, "?" kern -punct_fit#-.5u#, "!" kern -punct_fit#;
if (not monofig) and medieval:
ligtable "0": "/" vkr, "." mkr, "," mkr, chars.sign_czech_closing_quotes mkr;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
index 07ab2fabc82..28cbd4d774c 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-TS1.mf
@@ -83,7 +83,7 @@ chars.sign_peso:=145;
chars.sign_lira:=146;
chars.sign_recipe:=147;
chars.sign_interrobang:=148;
-chars.sign_gnaborretni :=149;
+chars.sign_gnaborretni:=149;
chars.sign_dong:=150;
chars.sign_trademark:=151;
chars.sign_pertenthousand:=152;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ar.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ar.mf
new file mode 100644
index 00000000000..25510364146
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ar.mf
@@ -0,0 +1,89 @@
+%Boisik list for arrows
+chars.arrow_up_doublehead:=0;
+chars.arrow_down_doublehead:=1;
+chars.arrow_left_start:=2;
+chars.arrow_right_start:=3;
+chars.arrow_up_start:=4;
+chars.arrow_down_start:=5;
+chars.arrow_left_not_vert_double:=6;
+chars.arrow_right_not_vert_double:=7;
+chars.arrow_left_hook:=8;
+chars.arrow_right_hook:=9;
+chars.arrow_right_circle:=10;
+chars.arrow_NW_corner:=11;
+chars.arrow_SE_corner:=12;
+chars.arrow_NW_line_top:=13;
+chars.arrow_CR:=14;
+chars.arrow_LF:=15;
+chars.arrow_left_squiggly:=16;
+chars.arrow_double_NW:=17;
+chars.arrow_double_NE:=18;
+chars.arrow_double_SW:=19;
+chars.arrow_double_SE:=20;
+chars.arrow_up_bars:=21;
+chars.arrow_down_bars:=22;
+chars.arrow_up_down_bar_bot:=23;
+chars.arrow_left_stop:=24;
+chars.arrow_right_stop:=25;
+chars.arrow_left_wavy:=26;
+chars.arrow_right_wavy:=27;
+chars.arrow_left_right_wavy:=28;
+chars.math_contradiction:=29;
+chars.arrow_right_three:=30;
+chars.arrow_left_above_right_stop:=31;
+chars.arrow_left_dash:=32;
+chars.arrow_right_dash:=33;
+chars.arrow_up_dash:=34;
+chars.arrow_down_dash:=35;
+chars.arrow_double_up_white:=36;
+chars.arrow_double_down_white:=37;
+chars.arrow_double_up_white_bar:=38;
+chars.arrow_double_up_white_pedestal:=39;
+chars.arrow_double_up_white_pedestal_hbar:=40;
+chars.arrow_double_up_white_pedestal_vbar:=41;
+chars.arrow_double_up_white_doublehead:=42;
+chars.arrow_double_up_white_doublehead_pedestal:=43;
+chars.arrow_double_up_down_white:=44;
+chars.arrow_left_black:=45;
+chars.arrow_right_black:=46;
+chars.arrow_up_black:=47;
+chars.arrow_down_black:=48;
+chars.arrow_left_right_black:=49;
+chars.arrow_up_down_black:=50;
+
+chars.math_accumulate_downwards_upside=220;
+chars.math_accumulate_downwards:=221;
+chars.math_accumulate:=222;
+chars.math_accumulate_upside:=223;
+chars.arrow_double_left_bar:=224;
+chars.arrow_double_right_bar:=225;
+chars.arrow_double_left_white:=226;
+chars.arrow_double_right_white:=227;
+chars.arrow_double_left_white_round:=228;
+chars.arrow_double_right_white_round:=229;
+chars.arrow_open_loop_up_right:=230;
+chars.arrow_open_loop_down_left:=231;
+chars.arrow_left_down_curly:=232;
+chars.arrow_right_down_curly:=233;
+chars.arrow_open_loop_left_down:=234;
+chars.arrow_open_loop_right_up:=235;
+chars.arrow_NNE:=236;
+chars.arrow_SSE:=237;
+chars.arrow_NNW:=238;
+chars.arrow_SSW:=239;
+chars.arrow_curve_left_down:=240;
+chars.arrow_curve_right_down:=241;
+chars.arrow_curve_left_right_down:=242;
+chars.arrow_curve_left_up:=243;
+chars.arrow_curve_right_up:=244;
+chars.arrow_curve_left_right_up:=245;
+chars.arrow_left_right_bar:=246;
+chars.arrow_left_right_bar_top:=247;
+chars.arrow_down_tip_left:=248;
+chars.arrow_down_tip_right:=249;
+chars.arrow_left_triangle:=250;
+chars.arrow_right_triangle:=251;
+chars.arrow_left_right_triangle:=252;
+chars.arrow_left_triangle_white:=253;
+chars.arrow_right_triangle_white:=254;
+chars.arrow_left_right_triangle_white:=255;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-bb.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-bb.mf
new file mode 100644
index 00000000000..7b2efdd7e7a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-bb.mf
@@ -0,0 +1,130 @@
+%Boisik list for blackboard-bold letters (msbm) and numerals
+
+chars.numeral_zero_BB:=48;
+chars.numeral_one_BB:=49;
+chars.numeral_two_BB:=50;
+chars.numeral_three_BB:=51;
+chars.numeral_four_BB:=52;
+chars.numeral_five_BB:=53;
+chars.numeral_six_BB:=54;
+chars.numeral_seven_BB:=55;
+chars.numeral_eight_BB:=56;
+chars.numeral_nine_BB:=57;
+
+chars.latin_A_BB:=65;
+chars.latin_B_BB:=66;
+chars.latin_C_BB:=67;
+chars.latin_D_BB:=68;
+chars.latin_E_BB:=69;
+chars.latin_F_BB:=70;
+chars.latin_G_BB:=71;
+chars.latin_H_BB:=72;
+chars.latin_I_BB:=73;
+chars.latin_J_BB:=74;
+chars.latin_K_BB:=75;
+chars.latin_L_BB:=76;
+chars.latin_M_BB:=77;
+chars.latin_N_BB:=78;
+chars.latin_O_BB:=79;
+chars.latin_P_BB:=80;
+chars.latin_Q_BB:=81;
+chars.latin_R_BB:=82;
+chars.latin_S_BB:=83;
+chars.latin_T_BB:=84;
+chars.latin_U_BB:=85;
+chars.latin_V_BB:=86;
+chars.latin_W_BB:=87;
+chars.latin_X_BB:=88;
+chars.latin_Y_BB:=89;
+chars.latin_Z_BB:=90;
+
+chars.latin_a_BB:=ASCII"a";
+chars.latin_b_BB:=ASCII"b";
+chars.latin_c_BB:=ASCII"c";
+chars.latin_d_BB:=ASCII"d";
+chars.latin_e_BB:=ASCII"e";
+chars.latin_f_BB:=ASCII"f";
+chars.latin_g_BB:=ASCII"g";
+chars.latin_h_BB:=ASCII"h";
+chars.latin_i_BB:=ASCII"i";
+chars.latin_dotless_i_BB:=ASCII"z"+1;
+chars.latin_j_BB:=ASCII"j";
+chars.latin_dotless_j_BB:=ASCII"z"+2;
+chars.latin_k_BB:=ASCII"k";
+chars.latin_l_BB:=ASCII"l";
+chars.latin_m_BB:=ASCII"m";
+chars.latin_n_BB:=ASCII"n";
+chars.latin_o_BB:=ASCII"o";
+chars.latin_p_BB:=ASCII"p";
+chars.latin_q_BB:=ASCII"q";
+chars.latin_r_BB:=ASCII"r";
+chars.latin_s_BB:=ASCII"s";
+chars.latin_t_BB:=ASCII"t";
+chars.latin_u_BB:=ASCII"u";
+chars.latin_v_BB:=ASCII"v";
+chars.latin_w_BB:=ASCII"w";
+chars.latin_x_BB:=ASCII"x";
+chars.latin_y_BB:=ASCII"y";
+chars.latin_z_BB:=ASCII"z";
+
+chars.greek_Gamma_BB:=0;
+chars.greek_Delta_BB:=1;
+chars.greek_Theta_BB:=2;
+chars.greek_Lambda_BB:=3;
+chars.greek_Xi_BB:=4;
+chars.greek_Pi_BB:=5;
+chars.greek_Sigma_BB:=6;
+chars.greek_Upsilon_BB:=7;
+chars.greek_Phi_BB:=8;
+chars.greek_Psi_BB:=9;
+chars.greek_Omega_BB:=10;
+
+chars.greek_alpha_BB:=11;
+chars.greek_beta_BB:=12;
+chars.greek_gamma_BB:=13;
+chars.greek_delta_BB:=14;
+chars.greek_epsilon_BB:=15;
+chars.greek_zeta_BB:=16;
+chars.greek_eta_BB:=17;
+chars.greek_theta_BB:=18;
+chars.greek_iota_BB:=19;
+chars.greek_kappa_BB:=20;
+chars.greek_lambda_BB:=21;
+chars.greek_mu_BB:=22;
+chars.greek_nu_BB:=23;
+chars.greek_xi_BB:=24;
+chars.greek_pi_BB:=25;
+chars.greek_rho_BB:=26;
+chars.greek_sigma_BB:=27;
+chars.greek_tau_BB:=28;
+chars.greek_upsilon_BB:=29;
+chars.greek_phi_BB:=30;
+chars.greek_chi_BB:=31;
+chars.greek_psi_BB:=32;
+chars.greek_omega_BB:=33;
+chars.greek_varepsilon_BB:=34;
+chars.greek_vartheta_BB:=35;
+chars.greek_varpi_BB:=36;
+chars.greek_varrho_BB:=37;
+chars.greek_varsigma_BB:=38;
+chars.greek_varphi_BB:=39;
+
+chars.greek_heta_BB:=40;
+chars.greek_digamma_BB:=41;
+chars.greek_qoppa_BB:=42;
+chars.greek_sampi_BB:=43;
+chars.greek_varsampi_BB:=44;
+chars.greek_stigma_BB:=45;
+chars.greek_varkappa_BB:=46;
+chars.greek_varbeta_BB:=47;
+
+chars.greek_Heta_BB:=91;
+chars.greek_Digamma_BB:=92;
+chars.greek_Qoppa_BB:=93;
+chars.greek_Sampi_BB:=94;
+chars.greek_Varsampi_BB:=95;
+
+chars.greek_iota_turned_BB:=125;
+chars.greek_epsilon_turned_BB:=126;
+chars.greek_Stigma_BB:=127;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
index e9dc43d6e4d..73d9f6db501 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ex.mf
@@ -61,9 +61,18 @@ chars.math_parent_right_mid:=67;
chars.math_accent_hat_wide:=98;
chars.math_accent_hat_wider:=99;
chars.math_accent_hat_widest:=100;
+chars.math_accent_hat_wide_widest:=129;
+chars.math_accent_hat_very_wide:=130;
chars.math_accent_tilde_wide:=101;
chars.math_accent_tilde_wider:=102;
chars.math_accent_tilde_widest:=103;
+chars.math_accent_tilde_wide_widest:=131;
+chars.math_accent_tilde_very_wide:=132;
+chars.math_accent_triangle_wide:=133;
+chars.math_accent_triangle_wider:=134;
+chars.math_accent_triangle_widest:=135;
+chars.math_accent_triangle_wide_widest:=136;
+chars.math_accent_triangle_very_wide:=137;
chars.math_root_big:=112;
chars.math_root_Big:=113;
chars.math_root_bigg:=114;
@@ -125,6 +134,8 @@ chars.math_floor_right_big:=5;
chars.math_floor_right_Big:=107;
chars.math_floor_right_bigg:=23;
chars.math_floor_right_Bigg:=37;
+chars.math_int_up_text:=138;
+chars.math_int_up_disp:=139;
charlist chars.math_squnion_text: chars.math_squnion_disp;
charlist chars.math_oint_text: chars.math_oint_disp;
@@ -134,12 +145,23 @@ charlist chars.math_circle_times_text: chars.math_circle_times_disp;
charlist chars.math_sum_text: chars.math_sum_disp;
charlist chars.math_prod_text: chars.math_prod_disp;
charlist chars.math_int_text: chars.math_int_disp;
+charlist chars.math_int_up_text: chars.math_int_up_disp;
charlist chars.math_union_text: chars.math_union_disp;
charlist chars.math_multiunion_text: chars.math_multiunion_disp;
charlist chars.math_lattice_inf_text: chars.math_lattice_inf_disp;
charlist chars.math_lattice_sup_text: chars.math_lattice_sup_disp;
charlist chars.math_coprod_text: chars.math_coprod_disp;
+charlist chars.math_accent_hat_wide:
+ chars.math_accent_hat_wider: chars.math_accent_hat_widest:
+ chars.math_accent_hat_wide_widest: chars.math_accent_hat_very_wide;
+charlist chars.math_accent_tilde_wide:
+ chars.math_accent_tilde_wider: chars.math_accent_tilde_widest:
+ chars.math_accent_tilde_wide_widest: chars.math_accent_tilde_very_wide;
+charlist chars.math_accent_triangle_wide:
+ chars.math_accent_triangle_wider: chars.math_accent_triangle_widest:
+ chars.math_accent_triangle_wide_widest: chars.math_accent_triangle_very_wide;
+
charlist chars.math_parent_left_big:
chars.math_parent_left_Big: chars.math_parent_left_bigg: chars.math_parent_left_Bigg:
chars.math_parent_left_top; % left parentheses
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ma.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ma.mf
new file mode 100644
index 00000000000..4575df449b2
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ma.mf
@@ -0,0 +1,264 @@
+%Boisik list for additional math symbols and sans-serif letters
+
+chars.latin_A_SS:=ASCII"A";
+chars.latin_B_SS:=ASCII"B";
+chars.latin_C_SS:=ASCII"C";
+chars.latin_D_SS:=ASCII"D";
+chars.latin_E_SS:=ASCII"E";
+chars.latin_F_SS:=ASCII"F";
+chars.latin_G_SS:=ASCII"G";
+chars.latin_H_SS:=ASCII"H";
+chars.latin_I_SS:=ASCII"I";
+chars.latin_J_SS:=ASCII"J";
+chars.latin_K_SS:=ASCII"K";
+chars.latin_L_SS:=ASCII"L";
+chars.latin_M_SS:=ASCII"M";
+chars.latin_N_SS:=ASCII"N";
+chars.latin_O_SS:=ASCII"O";
+chars.latin_P_SS:=ASCII"P";
+chars.latin_Q_SS:=ASCII"Q";
+chars.latin_R_SS:=ASCII"R";
+chars.latin_S_SS:=ASCII"S";
+chars.latin_T_SS:=ASCII"T";
+chars.latin_U_SS:=ASCII"U";
+chars.latin_V_SS:=ASCII"V";
+chars.latin_W_SS:=ASCII"W";
+chars.latin_X_SS:=ASCII"X";
+chars.latin_Y_SS:=ASCII"Y";
+chars.latin_Z_SS:=ASCII"Z";
+chars.latin_a_SS:=ASCII"a";
+chars.latin_b_SS:=ASCII"b";
+chars.latin_c_SS:=ASCII"c";
+chars.latin_d_SS:=ASCII"d";
+chars.latin_e_SS:=ASCII"e";
+chars.latin_f_SS:=ASCII"f";
+chars.latin_g_SS:=ASCII"g";
+chars.latin_h_SS:=ASCII"h";
+chars.latin_dotless_i_SS:=ASCII"z"+1;
+chars.latin_i_SS:=ASCII"i";
+chars.latin_dotless_j_SS:=ASCII"z"+2;
+chars.latin_j_SS:=ASCII"j";
+chars.latin_k_SS:=ASCII"k";
+chars.latin_l_SS:=ASCII"l";
+chars.latin_m_SS:=ASCII"m";
+chars.latin_n_SS:=ASCII"n";
+chars.latin_o_SS:=ASCII"o";
+chars.latin_p_SS:=ASCII"p";
+chars.latin_q_SS:=ASCII"q";
+chars.latin_r_SS:=ASCII"r";
+chars.latin_s_SS:=ASCII"s";
+chars.latin_t_SS:=ASCII"t";
+chars.latin_u_SS:=ASCII"u";
+chars.latin_v_SS:=ASCII"v";
+chars.latin_w_SS:=ASCII"w";
+chars.latin_x_SS:=ASCII"x";
+chars.latin_y_SS:=ASCII"y";
+chars.latin_z_SS:=ASCII"z";
+
+chars.numeral_zero_SS:=48;
+chars.numeral_one_SS:=49;
+chars.numeral_two_SS:=50;
+chars.numeral_three_SS:=51;
+chars.numeral_four_SS:=52;
+chars.numeral_five_SS:=53;
+chars.numeral_six_SS:=54;
+chars.numeral_seven_SS:=55;
+chars.numeral_eight_SS:=56;
+chars.numeral_nine_SS:=57;
+
+chars.greek_alpha_SS:=11;
+chars.greek_beta_SS:=12;
+chars.greek_gamma_SS:=13;
+chars.greek_delta_SS:=14;
+chars.greek_epsilon_SS:=15;
+chars.greek_zeta_SS:=16;
+chars.greek_eta_SS:=17;
+chars.greek_theta_SS:=18;
+chars.greek_iota_SS:=19;
+chars.greek_kappa_SS:=20;
+chars.greek_lambda_SS:=21;
+chars.greek_mu_SS:=22;
+chars.greek_nu_SS:=23;
+chars.greek_xi_SS:=24;
+chars.greek_pi_SS:=25;
+chars.greek_rho_SS:=26;
+chars.greek_sigma_SS:=27;
+chars.greek_tau_SS:=28;
+chars.greek_upsilon_SS:=29;
+chars.greek_phi_SS:=30;
+chars.greek_chi_SS:=31;
+chars.greek_psi_SS:=32;
+chars.greek_omega_SS:=33;
+chars.greek_varepsilon_SS:=34;
+chars.greek_vartheta_SS:=35;
+chars.greek_varpi_SS:=36;
+chars.greek_varrho_SS:=37;
+chars.greek_varsigma_SS:=38;
+chars.greek_varphi_SS:=39;
+chars.greek_heta_SS:=40;
+chars.greek_digamma_SS:=41;
+chars.greek_qoppa_SS:=42;
+chars.greek_sampi_SS:=43;
+chars.greek_varsampi_SS:=44;
+chars.greek_stigma_SS:=45;
+chars.greek_varkappa_SS:=46;
+chars.greek_varbeta_SS:=47;
+
+chars.greek_Gamma_SS:=0;
+chars.greek_Delta_SS:=1;
+chars.greek_Theta_SS:=2;
+chars.greek_Lambda_SS:=3;
+chars.greek_Xi_SS:=4;
+chars.greek_Pi_SS:=5;
+chars.greek_Sigma_SS:=6;
+chars.greek_Upsilon_SS:=7;
+chars.greek_Phi_SS:=8;
+chars.greek_Psi_SS:=9;
+chars.greek_Omega_SS:=10;
+chars.greek_Heta_SS:=91;
+chars.greek_Digamma_SS:=92;
+chars.greek_Qoppa_SS:=93;
+chars.greek_Sampi_SS:=94;
+chars.greek_Varsampi_SS:=95;
+
+chars.greek_iota_turned_SS:=125;
+chars.greek_epsilon_turned_SS:=126;
+chars.greek_Stigma_SS:=127;
+
+chars.math_oblong:=58;
+chars.math_oblong_tall:=59;
+chars.math_slash_double:=60;
+chars.math_backslash_double:=61;
+chars.math_hash:=62;
+chars.math_varhash:=63;
+chars.math_convolution:=64;
+chars.math_asterisk_big:=96;
+
+chars.math_equiangular:=128;
+chars.math_equals_corresponds:=129;
+chars.math_corresponds:=130;
+chars.math_equals_dot:=131;
+chars.sign_circled_equals:=132;
+chars.math_over_water:=133;
+chars.math_minus_dot:=134;
+chars.math_logical_not_inv:=135;
+chars.math_sim_dots:=136;
+chars.math_sim_dot:=137;
+chars.math_sim_dots_rising:=138;
+chars.math_plus_circ:=139;
+chars.math_times_dot:=140;
+chars.math_product_cartesian:=141;
+chars.math_merge:=142;
+chars.math_logor_intersect:=143;
+chars.math_circle_set_minus:=144;
+chars.math_circle_bar_top:=145;
+chars.math_circle_bar_bot:=146;
+chars.math_circle_bar_left:=147;
+chars.math_circle_bar_right:=148;
+chars.math_circle_vbar:=149;
+chars.math_circle_divide:=150;
+chars.math_circle_triangle:=151;
+chars.math_circle_less:=152;
+chars.math_circle_greater:=153;
+chars.math_circle_vee:=154;
+chars.math_circle_wedge:=155;
+chars.math_box_set_minus:=156;
+chars.math_box_bar_top:=157;
+chars.math_box_bar_bot:=158;
+chars.math_box_bar_left:=159;
+chars.math_box_bar_right:=160;
+chars.math_box_vbar:=161;
+chars.math_box_divide:=162;
+chars.math_box_triangle:=163;
+chars.math_box_asterisk:=164;
+chars.math_box_circle:=165;
+chars.math_box_division:=166;
+chars.math_box_box:=167;
+chars.math_diamond_wider:=168;
+chars.math_diamond_minus:=169;
+chars.math_diamond_vbar:=170;
+chars.math_diamond_times:=171;
+chars.math_diamond_plus:=172;
+chars.math_diamond_triangle:=173;
+chars.math_diamond_circle:=174;
+chars.math_multiset:=175;
+chars.math_cup:=176;
+chars.math_cap:=177;
+chars.math_sqcup:=178;
+chars.math_sqcap:=179;
+chars.math_sqsubset_very:=180;
+chars.math_sqsuperset_very:=181;
+chars.math_element_plus:=182;
+chars.math_ownership_plus:=183;
+chars.math_element_bar:=184;
+chars.math_ownership_bar:=185;
+chars.math_subset_plus:=186;
+chars.math_superset_plus:=187;
+chars.math_subset_eq_plus:=188;
+chars.math_superset_eq_plus:=189;
+chars.math_multiintersection:=190;
+chars.math_sqmultiunion:=191;
+chars.math_multimap_both:=192;
+chars.math_multimapdot_both:=193;
+chars.math_multimapdot_left_both:=194;
+chars.math_multimapdot_right_both:=195;
+chars.math_multimap_inverted:=196;
+chars.math_multimapdot_inverted:=197;
+chars.math_multimap_both_vert:=198;
+chars.math_multimapdot_both_vert:=199;
+chars.math_multimapdot_top_both_vert:=200;
+chars.math_multimapdot_bot_both_vert:=201;
+chars.math_dfourier:=202;
+chars.math_dfourier_inverted:=203;
+chars.math_ztrans:=204;
+chars.math_ztrans_inv:=205;
+chars.math_less_in_less:=206;
+chars.math_greater_in_greater:=207;
+chars.math_slice_left:=208;
+chars.math_slice_right:=209;
+chars.math_triangle_left_isosceles_bar_sl:=210;
+chars.math_triangle_right_isosceles_bar_sl:=211;
+chars.math_Ydown:=212;
+chars.math_Yup:=213;
+chars.math_Yleft:=214;
+chars.math_Yright:=215;
+chars.math_forces_reversed:=216;
+chars.math_forces_bar_reversed:=217;
+chars.math_forces_hbar_reversed:=218;
+chars.math_satisfies_reversed:=219;
+chars.math_lattice_top_neg:=220;
+chars.math_lattice_bottom_neg:=221;
+chars.math_bracket_bag_simple_left:=222;
+chars.math_bracket_bag_simple_right:=223;
+chars.math_angle_right:=224;
+chars.math_angle_right_arc:=225;
+chars.math_angle_right_arc_dot:=226;
+chars.math_angle_right_square:=227;
+chars.math_triangle_right_angle:=228;
+chars.math_uptack_double:=229;
+chars.math_moo:=230;
+chars.math_baro:=231;
+chars.math_plus_through_circ:=232;
+chars.math_minus_through_circ:=233;
+chars.math_precedes_double:=234;
+chars.math_follows_double:=235;
+chars.math_strict_fi:=236;
+chars.math_strict_if:=237;
+chars.math_ampersand_bin:=238;
+chars.math_ampersand_bin_rev:=239;
+chars.math_lazyS:=240;
+chars.math_sinus:=241;
+chars.math_hamiltonian_conjugate:=242;
+chars.math_intercalate:=243;
+chars.math_equals_parallel:=244;
+chars.math_plus_triangle:=245;
+chars.math_smash:=246;
+chars.math_infinity_incomplete:=247;
+chars.math_less_circle:=248;
+chars.math_greater_circle:=249;
+chars.math_greater_less_overlap:=250;
+chars.math_vee_in_vee:=251;
+chars.math_wedge_in_wedge:=252;
+chars.math_semicolon_fat:=253;
+chars.math_element_down:=254;
+chars.math_pitchfork_top:=255;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
index 9cc7599a7ad..55ab3aca391 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi-up.mf
@@ -1,33 +1,7 @@
%Boisik list for math font (upright symbols)
-chars.harpoon_left_up:=40;
-chars.harpoon_left_down:=41;
-chars.harpoon_right_up:=42;
-chars.harpoon_right_down:=43;
-chars.arrow_hook_left:=44;
-chars.arrow_hook_right:=45;
-chars.math_triangle_right:=46;
-chars.math_triangle_left:=47;
-chars.numeral_zero:=48;
-chars.numeral_one:=49;
-chars.numeral_two:=50;
-chars.numeral_three:=51;
-chars.numeral_four:=52;
-chars.numeral_five:=53;
-chars.numeral_six:=54;
-chars.numeral_seven:=55;
-chars.numeral_eight:=56;
-chars.numeral_nine:=57;
chars.sign_period:=58;
chars.sign_comma:=59;
chars.math_less:=60;
chars.math_virgule:=61;
chars.math_greater:=62;
-chars.math_five_star:=63;
-
-chars.symbol_flat:=91;
-chars.symbol_natural:=92;
-chars.symbol_sharp:=93;
-chars.symbol_smile:=94;
-chars.symbol_frown:=95;
-
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
index 35e3e4cf6e0..a6a429cffaa 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-mi.mf
@@ -41,6 +41,28 @@ chars.greek_varrho:=37;
chars.greek_varsigma:=38;
chars.greek_varphi:=39; chars.greek_varphi_curved:=39+128;
+chars.greek_heta:=40;
+chars.greek_digamma:=41;
+chars.greek_qoppa:=42;
+chars.greek_sampi:=43;
+chars.greek_varsampi:=44;
+chars.greek_stigma:=45;
+chars.greek_varkappa:=46;
+chars.greek_varbeta:=47;
+
+chars.math_stylized_F:=63;
+
+chars.numeral_zero:=ASCII"0";
+chars.numeral_one:=ASCII"1";
+chars.numeral_two:=ASCII"2";
+chars.numeral_three:=ASCII"3";
+chars.numeral_four:=ASCII"4";
+chars.numeral_five:=ASCII"5";
+chars.numeral_six:=ASCII"6";
+chars.numeral_seven:=ASCII"7";
+chars.numeral_eight:=ASCII"8";
+chars.numeral_nine:=ASCII"9";
+
chars.math_partial:=64;
chars.latin_A:=ASCII"A";
chars.latin_B:=ASCII"B";
@@ -68,6 +90,13 @@ chars.latin_W:=ASCII"W";
chars.latin_X:=ASCII"X";
chars.latin_Y:=ASCII"Y";
chars.latin_Z:=ASCII"Z";
+
+chars.greek_Heta:=91;
+chars.greek_Digamma:=92;
+chars.greek_Qoppa:=93;
+chars.greek_Sampi:=94;
+chars.greek_Varsampi:=95;
+
chars.math_ell:=96;
chars.latin_a:=ASCII"a";
chars.latin_b:=ASCII"b";
@@ -97,7 +126,19 @@ chars.latin_y:=ASCII"y";
chars.latin_z:=ASCII"z";
chars.latin_dotless_i:=123;
chars.latin_dotless_j:=124;
-chars.math_weierstrass_p:=125;
-chars.math_accent_arrow:=126;
-chars.math_accent_tie:=127;
+chars.greek_iota_turned:=125;
+chars.greek_epsilon_turned:=126;
+chars.greek_Stigma:=127;
+
+chars.math_weierstrass_p:=128;
+chars.math_accent_arrow:=129;
+chars.math_accent_tie:=130;
+
+chars.latin_g_alt:=131;
+chars.latin_hbar:=132;
+chars.latin_hstroke:=133;
+chars.greek_lambda_bar:=134;
+chars.greek_lambda_slash:=135;
+
+chars.sign_AR:=169; \ No newline at end of file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-ms.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ms.mf
new file mode 100644
index 00000000000..f1df6921416
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-ms.mf
@@ -0,0 +1,153 @@
+%0--127 reserved for BB leters and numerals
+chars.math_precedes_relation:=58;
+chars.math_follows_relation:=59;
+chars.math_element_long:=60;
+chars.math_ownership_long:=61;
+chars.math_slash_fat:=62;
+chars.math_backslash_fat:=63;
+chars.math_equivalence_neg:=64;
+
+chars.math_sqelement:=96;
+
+chars.math_less_vert_not_eq_double:=128;
+chars.math_greater_vert_not_eq_double:=129;
+chars.math_less_eq_not:=130;
+chars.math_greater_eq_not:=131;
+chars.math_less_not:=132;
+chars.math_greater_not:=133;
+chars.math_precedes_not:=134;
+chars.math_follows_not:=135;
+chars.math_less_not_eq_double:=136;
+chars.math_greater_not_eq_double:=137;
+chars.math_less_eq_slanted_not:=138;
+chars.math_greater_eq_slanted_not:=139;
+chars.math_less_neq:=140;
+chars.math_greater_neq:=141;
+chars.math_precedes_eq_not:=142;
+chars.math_follows_eq_not:=143;
+
+chars.math_less_eq_double_not:=144;
+chars.math_greater_eq_double_not:=145;
+chars.math_less_not_sim:=146;
+chars.math_greater_not_sim:=147;
+chars.math_precedes_not_sim:=148;
+chars.math_follows_not_sim:=149;
+chars.math_precedes_not_eq_double:=150;
+chars.math_follows_not_eq_double:=151;
+
+chars.math_sim_not:=152;
+chars.math_sim_eq_double_neg:=153;
+chars.math_less_not_approx:=154;
+chars.math_greater_not_approx:=155;
+chars.math_precedes_not_approx:=156;
+chars.math_follows_not_approx:=157;
+chars.math_subset_neg:=158;
+chars.math_superset_neg:=159;
+
+chars.math_subset_eq_neg:=160;
+chars.math_superset_eq_neg:=161;
+chars.math_subset_eq_double_not:=162;
+chars.math_superset_eq_double_not:=163;
+chars.math_subset_not_eq_double:=164;
+chars.math_superset_not_eq_double:=165;
+chars.math_subset_not_eq_double_alt:=166;
+chars.math_superset_not_eq_double_alt:=167;
+chars.math_subset_not_eq:=168;
+chars.math_superset_not_eq:=169;
+chars.math_not_subset_eq:=170;
+chars.math_not_superset_eq:=171;
+chars.math_vertical_double_neg:=172;
+chars.math_vertical_neg:=173;
+chars.math_vertical_neg_cute:=174;
+chars.math_vertical_double_neg_cute:=175;
+chars.math_lattice_left_neg:=176;
+chars.math_forces_neg:=177;
+chars.math_satisfies_neg:=178;
+chars.math_forces_hbar_neg:=179;
+chars.math_triangle_right_isosceles_bar_neg:=180;
+chars.math_triangle_left_isosceles_bar_neg:=181;
+chars.math_triangle_left_isosceles_neg:=182;
+chars.math_triangle_right_isosceles_neg:=183;
+
+chars.math_precedes_approx:=184;
+chars.math_follows_approx:=185;
+chars.math_precedes_sim:=186;
+chars.math_follows_sim:=187;
+chars.math_less_sim:=188;
+chars.math_greater_sim:=189;
+chars.math_less_approx:=190;
+chars.math_greater_approx:=191;
+chars.math_less_eq_double:=192;
+chars.math_greater_eq_double:=193;
+chars.math_less_greater:=194;
+chars.math_greater_less:=195;
+chars.math_less_equal_greater:=196;
+chars.math_greater_equal_less:=197;
+chars.math_less_equal_double_greater:=198;
+chars.math_greater_equal_double_less:=199;
+
+chars.math_subset_very:=200;
+chars.math_superset_very:=201;
+chars.math_parallel_union:=202;
+chars.math_parallel_intersection:=203;
+chars.math_subset_eq_double:=204;
+chars.math_superset_eq_double:=205;
+chars.math_logand_curly:=206;
+chars.math_logor_curly:=207;
+
+chars.math_logxor:=208;
+chars.math_lognand:=209;
+chars.math_logand_doublebar:=210;
+chars.math_lambda:=211;
+chars.math_lambda_refl:=212;
+chars.math_angle:=213;
+chars.math_angle_arc:=214;
+chars.sign_angle_arc:=215;
+
+chars.math_right_angle_nw:=216;
+chars.math_right_angle_ne:=217;
+chars.math_division_integer:=218;
+chars.math_line_45:=219;
+chars.math_line_135:=220;
+chars.math_approx_bar:=221;
+chars.math_plus_dot:=222;
+chars.math_pitchfork:=223;
+
+chars.math_right_angle_sw:=224;
+chars.math_right_angle_se:=225;
+chars.math_exists_not:=226;
+chars.math_five_star_big:=227;
+chars.sign_neq:=228;
+chars.math_dalembert:=229;
+chars.math_sim_eq_double:=230;
+chars.math_diamond_dot:=231;
+
+chars.math_times_verticals:=232;
+chars.math_times_left_black:=233;
+chars.math_times_right_black:=234;
+chars.math_bowtie_black:=235;
+chars.math_bowtie_left_black:=236;
+chars.math_bowtie_right_black:=237;
+chars.math_iron_cross:=238;
+chars.sign_check:=239;
+
+%Symbols from cmsy
+chars.math_section:=240;
+chars.math_dag:=241;
+chars.math_dagger:=242;
+chars.sign_paragraph:=243;
+chars.sign_club_suit:=244;
+chars.sign_diamond_suit:=245;
+chars.sign_heart_suit:=246;
+chars.sign_spade_suit:=247;
+
+%Symbols from cmmi
+chars.math_five_star:=248;
+chars.symbol_flat:=249;
+chars.symbol_natural:=250;
+chars.symbol_sharp:=251;
+chars.symbol_smile:=252;
+chars.symbol_frown:=253;
+chars.math_triangle_right:=254;
+chars.math_triangle_left:=255;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
index 9d7568ef613..c47f413df8e 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsklist-sy.mf
@@ -1,21 +1,22 @@
%Boisik list for math symbol font
+chars.cal_Gamma:=0;
+chars.cal_Delta:=1;
+chars.cal_Theta:=2;
+chars.cal_Lambda:=3;
+chars.cal_Xi:=4;
+chars.cal_Pi:=5;
+chars.cal_Sigma:=6;
+chars.cal_Upsilon:=7;
-chars.math_minus:=0;
-chars.math_cdot:=1;
-chars.math_times:=2;
-chars.math_asterisk:=3;
-chars.math_division:=4;
-chars.math_diamond_op:=5;
-chars.math_plus_minus:=6;
-chars.math_minus_plus:=7;
-chars.math_circle_plus:=8;
-chars.math_circle_minus:=9;
-chars.math_circle_times:=10;
+chars.cal_Phi:=8;
+chars.cal_Psi:=9;
+chars.cal_Omega:=10;
chars.math_circle_divide:=11;
chars.math_circle_dot:=12;
chars.math_circle_copy:=13;
chars.math_circle_op:=14;
chars.math_bullet:=15;
+
chars.math_hardy:=16;
chars.math_equivalence:=17;
chars.math_subset_eq:=18;
@@ -24,6 +25,7 @@ chars.math_less_eq:=20;
chars.math_greater_eq:=21;
chars.math_precedes_eq:=22;
chars.math_follows_eq:=23;
+
chars.math_sim:=24;
chars.math_approx:=25;
chars.math_subset:=26;
@@ -32,6 +34,7 @@ chars.math_much_less:=28;
chars.math_much_greater:=29;
chars.math_precedes:=30;
chars.math_follows:=31;
+
chars.arrow_left:=32;
chars.arrow_right:=33;
chars.arrow_up:=34;
@@ -40,6 +43,7 @@ chars.arrow_left_right:=36;
chars.arrow_NE:=37;
chars.arrow_SE:=38;
chars.math_sim_eq:=39;
+
chars.arrow_double_left:=40;
chars.arrow_double_right:=41;
chars.arrow_double_up:=42;
@@ -48,6 +52,7 @@ chars.arrow_double_left_right:=44;
chars.arrow_NW:=45;
chars.arrow_SW:=46;
chars.math_propto:=47;
+
chars.math_prime:=48;
chars.math_infinity:=49;
chars.math_element:=50;
@@ -56,6 +61,7 @@ chars.math_triangle_up:=52;
chars.math_triangle_down:=53;
chars.math_zero_slash:=54;
chars.math_maps_to:=55;
+
chars.math_forall:=56;
chars.math_exists:=57;
chars.math_logical_not:=58;
@@ -64,6 +70,7 @@ chars.math_Re:=60;
chars.math_Im:=61;
chars.math_lattice_top:=62;
chars.math_lattice_bottom:=63;
+
chars.math_aleph:=64;
chars.cal_A:=65;
chars.cal_B:=66;
@@ -72,6 +79,7 @@ chars.cal_D:=68;
chars.cal_E:=69;
chars.cal_F:=70;
chars.cal_G:=71;
+
chars.cal_H:=72;
chars.cal_I:=73;
chars.cal_J:=74;
@@ -80,6 +88,7 @@ chars.cal_L:=76;
chars.cal_M:=77;
chars.cal_N:=78;
chars.cal_O:=79;
+
chars.cal_P:=80;
chars.cal_Q:=81;
chars.cal_R:=82;
@@ -88,14 +97,16 @@ chars.cal_T:=84;
chars.cal_U:=85;
chars.cal_V:=86;
chars.cal_W:=87;
+
chars.cal_X:=88;
chars.cal_Y:=89;
chars.cal_Z:=90;
-chars.math_union:=91;
-chars.math_intersection:=92;
-chars.math_multiunion:=93;
-chars.math_logand:=94;
-chars.math_logor:=95;
+chars.cal_Heta:=91;
+chars.cal_Digamma:=92;
+chars.cal_Qoppa:=93;
+chars.cal_Sampi:=94;
+chars.cal_Varsampi:=95;
+
chars.math_lattice_left:=96;
chars.math_lattice_right:=97;
chars.math_floor_left:=98;
@@ -104,6 +115,7 @@ chars.math_ceiling_left:=100;
chars.math_ceiling_right:=101;
chars.math_curly_brace_left:=102;
chars.math_curly_brace_right:=103;
+
chars.math_angle_left:=104;
chars.math_angle_right:=105;
chars.math_vertical:=106;
@@ -112,6 +124,7 @@ chars.arrow_up_down:=108;
chars.arrow_double_up_down:=109;
chars.math_backslash:=110;
chars.math_wreath:=111;
+
chars.math_root:=112;
chars.math_coprod:=113;
chars.math_nabla:=114;
@@ -120,11 +133,161 @@ chars.math_squnion:=116;
chars.math_sqintersection:=117;
chars.math_sqsubset_eq:=118;
chars.math_sqsuperset_eq:=119;
-chars.math_section:=120;
-chars.math_dag:=121;
-chars.math_dagger:=122;
-chars.sign_paragraph:=123;
-chars.sign_club_suit:=124;
-chars.sign_diamond_suit:=125;
-chars.sign_heart_suit:=126;
-chars.sign_spade_suit:=127;
+
+chars.math_minus:=120;
+chars.math_cdot:=121;
+chars.math_times:=122;
+chars.math_asterisk:=123;
+chars.math_division:=124;
+chars.math_diamond_op:=125;
+chars.math_plus_minus:=126;
+chars.cal_Stigma:=127;
+
+chars.math_circle_plus:=128;
+chars.math_circle_minus:=129;
+chars.math_circle_times:=130;
+chars.math_union:=131;
+chars.math_intersection:=132;
+chars.math_multiunion:=133;
+chars.math_logand:=134;
+chars.math_logor:=135;
+
+chars.harpoon_left_up:=136;
+chars.harpoon_left_down:=137;
+chars.harpoon_right_up:=138;
+chars.harpoon_right_down:=139;
+chars.arrow_hook_left:=177;
+chars.arrow_hook_right:=178;
+
+%Additional symbols from AMS set
+chars.harpoon_up_right:=140;
+chars.harpoon_down_right:=141;
+chars.harpoon_up_left:=142;
+chars.harpoon_down_left:=143;
+
+chars.arrow_left_above_right:=144;
+chars.arrow_right_above_left:=145;
+chars.harpoon_right_up_left_down:=146;
+chars.harpoon_left_up_right_down:=147;
+chars.arrow_left_two:=148;
+chars.arrow_right_two:=149;
+chars.arrow_up_two:=150;
+chars.arrow_down_two:=151;
+
+chars.arrow_right_doublehead:=152;
+chars.arrow_left_doublehead:=153;
+chars.arrow_right_tail:=154;
+chars.arrow_left_tail:=155;
+chars.arrow_right_squiggly:=156;
+chars.arrow_right_left_squiggly:=157;
+chars.arrow_up_tip_left:=158;
+chars.arrow_up_tip_right:=159;
+
+chars.arrow_left_curly:=160;
+chars.arrow_right_curly:=161;
+chars.arrow_clockwise:=162;
+chars.arrow_counterclockwise:=163;
+chars.arrow_arch_left_down:=164;
+chars.arrow_arch_right_down:=165;
+chars.arrow_right_short:=166;
+chars.arrow_left_short:=167;
+
+chars.arrow_left_not:=168;
+chars.arrow_right_not:=169;
+chars.arrow_left_right_not:=170;
+chars.arrow_double_left_not:=171;
+chars.arrow_double_right_not:=172;
+chars.arrow_double_left_right_not:=173;
+chars.arrow_triple_left:=174;
+chars.arrow_triple_right:=175;
+
+chars.arrow_double_left_right_not_out:=176;
+%177
+%178
+chars.math_multimap:=179;
+chars.math_multimapdot:=180;
+chars.math_therefore:=181;
+chars.math_because:=182;
+chars.math_vert_slurs:=183;
+
+chars.math_forces:=184;
+chars.math_forces_bar:=185;
+chars.math_forces_hbar:=186;
+chars.math_satisfies:=187;
+chars.symbol_smile_simple:=188;
+chars.symbol_frown_simple:=189;
+chars.math_vertical_cute:=190;
+chars.math_vertical_double_cute:=191;
+
+chars.math_backprime:=192;
+chars.math_null_set:=193;
+chars.math_approx_thick:=194;
+chars.math_division_times:=195;
+chars.math_less_dot:=196;
+chars.math_greater_dot:=197;
+chars.math_sunrise:=198;
+chars.math_sunrise_water:=199;
+
+chars.math_less_eq_slanted:=200;
+chars.math_greater_eq_slanted:=201;
+chars.math_eq_slanted_less:=202;
+chars.math_eq_slanted_greater:=203;
+chars.math_eq_precedes:=204;
+chars.math_eq_follows:=205;
+chars.math_precedes_eq_curved:=206;
+chars.math_follows_eq_curved:=207;
+
+chars.math_sim_thick:=208;
+chars.math_sim_inv:=209;
+chars.math_eq_sim:=210;
+chars.math_sim_inv_eq:=211;
+chars.math_times_left:=212;
+chars.math_times_right:=213;
+chars.math_much_much_less:=214;
+chars.math_much_much_greater:=215;
+
+chars.math_equals_triangle:=216;
+chars.math_equals_circle:=217;
+chars.math_ring_equals:=218;
+chars.math_equals_dots:=219;
+chars.math_equals_dot_rl:=220;
+chars.math_equals_dot_lr:=221;
+chars.math_axis_line_short:=222;
+chars.math_propto_circ:=223;
+
+chars.math_sqsubset:=224;
+chars.math_sqsuperset:=225;
+chars.math_diamond:=226;
+chars.math_diamond_black:=227;
+chars.math_triangle_right_isosceles:=228;
+chars.math_triangle_left_isosceles:=229;
+chars.math_triangle_right_isosceles_bar:=230;
+chars.math_triangle_left_isosceles_bar:=231;
+
+chars.math_triangle_down_isosceles_black:=232;
+chars.math_triangle_right_isosceles_black:=233;
+chars.math_triangle_left_isosceles_black:=234;
+chars.math_triangle_up_isosceles_black:=235;
+chars.math_triangle_up_isosceles:=236;
+chars.math_triangle_down_isosceles:=237;
+chars.math_square_small_black:=238;
+chars.math_box_operator_black:=239;
+
+chars.math_box_plus:=240;
+chars.math_box_minus:=241;
+chars.math_box_times:=242;
+chars.math_box_operator:=243;
+chars.math_box_dot:=244;
+chars.math_circle_circle:=245;
+chars.math_circle_asterisk:=246;
+chars.math_circle_bar:=247;
+
+chars.math_beth:=248;
+chars.math_gimel:=249;
+chars.math_dalet:=250;
+chars.math_reversed_F:=251;
+chars.math_inverted_G:=252;
+chars.math_bourbaki_C:=253;
+chars.math_bourbaki_T:=254;
+chars.math_minus_plus:=255;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskma10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskma10.mf
new file mode 100644
index 00000000000..9141cd111db
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskma10.mf
@@ -0,0 +1,89 @@
+% Boisik Additional Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMA"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=-20/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-20/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; ss.hair#:=16/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; ss.dot_size#:=25/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; ss.cap_hair#:=20/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; ss.alt_cap_hair#:=24/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; ss.cap_bar#:=18/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; boolean ss.square_dots; ss.square_dots:=true; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathma % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmab10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmab10.mf
new file mode 100644
index 00000000000..c5c8c01d51e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmab10.mf
@@ -0,0 +1,90 @@
+% Boisik Additional Bold Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMAB"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=-20/36pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=-20/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; ss.hair#:=20/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; ss.dot_size#:=33/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; ss.cap_hair#:=25/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; ss.alt_cap_hair#:=28/36pt#;% alternative uppercase hairline breadth
+cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; ss.cap_bar#:=21/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; boolean ss.square_dots; ss.square_dots:=true; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+boldmath:=true;
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathma % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
index 3221329b278..abd80116234 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmath.mf
@@ -9,6 +9,8 @@ input bskletters-o;
input bskletters-r;
input bskletters-i;
+font_slant slant;
+
%Non-slanted characters
save chars; numeric chars[];
slant:=mono_charic#:=0;
@@ -16,11 +18,159 @@ currenttransform:=identity yscaled aspect_ratio scaled granularity;
let bskboundary=relax;
input bsklist-mi-up;
input bsksymbols;
-input bskletters-r;
-font_normal_space 5u#;
-font_normal_stretch 3u#; font_normal_shrink 2u#;
font_quad 15u#;
-font_extra_space 2u#;
font_x_height 159/36pt#;
+
+numeric skewchar, lom, carka, tecka; skewchar:=130;
+lom:=chars.math_virgule; carka:=chars.sign_comma; tecka:=chars.sign_period;
+def tecarka text t:= tecka kern t, carka kern t enddef;
+input bsklist-mi;
+
+ligtable chars.latin_A: skewchar kern 3u#;
+ligtable chars.latin_B: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_C: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_D: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_E: skewchar kern 2u#;
+ligtable chars.latin_F: skewchar kern 2u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_G: skewchar kern 2u#;
+ligtable chars.latin_H: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_I: skewchar kern 2.5u#, tecarka -u#;
+ligtable chars.latin_J: skewchar kern 3u#, tecarka -1.5u#, lom kern -u#;
+ligtable chars.latin_K: skewchar kern 1u#, tecarka -u#;
+ligtable chars.latin_M: skewchar kern 1.5u#, tecarka -u#;
+ligtable chars.latin_N: skewchar kern .5u#, tecarka -1.5u#, lom kern -.5u#;
+ligtable chars.latin_O: skewchar kern 2u#, tecarka -1.5u#;
+ligtable chars.latin_P: skewchar kern 1u#, tecarka -3u#, lom kern -u#;
+ligtable chars.latin_Q: skewchar kern 2u#, lom kern u#;
+ligtable chars.latin_R: skewchar kern 2u#;
+ligtable chars.latin_S: skewchar kern 2u#;
+ligtable chars.latin_T: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_U: tecarka -1.5u#, lom kern -u#;
+ligtable chars.latin_V: tecarka -3u#, lom kern -3u#;
+ligtable chars.latin_W: tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_X: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_Y: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_Z: skewchar kern 1u#, tecarka -u#;
+
+ligtable chars.latin_a: skewchar kern 2u#;
+ligtable chars.latin_b: tecarka -.5u#;
+ligtable chars.latin_c: skewchar kern 1.5u#;
+ligtable chars.latin_d: skewchar kern 2u#;
+ligtable chars.latin_e: skewchar kern 2u#;
+ligtable chars.latin_f: skewchar kern 4.5u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.latin_g: skewchar kern u#, tecarka -u#;
+ligtable chars.latin_g_alt: skewchar kern 2u#;
+ligtable chars.latin_h: skewchar kern 2u#;
+ligtable chars.latin_hstroke: skewchar kern 2u#;
+ligtable chars.latin_hbar: skewchar kern 2u#;
+ligtable chars.latin_i: skewchar kern 1.5u#;
+ligtable chars.latin_dotless_i: skewchar kern 1u#;
+ligtable chars.latin_j: skewchar kern 2.5u#, tecarka -u#;
+ligtable chars.latin_dotless_j: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_k: skewchar kern u#;
+ligtable chars.latin_l: skewchar kern 2u#;
+ligtable chars.latin_m: skewchar kern 2u#;
+ligtable chars.latin_n: skewchar kern u#;
+ligtable chars.latin_o: skewchar kern u#;
+ligtable chars.latin_p: skewchar kern 3u#;
+ligtable chars.latin_q: skewchar kern 1.5u#, tecarka -.5u#;
+ligtable chars.latin_r: skewchar kern .5u#, tecarka -2.5u#, lom kern -u#;
+ligtable chars.latin_s: skewchar kern 2u#, tecarka -u#;
+ligtable chars.latin_t: skewchar kern 1.5u#;
+ligtable chars.latin_u: skewchar kern 1u#;
+ligtable chars.latin_v: skewchar kern 1u#;
+ligtable chars.latin_w: skewchar kern 1u#;
+ligtable chars.latin_x: skewchar kern 1u#;
+ligtable chars.latin_y: skewchar kern 2.5u#;
+ligtable chars.latin_z: skewchar kern 1u#;
+
+ligtable chars.greek_alpha: skewchar kern 1.5u#;
+ligtable chars.greek_beta: skewchar kern 1.5u#;
+ligtable chars.greek_varbeta: skewchar kern 1u#;
+ligtable chars.greek_beta_curved: skewchar kern 1.5u#;
+ligtable chars.greek_gamma: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_gamma_curved: skewchar kern 1u#, tecarka -1.5u#;
+ligtable chars.greek_digamma: skewchar kern 1.5u#;
+ligtable chars.greek_delta: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.greek_epsilon: skewchar kern 1.5u#;
+ligtable chars.greek_varepsilon: skewchar kern 1.5u#;
+ligtable chars.greek_epsilon_turned: skewchar kern .5u#;
+ligtable chars.greek_zeta: skewchar kern 2u#;
+ligtable chars.greek_eta: skewchar kern 1u#;
+ligtable chars.greek_eta_curved: skewchar kern 1u#;
+ligtable chars.greek_heta: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_theta: skewchar kern 1.5u#, tecarka -u#;
+ligtable chars.greek_vartheta: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_iota: skewchar kern 1u#;
+ligtable chars.greek_iota_turned: skewchar kern 1u#;
+ligtable chars.greek_kappa: skewchar kern 1u#;
+ligtable chars.greek_varkappa: skewchar kern 1.5u#;
+ligtable chars.greek_lambda: skewchar kern 1u#;
+ligtable chars.greek_lambda_bar: skewchar kern 1u#;
+ligtable chars.greek_lambda_slash: skewchar kern 1u#;
+ligtable chars.greek_lambda_curved: skewchar kern 1u#;
+ligtable chars.greek_mu: skewchar kern 1.5u#;
+ligtable chars.greek_mu_curved: skewchar kern 1.5u#;
+ligtable chars.greek_nu: skewchar kern .5u#, tecarka -2u#, lom kern -u#;
+ligtable chars.greek_xi: skewchar kern 2u#;
+ligtable chars.greek_pi: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_pi_curved: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_varpi: skewchar kern .5u#;
+ligtable chars.greek_rho: skewchar kern 1.5u#;
+ligtable chars.greek_varrho: skewchar kern 1.5u#;
+ligtable chars.greek_sigma: skewchar kern 1u#, tecarka -1.5u#;
+ligtable chars.greek_sigma_curved: skewchar kern 1u#, tecarka -1.5u#;
+ligtable chars.greek_varsigma: skewchar kern 1u#;
+ligtable chars.greek_tau: skewchar kern 1u#, tecarka -2u#, lom kern -u#;
+ligtable chars.greek_tau_curved: skewchar kern .5u#, tecarka -2u#, lom kern -u#;
+ligtable chars.greek_upsilon: skewchar kern .5u#;
+ligtable chars.greek_upsilon_curved: skewchar kern .5u#;
+ligtable chars.greek_phi: skewchar kern 2.5u#;
+ligtable chars.greek_phi_curved: skewchar kern 2.5u#;
+ligtable chars.greek_varphi: skewchar kern 2u#;
+ligtable chars.greek_varphi_curved: skewchar kern 2u#;
+ligtable chars.greek_chi: skewchar kern 1.5u#, tecarka -2u#;
+ligtable chars.greek_psi: skewchar kern 3u#;
+ligtable chars.greek_psi_curved: skewchar kern 3u#;
+ligtable chars.greek_omega: skewchar kern 1.5u#;
+ligtable chars.greek_varsampi: skewchar kern 2u#, tecarka -2u#, lom kern -.5u#;
+ligtable chars.greek_qoppa: skewchar kern 1u#;
+ligtable chars.greek_stigma: skewchar kern 1u#;
+
+ligtable chars.math_ell: skewchar kern 1.5u#, tecarka -u#;
+ligtable chars.math_weierstrass_p: skewchar kern 1u#;
+ligtable chars.math_partial: skewchar kern 3u#, tecarka -u#;
+
+ligtable chars.greek_Gamma: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.greek_Delta: skewchar kern 3u#;
+ligtable chars.greek_Theta: skewchar kern 2u#, tecarka -1.5u#;
+ligtable chars.greek_Lambda: skewchar kern 3u#;
+ligtable chars.greek_Xi: skewchar kern 2.5u#;
+ligtable chars.greek_Pi: skewchar kern 2u#, tecarka -u#;
+ligtable chars.greek_Sigma: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.greek_Upsilon: skewchar kern 1.5u#, tecarka -3u#, lom kern -1.5u#;
+ligtable chars.greek_Phi: skewchar kern 1.5u#, tecarka -2u#;
+ligtable chars.greek_Psi: skewchar kern 1u#, tecarka -2u#;
+ligtable chars.greek_Omega: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.greek_Heta: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_Digamma: skewchar kern 1u#, tecarka -3u#, lom kern -2u#;
+ligtable chars.greek_Qoppa: skewchar kern 1u#, tecarka -u#;
+ligtable chars.greek_Sampi: tecarka -u#;
+ligtable chars.greek_Varsampi: skewchar kern 1u#, tecarka -2u#;
+ligtable chars.greek_Stigma: skewchar kern 1u#, tecarka -u#;
+
+ligtable chars.numeral_zero: skewchar kern 2.5u#;
+ligtable chars.numeral_one: skewchar kern 2.5u#;
+ligtable chars.numeral_two: skewchar kern 2u#;
+ligtable chars.numeral_three: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.numeral_four: skewchar kern 3.5u#;
+ligtable chars.numeral_five: skewchar kern 2.5u#, tecarka -u#;
+ligtable chars.numeral_six: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.numeral_seven: skewchar kern 1.5u#, tecarka -4u#, lom kern -u#;
+ligtable chars.numeral_eight: skewchar kern 2u#, tecarka -.5u#;
+ligtable chars.numeral_nine: skewchar kern 2u#, tecarka -.5u#;
+
+ligtable lom: chars.latin_A kern -u#, chars.latin_J kern -u#, chars.latin_f kern -1.5u#, chars.greek_Delta kern -u#,
+ chars.greek_Lambda kern -u#, chars.greek_Sigma kern -.5u#, chars.numeral_four kern -u#;
bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmathma.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathma.mf
new file mode 100644
index 00000000000..d09206e11d5
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmathma.mf
@@ -0,0 +1,65 @@
+%Boisik driver file for additional math symbols
+mode_setup; font_setup;
+
+font_slant slant;
+input bsklist-ma;
+input bsksymbols;
+
+forsuffixes $= u, width_adj, cap_serif_fit, letter_fit,
+ body_height, cap_height, Acc_height, x_height, bar_height, comma_depth, com_height,
+ flare, cap_hair, alt_cap_hair, hair, stem, cap_stem, cap_curve, like_cap_hair, like_cap_stem, like_cap_curve,
+ cap_jut, beak_jut, beak, slab, cap_bar, dot_size,
+ o, apex_o: if known ss.$.#: $.#:=ss.$.#; fi endfor
+if known ss.fudge: fudge:=ss.fudge; fi;
+if known ss.square_dots: square_dots:=ss.square_dots; fi;
+font_setup;
+
+input bskletters-r;
+input bskletters-o;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+numeric skewchar; skewchar:=130;
+
+ligtable chars.latin_C_SS: skewchar kern u#;
+ligtable chars.latin_D_SS: skewchar kern -u#;
+ligtable chars.latin_J_SS: skewchar kern u#;
+ligtable chars.latin_K_SS: skewchar kern -.5u#;
+ligtable chars.latin_c_SS: skewchar kern u#;
+ligtable chars.latin_d_SS: skewchar kern u#;
+ligtable chars.latin_e_SS: skewchar kern u#;
+ligtable chars.latin_f_SS: skewchar kern u#;
+ligtable chars.latin_i_SS: skewchar kern .5u#;
+ligtable chars.latin_dotless_i_SS: skewchar kern .5u#;
+ligtable chars.latin_j_SS: skewchar kern u#;
+ligtable chars.latin_dotless_j_SS: skewchar kern u#;
+ligtable chars.latin_x_SS: skewchar kern .25u#;
+ligtable chars.latin_y_SS: skewchar kern .25u#;
+
+ligtable chars.greek_alpha_SS: skewchar kern .5u#;
+ligtable chars.greek_beta_SS: skewchar kern -.5u#;
+ligtable chars.greek_varbeta_SS: skewchar kern -.5u#;
+ligtable chars.greek_delta_SS: skewchar kern u#;
+ligtable chars.greek_epsilon_SS: skewchar kern u#;
+ligtable chars.greek_varepsilon_SS: skewchar kern u#;
+ligtable chars.greek_epsilon_turned_SS: skewchar kern -.5u#;
+ligtable chars.greek_iota_SS: skewchar kern -u#;
+ligtable chars.greek_iota_turned_SS: skewchar kern .5u#;
+ligtable chars.greek_lambda_SS: skewchar kern -2u#;
+ligtable chars.greek_nu_SS: skewchar kern .5u#;
+ligtable chars.greek_xi_SS: skewchar kern u#;
+ligtable chars.greek_pi_SS: skewchar kern .5u#;
+ligtable chars.greek_rho_SS: skewchar kern .5u#;
+ligtable chars.greek_varsigma_SS: skewchar kern .5u#;
+ligtable chars.greek_varphi_SS: skewchar kern 2u#;
+ligtable chars.greek_omega_SS: skewchar kern .5u#;
+ligtable chars.greek_stigma_SS: skewchar kern u#;
+
+ligtable chars.greek_Delta_SS: skewchar kern .25u#;
+ligtable chars.greek_Lambda_SS: skewchar kern .25u#;
+ligtable chars.greek_Psi_SS: skewchar kern .5u#;
+
+ligtable chars.numeral_four_SS: skewchar kern 2u#;
+ligtable chars.numeral_five_SS: skewchar kern u#;
+
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmathms.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathms.mf
new file mode 100644
index 00000000000..fc2c5eda0b4
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmathms.mf
@@ -0,0 +1,72 @@
+%Boisik driver file for math symbols
+mode_setup; font_setup;
+
+font_slant slant;
+
+input bsklist-ms;
+input bsksymbols;
+save chars; numeric chars[];
+
+if known pr.slant:
+ slant:=pr.slant;
+ currenttransform:=identity slanted slant yscaled aspect_ratio scaled granularity;
+else:
+ slant:=0;
+ currenttransform:=identity yscaled aspect_ratio scaled granularity;
+ fi;
+
+forsuffixes $= u, tiny, width_adj, cap_serif_fit, letter_fit,
+ body_height, cap_height, Acc_height, x_height, bar_height, comma_depth, com_height,
+ flare, cap_hair, alt_cap_hair, hair, stem, cap_stem, cap_curve, like_cap_hair, like_cap_stem, like_cap_curve,
+ cap_jut, beak_jut, beak, slab, cap_bar, dot_size,
+ o, apex_o: if known bb.$.#: $.#:=bb.$.#; fi endfor
+if known bb.fudge: fudge:=bb.fudge; fi;
+font_setup;
+
+input bsklist-bb;
+input bskletters-r;
+input bskletters-o;
+
+font_quad 15u#;
+font_x_height 159/36pt#;
+numeric skewchar; skewchar:=130;
+input bsklist-ms;
+
+ligtable chars.latin_C_BB: skewchar kern u#;
+ligtable chars.latin_D_BB: skewchar kern -u#;
+ligtable chars.latin_K_BB: skewchar kern -.5u#;
+ligtable chars.latin_c_BB: skewchar kern u#;
+ligtable chars.latin_e_BB: skewchar kern u#;
+ligtable chars.latin_f_BB: skewchar kern u#;
+ligtable chars.latin_j_BB: skewchar kern .5u#;
+ligtable chars.latin_x_BB: skewchar kern .5u#;
+ligtable chars.latin_y_BB: skewchar kern .5u#;
+
+ligtable chars.greek_alpha_BB: skewchar kern .5u#;
+ligtable chars.greek_delta_BB: skewchar kern u#;
+ligtable chars.greek_epsilon_BB: skewchar kern u#;
+ligtable chars.greek_varepsilon_BB: skewchar kern u#;
+ligtable chars.greek_epsilon_turned_BB: skewchar kern -.5u#;
+ligtable chars.greek_iota_BB: skewchar kern -u#;
+ligtable chars.greek_iota_turned_BB: skewchar kern .5u#;
+ligtable chars.greek_lambda_BB: skewchar kern -2u#;
+ligtable chars.greek_nu_BB: skewchar kern .5u#;
+ligtable chars.greek_xi_BB: skewchar kern u#;
+ligtable chars.greek_pi_BB: skewchar kern .5u#;
+ligtable chars.greek_rho_BB: skewchar kern .5u#;
+ligtable chars.greek_varsigma_BB: skewchar kern .5u#;
+ligtable chars.greek_varphi_BB: skewchar kern 2u#;
+ligtable chars.greek_psi_BB: skewchar kern u#;
+ligtable chars.greek_omega_BB: skewchar kern .5u#;
+ligtable chars.greek_stigma_BB: skewchar kern .5u#;
+
+ligtable chars.greek_Delta_BB: skewchar kern .25u#;
+ligtable chars.greek_Lambda_BB: skewchar kern .25u#;
+
+ligtable chars.numeral_four_BB: skewchar kern 2u#;
+ligtable chars.numeral_five_BB: skewchar kern u#;
+ligtable chars.numeral_seven_BB: skewchar kern u#;
+
+ligtable chars.sign_paragraph: skewchar kern u#;
+bye.
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
index da66c25853d..bf4f37d1d80 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmathsy.mf
@@ -5,13 +5,45 @@ input bsklist-sy;
input bskletters-o;
font_slant slant;
-slant:=0;
-currenttransform:=identity yscaled aspect_ratio scaled granularity;
+if known pr.slant:
+ slant:=pr.slant;
+ currenttransform:=identity slanted slant yscaled aspect_ratio scaled granularity;
+else:
+ slant:=0;
+ currenttransform:=identity yscaled aspect_ratio scaled granularity;
+ fi;
+
input bsksymbols;
-font_normal_space 5u#;
-font_normal_stretch 3u#; font_normal_shrink 2u#;
font_quad 15u#;
- font_extra_space 2u#;
font_x_height 159/36pt#;
+numeric skewchar; skewchar:=130;
+
+ligtable chars.math_Re: skewchar kern u#;
+ligtable chars.math_dalet: skewchar kern .5u#;
+ligtable chars.cal_Lambda: skewchar kern 4u#;
+ligtable chars.cal_Gamma: skewchar kern 2u#;
+ligtable "A": skewchar kern 4u#;
+ligtable "C": skewchar kern 2u#;
+ligtable "E": skewchar kern 2u#;
+ligtable "F": skewchar kern 2u#;
+ligtable "G": skewchar kern 2u#;
+ligtable "H": skewchar kern 2u#;
+ligtable "I": skewchar kern 2u#;
+ligtable "J": skewchar kern 2u#;
+ligtable "K": skewchar kern 1.5u#;
+ligtable "M": skewchar kern 2u#;
+ligtable "N": skewchar kern 2u#;
+ligtable "O": skewchar kern 2u#;
+ligtable "P": skewchar kern u#;
+ligtable "Q": skewchar kern 1.5u#;
+ligtable "R": skewchar kern u#;
+ligtable "S": skewchar kern 2u#;
+ligtable "T": skewchar kern 2u#;
+ligtable "U": skewchar kern 1.5u#;
+ligtable "V": skewchar kern 2u#;
+ligtable "W": skewchar kern 2u#;
+ligtable "X": skewchar kern u#;
+ligtable "Y": skewchar kern u#;
+ligtable "Z": skewchar kern u#;
bye.
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
index b8d892193d1..ec7029954e5 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmi10.mf
@@ -58,7 +58,7 @@ math_spread:=0; % extra openness of math symbols
superness:=1/sqrt2; % parameter for superellipses
superpull:=1/6; % extra openness inside bowls
-medieval:=true; %medieval numerals
+medieval:=false; %medieval numerals
monofig:=false; %should numerals have fixed width
bulbes:=false;
square_dots:=false; % should dots be square?
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmib10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmib10.mf
new file mode 100644
index 00000000000..4b14c63be7e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmib10.mf
@@ -0,0 +1,70 @@
+% Boisik Bold Math Italic 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMIB"; font_size 10pt#;
+
+u#:=21/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; % diameter of rounded corners
+hair#:=13/36pt#; % lowercase hairline breadth
+stem#:=27/36pt#; % lowercase stem breadth
+curve#:=31/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=30/36pt#;
+like_curve#:=40/36pt#;
+ess#:=34/36pt#; % breadth in middle of lowercase s
+dot_size#:=37/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=30/36pt#; % uppercase stem breadth
+cap_curve#:=38/36pt#; % uppercase curve breadth
+like_cap_hair#:=18/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=42/36pt#;
+cap_ess#:=41/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
+
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=false; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+boldmath:=true;
+
+generate bskmath % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskms10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskms10.mf
new file mode 100644
index 00000000000..fc2e7f55d1f
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskms10.mf
@@ -0,0 +1,89 @@
+% Boisik Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMS"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; bb.cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; bb.cap_curve#:=50/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathms % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmsb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmsb10.mf
new file mode 100644
index 00000000000..2b0b77f4b83
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmsb10.mf
@@ -0,0 +1,90 @@
+% Boisik Bold Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMSB"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; bb.tiny#:=12/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; bb.hair#:=13/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=40/36pt#; bb.cap_stem#:=48/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; bb.cap_curve#:=56/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+boldmath:=true;
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathms % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmsbsl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmsbsl10.mf
new file mode 100644
index 00000000000..23b51b0d992
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmsbsl10.mf
@@ -0,0 +1,90 @@
+% Boisik Slanted Bold Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMSBSL"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; bb.tiny#:=12/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; bb.hair#:=13/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=40/36pt#; bb.cap_stem#:=48/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; bb.cap_curve#:=56/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+boldmath:=true;
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathms % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskmssl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskmssl10.mf
new file mode 100644
index 00000000000..efb4d5ad66a
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskmssl10.mf
@@ -0,0 +1,89 @@
+% Boisik Slanted Math Symbols (AMS set) 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKMSSL"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; bb.cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; bb.cap_curve#:=50/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; pr.slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathms % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
index 2a9c0c6ff3b..afefae0c352 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskrb10.mf
@@ -38,7 +38,7 @@ like_cap_hair#:=21/36pt#;
like_cap_stem#:=45/36pt#;
like_cap_curve#:=53/36pt#;
cap_ess#:=46/36pt#; % breadth in middle of uppercase s
-rule_thickness#:=.6pt#; % thickness of lines in math symbols
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
jut#:=25/36pt#; % protrusion of lowercase serifs
cap_jut#:=30/36pt#; % protrusion of uppercase serifs
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
index 2685c40d298..44327e855c6 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bskroman.mf
@@ -9,7 +9,15 @@ input bskletters-r;
input bskletters-o;
input bsksymbols;
-input bskligtab;
+if (substring(0,5) of font_identifier_) <> "BSKRW":
+ input bskligtab;
+else:
+ ligtable chars.sign_hyphen: chars.sign_hyphen=: chars.sign_endash;
+ ligtable chars.sign_endash: chars.sign_hyphen=: chars.sign_emdash;
+ ligtable chars.polish_cross: "l" kern -9u#-2letter_fit#, "L" kern -8u#-2letter_fit#-(cap_serif_fit#-serif_fit#);
+ ligtable "!": "`" =: chars.sign_spanish_shriek;
+ ligtable "?": "`" =: chars.sign_spanish_query;
+fi
font_normal_space 5u#;
font_normal_stretch 3u#; font_normal_shrink 2u#;
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
index 67d243f3407..314bc0f0f88 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksy10.mf
@@ -52,7 +52,7 @@ ser_boule#:=0/36pt#;
o#:=4/36pt#; % amount of overshoot for curves
apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
-slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
fudge:=1; % factor applied to weights of heavy characters
math_spread:=0; % extra openness of math symbols
superness:=1/sqrt2; % parameter for superellipses
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksyb10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksyb10.mf
new file mode 100644
index 00000000000..18b8d63d3c6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksyb10.mf
@@ -0,0 +1,90 @@
+% Boisik Bold Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYB"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+boldmath:=true;
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathsy % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksybsl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksybsl10.mf
new file mode 100644
index 00000000000..ca0a937edd6
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksybsl10.mf
@@ -0,0 +1,89 @@
+% Boisik Slanted Bold Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYBSL"; font_size 10pt#;
+
+u#:=22/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=9/36pt#; % diameter of rounded corners
+hair#:=15/36pt#; % lowercase hairline breadth
+stem#:=32/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=15/36pt#;
+like_stem#:=32/36pt#;
+like_curve#:=40/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=41/36pt#; % diameter of dots
+cap_hair#:=16/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=18/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=40/36pt#; % uppercase stem breadth
+cap_curve#:=48/36pt#; % uppercase curve breadth
+like_cap_hair#:=16/36pt#;
+like_cap_stem#:=40/36pt#;
+like_cap_curve#:=48/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.7pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; pr.slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathsy % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
index d1b1db9aca7..b388ad27cf4 100644
--- a/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksymbols.mf
@@ -1,7 +1,9 @@
%Boisik symbols
numeric bourstem; bourstem:=1.5stem;
-numeric arrsize, arrwidth; arrsize=1.2arrwidth=3curve;
+numeric arrsize, arrwidth, dbf; arrsize=1.2arrwidth=if boldmath: 3.5 else:3\\ fi curve;
+compute_spread(.45x_height#,.55x_height#);
+dbf:=spread-tiny;
iff known chars.sign_parent_left:
bskchar "Left parenthesis";
@@ -38,7 +40,8 @@ pos1(hair,90); pos4(hair,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+hair*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+hair*left..cycle;
penlabels(1,2,3,4);
endchar;
@@ -51,13 +54,14 @@ pos1(hair,90); pos4(hair,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+hair*right
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+hair*right..cycle;
penlabels(1,2,3,4);
endchar;
iff known chars.sign_bracket_semantic_left:
bskchar "Left semantic bracket";
-beginchar(chars.sign_bracket_semantic_left,7u#,body_height#,paren_depth#); uni "non";
+beginchar(chars.sign_bracket_semantic_left,7u#,body_height#,paren_depth#); uni "0x27E6";
adjust_fit(0,0);
pickup tiny.nib;
pos1(hair,90); pos4(hair,270);
@@ -66,14 +70,15 @@ lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
y5=y1l; y6=y4l; x5=x6=.5[x1,x2l];
rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+hair*left
+ ---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l+hair*left..cycle;
infill obl(2l,5l,3l)---obl(3l,2l,6l)---obl(6l,3l,5l)---obl(5l,6l,2l)---cycle;
penlabels(1,2,3,4,5,6);
endchar;
iff known chars.sign_bracket_semantic_right:
bskchar "Right semantic bracket";
-beginchar(chars.sign_bracket_semantic_right,7u#,body_height#,paren_depth#); uni "non";
+beginchar(chars.sign_bracket_semantic_right,7u#,body_height#,paren_depth#); uni "0x27E7";
adjust_fit(0,0);
pickup tiny.nib;
pos1(hair,90); pos4(hair,270);
@@ -82,7 +87,8 @@ rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
y5=y1l; y6=y4l; x5=x6=.5[x1,x2l];
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+hair*right
+ ---obl(6r,4l,2l)---obl(5r,3l,1l)---z1l+hair*right..cycle;
infill obl(2l,5l,3l)---obl(3l,2l,6l)---obl(6l,3l,5l)---obl(5l,6l,2l)---cycle;
penlabels(1,2,3,4,5,6);
endchar;
@@ -98,8 +104,8 @@ lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
y5=y6=.5[y1,y4]; x5=x2l; x6=x1;
rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)
- ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+hair*left---obl(3l,4l,2l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l+hair*left..cycle;
penlabels(1,2,3,4,5,6);
endchar;
@@ -114,8 +120,44 @@ rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
y5=y6=.5[y1,y4]; x5=x2l; x6=x1;
lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)
- ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+hair*right---obl(3l,4l,2l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,3l,1l)---z1l+hair*right..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_bracket_antiquill_left:
+bskchar "Left bracket with antiquill";
+beginchar(chars.sign_bracket_antiquill_left,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(hair,270); pos6(hair,270);
+lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+y5=y6=.5[y1,y4]; x5=x2r; x6=.5u;
+rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y4l);
+oblu.quill:=3/4(x5-x6);
+filldraw z1r---obl(2r,1r,3r)---obl(5l,2r,6l).quill---z6l..z6r---obl(5r,6r,3r).quill
+ ---obl(3r,2r,4r)---z4r..z4l+hair*left---obl(3l,4l,2l)
+ ---obl(2l,3l,1l)---z1l+hair*left..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.sign_bracket_antiquill_right:
+bskchar "Right bracket with antiquill";
+beginchar(chars.sign_bracket_antiquill_right,5.5u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos4(hair,270);
+pos5(hair,270); pos6(hair,270);
+rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
+top y2r=top y1r=h; bot y3r=bot y4r=-d;
+y5=y6=.5[y1,y4]; x5=x2r; x6=w-.5u;
+lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y4l);
+oblu.quill:=3/4(x6-x5);
+filldraw z1r---obl(2r,1r,3r)---obl(5l,2r,6l).quill---z6l..z6r---obl(5r,6r,3r).quill
+ ---obl(3r,2r,4r)---z4r..z4l+hair*right---obl(3l,4l,2l)
+ ---obl(2l,3l,1l)---z1l+hair*right..cycle;
penlabels(1,2,3,4,5,6);
endchar;
@@ -129,6 +171,16 @@ y2=y1; x2=u+.5dot_size;
comma(1,dot_size,infinity,comma_depth); comma(2,dot_size,infinity,comma_depth);
endchar;
+iff known chars.sign_quotes_uni:
+bskchar "Quotes (for Unicode)";
+beginchar(chars.sign_quotes_uni,8.5u#,asc_height#,0); uni "0x201D";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-u-.5dot_size-hair; top y1=h-.5dot_size;
+y2=y1; x2=u+.5dot_size;
+comma(1,dot_size,infinity,comma_depth); comma(2,dot_size,infinity,comma_depth);
+endchar;
+
charscription(8.5u,asc_height,0)(
x1=w-u-.5dot_size; top y1=h-comma_depth;
y2=y1; x2=u+.5dot_size+hair;
@@ -189,6 +241,15 @@ lft x1=w-u-.5dot_size-hair; top y1=h-.5dot_size;
comma(1,dot_size,.9hair,comma_depth);
endchar;
+iff known chars.sign_aposthrope_uni:
+bskchar "Aposthrope (for Unicode)";
+beginchar(chars.sign_aposthrope_uni,4.5u#,asc_height#,0); uni "0x2019";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=w-u-.5dot_size-hair; top y1=h-.5dot_size;
+comma(1,dot_size,.9hair,comma_depth);
+endchar;
+
iff known chars.sign_aposthrope_reverse:
bskchar "Reverse aposthrope";
beginchar(chars.sign_aposthrope_reverse,4.5u#,asc_height#,0); uni "0x0060";
@@ -198,6 +259,24 @@ x1=.5w+.5hair; top y1=h-comma_depth;
ammoc(1,dot_size,.9hair,comma_depth);
endchar;
+iff known chars.sign_aposthrope_reverse_uni:
+bskchar "Reverse aposthrope (for Unicode)";
+beginchar(chars.sign_aposthrope_reverse_uni,4.5u#,asc_height#,0); uni "0x2018";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w+.5hair; top y1=h-comma_depth;
+ammoc(1,dot_size,.9hair,comma_depth);
+endchar;
+
+iff known chars.sign_aposthrope_turned_uni:
+bskchar "Turned aposthrope (for Unicode)";
+beginchar(chars.sign_aposthrope_turned_uni,4.5u#,asc_height#,0); uni "0x201B";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5w+.5hair; top y1=h-.5dot_size;
+turn_comma(1,dot_size,.9hair,comma_depth);
+endchar;
+
iff known chars.sign_comma:
bskchar "Comma";
beginchar(chars.sign_comma,4.5u#,dot_size#,comma_depth#); uni "0x002C";
@@ -286,6 +365,23 @@ pickup tiny.nib;
bot z1=(.5w,.5(h-d)); dot(1);
endchar;
+iff known chars.sign_leader_dot:
+bskchar "Dot leader";
+beginchar(chars.sign_leader_dot,6u#,dot_size#,0); uni "0x2024";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot z1=(.5w,.5h); dot(1);
+endchar;
+
+iff known chars.sign_leader_dots:
+bskchar "Two dot leader";
+beginchar(chars.sign_leader_dots,10.5u#,dot_size#,0); uni "0x2025";
+adjust_fit(0,0);
+pickup tiny.nib;
+bot y1=bot y2=.5h; .5[x1,x2]=.5w; x1=x2-x1;
+dot(1); dot(2);
+endchar;
+
iff known chars.sign_ellipsis:
bskchar "Ellipsis (horizontal)";
beginchar(chars.sign_ellipsis,16u#,dot_size#,0); uni "0x2026";
@@ -315,6 +411,147 @@ x1=x2=.5w; top y1=h-.5dot_size; bot y2=.5dot_size;
dot(1); dot(2);
endchar;
+iff known chars.math_ratio:
+bskchar "Ratio sign";
+beginchar(chars.math_ratio,5u#,v_center(x_height#)); uni "0x2236";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h-.5dot_size; bot y2=-d+.5dot_size;
+dot(1); dot(2);
+endchar;
+
+iff known chars.sign_punctation_two:
+bskchar "Two dot punctation";
+beginchar(chars.sign_punctation_two,4.5u#,cap_height#,0); uni "0x205A";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h-.5dot_size; bot y2=.5dot_size;
+dot(1); dot(2);
+endchar;
+
+iff known chars.sign_punctation_three:
+bskchar "Three dot punctation";
+beginchar(chars.sign_punctation_three,10u#,.5[x_height#,asc_height#],0); uni "0x2056";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=w-u-.5dot_size; x3=u+.5dot_size; y3=.5[y1,y2]=.5h; top y1=h-.5dot_size;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.sign_punctation_four:
+bskchar "Four dot punctation";
+beginchar(chars.sign_punctation_four,10u#,.5[x_height#,asc_height#],0); uni "0x2058";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-x2=u+.5dot_size; x3=x4=.5w; top y3=h-.5dot_size; .5[y3,y4]=.5h=y1=y2;
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.sign_mark_four:
+bskchar "Four dot mark";
+beginchar(chars.sign_mark_four,13u#,body_height#+rule_thickness#,desc_depth#+rule_thickness#); uni "0x205B";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=w-x2=u+.5dot_size; x3=x4=.5w; top y3=h-.5dot_size; .5[y3,y4]=.5[h,-d]=y1=y2;
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.sign_punctation_five:
+bskchar "Five dot punctation";
+beginchar(chars.sign_punctation_five,10u#,.5[x_height#,asc_height#],0); uni "0x2059";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=w-u-.5dot_size; x3=x4=u+.5dot_size; y3=y1; y2=y4; top y1=h-.5dot_size; .5[y1,y2]=.5h;
+z5=.5[z3,z2];
+dot(1); dot(2); dot(3); dot(4); dot(5);
+endchar;
+
+iff known chars.sign_punctation_cross_dot:
+bskchar "Dotted cross punctation";
+beginchar(chars.sign_punctation_cross_dot,12u#,.5[x_height#,asc_height#],0); uni "0x205C";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=.5[y9,y10]=.5h; y11=y9; y10=y12; top y9=h-dot_size;
+x3=x4=.5w; top y3=h; bot y4=-d;
+x9=x10=w-u-dot_size; x11=x12=u+dot_size;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+dot(9); dot(10); dot(11); dot(12);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.sign_tricolon:
+bskchar "Tricolon sign";
+beginchar(chars.sign_tricolon,4.5u#,asc_height#,0); uni "0x205D";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=.5w; top y1=h-.5dot_size; bot y3=-d+.5dot_size; y2=.5[y1,y3];
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.sign_fourcolon:
+bskchar "Fourcolon sign";
+beginchar(chars.sign_fourcolon,4.5u#,body_height#,0); uni "0x205E";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=x4=.5w; top y1=h-.5dot_size; bot y4=-d+.5dot_size; .5[y2,y3]=.5[y1,y4]; y2=.5[y1,y3];
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.math_triratio:
+bskchar "Triratio sign (triple colon)";
+beginchar(chars.math_triratio,5u#,v_center(1.5x_height#)); uni "0x2AF6";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=.5w; top y1=h-.5dot_size; bot y3=-d+.5dot_size; y2=.5[y1,y3];
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.math_proportion:
+bskchar "Proportion sign";
+beginchar(chars.math_proportion,9u#,v_center(x_height#)); uni "0x2237";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; x1=2u;
+top y1=top y3=h-.5dot_size; bot y2=bot y4=-d+.5dot_size;
+dot(1); dot(2); dot(3); dot(4);
+endchar;
+
+iff known chars.math_excess:
+bskchar "Excess sign";
+beginarithchar(chars.math_excess); uni "0x2239";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x1=x2=w-2u;
+.5[y1,y2]=y3=y4=math_axis; top y1-bot y2=x_height-dot_size;
+lft x3=u; rt x4=x1-dot_size-rule_thickness;
+filldraw bskrule(3,4,hair,hair);
+dot(1); dot(2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_proportion_geo:
+bskchar "Geometric proportion sign";
+beginarithchar(chars.math_proportion_geo); uni "0x223A";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x1=x2; x3=x4; .5[x1,x3]=.5w; x1=2u;
+y1=y3; y2=y4; .5[y1,y2]=y5=y6=math_axis; top y1-bot y2=x_height-dot_size;
+lft x5=u; rt x6=w-u;
+filldraw bskrule(5,6,hair,hair);
+dot(1); dot(2); dot(3); dot(4);
+penlabels(5,6);
+endchar;
+
iff known chars.math_ellipsis_vert:
bskchar "Vertical ellipsis";
beginchar(chars.math_ellipsis_vert,4.5u#,v_center(1.5x_height#)); uni "0x22EE";
@@ -344,6 +581,26 @@ y2=.5[y1,y3]=math_axis; y1-y2=5.75u;
dot(1); dot(2); dot(3);
endchar;
+iff known chars.math_therefore:
+bskchar "Therefore";
+beginchar(chars.math_therefore,13u#,asc_height#,0); uni "0x2234";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5w=.5[x1,x3]; lft x1=u+.5dot_size;
+y1=y3; bot y1=.5dot_size; z2-z1=(z3-z1) rotated 60;
+dot(1); dot(2); dot(3);
+endchar;
+
+iff known chars.math_because:
+bskchar "Because";
+beginchar(chars.math_because,13u#,asc_height#,0); uni "0x2235";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5w=.5[x1,x3]; lft x1=u+.5dot_size;
+y1=y3; bot y2=.5dot_size; z2-z1=(z3-z1) rotated -60;
+dot(1); dot(2); dot(3);
+endchar;
+
iff known chars.sign_tri_colon:
bskchar "Triangular colon";
beginchar(chars.sign_tri_colon,4.5u#,x_height#,0); uni "0x02D0";
@@ -381,6 +638,42 @@ x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
dot(1); comma(2,dot_size,.5hair,d);
endchar;
+iff known chars.math_semicolon_fat:
+bskchar "Fat white semicolon";
+beginchar(chars.math_semicolon_fat,4.5u#,x_height#,comma_depth#); uni "0x2A3E";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{ save dot_size; dot_size:=2.5u;
+x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
+dot(1); comma(2,dot_size,.5hair,d);
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z1;
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z2;
+}};
+endchar;
+
+iff known chars.math_semicolon_fat_big:
+bskchar "Fat big white semicolon";
+beginchar(chars.math_semicolon_fat_big,5.5u#,v_center(asc_height#)); uni "0x2A1F";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{ numeric old_comma; old_comma:=comma_depth;
+ save dot_size; dot_size:=3u; comma_depth:=1.5old_comma;
+x1=x2; x2=.5w-.5hair; top y1=h-.5dot_size; bot y2=-d+comma_depth;
+dot(1); comma(2,dot_size,hair,comma_depth);
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z1;
+infill fullcircle scaled (dot_size-rule_thickness+.5currentbreadth) shifted z2;
+}};
+endchar;
+
+iff known chars.sign_semicolon_rev:
+bskchar "Reversed semicolon";
+beginchar(chars.sign_semicolon_rev,4.5u#,x_height#,comma_depth#); uni "0x204F";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x2=.5w+.5hair; top y1=h-.5dot_size; bot y2=.5dot_size;
+dot(1); turn_comma(2,dot_size,.5hair,d);
+endchar;
+
iff known chars.sign_commacolon:
bskchar "Commacolon";
beginchar(chars.sign_commacolon,4.5u#,x_height#,comma_depth#); uni "non";
@@ -428,16 +721,32 @@ endchar;
iff known chars.sign_exclamation:
bskchar "Exclamation point";
-beginchar(chars.sign_exclamation,5u#+punct_fit#,asc_height#,0); uni "0x0021";
-adjust_fit(0,0);
+beginchar(chars.sign_exclamation,5u#,asc_height#,0); uni "0x0021";
+adjust_fit(punct_fit#,0);
pickup tiny.nib;
-bot z1=(.5w+.5punct_fit,.5dot_size); dot(1);
+bot z1=(.5w,.5dot_size); dot(1);
penpos2(dot_size,0); pos3(hair,0); x2=x3=x1;
y2=h-.5stem; bot y3=dot_size+stem; y3r:=y3r+.5hair;
filldraw z2l---z3l..{.5[z2,z2r]-z3r}z3r..{z2r-z3r}z2r..cycle;
penlabels(2,3);
endchar;
+iff known chars.sign_exclamation_double:
+bskchar "Double exclamation point";
+beginchar(chars.sign_exclamation_double,8u#,asc_height#,0); uni "0x203C";
+adjust_fit(0,0);
+pickup tiny.nib;
+penpos2(dot_size,0); pos3(hair,0);
+penpos5(dot_size,0); pos6(hair,0);
+bot y1=bot y4=.5dot_size; .5[x1,x4]=.5w; x1=2.5u;
+x2=x3=x1; x4=x5=x6;
+y2=y5=h-.5stem; bot y3=bot y6=dot_size+stem; y3r:=y6r:=y3r+.5hair;
+filldraw z2l---z3l..{.5[z2,z2r]-z3r}z3r..{z2r-z3r}z2r..cycle;
+filldraw z5l---z6l..{.5[z5,z5r]-z6r}z6r..{z5r-z6r}z5r..cycle;
+dot(1); dot(4);
+penlabels(2,3,4,5);
+endchar;
+
iff known chars.sign_spanish_shriek:
bskchar "Spanish open exclamation point";
beginchar(chars.sign_spanish_shriek,5u#,asc_height#-desc_depth#,desc_depth#); uni "0x00A1";
@@ -465,6 +774,49 @@ filldraw bskrule(4,3,hair,0);
penlabels(1,2,3,4);
endchar;
+iff known chars.math_equals_double:
+bskchar "Double equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_double,23u#,v_center(spread#+rule_thickness#)); uni "0x2A75";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=u; rt x6=w-u; x3=x1; x4=x2; x5=x7; x6=x8; .5[x2,x5]=.5w; x5-x2=2.5rule_thickness;
+y1=y2=y5=y6; y3=y4=y7=y8; .5[y1,y3]=math_axis; top y1r=h;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw bskrule(5,6,hair,0);
+filldraw bskrule(8,7,hair,0);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_equals_triple:
+bskchar "Triple equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_triple,32u#,v_center(spread#+rule_thickness#)); uni "0x2A76";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x1=u; rt x10=w-u; x3=x1; x4=x2; x5=x7; x6=x8; x9=x11; x10=x12;
+x5-x2=x9-x6=2.5rule_thickness; .5[x5,x6]=.5w; x2-x1=x6-x5;
+y1=y2=y5=y6=y9=y10; y3=y4=y7=y8=y11=y12; .5[y1,y3]=math_axis; top y1r=h;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw bskrule(5,6,hair,0);
+filldraw bskrule(8,7,hair,0);
+filldraw bskrule(9,10,hair,0);
+filldraw bskrule(12,11,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+endchar;
+
iff known chars.sign_circled_equals:
bskchar "Equals sign in circle";
compute_spread(.45x_height#,.55x_height#);
@@ -513,6 +865,435 @@ filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,2r).more---z2r
penlabels(1,2,3,4,5,6); labels(2ll,3ll,5rr,6ll,1',2',3',4',5',6',7',8');
endchar;
+iff known chars.sign_neq_vert:
+bskchar "Not equals sign (vertical)";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.sign_neq_vert,13u#,v_center(.6(body_height#+desc_depth#))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+top y5=h; bot y6=-d; x5=x6=.5w;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+z1'=whatever[z5l,z6l]=whatever[z1r,z2r];
+z2'=whatever[z5r,z6r]=whatever[z1r,z2r];
+z3'=whatever[z5r,z6r]=whatever[z1l,z2l];
+z4'=whatever[z5r,z6r]=whatever[z3r,z4r];
+z5'=whatever[z5r,z6r]=whatever[z3l,z4l];
+z6'=whatever[z5l,z6l]=whatever[z3l,z4l];
+z7'=whatever[z5l,z6l]=whatever[z3r,z4r];
+z8'=whatever[z5l,z6l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,2r)---z2r
+ ..z2ll---obl(3',2l,4')---obl(4',3',4r)---z4r..z4l
+ ---obl(5',4l,6r)---z6r..z6ll---obl(6',6l,3l)---z3ll
+ ..z3r---obl(7',3r,8')---obl(8',7',1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6); labels(2ll,3ll,5rr,6ll,1',2',3',4',5',6',7',8');
+endchar;
+
+iff known chars.math_equals_circle:
+bskchar "Equals circle sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_circle,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2257";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,270); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,180);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; bot y3l=-d;
+x5=x7=.5[x6,x8]=.5w; top y5l=h; bot y7l=top y1r+1.5rule_thickness; y6=y8=.5[y5,y7]; x8-x6=y5-y7;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw z5l{left}..{down}z6l..{right}z7l..{up}z8l..cycle;
+infill z5r{left}..{down}z6r..{right}z7r..{up}z8r..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_equals_triangle:
+bskchar "Equals sign with triangle";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_triangle,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x225C";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; bot y3l=-d;
+x7=.5[x5,x6]=.5w; x6-x5=1.5(y7-y5);
+bot y5=bot y6=top y1r+1.5rule_thickness; top y7=h+o;
+y5'=y6'=y5+(rule_thickness-currentbreadth);
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw obl(5,7,6)---obl(6,5,7)---obl(7,6,5)---cycle;
+oblu:=2oblu;
+infill obl(5',7',6')---obl(6',5',7')---obl(7',6',5')---cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_corresponds:
+bskchar "Corresponds to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_corresponds,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2258";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x9=u; x10+x9=w; x11=x9; x12=x10;
+y9=y10; y11=y12; .5[y9,y11]=math_axis; bot y11l=-d;
+x8=.5w; top y8=h-.5rule_thickness; y4=y9; y8-y4=.9(x2-x6);
+circle_points(rule_thickness);
+filldraw bskrule(9,10,hair,0);
+filldraw bskrule(12,11,hair,0);
+filldraw subpath(-2,2) of (draw_circle.l)..subpath(-2,2) of reverse (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_equals_corresponds:
+bskchar "Corresponds to (estimates) sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_corresponds,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2259";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; bot y3l=-d;
+x7=.5[x5,x6]=.5w; x6-x5=1.75(y7-y5);
+bot y5=bot y6=top y1r+1.5rule_thickness; top y7=h+o;
+y5'=y6'=y5;
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw z6---obl(7,6,5)---z5..z5'---obl(7',5',6')---z6'..cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_equiangular:
+bskchar "Equiangular to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equiangular,13u#,1.5spread#+2rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x225A";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; bot y3l=-d;
+x7=.5[x5,x6]=.5w; x6-x5=1.75(y7-y5);
+top y5=top y6=h-o; y7=top y1r+1.5rule_thickness-o;
+y5'=y6'=y5;
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+filldraw z6---obl(7,6,5)---z5..z5'---obl(7',5',6')---z6'..cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_equals_asterisk:
+bskchar "Equals-and-asterisk sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_asterisk,13u#,1.5spread#+3rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2A6E";
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+numeric vast; path p;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x2=u; x3+x2=w; x4=x2; x5=x3;
+y2=y3; y4=y5; .5[y2,y4]=math_axis; bot y4l=-d;
+z0=(.5w,.5[y2,h]+rule_thickness); vast=.8stem;
+pos1(1.3rule_thickness,0); x1=x0;
+top y1=h; p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+filldraw bskrule(2,3,hair,0);
+filldraw bskrule(5,4,hair,0);
+penlabels(1,2,3,4,5); labels(0);
+endchar;
+
+iff known chars.math_equals_star:
+bskchar "Equals-and-star sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_star,13u#,1.5spread#+3rule_thickness#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x225B";
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=u; x7+x6=w; x8=x6; x9=x7;
+y6=y7; y8=y9; .5[y6,y8]=math_axis; bot y8l=-d;
+z0=(.5w,.5[y6,h]+rule_thickness);
+x1=x0; top y1=h+apex_o; pos1(hair,0);
+forsuffixes i=2,3,4,5:
+ z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1));
+endfor
+forsuffixes i=11,12,13,14,15:
+ z[i]=z0; pos.i(curve,72(i-1));
+endfor
+ z[105]=whatever[z5l,z15l]=whatever[z1r,z11r];
+for i=1 upto 4:
+ z[100+i]=whatever[z[i].l,z[i+10].l]=whatever[z[i+1].r,z[i+11].r];
+endfor;
+filldraw z1l---obl(101,1l,2r)---z2r..z2l---obl(102,2l,3r)---z3r..z3l
+ ---obl(103,3l,4r)---z4r..z4l---obl(104,4l,5r)---z5r..z5l
+ ---obl(105,5l,1r)---z1r..cycle;
+filldraw bskrule(6,7,hair,0);
+filldraw bskrule(9,8,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9,11,12,13,14,15); labels(0,101,102,103,104,105);
+endchar;
+
+iff known chars.math_equals_dot:
+bskchar "Equals-and-dot sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot,13u#,.5spread#+2rule_thickness#+dot_size#+math_axis#,.5spread#+.5rule_thickness#-math_axis#); uni "0x2250";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+x5=.5w; top y5=h+o;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_below:
+bskchar "Equals-and-dot-below sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_below,13u#,.5spread#+.5rule_thickness#+dot_size#+math_axis#,.5spread#+2rule_thickness#+dot_size#-math_axis#); uni "0x2A66";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+x5=.5w; bot y5=-d-o;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dots:
+bskchar "Equals-and-dots sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dots,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2251";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; y1-y3=spread;
+.5[x5,x6]=.5w; top y5=h+o-.5dot_size; x5=x6;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_rl:
+bskchar "Dottted (right-left) equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_rl,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2253";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; y1-y3=spread;
+.5[x5,x6]=.5w; top y5=h+o-.5dot_size; lft x6=x3+.5dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_lr:
+bskchar "Dotted (left-right) equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_lr,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2252";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; y1-y3=spread;
+.5[x5,x6]=.5w; top y5=h+o-.5dot_size; lft x5=x1+.5dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_dot_ttbb:
+bskchar "Four-dotted top-bottom equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_dot_ttbb,13u#,v_center(2spread#+rule_thickness#+2dot_size#)); uni "0x2A77";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y7]=math_axis; y1-y3=spread; y7=y8;
+.5[x5,x6]=.5w; x6-x5=.5(x2-x1); x5=x7; x6=x8; top y5=top y6=h+o-.5dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6); dot(7); dot(8);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_colon_equals:
+bskchar "Equals sign after colon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_colon_equals,15u#+dot_size#,v_center(spread#+rule_thickness#)); uni "0x2254";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=3u+dot_size; rt x2=w-u; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; top y1r=h;
+x5=x6=u+.5dot_size; top y5-bot y6=x_height-dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_colon_double_equals:
+bskchar "Equals sign after double colon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_colon_double_equals,17u#+2dot_size#,v_center(spread#+rule_thickness#)); uni "0x2A74";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=5u+2dot_size; rt x2=w-u; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; top y1r=h;
+x5=x6=u+.5dot_size; top y5-bot y6=x_height-dot_size; x7=x8=.5[x5,x1]; y7=y5; y8=y6;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6); dot(7); dot(8);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_colon:
+bskchar "Equals sign before colon";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_colon,15u#+dot_size#,v_center(spread#+rule_thickness#)); uni "0x2255";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x1=u; rt x2=w-3u-dot_size; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y6]=math_axis; top y1r=h;
+x5=x6=w-u-.5dot_size; top y5-bot y6=x_height-dot_size;
+filldraw bskrule(1,2,hair,0);
+filldraw bskrule(4,3,hair,0);
+dot(5); dot(6);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_equals_parallel:
+bskchar "Equals and parallel to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_parallel,13u#,v_center(.75(body_height#+desc_depth#))); uni "0x22D5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+top y5=top y7=h; bot y6=bot y8=-d; x5=x6; x7=x8=x5+max(3curve,3u); .5[x5,x7]=.5w;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness); bskpoints(8,7,rule_thickness,rule_thickness);
+z1'=whatever[z5l,z6l]=whatever[z1r,z2r];
+z2'=whatever[z5r,z6r]=whatever[z1r,z2r];
+z3'=whatever[z5r,z6r]=whatever[z1l,z2l];
+z4'=whatever[z5r,z6r]=whatever[z3r,z4r];
+z5'=whatever[z5r,z6r]=whatever[z3l,z4l];
+z6'=whatever[z5l,z6l]=whatever[z3l,z4l];
+z7'=whatever[z5l,z6l]=whatever[z3r,z4r];
+z8'=whatever[z5l,z6l]=whatever[z1l,z2l];
+z9'=whatever[z7l,z8l]=whatever[z1r,z2r];
+z10'=whatever[z7r,z8r]=whatever[z1r,z2r];
+z11'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z12'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z13'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z14'=whatever[z7l,z8l]=whatever[z3l,z4l];
+z15'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z16'=whatever[z7l,z8l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,9')---obl(9',2',7l)---z7ll..z7r
+ ---obl(10',7r,2r)---z2r..z2ll---obl(11',2l,12')---obl(12',11',4r)---z4r..z4l
+ ---obl(13',4l,8r)---z8rr..z8l---obl(14',8l,5')---obl(5',4l,6r)---z6r..z6ll
+ ---obl(6',6l,3l)---z3ll..z3r---obl(7',3r,8')---obl(8',7',1l)---z1l..cycle;
+infill obl(3',16',4')---obl(4',3',15')---obl(15',4',16')---obl(16',15',3')---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+labels(2ll,3ll,5rr,6ll,,7ll,8rr,1',2',3',4',5',6',7',8',9',10',11',12',13',14',15',16');
+endchar;
+
+iff known chars.math_equals_sl_parallel:
+bskchar "Equals and slanted parallel to sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_equals_sl_parallel,13u#,v_center(.75(body_height#+desc_depth#))); uni "0x29E3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=spread;
+top y5=top y7=h; bot y6=bot y8=-d; x5-x6=x7-x8=x7-x5=max(3curve,3u); .5[x7,x6]=.5w;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness); bskpoints(8,7,rule_thickness,rule_thickness);
+z1'=whatever[z5l,z6l]=whatever[z1r,z2r];
+z2'=whatever[z5r,z6r]=whatever[z1r,z2r];
+z3'=whatever[z5r,z6r]=whatever[z1l,z2l];
+z4'=whatever[z5r,z6r]=whatever[z3r,z4r];
+z5'=whatever[z5r,z6r]=whatever[z3l,z4l];
+z6'=whatever[z5l,z6l]=whatever[z3l,z4l];
+z7'=whatever[z5l,z6l]=whatever[z3r,z4r];
+z8'=whatever[z5l,z6l]=whatever[z1l,z2l];
+z9'=whatever[z7l,z8l]=whatever[z1r,z2r];
+z10'=whatever[z7r,z8r]=whatever[z1r,z2r];
+z11'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z12'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z13'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z14'=whatever[z7l,z8l]=whatever[z3l,z4l];
+z15'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z16'=whatever[z7l,z8l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,9')---obl(9',2',7l)---z7ll..z7r
+ ---obl(10',7r,2r)---z2r..z2ll---obl(11',2l,12')---obl(12',11',4r)---z4r..z4l
+ ---obl(13',4l,8r)---z8rr..z8l---obl(14',8l,5')---obl(5',4l,6r)---z6r..z6ll
+ ---obl(6',6l,3l)---z3ll..z3r---obl(7',3r,8')---obl(8',7',1l)---z1l..cycle;
+infill obl(3',16',4')---obl(4',3',15')---obl(15',4',16')---obl(16',15',3')---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+labels(2ll,3ll,5rr,6ll,,7ll,8rr,1',2',3',4',5',6',7',8',9',10',11',12',13',14',15',16');
+endchar;
+
+iff known chars.math_bow:
+bskchar "Bow sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_bow,11u#,v_center(spread#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x8=.5w; top y8=h; y2=-d; y8-y4=.9(x2-x6);
+circle_points(rule_thickness);
+filldraw subpath(-2,2) of (draw_circle.l)..subpath(-2,2) of reverse (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(5,5',6,6',7,7',8,8');
+endchar;
+
iff known chars.sign_slash:
bskchar "Slash";
beginchar(chars.sign_slash,10u#,body_height#,desc_depth#); uni "0x002F";
@@ -525,6 +1306,38 @@ filldraw bskrule(2,1,rule_thickness,rule_thickness);
penlabels(1,2);
endchar;
+iff known chars.math_slash_double:
+bskchar "Double slash";
+beginchar(chars.math_slash_double,13u#,body_height#,desc_depth#); uni "0x2AFD";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(w-4u,h); bot lft z2=(u,-d);
+z3-z1=z4-z2=(3u,0);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+pos3(rule_thickness,angle(z2-z1)+90); pos4(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_slash_triple:
+bskchar "Triple slash operator";
+beginchar(chars.math_slash_triple,16u#,v_center(10/6dh#)); uni "0x2AFB";
+adjust_fit(0,0);
+pickup rule.nib;
+top rt z1=(w-7u,h); bot lft z2=(u,-d);
+z5-z3=z3-z1=z6-z4=z4-z2=(3u,0);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+pos3(rule_thickness,angle(z2-z1)+90); pos4(rule_thickness,angle(z2-z1)+90);
+pos5(rule_thickness,angle(z2-z1)+90); pos6(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6);
+endchar;
+
iff known chars.sign_backslash:
bskchar "Backslash sign";
beginchar(chars.sign_backslash,10u#,body_height#,desc_depth#); uni "0x005C";
@@ -537,6 +1350,18 @@ filldraw bskrule(2,1,rule_thickness,rule_thickness);
penlabels(1,2);
endchar;
+iff known chars.math_division_integer:
+bskchar "Integer division symbol";
+beginarithchar(chars.math_division_integer); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+top lft z1=(2u,x_height); bot y2=-o; x2=w-x1;
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
iff known chars.sign_slash_frac:
bskchar "Fraction slash";
beginchar(chars.sign_slash_frac,2u#,body_height#,paren_depth#); uni "0x2044";
@@ -549,6 +1374,127 @@ filldraw bskrule(2,1,rule_thickness,rule_thickness);
penlabels(1,2);
endchar;
+iff known chars.math_line_45:
+bskchar "45 degree angle line";
+beginchar(chars.math_line_45,asc_height#+asc_depth#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+bot y1=-d; .5[y1,y2]=math_axis; lft x1=0;
+z2=z1+whatever*dir45;
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_line_135:
+bskchar "135 degree angle line";
+beginchar(chars.math_line_135,asc_height#+asc_depth#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+bot y1=-d; .5[y1,y2]=math_axis; rt x1=w;
+z2=z1+whatever*dir135;
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_dijkstra:
+bskchar "Dijkstra choice";
+beginchar(chars.math_dijkstra,7u#,v_center(asc_height#)); uni "0x2AFE";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top y1=h; bot y2=-d; x1=x2=.5w;
+pickup tiny.nib;
+pos1(rule_thickness+4u,0); pos2(rule_thickness+4u,0);
+y1'r=y1'l=y1r-rule_thickness+currentbreadth;
+z1'=z1l+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l).more---obl(2'l,1'l,2'r)---obl(2'r,2'l,1'r).more---obl(1'r,2'r,1'l)---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_dijkstra_nary:
+bskchar "N-ary dijkstra choice";
+beginchar(chars.math_dijkstra_nary,8u#,v_center(10/6dh#)); uni "0x2AFF";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top y1=h; bot y2=-d; x1=x2=.5w;
+pickup tiny.nib;
+pos1(stem+4u,0); pos2(stem+4u,0);
+y1'r=y1'l=y1r-stem+currentbreadth;
+z1'=z1l+(stem-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(stem-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l).more---obl(2'l,1'l,2'r)---obl(2'r,2'l,1'r).more---obl(1'r,2'r,1'l)---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_slash_fat:
+bskchar "Fat slash";
+beginchar(chars.math_slash_fat,10u#,body_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top rt z1=(w+2u,h); bot lft z2=(3u,-d);
+pickup tiny.nib;
+pos1(rule_thickness+4u,0); pos2(rule_thickness+4u,0);
+y1'r=y1'l=y1r-rule_thickness+currentbreadth;
+z1'=z1l+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l).more---obl(2'l,1'l,2'r)---obl(2'r,2'l,1'r).more---obl(1'r,2'r,1'l)---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_backslash_fat:
+bskchar "Fat backslash sign";
+beginchar(chars.math_backslash_fat,10u#,body_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+oblu.more:=2oblu;
+pickup rule.nib;
+top lft z1=(-2u,h); bot rt z2=(w-3u,-d);
+pickup tiny.nib;
+pos1(rule_thickness+4u,0); pos2(rule_thickness+4u,0);
+y1'r=y1'l=y1r-rule_thickness+currentbreadth;
+z1'=z1l+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated -90);
+z1''=z1r+(rule_thickness-currentbreadth)*unitvector((z1-z2) rotated 90);
+y2'l=y2'r=y2+(y1l-y1'l);
+z1'r=z1'+whatever*unitvector(z1l-z2l); z1'l=z1''+whatever*unitvector(z1r-z2r);
+z2'l=z1'l+whatever*unitvector(z1l-z2l); z2'r=z1'r+whatever*unitvector(z1r-z2r);
+filldraw z1l---obl(2l,1l,2r)---obl(2r,2l,1r)---obl(1r,2r,1l)---cycle;
+infill obl(1'l,1'r,2'l)---obl(2'l,1'l,2'r).more---obl(2'r,2'l,1'r)---obl(1'r,2'r,1'l).more---cycle;
+penlabels(1,1',2,2');
+endchar;
+
+iff known chars.math_backslash_double:
+bskchar "Double backslash sign";
+beginchar(chars.math_backslash_double,10u#+max(3curve#,3u#),body_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup rule.nib;
+top lft z1=(u,h); bot rt z4=(w-u,-d);
+z3-z1=z4-z2=(max(3curve,3u),0);
+pickup tiny.nib;
+pos1(rule_thickness,angle(z2-z1)+90); pos2(rule_thickness,angle(z2-z1)+90);
+pos3(rule_thickness,angle(z2-z1)+90); pos4(rule_thickness,angle(z2-z1)+90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,rule_thickness,rule_thickness);
+penlabels(1,2,3,4);
+endchar;
+
iff known chars.sign_plus:
bskchar "Plus sign";
beginarithchar(chars.sign_plus); uni "0x002B";
@@ -567,6 +1513,268 @@ filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
penlabels(1,2,3,4); labels(5,6,7,8);
endchar;
+iff known chars.math_plus_semicircle_left:
+bskchar "Plus sign in left half circle";
+beginchar(chars.math_plus_semicircle_left,11u#,v_center(11u#)); uni "0x2A2D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+lft x6=u+.5rule_thickness; .5[x6,x2]=x11=x12=.5[x9,x10]=.5w+u; y8-y4=x2-x6;
+lft x9=3u; y2=y9=y10=.5[y11,y12]=math_axis; y11-y12=x10-x9;
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(4,8) of (draw_circle.l)..reverse subpath(4,8) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_plus_semicircle_right:
+bskchar "Plus sign in right half circle";
+beginchar(chars.math_plus_semicircle_right,11u#,v_center(11u#)); uni "0x2A2E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+rt x2=w-u-.5rule_thickness; .5[x6,x2]=x11=x12=.5[x9,x10]=.5w-u; y8-y4=x2-x6;
+lft x9=u; y2=y9=y10=.5[y11,y12]=math_axis; y11-y12=x10-x9;
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(0,4) of (draw_circle.l)..reverse subpath(0,4) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_plus_dot:
+bskchar "Plus sign with dot above";
+beginchar(chars.math_plus_dot,13u#,asc_height#,5.5u#-math_axis#); uni "0x2214";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=x9=.5w; top y3=5.5u+math_axis; bot y4=-d;
+if h-.5dot_size<top y3+rule_thickness: y9=h; else: bot y9=h-.5dot_size;fi
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+dot(9);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_dot_below:
+bskchar "Plus sign with dot below";
+beginchar(chars.math_plus_dot_below,13u#,5.5u#+math_axis#,.55desc_depth#); uni "0x2A25";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=x9=.5w; top y3=h; bot y4=math_axis-5.5u;
+if -d+.5dot_size>bot y4-rule_thickness: y9=-d; else: top y9=-d+.5dot_size;fi
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+dot(9);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_hat:
+bskchar "Plus sign with hat";
+beginchar(chars.math_plus_hat,13u#,asc_height#,5.5u#-math_axis#); uni "0x2A23";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=.5w; top y3=math_axis+5.5u; bot y4=-d;
+x10=x3+o;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+circumflex(9,10,11);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_tilde:
+bskchar "Plus sign with tilde";
+beginchar(chars.math_plus_tilde,13u#,asc_height#,5.5u#-math_axis#); uni "0x2A24";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=.5w; top y3=math_axis+5.5u; bot y4=-d;
+y9=y3+rule_thickness; y10=h; x9=3u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+tilde(9,10);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_tilde_below:
+bskchar "Plus sign with tilde below";
+beginchar(chars.math_plus_tilde_below,13u#,5.5u#+math_axis#,.55desc_depth#); uni "0x2A26";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=.5w; top y3=h; bot y4=math_axis-5.5u;
+y9=-d; y10=y4-rule_thickness; x9=3u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+tilde(9,10);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_triangle:
+bskchar "Plus sign with black triangle";
+beginarithchar(chars.math_plus_triangle); uni "0x2A28";
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+x3=x4=x11=.5[x9,x10]=.5w; top y3=h; bot y4=-d;
+x10-x9=2(y11-y9)=w-7u;
+y9=y10; y11=y1l;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+y12=y13=y9; x12=x4r; x13=x4l;
+filldraw z1l---obl(5,1l,9).more---obl(9,5,13)---tobl(13,9,4l)---z4l..z4rr---tobl(12,4rr,10)
+ ---obl(10,12,6)--obl(6,10,2l).more---z2ll..z2r---obl(7,2r,3r)---z3r..z3ll
+ ---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8,9,10,11,12,13);
+endchar;
+
+iff known chars.math_plus_through_circ:
+bskchar "Plus sign through circle";
+beginarithchar(chars.math_plus_through_circ); uni "non";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5w; x2-x6=y8-y4=w-6u;
+circle_points(rule_thickness);
+lft x9=u; rt x10=w-u; y9=y10=math_axis;
+x11=x12=x17=.5w; top y11=5.5u+math_axis; bot y12=-d;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9l---obl(13,9l,12l)---z12l;
+p3:=z12rr---obl(14,12r,10l)---z10ll;
+p4:=z10r---obl(15,10r,11r)---z11r;
+p5:=z11ll---obl(16,11l,9r)---z9rr;
+(tim0,tim1)=p0 intersectiontimes subpath(0,1) of p2;
+(tim2,tim3-1)=p0 intersectiontimes subpath(1,infinity) of p2;
+(tim4,tim5)=p0 intersectiontimes subpath(0,1) of p3;
+(tim6,tim7-1)=p0 intersectiontimes subpath(1,infinity) of p3;
+(tim8,tim9)=p0 intersectiontimes subpath(0,1) of p4;
+(tim10,tim11-1)=p0 intersectiontimes subpath(1,infinity) of p4;
+(tim12,tim13)=p0 intersectiontimes subpath(0,1) of p5;
+(tim14,tim15-1)=p0 intersectiontimes subpath(1,infinity) of p5;
+(tim16,tim17)=p1 intersectiontimes subpath(0,1) of p2;
+(tim18,tim19-1)=p1 intersectiontimes subpath(1,infinity) of p2;
+(tim20,tim21)=p1 intersectiontimes subpath(0,1) of p3;
+(tim22,tim23-1)=p1 intersectiontimes subpath(1,infinity) of p3;
+(tim24,tim25)=p1 intersectiontimes subpath(0,1) of p4;
+(tim26,tim27-1)=p1 intersectiontimes subpath(1,infinity) of p4;
+(tim28,tim29)=p1 intersectiontimes subpath(0,1) of p5;
+(tim30,tim31-1)=p1 intersectiontimes subpath(1,infinity) of p5;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..subpath(0,rundy(p3,tim5).zpet) of p3
+ ..subpath(rundy(p0,tim4),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p3,tim7),infinity) of p3
+ ..subpath(0,rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p4,tim11),infinity) of p4
+ ..subpath(0,rundy(p5,tim13).zpet) of p5
+ ..subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p5,tim15),infinity) of p5..cycle;
+infill subpath(rundy(p2,tim17),rundy(p2,tim19).zpet) of p2
+ ..subpath(rundy(p1,tim18).zpet,rundy(p1,tim16)) of p1..cycle;
+infill subpath(rundy(p3,tim21),rundy(p3,tim23).zpet) of p3
+ ..subpath(rundy(p1,tim22).zpet,rundy(p1,tim20)) of p1..cycle;
+infill subpath(rundy(p4,tim25),rundy(p4,tim27).zpet) of p4
+ ..subpath(rundy(p1,tim26).zpet,rundy(p1,tim24)) of p1..cycle;
+infill subpath(rundy(p5,tim29),rundy(p5,tim31).zpet) of p5
+ ..subpath(rundy(p1,tim30).zpet,rundy(p1,tim28)) of p1..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_plus_circ:
+bskchar "Plus sign with circle";
+beginchar(chars.math_plus_circ,13u#,asc_height#+2rule_thickness#,5.5u#-math_axis#); uni "0x2A22";
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+bot y4=top 5.5u+math_axis+rule_thickness; top y8=h; .5[x2,x6]=.5w; x2-x6=y8-y4;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+lft x9=u; rt x10=w-u; y9=y10=math_axis;
+x11=x12=x17=.5w; top y11=5.5u+math_axis; bot y12=-d;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
iff known chars.sign_tilde:
bskchar "Tilde";
beginchar(chars.sign_tilde,11u#,.3[asc_height#,x_height#],0); uni "0x007E";
@@ -586,6 +1794,16 @@ bot y0=0;
vlnka(0,1);
endchar;
+iff known chars.sign_tilde_dash:
+bskchar "Swung dash";
+beginchar(chars.sign_tilde_dash,13u#,x_height#,0); uni "0x2053";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=3curve;
+.5[y1,y0]=.5h;
+vlnka(0,1);
+endchar;
+
iff known chars.sign_asterisk:
bskchar "Asterisk";
beginchar(chars.sign_asterisk,8u#,body_height#,0); uni "0x002A";
@@ -605,6 +1823,79 @@ filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
labels(0); penlabels(1);
endchar;
+iff known chars.sign_asterisk_two:
+bskchar "Two asterisks";
+beginchar(chars.sign_asterisk_two,8u#,body_height#,0); uni "0x2051";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast; pair shf;
+path p;
+ast:=3/4stem; vast=.55stem;
+pos1(ast,0); x1=x0=.5w;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x0:
+ size:= (lft w-u-x0)/cosd(30)-.5ast; fi;
+y1=y0+size=h; shf:=(0,-y0+size);
+p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i) shifted shf .. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.sign_asterism:
+bskchar "Asterism";
+beginchar(chars.sign_asterism,15u#,body_height#,0); uni "0x2042";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+ast:=3/4stem; vast=.55stem; size=1/3x_height;
+pos1(ast,0); x1=x0=.5w; y1=y0+size=h;
+p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i) shifted (u-x0+size,-y0+size) .. endfor cycle;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i) shifted (w-u-x0-size,-y0+size) .. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.sign_asterisk_low:
+bskchar "Low asterisk";
+beginchar(chars.sign_asterisk_low,7.5u#,x_height#,0); uni "0x204E";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+ast:=3/4stem; vast=.55stem;
+size=1/3x_height;
+pos1(ast,0);
+x1=x0=.5w; y1-size=y0=size;
+p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.sign_flower_punct:
+bskchar "Flower punctation";
+beginchar(chars.sign_flower_punct,11u#,x_height#,0); uni "0x2055";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+z0=(.5w,.5h); vast=1.5u;
+pos0(hair,0); pos1(u,0); x1=x0;
+y1=h;
+p:=z0r{up}..z1r{dir120}..{dir-120}z1l...{down}z0l;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 45, 90, 135, 180, 225, 270, 315: p rotatedaround(z0,i).. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
iff known chars.sign_hash:
bskchar "Number sign";
beginchar(chars.sign_hash,13u#,body_height#,0); uni "0x0023";
@@ -631,7 +1922,72 @@ filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r..z
---obl(13,5l,14)---obl(14,13,7r)---z7r..z7l---obl(15,7l,4l)---z4rr..z4l
---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l..z8r
---obl(19,8r,20)---obl(20,19,6l)---z6l..z6r---obl(21,6r,1r)---z1ll..cycle;
-z0=(x10,y20); z0'=(x11,y13); z0''=(x16,y14); z0'''=(x17,y19);
+y0'=y0=y13; y0''=y0'''=y14;
+z0=whatever[z1r,z2r]; z0'=whatever[z3l,z4l]; z0''=whatever[z3l,z4l]; z0'''=whatever[z1r,z2r];
+infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21);
+endchar;
+
+iff known chars.math_hash:
+bskchar "Hash";
+beginchar(chars.math_hash,13u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+x1r-x3r=x2l-x4l=.35w; x1=x2; .5[x1,x3]=.5w;
+y1r=y3r=h; y2l=y4l=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u;
+y5=y6; y7=y8; .5[y5,y7]=.5(h-d); y5-y7=.55x_height;
+numeric theta; theta=180;
+pos1(rule_thickness,theta); pos2(rule_thickness,theta);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(2,1,rule_thickness,0); bskpoints(4,3,0,rule_thickness);
+bskpoints(6,5,rule_thickness,0); bskpoints(8,7,0,rule_thickness);
+y10=y11=y12=y5r; z10=whatever[z1r,z2r]; z11=whatever[z3l,z4l]; z12=whatever[z3r,z4r];
+y13=y5l; z13=whatever[z3r,z4r]; y14=y7r; z14=whatever[z3r,z4r];
+y15=y16=y17=y18=y7l; z15=whatever[z3r,z4r]; z16=whatever[z3l,z4l]; z17=whatever[z1r,z2r];
+y19=y8r; y20=y5l; z18=whatever[z2l,z1l]; z19=whatever[z1l,z2l]; z20=whatever[z1l,z2l];
+y21=y5r; z21=whatever[z1l,z2l];
+filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r..z5l
+ ---obl(13,5l,14)---obl(14,13,7r)---z7r..z7l---obl(15,7l,4l)---z4rr..z4l
+ ---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l..z8r
+ ---obl(19,8r,20)---obl(20,19,6l)---z6l..z6r---obl(21,6r,1r)---z1ll..cycle;
+y0'=y0=y13; y0''=y0'''=y14;
+z0=whatever[z1r,z2r]; z0'=whatever[z3l,z4l]; z0''=whatever[z3l,z4l]; z0'''=whatever[z1r,z2r];
+infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21);
+endchar;
+
+iff known chars.math_varhash:
+bskchar "Hash---alternative";
+beginchar(chars.math_varhash,13u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+x1r-x3r=x2l-x4l=.35w; rt x1r=w-u; lft x4l=u;
+y1r=y3r=h; y2l=y4l=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u;
+y5=y6; y7=y8; .5[y5,y7]=.5(h-d); y5-y7=.55x_height;
+numeric theta; theta=180;
+pos1(rule_thickness,theta); pos2(rule_thickness,theta);
+pos3(rule_thickness,theta); pos4(rule_thickness,theta);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(2,1,rule_thickness,0); bskpoints(4,3,0,rule_thickness);
+bskpoints(6,5,rule_thickness,0); bskpoints(8,7,0,rule_thickness);
+y10=y11=y12=y5r; z10=whatever[z1r,z2r]; z11=whatever[z3l,z4l]; z12=whatever[z3r,z4r];
+y13=y5l; z13=whatever[z3r,z4r]; y14=y7r; z14=whatever[z3r,z4r];
+y15=y16=y17=y18=y7l; z15=whatever[z3r,z4r]; z16=whatever[z3l,z4l]; z17=whatever[z1r,z2r];
+y19=y8r; y20=y5l; z18=whatever[z2l,z1l]; z19=whatever[z1l,z2l]; z20=whatever[z1l,z2l];
+y21=y5r; z21=whatever[z1l,z2l];
+filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r..z5l
+ ---obl(13,5l,14)---obl(14,13,7r)---z7r..z7l---obl(15,7l,4l)---z4rr..z4l
+ ---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l..z8r
+ ---obl(19,8r,20)---obl(20,19,6l)---z6l..z6r---obl(21,6r,1r)---z1ll..cycle;
+y0'=y0=y13; y0''=y0'''=y14;
+z0=whatever[z1r,z2r]; z0'=whatever[z3l,z4l]; z0''=whatever[z3l,z4l]; z0'''=whatever[z1r,z2r];
infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle;
penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21);
endchar;
@@ -751,7 +2107,7 @@ endchar;
iff known chars.sign_blank_space:
bskchar "Blank-space sign";
-beginchar(chars.sign_blank_space,9.5u#,.5x_height#,.5desc_depth#); uni "non";
+beginchar(chars.sign_blank_space,9.5u#,.5x_height#,.5desc_depth#); uni "0x2423";
adjust_fit(0,0);
pickup tiny.nib;
pos1(hair,0); pos2(hair,0); pos3(hair,0); pos4(hair,0);
@@ -889,6 +2245,23 @@ pickup tiny.nib;
usechar;
endchar;
+iff known chars.sign_double_hyphen_obl:
+bskchar "Oblique double hyphen";
+beginchar(chars.sign_double_hyphen_obl,6u#,x_height#,0); uni "0x2E17";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,90); pos2(stem,90);
+pos3(stem,90); pos4(stem,90);
+.5[y1r,y2r]=.6h;
+y1l-y3r=y2l-y4r=2(y2r-y1r)=.25x_height;
+rt x2=w-u;
+lft x1=.5u; x3=x1; x4=x2;
+filldraw bskrule(1,2,hair,hair);
+filldraw bskrule(3,4,hair,hair);
+penlabels(1,2,3,4);
+endchar;
+
iff known chars.sign_endash:
bskchar "En dash";
beginchar(chars.sign_endash,9u#,x_height#,0); uni "0x2013";
@@ -902,7 +2275,7 @@ penlabels(1,2); endchar;
iff known chars.sign_figdash:
bskchar "Figural dash";
-beginchar(chars.sign_figdash,figw(10u),x_height#,0); uni "0x2012";
+beginchar(chars.sign_figdash,9u#,x_height#,0); uni "0x2012";
adjust_fit(0,0);
pickup tiny.nib;
pos1(hair,90); pos2(hair,90);
@@ -944,6 +2317,17 @@ lft x1=0; rt x2=w;
filldraw bskrule(1,2,.5hair,.5hair);
penlabels(1,2); endchar;
+iff known chars.sign_quotdash:
+bskchar "Quotation dash";
+beginchar(chars.sign_quotdash,22u#,x_height#,0); uni "0x2015";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(hair,90); pos2(hair,90);
+top y1r=top y2r=2/3h;
+lft x1=0; rt x2=w;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2); endchar;
+
iff known chars.sign_underbar:
bskchar "Underbar sign";
beginchar(chars.sign_underbar,9u#,0,desc_depth#-.5rule_thickness#); uni "0x005F";
@@ -956,6 +2340,32 @@ filldraw bskrule(1,2,.5hair,.5hair);
penlabels(1,2);
endchar;
+iff known chars.sign_underbar_double:
+bskchar "Double underbar sign";
+beginchar(chars.sign_underbar_double,9u#,0,desc_depth#-.5rule_thickness#); uni "0x2017";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+top y1r=top y2r=2/3h; y3=y4; y3-y1=2.5rule_thickness;
+lft x1=lft x3=0; x2=x4=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+filldraw bskrule(3,4,.5hair,.5hair);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.sign_overbar:
+bskchar "Overbar sign";
+beginchar(chars.sign_overbar,9u#,body_height#,0); uni "0x203E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+top y1r=top y2r=h;
+lft x1=0; x2=w-x1;
+filldraw bskrule(1,2,.5hair,.5hair);
+penlabels(1,2);
+endchar;
+
iff known chars.latin_grave:
bskchar "Grave accent";
beginchar(chars.latin_grave,6u#,asc_height#,0); uni "0x0060";
@@ -1073,6 +2483,60 @@ x2=w-u; x0=u;
breve(0,1,2);
endchar;
+iff known chars.sign_undertie:
+bskchar "Undertie";
+beginchar(chars.sign_undertie,11u#,0,.75desc_depth#); uni "0x203F";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5[x0,x2]=.5w; y0=y2=h-rule_thickness; y1l=-d;
+pos0(hair,10); pos2(hair,0); pos1(.75[hair,stem],90);
+x2-x0=w-2u;
+y2r:=y2r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+penlabels(0,1,2);
+endchar;
+
+iff known chars.sign_undertie_inv:
+bskchar "Inverted undertie";
+beginchar(chars.sign_undertie_inv,11u#,0,.75desc_depth#); uni "0x2054";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5[x0,x2]=.5w; y1l=h-rule_thickness; y0=y2=-d;
+pos0(hair,-10); pos2(hair,0); pos1(.75[hair,stem],270);
+x2-x0=w-2u;
+y2r:=y2r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+penlabels(0,1,2);
+endchar;
+
+iff known chars.sign_tie:
+bskchar "Character tie";
+beginchar(chars.sign_tie,11u#,body_height#,0); uni "0x2040";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=.5[x0,x2]=.5w; y1l=h; y0=y2=1/2[x_height,top y1];
+pos0(hair,-10); pos2(hair,0); pos1(.75[hair,stem],270);
+x2-x0=w-2u;
+y2r:=y2r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+penlabels(0,1,2);
+endchar;
+
+iff known chars.sign_closeup:
+bskchar "Close up sign";
+beginchar(chars.sign_closeup,11u#,1/3[x_height#,asc_height#],0); uni "0x2050";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(hair,10); pos2(hair,0); pos1(.75[hair,stem],90);
+pos3(hair,-10); pos5(hair,0); pos4(.75[hair,stem],270);
+x1=.5[x0,x2]=x4=.5[x3,x5]=.5w; y0=y2; y1l=-d; y4l=h; y3=y5; .5[y0,y3]=.5[y1,y4]; y5-y2=3rule_thickness+tiny;
+x2-x0=x5-x3=w-2u;
+y2r:=y2r-.5tiny; y5r:=y5r-.5tiny;
+filldraw z0l..z1l..z2r--z2l..z1r..z0r--cycle;
+filldraw z3l..z4l..z5r--z5l..z4r..z3r--cycle;
+penlabels(0,1,2,3,4,5);
+endchar;
+
iff known chars.latin_inverted_breve:
bskchar "Inverted breve accent";
beginchar(chars.latin_inverted_breve,7u#,asc_height#,0); uni "non";
@@ -1280,6 +2744,47 @@ filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
penlabels(1,2,3,4);
endchar;
+iff known chars.math_assertion:
+bskchar "Assertion sign";
+beginchar(chars.math_assertion,8u#,asc_height#,0); uni "0x22A6";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=u; rt x4=w-u; x3=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
+ z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_left_neg:
+bskchar "Negated left turnstile";
+beginchar(chars.math_lattice_left_neg,13u#,asc_height#,0); uni "0x22AC";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=2u; rt x4=w-u; x3=x2r;
+bot y5=-d; top y6=h; lft x5=.5u; x6=w-2u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x1'l=x1'r=x1r; z1'l=whatever[z5l,z6l]; z1'r=whatever[z5r,z6r];
+x2'l=x2'r=x1l; z2'l=whatever[z5l,z6l]; z2'r=whatever[z5r,z6r];
+y3'l=y3'r=y3r; z3'l=whatever[z5l,z6l]; z3'r=whatever[z5r,z6r];
+y4'l=y4'r=y3l; z4'l=whatever[z5l,z6l]; z4'r=whatever[z5r,z6r];
+filldraw z1rr---obl(1'r,1r,4'r)---obl(4'r,1'r,4l)---z4ll..z4r
+ ---obl(3'r,4r,6r)---z6r..z6ll---obl(3'l,6l,3r)---obl(3r,4r,2r)
+ ---z2r..z2ll---obl(2'l,2ll,5l)---z5l..z5rr---tobl(2'r,5rr,1l)---z1l..cycle;
+infill obl(3l,4'l,1'l)---obl(1'l,3l,4'l)---obl(4'l,1'l,3l)---cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6);
+endchar;
+
iff known chars.math_lattice_right:
bskchar "Right turnstile";
beginchar(chars.math_lattice_right,12u#,asc_height#,0); uni "0x22A3";
@@ -1296,6 +2801,38 @@ filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
penlabels(1,2,3,4);
endchar;
+iff known chars.math_lattice_right_short:
+bskchar "Short right turnstile";
+beginchar(chars.math_lattice_right_short,8u#,asc_height#,0); uni "0x2ADE";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+rt x1r=rt x2r=w-u; lft x4=u; x3=x2l;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_intercalate:
+bskchar "Intercalate";
+beginchar(chars.math_intercalate,9u#,asc_height#,0); uni "0x22BA";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+top y1r=top y2r=h; y3=y1l; bot y4=-d;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
iff known chars.math_lattice_top:
bskchar "Lattice top";
beginchar(chars.math_lattice_top,14u#,asc_height#,0); uni "0x22A4";
@@ -1312,6 +2849,103 @@ filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
penlabels(1,2,3,4);
endchar;
+iff known chars.math_lattice_top_short:
+bskchar "Short lattice top";
+beginchar(chars.math_lattice_top_short,14u#,x_height#,0); uni "0x2ADF";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+top y1r=top y2r=h; y3=y1l; bot y4=-d;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_top_short_overbar:
+bskchar "Short lattice top with overbar";
+beginchar(chars.math_lattice_top_short_overbar,14u#,.8asc_height#+rule_thickness#,0); uni "0x2AE7";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1r=top y2r=x_height; y3=y1l; bot y4=-d; top y5r=top y6r=h;
+x3=x4=.5[x1,x2]; lft x1=lft x5=u; rt x2=rt x6=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_lattice_top_double:
+bskchar "Double lattice top";
+beginchar(chars.math_lattice_top_double,14u#,asc_height#,0); uni "0x2AEA";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+top y1r=top y2r=h; y3=y5=y1l; bot y4=bot y6=-d;
+x3=x4; x5=x6; .5[x3,x5]=.5w; x5-x3=4u; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(5,6,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(5r,2l,6r)---z6r..z6ll---obl(5l,6l,3r)
+ ---obl(3r,5l,4r)---z4r..z4ll---obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_lattice_top_short_bottom:
+bskchar "Short lattice top above short lattice bottom";
+beginchar(chars.math_lattice_top_short_bottom,14u#,v_center(2x_height#+2rule_thickness#)); uni "0x2AE9";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,270); pos6(rule_thickness,270);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+top y1r=top y2r=math_axis-rule_thickness; y3=y1l; bot y4=-d;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+bot y5r=bot y6r=math_axis+rule_thickness; y7=y5l; top y8=h;
+x7=x8=.5[x5,x6]; lft x5=u; rt x6=w-u;
+bskpoints(7,8,hair,0); bskpoints(5,6,hair,hair);
+filldraw z5rr---z6r..z6ll---obl(7r,6l,8r)---z8r..z8ll---
+ obl(7l,8l,5l)---z5l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_top_neg:
+bskchar "Negated lattice top";
+beginchar(chars.math_lattice_top_neg,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu; oblu.more:=3f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+top y1r=top y2r=h; y3=y1l; bot y4=-d;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bot y5=-d; top y6=y2l-rule_thickness; x6=w-2u; .5[x5,x6]=x4;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+x6'l=x6'r=x4r; x5'l=x5'r=x4l;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---obl(6'l,3r,6ll)---z6ll..z6r
+ ---obl(6'r,6r,4r).more---z4r..z4ll---obl(5'r,4l,5r)---z5rr..z5l
+ ---obl(5'l,5l,3l).more---obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,5',6,6'); labels(1rr,5rr,6ll);
+endchar;
+
iff known chars.math_lattice_bottom:
bskchar "Lattice bottom";
beginchar(chars.math_lattice_bottom,14u#,asc_height#,0); uni "0x22A5";
@@ -1328,6 +2962,386 @@ filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
penlabels(1,2,3,4);
endchar;
+iff known chars.math_lattice_bottom_short:
+bskchar "Short lattice bottom";
+beginchar(chars.math_lattice_bottom_short,14u#,x_height#,0); uni "0x2AE0";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,270); pos2(rule_thickness,270);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bot y1r=bot y2r=-d; y3=y1l; top y4=h;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_bottom_short_underbar:
+bskchar "Short lattice bottom with underbar";
+beginchar(chars.math_lattice_bottom_short_underbar,14u#,.8asc_height#+rule_thickness#,0); uni "0x2AE8";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,270); pos2(rule_thickness,270);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1r=bot y2r=-d+rule_thickness+(.8asc_height-x_height); y3=y1l; top y4=h;
+bot y5l=bot y6l=-d;
+x3=x4=.5[x1,x2]; lft x1=lft x5=u; rt x2=rt x6=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_perpendicular:
+bskchar "Perpendicular";
+beginchar(chars.math_perpendicular,13u#,asc_height#,0); uni "0x27C2";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,270); pos2(rule_thickness,270);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bot y1r=bot y2r=-d; y3=y1l; top y4=h;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---z4r..z4ll---
+ obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lattice_bottom_neg:
+bskchar "Negated lattice bottom";
+beginchar(chars.math_lattice_bottom_neg,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu; oblu.more:=3f_obl;
+pos1(rule_thickness,270); pos2(rule_thickness,270);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bot y1r=bot y2r=-d; y3=y1l; top y4=h;
+x3=x4=.5[x1,x2]; lft x1=u; rt x2=w-u;
+bot y5=y1l+rule_thickness; top y6=h; x6=w-2u; .5[x5,x6]=x4;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+x6'l=x6'r=x4r; x5'l=x5'r=x4l;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1rr---z2r..z2ll---obl(3r,2l,4r)---obl(6'r,3r,6r)---z6r..z6ll
+ ---obl(6'l,6l,4r).more---z4r..z4ll---obl(5'l,4l,5l)---z5l..z5rr
+ ---obl(5'r,5r,3l).more---obl(3l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,5',6,6'); labels(1rr,5rr,6ll);
+endchar;
+
+iff known chars.math_forces:
+bskchar "Forces";
+beginchar(chars.math_forces,12u#,asc_height#,0); uni "0x22A9";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=4u; rt x4=w-u; x3=x2r;
+lft x5l=lft x6l=u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
+ z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_forces_through:
+bskchar "Forces with bar through";
+beginchar(chars.math_forces_through,12u#,asc_height#,0); uni "0x2AE6";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,90); pos4'(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y3'=y4=y4'=.5[y1,y2];
+lft x1l=lft x2l=4u; rt x4=w-u; x3=x2r; x3'=x1l; x4'=x5r;
+lft x5l=lft x6l=u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---z2r..z2ll
+ ---obl(3'r,2l,4'r)---obl(4'r,3'r,6r)---z6r..z6ll---z5l..z5rr
+ ---obl(4'l,5r,3'l)---obl(3'l,4'l,1l)---z1l..cycle;
+penlabels(1,2,3,3',4,5,6);
+endchar;
+
+iff known chars.math_forces_neg:
+bskchar "Negated forces";
+beginchar(chars.math_forces_neg,13u#,asc_height#,0); uni "0x22AE";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu; oblu.more:=3f_obl;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=5u; rt x4=w-u; x3=x2r;
+lft x5l=lft x6l=2u; y5=y1; y6=y2;
+bot y7=-d; top y8=h; lft x7=.5u; x8=w-2u;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+x1'l=x1'r=x1l; z1'l=whatever[z7l,z8l]; z1'r=whatever[z7r,z8r];
+y2'l=y2'r=y3r; z2'l=whatever[z7l,z8l]; z2'r=whatever[z7r,z8r];
+x3'l=x3'r=x5r; z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+x4'l=x4'r=x5l; z4'l=whatever[z7l,z8l]; z4'r=whatever[z7r,z8r];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(2'r,4r,8r).more---z8r..z8ll
+ ---z2'l+oblu.more*unitvector(z8-z7)..z3l+oblu.more*up---z2r..z2ll---obl(1'l,2l,3'l)
+ ---obl(3'l,2'l,6r).more---z6r..z6ll---obl(4'l,6l,7l)---z7l..z7rr---tobl(4'r,7rr,5l)
+ ---z5l..z5rr---obl(3'r,5r,1'r)---obl(1'r,3'r,1l)---z1l..cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6,7,8);
+endchar;
+
+iff known chars.math_forces_reversed:
+bskchar "Reversed forces";
+beginchar(chars.math_forces_reversed,12u#,asc_height#,0); uni "0x2AE3";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+rt x1l=rt x2l=w-4u; lft x4=u; x3=x2r;
+rt x5l=rt x6l=w-u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
+ z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_forces_bar:
+bskchar "Forces with extra bar";
+beginchar(chars.math_forces_bar,15u#,asc_height#,0); uni "0x22AA";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+lft x1l=lft x2l=7u; rt x4=w-u; x3=x2r;
+lft x5l=lft x6l=u; y5=y7=y1; y6=y8=y2;
+x7=.5[x5,x1]; x8=.5[x6,x2];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
+ z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+filldraw bskrule(7,8,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_forces_bar_reversed:
+bskchar "Reversed forces with extra bar";
+beginchar(chars.math_forces_bar_reversed,15u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+pos7(rule_thickness,180); pos8(rule_thickness,180);
+bot y1=-d; top y2=h; y3=y4=.5[y1,y2];
+rt x1l=rt x2l=w-7u; lft x4=u; x3=x2r;
+rt x5l=rt x6l=w-u; y5=y7=y1; y6=y8=y2;
+x7=.5[x5,x1]; x8=.5[x6,x2];
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)---
+ z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+filldraw bskrule(7,8,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_forces_hbar:
+bskchar "Forces with extra horizontal bar";
+beginchar(chars.math_forces_hbar,13u#,asc_height#,0); uni "0x22AB";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y7=y8; .5[y3,y7]=.5[y1,y2]; y7-y3=.55x_height;
+lft x1l=lft x2l=5u; rt x4=rt x8=w-u; x3=x7=x2r;
+lft x5l=lft x6l=2u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(7,8,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,7l)---obl(7l,3r,8l)---z8ll
+ ..z8r---obl(7r,8r,2r)---z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_forces_hbar_neg:
+bskchar "Negated forces with extra horizontal bar";
+beginchar(chars.math_forces_hbar_neg,13u#,asc_height#,0); uni "0x22AF";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y7=y8; .5[y3,y7]=.5[y1,y2]; y7-y3=.55x_height;
+lft x1l=lft x2l=5u; rt x4=rt x8=w-u; x3=x7=x2r;
+lft x5l=lft x6l=2u; y5=y1; y6=y2;
+bot y9=-d; top y10=h; lft x9=.5u; x10=w-2u;
+pos9(rule_thickness,angle(z9-z10)+90); pos10(rule_thickness,angle(z9-z10)+90);
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+bskpoints(9,10,rule_thickness,rule_thickness);
+x1'l=x1'r=x1r; z1'l=whatever[z9l,z10l]; z1'r=whatever[z9r,z10r];
+y2'l=y2'r=y7l; z2'l=whatever[z9l,z10l]; z2'r=whatever[z9r,z10r];
+y3'l=y3'r=y7r; z3'l=whatever[z9l,z10l]; z3'r=whatever[z9r,z10r];
+x4'l=x4'r=x1l; z4'l=whatever[z9l,z10l]; z4'r=whatever[z9r,z10r];
+x5'l=x5'r=x5r; z5'l=whatever[z9l,z10l]; z5'r=whatever[z9r,z10r];
+x6'l=x6'r=x5l; z6'l=whatever[z9l,z10l]; z6'r=whatever[z9r,z10r];
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---z3r+oblu*right..z1'r+oblu*unitvector(z10-z9)
+ ---obl(2'r,1'r,8l)---z8ll..z8r---obl(3'r,8r,10r)---z10r..z10ll
+ ---ifobl(3'l,7r,10l,2r,,)---z2r..z2ll---obl(4'l,2l,5'l)---obl(5'l,4'l,6r)
+ ---z6r..z6ll---obl(6'l,6l,9l)---z9l..z9rr---tobl(6'r,9rr,5l)---z5l..z5rr
+ ---obl(5'r,5r,4'r)---obl(4'r,5'r,1l)---z1l..cycle;
+oblu:=1.75f_obl;
+infill ifobl(7l,1'l,3'l,3'l,,)---obl(3'l,1'l,7l)---cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6,6',7,8,9,10);
+endchar;
+
+iff known chars.math_forces_hbar_reversed:
+bskchar "Reversed forces with extra horizontal bar";
+beginchar(chars.math_forces_hbar_reversed,13u#,asc_height#,0); uni "0x2AE5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y7=y8; .5[y3,y7]=.5[y1,y2]; y7-y3=.55x_height;
+rt x1l=rt x2l=w-5u; lft x4=lft x8=u; x3=x7=x2r;
+rt x5l=rt x6l=w-2u; y5=y1; y6=y2;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair);
+bskpoints(7,8,hair,hair);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,7l)---obl(7l,3r,8l)---z8ll
+ ..z8r---obl(7r,8r,2r)---z2r..z2ll---z1l..cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_models:
+bskchar "Models";
+beginchar(chars.math_models,8u#,asc_height#,0); uni "0x22A7";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=u; rt x4=rt x6=w-u; x3=x5=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_models_bar:
+bskchar "Models with hbar";
+beginchar(chars.math_models_bar,8u#,asc_height#,0); uni "0x2AE2";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; y7=y8; .5[y7,y3]=y5=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=u; rt x4=rt x6=rt x8=w-u; x3=x5=x7=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0); bskpoints(7,8,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,7l)
+ ---obl(7l,5r,8l)---z8ll..z8r---obl(7r,8r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_satisfies:
+bskchar "Satisfies";
+beginchar(chars.math_satisfies,12u#,asc_height#,0); uni "0x22A8";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=u; rt x4=rt x6=w-u; x3=x5=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_satisfies_neg:
+bskchar "Negated satisfies";
+beginchar(chars.math_satisfies_neg,13u#,asc_height#,0); uni "0x22AD";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+lft x1l=lft x2l=2u; rt x4=rt x6=w-u; x3=x5=x2r;
+bot y7=-d; top y8=h; lft x7=.5u; x8=w-2u;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+bskpoints(7,8,rule_thickness,rule_thickness);
+x1'l=x1'r=x1r; z1'l=whatever[z7l,z8l]; z1'r=whatever[z7r,z8r];
+y2'l=y2'r=y3l; z2'l=whatever[z7l,z8l]; z2'r=whatever[z7r,z8r];
+y3'l=y3'r=y3r; z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+y4'l=y4'r=y5l; z4'l=whatever[z7l,z8l]; z4'r=whatever[z7r,z8r];
+y5'l=y5'r=y5r; z5'l=whatever[z7l,z8l]; z5'r=whatever[z7r,z8r];
+x6'l=x6'r=x1l; z6'l=whatever[z7l,z8l]; z6'r=whatever[z7r,z8r];
+filldraw z1rr---obl(1'r,1r,2'r)---obl(2'r,1'r,4l)---z4ll..z4r---obl(3'r,4r,4'r)
+ ---obl(4'r,3'r,6l)---z6ll..z6r---obl(5'r,6r,8r)---z8r..z8ll---obl(5'l,8l,5r)
+ ---obl(5r,5'l,2r)---z2r..z2ll---obl(6'l,2l,7l)---z7l..z7rr---tobl(6'r,7rr,1l)
+ ---z1l..cycle;
+infill obl(5l,4'l,3r)---z3r+oblu*up..z3'l+oblu*unitvector(z8-z7)---obl(4'l,3'l,5l)---cycle;
+penlabels(1,1',2,2',3,3',4,4',5,5',6,7,7',8);
+endchar;
+
+iff known chars.math_satisfies_reversed:
+bskchar "Reversed satisfies";
+beginchar(chars.math_satisfies_reversed,12u#,asc_height#,0); uni "0x2AE4";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h; y3=y4; y5=y6; .5[y5,y3]=.5[y1,y2]; y5-y3=.55x_height;
+rt x1l=rt x2l=w-u; lft x4=lft x6=u; x3=x5=x2r;
+bskpoints(3,4,hair,0); bskpoints(1,2,hair,hair); bskpoints(5,6,hair,0);
+filldraw z1rr---obl(3l,1r,4l)---z4ll..z4r---obl(3r,4r,2r)
+ ---obl(5l,3r,6l)---z6ll..z6r---obl(5r,6r,2r)---z2r..z2ll---z1l..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
iff known chars.math_triangle_up:
bskchar "Big triangle up";
beginchar(chars.math_triangle_up,17u#,asc_height#,desc_depth#); uni "0x25B3";
@@ -1338,7 +3352,7 @@ lw=rule_thickness-currentbreadth;
lft x1=u; rt x2=w-u; x3=.5[x1,x2];
bot y1=bot y2=0; top y3=h+o;
y1'=y2'=y1+lw;
-x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+x1'-x1=x2-x2'=lw/cosd(angle(z3-z1));
z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
oblu:=2oblu;
@@ -1348,13 +3362,13 @@ endchar;
iff known chars.math_triangle_right:
bskchar "Triangle pointing right";
-beginchar(chars.math_triangle_right,x_height#+2u#,v_center(x_height#)); uni "0x22B3";
+beginchar(chars.math_triangle_right,x_height#+2u#,v_center(x_height#)); uni "non"; %22B3?
adjust_fit(0,0);
pickup tiny.nib;
numeric lw;
lw=rule_thickness-currentbreadth;
lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
-top y1=h; bot y2=0;
+top y1=h; bot y2=-d;
x1'=x2'=x1+lw;
y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
@@ -1366,13 +3380,13 @@ endchar;
iff known chars.math_triangle_left:
bskchar "Triangle pointing left";
-beginchar(chars.math_triangle_left,x_height#+2u#,v_center(x_height#)); uni "0x22B2";
+beginchar(chars.math_triangle_left,x_height#+2u#,v_center(x_height#)); uni "non"; %22B2?
adjust_fit(0,0);
pickup tiny.nib;
numeric lw;
lw=rule_thickness-currentbreadth;
rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
-top y1=h; bot y2=0;
+top y1=h; bot y2=-d;
x1'=x2'=x1-lw;
y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
@@ -1390,7 +3404,7 @@ pickup tiny.nib;
numeric lw;
lw=rule_thickness-currentbreadth;
lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
-top y1=h; bot y2=0;
+top y1=h; bot y2=-d;
x1'=x2'=x1+lw;
y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
@@ -1406,14 +3420,416 @@ pickup tiny.nib;
numeric lw;
lw=rule_thickness-currentbreadth;
rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
-top y1=h; bot y2=0;
+top y1=h; bot y2=-d;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_right_isosceles:
+bskchar "Isosceles triangle pointing right";
+beginchar(chars.math_triangle_right_isosceles,13u#,v_center(1.2x_height#)); uni "0x22B3";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_right_isosceles_neg:
+bskchar "Negated isosceles triangle pointing right";
+beginchar(chars.math_triangle_right_isosceles_neg,13u#,v_center(1.2x_height#)); uni "0x22EB";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'l,2,4l).hi---z4l..z4rr---obl(4'r,4r,3)
+ ---obl(3,2,1)---obl(5'r,3,5r)--z5r..z5ll---obl(5'l,5l,1).more---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''l,2',5''l)---obl(5''l,4''l,1')---cycle;
+infill obl(4''r,5''r,3')---obl(3',2',1')---obl(5''r,3',4''r)---cycle;
+penlabels(4,4',4'',5,5',5''); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_right_isosceles_line:
+bskchar "Isosceles triangle pointing right with line";
+beginchar(chars.math_triangle_right_isosceles_line,15u#,v_center(1.2x_height#)); uni "0x29D0";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+lft x1=3u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+lft x4l=lft x5l=u; bot y5=y2; top y4=y1;
+filldraw bskrule(4,5,hair,hair);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+penlabels(4,5); labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_left_isosceles:
+bskchar "Isosceles triangle pointing left";
+beginchar(chars.math_triangle_left_isosceles,13u#,v_center(1.2x_height#)); uni "0x22B2";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=-d;
x1'=x2'=x1-lw;
y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
labels(1,1',2,2',3,3');
endchar;
+iff known chars.math_triangle_left_isosceles_neg:
+bskchar "Negated isosceles triangle pointing left";
+beginchar(chars.math_triangle_left_isosceles_neg,13u#,v_center(1.2x_height#)); uni "0x22EA";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'r,2,4r)---z4rr..z4l---obl(4'l,4l,3)
+ ---obl(3,2,1)---obl(5'l,3,5l)---z5ll..z5r---obl(5'r,5r,1).hi---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''r,2',5''r)---obl(5''r,4''r,1')---cycle;
+infill obl(4''l,5''l,3')---obl(3',2',1')---obl(5''l,3',4''l)---cycle;
+penlabels(4,4',4'',5,5',5''); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_line:
+bskchar "Isosceles triangle pointing left with line";
+beginchar(chars.math_triangle_left_isosceles_line,15u#,v_center(1.2x_height#)); uni "0x29CF";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x1=w-3u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=-d;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+rt x4r=rt x5r=w-u; bot y5=y2; top y4=y1;
+filldraw bskrule(4,5,hair,hair);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+penlabels(4,5); labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_right_isosceles_bar:
+bskchar "Isosceles triangle pointing right with bar";
+beginchar(chars.math_triangle_right_isosceles_bar,13u#,v_center(1.2x_height#+3u#)); uni "0x22B5";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y4l=bot y5l=-d; lft x4=u; x5=w-x4;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangle_right_isosceles_bar_neg:
+bskchar "Negated isosceles triangle pointing right with bar";
+beginchar(chars.math_triangle_right_isosceles_bar_neg,13u#,v_center(1.2x_height#+3u#)); uni "0x22ED";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y6l=bot y7l=-d; lft x6=u; x7=w-x6;
+bskpoints(4,5,rule_thickness,rule_thickness);
+bskpoints(6,7,hair,hair);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+y6'l=y6'r=y6r; z6'l=whatever[z4l,z5l]; z6'r=whatever[z4r,z5r];
+y7'l=y7'r=y6l; z7'l=whatever[z4l,z5l]; z7'r=whatever[z4r,z5r];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'l,2,4l).hi---obl(6'l,4'l,6r)---z6rr..z6l
+ ---obl(7'l,6l,4l)---z4l..z4rr---obl(7'r,4r,7l)---z7ll..z7r---obl(6'r,7r,4'r)
+ ---obl(4'r,4r,3)---obl(3,2,1)---obl(5'r,3,5r)--z5r..z5ll---obl(5'l,5l,1).more
+ ---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''l,2',5''l)---obl(5''l,4''l,1')---cycle;
+infill obl(4''r,5''r,3')---obl(3',2',1')---obl(5''r,3',4''r)---cycle;
+penlabels(4,4',4'',5,5',5'',6,6',7,7'); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_bar:
+bskchar "Isosceles triangle pointing left with bar";
+beginchar(chars.math_triangle_left_isosceles_bar,13u#,v_center(1.2x_height#+3u#)); uni "0x22B4";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y4l=bot y5l=-d; lft x4=u; x5=w-x4;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_bar_neg:
+bskchar "Negated isosceles triangle pointing left with bar";
+beginchar(chars.math_triangle_left_isosceles_bar_neg,13u#,v_center(1.2x_height#+3u#)); uni "0x22EC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+oblu.more:=2oblu; oblu.hi:=3oblu;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+top y5=h+2rule_thickness; bot y4=-d-2rule_thickness; .5[x4,x5]=.5w; rt x5=w-3u;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y6l=bot y7l=-d; lft x6=u; x7=w-x6;
+bskpoints(4,5,rule_thickness,rule_thickness);
+bskpoints(6,7,hair,hair);
+z4'l=whatever[z4l,z5l]=whatever[z2,z3]; z4'r=whatever[z4r,z5r]=whatever[z2,z3];
+z4''l=whatever[z4l,z5l]=whatever[z2',z3']; z4''r=whatever[z4r,z5r]=whatever[z2',z3'];
+z5'l=whatever[z4l,z5l]=whatever[z1,z3]; z5'r=whatever[z4r,z5r]=whatever[z1,z3];
+z5''l=whatever[z4l,z5l]=whatever[z1',z3']; z5''r=whatever[z4r,z5r]=whatever[z1',z3'];
+y6'l=y6'r=y6r; z6'l=whatever[z4l,z5l]; z6'r=whatever[z4r,z5r];
+y7'l=y7'r=y6l; z7'l=whatever[z4l,z5l]; z7'r=whatever[z4r,z5r];
+filldraw obl(1,3,2)---obl(2,1,3)---obl(4'r,2,4r)---obl(6'r,4'r,7r).more---z7r..z7ll
+ ---obl(7'r,7l,4r)---z4rr..z4l---obl(7'l,4l,6l).more---z6l..z6rr
+ ---obl(6'l,6r,4'l)---obl(4'l,4l,3)---obl(3,2,1)---obl(5'l,3,5l)---z5ll
+ ..z5r---obl(5'r,5r,1).hi---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(4''r,2',5''r)---obl(5''r,4''r,1')---cycle;
+infill obl(4''l,5''l,3')---obl(3',2',1')---obl(5''l,3',4''l)---cycle;
+penlabels(4,4',4'',5,5',5'',6,6',7,7'); labels(1,1',2,2',3,3',4rr,5ll);
+endchar;
+
+iff known chars.math_triangle_right_isosceles_bar_sl:
+bskchar "Isosceles triangle pointing right with slanted bar";
+beginchar(chars.math_triangle_right_isosceles_bar_sl,13u#,v_center(1.2x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y4=-d+.5rule_thickness; y2-y4=y3-y5; lft x4=u; x5=w-x4;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_bar_sl:
+bskchar "Isosceles triangle pointing left with slanted bar";
+beginchar(chars.math_triangle_left_isosceles_bar_sl,13u#,v_center(1.2x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+bot y5=-d+.5rule_thickness; y3-y4=y2-y5; lft x4=u; x5=w-x4;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw bskrule(4,5,hair,hair);
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3'); penlabels(4,5);
+endchar;
+
+iff known chars.math_triangles_isosceles_right_left:
+bskchar "Isosceles triangle pointing right above pointing left";
+beginchar(chars.math_triangles_isosceles_right_left,13u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x29CE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+rt x4=w-u; x5=x4; y6=.5[y4,y5]; lft x6=u-hair;
+top y4-bot y5=1.2x_height; bot y5=-d;
+x4'=x5'=x4-lw;
+y4'-y4=y5-y5'=lw/cosd(angle(z6-z4));
+z6'=z5'+whatever*(z6-z5)=z4'+whatever*(z6-z4);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw obl(4,6,5)---obl(5,4,6)---obl(6,5,4)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+infill obl(4',6',5')---obl(5',4',6')---obl(6',5',4')---cycle;
+labels(1,1',2,2',3,3',4,4',5,5',6,6');
+endchar;
+
+iff known chars.math_triangles_isosceles_left_right:
+bskchar "Isosceles triangle pointing left above pointing right";
+beginchar(chars.math_triangles_isosceles_left_right,13u#,v_center(1.8x_height#+2rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+bot y2=-d; top y1-bot y2=1.2x_height;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+rt x4=w-u; x5=x4; y6=.5[y4,y5]; lft x6=u-hair;
+top y4-bot y5=1.2x_height; top y4=h;
+x4'=x5'=x4-lw;
+y4'-y4=y5-y5'=lw/cosd(angle(z6-z4));
+z6'=z5'+whatever*(z6-z5)=z4'+whatever*(z6-z4);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+filldraw obl(4,6,5)---obl(5,4,6)---obl(6,5,4)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+infill obl(4',6',5')---obl(5',4',6')---obl(6',5',4')---cycle;
+labels(1,1',2,2',3,3',4,4',5,5',6,6');
+endchar;
+
+iff known chars.math_triangle_right_isosceles_black:
+bskchar "Black isosceles triangle pointing right";
+beginchar(chars.math_triangle_right_isosceles_black,13u#,v_center(1.2x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair;
+top y1=h; bot y2=-d;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_triangle_left_isosceles_black:
+bskchar "Black isosceles triangle pointing left";
+beginchar(chars.math_triangle_left_isosceles_black,13u#,v_center(1.2x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+rt x1=w-u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair;
+top y1=h; bot y2=-d;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_slice_left:
+bskchar "Left slice";
+beginchar(chars.math_slice_left,13u#,v_center(1.2x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos0(rule_thickness,0);
+rt x1=w-3u; x2=x1; y3=.5[y1,y2]; lft x3=u-hair; rt x0r=w-u;
+top y1=h; bot y2=-d; y0=.5[y1,y2];
+x1'=x2'=x1-lw;
+y1'-y1=y2-y2'=lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw z1+oblu*unitvector(z3-z1)--z1..z0r..z2--z2+oblu*unitvector(z3-z2)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill z1'+oblu*unitvector(z3'-z1')--z1'..z0l..z2'--z2'+oblu*unitvector(z3'-z2')---obl(3',2',1')---cycle;
+penlabels(0); labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_slice_right:
+bskchar "Right slice";
+beginchar(chars.math_slice_right,13u#,v_center(1.2x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+pos0(rule_thickness,0);
+lft x1=3u; x2=x1; y3=.5[y1,y2]; rt x3=w-u+hair; lft x0l=u;
+top y1=h; bot y2=-d; y0=.5[y1,y2];
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw z1+oblu*unitvector(z3-z1)--z1..z0l..z2--z2+oblu*unitvector(z3-z2)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill z1'+oblu*unitvector(z3'-z1')--z1'..z0r..z2'--z2'+oblu*unitvector(z3'-z2')---obl(3',2',1')---cycle;
+penlabels(0); labels(1,1',2,2',3,3');
+endchar;
+
iff known chars.math_triangle_black_up:
bskchar "Big black triangle up";
beginchar(chars.math_triangle_black_up,17u#,asc_height#,desc_depth#); uni "0x25B2";
@@ -1437,7 +3853,7 @@ lw=rule_thickness-currentbreadth;
lft x1=u; rt x2=w-u; x3=.5[x1,x2];
top y1=top y2=h-d; bot y3=-d-o;
y1'=y2'=y1-lw;
-x1'-x1=x2-x2'=-lw/sind(angle(z3-z1));
+x1'-x1=x2-x2'=lw/cosd(angle(z3-z1));
z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
oblu:=2oblu;
@@ -1530,7 +3946,7 @@ lw=rule_thickness-currentbreadth;
lft x1=u; rt x2=w-u; x3=.5[x1,x2];
bot y1=bot y2=-d; top y3=h+o;
y1'=y2'=y1+lw;
-x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+x1'-x1=x2-x2'=lw/cosd(angle(z3-z1));
z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
z2''=.5[z1,z2]+hair*up;
filldraw obl(1,3,2)..z2''..obl(2,1,3)---obl(3,2,1)---cycle;
@@ -1561,12 +3977,199 @@ filldraw z1+oblu*right{right}..z2''..{right}z2+oblu*left..
labels(1,1',1'',2,2',2'',3,3',3'');
endchar;
+iff known chars.math_triangle_down_isosceles:
+bskchar "Isosceles triangle pointing down";
+beginchar(chars.math_triangle_down_isosceles,.8asc_height#+2u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+top y1=top y2=h; bot y3=0;
+y1'=y2'=y1-lw;
+x1'-x1=x2-x2'=-lw/sind(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_up_isosceles:
+bskchar "Isosceles triangle pointing up";
+beginchar(chars.math_triangle_up_isosceles,.8asc_height#+2u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+bot y1=bot y2=0; top y3=h;
+y1'=y2'=y1+lw;
+x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_triangle_down_isosceles_black:
+bskchar "Black isosceles triangle pointing down";
+beginchar(chars.math_triangle_down_isosceles_black,.8asc_height#+2u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+top y1=top y2=h; bot y3=0;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_triangle_up_isosceles_black:
+bskchar "Black isosceles triangle pointing up";
+beginchar(chars.math_triangle_up_isosceles_black,.8asc_height#+2u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=.5[x1,x2];
+bot y1=bot y2=0; top y3=h;
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,2,3);
+endchar;
+
+iff known chars.math_triangle_right_angle:
+bskchar "Triangle with right angle";
+beginchar(chars.math_triangle_right_angle,12u#,.8asc_height#,0); uni "0x22BF";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; rt x2=w-u; x3=x2;
+bot y1=bot y2=0; top y3=h;
+y1'=y2'=y1+lw;
+x1'-x1=x2-x2'=lw/sind(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+oblu:=2oblu;
+infill obl(1',3',2')---obl(2',1',3')---obl(3',2',1')---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.math_square_small_black_round:
+bskchar "Small black square (rounded)";
+beginchar(chars.math_square_small_black_round,5u#,3u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x2=u; x3=x4=w-x1; top y1=top y4=h; bot y2=bot y3=0;
+filldraw obl(1,4,2)---obl(2,1,3)---obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_square_small_black:
+bskchar "Small black square";
+beginchar(chars.math_square_small_black,5u#,3u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x2=u; x3=x4=w-x1; top y1=top y4=h; bot y2=bot y3=0;
+filldraw z1--z2--z3--z4--cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_sum_uni:
+bskchar "Summation sign (for Unicode)";
+beginchar(chars.math_sum_uni,14u#,v_center(10/6dh#)); uni "0x2211";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu.more:=2oblu;
+numeric alpha, top_stem, top_arm, bot_arm;
+top_arm=Vround rule_thickness;
+bot_arm=Vround .5[cap_stem,rule_thickness];
+pos1(cap_stem,0); pos2(cap_stem,0);
+bot y1=-d; top y2=h;
+lft x1l=lft x2l-o=.5u;
+bot y3r=-d; top y4r=h; rt x3l=w-u; x4r=w-2u;
+pos3(beak,-90); z3d=(x3r-2ser_height,y1+bot_arm);
+pos4(.65beak,90); z4d=(x4r-ser_height,y2r.b);
+z3l.o=z3l+o*left; z4l.o=z4l+o*left;
+x5r=.5w-o; y5=.5[h,-d]+cap_hair;
+alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r);
+pos5(alpha*cap_stem,0);
+alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r);
+pos6(alpha*cap_hair,0); z5r=z6r;
+z1r-z1r.b=bot_arm*down;
+y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
+z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
+y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
+filldraw z3l..{dir-110}z3l.o..z3d
+ ---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more
+ ---z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
+ ---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l)---cycle;
+penlabels(1,2,3,4,5,6); labels(1',1r.b,4d,4l.o,5',2r.b);
+endchar;
+
+iff known chars.math_sum_modulo_uni:
+bskchar "Summation modulo two sign (for Unicode)";
+beginchar(chars.math_sum_modulo_uni,14u#,v_center(10/6dh#)); uni "0x2A0A";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu.more:=2oblu;
+numeric alpha, top_stem, top_arm, bot_arm;
+top_arm=Vround rule_thickness;
+bot_arm=Vround .5[cap_stem,rule_thickness];
+y2=y13; y8-y4=x2-x6=6u; .5[x2,x6]=x13l;
+pos9(cap_stem,0); pos10(cap_stem,0);
+bot y9=-d; top y10=h;
+lft x9l=lft x10l-o=.5u;
+bot y11r=-d; top y12r=h; rt x11l=w-u; x12r=w-2u;
+pos11(beak,-90); z11d=(x11r-2ser_height,y9+bot_arm);
+pos12(.65beak,90); z12d=(x12r-ser_height,y10r.b);
+z11l.o=z11l+o*left; z12l.o=z12l+o*left;
+x13r=.5w-o; y13=.5[h,-d]+cap_hair;
+alpha=diag_ratio(10,cap_stem,y10-y13,x13r-x10r);
+pos13(alpha*cap_stem,0);
+alpha:=diag_ratio(10,cap_hair,y13-y9,x13r-x9r);
+pos14(alpha*cap_hair,0); z13r=z14r;
+z9r-z9r.b=bot_arm*down;
+y9'=y9+2bot_arm; z9'=z14l+whatever*(z9r.b-z14r);
+z13'=whatever[z10l+top_arm*down,z13l]=whatever[z14l,z9'];
+y10r.b=y10-bot_arm; z10r.b=z13r+whatever*(z10l-z13');
+circle_points(rule_thickness);
+p0=z11l..{dir-110}z11l.o..z11d---obl(9r.b,11d,13r).more---obl(13r,9r.b,10r.b).more
+ ---obl(10r.b,13r,12d).more---z12d..z12l.o{dir-70}..z12l---z12r+hair*down..z12r+hair*left
+ ---obl(10l,12r,13')---obl(13',10l,9l)---obl(9l,13',11r)---obl(11r,9r,11l)---cycle;
+p1=subpath(2,10) of reverse(draw_circle.l);
+p2=subpath(2,10) of reverse(draw_circle.r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-3)=p0 intersectiontimes subpath(3,8) of p1;
+(tim4-10,tim5-3)=subpath(10,length p0) of p0 intersectiontimes subpath(3,length p1) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,3) of p1;
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10,tim11-3)=p0 intersectiontimes subpath(3,8) of p2;
+(tim12-10,tim13-3)=subpath(10,length p0) of p0 intersectiontimes subpath(3,8) of p2;
+(tim14-10,tim15)=subpath(10,length p0) of p0 intersectiontimes subpath(0,3) of p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),length p1) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..reverse subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..reverse (subpath(rundy(p2,tim13),length p2) of p2
+ ..subpath(0,rundy(p2,tim15).zpet) of p2)
+ ..cycle;
+penlabels(9,10,11,12,13,14); labels(9',9r.b,12d,12l.o,13',10r.b);
+endchar;
+
iff known chars.math_sum_text:
bskchar "\textstyle summation sign";
beginchar(chars.math_sum_text,14u#,0,10/6dh#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
-path p[];
+path p[]; oblu.more:=2oblu;
numeric alpha, top_stem, top_arm, bot_arm;
top_arm=Vround rule_thickness;
bot_arm=Vround .5[cap_stem,rule_thickness];
@@ -1587,8 +4190,8 @@ y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
filldraw z3l..{dir-110}z3l.o..z3d
- ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d)
- ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
+ ---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more
+ ---z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l)---cycle;
penlabels(1,2,3,4,5,6); labels(1',1r.b,4d,4l.o,5',2r.b);
endchar;
@@ -1598,7 +4201,7 @@ bskchar "\displaystyle summation sign";
beginchar(chars.math_sum_disp,19u#,0,14/6dh#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
-path p[];
+path p[]; olbu.more:=2oblu;
numeric alpha, top_stem, top_arm, bot_arm;
top_arm=Vround 1.5rule_thickness;
bot_arm=Vround cap_stem;
@@ -1619,12 +4222,37 @@ y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
filldraw z3l..{dir-110}z3l.o..z3d
- ---hide(oblu:=2oblu)obl(1r.b,3d,5r)---obl(5r,1r.b,2r.b)---obl(2r.b,5r,4d)
- ---hide(oblu:=f_obl)z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
+ ---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more
+ ---z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')
---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l)---cycle;
penlabels(1,2,3,4,5,6); labels(1',4d,4l.o,5',2r.b);
endchar;
+iff known chars.math_prod_uni:
+bskchar "Product sign (for Unicode)";
+beginchar(chars.math_prod_text,14u#,v_center(10/6dh#)); uni "0x220F";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(1.1cap_stem,0); pos2(1.1cap_stem,0);
+pos3(1.1cap_stem,0); pos4(1.1cap_stem,0);
+bot y1=bot y3=-d; top y2=top y4=h;
+lft x1l=lft x2l=u;
+x3r=x4r=w-x1l;
+{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem];
+ cap_serifs_tl(2l); cap_serifs_tr(2r);
+ cap_serifs_tl(4l); cap_serifs_tr(4r);
+ cap_serifs_br(1r); cap_serifs_bl(3l);
+}};
+cap_serifs_bl(1l);
+cap_serifs_br(3r);
+z2'=(x2r,y2r.b-1.2stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c-hair);
+filldraw z1l.b{down}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b---
+ z2'..{right}z3'..z4'
+ ---z3l.b..{left}z3l.c..z3l.a---z3r.a..z3r.c{left}..z3r.b---z4r.b..
+ {right}z4r.c..{left}z4r.a..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4); labels(2',3',4');
+endchar;
+
iff known chars.math_prod_text:
bskchar "\textstyle product sign";
beginchar(chars.math_prod_text,14u#,0,10/6dh#); uni "non";
@@ -1675,9 +4303,34 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b---
penlabels(1,2,3,4); labels(2',3',4');
endchar;
+iff known chars.math_coprod_uni:
+bskchar "Coproduct sign (for Unicode)";
+beginchar(chars.math_coprod,14u#,v_center(10/6dh#)); uni "0x2210";
+italcorr cap_height#*slant;
+adjust_fit(cap_serif_fit#,cap_serif_fit#);
+pickup tiny.nib;
+pos1(1.1cap_stem,0); pos2(1.1cap_stem,0);
+pos3(1.1cap_stem,0); pos4(1.1cap_stem,0);
+top y1=top y3=h; bot y2=bot y4=-d;
+lft x1l=lft x2l=1.5u;
+x3r=x4r=w-x1l;
+{{ save cap_jut; numeric cap_jut; cap_jut:=.5[hair,stem];
+ cap_serifs_bl(2l); cap_serifs_br(2r);
+ cap_serifs_bl(4l); cap_serifs_br(4r);
+ cap_serifs_tr(1r); cap_serifs_tl(3l);
+ cap_serifs_tl(1l); cap_serifs_tr(3r);
+}};
+z2'=(x2r,y2r.b+1.2stem); z4'=(x4l,y2'); z3'=(.5[x2',x4'],y2r.c+hair);
+filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b
+ ---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a
+ ..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a
+ ..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
+penlabels(1,2,3,4); labels(2',3',4'); %math_fit
+endchar;
+
iff known chars.math_coprod:
bskchar "Coproduct sign";
-beginchar(chars.math_coprod,12u#,cap_height#,0); uni "0x2210";
+beginchar(chars.math_coprod,12u#,cap_height#,0); uni "0x2A3F";
italcorr cap_height#*slant;
adjust_fit(cap_serif_fit#,cap_serif_fit#);
pickup tiny.nib;
@@ -1697,7 +4350,7 @@ filldraw z1l.b{up}..{left}z1l.c..z1l.a---z1r.a..{left}z1r.c..z1r.b
---z2'..{right}z3'..z4'---z3l.b..{left}z3l.c..z3l.a---z3r.a
..z3r.c{left}..z3r.b---z4r.b..{right}z4r.c..{left}z4r.a
..{left}z2l.a..{right}z2l.c..z2l.b---cycle;
-penlabels(1,2,3,4); labels(2',3',4');
+penlabels(1,2,3,4); labels(2',3',4'); %math_fit
endchar;
iff known chars.math_coprod_text:
@@ -1750,7 +4403,33 @@ endchar;
iff known chars.math_int:
bskchar "Integral sign";
-beginchar(chars.math_int,10u#,asc_height#,desc_depth#); uni "0x222B";
+beginchar(chars.math_int,10u#,asc_height#,desc_depth#); uni "non";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w-u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_uni:
+bskchar "Integral sign (for Unicode)";
+beginchar(chars.math_int_uni,10u#,v_center(11/6dh#)); uni "0x222B";
italcorr asc_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
@@ -1774,11 +4453,232 @@ filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
endchar;
+iff known chars.math_int_overbar:
+bskchar "Integral sign with overbar";
+beginchar(chars.math_int_overbar,10u#,11/12dh#+2.5rule_thickness#+math_axis#,11/12dh#-math_axis#); uni "0x2A1B";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y2=h-like_curve-2.5rule_thickness;
+x3-lft x2l=2u;
+top y3l=h+o-2.5rule_thickness; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w-u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+y8=y9=y3l+2rule_thickness; lft x8=u; rt x9=w-u;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw bskrule(8,9,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_underbar:
+bskchar "Integral sign with underbar";
+beginchar(chars.math_int_underbar,10u#,11/12dh#+math_axis#,11/12dh#+2.5rule_thickness#-math_axis#); uni "0x2A1C";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w-u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve+2.5rule_thickness; bot y6l=-d-o+2.5rule_thickness; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+y8=y9=y6r-2rule_thickness; lft x8=u; rt x9=w-u;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw bskrule(8,9,hair,0);
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_double_uni:
+bskchar "Double integral sign (for Unicode)";
+beginchar(chars.math_int_double_uni,15.5u#,v_center(11/6dh#)); uni "0x222C";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x 5u; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=9u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (5.5u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_triple_uni:
+bskchar "Triple integral sign (for Unicode)";
+beginchar(chars.math_int_triple_uni,21u#,v_center(11/6dh#)); uni "non"; %uni "0x222D";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x 5u; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=9u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (5.5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (11u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_triple_uni_var:
+bskchar "Triple integral sign (for Unicode, variant)";
+beginchar(chars.math_int_triple_uni,19u#,v_center(11/6dh#)); uni "0x222D";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x 5u; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=9u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .95 shifted z1 shifted (5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9 shifted z1 shifted (9.5u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_quadruple_uni:
+bskchar "Quadruple integral sign (for Unicode)";
+beginchar(chars.math_int_quadruple_uni,26.5u#,v_center(11/6dh#)); uni "non"; %uni "0x2A0C";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x 5u; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=9u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (5.5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (11u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted (16.5u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_quadruple_uni_var:
+bskchar "Quadruple integral sign (for Unicode, variant)";
+beginchar(chars.math_int_quadruple_uni_var,23.25u#,v_center(11/6dh#)); uni "0x2A0C";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x 5u; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=9u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9666 shifted z1 shifted (5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9333 shifted z1 shifted (9.5u,0);
+filldraw (z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle)
+ shifted -z1 scaled .9 shifted z1 shifted (13.75u,0);
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
iff known chars.math_int_text:
bskchar "\textstyle integral sign";
beginchar(chars.math_int_text,8.5u#,0,11/6dh#); uni "non";
-italcorr 3u#;
-adjust_fit(0,0);
+italcorr 3u#+curve#;
+adjust_fit(0,-2.5u#);
pickup tiny.nib;
numeric fend; fend:=1.5stem;
pos1(bourstem,0); x1=good.x .5w; y1=.5[h,-d];
@@ -1801,8 +4701,8 @@ endchar;
iff known chars.math_int_disp:
bskchar "\displaystyle integral sign";
beginchar(chars.math_int_disp,17u#,0,4dh#); uni "non";
-italcorr 6u#;
-adjust_fit(0,-ic#);
+italcorr 8u#+curve#;
+adjust_fit(0,-7.5u#);
pickup tiny.nib;
numeric fend; fend:=1.5bourstem;
pos1(1.5bourstem,0); x1=good.x .5w; y1=.5[h,-d];
@@ -1822,11 +4722,138 @@ filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
endchar;
+iff known chars.math_int_up_text:
+bskchar "\textstyle integral upright sign";
+beginchar(chars.math_int_up_text,8.5u#,0,11/6dh#); uni "non";
+italcorr u#+curve#;
+adjust_fit(0,-2u#);
+pickup tiny.nib;
+numeric fend; fend:=1.5stem;
+pos1(bourstem,0); x1=good.x .5w; y1=.5[h,-d];
+pos2(stem,0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve; x3-lft x2l=.85*2.75u; x2=x1;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(stem,180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r+o; y1l:=y1l-o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_up_disp:
+bskchar "\displaystyle integral upright sign";
+beginchar(chars.math_int_up_disp,17u#,0,4dh#); uni "non";
+italcorr 2u#+curve#;
+adjust_fit(0,-4.5u#);
+pickup tiny.nib;
+numeric fend; fend:=1.5bourstem;
+pos1(1.5bourstem,0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,bourstem],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve; x3-lft x2l=2.75u; x2=x1;
+top y3l=h+o; .45[x2r,x4]=x3; y4''=y3r-1.5like_hair;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,bourstem],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+filldraw z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+penlabels(1,2,3,4,5,6,7); labels(4',4'',7',7'');
+endchar;
+
+iff known chars.math_int_bump:
+bskchar "Integral sign with bump";
+beginchar(chars.math_int_bump,10u#,v_center(11/6dh#)); uni "non";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),length p0) of p0&cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_uni:
+bskchar "Contour integral sign (for Unicode)";
+beginchar(chars.math_oint_uni,10u#,v_center(11/6dh#)); uni "0x222E";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+p2=reverse (draw_circle.r);
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
iff known chars.math_oint_text:
bskchar "\textstyle contour integral sign";
beginchar(chars.math_oint_text,8.5u#,0,11/6dh#); uni "non";
-italcorr 3u#;
-adjust_fit(0,0);
+italcorr 3u#+curve#;
+adjust_fit(0,-2.5u#);
pickup tiny.nib;
numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
path p[];
@@ -1869,8 +4896,8 @@ endchar;
iff known chars.math_oint_disp:
bskchar "\displaystyle contour integral sign";
beginchar(chars.math_oint_disp,17u#,0,4dh#); uni "non";
-italcorr 6u#;
-adjust_fit(0,0);
+italcorr 6u#+curve#;
+adjust_fit(0,-5.5u#);
pickup tiny.nib;
numeric fend, tim[]; fend:=1.5bourstem; oblu:=4oblu;
path p[];
@@ -1910,6 +4937,1150 @@ infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rund
penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
endchar;
+iff known chars.math_int_rect_pole_uni:
+bskchar "Line integral with rectangular path around pole sign (for Unicode)";
+beginchar(chars.math_int_rect_pole_uni,10u#,v_center(11/6dh#)); uni "0x2A12";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(.5[stem,bourstem],0); x5=good.x .5w; y5=.5[h,-d];
+pos6(.5[stem,hair],0); pos7(hair,-90); pos8(fend,180);
+top y6=h-like_curve; x7-lft x6l=2u;
+top y7l=h+o; .5[x6r,x8]=x7; y8''=y7r-like_hair;
+rt x8l=w-u; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+y6r:=y6l+hair; z7'r=z7r+.5hair*right;
+.5[x9,x6]=.5[x7,x10]=.5[x8,x11]=x5;
+pos9(stem,180); pos10(hair,-90); pos11(fend,0);
+bot y9=-d+like_curve; bot y10l=-d-o; y11''=y10l+like_hair;
+y9r:=y9r-hair;
+z11'=z11+.2fend*up+o*right; z11''=z11+.5(fend-currentbreadth)*dir(-135);
+y5r:=y5r-o; y5l:=y5l+o;
+rt x1=rt x2=w-u; x3=x4; y1=y4; y2=y3; .5[z1,z3]=z5; y1-y2=x1-x3;
+x1l:=x2r:=x1-(rule_thickness-currentbreadth);
+x3r:=x4l:=x3+(rule_thickness-currentbreadth);
+p0=z9r..z10l{left}..z11r..z11'..z11l{down}..z11''..z10r..z9l...z5r...z6r...{right}z7r
+ ..z8r..z8'..z8l{up}..z8''..z7l..z6l...z5l...cycle;
+p1=obl(1r,2l,4r)---obl(4r,1r,3l)---obl(3l,4r,2l)---obl(2l,3l,1r)---cycle;
+p2=obl(4l,3r,1l)---obl(1l,4l,2r)---obl(2r,1l,3r)---obl(3r,2r,4l)--cycle;
+(tim0,tim1-1)=p0 intersectiontimes subpath(1,length p1) of p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p2;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+dot(5);
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(8',8'',11',11'');
+endchar;
+
+iff known chars.math_int_semicirc_pole_uni:
+bskchar "Line integral with semicircular path around pole sign (for Unicode)";
+beginchar(chars.math_int_semicirc_pole_uni,10u#,v_center(11/6dh#)); uni "0x2A13";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+p2=subpath(-2,7) of (draw_circle.r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p2;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+dot(9);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_not_pole_uni:
+bskchar "Line integral without pole sign (for Unicode)";
+beginchar(chars.math_int_not_pole_uni,11u#,v_center(11/6dh#)); uni "0x2A14";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5(w-u); y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-2u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+z16=(w-4u,y9);
+lft x6=2u+(x16-x9); y2=y9; y8-y4=x2-x6; .5[x2,x6]=x16;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=subpath(-2,6) of reverse (draw_circle.l);
+p2=subpath(-2,6) of (draw_circle.r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,10) of p0) intersectiontimes p1;
+(tim4-10,tim5)=(subpath(10,length p0) of p0) intersectiontimes p2;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+dot(16);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'',16);
+endchar;
+
+iff known chars.math_oint_point_uni:
+bskchar "Contour integral around point sign (for Unicode)";
+beginchar(chars.math_oint_point_uni,10u#,v_center(11/6dh#)); uni "0x2A15";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+infill draw_circle.r;
+dot(9);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_quat_uni:
+bskchar "Quaternion integral sign (for Unicode)";
+beginchar(chars.math_int_quat_uni,10u#,v_center(11/6dh#)); uni "0x2A16";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(.5[stem,bourstem],0); x5=good.x .5w; y5=.5[h,-d];
+pos6(.5[stem,hair],0); pos7(hair,-90); pos8(fend,180);
+top y6=h-like_curve; x7-lft x6l=2u;
+top y7l=h+o; .5[x6r,x8]=x7; y8''=y7r-like_hair;
+rt x8l=w-u; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45;
+y6r:=y6l+hair; z7'r=z7r+.5hair*right;
+.5[x9,x6]=.5[x7,x10]=.5[x8,x11]=x5;
+pos9(stem,180); pos10(hair,-90); pos11(fend,0);
+bot y9=-d+like_curve; bot y10l=-d-o; y11''=y10l+like_hair;
+y9r:=y9r-hair;
+z11'=z11+.2fend*up+o*right; z11''=z11+.5(fend-currentbreadth)*dir(-135);
+y5r:=y5r-o; y5l:=y5l+o;
+rt x1=rt x2=w-u; x3=x4; y1=y4; y2=y3; .5[z1,z3]=z5; y1-y2=x1-x3;
+x1l:=x2r:=x1-(rule_thickness-currentbreadth);
+x3r:=x4l:=x3+(rule_thickness-currentbreadth);
+p0=z9r..z10l{left}..z11r..z11'..z11l{down}..z11''..z10r..z9l...z5r...z6r...{right}z7r
+ ..z8r..z8'..z8l{up}..z8''..z7l..z6l...z5l...cycle;
+p1=obl(1r,2l,4r)---obl(4r,1r,3l)---obl(3l,4r,2l)---obl(2l,3l,1r)---cycle;
+p2=obl(4l,1l,3r)---obl(3r,4l,2r)---obl(2r,3r,1l)---obl(1l,2r,4l)---cycle;
+(tim0,tim1-1)=p0 intersectiontimes subpath(1,length p1) of p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle;
+infill subpath(rundy(p2,tim13),length p2) of p2
+ ..subpath(0,rundy(p2,tim15).zpet) of p2
+ ..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(8',8'',11',11'');
+endchar;
+
+iff known chars.math_int_union:
+bskchar "Integral sign with union";
+beginchar(chars.math_int_union,10u#,v_center(11/6dh#)); uni "0x2A1A";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+y1=y5; .5[y1,y3]=y9; y1-y3=x_height;
+x1=x2=2u; x4=x5; x3=.5[x1,x4]=x9;
+y2=y4=y3+(x3-x2);
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-4)=subpath(0,10) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim4-10,tim5-4)=subpath(10,length p0) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,4) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_intersection:
+bskchar "Integral sign with intersection";
+beginchar(chars.math_int_intersection,10u#,v_center(11/6dh#)); uni "0x2A19";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+y1=y5; .5[y1,y3]=y9; y3-y1=x_height;
+x1=x2=2u; x4=x5; x3=.5[x1,x4]=x9;
+y2=y4=y3-(x3-x2);
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=z1rr---z2r...z3r...z4r---z5rr..z5l---z4l...z3l...z2l---z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-4)=subpath(0,10) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim4-10,tim5-4)=subpath(10,length p0) of p0 intersectiontimes subpath(4,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,4) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_arrow_left_hook:
+bskchar "Integral sign with leftwards arrow with hook";
+beginchar(chars.math_int_arrow_left_hook,15u#,v_center(11/6dh#)); uni "0x2A17";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,270);
+lft x0=u; lft x1=w-4u; y0=y1l=math_axis;
+x2l=w-u; x3=x1+hair; y2=.5[y1,y3]; y3l=math_axis-4u; x3r:=x3r+hair;
+pos9(.5[stem,bourstem],0); x9=good.x .5w+u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-3u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=(reverse sipka(0,1))---z1l..{down}z2r..{left}z3l..{right}z3r..{up}z2l..z1r---z0a.l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-10)=subpath(0,10) of p0 intersectiontimes subpath(10,infinity) of p1;
+(tim4-10,tim5-10)=subpath(10,length p0) of p0 intersectiontimes subpath(10,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,9) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+penlabels(2,3,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_times:
+bskchar "Integral sign with times sign";
+beginchar(chars.math_int_times,10u#,v_center(11/6dh#)); uni "0x2A18";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos0(rule_thickness,135); pos1(rule_thickness,135);
+pos2(rule_thickness,45); pos3(rule_thickness,45);
+x0r=x2l=1.5u; x1l=x3r; .5[x0r,x1l]=x9=good.x .5w;
+y0l=y3l; y1r=y2r; .5[y1r,y0l]=y9=.5[h,-d]; y2r-y0l=x1l-x2l;
+z4=whatever[z3l,z2l]=whatever[z0l,z1l];
+z5=whatever[z3r,z2r]=whatever[z0l,z1l];
+z6=whatever[z3r,z2r]=whatever[z0r,z1r];
+z7=whatever[z3l,z2l]=whatever[z0r,z1r];
+pos9(.5[stem,bourstem],0);
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+bskpoints(0,1,hair,hair); bskpoints(3,2,.5hair,.5hair);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+{{ save oblu; oblu:=3f_obl;
+ p1=z0l---obl(4,0l,3l)---z3l..z3rr---obl(5,3r,1l)---z1ll..z1r---obl(6,1r,2r)---z2r
+ ..z2ll---obl(7,2l,0r)---z0rr..z0l;
+}};
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3-5)=subpath(0,10) of p0 intersectiontimes subpath(5,infinity) of p1;
+(tim4-10,tim5-5)=subpath(10,length p0) of p0 intersectiontimes subpath(5,infinity) of p1;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes subpath(0,4) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+penlabels(0,1,2,3,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_clock_uni:
+bskchar "Clockwise contour integral sign (for Unicode)";
+beginchar(chars.math_oint_clock_uni,10u#,v_center(11/6dh#)); uni "0x2232";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ .5[z17r,z16]=z2; x17r=x16; y17-y16=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+(tim16,tim17-2)=p1 intersectiontimes subpath(2,4) of p4;
+tim18=xpart(p1 intersectiontimes ((x9,ypart(point infinity of p4))--(w,ypart(point infinity of p4))));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim16).zpet) of p1
+ ..subpath(rundy(p4,tim17),rundy(p4,(length p4,2/3(x16e-x17r))).zpet) of p4
+ ..subpath(rundy(p1,tim18),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+p2=reverse (draw_circle.r);
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+(tim19,tim20)=p2 intersectiontimes subpath(0,4) of p4;
+tim21=xpart(p2 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+infill subpath(rundy(p2,tim9),rundy(p2,tim19).zpet) of p2
+ ..(reverse subpath(rundy(p4,(0,2/3(x16e-x17r))),rundy(p4,tim20).zpet) of p4)
+ ..subpath(rundy(p2,tim21),rundy(p2,tim11).zpet) of p2
+ ..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_anticlock_uni:
+bskchar "Anticlockwise contour integral sign (for Unicode)";
+beginchar(chars.math_oint_anticlock_uni,10u#,v_center(11/6dh#)); uni "0x2233";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ 1/3[y17r,y16]=y2; x17r=x16=x2; y16-y17=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+(tim16,tim17)=p1 intersectiontimes subpath(0,4) of p4;
+tim18=xpart(p1 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim18).zpet) of p1
+ ..subpath(rundy(p4,(0,2/3(x17r-x16e))),rundy(p4,tim17).zpet) of p4
+ ..subpath(rundy(p1,tim18),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+p2=reverse (draw_circle.r);
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+(tim19,tim20-2)=p2 intersectiontimes subpath(2,4) of p4;
+tim21=xpart(p2 intersectiontimes ((x9,ypart(point infinity of p4))--(w,ypart(point infinity of p4))));
+infill subpath(rundy(p2,tim9),rundy(p2,tim21).zpet) of p2
+ ..(reverse subpath(rundy(p4,tim20),rundy(p4,length p4).zpet) of p4)
+ ..subpath(rundy(p2,tim19),rundy(p2,tim11).zpet) of p2
+ ..reverse subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_double_uni:
+bskchar "Surface integral sign (for Unicode)";
+beginchar(chars.math_oint_double_uni,15.5u#,v_center(11/6dh#)); uni "0x222F";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=1/2(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(.5[stem,hair],180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+circle_points(rule_thickness);
+p0:=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r
+ ...z10r...{right}z11r..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1:=p0 shifted (5.5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=reverse(draw_circle.r);
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+(tim16,tim17)=p0 intersectiontimes subpath(0,2) of p3;
+(tim18,tim19-2)=p0 intersectiontimes subpath(2,4) of p3;
+(tim20-10,tim21-4)=subpath(10,length p1) of p1 intersectiontimes subpath(4,6) of p3;
+(tim22-10,tim23-6)=subpath(10,length p1) of p1 intersectiontimes subpath(6,8) of p3;
+(tim24-10,tim25)=subpath(10,length p0) of p0 intersectiontimes p3;
+(tim26-10,tim27-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,4) of p3;
+(tim28,tim29-4)=p1 intersectiontimes subpath(4,6) of p3;
+(tim30,tim31-6)=p1 intersectiontimes subpath(6,8) of p3;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+infill subpath(0,rundy(p3,tim17).zpet) of p3
+ ..(reverse subpath(rundy(p0,tim18),rundy(p0,tim16).zpet) of p0)
+ ..subpath(rundy(p3,tim19),rundy(p3,tim21).zpet) of p3
+ ..(reverse subpath(rundy(p1,tim22),rundy(p1,tim20).zpet) of p1)
+ ..subpath(rundy(p3,tim23),8) of p3..cycle;
+infill subpath(rundy(p0,tim24),rundy(p0,tim26).zpet) of p0
+ ..(reverse subpath(rundy(p3,tim25),rundy(p3,tim27).zpet) of p3)..cycle;
+infill subpath(rundy(p1,tim28),rundy(p1,tim30).zpet) of p1
+ ..(reverse subpath(rundy(p3,tim29),rundy(p3,tim31).zpet) of p3)..cycle;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_double_uni_alt:
+bskchar "Surface integral sign (for Unicode)---alternative";
+beginchar(chars.math_oint_double_uni_alt,15.5u#,v_center(11/6dh#)); uni "non";%"0x222F";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], fend; fend:=1.5stem; oblu:=2oblu;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=1/2(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(.5[stem,hair],180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+circle_points(rule_thickness);
+p0:=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r
+ ...z10r...{right}z11r..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1:=p0 shifted (5.5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=draw_circle.r;
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+infill p3;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_triple_uni:
+bskchar "Volume integral sign (for Unicode)";
+beginchar(chars.math_oint_triple_uni,21u#,v_center(11/6dh#)); uni "non";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=.35(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(.5[stem,hair],180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+circle_points(rule_thickness);
+p0:=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r
+ ...z10r...{right}z11r..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1:=p0 shifted (11u,0);
+p5:=p0 shifted (5.5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=reverse(draw_circle.r); p6:=subpath(-2,6) of p3;
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+(tim16,tim17)=p0 intersectiontimes subpath(0,2) of p3;
+(tim18,tim19-2)=p0 intersectiontimes subpath(2,4) of p3;
+(tim20-10,tim21-4)=subpath(10,length p1) of p1 intersectiontimes subpath(4,6) of p3;
+(tim22-10,tim23)=subpath(10,length p1) of p1 intersectiontimes subpath(0,4) of p6;
+(tim24-10,tim25)=subpath(10,length p0) of p0 intersectiontimes p3;
+(tim26-10,tim27-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,4) of p3;
+(tim28,tim29-4)=p1 intersectiontimes subpath(4,6) of p3;
+(tim30,tim31-6)=p1 intersectiontimes subpath(6,8) of p3;
+(tim32,tim33)=p5 intersectiontimes subpath(0,4) of p4;
+(tim34-10,tim35)=subpath(10,length p5) of p5 intersectiontimes subpath(0,4) of p4;
+(tim36-10,tim37-2)=subpath(10,length p5) of p5 intersectiontimes subpath(2,6) of p2;
+(tim38,tim39-2)=p5 intersectiontimes subpath(2,6) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim33).zpet) of p4
+ ..subpath(rundy(p5,tim32),rundy(p5,tim34).zpet) of p5
+ ..subpath(rundy(p4,tim35),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim37).zpet) of p2
+ ..subpath(rundy(p5,tim36),length p5) of p5
+ ..subpath(0,rundy(p5,tim38).zpet) of p5
+ ..subpath(rundy(p2,tim39),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+(tim40,tim41)=subpath(0,2) of p3 intersectiontimes p5;
+(tim42-2,tim43)=subpath(2,4) of p3 intersectiontimes p5;
+(tim44-2,tim45)=subpath(2,5) of p3 intersectiontimes subpath(0,10) of p5;
+(tim46,tim47)=subpath(0,4) of p6 intersectiontimes subpath(0,10) of p5;
+infill subpath(rundy(p3,tim40),rundy(p3,tim17).zpet) of p3
+ ..(reverse subpath(rundy(p0,tim18),rundy(p0,tim16).zpet) of p0)
+ ..subpath(rundy(p3,tim19),rundy(p3,tim42).zpet) of p3
+ ..(reverse subpath(rundy(p5,tim41),rundy(p5,tim43).zpet) of p5)..cycle;
+infill subpath(rundy(p3,tim44),rundy(p3,tim21).zpet) of p3
+ ..(reverse subpath(rundy(p1,tim22),rundy(p1,tim20).zpet) of p1)
+ ..subpath(rundy(p6,tim23),rundy(p6,tim46).zpet) of p6
+ ..(reverse subpath(rundy(p5,tim45),rundy(p5,tim47).zpet) of p5)
+ ..cycle;
+infill subpath(rundy(p0,tim24),rundy(p0,tim26).zpet) of p0
+ ..(reverse subpath(rundy(p3,tim25),rundy(p3,tim27).zpet) of p3)..cycle;
+infill subpath(rundy(p1,tim28),rundy(p1,tim30).zpet) of p1
+ ..(reverse subpath(rundy(p3,tim29),rundy(p3,tim31).zpet) of p3)..cycle;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_triple_uni_var:
+bskchar "Volume integral sign (for Unicode, variant)";
+beginchar(chars.math_oint_triple_uni_var,19u#,v_center(11/6dh#)); uni "0x2230";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos9(.5[stem,bourstem],0); x9=good.x 5u; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+lft x6=u; y2=y9; y8-y4=.35(x2-x6); rt x2=w-u;
+top y10=h-like_curve;
+x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=9u;
+z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(.5[stem,hair],180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+circle_points(rule_thickness);
+p0:=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r
+ ...z10r...{right}z11r..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1:=p0 shifted -z1 scaled .9 shifted z1 shifted (9.5u,0);
+p5:=p0 shifted -z1 scaled .95 shifted z1 shifted (5u,0);
+p2:=reverse(draw_circle.l); p4:=subpath(-1,7) of p2;
+p3:=reverse(draw_circle.r); p6:=subpath(-2,6) of p3;
+(tim0,tim1-4)=p1 intersectiontimes subpath(4,8) of p2;
+(tim2,tim3-6)=p1 intersectiontimes subpath(6,8) of p2;
+(tim4-10,tim5)=subpath(10,length p1) of p1 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes subpath(0,2) of p4;
+(tim8-10,tim9)=subpath(10,length p0) of p0 intersectiontimes subpath(0,2) of p2;
+(tim10-10,tim11-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,6) of p2;
+(tim12,tim13-2)=p0 intersectiontimes subpath(2,6) of p2;
+(tim14-10,tim15-2)=subpath(10,length p1) of p1 intersectiontimes subpath(2,6) of p2;
+(tim16,tim17)=p0 intersectiontimes subpath(0,4) of p6;
+(tim18,tim19-2)=p0 intersectiontimes subpath(2,4) of p3;
+(tim20-10,tim21-4)=subpath(10,length p1) of p1 intersectiontimes subpath(4,6) of p3;
+(tim22-10,tim23)=subpath(10,length p1) of p1 intersectiontimes subpath(0,4) of p6;
+(tim24-10,tim25)=subpath(10,length p0) of p0 intersectiontimes p3;
+(tim26-10,tim27-2)=subpath(10,length p0) of p0 intersectiontimes subpath(2,4) of p3;
+(tim28,tim29-4)=p1 intersectiontimes subpath(4,6) of p3;
+(tim30,tim31-6)=p1 intersectiontimes subpath(6,8) of p3;
+(tim32,tim33)=p5 intersectiontimes subpath(0,4) of p4;
+(tim34-10,tim35)=subpath(10,length p5) of p5 intersectiontimes subpath(0,4) of p4;
+(tim36-10,tim37-2)=subpath(10,length p5) of p5 intersectiontimes subpath(2,6) of p2;
+(tim38,tim39-2)=p5 intersectiontimes subpath(2,6) of p2;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),rundy(p1,tim4).zpet) of p1
+ ..subpath(rundy(p4,tim5),rundy(p4,tim33).zpet) of p4
+ ..subpath(rundy(p5,tim32),rundy(p5,tim34).zpet) of p5
+ ..subpath(rundy(p4,tim35),rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p0,tim10),length p0) of p0
+ ..subpath(0,rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),rundy(p2,tim37).zpet) of p2
+ ..subpath(rundy(p5,tim36),length p5) of p5
+ ..subpath(0,rundy(p5,tim38).zpet) of p5
+ ..subpath(rundy(p2,tim39),rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p1,tim14),length p1) of p1..cycle;
+(tim40,tim41-10)=subpath(0,4) of p6 intersectiontimes subpath(10,length p5) of p5;
+(tim42-2,tim43-10)=subpath(2,5) of p3 intersectiontimes subpath(10,length p5) of p5;
+(tim44-2,tim45)=subpath(2,5) of p3 intersectiontimes subpath(0,10) of p5;
+(tim46,tim47)=subpath(0,4) of p6 intersectiontimes subpath(0,10) of p5;
+infill subpath(rundy(p6,tim40),rundy(p6,tim17).zpet) of p6
+ ..(reverse subpath(rundy(p0,tim18),rundy(p0,tim16).zpet) of p0)
+ ..subpath(rundy(p3,tim19),rundy(p3,tim42).zpet) of p3
+ ..(reverse subpath(rundy(p5,tim41),rundy(p5,tim43).zpet) of p5)..cycle;
+infill subpath(rundy(p3,tim44),rundy(p3,tim21).zpet) of p3
+ ..(reverse subpath(rundy(p1,tim22),rundy(p1,tim20).zpet) of p1)
+ ..subpath(rundy(p6,tim23),rundy(p6,tim46).zpet) of p6
+ ..(reverse subpath(rundy(p5,tim45),rundy(p5,tim47).zpet) of p5)
+ ..cycle;
+infill subpath(rundy(p0,tim24),rundy(p0,tim26).zpet) of p0
+ ..(reverse subpath(rundy(p3,tim25),rundy(p3,tim27).zpet) of p3)..cycle;
+infill subpath(rundy(p1,tim28),rundy(p1,tim30).zpet) of p1
+ ..(reverse subpath(rundy(p3,tim29),rundy(p3,tim31).zpet) of p3)..cycle;
+penlabels(9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_clock_uni:
+bskchar "Clockwise integral sign (for Unicode)";
+beginchar(chars.math_int_clock_uni,10u#,v_center(11/6dh#)); uni "0x2231";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9-.25(x2-x6); y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+p2=reverse (draw_circle.r);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ .5[z17r,z16]=z2; x17r=x16; y17-y16=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6,tim7)=p0 intersectiontimes p2;
+(tim8-ceiling tim6,tim9)=(subpath(ceiling tim6,length p0) of p0) intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+tim12=xpart(p1 intersectiontimes ((x9,ypart(point infinity of p4))--(w,ypart(point infinity of p4))));
+tim13=xpart(p2 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+filldraw subpath(0,rundy(p0,tim8).zpet) of p0
+ ..(reverse subpath(rundy(p2,tim13),rundy(p2,tim9).zpet) of p2)
+ ..subpath(rundy(p4,(0,2/3(x16e-x17r))),rundy(p4,(length p4,2/3(x16e-x17r))).zpet) of p4
+ ..subpath(rundy(p1,tim12),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),2) of p1
+ ..(reverse subpath(rundy(p2,tim11),2) of p2)
+ ..subpath(rundy(p0,tim10),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_anticlock_uni:
+bskchar "Anticlockwise integral sign (for Unicode)";
+beginchar(chars.math_int_anticlock_uni,10u#,v_center(11/6dh#)); uni "0x2A11";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9+.25(x2-x6); y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+p2=reverse (draw_circle.r);
+{{ save arrsize, arrwidth; arrsize=arrwidth=curve;
+ pos17(rule_thickness,0);
+ 1/3[y17r,y16]=y2; x17r=x16=x2; y16-y17=arrsize;
+ p4:=reverse (sipka(16,17));
+}};
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+(tim16,tim17)=p1 intersectiontimes subpath(0,4) of p4;
+tim18=xpart(p1 intersectiontimes ((x9,ypart(point 0 of p4))--(w,ypart(point 0 of p4))));
+(tim19,tim20-2)=p2 intersectiontimes subpath(4,length p4) of p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim18).zpet) of p1
+ ..subpath(rundy(p4,(0,.5(x17r-x16e))),rundy(p4,length p4).zpet) of p4
+ ..(reverse subpath(rundy(p2,tim9),rundy(p2,(tim19,f_obl)).zpet) of p2)
+ ..subpath(rundy(p0,tim8),rundy(p0,tim14).zpet) of p0
+ ..(reverse subpath(2,rundy(p2,tim15).zpet) of p2)
+ ..subpath(2,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_oint_circ_uni:
+bskchar "Circulation integral sign (for Unicode)";
+beginchar(chars.math_oint_circ_uni,10u#,v_center(11/6dh#)); uni "0x2A10";
+italcorr asc_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric fend, tim[]; fend:=1.5stem; oblu:=2oblu;
+path p[];
+pos9(.5[stem,bourstem],0); x9=good.x .5w; y9=.5[h,-d];
+pos10(.5[stem,hair],0); pos11(hair,-90); pos12(fend,180);
+top y10=h-like_curve; x11-lft x10l=2u;
+top y11l=h+o; .5[x10r,x12]=x11; y12''=y11r-like_hair;
+rt x12l=w-u; z12'=z12+.2fend*down+o*left; z12''=z12+.5(fend-currentbreadth)*dir45;
+y10r:=y10l+hair; z11'r=z11r+.5hair*right;
+.5[x13,x10]=.5[x11,x14]=.5[x12,x15]=x9;
+pos13(stem,180); pos14(hair,-90); pos15(fend,0);
+bot y13=-d+like_curve; bot y14l=-d-o; y15''=y14l+like_hair;
+y13r:=y13r-hair;
+z15'=z15+.2fend*up+o*right; z15''=z15+.5(fend-currentbreadth)*dir(-135);
+y9r:=y9r-o; y9l:=y9l+o;
+lft x6=2u; y2=y9; y8-y4=x2-x6; .5[x2,x6]=x9;
+circle_points(rule_thickness);
+p0=z13r..z14l{left}..z15r..z15'..z15l{down}..z15''..z14r..z13l...z9r...z10r...{right}z11r
+ ..z12r..z12'..z12l{up}..z12''..z11l..z10l...z9l...cycle;
+p1=reverse (draw_circle.l);
+p2=reverse (draw_circle.r);
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-ceiling tim0,tim3)=(subpath (ceiling tim0,length p0) of p0) intersectiontimes p1;
+(tim4-ceiling tim2,tim5)=(subpath(ceiling tim2,length p0) of p0) intersectiontimes p1;
+(tim6-ceiling tim4,tim7)=(subpath(ceiling tim4,length p0) of p0) intersectiontimes p1;
+(tim8,tim9)=p0 intersectiontimes p2;
+(tim10-ceiling tim8,tim11)=(subpath(ceiling tim8,length p0) of p0) intersectiontimes p2;
+(tim12-ceiling tim10,tim13)=(subpath(ceiling tim10,length p0) of p0) intersectiontimes p2;
+(tim14-ceiling tim12,tim15)=(subpath(ceiling tim12,length p0) of p0) intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),5) of p1
+ ..(reverse subpath(rundy(p2,tim9),5) of p2)
+ ..subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..(reverse subpath(7,rundy(p2,tim11).zpet) of p2)
+ ..subpath(7,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0&cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2..reverse subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); labels(12',12'',15',15'');
+endchar;
+
+iff known chars.math_int_finite_uni:
+bskchar "Finite part integral sign (for Unicode)";
+beginchar(chars.math_int_finite_uni,10u#,v_center(11/6dh#)); uni "0x2A0D";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w-u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+.5[z8,z9]=z1; y8=y9; x8=2u;
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+p1:=z8l--z9ll;
+p2:=z9r--z8rr;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-10,tim5)=subpath(10,length p0) of p0 intersectiontimes p2;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'',8rr,9ll);
+endchar;
+
+iff known chars.math_int_average_uni:
+bskchar "Integral average sign (for Unicode)";
+beginchar(chars.math_int_average_uni,10u#,v_center(11/6dh#)); uni "0x2A0F";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w-u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+.5[z8,z9]=z1; x8=2u; y8=y1-curve;
+pos8(rule_thickness,angle(z8-z9)-90); pos9(rule_thickness,angle(z8-z9)-90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+p1:=z8l--z9ll;
+p2:=z9r--z8rr;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-10,tim5)=subpath(10,length p0) of p0 intersectiontimes p2;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(4',4'',7',7'',8rr,9ll);
+endchar;
+
+iff known chars.math_int_dbar_uni:
+bskchar "Integral sign with double stroke (for Unicode)";
+beginchar(chars.math_int_dbar_uni,10u#,v_center(11/6dh#)); uni "0x2A0E";
+italcorr asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], fend; fend:=1.5stem;
+pos1(.5[stem,bourstem],0); x1=good.x .5w; y1=.5[h,-d];
+pos2(.5[stem,hair],0); pos3(hair,-90); pos4(fend,180);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+pos10(rule_thickness,90); pos11(rule_thickness,90);
+top y2=h-like_curve;
+x3-lft x2l=2u;
+top y3l=h+o; .5[x2r,x4]=x3; y4''=y3r-like_hair;
+rt x4l=w-u;
+z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45;
+y2r:=y2l+hair; z3'r=z3r+.5hair*right;
+.5[x5,x2]=.5[x3,x6]=.5[x4,x7]=x1;
+pos5(.5[stem,hair],180); pos6(hair,-90); pos7(fend,0);
+bot y5=-d+like_curve; bot y6l=-d-o; y7''=y6l+like_hair;
+y5r:=y5r-hair;
+z7'=z7+.2fend*up+o*right; z7''=z7+.5(fend-currentbreadth)*dir(-135);
+y1r:=y1r-o; y1l:=y1l+o;
+.5[z8,z11]=z1; y8=y9; y10=y11; x8=x10=2u; x9=x11; y10-y8=4rule_thickness;
+bskpoints(8,9,rule_thickness,rule_thickness);
+bskpoints(11,10,rule_thickness,rule_thickness);
+p0:=z5r..z6l{left}..z7r..z7'..z7l{down}..z7''..z6r..z5l...z1r
+ ...z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l...z1l...cycle;
+p1:=z8l--z9ll;
+p2:=z9r--z8rr;
+p3:=z10ll--z11l;
+p4:=z11rr--z10r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-10,tim5)=subpath(10,length p0) of p0 intersectiontimes p2;
+(tim6-10,tim7)=subpath(10,length p0) of p0 intersectiontimes p1;
+(tim8,tim9)=p0 intersectiontimes p3;
+(tim10,tim11)=p0 intersectiontimes p4;
+(tim12-10,tim13)=subpath(10,length p0) of p0 intersectiontimes p4;
+(tim14-10,tim15)=subpath(10,length p0) of p0 intersectiontimes p3;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p3,tim9),infinity) of p3
+ ..subpath(0,rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p0,tim10),rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p4,tim13),infinity) of p4
+ ..subpath(0,rundy(p3,tim15).zpet) of p3
+ ..subpath(rundy(p0,tim14),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),infinity) of p2
+ ..subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(4',4'',7',7'',8rr,9ll,10ll,11rr);
+endchar;
+
+iff known chars.math_sum_integral:
+bskchar "Summation sign with integral";
+beginchar(chars.math_sum_integral,12u#,v_center(10/6dh#)); uni "0x2A0B";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu.more:=2oblu;
+numeric alpha, top_stem, top_arm, bot_arm, fend; fend:=1.5stem;
+top_arm=Vround rule_thickness;
+bot_arm=Vround .5[cap_stem,rule_thickness];
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos7(.5[stem,bourstem],0); x7=good.x .5w; y7=.5[h,-d];
+pos8(.5[stem,hair],0); pos9(hair,-90); pos10(fend,180);
+y2-y1=2/3(h+d); .5[y1,y2]=.5[h,-d];
+lft x1l=lft x2l-o=.5u;
+bot y3r=y1; top y4r=y2; rt x3l=w-u; x4r=w-2u;
+pos3(beak,-90); z3d=(x3r-2ser_height,y1+bot_arm);
+pos4(.65beak,90); z4d=(x4r-ser_height,y2r.b);
+z3l.o=z3l+o*left; z4l.o=z4l+o*left;
+x5r=.5w-o; y5=.5[h,-d]+cap_hair;
+alpha=diag_ratio(2,cap_stem,y2-y5,x5r-x2r);
+pos5(alpha*cap_stem,0);
+alpha:=diag_ratio(2,cap_hair,y5-y1,x5r-x1r);
+pos6(alpha*cap_hair,0); z5r=z6r;
+z1r-z1r.b=bot_arm*down;
+y1'=y1+2bot_arm; z1'=z6l+whatever*(z1r.b-z6r);
+z5'=whatever[z2l+top_arm*down,z5l]=whatever[z6l,z1'];
+y2r.b=y2-bot_arm; z2r.b=z5r+whatever*(z2l-z5');
+top y8=h-like_curve;
+x9-lft x8l=2u;
+top y9l=h+o; .5[x8r,x10]=x9; y10''=y9r-like_hair;
+rt x10l=w-2u;
+z10'=z10+.2fend*down+o*left; z10''=z10+.5(fend-currentbreadth)*dir45;
+y8r:=y8l+hair; z9'r=z9r+.5hair*right;
+.5[x11,x8]=.5[x9,x12]=.5[x10,x13]=x7;
+pos11(.5[stem,hair],180); pos12(hair,-90); pos13(fend,0);
+bot y11=-d+like_curve; bot y12l=-d-o; y13''=y12l+like_hair;
+y11r:=y11r-hair;
+z13'=z13+.2fend*up+o*right; z13''=z13+.5(fend-currentbreadth)*dir(-135);
+y7r:=y7r-o; y7l:=y7l+o;
+p0:=z3l..{dir-110}z3l.o..z3d---obl(1r.b,3d,5r).more---obl(5r,1r.b,2r.b).more---obl(2r.b,5r,4d).more---z4d..z4l.o{dir-70}..z4l---z4r+hair*down..z4r+hair*left---obl(2l,4r,5')---obl(5',2l,1l)---obl(1l,5',3r)---obl(3r,1r,3l);
+p1:=z11r..z12l{left}..z13r..z13'..z13l{down}..z13''..z12r..z11l...z7r
+ ...z8r...{right}z9r..z10r..z10'..z10l{up}..z10''..z9l..z8l...z7l...cycle;
+p2=subpath(15,length p1) of p1;
+p3=subpath(0,12) of p0;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2-7,tim3)=subpath(7,infinity) of p0 intersectiontimes subpath(0,10) of p1;
+(tim4-11,tim5)=subpath(11,infinity) of p0 intersectiontimes subpath(0,10) of p1;
+(tim6-11,tim7-10)=subpath(11,infinity) of p0 intersectiontimes subpath(10,length p1) of p1;
+(tim8-17,tim9-10)=subpath(17,infinity) of p0 intersectiontimes subpath(10,length p1) of p1;
+(tim10-17,tim11)=subpath(17,infinity) of p0 intersectiontimes subpath(0,8) of p1;
+(tim12,tim13)=p2 intersectiontimes subpath(0,4) of p3;
+(tim14,tim15-4)=p2 intersectiontimes subpath(4,infinity) of p3;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim7).zpet) of p1
+ ..subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p1,tim9),length p1) of p1
+ ..subpath(0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p0,tim10),infinity) of p0---cycle;
+oblu:=2oblu;
+infill subpath(rundy(p3,tim13),rundy(p3,(tim15,3f_obl)).zpet) of p3
+ ..subpath(rundy(p2,(tim14,3f_obl)),rundy(p2,tim12).zpet) of p2..cycle;
+(tim16,tim17-7)=p2 intersectiontimes subpath(7,infinity) of p3;
+(tim18,tim19-4)=p2 intersectiontimes subpath(4,7) of p3;
+infill subpath(rundy(p2,tim16),rundy(p2,(tim18,4f_obl)).zpet) of p2
+ ..subpath(rundy(p3,(tim19,4f_obl)),rundy(p3,tim17).zpet) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13); labels(1',1r.b,4d,4l.o,5',2r.b);
+endchar;
+
iff known chars.math_sqintersection:
bskchar "Square set intersection sign";
beginchar(chars.math_sqintersection,11u#,.8asc_height#,0); uni "0x2293";
@@ -1925,6 +6096,41 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_sqintersection_double:
+bskchar "Double square set intersection sign";
+beginchar(chars.math_sqintersection_double,11u#,.8asc_height#,0); uni "0x2A4E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,0);
+bot y1=bot y4=bot y5=bot y8=-d; top y2=top y3=h;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l; top y6=top y7=bot y2r-2rule_thickness;
+lft x5l-x1r=if not boldmath:2.25\\fi rule_thickness; .5[x5,x8]=.5[x6,x7]=.5[x1,x4]; x5=x6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+y2r:=y3l:=y3-rule_thickness+currentbreadth; y6r:=y7l:=y7-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+endchar;
+
+iff known chars.math_sqintersection_uni:
+bskchar "N-ary square set intersection sign (for Unicode)";
+beginchar(chars.math_sqintersection_uni,14u#,v_center(10/6dh#)); uni "0x2A05";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(stem,0); pos4(stem,0);
+bot y1=bot y4=-d; top y2=top y3=h;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,stem,stem); bskpoints(3,4,stem,stem);
+y2r:=y3l:=y3-stem+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
iff known chars.math_squnion:
bskchar "Square set union sign";
beginchar(chars.math_squnion,11u#,.8asc_height#,0); uni "0x2294";
@@ -1940,6 +6146,26 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_squnion_double:
+bskchar "Double square set union sign";
+beginchar(chars.math_squnion_double,11u#,.8asc_height#,0); uni "0x2A4F";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,0);
+top y1=top y4=top y5=top y8=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l; bot y6=bot y7=top y2r+2rule_thickness;
+lft x5l-x1r=if not boldmath:2.25\\fi rule_thickness; .5[x5,x8]=.5[x6,x7]=.5[x1,x4]; x5=x6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+y2r:=y3l:=y3+rule_thickness-currentbreadth; y6r:=y7l:=y7+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+endchar;
+
iff known chars.math_squnion_text:
bskchar "\textstyle square set union sign";
beginchar(chars.math_squnion_text,14u#,0,10/6dh#); uni "non";
@@ -1955,6 +6181,21 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4..z4ll---obl(3l,4l,2r)
penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_squnion_uni:
+bskchar "N-ary square set union sign (for Unicode)";
+beginchar(chars.math_squnion_uni,14u#,v_center(10/6dh#)); uni "0x2A06";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(stem,0); pos4(stem,0);
+top y1=top y4=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,stem,stem); bskpoints(3,4,stem,stem);
+y2r:=y3l:=y3+stem-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..z1..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
iff known chars.math_squnion_disp:
bskchar "\displaystyle square set union sign";
beginchar(chars.math_squnion_disp,18u#,0,14/6dh#); uni "non";
@@ -1970,6 +6211,62 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4+2o*up..z4ll---obl(3l,4l,2r)
penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_sqmultiunion:
+bskchar "Multiset square set union sign";
+beginchar(chars.math_sqmultiunion,11u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1=top y4=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+y2r:=y3l:=y3+rule_thickness-currentbreadth;
+lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y2,y1];
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,2ll,3rr,4ll,5rr);
+endchar;
+
+iff known chars.math_sqcup:
+bskchar "Square cup sign";
+beginchar(chars.math_sqcup,11u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+top y1=top y4=h; bot y2=bot y3=-d;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+y2r:=y3l:=y3+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_sqcap:
+bskchar "Square cap sign";
+beginchar(chars.math_sqcap,11u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0);
+bot y1=bot y4=-d; top y2=top y3=h;
+lft x1l=lft x2l=u; x3r=x4r=w-x1l;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+y2r:=y3l:=y3-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
iff known chars.math_union:
bskchar "Set union sign";
beginchar(chars.math_union,11u#,.8asc_height#,0); uni "0x222A";
@@ -1986,6 +6283,166 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
penlabels(1,2,3,4,5); labels(1rr,5rr);
endchar;
+iff known chars.math_union_serif_closed:
+bskchar "Closed set union sign with serifs";
+beginchar(chars.math_union_serif_closed,14u#,.8asc_height#,0); uni "0x2A4C";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y3l=-d-o; y1=y5=y6l;
+lft x1l=lft x2l=2.5u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+lft x6=u; rt x7=w-u; top y6r=top y7r=h;
+bskpoints(6,7,rule_thickness,rule_thickness);
+filldraw obl(1l,6l,2l)---z2l...z3l...z4l---obl(5l,4l,7ll)---z7ll..z7r---z6rr..z6l---cycle;
+infill obl(5r,1r,4r)---z4r...z3r...z2r---obl(1r,2r,5r)---cycle;
+penlabels(1,2,3,4,5,6,7); labels(6rr,7ll);
+endchar;
+
+iff known chars.math_union_serif_closed_smash:
+bskchar "Closed set union sign with serifs and smash sign";
+beginchar(chars.math_union_serif_closed_smash,14u#,.8asc_height#,0); uni "0x2A50";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(hair,45); pos9(hair,45);
+pos10(hair,45); pos11(hair,45);
+pos12(hair,-45); pos13(hair,-45);
+pos14(hair,-45); pos15(hair,-45);
+bot y3l=-d-o; y1=y5=y6l;
+lft x1l=lft x2l=2.5u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+lft x6=u; rt x7=w-u; top y6r=top y7r=h;
+y8=y12; y11=y15; x10=x13; x9=x14; y8-y11=x9-x10=.5(x4r-x2r); .5[x9,x10]=.5w; .5[y8,y11]=math_axis;
+z10-z8=.5(x9-x10)*dir225; z9-z8=z11-z10; z13-z12=z15-z14; z14-z12=.5(x9-x10)*dir-45;
+z8'=whatever[z12l,z13l]=whatever[z8r,z9r];
+z9'=whatever[z12r,z13r]=whatever[z8r,z9r];
+z10'=whatever[z12r,z13r]=whatever[z8l,z9l];
+z11'=whatever[z12r,z13r]=whatever[z10r,z11r];
+z12'=whatever[z12r,z13r]=whatever[z10l,z11l];
+z13'=whatever[z12l,z13l]=whatever[z10l,z11l];
+z14'=whatever[z12l,z13l]=whatever[z10r,z11r];
+z15'=whatever[z12l,z13l]=whatever[z8l,z9l];
+z16'=whatever[z14l,z15l]=whatever[z8r,z9r];
+z17'=whatever[z14r,z15r]=whatever[z8r,z9r];
+z18'=whatever[z14r,z15r]=whatever[z8l,z9l];
+z19'=whatever[z14r,z15r]=whatever[z10r,z11r];
+z20'=whatever[z14r,z15r]=whatever[z10l,z11l];
+z21'=whatever[z14l,z15l]=whatever[z10l,z11l];
+z22'=whatever[z14l,z15l]=whatever[z10r,z11r];
+z23'=whatever[z14l,z15l]=whatever[z8l,z9l];
+bskpoints(6,7,rule_thickness,rule_thickness);
+filldraw obl(1l,6l,2l)---z2l...z3l...z4l---obl(5l,4l,7ll)---z7ll..z7r---z6rr..z6l---cycle;
+infill obl(5r,1r,4r)---z4r...z3r...z2r---obl(1r,2r,5r)---cycle;
+filldraw z8r---obl(8',8r,12l)---z12l..z12r---obl(9',12r,16')---obl(16',9',14l)---z14l..z14r
+ ---obl(17',14r,9r)---z9r..z9l---obl(18',9l,19')---obl(19',18',11r)---z11r..z11l
+ ---obl(20',11l,15r)---z15r..z15l---obl(21',15l,12')---obl(12',11l,13r)---z13r..z13l
+ ---obl(13',13l,10l)---z10l..z10r---obl(14',10r,15')---obl(15',14',8l)---z8l..cycle;
+infill obl(10',23',11')---obl(11',10',22')---obl(22',11',23')---obl(23',22',10')---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+labels(6rr,7ll,9ll,10ll,12rr,13ll,14ll,15rr,8',9',10',11',12',13',14',15',16',17',18',19',20',21',22',23');
+endchar;
+
+iff known chars.math_union_union:
+bskchar "Two joinde set union signs";
+beginchar(chars.math_union_union,16u#,.8asc_height#,0); uni "0x2A4A";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+top y1=top y5=top y6=top y10=h; bot y3l=bot y8l=-d-o;
+lft x1l=lft x2l=u; x4=x5=x6=x7=.5w; x3=.5[x1,x4]; x8=.5[x6,x9];rt x9l=rt x10l=w-u;
+y2=y4=y7=y9=y3+(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(10,9,hair,hair);
+p0=z1l---z2l...z3l...z4l---z5l;
+p1=z6l---z7l...z8l..z9l---z10l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..z10rr---z9r...z8r...z7r---z5l..z5r---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,10rr);
+endchar;
+
+iff known chars.math_union_minus:
+bskchar "Set union sign with minus";
+beginchar(chars.math_union_minus,11u#,.8asc_height#,0); uni "0x2A41";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+.5[x6,x7]=.5w; lft x6=rt x2r+rule_thickness; y6=y7=math_axis;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw bskrule(6,7,hair,hair);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_overbar:
+bskchar "Set union sign with overbar";
+beginchar(chars.math_union_overbar,11u#,asc_height#,0); uni "0x2A42";
+italcorr asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1=top y5=.8h; bot y3l=-d-o;
+lft x1l=lft x2l=lft x6=u; x4l=x5l=x7=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2); top y6r=top y7r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw bskrule(6,7,hair,0);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_logor:
+bskchar "Set union sign with logical or sign";
+beginchar(chars.math_union,11u#,.8asc_height#,0); uni "0x2A45";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+x6=.5w; y6=max(5u,2rule_thickness); lft x7l=rt x1r+rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+logor(6,7,8);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_union_uni:
+bskchar "N-ary set union sign (for Unicode)";
+beginchar(chars.math_union_uni,14u#,v_center(10/6dh#)); uni "0x22C3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(.9stem,90); pos4(stem,180); pos5(stem,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
iff known chars.math_union_text:
bskchar "\textstyle set union sign";
beginchar(chars.math_union_text,14u#,0,10/6dh#); uni "non";
@@ -2014,6 +6471,43 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*up..z5rr---z4r...z3r...z2r---z1rr..z
penlabels(1,2,3,4,5); labels(1rr,5rr);
endchar;
+iff known chars.math_cup:
+bskchar "Cup sign";
+beginchar(chars.math_cup,11u#,x_height#,0); uni "non";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_parallel_union:
+bskchar "Parallel set union sign";
+beginchar(chars.math_parallel_union,11u#,.8asc_height#,0); uni "0x22D3";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(.9rule_thickness,90); pos9(rule_thickness,180);
+pos10(rule_thickness,180);
+top y1=top y5=top y6=top y10=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x8=.5w;
+y2=y4=y3+(x3-x2); lft x6l=lft x7l=x1r+if not boldmath: 2.25\\fi rule_thickness;
+y7=y9=y8+(x8-x7); x9=x10=w-x6; bot y8l=y3r+2rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
iff known chars.math_multiunion:
bskchar "Multiset union sign";
beginchar(chars.math_multiunion,11u#,.8asc_height#,0); uni "0x228E";
@@ -2040,6 +6534,31 @@ filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
endchar;
+iff known chars.math_multiunion_uni:
+bskchar "N-ary union with plus";
+beginchar(chars.math_multiunion_uni,14u#,v_center(10/6dh#)); uni "0x2A04";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(.9stem,90); pos4(stem,180); pos5(stem,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1];
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
iff known chars.math_multiunion_text:
bskchar "\textstyle multiset union sign";
beginchar(chars.math_multiunion_text,14u#,0,10/6dh#); uni "non";
@@ -2090,6 +6609,58 @@ filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
endchar;
+iff known chars.math_multiset:
+bskchar "Multiset sign";
+beginchar(chars.math_multiset,11u#,.8asc_height#,0); uni "0x228C";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180); pos6(rule_thickness,90);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+lft x7=rt x1r + stem; x7=w-x6; y6l=y7=.5[y3l,y1];
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+{{ save arrsize, arrwidth; numeric arrsize, arrwidth;
+arrsize=1.2arrwidth=if boldmath: 2.15 else:2\\ fi curve;
+filldraw sipka(7,6)---z6rr..z6l---cycle;
+}};
+penlabels(0,1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_multiset_multiply:
+bskchar "Multiset multiplication sign";
+beginchar(chars.math_multiset_multiply,11u#,.8asc_height#,0); uni "0x228D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180); pos6(rule_thickness,90);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=.5w;
+y2=y4=y3+(x3-x2); y6=.5[y3l,y1];
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+dot(6);
+penlabels(0,1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_multiset_multiply_n:
+bskchar "N-ary union with dot";
+beginchar(chars.math_multiset_multiply_n,14u#,v_center(10/6dh#)); uni "0x2A03";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(.9stem,90); pos4(stem,180); pos5(stem,180);
+top y1=top y5=h; bot y3l=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=.5w;
+y2=y4=y3+(x3-x2); y6=.5[y3l,y1];
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+{{ numeric old_dot; old_dot:=dot_size; save dot_size; numeric dot_size; dot_size:=1.5old_dot;
+ dot(6); }};
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
iff known chars.math_intersection:
bskchar "Set intersection sign";
beginchar(chars.math_intersection,11u#,.8asc_height#,0); uni "0x2229";
@@ -2106,6 +6677,116 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
penlabels(1,2,3,4,5); labels(1rr,5rr);
endchar;
+iff known chars.math_intersection_serif_closed:
+bskchar "Closed set intersection sign with serifs";
+beginchar(chars.math_intersection_serif_closed,14u#,.8asc_height#,0); uni "0x2A4D";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,270); pos7(rule_thickness,270);
+top y3l=h+o; y1=y5=y6l;
+lft x1l=lft x2l=2.5u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+lft x6=u; rt x7=w-u; bot y6r=bot y7r=-d;
+bskpoints(6,7,rule_thickness,rule_thickness);
+filldraw obl(1l,6l,2l)---z2l...z3l...z4l---obl(5l,4l,7ll)---z7ll..z7r---z6rr..z6l---cycle;
+infill obl(5r,1r,4r)---z4r...z3r...z2r---obl(1r,2r,5r)---cycle;
+penlabels(1,2,3,4,5,7,8); labels(6rr,7ll);
+endchar;
+
+iff known chars.math_intersection_intersection:
+bskchar "Two joined set intersection signs";
+beginchar(chars.math_intersection_intersection,16u#,.8asc_height#,0); uni "0x2A4B";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+bot y1=bot y5=bot y6=bot y10=-d; top y3l=top y8l=h+o;
+lft x1l=lft x2l=u; x4=x5=x6=x7=.5w; x3=.5[x1,x4]; x8=.5[x6,x9]; rt x9l=rt x10l=w-u;
+y2=y4=y7=y9=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(10,9,hair,hair);
+p0=z1l---z2l...z3l...z4l---z5l;
+p1=z6l---z7l...z8l..z9l---z10l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..z10rr---z9r...z8r...z7r---z5l..z5r---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,10rr);
+endchar;
+
+iff known chars.math_intersection_dot:
+bskchar "Set intersection sign with dot";
+beginchar(chars.math_intersection_dot,11u#,.8asc_height#,0); uni "0x2A40";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=.5w;
+y2=y4=y3-(x3-x2); y6=.5[y3l,y1];
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+dot(6);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_overbar:
+bskchar "Set intersection sign with overbar";
+beginchar(chars.math_intersection_overbar,11u#,asc_height#,0); uni "0x2A43";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+bot y1=bot y5=-d; top y3l=.8h+o;
+lft x1l=lft x2l=lft x6=u; x4l=x5l=x7=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2); top y6r=top y7r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw bskrule(6,7,hair,0);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_logand:
+bskchar "Set intersection sign with logical and inside";
+beginchar(chars.math_intersection_logand,11u#,.8asc_height#,0); uni "0x2A44";
+italcorr asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=.5w;
+y2=y4=y3-(x3-x2); y6=h-max(5u,2rule_thickness); lft x7r=rt x1r+rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+logand(6,7,8);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_intersection_uni:
+bskchar "N-ary set intersection sign (for Unicode)";
+beginchar(chars.math_intersection_uni,14u#,v_center(10/6dh#)); uni "0x22C2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem,0); pos2(stem,0); pos3(.9stem,-90); pos4(stem,180); pos5(stem,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,stem,stem); bskpoints(5,4,stem,stem);
+filldraw z1l---z2l...z3l...z4l---z5l..z5..z5rr---z4r...z3r...z2r---z1rr..z1..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
iff known chars.math_intersection_text:
bskchar "\textstyle set intersection sign";
beginchar(chars.math_intersection_text,14u#,0,10/6dh#); uni "non";
@@ -2134,6 +6815,166 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*down..z5rr---z4r...z3r...z2r---z1rr.
penlabels(1,2,3,4,5); labels(1rr,5rr);
endchar;
+iff known chars.math_cap:
+bskchar "Cap sign";
+beginchar(chars.math_cap,11u#,x_height#,0); uni "non";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_parallel_intersection:
+bskchar "Parallel set intersection sign";
+beginchar(chars.math_parallel_intersection,11u#,.8asc_height#,0); uni "0x22D2";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180); pos6(rule_thickness,0);
+pos7(rule_thickness,0); pos8(rule_thickness,-90); pos9(rule_thickness,180);
+pos10(rule_thickness,180);
+bot y1=bot y5=bot y6=bot y10=-d; top y3l=h+o; top y8l=y3r-2rule_thickness;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x8=.5w;
+y2=y4=y3-(x3-x2); y7=y9=y8-(x8-x7); lft x6l=lft x7l=x1r+if not boldmath: 2.25\\fi rule_thickness; x9=x10=w-x6;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_multiintersection:
+bskchar "Multiset intersection sign";
+beginchar(chars.math_multiintersection,11u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+bot y1=bot y5=-d; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+lft x6=rt x1r + stem; x7=w-x6; y6=y7=.5[y8,y9]=.5[y3l,y1];
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_cup_cap:
+bskchar "Cup above cap sign";
+beginchar(chars.math_cup_cap,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A46";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+top y1=top y5=h; bot y3l=math_axis+1.5rule_thickness;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bot y6=bot y10=-d; top y8l=math_axis-1.5rule_thickness;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8-(x8-x7);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_cup_cap_rule:
+bskchar "Cup above cap sign wih rule";
+beginchar(chars.math_cup_cap_rule,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A48";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+top y1=top y5=h; bot y3l=math_axis+1.5rule_thickness;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3+(x3-x2);
+bot y6=bot y10=-d; top y8l=math_axis-1.5rule_thickness;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8-(x8-x7);
+y11=y12=math_axis; x11=x6l; x12=x9l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+filldraw bskrule(11,12,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_cap_cup:
+bskchar "Cap above cup sign";
+beginchar(chars.math_cap_cup,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A47";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(.9rule_thickness,90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+bot y1=bot y5=math_axis+1.5rule_thickness; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+top y6=top y10=math_axis-1.5rule_thickness; bot y8l=-d-o;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8+(x8-x7);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_cap_cup_rule:
+bskchar "Cap above cup sign with rule";
+beginchar(chars.math_cap_cup_rule,9u#,v_center(asc_height#+rule_thickness#)); uni "0x2A49";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0); pos8(.9rule_thickness,90);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+bot y1=bot y5=math_axis+1.5rule_thickness; top y3l=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=.5w;
+y2=y4=y3-(x3-x2);
+top y6=top y10=math_axis-1.5rule_thickness; bot y8l=-d-o;
+lft x6l=lft x7l=u; x9l=x10l=w-x6l; x8=.5w;
+y7=y9=y8+(x8-x7);
+y11=y12=math_axis; x11=x6l; x12=x9l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr---z4r...z3r...z2r---z1rr..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10rr---z9r...z8r...z7r---z6rr..cycle;
+filldraw bskrule(11,12,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(1rr,5rr,6rr,10rr);
+endchar;
+
iff known chars.math_infinity:
bskchar "Infinity sign";
beginchar(chars.math_infinity,16u#,x_height#,0); uni "0x221E";
@@ -2154,7 +6995,6 @@ p2=z4l{right}..z0{dir-70}..{right}z1l;
p3=z5l{up}..z2l..z0l..z3l..{up}z6l;
p4=z1r{left}..z0{dir110}..{left}z4r;
p5=z6l{down}..z3l..z0l..z2l..z5l{down};
-
z10=bsktouch(p1,right,p2,left);
tim1=xpart(p1 intersectiontimes (z10--(x3,y10)));
tim2=xpart(p2 intersectiontimes (z10--(x1,y10)));
@@ -2163,7 +7003,6 @@ tim3=xpart(p3 intersectiontimes (z11--(x2,y11)));
tim4=xpart(p4 intersectiontimes (z11--(x3,y11)));
(tim5,tim6)=p5 intersectiontimes p2;
(tim7,tim8)=p1 intersectiontimes p4;
-
filldraw subpath(0,rundy(p1,tim1).zpet) of p1
..subpath(rundy(p2,tim2),infinity) of p2
..subpath(0,rundy(p3,tim3).zpet) of p3
@@ -2175,6 +7014,37 @@ infill subpath(rundy(p1,tim7),infinity) of p1
penlabels(0,1,2,3,4,5,6);
endchar;
+iff known chars.math_infinity_incomplete:
+bskchar "Incomplete infinity sign";
+beginchar(chars.math_infinity_incomplete,16u#,x_height#,0); uni "0x29DC";
+italcorr x_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric testem, tlstem, tim[]; oblu:=2oblu;
+testem=.5[curve, hair]; tlstem=.75[curve,stem];
+pos1(testem,90); pos2(tlstem,270); pos3(tlstem,270); pos4(testem,90);
+pos5(vair,180); pos6(vair,180);
+lft x6r=u; rt x5l=w-u;
+bot y3r=bot y1l=-o; top y4r=top y2l=h+o;
+x3=x4=.27(w-2u)+u; x1=x2=.76(w-2u)+u;
+y5=y6=.5h; z0=(.5w,.5h);
+p0:=z6{down}..z3..z0..z2..{up}z5; pos0(curve,angle(direction 2 of p0)-90);
+p1=z6r{down}..z3r..z0r..z2r..z5r{down};
+p2=z4l{right}..z0{dir-70}..{right}z1l;
+p4=z1r{left}..z0r{dir110}..{left}z4r;
+p5=z6l{down}..z3l..z0l..z2l..z5l{down};
+z10=bsktouch(p1,right,p2,left);
+tim1=xpart(p1 intersectiontimes (z10--(x3,y10)));
+tim2=xpart(p2 intersectiontimes (z10--(x1,y10)));
+(tim3,tim4)=p5 intersectiontimes p2;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..{up}z5l..{down}z5r..p4..cycle;
+infill subpath(0,rundy(p5,tim3).zpet) of p5 ..
+ (reverse subpath(0,rundy(p2,tim4).zpet) of p2) .. cycle;
+penlabels(0,1,2,3,4,5,6);
+endchar;
+
iff known chars.math_propto:
bskchar "Proportionality sign";
beginchar(chars.math_propto,12u#,x_height#,0); uni "0x221D";
@@ -2484,12 +7354,12 @@ bskchar "Extensible root sign---top";
beginchar(chars.math_root_top,19u#,rule_thickness#,dh#-rule_thickness#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
-path p[]; numeric tim[];
+path p[]; numeric tim[]; oblu.more:=2oblu;
pos1(rule_thickness,0); pos2(rule_thickness,0);
pos3(rule_thickness,90);
y1=-d; x1r=x2r=w-6u; bot y3l=0; y3r=y2;
x3=good.x(w+.5); y2r:=y3l;
-filldraw z1l---obl(2l,1l,3r)---z3r..z3l---hide(oblu:=2oblu)obl(2r,3l,1r)---z1r..cycle;
+filldraw z1l---obl(2l,1l,3r)---z3r..z3l---obl(2r,3l,1r).more---z1r..cycle;
penlabels(1,2,3);
endchar;
@@ -2510,6 +7380,7 @@ endchar;
iff known chars.math_partial:
bskchar "Partial difference sign";
beginchar(chars.math_partial,9u#,asc_height#,0); uni "0x2202";
+italcorr .7asc_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
path p[]; numeric tim[]; oblu:=2oblu;
@@ -2527,6 +7398,7 @@ filldraw z7r{down}..z7l{up}..{dir0}z6l...z5l..{left}z2l..subpath(0,rundy(p1,tim1
..subpath(rundy(p0,tim2),infinity) of p0..cycle;
infill z1r{up}..z4r{left}..z3r..z2r..cycle;
penlabels(1,2,3,4,5,6,7);
+math_fit(-.5bar_height#*slant,0);
endchar;
iff known chars.math_dag:
@@ -2605,6 +7477,259 @@ filldraw sipka(0,1)---z1l..z1rr---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_right_long:
+bskchar "Long rightward arrow";
+beginchar(chars.arrow_right_long,22u#,v_center(5u#)); uni "0x27F6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_right_doublehead:
+bskchar "Rightward arrow with doublehead";
+beginchar(chars.arrow_right_doublehead,17u#,v_center(5u#)); uni "0x21A0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (rt x0a-x0,0);
+tim1=xpart(p1 intersectiontimes (z1l--(w,y0a.l)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (top z1r--(w,top y1r)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (z1l--(w,y0a.l)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (top z1r--(w,top y1r)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1l..z1rr
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_right_short:
+bskchar "Short rightward arrow";
+beginchar(chars.arrow_right_short,9u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_right_triangle:
+bskchar "Rightward arrow with triangle head";
+beginchar(chars.arrow_right_triangle,15u#,v_center(5u#)); uni "0x279D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=w-u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3+o=x0-arrsize;
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+penlabels(1,2,3); labels(0,1rr);
+endchar;
+
+iff known chars.arrow_right_triangle_white:
+bskchar "Rightward arrow with white triangle head";
+beginchar(chars.arrow_right_triangle_white,15u#,v_center(5u#)); uni "0x21FE";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=w-u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3+o=x0-arrsize;
+z0'-z0=(0,rule_thickness-currentbreadth) rotated angle(z2r-z0);
+z0''-z0=(rule_thickness-currentbreadth,0) rotated angle(z2r-z0);
+x2'l=x2'r=x2+rule_thickness-currentbreadth;
+z2'r=z0'+whatever*(z2r-z0); z2'l=z0''+whatever*(z2l-z0);
+z0'''=whatever[z2'l,z0'']=whatever[z2'r,z0'];
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+oblu:=2oblu;
+infill obl(0''',2'r,2'l)---obl(2'l,0''',2'r)---obl(2'r,2'l,0''')---cycle;
+penlabels(1,2,2',3); labels(0,0',0'',0''',1rr);
+endchar;
+
+iff known chars.arrow_left_triangle:
+bskchar "Leftward arrow with triangle head";
+beginchar(chars.arrow_left_triangle,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3-o=x0+arrsize;
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+penlabels(1,2,3); labels(0,1rr);
+endchar;
+
+iff known chars.arrow_left_triangle_white:
+bskchar "Leftward arrow with white triangle head";
+beginchar(chars.arrow_left_triangle_white,15u#,v_center(5u#)); uni "0x21FD";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+x0=u; x1=w-x0; y0=y1=y2=y3=math_axis; x2=x3-o=x0+arrsize;
+z0'-z0=(0,-rule_thickness+currentbreadth) rotated angle(z2r-z0);
+z0''-z0=(rule_thickness-currentbreadth,0) rotated angle(z2r-z0);
+x2'l=x2'r=x2-rule_thickness+currentbreadth;
+z2'r=z0'+whatever*(z2r-z0); z2'l=z0''+whatever*(z2l-z0);
+z0'''=whatever[z2'l,z0'']=whatever[z2'r,z0'];
+bskpoints(1,0,hair,hair);
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---z1rr..z1l---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+oblu:=2oblu;
+infill obl(0''',2'r,2'l)---obl(2'l,0''',2'r)---obl(2'r,2'l,0''')---cycle;
+penlabels(1,2,2',3); labels(0,0',0'',0''',1rr);
+endchar;
+
+iff known chars.arrow_left_right_triangle:
+bskchar "Left-rightward arrow with triangle heads";
+beginchar(chars.arrow_left_right_triangle,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+penpos4(2arrwidth,90);
+x0=w-u; x5=u; x1=x4-o=x5+arrsize; y0=y1=y2=y3=y4=y5=math_axis; x2=x3+o=x0-arrsize;
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---obl(1r,3r,4r)---obl(4r,1r,5)
+ ---obl(5,4r,4l)---obl(4l,5,1l)---obl(1l,4l,3l)---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+penlabels(1,2,3,4); labels(0,5);
+endchar;
+
+iff known chars.arrow_left_right_triangle_white:
+bskchar "Left-rightward arrow with white triangle heads";
+beginchar(chars.arrow_left_right_triangle_white,15u#,v_center(5u#)); uni "0x21FF";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); penpos2(2arrwidth,90); pos3(rule_thickness,90);
+penpos4(2arrwidth,90);
+x0=w-u; x5=u; x1=x4-o=x5+arrsize; y0=y1=y2=y3=y4=y5=math_axis; x2=x3+o=x0-arrsize;
+z0'-z0=(0,rule_thickness-currentbreadth) rotated angle(z2r-z0);
+z0''-z0=(rule_thickness-currentbreadth,0) rotated angle(z2r-z0);
+x2'l=x2'r=x2+rule_thickness-currentbreadth;
+z2'r=z0'+whatever*(z2r-z0); z2'l=z0''+whatever*(z2l-z0);
+z0'''=whatever[z2'l,z0'']=whatever[z2'r,z0'];
+
+z5'-z5=(0,-rule_thickness+currentbreadth) rotated angle(z4r-z5);
+z5''-z5=(rule_thickness-currentbreadth,0) rotated angle(z4r-z5);
+x4'l=x4'r=x4-rule_thickness+currentbreadth;
+z4'r=z5'+whatever*(z4r-z5); z4'l=z5''+whatever*(z4l-z5);
+z5'''=whatever[z4'l,z5'']=whatever[z4'r,z5'];
+filldraw obl(0,2l,2r)---obl(2r,0,3r)---obl(3r,2r,1r)---obl(1r,3r,4r)---obl(4r,1r,5)
+ ---obl(5,4r,4l)---obl(4l,5,1l)---obl(1l,4l,3l)---obl(3l,1l,2l)---obl(2l,3l,0)---cycle;
+oblu:=2oblu;
+infill obl(0''',2'r,2'l)---obl(2'l,0''',2'r)---obl(2'r,2'l,0''')---cycle;
+infill obl(5''',4'r,4'l)---obl(4'l,5''',4'r)---obl(4'r,4'l,5''')---cycle;
+penlabels(1,2,2',3,4,4'); labels(0,0',0'',0''',5);
+endchar;
+
+iff known chars.arrow_right_two:
+bskchar "Two rightward arrows";
+beginchar(chars.arrow_right_two,15u#,v_center(13u#)); uni "0x21C9";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+rt x0=rt x2=w-u; x1=x3=w-x0; y0=y1r; y2=y3r; .5[y0,y2]=math_axis; bot y2-top y1=2arrwidth+o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_right_three:
+bskchar "Three rightward arrows";
+beginchar(chars.arrow_right_three,15u#,v_center(13u#)); uni "0x21F6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90); pos5(rule_thickness,90);
+{{ save arrwidth, arrsize;
+numeric arrsize, arrwidth; arrsize=1.2arrwidth=if boldmath: 2.35 else:2\\ fi curve;
+rt x0=rt x2=rt x4=w-u; x1=x3=x5=w-x0; y0=y1r; y2=y3r; y4=y5r;
+.5[y0,y4]=y2=math_axis; bot y2-top y1=2arrwidth+o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+filldraw sipka(4,5)---z5l..z5rr---cycle;
+}};
+labels(1rr,3rr,5rr);
+endchar;
+
+iff known chars.arrow_right_not:
+bskchar "Rightward arrow with negation";
+beginchar(chars.arrow_right_not,15u#,v_center(5u#)); uni "0x219B";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+.5[x2,x3]=.5[x0c,x1]; .5[y2,y3]=y0; x3-x2=.5(y3-y2); top y3=h;
+pos2(rule_thickness,angle(z2-z3)+90); pos3(rule_thickness,angle(z2-z3)+90);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(2'r,0a.l,2r)---z2rr..z2l---obl(2'l,2l,1l).more
+ ---z1l..z1rr---obl(3'l,1rr,3l)---z3ll..z3r---obl(3'r,3r,0a.r).more---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_right_not_vert:
+bskchar "Rightward arrow with vertical negation";
+beginchar(chars.arrow_right_not_vert,15u#,v_center(5u#)); uni "0x21F8";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+x2=x3=.5[x0c,x1]; .5[y2,y3]=y0; top y3=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(2'r,0a.l,2r)---z2rr..z2l---obl(2'l,2l,1l)
+ ---z1l..z1rr---obl(3'l,1rr,3l)---z3ll..z3r---obl(3'r,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_right_not_vert_double:
+bskchar "Rightward arrow with double vertical negation";
+beginchar(chars.arrow_right_not_vert_double,15u#,v_center(5u#)); uni "0x21FB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+x2=x3; .5[x2,x4]=.5[x0c,x1]; x4=x5; x4-x2=min(3rule_thickness,3u);
+.5[y2,y3]=.5[y4,y5]=y0; top y3=top y5=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y2'l=y2'r=y4'l=y4'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y5'l=y5'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+x4'l=x5'l=x4l; x4'r=x5'r=x4r;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(4'r,0a.l,4r)---z4rr..z4l---tobl(4'l,4l,2'r)
+ ---obl(2'r,0a.l,2r)---z2rr..z2l---obl(2'l,2l,1l)
+ ---z1l..z1rr---obl(3'l,1rr,3l)---z3ll..z3r---tobl(3'r,3r,5'l)
+ ---tobl(5'l,3'r,5ll)---z5ll..z5r---obl(5'r,5r,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_right_tail:
+bskchar "Rightward arrow with tail";
+beginchar(chars.arrow_right_tail,15u#,v_center(5u#)); uni "0x21A3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=w-x0+arrsize; y0=y1r=math_axis;
+forsuffixes $=b,e,d,c: z1$-z1=z0$-z0; endfor;
+x1r:=x1l:=x1r-u;
+filldraw sipka(0,1)---z1l{dir210}..z1b{dir225}..{dir45}z1b+hair*up
+ ..z1c..z1d..z1e+hair*down{dir135}..{dir-45}z1e..{dir-30}z1r--cycle;
+labels(1b,1c,1d,1e);
+endchar;
+
iff known chars.arrow_hook_left:
bskchar "Left hook for rightward arrows";
beginchar(chars.arrow_hook_left,5u#,math_axis#+4u#,-math_axis#); uni "non";
@@ -2618,6 +7743,57 @@ filldraw z1l---z2l..z3l{up}..{right}z4l..{left}z4r..{down}z3r..z2r---z1r..cycle;
penlabels(1,2,3,4);
endchar;
+iff known chars.arrow_right_hook:
+bskchar "Rightward hook arrow";
+beginchar(chars.arrow_right_hook,18u#,v_center(5u#)); uni "0x21AA";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0); pos3(rule_thickness,270);
+rt x0=w-u; rt x1=4u; y0=y1r=math_axis;
+x2l=u; x3=x1; y2=.5[y1,y3]; y3l=math_axis+4u; x3l:=x3l-hair;
+filldraw sipka(0,1)---z1l..z2l{up}..{right}z3l..{left}z3r..{down}z2r..z1r---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_circle:
+bskchar "Rightward arrow through circle";
+beginchar(chars.arrow_right_circle,18u#,v_center(11u#)); uni "0x21F4";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5[x9,x10]; x2-x6=y8-y4=6u;
+lft x9=u; rt x10=w-5u; rt x11=w-u; y9r=y10=y11=math_axis;
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair);
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9rr{left}..z9l---z10l..z10r---z9rr;
+(tim0-1,tim1-1)=subpath(1,3) of p0 intersectiontimes subpath(1,2) of p2;
+(tim2-5,tim3)=subpath(5,7) of p0 intersectiontimes subpath(0,2) of p2;
+(tim4-5,tim5-3)=subpath(5,7) of p0 intersectiontimes subpath(3,4) of p2;
+(tim6-1,tim7-3)=subpath(1,3) of p0 intersectiontimes subpath(3,4) of p2;
+(tim8-1,tim9-1)=subpath(1,3) of p1 intersectiontimes subpath(1,2) of p2;
+(tim10-5,tim11)=subpath(5,7) of p1 intersectiontimes subpath(0,2) of p2;
+(tim12-5,tim13-3)=subpath(5,7) of p1 intersectiontimes subpath(3,4) of p2;
+(tim14-1,tim15-3)=subpath(1,3) of p1 intersectiontimes subpath(3,4) of p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),2) of p2
+ ..reverse sipka(11,10)
+ ..subpath(3,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p0,tim4),length p0) of p0
+ ..subpath(0,rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10).zpet,rundy(p1,tim8)) of p1..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..reverse subpath(0,rundy(p1,tim14).zpet) of p1
+ ..reverse subpath(rundy(p1,tim12),length p1) of p1..cycle;
+penlabels(9,10);
+endchar;
+
+
iff known chars.arrow_left:
bskchar "Leftward arrow";
beginchar(chars.arrow_left,15u#,v_center(5u#)); uni "0x2190";
@@ -2630,6 +7806,206 @@ filldraw sipka(0,1)---z1rr..z1l---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_left_long:
+bskchar "Long leftward arrow";
+beginchar(chars.arrow_left_long,22u#,v_center(5u#)); uni "0x27F5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_left_doublehead:
+bskchar "Leftward arrow with doublehead";
+beginchar(chars.arrow_left_doublehead,17u#,v_center(5u#)); uni "0x219E";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (lft x0a-x0,0);
+tim1=xpart(p1 intersectiontimes (z1r--(0,y0a.l)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (bot z1l--(0,bot y1l)));
+tim3-6=xpart(subpath(6,infinity) of p0 intersectiontimes (top z1r--(0,top y1r)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (bot z1l--(0,bot y1l)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1rr..z1l
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_left_short:
+bskchar "Short leftward arrow";
+beginchar(chars.arrow_left_short,9u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_left_two:
+bskchar "Two leftward arrows";
+beginchar(chars.arrow_left_two,15u#,v_center(13u#)); uni "0x21C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=lft x2=u; x1=x3=w-x0; y0=y1l; y2=y3l; .5[y0,y2]=math_axis; bot y2-top y1=2arrwidth;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3rr..z3l---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_left_not:
+bskchar "Leftward arrow with negation";
+beginchar(chars.arrow_left_not,15u#,v_center(5u#)); uni "0x219A";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+.5[x2,x3]=.5[x0c,x1]; .5[y2,y3]=y0; x3-x2=.5(y3-y2); top y3=h;
+pos2(rule_thickness,angle(z2-z3)+90); pos3(rule_thickness,angle(z2-z3)+90);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r).more
+ ---z1rr..z1l---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r).more---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_left_not_vert:
+bskchar "Leftward arrow with vertical negation";
+beginchar(chars.arrow_left_not_vert,15u#,v_center(5u#)); uni "0x21F7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+x2=x3=.5[x0c,x1]; .5[y2,y3]=y0; top y3=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r)
+ ---z1rr..z1l---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_left_dash:
+bskchar "Leftward dashed arrow";
+beginchar(chars.arrow_left_dash,15u#,v_center(5u#)); uni "0x21E0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,90); pos3(rule_thickness,90); pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x0=u; x1=.5w-u; y0=y1l=y2l=y3l=y4l=y5l=math_axis;
+rt x5=w-u; x2-x1=x4-x3=2.5rule_thickness; x5-x4=x3-x2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1r..z1l---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_up_dash:
+bskchar "Upward dashed arrow";
+beginchar(chars.arrow_up_dash,9u#,asc_height#,0); uni "0x21E1";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0); pos5(rule_thickness,0);
+x0=x1l=x2l=x3l=x4l=x5l=.5w-o;
+top y0=h+apex_o; bot y1=x_height;
+bot y5=-d; y1-y2=y3-y4=2.5rule_thickness; y5-y4=y3-y2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1r..z1l---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_right_dash:
+bskchar "Rightward dashed arrow";
+beginchar(chars.arrow_right_dash,15u#,v_center(5u#)); uni "0x21E2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,90); pos3(rule_thickness,90); pos4(rule_thickness,90); pos5(rule_thickness,90);
+rt x0=w-u; x1=.5w+u; y0=y1r=y2r=y3r=y4r=y5r=math_axis;
+lft x5=u; x2-x1=x4-x3=-2.5rule_thickness; x5-x4=x3-x2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_down_dash:
+bskchar "Downward dashed arrow";
+beginchar(chars.arrow_down_dash,9u#,asc_height#,0); uni "0x21E3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+pos2(rule_thickness,0); pos3(rule_thickness,0); pos4(rule_thickness,0); pos5(rule_thickness,0);
+x0=x1r=x2r=x3r=x4r=x5r=.5w+o;
+bot y0=-d-apex_o; top y1=(h-x_height);
+top y5=h; y1-y2=y3-y4=-2.5rule_thickness; y5-y4=y3-y2;
+bskpoints(1,0,hair,hair); bskpoints(5,4,hair,hair);
+filldraw sipka(0,1)---z1l..z1r---cycle;
+filldraw z2r---z3r..z3l---z2l..cycle;
+filldraw z4r---z5rr..z5l---z4ll..cycle;
+penlabels(2,3,4,5); labels(1rr,4ll,5rr);
+endchar;
+
+iff known chars.arrow_left_not_vert_double:
+bskchar "Leftward arrow with double vertical negation";
+beginchar(chars.arrow_left_not_vert_double,15u#,v_center(5u#)); uni "0x21FA";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+x2=x3; .5[x2,x4]=.5[x0c,x1]; x4=x5; x4-x2=min(3rule_thickness,3u);
+.5[y2,y3]=.5[y4,y5]=y0; top y3=top y5=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y2'l=y2'r=y4'l=y4'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y5'l=y5'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+x5'l=x4'l=x5l; x5'r=x4'r=x5r;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---tobl(3'r,3r,5'l)
+ ---tobl(5'l,3'r,5l)---z5ll..z5r---obl(5'r,5r,1r)
+ ---z1rr..z1l---obl(4'r,1l,4r)---z4rr..z4l---tobl(4'l,4l,2'r)
+ ---tobl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr,2'l,2'r,3'l,3'r,2rr,3ll);
+endchar;
+
+iff known chars.arrow_left_tail:
+bskchar "Leftward arrow with tail";
+beginchar(chars.arrow_left_tail,15u#,v_center(5u#)); uni "0x21A2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+lft x0=u; x1=w-x0-arrsize; y0=y1l=math_axis;
+forsuffixes $=b,e,d,c: z1$-z1=z0$-z0; endfor;
+x1r:=x1l:=x1r+u;
+filldraw sipka(0,1)---z1r{dir30}..{dir45}z1b..z1b+hair*down{dir225}
+ ..z1c..z1d..{dir-45}z1e+hair*up..{dir135}z1e..{dir150}z1l---cycle;
+labels(1b,1c,1d,1e);
+endchar;
+
iff known chars.arrow_hook_right:
bskchar "Right hook for leftward arrow";
beginchar(chars.arrow_hook_right,5u#,math_axis#+4u#,-math_axis#); uni "non";
@@ -2643,6 +8019,160 @@ filldraw z1l---z2l..z3l{up}..{left}z4l..{right}z4r..{down}z3r..z2r---z1r..cycle;
penlabels(1,2,3,4);
endchar;
+iff known chars.arrow_left_hook:
+bskchar "Leftward arrow with hook";
+beginchar(chars.arrow_left_hook,18u#,v_center(5u#)); uni "0x21A9";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,270);
+lft x0=u; lft x1=w-4u; y0=y1l=math_axis;
+x2l=w-u; x3=x1+hair; y2=.5[y1,y3]; y3l=math_axis+4u; x3r:=x3r+hair;
+filldraw sipka(0,1)---z1r..{up}z2r..z3r{left}..z3l{right}..z2l{down}..z1l---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_above_right:
+bskchar "Leftward arrow above rightward arrow";
+beginchar(chars.arrow_left_above_right,15u#,v_center(13u#)); uni "0x21C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=u; x1=w-x0; rt x2=w-u; x3=w-x2; y0=y1l; y2=y3r;
+.5[y0,y2]=math_axis; bot y2-top y1=-2arrwidth;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_left_above_right_stop:
+bskchar "Leftward arrow above rightward arrow with stop bars";
+beginchar(chars.arrow_left_above_right_stop,15u#,v_center(13u#)); uni "0x21B9";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+lft x0=u; x1=w-x0; rt x2=w-u; x3=w-x2; y0=y1l; y2=y3r;
+.5[y0,y2]=math_axis; bot y2-top y1=-2arrwidth;
+.5[y4,y5]=y0; y4=y0b; x4l=x5l=x0;
+.5[y6,y7]=y2; y6=y2e; x6r=x7r=x2;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+p0=sipka(0,1);
+p1=reverse bskrule(4,5,rule_thickness,rule_thickness);
+p2=sipka(2,3);
+p3=bskrule(7,6,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+(tim5,tim6)=p2 intersectiontimes p3;
+tim9=round(tim5);
+(tim7-tim9,tim8)=subpath(tim9,infinity) of p2 intersectiontimes p3;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---z1rr..z1l---cycle;
+filldraw subpath(0,rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p3,tim6),length p3) of p3
+ ..subpath(0,rundy(p3,tim8).zpet) of p3
+ ..subpath(rundy(p2,tim7),infinity) of p2---z3l..z3r---cycle ;
+penlabels(4,5,6,7); labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_right_above_left:
+bskchar "Rightward arrow above leftward arrow";
+beginchar(chars.arrow_right_above_left,15u#,v_center(13u#)); uni "0x21C4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=u; x1=w-x0; rt x2=w-u; x3=w-x2; y0=y1l; y2=y3r;
+.5[y0,y2]=math_axis; bot y2-top y1=2arrwidth;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_up_tip_left:
+bskchar "Upward arrow with leftward tip";
+beginchar(chars.arrow_up_tip_left,9.5u#,asc_height#,0); uni "0x21B0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0);
+lft x0=u; x1=w-x0; y0=y1l=h-arrwidth; x1l:=x1l-rule_thickness+currentbreadth;
+bot y2=-d; rt x2r=w-u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2rr..z2l---obl(1l,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_up_tip_right:
+bskchar "Upward arrow with rightward tip";
+beginchar(chars.arrow_up_tip_right,9.5u#,asc_height#,0); uni "0x21B1";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0);
+rt x0=w-u; x1=w-x0; y0=y1r=h-arrwidth; x1l:=x1l+rule_thickness-currentbreadth;
+bot y2=-d; lft x2l=u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2r)---z2rr..z2l---obl(1r,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_down_tip_left:
+bskchar "Downward arrow with leftward tip";
+beginchar(chars.arrow_down_tip_left,9.5u#,asc_height#,0); uni "0x21B2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180);
+lft x0=u; x1=w-x0; y0=y1l=arrwidth; x1r:=x1r-rule_thickness+currentbreadth;
+top y2=h; rt x2l=w-u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2rr..z2l---obl(1l,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_CR:
+bskchar "Carriage return arrow";
+beginchar(chars.arrow_CR,12u#,.5[x_height#,asc_height#],0); uni "0x21B5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180);
+lft x0=u; x1=w-x0; y0=y1l=arrwidth; x1r:=x1r-rule_thickness+currentbreadth;
+top y2=h; rt x2l=w-u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2rr..z2l---obl(1l,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_LF:
+bskchar "Line feed arrow";
+beginchar(chars.arrow_LF,13u#,x_height#,0); uni "0x21B4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90);
+x0=x1r=w-u-arrwidth; top y2r=h; lft x2=u;
+bot y0=-d-apex_o; top y1=h; y1l:=y1l-rule_thickness+currentbreadth;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2l)---z2l..z2rr---obl(1r,2r,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
+iff known chars.arrow_down_tip_right:
+bskchar "Downward arrow with rightward tip";
+beginchar(chars.arrow_down_tip_right,9.5u#,asc_height#,0); uni "0x21B3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180);
+rt x0=w-u; x1=w-x0; y0=y1r=arrwidth; x1r:=x1r+rule_thickness-currentbreadth;
+top y2=h; lft x2r=u;
+bskpoints(2,1,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2r)---z2rr..z2l---obl(1r,2l,0a.r)---cycle;
+penlabels(2); labels(2rr);
+endchar;
+
iff known chars.arrow_up:
bskchar "Upward arrow";
beginchar(chars.arrow_up,9u#,asc_height#,0); uni "0x2191";
@@ -2657,6 +8187,68 @@ filldraw sipka(0,1)---z1rr..z1l---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_up_doublehead:
+bskchar "Upward arrow with doublehead";
+beginchar(chars.arrow_up_doublehead,9u#,asc_height#,0); uni "0x219F";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0);
+x0=x1l=.5w-o; top y0=h+apex_o; bot y1=-d;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (0,bot y0a-y0);
+tim1=xpart(p1 intersectiontimes (z1r--(x0a.r,h)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (lft z1l--(lft x1l,h)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (rt z1r--(rt x0a.l,h)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (lft z1l--(lft x1l,h)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1rr..z1l
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_up_bars:
+bskchar "Upward arrow with two horizontal bars";
+beginchar(chars.arrow_up_bars,9u#,asc_height#,0); uni "0x21DE";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1l=.5w-o;
+top y0=h+apex_o; bot y1=-d;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+.5[x2,x3]=.5[x4,x5]=x1; y2=y3; y4=y5; .5[y2,y4]=.5[y0c,y1]; y4-y2=min(3rule_thickness,3u);
+lft x2=lft x4=u;
+y5'r=y4'r=y4r; y5'l=y4'l=y4l; y2'r=y3'r=y3r; y2'l=y3'l=y3l;
+x5'r=x5'l=x3'r=x3'l=x1r; x4'r=x4'l=x2'r=x2'l=x1l;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(5'r,0a.l,5r)---z5r..z5ll---tobl(5'l,5ll,3'r)
+ ---tobl(3'r,5'l,3r)---z3r..z3ll---obl(3'l,3ll,1r)---z1rr..z1l
+ ---obl(2'l,1l,2l)---z2l..z2rr---tobl(2'r,2rr,4'l)---tobl(4'l,2'r,4l)
+ ---z4l..z4rr---obl(4'r,4rr,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr);
+endchar;
+
+iff known chars.arrow_up_two:
+bskchar "Two upward arrows";
+beginchar(chars.arrow_up_two,15.5u#,asc_height#,0); uni "0x21C8";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1l; lft x0=u+arrwidth;
+x2=x3l; rt x2=w-u-arrwidth;
+top y0=top y2=h+apex_o; bot y1=bot y3=-d;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3rr..z3l---cycle;
+labels(1rr,2rr);
+endchar;
+
iff known chars.arrow_down:
bskchar "Downward arrow";
beginchar(chars.arrow_down,9u#,asc_height#,0); uni "0x2193";
@@ -2664,12 +8256,519 @@ adjust_fit(0,0);
pickup tiny.nib;
pos1(rule_thickness,0);
x0=x1r=.5w+o;
-top y0=-d-apex_o; bot y1=h;
+bot y0=-d-apex_o; top y1=h;
bskpoints(1,0,hair,hair);
filldraw sipka(0,1)---z1l..z1rr---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_down_doublehead:
+bskchar "Downward arrow with doublehead";
+beginchar(chars.arrow_down_doublehead,9u#,asc_height#,0); uni "0x21A1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0);
+x0=x1r=.5w+o; bot y0=-d-apex_o; top y1=h;
+bskpoints(1,0,hair,hair);
+p0:=sipka(0,1);
+p1:=p0 shifted (0,bot y0a-y0);
+tim1=xpart(p1 intersectiontimes (z1l--(x0a.l,-d)));
+tim2-1=xpart(subpath(1,infinity) of p1 intersectiontimes (rt z1r--(rt x1r,-d)));
+tim3-5=xpart(subpath(5,infinity) of p0 intersectiontimes (lft z1l--(lft x0a.l,-d)));
+tim4=xpart(subpath(0,2) of p0 intersectiontimes (rt z1r--(rt x1r,-d)));
+filldraw subpath(rundy(p0,tim4),rundy(p0,tim3).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---z1l..z1rr
+ ---subpath(0,rundy(p1,tim2).zpet) of p1..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_down_bars:
+bskchar "Downward arrow with two horizontal bars";
+beginchar(chars.arrow_down_bars,9u#,asc_height#,0); uni "0x21DF";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o;
+bot y0=-d-apex_o; top y1=h;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+.5[x2,x3]=.5[x4,x5]=x1; y2=y3; y4=y5; .5[y2,y4]=.5[y0c,y1]; y4-y2=min(3rule_thickness,3u);
+lft x2=lft x4=u;
+y5'r=y4'r=y4r; y5'l=y4'l=y4l; y2'r=y3'r=y3r; y2'l=y3'l=y3l;
+x5'r=x5'l=x3'r=x3'l=x1r; x4'r=x4'l=x2'r=x2'l=x1l;
+bskpoints(1,0,hair,hair);
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(2'l,0a.l,2l)---z2l..z2rr---tobl(2'r,2rr,4'l)
+ ---tobl(4'l,2'r,4l)---z4l..z4rr---obl(4'r,4rr,1l)---z1l..z1rr
+ ---obl(5'r,1r,5r)---z5r..z5ll---tobl(5'l,5ll,3'r)---tobl(3'r,5'l,3r)
+ ---z3r..z3ll---obl(3'l,3ll,0a.r)---cycle;
+penlabels(2,3,4,5); labels(1rr);
+labels(1rr);
+endchar;
+
+iff known chars.arrow_down_two:
+bskchar "Two downward arrow";
+beginchar(chars.arrow_down_two,15.5u#,asc_height#,0); uni "0x21CA";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1r; lft x0=u+arrwidth;
+x2=x3r; rt x2=w-u-arrwidth;
+bot y0=bot y2=-d-apex_o; top y1=top y3=h;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,2rr);
+endchar;
+
+iff known chars.arrow_up_arrow_down:
+bskchar "Upward arrow followed by downward arrow";
+beginchar(chars.arrow_up_arrow_down,14u#,asc_height#,0); uni "0x21C5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1l; x0=u+arrwidth;
+top y0=h+apex_o; bot y1=-d;
+x2=x3r; x2=w-u-arrwidth;
+top y3=h; bot y2=-d-o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_down_arrow_up:
+bskchar "Downward arrow followed by upward arrow";
+beginchar(chars.arrow_down_arrow_up,14u#,asc_height#,0); uni "0x21F5";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos3(rule_thickness,0);
+x0=x1l; rt x0=w-u-arrwidth;
+top y0=h+apex_o; bot y1=-d;
+x2=x3r; lft x2=u+arrwidth;
+top y3=h; bot y2=-d-o;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw sipka(0,1)---z1rr..z1l---cycle;
+filldraw sipka(2,3)---z3l..z3rr---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.arrow_left_squiggly:
+bskchar "Leftward squiggly arrow";
+beginchar(chars.arrow_left_squiggly,17u#,v_center(5u#)); uni "0x21DC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sh; oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x0=u; x1=x0+arrsize+u; rt x6=w-u; y0=y1l=math_axis;
+y3r=y5r=h; y4l=-d; y6=y1; x4=.5[x1,x6]; .5[x3,x5]=x4; .5[x4,x6]=x5;
+sh:=rule_thickness/abs(cosd(angle(z1r-z3r)))-currentbreadth;
+y3l:=y5l:=y3r-sh; y4r:=y4l+sh;
+filldraw reverse sipka(0,1)---obl(1l,0a.r,3l)---obl(3l,1l,4l).more---obl(4l,3l,5l)
+ ---obl(5l,4l,6l).more---z6l..z6r---obl(5r,6r,4r)---obl(4r,5r,3r).more
+ ---obl(3r,4r,1r)---obl(1r,3r,0a.l)---cycle;
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.arrow_right_squiggly:
+bskchar "Rightward squiggly arrow";
+beginchar(chars.arrow_right_squiggly,17u#,v_center(5u#)); uni "0x21DD";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sh; oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+rt x0=w-u; x1=x0-arrsize-u; lft x6=u; y0=y1r=math_axis;
+y3r=y5r=h; y4l=-d; y6=y1; x4=.5[x1,x6]; .5[x3,x5]=x4; .5[x4,x6]=x5;
+sh:=rule_thickness/abs(cosd(angle(z3r-z1r)))-currentbreadth;
+y3l:=y5l:=y3r-sh; y4r:=y4l+sh;
+filldraw sipka(0,1)---obl(1l,0a.l,3l)---obl(3l,1l,4l).more---obl(4l,3l,5l)
+ ---obl(5l,4l,6l).more---z6l..z6r---obl(5r,6r,4r)---obl(4r,5r,3r).more
+ ---obl(3r,4r,1r)---obl(1r,3r,0a.r)---cycle;
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.arrow_right_left_squiggly:
+bskchar "Rightward and leftward squiggly arrow";
+beginchar(chars.arrow_right_left_squiggly,21u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric sh; oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90); pos6(rule_thickness,90);
+rt x0=w-u; x1=x0-arrsize-u; lft x2=u; x6=x2+arrsize+u; y0=y1r=y2=y2'r=y6l=math_axis;
+y3r=y5r=h; y4l=-d; x4=.5[x1,x6]; .5[x3,x5]=x4; .5[x4,x6]=x5; x2'=x6;
+sh:=rule_thickness/abs(cosd(angle(z3r-z1r)))-currentbreadth;
+y3l:=y5l:=y3r-sh; y4r:=y4l+sh;
+filldraw sipka(0,1)---obl(1l,0a.l,3l)---obl(3l,1l,4l).more---obl(4l,3l,5l)
+ ---obl(5l,4l,6l).more---z6l..sipka(2,2')..z6r---obl(5r,6r,4r)---obl(4r,5r,3r).more
+ ---obl(3r,4r,1r)---obl(1r,3r,0a.r)---cycle;
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.arrow_left_curly:
+bskchar "Leftward curly arrow";
+beginchar(chars.arrow_left_curly,15u#,v_center(10u#)); uni "0x21AB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,270);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos1'(rule_thickness,90); pos1''(rule_thickness,90);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=w-u; .5[x2,x4]=x1; x4=x5; top y3l=h; bot y5=-d; y2=y4=.5[y1,y3]; x3=x1; x2-x4=y3-y1;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,4l)---z4l..z3l..z2l..z1l
+ ---obl(1''l,1l,5r)---z5rr..z5l---obl(1'l,5l,0a.r)---cycle;
+infill z4r..z3r..z2r..z1r---obl(1''r,1r,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_right_curly:
+bskchar "Rightward curly arrow";
+beginchar(chars.arrow_right_curly,15u#,v_center(10u#)); uni "0x21AC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0); pos3(rule_thickness,270);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos1'(rule_thickness,270); pos1''(rule_thickness,270);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=u; .5[x2,x4]=x1; x4=x5; top y3l=h; bot y5=-d; y2=y4=.5[y1,y3]; x3=x1; x4-x2=y3-y1;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,5l)---z5l..z5rr---obl(1''r,5r,1l)---z1l..z2l..z3l..z4l---obl(1'l,4l,0a.r)---cycle;
+infill z4r..z3r..z2r..z1r---obl(1''l,1r,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_left_down_curly:
+bskchar "Leftward down curly arrow";
+beginchar(chars.arrow_left_down_curly,15u#,v_center(10u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,180); pos3(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos1'(rule_thickness,90); pos1''(rule_thickness,90);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=w-u; .5[x2,x4]=x1; x4=x5; bot y3l=-d; top y5=h; y2=y4=.5[y1,y3]; x3=x1; x2-x4=y1-y3;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,5l)---z5l..z5rr---obl(1''r,5r,1r)
+ ---z1r..z2l..z3l..z4l---obl(1'l,4l,0a.r)--cycle;
+infill z4r..z3r..z2r..z1l---obl(1''l,1l,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_right_down_curly:
+bskchar "Rightward down curly arrow";
+beginchar(chars.arrow_right_down_curly,15u#,v_center(10u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,0); pos3(rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos1'(rule_thickness,270); pos1''(rule_thickness,270);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=u; .5[x2,x4]=x1; x4=x5; bot y3l=-d; top y5=h; y2=y4=.5[y1,y3]; x3=x1; x4-x2=y1-y3;
+bskpoints(5,4,hair,hair);
+z1'=(x4l,y1); z1''=(x4r,y1);
+filldraw sipka(0,1)---obl(1'r,0a.l,4l)---z4l..z3l..z2l..z1r---obl(1''l,1r,5r)
+ ---z5rr..z5l---obl(1'l,5l,0a.r)--cycle;
+infill z4r..z3r..z2r..z1l---obl(1''r,1l,4r)---cycle;
+penlabels(1',1'',2,3,4,5); labels(5rr);
+endchar;
+
+iff known chars.arrow_arch_left_down:
+bskchar "Arch with left downward arrow";
+beginchar(chars.arrow_arch_left_down,17u#,x_height#,0); uni "0x21B6";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric theta;
+pos1(rule_thickness,0); pos2(rule_thickness,-90); pos3(rule_thickness,180);
+lft x1l=.5u+arrwidth; x0=x1; bot y0=-o; y1=arrsize+1;
+top y2l=h+o; rt x3l=w-u; y3=0; x2=.45[x1,x3];
+p=z3{up}..{left}z2; theta=angle(direction xpart(p intersectiontimes (z1--(w,y1))) of p);
+filldraw sipka(0,1)if y1l>y0a.l:..z1l fi {dir(180-theta)}..{right}z2l..{down}z3l
+ ..z3r{up}..{left}z2r..{dir(360-theta)}z1r..cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_arch_right_down:
+bskchar "Arch with right downward arrow";
+beginchar(chars.arrow_arch_right_down,17u#,x_height#,0); uni "0x21B7";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric theta;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180);
+rt x1r=w-.5u-arrwidth; x0=x1; bot y0=-o; y1=arrsize+1;
+top y2r=h+o; lft x3r=u; y3=0; x2=.45[x1,x3];
+p=z3{up}..{right}z2; theta=angle(direction xpart(p intersectiontimes (z1--(w,y1))) of p);
+filldraw sipka(0,1)..z1l{dir(180-theta)}..{left}z2l..{down}z3l
+..z3r{up}..{right}z2r..{dir(360-theta)}z1r..cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_open_loop_left_down:
+bskchar "Open-loop downward arrow with left tip";
+beginchar(chars.arrow_open_loop_left_down,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+lft x1l=.5u+arrwidth; bot y0=-o; z1=z0+arrsize*dir110;
+top y2l=h+o; x3l=w-4u; y3=0; x2=.45[x1,w-u];
+pos1(rule_thickness,10); pos2(rule_thickness,-90); pos3(rule_thickness,140);
+p=z1{dir110}..z2{right}..{dir-130}z3;
+tim0=xpart(p intersectiontimes ((x2,x_height)--(w,x_height)));
+tim1=xpart(p intersectiontimes ((x2,x_height)--(0,x_height)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir110}..z1'l..{right}z2l..z3'l..{dir-130}z3l
+ ..z3r{dir50}..z3'r..{left}z2r..z1'r..{dir-70}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_open_loop_right_up:
+bskchar "Open-loop upward arrow with right tip";
+beginchar(chars.arrow_open_loop_right_up,14u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+rt x1r=w-.5u-arrwidth; bot y0=-o; z1=z0+arrsize*dir70;
+top y2r=h+o; x3r=4u; y3=0; x2=.45[x1,u];
+pos1(rule_thickness,170); pos2(rule_thickness,90); pos3(rule_thickness,220);
+p=z1{dir70}..z2{left}..{dir-50}z3;
+tim0=xpart(p intersectiontimes ((x2,x_height)--(0,x_height)));
+tim1=xpart(p intersectiontimes ((x2,x_height)--(w,x_height)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir70}..z1'l..{left}z2l..z3'l..{dir-50}z3l
+ ..z3r{dir130}..z3'r..{right}z2r..z1'r..{dir-110}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_open_loop_up_right:
+bskchar "Open-loop rightward arrow with upper tip";
+beginchar(chars.arrow_open_loop_up_right,15u#,v_center(1.3x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+lft x0=u-o; top y1l=h-arrwidth+.2h; z1=z0+arrsize*dir20;
+rt x2l=w-u; y3=-d+.25x_height+.2h; x3=u; y2=.45[y1,-d+.2h];
+pos1(rule_thickness,100); pos2(rule_thickness,180); pos3(rule_thickness,40);
+p=z1{dir20}..z2{down}..{dir130}z3;
+tim0=xpart(p intersectiontimes ((2/3w,y2)--(2/3w,-2h)));
+tim1=xpart(p intersectiontimes ((2/3w,y2)--(2/3w,h)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir20}..z1'l..{down}z2l..z3'l..{dir130}z3l
+ ..z3r{dir-50}..z3'r..{up}z2r..z1'r..{dir200}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_open_loop_down_left:
+bskchar "Open-loop leftward arrow with lower tip";
+beginchar(chars.arrow_open_loop_down_left,15u#,v_center(1.3x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+rt x0=w-u+o; bot y1l=-d+arrwidth-.2h; z1=z0+arrsize*dir200;
+lft x2l=u; y3=.8h-.25x_height; x3=w-u; y2=.45[y1,.8h];
+pos1(rule_thickness,-80); pos2(rule_thickness,0); pos3(rule_thickness,220);
+p=z1{dir200}..z2{up}..{dir-50}z3;
+tim0=xpart(p intersectiontimes ((1/3w,y2)--(1/3w,2h)));
+tim1=xpart(p intersectiontimes ((1/3w,y2)--(1/3w,-2h)));
+pos3'(rule_thickness,angle(direction tim0 of p)-90); z3'=point tim0 of p;
+pos1'(rule_thickness,angle(direction tim1 of p)-90); z1'=point tim1 of p;
+filldraw sipka(0,1){dir200}..z1'l..{up}z2l..z3'l..{dir-50}z3l
+ ..z3r{dir130}..z3'r..{down}z2r..z1'r..{dir20}cycle;
+penlabels(1',2,3,3');
+endchar;
+
+iff known chars.arrow_curve_left_down:
+bskchar "Curved arrow with left downward arrow";
+beginchar(chars.arrow_curve_left_down,17u#,v_center(.65x_height#)); uni "0x293A";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; y1=y3; .5[y1-.5arrsize,y2]=math_axis; top y2=h+o-.5rule_thickness;
+x2=.5[w-u,x1]; x3=w-u-.25rule_thickness;
+p0=z3..{left}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{left}z2r..reverse sipka(5,4)..{right}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_right_down:
+bskchar "Curved arrow with right downward arrow";
+beginchar(chars.arrow_curve_right_down,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1-.5arrsize,y2]=math_axis; top y2=h+o-.5rule_thickness;
+x2=.5[u,x1]; x3=u+.25rule_thickness;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{right}z2r..sipka(5,4)..{left}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_left_right_down:
+bskchar "Curved arrow with left-right downward arrow";
+beginchar(chars.arrow_curve_left_right_down,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(.5u#,.5u#);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1-.45arrsize,y2]=math_axis; top y2=h+o-.5rule_thickness;
+x2=.5w; lft x3=u+.5arrwidth;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,90); pos3(rule_thickness,theta-180);
+z4=z1+arrwidth*dir(theta);
+z5=z3+arrwidth*dir(180-theta);
+filldraw z2r{right}..sipka(4,1)..{left}z2l..sipka(5,3)..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_left_up:
+bskchar "Curved arrow with left upward arrow";
+beginchar(chars.arrow_curve_left_up,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; y1=y3; .5[y1+.5arrsize,y2]=math_axis; bot y2=-d-o+.5rule_thickness;
+x2=.5[w-u,x1]; x3=w-u-.25rule_thickness;
+p0=z3..{left}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{left}z2r..sipka(5,4)..{right}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_right_up:
+bskchar "Curved arrow with right upward arrow";
+beginchar(chars.arrow_curve_right_up,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1+.5arrsize,y2]=math_axis; bot y2=-d-o+.5rule_thickness;
+x2=.5[u,x1]; x3=u+.25rule_thickness;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,theta-180);
+pos4(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z3r{dir(-theta)}..{right}z2r..reverse sipka(5,4)..{left}z2l..{dir(180-theta)}z3l..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_curve_left_right_up:
+bskchar "Curved arrow with left-right upward arrow";
+beginchar(chars.arrow_curve_left_right_up,17u#,v_center(.65x_height#)); uni "non";
+adjust_fit(.5u#,.5u#);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; y1=y3; .5[y1+.45arrsize,y2]=math_axis; bot y2=-d-o+.5rule_thickness;
+x2=.5w; lft x3=u+.5arrwidth;
+p0=z3..{right}z2..z1;
+theta:=angle(direction infinity of p0);
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,theta-180);
+z4=z1+arrwidth*dir(theta);
+z5=z3+arrwidth*dir(180-theta);
+filldraw z2r{right}..reverse sipka(4,1)..{left}z2l..reverse sipka(5,3)..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.arrow_left_wavy:
+bskchar "Wavy leftwards arrow";
+beginchar(chars.arrow_left_wavy,19u#,v_center(.65x_height#)); uni "0x219C";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; .5[y1+.5arrsize,y2]=math_axis;
+bot y2=-d-o+.5rule_thickness; y3-y2=.25(x6-x2); y6=y2;
+x2=.5[x3,x1]; x3=.5[x2,x6]; x6=w-u-.25rule_thickness;
+theta:=150;
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+pos4(rule_thickness,theta+90); pos6(rule_thickness,-90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z6r{dir(theta)}..z3r{left}..{left}z2r..sipka(5,4)
+ ..{right}z2l..{right}z3l..{dir(180+theta)}z6l..cycle;
+penlabels(1,2,3,6);
+endchar;
+
+iff known chars.arrow_right_wavy:
+bskchar "Wavy rightwards arrow";
+beginchar(chars.arrow_right_wavy,19u#,v_center(.65x_height#)); uni "0x219D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+rt x1=w-u-.5arrwidth; .5[y1+.5arrsize,y2]=math_axis;
+bot y2=-d-o+.5rule_thickness; y3-y2=.25(x2-x6); y6=y2;
+x2=.5[x3,x1]; x3=.5[x2,x6]; x6=u+.25rule_thickness;
+theta:=30;
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+pos4(rule_thickness,theta+90); pos6(rule_thickness,-90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+filldraw z6r{dir(theta)}..z3r{right}..{right}z2r..reverse sipka(5,4)
+ ..{left}z2l..{left}z3l..{dir(180+theta)}z6l..cycle;
+penlabels(1,2,3,6);
+endchar;
+
+iff known chars.arrow_left_right_wavy:
+bskchar "Wavy left-right arrow";
+beginchar(chars.arrow_left_right_wavy,19u#,v_center(.65x_height#)); uni "0x21AD";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta;
+lft x1=u+.5arrwidth; .5[y1+.5arrsize,y2]=math_axis;
+bot y2=-d-o+rule_thickness; .5[y2,y3]=math_axis;
+x2=.5[x3,x1]; x3=.5[x2,x6]; x6=w-u-.5arrwidth; .5[y6,y1]=math_axis;
+theta:=150;
+pos1(rule_thickness,theta+90); pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+pos4(rule_thickness,theta+90); pos6(rule_thickness,-90); pos7(rule_thickness,theta+90);
+z4=z1+.25arrwidth*dir(theta+180); z5=z1+.75arrwidth*dir(theta);
+z7=z6+.25arrwidth*dir(theta); z8=z6+.75arrwidth*dir(theta-180);
+p0=sipka(8,7);
+p1=sipka(5,4);
+p2=z8a{z6-z8}..{left}z3..{left}z2..{z5-z1}z5a;
+pos9(rule_thickness,angle(direction 1.5 of p2)+90); z9=point 1.5 of p2;
+filldraw p0..{left}z3r..z9r..{left}z2r..p1..{right}z2l..z9l..{right}z3l..cycle;
+penlabels(1,2,3,6,9);
+endchar;
+
+iff known chars.math_contradiction:
+bskchar "Contradiction symbol";
+beginchar(chars.math_contradiction,10u#,asc_height#,asc_depth#); uni "0x21AF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric theta; oblu.more:=2oblu;
+theta=60;
+pos1(rule_thickness,theta-90); pos2(rule_thickness,-80); pos3(rule_thickness,theta-90);
+bot y0=-d-o; x0=3u; x3=.5w; top y3l=h;
+rt x1r=w-u; z1=z0+whatever*dir theta;
+x2l=u; z2=z1+whatever*dir 190;
+p0=sipka(0,1);
+z1'=whatever[z0a.l,z1l]=z2r+whatever*dir10;
+z2'=whatever[z2l,z1l]=z3r+whatever*(z3l-z2r);
+z3'=whatever[z2l,z1l]=whatever[z1r,z0a.r];
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw p0---obl(1',0a.l,2r).more---obl(2r,1',3l)---z3ll..z3r
+ ---obl(2',3r,3').more---z3'..z1r---cycle;
+penlabels(1,2,3); labels(1',2',3');
+endchar;
+
iff known chars.harpoon_right_up:
bskchar "Rightward up harpoon";
beginchar(chars.harpoon_right_up,15u#,v_center(5u#)); uni "0x21C0";
@@ -2718,6 +8817,86 @@ filldraw subpath (0,4) of sipka(0,1)...{right}z0a.l---z1rr..z1l---cycle;
labels(1rr);
endchar;
+iff known chars.harpoon_right_up_left_down:
+bskchar "Rightward up harpoon above leftward down harpoon";
+beginchar(chars.harpoon_right_up_left_down,15u#,v_center(8u#)); uni "0x21CC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+rt x0=rt x3=w-u; x1=x2=w-x0; y0=y1r; y2=y3l; .5[y0,y2]=math_axis; y1l-y3r=2u;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw subpath (0,4) of sipka(0,1)...{left}z0a.l---z1l..z1rr---cycle;
+filldraw subpath (0,4) of sipka(2,3)...{right}z2a.l---z3rr..z3l---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.harpoon_left_up_right_down:
+bskchar "Leftward up harpoon above rightward down harpoon";
+beginchar(chars.harpoon_left_up_right_down,15u#,v_center(8u#)); uni "0x21CB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+rt x0=rt x3=w-u; x1=x2=w-x0; y0=y1r; y2=y3l; .5[y0,y2]=math_axis; y1r-y3l=-2u;
+bskpoints(1,0,hair,hair); bskpoints(3,2,hair,hair);
+filldraw subpath (4,infinity) of sipka(0,1)---z1l..z1rr---cycle;
+filldraw subpath (4,infinity) of sipka(2,3)---z3rr..z3l---cycle;
+labels(1rr,3rr);
+endchar;
+
+iff known chars.harpoon_up_left:
+bskchar "Upward left harpoon";
+beginchar(chars.harpoon_up_left,6u#,asc_height#,0); uni "0x21BF";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1l; rt x1r=w-u;
+top y0=h+apex_o; bot y1=-d;
+bskpoints(1,0,hair,hair);
+filldraw subpath(0,4) of sipka(0,1)...{down}z0a.l---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_up_right:
+bskchar "Upward right harpoon";
+beginchar(chars.harpoon_up_right,6u#,asc_height#,0); uni "0x21BE";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+lft x0=lft x1l=u;
+top y0=h+apex_o; bot y1=-d;
+bskpoints(1,0,hair,hair);
+filldraw subpath(4,infinity) of sipka(0,1)---z1rr..z1l---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_down_left:
+bskchar "Downward left harpoon";
+beginchar(chars.harpoon_down_left,6u#,asc_height#,0); uni "0x21C3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r; rt x1r=w-u;
+top y0=-d-apex_o; bot y1=h;
+bskpoints(1,0,hair,hair);
+filldraw subpath(4,infinity) of sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.harpoon_down_right:
+bskchar "Downward right harpoon";
+beginchar(chars.harpoon_down_right,6u#,asc_height#,0); uni "0x21C2";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+x0=x1r; lft x1l=u;
+top y0=-d-apex_o; bot y1=h;
+bskpoints(1,0,hair,hair);
+filldraw subpath(0,4) of sipka(0,1)...{up}z0a.l---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
iff known chars.arrow_left_right:
bskchar "Left-right arrow";
beginchar(chars.arrow_left_right,18u#,v_center(5u#)); uni "0x2194";
@@ -2728,6 +8907,100 @@ lft x0=u; x1=w-x0; y0=y1=math_axis;
filldraw sipka(0,1)---sipka(1,0)---cycle;
endchar;
+iff known chars.arrow_left_right_long:
+bskchar "Long left-right arrow";
+beginchar(chars.arrow_left_right_long,25u#,v_center(5u#)); uni "0x27F7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1=math_axis;
+filldraw sipka(0,1)---sipka(1,0)---cycle;
+endchar;
+
+iff known chars.arrow_left_right_not:
+bskchar "Left-right arrow with negation";
+beginchar(chars.arrow_left_right_not,18u#,v_center(5u#)); uni "0x21AE";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1=math_axis;
+.5[x2,x3]=.5[x0,x1]; .5[y2,y3]=y0; x3-x2=.5(y3-y2); top y3=h;
+pos2(rule_thickness,angle(z2-z3)+90); pos3(rule_thickness,angle(z2-z3)+90);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r).more
+ ---sipka(1,0)---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r).more---cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_left_right_not_vert:
+bskchar "Left-right arrow with vertical negation";
+beginchar(chars.arrow_left_right_not_vert,18u#,v_center(5u#)); uni "0x21F9";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1=math_axis;
+x2=x3=.5[x0,x1]; .5[y2,y3]=y0; top y3=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+y2'l=y2'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+bskpoints(2,3,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---obl(3'r,3r,1r)
+ ---sipka(1,0)---obl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3);
+endchar;
+
+iff known chars.arrow_left_right_not_vert_double:
+bskchar "Left-right arrow with double vertical negation";
+beginchar(chars.arrow_left_right_not_vert_double,18u#,v_center(5u#)); uni "0x21FC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+lft x0=u; x1=w-x0; y0=y1=math_axis;
+x2=x3; .5[x2,x4]=.5[x0,x1]; x4=x5; x4-x2=min(3rule_thickness,3u);
+.5[y2,y3]=.5[y4,y5]=y0; top y3=top y5=h;
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y2'l=y2'r=y4'l=y4'r=y1l; z2'l=whatever[z2l,z3l]; z2'r=whatever[z2r,z3r];
+y3'l=y3'r=y5'l=y5'r=y1r; z3'l=whatever[z2l,z3l]; z3'r=whatever[z2r,z3r];
+x4'l=x5'l=x4l; x4'r=x5'r=x4r;
+bskpoints(2,3,rule_thickness,rule_thickness);
+bskpoints(4,5,rule_thickness,rule_thickness);
+filldraw sipka(0,1)---obl(3'l,0a.l,3l)---z3ll..z3r---tobl(3'r,3r,1r)
+ ---tobl(5'l,3'r,5l)---z5ll..z5r---obl(5'r,5r,1r)
+ ---sipka(1,0)---obl(4'r,1a.l,4r)---z4rr..z4l---tobl(4'l,4l,2'r)
+ ---tobl(2'r,1l,2r)---z2rr..z2l---obl(2'l,2l,0a.r)---cycle;
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.arrow_left_right_bar:
+bskchar "Left-right arrow above bar";
+beginchar(chars.arrow_left_right_bar,18u#,v_center(5u#+min(3rule_thickness#,3u))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=lft x2=u; x1=x3=w-x0; y0=y1=math_axis+2rule_thickness; bot y2l=bot y3l=-d;
+filldraw sipka(0,1)---sipka(1,0)---cycle;
+filldraw bskrule(2,3,hair,hair);
+labels(2,3);
+endchar;
+
+iff known chars.arrow_left_right_bar_top:
+bskchar "Left-right arrow below bar";
+beginchar(chars.arrow_left_right_bar_top,18u#,v_center(5u#+min(3rule_thickness#,3u))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos0(rule_thickness,90);
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+lft x0=lft x2=u; x1=x3=w-x0; y0=y1=math_axis-2rule_thickness; top y2r=top y3r=h;
+filldraw sipka(0,1)---sipka(1,0)---cycle;
+filldraw bskrule(2,3,hair,hair);
+labels(2,3);
+endchar;
+
iff known chars.arrow_up_down:
bskchar "Up-down arrow";
beginchar(chars.arrow_up_down,9u#,asc_height#,0); uni "0x2195";
@@ -2738,6 +9011,29 @@ x0=x1l=.5w; top y0=h+apex_o; bot y1=-d-apex_o;
filldraw sipka(0,1)---sipka(1,0)---cycle;
endchar;
+iff known chars.arrow_up_down_bar_bot:
+bskchar "Up-down arrow with bottom bar";
+beginchar(chars.arrow_up_down_bar_bot,9u#,asc_height#,0); uni "0x21A8";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos0(rule_thickness,0);
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+x0=x1l=.5w; top y0=h+apex_o; bot y1=-d-apex_o;
+lft x2=u; rt x3=w-u; y2l=y3l=y1;
+p0=sipka(1,0);
+p1=reverse bskrule(2,3,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+oblu:=2oblu;
+filldraw sipka(0,1)---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+penlabels(2,3);
+endchar;
+
iff known chars.arrow_right_raise:
bskchar "Rightward raising arrow";
beginchar(chars.arrow_right_raise,15u#,v_center(5u#)); uni "non";
@@ -2772,6 +9068,121 @@ filldraw sipka(0,1)---obl(1r,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1l,2r,0a.r)---
penlabels(2,3);
endchar;
+iff known chars.arrow_down_start:
+bskchar "Downward arrow with starting bar";
+beginchar(chars.arrow_down_start,9u#,asc_height#,0); uni "0x21A7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0);
+pos2(rule_thickness,-90); pos3(rule_thickness,-90);
+x0=x1r=.5w+o;
+top y2l=top y3l=h; lft x2=u; x3=w-x2;
+bot y0=-d-apex_o; y1=y2r;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---obl(1l,0a.l,2r)---z2r..z2l---z3l..z3r---obl(1r,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_start:
+bskchar "Rightward arrow with starting bar";
+beginchar(chars.arrow_right_start,15u#,v_center(5u#)); uni "0x21A6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=lft x3l=u; y2=y0e; y3=y0b; x1=x3r;
+filldraw sipka(0,1)---obl(1l,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1r,2r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_start_long:
+bskchar "Long rightward arrow with starting bar";
+beginchar(chars.arrow_right_start_long,22u#,v_center(5u#)); uni "0x27FC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+rt x0=w-u; y0=y1r=math_axis;
+lft x2l=lft x3l=u; y2=y0e; y3=y0b; x1=x3r;
+filldraw sipka(0,1)---obl(1l,0a.l,3r)---z3r..z3l---z2l..z2r---obl(1r,2r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_right_stop:
+bskchar "Rightward arrow with stopping bar";
+beginchar(chars.arrow_right_stop,15u#,v_center(5u#)); uni "0x21E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+rt x0=w-u; x1=w-x0; y0=y1r=math_axis;
+x2l=x3l=x0; y2=y0e; y3=y0b;
+bskpoints(1,0,hair,hair);
+p0=sipka(0,1);
+p1=reverse bskrule(2,3,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---z1l..z1rr---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_start:
+bskchar "Leftward arrow with starting bar";
+beginchar(chars.arrow_left_start,15u#,v_center(5u#)); uni "0x21A4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,180); pos3(rule_thickness,180);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=rt x3l=w-u; y2=y0b; y3=y0e; x1=x3r;
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2r..z2l---z3l..z3r---obl(1l,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_start_long:
+bskchar "Long leftward arrow with starting bar";
+beginchar(chars.arrow_left_start_long,22u#,v_center(5u#)); uni "0x27FB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+pos2(rule_thickness,180); pos3(rule_thickness,180);
+lft x0=u; y0=y1l=math_axis;
+rt x2l=rt x3l=w-u; y2=y0b; y3=y0e; x1=x3r;
+filldraw sipka(0,1)---obl(1r,0a.l,2r)---z2r..z2l---z3l..z3r---obl(1l,3r,0a.r)---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_left_stop:
+bskchar "Leftward arrow with stopping bar";
+beginchar(chars.arrow_left_stop,15u#,v_center(5u#)); uni "0x21E4";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+pos2(rule_thickness,0); pos3(rule_thickness,0);
+lft x0=u; x1=w-x0; y0=y1l=math_axis;
+x2l=x3l=x0; y2=y0b; y3=y0e;
+bskpoints(1,0,hair,hair);
+p0=sipka(0,1);
+p1=reverse bskrule(2,3,rule_thickness,rule_thickness);
+(tim0,tim1)=p0 intersectiontimes p1;
+tim4=round(tim0);
+(tim2-tim4,tim3)=subpath(tim4,infinity) of p0 intersectiontimes p1;
+oblu:=2oblu;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),length p1) of p1
+ ..subpath(0,rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---z1rr..z1l---cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
iff known chars.math_accent_arrow:
bskchar "Arrow (vector) math accent";
beginchar(chars.math_accent_arrow,9u#,asc_height#,0); uni "non";
@@ -2800,6 +9211,33 @@ filldraw sipka(0,1)---z1l..z1rr---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_double_NE:
+bskchar "Double northeast arrow";
+beginchar(chars.arrow_double_NE,20u#,asc_height#,asc_depth#); uni "0x21D7";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-u; lft x1l=u+.5(rule_thickness-.5currentbreadth);
+top y0=h; bot y1l=-d;
+pos1(rule_thickness,angle(z0-z1l)+90);
+z2-z3=(0,-dbf) rotated angle(z0-z1); bot y2=-d; lft x3=u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_NNE:
+bskchar "Northnortheast arrow";
+beginchar(chars.arrow_NNE,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-2u; lft x1l=u+.5(rule_thickness-.5currentbreadth);
+top y0=h; bot y1l=-d;
+pos1(rule_thickness,angle(z0-z1l)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
iff known chars.arrow_SE:
bskchar "Southeast arrow";
beginchar(chars.arrow_SE,20u#,asc_height#,asc_depth#); uni "0x2198";
@@ -2813,6 +9251,49 @@ filldraw sipka(0,1)---z1l..z1rr---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_SE_corner:
+bskchar "Southeast arrow to corner";
+beginchar(chars.arrow_SE_corner,21u#+hair#,asc_height#,asc_depth#+u#); uni "0x21F2";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-2u; lft x1r=u+.5(rule_thickness-.5currentbreadth);
+bot y0=-d+u; top y1r=h;
+pos1(rule_thickness,angle(z0-z1r)+90);
+pos2(hair,-90); pos3(hair,-90); pos4(hair,180);
+lft x4r=rt x0+tiny; top y4=h; bot y2r=bot y3r=-d; x3=x4l; lft x2=u; x3l:=x4r;
+bskpoints(1,0,hair,hair); bskpoints(4,3,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw z2r---obl(3r,2r,4l)---z4l..z4rr---obl(3l,4r,2l)---z2l..cycle;
+penlabels(2,3,4); labels(1rr,4rr);
+endchar;
+
+iff known chars.arrow_double_SE:
+bskchar "Double southeast arrow";
+beginchar(chars.arrow_double_SE,20u#,asc_height#,asc_depth#); uni "0x21D8";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-u; lft x1r=u+.5(rule_thickness-.5currentbreadth);
+bot y0=-d; top y1r=h;
+pos1(rule_thickness,angle(z0-z1r)+90);
+z2-z3=(0,-dbf) rotated angle(z0-z1); top y3=h; lft x2=u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_SSE:
+bskchar "Southsoutheast arrow";
+beginchar(chars.arrow_SSE,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0=w-2u; lft x1r=u+.5(rule_thickness-.5currentbreadth);
+bot y0=-d; top y1r=h;
+pos1(rule_thickness,angle(z0-z1r)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
iff known chars.arrow_NW:
bskchar "Northwest arrow";
beginchar(chars.arrow_NW,20u#,asc_height#,asc_depth#); uni "0x2196";
@@ -2826,6 +9307,64 @@ filldraw sipka(0,1)---z1l..z1rr---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_NW_corner:
+bskchar "Northwest arrow to corner";
+beginchar(chars.arrow_NW_corner,21u#+hair#,asc_height#+u#,asc_depth#); uni "0x21F1";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; rt x1l=w-u;
+top y0=h-u; bot y1l=-d+.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1l)+90);
+pos2(hair,90); pos3(hair,90); pos4(hair,0);
+rt x4r=lft x0-tiny; bot y4=-d; top y2r=top y3r=h; x3=x4l; rt x2=w-u; x3l:=x4r;
+bskpoints(1,0,hair,hair); bskpoints(4,3,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw z2r---obl(3r,2r,4l)---z4l..z4rr---obl(3l,4r,2l)---z2l..cycle;
+penlabels(2,3,4); labels(1rr,4rr);
+endchar;
+
+iff known chars.arrow_NW_line_top:
+bskchar "Northwest arrow to top line";
+beginchar(chars.arrow_NW_line_top,21u#+hair#,asc_height#+u#,asc_depth#); uni "0x21B8";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; rt x1l=w-u;
+top y0=h-u; bot y1l=-d+.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1l)+90);
+pos2(hair,90); pos3(hair,90);
+top y2r=top y3r=h; lft x3=u; rt x2=w-u;
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+filldraw bskrule(2,3,hair,hair)..cycle;
+penlabels(2,3,4); labels(1rr,2rr,3ll);
+endchar;
+
+iff known chars.arrow_double_NW:
+bskchar "Double northwest arrow";
+beginchar(chars.arrow_double_NW,20u#,asc_height#,asc_depth#); uni "0x21D6";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=u; rt x1l=w-u;
+top y0=h; bot y1l=-d+.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1l)+90);
+z2-z3=(0,-dbf) rotated angle(z0-z1); bot y3=-d; rt x2=w-u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+penlabels(2,3); labels(1rr);
+endchar;
+
+iff known chars.arrow_NNW:
+bskchar "Northnorthwest arrow";
+beginchar(chars.arrow_NNW,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; rt x1l=w-u;
+top y0=h; bot y1l=-d+.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1l)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
iff known chars.arrow_SW:
bskchar "Southwest arrow";
@@ -2840,12 +9379,75 @@ filldraw sipka(0,1)---z1l..z1rr---cycle;
labels(1rr);
endchar;
+iff known chars.arrow_double_SW:
+bskchar "Double southwest arrow";
+beginchar(chars.arrow_double_SW,20u#,asc_height#,asc_depth#); uni "0x21D9";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=u; rt x1r=w-u;
+bot y0=-d; top y1r=h-.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1r)+90);
+z2-z3=(0,-dbf) rotated angle(z0-z1); top y2=h; rt x3=w-u;
+bskpoints(1,0,hair,hair);
+filldraw dvojsipka(0,1,3,2)..cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_SSW:
+bskchar "Southsouthwest arrow";
+beginchar(chars.arrow_SSW,11u#,asc_height#,asc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=2u; rt x1r=w-u;
+bot y0=-d; top y1r=h-.5(rule_thickness-.5currentbreadth);
+pos1(rule_thickness,angle(z0-z1r)+90);
+bskpoints(1,0,hair,hair);
+filldraw sipka(0,1)---z1l..z1rr---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_clockwise:
+bskchar "Clockwise arrow";
+beginchar(chars.arrow_clockwise,16u#,asc_height#,desc_depth#); uni "0x21BB";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8=h-arrwidth; y8-y4=x2-x6;
+circle_points(rule_thickness);
+p0:=draw_circle;
+p1:=draw_circle.l;
+p2:=draw_circle.r;
+theta=angle(direction 7.5 of p0);
+pos10(rule_thickness,theta+90);
+z9+arrsize*dir(theta+180)+(rule_thickness-currentbreadth)*dir(theta+90)=point 7.5 of p0;
+z9=z10l+2u*dir(theta);
+filldraw subpath(1,7) of p1..sipka(9,10).. subpath(7,1) of p2..cycle;
+endchar;
+
+iff known chars.arrow_counterclockwise:
+bskchar "Counterclockwise arrow";
+beginchar(chars.arrow_counterclockwise,16u#,asc_height#,desc_depth#); uni "0x21BA";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], theta;
+x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8=h-arrwidth; y8-y4=x2-x6;
+circle_points(rule_thickness);
+p0:=draw_circle;
+p1:=draw_circle.l;
+p2:=draw_circle.r;
+theta=angle(direction .5 of p0)+180;
+pos10(rule_thickness,theta+90);
+z9+arrsize*dir(theta+180)+(rule_thickness-currentbreadth)*dir(theta+90)=point .5 of p0;
+z9=z10l+2u*dir(theta);
+filldraw sipka(9,10)..subpath(1,7) of p1..subpath(7,1) of p2..cycle;
+endchar;
+
iff known chars.math_accent_tie:
bskchar "Tie math accent";
beginchar(chars.math_accent_tie,6u#,asc_height#,0); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
-x1=.5w;
+x0=.5w; x2=w+5u+2letter_fit;
tieacc(0,1,2);
endchar;
@@ -2853,6 +9455,7 @@ iff known chars.math_ell:
bskchar "Ell (lowercase script-like letter l)";
beginchar(chars.math_ell,8u#,asc_height#,0); uni "0x2113";
adjust_fit(0,0);
+italcorr .75asc_height#*slant;
pickup tiny.nib;
numeric tim[];
path p[];
@@ -2880,11 +9483,13 @@ filldraw subpath(0,rundy(p3,(tim3,curve)).zpet) of p3
oblu:=curve;
infill subpath (rundy(p0,tim1),2) of p0& subpath(0,rundy(p2,tim2).zpet) of p2 ..cycle;
penlabels(0,1,1',2,3,4); labels(4');
+math_fit(0,u#);
endchar;
iff known chars.math_weierstrass_p:
bskchar "Weierstrass p";
beginchar(chars.math_weierstrass_p,12u#,x_height#,desc_depth#); uni "0x2118";
+italcorr .5x_height#*slant;
adjust_fit(0,0);
pickup tiny.nib;
path p[]; numeric tim[];
@@ -2910,6 +9515,7 @@ filldraw z0r..z1r{up}..z2r..z3r..z4r..{left}z5r..{dir60}z5'r..{dir-120}z5'l
--z7l{right}..z6l
..{down}z1l..{direction infinity of p0}z0l..{(direction infinity of p0) rotated 180}cycle;
penlabels(0,1,2,3,4,5,5',6,7,8); labels(9,10);
+math_fit(0,ic#);
endchar;
iff known chars.math_logor:
@@ -2923,6 +9529,186 @@ x0=.5w; bot y0=-d-apex_o;
logor(0,1,2);
endchar;
+iff known chars.math_logor_dot:
+bskchar "Logical or sign with dot";
+beginchar(chars.math_logor_dot,12u#,asc_height#,0); uni "0x2A52";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; bot y0=-d-apex_o; y1l=.8h; y3=h;
+logor(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_logor_dot_inside:
+bskchar "Logical or sign with dot inside";
+beginchar(chars.math_logor_dot_inside,12u#,.8asc_height#,0); uni "0x27C7";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; bot y0=-d-apex_o; y3=h-dot_size;
+logor(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_logor_intersect:
+bskchar "Two intersecting logical ors";
+beginchar(chars.math_logor_intersect,16u#,.8asc_height#,0); uni "0x2A56";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+x0=.5w-2u; x3=.5w+2u; bot y0=bot y3=-d-apex_o; lft x4l=5u;
+logor(0,1,2).nodraw;
+p0:=_logor; p2:=z2l--z0l;
+logor(3,4,5).nodraw;
+p1:=_logor;
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3l
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_logor_intersect_nary:
+bskchar "N-ary two intersecting logical ors";
+beginchar(chars.math_logor_intersect_nary,20u#,v_center(10/6dh#)); uni "0x2A08";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+{{ save rule_thickness; rule_thickness:=stem;
+ x0=.5w-2u; x3=.5w+2u; bot y0=bot y3=-d-apex_o; lft x4l=5u;
+ logor(0,1,2).nodraw;
+ p0:=_logor; p2:=z2l--z0l;
+ logor(3,4,5).nodraw;
+ p1:=_logor;
+}};
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3l
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_logxor:
+bskchar "Logical xor sign";
+beginchar(chars.math_logxor,12u#,asc_height#,0); uni "0x22BB";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; bot y0=.2asc_height-apex_o;
+lft x3=u; x4=w-x3; bot y3l=bot y4l=-d;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_vee_small_underbar:
+bskchar "Small vee sign with underbar";
+beginchar(chars.math_vee_small_underbar,12u#,x_height#,0); uni "0x2A61";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; bot y0=.2asc_height-apex_o; x1l=3u;
+lft x3=u; x4=w-x3; bot y3l=bot y4l=-d;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_lognor:
+bskchar "Logical nor sign";
+beginchar(chars.math_lognor,12u#,asc_height#,0); uni "0x22BD";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; bot y0=-apex_o; y1l=.8asc_height;
+lft x3=u; x4=w-x3; top y3r=top y4r=h;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_logor_doublebar:
+bskchar "Logical or sign with double bar above";
+beginchar(chars.math_logor_doublebar,12u#,asc_height#+.3x_height#,0); uni "0x2A62";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=-d-apex_o; y1l=.8asc_height;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y5r=top y6r=h; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y5-y3=.3x_height;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+endchar;
+
+iff known chars.math_logor_double_underbar:
+bskchar "Logical or sign with double underbar";
+beginchar(chars.math_logor_double_underbar,12u#,asc_height#+.3x_height#,0); uni "0x2A63";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=.2asc_height+.3x_height-apex_o; y1l=h;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y5l=bot y6l=0; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y3-y5=.3x_height;
+logor(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+endchar;
+
+iff known chars.math_vee_in_vee:
+bskchar "Vee in vee sign";
+beginchar(chars.math_vee_in_vee,12u#,.8asc_height#,0); uni "0x2A54";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; bot y0=-d-apex_o;
+y3-y0=max(5u,2rule_thickness);
+logor(0,1,2);
+z4l=z3l+whatever*(z1r-z0''');
+logor(3,4,5);
+endchar;
+
+iff known chars.math_lattice_sup_uni:
+bskchar "Lattice supremum sign (for Unicode)";
+beginchar(chars.math_lattice_sup_uni,14u#,v_center(10/6dh#)); uni "0x22C1";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; bot y0=-d-apex_o;
+{{ save rule_thickness; rule_thickness:=stem; logor(0,1,2); }};
+endchar;
+
iff known chars.math_lattice_sup_text:
bskchar "\textstyle lattice supremum sign";
beginchar(chars.math_lattice_sup_text,14u#,0,10/6dh#); uni "non";
@@ -2943,6 +9729,84 @@ x0=.5w; bot y0=-d-apex_o;
{{ save rule_thickness; rule_thickness:=bourstem; logor(0,1,2); }};
endchar;
+iff known chars.math_logor_sloping:
+bskchar "Sloping logical or sign";
+beginchar(chars.math_logor_sloping,12u#,.8asc_height#,0); uni "0x2A57";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta;
+oblu:=2oblu;
+pos0(rule_thickness,0); pos1(rule_thickness,0);
+lft x0l=lft x1l=u; bot y0=0; y2r+.25rule_thickness=y1=h; rt x2r=w-u;
+theta:=angle(z2r-z0l);
+pos2(rule_thickness,theta-90);
+bskpoints(0,1,hair,hair);
+z0'=z0r+(rule_thickness-currentbreadth)*dir(theta+22);
+y0''=y0; z0''=z2l+whatever*(z2r-z0');
+x0'''=x1r; z0'''=whatever[z2l,z0''];
+filldraw z1ll---z0l..z0r..z0'---z2r..z2l---obl(0''',2l,1r)---z1r..cycle;
+penlabels(0,1,2); labels(0',0'',0''');
+endchar;
+
+iff known chars.math_logor_mid:
+bskchar "Logical or sign with middle stem";
+beginchar(chars.math_logor_mid,12u#,.8asc_height#,0); uni "0x2A5B";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,180);pos4(rule_thickness,180);
+x0=x3=x4=.5w; bot y0=-d-apex_o; y3=y0; y4=y1;
+logor(0,1,2).nodraw;
+p0:=_logor;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+penlabels(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_logor_bared:
+bskchar "Logical or bared sign";
+beginchar(chars.math_logor_bared,12u#,.8asc_height#,0); uni "0x2A5D";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+x0=.5w; bot y0=-d-apex_o;
+lft x3=u; rt x4=w-u; y3=y4=1/3[math_axis,h];
+logor(0,1,2).nodraw;
+p0=_logor;
+p1=z4r--z3r;
+p2=z3l--z4l;
+y5l=y4l; y5r=y4r;
+z5l=whatever[point 0 of p0,point infinity of p0];
+z5r=whatever[point 0 of p0,point infinity of p0];
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath(3,4) of p0 intersectiontimes p2;
+(tim6-4,tim7)=subpath(4,infinity) of p0 intersectiontimes p2;
+(tim8-4,tim9)=subpath(4,infinity) of p0 intersectiontimes p1;
+(tim10-3,tim11)=subpath(3,4) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ---obl(5l,2l,4l)---z4l..z4r---obl(5r,4r,0r)---cycle;
+infill subpath(rundy(p0,tim10),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p1,tim9),rundy(p1,tim11).zpet) of p1..cycle;
+penlabels(3,4,5);
+endchar;
+
iff known chars.math_logand:
bskchar "Logical and sign";
beginchar(chars.math_logand,12u#,.8asc_height#,0); uni "0x2227";
@@ -2954,6 +9818,203 @@ x0=.5w; top y0=h+apex_o;
logand(0,1,2);
endchar;
+iff known chars.math_logand_dot:
+bskchar "Logical and sign with dot";
+beginchar(chars.math_logand_dot,12u#,asc_height#,0); uni "0x2A51";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=.8h+apex_o; y3=h;
+logand(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_logand_dot_inside:
+bskchar "Logical and sign with dot inside";
+beginchar(chars.math_logand_dot_inside,12u#,.8asc_height#,0); uni "0x27D1";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=h+apex_o; y3=dot_size;
+logand(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_merge:
+bskchar "Merge sign";
+beginchar(chars.math_merge,16u#,.8asc_height#,0); uni "0x2A55";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+x0=.5w-2u; x3=.5w+2u; top y0=top y3=h+apex_o; lft x4r=5u;
+logand(0,1,2).nodraw;
+p0:=_logand; p2:=z2l--z0r;
+logand(3,4,5).nodraw;
+p1:=_logand;
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3r
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_merge_nary:
+bskchar "N-ary merge sign";
+beginchar(chars.math_merge_nary,20u#,v_center(10/6dh#)); uni "0x2A07";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu; oblu.more:=3f_obl;
+{{ save rule_thickness; rule_thickness:=stem;
+ x0=.5w-2u; x3=.5w+2u; top y0=top y3=h+apex_o; lft x4r=5u;
+ logand(0,1,2).nodraw;
+ p0:=_logand; p2:=z2l--z0r;
+ logand(3,4,5).nodraw;
+ p1:=_logand;
+}};
+(tim0,tim1)=p0 intersectiontimes subpath(0,2) of p1;
+(tim2,tim3-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim4,tim5-2)=p2 intersectiontimes subpath(2,infinity) of p1;
+(tim6,tim7)=p2 intersectiontimes subpath(0,2) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,(tim3,oblu.more)).zpet) of p1
+ ..subpath(rundy(p0,(tim2,oblu.more)),infinity) of p0
+ ..subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p1,tim5),infinity) of p1---z3r
+ ..subpath(0,rundy(p1,(tim7,oblu.more)).zpet) of p1
+ ..subpath(rundy(p2,(tim6,oblu.more)),infinity) of p2..cycle;
+endchar;
+
+iff known chars.math_lognand:
+bskchar "Logical nand sign";
+beginchar(chars.math_lognand,12u#,asc_height#,0); uni "0x22BC";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=.8h+apex_o;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+top y3r=top y4r=h; lft x3=u; x4=w-x3;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+endchar;
+
+iff known chars.math_logand_doublebar:
+bskchar "Logical and sign with double bar above";
+beginchar(chars.math_logand_doublebar,12u#,asc_height#+.3x_height#,0); uni "0x2A5E";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=.8asc_height+apex_o;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y5r=top y6r=h; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y5-y3=.3x_height;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+endchar;
+
+iff known chars.math_logand_underbar:
+bskchar "Logical and sign with underbar";
+beginchar(chars.math_logand_underbar,12u#,asc_height#,0); uni "0x2A5F";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o; y1r=.2asc_height;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+bot y3l=0; lft x3=u; x4=w-x3; y3=y4;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_logand_double_underbar:
+bskchar "Logical and sign with double underbar";
+beginchar(chars.math_logand_double_underbar,12u#,asc_height#+.3x_height#,0); uni "0x2A60";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o; y1r=.2asc_height+.3x_height;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bot y5l=bot y6l=0; lft x3=lft x5=u; x4=x6=w-x3;
+y3=y4; y3-y5=.3x_height;
+logand(0,1,2);
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_logand_bared:
+bskchar "Logical and bared sign";
+beginchar(chars.math_logand_bared,12u#,.8asc_height#,0); uni "0x2A5C";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+x0=.5w; top y0=h+apex_o;
+lft x3=u; rt x4=w-u; y3=y4=1/3[math_axis,-d];
+logand(0,1,2).nodraw;
+p0=_logand;
+p1=z4r--z3r;
+p2=z3l--z4l;
+y5l=y4l; y5r=y4r;
+z5l=whatever[point 0 of p0,point infinity of p0];
+z5r=whatever[point 0 of p0,point infinity of p0];
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath(3,4) of p0 intersectiontimes p2;
+(tim6-4,tim7)=subpath(4,infinity) of p0 intersectiontimes p2;
+(tim8-4,tim9)=subpath(4,infinity) of p0 intersectiontimes p1;
+(tim10-3,tim11)=subpath(3,4) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ---obl(5l,2l,4l)---z4l..z4r---obl(5r,4r,0r)---cycle;
+infill subpath(rundy(p0,tim10),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p1,tim9),rundy(p1,tim11).zpet) of p1..cycle;
+penlabels(3,4,5);
+endchar;
+
+iff known chars.math_wedge_in_wedge:
+bskchar "Wedge in wedge sign";
+beginchar(chars.math_wedge_in_wedge,12u#,.8asc_height#,0); uni "0x2A53";
+italcorr .8asc_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=h+apex_o;
+y0-y3=max(5u,2rule_thickness);
+logand(0,1,2);
+z4r=z3r+whatever*(z1l-z0''');
+logand(3,4,5);
+endchar;
+
+iff known chars.math_lattice_inf_uni:
+bskchar "Lattice infinum sign (for Unicode)";
+beginchar(chars.math_lattice_inf_uni,14u#,v_center(10/6dh#)); uni "0x22C0";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h+apex_o;
+{{ save rule_thickness; rule_thickness:=stem; logand(0,1,2); }};
+endchar;
+
iff known chars.math_lattice_inf_text:
bskchar "\textstyle lattice infinum sign";
beginchar(chars.math_lattice_inf_text,14u#,0,10/6dh#); uni "non";
@@ -2974,6 +10035,85 @@ x0=.5w; top y0=h+apex_o;
{{ save rule_thickness; rule_thickness:=bourstem; logand(0,1,2); }};
endchar;
+iff known chars.math_logand_sloping:
+bskchar "Sloping logical and sign";
+beginchar(chars.math_logand_sloping,12u#,.8asc_height#,0); uni "0x2A58";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric theta;
+oblu:=2oblu;
+pos0(rule_thickness,0); pos2(rule_thickness,0);
+rt x0r=rt x2r=w-u; top y0=h; y1l-.25rule_thickness=y2=0; lft x1l=u;
+theta:=angle(z1l-z0l);
+pos1(rule_thickness,theta+90);
+bskpoints(2,0,hair,hair);
+z0'=z0l+(rule_thickness-currentbreadth)*dir(theta+22);
+y0''=y0; z0''=z1r+whatever*(z1l-z0');
+x0'''=x2l; z0'''=whatever[z1r,z0''];
+filldraw z2rr---z0r..z0l..z0'---z1l..z1r---obl(0''',1r,2l)---z2l..cycle;
+penlabels(0,1,2); labels(0',0'',0''');
+endchar;
+
+iff known chars.math_logand_mid:
+bskchar "Logical and sign with middle stem";
+beginchar(chars.math_logand_mid,12u#,.8asc_height#,0); uni "0x2A5A";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,180);pos4(rule_thickness,180);
+x0=x3=x4=.5w; top y0=h+apex_o; y3=y0; y4=y1;
+logand(0,1,2).nodraw;
+p0:=_logand;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+penlabels(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_logand_logor_overlap:
+bskchar "Logical and overlaping logical or sign";
+beginchar(chars.math_logand_logor_overlap,12u#,asc_height#,0); uni "0x2A59";
+italcorr h#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+x0=x3=.5w; top y0=.8asc_height+apex_o; bot y3=.2asc_height-apex_o;
+logand(0,1,2).nodraw; logor(3,4,5).nodraw;
+p0:=_logand; p1:=_logor;
+p2:=point 0 of p1--point infinity of p1;
+p3:=point infinity of p0--point 0 of p0;
+(tim0,tim1-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim2,tim3)=p0 intersectiontimes subpath(0,2) of p1;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p1;
+(tim6-3,tim7)=subpath(3,5) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p2;
+(tim10,tim11)=p2 intersectiontimes p3;
+(tim12-4,tim13)=subpath(4,6) of p1 intersectiontimes p3;
+(tim14-3,tim15-3)=subpath(3,4) of p0 intersectiontimes subpath(3,4) of p1;
+(tim16-5,tim17-5)=subpath(5,6) of p0 intersectiontimes subpath(5,6) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..reverse subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(0,rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p0,tim8),infinity) of p0
+ ..subpath(0,rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..reverse subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(rundy(p3,tim13),infinity) of p3..cycle;
+oblu:=1.5f_obl;
+infill subpath(rundy(p1,tim15),rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(p0,tim16).zpet,rundy(p0,tim14)) of p0..cycle;
+endchar;
+
iff known chars.math_less:
bskchar "Less than sign";
beginchar(chars.math_less,12u#,v_center(8u#)); uni "0x003C";
@@ -2985,6 +10125,76 @@ lft x0l=u; y0=math_axis;
less(0,1,2);
endchar;
+iff known chars.math_less_not:
+bskchar "Negated less than sign";
+beginchar(chars.math_less_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x226E";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis; y1r=math_axis+4u-.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---z4r..z4ll---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_less_not_vert:
+bskchar "Negated less than sign with vertical stroke";
+beginchar(chars.math_less_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=math_axis; y1r=math_axis+4u-.5rule_thickness;
+top y3=h; x4=x3=.55w; y4=-d;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bskpoints(3,4,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l)---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---z4r..z4ll---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_less_closed:
+bskchar "Closed less than sign";
+beginchar(chars.math_less_closed,15u#,v_center(8u#)); uni "0x2AA6";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,180);
+lft x0l=u; rt x1r=w-4u; y0=y3=math_axis; rt x3l=w-u;
+less(0,1,2).nodraw;
+filldraw subpath(0,2) of _less---z1l...{down}z3l...point infinity of _less---cycle;
+infill subpath(3,6) of _less...{up}z3r...cycle;
+penlabels(3);
+endchar;
+
iff known chars.math_less_eq:
bskchar "Less than or equal to sign";
beginchar(chars.math_less_eq,12u#,v_center(11u#)); uni "0x2264";
@@ -2992,12 +10202,381 @@ italcorr h#*slant;
adjust_fit(0,0);
pickup tiny.nib;
oblu:=2oblu;
-lft x0l=u; y0=math_axis+2u;
+lft x0l=u; y0=h-4u;
pos3(rule_thickness,90); pos4(rule_thickness,90);
lft x3=u; rt x4=w-u; y3l=y4l=-d;
-bskpoints(3,4,hair,hair);
-filldraw z3rr..z3l---z4ll..z4r---cycle;
+filldraw bskrule(3,4,hair,hair);
+less(0,1,2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_eq_double_slanted:
+bskchar "Less than or double slanted equal to sign";
+beginchar(chars.math_less_eq_double_slanted,12u#,v_center(11u#+.45x_height#)); uni "0x2AF9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y4=-d+.5rule_thickness; y5-y3=y6-y4=.45x_height; y0-y3=y2-y4;
+less(0,1,2);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_less_eq_double:
+bskchar "Less than or double equal to sign";
+beginchar(chars.math_less_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2266";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+less(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_less_not_eq_double:
+bskchar "Less than and not double equal to sign";
+beginchar(chars.math_less_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2268";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+less(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top rt z7=(x2-2u,y2l-rule_thickness); .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl; oblu.more:=2f_obl;
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r).more---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l).more---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_less_eq_double_not:
+bskchar "Negated less than or double equal to sign";
+beginchar(chars.math_less_eq_double_not,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=h-4u-2rule_thickness; y1r=h-2.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,7'r)---obl(7'r,6'r,8r)---z8r
+ ..z8ll---obl(8'r,8l,4r)---z4r..z4l---obl(8'l,4l,7l)---z7l..z7rr
+ ---obl(7'l,7r,6'l)---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)
+ ---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_less_vert_not_eq_double:
+bskchar "Less than and vertical not double equal to sign";
+beginchar(chars.math_less_vert_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+less(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x7=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl;
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r)---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r)---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l)---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l)---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_less_eq_double_not_vert:
+bskchar "Negated less than or double equal to sign with vertical stroke";
+beginchar(chars.math_less_eq_double_not_vert,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=h-4u-2rule_thickness; y1r=h-2.5rule_thickness;
+top y3=h; x4=x3=.5w; y4=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l)---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,7'r)---obl(7'r,6'r,8r)---z8r
+ ..z8ll---obl(8'r,8l,4r)---z4r..z4l---obl(8'l,4l,7l)---z7l..z7rr
+ ---obl(7'l,7r,6'l)---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)
+ ---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_eq_double_less:
+bskchar "Double equal to or less than sign";
+beginchar(chars.math_eq_double_less,12u#,v_center(11u#+.45x_height#)); uni "0x2A99";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r-y0=4u-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5r=y6r=h; y5-y3=y6-y4=.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+less(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_sl_eq_double_less:
+bskchar "Double slanted equal to or less than sign";
+beginchar(chars.math_eq_double_less,12u#,v_center(11u#+.45x_height#)); uni "0x2A9B";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r-y0=4u-.5rule_thickness;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y6=h-.5rule_thickness; y5-y3=y6-y4=.45x_height;
+less(0,1,2);
+y6-y5=y1-y0;
+pos3(rule_thickness,angle(z5-z6)+90); pos4(rule_thickness,angle(z5-z6)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_sim_less_eq_double:
+bskchar "Similar to or less than or double equal to sign";
+beginchar(chars.math_sim_less_eq_double,12u#,v_center(11u#+.9x_height#-rule_thickness#)); uni "0x2A9F";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=math_axis; y1r-y0=4u-.5rule_thickness;
+top y8=h;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+less(0,1,2);
+vlnka(7,8);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_less_eq_slanted:
+bskchar "Less than or slanted equal to sign";
+beginchar(chars.math_less_eq_slanted,12u#,v_center(11u#)); uni "0x2A7D";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_closed_eq_sl:
+bskchar "Closed less than or slanted equal to sign";
+beginchar(chars.math_less_closed_eq_sl,15u#,v_center(12u#)); uni "0x2AA8";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,180);
+lft x0l=u; rt x1r=w-4u; y0=y3=h-4u; rt x3l=w-u;
+less(0,1,2).nodraw;
+filldraw subpath(0,2) of _less---z1l...{down}z3l...point infinity of _less---cycle;
+infill subpath(3,6) of _less...{up}z3r...cycle;
+lft x4=u; x5=x3; y5=-d+.5rule_thickness; z4=z5+whatever*(z0l-z2l);
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+filldraw bskrule(4,5,hair,hair);
+penlabels(3,4,5);
+endchar;
+
+iff known chars.math_less_eq_slanted_dot:
+bskchar "Less than or slanted equal to sign with dot inside";
+beginchar(chars.math_less_eq_slanted_dot,12u#,v_center(11u#)); uni "0x2A7F";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=y5=h-4u; rt x5=w-u-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_eq_slanted_dot_left:
+bskchar "Less than or slanted equal to sign with dot above left";
+beginchar(chars.math_less_eq_slanted_dot_left,12u#,v_center(11u#)); uni "0x2A81";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u; lft x5=u+.5dot_size; top y5=h-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_less_eq_slanted_dot_right:
+bskchar "Less than or slanted equal to sign with dot above right";
+beginchar(chars.math_less_eq_slanted_dot_right,12u#,5.5u#+1.5dot_size#+math_axis#,5.5u#-math_axis#); uni "0x2A83";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u-1.5dot_size; y1r=h-1.5dot_size-.5rule_thickness;
+rt x5=w-u-dot_size; y5=h-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=-d+.5rule_thickness; y0-y3=y2-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_less:
+bskchar "Equal to or less than sign";
+beginchar(chars.math_eq_less,12u#,v_center(11u#)); uni "0x22DC";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r=y0+4u-.5rule_thickness;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y3=y4=h-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_slanted_less:
+bskchar "Slanted equal to or less than sign";
+beginchar(chars.math_eq_slanted_less,12u#,v_center(11u#)); uni "0x2A95";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r=y0+4u-.5rule_thickness;
less(0,1,2);
+lft x3=u; rt x4=w-u; y4=h-.5rule_thickness; y0-y3=y1-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_slanted_less_dot:
+bskchar "Slanted equal to or less than sign with dot inside";
+beginchar(chars.math_eq_slanted_less_dot,12u#,v_center(11u#)); uni "0x2A97";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=y5=-d+4u; y1r=y0+4u-.5rule_thickness; rt x5=w-u-.5dot_size;
+less(0,1,2);
+lft x3=u; rt x4=w-u; y4=h-.5rule_thickness; y0-y3=y1-y4;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
penlabels(3,4);
endchar;
@@ -3013,6 +10592,563 @@ less(0,1,2);
less(3,4,5);
endchar;
+iff known chars.math_much_less_underbar:
+bskchar "Much less than sign with underbar";
+beginchar(chars.math_much_less_underbar,17u#,4.5u#+math_axis#,4.5u#+2.5rule_thickness#-math_axis#); uni "0x2AA3";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x0l=u; rt x1r=w-6u; y0=y3=math_axis;
+lft x3l=6u; rt x4r=w-u;
+lft x6=u; rt x7=w-u; bot y6l=bot y7l=-d;
+filldraw bskrule(6,7,hair,hair);
+less(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_less_in_less:
+bskchar "Less than in less than sign";
+beginchar(chars.math_less_in_less,12u#,v_center(9u#)); uni "0x2AA1";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; rt x1r=w-u; y0=y3=math_axis;
+x3l-x0l=max(5u,2rule_thickness); rt x4r=w-u;
+less(0,1,2);
+z4r=z3r+whatever*(z1r-z0r);
+less(3,4,5);
+endchar;
+
+iff known chars.math_less_in_less_underbar:
+bskchar "Less than in less than sign with underbar";
+beginchar(chars.math_less_in_less_underbar,12u#,4.5u#+math_axis#,4.5u#+2.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x0l=u; rt x1r=w-u; y0=y3=math_axis;
+x3l-x0l=max(5u,2rule_thickness); rt x4r=w-u;
+lft x6=u; rt x7=w-u; bot y6l=bot y7l=-d;
+filldraw bskrule(6,7,hair,hair);
+less(0,1,2);
+z4r=z3r+whatever*(z1r-z0r);
+less(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_less_in_less_in_less:
+bskchar "Less than in less than in less than sign";
+beginchar(chars.math_less_in_less_in_less,15.5u#,v_center(13u#)); uni "0x2AF7";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=5u; rt x1r=w-u; y0=y3=y6=math_axis; y1r=h-2u-.5rule_thickness;
+rt x4r=rt x7r=w-u; lft x6l=u; x0l=.5[x6l,x3l];
+less(0,1,2);
+z4r=z3r+whatever*(z1r-z0r);
+z7r=z6r+whatever*(z1r-z0r);
+less(3,4,5);
+less(6,7,8);
+endchar;
+
+iff known chars.math_much_much_less:
+bskchar "Much much less than sign";
+beginchar(chars.math_much_much_less,22u#,v_center(9u#)); uni "0x22D8";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; rt x1r=w-11u; y0=y3=y6=math_axis;
+lft x3l=11u; rt x4r=w-u;
+x6=.5[x0,x3];
+less(0,1,2);
+less(3,4,5);
+less(6,7,8);
+endchar;
+
+iff known chars.math_less_dot:
+bskchar "Less than sign with dot";
+beginchar(chars.math_less_dot,12u#,v_center(8u#)); uni "0x22D6";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=y3=math_axis;
+x3=w-2u-.5dot_size;
+less(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_less_circle:
+bskchar "Less than sign with circle inside";
+beginchar(chars.math_less_circle,12u#,v_center(8u#)); uni "0x2A79";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x2=w-u; y2=math_axis;
+y2=y0; x0=x8; x2-x6=y8-y4=2.5u;
+lft x9l=u; y9=math_axis;
+oblu:=2oblu; less(9,10,11); oblu:=f_obl;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+endchar;
+
+iff known chars.math_less_neq:
+bskchar "Less than or not equal to sign";
+beginchar(chars.math_less_neq,12u#,v_center(11u#)); uni "0x2A87";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+less(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_less_eq_not:
+bskchar "Negated less than or equal to sign";
+beginchar(chars.math_less_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2270";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis+1.5u; y1r=math_axis+5.5u-.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---tobl(2'r,3rr,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,4r)---z4r..z4l
+ ---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6'); labels(3rr,4ll);
+endchar;
+
+iff known chars.math_less_eq_slanted_not:
+bskchar "Negated less than or slanted equal to sign";
+beginchar(chars.math_less_eq_slanted_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis+1.5u; y1r=math_axis+5.5u-.5rule_thickness;
+top rt z3=(w-3u,h); .5[x4,x3]=.5w; y4=-d;
+lft x5=u; rt x6=w-u; y6l=math_axis-5.5u; y2-y6=y0-y5;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)-90); pos6(rule_thickness,angle(z5-z6)-90);
+bskpoints(5,6,hair,hair);
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---tobl(2'r,3rr,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,4r)---z4r..z4l
+ ---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_less_neq_vert:
+bskchar "Less than or not equal to sign with vertical stroke";
+beginchar(chars.math_less_neq_vert,12u#,v_center(11u#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0l=u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+x5=x6=.5w; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+oblu:=2oblu;
+less(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_less_eq_not_vert:
+bskchar "Negated less than or equal to sign with vertical stroke";
+beginchar(chars.math_less_eq_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+lft x0l=u; y0=math_axis+1.5u; y1r=math_axis+5.5u-.5rule_thickness;
+top y3=h; x4=x3=.55w; y4=-d;
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+less(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1l,z0l];
+z2'r=whatever[z3r,z4r]=whatever[z1l,z0l];
+z2''l=whatever[z3l,z4l]=whatever[z1r,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1r,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0l..z0l'---obl(2'l,0l',3l)---z3l..z3rr---obl(2'r,3r,1l).more---z1ll
+ ..z1r---obl(2''r,1r,3'r)---obl(3'r,2''r,2r)---z2r..z2l---obl(3''r,2l,4r)
+ ---obl(5'r,3''r,6r)---z6r..z6ll---obl(6'r,6l,4r)---z4r..z4l
+ ---obl(6'l,4l,5l)---z5l..z5rr---obl(5'l,5r,3''l)---obl(3''l,4l,0l')---cycle;
+infill obl(2''l,3'l,0''')---obl(0''',1r,2r)---obl(3'l,0''',2''l)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_less_sim:
+bskchar "Less than or similar to sign";
+beginchar(chars.math_less_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2272";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+less(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_sim_less:
+bskchar "Similar to or less than sign";
+beginchar(chars.math_sim_less,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2A9D";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=-d+4u; y1r-y0=4u-.5rule_thickness;
+top y4=h; spread:=.5x_height;
+less(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_less_sim_neg:
+bskchar "Negated less than or similar to sign";
+beginchar(chars.math_less_sim_neg,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2274";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; .5[x5,x6]=.5w; x5-x6=4u;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0l]; z8=whatever[z5l,z6l]=whatever[z2l,z0l];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0l']; z14=whatever[z5l,z6l]=whatever[z1l,z0l'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,2l)---z2l..z2r---obl(9,2r,11)---obl(11,9,1r)---z1r..z1ll
+ ---obl(13,1ll,5rr)..z5l---obl(14,5l,0l')---z0l'..z0l---obl(8,0l,6l)
+ ..subpath(tim9,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+infill obl(0''',12,10)---obl(10,0''',12)---obl(12,10,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_less_sim_neg_vert:
+bskchar "Negated less than or similar to sign with vertical stroke";
+beginchar(chars.math_less_sim_neg_vert,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; x5=x6=.5w;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+less(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0l]; z8=whatever[z5l,z6l]=whatever[z2l,z0l];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0l']; z14=whatever[z5l,z6l]=whatever[z1l,z0l'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,2l)---z2l..z2r---obl(9,2r,11)---obl(11,9,1r)---z1r..z1ll
+ ---obl(13,1ll,5rr)..z5l---obl(14,5l,0l')---z0l'..z0l---obl(8,0l,6l)
+ ..subpath(tim9,rundy(p2,(tim7,3f_obl)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,3f_obl)),infinity) of p1..cycle;
+infill obl(0''',12,10)---obl(10,0''',12)---obl(12,10,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_less_not_sim:
+bskchar "Less than and not similar to sign";
+beginchar(chars.math_less_not_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x22E6";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+less(0,1,2);
+vlnka(3,4).nodraw;
+top y5-bot y6=.7x_height; .5[y5,y6]=.5[y3,y4]; .5[x5,x6]=.5w; x5=x4a;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(2,3,5,6); labels(2rr,3ll);
+endchar;
+
+iff known chars.math_less_approx:
+bskchar "Less than or approximately equal to sign";
+beginchar(chars.math_less_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A85";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=u; y0=h-4u;
+spread:=.4x_height;
+bot y3=-d; y5-y3=spread;
+less(0,1,2);
+vlnka(3,4);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_less_not_approx:
+bskchar "Less than and not approximately equal to sign";
+beginchar(chars.math_less_not_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A89";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+lft x7l=u; y7=h-4u;
+less(7,8,9);
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(5,6);
+endchar;
+
+iff known chars.math_less_sim_eq:
+bskchar "Less than or similar or equal to sign";
+beginchar(chars.math_less_sim_eq,12u#,v_center(8u#+.8x_height#+rule_thickness#)); uni "0x2A8D";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x0l=lft x3=u; rt x4=w-u; y0=h-4u;
+spread:=.4x_height;
+bot y3l=bot y4l=-d; y5-y3=spread-rule_thickness;
+less(0,1,2);
+filldraw bskrule(3,4,hair,hair);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_smaller:
+bskchar "Smaller sign";
+beginchar(chars.math_smaller,12u#,v_center(8u#)); uni "0x2AAA";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+lft x0l=x3=u; y0=y3=y4=math_axis; x4=x1;
+less(0,1,2).nodraw;
+p0:=_less;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+penlabels(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_smaller_eq:
+bskchar "Smaller or equals sign";
+beginchar(chars.math_smaller_eq,12u#,v_center(11u#)); uni "0x2AAC";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x0l=x3=u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+less(0,1,2).nodraw;
+p0:=_less;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+endchar;
+
+iff known chars.math_smaller_eq_slanted:
+bskchar "Smaller or slanted equals sign";
+beginchar(chars.math_smaller_eq_slanted,12u#,v_center(11u#)); uni "non"; %"0x2AAC.slanted";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+lft x0l=x3=u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y6=-d+.5rule_thickness; y0-y5=y2-y6;
+less(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+p0:=_less;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+endchar;
+
iff known chars.math_greater:
bskchar "Greater than sign";
beginchar(chars.math_greater,12u#,v_center(8u#)); uni "0x003E";
@@ -3024,6 +11160,77 @@ rt x0r=w-u; y0=math_axis;
greater(0,1,2);
endchar;
+iff known chars.math_greater_not:
+bskchar "Negated greater than sign";
+beginchar(chars.math_greater_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x226F";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis; y1l=math_axis+4u-.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: rt x3=w-3u; .5[x4,x3]=.5w; else: rt x3=w-4u; lft x4=2u; fi
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---z4ll..z4r---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_greater_not_vert:
+bskchar "Negated greater than sign with vertical stroke";
+beginchar(chars.math_greater_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=math_axis; y1l=math_axis+4u-.5rule_thickness;
+top y3=h; x4=x3=.45w; y4=-d;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+bskpoints(3,4,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l)---z4ll..z4r---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4);
+endchar;
+
+iff known chars.math_greater_closed:
+bskchar "Closed greater than sign";
+beginchar(chars.math_greater_closed,15u#,v_center(8u#)); uni "0x2AA7";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,0);
+rt x0r=w-u; lft x1l=4u; y0=y3=math_axis; lft x3l=u;
+greater(0,1,2).nodraw;
+filldraw subpath(0,2) of _greater---z1r...{down}z3l...point infinity of _greater---cycle;
+infill subpath(3,6) of _greater...{up}z3r...cycle;
+penlabels(3);
+endchar;
+
iff known chars.math_greater_eq:
bskchar "Greater than or equal to sign";
beginchar(chars.math_greater_eq,12u#,v_center(11u#)); uni "0x2265";
@@ -3031,15 +11238,533 @@ italcorr x_height#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
oblu:=2oblu;
-rt x0r=w-u; y0=math_axis+2u;
+rt x0r=w-u; y0=h-4u;
pos3(rule_thickness,90); pos4(rule_thickness,90);
lft x3=u; rt x4=w-u; y3l=y4l=-d;
-bskpoints(3,4,hair,hair);
-filldraw z3rr..z3l---z4ll..z4r---cycle;
+filldraw bskrule(3,4,hair,hair);
+greater(0,1,2);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_eq_double_slanted:
+bskchar "Greater than or double slanted equal to sign";
+beginchar(chars.math_greater_eq_double_slanted,12u#,v_center(11u#+.45x_height#)); uni "0x2AFA";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3=-d+.5rule_thickness; y5-y3=y6-y4=.45x_height; y2-y3=y0-y4;
+greater(0,1,2);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_greater_eq_double:
+bskchar "Greater than or double equal to sign";
+beginchar(chars.math_greater_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2267";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+greater(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_greater_not_eq_double:
+bskchar "Greater than and not double equal to sign";
+beginchar(chars.math_greater_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "0x2269";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+greater(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x2l+2u; .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl; oblu.more:=2f_obl;
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r).more---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l).more---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_greater_eq_double_not:
+bskchar "Negated greater than or double equal to sign";
+beginchar(chars.math_greater_eq_double_not,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=h-4u-2rule_thickness; y1l=h-2.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: .5[x4,x3]=.5w-.5u; rt x3=w-4u; else: rt x3=w-5u; lft x4=2u; fi
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---obl(5'l,3''l,5r)---z5rr..z5l---obl(6'l,5l,7'l)
+ ---tobl(7'l,6'l,7rr)---z7rr..z7l---obl(8'l,7l,4l)---z4l..z4r---obl(8'r,4r,8l)
+ ---z8ll..z8r---obl(7'r,8r,6'r)---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)
+ ---obl(3''r,4r,0r)---cycle;
+infill ifobl(2''r,3'r,0''',0''',,)---obl(0''',2r,1r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_greater_vert_not_eq_double:
+bskchar "Greater than and vertical not double equal to sign";
+beginchar(chars.math_greater_vert_not_eq_double,12u#,v_center(11u#+.45x_height#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+greater(0,1,2);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x7=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(3,4,hair,hair); bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl;
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r)---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6r)---z6r..z6ll
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5l)---z5l
+ ..z5rr---obl(9',5r,10')---obl(10',9',3l)---z3l..cycle;
+penlabels(3,4,5,6,7,8); labels(4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_greater_eq_double_not_vert:
+bskchar "Negated greater than or double equal to sign with vertical stroke";
+beginchar(chars.math_greater_eq_double_not_vert,12u#,v_center(11u#+.45x_height#+4rule_thickness#)); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=h-4u-2rule_thickness; y1l=h-2.5rule_thickness;
+top y3=h; x4=x3=.5w; y4=-d;
+lft x5=lft x7=u; rt x6=rt x8=w-u; y7l=y8l=-d+2rule_thickness; y5=y6=y7+.45x_height;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'l=whatever[z3l,z4l]=whatever[z7r,z8r];
+z7'r=whatever[z3r,z4r]=whatever[z7r,z8r];
+z8'l=whatever[z3l,z4l]=whatever[z7l,z8l];
+z8'r=whatever[z3r,z4r]=whatever[z7l,z8l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---obl(5'l,3''l,5r)---z5rr..z5l---obl(6'l,5l,7'l)
+ ---obl(7'l,6'l,7r)---z7rr..z7l---obl(8'l,7l,4l)---z4l..z4r---obl(8'r,4r,8l)
+ ---z8ll..z8r---obl(7'r,8r,6'r)---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)
+ ---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_sim_greater_eq_double:
+bskchar "Similar to or greater than or double equal to sign";
+beginchar(chars.math_sim_greater_eq_double,12u#,v_center(11u#+.9x_height#-rule_thickness#)); uni "0x2AA0";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=math_axis; y1l-y0=4u-.5rule_thickness;
+top y8=h;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y3l=y4l=-d; y5=y6=y3+.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+greater(0,1,2);
+vlnka(7,8);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_eq_double_greater:
+bskchar "Double equal to or greater than sign";
+beginchar(chars.math_eq_double_greater,12u#,v_center(11u#+.45x_height#)); uni "0x2A9A";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l-y0=4u-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5r=y6r=h; y3=y4=y5-.45x_height;
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+greater(0,1,2);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_sl_eq_double_greater:
+bskchar "Double slanted equal to or greater than sign";
+beginchar(chars.math_sl_eq_double_greater,12u#,v_center(11u#+.45x_height#)); uni "0x2A9C";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l-y0=4u-.5rule_thickness;
+lft x3=lft x5=u; rt x4=rt x6=w-u; y5=h-.5rule_thickness; y5-y3=y6-y4=.45x_height;
+greater(0,1,2);
+y5-y6=y1r-y0;
+pos3(rule_thickness,angle(z5-z6)+90); pos4(rule_thickness,angle(z5-z6)+90);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+filldraw bskrule(3,4,hair,hair);
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6);
+endchar;
+
+iff known chars.math_greater_eq_slanted:
+bskchar "Greater than or slanted equal to sign";
+beginchar(chars.math_greater_eq_slanted,12u#,v_center(11u#)); uni "0x2A7E";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_closed_eq_sl:
+bskchar "Closed greater than or slanted equal to sign";
+beginchar(chars.math_greater_closed_eq_sl,15u#,v_center(12u#)); uni "0x2AA9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,0);
+rt x0r=w-u; lft x1l=4u; y0=y3=h-4u; lft x3l=u;
+greater(0,1,2).nodraw;
+filldraw subpath(0,2) of _greater---z1r...{down}z3l...point infinity of _greater---cycle;
+infill subpath(3,6) of _greater...{up}z3r...cycle;
+rt x5=w-u; x4=x3; y4=-d+.5rule_thickness; z4=z5+whatever*(z0l-z2l);
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+filldraw bskrule(4,5,hair,hair);
+penlabels(3,4,5);
+endchar;
+
+iff known chars.math_greater_eq_slanted_dot:
+bskchar "Greater than or slanted equal to sign with dot inside";
+beginchar(chars.math_greater_eq_slanted_dot,12u#,v_center(11u#)); uni "0x2A80";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=y5=h-4u; lft x5=u+.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_eq_slanted_dot_right:
+bskchar "Greater than or slanted equal to sign with dot above right";
+beginchar(chars.math_greater_eq_slanted_dot_right,12u#,v_center(11u#)); uni "0x2A82";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u; rt x5=w-u-dot_size; top y5=h-.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_eq_slanted_dot_left:
+bskchar "Greater than or slanted equal to sign with dot above left";
+beginchar(chars.math_greater_eq_slanted_dot_left,12u#,5.5u#+1.5dot_size#+math_axis#,5.5u#-math_axis#); uni "0x2A84";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y1l=h-1.5dot_size-.5rule_thickness; y0=h-4u-1.5dot_size;
+lft x5=u+dot_size; y5=h-.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=-d+.5rule_thickness; y0-y4=y2-y3;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_greater:
+bskchar "Equal to or greater than sign";
+beginchar(chars.math_eq_greater,12u#,v_center(11u#)); uni "0x22DD";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l=y0+4u-.5rule_thickness;
greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=y4=h-.5rule_thickness;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+filldraw bskrule(3,4,hair,hair);
penlabels(3,4);
endchar;
+iff known chars.math_eq_slanted_greater:
+bskchar "Slanted equal to or greater than sign";
+beginchar(chars.math_eq_slanted_greater,12u#,v_center(11u#)); uni "0x2A96";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l=y0+4u-.5rule_thickness;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=h-.5rule_thickness; y4-y0=y3-y1;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_eq_slanted_greater_dot:
+bskchar "Slanted equal to or greater than sign with dot inside";
+beginchar(chars.math_eq_slanted_greater_dot,12u#,v_center(11u#)); uni "0x2A98";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=y5=-d+4u; y1l=y0+4u-.5rule_thickness; lft x5=u+.5dot_size;
+greater(0,1,2);
+lft x3=u; rt x4=w-u; y3=h-.5rule_thickness; y4-y0=y3-y1;
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+filldraw bskrule(3,4,hair,hair);
+dot(5);
+penlabels(3,4);
+endchar;
+
+iff known chars.math_greater_neq:
+bskchar "Greater than or not equal to sign";
+beginchar(chars.math_greater_neq,12u#,v_center(11u#)); uni "0x2A88";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+greater(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_greater_eq_not:
+bskchar "Negated greater than or equal to sign";
+beginchar(chars.math_greater_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2271";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis+1.5u; y1l=math_axis+5.5u-.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: rt x3=w-3u; .5[x4,x3]=.5w; else: rt x3=w-4.5u; lft x4=2u; fi
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---tobl(5'l,3''l,5rr)---z5rr..z5l---obl(6'l,5l,4l)---z4l
+ ..z4r---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_greater_eq_slanted_not:
+bskchar "Negated greater than or slanted equal to sign";
+beginchar(chars.math_greater_eq_slanted_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis+1.5u; y1l=math_axis+5.5u-.5rule_thickness;
+top y3=h; y4=-d;
+if not boldmath: rt x3=w-3u; .5[x4,x3]=.5w; else: rt x3=w-4.5u; lft x4=2u; fi
+lft x5=u; rt x6=w-u; y5l=math_axis-5.5u; y0-y6=y2-y5;
+pos3(rule_thickness,angle(z4-z3)+90); pos4(rule_thickness,angle(z4-z3)+90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)-90); pos6(rule_thickness,angle(z5-z6)-90);
+bskpoints(5,6,hair,hair);
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---tobl(5'l,3''l,5rr)---z5rr..z5l---obl(6'l,5l,4l)---z4l..z4r---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r).more---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
+iff known chars.math_greater_neq_vert:
+bskchar "Greater than or not equal to sign with vertical stroke";
+beginchar(chars.math_greater_neq_vert,12u#,v_center(11u#)); uni "non";
+italcorr x_height#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x0r=w-u; y0=h-4u;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+lft x3=u; rt x4=w-u; y3l=y4l=-d;
+bskpoints(3,4,hair,hair);
+x5=x6=.5w; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+oblu:=2oblu;
+greater(0,1,2);
+penlabels(3,4,5,5',6,6'); labels(5rr,6ll);
+endchar;
+
+iff known chars.math_greater_eq_not_vert:
+bskchar "Negated greater than or equal to sign with vertical stroke";
+beginchar(chars.math_greater_eq_not_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+oblu.more:=2.5f_obl;
+rt x0r=w-u; y0=math_axis+1.5u; y1l=math_axis+5.5u-.5rule_thickness;
+top y3=h; x4=x3=.45w; y4=-d;
+lft x5=u; rt x6=w-u; y5l=y6l=math_axis-5.5u;
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+bskpoints(3,4,rule_thickness,rule_thickness);
+bskpoints(5,6,hair,hair);
+greater(0,1,2).nodraw;
+z2'l=whatever[z3l,z4l]=whatever[z1r,z0r];
+z2'r=whatever[z3r,z4r]=whatever[z1r,z0r];
+z2''l=whatever[z3l,z4l]=whatever[z1l,z0'''];
+z2''r=whatever[z3r,z4r]=whatever[z1l,z0'''];
+z3'l=whatever[z3l,z4l]=whatever[z0''',z2r];
+z3'r=whatever[z3r,z4r]=whatever[z0''',z2r];
+z3''l=whatever[z3l,z4l]=whatever[z2l,z0l];
+z3''r=whatever[z3r,z4r]=whatever[z2l,z0l];
+z5'l=whatever[z3l,z4l]=whatever[z5r,z6r];
+z5'r=whatever[z3r,z4r]=whatever[z5r,z6r];
+z6'l=whatever[z3l,z4l]=whatever[z5l,z6l];
+z6'r=whatever[z3r,z4r]=whatever[z5l,z6l];
+filldraw z0r..z0r'---obl(2'r,0r',3r)---z3rr..z3l---obl(2'l,3l,1r)---z1rr
+ ..z1l---obl(2''l,1l,3'l)---obl(3'l,2''l,2r)---z2r..z2l
+ ---obl(3''l,2l,4l).more---obl(5'l,3''l,5r)---z5rr..z5l---obl(6'l,5l,4l)---z4l..z4r---obl(6'r,4r,6l)---z6ll..z6r---obl(5'r,6r,3''r)---obl(3''r,4r,0r)---cycle;
+infill obl(2''r,3'r,0''')---obl(0''',1r,2r)---obl(3'r,0''',2''r)---cycle;
+penlabels(2',2'',3,3',3'',4,5,5',6,6');
+endchar;
+
iff known chars.math_much_greater:
bskchar "Much greater than sign";
beginchar(chars.math_much_greater,17u#,v_center(9u#)); uni "0x226B";
@@ -3052,6 +11777,788 @@ greater(0,1,2);
greater(3,4,5);
endchar;
+iff known chars.math_piping_z:
+bskchar "Z-piping";
+beginchar(chars.math_piping_z,15u#,asc_height#,0); uni "0x2A20";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; lft x1l=6u; y0=y3=.5[h,-d];
+rt x3r=w-6u; lft x4l=u;
+greater(0,1,2);
+greater(3,4,5);
+endchar;
+
+iff known chars.math_greater_in_greater:
+bskchar "Greater than in greater than sign";
+beginchar(chars.math_greater_in_greater,12u#,v_center(9u#)); uni "0x2AA2";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; lft x1l=u; y0=y3=math_axis;
+x0r-x3r=max(5u,2rule_thickness); lft x4l=u;
+greater(0,1,2);
+z4l=z3l+whatever*(z1l-z0l);
+greater(3,4,5);
+endchar;
+
+iff known chars.math_greater_in_greater_underbar:
+bskchar "Greater than in greater than sign with underbar";
+beginchar(chars.math_greater_in_greater_underbar,12u#,4.5u#+math_axis#,4.5u#+2.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; lft x1l=u; y0=y3=math_axis;
+x0r-x3r=max(5u,2rule_thickness); lft x4l=u;
+lft x6=u; rt x7=w-u; bot y6l=bot y7l=-d;
+filldraw bskrule(6,7,hair,hair);
+greater(0,1,2);
+z4l=z3l+whatever*(z1l-z0l);
+greater(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_greater_in_greater_in_greater:
+bskchar "Greater than in greater than in greater than sign";
+beginchar(chars.math_greater_in_greater_in_greater,15.5u#,v_center(13u#)); uni "0x2AF8";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-5u; lft x1l=u; y0=y3=y6=math_axis; y1l=h-2u-.5rule_thickness;
+lft x4l=lft x7l=u; rt x6r=w-u; x0r=.5[x6r,x3r];
+greater(0,1,2);
+z4l=z3l+whatever*(z1l-z0l);
+z7l=z6l+whatever*(z1l-z0l);
+greater(3,4,5);
+greater(6,7,8);
+endchar;
+
+iff known chars.math_much_much_greater:
+bskchar "Much much greater than sign";
+beginchar(chars.math_much_much_greater,22u#,v_center(9u#)); uni "0x22D9";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; lft x1l=11u; y0=y3=y6=math_axis;
+rt x3r=w-11u; lft x4l=u;
+x6=.5[x0,x3];
+greater(0,1,2);
+greater(3,4,5);
+greater(6,7,8);
+endchar;
+
+iff known chars.math_greater_dot:
+bskchar "Greater than sign with dot";
+beginchar(chars.math_greater_dot,12u#,v_center(8u#)); uni "0x22D7";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=y3=math_axis;
+x3=2u+.5dot_size;
+greater(0,1,2);
+dot(3);
+endchar;
+
+iff known chars.math_greater_circle:
+bskchar "Greater than sign with circle inside";
+beginchar(chars.math_greater_circle,12u#,v_center(8u#)); uni "0x2A7A";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u; y2=math_axis;
+y2=y0; x0=x8; x2-x6=y8-y4=2.5u;
+rt x9r=w-u; y9=math_axis;
+oblu:=2oblu; greater(9,10,11); oblu:=f_obl;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+endchar;
+
+iff known chars.math_greater_sim:
+bskchar "Greater than or similar to sign";
+beginchar(chars.math_greater_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2273";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+greater(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_sim_greater:
+bskchar "similar to or greater than sign";
+beginchar(chars.math_sim_greater,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2A9E";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=-d+4u; y1l-y0=4u-.5rule_thickness;
+top y4=h; spread:=.5x_height;
+greater(0,1,2);
+vlnka(3,4);
+endchar;
+
+iff known chars.math_greater_sim_neg:
+bskchar "Negated greater than or similar to sign";
+beginchar(chars.math_greater_sim_neg,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x2275";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; .5[x5,x6]=.5w; x5-x6=4u;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0r]; z8=whatever[z5l,z6l]=whatever[z2l,z0r];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0r']; z14=whatever[z5l,z6l]=whatever[z1l,z0r'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,0r)---z0r..z0r'---obl(13,0r',5r)---z5rr..z5l---obl(14,5l,1rr)---z1rr..z1l
+ ---obl(12,1l,10)---obl(10,12,2r)---z2r..z2l---obl(8,2l,6l)
+ ..subpath(tim9,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+infill obl(0''',11,9)---obl(9,0''',11)---obl(11,9,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_greater_sim_neg_vert:
+bskchar "Negated greater than or similar to sign with vertical stroke";
+beginchar(chars.math_greater_sim_neg_vert,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+top y5=h+rule_thickness; bot y6=-d-rule_thickness; x5=x6=.5w;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+vlnka(3,4).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+tim8=xpart(p3 intersectiontimes ((0,y2l)--(w,y2l)));
+tim9=xpart(p2 intersectiontimes ((0,y2l)--(w,y2l)));
+z7=whatever[z5r,z6r]=whatever[z2l,z0r]; z8=whatever[z5l,z6l]=whatever[z2l,z0r];
+z9=whatever[z5r,z6r]=whatever[z2r,z0''']; z10=whatever[z5l,z6l]=whatever[z2r,z0'''];
+z11=whatever[z5r,z6r]=whatever[z1r,z0''']; z12=whatever[z5l,z6l]=whatever[z1r,z0'''];
+z13=whatever[z5r,z6r]=whatever[z1l,z0r']; z14=whatever[z5l,z6l]=whatever[z1l,z0r'];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),tim8) of p3
+ ---obl(7,6r,0r)---z0r..z0r'---obl(13,0r',5r)---z5rr..z5l---obl(14,5l,1rr)---z1rr..z1l
+ ---obl(12,1l,10)---obl(10,12,2r)---z2r..z2l---obl(8,2l,6l)
+ ..subpath(tim9,rundy(p2,(tim7,3f_obl)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,3f_obl)),infinity) of p1..cycle;
+infill obl(0''',11,9)---obl(9,0''',11)---obl(11,9,0''')---cycle;
+penlabels(5,6); labels(7,8,9,10,11,12,13,14);
+endchar;
+
+iff known chars.math_greater_not_sim:
+bskchar "Greater than and not similar to sign";
+beginchar(chars.math_greater_not_sim,12u#,v_center(8u#+.5x_height#+2rule_thickness#)); uni "0x22E7";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+bot y3=-d; spread:=.5x_height;
+greater(0,1,2);
+vlnka(3,4).nodraw;
+top y5-bot y6=.7x_height; .5[y5,y6]=.5[y3,y4]; .5[x5,x6]=.5w; x5=x4a;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z5l---z6ll..{z5-z6}z6r;
+p3:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(2,3,5,6); labels(2rr,3ll);
+endchar;
+
+iff known chars.math_greater_approx:
+bskchar "Greater than or approximately equal to sign";
+beginchar(chars.math_greater_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A86";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; y0=h-4u;
+spread:=.4x_height;
+bot y3=-d; y5-y3=spread;
+greater(0,1,2);
+vlnka(3,4);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_greater_not_approx:
+bskchar "Greater than and not approximately equal to sign";
+beginchar(chars.math_greater_not_approx,12u#,v_center(8u#+.8x_height#+2rule_thickness#)); uni "0x2A8A";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+rt x7r=w-u; y7=h-4u;
+greater(7,8,9);
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(5,6);
+endchar;
+
+iff known chars.math_greater_sim_eq:
+bskchar "Greater than or similar or equal to sign";
+beginchar(chars.math_greater_sim_eq,12u#,v_center(8u#+.8x_height#+rule_thickness#)); uni "0x2A8E";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+oblu:=2oblu;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x0r=rt x4=w-u; lft x3=u; y0=h-4u;
+spread:=.4x_height;
+bot y3l=bot y4l=-d; y5-y3=spread-rule_thickness;
+greater(0,1,2);
+filldraw bskrule(3,4,hair,hair);
+vlnka(5,6);
+endchar;
+
+iff known chars.math_larger:
+bskchar "Larger sign";
+beginchar(chars.math_larger,12u#,v_center(8u#)); uni "0x2AAB";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+rt x0r=x3=w-u; y0=y3=y4=math_axis; x4=x1;
+greater(0,1,2).nodraw;
+p0:=_greater;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+penlabels(3,4); labels(4ll);
+endchar;
+
+iff known chars.math_larger_eq:
+bskchar "Larger or equals sign";
+beginchar(chars.math_larger_eq,12u#,v_center(11u#)); uni "0x2AAD";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+rt x0r=x3=w-u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+greater(0,1,2).nodraw;
+p0:=_greater;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+endchar;
+
+iff known chars.math_larger_eq_slanted:
+bskchar "Larger or slanted equals sign";
+beginchar(chars.math_larger_eq_slanted,12u#,v_center(11u#)); uni "non"; %"0x2AAD.slanted";
+italcorr math_axis#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos3(rule_thickness,90);pos4(rule_thickness,90);
+rt x0r=x3=w-u; y0=y3=y4=h-4u; x4=x1;
+lft x5=u; rt x6=w-u; y5=-d+.5rule_thickness; y0-y6=y2-y5;
+greater(0,1,2).nodraw;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+p0:=_greater;
+p1:=reverse (bskrule(3,4,hair,0));
+(tim0-2,tim1)=subpath(2,infinity) of p0 intersectiontimes p1;
+(tim2-2,tim3-2)=subpath(2,infinity) of p0 intersectiontimes subpath(2,infinity) of p1;
+oblu:=3f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),infinity) of p0---cycle;
+filldraw bskrule(5,6,hair,hair);
+penlabels(3,4,5,6); labels(4ll);
+endchar;
+
+iff known chars.math_less_greater:
+bskchar "Less than or greater than sign";
+beginchar(chars.math_less_greater,12u#,v_center(12u#+3rule_thickness#)); uni "0x2276";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=4u+3rule_thickness; y2l=-d+.5rule_thickness;
+greater(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_less_greater_neg:
+bskchar "Negated less than or greater than sign";
+beginchar(chars.math_less_greater_neg,12u#,v_center(12u#+3rule_thickness#)); uni "0x2278";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=4u+3rule_thickness; y2l=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; .5[x6,x7]=.5w; x6-x7=4u;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',6l)---z6l..z6rr---tobl(10,6rr,4ll)---z4ll..z4r---obl(13,4r,14)
+ ---obl(14,13,5r)---z5r..z5l---obl(16,5l,18)---obl(18,16,0r')---z0r'..z0r---obl(24,0r,7r)
+ ---z7r..z7ll---tobl(25,7ll,2l)---z2l..z2r---obl(23,2r,20)--obl(20,23,1l)---z1l..z1rr
+ ---obl(19,1rr,17)---obl(17,19,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_less_greater_neg_vert:
+bskchar "Negated less than or greater than sign with vertical stroke";
+beginchar(chars.math_less_greater_neg_vert,12u#,v_center(12u#+3rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=4u+3rule_thickness; y2l=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; x6=x7=.5w;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',6l)---z6l..z6rr---tobl(10,6rr,4ll)---z4ll..z4r---obl(13,4r,14)
+ ---obl(14,13,5r)---z5r..z5l---obl(16,5l,18)---obl(18,16,0r')---z0r'..z0r---obl(24,0r,7r)
+ ---z7r..z7ll---tobl(25,7ll,2l)---z2l..z2r---obl(23,2r,20)--obl(20,23,1l)---z1l..z1rr
+ ---obl(19,1rr,17)---obl(17,19,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_greater_less:
+bskchar "Greater than or less than sign";
+beginchar(chars.math_greater_less,12u#,v_center(12u#+3rule_thickness#)); uni "0x2277";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=4u+3rule_thickness; y5r=-d+.5rule_thickness;
+greater(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_greater_beside_less:
+bskchar "Greater than beside less than sign";
+beginchar(chars.math_greater_beside_less,20u#,v_center(8u#)); uni "0x2AA5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+.5[x0r,x3l]=.5w; x3l-x0r=rule_thickness;
+lft x1l=u; rt x4r=w-u; y0=y3=math_axis;
+greater(0,1,2);
+less(3,4,5);
+endchar;
+
+iff known chars.math_greater_less_neg:
+bskchar "Negated greater than or less than sign";
+beginchar(chars.math_greater_less_neg,12u#,v_center(12u#+3rule_thickness#)); uni "0x2279";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=4u+3rule_thickness; y5r=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; .5[x6,x7]=.5w; x6-x7=4u;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',25)---obl(25,11,2l)---z2l..z2r---obl(23,2r,20)---obl(20,23,1l)
+ ---z1l..z1rr---obl(19,1rr,6l)---z6l..z6rr---obl(18,6rr,0r')---z0r'..z0r
+ ---obl(24,0r,10)---obl(10,24,4ll)---z4ll..z4r---obl(13,4r,14)---obl(14,13,5r)
+ ---z5r..z5l---obl(16,5l,7r)---z7r..z7ll---obl(17,7l,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_greater_less_neg_vert:
+bskchar "Negated greater than or less than sign with vertical stroke";
+beginchar(chars.math_greater_less_neg_vert,12u#,v_center(12u#+3rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=4u+3rule_thickness; y5r=-d+.5rule_thickness;
+top y6=h+rule_thickness; bot y7=-d-rule_thickness; x6=x7=.5w;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+greater(0,1,2).nodraw;
+less(3,4,5).nodraw;
+z10=whatever[z6r,z7r]=whatever[z4l,z3l']; z11=whatever[z6l,z7l]=whatever[z4l,z3l'];
+z12=whatever[z6l,z7l]=whatever[z4r,z3''']; z13=whatever[z6r,z7r]=whatever[z4r,z3'''];
+z14=whatever[z6r,z7r]=whatever[z5r,z3''']; z15=whatever[z6l,z7l]=whatever[z5r,z3'''];
+z16=whatever[z6r,z7r]=whatever[z5l,z3l]; z17=whatever[z6l,z7l]=whatever[z5l,z3l];
+z18=whatever[z6r,z7r]=whatever[z1r,z0r]; z19=whatever[z6l,z7l]=whatever[z1r,z0r];
+z20=whatever[z6l,z7l]=whatever[z1l,z0''']; z21=whatever[z6r,z7r]=whatever[z1l,z0'''];
+z22=whatever[z6r,z7r]=whatever[z2r,z0''']; z23=whatever[z6l,z7l]=whatever[z2r,z0'''];
+z24=whatever[z6r,z7r]=whatever[z2l,z0r]; z25=whatever[z6l,z7l]=whatever[z2l,z0r];
+filldraw z3l..z3l'---obl(11,3l',25)---obl(25,11,2l)---z2l..z2r---obl(23,2r,20)---obl(20,23,1l)
+ ---z1l..z1rr---obl(19,1rr,6l)---z6l..z6rr---obl(18,6rr,0r')---z0r'..z0r
+ ---obl(24,0r,10)---obl(10,24,4ll)---z4ll..z4r---obl(13,4r,14)---obl(14,13,5r)
+ ---z5r..z5l---obl(16,5l,7r)---z7r..z7ll---obl(17,7l,3l)---cycle;
+infill obl(3''',15,12)---obl(12,3''',15)--obl(15,12,3''')---cycle;
+infill obl(0''',21,22)---obl(22,0''',21)---obl(21,22,0''')---cycle;
+penlabels(6,7);labels(10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28);
+endchar;
+
+iff known chars.math_greater_less_overlap:
+bskchar "Greater than overlaping less than sign";
+beginchar(chars.math_greater_less_overlap,15u#,v_center(8u#)); uni "0x2AA4";
+italcorr h#*slant;
+adjust_fit(0,0);
+path p[]; numeric tim[];
+pickup tiny.nib;
+oblu:=2oblu;
+lft x0l=lft x4l+3u=4u; rt x1r=rt x3r+3u=w-u; y0=y3=math_axis;
+less(0,1,2).nodraw; greater(3,4,5).nodraw;
+p0:=_less; p1:=_greater;
+p2:=point 0 of p1--point infinity of p1;
+p3:=point infinity of p0--point 0 of p0;
+(tim0,tim1-2)=p0 intersectiontimes subpath(2,infinity) of p1;
+(tim2,tim3)=p0 intersectiontimes subpath(0,2) of p1;
+(tim4-2,tim5)=subpath(2,infinity) of p0 intersectiontimes subpath(0,2) of p1;
+(tim6-3,tim7)=subpath(3,5) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p2;
+(tim10,tim11)=p2 intersectiontimes p3;
+(tim12-4,tim13)=subpath(4,6) of p1 intersectiontimes p3;
+(tim14-3,tim15-3)=subpath(3,4) of p0 intersectiontimes subpath(3,4) of p1;
+(tim16-5,tim17-5)=subpath(5,6) of p0 intersectiontimes subpath(5,6) of p1;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..reverse subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim2),rundy(p0,tim4).zpet) of p0
+ ..reverse subpath(0,rundy(p1,tim7).zpet) of p1
+ ..subpath(0,rundy(p2,tim9).zpet) of p2
+ ..subpath(rundy(p0,tim8),infinity) of p0
+ ..subpath(0,rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..reverse subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(rundy(p3,tim13),infinity) of p3..cycle;
+oblu:=1.5f_obl;
+infill subpath(rundy(p1,tim15),rundy(p1,tim17).zpet) of p1
+ ..subpath(rundy(p0,tim16).zpet,rundy(p0,tim14)) of p0..cycle;
+endchar;
+
+iff known chars.math_less_equal_greater:
+bskchar "Less than or equals to or greater than sign";
+beginchar(chars.math_less_equal_greater,12u#,v_center(16u#+4rule_thickness#)); uni "0x22DA";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=8u+4rule_thickness; y2l=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; y6=y7=math_axis;
+filldraw bskrule(6,7,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_less_sl_equal_greater:
+bskchar "Less than or slanted equals to or greater than sign";
+beginchar(chars.math_less_sl_equal_greater,12u#,v_center(14u#+4rule_thickness#)); uni "non"; %"0x22DA.slant";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=6u+4rule_thickness; y2l=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; .5[y6,y7]=math_axis; y6-y3=y7-y5;
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_less_sl_equal_greater_sl_equal:
+bskchar "Less than or slanted equals to or greater than or slanted equals sign";
+beginchar(chars.math_less_sl_equal_greater_sl_equal,12u#,v_center(16u#+4rule_thickness#)); uni "0x2A93";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r;
+lft x6=lft x8=u; rt x7=rt x9=w-u;
+y3=h-4u; y8l=-d+.5rule_thickness; y9-y8=y4l-y3l;
+y3-y6=y5l-y7=y2l-y8=y0-y9; .5[y3,y0]=.5[y6,y7];
+less(3,4,5);
+greater(0,1,2);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_less_equal_double_greater:
+bskchar "Less than or double equals to or greater than sign";
+beginchar(chars.math_less_equal_double_greater,12u#,v_center(16u#+4rule_thickness#+.45x_height#)); uni "0x2A8B";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=8u+4rule_thickness+.45x_height; y2l=-d+.5rule_thickness;
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; .5[y6,y8]=math_axis; y8-y6=.45x_height;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_less_sim_greater:
+bskchar "Less than or similar to or greater than sign";
+beginchar(chars.math_less_sim_greater,12u#,v_center(16u#+3rule_thickness#+.45x_height#)); uni "0x2A8F";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y3-y0=8u+3rule_thickness+.45x_height; y2l=-d+.5rule_thickness;
+.5[y6,y7]=math_axis;
+greater(0,1,2);
+less(3,4,5);
+vlnka(6,7);
+endchar;
+
+iff known chars.math_less_greater_equals_double:
+bskchar "Less than or greater than or double equal to sign";
+beginchar(chars.math_less_greater_equals_double,12u#,v_center(16u#+2rule_thickness#+.45x_height#)); uni "0x2A91";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; y3=h-4u; y0-y2l=y4l-y3; y0=.5[bot y3,y8];
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; y6l=-d; y8-y6=.45x_height;
+less(3,4,5);
+greater(0,1,2);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_equal_less:
+bskchar "Greater than or equals to or less than sign";
+beginchar(chars.math_greater_equal_less,12u#,v_center(16u#+4rule_thickness#)); uni "0x22DB";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=8u+4rule_thickness; y5r=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; y6=y7=math_axis;
+filldraw bskrule(6,7,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_greater_sl_equal_less:
+bskchar "Greater than or slanted equals to or less than sign";
+beginchar(chars.math_greater_sl_equal_less,12u#,v_center(14u#+4rule_thickness#)); uni "non"; %"0x22DB.slant";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=6u+4rule_thickness; y5r=-d+.5rule_thickness;
+lft x6=u; rt x7=w-u; .5[y6,y7]=math_axis; y2-y6=y0-y7;
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+penlabels(6,7);
+endchar;
+
+iff known chars.math_greater_sl_equal_less_sl_equal:
+bskchar "Greater than or slanted equals to or less than or slanted equals sign";
+beginchar(chars.math_greater_sl_equal_less_sl_equal,12u#,v_center(16u#+4rule_thickness#)); uni "0x2A94";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r;
+lft x6=lft x8=u; rt x7=rt x9=w-u;
+y0=h-4u; y9l=-d+.5rule_thickness; y8-y9=y1r-y0r;
+y0-y7=y2l-y6=y5r-y9r=y3-y8l; .5[y3,y0]=.5[y6,y7];
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_equal_double_less:
+bskchar "Greater than or double equals to or less than sign";
+beginchar(chars.math_greater_equal_double_less,12u#,v_center(16u#+4rule_thickness#+.45x_height#)); uni "0x2A8C";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=8u+4rule_thickness+.45x_height; y5r=-d+.5rule_thickness;
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; .5[y6,y8]=math_axis; y8-y6=.45x_height;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+greater(0,1,2);
+less(3,4,5);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_less_equal_double:
+bskchar "Greater than or less than or double equals to sign";
+beginchar(chars.math_greater_less_equal_double,12u#,v_center(16u#+2rule_thickness#+.45x_height#)); uni "0x2A92";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+rt x0r=w-u; x3l=w-x0r; y0=h-4u; y3-y5r=y0-y2r; y3=.5[bot y0,y8];
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7; y8=y9; y6l=-d; y8-y6=.45x_height;
+greater(0,1,2);
+less(3,4,5);
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(6,7,8,9);
+endchar;
+
+iff known chars.math_greater_sim_less:
+bskchar "Greater than or similar to or less than sign";
+beginchar(chars.math_greater_sim_less,12u#,v_center(16u#+3rule_thickness#+.45x_height#)); uni "0x2A90";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+rt x0r=w-u; x3l=w-x0r; .5[y0,y3]=math_axis; y0-y3=8u+3rule_thickness+.45x_height; y5r=-d+.5rule_thickness;
+.5[y6,y7]=math_axis;
+greater(0,1,2);
+less(3,4,5);
+vlnka(6,7);
+penlabels(6,7);
+endchar;
+
iff known chars.math_five_star:
bskchar "Five-pointed star";
beginchar(chars.math_five_star,x_height#+2u#,v_center(x_height#)); uni "0x22C6";
@@ -3101,6 +12608,28 @@ infill fullcircle scaled 2stem shifted z0;
penlabels(1,2,3,4,5,11,12,13,14,15); labels(0,101,102,103,104,105);
endchar;
+iff known chars.math_five_star_big:
+bskchar "Big five-pointed star";
+beginchar(chars.math_five_star_big,asc_height#+desc_depth#,asc_height#,desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.5oblu;
+z0=(.5w,.5[h,-d]);
+x1=x0; top y1=h+apex_o; pos1(hair,0);
+forsuffixes i=2,3,4,5:
+ z[i]=z0+(z1-z0) rotated ((i-1)*72); pos.i(hair,72(i-1));
+endfor
+z11=whatever[z1l,z3r]=whatever[z2r,z5r];
+z12=whatever[z2l,z4r]=whatever[z1l,z3r];
+z13=whatever[z3l,z5r]=whatever[z2l,z4r];
+z14=whatever[z4l,z1r]=whatever[z3l,z5r];
+z15=whatever[z1r,z4l]=whatever[z2r,z5l];
+filldraw z1l---obl(11,1l,2r)---z2r..z2l---obl(12,2l,3r)---z3r..z3l
+ ---obl(13,3l,4r)---z4r..z4l---obl(14,4l,5r)---z5r..z5l
+ ---obl(15,5l,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,11,12,13,14,15);
+endchar;
+
iff known chars.sign_born:
bskchar "Born sign";
beginchar(chars.sign_born,x_height#+2u#,v_center(x_height#)); uni "non";
@@ -3162,6 +12691,41 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_sqsubset_arm:
+bskchar "Square subset sign with arm";
+beginchar(chars.math_sqsubset_arm,16u#,v_center(x_height#)); uni "0x2ACD";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+rt x1=w-u; x4=w-6u; x2=x3=w-x1;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_sqsubset_very:
+bskchar "Very proper square subset sign";
+beginchar(chars.math_sqsubset_very,12u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,-90); pos6(rule_thickness,-90); pos7(rule_thickness,-90); pos8(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+rt x1=rt x4=rt x5=rt x8=w-u; x2=x3=w-x1; lft x6=lft x7=x2r+2rule_thickness;
+y1r-top y5l=if not boldmath:2.25\\fi rule_thickness; .5[y5,y8]=.5[y6,y7]=.5[y1,y4]; y5=y6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth; x6r:=x7l:=x7+rule_thickness-currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+endchar;
+
iff known chars.math_sqsubset_eq:
bskchar "Square subset or equal to sign";
beginchar(chars.math_sqsubset_eq,12u#,v_center(x_height#+3u#)); uni "0x2291";
@@ -3176,11 +12740,119 @@ x2r:=x3l:=x3+rule_thickness-currentbreadth;
lft x5=u; rt x6=w-u; y5l=y6l=-d;
bskpoints(5,6,hair,hair);
filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
- --obl(2r,3l,1r)---z1rr..cycle;
+ ---obl(2r,3l,1r)---z1rr..cycle;
filldraw z5rr..z5l---z6ll..z6r---cycle;
penlabels(1,2,3,4,5,6); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_sqsubset_eq_neg:
+bskchar "Negated square subset or equal to sign";
+beginchar(chars.math_sqsubset_eq_neg,12u#,v_center(x_height#+3u#)); uni "0x22E4";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+rt x1=rt x4=w-u; x2=x3=w-x1;
+.5[y7,y8]=.5[y4,y6]; .5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(11,3r,13).more---obl(13,11,5r)---z5rr..z5l
+ ---obl(15,5l,7l).more---z7l..z7rr---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12).more
+ ---obl(12,14,4r)---z4r..z4ll---obl(10,4ll,8r).more---z8r..z8ll---obl(9,8ll,3l)
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsubset_eq_neg_vert:
+bskchar "Negated square subset or equal to sign with vertical stroke";
+beginchar(chars.math_sqsubset_eq_neg_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+rt x1=rt x4=w-u; x2=x3=w-x1;
+.5[y7,y8]=.5[y4,y6]; x7=x8=.5w; y7=y5-2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(11,3r,13)---obl(13,11,5r)---z5rr..z5l
+ ---obl(15,5l,7l)---z7l..z7rr---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12)
+ ---obl(12,14,4r)---z4r..z4ll---obl(10,4ll,8r)---z8r..z8ll---obl(9,8ll,3l)
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsubset_eq_neg_alt:
+bskchar "Negated square subset or equal to sign---alternative";
+beginchar(chars.math_sqsubset_eq_neg_alt,12u#,v_center(x_height#+3u#)); uni "0x22E2";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+rt x1=rt x4=w-u; x2=x3=w-x1;
+.5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u; y8=y1+2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(20,1l,8r).more---z8r..z8ll---obl(19,8ll,2l)---z2ll..z2---z3..z3rr
+ ---obl(11,3r,13).more---obl(13,11,5r)---z5rr..z5l---obl(15,5l,7l).more---z7l..z7rr
+ ---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12).more---obl(12,14,4r)---z4r..z4ll
+ ---obl(10,4ll,18).more---obl(18,10,1rr)---z1rr..cycle;
+infill obl(9,17,3l) ---obl(3l,4l,2r)---obl(2r,3l,17)---obl(17,2r,9)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+endchar;
+
+iff known chars.math_sqsubset_eq_neg_alt_vert:
+bskchar "Negated square subset or equal to sign---alternative, with vertical stroke";
+beginchar(chars.math_sqsubset_eq_neg_alt_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+rt x1=rt x4=w-u; x2=x3=w-x1;
+x7=x8=.5w; y7=y5-2u; y8=y1+2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3+rule_thickness-currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(20,1l,8r)---z8r..z8ll---obl(19,8ll,2l)---z2ll..z2---z3..z3rr
+ ---obl(11,3r,13)---obl(13,11,5r)---z5rr..z5l---obl(15,5l,7l)---z7l..z7rr
+ ---obl(16,7rr,6l)---z6ll..z6r---obl(14,6r,12)---obl(12,14,4r)---z4r..z4ll
+ ---obl(10,4ll,18)---obl(18,10,1rr)---z1rr..cycle;
+infill obl(9,17,3l) ---obl(3l,4l,2r)---obl(2r,3l,17)---obl(17,2r,9)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+endchar;
+
iff known chars.math_subset:
bskchar "Proper subset sign";
beginchar(chars.math_subset,12u#,v_center(x_height#)); uni "0x2282";
@@ -3197,6 +12869,60 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr
penlabels(1,2,3,4,5); labels(1rr,5rr);
endchar;
+iff known chars.math_subset_neg:
+bskchar "Not subset sign";
+beginchar(chars.math_subset_neg,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2284";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+x6=x4; rt x7=x5-u; top y7=h; bot y6=-d;
+pos6(rule_thickness,angle(z6-z7)+90); pos7(rule_thickness,angle(z6-z7)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,7r,5l).more---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,6r)---z6rr..z6l---obl(5'l,6l,4r)---z4r...z3r...z2r
+ ---obl(1'l,2r,7l)---z7ll..z7r---obl(1'r,7r,1r).more---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_neg_vert:
+bskchar "Not subset sign with vertical stroke";
+beginchar(chars.math_subset_neg_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+x6=x7=.55w; top y7=h; bot y6=-d;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,7r,5l)---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,6r)---z6rr..z6l---obl(5'l,6l,4r)---z4r...z3r...z2r
+ ---obl(1'l,2r,7l)---z7ll..z7r---obl(1'r,7r,1r)---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
iff known chars.math_subset_eq:
bskchar "Subset or equal to sign";
beginchar(chars.math_subset_eq,12u#,v_center(x_height#+3u#)); uni "0x2286";
@@ -3216,6 +12942,710 @@ filldraw z6rr..z6l---z7ll..z7r---cycle;
penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
endchar;
+iff known chars.math_subset_eq_dot:
+bskchar "Subset or equal to sign with dot above";
+beginchar(chars.math_subset_eq_dot,12u#,.5x_height#+2.5u#+dot_size#+math_axis#,.5x_height#+1.5u#-math_axis#); uni "0x2AC3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h-u-dot_size; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+x8=.5w+.5u; top y8=h-.5dot_size;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr..z6l---z7ll..z7r---cycle;
+dot(8);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_not_eq:
+bskchar "Subset and not equal to sign";
+beginchar(chars.math_subset_not_eq,12u#,v_center(x_height#+3u#)); uni "0x228A";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+.5[x8,x9]=.5[x6,x7]; .5[y8,y9]=y6; x9-x8=.75(y9-y8)=3u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l).more---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r).more---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_not_eq_vert:
+bskchar "Subset and not equal to sign with vertical stroke";
+beginchar(chars.math_subset_not_eq_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+.5[x8,x9]=.5[x6,x7]; .5[y8,y9]=y6; x9=x8; .75(y9-y8)=3u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l)---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r)---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_eq_neg:
+bskchar "Negated subset or equal to sign";
+beginchar(chars.math_subset_eq_neg,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x4-u; rt x9=x5-u; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---obl(4'l,4l,9l)---z9ll..z9r
+ ---obl(4'r,9r,5l).more---z5l..z5+2o*right..z5rr---obl(5'r,5r,9'r)
+ ---obl(9'r,5'r,7r).more---z7r..z7ll---obl(8'r,7l,8r)---z8rr..z8l
+ ---obl(8'l,8l,6l)---z6l..z6rr---obl(9'l,6r,5'l)
+ ---obl(5'l,9'l,4r).more---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_eq_neg_vert:
+bskchar "Negated subset or equal to sign with vertical stroke";
+beginchar(chars.math_subset_eq_neg_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---obl(4'l,4l,9l)---z9ll..z9r
+ ---obl(4'r,9r,5l)---z5l..z5+2o*right..z5rr---obl(5'r,5r,9'r)
+ ---obl(9'r,5'r,7r)---z7r..z7ll---obl(8'r,7l,8r)---z8rr..z8l
+ ---obl(8'l,8l,6l)---z6l..z6rr---obl(9'l,6r,5'l)
+ ---obl(5'l,9'l,4r)---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_subset_eq:
+bskchar "Not subset or equal to sign";
+beginchar(chars.math_not_subset_eq,12u#,v_center(x_height#+3u#)); uni "0x2288";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x4; rt x9=x5-u; y9=y1+2u; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,9r,5l).more---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,9'r)---obl(9'r,5'r,7r).more---z7r..z7ll
+ ---obl(8'r,7l,8r)---z8rr..z8l ---obl(8'l,8l,6l)---z6l..z6rr
+ ---obl(9'l,6r,5'l)---obl(5'l,9'l,4r).more---z4r...z3r...z2r
+ ---obl(1'l,2r,9l)---z9ll..z9r---tobl(1'r,9r,1rr).more---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_subset_eq_vert:
+bskchar "Not subset or equal to sign with vertical stroke";
+beginchar(chars.math_not_subset_eq_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=y1+2u; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'r,1l,4'r)---obl(4'r,9r,5l)---z5l..z5+2o*right
+ ..z5rr---obl(5'r,5r,9'r) ---obl(9'r,5'r,7r)---z7r..z7ll
+ ---obl(8'r,7l,8r)---z8rr..z8l ---obl(8'l,8l,6l)---z6l..z6rr
+ ---obl(9'l,6r,5'l)---obl(5'l,9'l,4r)---z4r...z3r...z2r
+ ---obl(1'l,2r,9l)---z9ll..z9r---obl(1'r,9r,1r)---z1rr
+ ..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(4'l,4l,2'l)---obl(2'l,4'l,2l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_eq_double:
+bskchar "Subset or double equal to sign";
+beginchar(chars.math_subset_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2AC5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7=y8+.45x_height; bot y8l=bot y9l=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_not_eq_double:
+bskchar "Subset and not double equal to sign";
+beginchar(chars.math_subset_not_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2ACB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top rt z10=(x5-2u,y5r-rule_thickness); .5[x11,x10]=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---tobl(7',10rr,7r).more---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r).more---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---tobl(11',11ll,8l).more---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l).more---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_not_eq_double_vert:
+bskchar "Subset and not double equal to sign with vertical stroke";
+beginchar(chars.math_subset_not_eq_double_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top y10=y5r-rule_thickness; x11=x10=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---obl(7',10r,7r)---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r)---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---obl(11',11l,8l)---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l)---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_not_eq_double_alt:
+bskchar "Subset and not double equal to sign (alternative)";
+beginchar(chars.math_subset_not_eq_double_alt,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x10=x5; rt x11=x4-u; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---obl(2',4l,10l)---z10l..z10rr---tobl(3',10rr,5l).more---z5l
+ ..z5+2o*right..z5rr---obl(5',5r,7')---obl(7',10r,7r).more---z7r..z7ll
+ ---obl(8',7l,9')---obl(9',8',9r).more---z9r..z9ll---obl(10',9l,11r)---z11r
+ ..z11ll---tobl(11',11ll,8l).more---z8l..z8rr---obl(12',8r,13')
+ ---obl(13',12',6l).more---z6l..z6rr---obl(6',6r,4').more---obl(4',6',4r).more
+ ---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_not_eq_double_alt_vert:
+bskchar "Subset and not double equal to sign (alternative) with vertical stroke";
+beginchar(chars.math_subset_not_eq_double_alt_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x10=x11=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---obl(2',4l,10l)---z10l..z10rr---obl(3',10r,5l)---z5l
+ ..z5+2o*right..z5rr---obl(5',5r,7')---obl(7',10r,7r)---z7r..z7ll
+ ---obl(8',7l,9')---obl(9',8',9r)---z9r..z9ll---obl(10',9l,11r)---z11r
+ ..z11ll---obl(11',11l,8l)---z8l..z8rr---obl(12',8r,13')
+ ---obl(13',12',6l)---z6l..z6rr---obl(6',6r,4')---obl(4',6',4r)
+ ---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_subset_eq_double_not:
+bskchar "Negated subset or double equal to sign";
+beginchar(chars.math_subset_eq_double_not,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x10=x1-u; rt x11=x4-u; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10r,z11r]=whatever[z1l,z2l];
+z15'=whatever[z10l,z11l]=whatever[z1l,z2l];
+z16'=whatever[z10l,z11l]=whatever[z1r,z2r];
+z17'=whatever[z10r,z11r]=whatever[z1r,z2r];
+oblu.more:=2f_obl;
+filldraw z1rr---obl(17',1r,10r)---z10rr..z10l---obl(16',10l,2r)---z2r...z3r...z4r
+ ---obl(4',4r,6').more---obl(6',4',6r)---z6rr..z6l---obl(13',6l,12').more
+ ---obl(12',13',8r)---z8rr..z8l---tobl(11',8l,11ll).more---z11ll..z11r
+ ---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8').more---obl(8',9',7l)---z7ll
+ ..z7r---obl(7',7r,5').more---obl(5',7',5r)---z5rr..z5+2o*right..z5l
+ ---obl(3',5l,14').more---obl(14',3',1l)---z1l..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(2',4l,15')---obl(15',2',2l).more---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14',15',16',17');
+endchar;
+
+iff known chars.math_subset_eq_double_not_vert:
+bskchar "Negated subset or double equal to sign with vertical stroke";
+beginchar(chars.math_subset_eq_double_not_vert,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x10=x11=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10r,z11r]=whatever[z1l,z2l];
+z15'=whatever[z10l,z11l]=whatever[z1l,z2l];
+z16'=whatever[z10l,z11l]=whatever[z1r,z2r];
+z17'=whatever[z10r,z11r]=whatever[z1r,z2r];
+oblu.more:=2f_obl;
+filldraw z1rr---obl(17',1r,10r)---z10rr..z10l---obl(16',10l,2r)---z2r...z3r...z4r
+ ---obl(4',4r,6')---obl(6',4',6r)---z6rr..z6l---obl(13',6l,12')
+ ---obl(12',13',8r)---z8rr..z8l---obl(11',8l,11l)---z11ll..z11r
+ ---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8')---obl(8',9',7l)---z7ll
+ ..z7r---obl(7',7r,5')---obl(5',7',5r)---z5rr..z5+2o*right..z5l
+ ---obl(3',5l,14')---obl(14',3',1l)---z1l..z1+2o*right..cycle;
+infill z2l...z3l...z4l---obl(2',4l,15')---obl(15',2',2l)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14',15',16',17');
+endchar;
+
+iff known chars.math_subset_very:
+bskchar "Very proper subset sign";
+beginchar(chars.math_subset_very,12u#,v_center(x_height#)); uni "0x22D0";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=y8=.5[y1,y4]-o=.5[y6,y9]-o;
+y6=y7; y9=y10; y1l-top y6r=if not boldmath:2.25\\fi rule_thickness;
+rt x1=rt x5=rt x6=rt x10=w-u-2o; lft x3r=u; lft x8l=x3l+2rule_thickness;
+x2=x4=x3+(y2-y3); x7=x9=x8+(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_subset_plus:
+bskchar "Proper subset sign with plus";
+beginchar(chars.math_subset_plus,12u#,v_center(x_height#)); uni "non";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+x7=w-x6; y6=y7=.5[y8,y9]=math_axis; top y8=bot y2l-rule_thickness;
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_subset_eq_plus:
+bskchar "Subset or equal to sign with plus";
+beginchar(chars.math_subset_eq_plus,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6rr..z6l---z7ll..z7r---cycle;
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+x9=w-x8; y8=y9=.5[y10,y11]=y3+o; top y10=bot y2l-rule_thickness;
+x10=x11=.5w; y10-y11=x9-x8;
+bskpoints(8,9,hair,hair); bskpoints(11,10,.5hair,.5hair);
+z12=whatever[z11l,z10l]=whatever[z8l,z9l];
+z13=whatever[z11r,z10r]=whatever[z8l,z9l];
+z14=whatever[z11r,z10r]=whatever[z8r,z9r];
+z15=whatever[z11l,z10l]=whatever[z8r,z9r];
+filldraw z8l---obl(12,8l,11l)---z11l..z11rr---obl(13,11r,9l)---z9ll..z9r---
+ obl(14,9r,10r)---z10r..z10ll---obl(15,10l,8r)---z8rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,12,13,14,15);
+endchar;
+
+iff known chars.math_subset_plus_below:
+bskchar "Proper subset sign with plus below";
+beginchar(chars.math_subset_plus_below,12u#,v_center(1.75x_height#)); uni "0x2ABF";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+y6=y7=.5[y8,y9]; top y8=bot y4r-rule_thickness; bot y9=-d;
+x8=x9=.5[x7,x6]=.5w+.5u; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_subset_times_below:
+bskchar "Proper subset sign with times below";
+beginchar(chars.math_subset_times_below,12u#,v_center(1.75x_height#)); uni "0x2AC1";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+pos6(rule_thickness,135); pos7(rule_thickness,135);
+pos8(rule_thickness,45); pos9(rule_thickness,45);
+x6r=x8l; x7l=x9r; .5[x6r,x7l]=.5w+.5u; x7l-x6r=y7r-y6l;
+bot y6l=bot y9l=-d; top y7r=top y8r=bot y4r-rule_thickness;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+oblu:=2f_obl;
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_subset_tilde_below:
+bskchar "Proper subset sign with tilde below";
+beginchar(chars.math_subset_tilde_below,12u#,v_center(1.45x_height#+rule_thickness#)); uni "0x2AC7";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.45x_height;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+top y7=bot y4r-rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+vlnka(6,7);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_approx:
+bskchar "Proper subset sign with approximately equal";
+beginchar(chars.math_subset_approx,12u#,v_center(1.75x_height#+rule_thickness#)); uni "0x2AC9";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+numeric spread; spread:=.45x_height;
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=.85x_height; y5=y4; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+top y7=bot y4r-rule_thickness;bot y8=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+vlnka(6,7);
+vlnka(8,9);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_dot:
+bskchar "Proper subset sign with dot";
+beginchar(chars.math_subset_dot,12u#,v_center(x_height#)); uni "0x2ABD";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]-o=y6-o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3); x6=.5w;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+dot(6);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_subset_closed:
+bskchar "Closed subset sign";
+beginchar(chars.math_subset_closed,12u#,v_center(x_height#)); uni "0x2ACF";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u; lft x3r=u;
+x2=x4=x3+(y2-y3); x1l:=x5l:=x1r-(rule_thickness-currentbreadth);
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+iff known chars.math_subset_closed_eq:
+bskchar "Closed subset or equal to sign";
+beginchar(chars.math_subset_closed_eq,12u#,v_center(x_height#+3u#)); uni "0x2AD1";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]-o;
+rt x1=rt x5=w-u; lft x3r=u;
+x2=x4=x3+(y2-y3); x1l:=x5l:=x1r-(rule_thickness-currentbreadth);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+filldraw bskrule(6,7,hair,hair);
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_subset_open:
+bskchar "Open subset sign";
+beginchar(chars.math_subset_open,12u#,v_center(x_height#)); uni "0x27C3";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90); pos11(rule_thickness,180);
+pos12(rule_thickness,270); pos13(rule_thickness,270);
+y2=math_axis; rt x2=w-1.5u; x2-x6=y8-y4=2/3(y9l-y13l)-rule_thickness;
+top y9r=top y10r=h; bot y12r=bot y13r=-d; y11=.5[y9,y12]-o;
+rt x9=rt x13=w-u-2o; lft x11r=u;
+x10=x12=x11+(y10-y11);
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(13,12,hair,hair);
+filldraw z9l---z10l...z11l...z12l---z13l..z13+2o*right..z13rr---z12r...z11r...z10r---z9rr..z9+2o*right..cycle;
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12,13); labels(9rr,13rr);
+endchar;
+
iff known chars.math_sqsuperset:
bskchar "Square superset sign";
beginchar(chars.math_sqsuperset,12u#,v_center(x_height#)); uni "0x2290";
@@ -3231,6 +13661,41 @@ filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_sqsuperset_arm:
+bskchar "Square superset sign with arm";
+beginchar(chars.math_sqsuperset_arm,16u#,v_center(x_height#)); uni "0x2ACE";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+lft x1=u; x4=6u; x2=x3=w-x1;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(1rr,2ll,3rr,4ll);
+endchar;
+
+iff known chars.math_sqsuperset_very:
+bskchar "Very proper square superset sign";
+beginchar(chars.math_sqsuperset_very,12u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,-90); pos6(rule_thickness,-90); pos7(rule_thickness,-90); pos8(rule_thickness,-90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d;
+lft x1=lft x4=lft x5=lft x8=u; x2=x3=w-x1; rt x6=rt x7=x2r-2rule_thickness;
+y1r-top y5l=if not boldmath:2.25\\fi rule_thickness; .5[y5,y8]=.5[y6,y7]=.5[y1,y4]; y5=y6;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair); bskpoints(7,8,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth; x6r:=x7l:=x7-rule_thickness+currentbreadth;
+filldraw z1l---z2ll..z2---z3..z3rr---z4r..z4ll---obl(3l,4l,2r)
+ --obl(2r,3l,1r)---z1rr..cycle;
+filldraw z5l---z6ll..z6---z7..z7rr---z8r..z8ll---obl(7l,8l,6r)
+ --obl(6r,7l,5r)---z5rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,5rr,6ll,7rr,8ll);
+endchar;
+
iff known chars.math_sqsuperset_eq:
bskchar "Square superset or equal to sign";
beginchar(chars.math_sqsuperset_eq,12u#,v_center(x_height#+3u#)); uni "0x2292";
@@ -3250,6 +13715,114 @@ filldraw z5rr..z5l---z6ll..z6r---cycle;
penlabels(1,2,3,4,5,6); labels(1rr,2ll,3rr,4ll);
endchar;
+iff known chars.math_sqsuperset_eq_neg:
+bskchar "Negated square superset or equal to sign";
+beginchar(chars.math_sqsuperset_eq_neg,12u#,v_center(x_height#+3u#)); uni "0x22E5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+lft x1=lft x4=u; x2=x3=w-x1;
+.5[y7,y8]=.5[y4,y6]; .5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(12,3r,14)---obl(14,12,6r).more---z6r..z6l
+ ---obl(16,6l,7r)---z7rr..z7l---obl(15,7l,5l).more---z5l..z5rr---obl(13,5r,11)
+ ---obl(11,13,4r).more---z4r..z4ll---obl(9,4ll,8ll)---z8ll..z8r---obl(10,8r,3l).more
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsuperset_eq_neg_vert:
+bskchar "Negated square superset or equal to sign with vertical stroke";
+beginchar(chars.math_sqsuperset_eq_neg_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+lft x1=lft x4=u; x2=x3=w-x1;
+.5[y7,y8]=.5[y4,y6]; x7=x8=.5w; y7=y5-2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+filldraw z1l---z2ll..z2---z3..z3rr---obl(12,3r,14)---obl(14,12,6r)---z6r..z6l
+ ---obl(16,6l,7r)---z7rr..z7l---obl(15,7l,5l)---z5l..z5rr---obl(13,5r,11)
+ ---obl(11,13,4r)---z4r..z4ll---obl(9,4ll,8ll)---z8ll..z8r---obl(10,8r,3l)
+ ---obl(3l,4l,2r)---obl(2r,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16);
+endchar;
+
+iff known chars.math_sqsuperset_eq_neg_alt:
+bskchar "Negated square superset or equal to sign---alternative";
+beginchar(chars.math_sqsuperset_eq_neg_alt,12u#,v_center(x_height#+3u#)); uni "0x22E3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+lft x1=lft x4=u; x2=x3=w-x1;
+.5[x7,x8]=.5w; x8-x7=4u; y7=y5-2u; y8=y1+2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,angle(z7-z8)+90); pos8(rule_thickness,angle(z7-z8)+90);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(19,1l,8ll)---z8ll..z8r---obl(20,8r,2l).more---z2ll..z2---z3..z3rr
+ ---obl(12,3r,14)---obl(14,12,6r).more---z6r..z6l---obl(16,6l,7r)---z7rr..z7l
+ ---obl(15,7l,5l).more---z5l..z5rr---obl(13,5r,11)---obl(11,13,4r).more---z4r..z4ll
+ ---obl(9,4ll,17)---obl(17,9,1rr).more---z1rr..cycle;
+infill obl(18,10,2r)---obl(2r,18,3l)---obl(3l,2r,10)---obl(10,3l,18).more---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+endchar;
+
+iff known chars.math_sqsuperset_eq_neg_alt_vert:
+bskchar "Negated square superset or equal to sign---alternative, with vertical stroke";
+beginchar(chars.math_sqsuperset_eq_neg_alt_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1l=top y2l=h; bot y3r=bot y4r=-d+3u;
+lft x1=lft x4=u; x2=x3=w-x1;
+x7=x8=.5w; y7=y5-2u; y8=y1+2u;
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+x2r:=x3l:=x3-rule_thickness+currentbreadth;
+lft x5=u; rt x6=w-u; y5l=y6l=-d;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y9=y10=y4l; y11=y12=y4r; y13=y14=y6r; y15=y16=y6l; y17=y18=y1r; y19=y20=y1l;
+z9=whatever[z8l,z7l]; z10=whatever[z8r,z7r]; z11=whatever[z8l,z7l]; z12=whatever[z8r,z7r];
+z13=whatever[z8l,z7l]; z14=whatever[z8r,z7r]; z15=whatever[z8l,z7l]; z16=whatever[z8r,z7r];
+z17=whatever[z8l,z7l]; z18=whatever[z8r,z7r]; z19=whatever[z8l,z7l]; z20=whatever[z8r,z7r];
+filldraw z1l---obl(19,1l,8ll)---z8ll..z8r---obl(20,8r,2l)---z2ll..z2---z3..z3rr
+ ---obl(12,3r,14)---obl(14,12,6r)---z6r..z6l---obl(16,6l,7r)---z7rr..z7l
+ ---obl(15,7l,5l)---z5l..z5rr---obl(13,5r,11)---obl(11,13,4r)---z4r..z4ll
+ ---obl(9,4ll,17)---obl(17,9,1rr)---z1rr..cycle;
+infill obl(18,10,2r)---obl(2r,18,3l)---obl(3l,2r,10)---obl(10,3l,18)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,2ll,3rr,4ll,9,10,11,12,13,14,15,16,17,18,19,20);
+endchar;
+
iff known chars.math_superset:
bskchar "Proper superset sign";
beginchar(chars.math_superset,12u#,v_center(x_height#)); uni "0x2283";
@@ -3266,6 +13839,60 @@ filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr.
penlabels(1,2,3,4,5); labels(1rr,5rr);
endchar;
+iff known chars.math_superset_neg:
+bskchar "Negated superset sign";
+beginchar(chars.math_superset_neg,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2285";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+lft x6=x5+u; x7=x2; top y7=h; bot y6=-d;
+pos6(rule_thickness,angle(z6-z7)+90); pos7(rule_thickness,angle(z6-z7)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'l,1l,4'l).more---obl(4'l,7l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,6l).more---z6l..z6rr---obl(5'r,6r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu.more*unitvector(z7-z6)---z7r..z7ll
+ ---obl(1'l,7l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z6-z7)---obl(4'r,2'r,4l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_neg_vert:
+bskchar "Negated superset sign with vertical stroke";
+beginchar(chars.math_superset_neg_vert,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+y1=y2; y4=y5; .5[y1,y5]=math_axis; top y1r-bot y5r=x_height; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+x6=x7=.45w; top y7=h; bot y6=-d;
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y4'r=y4'l=y4l; z4'r=whatever[z7r,z6r]; z4'l=whatever[z7l,z6l];
+y5'r=y5'l=y4r; z5'r=whatever[z7r,z6r]; z5'l=whatever[z7l,z6l];
+y1'r=y1'l=y1r; z1'r=whatever[z7r,z6r]; z1'l=whatever[z7l,z6l];
+y2'r=y2'l=y1l; z2'r=whatever[z7r,z6r]; z2'l=whatever[z7l,z6l];
+filldraw z1l---obl(2'l,1l,4'l)---obl(4'l,7l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,6l)---z6l..z6rr---obl(5'r,6r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu*unitvector(z7-z6)---z7r..z7ll
+ ---obl(1'l,7l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z6-z7)---obl(4'r,2'r,4l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
iff known chars.math_superset_eq:
bskchar "Superset or equal to sign";
beginchar(chars.math_superset_eq,12u#,v_center(x_height#+3u#)); uni "0x2287";
@@ -3285,6 +13912,881 @@ filldraw z6rr..z6l---z7ll..z7r---cycle;
penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
endchar;
+iff known chars.math_superset_eq_dot:
+bskchar "Superset or equal to sign with dot above";
+beginchar(chars.math_superset_eq_dot,12u#,.5x_height#+2.5u#+dot_size#+math_axis#,.5x_height#+1.5u#-math_axis#); uni "0x2AC4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h-u-dot_size; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+x8=.5w-.5u; top y8=h-.5dot_size;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr..z6l---z7ll..z7r---cycle;
+dot(8);
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_not_eq:
+bskchar "Superset and not equal to sign";
+beginchar(chars.math_superset_not_eq,12u#,v_center(x_height#+3u#)); uni "0x228B";
+adjust_fit(0,0);
+oblu.more:=2f_obl;
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+.5[x8,x9]=.5[x6,x7]; .5[y8,y9]=y6; x9-x8=.75(y9-y8)=3u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l).more---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r).more---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_not_eq_vert:
+bskchar "Superset and not equal to sign with vertical stroke";
+beginchar(chars.math_superset_not_eq_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; .5[y8,y9]=y6; .75(y9-y8)=3u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr..z6l---obl(8'l,6l,8l)---z8l..z8rr---obl(8'r,8r,7l)---z7ll..z7r---
+ obl(9'r,7r,9r)---z9r..z9ll---obl(9'l,9l,6r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_eq_neg:
+bskchar "Negated superset or equal to sign";
+beginchar(chars.math_superset_eq_neg,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+lft x8=x6; x9=x4; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---tobl(4'r,4l,9r).more---z9r..z9ll
+ ---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr---obl(5'l,5r,9'l).more
+ ---obl(9'l,5'l,6r)---z6rr..z6l---obl(8'l,6l,8l).more---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r).more
+ ---obl(5'r,9'r,4r)---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_eq_neg_vert:
+bskchar "Negated superset or equal to sign with vertical stroke";
+beginchar(chars.math_superset_eq_neg_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=.5[y4,y3]; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+filldraw z1l---z2l...z3l...z4l---obl(4'r,4l,9r)---z9r..z9ll
+ ---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr---obl(5'l,5r,9'l)
+ ---obl(9'l,5'l,6r)---z6rr..z6l---obl(8'l,6l,8l)---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r)
+ ---obl(5'r,9'r,4r)---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_superset_eq:
+bskchar "Not superset or equal to sign";
+beginchar(chars.math_not_superset_eq,12u#,v_center(x_height#+3u#)); uni "0x2289";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+lft x8=x6+u; x9=x2; y9=y2+2u; y8=y6-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'l,1l,4'l).more---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,9'l).more---tobl(9'l,5'l,6rr).more---z6rr
+ ..z6l---obl(8'l,6l,8l).more---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r).more---obl(5'r,9'r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu.more*unitvector(z9-z8)---z9r..z9ll
+ ---obl(1'l,9l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z8-z9)---obl(4'r,2'r,4l).more---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_not_superset_eq_vert:
+bskchar "Not superset or equal to sign with vertical stroke";
+beginchar(chars.math_not_superset_eq_vert,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(6,7,hair,hair);
+x8=x9=.5w; y9=y2+2u; y8=y6-2u;
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+bskpoints(8,9,rule_thickness,rule_thickness);
+y9'r=y9'l=y7r; z9'r=whatever[z9r,z8r]; z9'l=whatever[z9l,z8l];
+y8'r=y8'l=y7l; z8'r=whatever[z9r,z8r]; z8'l=whatever[z9l,z8l];
+y4'r=y4'l=y4l; z4'r=whatever[z9r,z8r]; z4'l=whatever[z9l,z8l];
+y5'r=y5'l=y4r; z5'r=whatever[z9r,z8r]; z5'l=whatever[z9l,z8l];
+y1'r=y1'l=y1r; z1'r=whatever[z9r,z8r]; z1'l=whatever[z9l,z8l];
+y2'r=y2'l=y1l; z2'r=whatever[z9r,z8r]; z2'l=whatever[z9l,z8l];
+filldraw z1l---obl(2'l,1l,4'l)---obl(4'l,9l,5l)---z5l..z5+2o*left..z5rr
+ ---obl(5'l,5r,9'l)---obl(9'l,5'l,6r)---z6rr
+ ..z6l---obl(8'l,6l,8l)---z8l..z8rr
+ ---obl(8'r,8r,7l)---z7ll..z7r---obl(9'r,7r,5'r)---obl(5'r,9'r,4r)
+ ---z4r...z3r...z2r{left}...z1'r+oblu*unitvector(z9-z8)---z9r..z9ll
+ ---obl(1'l,9l,1r)---z1rr..z1+2o*left..cycle;
+infill z4l...z3l...{left}z2l...z2'r+oblu*unitvector(z8-z9)---obl(4'r,2'r,4l)---cycle;
+penlabels(1,1',2',2,3,4,4',5,5',6,7,8,8',9,9'); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_eq_double:
+bskchar "Superset or double equal to sign";
+beginchar(chars.math_superset_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2AC6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+lft x6=lft x8=u; rt x7=rt x9=w-u; y6=y7=y8+.45x_height; bot y8l=bot y9l=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw bskrule(6,7,hair,hair);
+filldraw bskrule(8,9,hair,hair);
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_not_eq_double:
+bskchar "Superset and not double equal to sign";
+beginchar(chars.math_superset_not_eq_double,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "0x2ACC";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top y10=y5r-rule_thickness; x11=x5+2u; .5[x11,x10]=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---tobl(7',10rr,7r).more---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r).more---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---tobl(11',11ll,8l).more---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l).more---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_not_eq_double_vert:
+bskchar "Superset and not double equal to sign with vertical stroke";
+beginchar(chars.math_superset_not_eq_double_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+top y10=y5r-rule_thickness; x11=x10=.5w; .5[y11,y10]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr---obl(6',6r,10l)---z10l..z10rr---obl(7',10r,7r)---z7r
+ ..z7ll---obl(8',7l,9')---obl(9',8',9r)---z9r..z9ll
+ ---obl(10',9l,11r)---z11r..z11ll---obl(11',11l,8l)---z8l
+ ..z8rr---obl(12',8r,13')---obl(13',12',6l)---z6l..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_not_eq_double_alt:
+bskchar "Superset and not double equal to sign (alternative)";
+beginchar(chars.math_superset_not_eq_double_alt,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x11=x5; x10=x4; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+oblu.more:=2f_obl;
+filldraw z1l---z2l...z3l...z4l---tobl(3',4l,10rr).more---z10rr..z10l---obl(2',10l,5l)
+ ---z5l..z5+2o*left..z5rr---obl(4',5r,6').more---obl(6',4',6r)---z6rr..z6l
+ ---obl(13',6l,12').more---tobl(12',13',8rr)---z8rr..z8l---tobl(11',8l,11ll).more
+ ---z11ll..z11r---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8').more
+ ---obl(8',9',7l)---z7ll..z7r---obl(7',7r,5').more---obl(5',7',4r)---z4r...z3r
+ ...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_not_eq_double_alt_vert:
+bskchar "Superset and not double equal to sign (alternative) with vertical stroke";
+beginchar(chars.math_superset_not_eq_double_alt_vert,12u#,v_center(1.45x_height#+3u#+rule_thickness#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=y3; x11=x10=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+filldraw z1l---z2l...z3l...z4l---obl(3',4l,10r)---z10rr..z10l---obl(2',10l,5l)
+ ---z5l..z5+2o*left..z5rr---obl(4',5r,6')---obl(6',4',6r)---z6rr..z6l
+ ---obl(13',6l,12')---obl(12',13',8r)---z8rr..z8l---obl(11',8l,11l)
+ ---z11ll..z11r---obl(10',11r,9l)---z9ll..z9r---obl(9',9r,8')
+ ---obl(8',9',7l)---z7ll..z7r---obl(7',7r,5')---obl(5',7',4r)---z4r...z3r
+ ...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13');
+endchar;
+
+iff known chars.math_superset_eq_double_not:
+bskchar "Negated superset or double equal to sign";
+beginchar(chars.math_superset_eq_double_not,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x11=x5+u; x10=x4; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,angle(z11-z10)+90); pos11(rule_thickness,angle(z11-z10)+90);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10l,z11l]=whatever[z1l,z2l];
+p0=z1rr--z2r...z3r...{left}z4r;
+p1=z4l{right}...z3l...z2l---z1l;
+p2=z11ll--z10l;
+p3=z10rr--z11r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+oblu.more:=2f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ---obl(5',4r,7')---obl(7',5',7r).more---z7r..z7ll---obl(8',7l,9').more
+ ---obl(9',8',9r)---z9r..z9ll---obl(10',9l,11r)---z11r..z11ll
+ ---tobl(11',11ll,8l).more---z8l..z8rr---obl(12',8r,13')---obl(13',12',6l).more
+ ---z6l..z6rr---obl(6',6r,4')---obl(4',6',5r).more---z5rr..z5+2o*left..z5l
+ ---obl(2',5l,14')---obl(14',2',1l).more---z1l..z1+2o*left..{right}cycle;
+infill obl(3',10r,4l)---subpath(0,rundy(p1,tim4).zpet) of p1
+ ..point rundy(p3,tim5) of p3---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14');
+endchar;
+
+iff known chars.math_superset_eq_double_not_vert:
+bskchar "Negated superset or double equal to sign with vertical stroke";
+beginchar(chars.math_superset_eq_double_not_vert,12u#,math_axis#+.725x_height#+1.5u#+2.5rule_thickness#,.725x_height#+1.5u#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h-2rule_thickness; bot y4r=bot y5r=-d+3u+.45x_height+rule_thickness; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+lft x6=lft x8=u; rt x7=rt x9=w-u; bot y8l=bot y9l=-d; y6=y7=y8+.45x_height;
+y10=h; x11=x10=.5w; .5[y11,bot y5r-rule_thickness]=.5[y6,y8];
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair);
+bskpoints(10,11,rule_thickness,rule_thickness);
+z2'=whatever[z10l,z11l]=whatever[z5l,z4l];
+z3'=whatever[z10r,z11r]=whatever[z5l,z4l];
+z4'=whatever[z10l,z11l]=whatever[z4r,z5r];
+z5'=whatever[z10r,z11r]=whatever[z4r,z5r];
+z6'=whatever[z10l,z11l]=whatever[z6r,z7r];
+z7'=whatever[z10r,z11r]=whatever[z6r,z7r];
+z8'=whatever[z10r,z11r]=whatever[z6l,z7l];
+z9'=whatever[z10r,z11r]=whatever[z8r,z9r];
+z10'=whatever[z10r,z11r]=whatever[z8l,z9l];
+z11'=whatever[z10l,z11l]=whatever[z8l,z9l];
+z12'=whatever[z10l,z11l]=whatever[z8r,z9r];
+z13'=whatever[z10l,z11l]=whatever[z6l,z7l];
+z14'=whatever[z10l,z11l]=whatever[z1l,z2l];
+p0=z1rr--z2r...z3r...{left}z4r;
+p1=z4l{right}...z3l...z2l---z1l;
+p2=z11ll--z10l;
+p3=z10rr--z11r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+oblu.more:=2f_obl;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p2,tim1),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ---obl(5',4r,7')---obl(7',5',7r)---z7r..z7ll---obl(8',7l,9')---obl(9',8',9r)
+ ---z9r..z9ll---obl(10',9l,11r)---z11r..z11ll---obl(11',11l,8l)---z8l..z8rr
+ ---obl(12',8r,13')---obl(13',12',6l)---z6l..z6rr---obl(6',6r,4')---obl(4',6',5r)
+ ---z5rr..z5+2o*left..z5l---obl(2',5l,14')---obl(14',2',1l)---z1l
+ ..z1+2o*left..{right}cycle;
+infill obl(3',10r,4l)---subpath(0,rundy(p1,tim4).zpet) of p1
+ ..point rundy(p3,tim5) of p3---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11);
+labels(1rr,5rr,7ll,8ll,10rr,11ll,2',3',4',5',6',7',8',9',10',11',12',13',14');
+endchar;
+
+iff known chars.math_superset_very:
+bskchar "Very proper superset sign";
+beginchar(chars.math_superset_very,12u#,v_center(x_height#)); uni "0x22D1";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,0);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=y8=.5[y1,y4]+o=.5[y6,y9]+o; y6=y7; y9=y10;
+lft x1=lft x5=lft x6=lft x10=u+2o; rt x3r=w-u; rt x8r=x3l-2rule_thickness; y1l-top y6r=if not boldmath:2.25\\fi rule_thickness;
+x2=x4=x3-(y2-y3); x7=x9=x8-(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*left..z10rr---z9r...z8r...z7r---z6rr..z6+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_plus:
+bskchar "Proper superset sign with plus";
+beginchar(chars.math_superset_plus,12u#,v_center(x_height#)); uni "non";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+x7=w-x6; y6=y7=.5[y8,y9]=math_axis; top y8=bot y2l-rule_thickness;
+x8=x9=.5w; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_superset_eq_plus:
+bskchar "Superset or equal to sign with plus";
+beginchar(chars.math_superset_eq_plus,12u#,v_center(x_height#+3u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6rr..z6l---z7ll..z7r---cycle;
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+pos10(rule_thickness,0); pos11(rule_thickness,0);
+x9=w-x8; y8=y9=.5[y10,y11]=y3-o; top y10=bot y2l-rule_thickness;
+x10=x11=.5w; y10-y11=x9-x8;
+bskpoints(8,9,hair,hair); bskpoints(11,10,.5hair,.5hair);
+z12=whatever[z11l,z10l]=whatever[z8l,z9l];
+z13=whatever[z11r,z10r]=whatever[z8l,z9l];
+z14=whatever[z11r,z10r]=whatever[z8r,z9r];
+z15=whatever[z11l,z10l]=whatever[z8r,z9r];
+filldraw z8l---obl(12,8l,11l)---z11l..z11rr---obl(13,11r,9l)---z9ll..z9r---
+ obl(14,9r,10r)---z10r..z10ll---obl(15,10l,8r)---z8rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(1rr,5rr,12,13,14,15);
+endchar;
+
+iff known chars.math_superset_plus_below:
+bskchar "Proper superset sign with plus below";
+beginchar(chars.math_superset_plus_below,12u#,v_center(1.75x_height#)); uni "0x2AC0";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+y6=y7=.5[y8,y9]; top y8=bot y4r-rule_thickness; bot y9=-d;
+x8=x9=.5[x7,x6]=.5w-.5u; y8-y9=x7-x6;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_superset_times_below:
+bskchar "Proper superset sign with times below";
+beginchar(chars.math_superset_times_below,12u#,v_center(1.75x_height#)); uni "0x2AC2";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+pos6(rule_thickness,135); pos7(rule_thickness,135);
+pos8(rule_thickness,45); pos9(rule_thickness,45);
+x6r=x8l; x7l=x9r; .5[x6r,x7l]=.5w-.5u; x7l-x6r=y7r-y6l;
+bot y6l=bot y9l=-d; top y7r=top y8r=bot y4r-rule_thickness;
+bskpoints(6,7,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z10=whatever[z9l,z8l]=whatever[z6l,z7l];
+z11=whatever[z9r,z8r]=whatever[z6l,z7l];
+z12=whatever[z9r,z8r]=whatever[z6r,z7r];
+z13=whatever[z9l,z8l]=whatever[z6r,z7r];
+oblu:=2f_obl;
+filldraw z6l---obl(10,6l,9l)---z9l..z9rr---obl(11,9r,7l)---z7ll..z7r---
+ obl(12,7r,8r)---z8r..z8ll---obl(13,8l,6r)---z6rr..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_superset_tilde_below:
+bskchar "Proper superset sign with tilde below";
+beginchar(chars.math_superset_tilde_below,12u#,v_center(1.45x_height#+rule_thickness#)); uni "0x2AC8";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+numeric spread; spread:=.45x_height;
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=x_height; y5=y4; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+top y7=bot y4r-rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+vlnka(6,7);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_approx:
+bskchar "Proper superset sign with approximately equal";
+beginchar(chars.math_superset_approx,12u#,v_center(1.75x_height#+rule_thickness#)); uni "0x2ACA";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+numeric spread; spread:=.45x_height;
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; top y1r-bot y4r=.85x_height; y5=y4; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+top y7=bot y4r-rule_thickness; bot y8=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+vlnka(6,7);
+vlnka(8,9);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_dot:
+bskchar "Proper superset sign with dot";
+beginchar(chars.math_superset_dot,12u#,v_center(x_height#)); uni "0x2ABE";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o=y6+o;
+lft x1=lft x5=u+2o; rt x3r=w-u; x6=.5w;
+x2=x4=x3-(y2-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+dot(6);
+penlabels(1,2,3,4,5); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_superset_closed:
+bskchar "Closed superset sign";
+beginchar(chars.math_superset_closed,12u#,v_center(x_height#)); uni "0x2AD0";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u; rt x3r=w-u;
+x2=x4=x3-(y2-y3); x1l:=x5l:=x1r+(rule_thickness-currentbreadth);
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+penlabels(1,2,3,4,5);
+endchar;
+
+iff known chars.math_superset_closed_eq:
+bskchar "Closed superset or equal to sign";
+beginchar(chars.math_superset_closed_eq,12u#,v_center(x_height#+3u#)); uni "0x2AD2";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+3u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u; rt x3r=w-u;
+lft x6=u; rt x7=w-u; y6l=y7l=-d;
+x2=x4=x3-(y2-y3); x1l:=x5l:=x1r+(rule_thickness-currentbreadth);
+filldraw obl(1r,5r,2r)---z2r...z3r...z4r---obl(5r,4r,1r)---cycle;
+infill obl(1l,5l,2l)---z2l...z3l...z4l---obl(5l,4l,1l)---cycle;
+filldraw bskrule(6,7,hair,hair);
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_superset_open:
+bskchar "Open superset sign";
+beginchar(chars.math_superset_open,12u#,v_center(x_height#)); uni "0x27C4";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90); pos11(rule_thickness,0);
+pos12(rule_thickness,270); pos13(rule_thickness,270);
+y2=math_axis; lft x6=1.5u; x2-x6=y8-y4=2/3(y9l-y13l)-rule_thickness;
+top y9r=top y10r=h; bot y12r=bot y13r=-d; y11=.5[y9,y12]+o;
+lft x9=lft x13=u+2o; rt x11r=w-u;
+x10=x12=x11-(y10-y11);
+circle_points(rule_thickness);
+bskpoints(9,10,hair,hair); bskpoints(13,12,hair,hair);
+filldraw z9l---z10l...z11l...z12l---z13l..z13+2o*left..z13rr---z12r...z11r...z10r---z9rr..z9+2o*left..cycle;
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12,13); labels(9rr,13rr);
+endchar;
+
+iff known chars.math_subset_superset:
+bskchar "Subset above superset sign";
+beginchar(chars.math_subset_superset,12u#,v_center(1.75x_height#)); uni "0x2AD3";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,0);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]-o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]+o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+rt x1=rt x5=w-u-2o; lft x3r=u; x2=x4=x3+(y2-y3);
+lft x6=lft x10=u+2o; rt x8r=w-u; x7=x9=x8-(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*left..z10rr---z9r...z8r...z7r---z6rr..z6+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_subset:
+bskchar "Superset above subset sign";
+beginchar(chars.math_superset_subset,12u#,v_center(1.75x_height#)); uni "0x2AD4";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]+o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]-o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+lft x1=lft x5=u+2o; rt x3r=w-u; x2=x4=x3-(y2-y3);
+rt x6=rt x10=w-u-2o; lft x8r=u; x7=x9=x8+(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_subset_subset:
+bskchar "Subset above subset sign";
+beginchar(chars.math_subset_subset,12u#,v_center(1.75x_height#)); uni "0x2AD5";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]-o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]-o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+rt x1=rt x5=w-u-2o; lft x3r=u; x2=x4=x3+(y2-y3);
+rt x6=rt x10=w-u-2o; lft x8r=u; x7=x9=x8+(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_superset:
+bskchar "Superset above superset sign";
+beginchar(chars.math_superset_superset,12u#,v_center(1.75x_height#)); uni "0x2AD6";
+italcorr h#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,0);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=h; y4=y5; y3=.5[y1,y4]+o;
+y6=y7; bot y9r=bot y10r=-d; y8=.5[y6,y9]+o; .5[y4,y6]=math_axis; y4r-y6r=2rule_thickness;
+lft x1=lft x5=u+2o; rt x3r=w-u; x2=x4=x3-(y2-y3);
+lft x6=lft x10=u+2o; rt x8r=w-u; x7=x9=x8-(y7-y8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*left..z10rr---z9r...z8r...z7r---z6rr..z6+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,10rr);
+endchar;
+
+iff known chars.math_superset_beside_subset:
+bskchar "Superset beside supset sign";
+beginchar(chars.math_superset_beside_subset,20u#,v_center(x_height#)); uni "0x2AD7";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+top y1r=top y2r=top y6r=top y7r=h; bot y4r=bot y5r=bot y9r=bot y10r=-d;
+y3=.5[y1,y4]+o; y8=.5[y6,y9]-o;
+lft x1=lft x5=u+2o; x2=x4=x3-(y2-y3);
+rt x6=rt x10=w-u-2o; x7=x9=x8+(y7-y8);
+.5[x3,x8]=.5w; lft x8l-rt x3r=2rule_thickness;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+filldraw z1l---z2l...z3l...z4l---z5l..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+filldraw z6l---z7l...z8l...z9l---z10l..z10+2o*right..z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10); labels(1rr,5rr,6rr,5rr);
+endchar;
+
+iff known chars.math_superset_join_subset:
+bskchar "Superset beside and joined with supset sign";
+beginchar(chars.math_superset_join_subset,20u#,v_center(x_height#)); uni "0x2AD8";
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90); pos8(rule_thickness,180);
+pos9(rule_thickness,270); pos10(rule_thickness,270);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+top y1r=top y2r=top y6r=top y7r=h; bot y4r=bot y5r=bot y9r=bot y10r=-d;
+y3=.5[y1,y4]+o; y8=.5[y6,y9]-o;
+lft x1=lft x5=u+2o; x2=x4=x3-(y2-y3);
+rt x6=rt x10=w-u-2o; x7=x9=x8+(y7-y8);
+.5[x3,x8]=.5w=.5[x11,x12]; lft x8l-rt x3r=2rule_thickness; x12=x7;
+y11=y12=math_axis;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(6,7,hair,hair); bskpoints(10,9,hair,hair);
+bskpoints(11,12,rule_thickness,rule_thickness);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..{right}z1l;
+p2:=reverse (z6l---z7l...z8l...z9l---z10l);
+p3:=reverse (z10rr---z9r...z8r...z7r---z6rr..z6+2o*right..{left}z6l);
+p4:=z12r--z11rr;
+p5:=z11l--z12ll;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p5;
+(tim8,tim9)=p2 intersectiontimes p5;
+(tim10,tim11)=p2 intersectiontimes p4;
+(tim12,tim13)=p3 intersectiontimes p4;
+(tim14,tim15)=p1 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0..z5+2o*left
+ ..subpath(0,rundy(p1,tim4).zpet) of p1.. .5[point tim5 of p5,point tim7 of p5]
+ ..subpath(rundy(p3,tim6),infinity) of p3..z10+2o*right
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p5,tim9),infinity) of p5
+ ..subpath(0,rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3.. .5[point tim13 of p4,point tim15 of p4]
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); labels(1rr,5rr,6rr,5rr,11rr,12ll);
+endchar;
+
iff known chars.math_element:
bskchar "Element sign";
beginchar(chars.math_element,9u#,v_center(x_height#+u#)); uni "0x2208";
@@ -3308,6 +14810,398 @@ subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr
penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
endchar;
+iff known chars.math_element_dot:
+bskchar "Element sign with dot above";
+beginchar(chars.math_element_dot,9u#,.5x_height#+1.5u#+math_axis#+dot_size#,.5x_height#+.5u#-math_axis#); uni "0x22F5";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h-u-dot_size; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r; rt x8=x2; bot y8=h-.5dot_size;
+dot(8);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_bar:
+bskchar "Element sign with bar above";
+beginchar(chars.math_element_bar,9u#,.5x_height#+1.5u#+math_axis#+2rule_thickness#,.5x_height#+.5u#-math_axis#); uni "0x22F6";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-u-2rule_thickness; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r; lft x8=x6; rt x9=w-u; top y8r=top y9r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw bskrule(8,9,hair,hair);
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_underbar:
+bskchar "Element sign with bar below";
+beginchar(chars.math_element_underbar,9u#,.5x_height#+.5u#+math_axis#,.5x_height#+1.5u#+2rule_thickness#-math_axis#); uni "0x22F8";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d+u+2rule_thickness; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r; lft x8=x6; rt x9=w-u; bot y8l=bot y9l=-d;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw bskrule(8,9,hair,hair);
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_neg:
+bskchar "Negated element sign";
+beginchar(chars.math_element_neg,9u#,.5x_height#+2u#+math_axis#, .5x_height#+1.5u#-math_axis#); uni "0x2209";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h-1.5u; bot y4r=bot y5r=-d+u; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+top rt z8=(w-2u,h); bot lft z9=(2u,-d);
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z8l--z9ll;
+p2:=(x3l+stem,y6r)---z7r;
+p3:=z7l--(x3l+stem,y6l);
+p4:=z5rr---z4r...z3r...z2r---z1rr;
+p5:=z9r--z8rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+z10=p0 intersectionpoint p1;
+z11=p1 intersectionpoint p2;
+z12=p1 intersectionpoint p3;
+(tim3,tim4-2)=p1 intersectiontimes subpath(2,infinity) of p0; z13= point tim3 of p1;
+(tim5,tim6)=p1 intersectiontimes p4;
+(tim7,tim8)=p5 intersectiontimes p4;
+(tim9,tim10-2)=p5 intersectiontimes subpath(2,infinity) of p4;
+(tim11-2,tim12)=subpath(2,infinity) of p4 intersectiontimes p1;
+p6:=subpath (0, rundy(p,(tim1,4f_obl)).zpet) of p0..(x3l+stem,y6r)---z7r;
+p7:=z7l---(x3l+stem,y6l)..subpath(rundy(p,(tim2,4f_obl)),infinity) of p0;
+(tim13,tim14)=subpath(0,2) of p6 intersectiontimes p5;
+(tim15-2,tim16)=subpath(2,infinity) of p6 intersectiontimes p5;
+(tim17,tim18)=subpath(0,2) of p7 intersectiontimes p5;
+(tim19-2,tim20)=subpath(2,infinity) of p7 intersectiontimes p5;
+filldraw z1l---tobl(10,1l,11)---obl(11,10,7r)---z7r..z7l---obl(12,7l,13)---z13+oblu*unitvector(z12-z13)
+ ...subpath(rundy(p0,tim4),infinity) of p0..z5+2o*right
+ ..subpath(0,rundy(p4,tim6).zpet) of p4
+ ..subpath(rundy(p1,tim5),infinity) of p1
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p4,tim8),rundy(p4,tim10).zpet) of p4
+ ..subpath(rundy(p5,(tim9,f_obl)),infinity) of p5
+ ..subpath(0,rundy(p1,tim12).zpet) of p1..{right}z1r..z1+2o*right..cycle;
+infill subpath(rundy(p5,tim16),rundy(p5,tim14).zpet) of p5
+ ..subpath(rundy(p6,tim13),rundy(p6,tim15).zpet) of p6..cycle;
+infill subpath(rundy(p7,tim17),rundy(p7,tim19).zpet) of p7
+ ..subpath(rundy(p5,tim20),rundy(p5,tim18).zpet) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_element_double:
+bskchar "Element sign with double arm";
+beginchar(chars.math_element_double,9u#,v_center(x_height#+u#)); uni "0x22F9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7; y8=y9; .5[y6,y8]=y3; y6-y8=1/3(y1-y5); x7=x9=x1; x6=x8=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z6r--z7r;
+p2:=z7l--z6l;
+p3:=z8r--z9r;
+p4:=z9l--z8l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4,tim5)=p0 intersectiontimes p3;
+(tim6,tim7)=p0 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,(tim2,2f_obl)),rundy(p0,(tim4,2f_obl)).zpet) of p0
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_small:
+bskchar "Small element sign";
+beginchar(chars.math_element_small,8u#,v_center(.85x_height#)); uni "0x220A";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_small_bar:
+bskchar "Small element sign with bar above";
+beginchar(chars.math_element_small_bar,8u#,.425x_height#+.75u#+2rule_thickness#+math_axis#,.425x_height#-math_axis#); uni "0x22F7";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-.75u-2rule_thickness; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r; lft x8=x6; rt x9=w-u; top y8r=top y9r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw bskrule(8,9,hair,hair);
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_plus:
+bskchar "Element sign with plus";
+beginchar(chars.math_element_plus,9u#,v_center(x_height#+u#)); uni "non";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu; oblu.m:=f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+rt x1=rt x5=w-u-2o; lft x3r=u; x8=x9=2/3[x6,x7]; top y8=bot y1l-rule_thickness;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---obl(8'l,6r,8ll).m---z8ll
+ ..z8r---tobl(8'r,8r,7r).m---z7r..z7l---tobl(9'r,7l,9rr).m---z9rr..z9l
+ ---obl(9'l,9l,6l).m---(x3l+stem,y6l)..subpath(rundy(p,tim2),infinity) of p
+ ..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_element_bar:
+bskchar "Element sign with bar at end";
+beginchar(chars.math_element_bar,9u#,v_center(x_height#+u#)); uni "0x22F3";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu; oblu.m:=f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+rt x1=rt x5=w-u-2o; lft x3r=u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---obl(8'l,6r,8ll).m---z8ll
+ ..z8r---z9rr..z9l---obl(9'l,9l,6l).m---(x3l+stem,y6l)
+ ..subpath(rundy(p,tim2),infinity) of p
+ ..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_element_small_bar:
+bskchar "Small element sign with bar at end";
+beginchar(chars.math_element_small_bar,8u#,v_center(.85x_height#)); uni "0x22F4";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu; oblu.m:=f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+rt x1=rt x5=w-u-2o; lft x3r=u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l+stem,y6r)---obl(8'l,6r,8ll).m---z8ll
+ ..z8r---z9rr..z9l---obl(9'l,9l,6l).m---(x3l+stem,y6l)
+ ..subpath(rundy(p,tim2),infinity) of p
+ ..z5+2o*right..z5rr---z4r...z3r...z2r---z1rr..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_element_long:
+bskchar "Element sign with long horizontal";
+beginchar(chars.math_element_long,11u#,v_center(x_height#+u#)); uni "0x22F2";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+rt x1=rt x5=w-u-2o; lft x3r=3u;
+x2=x4=x3+(y2-y3);
+y6=y7=y3; x7=x1; lft x6=u; x6'r=x6'l=.5[x3r,x6]; y6'r=y6r; y6'l=y6l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z5rr---z4r...z3r...z2r---z1rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+tim3=xpart(p1 intersectiontimes (z6r--z7r));
+tim4=xpart(p1 intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p0,tim1).zpet) of p0..(x3l+stem,y6r)---z7r..z7l---(x3l+stem,y6l)
+ ..subpath(rundy(p0,tim2),infinity) of p0..z5+2o*right
+ ..subpath(0,rundy(p1,tim4).zpet) of p1..z6'l---z6l..z6r---z6'r
+ ..subpath(rundy(p1,tim3),infinity) of p1..z1+2o*right..cycle;
+penlabels(1,2,3,4,5,6,6',7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_down:
+bskchar "Downwards element sign";
+beginchar(chars.math_element_down,11u#,v_center(x_height#)); uni "0x2AD9";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+rt x1r=rt x2r=w-u; lft x4r=lft x5r=u; x3=.5[x1,x4]+o;
+bot y1=bot y5=-d-o; top y3r=h+o;
+y2=y4=y3+(x3-x2);
+x6=x7=x3; y7=y1; y6=y3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x6r,y3l-stem)---z7r..z7l---(x6l,y3l-stem)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*down..z5rr---z4r...z3r...z2r---z1rr..z1+2o*down..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_element_up:
+bskchar "Upwards element sign";
+beginchar(chars.math_element_up,11u#,v_center(x_height#)); uni "0x27D2";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,180); pos2(rule_thickness,180); pos3(rule_thickness,-90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos6(rule_thickness,180); pos7(rule_thickness,180);
+lft x1r=lft x2r=u; rt x4r=rt x5r=w-u; x3=.5[x1,x4]-o;
+top y1=top y5=h+o; bot y3r=-d-o;
+y2=y4=y3-(x2-x3);
+x6=x7=x3; y7=y1; y6=y3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x6r,y3l+stem)---z7r..z7l---(x6l,y3l+stem)
+ ..subpath(rundy(p,tim2),infinity) of p..z5+2o*up..z5rr---z4r...z3r...z2r
+ ---z1rr..z1+2o*up..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_sqelement:
+bskchar "Square element sign (Z notation bag membership)";
+beginchar(chars.math_sqelement,10u#,v_center(x_height#+u#)); uni "0x22FF";
+italcorr h#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+top y1r=top y2r=h; bot y3r=bot y4r=-d;
+rt x1=rt x4=w-u;
+lft x2=lft x3=u;
+y5=y6=.5[y1,y3]+o; x6=x1; x2l:=x3l:=x5=x2+rule_thickness-currentbreadth;
+bskpoints(1,2,hair,hair); bskpoints(4,3,hair,hair);
+filldraw z1rr---obl(2r,1r,3r)---obl(3r,2r,4r)---z4rr..z4l---obl(3l,4l,5l)
+ ---obl(5l,3l,6l)---z6l..z6r---obl(5r,6r,2l)---obl(2l,5r,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6); labels(1rr,4rr);
+endchar;
+
iff known chars.math_ownership:
bskchar "Ownership sign";
beginchar(chars.math_ownership,9u#,v_center(x_height#+u#)); uni "0x220B";
@@ -3330,9 +15224,241 @@ subpath(rundy(p,tim2),infinity) of p..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr.
penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
endchar;
+iff known chars.math_ownership_bar:
+bskchar "Ownership sign with bar above";
+beginchar(chars.math_ownership_bar,9u#,.5x_height#+1.5u#+math_axis#+2rule_thickness#,.5x_height#+.5u#-math_axis#); uni "0x22FD";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-u-2rule_thickness; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r; lft x8=u; rt x9=x6; top y8r=top y9r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw bskrule(8,9,hair,hair);
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---z7r..z7l---(x3l-stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_ownership_neg:
+bskchar "Negated ownership sign";
+beginchar(chars.math_ownership_neg,9u#,.5x_height#+2u#+math_axis#, .5x_height#+1.5u#-math_axis#); uni "0x220C";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h-1.5u; bot y4r=bot y5r=-d+u; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+top rt z8=(w-2u,h); bot lft z9=(2u,-d);
+pos8(rule_thickness,angle(z8-z9)-90); pos9(rule_thickness,angle(z8-z9)-90);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z8l--z9ll;
+p2:=(x3l-stem,y6r)---z7r;
+p3:=z7l--(x3l-stem,y6l);
+p4:=z5rr---z4r...z3r...z2r---z1rr;
+p5:=z9r--z8rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+(tim21,tim22)=p0 intersectiontimes p1;
+(tim23,tim24)=p1 intersectiontimes p2;
+z12=p1 intersectionpoint p3;
+(tim3,tim4-2)=p1 intersectiontimes subpath(2,infinity) of p0; z13= point tim3 of p1;
+(tim5,tim6)=p1 intersectiontimes p4; z10=point tim5 of p1;
+(tim7,tim8)=p5 intersectiontimes p4;
+(tim9,tim10-2)=p5 intersectiontimes subpath(2,infinity) of p4;
+(tim11-2,tim12)=subpath(2,infinity) of p4 intersectiontimes p1;
+p6:=subpath (0, rundy(p,(tim1,4f_obl)).zpet) of p0..(x3l-stem,y6r)---z7r;
+p7:=z7l---(x3l-stem,y6l)..subpath(rundy(p,(tim2,4f_obl)),infinity) of p0;
+(tim13,tim14)=subpath(0,2) of p6 intersectiontimes p5;
+(tim15-2,tim16)=subpath(2,infinity) of p6 intersectiontimes p5;
+(tim17,tim18)=subpath(0,2) of p7 intersectiontimes p5;
+(tim19-2,tim20)=subpath(2,infinity) of p7 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim21).zpet) of p0
+ ..subpath(rundy(p1,tim22),rundy(p1,tim23).zpet) of p1
+ ..subpath(rundy(p2,tim24),infinity) of p2..z7l---obl(12,7l,13)---z13+oblu*unitvector(z12-z13)
+ ...subpath(rundy(p0,tim4),infinity) of p0..z5+2o*left..{right}z5r
+ ---tobl(10,5r,9ll)---z9ll
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p4,tim8),rundy(p4,tim10).zpet) of p4
+ ..subpath(rundy(p5,tim9),infinity) of p5
+ ..subpath(0,rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p4,tim11),infinity) of p4{left}..z1+2o*left..{right}cycle;
+infill subpath(rundy(p5,tim16),rundy(p5,tim14).zpet) of p5
+ ..subpath(rundy(p6,tim13),rundy(p6,tim15).zpet) of p6..cycle;
+infill subpath(rundy(p7,tim17),rundy(p7,tim19).zpet) of p7
+ ..subpath(rundy(p5,tim20),rundy(p5,tim18).zpet) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,10,11,12,13);
+endchar;
+
+iff known chars.math_ownership_small:
+bskchar "Small ownership sign";
+beginchar(chars.math_ownership_small,8u#,v_center(.85x_height#)); uni "0x220D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---z7r..z7l---(x3l-stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_ownership_small_bar:
+bskchar "Small ownership sign with bar above";
+beginchar(chars.math_ownership_small_bar,8u#,.425x_height#+.75u#+2rule_thickness#+math_axis#,.425x_height#-math_axis#); uni "0x22FE";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+top y1r=top y2r=h-.75u-2rule_thickness; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-u;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r; lft x8=u; rt x9=x6; top y8r=top y9r=h;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw bskrule(8,9,hair,hair);
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---z7r..z7l---(x3l-stem,y6l)..
+subpath(rundy(p,tim2),infinity) of p..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr);
+endchar;
+
+iff known chars.math_ownership_plus:
+bskchar "Ownership sign with plus";
+beginchar(chars.math_ownership_plus,9u#,v_center(x_height#+u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+lft x1=lft x5=u+2o; rt x3r=w-u; x8=x9=2/3[x6,x7]; top y8=bot y1l-rule_thickness;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---obl(8'r,6r,8r).m---z8r..z8ll
+ ---tobl(8'l,8ll,7r).m---z7r..z7l---tobl(9'l,7l,9l).m---z9l..z9rr
+ ---obl(9'r,9rr,6l).m---(x3l-stem,y6l)..subpath(rundy(p,tim2),infinity) of p
+ ..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_ownership_bar:
+bskchar "Ownership sign with bar at end";
+beginchar(chars.math_ownership_bar,9u#,v_center(x_height#+u#)); uni "0x22FB";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+lft x1=lft x5=u+2o; rt x3r=w-u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---obl(8'r,6r,8r).m---z8r..z8ll
+ ---z9l..z9rr---obl(9'r,9rr,6l).m---(x3l-stem,y6l)
+ ..subpath(rundy(p,tim2),infinity) of p
+ ..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_ownership_small_bar:
+bskchar "Small ownership sign with bar at end";
+beginchar(chars.math_ownership_small_bar,8u#,v_center(.85x_height#)); uni "0x22FC";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o; .5[y8,y9]=y3;
+lft x1=lft x5=u+2o; rt x3r=w-u; x8=x9=x7; top y8=.5[y6,y1];
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; x6=x3r;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(9,8,.5hair,.5hair);
+z8'l=(x8l,y6r); z8'r=(x8r,y6r);
+z9'l=(x8l,y6l); z9'r=(x8r,y6l);
+p:=z1l---z2l...z3l...z4l---z5l;
+tim1=xpart(p intersectiontimes (z6r--z7r));
+tim2=xpart(p intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p,tim1).zpet) of p..(x3l-stem,y6r)---obl(8'r,6r,8r).m---z8r..z8ll
+ ---z9l..z9rr---obl(9'r,9rr,6l).m---(x3l-stem,y6l)
+ ..subpath(rundy(p,tim2),infinity) of p
+ ..z5+2o*left..z5rr---z4r...z3r...z2r---z1rr..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(1rr,5rr,8ll,9rr);
+endchar;
+
+iff known chars.math_ownership_long:
+bskchar "Ownership sign with long horizontal";
+beginchar(chars.math_ownership_long,11u#,v_center(x_height#+u#)); uni "0x22FA";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=4oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,270); pos5(rule_thickness,270);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1r=top y2r=h; bot y4r=bot y5r=-d; y3=.5[y1,y4]+o;
+lft x1=lft x5=u+2o; rt x3r=w-3u;
+x2=x4=x3-(y2-y3);
+y6=y7=y3; x7=x1; rt x6=w-u; x6'r=x6'l=.5[x3r,x6]; y6'r=y6r; y6'l=y6l;
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair);
+p0:=z1l---z2l...z3l...z4l---z5l;
+p1:=z5rr---z4r...z3r...z2r---z1rr;
+tim1=xpart(p0 intersectiontimes (z6r--z7r));
+tim2=xpart(p0 intersectiontimes (z6l--z7l));
+tim3=xpart(p1 intersectiontimes (z6r--z7r));
+tim4=xpart(p1 intersectiontimes (z6l--z7l));
+filldraw subpath (0, rundy(p0,tim1).zpet) of p0..(x3l-stem,y6r)---z7r..z7l---(x3l-stem,y6l)..
+subpath(rundy(p0,tim2),infinity) of p0..z5+2o*left..subpath(0,rundy(p1,tim4).zpet) of p1..z6'l---z6l..z6r---z6'r..subpath(rundy(p1,tim3),infinity) of p1..z1+2o*left..cycle;
+penlabels(1,2,3,4,5,6,6',7); labels(1rr,5rr);
+endchar;
+
iff known chars.symbol_smile:
bskchar "Smile";
-beginchar(chars.symbol_smile,17u#,v_center(.6x_height#)); uni "non";
+beginchar(chars.symbol_smile,17u#,v_center(.6x_height#)); uni "0x2323";
adjust_fit(0,0);
pickup tiny.nib;
path p;
@@ -3363,9 +15489,20 @@ dot(5); dot(6);
labels(1,2,3,4,5,6);
endchar;
+iff known chars.symbol_smile_simple:
+bskchar "Simple smile";
+beginchar(chars.symbol_smile_simple,13u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; top y1r=h; rt x2=w-u; y2=y1+.5apex_o;
+filldraw z2r{dir-120}..z1r&z1r--z1l{dir-60}..z2l&z2l--cycle;
+penlabels(1,2);
+endchar;
+
iff known chars.symbol_frown:
bskchar "Frown";
-beginchar(chars.symbol_frown,17u#,v_center(.5x_height#)); uni "non";
+beginchar(chars.symbol_frown,17u#,v_center(.5x_height#)); uni "0x2322";
adjust_fit(0,0);
pickup tiny.nib;
path p;
@@ -3378,6 +15515,17 @@ filldraw z2..z4..{dir-70}z3{dir140}..z1&z1{dir100}..z2&cycle;
labels(1,2,3,4);
endchar;
+iff known chars.symbol_frown_simple:
+bskchar "Simple frown";
+beginchar(chars.symbol_frown_simple,13u#,v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; bot y1l=-d; rt x2=w-u; y2=y1-.5apex_o;
+filldraw z2r{dir120}..z1r&z1r--z1l{dir60}..z2l&z2l--cycle;
+penlabels(1,2);
+endchar;
+
iff known chars.symbol_flat:
bskchar "Musical flat sign";
beginchar(chars.symbol_flat,7u#,asc_height#,0); uni "0x266D";
@@ -3430,7 +15578,7 @@ z21=whatever[z1l,z2l]=whatever[z6r,z5r];
filldraw z1r---obl(10,1r,11)---obl(11,10,3l)---z3l..z3r---obl(12,3l,5r)---z5r--z5l
---obl(13,5l,14)---obl(14,13,7r)---z7r--z7l---obl(15,7l,4l)---z4rr--z4l
---obl(16,4l,17)---obl(17,16,2r)---z2r..z2l---obl(18,2l,8l)---z8l--z8r
- ---obl(19,8r,20)---obl(20,19,6l)---z6l--z6r---obl(21,6r,1r)---z1ll..cycle;
+ ---obl(19,8r,20)---obl(20,19,6l)---z6l--z6r---tobl(21,6r,1ll)---z1ll..cycle;
z0=(x10,y20); z0'=(x11,y13); z0''=(x16,y14); z0'''=(x17,y19);
infill obl(0,0''',0')---obl(0',0,0'')---obl(0'',0',0''')---obl(0''',0'',0)---cycle;
penlabels(1,2,3,4,5,6,7,8); labels(0,0',0'',0''',10,11,12,13,14,15,16,17,18,19,20,21);
@@ -3535,6 +15683,94 @@ pickup tiny.nib;
usechar;
endchar;
+iff known chars.math_vertical_cute:
+bskchar "Cute vertical line";
+beginchar(chars.math_vertical_cute,5u#,x_height#,0); uni "non";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h+o; bot y2=-d-o;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+penlabels(1,2); labels(1ll,2rr);
+endchar;
+
+iff known chars.math_vertical_neg:
+bskchar "Negated vertical line";
+beginchar(chars.math_vertical_neg,5u#,body_height#,paren_depth#); uni "0x2224";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h; bot y2=-d;
+x3=.5u; x4=w-x3; .5[y3,y4]=math_axis; y4-y3=2u;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+endchar;
+
+iff known chars.math_vertical_horizontal:
+bskchar "Vertical line with horizontal stroke";
+beginchar(chars.math_vertical_horizontal,7.5u#,body_height#,paren_depth#); uni "0x27CA";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h; bot y2=-d;
+x3=u; x4=w-x3; y3=y4=math_axis;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,-90); pos4(rule_thickness,-90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+endchar;
+
+iff known chars.math_vertical_revneg:
+bskchar "Reverse-negated vertical line";
+beginchar(chars.math_vertical_revneg,5u#,body_height#,paren_depth#); uni "0x2AEE";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h; bot y2=-d;
+x3=.5u; x4=w-x3; .5[y3,y4]=math_axis; y3-y4=2u;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+endchar;
+
+iff known chars.math_vertical_neg_cute:
+bskchar "Negated cute vertical line";
+beginchar(chars.math_vertical_neg_cute,5u#,x_height#,0); uni "non";
+italcorr body_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=.5w; top y1=h+o; bot y2=-d-o;
+x3=.5u; x4=w-x3; .5[y3,y4]=math_axis; y4-y3=2u;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,angle(z3-z4)+90); pos4(rule_thickness,angle(z3-z4)+90);
+bskpoints(2,1,rule_thickness,rule_thickness); bskpoints(3,4,rule_thickness,rule_thickness);
+x3'l=x3'r=x1l; x4'r=x4'l=x1r;
+z3'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r];
+z4'l=whatever[z3l,z4l]; z4'r=whatever[z3r,z4r];
+filldraw z1ll---obl(3'l,1l,3l)---z3l..z3rr---tobl(3'r,3rr,2l)---z2l..z2rr---obl(4'r,2r,4r)
+ ---z4r..z4ll---tobl(4'l,4ll,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4'); labels(1ll,2rr,3rr,4ll);
+endchar;
+
iff known chars.sign_broken_bar:
bskchar "Broken bar sign";
beginchar(chars.sign_broken_bar,5u#,body_height#,paren_depth#); uni "0x00A6";
@@ -3548,6 +15784,20 @@ filldraw bskrule(3,4,rule_thickness,rule_thickness);
penlabels(1,2,3,4);
endchar;
+iff known chars.math_slanted_double:
+bskchar "Double slanted vertical line";
+beginchar(chars.math_slanted_double,8u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+.5[x1,x4]=.5w; top y1=top y3=h; bot y2=bot y4=-d;
+x1-x2=x3-x4=x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+penlabels(1,2,3,4);
+endchar;
+
iff known chars.math_vertical_double:
bskchar "Double vertical line";
beginchar(chars.math_vertical_double,8u#,body_height#,paren_depth#); uni "0x2225";
@@ -3562,6 +15812,231 @@ filldraw bskrule(4,3,rule_thickness,rule_thickness);
penlabels(1,2,3,4);
endchar;
+iff known chars.math_vertical_double:
+bskchar "Double vertical line (norm)";
+beginchar(chars.math_vertical_double,6u#,body_height#,paren_depth#); uni "0x2016";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; bot y2=bot y4=-d;
+x3-x1=2u+rule_thickness;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_vertical_double_cute:
+bskchar "Cute double vertical line";
+beginchar(chars.math_vertical_double_cute,8u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h+o; bot y2=bot y4=-d-o;
+x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(4,3,rule_thickness,rule_thickness);
+penlabels(1,2,3,4); labels(1rr,2ll,4rr,3ll);
+endchar;
+
+iff known chars.math_vertical_double_neg:
+bskchar "Negated double vertical line";
+beginchar(chars.math_vertical_double_neg,8u#,body_height#,paren_depth#); uni "0x2226";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; bot y2=bot y4=-d;
+x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+x5=.5u; x6=w-x5; .5[y5,y6]=math_axis; y6-y5=4u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x5'l=x5'r=x1l; x6'r=x6'l=x1r; x5''l=x5''r=x3l; x6''l=x6''r=x3r;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z5''l=whatever[z5l,z6l]; z5''r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+z6''l=whatever[z5l,z6l]; z6''r=whatever[z5r,z6r];
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---obl(5'l,1l,5l)---z5l..z5rr---tobl(5'r,5rr,2l)---z2ll..z2r
+ ---obl(6'r,2r,6r)---obl(5''r,5r,4l)---z4l..z4rr---obl(6''r,4r,6r)
+ ---z6r..z6ll---tobl(6''l,6ll,3r)---z3r..z3ll---obl(5''l,3l,5l)
+ ---obl(6'l,6l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll,5rr,6ll);
+endchar;
+
+iff known chars.math_vertical_double_neg_cute:
+bskchar "Negated cute double vertical line";
+beginchar(chars.math_vertical_double_neg_cute,8u#,x_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h+o; bot y2=bot y4=-d-o;
+x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+x5=.5u; x6=w-x5; .5[y5,y6]=math_axis; y6-y5=4u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x5'l=x5'r=x1l; x6'r=x6'l=x1r; x5''l=x5''r=x3l; x6''l=x6''r=x3r;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z5''l=whatever[z5l,z6l]; z5''r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+z6''l=whatever[z5l,z6l]; z6''r=whatever[z5r,z6r];
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---obl(5'l,1l,5l)---z5l..z5rr---tobl(5'r,5rr,2l)---z2ll..z2r
+ ---obl(6'r,2r,6r)---obl(5''r,5r,4l)---z4l..z4rr---obl(6''r,4r,6r)
+ ---z6r..z6ll---tobl(6''l,6ll,3r)---z3r..z3ll---obl(5''l,3l,5l)
+ ---obl(6'l,6l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll,5rr,6ll);
+endchar;
+
+iff known chars.math_parallel_hbar:
+bskchar "Parallel sign with horizontal bar";
+beginchar(chars.math_parallel_hbar,8u#,body_height#,paren_depth#); uni "0x2AF2";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; bot y2=bot y4=-d;
+x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+x5=.5u; x6=w-x5; y5=y6=math_axis;
+pos5(rule_thickness,-90); pos6(rule_thickness,-90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+x5'l=x5'r=x1l; x6'r=x6'l=x1r; x5''l=x5''r=x3l; x6''l=x6''r=x3r;
+z5'l=whatever[z5l,z6l]; z5'r=whatever[z5r,z6r];
+z5''l=whatever[z5l,z6l]; z5''r=whatever[z5r,z6r];
+z6'l=whatever[z5l,z6l]; z6'r=whatever[z5r,z6r];
+z6''l=whatever[z5l,z6l]; z6''r=whatever[z5r,z6r];
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---obl(5'l,1l,5l)---z5l..z5rr---tobl(5'r,5rr,2l)---z2ll..z2r
+ ---obl(6'r,2r,6r)---obl(5''r,5r,4l)---z4l..z4rr---obl(6''r,4r,6r)
+ ---z6r..z6ll---tobl(6''l,6ll,3r)---z3r..z3ll---obl(5''l,3l,5l)
+ ---obl(6'l,6l,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll,5rr,6ll);
+endchar;
+
+iff known chars.math_parallel_tilde:
+bskchar "Parallel sign with tilde";
+beginchar(chars.math_parallel_tilde,10u#,body_height#,paren_depth#); uni "0x2AF3";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; bot y2=bot y4=-d;
+x3-x1=max(3curve,3u);
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+.5[y5,y6]=math_axis; spread:=.45x_height;
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(4,3,rule_thickness,rule_thickness);
+vlnka(5,6).nodraw;
+p0=_vlnka;
+p1=z1l--z2ll;
+p2=z2r--z1rr;
+p3=z3ll--z4l;
+p4=z4rr--z3r;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+(tim4,tim5)=p0 intersectiontimes p3;
+(tim6,tim7)=p0 intersectiontimes p4;
+(tim8-4,tim9)=subpath(4,infinity) of p0 intersectiontimes p4;
+(tim10-4,tim11)=subpath(4,infinity) of p0 intersectiontimes p3;
+(tim12-4,tim13)=subpath(4,infinity) of p0 intersectiontimes p2;
+(tim14-4,tim15)=subpath(4,infinity) of p0 intersectiontimes p1;
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p1,(tim1,2oblu)),infinity) of p1
+ ..subpath(0,rundy(p2,(tim3,2oblu)).zpet) of p2
+ ..subpath(rundy(p0,(tim2,2oblu)),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p0,tim6),rundy(p0,(tim8,2oblu)).zpet) of p0
+ ..subpath(rundy(p4,(tim9,2oblu)),infinity) of p4
+ ..subpath(0,rundy(p3,(tim11,2oblu)).zpet) of p3
+ ..subpath(rundy(p0,(tim10,2oblu)),rundy(p0,tim12).zpet) of p0
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(p0,tim14),infinity) of p0..cycle;
+penlabels(1,2,3,4,5,5',5'',6,6',6''); labels(1rr,2ll,4rr,3ll);
+endchar;
+
+iff known chars.math_vertical_triple:
+bskchar "Triple vertical line";
+beginchar(chars.math_vertical_triple,9u#,body_height#,paren_depth#); uni "0x2AF4";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; x5=x6; .5[x1,x5]=.5w; top y1=top y3=top y5=h; bot y2=bot y4=bot y6=-d;
+x5-x3=x3-x1=2u+rule_thickness;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,0,0);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_vertical_triple_hbar:
+bskchar "Triple vertical line with horizontal bar";
+beginchar(chars.math_vertical_triple_hbar,11u#,body_height#,paren_depth#); uni "0x2AF5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+x1=x2; x3=x4; x5=x6; .5[x1,x5]=.5w; top y1=top y3=top y5=h; bot y2=bot y4=bot y6=-d;
+x5-x3=x3-x1=2u+rule_thickness;
+lft x7=u; rt x8=w-u; y7=y8=math_axis;
+bskpoints(1,2,rule_thickness,rule_thickness);
+bskpoints(6,5,rule_thickness,rule_thickness);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y10=y11=y12=y13=y14=y15=y7l; y16=y17=y18=y19=y20=y21=y7r;
+x10=x21=x1l; x11=x20=x1r; x12=x19=x3l; x13=x18=x3r; x14=x17=x5l; x15=x16=x5r;
+filldraw z7l---obl(10,7l,2l)---z2ll..z2r---tobl(11,2ll,12)---tobl(12,11,4l)---z4l
+ ..z4r---tobl(13,4r,14)---tobl(14,13,6l)---z6l..z6rr---tobl(15,6r,8ll)---z8ll
+ ..z8r---tobl(16,8r,5r)---z5r..z5ll---tobl(17,5l,18)--tobl(18,17,3r)---z3r..z3l
+ ---tobl(19,3l,20)---tobl(20,19,1r)---z1rr..z1l---tobl(21,1l,7rr)---z7rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2ll,6rr,10,11,12,13,14,15,16,17,18,19,21);
+endchar;
+
+iff known chars.math_vertical_triple_op:
+bskchar "N-ary triple vertical bar operator";
+beginchar(chars.math_vertical_triple_op,12u#,v_center(10/6dh#)); uni "0x2AFC";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2; x3=x4; x5=x6; .5[x1,x5]=.5w; top y1=top y3=top y5=h; bot y2=bot y4=bot y6=-d;
+x5-x3=x3-x1=3u+rule_thickness;
+pos1(stem,0); pos2(stem,0);
+pos3(stem,0); pos4(stem,0);
+pos5(stem,0); pos6(stem,0);
+filldraw bskrule(1,2,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,0,0);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_uptack_double:
+bskchar "Double up tack";
+beginchar(chars.math_uptack_double,12u#,asc_height#,0); uni "0x2AEB";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x1=x2; x3=x4; .5[x1,x3]=.5w; top y1=top y3=h; x3-x1=max(3curve,3u);
+y2=y4=y5r; bot y5l=bot y6l=-d; lft x5=u; x6=w-x5;
+bskpoints(1,2,rule_thickness,rule_thickness); bskpoints(4,3,rule_thickness,rule_thickness);
+bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1l---tobl(2l,1l,5rr)---z5rr..z5l---z6ll..z6r---obl(4r,6r,3r)---z3r
+ ..z3ll---obl(4l,3l,2r)---obl(2r,4r,1r)---z1rr..cycle;
+penlabels(1,2,3,4,5,6); labels(1rr,3ll,5rr,6ll);
+endchar;
+
iff known chars.math_times:
bskchar "Times operator sign";
beginarithchar(chars.math_times); uni "0x00D7";
@@ -3581,6 +16056,502 @@ filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
penlabels(1,2,3,4); labels(5,6,7,8);
endchar;
+iff known chars.math_times_uni:
+bskchar "N-ary times operator sign (for Unicode)";
+beginchar(chars.math_times_uni,15u#,v_center(10/6dh#)); uni "0x2A09";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(stem,135); pos2(stem,135);
+pos3(stem,45); pos4(stem,45);
+lft x1r=lft x3l=u; rt x2l=rt x4r=w-u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,stem,stem); bskpoints(4,3,.5stem,.5stem);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_times_underbar:
+bskchar "Times operator sign with underbar";
+beginchar(chars.math_times_underbar,13u#,5.5u#+math_axis#,5.5u#+rule_thickness#-math_axis#); uni "0x2A31";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u+rule_thickness; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+x9=x1; x10=x4; bot y9l=bot y10l=-d;
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+filldraw bskrule(9,10,hair,0);
+penlabels(1,2,3,4,9,10); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_times_semicircle_left:
+bskchar "Times operator sign in left half circle";
+beginchar(chars.math_times_semicircle_left,11u#,v_center(11u#)); uni "0x2A34";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+lft x6=u+.5rule_thickness; .5[x6,x2]=.5[x11,x10]=.5w+u; y8-y4=x2-x6;
+x9r=x11l; x10l=x12r; lft x9r=3u+rule_thickness;
+y9l=y12l; y10r=y11r; y2=.5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+circle_points(rule_thickness);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(4,8) of (draw_circle.l)..reverse subpath(4,8) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_semicircle_right:
+bskchar "Times operator sign in right half circle";
+beginchar(chars.math_times_semicircle_right,11u#,v_center(11u#)); uni "0x2A35";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+rt x2=w-u-.5rule_thickness; .5[x6,x2]=.5[x11,x10]=.5w-u; y8-y4=x2-x6;
+x9r=x11l; x10l=x12r; lft x9r=u+rule_thickness;
+y9l=y12l; y10r=y11r; y2=.5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+circle_points(rule_thickness);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+filldraw subpath(0,4) of (draw_circle.l)..reverse subpath(0,4) of (draw_circle.r)..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_circle_circumflex:
+bskchar "Times operator sign in circle with circumflex";
+beginchar(chars.math_times_circle_circumflex,13u#,5.5u#+math_axis#+.5x_height#,5.5u#-math_axis#); uni "0x2A36";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+rt x2=w-u-.5rule_thickness; .5[x6,x2]=.5[x11,x10]=x18-o=.5w; y8-y4=x2-x6; y2=.5[y11,y12];
+x9r=x11l; x10l=x12r; lft x9r=3u+rule_thickness;
+y9l=y12l; y10r=y11r; .5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+circle_points(rule_thickness);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+circumflex(17,18,19);
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_circle_double:
+bskchar "Times operator sign in double circle";
+beginarithchar(chars.math_times_circle_double); uni "0x2A37";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+rt x2=w-u; .5[x6,x2]=.5w; y8-y4=x2-x6; y2=math_axis;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+rt x2=w-u-1.5rule_thickness; .5[x6,x2]=.5w; y8-y4=x2-x6; y2=math_axis;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+pos9(rule_thickness,135); pos10(rule_thickness,135);
+pos11(rule_thickness,45); pos12(rule_thickness,45);
+x9r=x11l; x10l=x12r; lft x9r=3.5u+rule_thickness; .5[x11,x10]=.5w;
+y9l=y12l; y10r=y11r; .5[y10r,y9l]=math_axis; y11r-y9l=x10l-x11l;
+bskpoints(9,10,hair,hair); bskpoints(12,11,.5hair,.5hair);
+z13=whatever[z12l,z11l]=whatever[z9l,z10l];
+z14=whatever[z12r,z11r]=whatever[z9l,z10l];
+z15=whatever[z12r,z11r]=whatever[z9r,z10r];
+z16=whatever[z12l,z11l]=whatever[z9r,z10r];
+filldraw z9l---obl(13,9l,12l)---z12l..z12rr---obl(14,12r,10l)---z10ll..z10r---
+ obl(15,10r,11r)---z11r..z11ll---obl(16,11l,9r)---z9rr..cycle;
+penlabels(9,10,11,12); labels(13,14,15,16);
+endchar;
+
+iff known chars.math_times_dot:
+bskchar "Times operator sign with dot";
+beginarithchar(chars.math_times_dot); uni "0x2A30";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+x9=.5w; top y9+.5dot_size=h+o;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+dot(9);
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_times_bot:
+bskchar "Times operator with bottom closed";
+beginarithchar(chars.math_times_bot); uni "0x2A32";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+x0=.5w; y0l=y1l; y1'=y4'=y1r;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+z1'=whatever[z1l,z5]; z4'=whatever[z4l,z5];
+filldraw z1l---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3l---obl(8,3l,1r)---z1r..cycle;
+infill obl(5,1',4')---obl(4',5,1')---obl(1',4',5)---cycle;
+penlabels(0,1,2,3,4); labels(1',4',5,6,7,8);
+endchar;
+
+iff known chars.math_times_left:
+bskchar "Times operator with left vertical";
+beginarithchar(chars.math_times_left); uni "0x22C9";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+y0=math_axis; x0l=x3l; x1'=x3'=x0r;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+z1'=whatever[z1r,z8]; z3'=whatever[z3l,z8];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(8,1',3')---obl(3',8,1')---obl(1',3',8)---cycle;
+penlabels(0,1,2,3,4); labels(1',3',5,6,7,8);
+endchar;
+
+iff known chars.math_times_left_black:
+bskchar "Times operator with left half black";
+beginarithchar(chars.math_times_left_black); uni "0x29D4";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+penlabels(1,2,3,4); labels(5,6,7);
+endchar;
+
+iff known chars.math_times_right:
+bskchar "Times operator with right vertical";
+beginarithchar(chars.math_times_right); uni "0x22CA";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+y0=math_axis; x0r=x4r; x2'=x4'=x0l;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,1,2,3,4); labels(2',4',5,6,7,8);
+endchar;
+
+iff known chars.math_times_right_black:
+bskchar "Times operator with right half black";
+beginarithchar(chars.math_times_right_black); uni "0x29D5";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1r,z2r];
+z7=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(6,2r,3r)---z3r..z3ll---obl(7,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7);
+endchar;
+
+iff known chars.math_times_verticals:
+bskchar "Times operator with both vertical (bowtie)";
+beginarithchar(chars.math_times_verticals); uni "0x22C8";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0); pos0'(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+y0=y0'=math_axis; x0r=x4r; x0'l=x3l; x1'=x3'=x0'r; x2'=x4'=x0l;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+z1'=whatever[z1r,z8]; z3'=whatever[z3l,z8];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(8,1',3')---obl(3',8,1')---obl(1',3',8)---cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,0',1,2,3,4); labels(1',2',3',4',5,6,7,8);
+endchar;
+
+iff known chars.math_join:
+bskchar "Join";
+beginchar(chars.math_join,16u#,asc_height#,0); uni "0x2A1D";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0); pos0'(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=u; rt x2l=rt x4r=w-u;
+bot y1l=bot y4l=-d; top y2r=top y3r=h;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+y0=y0'=math_axis; x0r=x4r; x0'l=x3l; x1'=x3'=x0'r; x2'=x4'=x0l;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+z1'=whatever[z1r,z8]; z3'=whatever[z3l,z8];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(8,1',3')---obl(3',8,1')---obl(1',3',8)---cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,0',1,2,3,4); labels(1',2',3',4',5,6,7,8);
+endchar;
+
+iff known chars.math_bowtie_black:
+bskchar "Black bowtie";
+beginarithchar(chars.math_bowtie_black); uni "0x29D3";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(6,2r,3r)---z3r..z3l---z1r..cycle;
+penlabels(1,2,3,4); labels(5,6);
+endchar;
+
+iff known chars.math_bowtie_left_black:
+bskchar "Bowtie with left half black";
+beginarithchar(chars.math_bowtie_left_black); uni "0x29D1";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+y0=math_axis; x0r=x4r; x2'=x4'=x0l;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z2'=whatever[z2l,z6]; z4'=whatever[z4r,z6];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(7,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(6,2',4')---obl(4',6,2')---obl(2',4',6)---cycle;
+penlabels(0,1,2,3,4); labels(2',4',5,6,7);
+endchar;
+
+iff known chars.math_bowtie_right_black:
+bskchar "Bowtie with right half black";
+beginarithchar(chars.math_bowtie_right_black); uni "0x29D2";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos0(rule_thickness,0);
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+y0=math_axis; x0l=x3l; x1'=x3'=x0r;
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1r,z2r];
+z7=whatever[z4l,z3l]=whatever[z1r,z2r];
+z1'=whatever[z1r,z7]; z3'=whatever[z3l,z7];
+filldraw z1l---obl(5,1l,4l)---z4l..z4r---z2l..z2r---
+ obl(6,2r,3r)---z3r..z3l---z1r..cycle;
+infill obl(7,1',3')---obl(3',7,1')---obl(1',3',7)---cycle;
+penlabels(0,1,2,3,4); labels(1',3',5,6,7);
+endchar;
+
+iff known chars.math_semiproduct_left:
+bskchar "Left semidirect product";
+beginarithchar(chars.math_semiproduct_left); uni "0x22CB";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_semiproduct_right:
+bskchar "Right semidirect product";
+beginarithchar(chars.math_semiproduct_right); uni "0x22CC";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_times_BB:
+bskchar "Blackboard-bold times operator sign";
+beginarithchar(chars.math_times_BB); uni "non";
+pickup tiny.nib;
+path p;
+oblu:=2.2oblu;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(cap_stem,45); pos4(cap_stem,45);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+bskpoints(1,2,cap_stem,cap_stem); bskpoints(4,3,.5cap_stem,.5cap_stem);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+infill z4l..z4rr---z3r..z3ll---cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_product_cartesian:
+bskchar "Cartesian product operator sign";
+beginchar(chars.math_product_cartesian,8u#,v_center(asc_height#)); uni "0x2A2F";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2.2oblu;
+lft x1r=lft x3l=u; rt x2r=rt x4l=w-u-.5rule_thickness;
+bot y1r-.25rule_thickness=bot y4l=-d+u; top y2r=top y3l+.25rule_thickness=h-u;
+pos1(rule_thickness,angle(z2r-z1r)+90); pos2(rule_thickness,angle(z2r-z1r)+90);
+pos3(rule_thickness,angle(z4l-z3l)+90); pos4(rule_thickness,angle(z4l-z3l)+90);
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l..z4rr---obl(6,4r,2l)---z2ll..z2r---
+ obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+penlabels(1,2,3,4); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_smash:
+bskchar "Smash product sign";
+compute_spread(.45x_height#,.55x_height#);
+beginarithchar(chars.math_smash); uni "0x2A33";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,45); pos2(rule_thickness,45);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+pos5(rule_thickness,-45); pos6(rule_thickness,-45);
+pos7(rule_thickness,-45); pos8(rule_thickness,-45);
+top y1=top y5=h; bot y4=bot y8=-d; lft x3=lft x6=u; rt x2=rt x7=w-u;
+z3-z1=spread*dir225; z2-z1=z4-z3; z6-z5=z8-z7; z7-z5=spread*dir-45;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+bskpoints(5,6,rule_thickness,rule_thickness); bskpoints(8,7,rule_thickness,rule_thickness);
+z1'=whatever[z5l,z6l]=whatever[z1r,z2r];
+z2'=whatever[z5r,z6r]=whatever[z1r,z2r];
+z3'=whatever[z5r,z6r]=whatever[z1l,z2l];
+z4'=whatever[z5r,z6r]=whatever[z3r,z4r];
+z5'=whatever[z5r,z6r]=whatever[z3l,z4l];
+z6'=whatever[z5l,z6l]=whatever[z3l,z4l];
+z7'=whatever[z5l,z6l]=whatever[z3r,z4r];
+z8'=whatever[z5l,z6l]=whatever[z1l,z2l];
+z9'=whatever[z7l,z8l]=whatever[z1r,z2r];
+z10'=whatever[z7r,z8r]=whatever[z1r,z2r];
+z11'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z12'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z13'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z14'=whatever[z7l,z8l]=whatever[z3l,z4l];
+z15'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z16'=whatever[z7l,z8l]=whatever[z1l,z2l];
+filldraw z1r---obl(1',1r,5l)---z5l..z5rr---obl(2',5r,9')---obl(9',2',7l)---z7ll..z7r
+ ---obl(10',7r,2r)---z2r..z2ll---obl(11',2l,12')---obl(12',11',4r)---z4r..z4l
+ ---obl(13',4l,8r)---z8rr..z8l---obl(14',8l,5')---obl(5',4l,6r)---z6r..z6ll
+ ---obl(6',6l,3l)---z3ll..z3r---obl(7',3r,8')---obl(8',7',1l)---z1l..cycle;
+infill obl(3',16',4')---obl(4',3',15')---obl(15',4',16')---obl(16',15',3')---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+labels(2ll,3ll,5rr,6ll,7ll,8rr,1',2',3',4',5',6',7',8',9',10',11',12',13',14',15',16');
+endchar;
+
iff known chars.math_plus_minus:
bskchar "Plus-minus sign";
beginarithchar(chars.math_plus_minus); uni "0x00B1";
@@ -3624,17 +16595,160 @@ filldraw z1l---obl(5,1l,4l)---z4l...z4rr---obl(6,4r,2l)---z2ll..z2r
penlabels(1,2,3,4,9,10); labels(5,6,7,8);
endchar;
+iff known chars.math_equals_plus:
+bskchar "Equals-plus sign";
+beginchar(chars.math_equals_plus,13u#,v_center(11u#+.45x_height#)); uni "0x2A71";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]; x9=x11=x1; x10=x12=x2;
+x3=x4=.5w; y3=y9l; y4=-d; y9=y10=y11-.45x_height; y12=y11; top y11r=h;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+bskpoints(10,9,hair,0);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---z4l...z4rr---obl(6,4r,2l)---z2ll..z2r
+ ---obl(7,2r,3r)---obl(3r,7,10l)---z10l..z10rr---z9r..z9ll
+ ---obl(3l,9l,8)---obl(8,3l,1r)---z1rr..cycle;
+filldraw bskrule(11,12,hair,0);
+penlabels(1,2,3,4,9,10,11,12); labels(5,6,7,8);
+endchar;
+
+iff known chars.math_plus_equals:
+bskchar "Plus-equals sign";
+beginchar(chars.math_plus_equals,13u#,v_center(11u#+.45x_height#)); uni "0x2A72";
+pickup tiny.nib;
+oblu:=2.2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]; x9=x11=x1; x10=x12=x2;
+x3=x4=.5w; top y3=h; y4=y9r; y9=y10=y11+.45x_height; y11=y12; bot y11l=-d;
+bskpoints(1,2,hair,hair); bskpoints(4,3,.5hair,.5hair);
+bskpoints(9,10,hair,0);
+z5=whatever[z4l,z3l]=whatever[z1l,z2l];
+z6=whatever[z4r,z3r]=whatever[z1l,z2l];
+z7=whatever[z4r,z3r]=whatever[z1r,z2r];
+z8=whatever[z4l,z3l]=whatever[z1r,z2r];
+filldraw z1l---obl(5,1l,4l)---obl(4l,5,9r)---z9rr..z9l---z10ll..z10r---obl(4r,10r,6)
+ ---obl(6,4r,2l)---z2ll..z2r---obl(7,2r,3r)---z3r..z3ll---obl(8,3l,1r)---z1rr..cycle;
+filldraw bskrule(12,11,hair,0);
+penlabels(1,2,3,4,9,10,11,12); labels(5,6,7,8);
+endchar;
+
iff known chars.math_minus:
bskchar "Minus sign";
beginarithchar(chars.math_minus); uni "0x2212";
pickup tiny.nib;
pos1(rule_thickness,90); pos2(rule_thickness,90);
lft x1=u; rt x2=w-u; y1=y2=math_axis;
+filldraw bskrule(1,2,hair,hair);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_dot:
+bskchar "Minus sign with dot above";
+beginarithchar(chars.math_minus_dot); uni "0x2238";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x3=.5w; y3=y1+2rule_thickness+dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_comma:
+bskchar "Minus sign with comma above";
+beginarithchar(chars.math_minus_comma); uni "0x2A29";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x3=.5w; y3=y1+2rule_thickness+dot_size+.25comma_depth;
bskpoints(1,2,hair,hair);
filldraw z1rr..z1l---z2ll..z2r---cycle;
+comma(3,dot_size,infinity,.6comma_depth);
penlabels(1,2);
endchar;
+iff known chars.math_minus_dot_below:
+bskchar "Minus sign with dot below";
+beginarithchar(chars.math_minus_dot_below); uni "0x2A2A";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis; x3=.5w; y3=y1-2rule_thickness-dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_dot_lr:
+bskchar "Dotted (left-right) minus sign";
+beginarithchar(chars.math_minus_dot_lr); uni "0x2A2B";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]=math_axis;
+.5[x3,x4]=.5w; y3=y1+2rule_thickness+dot_size; lft x3=x1+.5dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3); dot(4);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_dot_rl:
+bskchar "Dotted (right-left) minus sign";
+beginarithchar(chars.math_minus_dot_rl); uni "0x2A2C";
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=.5[y3,y4]=math_axis;
+.5[x3,x4]=.5w; y3=y1+2rule_thickness+dot_size; lft x4=x1+.5dot_size;
+bskpoints(1,2,hair,hair);
+filldraw z1rr..z1l---z2ll..z2r---cycle;
+dot(3); dot(4);
+penlabels(1,2);
+endchar;
+
+iff known chars.math_minus_through_circ:
+bskchar "Minus through circle";
+beginarithchar(chars.math_minus_through_circ); uni "non";
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5w; x2-x6=y8-y4=w-6u;
+circle_points(rule_thickness);
+lft x9=u; rt x10=w-u; y9=y10=math_axis;
+bskpoints(9,10,hair,hair);
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9rr{left}..z9l---z10ll..z10r---z9rr;
+(tim0-1,tim1-1)=subpath(1,3) of p0 intersectiontimes subpath(1,2) of p2;
+(tim2-5,tim3)=subpath(5,7) of p0 intersectiontimes subpath(0,2) of p2;
+(tim4-5,tim5-3)=subpath(5,7) of p0 intersectiontimes subpath(3,4) of p2;
+(tim6-1,tim7-3)=subpath(1,3) of p0 intersectiontimes subpath(3,4) of p2;
+(tim8-1,tim9-1)=subpath(1,3) of p1 intersectiontimes subpath(1,2) of p2;
+(tim10-5,tim11)=subpath(5,7) of p1 intersectiontimes subpath(0,2) of p2;
+(tim12-5,tim13-3)=subpath(5,7) of p1 intersectiontimes subpath(3,4) of p2;
+(tim14-1,tim15-3)=subpath(1,3) of p1 intersectiontimes subpath(3,4) of p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p0,tim4),length p0) of p0
+ ..subpath(0,rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10).zpet,rundy(p1,tim8)) of p1..cycle;
+infill subpath(rundy(p2,tim13),rundy(p2,tim15).zpet) of p2
+ ..reverse subpath(0,rundy(p1,tim14).zpet) of p1
+ ..reverse subpath(rundy(p1,tim12),length p1) of p1..cycle;
+penlabels(9,10);
+endchar;
+
iff known chars.math_division:
bskchar "Division sign";
beginarithchar(chars.math_division); uni "0x00F7";
@@ -3668,9 +16782,259 @@ y1=bar_height; x1=.5w;
dot(1);
endchar;
+iff known chars.sign_hyphen_dot:
+bskchar "Hyphenation point";
+beginchar(chars.sign_hyphen_dot, 5u#,x_height#, 0); uni "0x2027";
+italcorr bar_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+y1+.5dot_size=.6h; x1=.5w;
+dot(1);
+endchar;
+
iff known chars.math_equivalence:
bskchar "Equivalence sign";
-beginchar(chars.math_equivalence,13u#,5.5u#+math_axis#,5.5u#-math_axis#); uni "0x2261";
+beginchar(chars.math_equivalence,13u#,v_center(x_height#+rule_thickness#)); uni "0x2261";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+filldraw z1l---z2l..z2r---z1r..cycle;
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+filldraw z5rr..z5l---z6ll..z6r---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_equivalence_neg:
+bskchar "Negated equivalence sign";
+beginchar(chars.math_equivalence_neg,13u#,v_center(13u#)); uni "0x2262";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+top rt z7=(w-2u,h); top lft z8=(2u,-d);
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y10=y11=y5l; y12=y13=y5r; y14=y15=y1l; y16=y17=y1r; y18=y19=y3l; y20=y21=y3r;
+forsuffixes $=10,12,14,16,18,20: z$=whatever[z8l,z7l]; endfor
+forsuffixes $=11,13,15,17,19,21: z$=whatever[z8r,z7r]; endfor
+filldraw z1l---obl(14,1l,12).more---obl(12,14,5r)---z5rr..z5l---tobl(10,5l,8ll).more
+ ---z8ll..z8r---obl(11,8r,6l)---z6ll..z6r---obl(13,6r,15).more---obl(15,13,2l)
+ ---z2l..z2r---obl(17,2r,19).more---obl(19,17,4l)---z4ll..z4r---tobl(21,4r,7rr).more
+ ---z7rr..z7l---obl(20,7l,3r)---z3rr..z3l---obl(18,3l,16).more---obl(16,18,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(10,11,12,13,14,15,16,17,18,19,20,21,8ll);
+endchar;
+
+iff known chars.math_equivalence_neg_vert:
+bskchar "Negated equivalence sign with vertical stroke";
+beginchar(chars.math_equivalence_neg_vert,13u#,v_center(13u#)); uni "non"; %"0x2262.vert";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+top y7=h; top y8=-d; x7=x8=.5w;
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y10=y11=y5l; y12=y13=y5r; y14=y15=y1l; y16=y17=y1r; y18=y19=y3l; y20=y21=y3r;
+forsuffixes $=10,12,14,16,18,20: z$=whatever[z8l,z7l]; endfor
+forsuffixes $=11,13,15,17,19,21: z$=whatever[z8r,z7r]; endfor
+filldraw z1l---obl(14,1l,12)---obl(12,14,5r)---z5rr..z5l---obl(10,5l,8ll)
+ ---z8ll..z8r---obl(11,8r,6l)---z6ll..z6r---obl(13,6r,15)---obl(15,13,2l)
+ ---z2l..z2r---obl(17,2r,19)---obl(19,17,4l)---z4ll..z4r---obl(21,4r,7rr)
+ ---z7rr..z7l---obl(20,7l,3r)---z3rr..z3l---obl(18,3l,16)---obl(16,18,1r)---z1r..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(10,11,12,13,14,15,16,17,18,19,20,21,8ll);
+endchar;
+
+iff known chars.math_equivalence_parallel:
+bskchar "Equivalence and parallel sign";
+beginchar(chars.math_equivalence_parallel,13u#,v_center(13u#)); uni "0x2A68";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+pos9(rule_thickness,0); pos10(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+top y7=top y9=h; bot y8=bot y10=-d; x7=x8; x9=x10; .5[x7,x9]=.5w; x9-x7=max(3curve,3u);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness); bskpoints(9,10,rule_thickness,rule_thickness);
+z11l=whatever[z7l,z8l]=whatever[z3r,z4r]; z11r=whatever[z7r,z8r]=whatever[z3r,z4r];
+z12l=whatever[z7l,z8l]=whatever[z3l,z4l]; z12r=whatever[z7r,z8r]=whatever[z3l,z4l];
+z13l=whatever[z7l,z8l]=whatever[z1r,z2r]; z13r=whatever[z7r,z8r]=whatever[z1r,z2r];
+z14l=whatever[z7l,z8l]=whatever[z1l,z2l]; z14r=whatever[z7r,z8r]=whatever[z1l,z2l];
+z15l=whatever[z7l,z8l]=whatever[z5r,z6r]; z15r=whatever[z7r,z8r]=whatever[z5r,z6r];
+z16l=whatever[z7l,z8l]=whatever[z5l,z6l]; z16r=whatever[z7r,z8r]=whatever[z5l,z6l];
+z17l=whatever[z9l,z10l]=whatever[z3r,z4r]; z17r=whatever[z9r,z10r]=whatever[z3r,z4r];
+z18l=whatever[z9l,z10l]=whatever[z3l,z4l]; z18r=whatever[z9r,z10r]=whatever[z3l,z4l];
+z19l=whatever[z9l,z10l]=whatever[z1r,z2r]; z19r=whatever[z9r,z10r]=whatever[z1r,z2r];
+z20l=whatever[z9l,z10l]=whatever[z1l,z2l]; z20r=whatever[z9r,z10r]=whatever[z1l,z2l];
+z21l=whatever[z9l,z10l]=whatever[z5r,z6r]; z21r=whatever[z9r,z10r]=whatever[z5r,z6r];
+z22l=whatever[z9l,z10l]=whatever[z5l,z6l]; z22r=whatever[z9r,z10r]=whatever[z5l,z6l];
+filldraw z1l---obl(14l,1l,15l)---obl(15l,14l,5rr)---z5rr..z5l---tobl(16l,5l,8ll)---z8ll
+ ..z8r---obl(16r,8r,22l)---tobl(22l,16r,10ll)---z10ll..z10r---obl(22r,10r,6ll)---z6ll
+ ..z6r---obl(21r,6r,20r)---obl(20r,21r,2l)---z2l..z2r---obl(19r,2r,18r)---obl(18r,19r,4ll)
+ ---z4ll..z4r---tobl(17r,4r,9rr)---z9rr..z9l---obl(17l,9l,11r)---tobl(11r,17l,7rr)---z7rr
+ ..z7l---obl(11l,7l,3rr)---z3rr..z3l---obl(12l,3l,13l)---obl(13l,12l,1r)---z1r..cycle;
+infill obl(13r,12r,19l)---obl(19l,13r,18l)---obl(18l,19l,12r)---obl(12r,18l,13r)---cycle;
+infill obl(15r,14r,21l)---obl(21l,15r,20l)---obl(20l,21l,14r)---obl(14r,20l,15r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22); labels(7rr,8ll,9rr,10ll);
+endchar;
+
+iff known chars.math_equivalence_parallel_sl:
+bskchar "Equivalence and slanted parallel sign";
+beginchar(chars.math_equivalence_parallel_sl,13u#,v_center(13u#)); uni "non"; %"0x2A68.slant";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=1.5f_obl;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+top y7=top y9=h; bot y8=bot y10=-d; .5[x8,x9]=.5w; x9-x7=x10-x8=max(3curve,3u); x7-x8=2/3(x9-x7);
+pos7(rule_thickness,angle(z7-z8)-90); pos8(rule_thickness,angle(z7-z8)-90);
+pos9(rule_thickness,angle(z7-z8)-90); pos10(rule_thickness,angle(z7-z8)-90);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness); bskpoints(9,10,rule_thickness,rule_thickness);
+z11l=whatever[z7l,z8l]=whatever[z3r,z4r]; z11r=whatever[z7r,z8r]=whatever[z3r,z4r];
+z12l=whatever[z7l,z8l]=whatever[z3l,z4l]; z12r=whatever[z7r,z8r]=whatever[z3l,z4l];
+z13l=whatever[z7l,z8l]=whatever[z1r,z2r]; z13r=whatever[z7r,z8r]=whatever[z1r,z2r];
+z14l=whatever[z7l,z8l]=whatever[z1l,z2l]; z14r=whatever[z7r,z8r]=whatever[z1l,z2l];
+z15l=whatever[z7l,z8l]=whatever[z5r,z6r]; z15r=whatever[z7r,z8r]=whatever[z5r,z6r];
+z16l=whatever[z7l,z8l]=whatever[z5l,z6l]; z16r=whatever[z7r,z8r]=whatever[z5l,z6l];
+z17l=whatever[z9l,z10l]=whatever[z3r,z4r]; z17r=whatever[z9r,z10r]=whatever[z3r,z4r];
+z18l=whatever[z9l,z10l]=whatever[z3l,z4l]; z18r=whatever[z9r,z10r]=whatever[z3l,z4l];
+z19l=whatever[z9l,z10l]=whatever[z1r,z2r]; z19r=whatever[z9r,z10r]=whatever[z1r,z2r];
+z20l=whatever[z9l,z10l]=whatever[z1l,z2l]; z20r=whatever[z9r,z10r]=whatever[z1l,z2l];
+z21l=whatever[z9l,z10l]=whatever[z5r,z6r]; z21r=whatever[z9r,z10r]=whatever[z5r,z6r];
+z22l=whatever[z9l,z10l]=whatever[z5l,z6l]; z22r=whatever[z9r,z10r]=whatever[z5l,z6l];
+filldraw z1l---obl(14l,1l,15l).more---obl(15l,14l,5rr)---z5rr..z5l---tobl(16l,5l,8ll).more---z8ll
+ ..z8r---obl(16r,8r,22l)---tobl(22l,16r,10ll).more---z10ll..z10r---obl(22r,10r,6ll)---z6ll
+ ..z6r---obl(21r,6r,20r).more---obl(20r,21r,2l)---z2l..z2r---obl(19r,2r,18r).more
+ ---obl(18r,19r,4ll)---z4ll..z4r---tobl(17r,4r,9rr).more---z9rr..z9l---obl(17l,9l,11r)
+ ---tobl(11r,17l,7rr).more---z7rr..z7l---obl(11l,7l,3rr)---z3rr..z3l
+ ---obl(12l,3l,13l).more---obl(13l,12l,1r)---z1r..cycle;
+infill obl(13r,12r,19l).more---obl(19l,13r,18l)---obl(18l,19l,12r).more---obl(12r,18l,13r)---cycle;
+infill obl(15r,14r,21l).more---obl(21l,15r,20l)---obl(20l,21l,14r).more---obl(14r,20l,15r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22); labels(7rr,8ll,9rr,10ll);
+endchar;
+
+iff known chars.math_equivalence_triple:
+bskchar "Equivalence with triple vertical line";
+beginchar(chars.math_equivalence_triple,13u#,v_center(13u#)); uni "0x2A69";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+pos9(rule_thickness,0); pos10(rule_thickness,0);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+top y7=top y9=top y11=h; bot y8=bot y10=bot y12=-d;
+x7=x8; x9=x10; x11=x12; .5[x7,x9]=.5w; x9-x11=x11-x7=max(2curve,2u);
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness); bskpoints(9,10,rule_thickness,rule_thickness);
+bskpoints(11,12,rule_thickness,rule_thickness);
+z13l=whatever[z7l,z8l]=whatever[z3r,z4r]; z13r=whatever[z7r,z8r]=whatever[z3r,z4r];
+z14l=whatever[z7l,z8l]=whatever[z3l,z4l]; z14r=whatever[z7r,z8r]=whatever[z3l,z4l];
+z15l=whatever[z7l,z8l]=whatever[z1r,z2r]; z15r=whatever[z7r,z8r]=whatever[z1r,z2r];
+z16l=whatever[z7l,z8l]=whatever[z1l,z2l]; z16r=whatever[z7r,z8r]=whatever[z1l,z2l];
+z17l=whatever[z7l,z8l]=whatever[z5r,z6r]; z17r=whatever[z7r,z8r]=whatever[z5r,z6r];
+z18l=whatever[z7l,z8l]=whatever[z5l,z6l]; z18r=whatever[z7r,z8r]=whatever[z5l,z6l];
+z19l=whatever[z9l,z10l]=whatever[z3r,z4r]; z19r=whatever[z9r,z10r]=whatever[z3r,z4r];
+z20l=whatever[z9l,z10l]=whatever[z3l,z4l]; z20r=whatever[z9r,z10r]=whatever[z3l,z4l];
+z21l=whatever[z9l,z10l]=whatever[z1r,z2r]; z21r=whatever[z9r,z10r]=whatever[z1r,z2r];
+z22l=whatever[z9l,z10l]=whatever[z1l,z2l]; z22r=whatever[z9r,z10r]=whatever[z1l,z2l];
+z23l=whatever[z9l,z10l]=whatever[z5r,z6r]; z23r=whatever[z9r,z10r]=whatever[z5r,z6r];
+z24l=whatever[z9l,z10l]=whatever[z5l,z6l]; z24r=whatever[z9r,z10r]=whatever[z5l,z6l];
+z25l=whatever[z11l,z12l]=whatever[z3r,z4r]; z25r=whatever[z11r,z12r]=whatever[z3r,z4r];
+z26l=whatever[z11l,z12l]=whatever[z3l,z4l]; z26r=whatever[z11r,z12r]=whatever[z3l,z4l];
+z27l=whatever[z11l,z12l]=whatever[z1r,z2r]; z27r=whatever[z11r,z12r]=whatever[z1r,z2r];
+z28l=whatever[z11l,z12l]=whatever[z1l,z2l]; z28r=whatever[z11r,z12r]=whatever[z1l,z2l];
+z29l=whatever[z11l,z12l]=whatever[z5r,z6r]; z29r=whatever[z11r,z12r]=whatever[z5r,z6r];
+z30l=whatever[z11l,z12l]=whatever[z5l,z6l]; z30r=whatever[z11r,z12r]=whatever[z5l,z6l];
+filldraw z1l---obl(16l,1l,17l)---obl(17l,16l,5rr)---z5rr..z5l---tobl(18l,5l,8ll)---z8ll
+ ..z8r---obl(18r,8r,30l)---tobl(30l,18r,12ll)---z12ll..z12r---obl(30r,12r,24l)
+ ---tobl(24l,18r,10ll)---z10ll..z10r---obl(24r,10r,6ll)---z6ll..z6r---obl(23r,6r,22r)
+ ---obl(22r,23r,2l)---z2l..z2r---obl(21r,2r,20r)---obl(20r,21r,4ll)---z4ll..z4r
+ ---tobl(19r,4r,9rr)---z9rr..z9l---obl(19l,9l,25r)---tobl(25r,19l,11rr)---z11rr
+ ..z11l---obl(25l,11l,13r)---tobl(13r,19l,7rr)---z7rr..z7l---obl(13l,7l,3rr)---z3rr
+ ..z3l---obl(14l,3l,15l)---obl(15l,14l,1r)---z1r..cycle;
+infill obl(15r,14r,27l)---obl(27l,15r,26l)---obl(26l,27l,14r)---obl(14r,26l,15r)---cycle;
+infill obl(17r,16r,29l)---obl(29l,17r,28l)---obl(28l,29l,16r)---obl(16r,28l,17r)---cycle;
+infill obl(27r,26r,21l)---obl(21l,27r,20l)---obl(20l,21l,26r)---obl(26r,20l,27r)---cycle;
+infill obl(29r,28r,23l)---obl(23l,29r,22l)---obl(22l,23l,28r)---obl(28r,22l,29r)---cycle;
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,22,23,24,25,26,27,28,29,30);
+labels(7rr,8ll,9rr,10ll,11rr,12ll);
+endchar;
+
+iff known chars.math_equivalence_dot:
+bskchar "Equivalence sign with dot";
+beginchar(chars.math_equivalence_dot,13u#,.5x_height#+2.5rule_thickness#+dot_size#+math_axis#,.5x_height#+.5rule_thickness#-math_axis#); uni "0x2A67";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1=u; rt x2=w-u; y1=y2=math_axis;
+y3=y4; y5=y6; .5[y3,y5]=y1;
+x3=x5=x1; x4=x6=x2;
+y3-y5=x_height;
+x7=.5w; top y7=h+o;
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+filldraw z1l---z2l..z2r---z1r..cycle;
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+filldraw z5rr..z5l---z6ll..z6r---cycle;
+dot(7);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_equivalence_dot_four:
+bskchar "Four-dotted equivalence sign";
+beginchar(chars.math_equivalence_dot_four,13u#,.5x_height#+2.5rule_thickness#+dot_size#+math_axis#,.5x_height#+.5rule_thickness#-math_axis#); uni "0x2A78";
italcorr h#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
@@ -3681,11 +17045,37 @@ lft x1=u; rt x2=w-u; y1=y2=math_axis;
y3=y4; y5=y6; .5[y3,y5]=y1;
x3=x5=x1; x4=x6=x2;
y3-y5=x_height;
+top y7=h+o; y7=y8=y9=y10; x10-x9=x9-x8=x8-x7; .5[x7,x10]=.5w; x7=u+dot_size;
bskpoints(3,4,hair,hair);
bskpoints(5,6,hair,hair);
filldraw z1l---z2l..z2r---z1r..cycle;
filldraw z3rr..z3l---z4ll..z4r---cycle;
filldraw z5rr..z5l---z6ll..z6r---cycle;
+dot(7); dot(8); dot(9); dot(10);
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_equivalence_strict:
+bskchar "Strict equivalence sign";
+beginchar(chars.math_equivalence_strict,13u#,v_center(1.5x_height#+rule_thickness#)); uni "0x2263";
+italcorr h#*slant-.25u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=u; rt x2=w-u;
+y1=y2; y3=y4; y5=y6; y7=y8; .5[y1,y7]=.5[y3,y5]=math_axis;
+x3=x5=x7=x1; x4=x6=x8=x2;
+y1-y3=y3-y5; top y1r=h;
+bskpoints(3,4,hair,hair);
+bskpoints(5,6,hair,hair);
+bskpoints(7,8,hair,hair);
+filldraw z1l---z2l..z2r---z1r..cycle;
+filldraw z3rr..z3l---z4ll..z4r---cycle;
+filldraw z5rr..z5l---z6ll..z6r---cycle;
+filldraw z7l---z8l..z8r---z7r..cycle;
penlabels(1,2,3,4,5,6);
endchar;
@@ -3694,9 +17084,9 @@ bskchar "Circle operator";
beginchar(chars.math_circle_op,8u#,v_center(6u#)); uni "0x2218";
adjust_fit(0,0);
pickup tiny.nib;
-z0=(.5w,.5h);
+z0=(.5w,math_axis);
filldraw fullcircle scaled (w-rt 2u) shifted z0;
-infill fullcircle scaled (w-rt 2u-rule_thickness+currentbreadth) shifted z0;
+infill fullcircle scaled (w-rt 2u-rule_thickness+.5currentbreadth) shifted z0;
endchar;
iff known chars.math_bullet:
@@ -3704,18 +17094,55 @@ bskchar "Bullet";
beginchar(chars.math_bullet,8u#,v_center(6u#)); uni "0x2219";
adjust_fit(0,0);
pickup tiny.nib;
-z0=(.5w,.5h);
+z0=(.5w,math_axis);
+filldraw fullcircle scaled (w-rt 2u) shifted z0;
+endchar;
+
+iff known chars.sign_bullet:
+bskchar "Bullet sign";
+beginchar(chars.sign_bullet,6.5u#,x_height#,0); uni "0x2022";
+adjust_fit(0,0);
+pickup tiny.nib;
+z0=(.5w,bar_height);
filldraw fullcircle scaled (w-rt 2u) shifted z0;
endchar;
+iff known chars.sign_bullet_triangle:
+bskchar "Triangle bullet";
+beginchar(chars.sign_bullet_triangle,6.5u#,x_height#,0); uni "0x2023";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric lw;
+lw=rule_thickness-currentbreadth;
+lft x1=u; x2=x1; y3=.5[y1,y2]=bar_height; rt x3=w-u+hair;
+top y1=h;
+x1'=x2'=x1+lw;
+y1'-y1=y2-y2'=-lw/cosd(angle(z3-z1));
+z3'=z2'+whatever*(z3-z2)=z1'+whatever*(z3-z1);
+filldraw obl(1,3,2)---obl(2,1,3)---obl(3,2,1)---cycle;
+labels(1,1',2,2',3,3');
+endchar;
+
+iff known chars.sign_bullet_hyphen:
+bskchar "Hyphen bullet";
+beginchar(chars.sign_bullet_hyphen,6.5u#,x_height#,0); uni "0x2043";
+italcorr .5x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(stem+rule_thickness,90); pos2(stem+rule_thickness,90);
+y1=y2=bar_height; x2=w-x1;
+lft x1=.5u+.5rule_thickness+.5stem;
+filldraw bskrule(1,2,hair,hair);
+penlabels(1,2);
+endchar;
+
iff known chars.math_diamond_op:
bskchar "Diamond operator";
beginchar(chars.math_diamond_op,9u#,v_center(7u#)); uni "0x22C4";
italcorr math_axis#*slant-.25u#;
adjust_fit(0,0);
pickup tiny.nib;
-numeric st; st:=rule_thickness;
-pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270);
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w;
y4-y2=x3-x1;
filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
@@ -3729,8 +17156,7 @@ bskchar "Diamond operator with dot";
beginchar(chars.math_diamond_op_dot,9u#,v_center(7u#)); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
-numeric st; st:=rule_thickness;
-pos1(st,0); pos2(st,90); pos3(st,180); pos4(st,270);
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w;
y4-y2=x3-x1;
filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
@@ -3738,6 +17164,72 @@ infill fullcircle scaled (x2-x1) shifted .5[z1,z3];
penlabels(1,2,3,4);
endchar;
+iff known chars.math_diamond:
+bskchar "Diamond";
+beginchar(chars.math_diamond,10u#,asc_height#,rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_dot:
+bskchar "Diamond with dot";
+beginchar(chars.math_diamond_dot,10u#,asc_height#,rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+z0=.5[z1,z3];
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+dot(0);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_black:
+bskchar "Black diamond";
+beginchar(chars.math_diamond_black,10u#,asc_height#,rule_thickness#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=u; rt x3=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4=h+o;
+filldraw obl(1,4,2)---obl(2,1,3)--obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_uni:
+bskchar "Diamond (for Unicode)";
+beginchar(chars.math_diamond_uni,14u#,asc_height#,rule_thickness#); uni "0x25C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_dot_uni:
+bskchar "Diamond with dot (for Unicode)";
+beginchar(chars.math_diamond_dot_uni,14u#,asc_height#,rule_thickness#); uni "0x27D0";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=.5[h,-d]; x2=x4=.5w; y4l=h+o;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+z0=.5[z1,z3];
+dot(0);
+penlabels(1,2,3,4);
+endchar;
+
iff known chars.math_asterisk:
bskchar "Asterisk on axis";
beginchar(chars.math_asterisk,8u#,v_center(x_height#)); uni "0x2217";
@@ -3745,7 +17237,7 @@ adjust_fit(0,0);
pickup tiny.nib;
numeric size, ast, vast;
path p;
-z0=.5(w,h); ast:=3/4stem; vast=.7stem;
+z0=(.5w,math_axis); ast:=3/4stem; vast=.7stem;
pos1(ast,0); x1=x0;
size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x0:
size:= (lft w-u-x0)/cosd(30)-.5ast; fi;
@@ -3757,6 +17249,54 @@ filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
labels(0); penlabels(1);
endchar;
+iff known chars.math_asterisk_big:
+bskchar "Big asterisk on axis";
+beginchar(chars.math_asterisk_big,13u#,v_center(12u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+z0=(.5w,math_axis); ast:=2rule_thickness; vast=2rule_thickness;
+pos1(ast,0); x1=x0;
+size=1/2h; if (size+.5ast)*cosd(30) > (lft w)-u-x0:
+ size:= (lft w-u-x0)/cosd(30)-.5ast; fi;
+y1=y0+size;
+p:=z0---z1r{dir120}..z1l---z0;
+p:=subpath (xpart(p intersectiontimes ((x0,y0+vast)--(w,y0+vast))),
+ xpart(p intersectiontimes ((x0,y0+vast)--(0,y0+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z0,i).. endfor cycle;
+labels(0); penlabels(1);
+endchar;
+
+iff known chars.math_convolution:
+bskchar "Convolution sign";
+beginchar(chars.math_convolution,10u#,v_center(8u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,-45); pos6(rule_thickness,-45);
+pos7(rule_thickness,45); pos8(rule_thickness,45);
+y1=y2=.5[y3,y4]=math_axis; .5[x1,x2]=x3=x4=.5w; .5[z5,z6]=.5[z7,z8]=(x3,y1);
+z5-z6=(z2-z1) rotated 45; z7-z8=(z2-z1) rotated -45;
+x1=u+.5rule_thickness; y4-y3=x2-x1;
+z1'=whatever[z1l,z2l]=whatever[z5l,z6l];
+z2'=whatever[z3l,z4l]=whatever[z5r,z6r];
+z3'=whatever[z3r,z4r]=whatever[z7l,z8l];
+z4'=whatever[z7r,z8r]=whatever[z1l,z2l];
+z5'=whatever[z1r,z2r]=whatever[z5r,z6r];
+z6'=whatever[z3r,z4r]=whatever[z5l,z6l];
+z7'=whatever[z3l,z4l]=whatever[z7r,z8r];
+z8'=whatever[z1r,z2r]=whatever[z7l,z8l];
+bskpoints(1,2,hair,hair); bskpoints(3,4,hair,hair);
+filldraw z1l---obl(1',1l,6l)---z6l..z6r---obl(2',6r,3l)---z3l..z3rr
+ ---obl(3',3rr,7l)---z7l..z7r---obl(4',7r,2ll)---z2ll..z2r
+ ---obl(5',2r,5r)---z5r..z5l---obl(6',5l,4r)---z4r..z4ll
+ ---obl(7',4ll,8r)---z8r..z8l---obl(8',8l,1rr)---z1rr..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1',2',3',4',5',6',1rr,2ll,3rr,4ll);
+endchar;
+
iff known chars.math_diamond_curved_dot:
bskchar "Curved diamond with dot";
beginchar(chars.math_diamond_curved_dot,9u#,v_center(7u#)); uni "non";
@@ -3795,6 +17335,62 @@ infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z9l---z10l..cycle;
penlabels(9,10);
endchar;
+iff known chars.math_circle_bar_top:
+bskchar "Circle-bar top operator";
+beginarithchar(chars.math_circle_bar_top); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+y9=y10=y2; x9-x6r=x2r-x10=curve; z12=.5[z9r,z10r]; z11=z8+curve*down;
+circle_points(rule_thickness);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-2,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (z11r--(x11r,2h)));
+tim2=xpart(p intersectiontimes ((x4,y9r)--(w,y9r)));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z10r---obl(12r,10r,11r)---z11r..cycle;
+p:=subpath (-3,1) of (draw_circle.r);
+tim3=xpart(p intersectiontimes ((0,y9r)--(x4,y9r)));
+tim4=xpart(p intersectiontimes (z11l--(x11l,2h)));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(12l,11l,9r)---z9r..cycle;
+p:=subpath (2,6) of (draw_circle.r);
+tim5=xpart(p intersectiontimes ((x4,y9l)--(w,y9l)));
+tim6=xpart(p intersectiontimes ((x4,y9l)--(0,y9l)));
+infill subpath (rundy(p,tim5),rundy(p,tim6).zpet) of p..z9l---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_bar_bot:
+bskchar "Circle-bar bot operator";
+beginarithchar(chars.math_circle_bar_bot); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,0); pos12(rule_thickness,0);
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+y9=y10=y2; x9-x6r=x2r-x10=curve; z12=.5[z9l,z10l]; z11=z4+curve*up;
+circle_points(rule_thickness);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-2,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes ((0,y9r)--(x4,y9r)));
+tim2=xpart(p intersectiontimes ((x4,y9r)--(w,y9r)));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z10r---z9r..cycle;
+p:=subpath (2,5) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (z11r--(x11r,-d)));
+tim4=xpart(p intersectiontimes ((x4,y9l)--(w,y9l)));
+infill subpath (rundy(p,tim4),rundy(p,tim3).zpet) of p..z11r---obl(12r,11r,10l)---z10l..cycle;
+p:=subpath (3,7) of (draw_circle.r);
+tim5=xpart(p intersectiontimes ((0,y9l)--(x4,y9l)));
+tim6=xpart(p intersectiontimes (z11l--(x11l,-d)));
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z9l---obl(12l,9l,11l)---z11l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
iff known chars.math_circle_divide:
bskchar "Circle-divide operator";
beginarithchar(chars.math_circle_divide); uni "0x2298";
@@ -3819,6 +17415,112 @@ infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z10r---z9r..cycle;
penlabels(9,10);
endchar;
+iff known chars.math_circle_set_minus:
+bskchar "Circle-set minus operator";
+beginarithchar(chars.math_circle_set_minus); uni "0x29B8";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,angle(direction 3 of _circle_path));
+pos10(rule_thickness,angle(direction 7 of _circle_path)+180);
+z9=z3+curve*unitvector(z7-z3); z10=z7+curve*unitvector(z3-z7);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-2,4) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim2=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z9l---z10l..cycle;
+p:=subpath (3,8) of (draw_circle.r);
+tim4=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z10r---z9r..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_vbar:
+bskchar "Circle-vertical bar operator";
+beginarithchar(chars.math_circle_vbar); uni "0x29B6";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180);
+pos10(rule_thickness,180);
+z9=z4+curve*unitvector(z8-z4); z10=z8+curve*unitvector(z4-z8);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,5) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim2=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z9l---z10l..cycle;
+p:=subpath (3,9) of (draw_circle.r);
+tim4=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z10r---z9r..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_bar_right:
+bskchar "Circle-bar right operator";
+beginarithchar(chars.math_circle_bar_right); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+z9=z4+curve*unitvector(z8-z4); z10=z8+curve*unitvector(z4-z8);
+z12=.5[z9l,z10l]; z11=z2+curve*left;
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,3) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim2=xpart(p intersectiontimes (z11r--(w,y11r)));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z11r---obl(12r,11r,10l)---z10l..cycle;
+p:=subpath (2,5) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (z11l--(w,y11l)));
+tim4=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z9l---obl(12l,9l,11l)---z11l..cycle;
+p:=subpath (3,9) of (draw_circle.r);
+tim6=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+infill subpath (rundy(p,tim5),rundy(p,tim6).zpet) of p..z10r---z9r..cycle;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_circle_bar_left:
+bskchar "Circle-bar left operator";
+beginarithchar(chars.math_circle_bar_left); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+z9=z4+curve*unitvector(z8-z4); z10=z8+curve*unitvector(z4-z8);
+z12=.5[z10r,z9r]; z11=z6+curve*right;
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,5) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim2=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+infill subpath (rundy(p,tim1),rundy(p,tim2).zpet) of p..z9l---z10l..cycle;
+p:=subpath (3,7) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (z11l--(0,y11l)));
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(12l,11l,9r)---z9r..cycle;
+p:=subpath (5,9) of (draw_circle.r);
+tim6=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim5=xpart(p intersectiontimes (z11r--(0,y11r)));
+infill subpath (rundy(p,tim5),rundy(p,tim6).zpet) of p..z10r---obl(12r,10r,11r)---z11r..cycle;
+penlabels(9,10,11,12);
+endchar;
+
iff known chars.math_circle_dot:
bskchar "Circle-dot operator";
beginarithchar(chars.math_circle_dot); uni "0x2299";
@@ -3832,6 +17534,18 @@ infill draw_circle.r;
dot(0);
endchar;
+iff known chars.math_circle_dot_uni:
+bskchar "N-ary circle-dot operator (for Unicode)";
+beginchar(chars.math_circle_dot_uni,14u#,v_center(10/6dh#)); uni "0x2A00";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u; x2=w-x6; y2=y0=.5[h,-d]; x0=x8; y8-y4=x2-x6;
+circle_points(stem);
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw fullcircle scaled 2stem shifted z0;
+endchar;
+
iff known chars.math_circle_dot_text:
bskchar "\textstyle circle-dot operator";
beginchar(chars.math_circle_dot_text,14u#,0,10/6dh#); uni "non";
@@ -3895,8 +17609,47 @@ infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)-
penlabels(9,10,11,12);
endchar;
+iff known chars.math_circle_times_uni:
+bskchar "N-ary circle-times operator (for Unicode)";
+beginchar(chars.math_circle_times_uni,14u#,v_center(10/6dh#)); uni "0x2A02";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6;
+circle_points(stem);
+pos9(stem,angle(direction 1 of _circle_path));
+pos10(stem,angle(direction 5 of _circle_path)+180);
+pos11(stem,angle(direction 3 of _circle_path));
+pos12(stem,angle(direction 7 of _circle_path)+180);
+z9=z1+curve*unitvector(z5-z1); z10=z5+curve*unitvector(z1-z5);
+z11=z3+curve*unitvector(z7-z3); z12=z7+curve*unitvector(z3-z7);
+path p;
+filldraw draw_circle.l;
+p:=subpath (-1,1) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (1,3) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (3,5) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (5,7) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
iff known chars.math_circle_times_text:
-bskchar "\textstyle Circle-times operator";
+bskchar "\textstyle circle-times operator";
beginchar(chars.math_circle_times_text,14u#,0,10/6dh#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
@@ -3935,7 +17688,7 @@ penlabels(9,10,11,12);
endchar;
iff known chars.math_circle_times_disp:
-bskchar "\displaystyle Circle-times operator";
+bskchar "\displaystyle circle-times operator";
beginchar(chars.math_circle_times_disp,18u#,0,14/6dh#); uni "non";
adjust_fit(0,0);
pickup tiny.nib;
@@ -4012,6 +17765,45 @@ infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)-
penlabels(9,10,11,12);
endchar;
+iff known chars.math_circle_plus_uni:
+bskchar "N-ary circle-plus operator (for Unicode)";
+beginchar(chars.math_circle_plus_uni,14u#,v_center(10/6dh#)); uni "0x2A01";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+lft x6=u; x2=w-x6; y2=.5[h,-d]; y8-y4=x2-x6;
+circle_points(stem);
+pos9(stem,angle(direction 2 of _circle_path));
+pos10(stem,angle(direction 6 of _circle_path)+180);
+pos11(stem,angle(direction 4 of _circle_path));
+pos12(stem,angle(direction 8 of _circle_path)+180);
+z9=z2+curve*unitvector(z6-z2); z10=z6+curve*unitvector(z2-z6);
+z11=z4+curve*unitvector(z8-z4); z12=z8+curve*unitvector(z4-z8);
+path p;
+filldraw draw_circle.l;
+p:=subpath (0,2) of (draw_circle.r);
+tim1=xpart(p intersectiontimes (.5[z9l,z10l]--2[z10l,z9l]));
+tim2=xpart(p intersectiontimes (.5[z11l,z12l]--2[z11l,z12l]));
+z100=whatever[z12l,z11l]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim1).zpet,rundy(p,tim2)) of p..z12l---obl(100,12l,9l)---z9l..cycle;
+p:=subpath (2,4) of (draw_circle.r);
+tim3=xpart(p intersectiontimes (.5[z9r,z10r]--2[z10r,z9r]));
+tim4=xpart(p intersectiontimes (.5[z11l,z12l]--2[z12l,z11l]));
+z101=whatever[z12l,z11l]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim3),rundy(p,tim4).zpet) of p..z11l---obl(101,11l,9r)---z9r..cycle;
+p:=subpath (4,6) of (draw_circle.r);
+tim5=xpart(p intersectiontimes (.5[z9r,z10r]--2[z9r,z10r]));
+tim6=xpart(p intersectiontimes (.5[z11r,z12r]--2[z12r,z11r]));
+z102=whatever[z12r,z11r]=whatever[z9r,z10r];
+infill subpath (rundy(p,tim6),rundy(p,tim5).zpet) of p..z10r---obl(102,10r,11r)---z11r..cycle;
+p:=subpath (6,8) of (draw_circle.r);
+tim7=xpart(p intersectiontimes (.5[z9l,z10l]--2[z9l,z10l]));
+tim8=xpart(p intersectiontimes (.5[z11r,z12r]--2[z11r,z12r]));
+z103=whatever[z12r,z11r]=whatever[z9l,z10l];
+infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)---z10l..cycle;
+penlabels(9,10,11,12);
+endchar;
+
iff known chars.math_circle_plus_text:
bskchar "\textstyle circle-plus operator";
beginchar(chars.math_circle_plus_text,14u#,0,10/6dh#); uni "non";
@@ -4090,6 +17882,261 @@ infill subpath (rundy(p,tim7),rundy(p,tim8).zpet) of p..z12r---obl(103,12r,10l)-
penlabels(9,10,11,12);
endchar;
+iff known chars.math_circle_division:
+bskchar "Circle-division operator";
+beginarithchar(chars.math_circle_division); uni "0x2A38";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+.5[x9,x10]=x4=x11=x12; lft x9=rt x6r+u; y9=y10=math_axis;
+.5[y11,y12]=y9; y11-y12=.75(x10-x9);
+filldraw bskrule(9,10,hair,hair)---cycle;
+dot(11); dot(12);
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_circle:
+bskchar "Circle-circle operator";
+beginarithchar(chars.math_circle_circle); uni "0x229A";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+save x,y;
+lft x6=4u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness-3u;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+endchar;
+
+iff known chars.math_circle_equals:
+bskchar "Circle-equals operator";
+compute_spread(.45x_height#,.55x_height#);
+beginarithchar(chars.math_circle_equals); uni "0x229C";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+pos13(rule_thickness,90); pos14(rule_thickness,90);
+lft x6=u; x2=w-x6; y2=math_axis; top y8=h;
+lft x11=3u; x12+x11=w; x13=x11; x14=x12;
+y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw bskrule(11,12,hair,0);
+filldraw bskrule(14,13,hair,0);
+penlabels(11,12,13,14);
+endchar;
+
+iff known chars.math_circle_bar:
+bskchar "Circle-bar operator";
+beginarithchar(chars.math_circle_bar); uni "0x229D";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(hair,90); pos10(hair,90);
+lft x6=u+.5rule_thickness; x2=w-x6; y2=y9=y10=math_axis; top y8=h-.5rule_thickness;
+y2=y0; x0=x8;
+.5[x9,x10]=x8; x10-x9=1/2(x2r-x6r);
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw bskrule(9,10,.5hair,.5hair);
+penlabels(9,10);
+endchar;
+
+iff known chars.math_circle_asterisk:
+bskchar "Circle-asterisk operator";
+beginarithchar(chars.math_circle_asterisk); uni "0x229B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+z9=(x8,y2); ast:=3/4stem; vast=.7stem;
+pos10(ast,0); x10=x9;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x9:
+ size:= (lft w-u-x9)/cosd(30)-.5ast; fi;
+y10=y9+size;
+p:=z9---z10r{dir120}..z10l---z9;
+p:=subpath (xpart(p intersectiontimes ((x9,y9+vast)--(w,y9+vast))),
+ xpart(p intersectiontimes ((x9,y9+vast)--(0,y9+vast)))) of p;
+filldraw draw_circle.l;
+infill draw_circle.r;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z9,i).. endfor cycle;
+labels(9); penlabels(10);
+endchar;
+
+iff known chars.math_circle_triangle:
+bskchar "Circle-triangle operator";
+beginarithchar(chars.math_circle_triangle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+x11=.5[x9,x10]=.5w; x10-x9=1.5(y11-y9)=w-7u;
+y9=y10; 1/3[y9,y11]=math_axis;
+y9'=y10'=y9+(rule_thickness-currentbreadth);
+x9'-x9=x10-x10'=(rule_thickness-currentbreadth)/cosd(angle(z11-z9));
+z11'=z10'+whatever*(z11-z10)=z9'+whatever*(z11-z9);
+filldraw obl(9,11,10)---obl(10,9,11)---obl(11,10,9)---cycle;
+oblu:=2oblu;
+infill obl(9',11',10')---obl(10',9',11')---obl(11',10',9')---cycle;
+labels(9,9',10,10',11,11',12,12');
+endchar;
+
+iff known chars.math_circle_less:
+bskchar "Circle-less than operator";
+beginarithchar(chars.math_circle_less); uni "0x29C0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,0); pos10(rule_thickness,angle(direction 1 of p0));
+pos11(rule_thickness,angle(direction 3 of p0));
+z9l=z6; z10=z1; z11=z3; z9r=z11l+whatever*(z9l-z11r);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z10l--z9l;
+p2:=z9l--z11r;
+p3:=z11l--z9r;
+p4:=z9r--z10r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p1;
+(tim2-2,tim3)=subpath(2,4) of p0 intersectiontimes p2;
+(tim4-5,tim5)=subpath(5,8) of p0 intersectiontimes p1;
+(tim6-4,tim7)=subpath(4,7) of p0 intersectiontimes p2;
+(tim8,tim9)=subpath(0,2) of p0 intersectiontimes p4;
+(tim10-2,tim11)=subpath(2,4) of p0 intersectiontimes p3;
+oblu:=2oblu;
+infill subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim5).zpet) of p1
+ ..subpath(rundy(p0,tim4),length p0) of p0&cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p3,tim11),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(9,10,11);
+endchar;
+
+iff known chars.math_circle_greater:
+bskchar "Circle-greater than operator";
+beginarithchar(chars.math_circle_greater); uni "0x29C1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,180); pos10(rule_thickness,angle(direction 7 of p0));
+pos11(rule_thickness,angle(direction 5 of p0));
+z9l=z2; z10=z7; z11=z5; z9r=z11r+whatever*(z9l-z11l);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z9l--z10r;
+p2:=z11l--z9l;
+p3:=z9r--z11r;
+p4:=z10l--z9r;
+(tim0-1,tim1)=subpath(1,3) of p0 intersectiontimes p1;
+(tim2-1,tim3)=subpath(1,3) of p0 intersectiontimes p2;
+(tim4-6,tim5)=subpath(6,8) of p0 intersectiontimes p1;
+(tim6-4,tim7)=subpath(4,6) of p0 intersectiontimes p2;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p3;
+(tim10-6,tim11)=subpath(6,8) of p0 intersectiontimes p4;
+oblu:=2oblu;
+infill subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim5).zpet) of p1
+ ..subpath(rundy(p0,tim4),length p0) of p0&cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p4,0),rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p3,tim11),rundy(p3,1).zpet) of p3..cycle;
+penlabels(9,10,11);
+endchar;
+
+iff known chars.math_circle_vee:
+bskchar "Circle-vee operator";
+beginarithchar(chars.math_circle_vee); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,90); pos10(rule_thickness,angle(direction 1 of p0));
+pos11(rule_thickness,angle(direction 7 of p0));
+z9l=z4; z10=z1; z11=z7; z9r=z11r+whatever*(z9l-z11l);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z9l--z10r;
+p2:=z11l--z9l;
+p3:=z9r--z11r;
+p4:=z10l--z9r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p1;
+(tim2-3,tim3)=subpath(3,5) of p0 intersectiontimes p2;
+(tim4-3,tim5)=subpath(3,5) of p0 intersectiontimes p1;
+(tim6-6,tim7)=subpath(6,8) of p0 intersectiontimes p2;
+(tim8-6,tim9)=subpath(6,8) of p0 intersectiontimes p3;
+(tim10,tim11)=subpath(0,2) of p0 intersectiontimes p4;
+oblu:=2oblu;
+infill subpath(rundy(p0,tim0),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),8+rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p4,tim11),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p3,0),rundy(p3,tim9).zpet) of p3..cycle;
+penlabels(9,10,11);
+endchar;
+
+iff known chars.math_circle_wedge:
+bskchar "Circle-wedge operator";
+beginarithchar(chars.math_circle_wedge); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+lft x6=u+.5rule_thickness; x2=w-x6; y0=y2=math_axis; top y8=h-.5rule_thickness;
+x0=x8; circle_points(rule_thickness);
+p0:=draw_circle;
+pos9(whatever,90); pos10(rule_thickness,angle(direction 3 of p0));
+pos11(rule_thickness,angle(direction 5 of p0));
+z9l=z8; z10=z3; z11=z5; z9r=z11l+whatever*(z9l-z11r);
+filldraw draw_circle.l;
+p0:=draw_circle.r;
+p1:=z10l--z9l;
+p2:=z9l--z11r;
+p3:=z11l--z9r;
+p4:=z9r--z10r;
+(tim0,tim1)=subpath(0,1) of p0 intersectiontimes p1;
+(tim2-4,tim3)=subpath(4,6) of p0 intersectiontimes p2;
+(tim4-2,tim5)=subpath(2,4) of p0 intersectiontimes p1;
+(tim6-7,tim7)=subpath(7,8) of p0 intersectiontimes p2;
+(tim8-2,tim9)=subpath(2,4) of p0 intersectiontimes p4;
+(tim10-4,tim11)=subpath(4,6) of p0 intersectiontimes p3;
+oblu:=2oblu;
+infill subpath(rundy(p0,tim0),rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p1,tim5),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim2),rundy(p0,tim6).zpet) of p0
+ ..subpath(rundy(p2,tim7),rundy(p2,tim3).zpet) of p2..cycle;
+infill subpath(rundy(p0,tim8),rundy(p0,tim10).zpet) of p0
+ ..subpath(rundy(p3,tim11),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,tim9).zpet) of p4..cycle;
+penlabels(9,10,11);
+endchar;
+
iff known chars.math_circle_copy:
bskchar "Circle for copyright";
beginchar(chars.math_circle_copy,20u#,asc_height#,desc_depth#); uni "0x25EF";
@@ -4101,6 +18148,608 @@ filldraw draw_circle.l;
infill draw_circle.r;
endchar;
+iff known chars.math_oblong:
+bskchar "Oblong";
+beginchar(chars.math_oblong,11u#,.8asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; top y1r=h; bot y4r=-d;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_oblong_tall:
+compute_spread(.45x_height#,.55x_height#);
+bskchar "Tall oblong";
+beginchar(chars.math_oblong_tall,8u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+x1=x4; x2=x3; .5[x1,x2]=.5w; x2-x1=spread;
+y1=y2; y3=y4; top y1r=h; bot y4r=-d;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_qed:
+bskchar "End-of-proof sign";
+beginchar(chars.math_qed,10u#,.8asc_height#,0); uni "0x220E";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x4=u; x2=x3=w-x1;
+top y1=top y2=h; bot y3=bot y4=-d;
+filldraw obl(1,4,2)---obl(2,1,3)---obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_operator_black:
+bskchar "Black-box operator";
+beginarithchar(chars.math_box_operator_black); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=x2-x1;
+filldraw obl(1,4,2)---obl(2,1,3)---obl(3,2,4)---obl(4,3,1)---cycle;
+labels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_operator:
+bskchar "Box operator";
+beginarithchar(chars.math_box_operator); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_plus:
+bskchar "Box-plus operator";
+beginarithchar(chars.math_box_plus); uni "0x229E";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,90); pos6(rule_thickness,0);
+pos7(rule_thickness,-90); pos8(rule_thickness,180);
+z5=.5[z1l,z4l]; z6=.5[z1l,z2l]; z7=.5[z2l,z3l]; z8=.5[z3l,z4l];
+z5'=(x6l,y5r); z6'=(x6r,y7l); z7'=(x8l,y7r); z8'=(x8r,y5l);
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,6l)---obl(6l,1l,5')---obl(5',6l,5r)---obl(5r,5',1l)---cycle;
+infill obl(2l,6r,7l)---obl(7l,2l,6')---obl(6',7l,6r)---obl(6r,6',2l)---cycle;
+infill obl(3l,7r,8l)---obl(8l,3l,7')---obl(7',8l,7r)---obl(7r,7',3l)---cycle;
+infill obl(4l,8r,5l)---obl(5l,4l,8')---obl(8',5l,8r)---obl(8r,8',4l)---cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(5',6',7',8');
+endchar;
+
+iff known chars.math_box_times:
+bskchar "Box-times operator";
+beginarithchar(chars.math_box_times); uni "0x22A0";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,45); pos6(rule_thickness,-45);
+pos7(rule_thickness,-135); pos8(rule_thickness,-225);
+for i=5 upto 8: z[i]=z[i-4]l; endfor;
+z5'=whatever[z5r,z7l]=whatever[z6l,z8r]; z6'=whatever[z6r,z8l]=whatever[z5r,z7l];
+z7'=whatever[z5l,z7r]=whatever[z6r,z8l]; z8'=whatever[z6l,z8r]=whatever[z5l,z7r];
+z5'r=whatever[z5',z5r]=whatever[z1l,z2l]; z6'l=whatever[z5',z6l]=whatever[z1l,z2l];
+z6'r=whatever[z6',z6r]=whatever[z2l,z3l]; z7'l=whatever[z6',z7l]=whatever[z2l,z3l];
+z7'r=whatever[z7',z7r]=whatever[z3l,z4l]; z8'l=whatever[z7',z8l]=whatever[z3l,z4l];
+z8'r=whatever[z8',z8r]=whatever[z1l,z4l]; z5'l=whatever[z8',z5l]=whatever[z1l,z4l];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(5'r,5',6'l).more---obl(6'l,5'r,5').more---obl(5',6'l,5'r)---cycle;
+infill obl(6'r,6',7'l).more---obl(7'l,6'r,6').more---obl(6',7'l,6'r)---cycle;
+infill obl(7'r,7',8'l).more---obl(8'l,7'r,7').more---obl(7',8'l,7'r)---cycle;
+infill obl(8'r,8',5'l).more---obl(5'l,8'r,8').more---obl(8',5'l,8'r)---cycle;
+penlabels(1,2,3,4,5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_box_divide:
+bskchar "Box-divide operator";
+beginarithchar(chars.math_box_divide); uni "0x29C4";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,-45); pos6(rule_thickness,-45);
+z5=z2l; z6=z4l;
+z5'l=whatever[z6l,z5l]=whatever[z1l,z2l]; z5'r=whatever[z6r,z5r]=whatever[z3l,z2l];
+z6'l=whatever[z6r,z5r]=whatever[z3l,z4l]; z6'r=whatever[z6l,z5l]=whatever[z1l,z4l];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(3l,6'l,5'r)---obl(5'r,3l,6'l).more---obl(6'l,5'r,3l).more---cycle;
+infill obl(1l,6'r,5'l)---obl(5'l,1l,6'r).more---obl(6'r,5'l,1l).more---cycle;
+penlabels(1,2,3,4,5,5',6,6');
+endchar;
+
+iff known chars.math_box_set_minus:
+bskchar "Box-set minus operator";
+beginarithchar(chars.math_box_set_minus); uni "0x29C5";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu.more:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+pos5(rule_thickness,45); pos6(rule_thickness,45);
+z5=z1l; z6=z3l;
+z5'l=whatever[z6r,z5r]=whatever[z1l,z2l]; z5'r=whatever[z6l,z5l]=whatever[z4l,z1l];
+z6'r=whatever[z6l,z5l]=whatever[z3l,z4l]; z6'l=whatever[z6r,z5r]=whatever[z2l,z3l];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(4l,6'r,5'r)---obl(5'r,4l,6'r).more---obl(6'r,5'r,4l).more---cycle;
+infill obl(2l,6'l,5'l)---obl(5'l,2l,6'l).more---obl(6'l,5'l,2l).more---cycle;
+penlabels(1,2,3,4,5,5',6,6');
+endchar;
+
+iff known chars.math_box_minus:
+bskchar "Box-minus operator";
+beginarithchar(chars.math_box_minus); uni "0x229F";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+y5=y6=math_axis; x5=x1l; x6=x2l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,2l)---obl(2l,1l,6r)---obl(6r,2l,5r)---obl(5r,6r,1l)---cycle;
+infill obl(4l,5l,3l)---obl(3l,4l,6l)---obl(6l,3l,5l)---obl(5l,6l,4l)---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_box_vbar:
+bskchar "Box-vertical bar operator";
+beginarithchar(chars.math_box_vbar); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+x5=x6=.5w; y5=y1l; y6=y3l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5l,4l)---obl(4l,1l,6l)---obl(6l,4l,5l)---obl(5l,6l,1l)---cycle;
+infill obl(2l,5r,3l)---obl(3l,2l,6r)---obl(6r,3l,5r)---obl(5r,6r,2l)---cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_box_bar_top:
+bskchar "Box-bar top operator";
+beginarithchar(chars.math_box_bar_top); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+y5=y6=math_axis; x5=x1l; x6=x2l; x7=x8=.5w; y7=y5r; y8=y1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,8l)---obl(8l,1l,7l)---obl(7l,8l,5r)---obl(5r,7l,1l)---cycle;
+infill obl(2l,6r,8r)---obl(8r,2l,7r)---obl(7r,8r,6r)---obl(6r,7r,2l)---cycle;
+infill obl(4l,5l,3l)---obl(3l,4l,6l)---obl(6l,3l,5l)---obl(5l,6l,4l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_bar_bot:
+bskchar "Box-bar bottom operator";
+beginarithchar(chars.math_box_bar_bot); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+y5=y6=math_axis; x5=x1l; x6=x2l; x7=x8=.5w; y7=y5l; y8=y4l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5r,2l)---obl(2l,1l,6r)---obl(6r,2l,5r)---obl(5r,6r,1l)---cycle;
+infill obl(4l,5l,8l)---obl(8l,4l,7l)---obl(7l,8l,5l)---obl(5l,7l,4l)---cycle;
+infill obl(6l,3l,7r)---obl(7r,6l,8r)---obl(8r,7r,3l)---obl(3l,8r,6l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_bar_right:
+bskchar "Box-bar right operator";
+beginarithchar(chars.math_box_bar_right); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+x5=x6=.5w; y5=y1l; y6=y3l; y7=y8=math_axis; x7=x5r; x8=x2l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5l,4l)---obl(4l,1l,6l)---obl(6l,4l,5l)---obl(5l,6l,1l)---cycle;
+infill obl(2l,8r,5r)---obl(5r,2l,7r)---obl(7r,5r,8r)---obl(8r,7r,2l)---cycle;
+infill obl(3l,6r,8l)---obl(8l,3l,7l)---obl(7l,8l,6r)---obl(6r,7l,3l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_bar_left:
+bskchar "Box-bar left operator";
+beginarithchar(chars.math_box_bar_left); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+x5=x6=.5w; y5=y1l; y6=y3l; y7=y8=math_axis; x7=x1l; x8=x5l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,5l,7r)---obl(7r,1l,8r)---obl(8r,7r,5l)---obl(5l,8r,1l)---cycle;
+infill obl(4l,7l,6l)---obl(6l,4l,8l)---obl(8l,6l,7l)---obl(7l,8l,4l)---cycle;
+infill obl(2l,5r,3l)---obl(3l,2l,6r)---obl(6r,3l,5r)---obl(5r,6r,2l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_box_dot:
+bskchar "Box-dot operator";
+beginarithchar(chars.math_box_dot); uni "0x22A1";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+z0=.5[z1,z3];
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+dot(0);
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_box_asterisk:
+bskchar "Box-asterisk operator";
+beginarithchar(chars.math_box_asterisk); uni "0x29C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric size, ast, vast;
+path p;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+z5=.5[z1l,z3l]; ast:=3/4stem; vast=.7stem;
+pos6(ast,0); x6=x5;
+size=1/3h; if (size+.5ast)*cosd(30) > (lft w)-u-x5:
+ size:= (lft w-u-x5)/cosd(30)-.5ast; fi;
+y6=y5+size;
+p:=z5---z6r{dir120}..z6l---z5;
+p:=subpath (xpart(p intersectiontimes ((x5,y5+vast)--(w,y5+vast))),
+ xpart(p intersectiontimes ((x5,y5+vast)--(0,y5+vast)))) of p;
+filldraw for i=0, 60, 120, 180, 240, 300: p rotatedaround(z5,i).. endfor cycle;
+penlabels(1,2,3,4,6); labels(5);
+endchar;
+
+iff known chars.math_box_circle:
+bskchar "Box-circle operator";
+beginarithchar(chars.math_box_circle); uni "0x29C7";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+pos11(rule_thickness,270); pos12(rule_thickness,270);
+lft x9=lft x12=u; x10=x11=w-x9;
+y9=y10; y11=y12; .5[y9,y11]=math_axis; y9r-y11r=x10-x9;
+x9l:=x12l:=x9l+rule_thickness-currentbreadth; x10l:=x11l:=w-x9l;
+filldraw obl(9r,12r,10r)---obl(10r,9r,11r)---obl(11r,10r,12r)---obl(12r,11r,9r)---cycle;
+infill obl(9l,12l,10l)---obl(10l,9l,11l)---obl(11l,10l,12l)---obl(12l,11l,9l)---cycle;
+lft x6=4u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness-3u;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_box_triangle:
+bskchar "Box-triangle operator";
+beginarithchar(chars.math_box_triangle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+x7=.5[x5,x6]=.5w; x6-x5=1.5(y7-y5)=w-7u;
+y5=y6; 1/3[y5,y7]=math_axis;
+y5'=y6'=y5+(rule_thickness-currentbreadth);
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw obl(5,7,6)---obl(6,5,7)---obl(7,6,5)---cycle;
+oblu:=2oblu;
+infill obl(5',7',6')---obl(6',5',7')---obl(7',6',5')---cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_box_division:
+bskchar "Box-division operator";
+beginarithchar(chars.math_box_division); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+.5[x5,x6]=.5w=x7=x8; lft x5=rt x1l+u; y5=y6=math_axis;
+.5[y7,y8]=y5; y7-y8=.75(x6-x5);
+filldraw bskrule(5,6,hair,hair)---cycle;
+dot(7); dot(8);
+penlabels(1,2,3,4); penlabels(5,6);
+endchar;
+
+iff known chars.math_box_box:
+bskchar "Box-box operator";
+beginarithchar(chars.math_box_box); uni "0x29C8";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,270); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,270); pos8(rule_thickness,270);
+lft x1=lft x4=u; x2=x3=w-x1;
+y1=y2; y3=y4; .5[y1,y3]=.5[y5,y7]=math_axis; y1r-y3r=x2-x1;
+x1l:=x4l:=x1l+rule_thickness-currentbreadth; x2l:=x3l:=w-x1l;
+.5[x1,x2]=.5[x5,x7]; x5=x8; x6=x7; y5=y6; y7=y8; y5r-y7r=x6-x5=w-7u;
+x5l:=x8l:=x5l+rule_thickness-currentbreadth; x6l:=x7l:=w-x5l;
+filldraw obl(1r,4r,2r)---obl(2r,1r,3r)---obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+infill obl(1l,4l,2l)---obl(2l,1l,3l)---obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+filldraw obl(5r,8r,6r)---obl(6r,5r,7r)---obl(7r,6r,8r)---obl(8r,7r,5r)---cycle;
+infill obl(5l,8l,6l)---obl(6l,5l,7l)---obl(7l,6l,8l)---obl(8l,7l,5l)---cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_diamond_wider:
+bskchar "Wider diamond";
+beginarithchar(chars.math_diamond_wider); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; y4l=h+o;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_diamond_triangle:
+bskchar "Diamond-triangle operator";
+beginarithchar(chars.math_diamond_triangle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; y4l=h+o;
+x7=.5[x5,x6]=.5w; x6-x5=1.5(y7-y5)=w-7.5u;
+y5=y6; .2[y5,y7]=math_axis;
+y5'=y6'=y5+(rule_thickness-currentbreadth);
+x5'-x5=x6-x6'=(rule_thickness-currentbreadth)/cosd(angle(z7-z5));
+z7'=z6'+whatever*(z7-z6)=z5'+whatever*(z7-z5);
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+oblu:=f_obl;
+filldraw obl(5,7,6)---obl(6,5,7)---obl(7,6,5)---cycle;
+oblu:=2oblu;
+infill obl(5',7',6')---obl(6',5',7')---obl(7',6',5')---cycle;
+penlabels(1,2,3,4); labels(5,5',6,6',7,7',8,8');
+endchar;
+
+iff known chars.math_diamond_circle:
+bskchar "Diamond-circle operator";
+beginarithchar(chars.math_diamond_circle); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x6=4u+.5rule_thickness; x2=w-x6; y2=math_axis; top y8=h-.5rule_thickness-3u;
+y2=y0; x0=x8;
+circle_points(rule_thickness);
+pos9(rule_thickness,0); pos10(rule_thickness,90); pos11(rule_thickness,180); pos12(rule_thickness,270);
+lft x9l=u; rt x11l=w-u; y9=y11=.5[y10,y12]=math_axis; x10=x12=.5w; y12l=h+o;
+filldraw obl(9l,12l,10l)---obl(10l,9l,11l)--obl(11l,10l,12l)---obl(12l,11l,9l)---cycle;
+oblu:=2oblu;
+infill obl(9r,12r,10r)---obl(10r,9r,11r)--obl(11r,10r,12r)---obl(12r,11r,9r)---cycle;
+filldraw draw_circle.l;
+infill draw_circle.r;
+penlabels(9,10,11,12);
+endchar;
+
+iff known chars.math_diamond_minus:
+bskchar "Diamond-minus operator";
+beginarithchar(chars.math_diamond_minus); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis=y5=y6; x2=x4=.5w; y4l=h+o;
+x5=x1; x6=x3;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(4r,3r,1r)---obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+(tim0,tim1)=subpath(0,3) of p0 intersectiontimes p1;
+(tim2-3,tim3)=subpath(3,length p0) of p0 intersectiontimes p1;
+(tim4,tim5)=subpath(0,3) of p0 intersectiontimes p2;
+(tim6-6,tim7)=subpath(6,length p0) of p0 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim6),length p0) of p0
+ ..subpath(0,rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_diamond_vbar:
+bskchar "Diamond-vertical bar operator";
+beginarithchar(chars.math_diamond_vbar); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=x5=x6=.5w; y4l=h+o;
+y5=y2; y6=y4;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+(tim0,tim1)=subpath(0,3) of p0 intersectiontimes p1;
+(tim2-3,tim3)=subpath(3,length p0) of p0 intersectiontimes p1;
+(tim4,tim5)=subpath(0,3) of p0 intersectiontimes p2;
+(tim6-6,tim7)=subpath(6,length p0) of p0 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p1,tim3),rundy(p1,tim1).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim6),length p0) of p0
+ ..subpath(0,rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_diamond_plus:
+bskchar "Diamond-plus operator";
+beginarithchar(chars.math_diamond_plus); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,180); pos6(rule_thickness,180);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=y7=y8=math_axis; x2=x4=x5=x6=.5w; y4l=h+o;
+y5=y2; y6=y4; x7=x1; x8=x3;
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+p5=obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---obl(1r,4r,2r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+p3=z8l--z7l;
+p4=z7r--z8r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p3;
+(tim2-1,tim3)=subpath(1,length p0) of p0 intersectiontimes p2;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6-2,tim7)=subpath(2,4) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p3;
+(tim10,tim11)=p3 intersectiontimes p1;
+(tim12-4,tim13)=subpath(4,6) of p0 intersectiontimes p4;
+(tim14-6,tim15)=subpath(6,8) of p0 intersectiontimes p1;
+(tim16,tim17)=p1 intersectiontimes p4;
+(tim18-4,tim19)=subpath(4,7) of p5 intersectiontimes p2;
+(tim20-6,tim21)=subpath(6,length p5) of p5 intersectiontimes p4;
+(tim22,tim23)=p4 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim1).zpet) of p3..cycle;
+infill subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p3,tim9),rundy(p3,tim10).zpet) of p3
+ ..subpath(rundy(p1,tim11),rundy(p1,tim7).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p1,tim15),rundy(p1,tim16).zpet) of p1
+ ..subpath(rundy(p4,tim17),rundy(p4,tim13).zpet) of p4..cycle;
+infill subpath(rundy(p5,tim18),rundy(p5,tim20).zpet) of p5
+ ..subpath(rundy(p4,tim21),rundy(p4,tim22).zpet) of p4
+ ..subpath(rundy(p2,tim23),rundy(p2,tim19).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.math_diamond_times:
+bskchar "Diamond-times operator";
+beginarithchar(chars.math_diamond_times); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+pos5(rule_thickness,225); pos6(rule_thickness,225);
+pos7(rule_thickness,135); pos8(rule_thickness,135);
+lft x1l=u; rt x3l=w-u; y1=y3=.5[y2,y4]=math_axis; x2=x4=.5w; y4l=h+o;
+z5=.5[z2,z3]; z6=.5[z1,z4]; z7=.5[z1,z2]; z8=.5[z3,z4];
+filldraw obl(1l,4l,2l)---obl(2l,1l,3l)--obl(3l,2l,4l)---obl(4l,3l,1l)---cycle;
+oblu:=2oblu;
+p0=obl(1r,4r,2r)---obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---cycle;
+p5=obl(2r,1r,3r)--obl(3r,2r,4r)---obl(4r,3r,1r)---obl(1r,4r,2r)---cycle;
+p1=z6l--z5l;
+p2=z5r--z6r;
+p3=z8l--z7l;
+p4=z7r--z8r;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p3;
+(tim2-1,tim3)=subpath(1,length p0) of p0 intersectiontimes p2;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6-2,tim7)=subpath(2,4) of p0 intersectiontimes p1;
+(tim8-4,tim9)=subpath(4,6) of p0 intersectiontimes p3;
+(tim10,tim11)=p3 intersectiontimes p1;
+(tim12-4,tim13)=subpath(4,6) of p0 intersectiontimes p4;
+(tim14-6,tim15)=subpath(6,8) of p0 intersectiontimes p1;
+(tim16,tim17)=p1 intersectiontimes p4;
+(tim18-4,tim19)=subpath(4,7) of p5 intersectiontimes p2;
+(tim20-6,tim21)=subpath(6,length p5) of p5 intersectiontimes p4;
+(tim22,tim23)=p4 intersectiontimes p2;
+infill subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),rundy(p3,tim1).zpet) of p3..cycle;
+infill subpath(rundy(p0,tim6),rundy(p0,tim8).zpet) of p0
+ ..subpath(rundy(p3,tim9),rundy(p3,tim10).zpet) of p3
+ ..subpath(rundy(p1,tim11),rundy(p1,tim7).zpet) of p1..cycle;
+infill subpath(rundy(p0,tim12),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p1,tim15),rundy(p1,tim16).zpet) of p1
+ ..subpath(rundy(p4,tim17),rundy(p4,tim13).zpet) of p4..cycle;
+infill subpath(rundy(p5,tim18),rundy(p5,tim20).zpet) of p5
+ ..subpath(rundy(p4,tim21),rundy(p4,tim22).zpet) of p4
+ ..subpath(rundy(p2,tim23),rundy(p2,tim19).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
iff known chars.math_prime:
bskchar "Prime symbol";
beginchar(chars.math_prime,4u#+curve#,.8asc_height#,0); uni "non";
@@ -4232,21 +18881,324 @@ numeric spread; spread:=h+d;
vlnka(0,1);
endchar;
+iff known chars.math_sim_thick:
+bskchar "Thick similarity sign";
+beginchar(chars.math_sim_thick, 14u#, v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+{{ numeric old_curve, old_hair; old_curve:=curve; old_hair:=hair;
+ save curve, hair; numeric curve, hair;
+ curve:=1.5old_curve; hair:=1.5old_hair;
+ vlnka(0,1);
+}};
+endchar;
+
+iff known chars.math_sim_dots:
+bskchar "Similarity sign with dots";
+beginchar(chars.math_sim_dots, 14u#, v_center(x_height#)); uni "0x223B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+x2=x3=.5w; .5[y2,y3]=.5[y0,y1]=math_axis; top y2+.5dot_size=h;
+vlnka(0,1);
+dot(2); dot(3);
+endchar;
+
+iff known chars.math_sim_dot:
+bskchar "Similarity sign with dot";
+beginchar(chars.math_sim_dot, 14u#, v_center(x_height#)); uni "0x2A6A";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+x2=.5w; .5[y0,y1]=math_axis; top y2+.5dot_size=h;
+vlnka(0,1);
+dot(2);
+endchar;
+
+iff known chars.math_sim_dots_rising:
+bskchar "Similarity sign with rising dots";
+beginchar(chars.math_sim_dots_rising, 14u#, v_center(.8x_height#)); uni "0x2A6B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+.5[x2,x3]=.5w; rt x2=x1a;
+.5[y2,y3]=.5[y0,y1]=math_axis; top y2+.5dot_size=h;
+vlnka(0,1);
+dot(2); dot(3);
+endchar;
+
+iff known chars.math_sim_BB:
+bskchar "Blackboard-bold similarity sign";
+beginchar(chars.math_sim_BB, 14u#, v_center(.5x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+{{ numeric old_curve, old_hair; old_curve:=curve; old_hair:=hair;
+ save curve, hair; numeric curve, hair;
+ curve:=1.5old_curve; hair:=1.5old_hair;
+ vlnka(0,1);
+}};
+path p[]; numeric tim[];
+p100:=subpath(0,4) of _vlnka;
+p101:=subpath(5,infinity) of _vlnka;
+z100=bsktouch(subpath(0,2) of p100,dir135,p101,dir-45);
+z101=bsktouch(subpath(2,infinity) of p100,dir135,p101,dir-45);
+tim100=xpart(p100 intersectiontimes (z100--(x100,y0r-5)));
+tim101=xpart(p101 intersectiontimes (z100--(x100,y1)));
+tim102=xpart(p100 intersectiontimes (z101--(x101,y0)));
+tim103=xpart(p101 intersectiontimes (z101--(x101,y1)));
+oblu:=curve;
+infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100
+ ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle;
+labels(100,101);
+endchar;
+
+iff known chars.math_sim_not:
+bskchar "Not similarity sign";
+beginchar(chars.math_sim_not, 14u#, v_center(.7x_height#)); uni "0x2241";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread, tim[]; spread:=.5x_height;
+.5[y0,y1]=math_axis;
+vlnka(0,1).nodraw;
+top y2=h; bot y3=-d; .5[x2,x3]=.5w; x2=x1a;
+pos2(rule_thickness,angle(z3-z2)+90); pos3(rule_thickness,angle(z3-z2)+90);
+bskpoints(2,3,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z2l---z3ll..{z2-z3}z3r;
+p3:=z3r---z2rr..{z3-z2}z2l;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+penlabels(2,3); labels(2rr,3ll);
+endchar;
+
+iff known chars.math_lazyS:
+bskchar "Inverted lazy S sign";
+beginchar(chars.math_lazyS, 14u#, v_center(.5x_height#)); uni "0x223E";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+pos0(rule_thickness,0); pos1(rule_thickness,0); pos2(rule_thickness,250); pos3(rule_thickness,250);
+pos4(hair,90); pos5(hair,90);
+top y2l=top y5r=h; bot y3r=bot y4l=-d; x1-x3=1/4(x1-x0); .5[x0,x1]=.5[x2,x3]=.5w; lft x0l=u;
+y0=y1=.5[y2,y3]; x4=x2; x5=x3;
+filldraw z4l{left}..z0l..z2l..z3l..z1l..{left}z5l..{right}z5r..z1r..z3r..z2r..z0r..{right}z4r..cycle;
+penlabels(0,1,2,3,4,5);
+endchar;
+
+iff known chars.math_sinus:
+bskchar "Sinus sign";
+beginchar(chars.math_sinus, 14u#, v_center(.5x_height#)); uni "0x223F";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+pos0(rule_thickness,0); pos1(rule_thickness,0); pos2(rule_thickness,270); pos3(rule_thickness,270);
+pos4(rule_thickness,180);
+x1-x3=1/4(x1-x0); .5[x0,x1]=.5[x2,x3]=x4=.5w; lft x0l=u;
+y0=y1=.5[y2,y3]=y4=math_axis; y2-y0=(x1-x0)/6.28;
+filldraw z0l{dir45}..{right}z2l..{dir-45}z4l..{right}z3l..{dir45}z1l
+ ..z1r{dir-135}..{left}z3r..{dir135}z4r..{left}z2r..{dir-135}z0r..cycle;
+penlabels(0,1,2,3,4,5);
+endchar;
+
iff known chars.math_sim_eq:
bskchar "Similar or equal sign";
beginchar(chars.math_sim_eq, 14u#, v_center(.5x_height#+3u#)); uni "0x2243";
adjust_fit(0,0);
pickup tiny.nib;
-numeric spread; spread:=(h+d)-3u;
+numeric spread; spread:=.5x_height;
pos2(rule_thickness,90); pos3(rule_thickness,90);
top y1=h; lft x2=u; rt x3=w-u; y2l=y3l=-d;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+penlabels(2,3);
+endchar;
+
+iff known chars.math_sim_eq_neg:
+bskchar "Negated similar or equal sign";
+beginchar(chars.math_sim_eq_neg, 14u#,.25x_height#+1.5u#+math_axis#,.25x_height#+1.5u#-math_axis#); uni "0x2244";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+numeric spread; spread:=.5x_height;
+oblu:=oblu; oblu.more:=2oblu;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+top y1=h; lft x2=u; rt x3=w-u; y2l=y3l=-d;
+vlnka(0,1).nodraw;
bskpoints(2,3,hair,hair);
+top y4=h; bot y5=-d-2.5rule_thickness; .5[x4,x5]=.5w; x4=x1a;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z4l---z5ll..{z4-z5}z5r;
+p3:=z5r---z4rr..{z5-z4}z4l;
+p4:=z3r--z2rr;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p3 intersectiontimes p4;
+y1'l=y1'r=y2r; z1'l=whatever[z4l,z5l]; z1'r=whatever[z4r,z5r];
+y2'l=y2'r=y2l; z2'l=whatever[z4l,z5l]; z2'r=whatever[z4r,z5r];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..z2l---tobl(2'l,2l,5ll).more---z5ll..z5r---tobl(2'r,5r,3l)---z3ll..z3r
+ ..subpath(0,rundy(p4,(tim11,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim10,2oblu)),rundy(p3,(tim3,2oblu)).zpet) of p3
+ ..subpath(rundy(p0,(tim2,2oblu)),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,2oblu)),infinity) of p1..cycle;
+penlabels(1',2,2',3,4,5,6,7); labels(2rr,3ll,4rr,5ll);
+endchar;
+
+iff known chars.math_eq_double_sim:
+bskchar "Double equal or similar sign";
+beginchar(chars.math_eq_double_sim, 14u#, v_center(.95x_height#+2u#)); uni "0x2A73";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+bot y0=-d; lft x2=lft x4=u; rt x3=rt x5=w-u; y4r=y5r=h; y2=y3=y4-.45x_height;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_sim_eq_double:
+bskchar "Similar or double equal sign";
+beginchar(chars.math_sim_eq_double, 14u#, v_center(.95x_height#+2u#)); uni "0x2245";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_congruent_dot:
+bskchar "Congruent with dot";
+beginchar(chars.math_congruent_dot, 14u#, .775x_height#+u#+math_axis#,.475x_height#+u#-math_axis#); uni "0x2A6D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h-.3x_height; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+x6=.5w; top y6+.5dot_size=h;
+vlnka(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+dot(6);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_sim_neq_double:
+bskchar "Similar or not double equal sign";
+beginchar(chars.math_sim_neq_double, 14u#, v_center(.95x_height#+2u#)); uni "0x2246";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka(0,1);
+top top y6=bot y1a.r; bot y7=-d-2.5rule_thickness; .5[x6,x7]=.5w; x6-x7=3u;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(2,3,hair,hair); bskpoints(4,5,hair,hair);
+bskpoints(6,7,rule_thickness,rule_thickness);
+y2'l=y2'r=y2l; y3'l=y3'r=y2r; y4'l=y4'r=y4l; y5'l=y5'r=y4r;
+z5'l=whatever[z6l,z7l]; z5'r=whatever[z6r,z7r];
+z4'l=whatever[z6l,z7l]; z4'r=whatever[z6r,z7r];
+z3'l=whatever[z6l,z7l]; z3'r=whatever[z6r,z7r];
+z2'l=whatever[z6l,z7l]; z2'r=whatever[z6r,z7r];
+filldraw z4l---obl(4'l,4l,3'l).more---obl(3'l,4'l,2r)---z2rr..z2l---obl(2'l,2l,7l).more---z7l..z7r---obl(2'r,7r,3l)---z3ll..z3r---obl(3'r,3r,4'r).more---obl(4'r,3'r,5l)---z5ll..z5r---obl(5'r,5r,6r).more---z6r..z6l---obl(5'l,6l,4r)---z4rr..cycle;
+penlabels(2,2',3,3',4,4',5,5',6,7);
+endchar;
+
+iff known chars.math_sim_eq_double_neg:
+bskchar "Negated similar or double equal sign";
+beginchar(chars.math_sim_eq_double_neg, 14u#, v_center(.95x_height#+2u#)); uni "0x2247";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+numeric spread; spread:=.5x_height;
+oblu:=oblu; oblu.more:=2oblu;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka(0,1).nodraw;
+bskpoints(2,3,hair,hair); bskpoints(4,5,hair,hair);
+top y6=h; bot y7=-d-2.5rule_thickness; .5[x6,x7]=.5w; x6=x1a;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+p2:=z6l---z7ll..{z6-z7}z7r;
+p3:=z7r---z6rr..{z7-z6}z6l;
+p4:=z5r--z4rr;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p3 intersectiontimes p4;
+y2'l=y2'r=y2l; z2'l=whatever[z6l,z7l]; z2'r=whatever[z6r,z7r];
+y3'l=y3'r=y2r; z3'l=whatever[z6l,z7l]; z3'r=whatever[z6r,z7r];
+y4'l=y4'r=y4l; z4'l=whatever[z6l,z7l]; z4'r=whatever[z6r,z7r];
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..z4l---obl(4'l,4l,3'l).more---obl(3'l,4'l,2r)---z2rr..z2l
+ ---obl(2'l,2l,7l).more---z7ll..z7r
+ ---obl(2'r,7r,3l)---z3ll..z3r---obl(3'r,3r,4'r).more---obl(4'r,3'r,5l)
+ ---z5ll..z5r
+ ..subpath(0,rundy(p4,(tim11,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim10,2oblu)),rundy(p3,(tim3,2oblu)).zpet) of p3
+ ..subpath(rundy(p0,(tim2,2oblu)),infinity) of p0
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim5,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(p1,(tim6,2oblu)),infinity) of p1..cycle;
+penlabels(2,2',3,3',4,4',5,6,7); labels(2rr,3ll,4rr,5ll);
+endchar;
+
+iff known chars.math_eq_sim:
+bskchar "Equal or similar sign";
+beginchar(chars.math_eq_sim, 14u#, v_center(.5x_height#+3u#)); uni "0x2242";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=(h+d)-3u;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+bot y0=-d; lft x2=u; rt x3=w-u; y2r=y3r=h;
vlnka(0,1);
-filldraw z2rr..z2l---z3ll..z3r---cycle;
+filldraw bskrule(2,3,hair,hair);
endchar;
iff known chars.math_approx:
-bskchar "Approximity sign";
+bskchar "Approximate sign";
beginchar(chars.math_approx, 14u#, v_center(x_height#)); uni "0x2248";
adjust_fit(0,0);
pickup tiny.nib;
@@ -4256,16 +19208,145 @@ vlnka(0,1);
vlnka(2,3);
endchar;
+iff known chars.math_approx_thick:
+bskchar "Thick approximate sign";
+beginchar(chars.math_approx_thick, 14u#, v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5(h+d);
+top y1=h; bot y2=-d;
+{{ numeric old_curve, old_hair; old_curve:=curve; old_hair:=hair;
+ save curve, hair; numeric curve, hair;
+ curve:=1.5old_curve; hair:=1.5old_hair;
+ vlnka(0,1);
+ vlnka(2,3);
+}};
+endchar;
+
+iff known chars.math_sim_minus_sim:
+bskchar "Similar-minus-similar sign";
+beginchar(chars.math_sim_minus_sim, 14u#, v_center(1.5x_height#)); uni "0x2A6C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; bot y2=-d;
+lft x4=u; rt x5=w-u; y4=y5=math_axis;
+vlnka(0,1);
+vlnka(2,3);
+filldraw bskrule(4,5,hair,hair);
+penlabels(4,5);
+endchar;
+
+iff known chars.math_approx_circumflex:
+bskchar "Approximate sign with circumflex accent";
+beginchar(chars.math_approx_circumflex, 14u#, asc_height#,.5x_height#-math_axis#); uni "0x2A6F";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+top y1=.5x_height+math_axis; bot y2=-d; x5=.5w+u;
+vlnka(0,1);
+vlnka(2,3);
+circumflex(4,5,6);
+endchar;
+
+iff known chars.math_tilde_triple:
+bskchar "Triple tilde";
+beginchar(chars.math_tilde_triple, 14u#, v_center(1.2x_height#)); uni "0x224B";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.4x_height;
+top y1=h; bot y2=-d; .5[y4,y5]=math_axis;
+vlnka(0,1);
+vlnka(2,3);
+vlnka(4,5);
+endchar;
+
+iff known chars.math_approx_bar:
+bskchar "Approximate sign with lower bar";
+beginchar(chars.math_approx_bar, 14u#, v_center(x_height#+3u#)); uni "0x224A";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y1=h; bot y2=-d+3u;
+y4l=y5l=-d; lft x4=u; rt x5=w-u;
+vlnka(0,1);
+vlnka(2,3);
+filldraw bskrule(4,5,hair,hair);
+penlabels(4,5);
+endchar;
+
+iff known chars.math_approx_eq_double:
+bskchar "Approximate sign with lower bar";
+beginchar(chars.math_approx_eq_double, 14u#, v_center(x_height#+2u#+.45x_height#)); uni "0x2A70";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+top y1=h; bot y2=-d+2u+.45x_height;
+y6l=y7l=-d; y4=y5=y6+.45x_height; lft x4=lft x6=u; rt x5=rt x7=w-u;
+vlnka(0,1);
+vlnka(2,3);
+filldraw bskrule(4,5,hair,0);
+filldraw bskrule(7,6,hair,0);
+penlabels(4,5,6,7);
+endchar;
+
+iff known chars.math_approx_neg:
+bskchar "Negated approximate sign";
+beginchar(chars.math_approx_neg, 14u#, v_center(x_height#)); uni "0x2249";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[], spread; spread:=.5(h+d);
+top y1=h; bot y2=-d;
+vlnka(0,1).nodraw; p0:=_vlnka;
+vlnka(2,3).nodraw;
+.5[y4,y5]=math_axis;top y4=h+rule_thickness; .5[x4,x5]=.5w; rt x4=lft x1a;
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=subpath(0,4) of p0;
+p2:=subpath(5,infinity) of p0;
+p3:=subpath(0,4) of _vlnka;
+p4:=subpath(5,infinity) of _vlnka;
+p5:=z4l---z5ll..{z4-z5}z5r;
+p6:=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=p1 intersectiontimes p5;
+(tim2,tim3)=p1 intersectiontimes p6;
+(tim4,tim5)=p2 intersectiontimes p6;
+(tim6,tim7)=p2 intersectiontimes p5;
+(tim8,tim9)=p3 intersectiontimes p5;
+(tim10,tim11)=p3 intersectiontimes p6;
+(tim12,tim13)=p4 intersectiontimes p6;
+(tim14,tim15)=p4 intersectiontimes p5;
+filldraw subpath(0,rundy(p1,(tim0,2oblu)).zpet) of p1
+ ..subpath(rundy(p5,(tim1,2oblu)),rundy(p5,tim15).zpet) of p5
+ ..subpath(rundy(p4,tim14),infinity) of p4
+ ..subpath(0,rundy(p3,(tim8,2oblu)).zpet) of p3
+ ..subpath(rundy(p5,(tim9,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p6,tim11).zpet) of p6
+ ..subpath(rundy(p3,tim10),infinity) of p3
+ ..subpath(0,rundy(p4,(tim12,2oblu)).zpet) of p4
+ ..subpath(rundy(p6,(tim13,2oblu)),rundy(p6,tim3).zpet) of p6
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p6,(tim5,2oblu)),infinity) of p6
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p2,tim6),infinity) of p2..cycle;
+penlabels(4,5);
+endchar;
+
iff known chars.math_ceiling_left:
bskchar "Left ceiling bracket";
-beginchar(chars.math_ceiling_left,5.5u#,body_height#,paren_depth#); uni "non";
+beginchar(chars.math_ceiling_left,5.5u#,body_height#,paren_depth#); uni "0x2308";
adjust_fit(0,0);
pickup tiny.nib;
pos1(hair,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,hair],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+hair*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4279,7 +19360,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4293,7 +19374,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4307,7 +19388,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4321,20 +19402,20 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
iff known chars.math_floor_left:
bskchar "Left floor bracket";
-beginchar(chars.math_floor_left,5.5u#,body_height#,paren_depth#); uni "non";
+beginchar(chars.math_floor_left,5.5u#,body_height#,paren_depth#); uni "0x230A";
adjust_fit(0,0);
pickup tiny.nib;
pos3(hair,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,hair],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+hair*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4348,7 +19429,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4362,7 +19443,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4376,7 +19457,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -4390,20 +19471,20 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
iff known chars.math_ceiling_right:
bskchar "Right ceiling bracket";
-beginchar(chars.math_ceiling_right,5.5u#,body_height#,paren_depth#); uni "non";
+beginchar(chars.math_ceiling_right,5.5u#,body_height#,paren_depth#); uni "0x2309";
adjust_fit(0,0);
pickup tiny.nib;
pos1(hair,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,hair],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+hair*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4417,7 +19498,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4431,7 +19512,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4445,7 +19526,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4459,20 +19540,20 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,3l)---z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
iff known chars.math_floor_right:
bskchar "Right floor bracket";
-beginchar(chars.math_floor_right,5.5u#,body_height#,paren_depth#); uni "non";
+beginchar(chars.math_floor_right,5.5u#,body_height#,paren_depth#); uni "0x230B";
adjust_fit(0,0);
pickup tiny.nib;
pos3(hair,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,hair],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+hair*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4486,7 +19567,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4500,7 +19581,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4514,7 +19595,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4528,7 +19609,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---obl(1r,2r,1l)---z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -4548,6 +19629,90 @@ filldraw z1l---obl(2l,1l,3l)---z3ll..z3r---z2r---z1rr..cycle;
penlabels(1,2,3); labels(1rr,3ll);
endchar;
+iff known chars.math_logical_not_double:
+bskchar "Logical not sign (double stroked)";
+beginchar(chars.math_logical_not_double,13u#, x_height#,0); uni "0x2AEC";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,0);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x1=lft x5=u; rt x3r=w-u; x2=x3r; x4=x3l;
+top y1=top y2=x_height; y3=.2x_height; y4=y5=bar_height;
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---obl(4r,2l,5r)---z5rr..z5l---obl(4l,5l,3l)---z3ll
+ ..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,3ll,4ll,5rr);
+endchar;
+
+iff known chars.math_logical_not_inv:
+bskchar "Inverted logical not sign";
+beginchar(chars.math_logical_not_inv,13u#, x_height#,0); uni "0x2310";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+rt x1=w-u; lft x3r=u; x2=x3r;
+y1=y2=.5[bar_height,x_height]; y3-y1=1/3(x2-x1); if y3<stem: y3:=stem; fi
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---z3ll..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3); labels(1rr,3ll);
+endchar;
+
+iff known chars.math_logical_not_inv_double:
+bskchar "Inverted logical not sign (double stroked)";
+beginchar(chars.math_logical_not_inv_double,13u#, x_height#,0); uni "0x2AED";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos3(rule_thickness,180);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+rt x1=rt x5=w-u; lft x3r=u; x2=x3r; x4=x3l;
+top y1=top y2=x_height; y3=.2x_height; y4=y5=bar_height;
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair); bskpoints(5,4,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---obl(4r,2l,5r)---z5rr..z5l---obl(4l,5l,3l)---z3ll
+ ..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3,4,5); labels(1rr,3ll,4ll,5rr);
+endchar;
+
+iff known chars.math_product_interior:
+bskchar "Interior product sign";
+beginchar(chars.math_product_interior,13u#, x_height#,0); uni "0x2A3C";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,0);
+lft x1=u; rt x3r=w-u; x2=x3r;
+y1=y2=math_axis; y3=h;
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---z3ll..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3); labels(1rr,3ll);
+endchar;
+
+iff known chars.math_product_interior_right:
+bskchar "Righthand interior product sign";
+beginchar(chars.math_product_interior_right,13u#, x_height#,0); uni "0x2A3D";
+italcorr x_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,-90); pos2(rule_thickness,-90); pos3(rule_thickness,180);
+rt x1=w-u; lft x3r=u; x2=x3r;
+y1=y2=math_axis; y3=h;
+x2l:=x3l;
+bskpoints(1,2,hair,hair); bskpoints(2,3,hair,hair);
+filldraw z1l---obl(2l,1l,3l)---z3ll..z3r---z2r---z1rr..cycle;
+penlabels(1,2,3); labels(1rr,3ll);
+endchar;
+
iff known chars.math_forall:
bskchar "Universal quantifier";
beginchar(chars.math_forall,11u#,asc_height#,0); uni "0x2200";
@@ -4591,6 +19756,80 @@ filldraw z1r---z2..z2r+o*down---z4r---z5l..z5rr---obl(4l,5r,6l)---obl(6l,4l,3l)
penlabels(1,2,3,4,5,6); labels(1ll,5rr);
endchar;
+iff known chars.math_exists_not:
+bskchar "Existential quantifier with negation";
+beginchar(chars.math_exists_not,10u#,asc_height#+1/3desc_depth#,1/3desc_depth#); uni "0x2204";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oblu.m; oblu.m:=oblu;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos2(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=lft x3=lft x5=u; top y1r=asc_height; bot y5l=0; y3=.5[y1,y5]+o;
+rt x2r=rt x4r=w-u; y2=y1r; y4=y5l; y2l:=y1l; y4l:=y5r;
+y6=y3; x6=x2l;
+top rt z7=(w-2.5u,h); top lft z8=(2.5u,-d);
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(2,1,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y7'l=y7'r=y1r; y8'l=y8'r=y5l; y7''l=y7''r=y1l; y8''l=y8''r=y5r;
+y3'l=y3'r=y3l; y3''l=y3''r=y3r;
+z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+z3''l=whatever[z7l,z8l]; z3''r=whatever[z7r,z8r];
+z7'l=whatever[z7l,z8l]; z7'r=whatever[z7r,z8r];
+z7''l=whatever[z7l,z8l]; z7''r=whatever[z7r,z8r];
+z8'l=whatever[z7l,z8l]; z8'r=whatever[z7r,z8r];
+z8''l=whatever[z7l,z8l]; z8''r=whatever[z7r,z8r];
+filldraw z1r---obl(7'l,1r,7l)---z7l..z7rr---tobl(7'r,7rr,2r)---z2
+ ..z2r+o*down---z4r---obl(8'r,4r,8r)---z8r..z8ll
+ ---obl(8'l,8l,5l)---z5l..z5rr---obl(8''l,5r,3'l)
+ ---obl(3'l,8''l,3l)--z3l..z3r---obl(3''l,3r,7''l)---obl(7''l,3''l,1l)
+ ---z1ll..cycle;
+infill obl(2l,7''r,6r).m---obl(6r,2l,3''r)---obl(3''r,6r,7''r)
+ ---obl(7''r,3''r,2l).m---cycle;
+infill obl(3'r,8''r,6l)---obl(6l,3'r,4l)---obl(4l,6l,8''r)---obl(8''r,4l,3'r)---cycle;
+penlabels(1,2,3,3',3'',4,5,6,7,7',7'',8,8',8''); labels(1ll,5rr,7rr,8ll);
+endchar;
+
+iff known chars.math_exists_not_vert:
+bskchar "Existential quantifier with vertical negation";
+beginchar(chars.math_exists_not_vert,10u#,asc_height#+1/3desc_depth#,1/3desc_depth#); uni "non";
+italcorr asc_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oblu.m; oblu.m:=oblu;
+oblu:=2oblu;
+pos1(rule_thickness,90); pos3(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos2(rule_thickness,0); pos4(rule_thickness,0);
+lft x1=lft x3=lft x5=u; top y1r=asc_height; bot y5l=0; y3=.5[y1,y5]+o;
+rt x2r=rt x4r=w-u; y2=y1r; y4=y5l; y2l:=y1l; y4l:=y5r;
+y6=y3; x6=x2l;
+top y7=h; top y8=-d; x7=x8=.5w;
+pos7(rule_thickness,0); pos8(rule_thickness,0);
+bskpoints(2,1,hair,hair); bskpoints(5,4,hair,hair);
+bskpoints(7,8,rule_thickness,rule_thickness);
+y7'l=y7'r=y1r; y8'l=y8'r=y5l; y7''l=y7''r=y1l; y8''l=y8''r=y5r;
+y3'l=y3'r=y3l; y3''l=y3''r=y3r;
+z3'l=whatever[z7l,z8l]; z3'r=whatever[z7r,z8r];
+z3''l=whatever[z7l,z8l]; z3''r=whatever[z7r,z8r];
+z7'l=whatever[z7l,z8l]; z7'r=whatever[z7r,z8r];
+z7''l=whatever[z7l,z8l]; z7''r=whatever[z7r,z8r];
+z8'l=whatever[z7l,z8l]; z8'r=whatever[z7r,z8r];
+z8''l=whatever[z7l,z8l]; z8''r=whatever[z7r,z8r];
+filldraw z1r---obl(7'l,1r,7l).m---z7l..z7rr---obl(7'r,7r,2r).m---z2
+ ..z2r+o*down---z4r---obl(8'r,4r,8r).m---z8r..z8ll
+ ---obl(8'l,8l,5l).m---z5l..z5rr---obl(8''l,5r,3'l).m
+ ---obl(3'l,8''l,3l).m---z3l..z3r---obl(3''l,3r,7''l).m---obl(7''l,3''l,1l).m
+ ---z1ll..cycle;
+infill obl(2l,7''r,6r).m---obl(6r,2l,3''r)---obl(3''r,6r,7''r).m
+ ---obl(7''r,3''r,2l).m---cycle;
+infill obl(3'r,8''r,6l).m---obl(6l,3'r,4l)---obl(4l,6l,8''r)---obl(8''r,4l,3'r).m---cycle;
+penlabels(1,2,3,3',3'',4,5,6,7,7',7'',8,8',8''); labels(1ll,5rr,7rr,8ll);
+endchar;
+
iff known chars.math_hardy:
bskchar "Hardy's asypmtotic equivalence sign";
beginchar(chars.math_hardy,14u#,v_center(x_height#)); uni "0x224D";
@@ -4606,6 +19845,91 @@ filldraw (z4l...z5l...z6l)..(z6r+hair*unitvector(z5-z6)..z5r..z4r)..cycle;
penlabels(1,2,3,4,5,6);
endchar;
+iff known chars.math_hardy_neg:
+bskchar "Negated Hardy's asypmtotic equivalence sign";
+beginchar(chars.math_hardy_neg,14u#,v_center(x_height#)); uni "0x226D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos2(rule_thickness,90); pos5(rule_thickness,90);
+x1-.5rule_thickness=u=w-x3; x2=x5=.5w; y2-y5=1/3(h-d); .5[y2,y5]=math_axis;
+top y1=top y3=h; .5[y1,y4]=.5[y3,y6]=math_axis; x4=x1; x6=x3;
+.5[y7,y8]=math_axis; bot y8=-d-2.5rule_thickness; .5[x7,x8]=.5w; x7=x3-2u;
+pos1(rule_thickness,angle(z1-z2)-90); pos3(rule_thickness,angle(z3-z2)+90);
+pos4(rule_thickness,angle(z4-z2)-90); pos6(rule_thickness,angle(z6-z2)+90);
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(7,8,rule_thickness,rule_thickness);
+p0:=(z1l+hair*unitvector(z2-z1)...z2l...z3l)..(z3r..z2r..z1r)..cycle;
+p1:=(z4l...z5l...z6l)..(z6r+hair*unitvector(z5-z6)..z5r..z4r)..cycle;
+p2:=z7l--z8ll;
+p3:=z8r--z7rr;
+(tim0,tim1)=subpath(0,2) of p0 intersectiontimes p2;
+(tim2-3,tim3)=subpath(3,length p1) of p1 intersectiontimes p2;
+(tim4,tim5)=subpath(0,2) of p1 intersectiontimes p2;
+(tim6,tim7)=subpath(0,2) of p1 intersectiontimes p3;
+(tim8-2,tim9)=subpath(2,length p1) of p1 intersectiontimes p3;
+(tim10,tim11)=subpath(0,2) of p0 intersectiontimes p3;
+(tim12-3,tim13)=subpath(3,length p0) of p0 intersectiontimes p3;
+(tim14-3,tim15)=subpath(3,length p0) of p0 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,(tim0,2oblu)).zpet) of p0
+ ..subpath(rundy(p2,(tim1,2oblu)),rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p1,tim2),length p1) of p1
+ ..subpath(0,rundy(p1,(tim4,2oblu)).zpet) of p1
+ ..subpath(rundy(p2,(tim5,2oblu)),infinity) of p2
+ ..subpath(0,rundy(p3,tim7).zpet) of p3
+ ..subpath(rundy(p1,tim6),rundy(p1,(tim8,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim9,2oblu)),rundy(p3,tim11).zpet) of p3
+ ..subpath(rundy(p0,tim10),rundy(p0,(tim12,2oblu)).zpet) of p0
+ ..subpath(rundy(p3,(tim13,2oblu)),infinity) of p3
+ ..subpath(0,rundy(p2,tim15).zpet) of p2
+ ..subpath(rundy(p0,tim14),length p0) of p0..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(7rr,8ll);
+endchar;
+
+iff known chars.math_logor_curly:
+bskchar "Curly logical or sign";
+beginchar(chars.math_logor_curly,10u#,.8asc_height#,0); uni "0x22CE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x0'-.5o=.5[x1,x2]=.5w; bot y0=0; y0'=2/3[y0,y1];
+rt x1=w-u; y1+.5rule_thickness=h; y2=y1;
+pos0(rule_thickness,0);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{down}z0l;
+p2:=z0r{up}..{z2-z0'}z2l;
+z3=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z3--(w,y3)));
+tim2=xpart(p2 intersectiontimes (z3--(0,y3)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{down}z0l..z0r{up}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,2); labels(0',3);
+endchar;
+
+iff known chars.math_logand_curly:
+bskchar "Curly logical and sign";
+beginchar(chars.math_logand_curly,10u#,.8asc_height#,0); uni "0x22CF";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x0'-.5o=.5[x1,x2]=.5w; top y0=h; y0'=2/3[y0,y1];
+rt x1=w-u; y1-.5rule_thickness=0; y2=y1;
+pos0(rule_thickness,0);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{up}z0l;
+p2:=z0r{down}..{z2-z0'}z2r;
+z3=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z3--(w,y3)));
+tim2=xpart(p2 intersectiontimes (z3--(0,y3)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{up}z0l..z0r{down}..{z1-z0'}z1r
+ ..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,2); labels(0',3);
+endchar;
+
iff known chars.math_precedes:
bskchar "Precedes sign";
beginchar(chars.math_precedes,12u#,v_center(x_height#)); uni "0x227A";
@@ -4625,12 +19949,55 @@ tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}..{z1-z0'}z1r
..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
..subpath(rundy(p2,tim2),infinity) of p2..cycle;
-penlabels(0,1,2); labels(0');
+penlabels(0,1,2); labels(0',3);
+endchar;
+
+iff known chars.math_precedes_not:
+bskchar "Not precedes sign";
+beginchar(chars.math_precedes_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2280";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=vround((math_axis#+.5x_height#)*hppp); x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+top rt z4=(w-2u,h); top lft z5=(2u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l;
+p4:=z0r{right}..{z1-z0'}z1r..{z0'-z1}z1l;
+p5:=z5r{z5-z4}..z5ll---z4l;
+p6:=z4l{z4-z5}..z4rr---z5r;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),infinity) of p6
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5); labels(0',4rr,5ll);
endchar;
iff known chars.math_precedes_eq:
bskchar "Precedes or equals to sign";
-beginchar(chars.math_precedes_eq,12u#,v_center(x_height#+3u#)); uni "0x227C";
+beginchar(chars.math_precedes_eq,12u#,v_center(x_height#+3u#)); uni "0x2AAF";
adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; oblu:=2oblu;
@@ -4653,6 +20020,487 @@ filldraw z3rr..z3l---z4ll..z4r---cycle;
penlabels(0,1,2,3,4); labels(0');
endchar;
+iff known chars.math_precedes_neq:
+bskchar "Precedes or not equals to sign";
+beginchar(chars.math_precedes_neq,12u#,v_center(x_height#+3u#)); uni "0x2AB1";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; lft x0=1.5u; x0'=2/3[x0,x1]; x3=x0;
+top y1=h; x1+.5rule_thickness=w-u; x2=x4=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+penlabels(0,1,2,3,4,5,6); labels(0');
+endchar;
+
+iff known chars.math_precedes_neq_vert:
+bskchar "Precedes or not equals to sign with vertical stroke";
+beginchar(chars.math_precedes_neq_vert,12u#,v_center(x_height#+3u#)); uni "non"; %"0x2AB1.vert";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; lft x0=1.5u; x0'=2/3[x0,x1]; x3=x0;
+top y1=h; x1+.5rule_thickness=w-u; x2=x4=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+bskpoints(3,4,hair,hair);
+x5=x6=.5[x3,x4]; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+oblu:=f_obl;
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+penlabels(0,1,2,3,4,5,6); labels(0');
+endchar;
+
+iff known chars.math_precedes_eq_double:
+bskchar "Precedes and double equals to sign";
+beginchar(chars.math_precedes_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB3";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=h; x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-d)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x0; x4=x6=x1; y5l=y6l=-d; y3=y4=y5+.45x_height;
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+penlabels(0,1,2,3,4,5,6); labels(0',4ll,5ll);
+endchar;
+
+iff known chars.math_precedes_not_eq_double:
+bskchar "Precedes and not double equals to sign";
+beginchar(chars.math_precedes_not_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB5";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=h; x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-d)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x0; x4=x6=x1; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top rt z7=(x2-2u,y2l-rule_thickness); .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,0); bskpoints(6,5,hair,0);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+oblu:=f_obl; oblu.more:=2f_obl;
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6rr).more---z6rr..z6l
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5ll).more---z5ll
+ ..z5r---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_precedes_sim:
+bskchar "Precedes or similar to sign";
+beginchar(chars.math_precedes_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x227E";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=h; x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+vlnka(3,4);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_precedes_not_sim:
+bskchar "Precedes and not similar to sign";
+beginchar(chars.math_precedes_not_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x22E8";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=h; x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+vlnka(3,4).nodraw;
+top y6-bot y7=.7x_height; .5[y6,y7]=.5[y3,y4]; .5[x6,x7]=.5w; x6=x4a;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+p3:=subpath(0,4) of _vlnka;
+p4:=subpath(5,infinity) of _vlnka;
+p5:=z6l---z7ll..{z6-z7}z7r;
+p6:=z7r---z6rr..{z7-z6}z6l;
+(tim3,tim4)=p3 intersectiontimes p5;
+(tim5,tim6)=p3 intersectiontimes p6;
+(tim7,tim8)=p4 intersectiontimes p6;
+(tim9,tim10)=p4 intersectiontimes p5;
+filldraw subpath(0,rundy(p3,(tim3,2oblu)).zpet) of p3
+ ..subpath(rundy(p5,(tim4,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p6,tim6).zpet) of p6
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p6,(tim8,2oblu)),infinity) of p6
+ ..subpath(0,rundy(p5,tim10).zpet) of p5
+ ..subpath(rundy(p4,tim9),infinity) of p4..cycle;
+penlabels(0,1,2,6,7); labels(0');
+endchar;
+
+iff known chars.math_precedes_approx:
+bskchar "Precedes or approximately equal to sign";
+beginchar(chars.math_precedes_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2AB7";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.4x_height+rule_thickness; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=h; x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.4x_height; y6-y3=spread;
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+vlnka(3,4); vlnka(6,7);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_precedes_not_approx:
+bskchar "Precedes and not approximately equal to sign";
+beginchar(chars.math_precedes_not_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2AB9";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+y7=y7'-.5o=.5[y8,y9]=math_axis+.4x_height+rule_thickness; lft x7=1.5u; x7'=2/3[x7,x8];
+top y8=h; x8+.5rule_thickness=w-u; x9=x8;
+pos7(rule_thickness,90);
+pos8(rule_thickness,angle(z8-z7')+90); pos9(rule_thickness,angle(z9-z7')+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+p6:=z8l{z7'-z8}..{left}z7l;
+p7:=z7r{right}..{z9-z7'}z9r;
+z12=bsktouch(p6,down,p7,up);
+tim16=xpart(p6 intersectiontimes (z12--(x12,h)));
+tim17=xpart(p7 intersectiontimes (z12--(x12,-d)));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+filldraw z9l+.5hair*unitvector(z7'-z9){z7'-z9}..{left}z7l..z7r{right}
+ ..{z8-z7'}z8r..{z7'-z8}z8l..subpath (0,rundy(p6,tim16).zpet) of p6
+ ..subpath(rundy(p7,tim17),infinity) of p7..cycle;
+penlabels(5,6,7,8,9); labels(7');
+endchar;
+
+iff known chars.math_precedes_eq_not:
+bskchar "Not precedes or equals to sign";
+beginchar(chars.math_precedes_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+y6l=y7l=math_axis-.5x_height-1.5u; x6=x0; x7=x1; bskpoints(6,7,hair,hair);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l;
+p4:=z0r{right}..{z1-z0'}z1r..{z0'-z1}z1l;
+p5:=z5r{z5-z4}..z5ll---z4l;
+p6:=z4l{z4-z5}..z4rr---z5r;
+p7:=z6l{left}..z6rr---z7r;
+p8:=z7r{right}..z7ll---z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,tim15).zpet) of p6
+ ..subpath(rundy(p7,tim16),infinity) of p7
+ ..subpath(0,rundy(p8,(tim18,f_obl)).zpet) of p8
+ ..subpath(rundy(p6,(tim17,f_obl)),infinity) of p6
+ ..subpath(0,rundy(p5,tim19).zpet) of p5
+ ..subpath(rundy(p8,tim20),infinity) of p8
+ ..subpath(0,rundy(p7,(tim22,f_obl)).zpet) of p7
+ ..subpath(rundy(p5,(tim21,f_obl)),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_precedes_eq_curved:
+bskchar "Precedes or curvy equals to sign";
+beginchar(chars.math_precedes_eq_curved,12u#,v_center(x_height#+3u#)); uni "0x227C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; lft x0=1.5u; x0'=2/3[x0,x1]; x3=x0;
+top y1=h; x1+.5rule_thickness=w-u; x2=x4+u=x1;
+bot y4=-d; y0-y3=y2-y4;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,angle(z2-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z4l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z3l..z3r{right}..{z2-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_precedes_eq_curved_not:
+bskchar "Not precedes or curved equals to sign";
+beginchar(chars.math_precedes_eq_curved_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x22E0";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); x1+.5rule_thickness=w-u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos6(rule_thickness,90); pos7(rule_thickness,angle(z2-z0')+90);
+bot y7=.5x_height-math_axis; y0-y6=y2-y7; x6=x0; x7=x1-u;
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l;
+p4:=z0r{right}..{z1-z0'}z1r..{z0'-z1}z1l;
+p5:=z5r{z5-z4}..z5ll---z4l;
+p6:=z4l{z4-z5}..z4rr---z5r;
+p7:=z6r{right}..{z2-z0'}z7r;
+p8:=z7l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,tim15).zpet) of p6
+ ..subpath(rundy(p7,tim16),infinity) of p7
+ ..subpath(0,rundy(p8,(tim18,f_obl)).zpet) of p8
+ ..subpath(rundy(p6,(tim17,f_obl)),infinity) of p6
+ ..subpath(0,rundy(p5,tim19).zpet) of p5
+ ..subpath(rundy(p8,tim20),infinity) of p8
+ ..subpath(0,rundy(p7,(tim22,f_obl)).zpet) of p7
+ ..subpath(rundy(p5,(tim21,f_obl)),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_eq_precedes:
+bskchar "Equals to or precedes sign";
+beginchar(chars.math_eq_precedes,12u#,v_center(x_height#+3u#)); uni "0x22DE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis-1.5u; lft x0=1.5u; x0'=2/3[x0,x1]; x3=x0;
+bot y2=-d; x1+.5rule_thickness=w-u; x2=x4+u=x1;
+top y4=h; y0-y3=y1-y4;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,angle(z1-z0')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}
+ ..{z1-z0'}z1r..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z4l+.5hair*unitvector(z0'-z1){z0'-z1}..{left}z3l..z3r{right}..{z1-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_precedes_double:
+bskchar "Double precedes sign";
+beginchar(chars.math_precedes_double,15u#,v_center(x_height#)); uni "0x2ABB";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=y4=y4'-.5o=.5[y5,y6]=math_axis; lft x0=1.5u; x0'=2/3[x0,x1];
+top y1=top y5=h; x1+.5rule_thickness=w-4.5u; x2=x1;
+lft x4=7.5u; x4'=2/3[x4,x5]; x5+.5rule_thickness=w-u; x6=x5;
+pos0(rule_thickness,90); pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos4(rule_thickness,90); pos5(rule_thickness,angle(z5-z4')+90); pos6(rule_thickness,angle(z6-z4')+90);
+p1:=z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r;
+p3:=z5l{z4'-z5}..{left}z4l;
+p4:=z4r{right}..{z6-z4'}z6r;
+z3=bsktouch(p1,down,p2,up);
+z7=bsktouch(p3,down,p4,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+tim3=xpart(p3 intersectiontimes (z7--(x7,h)));
+tim4=xpart(p4 intersectiontimes (z7--(x7,-d)));
+filldraw z2l+.5hair*unitvector(z0'-z2){z0'-z2}..{left}z0l..z0r{right}..{z1-z0'}z1r
+ ..{z0'-z1}z1l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z6l+.5hair*unitvector(z4'-z2){z4'-z6}..{left}z4l..z4r{right}..{z5-z4'}z5r
+ ..{z4'-z5}z5l..subpath (0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+penlabels(0,1,2,4,5,6); labels(0',3,4',7);
+endchar;
+
iff known chars.math_follows:
bskchar "Follows sign";
beginchar(chars.math_follows,12u#,v_center(x_height#)); uni "0x227B";
@@ -4675,9 +20523,52 @@ filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z
penlabels(0,1,2); labels(0');
endchar;
+iff known chars.math_follows_not:
+bskchar "Not follows sign";
+beginchar(chars.math_follows_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x2281";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=vround((math_axis#+.5x_height#)*hppp); x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+top rt z4=(w-2u,h); top lft z5=(2u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l;
+p4:=z0r{left}..{z1-z0'}z1l..{z0'-z1}z1r;
+p5:=z5r---z4rr..{z5-z4}z4l;
+p6:=z4l---z5ll..{z4-z5}z5r;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),infinity) of p6
+ ..subpath(0,rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p6,(tim12,.5f_obl)),rundy(p6,(tim14,.5f_obl)).zpet) of p6
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5); labels(0',4rr,5ll);
+endchar;
+
iff known chars.math_follows_eq:
bskchar "Follows or equals to sign";
-beginchar(chars.math_follows_eq,12u#,v_center(x_height#+3u#)); uni "0x227D";
+beginchar(chars.math_follows_eq,12u#,v_center(x_height#+3u#)); uni "0x2AB0";
adjust_fit(0,0);
pickup tiny.nib;
numeric tim[]; oblu:=2oblu;
@@ -4700,6 +20591,531 @@ filldraw z3rr..z3l---z4ll..z4r---cycle;
penlabels(0,1,2,3,4); labels(0');
endchar;
+iff known chars.math_follows_neq:
+bskchar "Follows or not equals to sign";
+beginchar(chars.math_follows_neq,12u#,v_center(x_height#+3u#)); uni "0x2AB2";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; rt x0=w-1.5u; x0'=2/3[x0,x1]; x3=x1; x4=x0;
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+.5[x5,x6]=.5[x3,x4]; .5[y5,y6]=y3; x6-x5=.75(y6-y5)=3u;
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_neq_vert:
+bskchar "Follows or not equals to sign with vertical stroke";
+beginchar(chars.math_follows_neq_vert,12u#,v_center(x_height#+3u#)); uni "non"; %"0x2AB2.vert";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; rt x0=w-1.5u; x0'=2/3[x0,x1]; x3=x1; x4=x0;
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z10=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z10--(x10,h)));
+tim2=xpart(p2 intersectiontimes (z10--(x10,-d)));
+y3l=y4l=-d; bskpoints(3,4,hair,hair);
+x5=x6=.5[x3,x4]; .5[y5,y6]=y3; .75(y6-y5)=3u;
+pos5(rule_thickness,0); pos6(rule_thickness,0);
+bskpoints(5,6,rule_thickness,rule_thickness);
+y6'r=y6'l=y4r; z6'r=whatever[z6r,z5r]; z6'l=whatever[z6l,z5l];
+y5'r=y5'l=y4l; z5'r=whatever[z6r,z5r]; z5'l=whatever[z6l,z5l];
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+oblu:=f_obl;
+filldraw z3rr..z3l---obl(5'l,3l,5l)---z5l..z5rr---obl(5'r,5r,4l)---z4ll..z4r---
+ obl(6'r,4r,6r)---z6r..z6ll---obl(6'l,6l,3r)---cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_eq_double:
+bskchar "Follows and double equals to sign";
+beginchar(chars.math_follows_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB4";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-d)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x1; x4=x6=x0; y5l=y6l=-d; y3=y4=y5+.45x_height;
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(6,5,hair,0);
+penlabels(0,1,2,3,4,5,6); labels(0',4ll,5ll);
+endchar;
+
+iff known chars.math_follows_not_eq_double:
+bskchar "Follows and not double equals to sign";
+beginchar(chars.math_follows_not_eq_double,12u#,v_center(1.45x_height#+3u#)); uni "0x2AB6";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u+.225x_height; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z9=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z9--(x9,h)));
+tim2=xpart(p2 intersectiontimes (z9--(x9,-d)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+x3=x5=x1; x4=x6=x0; y5l=y6l=-d; y3=y4=y5+.45x_height;
+top y7=y2l-rule_thickness; x8=x2+2u; .5[x8,x7]=.5w; .5[y8,y7]=.5[y3,y5];
+pos7(rule_thickness,angle(z8-z7)+90); pos8(rule_thickness,angle(z8-z7)+90);
+bskpoints(3,4,hair,0); bskpoints(6,5,hair,0);
+bskpoints(7,8,rule_thickness,rule_thickness);
+z3'=whatever[z7l,z8l]=whatever[z3r,z4r];
+z4'=whatever[z7r,z8r]=whatever[z3r,z4r];
+z5'=whatever[z7r,z8r]=whatever[z3l,z4l];
+z6'=whatever[z7r,z8r]=whatever[z5r,z6r];
+z7'=whatever[z7r,z8r]=whatever[z5l,z6l];
+z8'=whatever[z7l,z8l]=whatever[z5l,z6l];
+z9'=whatever[z7l,z8l]=whatever[z5r,z6r];
+z10'=whatever[z7l,z8l]=whatever[z3l,z4l];
+oblu:=f_obl; oblu.more:=2f_obl;
+if y7rr<y3r: y7rr:=y7r; x7rr:=x7r; fi
+if y8ll>y5l: y8ll:=y8l; x8ll:=x8l; fi
+filldraw z3rr---obl(3',3r,7l)---z7l..z7rr---tobl(4',7rr,4r).more---z4r
+ ..z4ll---obl(5',4l,6')---obl(6',5',6rr).more---z6rr..z6l
+ ---obl(7',6l,8r)---z8r..z8ll---tobl(8',8ll,5ll).more---z5ll
+ ..z5r---obl(9',5r,10')---obl(10',9',3l).more---z3l..cycle;
+penlabels(0,1,2,3,4,5,6,7,8); labels(0',4ll,5ll,7rr,8ll,3',4',5',6',7',8',9',10');
+endchar;
+
+iff known chars.math_follows_sim:
+bskchar "Follows or similar to sign";
+beginchar(chars.math_follows_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x227F";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+vlnka(3,4);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_follows_not_sim:
+bskchar "Follows and not similar to sign";
+beginchar(chars.math_follows_not_sim,12u#,v_center(1.5x_height#+2rule_thickness#)); uni "0x22E9";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.25x_height+rule_thickness; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.5x_height;
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+vlnka(3,4).nodraw;
+top y6-bot y7=.7x_height; .5[y6,y7]=.5[y3,y4]; .5[x6,x7]=.5w; x6=x4a;
+pos6(rule_thickness,angle(z7-z6)+90); pos7(rule_thickness,angle(z7-z6)+90);
+bskpoints(6,7,rule_thickness,rule_thickness);
+p3:=subpath(0,4) of _vlnka;
+p4:=subpath(5,infinity) of _vlnka;
+p5:=z6l---z7ll..{z6-z7}z7r;
+p6:=z7r---z6rr..{z7-z6}z6l;
+(tim3,tim4)=p3 intersectiontimes p5;
+(tim5,tim6)=p3 intersectiontimes p6;
+(tim7,tim8)=p4 intersectiontimes p6;
+(tim9,tim10)=p4 intersectiontimes p5;
+filldraw subpath(0,rundy(p3,(tim3,2oblu)).zpet) of p3
+ ..subpath(rundy(p5,(tim4,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p6,tim6).zpet) of p6
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p6,(tim8,2oblu)),infinity) of p6
+ ..subpath(0,rundy(p5,tim10).zpet) of p5
+ ..subpath(rundy(p4,tim9),infinity) of p4..cycle;
+penlabels(0,1,2,6,7); labels(0');
+endchar;
+
+iff known chars.math_follows_approx:
+bskchar "Follows or approximately equal to sign";
+beginchar(chars.math_follows_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2AB8";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[], spread; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+.4x_height+rule_thickness; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=h; x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+bot y3=-d; spread:=.4x_height; y6-y3=spread;
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+vlnka(3,4); vlnka(6,7);
+penlabels(0,1,2); labels(0');
+endchar;
+
+iff known chars.math_follows_not_approx:
+bskchar "Follows and not approximately equal to sign";
+beginchar(chars.math_follows_not_approx,12u#,v_center(1.8x_height#+2rule_thickness#)); uni "0x2ABA";
+italcorr h#*slant;
+adjust_fit(0,0);
+numeric spread;
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+spread:=.4x_height;
+bot y1=-d; y3-y1=spread;
+top y5-bot y6=x_height; .5[y5,y6]=y3; .5[x5,x6]=.5w; z5=z6+whatever*dir60;
+y7=y7'-.5o=.5[y8,y9]=math_axis+.4x_height+rule_thickness; rt x7=w-1.5u; x7'=2/3[x7,x8];
+top y8=h; x8-.5rule_thickness=u; x9=x8;
+pos7(rule_thickness,90);
+pos8(rule_thickness,angle(z8-z7')+90); pos9(rule_thickness,angle(z9-z7')+90);
+pos5(rule_thickness,angle(z6-z5)+90); pos6(rule_thickness,angle(z6-z5)+90);
+bskpoints(5,6,rule_thickness,rule_thickness);
+vlnka(1,2).nodraw;
+p0:=subpath(0,4) of _vlnka;
+p1:=subpath(5,infinity) of _vlnka;
+vlnka(3,4).nodraw;
+p2:=subpath(0,4) of _vlnka;
+p3:=subpath(5,infinity) of _vlnka;
+p4:=z5l---z6ll..{z5-z6}z6r;
+p5:=z6r---z5rr..{z6-z5}z5l;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p0 intersectiontimes p5;
+(tim4,tim5)=p1 intersectiontimes p5;
+(tim6,tim7)=p1 intersectiontimes p4;
+(tim8,tim9)=p2 intersectiontimes p4;
+(tim10,tim11)=p2 intersectiontimes p5;
+(tim12,tim13)=p3 intersectiontimes p5;
+(tim14,tim15)=p3 intersectiontimes p4;
+p7:=z8r{z7'-z8}..{right}z7l;
+p8:=z7r{left}..{z9-z7'}z9l;
+z12=bsktouch(p7,down,p8,up);
+tim16=xpart(p7 intersectiontimes (z12--(x12,h)));
+tim17=xpart(p8 intersectiontimes (z12--(x12,-d)));
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p0,tim2),infinity) of p0
+ ..subpath(0,rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p5,(tim5,f_obl)),rundy(p5,(tim11,f_obl)).zpet) of p5
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p5,tim13),infinity) of p5
+ ..subpath(0,rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim14),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p4,(tim9,f_obl)),rundy(p4,(tim7,f_obl)).zpet) of p4
+ ..subpath(rundy(p1,tim6),infinity) of p1..cycle;
+filldraw z9r+.5hair*unitvector(z7'-z9){z7'-z9}..{right}z7l..z7r{left}..{z8-z7'}z8l
+ ..{z7'-z8}z8r..subpath (0,rundy(p7,tim16).zpet) of p7
+ ..subpath(rundy(p8,tim17),infinity) of p8..cycle;
+penlabels(5,6,7,8,9); labels(7');
+endchar;
+
+iff known chars.math_follows_eq_not:
+bskchar "Not follows or equals to sign";
+beginchar(chars.math_follows_eq_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+y6l=y7l=math_axis-.5x_height-1.5u; x6=x0; x7=x1; bskpoints(6,7,hair,hair);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l;
+p4:=z0r{left}..{z1-z0'}z1l..{z0'-z1}z1r;
+p5:=z5r---z4rr..{z5-z4}z4l;
+p6:=z4l---z5ll..{z4-z5}z5r;
+p7:=z6l{right}..z6rr---z7r;
+p8:=z7r{left}..z7ll---z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,(tim15,f_obl)).zpet) of p6
+ ..subpath(rundy(p7,(tim16,f_obl)),infinity) of p7
+ ..subpath(0,rundy(p8,tim18).zpet) of p8
+ ..subpath(rundy(p6,tim17),infinity) of p6
+ ..subpath(0,rundy(p5,(tim19,f_obl)).zpet) of p5
+ ..subpath(rundy(p8,(tim20,f_obl)),infinity) of p8
+ ..subpath(0,rundy(p7,tim22).zpet) of p7
+ ..subpath(rundy(p5,tim21),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_follows_eq_curved:
+bskchar "Follows or curvy equals to sign";
+beginchar(chars.math_follows_eq_curved,12u#,v_center(x_height#+3u#)); uni "0x227D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; rt x0=w-1.5u; x0'=2/3[x0,x1]; x3=x0;
+top y1=h; x1-.5rule_thickness=u; x2=x4-u=x1;
+bot y4=-d; y0-y3=y2-y4;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,270); pos4(rule_thickness,angle(z2-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z4l+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z3l..z3r{left}..{z2-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_eq_curved_not:
+bskchar "Not follows or curved equals to sign";
+beginchar(chars.math_follows_eq_curved_not,12u#,v_center(.75(body_height#+desc_depth#))); uni "0x22E1";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis+1.5u; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=vround((math_axis#+.5x_height#+1.5u#)*hppp); x1-.5rule_thickness=u; x2=x1;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos6(rule_thickness,90); pos7(rule_thickness,angle(z2-z0')-90);
+bot y7=.5x_height-math_axis; y0-y6=y2-y7; x6=x0; x7=x1+u;
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+top rt z4=(w-3u,h); top lft z5=(3u,-d);
+pos4(rule_thickness,angle(z5-z4)+90); pos5(rule_thickness,angle(z5-z4)+90);
+bskpoints(4,5,rule_thickness,rule_thickness);
+p3:=z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l;
+p4:=z0r{left}..{z1-z0'}z1l..{z0'-z1}z1r;
+p5:=z5r---z4rr..{z5-z4}z4l;
+p6:=z4l---z5ll..{z4-z5}z5r;
+p7:=z6r{left}..{z2-z0'}z7r;
+p8:=z7l+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z6l;
+(tim3,tim4)=p3 intersectiontimes p6;
+(tim5,tim6)=p3 intersectiontimes p5;
+(tim7,tim8)=p4 intersectiontimes p5;
+(tim9,tim10)=p4 intersectiontimes p6;
+(tim11,tim12)=p1 intersectiontimes p6;
+(tim13,tim14)=p2 intersectiontimes p6;
+(tim15,tim16)=p6 intersectiontimes p7;
+(tim17,tim18)=p6 intersectiontimes p8;
+(tim19,tim20)=p5 intersectiontimes p8;
+(tim21,tim22)=p5 intersectiontimes p7;
+filldraw subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p6,tim4),rundy(p6,(tim15,f_obl)).zpet) of p6
+ ..subpath(rundy(p7,(tim16,f_obl)),infinity) of p7
+ ..subpath(0,rundy(p8,tim18).zpet) of p8
+ ..subpath(rundy(p6,tim17),infinity) of p6
+ ..subpath(0,rundy(p5,(tim19,f_obl)).zpet) of p5
+ ..subpath(rundy(p8,(tim20,f_obl)),infinity) of p8
+ ..subpath(0,rundy(p7,tim22).zpet) of p7
+ ..subpath(rundy(p5,tim21),rundy(p5,tim6).zpet) of p5
+ ..subpath(rundy(p3,tim5),infinity) of p3
+ ..subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p5,tim8),infinity) of p5
+ ..subpath(0,rundy(p6,tim10).zpet) of p6
+ ..subpath(rundy(p4,tim9),infinity) of p4
+ ..subpath (0,rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p2,tim13),infinity) of p2..cycle;
+penlabels(0,1,2,3,4,5,6,7); labels(0',4rr,5ll,6rr,7ll);
+endchar;
+
+iff known chars.math_eq_follows:
+bskchar "Equals to or follows sign";
+beginchar(chars.math_eq_follows,12u#,v_center(x_height#+3u#)); uni "0x22DF";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=math_axis-1.5u; rt x0=w-1.5u; x0'=2/3[x0,x1]; x3=x0;
+bot y2=-d; x1-.5rule_thickness=u; x2=x4-u=x1;
+top y4=h; y0-y3=y1-y4;
+pos0(rule_thickness,90);
+pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos3(rule_thickness,270); pos4(rule_thickness,angle(z1-z0')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+z5=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z5--(x5,h)));
+tim2=xpart(p2 intersectiontimes (z5--(x5,-d)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z4l+.5hair*unitvector(z0'-z1){z0'-z1}..{right}z3l..z3r{left}..{z1-z0'}z4r..cycle;
+penlabels(0,1,2,3,4); labels(0');
+endchar;
+
+iff known chars.math_follows_double:
+bskchar "Double follows sign";
+beginchar(chars.math_follows_double,15u#,v_center(x_height#)); uni "0x2ABC";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+y0=y0'-.5o=.5[y1,y2]=y4=y4'-.5o=.5[y5,y6]=math_axis; rt x0=w-1.5u; x0'=2/3[x0,x1];
+top y1=top y5=h; x1-.5rule_thickness=4.5u; x2=x1;
+rt x4=w-7.5u; x4'=2/3[x4,x5]; x5-.5rule_thickness=u; x6=x5;
+pos0(rule_thickness,90); pos1(rule_thickness,angle(z1-z0')+90); pos2(rule_thickness,angle(z2-z0')+90);
+pos4(rule_thickness,90); pos5(rule_thickness,angle(z5-z4')+90); pos6(rule_thickness,angle(z6-z4')+90);
+p1:=z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l;
+p3:=z5r{z4'-z5}..{right}z4l;
+p4:=z4r{left}..{z6-z4'}z6l;
+z3=bsktouch(p1,down,p2,up);
+z7=bsktouch(p3,down,p4,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+tim3=xpart(p3 intersectiontimes (z7--(x7,h)));
+tim4=xpart(p4 intersectiontimes (z7--(x7,-d)));
+filldraw z2r+.5hair*unitvector(z0'-z2){z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l
+ ..{z0'-z1}z1r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+filldraw z6r+.5hair*unitvector(z4'-z6){z4'-z6}..{right}z4l..z4r{left}..{z5-z4'}z5l
+ ..{z4'-z5}z5r..subpath (0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p4,tim4),infinity) of p4..cycle;
+penlabels(0,1,2,4,5,6); labels(0',3,4',7);
+endchar;
+
+iff known chars.math_precedes_relation:
+bskchar "Precedes under relation sign";
+beginchar(chars.math_precedes_relation,12u#,v_center(1.3x_height#)); uni "0x22B0";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos0(rule_thickness,90);
+pos1(rule_thickness,180); pos1'(rule_thickness,-90);
+pos2(rule_thickness,0); pos2'(rule_thickness,-90);
+y0=y0'-.5o=.5[y1,y2]=.5[y1',y2']=math_axis; lft x0=1.5u; x0'=.85[x0,x1];
+top y1=h-.25x_height; x1+.5rule_thickness=w-u; x2=x1;
+top y1'l=h; x1'=x2'=x1r-rule_thickness;
+p1:=z1'l{right}..z1l{z0'-z1}..{left}z0l;
+p2:=z0r{right}..{z2-z0'}z2r..{left}z2'r;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+filldraw z2'l{right}..z2l{z0'-z2}..{left}z0l..z0r{right}..{z1-z0'}z1r..{left}z1'r
+ ..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,1',2,2'); labels(0',3);
+endchar;
+
+iff known chars.math_follows_relation:
+bskchar "Follows under relation sign";
+beginchar(chars.math_follows_relation,12u#,v_center(1.3x_height#)); uni "0x22B1";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+pos0(rule_thickness,90);
+pos1(rule_thickness,180); pos1'(rule_thickness,90);
+pos2(rule_thickness,0); pos2'(rule_thickness,90);
+y0=y0'-.5o=.5[y1,y2]=.5[y1',y2']=math_axis; rt x0=w-1.5u; x0'=.85[x0,x1];
+top y1=h-.25x_height; x1-.5rule_thickness=u; x2=x1;
+top y1'r=h; x1'=x2'=x1l+rule_thickness;
+p1:=z1'r{left}..z1r{z0'-z1}..{right}z0l;
+p2:=z0r{left}..{z2-z0'}z2l..{right}z2'l;
+z3=bsktouch(p1,down,p2,up);
+tim1=xpart(p1 intersectiontimes (z3--(x3,h)));
+tim2=xpart(p2 intersectiontimes (z3--(x3,-d)));
+filldraw z2'r{left}..z2r{z0'-z2}..{right}z0l..z0r{left}..{z1-z0'}z1l..{right}z1'l
+ ..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(0,1,1',2,2'); labels(0');
+endchar;
+
iff known chars.math_angle_left:
bskchar "Left angle bracket";
beginchar(chars.math_angle_left,6u#,body_height#,paren_depth#); uni "0x27E8";
@@ -4950,7 +21366,7 @@ endchar;
iff known chars.math_laplace:
bskchar "Laplace operator";
-beginchar(chars.math_laplace,13u#,cap_height#,0); uni "non";
+beginchar(chars.math_laplace,13u#,cap_height#,0); uni "0x2206";
adjust_fit(0,0);
pickup tiny.nib;
numeric alpha, right_stem, left_stem, old_jut; oblu:=2oblu;
@@ -4998,7 +21414,7 @@ endchar;
iff known chars.math_dalembert:
bskchar "D'Alembert operator";
-beginchar(chars.math_dalembert,13u#,.9cap_height#,0); uni "non";
+beginchar(chars.math_dalembert,13u#,.9cap_height#,0); uni "0x29E0";
adjust_fit(0,0);
pickup tiny.nib;
pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,0); pos4(cap_hair,0);
@@ -5097,33 +21513,280 @@ infill subpath(rundy(p3,tim6),rundy(p3,tim8).zpet) of p3..subpath(rundy(p1,tim7)
penlabels(1,2,3,4,5,6);
endchar;
+iff known chars.math_null_set:
+bskchar "Null set";
+beginarithchar(chars.math_null_set); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2.5oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,90); pos3(rule_thickness,180); pos4(rule_thickness,270);
+lft x1l=u; rt x3l=w-u; y1=y3=.5y4; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h;
+top z5=(x1,-apex_o); bot z6=(x3,h+o);
+pos5(rule_thickness,angle(z5-z6)+90); pos6(rule_thickness,angle(z5-z6)+90);
+z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l];
+p0:=z1l{down}..z2l..z3l..z4l..{down}z1l;
+p1:=z1r{up}..z4r..z3r..z2r..{up}z1r;
+p2:=z5r--z0r--z6r;
+p3:=z6l--z0l--z5l;
+(tim0,tim1-.5)=p0 intersectiontimes subpath(.5,infinity) of p2;
+(tim2,tim3)=(subpath (0,1) of p3) intersectiontimes p0;
+(tim4-1,tim5)=(subpath (1,infinity) of p3) intersectiontimes p0;
+(tim6,tim7)=p2 intersectiontimes p0;
+filldraw subpath (rundy(p0,tim7),rundy(p0,tim0).zpet) of p0..subpath(rundy(p2,tim1),infinity) of p2{z6-z5}
+ ..subpath(0,rundy(p3,(tim2,3/4oblu)).zpet) of p3..subpath(rundy(p0,tim3),infinity) of p0
+ ..subpath(0,rundy(p0,tim5).zpet) of p0..subpath(rundy(p3,tim4),infinity) of p3
+ ..subpath(0,rundy(p2,tim6).zpet) of p2..cycle;
+numeric tim[];
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p1 intersectiontimes subpath(0,1) of p2;
+infill subpath(rundy(p2,tim4),rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1..cycle;
+(tim5,tim6)=p1 intersectiontimes p3;
+(tim7,tim8-1)=p1 intersectiontimes subpath(1,infinity) of p3;
+infill subpath(rundy(p3,tim6),rundy(p3,tim8).zpet) of p3..subpath(rundy(p1,tim7),infinity) of p1
+ ..subpath(0,rundy(p1,tim5).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
iff known chars.arrow_double_right:
bskchar "Double rightward arrow";
beginchar(chars.arrow_double_right,15u#,v_center(5u#)); uni "0x21D2";
adjust_fit(0,0);
pickup tiny.nib;
pos1(rule_thickness,90);
-rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=4rule_thickness;
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
filldraw dvojsipka(0,1,2,3)..cycle;
endchar;
+iff known chars.arrow_double_right_long:
+bskchar "Long double rightward arrow";
+beginchar(chars.arrow_double_right_long,22u#,v_center(5u#)); uni "0x27F9";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+filldraw dvojsipka(0,1,2,3)..cycle;
+endchar;
+
+iff known chars.arrow_double_right_not:
+bskchar "Double rightward arrow with negation";
+beginchar(chars.arrow_double_right_not,15u#,v_center(7u#)); uni "0x21CF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+.5[x4,x5]=.5[x0c,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,2,3);
+p2=z4l--z5ll;
+p1=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap5,(tim6,2oblu)),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,(tim11,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap3,(tim10,2oblu)),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,(tim15,2oblu)).zpet) of p1
+ ..subpath(rundy(bskap4,(tim14,2oblu)),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_right_not_vert:
+bskchar "Double rightward arrow with vertical negation";
+beginchar(chars.arrow_double_right_not_vert,15u#,v_center(7u#)); uni "0x2903";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+x4=x5=.5[x0c,x1]; .5[y4,y5]=y0; top y5=h;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,2,3);
+p2=z4l--z5ll;
+p1=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(bskap5,tim6),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(bskap3,tim10),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(bskap4,tim14),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+endchar;
+
iff known chars.arrow_double_left:
bskchar "Double leftward arrow";
beginchar(chars.arrow_double_left,15u#,v_center(5u#)); uni "0x21D0";
adjust_fit(0,0);
pickup tiny.nib;
pos1(rule_thickness,-90);
-lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=4rule_thickness;
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
filldraw dvojsipka(0,1,3,2)..cycle;
endchar;
+iff known chars.arrow_double_left_long:
+bskchar "Long double leftward arrow";
+beginchar(chars.arrow_double_left_long,22u#,v_center(5u#)); uni "0x27F8";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+filldraw dvojsipka(0,1,3,2)..cycle;
+endchar;
+
+iff known chars.arrow_double_left_not:
+bskchar "Double leftward arrow with negation";
+beginchar(chars.arrow_double_left_not,15u#,v_center(7u#)); uni "0x21CD";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+.5[x4,x5]=.5[x0c,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,3,2);
+p1=z4l--z5ll;
+p2=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,(tim7,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap5,(tim6,2oblu)),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,(tim11,2oblu)).zpet) of p2
+ ..subpath(rundy(bskap3,(tim10,2oblu)),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,(tim15,2oblu)).zpet) of p1
+ ..subpath(rundy(bskap4,(tim14,2oblu)),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_left_not_vert:
+bskchar "Double leftward arrow with vertical negation";
+beginchar(chars.arrow_double_left_not_vert,15u#,v_center(7u#)); uni "0x2902";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+x4=x5=.5[x0c,x1]; .5[y4,y5]=y0; top y5=h;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+sipka_points(0,1); dvojsipka_points(0,1,3,2);
+p1=z4l--z5ll;
+p2=z5r---z4rr..{z5-z4}z4l;
+(tim0,tim1)=bskap3 intersectiontimes p1;
+(tim2,tim3)=bskap6 intersectiontimes p1;
+(tim4,tim5)=bskap5 intersectiontimes p1;
+(tim6,tim7)=bskap5 intersectiontimes p2;
+(tim8,tim9)=bskap6 intersectiontimes p2;
+(tim10,tim11)=bskap3 intersectiontimes p2;
+(tim12,tim13)=bskap4 intersectiontimes p2;
+(tim14,tim15)=bskap4 intersectiontimes p1;
+filldraw z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim4).zpet) of bskap5
+ ..subpath(rundy(p1,tim5),infinity) of p1{z5-z4}
+ ..subpath(0,rundy(p2,tim7).zpet) of p2
+ ..subpath(rundy(bskap5,tim6),infinity) of bskap5
+ ..subpath(0,rundy(bskap6,tim8).zpet) of bskap6
+ ..subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(bskap3,tim10),infinity) of bskap3
+ ..subpath(0,rundy(bskap4,tim12).zpet) of bskap4
+ ..subpath(rundy(p2,tim13),infinity) of p2
+ ..subpath(0,rundy(p1,tim15).zpet) of p1
+ ..subpath(rundy(bskap4,tim14),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1&cycle;
+infill subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim0).zpet) of bskap3
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(bskap6,tim2),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0..cycle;
+penlabels(2,3,4,5); labels(4rr,5ll);
+endchar;
+
iff known chars.arrow_double_up:
bskchar "Double upward arrow";
beginchar(chars.arrow_double_up,9u#,asc_height#,0); uni "0x21D1";
adjust_fit(0,0);
pickup tiny.nib;
pos1(rule_thickness,180);
-x0=x1r=.5w-o=.5[x2,x3]; x3-x2=4rule_thickness;
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=dbf;
top y0=h+apex_o; bot y1=-d; y2=y3=y1;
filldraw dvojsipka(0,1,2,3)..cycle;
labels(1rr);
@@ -5135,7 +21798,7 @@ beginchar(chars.arrow_double_down,9u#,asc_height#,0); uni "0x21D3";
adjust_fit(0,0);
pickup tiny.nib;
pos1(rule_thickness,0);
-x0=x1r=.5w+o=.5[x2,x3]; x3-x2=4rule_thickness;
+x0=x1r=.5w+o=.5[x2,x3]; x3-x2=dbf;
top y0=-d-apex_o; bot y1=h; y2=y3=y1;
filldraw dvojsipka(0,1,3,2)..cycle;
labels(1rr);
@@ -5148,7 +21811,7 @@ adjust_fit(0,0);
pickup tiny.nib;
numeric oldtim[], tim[], oldat, ooldat; path oldap[];
pos1(rule_thickness,0); pos101(rule_thickness,180);
-x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=4rule_thickness;
+x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=dbf;
top y0=-d-apex_o; bot y1=h; y2=y3=y1;
x102=x2; x103=x3; y102=y103=y0q; bot y100=h+apex_o; top y101=-d;
sipka_points(0,1); dvojsipka_points(0,1,3,2); oldat:=bskat;
@@ -5197,7 +21860,57 @@ adjust_fit(0,0);
pickup tiny.nib;
numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[];
pos1(rule_thickness,90); pos101(rule_thickness,-90);
-y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=4rule_thickness;
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+sipka_points(0,1); dvojsipka_points(0,1,2,3); oldat:=bskat;
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,103,102); ooldat:=bskat;
+ls=.5w-2u; rs=.5w+2u;
+tim1=xpart(bskap4 intersectiontimes ((ls,0)--(ls,math_axis)));
+tim2=xpart(bskap5 intersectiontimes ((ls,math_axis)--(ls,h)));
+tim3=xpart(oldap4 intersectiontimes ((rs,math_axis)--(rs,h)));
+tim4=xpart(oldap5 intersectiontimes ((rs,0)--(rs,math_axis)));
+tim5=xpart(bskap6 intersectiontimes ((ls,math_axis)--(ls,h)));
+tim6=xpart(bskap3 intersectiontimes ((ls,0)--(ls,math_axis)));
+tim7=xpart(oldap6 intersectiontimes ((rs,0)--(rs,math_axis)));
+tim8=xpart(oldap3 intersectiontimes ((rs,math_axis)--(rs,h)));
+filldraw subpath(tim1,rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),tim2) of bskap5
+ hide(bskat:=oldat)
+ --subpath(tim3,rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),tim4) of oldap5--cycle;
+bskat:=ooldat;
+infill subpath(tim5,rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0
+ ..subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),tim6) of bskap3
+ --subpath(tim7,rundy(oldap6,oldtim18).zpet) of oldap6
+ ..subpath(rundy(oldap0,oldtim17),infinity) of oldap0
+ ..subpath(0,rundy(oldap1,oldtim11).zpet) of oldap1
+ ..subpath(rundy(oldap3,oldtim12),tim8) of oldap3..cycle;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_double_left_right_long:
+bskchar "Long double left-right arrow";
+beginchar(chars.arrow_double_left_right_long,25u#,v_center(5u#)); uni "0x27FA";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
lft x0=w-u; rt x1=u; x2=x3=x1;
y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
sipka_points(0,1); dvojsipka_points(0,1,2,3); oldat:=bskat;
@@ -5240,6 +21953,747 @@ infill subpath(tim5,rundy(bskap6,bsktim18).zpet) of bskap6
penlabels(2,3,102,103); labels(1rr);
endchar;
+iff known chars.arrow_left_right_black:
+bskchar "Black left-right arrow";
+beginchar(chars.arrow_left_right_black,18u#,v_center(5u#)); uni "0x2B0C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+sipka_points(0,1); dvojsipka_points(0,1,2,3); oldat:=bskat;
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,103,102); ooldat:=bskat;
+ls=.5w-2u; rs=.5w+2u;
+tim1=xpart(bskap4 intersectiontimes ((ls,0)--(ls,math_axis)));
+tim2=xpart(bskap5 intersectiontimes ((ls,math_axis)--(ls,h)));
+tim3=xpart(oldap4 intersectiontimes ((rs,math_axis)--(rs,h)));
+tim4=xpart(oldap5 intersectiontimes ((rs,0)--(rs,math_axis)));
+tim5=xpart(bskap6 intersectiontimes ((ls,math_axis)--(ls,h)));
+tim6=xpart(bskap3 intersectiontimes ((ls,0)--(ls,math_axis)));
+tim7=xpart(oldap6 intersectiontimes ((rs,0)--(rs,math_axis)));
+tim8=xpart(oldap3 intersectiontimes ((rs,math_axis)--(rs,h)));
+filldraw subpath(tim1,rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),tim2) of bskap5
+ hide(bskat:=oldat)
+ --subpath(tim3,rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),tim4) of oldap5--cycle;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_double_left_right_not:
+bskchar "Double left-right arrow with negation";
+beginchar(chars.arrow_double_left_right_not,18u#,v_center(7u#)); uni "0x21CE";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+.5[x4,x5]=.5[x0,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=z4l---z5ll..{z4-z5}z5r;
+p2:=z5r---z4rr..{z5-z4}z4l;
+sipka_points(0,1); dvojsipka_points(0,1,2,3); oldat:=bskat;
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,103,102); ooldat:=bskat;
+ls=.5w-2u; rs=.5w+2u;
+(tim1,tim11)=bskap4 intersectiontimes p1;
+(tim2,tim12)=bskap5 intersectiontimes p1;
+(tim3,tim13)=oldap4 intersectiontimes p2;
+(tim4,tim14)=oldap5 intersectiontimes p2;
+(tim5,tim15)=bskap6 intersectiontimes p1;
+(tim6,tim16)=bskap3 intersectiontimes p1;
+(tim7,tim17)=oldap6 intersectiontimes p2;
+(tim8,tim18)=oldap3 intersectiontimes p2;
+filldraw subpath(rundy(bskap4,(tim1,2oblu)),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim2).zpet) of bskap5
+ ..subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(0,rundy(p2,(tim13,2oblu)).zpet) of p2
+ hide(bskat:=oldat)
+ ..subpath(rundy(oldap4,(tim3,2oblu)),rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),rundy(oldap5,tim4).zpet) of oldap5
+ ..subpath(rundy(p2,tim14),infinity) of p2
+ ..subpath(0,rundy(p1,(tim11,2oblu)).zpet) of p1..cycle
+ ;
+bskat:=ooldat;
+infill subpath(rundy(bskap6,(tim5,2oblu)),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0
+ ..subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim6).zpet) of bskap3
+ ..subpath(rundy(p1,tim16),rundy(p1,(tim15,oblu)).zpet) of p1..cycle;
+infill subpath(rundy(oldap6,(tim7,2oblu)),rundy(oldap6,oldtim18).zpet) of oldap6
+ ..subpath(rundy(oldap0,oldtim17),infinity) of oldap0
+ ..subpath(0,rundy(oldap1,oldtim11).zpet) of oldap1
+ ..subpath(rundy(oldap3,oldtim12),rundy(oldap3,tim8).zpet) of oldap3
+ ..subpath(rundy(p2,tim18),rundy(p2,(tim17,oblu)).zpet) of p2..cycle;
+penlabels(2,3,4,5,102,103); labels(1rr,4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_left_right_not_vert:
+bskchar "Double left-right arrow with vertical negation";
+beginchar(chars.arrow_double_left_right_not_vert,18u#,v_center(7u#)); uni "0x2904";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+x4=x5=.5[x0,x1]; .5[y4,y5]=y0; top y5=h;
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=z4l---z5ll..{z4-z5}z5r;
+p2:=z5r---z4rr..{z5-z4}z4l;
+sipka_points(0,1); dvojsipka_points(0,1,2,3); oldat:=bskat;
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,103,102); ooldat:=bskat;
+ls=.5w-2u; rs=.5w+2u;
+(tim1,tim11)=bskap4 intersectiontimes p1;
+(tim2,tim12)=bskap5 intersectiontimes p1;
+(tim3,tim13)=oldap4 intersectiontimes p2;
+(tim4,tim14)=oldap5 intersectiontimes p2;
+(tim5,tim15)=bskap6 intersectiontimes p1;
+(tim6,tim16)=bskap3 intersectiontimes p1;
+(tim7,tim17)=oldap6 intersectiontimes p2;
+(tim8,tim18)=oldap3 intersectiontimes p2;
+filldraw subpath(rundy(bskap4,tim1),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim2).zpet) of bskap5
+ ..subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(0,rundy(p2,tim13).zpet) of p2
+ hide(bskat:=oldat)
+ ..subpath(rundy(oldap4,tim3),rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),rundy(oldap5,tim4).zpet) of oldap5
+ ..subpath(rundy(p2,tim14),infinity) of p2
+ ..subpath(0,rundy(p1,tim11).zpet) of p1..cycle
+ ;
+bskat:=ooldat;
+infill subpath(rundy(bskap6,tim5),rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0
+ ..subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),rundy(bskap3,tim6).zpet) of bskap3
+ ..subpath(rundy(p1,tim16),rundy(p1,tim15).zpet) of p1..cycle;
+infill subpath(rundy(oldap6,tim7),rundy(oldap6,oldtim18).zpet) of oldap6
+ ..subpath(rundy(oldap0,oldtim17),infinity) of oldap0
+ ..subpath(0,rundy(oldap1,oldtim11).zpet) of oldap1
+ ..subpath(rundy(oldap3,oldtim12),rundy(oldap3,tim8).zpet) of oldap3
+ ..subpath(rundy(p2,tim18),rundy(p2,tim17).zpet) of p2..cycle;
+penlabels(2,3,4,5,102,103); labels(1rr,4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_left_right_not_out:
+bskchar "Double left-right arrow with (outer) negation";
+beginchar(chars.arrow_double_left_right_not_out,18u#,v_center(7u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], ls, rs, oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,90); pos101(rule_thickness,-90);
+y0=y1r=y100=y101r=math_axis=.5[y2,y3]; y2-y3=dbf;
+lft x0=w-u; rt x1=u; x2=x3=x1;
+y102=y2; y103=y3; x102=x103=x0q; rt x100=u; lft x101=w-u;
+.5[x4,x5]=.5[x0,x1]; .5[y4,y5]=y0; x5-x4=.5(y5-y4); top y5=h;
+pos4(rule_thickness,angle(z4-z5)+90); pos5(rule_thickness,angle(z4-z5)+90);
+y4'l=y4'r=y1l; z4'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r];
+y5'l=y5'r=y1r; z5'l=whatever[z4l,z5l]; z5'r=whatever[z4r,z5r];
+bskpoints(4,5,rule_thickness,rule_thickness);
+p1:=z4l---z5ll..{z4-z5}z5r;
+p2:=z5r---z4rr..{z5-z4}z4l;
+sipka_points(0,1); dvojsipka_points(0,1,2,3); oldat:=bskat;
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,103,102); ooldat:=bskat;
+ls=.5w-2u; rs=.5w+2u;
+(tim1,tim11)=bskap4 intersectiontimes p1;
+(tim2,tim12)=bskap5 intersectiontimes p1;
+(tim3,tim13)=oldap4 intersectiontimes p2;
+(tim4,tim14)=oldap5 intersectiontimes p2;
+tim5=xpart(bskap6 intersectiontimes ((ls,math_axis)--(ls,h)));
+tim6=xpart(bskap3 intersectiontimes ((ls,0)--(ls,math_axis)));
+tim7=xpart(oldap6 intersectiontimes ((rs,0)--(rs,math_axis)));
+tim8=xpart(oldap3 intersectiontimes ((rs,math_axis)--(rs,h)));
+filldraw subpath(rundy(bskap4,(tim1,2oblu)),rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),rundy(bskap5,tim2).zpet) of bskap5
+ ..subpath(rundy(p1,tim12),infinity) of p1
+ ..subpath(0,rundy(p2,(tim13,2oblu)).zpet) of p2
+ hide(bskat:=oldat)
+ ..subpath(rundy(oldap4,(tim3,2oblu)),rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),rundy(oldap5,tim4).zpet) of oldap5
+ ..subpath(rundy(p2,tim14),infinity) of p2
+ ..subpath(0,rundy(p1,(tim11,2oblu)).zpet) of p1..cycle
+ ;
+bskat:=ooldat;
+infill subpath(tim5,rundy(bskap6,bsktim18).zpet) of bskap6
+ ..subpath(rundy(bskap0,bsktim17),infinity) of bskap0
+ ..subpath(0,rundy(bskap1,bsktim11).zpet) of bskap1
+ ..subpath(rundy(bskap3,bsktim12),tim6) of bskap3
+ --subpath(tim7,rundy(oldap6,oldtim18).zpet) of oldap6
+ ..subpath(rundy(oldap0,oldtim17),infinity) of oldap0
+ ..subpath(0,rundy(oldap1,oldtim11).zpet) of oldap1
+ ..subpath(rundy(oldap3,oldtim12),tim8) of oldap3..cycle;
+penlabels(2,3,4,5,102,103); labels(1rr,4rr,5ll);
+endchar;
+
+iff known chars.arrow_double_up_white_bar:
+bskchar "Upward white arrow from bar";
+beginchar(chars.arrow_double_up_white_bar,9u#,asc_height#,0); uni "0x21EA";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=math_axis; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*up;
+x4=x5=x2; x6=x7=x3; bot y4=bot y6=-d; top y5=top y7=bot y2l-2rule_thickness;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0p.r,y0a)..cycle;
+filldraw obl(4l,6r,5l)---obl(5l,4l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)---cycle;
+infill obl(4r,6l,5r)---obl(5r,4r,7l)---obl(7l,5r,6l)---obl(6l,7l,4r)---cycle;
+penlabels(4,5,6,7); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_pedestal:
+bskchar "Upward white arrow on pedestal";
+beginchar(chars.arrow_double_up_white_pedestal,9u#,asc_height#,0); uni "0x21EB";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=3/4[h,-d]; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+filldraw subpath(5,13) of p---obl(3l,0p.l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)
+ ---obl(4l,6r,5l)---obl(5l,4l,2r)---obl(2r,5l,0q.r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(2',0q.l,5r)---obl(5r,2',4r)
+ ---obl(4r,5r,6l)---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---(x0p.r,y0a)..cycle;
+penlabels(4,5,6,7); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_pedestal_hbar:
+bskchar "Upward white arrow on pedestal with horizontal bar";
+beginchar(chars.arrow_double_up_white_pedestal_hbar,9u#,asc_height#,0); uni "0x21EC";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=3/4[h,-d]; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+x8=x2l; x9=x3r; y8=y9=y0a-rule_thickness;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+filldraw subpath(5,13) of p---obl(3l,0p.l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)
+ ---obl(4l,6r,5l)---obl(5l,4l,2r)---obl(2r,5l,0q.r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(8r,0q.l,9r)---obl(9r,8r,0p.r)---(x0p.r,y0a)..cycle;
+infill obl(9l,3',8l)---obl(8l,9l,2')---obl(2',0q.l,5r)---obl(5r,2',4r)---obl(4r,5r,6l)
+ ---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---cycle;
+penlabels(4,5,6,7,8,9); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_pedestal_vbar:
+bskchar "Upward white arrow on pedestal with vertical bar";
+beginchar(chars.arrow_double_up_white_pedestal_vbar,9u#,asc_height#,0); uni "0x21ED";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+pos8(rule_thickness,0); pos9(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]=x8=x9; x3-x2=dbf;
+top y0=h+apex_o; bot y1=3/4[h,-d]; y2=y3=y1;
+p0:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+y8=y4r; y9=y0;
+p1=whitehead(0,1,2,3);
+p2=z8l+2oblu*up--z9l;
+p3=z9r--z8r+2oblu*up;
+(tim1,tim2)=p1 intersectiontimes p2;
+(tim3,tim4)=p1 intersectiontimes p3;
+filldraw subpath(5,13) of p0---obl(3l,0p.l,7r)---obl(7r,5l,6r)---obl(6r,7r,4l)
+ ---obl(4l,6r,5l)---obl(5l,4l,2r)---obl(2r,5l,0q.r)---cycle;
+infill subpath(rundy(p1,(tim1,2oblu)),infinity) of p1..(x0q.l,y0a)---obl(2',0q.l,5r)
+ ---obl(5r,2',4r)---obl(4r,5r,6l)---obl(8l,4r,9l)
+ ---subpath(0,rundy(p2,(tim2,2oblu)).zpet) of p2..cycle;
+infill subpath(0,rundy(p1,(tim3,2oblu)).zpet) of p1
+ ..subpath(rundy(p3,(tim4,2oblu)),infinity) of p3
+ ---obl(8r,9r,6l)---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---(x0p.r,y0a)..cycle;
+penlabels(4,5,6,7,8,9); labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_doublehead:
+bskchar "Upward doublehead white arrow";
+beginchar(chars.arrow_double_up_white_doublehead,9u#,asc_height#,0); uni "0x21EE";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180);
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o-4rule_thickness; bot y1=-d; y2=y3=y1;
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*up;
+p0:=dvojsipka(0,1,2,3);
+p1:=subpath(4,14) of p0 shifted (0,4rule_thickness);
+p2:=whitehead(0,1,2,3);
+(tim0-6,tim1)=subpath(6,infinity) of p0 intersectiontimes subpath(0,5) of p1;
+(tim2-9,tim3-6)=subpath(9,infinity) of p0 intersectiontimes subpath(6,infinity) of p1;
+tim4-6=xpart(subpath(6,infinity) of p0 intersectiontimes (z2'--(x2',h)));
+tim5-9=xpart(subpath(9,infinity) of p0 intersectiontimes (z3'--(x3',h)));
+filldraw obl(2r,3l,0q.r)---subpath(5,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),13) of p0---obl(3l,0p.l,2r)---cycle;
+infill p2..(x0q.l,y0a)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0p.r,y0a)..cycle;
+infill ((x0p.r,y0a)..p2..(x0q.l,y0a)) shifted (0,4rule_thickness)
+ ..subpath(rundy(p0,(tim4,2oblu)),rundy(p0,(tim5,2oblu)).zpet) of p0..cycle;
+labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_double_up_white_doublehead_pedestal:
+bskchar "Upward doublehead white arrow on pedestal";
+beginchar(chars.arrow_double_up_white_doublehead_pedestal,9u#,asc_height#,0); uni "0x21EF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180);
+pos4(rule_thickness,0); pos5(rule_thickness,0); pos6(rule_thickness,0); pos7(rule_thickness,0);
+x0=x1r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o-4rule_thickness; bot y1=3/4[h,-d]; y2=y3=y1;
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*down;
+lft x4l=lft x5l=u; rt x6r=rt x7r=w-u; bot y4=bot y6=-d; y5r=y7r=y2;
+y4r:=y6l:=y4r+(rule_thickness-currentbreadth);
+y5r:=y7l:=y5r-(rule_thickness-currentbreadth);
+p0:=dvojsipka(0,1,2,3);
+p1:=z2l--(subpath(4,14) of p0 shifted (0,4rule_thickness))--z3l;
+p2:=whitehead(0,1,2,3);
+(tim0-6,tim1)=subpath(6,infinity) of p0 intersectiontimes subpath(0,6) of p1;
+(tim2-9,tim3-7)=subpath(9,infinity) of p0 intersectiontimes subpath(7,infinity) of p1;
+tim4-6=xpart(subpath(6,infinity) of p0 intersectiontimes (z2'--(x2',h)));
+tim5-9=xpart(subpath(9,infinity) of p0 intersectiontimes (z3'--(x3',h)));
+filldraw obl(3l,0p.l,7r)---obl(7r,3l,6r)---obl(6r,7r,4l)---obl(4l,6r,5l)
+ ---obl(5l,4l,2r)---obl(2r,5l,0q.r)
+ ---subpath(5,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),rundy(p1,tim3).zpet) of p1
+ ..subpath(rundy(p0,tim2),13) of p0---cycle;
+infill p2..(x0q.l,y0a)---obl(2',0q.l,5r)---obl(5r,2',4r)
+ ---obl(4r,5r,6l)---obl(6l,4r,7l)---obl(7l,6l,3')---obl(3',7l,0p.r)---(x0p.r,y0a)..cycle;
+infill ((x0p.r,y0a)..p2..(x0q.l,y0a)) shifted (0,4rule_thickness)
+ ..subpath(rundy(p0,(tim4,2oblu)),rundy(p0,(tim5,2oblu)).zpet) of p0..cycle;
+labels(1rr,2',3'); penlabels(4,5,6,7);
+endchar;
+
+iff known chars.arrow_double_down_white:
+bskchar "Downward white arrow";
+beginchar(chars.arrow_double_down_white,9u#,asc_height#,0); uni "0x21E9";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o=.5[x2,x3]; x3-x2=dbf;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+p:=dvojsipka(0,1,3,2);
+z2'-z2r=z3'-z3l=(rule_thickness-currentbreadth)*down;
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+infill whitehead(0,1,3,2)..(x0q.l,y0a)---obl(3',0q.l,2')---obl(2',3',0p.r)---(x0p.r,y0a)..cycle;
+labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_down_black:
+bskchar " Downward black arrow";
+beginchar(chars.arrow_down_black,9u#,asc_height#,0); uni "0x2B07";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,0);
+x0=x1r=.5w+o=.5[x2,x3]; x3-x2=dbf;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+p:=dvojsipka(0,1,3,2);
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+labels(1rr);
+endchar;
+
+iff known chars.arrow_double_up_down_white:
+bskchar "Double white up-down arrow";
+beginchar(chars.arrow_double_up_down_white,9u#,asc_height#,0); uni "0x21F3";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,0); pos101(rule_thickness,180);
+x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+x102=x2; x103=x3; y102=y103=y0q; bot y100=h+apex_o; top y101=-d;
+sipka_points(0,1); dvojsipka_points(0,1,3,2); oldat:=bskat;
+p0=whitehead(0,1,3,2);
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,102,103); ooldat:=bskat;
+p1=whitehead(100,101,102,103);
+tim1=xpart(bskap4 intersectiontimes ((0,x_height)--(x0,x_height)));
+tim2=xpart(bskap5 intersectiontimes ((w,x_height)--(x0,x_height)));
+tim3=xpart(oldap4 intersectiontimes ((w,bar_height)--(x0,bar_height)));
+tim4=xpart(oldap5 intersectiontimes ((0,bar_height)--(x0,bar_height)));
+filldraw subpath(tim1,rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),tim2) of bskap5
+ hide(bskat:=oldat)
+ --subpath(tim3,rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),tim4) of oldap5--cycle;
+infill p0..(x0q.l,y0a)---(x100p.r,y100a)..p1..(x100q.l,y100a)---(x0p.r,y0a)..cycle;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_up_down_black:
+bskchar "Black up-down arrow";
+beginchar(chars.arrow_up_down_black,9u#,asc_height#,0); uni "0x2B0D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric oldtim[], tim[], oldat, ooldat; path oldap[], p[];
+pos1(rule_thickness,0); pos101(rule_thickness,180);
+x0=x1r=x100=x101r=.5w=.5[x2,x3]; x3-x2=dbf;
+top y0=-d-apex_o; bot y1=h; y2=y3=y1;
+x102=x2; x103=x3; y102=y103=y0q; bot y100=h+apex_o; top y101=-d;
+sipka_points(0,1); dvojsipka_points(0,1,3,2); oldat:=bskat;
+p0=whitehead(0,1,3,2);
+for i:=11 upto 18: oldtim[i]:=bsktim[i]; endfor
+for i:=0 upto 6: oldap[i]:=bskap[i]; endfor;
+sipka_points(100,101); dvojsipka_points(100,101,102,103); ooldat:=bskat;
+p1=whitehead(100,101,102,103);
+tim1=xpart(bskap4 intersectiontimes ((0,x_height)--(x0,x_height)));
+tim2=xpart(bskap5 intersectiontimes ((w,x_height)--(x0,x_height)));
+tim3=xpart(oldap4 intersectiontimes ((w,bar_height)--(x0,bar_height)));
+tim4=xpart(oldap5 intersectiontimes ((0,bar_height)--(x0,bar_height)));
+filldraw subpath(tim1,rundy(bskap4,bsktim14).zpet) of bskap4
+ ..subpath(rundy(bskap1,bsktim13),infinity) of bskap1
+ &z100e+(hair*down rotated bskat){dir(bskat+135)}..z100e{dir(bskat-45)}
+ ..{dir(bskat-30)}z100{dir(bskat-160)}..{dir(bskat-135)}z100b
+ ..{dir(bskat+45)}z100b+(hair*up rotated bskat)
+ &subpath(0,rundy(bskap0,bsktim15).zpet) of bskap0
+ ..subpath(rundy(bskap5,bsktim16),tim2) of bskap5
+ hide(bskat:=oldat)
+ --subpath(tim3,rundy(oldap4,oldtim14).zpet) of oldap4
+ ..subpath(rundy(oldap1,oldtim13),infinity) of oldap1
+ &z0e+(hair*down rotated bskat){dir(bskat+135)}..z0e{dir(bskat-45)}
+ ..{dir(bskat-30)}z0{dir(bskat-160)}..{dir(bskat-135)}z0b
+ ..{dir(bskat+45)}z0b+(hair*up rotated bskat)
+ &subpath(0,rundy(oldap0,oldtim15).zpet) of oldap0
+ ..subpath(rundy(oldap5,oldtim16),tim4) of oldap5--cycle;
+penlabels(2,3,102,103); labels(1rr);
+endchar;
+
+iff known chars.arrow_double_right_white:
+bskchar "Rightward white arrow";
+beginchar(chars.arrow_double_right_white,15u#,v_center(5u#)); uni "0x21E8";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*right;
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+infill whitehead(0,1,2,3)..(x0a,y0q.l)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0a,y0p.r)..cycle;
+labels(2',3');
+endchar;
+
+iff known chars.arrow_right_black:
+bskchar "Rightward black arrow";
+beginchar(chars.arrow_right_black,15u#,v_center(5u#)); uni "0x27A1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90);
+rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,2,3);
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+endchar;
+
+iff known chars.arrow_double_up_white:
+bskchar "Upward white arrow";
+beginchar(chars.arrow_double_up_white,9u#,asc_height#,0); uni "0x21E7";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=-d; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+z2'-z2l=z3'-z3r=(rule_thickness-currentbreadth)*up;
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+infill whitehead(0,1,2,3)..(x0q.l,y0a)---obl(2',0q.l,3')---obl(3',2',0p.r)---(x0p.r,y0a)..cycle;
+labels(1rr,2',3');
+endchar;
+
+iff known chars.arrow_up_black:
+bskchar "Upward black arrow";
+beginchar(chars.arrow_up_black,9u#,asc_height#,0); uni "0x2B06";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,180);
+x0=x1r=.5w-o=.5[x2,x3]; x3-x2=dbf;
+top y0=h+apex_o; bot y1=-d; y2=y3=y1;
+p:=dvojsipka(0,1,2,3);
+filldraw obl(2r,3l,0q.r)---subpath(5,13) of p---obl(3l,0p.l,2r)---cycle;
+endchar;
+
+iff known chars.arrow_double_left_white:
+bskchar "Leftward white arrow";
+beginchar(chars.arrow_double_left_white,15u#,v_center(5u#)); uni "0x21E6";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,3,2);
+z2'-z2r=z3'-z3l=(rule_thickness-currentbreadth)*left;
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+infill whitehead(0,1,3,2)..(x0a,y0q.l)---obl(3',0q.l,2')---obl(2',3',0p.r)---(x0a,y0p.r)..cycle;
+labels(2',3');
+endchar;
+
+iff known chars.arrow_left_black:
+bskchar "Leftward black arrow";
+beginchar(chars.arrow_left_black,15u#,v_center(5u#)); uni "0x2B05";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90);
+lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3]; y2-y3=dbf;
+p:=dvojsipka(0,1,3,2);
+filldraw obl(3r,2l,0q.r)---subpath(5,13) of p---obl(2l,0p.l,3r)---cycle;
+endchar;
+
+iff known chars.arrow_double_right_white_round:
+bskchar "Double rightward white arrow with rounded end";
+beginchar(chars.arrow_double_right_white_round,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos4(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=w-x0+.5(y2-y3); y0=y1r=y4=math_axis=.5[y2,y3]; y2-y3=dbf; lft x4l=u;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..subpath(4,14) of p..cycle;
+infill subpath(0,3) of p..z4r..subpath(15,infinity) of p..cycle;
+penlabels(4);
+endchar;
+
+iff known chars.arrow_double_left_white_round:
+bskchar "Double leftward white arrow with rounded end";
+beginchar(chars.arrow_double_left_white_round,15u#,v_center(5u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90); pos4(rule_thickness,180);
+lft x0=u; x1=x2=x3=w-x0-.5(y2-y3); y0=y1r=y4=math_axis=.5[y2,y3]; y2-y3=dbf; rt x4l=w-u;
+p:=dvojsipka(0,1,3,2);
+filldraw z4l..subpath(4,14) of p..cycle;
+infill subpath(0,3) of p..z4r..subpath(15,infinity) of p..cycle;
+penlabels(4);
+endchar;
+
+iff known chars.arrow_double_right_white_bar:
+bskchar "Double white rightward arrow from bar";
+beginchar(chars.arrow_double_right_white_bar,15u#,v_center(7u#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'l=y2l; y3'r=y3r; x2'=x3'=x4r;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..z4r---obl(2'r,4r,0q.r)---subpath(5,13) of p---obl(3'l,0p.l,5r)---z5r..z5l---cycle;
+infill whitehead(0,1,2,3)..(x0a,y0q.l)---obl(2'l,0q.l,3')---obl(3'r,2',0p.r)---(x0a,y0p.r)..cycle;
+penlabels(2',3',4,5);
+endchar;
+
+iff known chars.arrow_double_right_white_wall:
+bskchar "Double white rightward arrow from wall";
+beginchar(chars.arrow_double_right_white_wall,15u#,v_center(7u#)); uni "0x21F0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'l=y2l; y3'r=y3r; x2'=x3'=x6r; y6=y4; y7=y5; x6=x7=x4+3rule_thickness;
+y4r:=y6l:=y4r-(rule_thickness-currentbreadth); x2'l:=x6l;
+y5r:=y7l:=y5r+(rule_thickness-currentbreadth); x3'r:=x7l;
+p:=dvojsipka(0,1,2,3);
+filldraw obl(4l,5l,6r)---obl(6r,4l,2'r)---obl(2'r,6r,0q.r)
+ ---subpath(5,13) of p---obl(3'l,0p.l,7r)---obl(7r,3'l,5l)---obl(5l,7r,4l)---cycle;
+infill whitehead(0,1,2,3)..(x0a,y0q.l)---obl(2'l,0q.l,6l)---obl(6l,2'l,4r)
+ ---obl(4r,6l,5r)---obl(5r,4r,7l)---obl(7l,5r,3'r)---obl(3'r,7l,0p.r)---(x0a,y0p.r)..cycle;
+penlabels(2',3',4,5,6,7);
+endchar;
+
+iff known chars.arrow_double_right_bar:
+bskchar "Double rightward arrow from bar";
+beginchar(chars.arrow_double_right_bar,15u#,v_center(7u#)); uni "0x2907";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4r;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..z4r---obl(2'r,4r,0q.r)---subpath(5,13) of p---obl(3'l,0p.l,5r)---z5r..z5l---cycle;
+infill subpath(0,2) of p---obl(2'l,0q.l,3'r)---obl(3'r,2'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5); labels(2',3');
+endchar;
+
+iff known chars.arrow_double_right_bar_long:
+bskchar "Long double rightward arrow from bar";
+beginchar(chars.arrow_double_right_bar_long,22u#,v_center(7u#)); uni "0x27FE";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,90); pos2'(rule_thickness,90); pos3'(rule_thickness,90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+rt x0=w-u; x1=x2=x3=x4l=x5l=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4r;
+p:=dvojsipka(0,1,2,3);
+filldraw z4l..z4r---obl(2'r,4r,0q.r)---subpath(5,13) of p---obl(3'l,0p.l,5r)---z5r..z5l---cycle;
+infill subpath(0,2) of p---obl(2'l,0q.l,3'r)---obl(3'r,2'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5); labels(2',3');
+endchar;
+
+iff known chars.arrow_double_left_bar:
+bskchar "Double leftward arrow from bar";
+beginchar(chars.arrow_double_left_bar,15u#,v_center(7u#)); uni "0x2906";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90); pos2'(rule_thickness,-90); pos3'(rule_thickness,-90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+lft x0=u; x1=x2=x3=x4r=x5r=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4l;
+p:=dvojsipka(0,1,3,2);
+filldraw z5r..z5l---obl(3'r,5l,0q.r)---subpath(5,13) of p---obl(2'l,0p.l,4l)---z4l..z4r---cycle;
+infill subpath(0,2) of p---obl(3'l,0q.l,2'r)---obl(2'r,3'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5);
+endchar;
+
+iff known chars.arrow_double_left_bar_long:
+bskchar "Long double leftward arrow from bar";
+beginchar(chars.arrow_double_left_bar_long,22u#,v_center(7u#)); uni "0x27FD";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p;
+pos1(rule_thickness,-90); pos2'(rule_thickness,-90); pos3'(rule_thickness,-90);
+pos4(rule_thickness,0); pos5(rule_thickness,0);
+lft x0=u; x1=x2=x3=x4r=x5r=w-x0; y0=y1r=math_axis=.5[y2,y3]=.5[y4,y5]; y2-y3=dbf; top y4=h;
+y2'=y2; y3'=y3; x2'=x3'=x4l;
+p:=dvojsipka(0,1,3,2);
+filldraw z5r..z5l---obl(3'r,5l,0q.r)---subpath(5,13) of p---obl(2'l,0p.l,4l)---z4l..z4r---cycle;
+infill subpath(0,2) of p---obl(3'l,0q.l,2'r)---obl(2'r,3'l,0p.r)---subpath(16,infinity) of p..cycle;
+penlabels(2',3',4,5);
+endchar;
+
+iff known chars.arrow_triple_right:
+bskchar "Triple rightward arrow";
+beginchar(chars.arrow_triple_right,15u#,v_center(6u#)); uni "0x21DB";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{
+ numeric old_arr; old_arr:=arrsize; save arrwidth, arrsize;
+ numeric arrwidth, arrsize; arrsize=1.2arrwidth=if not boldmath: 1.2\\ else: 1.5\\fi old_arr;
+ pos1(rule_thickness,90);
+ rt x0=w-u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3];
+ y2-y3=(if not boldmath: 5 else: 3.75 fi)*rule_thickness;
+ filldraw trojsipka(0,1,2,3)..cycle;
+}};
+endchar;
+
+iff known chars.arrow_triple_left:
+bskchar "Triple leftward arrow";
+beginchar(chars.arrow_triple_left,15u#,v_center(6u#)); uni "0x21DA";
+adjust_fit(0,0);
+pickup tiny.nib;
+{{
+ numeric old_arr; old_arr:=arrsize; save arrwidth, arrsize;
+ numeric arrwidth, arrsize; arrsize=1.2arrwidth=if not boldmath: 1.2\\ else: 1.5\\fi old_arr;
+ pos1(rule_thickness,-90);
+ lft x0=u; x1=x2=x3=w-x0; y0=y1r=math_axis=.5[y2,y3];
+ y3-y2=(if not boldmath: 5 else: 3.75 fi)*rule_thickness;
+ filldraw trojsipka(0,1,2,3)..cycle;
+}};
+endchar;
+
iff known chars.math_curly_brace_left:
bskchar "Left curly brace";
beginchar(chars.math_curly_brace_left,7u#, body_height#,paren_depth#); uni "0x007B";
@@ -5425,9 +22879,9 @@ filldraw (tim0,h)--(tim0,-d)--(tim1,-d)--(tim1,h)--cycle;
penlabels(1,2,3,4,5,6,7);
endchar;
-iff known chars.math_curly_brace_white_left:%FIXME
+iff known chars.math_curly_brace_white_left:
bskchar "Left white curly brace";
-beginchar(chars.math_curly_brace_white_left,7u#, body_height#,paren_depth#); uni "non";
+beginchar(chars.math_curly_brace_white_left,7u#, body_height#,paren_depth#); uni "0x2983";
adjust_fit(0,0);
pickup tiny.nib;
path p[]; numeric tim[];
@@ -5441,11 +22895,23 @@ p1=z7l{z6r-z7l}..z6l..z5l..{left}z4r;
p2=(x1-stem,-d-stem)--(x1-stem,h+stem);
(tim0-2,tim2)=subpath(2,infinity) of p0 intersectiontimes p2;
(tim1,tim3)=p1 intersectiontimes p2;
-draw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
- ..subpath(0,rundy(p1,tim1).zpet) of p1
- ..subpath(rundy(p2,tim3),rundy(p2,(tim2,hair)).zpet) of p2
- ..subpath(rundy(p0,tim0),infinity) of p0..cycle;
-penlabels(1,2,3,4,5,6,7);
+filldraw z1r{z2r-z1l}..z2r..z3r..{left}z4r..{right}z4l..z5r..z6r..{z7l-z6r}z7r
+ ..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim3),rundy(p2,(tim2,hair)).zpet) of p2
+ ..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+pos2'(hair,135); pos6'(hair,225); z2'r=z2r; z6'r=z6r;
+pos3'(hair,190); pos5'(hair,170); z3'r=z3r; z5'r=z5r;
+p3=z4l{right}..z3'l..z2'l..{z1l-z2r}z1l;
+p4=z7l{z6r-z7l}..z6'l..z5'l..{left}z4r;
+z8=bsktouch(p3,down,p4,up);
+tim4=xpart(p3 intersectiontimes (z8--(x8,h)));
+tim5=xpart(p4 intersectiontimes (z8--(x8,0)));
+(tim6,tim7)=p3 intersectiontimes p2;
+(tim8,tim9)=p4 intersectiontimes p2;
+infill subpath(rundy(p4,tim8),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..reverse subpath(rundy(p2,tim9),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2'r,3'r,5'r,6'r);
endchar;
iff known chars.math_curly_brace_right:
@@ -5633,9 +23099,9 @@ filldraw (tim0,h)--(tim0,-d)--(tim1,-d)--(tim1,h)--cycle;
penlabels(1,2,3,4,5,6,7);
endchar;
-iff known chars.math_curly_brace_white_right:%FIXME
+iff known chars.math_curly_brace_white_right:
bskchar "Right white curly brace";
-beginchar(chars.math_curly_brace_white_right,7u#, body_height#,paren_depth#); uni "non";
+beginchar(chars.math_curly_brace_white_right,7u#, body_height#,paren_depth#); uni "0x2984";
adjust_fit(0,0);
pickup tiny.nib;
path p[]; numeric tim[];
@@ -5654,7 +23120,19 @@ draw z1r{z2r-z1l}..z2r..z3r..{right}z4r..{left}z4l..z5r..z6r..{z7l-z6r}z7r
..subpath(rundy(p2,tim3),rundy(p2,tim2).zpet) of p2
..subpath(rundy(p0,tim0),infinity) of p0
..cycle;
-penlabels(1,2,3,4,5,6,7);
+pos2'(hair,45); pos6'(hair,-45); z2'r=z2r; z6'r=z6r;
+pos3'(hair,-10); pos5'(hair,10); z3'r=z3r; z5'r=z5r;
+p3=z4l{left}..z3'l..z2'l..{z1l-z2r}z1l;
+p4=z7l{z6r-z7l}..z6'l..z5'l..{right}z4r;
+z8=bsktouch(p3,down,p4,up);
+tim4=xpart(p3 intersectiontimes (z8--(x8,h)));
+tim5=xpart(p4 intersectiontimes (z8--(x8,0)));
+(tim6,tim7)=p3 intersectiontimes p2;
+(tim8,tim9)=p4 intersectiontimes p2;
+infill subpath(rundy(p4,tim8),rundy(p4,tim5).zpet) of p4
+ ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3
+ ..reverse subpath(rundy(p2,tim9),rundy(p2,tim7).zpet) of p2..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2'r,3'r,5'r,6'r);
endchar;
iff known chars.math_curly_brace_quill_left:
@@ -5724,7 +23202,7 @@ x6=.5[x7l,x3l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(3l);
filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
...z6r{left}..z7r..z8r---
- if dpi>300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
+ if not testdpi:tobl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
---obl(4'r,3r,2l)..z2l+oblu*down---cycle;
penlabels(1,2,3,4,4',5,6,7,8,9);
endchar;
@@ -5746,7 +23224,7 @@ x6=.5[x7l,x3l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
cap_serifs_tr(2r); cap_serifs_br(1r); cap_serifs_bl(3l);
filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
...z6r{left}..z7r..z8r---
- if dpi>300:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
+ if not testdpi:obl(9r,8r,3l) else:z9r fi ---z3l.b..{left}z3l.c..z3l.a---z3r
---obl(4'r,3r,2l)..z2l+oblu*down---cycle;
infill z9l{down}..{left}z8l..z7l..{right}z6l..{down}z5l..cycle;
penlabels(1,2,3,4,4',5,6,7,8,9);
@@ -5769,7 +23247,7 @@ x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5r=y4r-serif_o;
cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r);
filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c
..z2l.a{right}...{right}z6l..z7l..z8l---
- if dpi>300:obl(9l,8l,3r) else: z9l fi
+ if not testdpi:obl(9l,8l,3r) else: z9l fi
---z3r.b..{right}z3r.c..z3r.a---z3l---obl(4'l,3l,2r)
..z2r+oblu*down---cycle;
penlabels(1,2,3,4,4',5,6,7,8,9);
@@ -5792,13 +23270,55 @@ x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5l=y4l-serif_o;
cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r);
filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c
..z2l.a{right}...{right}z6l..z7l..z8l---
- if dpi>300:obl(9l,8l,3r) else: z9l fi
+ if not testdpi:obl(9l,8l,3r) else: z9l fi
---z3r.b..{right}z3r.c..z3r.a---z3l---obl(4'l,3l,2r)
..z2r+oblu*down---cycle;
infill z9r{down}..{right}z8r..z7r..{left}z6r..{down}z5r..cycle;
penlabels(1,2,3,4,4',5,6,7,8,9);
endchar;
+iff known chars.sign_paragraph_bullet_left:
+bskchar "Leftwards paragraph bullet";
+beginchar(chars.sign_paragraph_bullet_left,11u#,x_height#,0); uni "0x204C";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270);
+pos5(.75ser_height,90); pos6(cap_hair,90); pos7(cap_curve,180);
+pos8(cap_hair,270);
+bot y1=bot y3=bot y8r=0; top y2=top y4=top y6r=h;
+rt x1r= rt x2r= w-2.5u; x3=x4=x2-3rule_thickness;
+lft x7r=u; y7=.5[y8,y6]; x8=x6;
+x6=.5[x7l,x4l]; z4'l=z4r; y2l:=y4'r; y5r=y4r-serif_o;
+cap_serifs_tr(2r); cap_serifs_br(1r);
+filldraw z1l---z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c..z2r.a{left}
+ ...z6r{left}..z7r..z8r---cycle;
+infill z4r+oblu*down..z2l+oblu*down---z1l+oblu*up..z3r+oblu*up---cycle;
+penlabels(1,2,3,4,4',5,6,7,8);
+endchar;
+
+iff known chars.sign_paragraph_bullet_right:
+bskchar "Rightward paragraph bullet";
+beginchar(chars.sign_paragraph_bullet_right,11u#,x_height#,0); uni "0x204D";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0); pos4'(rule_thickness,270);
+pos5(.75ser_height,90); pos6(cap_hair,270); pos7(cap_curve,180);
+pos8(cap_hair,90);
+bot y1=bot y3=bot y8l=0; top y2=top y4=top y6l=h;
+lft x1l= lft x2l=2.5u; x3=x4=x2+3rule_thickness;
+x5=x3r; rt x7l=w-u; y7=.5[y8,y6]; x8=x6;
+x6=.5[x7r,x3r]; z4'l=z4l; y2r:=y4'r; y5r=y4r-serif_o;
+cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(3r);
+filldraw z1r---z1l.a..z1l.c{right}..z1l.b---z2l.b..{left}z2l.c
+ ..z2l.a{right}...{right}z6l..z7l..z8l---cycle;
+infill z4l+oblu*down..z2r+oblu*down---z1r+oblu*up..z3l+oblu*up---cycle;
+penlabels(1,2,3,4,4',5,6,7,89);
+endchar;
+
iff known chars.sign_pilcrow:
bskchar "Pilcrow sign";
beginchar(chars.sign_pilcrow,8u#,cap_height#,0); uni "non";
@@ -5958,30 +23478,40 @@ filldraw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity)
penlabels(1,4,7); labels(2,3,5,6);
endchar;
-iff known chars.sign_spade_suit_white: %FIXME
+iff known chars.sign_spade_suit_white:
bskchar "White spade suit";
beginchar(chars.sign_spade_suit_white,13u#, asc_height#,0); uni "0x2664";
adjust_fit(0,0);
pickup tiny.nib;
-path p[]; numeric tim[]; oblu:=4oblu;
+path p[]; numeric tim[], shift; oblu:=4oblu; shift:=rule_thickness-currentbreadth;
pos1(rule_thickness,0); pos4(rule_thickness,0);
pos7(cap_curve,0);
-x1=x4=x7=.5w=.5[x6,x2]=.5[x5,x3]; y4=h;
-lft x3=u; y3=y5=bar_height; bot y2=bot y6=curve;
-x1-x2=(x2-x3); y1=h-.25[x_height,h];
+x1=x4=x7=.5w=.5[x6r,x2r]=.5[x5r,x3r]; y4=h;
+lft x3r=u; y3r=y5r=bar_height; bot y2r=bot y6r=curve;
+x1-x2r=(x2r-x3r); y1=h-.25[x_height,h];
y7=-hair;
-p1=z1l..z2..z3..{up}z4l;
-p2=z4r{down}..z5..z6..z1r;
+p1=z1l..z2r..z3r..{up}z4l;
+p2=z4r{down}..z5r..z6r..z1r;
p3=z7l--z1l;
p4=z1r--z7r;
tim1=xpart(p1 intersectiontimes ((x1-.5(stem-currentbreadth),0)--(x1-.5(stem-currentbreadth),h)));
-tim2=xpart(p2 intersectiontimes ((x1+.5(stem-currentbreadth),0)--(x1+.5(stem-currentbreadth),y5)));
+tim2=xpart(p2 intersectiontimes ((x1+.5(stem-currentbreadth),0)--(x1+.5(stem-currentbreadth),y5r)));
z100=(0,ypart(point tim1 of p1));
tim3=xpart(p3 intersectiontimes (z100--(w,y100)));
tim4=xpart(p4 intersectiontimes (z100--(w,y100)));
-draw subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1
- ..subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4..cycle;
-penlabels(1,4,7); labels(2,3,5,6);
+p5=subpath(0,rundy(p3,tim3).zpet) of p3..subpath (rundy(p1,tim1),infinity) of p1;
+p6=subpath(0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p4,tim4),infinity) of p4;
+pos2(rule_thickness,angle(direction 1 of p1)+90); pos3(rule_thickness,angle(direction 2 of p1)+90);
+pos5(rule_thickness,angle(direction 1 of p2)+90); pos6(rule_thickness,angle(direction 2 of p2)+90);
+y4'l=y4'r=y4; x4'l-x4l=x4r-x4'r=shift;
+p7=z1l..z2l..z3l..{up}z4'l;
+p8=z4'r{down}..z5l..z6l..z1r;
+z8=bsktouch(subpath(1,infinity) of p7,right,p8,left);
+tim7=xpart(p7 intersectiontimes (z8--(0,y8)));
+tim8=xpart(p8 intersectiontimes (z8--(w,y8)));
+filldraw p5..p6..cycle;
+infill subpath(0,rundy(p7,(tim7,2f_obl)).zpet) of p7..subpath(rundy(p8,(tim8,2f_obl)),infinity) of p8..cycle;
+penlabels(1,2,3,4,5,6,7);
endchar;
iff known chars.sign_club_suit:
@@ -6008,12 +23538,13 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity)
labels(1,2,3,4,6,7,7',8,8'); penlabels(5,5');
endchar;
-iff known chars.sign_club_suit_white: %FIXME
+iff known chars.sign_club_suit_white:
bskchar "White club suit";
beginchar(chars.sign_club_suit_white,13u#, asc_height#,0); uni "0x2667";
adjust_fit(0,0);
pickup tiny.nib;
-path p[]; numeric tim[]; oblu:=2oblu;
+save spd; vardef spd(expr tim, pp):= shift*unitvector((direction tim of pp) rotated 90) enddef;
+path p[]; numeric tim[], shift; oblu:=2oblu; shift:=rule_thickness-currentbreadth;
pos5(rule_thickness,0); pos5'(cap_curve,0);
top z1=(.5w,h); lft x2=u; rt x3=w-u; y2=y3=bar_height;
.5[x4,x6]=x1=x5=x5'; y4=y6=curve; y5=.45[y2,y4]; z4=whatever[(x2,0),z3]; y5'=-hair;
@@ -6026,9 +23557,10 @@ p0=z2{down}..z4..z5..z6..{up}z3.. {z2-z7}.5[z3,z7]..z7..z7'..{left}z1
p1=z5l--z5'l; p2=z5'r--z5r;
(tim0,tim1)=p0 intersectiontimes p1;
(tim2,tim3)=p2 intersectiontimes p0;
-draw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1
..subpath(0,rundy(p0,tim2).zpet) of p2..subpath(rundy(p0,tim3),infinity) of p0
&cycle;
+infill z2+shift*right{down}..z4+spd(1,p0)..z5+spd(2,p0)..z6+spd(3,p0)..z3+shift*left{up}..{z2-z7}.5[z3,z7]+spd(5,p0)..z7+spd(6,p0)..z7'+spd(7,p0)..{left}z1+shift*down..z8'+spd(9,p0)..z8+spd(10,p0)..{z8-z3}.5[z8,z2]+spd(11,p0)..cycle;
labels(1,2,3,4,6,7,7',8,8'); penlabels(5,5');
endchar;
@@ -6106,6 +23638,110 @@ filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle;
penlabels(1,2,2',3);
endchar;
+iff known chars.math_accent_hat_wide_widest:
+bskchar "Wide than widest hat accent";
+beginchar(chars.math_accent_hat_wide_widest,33u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(1.75stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.math_accent_hat_very_wide:
+bskchar "Very wide hat accent";
+beginchar(chars.math_accent_hat_very_wide,41u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.1[stem,hair],270); pos2'(1.75stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+filldraw z3l---obl(2r,3l,1r)---z1r..z1---z2'l..z2l..z2'r---z3r--cycle;
+penlabels(1,2,2',3);
+endchar;
+
+iff known chars.math_accent_triangle_wide:
+bskchar "Wide triangle accent";
+beginchar(chars.math_accent_triangle_wide,9u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_wider:
+bskchar "Wider triangle accent";
+beginchar(chars.math_accent_triangle_wider,17u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_widest:
+bskchar "Widest triangle accent";
+beginchar(chars.math_accent_triangle_widest,25u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_wide_widest:
+bskchar "Wide than widest triangle accent";
+beginchar(chars.math_accent_triangle_wide_widest,33u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
+iff known chars.math_accent_triangle_very_wide:
+bskchar "Very wide triangle accent";
+beginchar(chars.math_accent_triangle_very_wide,41u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+y1=y3; top y2l=h; top y1l=1/2[x_height,top y2]; lft x1=0; rt x3=w; x2=.5[x1,x3];
+pos1(hair,-10); pos2(.5[stem,hair],270); pos2'(stem,0); pos3(hair,0);
+z2'=z2+.25tiny*left;
+y1'=y3'=y1+hair-currentbreadth;
+z1'=whatever[z1r,z2r]; z3'=whatever[z2r,z3l];
+filldraw z3l--z1r...z1---z2'l..z2l..z2'r---z3r--cycle;
+oblu.more:=1/5(x3'-x1');
+infill obl(3',1',2r).more---obl(2r,3',1')---obl(1',2r,3').more---cycle;
+penlabels(1,2,2',3); labels(1',3');
+endchar;
+
iff known chars.math_accent_tilde_wide:
bskchar "Wide tilde accent";
beginchar(chars.math_accent_tilde_wide,9u#,.5[asc_height#,body_height#],0); uni "non";
@@ -6133,6 +23769,24 @@ lft x0=0; y0=.6[x_height,h];
tilde(0,1);
endchar;
+iff known chars.math_accent_tilde_wide_widest:
+bskchar "Wide than widest tilde accent";
+beginchar(chars.math_accent_tilde_wide_widest,33u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=0; y0=.6[x_height,h];
+tilde(0,1);
+endchar;
+
+iff known chars.math_accent_tilde_very_wide:
+bskchar "Very wide tilde accent";
+beginchar(chars.math_accent_tilde_very_wide,41u#,body_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x0=0; y0=.6[x_height,h];
+tilde(0,1);
+endchar;
+
iff known chars.math_parent_left_big:
bskchar "\big left parenthesis";
beginchar(chars.math_parent_left_big,6u#,rule_thickness#,2dh#-rule_thickness#); uni "non";
@@ -6526,7 +24180,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6540,7 +24195,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6554,7 +24210,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6568,7 +24225,8 @@ pos1(breadth,90); pos4(breadth,270);
lft x2r=1.75u; x3r=x2r; rt x4r=rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*left
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6582,7 +24240,7 @@ pos1(breadth,90);
lft x2r=1.75u; x3r=x2r; rt x1r=w-.5u-.25breadth;
top y2r=top y1r=h; bot y3r=-d;
rt z2l=(x2r+.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -6596,7 +24254,7 @@ pos3(breadth,270);
lft x1r=1.75u; x2r=x1r; rt x3r=w-.5u-.25breadth;
top y1r=h; bot y2r=bot y3r=-d;
rt z1l=(x1r+.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l+breadth*left..cycle;
penlabels(1,2,3);
endchar;
@@ -6622,7 +24280,8 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*right
+ ---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6636,7 +24295,7 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*right---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6650,7 +24309,7 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*right---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6664,7 +24323,7 @@ pos1(breadth,90); pos4(breadth,270);
rt x2r=w-1.75u; x3r=x2r; lft x4r=lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=bot y4r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y4l);
-filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---obl(3r,2r,4r)---z4r..z4l+breadth*right---obl(3l,4l,2l)---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3,4);
endchar;
@@ -6678,7 +24337,7 @@ pos1(breadth,90);
rt x2r=w-1.75u; x3r=x2r; lft x1r=.5u+.25breadth;
top y2r=top y1r=h; bot y3r=-d;
lft z2l=(x2r-.5[stem,breadth],y1l); z3l=(x2l,y3r);
-filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l..cycle;
+filldraw z1r---obl(2r,1r,3r)---z3r--z3l---obl(2l,3l,1l)---z1l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -6692,7 +24351,7 @@ pos3(breadth,270);
rt x1r=w-1.75u; x2r=x1r; lft x3r=.5u;
top y1r=h; bot y2r=bot y3r=-d;
lft z1l=(x1r-.5[stem,breadth],y1r); z2l=(x1l,y3l);
-filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l..cycle;
+filldraw z3r---obl(2r,3r,1r)---z1r--z1l---obl(2l,1l,3l)---z3l+breadth*right..cycle;
penlabels(1,2,3);
endchar;
@@ -6800,7 +24459,8 @@ pos6(cap_curve,50); pos7(cap_hair,90); pos8(cap_hair,90);
pos9(cap_hair,135); pos10(.5[cap_hair,cap_stem],240);
lft x1l=u; .5[x2,x3]=.5w; rt x3r=w-2u; bot y2'r=-o; x2'=.5w;
y1=.25bar_height; y2r=.25bar_height; y3=.35x_height; y4l=bot y5r=x_height;
-x4r=.65w; x5l=w-1.5u; x6=x4l-.5stem; top y7r=h+o; y6r=y7-stem;
+x4r=.65w; x5l=w-1.5u; top y7r=h+o;
+2(x4l-x6)=y7-y6r=if h-x_height<2cap_curve: .45\\fi stem;
z8=z5+sqrt2*cap_curve*dir85; x7=x2+.5stem; lft x9l=1.25u; y9r=y6r;
y10l=.5[y6l,y5l]; x10=.35[x7,x9]; z10'=z10+.2stem*up+.2(stem-currentbreadth)*left;
filldraw z1l{dir60}..z2l..z2'l..z3l..z4l..{dir-20}z5l..z5r{dir160}
@@ -6816,14 +24476,14 @@ beginchar(chars.math_aleph,12u#,asc_height#,0); uni "0x2135";
adjust_fit(0,0);
pickup tiny.nib;
numeric theta, tim[]; path p[]; oblu:=2.2oblu;
-pos1(cap_curve,50); pos2(cap_curve,50);
+pos1(1.25curve,50); pos2(1.25curve,50);
top y1r=h+apex_o; bot y2l=0;
lft x1l=u; rt x2r=w-u;
theta=angle(z1-z2)-90;
-pos3(cap_stem,theta); pos4(cap_stem,theta);
-pos5(curve,50); pos6(curve,50); pos7(cap_stem,theta);
-pos8(cap_curve,30); pos9(hair,-90); pos10(cap_stem,-10); pos11(cap_hair,theta-90);
-pos12(stem-o,-90); pos13(cap_hair,theta-90); pos14(.85cap_stem,theta-90);
+pos3(like_stem,theta); pos4(like_stem,theta);
+pos5(curve,50); pos6(curve,50); pos7(like_stem,theta);
+pos8(1.25curve,30); pos9(hair,-90); pos10(like_stem,-10); pos11(like_hair,theta-90);
+pos12(stem-o,-90); pos13(like_hair,theta-90); pos14(.85like_stem,theta-90);
.5[x3,x4]=x4-x3=.5w; z3=whatever[z1,z2]+stem*down; z4=whatever[z1,z2]+stem*up;
top y5r=h; rt x6r=w-u; z5=z6+whatever*dir(theta+90); bot y6l=x_height;
z7=.5[z5,z6];
@@ -6855,12 +24515,84 @@ filldraw subpath(0,rundy(p0,tim0).zpet) of p0
penlabels(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
endchar;
+iff known chars.math_beth:
+bskchar "The Hebrew letter beth";
+beginchar(chars.math_beth,12u#,asc_height#,0); uni "0x2136";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos1(like_stem,90); pos2(like_stem,90); pos3(hair,0); penpos4(hair,0);
+pos5(like_stem,90); penpos6(hair,30);
+bot y1l=bot y2l=bot y3=-d; lft x1=u; rt x2=w-u;
+x1r:=x1r+curve; x2l:=x2l-.75curve; x3r=x2l-stem; x4l=x3;
+y5r=h-.5stem; x5=x1r+.5u; y4=y5l+o; y4r:=y5r+o; z5'=(x6r,y5l);
+lft x6l=1.5u; top y6r=h+o;
+p0:=z1l{dir80}..z1r...{dir10}z2r;
+p1:=z2r..z2l{left}...{dir190}z1l;
+p2:=z6r{dir-80}..z5r{right}..{right}z4r+o*left..z4r+o*down{down}..{down}z3r;
+p3:=z3l{up}..{up}z4l+oblu*down..z4l+oblu*left{left}..z5l{left}..z5'..{dir90}z6l;
+(tim0,tim1)=p0 intersectiontimes p3;
+(tim2,tim3)=p0 intersectiontimes p2;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p3,tim1),infinity) of p3
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),infinity) of p0..p1..cycle;
+penlabels(1,2,3,4,5,6); labels(5');
+endchar;
+
+iff known chars.math_gimel:
+bskchar "The Hebrew letter gimel";
+beginchar(chars.math_gimel,9u#,asc_height#,0); uni "0x2137";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos0(like_stem,160); pos1(like_stem,90); pos2(like_stem,90); pos3(.5[hair,stem],0);
+penpos4(hair,0); pos5(like_stem,90); penpos6(hair,30);
+bot y1l=bot y2l=-d; lft x1=u; rt x2=w-u; y3=.5x_height;
+x1r:=x1r+curve; x2l:=x2l-.75curve; x3l=x2l-stem; x4l=x3r;
+y5r=h-.5stem; x5=x1r+.5u; y4=y5l; y4r:=y5r-o; z5'=(x6r,y5l);
+lft x6l=1.5u; top y6r=h+o; y0r=y3; rt x0l=w-u;
+p0:=z2l..z3l{up}..{up}z4l+oblu*down..z4l+oblu*left{left}..z5l{left}..z5'..{dir90}z6l
+ ..z6r{dir-80}..z5r{right}..{right}z4r+o*left..z4r+o*down{down}..{down}z3r
+ ..{right}z2r{down}..z2l;
+p1:=z1l{dir80}..z1r..{up}z0r;
+p2:=z0l{down}..{dir190}z1l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+filldraw subpath(rundy(p0,tim0),infinity) of p0
+ ..subpath(0,rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..subpath(0,rundy(p1,tim1).zpet) of p1
+ ..cycle;
+penlabels(0,1,2,3,4,5,6); labels(5');
+endchar;
+
+iff known chars.math_dalet:
+bskchar "The Hebrew letter dalet";
+beginchar(chars.math_dalet,10.5u#,asc_height#,0); uni "0x2138";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+pos1(like_stem,0); pos2(.5[hair,stem],0);
+penpos3(hair,0); pos4(like_stem,90); penpos5(hair,30);
+bot y1l=-d; rt x1r=w-1.5u; y2=.5x_height;
+lft x2l=x1l; x3l=x2r;
+y4r=h-.5stem; x4=u+curve; y3=y4l; y3'=y4r+o; x3'=x3r+.5u; z4'=(x5r,y4l);
+lft x5l=u; top y5r=h+o;
+filldraw z1l..z2l{up}..{up}z3l+oblu*down..z3l+oblu*left{left}..z4l{left}..z4'..{dir90}z5l
+ ..z5r{dir-80}..z4r{right}..{right}z3'+o*left..z3'+o*down{down}..z3r+o*down{down}
+ ..{down}z2r..{down}z1r..{up}cycle;
+penlabels(1,2,3,4,5); labels(3',4');
+endchar;
+
iff known chars.sign_dolar:
bskchar "The dollar sign";
beginchar(chars.sign_dolar,9u#, asc_height#, 0); uni "0x0024";
adjust_fit(0,0);
pickup tiny.nib;
-numeric exc; exc=(w-u)/h; %FIXME oblu
+numeric exc; exc=(w-u)/h;
path p[]; numeric tim[];
pos2(hair,90); pos3(.9curve,angle((w-u,h))+180); pos4(hair,90);
pos5(stem,180); pos6(stem,180); pos8(hair,0); pos9(hair,0);
@@ -6894,17 +24626,19 @@ tim10=xpart(p1 intersectiontimes p4);
(tim19,tim20)=p0 intersectiontimes p10;
(tim21,tim22)=p0 intersectiontimes p9;
filldraw z1r--(x1r-.5o,y2-.5hair){dir-100}..subpath(tim1,rundy(p0,tim3).zpet) of p0
- ..{up}z8rr..z8l---(x8l,y8rr)..
- subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
- ..subpath(rundy(p2,(tim6,curve)), infinity) of p2--
- subpath(0,rundy(p3,(tim8,curve)).zpet) of p3
- ..subpath(rundy(p0,(tim7,curve)),infinity) of p0 ..z7l--(x7l+o,y4+hair){dir80}..
- subpath(tim2, rundy(p1,tim3).zpet) of p1..{down}z9ll..z9r---(x9r,y9ll)..
- subpath(rundy(p1,tim10),rundy(p1,tim11).zpet) of p1..
- subpath(rundy(p5,(tim12,curve)),infinity) of p5..
- subpath(0,rundy(p6,(tim14,curve)).zpet) of p6
+ ..{up}z8rr..z8l---(x8l,y8rr)
+ ..subpath(rundy(p0,tim4),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p2,(tim6,curve)), infinity) of p2
+ --subpath(0,rundy(p3,(tim8,if bold_face:.5\\fi curve)).zpet) of p3
+ ..subpath(rundy(p0,(tim7,curve)),infinity) of p0
+ ..z7l--(x7l+o,y4+hair){dir80}
+ ..subpath(tim2, rundy(p1,tim9).zpet) of p1
+ ..{down}z9ll..z9r---(x9r,y9ll)
+ ..subpath(rundy(p1,tim10),rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p5,(tim12,curve)),infinity) of p5
+ ..subpath(0,rundy(p6,(tim14,if bold_face:.5\\fi curve)).zpet) of p6
..subpath(rundy(p1,(tim13,curve)),infinity) of p1..cycle;
-oblu:=curve;%2.5f_obl; FIXME
+oblu:=2.5f_obl;
infill subpath(rundy(p1,tim15).zpet,rundy(p1,tim17)) of p1..
subpath(rundy(p7,tim18),infinity) of p7
--subpath(0,rundy(p8,tim16).zpet) of p8..cycle;
@@ -6915,9 +24649,107 @@ infill subpath(rundy(p0,tim19).zpet,rundy(p0,tim21)) of p0..
penlabels(0,1,2,3,4,5,6,7,8,9); labels(8rr,9ll);
endchar;
+iff known chars.sign_dolar_old:
+bskchar "The old-style dollar sign";
+beginchar(chars.sign_dolar_old,11u#, asc_height#, 0); uni "non"; %"0x0024.alt";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric exc; exc=(w-u)/h;
+path p[]; numeric tim[];
+pos2(hair,90); pos3(.9curve,angle((w-u,h))+180); pos4(hair,90);
+pos5(stem,180); pos6(stem,180);
+pos8(hair,0); pos9(hair,0); pos10(hair,0); pos11(hair,0);
+y5=.5[y2l,y3]+.5hair; x3-x5=.8(y2l-y3l)*exc;
+y6=.5[y4r,y3]-.5hair; rt x6l=w-u;
+x2=x3=x4=.5w; top y2r=h-hair; bot y4l=hair;
+y3=.5[y2l,y4r]+.5hair;
+x8=x9; x10=x11; .5[x8,x10]=x3; x8-x10=2u; top y8=top y10=h+o; bot y9=bot y11=-o;
+bskpoints(8,9,.5hair,.5hair); bskpoints(10,11,.5hair,.5hair);
+pos1(hair,0); x1r=w-x5r; y1=y5-.5hair;
+pos7(hair,0); x7l=w-x6l; y7=y6+.5hair;
+p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r;
+p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l;
+p2=(x8l,y3)--(x8l,y6); p9=p2 shifted (z8r-z8l);
+p3=(x9l,y6)--z9l; p10=p3 shifted (z8r-z8l);
+p4=z9r--(x9r,y6);
+p5=(x9r,y6)--(x9r,y5); p7=p5 shifted (z8l-z8r);
+p6=(x8r,y5)--z8r; p8=p6 shifted (z8l-z8r);
+p12=(x10l,y3)--(x10l,y6); p14=p2 shifted (z10r-z10l);
+p13=(x11l,y6)--z11l; p15=p13 shifted (z10r-z10l);
+p16=(x11r,y6)--(x11r,y5); p18=p16 shifted (z10l-z10r);
+p17=(x10r,y5)--z10r; p19=p17 shifted (z10l-z10r);
+tim1=xpart(p0 intersectiontimes ((.5w,y2-.5hair)--(w,y2-.5hair)));
+tim2=xpart(p1 intersectiontimes ((.5w,y4+hair)--(0,y4+hair)));
+tim3=xpart(p0 intersectiontimes ((x8r,y3)--z8r));
+tim4=xpart(p0 intersectiontimes ((x8l,y3)--z8l));
+(tim5,tim6)=p0 intersectiontimes p2;
+(tim7,tim8)=p0 intersectiontimes p3;
+tim9=xpart(p1 intersectiontimes p3);
+tim10=xpart(p1 intersectiontimes p4);
+(tim11,tim12)=p1 intersectiontimes p5;
+(tim13,tim14)=p1 intersectiontimes p6;
+(tim15,tim16)=p1 intersectiontimes p8;
+(tim17,tim18)=p1 intersectiontimes p7;
+(tim19,tim20)=p0 intersectiontimes p10;
+(tim21,tim22)=p0 intersectiontimes p9;
+tim23=xpart(p0 intersectiontimes ((x10r,y3)--z10r));
+tim24=xpart(p0 intersectiontimes ((x10l,y3)--z10l));
+(tim25,tim26)=p0 intersectiontimes p12;
+(tim27,tim28)=p0 intersectiontimes p13;
+tim29=xpart(p1 intersectiontimes ((x11l,y3)--z11l));
+tim30=xpart(p1 intersectiontimes p15);
+(tim31,tim32)=p1 intersectiontimes p19;
+(tim33,tim34)=p1 intersectiontimes p18;
+(tim35,tim36)=p1 intersectiontimes p17;
+(tim37,tim38)=p1 intersectiontimes p16;
+(tim39,tim40)=p0 intersectiontimes p15;
+(tim41,tim42)=p0 intersectiontimes p16;
+filldraw z1r--(x1r-.5o,y2-.5hair){dir-100}..subpath(tim1,rundy(p0,tim3).zpet) of p0
+ ..{up}z8rr..z8l---(x8l,y8rr)
+ ..subpath(rundy(p0,tim4),rundy(p0,tim23).zpet) of p0
+ ..{up}z10rr..z10l---(x10l,y10rr)
+ ..subpath(rundy(p0,tim24),rundy(p0,tim25).zpet) of p0
+ ..subpath(rundy(p12,(tim26,curve)), infinity) of p12
+ --subpath(0,rundy(p13,(tim28,if bold_face:.5\\fi curve)).zpet) of p13
+ ..subpath(rundy(p0,(tim27,curve)),infinity) of p0
+ ..z7l--(x7l+o,y4+hair){dir80}
+ ..subpath(tim2,rundy(p1,tim29).zpet) of p1
+ ..{down}z11ll..z11r---(x11r,y11ll)
+ ..subpath(rundy(p1,tim30),rundy(p1,tim9).zpet) of p1
+ ..{down}z9ll..z9r---(x9r,y9ll)
+ ..subpath(rundy(p1,tim10),rundy(p1,tim11).zpet) of p1
+ ..subpath(rundy(p5,(tim12,curve)),infinity) of p5
+ ..subpath(0,rundy(p6,(tim14,if bold_face:.5\\fi curve)).zpet) of p6
+ ..subpath(rundy(p1,(tim13,curve)),infinity) of p1..cycle;
+oblu:=2.5f_obl;
+infill subpath(rundy(p1,tim31).zpet,rundy(p1,tim33)) of p1
+ ..subpath(rundy(p18,tim34),infinity) of p18
+ --subpath(0,rundy(p19,tim32).zpet) of p19..cycle;
+infill subpath(rundy(p7,tim18),infinity) of p7
+ --subpath(0,rundy(p8,tim16).zpet) of p8
+ .. .5[point tim15 of p1,point tim35 of p1]
+ ..(reverse subpath(0,rundy(p17,tim36).zpet) of p17)
+ ..(reverse subpath(rundy(p16,tim38),infinity) of p16)
+ .. .5[point tim37 of p1,point tim17 of p1]
+ ..cycle;
+if bold_face: oblu:=f_obl; fi
+infill subpath(rundy(p0,tim19).zpet,rundy(p0,tim21)) of p0..
+ subpath(rundy(p9,tim20),infinity) of p9
+ --subpath(0,rundy(p10,tim22)) of p10..cycle;
+infill subpath(rundy(p2,tim6),infinity) of p2
+ --subpath(0,rundy(p3,tim8).zpet) of p3
+ .. .5[point tim7 of p0,point tim39 of p0]
+ ..(reverse subpath(0,rundy(p15,tim40).zpet) of p15)
+ ..(subpath(0,rundy(p16,tim42).zpet) of p16)
+ .. .5[point tim5 of p0,point tim41 of p0]
+ ..cycle;
+penlabels(0,1,2,3,4,5,6,7,8,9,10,11); labels(8rr,9ll);
+endchar;
+
iff known chars.sign_pound:
bskchar "Pound sign";
beginchar(chars.sign_pound,11.5u#,asc_height#,0); uni "0x00A3";
+italcorr asc_height#*slant-u#;
adjust_fit(serif_fit#,0);
pickup tiny.nib;
oblu:=2oblu;
@@ -6936,7 +24768,7 @@ bskpoints(6,9,bar,bar);
filldraw arm_bot_r_points(11r,10)..z2r---obl(8l,2r,9l)
---z9ll..z9r---obl(8r,9r,1r)---z1r ..{right}z3r
..z5l..z5'..z5r{up}..z3l{left}..z1l
- ---obl(7r,1l,6r)---z6rr..z6l---obl(7l,6l,2l)
+ ---tobl(7r,1l,6rr)---z6rr..z6l---obl(7l,6l,2l)
---z2l..{left}z4l..z4r---cycle;
}};
penlabels(1,2,3,4,5,6,7,8,9); labels(5',6rr,9ll);
@@ -7248,7 +25080,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,est_height)--(w,est_height)));
shift:=lft xpart(point tim1 of p0)- w+u;
x4l:=x4l-shift; x4r:=x4r-shift;
p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l;
-p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi;
+p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi:+up fi;
tim3=xpart(p0 intersectiontimes ((w,est_height)--(x3,est_height)));
tim4=xpart(p1 intersectiontimes ((0,est_height)--(x3,est_height)));
tim5=xpart(p1 intersectiontimes ((0,est_height)--(x3,est_height)));
@@ -7563,3 +25395,1999 @@ infill subpath(rundy(p10,0),rundy(p10,infinity).zpet) of p10
penlabels(0,1,2,3,4,5,5',6,6',7,8,9,10);
endchar;
+iff known chars.math_multimap:
+bskchar "Multimap symbol";
+beginchar(chars.math_multimap,16u#,v_center(.6x_height#)); uni "0x22B8";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; lft x9=u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10l---z9l..z9rr---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimapdot:
+bskchar "Multimap symbol with dot";
+beginchar(chars.math_multimapdot,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; lft x9=u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10l---z9l..z9rr---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimap_inverted:
+bskchar "Inverted multimap symbol";
+beginchar(chars.math_multimap_inverted,16u#,v_center(.6x_height#)); uni "0x27DC";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; rt x9=w-u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10r---z9rr..z9l---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimapdot_inverted:
+bskchar "Inverted multimap symbol with dot";
+beginchar(chars.math_multimapdot_inverted,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; rt x9=w-u; y9=y10;
+bskpoints(9,10,hair,hair);
+p0=draw_circle.l;
+p1=z10r---z9rr..z9l---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_multimap_both:
+bskchar "Multimap-both symbol";
+beginchar(chars.math_multimap_both,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,2),length p2) of p2
+ ..subpath(0,rundy(p2,2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill p1;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_both:
+bskchar "Multimap-both symbol with dots";
+beginchar(chars.math_multimapdot_both,16u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,2),length p1) of p1
+ ..subpath(0,rundy(p1,2).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_left_both:
+bskchar "Multimap-both symbol with left dot";
+beginchar(chars.math_multimapdot_left_both,16u#,v_center(.6x_height#)); uni "0x22B7";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,2),length p2) of p2
+ ..subpath(0,rundy(p2,2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill p1;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_right_both:
+bskchar "Multimap-both symbol with right dot";
+beginchar(chars.math_multimapdot_right_both,16u#,v_center(.6x_height#)); uni "0x22B6";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z6l;
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=pol+rule_thickness*left; z9=z2l+rule_thickness*right;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,2),length p1) of p1
+ ..subpath(0,rundy(p1,2).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimap_both_vert:
+bskchar "Vertical multimap-both symbol";
+beginchar(chars.math_multimap_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,0),rundy(p2,length p2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+infill p1;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_both_vert:
+bskchar "Vertical multimap-both symbol with dots";
+beginchar(chars.math_multimapdot_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_top_both_vert:
+bskchar "Vertical multimap-both symbol with top dot";
+beginchar(chars.math_multimapdot_top_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p1=draw_circle.l;
+p2=z10l---z9l;
+p3=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p2,0),rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_multimapdot_bot_both_vert:
+bskchar "Vertical multimap-both symbol with botttom dot";
+beginchar(chars.math_multimapdot_bot_both_vert,10u#,body_height#,paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; pair pol; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+p0=draw_circle.l;
+p1=draw_circle.r;
+pol:=z4l;
+save x,y;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=pol+rule_thickness*down; z9=z8l+rule_thickness*up;
+p2=draw_circle.l;
+p3=z10l---z9l;
+p4=z9r---z10r;
+filldraw subpath(0,rundy(p0,4).zpet) of p0
+ ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p2,0),rundy(p2,length p2).zpet) of p2
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p0,4),length p0) of p0..cycle;
+infill p1;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_line_vert_circle:
+bskchar "Vertical line with circle above";
+beginchar(chars.math_multimap_both_vert,7u#,body_height#,paren_depth#); uni "0x2AEF";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; top y8=h-.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+z10=z4l+rule_thickness*down; bot z9=(x10,-d);;
+bskpoints(9,10,rule_thickness,rule_thickness);
+p=draw_circle.l;
+filldraw subpath(0,rundy(p,4).zpet) of p..z10l---z9l..z9rr---z10r
+ ..subpath(rundy(p,4),length p) of p..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(9rr);
+endchar;
+
+iff known chars.math_circle_line_vert:
+bskchar "Vertical line with circle below";
+beginchar(chars.math_circle_line_vert,7u#,body_height#,paren_depth#); uni "0x2AF0";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+top z10=(x9,h); z9=z8l+rule_thickness*up;
+bskpoints(9,10,rule_thickness,rule_thickness);
+p=draw_circle.l;
+filldraw z10ll---z9l..subpath(rundy(p,0),rundy(p,length p).zpet) of p..z9r---z10r..cycle;
+infill draw_circle.r;
+penlabels(9,10); labels(10ll);
+endchar;
+
+iff known chars.math_circle_tack_down:
+bskchar "Down tack with circle below";
+beginchar(chars.math_circle_tack_down,7u#,body_height#,paren_depth#); uni "0x2AF1";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p; oblu:=rule_thickness;
+x8=.5w; y8-y4=x2-x6; bot y4=-d+.5rule_thickness; top y8-y2=.3x_height-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,180); pos10(rule_thickness,180);
+pos11(rule_thickness,90); pos12(rule_thickness,90);
+x10=x9; y10=y11l; z9=z8l+rule_thickness*up;
+lft x11=u; rt x12=w-u; top y11r=top y12r=h;
+bskpoints(11,12,rule_thickness,rule_thickness);
+p=draw_circle.l;
+filldraw z12ll---obl(10l,12ll,9l)---z9l
+ ..subpath(rundy(p,0),rundy(p,length p).zpet) of p
+ ..z9r---obl(10r,9r,11l)---z11l..z11rr---z12r..cycle;
+infill draw_circle.r;
+penlabels(9,10,11,12); labels(11rr,12ll);
+endchar;
+
+iff known chars.math_dfourier:
+bskchar "Dfourier symbol";
+beginchar(chars.math_dfourier,13u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; x9=.5[x10,x11]; y9=y10;
+top rt z11=(w-u,h);
+pos11(rule_thickness,angle(z9-z11)-90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10r---obl(9r,10r,11r)---z11r..z11ll---obl(9l,11l,10l)---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+endchar;
+
+iff known chars.math_dfourier_inverted:
+bskchar "Inverted dfourier symbol";
+beginchar(chars.math_dfourier_inverted,13u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; x9=.5[x10,x11]; y9=y10;
+top lft z11=(u,h);
+pos11(rule_thickness,angle(z9-z11)+90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10l---obl(9l,10l,11l)---z11ll..z11r---obl(9r,11r,10r)---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+endchar;
+
+iff known chars.math_ztrans:
+bskchar "Z transformation symbol";
+beginchar(chars.math_ztrans,19u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z2l+rule_thickness*right; x9=.5[x10,x11]; y9=y10;
+top rt z11=(w-8u,h);
+pos11(rule_thickness,angle(z9-z11)-90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10r---obl(9r,10r,11r)---z11r..z11ll---obl(9l,11l,10l)---z10l;
+filldraw subpath(0,rundy(p0,2).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,2),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+save x,y;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos12(rule_thickness,90); pos13(rule_thickness,90);
+z12=z6l+rule_thickness*left; y12=y13; x13=w-8u;
+bskpoints(13,12,hair,hair);
+p2=draw_circle.l;
+p3=z12l---z13l..z13rr---z12r;
+filldraw subpath(0,rundy(p2,6).zpet) of p2
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p2,6),length p2) of p2..cycle;
+penlabels(12,13); labels(13rr);
+endchar;
+
+iff known chars.math_ztrans_inv:
+bskchar "Inverted Z transformation symbol";
+beginchar(chars.math_ztrans_inv,19u#,v_center(.6x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; oblu:=rule_thickness;
+rt x2=w-u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos9(rule_thickness,90); pos10(rule_thickness,90);
+z10=z6l+rule_thickness*left; x9=.5[x10,x11]; y9=y10;
+top lft z11=(8u,h);
+pos11(rule_thickness,angle(z9-z11)-90);
+bskpoints(9,11,hair,hair);
+p0=draw_circle.l;
+p1=z10l---obl(9l,10l,11r)---z11r..z11ll---obl(9r,11l,10r)---z10r;
+filldraw subpath(0,rundy(p0,6).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,length p1).zpet) of p1
+ ..subpath(rundy(p0,6),length p0) of p0..cycle;
+infill draw_circle.r;
+penlabels(9,10,11); labels(11ll);
+save x,y;
+lft x6=u; y2=math_axis; y8-y4=x2-x6; top y8=h-.5rule_thickness;
+circle_points(rule_thickness);
+pos12(rule_thickness,90); pos13(rule_thickness,90);
+z12=z2l+rule_thickness*right; y12=y13; x13=8u;
+bskpoints(13,12,hair,hair);
+p2=draw_circle.l;
+p3=z12r---z13rr..z13l---z12l;
+filldraw subpath(0,rundy(p2,2).zpet) of p2
+ ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3
+ ..subpath(rundy(p2,2),length p2) of p2..cycle;
+penlabels(12,13); labels(13rr);
+endchar;
+
+iff known chars.math_lambda:
+bskchar "Stylized lambda symbol";
+beginchar(chars.math_lambda,13u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=1.5oblu;
+numeric thr;
+lft x1=u+.5rule_thickness; x2=w-x1; top y1=h; bot y2=0;
+x3l=x1l; y3l=y2; y4l=.5[x_height,bar_height];
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0);
+z4l=whatever[z2l,z1l];
+thr:=rule_thickness/abs(sind(angle(z3l-z4l)));
+pos3(thr,0); z4r=whatever[z2l,z1l]=z3r+whatever*(z4l-z3l);
+filldraw z1l---obl(4l,1l,3l)---z3l..z3r---obl(4r,3r,2l).more---z2l..z2r---z1r..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_lambda_refl:
+bskchar "Reflected stylized lambda symbol";
+beginchar(chars.math_lambda_refl,13u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=1.5oblu;
+numeric thr;
+rt x1=w-u-.5rule_thickness; x2=w-x1; top y1=h; bot y2=0;
+x3l=x1l; y3l=y2; y4l=.5[x_height,bar_height]-.5rule_thickness;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0);
+z4l=whatever[z2r,z1r];
+thr:=rule_thickness/abs(sind(angle(z3l-z4l)));
+pos3(thr,0); z4r=whatever[z2r,z1r]=z3r+whatever*(z4l-z3l);
+filldraw z1r---obl(4r,1r,3r)---z3r..z3l---obl(4l,3l,2r).more---z2r..z2l---z1l..cycle;
+penlabels(1,2,3,4);
+endchar;
+
+iff known chars.math_right_angle_nw:
+bskchar "Northwest right angle symbol";
+beginchar(chars.math_right_angle_nw,10u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+lft x1l=lft x2l=u; rt x3=w-u;
+top y2=top y3l=h; y2-y1=x3-x2l; y2r:=y2-rule_thickness+currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_nw_dot:
+bskchar "Northwest right angle symbol with dot";
+beginchar(chars.math_right_angle_nw_dot,10u#,asc_height#,0); uni "0x27D4";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+lft x1l=lft x2l=u; rt x3=w-u; z4=.5[z1,z3];
+top y2=top y3l=h; y2-y1=x3-x2l; y2r:=y2-rule_thickness+currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+dot(4);
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_ne:
+bskchar "Northeast right angle symbol";
+beginchar(chars.math_right_angle_ne,10u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+rt x1r=rt x2r=w-u; lft x3=u;
+top y2=top y3r=h; y2-y1=x2r-x3; y2l:=y2-rule_thickness+currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_sw:
+bskchar "Southwest right angle symbol";
+beginchar(chars.math_right_angle_sw,10u#,8u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90);
+lft x1l=lft x2l=u; rt x3=w-u;
+bot y2=bot y3l=0; y1-y2=x3-x2l; y2r:=y2+rule_thickness-currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_se:
+bskchar "Southeast right angle symbol";
+beginchar(chars.math_right_angle_se,10u#,8u#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+rt x1r=rt x2r=w-u; lft x3=u;
+bot y2=bot y3r=0; y1-y2=x2r-x3; y2l:=y2+rule_thickness-currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_right_angle_se_dot:
+bskchar "Southeast right angle symbol with dot";
+beginchar(chars.math_right_angle_se_dot,10u#,8u#,0); uni "0x27D3";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,270);
+rt x1r=rt x2r=w-u; lft x3=u; z4=.5[z1,z3];
+bot y2=bot y3r=0; y1-y2=x2r-x3; y2l:=y2+rule_thickness-currentbreadth;
+filldraw z1l---obl(2l,1l,3l)---z3l..z3r---obl(2r,3r,1r)---z1r..cycle;
+dot(4);
+penlabels(1,2,3);
+endchar;
+
+iff known chars.math_axis_line_short:
+bskchar "Short axis line";
+beginchar(chars.math_axis_line_short,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos0(rule_thickness,90); pos1(rule_thickness,90);
+y0=y1=math_axis; lft x0=1.5u; x1=w-x0;
+filldraw bskrule(0,1,rule_thickness,rule_thickness);
+penlabels(0,1);
+endchar;
+
+iff known chars.math_angle:
+bskchar "Simple angle sign";
+beginchar(chars.math_angle,12u#,.8asc_height#,0); uni "0x2220";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric thr;
+rt x1=w-u-.5rule_thickness; x2=w-x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x4=w-u; z3r=whatever[z2r,z1r];
+bskpoints(4,3,rule_thickness,rule_thickness);
+filldraw z1r---obl(3r,1r,4r).more---z4rr..z4l---obl(2l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(4rr);
+endchar;
+
+iff known chars.math_angle_arc:
+bskchar "Simple angle sign with arc";
+beginchar(chars.math_angle_arc,12u#,.8asc_height#,0); uni "0x2221";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric thr; path p[];
+rt x1=w-u-.5rule_thickness; x2=w-x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=.5[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+bskpoints(4,3,rule_thickness,rule_thickness);
+p0=z6r{dir(angle(z1-z2)-90)}..{down}z5r;
+p1=z6l{dir(angle(z1-z2)-90)}..{down}z5l;
+p2=z1r--z6r;
+p3=z5r--z4rr;
+p4=z3r--z6l;
+p5=z5l--z3r;
+filldraw subpath(0,rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p3,0),1) of p3{right}
+ ..z4l---obl(2l,4l,1l)---z1l..cycle;
+infill subpath(rundy(p5,0),rundy(p5,(1,2oblu)).zpet) of p5
+ ..subpath(rundy(p4,(0,2oblu)),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p1,0),rundy(p1,1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right:
+bskchar "Simple right-angle sign";
+beginchar(chars.math_angle_right,12u#,.8asc_height#,0); uni "0x221F";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric thr;
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x4=w-u; z3r=whatever[z2r,z1r];
+bskpoints(4,3,rule_thickness,rule_thickness);
+filldraw z1r---obl(3r,1r,4r).more---z4rr..z4l---obl(2l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right_arc:
+bskchar "Simple right-angle sign with arc";
+beginchar(chars.math_angle_right_arc,12u#,.8asc_height#,0); uni "0x22BE";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=.5[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+bskpoints(4,3,rule_thickness,rule_thickness);
+p0=z6r{dir(angle(z1-z2)-90)}..{down}z5r;
+p1=z6l{dir(angle(z1-z2)-90)}..{down}z5l;
+p2=z1r--z6r;
+p3=z5r--z4rr;
+p4=z3r--z6l;
+p5=z5l--z3r;
+filldraw subpath(0,rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p3,0),1) of p3{right}
+ ..z4l---obl(2l,4l,1l)---z1l..cycle;
+infill subpath(rundy(p5,0),rundy(p5,(1,2oblu)).zpet) of p5
+ ..subpath(rundy(p4,(0,2oblu)),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p1,0),rundy(p1,1).zpet) of p1..cycle;
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right_arc_dot:
+bskchar "Simple right-angle sign with arc and dot inside";
+beginchar(chars.math_angle_right_arc_dot,12u#,.8asc_height#,0); uni "0x299D";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[];
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=2/3[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+bskpoints(4,3,rule_thickness,rule_thickness);
+p0=z6r{dir(angle(z1-z2)-90)}..{down}z5r;
+p1=z6l{dir(angle(z1-z2)-90)}..{down}z5l;
+p2=z1r--z6r;
+p3=z5r--z4rr;
+p4=z3r--z6l;
+p5=z5l--z3r;
+z7=.5[z3r+oblu*dir45, (z3r--z3r+w*dir45) intersectionpoint p1];
+filldraw subpath(0,rundy(p2,1).zpet) of p2
+ ..subpath(rundy(p0,0),rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p3,0),1) of p3{right}
+ ..z4l---obl(2l,4l,1l)---z1l..cycle;
+infill subpath(rundy(p5,0),rundy(p5,(1,2oblu)).zpet) of p5
+ ..subpath(rundy(p4,(0,2oblu)),rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p1,0),rundy(p1,1).zpet) of p1..cycle;
+dot(7);
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_angle_right_square:
+bskchar "Simple right-angle sign with square";
+beginchar(chars.math_angle_right_square,12u#,.8asc_height#,0); uni "0x299C";
+adjust_fit(0,0);
+pickup tiny.nib;
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,0);
+rt x4=w-u; z3r=whatever[z2r,z1r]; y5=y4r; x5=.5[x3,x4];
+z6l-z3r=(z5l-z3r) rotated angle(z1-z2);
+z6r-z3r=(z5r-z3r) rotated angle(z1-z2);
+z7r=(x5r,y6r); z7l=(x5l,y6l);
+bskpoints(4,3,rule_thickness,rule_thickness);
+filldraw z1r---obl(6r,1r,7r)---obl(7r,6r,5r)---obl(5r,7r,4r)---z4rr..z4l
+ ---obl(2l,4l,1l)---z1l..cycle;
+infill obl(6l,3r,7l)---obl(7l,6l,5l)---obl(5l,7l,3r)---obl(3r,5l,6l)---cycle;
+penlabels(1,2,3,4,5,6,7); labels(4rr);
+endchar;
+
+iff known chars.math_angle_3D:
+bskchar "Threedimensional angle sign";
+beginchar(chars.math_angle_3D,12u#,.8asc_height#,0); uni "0x27C0";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=2oblu;
+numeric thr;
+lft x1=u+.5rule_thickness; x2=x1; top y1=h; bot y2=bot y4l=bot y3l=0;
+thr:=rule_thickness/abs(sind(angle(z2-z1)));
+pos1(thr,0); pos2(thr,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+rt x4=w-u; z3r=whatever[z2r,z1r];
+x5=x4-.5rule_thickness; y5=y1-.5rule_thickness; y6r=y4r; x6l=x1r;
+pos5(rule_thickness,angle(z5-z2)-90);
+z6r=z5r+whatever*(z2-z5); z6l=z5l+whatever*(z2-z5); z6=.5[z6l,z6r];
+bskpoints(4,3,rule_thickness,rule_thickness); bskpoints(5,6,rule_thickness,rule_thickness);
+filldraw z1r---obl(6l,1r,5l).more--z5l..z5rr---obl(6r,5r,4r).more---z4rr..z4l---obl(2l,4l,1l)---z1l..cycle;
+penlabels(1,2,3,4,5,6); labels(4rr);
+endchar;
+
+iff known chars.math_propto_circ:
+bskchar "Proportionality sign made from circles";
+beginchar(chars.math_propto_circ,1.5x_height#+2u#,x_height#,0);
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric shift, tim[]; path p[];
+lft x6=u+.5rule_thickness; y2=y0=.5h; x0=x8; y8-y4=x2-x6; top y8=h;
+circle_points(rule_thickness);
+forsuffixes $=8,7,6,5,4: z$ll-z$l=z$rr-z$r=shift*right; endfor;
+z6ll=z2r;
+p0=z2l{up}..z1l..{left}z8l..z7l..{down}z6l..z5l..{right}z4l..z3l..{up}z2l;
+p1=z8ll{left}..z7ll..{down}z2r;
+p2=z2r{down}..z5ll..{right}z4ll;
+z9=bsktouch(p0,right,p1,left); z10=bsktouch(p0,right,p2,left);
+tim0=xpart(p0 intersectiontimes (z9--(x8,y9)));
+tim1=xpart(p1 intersectiontimes (z9--(x8ll,y9)));
+tim2=xpart(p0 intersectiontimes (z10--(x8,y10)));
+tim3=xpart(p2 intersectiontimes (z10--(x8ll,y10)));
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),infinity) of p2
+ ..z4rr{left}..z2l{up}..{right}z8rr..cycle;
+infill draw_circle.r;
+labels(8ll,8rr,7ll,7rr,6ll,6rr,5ll,5rr,4ll,4rr);
+endchar;
+
+iff known chars.math_sim_inv:
+bskchar "Inverted similarity sign";
+beginchar(chars.math_sim_inv, 14u#, v_center(.5x_height#)); uni "0x223D";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=h+d;
+vlnka_inv(0,1);
+endchar;
+
+iff known chars.math_sim_inv_eq:
+bskchar "Inverted similar or equal sign";
+beginchar(chars.math_sim_inv_eq, 14u#, v_center(.5x_height#+3u#)); uni "0x22CD";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=(h+d)-3u;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+top y0=h; lft x2=u; rt x3=w-u; y2l=y3l=-d;
+vlnka_inv(0,1);
+filldraw bskrule(2,3,hair,hair);
+endchar;
+
+iff known chars.math_sim_inv_eq_double:
+bskchar "Inverted similar or double equal sign (All equal to)";
+beginchar(chars.math_sim_inv_eq_double, 14u#, v_center(.95x_height#+2u#)); uni "0x224C";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric spread; spread:=.5x_height;
+pos2(rule_thickness,90); pos3(rule_thickness,90);
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+top y0=h; lft x2=lft x4=u; rt x3=rt x5=w-u; y2l=y3l=-d; y4=y5=y3+.45x_height;
+vlnka_inv(0,1);
+filldraw bskrule(2,3,hair,hair);
+filldraw bskrule(4,5,hair,hair);
+penlabels(2,3,4,5);
+endchar;
+
+iff known chars.math_division_times:
+bskchar "Division times sign";
+beginarithchar(chars.math_division_times); uni "0x22C7";
+pickup tiny.nib;
+oblu:=1.5oblu; oblu.more:=2f_obl;
+pos1(rule_thickness,135); pos2(rule_thickness,135);
+pos3(rule_thickness,45); pos4(rule_thickness,45);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+lft x1r=lft x3l=2u; rt x2l=rt x4r=w-2u;
+bot y1l=bot y4l=-d+u; top y2r=top y3r=h-u;
+y5=y6=.5[y13,y14]=math_axis; lft x5=u; rt x6=w-u;
+x13=x14=.5w; top y13+.25dot_size=y3r;
+bskpoints(5,6,hair,hair);
+z7=whatever[z4l,z3l]=whatever[z1l,z2l];
+z8=whatever[z1r,z2r]=whatever[z5l,z6l];
+z9=whatever[z3l,z4l]=whatever[z5r,z6r];
+z10=whatever[z3r,z4r]=whatever[z1r,z2r];
+z11=whatever[z2l,z1l]=whatever[z5r,z6r];
+z12=whatever[z4r,z3r]=whatever[z5l,z6l];
+filldraw z4l---obl(7,4l,1l)---z1l..z1r---obl(8,1r,5l).more---z5l
+ ..z5rr---obl(9,5r,3l).more---z3l..z3r---obl(10,3r,2r)---z2r
+ ..z2l---obl(11,2l,6r).more---z6r..z6ll---obl(12,6l,4r).more---z4r..cycle;
+dot(13); dot(14);
+penlabels(1,2,3,4,5,6); labels(5rr,6ll,7,8,9,10,11,12);
+endchar;
+
+iff known chars.math_sunrise:
+bskchar "Sunrise symbol";
+beginchar(chars.math_sunrise,13u#,.425x_height#+.5rule_thickness#+math_axis#,.225x_height#+.5rule_thickness#-math_axis#); uni "0x224F";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos1'(rule_thickness,180); pos2'(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2; x5=.5[x1,x2]=.5[x1',x2'];
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=.45x_height;
+top y5r=h+o; y1'=y2'=y1r; x2'-x1'=2(y5-y2'); y2'l:=y1'l:=y2l;
+bskpoints(1,2,hair,0);
+p0=z1r--z1'r;
+p1=z1'r{up}..z5r..{down}z2'r;
+p2=z2'r--z2r;
+p3=z2ll--z2'l;
+p4=z2'l{up}..z5l..{down}z1'l;
+p5=z1'l--z1l;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,2).zpet) of p1
+ ..subpath(rundy(p2,0),infinity) of p2{right}
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,2).zpet) of p4
+ ..subpath(rundy(p5,0),infinity) of p5..cycle;
+filldraw bskrule(4,3,hair,0);
+penlabels(1,1',2,2',3,4,5);
+endchar;
+
+iff known chars.math_equals_bumpy:
+bskchar "Equals sign with bumpy";
+beginchar(chars.math_equals_bumpy,13u#,.65x_height#+.5rule_thickness#+math_axis#,.5x_height#+.5rule_thickness#-math_axis#); uni "0x2AAE";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos6(rule_thickness,90); pos7(rule_thickness,90);
+pos5(rule_thickness,90); pos1'(rule_thickness,180); pos2'(rule_thickness,0);
+lft x1=lft x6=u; x2+x1=w; x3=x1; x4=x7=x2; x5=.5[x1,x2]=.5[x1',x2'];
+y1=y2; y3=y4; y6=y7; .5[y1,y6]=y3=math_axis; y1-y3=.45x_height;
+top y5r=h+o; y1'=y2'=y1r; x2'-x1'=2(y5-y2'); y2'l:=y1'l:=y2l;
+bskpoints(1,2,hair,0);
+p0=z1r--z1'r;
+p1=z1'r{up}..z5r..{down}z2'r;
+p2=z2'r--z2r;
+p3=z2ll--z2'l;
+p4=z2'l{up}..z5l..{down}z1'l;
+p5=z1'l--z1l;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,2).zpet) of p1
+ ..subpath(rundy(p2,0),infinity) of p2{right}
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,2).zpet) of p4
+ ..subpath(rundy(p5,0),infinity) of p5..cycle;
+filldraw bskrule(3,4,hair,0);
+filldraw bskrule(7,6,hair,0);
+penlabels(1,1',2,2',3,4,5,6,7);
+endchar;
+
+iff known chars.math_over_water:
+bskchar "Over water symbol";
+beginchar(chars.math_over_water,13u#,.225x_height#+.5rule_thickness#+math_axis#,.425x_height#+.5rule_thickness#-math_axis#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,270); pos3'(rule_thickness,180); pos4'(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2; x5=.5[x1,x2]=.5[x3',x4'];
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=.45x_height;
+bot y5r=-d-o; y3'=y4'=y3l; x4'-x3'=2(y3'-y5);
+y4'l:=y3'l:=y4r;
+bskpoints(4,3,hair,0);
+p1=z3ll--z3'r;
+p2=z3'r{down}..z5r..{up}z4'r;
+p3=z4'r--z4l;
+p4=z4r--z4'l;
+p5=z4'l{down}..z5l..{up}z3'l;
+p6=z3'l--z3r;
+filldraw bskrule(1,2,hair,0);
+filldraw subpath(0,rundy(p1,1).zpet) of p1
+ ..subpath(rundy(p2,0),rundy(p2,2).zpet) of p2
+ ..subpath(rundy(p3,0),infinity) of p3{right}
+ ..subpath(0,rundy(p4,1).zpet) of p4
+ ..subpath(rundy(p5,0),rundy(p5,2).zpet) of p5
+ ..subpath(rundy(p6,0),infinity) of p6..cycle;
+penlabels(1,2,3,3',4,4',5,6);
+endchar;
+
+iff known chars.math_sunrise_water:
+bskchar "Sunrise over water symbol";
+beginchar(chars.math_sunrise_water,13u#,v_center(.85x_height#+rule_thickness#)); uni "0x224E";
+adjust_fit(0,0);
+pickup tiny.nib; path p[];
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos1'(rule_thickness,180); pos2'(rule_thickness,0);
+pos6(rule_thickness,270); pos3'(rule_thickness,180); pos4'(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2; x5=x6=.5[x1,x2]=.5[x1',x2']=.5[x3',x4'];
+y1=y2; y3=y4; .5[y1,y3]=math_axis; y1-y3=.45x_height;
+top y5r=h+o; bot y6r=-d-o; y1'=y2'=y1r; y3'=y4'=y3l; x2'-x1'=x4'-x3'=2(y5-y2');
+y2'l:=y1'l:=y2l; y4'l:=y3'l:=y4r;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+p0=z1r--z1'r;
+p1=z1'r{up}..z5r..{down}z2'r;
+p2=z2'r--z2r;
+p3=z2ll--z2'l;
+p4=z2'l{up}..z5l..{down}z1'l;
+p5=z1'l--z1l;
+p6=z3ll--z3'r;
+p7=z3'r{down}..z6r..{up}z4'r;
+p8=z4'r--z4l;
+p9=z4r--z4'l;
+p10=z4'l{down}..z6l..{up}z3'l;
+p11=z3'l--z3r;
+filldraw subpath(0,rundy(p0,1).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,2).zpet) of p1
+ ..subpath(rundy(p2,0),infinity) of p2{right}
+ ..subpath(0,rundy(p3,1).zpet) of p3
+ ..subpath(rundy(p4,0),rundy(p4,2).zpet) of p4
+ ..subpath(rundy(p5,0),infinity) of p5..cycle;
+filldraw subpath(0,rundy(p6,1).zpet) of p6
+ ..subpath(rundy(p7,0),rundy(p7,2).zpet) of p7
+ ..subpath(rundy(p8,0),infinity) of p8{right}
+ ..subpath(0,rundy(p9,1).zpet) of p9
+ ..subpath(rundy(p10,0),rundy(p10,2).zpet) of p10
+ ..subpath(rundy(p11,0),infinity) of p11..cycle;
+penlabels(1,1',2,2',3,3',4,4',5,6);
+endchar;
+
+iff known chars.math_pitchfork:
+bskchar "Pitchfork symbol";
+beginchar(chars.math_pitchfork,11u#,asc_height#,0); uni "0x22D4";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bot y1=bot y5=bot y6=-d; top y3l=.7h; top y7=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,0,hair);
+p0=z1l---z2l...{right}z3l;
+p1=z3l{right}...z4l---z5l;
+p2=z5rr---z4r...{left}z3r;
+p3=z3r{left}...z2r---z1rr;
+p4=z6l--z7ll;
+p5=z7r--z6r;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p5;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p5,(tim5,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim6,2oblu)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr,7ll);
+endchar;
+
+iff known chars.math_pitchfork_top:
+bskchar "Pitchfork symbol with top";
+beginchar(chars.math_pitchfork_top,11u#,asc_height#,0); uni "0x2ADA";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+pos8(rule_thickness,90); pos9(rule_thickness,90);
+bot y1=bot y5=bot y6=-d; top y3l=.7h; top y8r=top y9r=h; y7=y8l;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3-(x3-x2); .5[x8,x9]=x7; x9-x8=1.5(y7-y3);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(8,9,hair,hair);
+p0=z1l---z2l...{right}z3l;
+p1=z3l{right}...z4l---z5l;
+p2=z5rr---z4r...{left}z3r;
+p3=z3r{left}...z2r---z1rr;
+p4=z6l---obl(7l,6l,8l)---z8l..z8rr---z9r;
+p5=z9ll---obl(7r,9l,6r)---z6r;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p5;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p5,(tim5,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim6,2oblu)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,7ll,8rr,9ll);
+endchar;
+
+iff known chars.math_intersection_trans:
+bskchar "Transversal intersection symbol";
+beginchar(chars.math_intersection_trans,11u#,asc_height#,.5desc_depth#); uni "0x2ADB";
+italcorr .8asc_height#*slant-u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,-90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+bot y1=bot y5=0; bot y6=-d; top y3l=.7h; top y7=h+o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3-(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,0,hair);
+p0=z1l---z2l...{right}z3l;
+p1=z3l{right}...z4l---z5l;
+p2=z5rr---z4r...{left}z3r;
+p3=z3r{left}...z2r---z1rr;
+p4=z6l--z7ll;
+p5=z7r--z6r;
+(tim0,tim1)=p0 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p5;
+(tim4,tim5)=p2 intersectiontimes p5;
+(tim6,tim7)=p3 intersectiontimes p4;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p4,tim1),infinity) of p4
+ ..subpath(0,rundy(p5,tim3).zpet) of p5
+ ..subpath(rundy(p1,tim2),infinity) of p1
+ ..subpath(0,rundy(p2,(tim4,2oblu)).zpet) of p2
+ ..subpath(rundy(p5,(tim5,2oblu)),infinity) of p5
+ ..subpath(0,rundy(p4,(tim7,2oblu)).zpet) of p4
+ ..subpath(rundy(p3,(tim6,2oblu)),infinity) of p3..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr,7ll);
+endchar;
+
+iff known chars.math_iron_cross:
+bskchar "Iron cross";
+beginchar(chars.math_iron_cross,asc_height#+2u#,asc_height#,0); uni "0x2720";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric crw, tim[]; crw:=x_height; oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos1'(crw,0); pos2'(crw,0);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos3'(crw,90); pos4'(crw,90);
+x1=x2=x1'=x2'=.5w; x3=x1l; x4=x1r; top y1'=h; bot y2'=-d;
+y3=y4=y3'=y4'=.5[h,-d]; y1=y3r; y2=y3l; lft x3'=u; rt x4'=w-u;
+p1=z1'l..z1l---z2l..z2'l;
+p2=z2'r..z2r---z1r..z1'r;
+p3=z3'l..z3l---z4l..z4'l;
+p4=z4'r..z4r---z3r..z3'r;
+(tim0,tim1)=p1 intersectiontimes p4;
+(tim2,tim3)=p1 intersectiontimes p3;
+(tim4,tim5)=p2 intersectiontimes p3;
+(tim6,tim7)=p2 intersectiontimes p4;
+filldraw subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p4,tim1),infinity) of p4{down}
+ ..rt z3'..{down}subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p1,tim2),infinity) of p1{right}
+ ..top z2'..{right}subpath(0,rundy(p2,tim4).zpet) of p2
+ ..subpath(rundy(p3,tim5),infinity) of p3{up}
+ ..lft z4'..{up}subpath(0,rundy(p4,tim7).zpet) of p4
+ ..subpath(rundy(p2,tim6),infinity) of p2{left}
+ ..bot z1'..{left}cycle;
+penlabels(1,1',2,2',3,3',4,4');
+endchar;
+
+iff known chars.math_bourbaki_C:
+bskchar "Bourbaki C symbol";
+beginchar(chars.math_bourbaki_C,9.5u#, body_height#,0); uni "0x2201";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(bourstem,180); pos2(bourstem,180); pos3(bourstem,270);
+pos4(bourstem,0); pos5(bourstem,0); pos6(bourstem,90);
+pos7(bourstem,180); pos8(bourstem,180);
+rt x1l= rt x2l=rt x7l=rt x8l=w-u; lft x4l=lft x5l=u;
+x3=x6=.5w; top y3l=h+o; bot y6l=-d-o;
+y2-y1=y8-y7=bourstem; y4=y2; y5=y7; y3-y2=y7-y6=x2-x3-currentbreadth;
+y2l:=y4l:=y2l+.35bourstem; y5l:=y7l:=y5l-.35bourstem;
+if y1-y8<bourstem: numeric posuv; posuv:=.5(bourstem-(y1-y8));
+ y1:=y1+posuv; y1l:=y1r:=y1; y8:=y8-posuv; y8r:=y8l:=y8;
+fi
+bskpoints(1,2,0,rule_thickness); bskpoints(8,7,0,rule_thickness);
+filldraw z1rr---z2r..z3r..z4r---z5r..z6r..z7r---z8rr..z8l
+ ---z7l..z6l..z5l---z4l..z3l..z2l---z1l..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(1rr,8rr);
+endchar;
+
+iff known chars.math_bourbaki_T:
+bskchar "Bourbaki T symbol";
+beginchar(chars.math_bourbaki_T,11u#, x_height#,.75desc_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib; oblu:=2oblu;
+pos1(bourstem,0); pos2(bourstem,0);
+pos3(bourstem,90); pos4(bourstem,90);
+x1=x2=.5w; top y3r=top y4r=h; bot y1=-d; y2=y3l;
+lft x3=u; rt x4=w-u;
+bskpoints(3,4,rule_thickness,rule_thickness);
+filldraw z1r---obl(2r,1r,4l)---z4ll..z4r---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(3rr,4ll);
+endchar;
+
+iff known chars.math_vert_slurs:
+bskchar "Vertical crossings slurs";
+beginchar(chars.math_vert_slurs,7u#,asc_height#,desc_depth#); uni "0x226C";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(.75rule_thickness,0); pos2(rule_thickness,0); pos3(.75rule_thickness,0);
+pos4(.75rule_thickness,0); pos5(rule_thickness,0); pos6(.75rule_thickness,0);
+top y1=top y4=h+apex_o; bot y3=bot y6=-d-apex_o; y2=y5=.5[h,-d];
+lft x2l=u; rt x5r=w-u; rt x1l=rt x3l=w-2u; lft x4l=lft x6l=2u;
+p1=z1l..{down}z2l..z3l;
+p2=z6r..z5r{up}..z4r;
+p3=z4l..{down}z5l..z6l;
+p4=z3r..{up}z2r..z1r;
+z7=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z7--(w,y7)));
+tim2=xpart(p2 intersectiontimes (z7--(0,y7)));
+(tim3,tim4)=p3 intersectiontimes p1;
+(tim5-1,tim6)=subpath(1,infinity) of p1 intersectiontimes p3;
+z8=bsktouch(subpath(1,infinity) of p1,left,p2,right);
+tim7=xpart(p1 intersectiontimes (z8--(w,y8)));
+tim8=xpart(p2 intersectiontimes (z8--(0,y8)));
+(tim9,tim10)=p4 intersectiontimes p2;
+(tim11,tim12-1)=p4 intersectiontimes subpath(1,infinity) of p2;
+(tim13,tim14)=p4 intersectiontimes p3;
+(tim15-1,tim16)=subpath(1,infinity) of p4 intersectiontimes p3;
+filldraw subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2
+ ..subpath(0,rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p1,tim4),rundy(p1,tim5).zpet) of p1
+ ..subpath(rundy(p3,tim6),infinity) of p3
+ ..subpath(0,rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p1,tim7),infinity) of p1
+ ..subpath(0,rundy(p4,tim9).zpet) of p4
+ ..subpath(rundy(p2,tim10),rundy(p2,tim12).zpet) of p2
+ ..subpath(rundy(p4,tim11),infinity) of p4..cycle;
+oblu:=2oblu;
+infill subpath(rundy(p4,tim13),rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p3,tim16),rundy(p3,tim14).zpet) of p3..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_ring_equals:
+bskchar "Ring in equals sign";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(chars.math_ring_equals,13u#,v_center(spread#+rule_thickness#)); uni "0x2256";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,90); pos6(rule_thickness,180);
+pos7(rule_thickness,270); pos8(rule_thickness,0);
+lft x1=u; x2+x1=w; x3=x1; x4=x2;
+y1=y2; y3=y4; .5[y1,y3]=math_axis=y6=y8; top y1r=h; y5=y1; y7=y3;
+x5=x7=.5w=.5[x6,x8]; y5-y7=x8-x6;
+bskpoints(1,2,hair,0); bskpoints(4,3,hair,0);
+p0=z5r{left}..{down}z6r..{right}z7r;
+p1=z7r{right}..{up}z8r..{left}z5r;
+p2=z1l--z2ll;
+p3=z4r--z3r;
+(tim0,tim1)=p0 intersectiontimes p2;
+(tim2,tim3)=p0 intersectiontimes p3;
+(tim4,tim5)=p1 intersectiontimes p3;
+(tim6,tim7)=p1 intersectiontimes p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p3,tim3),infinity) of p3{left}
+ ..z3ll---z4l
+ ..subpath(0,rundy(p3,tim5).zpet) of p3
+ ..subpath(rundy(p1,tim4),rundy(p1,tim6).zpet) of p1
+ ..subpath(rundy(p2,tim7),infinity) of p2
+ ..z2r---z1r..cycle;
+infill z5l{left}..z6l{down}..z7l{right}..{up}z8l..cycle;
+penlabels(1,2,3,4,5,6,7,8); labels(2ll,3ll);
+endchar;
+
+iff known chars.sign_check:
+bskchar "Check mark";
+beginchar(chars.sign_check,12u#,asc_height#,0); uni "0x2713";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+oblu:=2oblu;
+pos1(bourstem,30); pos2(bourstem,30); pos3(rule_thickness,135);
+top y1r=bar_height; lft x1l=u; bot y2l=-apex_o;
+z2-z1=whatever*dir-50;
+rt x3l=w-u; top y3r=h;
+z0=whatever[z1,z2]=whatever[z1r,z2l];
+p0=z2r..controls (z0+(bourstem-currentbreadth)*dir30)..z1r;
+p1=z3r..{down}z2l;
+(tim0,tim1)=p0 intersectiontimes p1;
+filldraw z1l..controls z0..z2l..z2+o*dir-60..z2r{up}..z3l&z3l..subpath(0,rundy(p1,tim1).zpet) of p1..subpath(rundy(p0,tim0),infinity) of p0..cycle;
+penlabels(1,2,3,4); labels(0);
+endchar;
+
+iff known chars.math_stylized_F:
+bskchar "The stylized letter F (msbm)";
+beginchar(chars.math_stylized_F,10u#,5.5u#+math_axis#,5.5u#-math_axis#); uni "non";
+italcorr (5u#+math_axis#)*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(cap_stem,0); pos2(cap_stem,0);
+pos3(rule_thickness,-90); pos6(rule_thickness,90);
+bot y1=-d; top y2=h+o; y3l=y2l; rt x3=w-u;
+lft x1l=u; x2=x1; y2r:=y3r;
+y6=.52[y1,y2]; y5l=y6l; y5r=y6r; x6=x2r+3/8(x3-x2r);
+z5l=whatever[z1r,z2r]; z5r=whatever[z1r,z2r];
+bskpoints(3,2,0,rule_thickness);
+filldraw z1l---obl(2l,1l,3l)---z3l..z3rr---obl(2r,3r,5r)
+ ---obl(5r,2r,6r)---z6r..z6l---obl(5l,6l,1r)---obl(1r,5l,1l)---cycle;
+penlabels(1,2,3,4,5,6); labels(3rr);
+math_fit(0,ic#-3u#);
+endchar;
+
+iff known chars.math_reversed_F:
+bskchar "The reversed turned letter F (msbm)";
+beginchar(chars.math_reversed_F,9u#,asc_height#,0); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,180); pos2(rule_thickness,180);
+pos3(rule_thickness,90); pos6(rule_thickness,-90);
+top y1=h+o; bot y2=-d; y3l=y2l; lft x3=u;
+rt x1l=w-u; x2=x1; y2r:=y3r;
+y6=.52[y1,y2]; y5l=y6l; y5r=y6r; x6=x2l+3/8(x3-x2r)-cap_stem;
+z5l=whatever[z1r,z2r]; z5r=whatever[z1r,z2r];
+bskpoints(3,2,0,rule_thickness);
+filldraw z1l---obl(2l,1l,3l)---z3l..z3rr---obl(2r,3r,5r)
+ ---obl(5r,2r,6r)---z6r..z6l---obl(5l,6l,1r)---z1r---cycle;
+penlabels(1,2,3,4,5,6); labels(3rr);
+endchar;
+
+iff known chars.math_inverted_G:
+bskchar "The inverted letter G (msbm)";
+beginchar(chars.math_inverted_G,13u#,cap_height#,0); uni "non";
+italcorr cap_height#*slant-2u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,180); pos2(rule_thickness,90);
+pos3(rule_thickness,0); pos4(rule_thickness,270);
+rt x1l=w-u+o; lft x3r=u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o;
+pos6(rule_thickness,90); pos7(rule_thickness,90); lft x6=u; x7-x6=beak;
+z5=(.5[x6,x7],y3+.2h);
+y6=y7=y3-.2h+cap_hair;
+p0:=z1r{down}..z2r..z3r..z4r..{down}cycle;
+p1:=z1l{down}..z2l..z3l..z4l..{down}cycle;
+p2:=z6l--z7l;
+tim0=xpart(p0 intersectiontimes ((x4,y5)--(0,y5)));
+(tim1,tim2)=p0 intersectiontimes p2;
+tim3=xpart(p1 intersectiontimes (z7l--(-u,y7l)));
+tim4=xpart(p1 intersectiontimes ((x4,y5)--(0,y5)));
+filldraw subpath(rundy(p0,tim0),length p0) of p0
+ ..subpath(0,rundy(p0,tim1).zpet) of p0
+ ..subpath(rundy(p2,tim2),infinity) of p2..z7r---z6r
+ ..reverse subpath(0,rundy(p1,tim3).zpet) of p1
+ ..reverse subpath(rundy(p1,tim4),length p1) of p1..cycle
+ ;
+penlabels(1,2,3,4,5,6,7);
+endchar;
+
+iff known chars.math_ampersand_bin:
+bskchar "Binary ampersand";
+beginchar(chars.math_ampersand_bin, 14u#, asc_height#, 0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, tim[];
+path p[];
+oblu:=2oblu;
+pos1(rule_thickness,180); pos4(rule_thickness,-90); pos5(rule_thickness,180);
+rt x1r=w-u-hair; y1=y2; top y4l=h+o; x4-x3'=(y4-y3');
+lft x3l=3u+stem;
+rt x2r=x1r-(y2r+u); y3l=x_height; y2r=.25x_height;
+alpha=diag_ratio(2,rule_thickness,y3l-y2r,x3l-x2r);
+pos2(alpha*rule_thickness,0); pos2'(rule_thickness,90); pos3(alpha*rule_thickness,0); pos3'(rule_thickness,0);
+.5[x3'r,rt x5r-.5 hair]=x4; y5=y3'=.5[x_height,h];
+x3'r-x3r=(y3'-y3)*cosd(angle(z3-z2));
+bot y2'l=-o; x2'=.5[x2r,x1l];
+pos6(rule_thickness,180); pos7(rule_thickness,270); pos8(rule_thickness,-45); pos9(rule_thickness,270); pos10(rule_thickness,-90);
+lft x6r=u; y6r-y7r=x7-x6; bot y7r=-o; x7=x3; x8=x2;
+y8=bar_height; top y9l=x_height+o; x9=.5[x8,w-u]+.5hair;
+rt x10l=w-u; y10l=y9;
+p0=z1l{z2'+u*right-z1l}..{left}z2'l..z2l---z3l..z3'l..z4l..{down}z5l..{down}z6l;
+p1=z6l{down}..z7l..z8l..{right}z9l..{right}z10l..
+ {left}z10r..z9r{left}..z8r..z7r..{up}z6r;
+p2=z6r{up}..z5r{up}..z4r..z3'r..z3r---z2r..z2'r{right}..{up}z1r;
+(tim0,tim1-7)=p0 intersectiontimes (subpath (7,infinity) of p1);
+(tim2,tim3)=p2 intersectiontimes p0;
+(tim4-3,tim5-5)=(subpath(3,infinity) of p2) intersectiontimes subpath(5,infinity) of p0;
+(tim6-3,tim7)=(subpath(3,infinity) of p2) intersectiontimes p1;
+(tim8-6,tim9)=(subpath(6,infinity) of p1) intersectiontimes p2;
+(tim10,tim11-3)=p2 intersectiontimes subpath (3,infinity) of p2;
+(tim12,tim13)=p1 intersectiontimes p0;
+(tim14,tim15-5)=p0 intersectiontimes subpath(5,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath (0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p2,tim4),rundy(p2,tim6).zpet) of p2
+ ..subpath(rundy(p1,2),rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p2,tim9),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim10),rundy(p2,tim11).zpet) of p2..cycle;
+infill subpath(0,rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p0,tim13),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p0,tim15),infinity) of p0..cycle;
+penlabels(1,2,2',3,3',4,5,6,7,8,9,10);
+endchar;
+
+iff known chars.math_ampersand_bin_rev:
+bskchar "Reversed binary ampersand";
+beginchar(chars.math_ampersand_bin_rev, 14u#, asc_height#, 0); uni "non";
+italcorr x_height#*slant;
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric alpha, tim[];
+path p[];
+oblu:=2oblu;
+pos1(rule_thickness,0); pos4(rule_thickness,90); pos5(rule_thickness,0);
+lft x1r=u+hair; y1=y2; bot y4l=-d-o; x4-x3'=(y4-y3');
+rt x3l=w-3u-stem;
+lft x2r=x1r+(h-y2r+u); y3l=h-x_height; y2r=h-.25x_height;
+alpha=diag_ratio(2,rule_thickness,y3l-y2r,x3l-x2r);
+pos2(alpha*rule_thickness,180); pos2'(rule_thickness,-90); pos3(alpha*rule_thickness,180); pos3'(rule_thickness,180);
+.5[x3'r,lft x5r+.5 hair]=x4; y5=y3'=.5[h-x_height,0];
+x3'r-x3r=-(y3'-y3)*cosd(angle(z3-z2));
+top y2'l=h+o; x2'=.5[x2r,x1l];
+pos6(rule_thickness,0); pos7(rule_thickness,90); pos8(rule_thickness,135); pos9(rule_thickness,90); pos10(rule_thickness,90);
+rt x6r=w-u; y6r-y7r=x7-x6; top y7r=h+o; x7=x3; x8=x2;
+y8=h-bar_height; bot y9l=h-x_height-o; x9=.5[x8,u]-.5hair;
+lft x10l=u; y10l=y9;
+p0=z1l{z2'+u*left-z1l}..{right}z2'l..z2l---z3l..z3'l..z4l..{up}z5l..{up}z6l;
+p1=z6l{up}..z7l..z8l..{left}z9l..{left}z10l..
+ {right}z10r..z9r{right}..z8r..z7r..{down}z6r;
+p2=z6r{down}..z5r{down}..z4r..z3'r..z3r---z2r..z2'r{left}..{down}z1r;
+(tim0,tim1-7)=p0 intersectiontimes (subpath (7,infinity) of p1);
+(tim2,tim3)=p2 intersectiontimes p0;
+(tim4-3,tim5-5)=(subpath(3,infinity) of p2) intersectiontimes subpath(5,infinity) of p0;
+(tim6-3,tim7)=(subpath(3,infinity) of p2) intersectiontimes p1;
+(tim8-6,tim9)=(subpath(6,infinity) of p1) intersectiontimes p2;
+(tim10,tim11-3)=p2 intersectiontimes subpath (3,infinity) of p2;
+(tim12,tim13)=p1 intersectiontimes p0;
+(tim14,tim15-5)=p0 intersectiontimes subpath(5,infinity) of p0;
+filldraw subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath (0,rundy(p2,tim2).zpet) of p2
+ ..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0
+ ..subpath(rundy(p2,tim4),rundy(p2,tim6).zpet) of p2
+ ..subpath(rundy(p1,2),rundy(p1,tim8).zpet) of p1
+ ..subpath(rundy(p2,tim9),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim10),rundy(p2,tim11).zpet) of p2..cycle;
+infill subpath(0,rundy(p1,tim12).zpet) of p1
+ ..subpath(rundy(p0,tim13),rundy(p0,tim14).zpet) of p0
+ ..subpath(rundy(p0,tim15),infinity) of p0..cycle;
+penlabels(1,2,2',3,3',4,5,6,7,8,9,10);
+endchar;
+iff known chars.math_Ydown:
+bskchar "Ydown";
+beginchar(chars.math_Ydown,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos0(rule_thickness,0);
+x1=x2=.5w; bot y1=-d; y2=math_axis; z0=z2;
+lft x3l=u; rt x4r=w-u; top y3l=top y4r=h-.25rule_thickness;
+pos3(rule_thickness,angle(z3l-z2l)-90); pos4(rule_thickness,angle(z4r-z2r)-90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_Yup:
+bskchar "Yup";
+beginchar(chars.math_Yup,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos0(rule_thickness,0);
+x1=x2=.5w; top y1=h; y2=math_axis; z0=z2;
+lft x3r=u; rt x4l=w-u; bot y3r=bot y4l=-d+.25rule_thickness;
+pos3(rule_thickness,angle(z3r-z2l)+90); pos4(rule_thickness,angle(z4l-z2r)+90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_Yleft:
+bskchar "Yleft";
+beginchar(chars.math_Yleft,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos0(rule_thickness,90);
+lft x1=u; x2=.5w; y1=y2=math_axis; z0=z2;
+rt x3l=rt x4r=w-u; bot y3l=-d+.25rule_thickness; top y4r=h-.25rule_thickness;
+pos3(rule_thickness,angle(z3l-z2l)+90); pos4(rule_thickness,angle(z4r-z2r)+90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_Yright:
+bskchar "Yright";
+beginchar(chars.math_Yright,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90); pos0(rule_thickness,90);
+rt x1=w-u; x2=.5w; y1=y2=math_axis; z0=z2;
+lft x3l=lft x4r=u; bot y3l=-d+.25rule_thickness; top y4r=h-.25rule_thickness;
+pos3(rule_thickness,angle(z3l-z2l)-90); pos4(rule_thickness,angle(z4r-z2r)-90);
+z2'=z3r+whatever*(z3l-z2l)=z4l+whatever*(z4r-z2r);
+bskpoints(3,2,0,hair); bskpoints(4,0,0,hair);
+filldraw z1r---obl(2r,1r,4r)---z4rr..z4l---obl(2',4l,3r)---z3rr..z3l---obl(2l,3l,1l)---z1l..cycle;
+penlabels(1,2,3,4); labels(2',3rr,4rr);
+endchar;
+
+iff known chars.math_baro:
+bskchar "Vertical bar through circle";
+beginarithchar(chars.math_baro); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos9(rule_thickness,0); pos10(rule_thickness,0);
+.5[y8,y4]=math_axis; .5[x2,x6]=.5w; x2-x6=y8-y4=w-6u;
+circle_points(rule_thickness);
+x9=x10=.5w; .5[y9,y10]=math_axis; top y9=h;
+bskpoints(9,10,hair,hair);
+p0:=reverse (draw_circle.l);
+p1:=reverse (draw_circle.r);
+p2:=z9rr{up}..z9l---z10ll..z10r---z9rr;
+(tim0,tim1-1)=subpath(0,1) of p0 intersectiontimes subpath(1,2) of p2;
+(tim2-3,tim3)=subpath(3,5) of p0 intersectiontimes subpath(0,2) of p2;
+(tim4-3,tim5-3)=subpath(3,5) of p0 intersectiontimes subpath(3,4) of p2;
+(tim6-7,tim7-3)=subpath(7,8) of p0 intersectiontimes subpath(3,4) of p2;
+(tim8,tim9-1)=subpath(0,1) of p1 intersectiontimes subpath(1,2) of p2;
+(tim10-3,tim11)=subpath(3,5) of p1 intersectiontimes subpath(0,2) of p2;
+(tim12-3,tim13-3)=subpath(3,5) of p1 intersectiontimes subpath(3,4) of p2;
+(tim14-7,tim15-3)=subpath(7,8) of p1 intersectiontimes subpath(3,4) of p2;
+filldraw subpath(0,rundy(p2,tim1).zpet) of p2
+ ..subpath(rundy(p0,tim0),rundy(p0,tim2).zpet) of p0
+ ..subpath(rundy(p2,tim3),rundy(p2,tim5).zpet) of p2
+ ..subpath(rundy(p0,tim4),rundy(p0,8).zpet) of p0
+ ..subpath(rundy(p2,tim7),infinity) of p2..cycle;
+infill subpath(rundy(p2,tim9),rundy(p2,tim11).zpet) of p2
+ ..subpath(rundy(p1,tim10).zpet,rundy(p1,tim8)) of p1..cycle;
+infill subpath(rundy(p2,tim15).zpet,rundy(p2,tim13)) of p2
+ ..subpath(rundy(p1,tim12),rundy(p1,tim14).zpet) of p1..cycle;
+penlabels(9,10);
+endchar;
+
+iff known chars.math_moo:
+bskchar "Moo";
+beginarithchar(chars.math_moo); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=2oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(rule_thickness,90); pos4(rule_thickness,90);
+pos5(rule_thickness,-90); pos6(rule_thickness,180); pos7(rule_thickness,90); pos8(rule_thickness,180);
+x1=x2=.5[x3,x4]=.5[x6,x8]=.5[x5,x7]=.5w; lft x3=u;
+top y1=h; 2y2=y3l=y4l=math_axis; bot y5r=bot y7l=-d; x5=.5[x2,x6]; x5-x6=.75(y2-y5);
+y6=y8=y2;
+z3'r=(x2l,y3r); z3'l=(x2l,y3l); z4'r=(x2r,y4r); z4'l=(x2r,y4l);
+p0=z2l{down}..z5l..{up}z6l..z6r{down}..z5r..{up}z2r;
+p1=z2l{down}..z7l..{up}z8l..z8r{down}..z7r..{up}z2r;
+z0=bsktouch(subpath(1,infinity) of p0,right,subpath(1,infinity) of p1,left);
+tim0-1=xpart(subpath(1,infinity) of p0 intersectiontimes (z0--(x5,y0)));
+tim1=xpart(subpath(0,1) of p1 intersectiontimes (z0--(x5,y0)));
+filldraw z1l---obl(3'r,1l,3r)---z3r..z3l---obl(3'l,3l,2l)
+ ---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1---obl(4'l,2r,4l)---z4l..z4r
+ ---obl(4'r,4r,1r)---z1r..cycle;
+penlabels(1,2,3,3',4,4',5,6,7,8); labels(0);
+endchar;
+
+iff known chars.math_strict_if:
+bskchar "Strict if";
+beginchar(chars.math_strict_if,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos5(rule_thickness,180); pos6(rule_thickness,-90); pos7(rule_thickness,0); pos8(rule_thickness,-90);
+y1=y2=.5[y6,y8]=.5[y5,y7]=math_axis;
+lft x1=u; x2=x6=x8=2/3w; rt x5l=rt x7r=w-u; y5=.5[y2,y6]; top y6l=h;
+p0=z2l{right}..z5l..{left}z6l..z6r{right}..z5r..{left}z2r;
+p1=z2l{right}..z7l..{left}z8l..z8r{right}..z7r..{left}z2r;
+bskpoints(1,2,hair,hair);
+z0=bsktouch(subpath(1,infinity) of p0,down,p1,up);
+tim0=xpart(subpath(0,1) of p0 intersectiontimes (z0+down--(x0,y7)));
+tim1-4=xpart(subpath(4,infinity) of p1 intersectiontimes (z0--(x0,y5)));
+if tim1<4: tim1:=4.75 fi;
+filldraw z1l---subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),infinity) of p0---z1rr..cycle;
+penlabels(1,2,5,6,7,8); labels(0,1rr);
+endchar;
+
+iff known chars.math_strict_fi:
+bskchar "Strict fi";
+beginchar(chars.math_strict_fi,10u#,v_center(x_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[]; oblu:=3oblu;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos5(rule_thickness,0); pos6(rule_thickness,-90); pos7(rule_thickness,180); pos8(rule_thickness,-90);
+y1=y2=.5[y6,y8]=.5[y5,y7]=math_axis;
+rt x1=w-u; x2=x6=x8=1/3w; lft x5l=lft x7r=u; y5=.5[y2,y6]; top y6l=h;
+p0=z2l{left}..z5l..{right}z6l..z6r{left}..z5r..{right}z2r;
+p1=z2l{left}..z7l..{right}z8l..z8r{left}..z7r..{right}z2r;
+bskpoints(1,2,hair,hair);
+z0=bsktouch(subpath(1,infinity) of p0,down,p1,up);
+tim0=xpart(subpath(0,1) of p0 intersectiontimes (z0--(x0,y7)));
+tim1-4=xpart(subpath(4,infinity) of p1 intersectiontimes (z0--(x0,y5)));
+if tim1<4: tim1:=4.75 fi;
+filldraw z1l---subpath(0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p0,tim0),infinity) of p0---z1rr..cycle;
+penlabels(1,2,5,6,7,8); labels(0,1rr);
+endchar;
+
+iff known chars.math_bracket_bag_simple_left:
+bskchar "Simple left bag bracket";
+beginchar(chars.math_bracket_bag_simple_left,7u#,body_height#,paren_depth#); uni "0x27C5";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,-90); pos3(rule_thickness,180);
+pos4(rule_thickness,180); pos5(rule_thickness,-90); pos6(rule_thickness,-90);
+lft x1l=u; top y2l=h+o; y1=y3+rule_thickness; y2-y1=x2-x1; .5[x1,x3]=x2; x3=w-2u;
+y4=.5[math_axis,-d]; x4=x2; x5=w-2u; bot y5r=-d-o; rt x6=w-u; y6r=y5;
+draw z1l{up}..z2l..z3l---z4l..z5l---z6l..z6r---z5r..z4r---z3r..z2r..{down}z1r..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_bracket_bag_simple_right:
+bskchar "Simple right bag bracket";
+beginchar(chars.math_bracket_bag_simple_right,7u#,body_height#,paren_depth#); uni "0x27C6";
+adjust_fit(0,0);
+pickup tiny.nib;
+pos1(rule_thickness,180); pos2(rule_thickness,-90); pos3(rule_thickness,0);
+pos4(rule_thickness,0); pos5(rule_thickness,-90); pos6(rule_thickness,-90);
+rt x1l=w-u; top y2l=h+o; y1=y3+rule_thickness; y2-y1=x1-x2; .5[x1,x3]=x2; x3=2u;
+y4=.5[math_axis,-d]; x4=x2; x5=2u; bot y5r=-d-o; lft x6=u; y6r=y5;
+draw z1l{up}..z2l..z3l---z4l..z5l---z6l..z6r---z5r..z4r---z3r..z2r..{down}z1r..cycle;
+penlabels(1,2,3,4,5,6);
+endchar;
+
+iff known chars.math_accumulate_upside:
+bskchar "Upside-down upwards accumulate symbol";
+beginchar(chars.math_accumulate_upside,12u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x1r; x1=x1'-.5o=.5[x2,x3]=.5w; y1'=2/3[y1,y2]; y1=y0+arrsize;
+rt x2=w-u; y2+.5rule_thickness=h; y3=y2; top y0=-d-apex_o;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+p1:=z2r{z1'-z2}..{down}z1l;
+p2:=z1r{up}..{z3-z1'}z3l;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw z3r+.5hair*unitvector(z1'-z3){z1'-z3}..{down}(reverse sipka(0,1)){up}..{z2-z1'}z2l
+ ..{z1'-z2}z2r..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_accumulate:
+bskchar "Upwards accumulate symbol";
+beginchar(chars.math_accumulate,12u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x0=x1; x1=x1'-.5o=.5[x2,x3]=.5w; y1=y0-arrsize; y1'=2/3[y1,y2]; bot y0=h+apex_o;
+rt x2=w-u; y2-.5rule_thickness=-d; y3=y2;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+p1:=z2l{z1'-z2}..{up}z1l;
+p2:=z1r{down}..{z3-z1'}z3r;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw z3l+.5hair*unitvector(z1'-z3){z1'-z3}..{up}(sipka(0,1) shifted (z1l-z0a.r)){down}
+ ..{z2-z1'}z2r..{z1'-z2}z2l..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_accumulate_downwards:
+bskchar "Downwards accumulate symbol";
+beginchar(chars.math_accumulate_downwards,18u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x1=x1'-.5o=.5[x2,x3]=.5w; top y1=h; y1'=2/3[y1,y2];
+rt x2=w-4u; y2-.5rule_thickness=-d+.5arrsize; y3=y2;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+z0=z3+arrsize*unitvector(z3-z1');
+z5=z2+arrsize*unitvector(z2-z1');
+p1:=z2l{z1'-z2}..{up}z1l;
+p2:=z1r{down}..{z3-z1'}z3r;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw sipka(0,3){z1'-z3}..{up}z1l..z1r{down}
+ ..{z2-z1'}sipka(5,2){z1'-z2}..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_accumulate_downwards_upside:
+bskchar "Upside-down downwards accumulate symbol";
+beginchar(chars.math_accumulate_downwards_upside,18u#,asc_height#,.5paren_depth#); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+numeric tim[]; oblu:=2oblu;
+path p[];
+x1=x1'-.5o=.5[x2,x3]=.5w; y1'=2/3[y1,y2]; bot y1=-d;
+rt x2=w-4u; y2+.5rule_thickness=h-.5arrsize; y3=y2;
+pos1(rule_thickness,0);
+pos2(rule_thickness,angle(z2-z1')+90); pos3(rule_thickness,angle(z3-z1')+90);
+z0=z3+arrsize*unitvector(z3-z1');
+z5=z2+arrsize*unitvector(z2-z1');
+p1:=z2r{z1'-z2}..{down}z1l;
+p2:=z1r{up}..{z3-z1'}z3l;
+z4=bsktouch(p1,left,p2,right);
+tim1=xpart(p1 intersectiontimes (z4--(w,y4)));
+tim2=xpart(p2 intersectiontimes (z4--(0,y4)));
+filldraw (reverse sipka(0,3))..z3r+.5hair*unitvector(z1'-z3){z1'-z3}..{down}z1l..z1r{up}
+ ..{z2-z1'}(reverse sipka(5,2)){z1'-z2}..subpath (0,rundy(p1,tim1).zpet) of p1
+ ..subpath(rundy(p2,tim2),infinity) of p2..cycle;
+penlabels(1,2,3); labels(1',4);
+endchar;
+
+iff known chars.math_hamiltonian_conjugate:
+bskchar "Hamiltonian conjugate matrix sign";
+beginarithchar(chars.math_hamiltonian_conjugate); uni "0x22B9";
+adjust_fit(0,0);
+pickup tiny.nib;
+x1=x2=x3=x4=.5w=.5[x5,x8]=.5[x6,x7]; lft x5=u; x7-x6=y2-y3;
+top y1=h; bot y4=-d; .5[y2,y3]=y5=y6=y7=y8=math_axis; bot y2-top y3=3rule_thickness;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(rule_thickness,0); pos4(rule_thickness,0);
+pos5(rule_thickness,90); pos6(rule_thickness,90);
+pos7(rule_thickness,90); pos8(rule_thickness,90);
+filldraw bskrule(2,1,rule_thickness,rule_thickness);
+filldraw bskrule(3,4,rule_thickness,rule_thickness);
+filldraw bskrule(6,5,rule_thickness,rule_thickness);
+filldraw bskrule(7,8,rule_thickness,rule_thickness);
+penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+iff known chars.sign_caret:
+bskchar "Caret sign";
+beginchar(chars.sign_caret,5u#,0,.5desc_depth#); uni "0x2038";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=.5w; top y0=h; bot y1r=-d;
+{{ save rule_thickness; rule_thickness:=hair;
+ logand(0,1,2);
+}};
+endchar;
+
+iff known chars.sign_caret_insertion:
+bskchar "Caret insertion sign";
+beginchar(chars.sign_caret_insertion,6u#,bar_height#,.5desc_depth#); uni "0x2041";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+x0=2.5u; top y0=0; bot y1r=-d;
+{{ save rule_thickness; rule_thickness:=hair;
+ logand(0,1,2).nodraw;
+}};
+y3=h; z3=whatever[z1l,z0r]; z3l-z3r=z1l-z1r; .5[z3l,z3r]=z3;
+bskpoints(1,3,hair,hair);
+z2'=point infinity of _logand;
+z3'=whatever[point 0 of _logand,z2']=whatever[z3l,z1l];
+filldraw z3r---_logand---obl(3',2',3l)---z3ll..cycle;
+penlabels(3); labels(3ll,3');
+endchar;
+
+iff known chars.sign_tironian:
+bskchar "Tironian sign et";
+beginchar(chars.sign_tironian,9u#,x_height#,.5desc_depth#); uni "0x204A";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=2oblu;
+path p[];
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(3rule_thickness,90);
+rt x1r+2u=rt x2r=w-u; bot y1=-d; y2=h;
+lft x3=u; y3r=y2; y2'=top y3l; z2'=whatever[z2l,z1l];
+p0:=z1r---obl(2r,1r,3l){z3-z2}..z3r;
+p1=z3r---z3l..z3l+2oblu*right---z2';
+filldraw subpath(0,rundy(p0,infinity).zpet) of p0
+ ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1..z2'+oblu*down---z1l..cycle;
+penlabels(1,2,3); labels(2');
+endchar;
+
+iff known chars.math_projection_z:
+bskchar "Z projection";
+beginchar(chars.math_projection_z,7u#,v_center(asc_height#)); uni "0x2A21";
+adjust_fit(0,0);
+pickup tiny.nib;
+oblu:=3oblu;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+lft x1l=lft x2l=2u; top y2=h; bot y1=-d; rt x3r=w-u;
+z3r=z2r+whatever*dir-45;
+pos3(rule_thickness,angle(z2r-z3r)-90);
+x3'=x2r; z3'=z3l+whatever*(z2r-z3r);
+bskpoints(1,2,0,rule_thickness);
+filldraw z1l---z2l..z2r---z3r..z3l---obl(3',3l,1r)---z1rr..cycle;
+penlabels(1,2,3); labels(1rr,3');
+endchar;
+
+iff known chars.math_triangle_operator:
+bskchar "Triangle for operator triangled operators";
+beginchar(chars.math_triangle_operator,17u#,v_center(asc_height#)); uni "non";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+penlabels(1,2,3); labels(1',2');
+endchar;
+
+iff known chars.math_triangle_triangle:
+bskchar "Triangle with triangle inside";
+beginchar(chars.math_triangle_triangle,17u#,v_center(asc_height#)); uni "0x27C1";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+x6r=x6l=.5w=.5[x4l,x5l]; y4l=y5l; 1/3[y4l,y6r]=1/3[y2l,y3r];
+y6r-y4l=.5(y3r-y1l); x5l-x4l=.5(x2l-x1l);
+z4r-z4l=(rule_thickness-currentbreadth,0) rotated (angle(z6r-z4l)-90);
+z5r-z5l=(-rule_thickness+currentbreadth,0) rotated (angle(z6r-z5l)-90);
+z6l=z4r+whatever*(z6r-z4l)=z5r+whatever*(z6r-z5l);
+y4'=y5'=y4l+rule_thickness-currentbreadth; z4'=whatever[z4r,z6l]; z5'=whatever[z5r,z6l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+filldraw obl(4l,6r,5l)---obl(5l,4l,6r)---obl(6r,5l,4l)---cycle;
+infill obl(4',6l,5')---obl(5',4',6l)---obl(6l,5',4')---cycle;
+penlabels(1,2,3,4,5,6); labels(1',2',4',5');
+endchar;
+
+iff known chars.math_triangle_plus:
+bskchar "Triangle-plus operator";
+beginchar(chars.math_triangle_plus,17u#,v_center(asc_height#)); uni "0x2A39";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+x6=x7=.5[x4,x5]=.5w;
+x5-x4=1/3(x2l-x1l); y4=y5=.5[y6,y7]=1/3[y1l,y3r]; y6-y7=x5-x4;
+bskpoints(4,5,hair,hair); bskpoints(7,6,.5hair,.5hair);
+z8=whatever[z7l,z6l]=whatever[z4l,z5l];
+z9=whatever[z7r,z6r]=whatever[z4l,z5l];
+z10=whatever[z7r,z6r]=whatever[z4r,z5r];
+z11=whatever[z7l,z6l]=whatever[z4r,z5r];
+filldraw z4l---obl(8,4l,7l)---z7l..z7rr---obl(9,7r,5l)---z5ll..z5r---
+ obl(10,5r,6r)---z6r..z6ll---obl(11,6l,4r)---z4rr..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8,9,10,11);
+endchar;
+
+iff known chars.math_triangle_minus:
+bskchar "Triangle-minus operator";
+beginchar(chars.math_triangle_minus,17u#,v_center(asc_height#)); uni "0x2A3A";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+y4=y5=1/3[y1l,y3r]; .5[x4,x5]=.5w; x5-x4=1/3(x2l-x1l);
+filldraw bskrule(4,5,hair,hair);
+penlabels(1,2,3,4,5); labels(1',2');
+endchar;
+
+iff known chars.math_triangle_times:
+bskchar "Triangle-times operator";
+beginchar(chars.math_triangle_times,17u#,v_center(asc_height#)); uni "0x2A3B";
+adjust_fit(0,0);
+pickup tiny.nib;
+x3r=x3l=.5w; lft x1l=u; rt x2l=w-u; bot y1l=bot y2l=-d; top y3r=h;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+y1'=y2'=y1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+infill obl(1',3l,2')---obl(2',1',3l)---obl(3l,2',1')---cycle;
+pos4(rule_thickness,135); pos5(rule_thickness,135);
+pos6(rule_thickness,45); pos7(rule_thickness,45);
+.5[x6,x5]=.5w;
+x4r=x6l; x5l=x7r; x7r-x4l=.25(x2l-x1l);
+y4l=y7l; y5r=y6r; .5[y5r,y4l]=1/3[y1l,y3r]; y6r-y4l=x5l-x6l;
+bskpoints(4,5,hair,hair); bskpoints(7,6,.5hair,.5hair);
+z8=whatever[z7l,z6l]=whatever[z4l,z5l];
+z9=whatever[z7r,z6r]=whatever[z4l,z5l];
+z10=whatever[z7r,z6r]=whatever[z4r,z5r];
+z11=whatever[z7l,z6l]=whatever[z4r,z5r];
+oblu:=2.2oblu;
+filldraw z4l---obl(8,4l,7l)---z7l..z7rr---obl(9,7r,5l)---z5ll..z5r---
+ obl(10,5r,6r)---z6r..z6ll---obl(11,6l,4r)---z4rr..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1',2',8,9,10,11);
+endchar;
+
+iff known chars.math_domain_antirestriction:
+bskchar "Domain antirestriction";
+beginchar(chars.math_domain_antirestriction,15u#,v_center(asc_height#)); uni "0x2A64";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=4oblu;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+rt x1r=rt x2r=w-u; lft x3l=u; y3l=y4=y5=math_axis; y1r=h; y2r=-d;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3l-z1r)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3l-z2r)-90);
+z3r=z1l+whatever*(z3l-z1r)=z2l+whatever*(z3l-z2r);
+x1'=x2'=x1r-rule_thickness+currentbreadth; z1'=whatever[z1l,z3r]; z2'=whatever[z2l,z3r];
+x5=x1'; z4r=whatever[z1',z3r];
+filldraw obl(1r,3l,2r)---obl(2r,1r,3l)---obl(3l,2r,1r)---cycle;
+oblu:=2oblu;
+infill obl(1',4r,5r)---obl(5r,1',4r)---obl(4r,5r,1').more---cycle;
+infill obl(2',4l,5l)---obl(5l,2',4l)---obl(4l,5l,2').more---cycle;
+penlabels(1,2,3,4,5); labels(1',2');
+endchar;
+
+iff known chars.math_range_antirestriction:
+bskchar "Range antirestriction";
+beginchar(chars.math_range_antirestriction,15u#,v_center(asc_height#)); uni "0x2A65";
+adjust_fit(0,0);
+pickup tiny.nib; oblu.more:=4oblu;
+pos4(rule_thickness,90); pos5(rule_thickness,90);
+lft x1l=lft x2l=u; rt x3r=w-u; y3r=y4=y5=math_axis; y1l=h; y2l=-d;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3r-z1l)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3r-z2l)-90);
+z3l=z1r+whatever*(z3r-z1l)=z2r+whatever*(z3r-z2l);
+x1'=x2'=x1l+rule_thickness-currentbreadth; z1'=whatever[z1r,z3l]; z2'=whatever[z2r,z3l];
+x5=x1'; z4r=whatever[z1',z3l];
+filldraw obl(1l,3r,2l)---obl(2l,1l,3r)---obl(3r,2l,1l)---cycle;
+oblu:=2oblu;
+infill obl(1',4r,5r)---obl(5r,1',4r)---obl(4r,5r,1').more---cycle;
+infill obl(2',4l,5l)---obl(5l,2',4l)---obl(4l,5l,2').more---cycle;
+penlabels(1,2,3,4,5); labels(1',2');
+endchar;
+
+iff known chars.math_triangle_left_large_op:
+bskchar "Large left triangle operator";
+beginchar(chars.math_triangle_left_large_op,10u#,v_center(asc_height#)); uni "0x2A1E";
+adjust_fit(0,0);
+pickup tiny.nib;
+rt x1r=rt x2r=w-u; lft x3l=u; y3l=math_axis; y1r=h; y2r=-d;
+z1r-z1l=(rule_thickness-currentbreadth,0) rotated (angle(z3l-z1r)-90);
+z2r-z2l=(-rule_thickness+currentbreadth,0) rotated (angle(z3l-z2r)-90);
+z3r=z1l+whatever*(z3l-z1r)=z2l+whatever*(z3l-z2r);
+x1'=x2'=x1r-rule_thickness+currentbreadth; z1'=whatever[z1l,z3r]; z2'=whatever[z2l,z3r];
+filldraw obl(1r,3l,2r)---obl(2r,1r,3l)---obl(3l,2r,1r)---cycle;
+oblu:=2oblu;
+infill obl(1',3r,2')---obl(2',1',3r)---obl(3r,2',1')---cycle;
+penlabels(1,2,3); labels(1',2');
+endchar;
+
+iff known chars.math_nonforking:
+bskchar "Nonforking sign";
+beginchar(chars.math_nonforking,11u#,.8asc_height#,0); uni "0x2ADD";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+top y1=top y5=.6h; top y6=h; bot y3l=y7=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3+(x3-x2);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,hair,hair);
+p0=z4r{down}...z3r...z2r---z1rr;
+p1=z7r--z6rr;
+p2=z6l--z7l;
+(tim0,tim1)=p0 intersectiontimes p1;
+(tim2,tim3)=p0 intersectiontimes p2;
+filldraw z1l---z2l...z3l...z4l---z5l..z5rr
+ ---subpath(0,rundy(p0,tim0).zpet) of p0
+ ..subpath(rundy(p1,tim1),infinity) of p1
+ ..subpath(0,rundy(p2,tim3).zpet) of p2
+ ..subpath(rundy(p0,tim2),infinity) of p0..cycle;
+penlabels(1,2,3,4,5,6,7); labels(1rr,5rr,6rr);
+endchar;
+
+iff known chars.math_forking:
+bskchar "Forking sign";
+beginchar(chars.math_forking,11u#,.8asc_height#,0); uni "0x2ADC";
+italcorr .8asc_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib;
+path p[]; numeric tim[];
+pos1(rule_thickness,0); pos2(rule_thickness,0); pos3(.9rule_thickness,90);
+pos4(rule_thickness,180); pos5(rule_thickness,180);
+pos6(rule_thickness,0); pos7(rule_thickness,0);
+top y1=top y5=.6h; top y6=h; bot y3l=y7=-d-o;
+lft x1l=lft x2l=u; x4l=x5l=w-x1l; x3=x6=x7=.5w;
+y2=y4=y3+(x3-x2);
+bot y8=-d; y9=x_height+.5rule_thickness; lft x8=.5u; x9=w-2u;
+pos8(rule_thickness,angle(z8-z9)+90); pos9(rule_thickness,angle(z8-z9)+90);
+bskpoints(1,2,hair,hair); bskpoints(5,4,hair,hair); bskpoints(6,7,hair,hair);
+bskpoints(8,9,rule_thickness,rule_thickness);
+p0=z1l---z2l...z3l...z4l---z5l..{down}z5rr;
+p1=z4r{down}...z3r...z2r---z1rr;
+p2=z7r--z6rr;
+p3=z6l--z7l;
+p4=z9ll---z8l;
+p5=z8rr--z9r;
+(tim0,tim1)=p1 intersectiontimes p2;
+(tim2,tim3)=p1 intersectiontimes p3;
+(tim4,tim5)=p0 intersectiontimes p4;
+(tim6,tim7)=p0 intersectiontimes p5;
+(tim8,tim9)=p2 intersectiontimes p5;
+(tim10,tim11)=p2 intersectiontimes p4;
+(tim12,tim13)=p3 intersectiontimes p4;
+(tim14,tim15)=p1 intersectiontimes p4;
+(tim16,tim17)=p3 intersectiontimes p5;
+(tim18,tim19)=p1 intersectiontimes p5;
+filldraw subpath(0,rundy(p0,tim4).zpet) of p0
+ ..subpath(rundy(p4,tim5),infinity) of p4
+ ..subpath(0,rundy(p5,tim7).zpet) of p5
+ ..subpath(rundy(p0,tim6),infinity) of p0
+ ---subpath(0,rundy(p1,tim0).zpet) of p1
+ ..subpath(rundy(p2,tim1),rundy(p2,tim8).zpet) of p2
+ ..subpath(rundy(p5,tim9),infinity) of p5
+ ..subpath(0,rundy(p4,tim11).zpet) of p4
+ ..subpath(rundy(p2,tim10),infinity) of p2
+ ..subpath(0,rundy(p3,tim12).zpet) of p3
+ ..subpath(rundy(p4,tim13),rundy(p4,tim15).zpet) of p4
+ ..subpath(rundy(p1,tim14),infinity) of p1..cycle;
+infill subpath(rundy(p3,(tim16,2oblu)),rundy(p3,tim3).zpet) of p3
+ ..subpath(rundy(p1,tim2),rundy(p1,tim18).zpet) of p1
+ ..subpath(rundy(p5,tim19),rundy(p5,(tim17,2oblu)).zpet) of p5..cycle;
+penlabels(1,2,3,4,5,6,7,8,9); labels(1rr,5rr,6rr,8rr,9ll);
+endchar;
+
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksyol10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksyol10.mf
new file mode 100644
index 00000000000..4c438eba032
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksyol10.mf
@@ -0,0 +1,107 @@
+% Boisik Math Symbols Outline 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYOL"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=8/36pt#; % diameter of rounded corners
+fine#:=7/36pt#; % diameter of sharply rounded corners
+thin_join#:=7/36pt#; % width of extrafine details
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+flare#:=32/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=11/36pt#; % lowercase bar thickness
+slab#:=11/36pt#; % serif and arm thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+cap_band#:=11/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+stem_corr#:=1/36pt#; % for small refinements of stem breadth
+vair_corr#:=1/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+bsk_outline#:=.1pt#;
+generate bskmathsy % switch to the driver file
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bsksysl10.mf b/Master/texmf-dist/fonts/source/public/boisik/bsksysl10.mf
new file mode 100644
index 00000000000..71ca90e4f8b
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/boisik/bsksysl10.mf
@@ -0,0 +1,89 @@
+% Boisik Slanted Math Symbols 10 point
+if unknown bskbase: input bskbase fi
+
+font_identifier:="BSKSYSL"; font_size 10pt#;
+
+u#:=20/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=270/36pt#; % height of tallest characters
+asc_height#:=255/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=240/36pt#; % height of numerals
+x_height#:=159/36pt#; % height of lowercase without ascenders
+math_axis#:=95/36pt#; % axis of symmetry for math symbols
+bar_height#:=100/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=115/36pt#; % depth of lowercase descenders
+com_height#:=135/36pt#; %height of B bar
+
+tiny#:=8/36pt#; % diameter of rounded corners
+hair#:=10/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25/36pt#; % lowercase curve breadth
+like_hair#:=12/36pt#;
+like_stem#:=28/36pt#;
+like_curve#:=36/36pt#;
+ess#:=32/36pt#; % breadth in middle of lowercase s
+dot_size#:=30/36pt#; % diameter of dots
+cap_hair#:=12/36pt#; % uppercase hairline breadth
+alt_cap_hair#:=16/36pt#; % alternative uppercase hairline breadth
+cap_stem#:=27/36pt#; % uppercase stem breadth
+cap_curve#:=31/36pt#; % uppercase curve breadth
+like_cap_hair#:=14/36pt#;
+like_cap_stem#:=36/36pt#;
+like_cap_curve#:=44/36pt#;
+cap_ess#:=39/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+jut#:=27/36pt#; % protrusion of lowercase serifs
+cap_jut#:=30/36pt#; % protrusion of uppercase serifs
+beak#:=80/36pt#; % vertical protrusion of beak serifs
+vair#:=10/36pt#; % vertical diameter of hairlines
+bar#:=11/36pt#; % lowercase bar thickness
+cap_bar#:=11/36pt#; % uppercase bar thickness
+serif_drop#:=15/36pt#; % vertical drop of sloped serifs
+punct_fit#:=1pt#;
+drop_stem#:=0/36pt#;
+ser_boule#:=0/36pt#;
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=8/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=.2; pr.slant:=.2; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+
+medieval:=true; %medieval numerals
+monofig:=false; %should numerals have fixed width
+bulbes:=false;
+square_dots:=false; % should dots be square?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+math_fitting:=true; % should math-mode spacing be used?
+
+% verbatim copy from cmsy10.mf
+subs:=7/10; % subscripts to 10pt will normally be in 7pt type
+rth#:=.4pt#; % assume that rules will come from cmex10
+fontdimen 8: % parameters $\sigma_8$ through $\sigma_{22}$ will now be listed
+ math_axis#+3.51rth#+54/36pt#+subs*desc_depth#, % num1
+ math_axis#+1.51rth#+30/36pt#, % num2
+ math_axis#+1.51rth#+48/36pt#, % num3
+ -(math_axis#-3.51rth#-subs*fig_height#-124/36pt#), % denom1
+ -(math_axis#-1.51rth#-subs*fig_height#-30/36pt#), % denom2
+ 8.99pt#-subs*asc_height#, % sup1
+ 8.49pt#-subs*asc_height#, % sup2
+ 104/36pt#, % sup3
+ 54/36pt#, % sub1
+ -(8.49pt#-2subs*asc_height#-3.1rth#), % sub2
+ subs*asc_height#-36/36pt#, % sup\_drop
+ 18/36pt#, % sub\_drop
+ 23.9pt#, % delim1
+ 10.1pt#, % delim2
+ math_axis#; % axis\_height
+
+generate bskmathsy % switch to the driver file
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfm
new file mode 100644
index 00000000000..117957ecc25
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskarr10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfm
new file mode 100644
index 00000000000..81010417ee4
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskex10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfm
new file mode 100644
index 00000000000..c2122e7eb12
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskhc10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfm
new file mode 100644
index 00000000000..1939b9f53ee
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bski10-TS1.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfm
new file mode 100644
index 00000000000..0e928c3ae0a
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bski10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfm
new file mode 100644
index 00000000000..c3a346c98f4
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskib10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfm
new file mode 100644
index 00000000000..0e928c3ae0a
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskiol10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfm
new file mode 100644
index 00000000000..d78594a041b
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskiu10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfm
new file mode 100644
index 00000000000..a3aba1157c9
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskiub10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfm
new file mode 100644
index 00000000000..620ccffcdb6
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskma10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfm
new file mode 100644
index 00000000000..53e85c634ab
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmab10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfm
new file mode 100644
index 00000000000..934d2a0b4b3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmi10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfm
new file mode 100644
index 00000000000..f3394c3ea33
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmib10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfm
new file mode 100644
index 00000000000..33d062fd4ee
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskms10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfm
new file mode 100644
index 00000000000..3def007aa8f
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfm
new file mode 100644
index 00000000000..de84f9b3fb3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmsbsl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfm
new file mode 100644
index 00000000000..52eab90104c
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskmssl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfm
new file mode 100644
index 00000000000..28c8190e38f
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-T1.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfm
new file mode 100644
index 00000000000..105642c0c79
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10-TS1.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfm
new file mode 100644
index 00000000000..7e5f67512c3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskr10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfm
new file mode 100644
index 00000000000..6d9bcd1ec66
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfm
new file mode 100644
index 00000000000..ec304389117
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrc10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfm
new file mode 100644
index 00000000000..6644ab539b7
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrcb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfm
new file mode 100644
index 00000000000..38765cb6525
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrf10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfm
new file mode 100644
index 00000000000..0b46bd506e8
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfm
new file mode 100644
index 00000000000..7e5f67512c3
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrol10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfm
new file mode 100644
index 00000000000..f29ef33690d
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsb10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfm
new file mode 100644
index 00000000000..325fdcfbbda
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrsl10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfm
new file mode 100644
index 00000000000..472e2504313
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bskrw10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfm
new file mode 100644
index 00000000000..6bb7b608ec7
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksc10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfm
new file mode 100644
index 00000000000..1be76931c94
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksy10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfm
new file mode 100644
index 00000000000..576b095e199
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksyol10.tfm
Binary files differ
diff --git a/Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfm b/Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfm
new file mode 100644
index 00000000000..95d3bb03f43
--- /dev/null
+++ b/Master/texmf-dist/fonts/tfm/public/boisik/bsksysl10.tfm
Binary files differ