summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/wasy
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-09 23:38:21 +0000
committerKarl Berry <karl@freefriends.org>2006-01-09 23:38:21 +0000
commit215012a8d684889983ec2c0629e1c704e6853d9c (patch)
treeebf1271bd71869069824935ae8a5678745bf8bce /Master/texmf-dist/fonts/source/public/wasy
parent1af3d19d6dbcbf309667d9cb4aa3cdda914914a9 (diff)
trunk/Master/texmf-dist/fonts/source
git-svn-id: svn://tug.org/texlive/trunk@101 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/wasy')
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/lasychr.mf388
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/rsym.mf1732
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasy10.mf100
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasy5.mf103
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasy6.mf100
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasy7.mf100
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasy8.mf100
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasy9.mf100
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasyb10.mf100
-rw-r--r--Master/texmf-dist/fonts/source/public/wasy/wasychr.mf225
10 files changed, 3048 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/wasy/lasychr.mf b/Master/texmf-dist/fonts/source/public/wasy/lasychr.mf
new file mode 100644
index 00000000000..0c94770291e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/lasychr.mf
@@ -0,0 +1,388 @@
+%
+% Copyright, The LaTeX Project and Roland Waldi, 1992.
+%
+% These characters are taken from LASY.MF from the LaTeX project with minor
+% changes and extensions (so 100% compatible). LASY.MF is part of the
+% "LaTeX fonts" package which is usually part of every LaTeX system. It
+% is also available at the URL
+% ftp://ftp.dante.de/tex-archive/fonts/latex/
+%
+% Permission is granted without fee to use, modify and distribute this
+% file, but you are not allowed to distribute this file or any files
+% derived from it using the name LASY.MF.
+%
+
+cmchar "Leftward arrowhead";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"28",6u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,0); pos4(bar,0);
+y0=math_axis; lft x0=hround u;
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4r{z9-z4}..z6r) intersectiontimes (z3r{z9-z3}..z5r);
+z10=(z4r{z9-z4}..z6r) intersectionpoint (z3r{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4l--subpath (0,t1) of (z4r{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the leftward arrow
+% The tip of the arrowhead rests one unit from left edge, same as left arrow
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) new intersectinpoint z10 is introduced and path slightly altered
+% 3) name, code number and width changed, otherwise essentially the same
+
+
+
+cmchar "Rightward arrowhead";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"29",6u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,0); pos4(bar,0);
+y0=math_axis; rt x0=hround(w-u);
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
+z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the rightward arrow
+% The tip of the arrowhead rests one unit from right edge, same as right arrow
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) new intersectinpoint z10 is introduced and path slightly altered
+% 3) name, code number and width changed, otherwise essentially the same
+
+
+
+cmchar "Upward arrowhead";
+beginchar(hex"2A",9u#,asc_height#,asc_depth#);
+italcorr .76asc_height#*slant+.5crisp#-u#;
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,90); pos4(bar,90);
+top z0=(.5w,0); x0-x3=x4-x0=3u+eps;
+y3=y4=y0-.24asc_height-eps;
+pos5(bar,angle(z4-z0)); z5l=z0;
+pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
+z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the upward arrow
+% The tip of the arrowhead rests on the baseline for reference
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) point z0 is moved down from the ascender line; the tip touches
+% the baseline
+% 3) new intersectinpoint z10 is introduced and path slightly altered
+% 4) name and code number changed, otherwise essentially the same
+
+
+
+cmchar "Downward arrowhead";
+beginchar(hex"2B",9u#,asc_height#,asc_depth#);
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,90); pos4(bar,90);
+bot z0=(.5w,0); x0-x3=x4-x0=3u+eps;
+y3=y4=y0+.24asc_height+eps;
+pos5(bar,angle(z4-z0)); z5l=z0;
+pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0]; % z9 iintroduces curve to arrowhead
+numeric t[]; path p[]; % rather direction{z9-z4} does this
+(t1,t2)=(z4r{z9-z4}..z6r) intersectiontimes (z3r{z9-z3}..z5r);
+z10=(z4r{z9-z4}..z6r) intersectionpoint (z3r{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4l--subpath (0,t1) of (z4r{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3r{z9-z3}..z5r)--z3l{z9-z3}..z0 & cycle;
+ % arrowhead
+penlabels(0,3,4,5,6,9,10); endchar;
+
+% This character is an alteration of the downward arrow
+% The tip of the arrowhead rests on the baseline for reference
+% Changes:
+% 1) deletion of the stem ... points z1,z2 etc
+% The rest of the numbers stay the same, for any referencing
+% 2) point z0 is moved up from the descender line to rest on the baseline
+% 3) new intersectinpoint z10 is introduced and path slightly altered
+% 4) name and code number changed, otherwise essentially the same
+
+
+cmchar "Upside-down Uppercase Greek Omega";
+beginchar(hex"30",13u#,cap_height#,0);
+italcorr cap_height#*slant-.35u#; %italcorr .75cap_height#*slant-.5u#;
+adjust_fit(0,0);
+pickup tiny.nib; pos1(vair,-90); pos2(cap_curve,0);
+pos3(vair,0); pos4(cap_curve,180); pos5(vair,180);
+x1=.5w; bot y1r=0-o; lft x4r=hround u; y2=y4=1/3h; x2=w-x4;
+rt x5l=hround(1/3(w+.5u)+.5hair); top y3=top y5=h; x3=w-x5;
+filldraw stroke z3e{down}...{down}z2e
+ & pulled_super_arc.e(2,1)(.5superpull)
+ & pulled_super_arc.e(1,4)(.5superpull)
+ & z4e{up}...{up}z5e; % bowl
+numeric arm_thickness; path p; p=z3{down}...{down}z2;
+arm_thickness=Vround(if hefty:slab+2stem_corr else:.75[slab,cap_vstem] fi);
+pickup crisp.nib; pos6(arm_thickness,90); pos7(fudged.hair,0);
+top y6r=h; x6=x3; rt x7r=hround (w-.8u); y7=good.y(y6l-.5beak)+eps;
+(x,y)=p intersectionpoint((0,y6l)--(w+h,y6l)); x6l:=x;
+arm(6,7,a,.5beak_darkness,1.2beak_jut); % right arm and beak
+pos8(arm_thickness,90); pos9(fudged.hair,180);
+y8=y6; y9=y7; x8+x6=x9+x7=w; x8l:=w-x6l;
+arm(8,9,b,.5beak_darkness,-1.2beak_jut); % left arm and beak
+math_fit(0,.5ic#); penlabels(1,2,3,4,5,6,7,8,9); endchar;
+
+% This character is taken from the Upper Case Omega of cmr
+% Directions and reference points are reversed and flipped
+% pos angles are flipped by 180 degrees
+% vertical values are reversed, up/down directions in the
+% filldraw stroke are reversed
+% left strokes same, but changes reference points
+% italic correction based on furthest pont of character , so made it
+% full cap_height minus amount for the beak, taken from the cap XI
+% I suppose a transformation of paths would have worked also, but this
+% way, limits are maintained better, i think
+% w+h instead of just w in intersection to make sure paths do intersect
+
+cmchar "Square subset sign";
+compute_spread(5/4x_height#,3/2x_height#); % the spread of `$=$'
+beginchar(hex"3C",14u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+lft x2=hround(1.5u+oo); x1=x4=hround(w-1.5u)+eps; x3=x2;
+y1-y4=spread; y2=y1; y3=y4; y1=math_axis+.5spread;
+draw z1--z2--z3--z4; % bars and stem
+labels(1,2,3,4); endchar;
+
+% This character is an alteration of the square subset or equal to sign
+% Changes:
+% 1) changed position of y1 to be .5 of the spread above the math_axis
+% 2) got rid of lower bar (points z8/z9,etc) and the extra spread#' amount
+% which was used in calculations for the lower bar
+% 3) name and code number and height changed, otherwise essentially the same
+
+cmchar "Square superset sign";
+compute_spread(5/4x_height#,3/2x_height#); % the spread of `$=$'
+beginchar(hex"3D",14u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+x1=x4=hround 1.5u-eps; rt x2=hround(w-1.5u-oo); x3=x2;
+y1-y4=spread; y2=y1; y3=y4; y1=math_axis+.5spread;
+draw z1--z2--z3--z4; % bars and stem
+labels(1,2,3,4); endchar;
+
+% This character is an alteration of the square superset or equal to sign
+% Changes:
+% 1) changed position of y1 to be .5 of the spread above the math_axis
+% 2) got rid of lower bar (points z8/z9,etc) and the extra spread#' amount
+% which was used in calculations for the lower bar
+% 3) name and code number and height changed, otherwise essentially the same
+
+cmchar "Diamond";
+%beginchar(oct"063",2(.85asc_height#-math_axis#)+2u#,v_center(7u#));
+beginchar(hex"33",2(.85asc_height#-math_axis#)+2u#,
+ v_center(2(.85asc_height#-math_axis#)));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=.85asc_height-math_axis;
+x4=x8=good.x .5w; w:=r:=2x4; rt x2=w-lft x6=good.x(x4+a);
+y2=y6=.5[y4,y8]=.5cap_height; top y8=good.y(y2+a);
+draw z2--z4--z6--z8--cycle;
+labels(2,4,6,8); endchar;
+
+% This character is an alteration of the diamond operator
+% The four tips are equidistant from the center point (.5w,math_axis),
+% this distance being half of the cap height
+% and related to that in the square character
+% slightly less though, since it looks too big if the actually have same
+% length
+% Changes:
+% 1) To the amount a, which gives the distance of the tips from the center
+% 2) The width is related to the asc_height, so it changes with it
+% 3) name and code number and width changed, otherwise essentially the same
+% The numbers stay the same, for any referencing
+
+cmchar "Bowtie operator";
+beginchar(hex"31",13u#,v_center(7u#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(1.1*math_axis);
+x1=x4=good.x 1.5u; x2=x3=w-x1;
+y1=y2=good.y(.5(cap_height-2a)); y3=y4=y1+2a;
+draw z1--z3--z2--z4--cycle;
+labels(1,2,3,4); endchar;
+
+% Arbitrary width given
+% Length of the bars at the edges are 2.2*math_axis length
+% and it's vertically aligned on the high, i.e., .5 cap height as opposed
+% to being aligned on the math axis
+
+
+
+
+cmchar "Leads to character extension";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"3A",12u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(.45math_axis);
+y11=y13=y15=math_axis; y12-a=y14+a=good.y math_axis;
+x11=0; x15=w; x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15];
+path p; p=z12{right}...z13...z14{right};
+draw z11{dir(-angle direction 1 of p)}...z12{right}...z13...
+ z14{right}...z15{dir(-angle direction 1 of p)};
+penlabels(11,12,13,14,15); endchar;
+
+% This character is an extension to fit with the Leads to character with
+% arrowhead
+% This character goes from edge to edge and a series of these can be linked
+% as desired.
+% It has 2/3 the width of that character, and if this relation is kept, the
+% the curves should all match
+
+
+
+cmchar "Leads to character with arrowhead";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"3B",18u#,v_center(spread#+rule_thickness#));
+adjust_fit(0,0); pickup crisp.nib;
+pos3(bar,0); pos4(bar,0);
+y0=math_axis; rt x0=hround(w-u);
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t[]; path p[];
+(t1,t2)=(z4l{z9-z4}..z6r) intersectiontimes (z3l{z9-z3}..z5r);
+z10=(z4l{z9-z4}..z6r) intersectionpoint (z3l{z9-z3}..z5r);
+filldraw z0..{z4-z9}z4r--subpath (0,t1) of (z4l{z9-z4}..z6r)
+ --z10--subpath (t2,0) of (z3l{z9-z3}..z5r)--z3r{z9-z3}..z0 & cycle;
+ % arrowhead
+pickup rule.nib;
+numeric a; a=round(.45math_axis);
+y11=y13=y15=y16=y0; y12-a=y14+a=good.y math_axis;
+%x11=0; x15=2/3w; z17=lft z10;
+%x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15]; x16=.3[x15,x0];
+x11=0; x15=0.7w; z17=lft z10;
+x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15]; x16=.5[x15,x0];
+path p; p=z12{right}...z13...z14{right};
+draw z11{dir(-angle direction 1 of p)}...
+ z12{right}...z13...z14{right}...z16{right}...z17;
+penlabels(0,3,4,5,6,9,10,11,12,13,14,15,16); endchar;
+
+% This character uses the rightward arrow arrowhead
+% The width is the same as that of the regular arrow
+% An extension character can be added for longer squiggles
+
+
+cmchar "LASY \lhd triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(1,14u#,v_center(spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x2=hround 1.5u-eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]=math_axis;
+draw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+% taken directly from CMR "less than" character
+% the path was closed to make a triangle
+
+cmchar "black LASY \lhd triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(16,14u#,v_center(spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup crisp.nib;
+lft x2=hround 1.5u-eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]=math_axis;
+filldraw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+
+cmchar "LASY \unlhd triangle";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(2,14u#,v_center(spread#'+spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x2=hround 1.5u-eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]; top y1=h;
+draw z1--z2--z3--cycle; % triangle
+x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar
+labels(1,2,3,8,9); endchar;
+
+% taken directly from CMR "less than or equal to sign"
+% the "less than" path was closed to make a triangle
+
+
+
+cmchar "LASY \rhd triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(3,14u#,v_center(spread#+rule_thickness#));
+italcorr math_axis#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]=math_axis;
+draw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+% taken directly from CMR "greater than" character
+% the path was closed to make a triangle
+
+cmchar "black LASY \rhd triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(17,14u#,v_center(spread#+rule_thickness#));
+italcorr math_axis#*slant-u#;
+adjust_fit(0,0); pickup crisp.nib;
+rt x2=hround(w-1.5u)+eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]=math_axis;
+filldraw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+cmchar "LASY \unrhd triangle";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(4,14u#,v_center(spread#'+spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x1=hround 1.5u-eps; x2=w-x1; x3=x1;
+y1-y3=spread; y2=.5[y1,y3]; top y1=h;
+draw z1--z2--z3--cycle; % triangle
+x8=x1; x9=x2; y8=y9; y3-y9=spread'; draw z8--z9; % bar
+labels(1,2,3,8,9); endchar;
+
+% taken directly from CMR "greater than or equal to sign"
+% the "greater than" path was closed to make a triangle
+
+cmchar "upwards pointing black triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(hex"4B",spread#+rule_thickness#,v_center(11u#));
+italcorr 0;
+adjust_fit(0,0); pickup crisp.nib;
+top y2= h+eps; y1=y3; y2-y1 = vround (h+d);
+x1-x3=spread; x2=.5[x1,x3]=good.x .5w;
+filldraw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
+cmchar "downwards pointing black triangle";
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(hex"4C",spread#+rule_thickness#,v_center(11u#));
+italcorr 0;
+adjust_fit(0,0); pickup crisp.nib;
+bot y2= (-d)-eps; y1=y3; y1-y2 = vround (h+d);
+x1-x3=spread; x2=.5[x1,x3]=good.x .5w;
+filldraw z1--z2--z3--cycle; % triangle
+labels(1,2,3); endchar;
+
diff --git a/Master/texmf-dist/fonts/source/public/wasy/rsym.mf b/Master/texmf-dist/fonts/source/public/wasy/rsym.mf
new file mode 100644
index 00000000000..1d1a4c1f736
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/rsym.mf
@@ -0,0 +1,1732 @@
+% This is RSYM.MF in text format, version 1.1
+
+cmchar "therefore";
+beginchar(hex"05",12u#,x_height#,0);
+italcorr 0;
+adjust_fit(0,0); pickup fine.nib;
+numeric dot_diam#; dot_diam#=if monospace: 5/4 fi\\ dot_size#;
+define_whole_blacker_pixels(dot_diam);
+pos1(dot_diam,0); pos2(dot_diam,90);
+pos3(dot_diam,0); pos4(dot_diam,90);
+pos5(dot_diam,0); pos6(dot_diam,90);
+lft x1l=hround(.5w-.5dot_diam); y1+.5dot_diam=vround(x_height+.5dot_diam);
+x1=.5[x3,x5]; y3=y5; bot y4l=0;
+sqrt3 * (x5-x3) = 2(y1-y4);
+z1=z2; dot(1,2); % dots
+z3=z4; dot(3,4);
+z5=z6; dot(5,6);
+penlabels(1,2,3,4,5,6); endchar;
+
+cmchar "pointer";
+beginchar(hex"09",9u#,fig_height#,0);
+italcorr 0;
+adjust_fit(0,0); pickup rule.nib;
+lft x1 = hround .5u;
+rt x4 = hround (w-.6u);
+x7=x1; x2=x3=x5=x6=.5[x1,x4];
+(top y5) - (bot y3) = h;
+y5-y6 = y2-y3 = vround .3h;
+y4=good.y .5[-d,h]=.5[y3,y5];
+y1=y2; y7=y6;
+draw z1--z2--z3--z4--z5--z6--z7--cycle;
+labels(1,2,3,4,5,6,7); endchar;
+
+cmchar "lightning";
+beginchar(hex"12",8u#,asc_height#,.5desc_depth#);
+italcorr 0;
+adjust_fit(0,0); pickup rule.nib;
+x1 = .5w; x3 = w-u; x2 = u; x5 = .5w - u;
+top y1 = h; bot y5 = -d; y2=y3=.5[y4,y1]; z4=1/5[z5,z3];
+z6 = 2[z5,z4] = .5[z7,z8]; y8 = y6; x8-x7 = .5(x3-x2);
+x5'=.5[x4,x5]; y5'=y5;
+draw z1--z2--z3--z4;
+filldraw z5'--z7--z8--cycle;
+labels(1,2,3,4,5,6,7); endchar;
+
+cmchar "inverse logical not sign";
+beginchar(hex"18",12u#,x_height#,0);
+italcorr x_height#*slant-.5u#;
+adjust_fit(if monospace: -1.5u#,-1.5u# else: 0,0 fi); pickup rule.nib;
+lft x2=hround u-eps; x3=w-x2; x1=x2;
+y2=y3=good.y .5[bar_height,h]; y3-y1=1.2(h-bar_height);
+draw z1--z2--z3; % bar and stem
+labels(1,2,3); endchar;
+
+cmchar "aries";
+beginchar(hex"17",asc_height#+2u#,asc_height#,0);
+italcorr 2/3asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+y1=y6; y2-y1=x2-x1; top y2 = h+oo; y5=y2; bot y4 = 0-oo;
+y3=.85[y4,y1];
+x3-x1 = x6-x3 = 1/2h; x3 = x4 = good.x .5w;
+x2=.5[x1,x3]; x5=.5[x3,x6];
+draw z1{dir 100}..z2..z3---z4 & z4---z3..z5..{dir -100}z6;
+labels(1,2,3); endchar;
+
+cmchar "taurus";
+beginchar(hex"5D",asc_height#+2u#,asc_height#,0);
+italcorr .7asc_height#*slant;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+x4 = good.x .5w; y8-y4=x2-x6=2/3h; y2=good.y .34h;
+circle_points;
+draw_circle;
+x2'=x2; x6'=x6; y2'=y6'=h;
+x8'=x4; y8'=2h;
+draw z2'{z2'-z8'}..z8..{z8'-z6'}z6';
+labels(1,2,3,4,5,6,7,8);
+labels(2',6',8'); endchar;
+
+cmchar "gemini";
+beginchar(hex"5E",asc_height#+2u#,asc_height#,0);
+italcorr 2/3asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+top y2 = h+u; bot y1 = 0-u; y4 = y1; y3 = y2;
+x1 = x2 = u; x3 = x4 = w-u;
+bot y5 = 1/18h; top y6 = 17/18h; y8 = y5; y7 = y6;
+x5 = x6 = 1/3w; x7 = x8 = 2/3w;
+draw z5--z6;
+draw z7--z8;
+draw z1..z5..z8..z4;
+draw z2..z6..z7..z3;
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "capricorn";
+beginchar(hex"64",asc_height#+2u#,asc_height#,0);
+italcorr 2/3asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+top y1 = h; x1 = hround u;
+y2 = y1; x2 = hround (w-u);
+x3 = 0.42w; y3 = 0.60h;
+x4 = 0.60w; bot y4 = 0;
+x5 = x2 + oo; y5 = 0.28h;
+x6 = x1; y6 = 0.35h;
+draw z1--z2{dir 200}..z3..z4..z5..z3..z6;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "pisces";
+beginchar(hex"66",asc_height#+2u#,asc_height#,0);
+italcorr 2/3asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+top y2 = h; bot y1 = 0; y4 = y1; y3 = y2;
+y2 - y5 = y5 - y1; y6 = y5;
+x5 = 1/3w; x5-x1 = x3-x6;
+x1 = x2 = hround u; x3 = x4 = hround w-u;
+draw z5--z6;
+draw z1..z5..z2;
+draw z3..z6..z4;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "virgo";
+beginchar(hex"60",1.5asc_height#+2u#,asc_height#,desc_depth#);
+italcorr .7asc_height#*slant;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+top y1 = h; x1 = hround u;
+bot y2 = 0; x2 = hround u + (w-2u)/7;
+y4-y3 = x3-x1; x3=x2;
+y4=y7=y10=y1; x4-x3=x5-x4=x7-x5=x8-x7=x10-x8=0.77(x11-x10)=x3-x1;
+x5=x6; x8=x9;
+y5=y8=y11=y3;
+y6=y9=y2;
+x9'=x9+1/4(x11-x9);
+y9'=y9+2/3(y12-y9);
+bot y12 = -d; x12-x6 = x9-x12;
+draw z1{right}..{down}z3--z2--z3..z4..z5--z6--z5..z7..z8--z9{down}..z9';
+draw z9--z8..z10..z11{down}..z12;
+labels(1,2,3,4,5,6,7,8,9,10,11,12);
+endchar;
+
+cmchar "scorpio";
+beginchar(hex"62",1.5asc_height#+2u#,asc_height#,desc_depth#);
+italcorr .7asc_height#*slant;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+top y1 = h; x1 = hround u;
+bot y2 = 0; x2 = hround u + (w-2u)/7;
+y4-y3 = x3-x1; x3=x2;
+y4=y7=y10=y1; x4-x3=x5-x4=x7-x5=x8-x7=x10-x8=0.77(x11-x10)=x3-x1;
+x5=x6; x8=x9;
+y5=y8=y3;
+y6=y9=y11=y2;
+x12=x11; y12=y11-2u;
+x13=x11-2u; y13=y11;
+draw z1{right}..{down}z3--z2--z3..z4..z5--z6--z5..z7..z8
+ --z9{down}..{dir 45}z11;
+draw z12--z11--z13;
+labels(1,2,3,4,5,6,7,8,9,10,11,12);
+endchar;
+
+cmchar "cancer";
+beginchar(hex"5F",1.3asc_height#+2u#,asc_height#,0);
+italcorr .7asc_height#*slant;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+y6 = 0.5h; x6 = hround u; x2-x6 = y8-y4 = 0.35h;
+circle_points;
+y1'=y1; y2'=y2; y3'=y3; y4'=y4; y5'=y5; y6'=y6; y7'=y7; y8'=y8;
+x6'= hround (w-u);
+x9 = hround (0.55w); top y9 = h; bot y9' = 0;
+x10 = hround (w-u-1/7h); y10-y8' = 1/7h; y4-y10' = 1/7h;
+x2'-x6'=x6-x2; x3'-x6'=x6-x3; x4'-x6'=x6-x4; x5'-x6'=x6-x5;
+x1'-x6'=x6-x1; x7'-x6'=x6-x7; x8'-x6'=x6-x8; x9'-x6'=x6-x9;
+x10'-x6'=x6-x10;
+draw z6{up}...z7{z8-z6}
+ ...z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
+ ...z5{z6-z4}...z6{up}..z9{right}..z10;
+draw z6'{down}...z5'{z4'-z6'}
+ ...z4'{left}...z3'{z2'-z4'}...z2'{up}...z1'{z8'-z2'}...z8'{right}
+ ...z7'{z6'-z8'}...z6'{down}..z9'{left}..z10';
+labels(1,2,3,4,5,6,7,8,9,10);
+labels(1',2',3',4',5',6',7',8',9',10');
+endchar;
+
+cmchar "libra";
+beginchar(hex"61",1.5asc_height#+2u#,0.75asc_height#,0);
+italcorr .7asc_height#*slant;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+x4 = good.x .5w; y8-y4=x2-x6=.5w-2u; bot y4 = 0;
+circle_points;
+top y6' = bot y6; x6' = x6;
+top y2' = bot y2; x2' = x2;
+y9 = y10 = y2'; x10-x9 = w-2u; x10-x4 = x4-x9;
+y11 = y12 = y4; x11=x9; x12=x10;
+draw z11--z12;
+draw z9--z6'{dir 95}..z7..z8..z1..{dir -95}z2'--z10;
+labels(1,2',3,4,5,6',7,8,9,10,11,12);
+endchar;
+
+cmchar "aquarius";
+beginchar(hex"65",1.5asc_height#+2u#,x_height#,0);
+italcorr .7asc_height#*slant;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+x1 = hround u; x6 = hround (w-u);
+x2-x1 = x3-x2 = x4-x3 = x5-x4 = x6-x5;
+top y2 = h; y2=y4=y6;
+bot y1 = 0.55h; y1=y3=y5;
+x1'=x1;x2'=x2;x3'=x3;x4'=x4;x5'=x5;x6'=x6;
+bot y1' = 0; y1'=y3'=y5';
+y2'-y1' = y2-y1; y2'=y4'=y6';
+draw z1..z2..z3..z4..z5..z6;
+draw z1'..z2'..z3'..z4'..z5'..z6';
+labels(1,2.3,4,5,6);
+labels(1',2',3',4',5',6');
+endchar;
+
+cmchar "sun";
+beginchar(hex"2E",asc_height#+2u#,asc_height#,0);
+italcorr .5asc_height#*slant;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+x4 = good.x .5w; y8-y4=x2-x6=3/5h; y2=good.y .5h;
+circle_points;
+z1'=4/3[z5,z1];
+z2'=4/3[z6,z2];
+z3'=4/3[z7,z3];
+z4'=4/3[z8,z4];
+z5'=4/3[z1,z5];
+z6'=4/3[z2,z6];
+z7'=4/3[z3,z7];
+z8'=4/3[z4,z8];
+draw_circle;
+for n=1 upto 8: draw z[n]--z[n]'; endfor
+labels(1,2,3,4,5,6,7,8);
+labels(1',2',3',4',5',6',7',8'); endchar;
+
+cmchar "check";
+beginchar(8,.90*asc_height#+2u#,asc_height#,0);
+italcorr asc_height#*slant - .5u#;
+adjust_fit(0,0); pickup crisp.nib;
+x1=u; x2=x1+.26h; x3=x2+.65h;
+y1=.35h; bot y2=0; top y3l=h-eps;
+pos1(hair,45); pos2(stem,0); pos3(hair,-45);
+filldraw stroke z1e{(1,-1)}..z2e;
+filldraw stroke z2e..{(1,1)}z3e;
+penlabels(1,2,3); endchar;
+
+cmchar "bell";
+beginchar(10,1.7math_axis#+u#,1.9math_axis#,0);
+italcorr u#*slant + .5u#;
+adjust_fit(0,0); pickup crisp.nib;
+x11=good.x u; x14 = good.x .5w; x17-x14=x14-x11;
+x12=x11; x16=x17; x13=1/3[x12,x14]; x15=1/3[x16,x14];
+bot y11=1.5u; y17=y11; y12=y11+stem; y16=y12;
+top y14=h; y13=y15=.5[y12,y14];
+filldraw z11--z12{right}..z13..z14{right}..z15..{right}z16--z17--cycle;
+x1=x3=x14; y1-y3=x2-x4=1.6u; x1=.5[x2,x4]; y4=y2=.5[y1,y3]=good.y .8u;
+filldraw z1..z2..z3..z4..cycle;
+labels(1,2,3,4,11,12,13,14,15,16,17); endchar;
+
+cmchar "1/8 note";
+beginchar(11,10u#,asc_height#,0);
+italcorr 1/3asc_height#*slant;
+adjust_fit(0,0); pickup crisp.nib;
+lft x1=u; rt x3r=.5w; rt x7r = w-u;
+x5=x5'=x3; x7'=x7; x2=x4=.5[x1,x3r];
+bot y2=0; top y4=3u; y1=y3=.5[y2,y4];
+top y5=h; y7=1/3h; z6=.5[z5,z7];
+pos3(hair,0); pos5(hair,0); pos7(hair,0);
+pos5'(hair,0); pos7'(hair,0);
+y5-y5'=y7'-y7=1.0u;
+pos6(2u,45);
+filldraw z1..z2..z3r..z4..cycle; % corpus
+filldraw stroke z3e--z5e; % beam
+filldraw stroke z5'e{down}...z6e...{down}z7'e--z7e; % flag
+penlabels(3,5,5',6,7,7'); labels(1,2,4); endchar;
+
+cmchar "1/4 note";
+beginchar(12,6u#,asc_height#,0);
+italcorr 1/3asc_height#*slant;
+adjust_fit(0,0); pickup crisp.nib;
+lft x1=u; rt x3r=w-u;
+x5=x3; x2=x4=.5[x1,x3r];
+bot y2=0; top y4=3u; y1=y3=.5[y2,y4];
+top y5=h;
+pos3(hair,0); pos5(hair,0);
+filldraw z1..z2..z3r..z4..cycle; % corpus
+filldraw stroke z3e--z5e; % beam
+penlabels(3,5); labels(1,2,4); endchar;
+
+cmchar "1/2 note";
+beginchar(13,6u#,asc_height#,0);
+italcorr 1/3asc_height#*slant;
+adjust_fit(0,0); pickup crisp.nib;
+.5[x1,x3] = good.x .5w; x3r-x1r=4u;
+x5=x3; x2=x4=.5[x1,x3];
+bot y2=0; top y4=3u; y1=y3=.5[y2,y4];
+top y5=h;
+pos1(hair,180); pos3(hair,0); pos5(hair,0);
+pos2(2hair,-90); pos4(2hair,90);
+penstroke z1e..z2e..z3e..z4e..cycle; % corpus
+filldraw stroke z3e--z5e; % beam
+penlabels(1,2,3,4,5); endchar;
+
+cmchar "1/1 note";
+beginchar(14,7u#,3.5u#,0.5u#);
+italcorr 1/3asc_height#*slant;
+adjust_fit(0,0); pickup crisp.nib;
+.5[x1,x3] = good.x .5w; x3r-x1r=5u;
+x2=x4=.5[x1,x3];
+y4r-y2r=vround h+eps; y1=y3=.5[y2,y4]=good.y .5(h-d);
+pos1(2.5hair,180); pos3(2.5hair,0);
+pos2(vair,-90); pos4(vair,90);
+penstroke z1e..z2e..z3e..z4e..cycle; % corpus
+penlabels(1,2,3,4); endchar;
+
+cmchar "2 1/8 notes";
+beginchar(15,13u#,asc_height#,0);
+italcorr 1/3asc_height#*slant;
+adjust_fit(0,0); pickup crisp.nib;
+lft x1=u; x3=x1+4u;
+x5=x3; x2=x4=.5[x1,x3r];
+bot y2=.2h; top y4=y2+3u; y1=y3=.5[y2,y4];
+top y5=h;
+x1'=x3'-4u; rt x3'r=w-u;
+x5'=x3'; x2'=x4'=.5[x1',x3'r];
+bot y2'=0; top y4'=3u; y1'=y3'=.5[y2',y4'];
+top y5'=.8h;
+pos3(hair,0); pos5(hair,0);
+pos3'(hair,0); pos5'(hair,0);
+pos6(3hair,-90); pos6'(3hair,-90);
+x6=x5l; x6'=x5'r;
+y6'l=y5'; y6l=y5 + (hair/(x6'-x6))*(y5-y5') + eps;
+filldraw z1..z2..z3r..z4..cycle; % corpus 1
+filldraw z1'..z2'..z3'r..z4'..cycle; % corpus 2
+filldraw stroke z3e--z5e; % beam 1
+filldraw stroke z3'e--z5'e; % beam 2
+filldraw stroke z6e--z6'e; % bar
+penlabels(3,5,6,7); labels(1,2,4); endchar;
+
+cmchar "female";
+beginchar(hex"19",x_height#+2u#,1.7x_height#-desc_depth#,desc_depth#);
+italcorr 1/2x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x6=hround u; x8=good.x (.5x_height + u);
+y6 = good.y (h-.5x_height); y8-y4=x2-x6;
+circle_points;
+x9 := x8;
+numeric a; a = round .5(h+d-x_height) + eps;
+x10=x8-a;
+x11=x8+a;
+y10 = y11; y11 = -d+a;
+y9 = -desc_depth;
+draw_circle;
+draw z10--z11; draw z4--z9;
+math_fit(0,ic#);
+labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
+
+cmchar "earth";
+beginchar(hex"26",x_height#+2u#,1.7x_height#,0);
+italcorr 1/2x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x6=hround u; x8=good.x (.5x_height + u);
+y6 = good.y .5x_height; y8-y4=x2-x6;
+circle_points;
+x9 := x8;
+numeric a; a = round .5(h-x_height) + eps;
+x10=x8-a;
+x11=x8+a;
+y10 = y11 = h-a;
+y9 = h;
+draw_circle;
+draw z10--z11; draw z8--z9;
+math_fit(0,ic#);
+labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
+
+cmchar "Uranus";
+beginchar(hex"5A",x_height#+2u#,v_center(1.7x_height#));
+italcorr 1/2x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x6=hround u; x12 = x8 = good.x (.5x_height + u);
+y12 = y6 = good.y (.5x_height-d); y8-y4=x2-x6;
+circle_points;
+x9 := x8;
+numeric a; a = round .5(h+d-x_height) + eps;
+x10=x8-a+.5u;
+x11=x8+a-.5u;
+y10 = y11 = h-a+.5u;
+y9 = h;
+draw_circle;
+draw z8--z9;
+draw z10--z9--z11;
+drawdot z12;
+math_fit(0,ic#);
+labels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;
+
+cmchar "Neptun";
+beginchar(hex"5B",x_height#+4u#,v_center(2x_height#));
+italcorr 2x_height#*slant - .5u#;
+adjust_fit(0,0);
+pickup rule.nib; autorounded;
+lft x6=hround u; x8 = good.x (.5x_height + u);
+y6 = good.y (.5x_height-d); y8-y4=x2-x6;
+circle_points;
+x9 = x11 = x11' = x8;
+x10=x10'=x6; x12=x12'=x2;
+top y10' = top y11' = top y12' = h;
+top y10 = top y11 = top y12 = h-u;
+y10-y9 = x9-x10;
+pos10(2u,0);
+pos11(2u,0);
+pos12(2u,0);
+draw_circle;
+draw z8--z11';
+draw z10'---z10..z9..z12---z12';
+draw z10l--z10'--z10r;
+draw z11l--z11'--z11r;
+draw z12l--z12'--z12r;
+math_fit(0,ic#);
+penlabels(10,11,12);
+labels(1,2,3,4,5,6,7,8,9,10',11',12'); endchar;
+
+cmchar "Mercury";
+beginchar(hex"27",x_height#+2u#,2.2x_height#-desc_depth#,desc_depth#);
+italcorr 1/2x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x6=hround u; x8=good.x (.5x_height + u);
+y6 = good.y (h-x_height); y8-y4=x2-x6;
+circle_points;
+x9 := x8;
+numeric a; a = round .5(h+d-1.5x_height) + eps;
+x10=x8-a;
+x11=x8+a;
+y10 = y11; y11 = -d+a;
+y9 = -desc_depth;
+x12=x6; x13=x2; y12=y13; y12-y8=y8-y2;
+draw_circle;
+draw z10--z11; draw z4--z9;
+draw z12{down}...z8{right}...{up}z13;
+math_fit(0,ic#);
+labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
+
+cmchar "male";
+numeric this_size#;
+this_size# = x_height#*(1+0.9/sqrt2);
+beginchar(hex"1A",this_size#+1.7u#,this_size#,0);
+italcorr this_size#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x6=hround u; x2=x_height+2u-x6; y2=.5x_height; bot y4=0;
+circle_points;
+z9 = 1.9[z5,z1];
+draw_circle;
+x9 := good.x x9;
+y9 := good.y y9;
+x10 = x9; y11 = y9;
+y10 = y9-3.5u; x11 = x9-3.5u;
+draw z1--z9;
+draw z10--z9--z11;
+labels(1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "sagittarius";
+numeric this_size#;
+this_size# = x_height#*(1+0.9/sqrt2);
+beginchar(hex"63",this_size#,this_size#,0);
+italcorr this_size#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x7=hround u; x2-x6 = y8-y4 = x_height; bot y5=0;
+circle_points;
+z9 = 1.9[z5,z1];
+x9 := good.x x9;
+y9 := good.y y9;
+x10 = x9; y11 = y9;
+y10 = y9-3.5u; x11 = x9-3.5u;
+draw z5--z9;
+draw z3--z7;
+draw z10--z9--z11;
+labels(1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "conjunction";
+numeric this_size#;
+this_size# = x_height#*(1+0.9/sqrt2);
+beginchar(hex"56",this_size#+1.7u#,this_size#,0);
+italcorr this_size#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x6=hround u; x2=x_height+2u-x6; y2=.5x_height; bot y4=0;
+circle_points;
+z9 = 1.9[z5,z1];
+draw_circle;
+x9 := good.x x9;
+y9 := good.y y9;
+draw z1--z9;
+labels(1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "opposition";
+beginchar(hex"57",2x_height#+2u#,
+ 2.2x_height#-0.5desc_depth#,0.5desc_depth#);
+italcorr 1.5x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+lft x6=hround u; x2-x6=y8-y4=x_height; bot y4=-d-oo;
+circle_points;
+draw_circle;
+x10 = w-u-x2; y10=h+oo-y8;
+for n=1 upto 8: z[n]' = z[n] + z10; endfor
+draw z8'{right}...z1'{z2-z8}...z2'{down}...z3'{z4-z2}...z4'{left}
+ ...z5'{z6-z4}...z6'{up}...z7'{z8-z6}...cycle;
+draw z1--z5';
+labels(1',2',3',4',5',6',7',8');
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "automatic telephone recorder";
+beginchar(hex"06",
+ 1.13 min(asc_height#,9/7x_height#)+2u#,
+ min(asc_height#,9/7x_height#),0);
+italcorr x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+x4 = good.x .5w; x2-x6=y8-y4; y2=good.y .5h; bot y4=-oo;
+circle_points;
+z9 = 1.30[z1,z5];
+z10 = 0.70[z1,z5];
+draw_circle;
+draw z9--z10;
+labels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;
+
+cmchar "currency";
+beginchar(hex"1B",
+ 1.13 min(asc_height#,9/7x_height#)+2u#,
+ min(asc_height#,9/7x_height#),0);
+italcorr x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+x4 = good.x .5w; x2-x6=y8-y4; y2=good.y .5h; bot y4=-oo;
+circle_points;
+z9 = 1.30[z5,z1];
+z10 = 1.30[z7,z3];
+z11 = 1.30[z1,z5];
+z12 = 1.30[z3,z7];
+draw_circle;
+draw z1--z9;
+draw z3--z10;
+draw z5--z11;
+draw z7--z12;
+labels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;
+
+cmchar "clock";
+beginchar(hex"1C",asc_height#+2u#,0.95asc_height#,0);
+italcorr x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+x8=good.x .5w; x2-x6=y8-y4; y2=good.y .5h; bot y4=0;
+circle_points;
+draw_circle;
+z9 = 0.55[z5,z1];
+z10 = 0.55[z7,z3];
+z11 = 0.55[z1,z5];
+z12 = 0.55[z3,z7];
+z13 = 0.5[z2,z6];
+z14 = 0.25[z2,z6];
+z15 = 0.15[z8,z4];
+filldraw z9..z10..z11..z12..cycle;
+draw z14--z13--z15;
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); endchar;
+
+cmchar "smiley";
+beginchar(hex"2C",asc_height#+2u#,0.95asc_height#,0);
+italcorr x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+x8=good.x .5w; x2-x6=y8-y4; y2=good.y .5h; bot y4=0;
+circle_points;
+draw_circle; % circle
+pickup crisp.nib;
+numeric ethickness;
+numeric mthickness;
+ethickness = min(1.2stem,max(1,round(h/4)-1));
+mthickness = min(stem,max(1,round(h/11)));
+z7' = .27[z7,z3]; pos7'(ethickness,45); z17 = z7'; pos17(ethickness,-45);
+z1' = .27[z1,z5]; pos1'(ethickness,45); z11 = z1'; pos11(ethickness,-45);
+x3' = .23[x3,x7];
+y3' = .28[y3,y7]; pos3'(hair,135);
+x5' = .23[x5,x1];
+y5' = .28[y5,y1]; pos5'(hair,45);
+z4' = .25[z4,z8]; pos4'(mthickness,90);
+filldraw stroke z5'e...z4'e{right}...z3'e; % mouth
+filldraw z7'r...z17l...z7'l...z17r...cycle; % eyes
+filldraw z1'r...z11l...z1'l...z11r...cycle;
+penlabels(1',11,3',4',5',7',17);
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "frowney";
+beginchar(hex"2F",asc_height#+2u#,0.95asc_height#,0);
+italcorr x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+x8=good.x .5w; x2-x6=y8-y4; y2=good.y .5h; bot y4=0;
+circle_points;
+draw_circle; % circle
+pickup crisp.nib;
+numeric ethickness;
+numeric mthickness;
+ethickness = min(1.2stem,max(1,round(h/4)-1));
+mthickness = min(stem,max(1,round(h/11)));
+z7' = .27[z7,z3]; pos7'(ethickness,45); z17 = z7'; pos17(ethickness,-45);
+z1' = .27[z1,z5]; pos1'(ethickness,45); z11 = z1'; pos11(ethickness,-45);
+x3' = .25[x3,x7];
+y3' = .15[y3,y7]; pos3'(hair,45);
+x5' = .25[x5,x1];
+y5' = .15[y5,y1]; pos5'(hair,135);
+z4' = .35[z4,z8]; pos4'(mthickness,90);
+filldraw stroke z5'e...z4'e{right}...z3'e; % mouth
+filldraw z7'r...z17l...z7'l...z17r...cycle; % eyes
+filldraw z1'r...z11l...z1'l...z11r...cycle;
+penlabels(1',11,3',4',5',7',17);
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "black smiley";
+beginchar(hex"2D",asc_height#+2u#,0.95asc_height#,0);
+italcorr x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup crisp.nib; autorounded;
+x8=good.x .5w; x2-x6=y8-y4; y2=good.y .5h; bot y4=0;
+circle_points;
+numeric ethickness;
+numeric mthickness;
+ethickness = min(1.2stem,max(1,round(h/4)-1))+1;
+mthickness = min(stem,max(1,round(h/11)))+1;
+z7' = .27[z7,z3]; pos7'(ethickness,45); z17 = z7'; pos17(ethickness,-45);
+z1' = .27[z1,z5]; pos1'(ethickness,45); z11 = z1'; pos11(ethickness,-45);
+z3' = .25[z3,z7]; pos3'(1.5hair,135);
+z5' = .25[z5,z1]; pos5'(1.5hair,45);
+z4' = .25[z4,z8]; pos4'(mthickness,90);
+filldraw z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
+ ...z5{z6-z4}...z6{up}...z7{z8-z6}...cycle;
+unfilldraw stroke z5'e...z4'e{right}...z3'e; % mouth
+unfilldraw z7'r...z17l...z7'l...z17r...cycle; % eyes
+unfilldraw z1'r...z11l...z1'l...z11r...cycle;
+penlabels(1',11,3',4',5',7',17);
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "varprop";
+beginchar(hex"1D",14u#,x_height#,0);
+italcorr x_height#*slant-.5u#;
+adjust_fit(if monospace: -u#,-u# else: 0,0 fi);
+pickup light_rule.nib;
+lft x1 = hround 1.5u; y1 := good.y math_axis;
+numeric a; a = round(2.75u);
+x2 := good.x .5(w+a);
+y2 = y1;
+x3 = x4 = x1+a; y3 = y1 + a; y4 = y1 - a;
+x5 = x6 = w-x1; y5 = y3; y6 = y4;
+draw z5{left}..z2..z4..z1..z3..z2..{right}z6;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "variant angle";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(hex"1E",14u#,v_center(spread#'+spread#+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0);
+lft x10=hround 1.5u-eps; x9=x11=w-x10;
+y9-y11=spread; y10=.5[y9,y11]=math_axis;
+x4 = x10; x6 = 0.7[x10,x11]; y6 = y10; x6 - x1 = y4 - y1;
+pickup rule.nib; autorounded;
+circle_points;
+draw z5{z6-z4}..z6..{z8-z6}z7;
+pickup light_rule.nib;
+draw z9--z10--z11;
+labels(1,2,3,4,5,6,7,8,9,10,11); endchar;
+
+cmchar "reverse diameter";
+beginchar(hex"15",1.5556x_height#+2u#,v_center(1.5556x_height#));
+italcorr 1.348x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+numeric diam; diam := max(round(x_height/rule_thickness),1);
+diam := round( diam*rule_thickness ); if odd diam: diam := diam + 1; fi
+x0=x8=good.x .5w; y8-y4=x2-x6=diam;
+y0=y2=good.y math_axis;
+circle_points;
+z9' = 2.2[z0,z7];
+numeric delta; delta = round(y9'-y8);
+lft x9 = x6-delta+eps;
+top y9 = y8+delta+eps;
+rt x10 = x2+delta+eps;
+bot y10 = y4-delta+eps;
+draw_circle;
+draw z9--z10;
+labels(0,1,2,3,4,5,6,7,8,9,10); endchar;
+
+cmchar "diameter";
+beginchar(hex"1F",1.5556x_height#+2u#,v_center(1.5556x_height#));
+italcorr 1.348x_height#*slant;
+adjust_fit(if monospace: u#,u# else: 0,0 fi);
+pickup rule.nib; autorounded;
+numeric diam; diam := max(round(x_height/rule_thickness),1);
+diam := round( diam*rule_thickness ); if odd diam: diam := diam + 1; fi
+x0=x8=good.x .5w; y8-y4=x2-x6=diam;
+y0=y2=good.y math_axis;
+circle_points;
+z9' = 2.2[z0,z7];
+numeric delta; delta = round(y9'-y8);
+lft x9 = x6-delta+eps;
+bot y9 = y4-delta+eps;
+rt x10 = x2+delta+eps;
+top y10 = y8+delta+eps;
+draw_circle;
+draw z9--z10;
+labels(1,2,3,4,5,6,7,8,9,10); endchar;
+
+cmchar "rightcycle";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"21",
+ 18u#,asc_height#,desc_depth#);
+adjust_fit(if monospace:-2u#,-2u# else: 0,0 fi);
+italcorr x_height#*slant;
+pickup light_rule.nib; autorounded;
+numeric a; a = h + d + 2o - (spread+rule_thickness);
+x4 = good.x .5w; x2-x6=a; y8-y4=a;
+top y8=asc_height+o-.5(spread+rule_thickness);
+circle_points;
+y10=y8-eps; rt x10=hround .4[x8,x1];
+draw z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
+ ...z5{z6-z4}...z6{up}...z7{z8-z6}...{right}z8;
+pickup crisp.nib;
+pos13(bar,0); pos14(bar,0);
+y13-y10=y10-y14=.24asc_height+eps; x13=x14=x10-3u-eps;
+pos15(bar,angle(z14-z10)); z15l=z10; pos16(bar,angle(z13-z10)); z16l=z10;
+z19=.381966[.5[z13,z14],z10];
+numeric t[]; path p[];
+(t1,t2)=(z14l{z19-z14}..z16r) intersectiontimes (z13l{z19-z13}..z15r);
+z20=(z14l{z19-z14}..z16r) intersectionpoint (z13l{z19-z13}..z15r);
+filldraw z10..{z14-z19}z14r--subpath (0,t1) of (z14l{z19-z14}..z16r)
+ --z20--subpath (t2,0) of (z13l{z19-z13}..z15r)--z13r{z19-z13}..z10
+ & cycle; % arrowhead
+penlabels(10,13,14,15,16,19,20);
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "leftcycle";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"22",
+ 18u#,asc_height#,desc_depth#);
+adjust_fit(if monospace:-2u#,-2u# else: 0,0 fi);
+italcorr x_height#*slant;
+pickup light_rule.nib; autorounded;
+numeric a; a = h + d + 2o - (spread+rule_thickness);
+x4 = good.x .5w; x2-x6=a; y8-y4=a;
+top y8=asc_height+o-.5(spread+rule_thickness);
+circle_points;
+y10=y8-eps; lft x10=hround .4[x8,x7];
+draw z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
+ ...z5{z6-z4}...z6{up}...{z8-z6}z7;
+pickup crisp.nib;
+pos13(bar,180); pos14(bar,180);
+y13-y10=y10-y14=.24asc_height+eps; x13=x14=x10+3u+eps;
+pos15(bar,angle(z14-z10)); z15l=z10; pos16(bar,angle(z13-z10)); z16l=z10;
+z19=.381966[.5[z13,z14],z10];
+numeric t[]; path p[];
+(t1,t2)=(z14l{z19-z14}..z16r) intersectiontimes (z13l{z19-z13}..z15r);
+z20=(z14l{z19-z14}..z16r) intersectionpoint (z13l{z19-z13}..z15r);
+filldraw z10..{z14-z19}z14r--subpath (0,t1) of (z14l{z19-z14}..z16r)
+ --z20--subpath (t2,0) of (z13l{z19-z13}..z15r)--z13r{z19-z13}..z10
+ & cycle; % arrowhead
+penlabels(10,13,14,15,16,19,20);
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "ocircle same size as operators";
+beginarithchar(hex"23"); pickup light_rule.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points; draw_circle; % circle
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "pentagon";
+beginarithchar(hex"44"); pickup rule.nib;
+x0=good.x .5w; y0=good.y math_axis;
+x8=x0; top y8=h;
+numeric theta; theta=360/5; % degrees between points
+z0=.5[z4,z8]; z9-z0=(z8-z0) rotated theta;
+z10-z0=(z9-z0) rotated theta;
+z12-z0=(z8-z0) rotated (-theta);
+z11-z0=(z12-z0) rotated (-theta);
+draw z8--z9--z10--z11--z12--cycle;
+labels(0,8,9,10,11,12); endchar;
+
+cmchar "ostar five-ended star in circle";
+beginarithchar(hex"16"); pickup light_rule.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points; draw_circle; % circle
+numeric theta; theta=360/5; % degrees between points
+z0=.5[z4,z8]; z9-z0=(z8-z0) rotated theta;
+z10-z0=(z9-z0) rotated theta;
+z11-z0=(z8-z0) rotated (-theta);
+z12-z0=(z11-z0) rotated (-theta);
+draw z0--z8; draw z0--z9;
+draw z0--z10; draw z0--z11;
+draw z0--z12;
+labels(0,1,2,3,4,5,6,7,8,9,10,11,12); endchar;
+
+cmchar "pentastar";
+beginarithchar(hex"45"); pickup light_rule.nib; autorounded;
+top y8=h; x0=x8=good.x .5w;
+numeric theta; theta=360/5; % degrees between points
+y0=.5h; z9-z0=(z8-z0) rotated theta;
+z10-z0=(z9-z0) rotated theta;
+z11-z0=(z8-z0) rotated (-theta);
+z12-z0=(z11-z0) rotated (-theta);
+draw z0--z8; draw z0--z9;
+draw z0--z10; draw z0--z11;
+draw z0--z12;
+labels(0,8,9,10,11,12); endchar;
+
+cmchar "Filled ocircle";
+beginarithchar(hex"20"); pickup crisp.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points;
+filldraw z8{right}...z1{z2-z8}...z2{down}...z3{z4-z2}...z4{left}
+ ...z5{z6-z4}...z6{up}...z7{z8-z6}...cycle;
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Filled left half ocircle";
+beginarithchar(hex"47"); pickup crisp.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points;
+filldraw z8---z4{left}...z5{z6-z4}...z6{up}...z7{z8-z6}...{right}cycle;
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Filled right half ocircle";
+beginarithchar(hex"48"); pickup crisp.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points;
+filldraw z8---z4{right}...z3{z2-z4}...z2{up}...z1{z8-z2}...{left}cycle;
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Left half ocircle";
+beginarithchar(hex"49"); pickup light_rule.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points;
+draw z8---z4{left}...z5{z6-z4}...z6{up}...z7{z8-z6}...{right}cycle;
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Right half ocircle";
+beginarithchar(hex"4A"); pickup light_rule.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points;
+draw z8---z4{right}...z3{z2-z4}...z2{up}...z1{z8-z2}...{left}cycle;
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Open moon";
+beginarithchar(hex"24"); pickup rule.nib; autorounded;
+lft x6=hround u; x2=w-x6; y2=math_axis; top y8=h;
+circle_points;
+z9=1/3[z6,z2];
+x8:=x8+u;
+x4:=x8;
+draw z4{(-1,-0.1)}..z5{z6-z4}..z6{up}..z7{z8-z6}..{(1,-0.1)}z8
+ & z8..z9{down}..z4;
+labels(1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "Close moon";
+beginarithchar(hex"25"); pickup rule.nib; autorounded;
+lft x2=hround u; x6=w-x2; y2=math_axis; top y8=h;
+circle_points;
+z9=1/3[z6,z2];
+x8:=x8-u;
+x4:=x8;
+draw z4{(1,-0.1)}..z5{z6-z4}..z6{up}..z7{z8-z6}..{(-1,-0.1)}z8
+ & z8..z9{down}..z4;
+labels(1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "Jupiter";
+beginchar(hex"58",.7cap_height#+4u#,cap_height#,0);
+pickup rule.nib;
+lft x1 = hround u; x3-x2=y4-y5; y2=good.y .35h; bot y5=0;
+x4=x5=.505[x2,x3]; y2=y3=.5[y4,y5];
+x1=x2-2u; bot y1=top y4;
+top y1'=h; x1'=.35[x1,x4];
+draw z1..z1'{right}..{(-1,-2)}z2--z3;
+draw z4--z5;
+labels(1,2,3,4,5); endchar;
+
+cmchar "Saturn";
+beginchar(hex"59",10.5u#,cap_height#,desc_depth#);
+pickup rule.nib;
+lft x1 = hround 2.5u; rt x5 = w-u; x6=x5; x4=.5[x1,x5]; x2=x3=x1;
+bot y1=0; top y2=h; y4=x_height; y3=y5=.51x_height; bot y6=-d;
+y7=y8=h-2.0u; lft x7=x1-2.0u; rt x8=x1+2.0u;
+draw z1--z2;
+draw z3{up}...z4{right}..z5{down}..{right}z6;
+draw z7--z8;
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Pluto";
+beginchar(hex"5C",10.5u#,cap_height#,0);
+pickup rule.nib; autorounded;
+lft x2 = hround u; x3=x5=x2; x1=x4=w-x2;
+bot y2 = 0; y1=y2; top y3=h; y5=good.y .45[y2,y3]; y4=.5[y3,y5];
+draw z1--z2--z3{right}...z4...{left}z5;
+labels(1,2,3,4,5); endchar;
+
+cmchar "Ascendent";
+beginchar(hex"13",15u#,v_center(0.9(asc_height#+desc_depth#)));
+italcorr 0.8asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+y1=y3=y8=y10=1/7(h+d)-d;
+y4=y9=-d;
+y5=y7=0.7(h+d)-d;
+y6=h;
+y1=.5[y2,y4];
+x3=u; x5=2u;
+x10=w-u; x7=w-2u;
+x6=.5w;
+x10-x8=x1-x3=y2-y4;
+x2=x4=.5[x1,x3];
+x9=.5[x8,x10];
+draw z1{up}...z2{left}...z3{down}...z4{right}...z1{up}...z5{up}
+ ...z6{right}...z7{down}...z8{down}...z9{right}...{up}z10;
+labels(1,2,3,4,5,6,7,8,9,10); endchar;
+
+cmchar "Descendent";
+beginchar(hex"14",15u#,v_center(0.9(asc_height#+desc_depth#)));
+italcorr 0.8asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+y1=y3=y8=y10=6/7(h+d)-d;
+y4=y9=h;
+y5=y7=0.3(h+d)-d;
+y6=-d;
+y1=.5[y2,y4];
+x3=u; x5=2u;
+x10=w-u; x7=w-2u;
+x6=.5w;
+x10-x8=x1-x3=y4-y2;
+x2=x4=.5[x1,x3];
+x9=.5[x8,x10];
+draw z1{down}...z2{left}...z3{up}...z4{right}...z1{down}...z5{down}
+ ...z6{right}...z7{up}...z8{up}...z9{right}...{down}z10;
+labels(1,2,3,4,5,6,7,8,9,10); endchar;
+
+cmchar "Square";
+beginchar(hex"32",2.1math_axis#+4u#,
+ v_center(2.1math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(2.1math_axis);
+if odd a: a := a + 1; fi
+x1=x4; x2=x3=x1+a; x5 = .5[x1,x2] = good.x .5w;
+y3=y4; y1=y2=y3+a;
+y5 = .5[y1,y3] = good.y .5(h-d);
+draw z1--z2--z3--z4--cycle;
+labels(1,2,3,4,5); endchar;
+
+cmchar "sharp triangle, delta form";
+beginchar(hex"00",12u#,asc_height#,0);
+italcorr asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+lft x1=hround u; x3=w-x1; x2=.5[x1,x3];
+y1=y3; bot y1=-oo; top y2=h;
+draw z1--z2--z3--cycle;
+labels(1,2,3,4,5); endchar;
+
+cmchar "sharp triangle, nabla form";
+beginchar(hex"46",12u#,asc_height#,0);
+italcorr asc_height#*slant;
+adjust_fit(0,0); pickup rule.nib;
+lft x1=hround u; x3=w-x1; x2=.5[x1,x3];
+y1=y3; top y3=h; bot y2=-oo;
+draw z1--z2--z3--cycle;
+labels(1,2,3,4,5); endchar;
+
+cmchar "Crossedsquare";
+beginchar(hex"34",2.1math_axis#+4u#,
+ v_center(2.1math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(2.1math_axis);
+if odd a: a := a + 1; fi
+x1=x4; x2=x3=x1+a; x5 = .5[x1,x2] = good.x .5w;
+y3=y4; y1=y2=y3+a;
+y5 = .5[y1,y3] = good.y .5(h-d);
+draw z1--z2--z3--z4--cycle;
+draw z1--z3;
+draw z2--z4;
+labels(1,2,3,4,5); endchar;
+
+cmchar "Lozenge";
+beginchar(hex"35",2.1math_axis#+4u#,
+ v_center(2.1math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(2.1math_axis);
+x1=x4; x2=x3=x1+a; .5(x1+x2) = good.x .5w;
+y3=y4; y1=y2=y3+a;
+y5 = good.y .5(h-d);
+z5=.5[z1,z3];
+x13-x5=x5-x11=1/3a; y13=y11=y5;
+y12-y5=y5-y14=1/3a; x12=x14=x5;
+draw z1...z12...z2
+ & z2...z13...z3
+ & z3...z14...z4
+ & z4...z11...z1 & cycle;
+labels(1,2,3,4,5,11,12,13,14); endchar;
+
+cmchar "Kreuz";
+beginchar(hex"36",2.1math_axis#+4u#,
+ v_center(2.1math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup crisp.nib;
+numeric a; a=round(2.1math_axis)+eps;
+numeric outerthickness; outerthickness=round(math_axis);
+numeric innerthickness; innerthickness=stem;
+x1=x4; x2=x3=x1+a; .5(x1+x2) = good.x .5w;
+y3=y4; y1=y2=y3+a;
+y5 = good.y .5(h-d);
+z5=.5[z1,z3];
+lft x10=x1; x11=x5; rt x12=x2; y10=y11=y12=y5;
+pos10(outerthickness,90);
+pos11(innerthickness,90);
+pos12(outerthickness,90);
+filldraw stroke z10e...z11e...z12e;
+bot y13=y1; y14=y5; top y15=y4; x13=x14=x15=x5;
+pos13(outerthickness,0);
+pos14(innerthickness,0);
+pos15(outerthickness,0);
+filldraw stroke z13e...z14e...z15e;
+labels(1,2,3,4,5);
+penlabels(10,11,12,13,14,15); endchar;
+
+cmchar "Very high frequency";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"40",14u#,v_center(1.9math_axis#+rule_thickness#));
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=round(.45math_axis);
+numeric b; b=round(math_axis+rule_thickness);
+if odd b: b := b+1; fi
+y11=y13=y15=math_axis; y12-a=y14+a=good.y math_axis;
+x11=u; x15=w-u; x13=.5[x11,x15]; x12=.5[x11,x13]; x14=.5[x13,x15];
+path p; p=z12{right}...z13...z14{right};
+pos11(b,90);
+pos12(b,90);
+pos13(b,90);
+pos14(b,90);
+pos15(b,90);
+draw z11{dir(-angle direction 1 of p)}...z12{right}...z13...
+ z14{right}...z15{dir(-angle direction 1 of p)};
+draw z11r{dir(-angle direction 1 of p)}...z12r{right}...z13r...
+ z14r{right}...z15r{dir(-angle direction 1 of p)};
+draw z11l{dir(-angle direction 1 of p)}...z12l{right}...z13l...
+ z14l{right}...z15l{dir(-angle direction 1 of p)};
+penlabels(11,12,13,14,15); endchar;
+
+cmchar "APL comment";
+beginchar(hex"7F",9u#,9u#,0);
+adjust_fit(0,0); pickup rule.nib; autorounded;
+lft x6=hround u; x2=w-x6; top y8=h; bot y4=2u;
+circle_points;
+y9 = y10 = 0; x9=x2; x10=x6;
+draw_circle; % circle
+draw z2--z9; draw z6--z10;
+labels(1,2,3,4,5,6,7,8,9,10); endchar;
+
+cmchar "APLleftarrowbox";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"70",14u#,7u#+math_axis#,7u#-math_axis#);
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(bar,0); pos4(bar,0);
+y0=y1=y2=math_axis; x1+rule_thickness=hround(w-1.5u);
+lft x0=hround 1.5u;
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0+3u+eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t; path p; p=z4r{z9-z4}..z6r;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9);
+pickup rule.nib;
+y+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]
++.5dot_size);
+lft x11=hround u-eps; x11'=x11; x12=x12'=w-x11;
+y11=y12=math_axis-1.8(y-math_axis);
+y11'=y12'=math_axis+1.8(y-math_axis);
+draw z11--z12--z12'--z11'--cycle;
+penlabels(11,12,11',12'); endchar;
+
+cmchar "APLrightarrowbox";
+compute_spread(.45x_height#,.55x_height#);
+beginchar(hex"71",14u#,7u#+math_axis#,7u#-math_axis#);
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,90); pos2(rule_thickness,90);
+pos3(bar,0); pos4(bar,0);
+y0=y1=y2=math_axis; x1-rule_thickness=hround 1.5u;
+rt x0=hround(w-1.5u);
+y3-y0=y0-y4=.24asc_height+eps; x3=x4=x0-3u-eps;
+pos5(bar,angle(z4-z0)); z5l=z0; pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t; path p; p=z4l{z9-z4}..z6r;
+t=xpart(p intersectiontimes((0,y2l)--(w,y2l))); x2=xpart point t of p;
+filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2l---z1l..z1r---z2r--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9);
+pickup rule.nib;
+y+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]
++.5dot_size);
+lft x11=hround u-eps; x11'=x11; x12=x12'=w-x11;
+y11=y12=math_axis-1.8(y-math_axis);
+y11'=y12'=math_axis+1.8(y-math_axis);
+draw z11--z12--z12'--z11'--cycle;
+penlabels(11,12,11',12'); endchar;
+
+cmchar "APLuparrowbox";
+beginchar(hex"6E",14u#,7u#+math_axis#,7u#-math_axis#);
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(bar,90); pos4(bar,90);
+lft x1l=hround(.5w-.5rule_thickness); bot y1-rule_thickness=-d;
+x0=x1=x2; top y0=h-.5u; x0-x3=x4-x0=3u+eps;
+y3=y4=y0-.24asc_height-eps;
+pos5(bar,angle(z4-z0)); z5l=z0;
+pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t; path p; p=z4l{z9-z4}..z6r;
+t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
+filldraw z0..{z4-z9}z4r--subpath (0,t) of\\(z4l{z9-z4}..z6r)
+ --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3l{z9-z3}..z5r)
+ --z3r{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9);
+pickup rule.nib;
+y+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]
++.5dot_size);
+lft x11=hround u-eps; x11'=x11; x12=x12'=w-x11;
+y11=y12=math_axis-1.8(y-math_axis);
+y11'=y12'=math_axis+1.8(y-math_axis);
+draw z11--z12--z12'--z11'--cycle;
+penlabels(11,12,11',12'); endchar;
+
+cmchar "APLdownarrowbox";
+beginchar(hex"6F",14u#,7u#+math_axis#,7u#-math_axis#);
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0); pickup crisp.nib;
+pos1(rule_thickness,0); pos2(rule_thickness,0);
+pos3(bar,90); pos4(bar,90);
+lft x1l=hround(.5w-.5rule_thickness); top y1+rule_thickness=h;
+x0=x1=x2; bot y0=-d+.5u; x0-x3=x4-x0=3u+eps;
+y3=y4=y0+.24asc_height+eps;
+pos5(bar,angle(z4-z0)); z5l=z0;
+pos6(bar,angle(z3-z0)); z6l=z0;
+z9=.381966[.5[z3,z4],z0];
+numeric t; path p; p=z4r{z9-z4}..z6r;
+t=xpart(p intersectiontimes((x2r,-d)--(x2r,h))); y2=ypart point t of p;
+filldraw z0..{z4-z9}z4l--subpath (0,t) of\\(z4r{z9-z4}..z6r)
+ --z2r---z1r..z1l---z2l--subpath (t,0) of\\(z3r{z9-z3}..z5r)
+ --z3l{z9-z3}..z0 & cycle; % arrowhead and stem
+penlabels(0,1,2,3,4,5,6,9);
+pickup rule.nib;
+y+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]
++.5dot_size);
+lft x11=hround u-eps; x11'=x11; x12=x12'=w-x11;
+y11=y12=math_axis-1.8(y-math_axis);
+y11'=y12'=math_axis+1.8(y-math_axis);
+draw z11--z12--z12'--z11'--cycle;
+penlabels(11,12,11',12'); endchar;
+
+cmchar "APL box";
+beginchar(hex"7E",14u#,7u#+math_axis#,7u#-math_axis#);
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup rule.nib;
+y+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]
++.5dot_size);
+lft x1=hround u-eps; x1'=x1; x2=x2'=w-x1;
+y1=y2=math_axis-1.8(y-math_axis);
+y1'=y2'=math_axis+1.8(y-math_axis);
+draw z1--z2--z2'--z1'--cycle;
+penlabels(1,2,1',2'); endchar;
+
+cmchar "APL input";
+beginchar(hex"7D",14u#,7u#+math_axis#,7u#-math_axis#);
+italcorr math_axis#*slant-.5u#;
+adjust_fit(0,0);
+pickup rule.nib;
+y+.5dot_size=vround(math_axis+math_spread[.5x_height,.6x_height]
++.5dot_size);
+rt x2 - lft x1=w-2u; x1'=x1; x2=x2'=w-x1;
+y1=y2=math_axis-1.8(y-math_axis);
+y3=y4=y1'=y2'=math_axis+1.8(y-math_axis);
+y5=.66[y1,y1'];
+x5=.5[x1,x2];
+x2-x4 = x3-x1;
+x4-x3 = 1.5rule_thickness;
+draw z1--z2--z2'--z1'--cycle;
+filldraw z3--z4--z5--cycle;
+penlabels(1,2,3,4,5,1',2'); endchar;
+
+cmchar "Hexagon";
+beginchar(hex"37",2.43math_axis#+2u#,
+ v_center(2.1math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=2.1math_axis/sqrt 3;
+x4=x1+2a; x3=x2+a; x2=x6; x3=x5; .5[x2,x3] = .5[x1,x4] = good.x .5w;
+y1 = y4 = .5[y2,y6] = good.y .5(h-d);
+y2=y3; y5=y6; y6-y2=2.1math_axis;
+draw z1--z2--z3--z4--z5--z6--cycle;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Hexagon B";
+beginchar(hex"39",2.1math_axis#+2u#,
+ v_center(2.43math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup rule.nib;
+numeric a; a=2.1math_axis/sqrt 3;
+y4=y1+2a; y3=y2+a; y2=y6; y3=y5; .5[y2,y3] = .5[y1,y4] = good.y .5(h-d);
+x1 = x4 = .5[x2,x6] = good.x .5w;
+x2=x3; x5=x6; x6-x2=2.1math_axis;
+draw z1--z2--z3--z4--z5--z6--cycle;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Hexastar";
+beginchar(hex"41",2.65math_axis#+2u#,
+ v_center(2.3math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup light_rule.nib;
+numeric a; a=2.3math_axis/sqrt 3;
+x4=x1+2a; x3=x2+a; x2=x6; x3=x5; .5[x2,x3] = .5[x1,x4] = good.x .5w;
+y1 = y4 = .5[y2,y6] = good.y .5(h-d);
+y2=y3; y5=y6; y6-y2=2.3math_axis;
+draw z1--z4; draw z2--z5; draw z3--z6;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Hexastar B";
+beginchar(hex"42",2.3math_axis#+2u#,
+ v_center(2.65math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup light_rule.nib;
+numeric a; a=2.3math_axis/sqrt 3;
+y4=y1+2a; y3=y2+a; y2=y6; y3=y5; .5[y2,y3] = .5[y1,y4] = good.y .5(h-d);
+x1 = x4 = .5[x2,x6] = good.x .5w;
+x2=x3; x5=x6; x6-x2=2.3math_axis;
+draw z1--z4; draw z2--z5; draw z3--z6;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Davids star";
+beginchar(hex"43",2.3math_axis#+2u#,
+ v_center(2.65math_axis#));
+italcorr math_axis#*slant;
+adjust_fit(0,0); pickup light_rule.nib;
+numeric a; a=2.3math_axis/sqrt 3;
+y4=y1+2a; y3=y2+a; y2=y6; y3=y5; .5[y2,y3] = .5[y1,y4] = good.y .5(h-d);
+x1 = x4 = .5[x2,x6] = good.x .5w;
+x2=x3; x5=x6; x6-x2=2.3math_axis;
+draw z1--z3--z5--cycle; draw z2--z4--z6--cycle;
+labels(1,2,3,4,5,6); endchar;
+
+cmchar "Approximate less than sign";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(hex"3E",14u#,v_center(spread#+1.2spread#'+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x2=hround 1.5u-eps; x1=x3=w-x2;
+y1-y3=spread; y2=.5[y1,y3]=good.y h-.5(spread+rule_thickness);
+draw z1--z2--z3; % diagonals
+pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
+if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
+x1'=x2; x2'=4u; x3'=w-x2'; x4'=w-x1';
+bot y1'=bot y3'=-d; top y2'=top y4'=.8spread'-d;
+draw z1'{up}...z2'{right}..{right}z3'...{up}z4'; % stroke
+labels(1,2,3,1',2',3',4'); endchar;
+
+cmchar "Approximate greater than sign";
+compute_spread(.45x_height#,.55x_height#);
+spread#':=spread#; spread':=spread; % the spread of `$=$'
+compute_spread(5/4x_height#,3/2x_height#);
+beginchar(hex"3F",14u#,v_center(spread#+1.2spread#'+rule_thickness#));
+italcorr h#*slant-u#;
+adjust_fit(0,0); pickup rule.nib;
+lft x1=hround 1.5u-eps; x1=x3; x2=w-x1;
+y1-y3=spread; y2=.5[y1,y3]=good.y h-.5(spread+rule_thickness);
+draw z1--z2--z3; % diagonals
+pickup pencircle xscaled .7rule_thickness yscaled 1.4rule_thickness;
+if vair#>.8curve#: pickup rule.nib; autorounded; fi % monoline
+x1'=x1; x2'=4u; x3'=w-x2'; x4'=w-x1';
+bot y1'=bot y3'=-d; top y2'=top y4'=.8spread'-d;
+draw z1'{up}...z2'{right}..{right}z3'...{up}z4'; % stroke
+labels(1,2,3,1',2',3',4'); endchar;
+
+cmchar "double bar";
+beginchar(hex"7C",2u#,asc_height#,0);
+italcorr asc_height#*slant - u#;
+adjust_fit(0,0); pickup rule.nib;
+bot y1 = good.y oo; top y2 = good.y (h-oo);
+top y1' + 1.5u = bot y2'; .5[y1',y2'] = .5h;
+x1=x1'=x2=x2'=good.x .5w;
+draw z1--z1'; draw z2--z2';
+labels(1,2,1',2'); endchar;
+
+cmchar "octagon";
+beginchar(hex"38",
+ 18u#,asc_height#,desc_depth#);
+pickup light_rule.nib;
+y1=y8; x2=x3; y4=y5; x6=x7; y2=y7; y3=y6; x8=x5; x1=x4;
+.5[y2,y3]=.5[y1,y4]=good.y .5(h-d);
+.5[x1,x8]=.5[x2,x7]=good.x .5w;
+x1-x8 = y3-y2 = sqrt2*(x2-x1) = (h+d)/2.62;
+y4-y1=x2-x7;
+draw (z1--z2--z3--z4--z5--z6--z7--z8--cycle);
+labels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Gluon element";
+beginchar(hex"50",6u#,v_center(1.4x_height#));
+adjust_fit(0,0); pickup rule.nib;
+y1=y5=h; y3=-d; y3'=0.8[y3,y1];
+x1=0; x5=w; x3=x3'=.5w;
+y2=y4=0.35[y3,y3'];
+x2-x3=x3-x4=0.33w;
+draw z1{right}...z3'...z2{down}...z3{left}...z4{up}...z3'...{right}z5;
+labels(1,2,3,3',4,5); endchar;
+
+cmchar "Gluon begin element";
+beginchar(hex"51",6u#,v_center(1.4x_height#));
+adjust_fit(0,0); pickup rule.nib;
+y1=good.y math_axis; y2=h;
+x1=0; x2=w;
+draw z1{(1,2)}...{right}z2;
+labels(1,2); endchar;
+
+cmchar "Gluon end element";
+beginchar(hex"52",6u#,v_center(1.4x_height#));
+adjust_fit(0,0); pickup rule.nib;
+y2=good.y math_axis; y1=h;
+x1=0; x2=w;
+draw z1{right}...{(1,-2)}z2;
+labels(1,2); endchar;
+
+cmchar "Telephone";
+beginchar(hex"07",1.5asc_height#,asc_height#,0);
+adjust_fit(0,0); pickup crisp.nib; autorounded;
+numeric uu; uu = 1/20 asc_height;
+bot y1 = 0; y2 = 3uu; y3 = 13uu; y4=y2; y5=y1; y0 = good.y 9uu;
+lft x1 = hround (4uu+eps); x2 = x1; x4 = x5 = w-x1; x0 = x3 = .5 w;
+y6 = y8 = y0 = .5[y9,y7]; x7 = x9 = x0 = .5[x8,x6];
+y7-y9 = 8uu; x6-x8 = 9uu;
+y6' = y8' = y0 = .5[y9',y7']; x7' = x9' = x0 = .5[x8',x6'];
+y7'-y9' = 10.5uu+0.5+eps; x6'-x8' = 11.5uu+0.5+eps;
+y10 = y15 = 10uu; y11 = y12 = y14 = y17 = y10+2uu;
+y13 = y16 = y18 = y20 = y10+5uu; y21 = y10+5uu+eps; y19 = y10+8uu+eps;
+x19=x21=x0; x20=hround(uu+eps); x18 = w-x20;
+x12=hround(uu+eps); x17 = w-x12; x10= 2uu+eps; x15 = w-x10;
+x11=x10+6uu; x13=x12+6uu; x14=x15-6uu; x16=x17-6uu;
+filldraw z1---z2...z3...z4---z5--cycle; % body
+erase filldraw z6'...z7'...z8'...z9'...cycle; % space for dial
+filldraw z6...z7...z8...z9...cycle; % dial
+filldraw z10--z11--z13--z12--cycle;
+filldraw z14--z15--z17--z16--cycle;
+filldraw z20{(3,1)}...z19{right}...{(3,-1)}z18--z17{(-3,1)}...
+ z21{left}...{(-3,-1)}z12--cycle;
+labels(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
+labels(6',7',8',9'); endchar;
+
+
+cmchar "\textstyle integral sign";
+beginchar(hex"72",11u#,0,100/54dh#);
+italcorr 3.5u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+pos1(curve,0); pos2(hair,0); pos3(vair,90); pos4(curve,180);
+pos5(curve,180); pos5'(curve,0); z5'=z5; pos6(curve,0);
+pos7(vair,-90); pos8(hair,-180); pos9(curve,-180);
+rt x1r=hround(w-u); x9=w-x1; x7=w-x3=3u;
+x5=x4=x6; lft x5r=hround(.5w-.5curve);
+top y3r=0; bot y7r=-d; y9-.5curve=vround(top y7l+.25curve);
+y3-y1=y9-y7; y5=.5[y3,y7]=.5[y4,y6]; y4-y6=.6(y3-y7);
+bulb(3,2,1); bulb(7,8,9); % bulbs
+filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z5-z4}z5e; % upper curve
+filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1
+ ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e; % lower curve
+penlabels(1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "\textstyle loop-integral sign";
+beginchar(hex"75",13u#,0,100/54dh#);
+italcorr 0; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+pos11(curve,0); pos12(hair,0); pos13(vair,90); pos14(curve,180);
+pos15(curve,180); pos15'(curve,0); z15'=z15; pos16(curve,0);
+pos17(vair,-90); pos18(hair,-180); pos19(curve,-180);
+rt x11r=hround(w-2u); x19=w-x11; x17=w-x13=4u;
+x15=x14=x16; lft x15r=hround(.5w-.5curve);
+top y13r=0; bot y17r=-d; y19-.5curve=vround(top y17l+.25curve);
+y13-y11=y19-y17; y15=.5[y13,y17]=.5[y14,y16]; y14-y16=.6(y13-y17);
+bulb(13,12,11); bulb(17,18,19); % bulbs
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+pickup light_rule.nib;
+x4 = x15; y8-y4=x2-x6=.8(y14-y16); y2=y15;
+circle_points;
+draw_circle;
+labels(1,2,3,4,5,6,7,8);
+penlabels(11,12,13,14,15,16,17,18,19); endchar;
+
+cmchar "\textstyle two-dimensional integral sign";
+beginchar(hex"73",17u#,0,100/54dh#);
+italcorr 3.5u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+pos1(curve,0); pos2(hair,0); pos3(vair,90); pos4(curve,180);
+pos11(curve,0); pos12(hair,0); pos13(vair,90); pos14(curve,180); %2
+pos5(curve,180); pos5'(curve,0); z5'=z5; pos6(curve,0);
+pos15(curve,180); pos15'(curve,0); z15'=z15; pos16(curve,0); %2
+pos7(vair,-90); pos8(hair,-180); pos9(curve,-180);
+pos17(vair,-90); pos18(hair,-180); pos19(curve,-180); %2
+numeric ww; ww = 2/3w-2/3u;
+numeric xx; xx = 1/3w+2/3u;
+rt x1r=hround(ww-u); x9=ww-x1; x7=ww-x3=3u;
+rt x11r=hround(w-u); x19=w-x1; x17=w-x3; w-x13=3u; %2
+x5=x4=x6; lft x5r=hround(.5ww-.5curve);
+x15=x14=x16; lft x15r=hround(.5[xx,w]-.5curve); %2
+top y3r=0; bot y7r=-d; y9-.5curve=vround(top y7l+.25curve);
+y3-y1=y9-y7; y5=.5[y3,y7]=.5[y4,y6]; y4-y6=.6(y3-y7);
+y11=y1; y13=y3; y14=y4; y15=y5; y16=y6; y17=y7; y19=y9; %2
+bulb(3,2,1); bulb(7,8,9); % bulbs
+bulb(13,12,11); bulb(17,18,19); %2 bulbs
+filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z5-z4}z5e; % upper curve
+filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1
+ ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e; % lower curve
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+pickup light_rule.nib;
+penlabels(1,2,3,4,5,6,7,8,9);
+penlabels(11,12,13,14,15,16,17,18,19); endchar;
+
+cmchar "\textstyle two-dimensional surface-integral sign";
+beginchar(hex"76",17u#,0,100/54dh#);
+italcorr 3.5u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+pos21(curve,0); pos22(hair,0); pos23(vair,90); pos24(curve,180);
+pos11(curve,0); pos12(hair,0); pos13(vair,90); pos14(curve,180); %2
+pos25(curve,180); pos25'(curve,0); z25'=z25; pos26(curve,0);
+pos15(curve,180); pos15'(curve,0); z15'=z15; pos16(curve,0); %2
+pos27(vair,-90); pos28(hair,-180); pos29(curve,-180);
+pos17(vair,-90); pos18(hair,-180); pos19(curve,-180); %2
+numeric ww; ww = 2/3w-2/3u;
+numeric xx; xx = 1/3w+2/3u;
+rt x21r=hround(ww-u); x29=ww-x21; x27=ww-x23=3u;
+rt x11r=hround(w-u); x19=w-x21; x17=w-x23; w-x13=3u; %2
+x25=x24=x26; lft x25r=hround(.5ww-.5curve);
+x15=x14=x16; lft x15r=hround(.5[xx,w]-.5curve); %2
+top y23r=0; bot y27r=-d; y29-.5curve=vround(top y27l+.25curve);
+y23-y21=y29-y27; y25=.5[y23,y27]=.5[y24,y26]; y24-y26=.6(y23-y27);
+y11=y21; y13=y23; y14=y24; y15=y25; y16=y26; y17=y27; y19=y29; %2
+bulb(23,22,21); bulb(27,28,29); % bulbs
+bulb(13,12,11); bulb(17,18,19); %2 bulbs
+filldraw stroke z23e{left}...z24e{(z25e-z24e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z25-z24}z25e; % upper curve
+filldraw stroke z25'e{z26-z25}..tension atleast.8 and atleast 1
+ ..{(z26e-z25'e)xscaled 1.1}z26e...{left}z27e; % lower curve
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+pickup light_rule.nib;
+x4 = x25+.75u; y8-y4=x2-x6=.8(y14-y16); y2=y15;
+circle_points;
+x4' = x8' = x15-.75u;
+x1' := x1 + (x4'-x4); x2' := x2 + (x4'-x4); x3' := x3 + (x4'-x4);
+y1'=y1; y2'=y2; y3'=y3; y4'=y4; y8'=y8;
+draw z8---z8'...z1'...z2'...z3'...z4'---z4...z5...z6...z7...cycle;
+labels(1',2',3',4',4,5,6,7,8,8');
+penlabels(11,12,13,14,15,16,17,18,19);
+penlabels(21,22,23,24,25,26,27,28,29); endchar;
+
+cmchar "\textstyle three-dimensional integral sign";
+beginchar(hex"74",23u#,0,100/54dh#);
+italcorr 3.5u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+pos1(curve,0); pos2(hair,0); pos3(vair,90); pos4(curve,180);
+pos11(curve,0); pos12(hair,0); pos13(vair,90); pos14(curve,180); %2
+pos21(curve,0); pos22(hair,0); pos23(vair,90); pos24(curve,180); %3
+pos5(curve,180); pos5'(curve,0); z5'=z5; pos6(curve,0);
+pos15(curve,180); pos15'(curve,0); z15'=z15; pos16(curve,0); %2
+pos25(curve,180); pos25'(curve,0); z25'=z25; pos26(curve,0); %3
+pos7(vair,-90); pos8(hair,-180); pos9(curve,-180);
+pos17(vair,-90); pos18(hair,-180); pos19(curve,-180); %2
+pos27(vair,-90); pos28(hair,-180); pos29(curve,-180); %3
+numeric ww; ww = 1/2w-u;
+numeric xx; xx = 1/4w+.5u;
+numeric www; www = 3/4w-.5u;
+numeric xxx; xxx = 1/2w+u;
+rt x1r=hround(ww-u); x9=ww-x1; x7=ww-x3=3u;
+rt x11r=hround(www-u); x19=www-x1; x17=www-x3; www-x13=3u; %2
+rt x21r=hround(w-u); x29=w-x1; x27=w-x3; w-x23=3u; %3
+x5=x4=x6; lft x5r=hround(.5ww-.5curve);
+x15=x14=x16; lft x15r=hround(.5[xx,www]-.5curve); %2
+x25=x24=x26; lft x25r=hround(.5[xxx,w]-.5curve); %3
+top y3r=0; bot y7r=-d; y9-.5curve=vround(top y7l+.25curve);
+y3-y1=y9-y7; y5=.5[y3,y7]=.5[y4,y6]; y4-y6=.6(y3-y7);
+y11=y1; y13=y3; y14=y4; y15=y5; y16=y6; y17=y7; y19=y9; %2
+y21=y1; y23=y3; y24=y4; y25=y5; y26=y6; y27=y7; y29=y9; %3
+bulb(3,2,1); bulb(7,8,9); % bulbs
+bulb(13,12,11); bulb(17,18,19); %2 bulbs
+bulb(23,22,21); bulb(27,28,29); %3 bulbs
+filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z5-z4}z5e; % upper curve
+filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1
+ ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e; % lower curve
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+filldraw stroke z23e{left}...z24e{(z25e-z24e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z25-z24}z25e; % upper curve
+filldraw stroke z25'e{z26-z25}..tension atleast.8 and atleast 1
+ ..{(z26e-z25'e)xscaled 1.1}z26e...{left}z27e; % lower curve
+penlabels(1,2,3,4,5,6,7,8,9);
+penlabels(11,12,13,14,15,16,17,18,19);
+penlabels(21,22,23,24,25,26,27,28,29); endchar;
+
+cmchar "\displaystyle integral sign";
+beginchar(hex"77",14u#,0,150/54dh#);
+italcorr 4u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+numeric bulb_size, max_size;
+bulb_size=hround(bold+dw); max_size=bold+dw;
+pos1(bulb_size,0); pos2(hair,0); pos3(vair,90); pos4(max_size,180);
+pos5(max_size,180); pos5'(max_size,0); z5'=z5; pos6(max_size,0);
+pos7(vair,-90); pos8(hair,-180); pos9(bulb_size,-180);
+rt x1r=hround(w-u); x9=w-x1; x7=w-x3=3u;
+x5=x4=x6; lft x5r=hround(.5w-.5curve);
+top y3r=0; bot y7r=-d;
+y9-.5bulb_size=vround(top y7l+.25bulb_size); y3-y1=y9-y7;
+y5=.5[y3,y7]=.5[y4,y6]; y4-y6=.6(y3-y7);
+bulb(3,2,1); bulb(7,8,9); % bulbs
+filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z5-z4}z5e; % upper curve
+filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1
+ ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e; % lower curve
+penlabels(1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "\displaystyle loop-integral sign";
+beginchar(hex"7A",14u#,0,150/54dh#);
+italcorr 4u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+numeric bulb_size, max_size;
+bulb_size=hround(bold+dw); max_size=bold+dw;
+pos11(bulb_size,0); pos12(hair,0); pos13(vair,90); pos14(max_size,180);
+pos15(max_size,180); pos15'(max_size,0); z15'=z15; pos16(max_size,0);
+pos17(vair,-90); pos18(hair,-180); pos19(bulb_size,-180);
+rt x11r=hround(w-u); x19=w-x11; x17=w-x13=3u;
+x15=x14=x16; lft x15r=hround(.5w-.5curve);
+top y13r=0; bot y17r=-d;
+y19-.5bulb_size=vround(top y17l+.25bulb_size); y13-y11=y19-y17;
+y15=.5[y13,y17]=.5[y14,y16]; y14-y16=.6(y13-y17);
+bulb(13,12,11); bulb(17,18,19); % bulbs
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+pickup light_rule.nib;
+x4 = x15; y8-y4=x2-x6=.76(y14-y16); y2=y15;
+circle_points;
+draw_circle;
+labels(1,2,3,4,5,6,7,8);
+penlabels(11,12,13,14,15,16,17,18,19); endchar;
+
+cmchar "\displaystyle two-dimensional integral sign";
+beginchar(hex"78",23u#,0,150/54dh#);
+italcorr 4u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+numeric bulb_size, max_size;
+bulb_size=hround(bold+dw); max_size=bold+dw;
+pos1(bulb_size,0); pos2(hair,0); pos3(vair,90); pos4(max_size,180);
+pos11(bulb_size,0); pos12(hair,0); pos13(vair,90); pos14(max_size,180); %2
+pos5(max_size,180); pos5'(max_size,0); z5'=z5; pos6(max_size,0);
+pos15(max_size,180); pos15'(max_size,0); z15'=z15; pos16(max_size,0); %2
+pos7(vair,-90); pos8(hair,-180); pos9(bulb_size,-180);
+pos17(vair,-90); pos18(hair,-180); pos19(bulb_size,-180); %2
+numeric ww; ww = 2/3w-4/3u;
+numeric xx; xx = 1/3w+4/3u;
+rt x1r=hround(ww-u); x9=ww-x1; x7=ww-x3=3u;
+rt x11r=hround(w-u); x19=w-x1; x17=w-x3; w-x13=3u; %2
+x5=x4=x6; lft x5r=hround(.5ww-.5curve);
+x15=x14=x16; lft x15r=hround(.5[xx,w]-.5curve); %2
+top y3r=0; bot y7r=-d;
+y9-.5bulb_size=vround(top y7l+.25bulb_size); y3-y1=y9-y7;
+y5=.5[y3,y7]=.5[y4,y6]; y4-y6=.6(y3-y7);
+y11=y1; y13=y3; y14=y4; y15=y5; y16=y6; y17=y7; y19=y9; %2
+bulb(3,2,1); bulb(7,8,9); % bulbs
+bulb(13,12,11); bulb(17,18,19); %2 bulbs
+filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z5-z4}z5e; % upper curve
+filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1
+ ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e; % lower curve
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+penlabels(1,2,3,4,5,6,7,8,9);
+penlabels(11,12,13,14,15,16,17,18,19); endchar;
+
+cmchar "\displaystyle two-dimensional surface-integral sign";
+beginchar(hex"7B",23u#,0,150/54dh#);
+italcorr 4u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+numeric bulb_size, max_size;
+bulb_size=hround(bold+dw); max_size=bold+dw;
+pos21(bulb_size,0); pos22(hair,0); pos23(vair,90); pos24(max_size,180);
+pos11(bulb_size,0); pos12(hair,0); pos13(vair,90); pos14(max_size,180); %2
+pos25(max_size,180); pos25'(max_size,0); z25'=z25; pos26(max_size,0);
+pos15(max_size,180); pos15'(max_size,0); z15'=z15; pos16(max_size,0); %2
+pos27(vair,-90); pos28(hair,-180); pos29(bulb_size,-180);
+pos17(vair,-90); pos18(hair,-180); pos19(bulb_size,-180); %2
+numeric ww; ww = 2/3w-4/3u;
+numeric xx; xx = 1/3w+4/3u;
+rt x21r=hround(ww-u); x29=ww-x21; x27=ww-x23=3u;
+rt x11r=hround(w-u); x19=w-x21; x17=w-x23; w-x13=3u; %2
+x25=x24=x26; lft x25r=hround(.5ww-.5curve);
+x15=x14=x16; lft x15r=hround(.5[xx,w]-.5curve); %2
+top y23r=0; bot y27r=-d;
+y29-.5bulb_size=vround(top y27l+.25bulb_size); y23-y21=y29-y27;
+y25=.5[y23,y27]=.5[y24,y26]; y24-y26=.6(y23-y27);
+y11=y21; y13=y23; y14=y24; y15=y25; y16=y26; y17=y27; y19=y29; %2
+bulb(23,22,21); bulb(27,28,29); % bulbs
+bulb(13,12,11); bulb(17,18,19); %2 bulbs
+filldraw stroke z23e{left}...z24e{(z25e-z24e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z25-z24}z25e; % upper curve
+filldraw stroke z25'e{z26-z25}..tension atleast.8 and atleast 1
+ ..{(z26e-z25'e)xscaled 1.1}z26e...{left}z27e; % lower curve
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+pickup light_rule.nib;
+x4 = x25+2u; y8-y4=x2-x6=.76(y14-y16); y2=y15;
+circle_points;
+x4' = x8' = x15-2u;
+x1' := x1 + (x4'-x4); x2' := x2 + (x4'-x4); x3' := x3 + (x4'-x4);
+y1'=y1; y2'=y2; y3'=y3; y4'=y4; y8'=y8;
+draw z8---z8'...z1'...z2'...z3'...z4'---z4...z5...z6...z7...cycle;
+labels(1',2',3',4',4,5,6,7,8,8');
+penlabels(21,22,23,24,25,26,27,28,29);
+penlabels(11,12,13,14,15,16,17,18,19); endchar;
+
+cmchar "\displaystyle three-dimensional integral sign";
+beginchar(hex"79",32u#,0,150/54dh#);
+italcorr 4u#; % \TeX\ kerning between upper limit and lower limit
+adjust_fit(0,-ic#); pickup fine.nib;
+numeric bulb_size, max_size;
+bulb_size=hround(bold+dw); max_size=bold+dw;
+pos1(bulb_size,0); pos2(hair,0); pos3(vair,90); pos4(max_size,180);
+pos11(bulb_size,0); pos12(hair,0); pos13(vair,90); pos14(max_size,180); %2
+pos21(bulb_size,0); pos22(hair,0); pos23(vair,90); pos24(max_size,180); %3
+pos5(max_size,180); pos5'(max_size,0); z5'=z5; pos6(max_size,0);
+pos15(max_size,180); pos15'(max_size,0); z15'=z15; pos16(max_size,0); %2
+pos25(max_size,180); pos25'(max_size,0); z25'=z25; pos26(max_size,0); %3
+pos7(vair,-90); pos8(hair,-180); pos9(bulb_size,-180);
+pos17(vair,-90); pos18(hair,-180); pos19(bulb_size,-180); %2
+pos27(vair,-90); pos28(hair,-180); pos29(bulb_size,-180); %3
+numeric ww; ww = 1/2w-2u;
+numeric xx; xx = 1/4w+u;
+numeric www; www = 3/4w-u;
+numeric xxx; xxx = 1/2w+2u;
+rt x1r=hround(ww-u); x9=ww-x1; x7=ww-x3=3u;
+rt x11r=hround(www-u); x19=www-x1; x17=www-x3; www-x13=3u; %2
+rt x21r=hround(w-u); x29=w-x1; x27=w-x3; w-x23=3u; %3
+x5=x4=x6; lft x5r=hround(.5ww-.5curve);
+x15=x14=x16; lft x15r=hround(.5[xx,www]-.5curve); %2
+x25=x24=x26; lft x25r=hround(.5[xxx,w]-.5curve); %3
+top y3r=0; bot y7r=-d;
+y9-.5bulb_size=vround(top y7l+.25bulb_size); y3-y1=y9-y7;
+y5=.5[y3,y7]=.5[y4,y6]; y4-y6=.6(y3-y7);
+y11=y1; y13=y3; y14=y4; y15=y5; y16=y6; y17=y7; y19=y9; %2
+y21=y1; y23=y3; y24=y4; y25=y5; y26=y6; y27=y7; y29=y9; %3
+bulb(3,2,1); bulb(7,8,9); % bulbs
+bulb(13,12,11); bulb(17,18,19); %2 bulbs
+bulb(23,22,21); bulb(27,28,29); %3 bulbs
+filldraw stroke z3e{left}...z4e{(z5e-z4e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z5-z4}z5e; % upper curve
+filldraw stroke z5'e{z6-z5}..tension atleast.8 and atleast 1
+ ..{(z6e-z5'e)xscaled 1.1}z6e...{left}z7e; % lower curve
+filldraw stroke z13e{left}...z14e{(z15e-z14e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z15-z14}z15e; % upper curve
+filldraw stroke z15'e{z16-z15}..tension atleast.8 and atleast 1
+ ..{(z16e-z15'e)xscaled 1.1}z16e...{left}z17e; % lower curve
+filldraw stroke z23e{left}...z24e{(z25e-z24e)xscaled 1.1}
+ ..tension atleast 1 and atleast .8..{z25-z24}z25e; % upper curve
+filldraw stroke z25'e{z26-z25}..tension atleast.8 and atleast 1
+ ..{(z26e-z25'e)xscaled 1.1}z26e...{left}z27e; % lower curve
+penlabels(1,2,3,4,5,6,7,8,9);
+penlabels(11,12,13,14,15,16,17,18,19);
+penlabels(21,22,23,24,25,26,27,28,29); endchar;
+
+cmchar "ataribox (Alternate)";
+beginchar(hex"6D",5.5pt#,7.5pt#,0);
+ pickup pencircle scaled .85pt;
+ x1=0.05w; y1=0;
+ x2=x1; y2=h;
+ x3=0.95w; y3=y2;
+ x4=x3; y4=y1;
+ fill z1--z2--z3--z4--cycle;
+ x5=x1; y5=.5h;
+ x6=.5w; y6=h;
+ x7=x3; y7=y5;
+ x8=x6; y8=0;
+ undraw z5--z6--z7--z8--cycle;
+ penlabels(1,2,3,4,5,6,7,8);
+endchar;
+
+charlist hex"72": hex"77"; % integral signs
+charlist hex"73": hex"78"; % iintegral signs
+charlist hex"74": hex"79"; % iiintegral signs
+charlist hex"75": hex"7A"; % ointegral signs
+charlist hex"76": hex"7B"; % oiintegral signs
+
+input wasychr
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasy10.mf b/Master/texmf-dist/fonts/source/public/wasy/wasy10.mf
new file mode 100644
index 00000000000..cc5671448de
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasy10.mf
@@ -0,0 +1,100 @@
+% This is WASY10.MF in text format
+% additional symbols for math, physics, astronomy and other fields
+
+%input modes;
+%mode=hp_laser;
+
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WASY"; 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#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+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#:=9/36pt#; % lowercase hairline breadth
+stem#:=25/36pt#; % lowercase stem breadth
+curve#:=30/36pt#; % lowercase curve breadth
+ess#:=27/36pt#; % breadth in middle of lowercase s
+flare#:=33/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=38/36pt#; % diameter of dots
+cap_hair#:=11/36pt#; % uppercase hairline breadth
+cap_stem#:=32/36pt#; % uppercase stem breadth
+cap_curve#:=37/36pt#; % uppercase curve breadth
+cap_ess#:=35/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.4pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=28/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=8/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#:=4/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
+
+o#:=8/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
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ fi
+
+mode_setup; font_setup;
+
+input rsym; % symbols
+input lasychr; % lasy font symbols
+
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasy5.mf b/Master/texmf-dist/fonts/source/public/wasy/wasy5.mf
new file mode 100644
index 00000000000..bebc38cea8e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasy5.mf
@@ -0,0 +1,103 @@
+% This is WASY5.MF in text format
+% additional symbols for math, physics, astronomy and other fields
+
+%input modes;
+%mode=nec_low;
+
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WASY"; font_size 5pt#;
+
+u#:=12.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=2/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=5/36pt#; % extra space added to all sidebars
+
+body_height#:=135/36pt#; % height of tallest characters
+asc_height#:=125/36pt#; % height of lowercase ascenders
+cap_height#:=123/36pt#; % height of caps
+fig_height#:=116/36pt#; % height of numerals
+x_height#:=77.5/36pt#; % height of lowercase without ascenders
+math_axis#:=45/36pt#; % axis of symmetry for math symbols
+bar_height#:=43.5/36pt#; % height of crossbar in lowercase e
+comma_depth#:=35/36pt#; % depth of comma below baseline
+desc_depth#:=35/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=6/36pt#; % diameter of rounded corners
+fine#:=5/36pt#; % diameter of sharply rounded corners
+thin_join#:=5/36pt#; % width of extrafine details
+hair#:=7.5/36pt#; % lowercase hairline breadth
+stem#:=16/36pt#; % lowercase stem breadth
+curve#:=18/36pt#; % lowercase curve breadth
+ess#:=12/36pt#; % breadth in middle of lowercase s
+flare#:=19/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=22/36pt#; % diameter of dots
+cap_hair#:=8/36pt#; % uppercase hairline breadth
+cap_stem#:=19/36pt#; % uppercase stem breadth
+cap_curve#:=21/36pt#; % uppercase curve breadth
+cap_ess#:=14/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.28pt#; % thickness of lines in math symbols
+
+dish#:=.7/36pt#; % amount erased at top or bottom of serifs
+bracket#:=10/36pt#; % vertical distance from serif base to tangent
+jut#:=15/36pt#; % protrusion of lowercase serifs
+cap_jut#:=20/36pt#; % protrusion of uppercase serifs
+beak_jut#:=6/36pt#; % horizontal protrusion of beak serifs
+%if write_white > 0: %% CS: replaced this line by the following:
+if known write_white:
+ beak#:=25/36pt#; % "WRITE WHITE" ONLY!
+ else: beak#:=35/36pt#;fi %vertical protrusion of beak serifs
+vair#:=6/36pt#; % vertical diameter of hairlines
+notch_cut#:=5pt#; % maximum breadth above or below notches
+bar#:=8/36pt#; % lowercase bar thickness
+slab#:=8/36pt#; % serif and arm thickness
+cap_bar#:=8/36pt#; % uppercase bar thickness
+cap_band#:=8/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=5pt#; % max breadth above/below uppercase notches
+serif_drop#:=2/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.7/36pt#; % for small refinements of stem breadth
+vair_corr#:=.5/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4/36pt#; % amount of overshoot for curves
+apex_o#:=4/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
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ fi
+
+mode_setup; font_setup;
+
+input rsym; % symbols
+input lasychr; % lasy font symbols
+
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasy6.mf b/Master/texmf-dist/fonts/source/public/wasy/wasy6.mf
new file mode 100644
index 00000000000..32fdbaa5582
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasy6.mf
@@ -0,0 +1,100 @@
+% This is WASY6.MF in text format
+% additional symbols for math, physics, astronomy and other fields
+
+%input modes;
+%mode=nec_low;
+
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WASY"; font_size 6pt#;
+
+u#:=14/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=2.8/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=3/36pt#; % extra space added to all sidebars
+
+body_height#:=162/36pt#; % height of tallest characters
+asc_height#:=150/36pt#; % height of lowercase ascenders
+cap_height#:=147.6/36pt#; % height of caps
+fig_height#:=139.2/36pt#; % height of numerals
+x_height#:=93/36pt#; % height of lowercase without ascenders
+math_axis#:=54/36pt#; % axis of symmetry for math symbols
+bar_height#:=52.2/36pt#; % height of crossbar in lowercase e
+comma_depth#:=42/36pt#; % depth of comma below baseline
+desc_depth#:=42/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=7/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8/36pt#; % lowercase hairline breadth
+stem#:=18/36pt#; % lowercase stem breadth
+curve#:=20.5/36pt#; % lowercase curve breadth
+ess#:=17/36pt#; % breadth in middle of lowercase s
+flare#:=21/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=26/36pt#; % diameter of dots
+cap_hair#:=8.5/36pt#; % uppercase hairline breadth
+cap_stem#:=21.5/36pt#; % uppercase stem breadth
+cap_curve#:=24/36pt#; % uppercase curve breadth
+cap_ess#:=19/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.31pt#; % thickness of lines in math symbols
+
+dish#:=.8/36pt#; % amount erased at top or bottom of serifs
+bracket#:=12/36pt#; % vertical distance from serif base to tangent
+jut#:=17/36pt#; % protrusion of lowercase serifs
+cap_jut#:=23/36pt#; % protrusion of uppercase serifs
+beak_jut#:=6.8/36pt#; % horizontal protrusion of beak serifs
+beak#:=42/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=6pt#; % maximum breadth above or below notches
+bar#:=8.5/36pt#; % lowercase bar thickness
+slab#:=8.5/36pt#; % serif and arm thickness
+cap_bar#:=8.5/36pt#; % uppercase bar thickness
+cap_band#:=8.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=6pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.8/36pt#; % for small refinements of stem breadth
+vair_corr#:=.7/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=4.5/36pt#; % amount of overshoot for curves
+apex_o#:=4.5/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ fi
+
+mode_setup; font_setup;
+
+input rsym; % symbols
+input lasychr; % lasy font symbols
+
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasy7.mf b/Master/texmf-dist/fonts/source/public/wasy/wasy7.mf
new file mode 100644
index 00000000000..9002a2cd8c5
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasy7.mf
@@ -0,0 +1,100 @@
+% This is WASY7.MF in text format
+% additional symbols for math, physics, astronomy and other fields
+
+%input modes;
+%mode=nec_low;
+
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WASY"; font_size 7pt#;
+
+u#:=15.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=3.5/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=2/36pt#; % extra space added to all sidebars
+
+body_height#:=189/36pt#; % height of tallest characters
+asc_height#:=175/36pt#; % height of lowercase ascenders
+cap_height#:=172.2/36pt#; % height of caps
+fig_height#:=162.4/36pt#; % height of numerals
+x_height#:=108.5/36pt#; % height of lowercase without ascenders
+math_axis#:=63/36pt#; % axis of symmetry for math symbols
+bar_height#:=60.9/36pt#; % height of crossbar in lowercase e
+comma_depth#:=49/36pt#; % depth of comma below baseline
+desc_depth#:=49/36pt#; % depth of lowercase descenders
+
+crisp#:=0pt#; % diameter of serif corners
+tiny#:=7/36pt#; % diameter of rounded corners
+fine#:=6/36pt#; % diameter of sharply rounded corners
+thin_join#:=6/36pt#; % width of extrafine details
+hair#:=8.5/36pt#; % lowercase hairline breadth
+stem#:=20/36pt#; % lowercase stem breadth
+curve#:=23/36pt#; % lowercase curve breadth
+ess#:=21/36pt#; % breadth in middle of lowercase s
+flare#:=24/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=29/36pt#; % diameter of dots
+cap_hair#:=9/36pt#; % uppercase hairline breadth
+cap_stem#:=24/36pt#; % uppercase stem breadth
+cap_curve#:=27/36pt#; % uppercase curve breadth
+cap_ess#:=23/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.34pt#; % thickness of lines in math symbols
+
+dish#:=.9/36pt#; % amount erased at top or bottom of serifs
+bracket#:=14/36pt#; % vertical distance from serif base to tangent
+jut#:=19/36pt#; % protrusion of lowercase serifs
+cap_jut#:=26/36pt#; % protrusion of uppercase serifs
+beak_jut#:=7.6/36pt#; % horizontal protrusion of beak serifs
+beak#:=49/36pt#; % vertical protrusion of beak serifs
+vair#:=7/36pt#; % vertical diameter of hairlines
+notch_cut#:=7pt#; % maximum breadth above or below notches
+bar#:=9/36pt#; % lowercase bar thickness
+slab#:=9/36pt#; % serif and arm thickness
+cap_bar#:=9/36pt#; % uppercase bar thickness
+cap_band#:=9/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=7pt#; % max breadth above/below uppercase notches
+serif_drop#:=2.8/36pt#; % vertical drop of sloped serifs
+stem_corr#:=.9/36pt#; % for small refinements of stem breadth
+vair_corr#:=.9/36pt#; % for small refinements of hairline height
+apex_corr#:=0pt#; % extra width at diagonal junctions
+
+o#:=5/36pt#; % amount of overshoot for curves
+apex_o#:=5/36pt#; % amount of overshoot for diagonal junctions
+
+slant:=0; % tilt ratio $(\Delta x/\Delta y)$
+fudge:=1; % factor applied to weights of heavy characters
+math_spread:=0; % extra openness of math symbols
+superness:=1/sqrt2; % parameter for superellipses
+superpull:=1/6; % extra openness inside bowls
+beak_darkness:=11/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ fi
+
+mode_setup; font_setup;
+
+input rsym; % symbols
+input lasychr; % lasy font symbols
+
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasy8.mf b/Master/texmf-dist/fonts/source/public/wasy/wasy8.mf
new file mode 100644
index 00000000000..ac7557bb310
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasy8.mf
@@ -0,0 +1,100 @@
+% This is WASY8.MF in text format
+% additional symbols for math, physics, astronomy and other fields
+
+%input modes;
+%mode=nec_low;
+
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WASY"; font_size 8pt#;
+
+u#:=17/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.1/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=216/36pt#; % height of tallest characters
+asc_height#:=200/36pt#; % height of lowercase ascenders
+cap_height#:=196.8/36pt#; % height of caps
+fig_height#:=185.6/36pt#; % height of numerals
+x_height#:=124/36pt#; % height of lowercase without ascenders
+math_axis#:=72/36pt#; % axis of symmetry for math symbols
+bar_height#:=69.6/36pt#; % height of crossbar in lowercase e
+comma_depth#:=56/36pt#; % depth of comma below baseline
+desc_depth#:=56/36pt#; % depth of lowercase descenders
+
+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#:=9/36pt#; % lowercase hairline breadth
+stem#:=22/36pt#; % lowercase stem breadth
+curve#:=25.5/36pt#; % lowercase curve breadth
+ess#:=23/36pt#; % breadth in middle of lowercase s
+flare#:=27/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=32/36pt#; % diameter of dots
+cap_hair#:=9.5/36pt#; % uppercase hairline breadth
+cap_stem#:=26.5/36pt#; % uppercase stem breadth
+cap_curve#:=30/36pt#; % uppercase curve breadth
+cap_ess#:=27/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.36pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=16/36pt#; % vertical distance from serif base to tangent
+jut#:=22/36pt#; % protrusion of lowercase serifs
+cap_jut#:=29/36pt#; % protrusion of uppercase serifs
+beak_jut#:=8.4/36pt#; % horizontal protrusion of beak serifs
+beak#:=56/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=8pt#; % maximum breadth above or below notches
+bar#:=9.5/36pt#; % lowercase bar thickness
+slab#:=9.5/36pt#; % serif and arm thickness
+cap_bar#:=9.5/36pt#; % uppercase bar thickness
+cap_band#:=9.5/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=8pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.2/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
+
+o#:=6/36pt#; % amount of overshoot for curves
+apex_o#:=6/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
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ fi
+
+mode_setup; font_setup;
+
+input rsym; % symbols
+input lasychr; % lasy font symbols
+
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasy9.mf b/Master/texmf-dist/fonts/source/public/wasy/wasy9.mf
new file mode 100644
index 00000000000..b734d844faa
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasy9.mf
@@ -0,0 +1,100 @@
+% This is WASY9.MF in text format
+% additional symbols for math, physics, astronomy and other fields
+
+%input modes;
+%mode=nec_low;
+
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WASY"; font_size 9pt#;
+
+u#:=18.5/36pt#; % unit width
+width_adj#:=0pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=4.6/36pt#; % extra sidebar near uppercase serifs
+letter_fit#:=0pt#; % extra space added to all sidebars
+
+body_height#:=243/36pt#; % height of tallest characters
+asc_height#:=225/36pt#; % height of lowercase ascenders
+cap_height#:=221.4/36pt#; % height of caps
+fig_height#:=208.8/36pt#; % height of numerals
+x_height#:=139.5/36pt#; % height of lowercase without ascenders
+math_axis#:=81/36pt#; % axis of symmetry for math symbols
+bar_height#:=78.3/36pt#; % height of crossbar in lowercase e
+comma_depth#:=63/36pt#; % depth of comma below baseline
+desc_depth#:=63/36pt#; % depth of lowercase descenders
+
+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#:=9/36pt#; % lowercase hairline breadth
+stem#:=24/36pt#; % lowercase stem breadth
+curve#:=28/36pt#; % lowercase curve breadth
+ess#:=25/36pt#; % breadth in middle of lowercase s
+flare#:=30/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=35/36pt#; % diameter of dots
+cap_hair#:=10/36pt#; % uppercase hairline breadth
+cap_stem#:=29/36pt#; % uppercase stem breadth
+cap_curve#:=33/36pt#; % uppercase curve breadth
+cap_ess#:=31/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.38pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=18/36pt#; % vertical distance from serif base to tangent
+jut#:=25/36pt#; % protrusion of lowercase serifs
+cap_jut#:=33/36pt#; % protrusion of uppercase serifs
+beak_jut#:=9.2/36pt#; % horizontal protrusion of beak serifs
+beak#:=63/36pt#; % vertical protrusion of beak serifs
+vair#:=8/36pt#; % vertical diameter of hairlines
+notch_cut#:=9pt#; % maximum breadth above or below notches
+bar#:=10/36pt#; % lowercase bar thickness
+slab#:=10/36pt#; % serif and arm thickness
+cap_bar#:=10/36pt#; % uppercase bar thickness
+cap_band#:=10/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=9pt#; % max breadth above/below uppercase notches
+serif_drop#:=3.6/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
+
+o#:=7/36pt#; % amount of overshoot for curves
+apex_o#:=7/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
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ fi
+
+mode_setup; font_setup;
+
+input rsym; % symbols
+input lasychr; % lasy font symbols
+
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasyb10.mf b/Master/texmf-dist/fonts/source/public/wasy/wasyb10.mf
new file mode 100644
index 00000000000..8105c506111
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasyb10.mf
@@ -0,0 +1,100 @@
+% This is WASY10.MF in text format
+% additional symbols for math, physics, astronomy and other fields
+
+%input modes;
+%mode=hp_laser;
+
+if unknown cmbase: input cmbase fi
+
+font_identifier:="WASY"; font_size 10pt#;
+
+u#:=23/36pt#; % unit width
+width_adj#:=11/36pt#; % width adjustment for certain characters
+serif_fit#:=0pt#; % extra sidebar near lowercase serifs
+cap_serif_fit#:=7/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#:=250/36pt#; % height of lowercase ascenders
+cap_height#:=246/36pt#; % height of caps
+fig_height#:=232/36pt#; % height of numerals
+x_height#:=155/36pt#; % height of lowercase without ascenders
+math_axis#:=90/36pt#; % axis of symmetry for math symbols
+bar_height#:=87/36pt#; % height of crossbar in lowercase e
+comma_depth#:=70/36pt#; % depth of comma below baseline
+desc_depth#:=70/36pt#; % depth of lowercase descenders
+
+crisp#:=8/36pt#; % diameter of serif corners
+tiny#:=13/36pt#; % diameter of rounded corners
+fine#:=10/36pt#; % diameter of sharply rounded corners
+thin_join#:=10/36pt#; % width of extrafine details
+hair#:=17/36pt#; % lowercase hairline breadth
+stem#:=40/36pt#; % lowercase stem breadth
+curve#:=45/36pt#; % lowercase curve breadth
+ess#:=36/36pt#; % breadth in middle of lowercase s
+flare#:=42/36pt#; % diameter of bulbs or breadth of terminals
+dot_size#:=56/36pt#; % diameter of dots
+cap_hair#:=19/36pt#; % uppercase hairline breadth
+cap_stem#:=50/36pt#; % uppercase stem breadth
+cap_curve#:=53/36pt#; % uppercase curve breadth
+cap_ess#:=51/36pt#; % breadth in middle of uppercase s
+rule_thickness#:=.6pt#; % thickness of lines in math symbols
+
+dish#:=1/36pt#; % amount erased at top or bottom of serifs
+bracket#:=20/36pt#; % vertical distance from serif base to tangent
+jut#:=28/36pt#; % protrusion of lowercase serifs
+cap_jut#:=37/36pt#; % protrusion of uppercase serifs
+beak_jut#:=10/36pt#; % horizontal protrusion of beak serifs
+beak#:=70/36pt#; % vertical protrusion of beak serifs
+vair#:=13/36pt#; % vertical diameter of hairlines
+notch_cut#:=10pt#; % maximum breadth above or below notches
+bar#:=17/36pt#; % lowercase bar thickness
+slab#:=17/36pt#; % serif and arm thickness
+cap_bar#:=17/36pt#; % uppercase bar thickness
+cap_band#:=17/36pt#; % uppercase thickness above/below lobes
+cap_notch_cut#:=10pt#; % max breadth above/below uppercase notches
+serif_drop#:=4/36pt#; % vertical drop of sloped serifs
+stem_corr#:=2/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
+
+o#:=8/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:=12/30; % fraction of triangle inside beak serifs
+ligs:=2; % level of ligatures to be included
+
+square_dots:=false; % should dots be square?
+hefty:=false; % should we try hard not to be overweight?
+serifs:=true; % should serifs and bulbs be attached?
+monospace:=false; % should all characters have the same width?
+variant_g:=false; % should an italic-style g be used?
+low_asterisk:=false; % should the asterisk be centered at the axis?
+math_fitting:=false; % should math-mode spacing be used?
+
+
+if ligs>1: font_coding_scheme:="TeX text";
+else: font_coding_scheme:=if ligs=0: "TeX typewriter text"
+ else: "TeX text without f-ligatures" fi;
+ fi
+
+mode_setup; font_setup;
+
+input rsym; % symbols
+input lasychr; % lasy font symbols
+
+
+font_slant slant; font_x_height x_height#;
+if monospace: font_normal_space 9u#; % no stretching or shrinking
+ font_quad 18u#;
+ font_extra_space 9u#;
+else: font_normal_space 6u#+2letter_fit#;
+ font_normal_stretch 3u#; font_normal_shrink 2u#;
+ font_quad 18u#+4letter_fit#;
+ font_extra_space 2u#; fi
+bye.
diff --git a/Master/texmf-dist/fonts/source/public/wasy/wasychr.mf b/Master/texmf-dist/fonts/source/public/wasy/wasychr.mf
new file mode 100644
index 00000000000..7af4d698df7
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/wasy/wasychr.mf
@@ -0,0 +1,225 @@
+%
+% These characters should rather be in an character font than in a
+% symbol font
+%
+
+cmchar "Cent sign";
+beginchar(hex"67",9u#,asc_height#,desc_depth#);
+italcorr x_height#*slant-.2u#;
+adjust_fit(0,0);
+pickup fine.nib; pos2(vair',90); pos4(vair',270);
+x2=x4=.5(w+u); top y2r=vround(x_height+1.5oo); bot y4r=-oo;
+pos3(curve,180); lft x3r=hround max(.6u,1.35u-.5curve); y3=.5x_height;
+if serifs: pos1(hair,0); pos0(flare,0);
+ y1=min(bar_height+.5flare+2vair'+2,.9[bar_height,x_height]-.5flare);
+ rt x1r=hround(w-.7u); bulb(2,1,0); % bulb
+ pos5(hair,0); rt x5r=hround(w-.5u);
+ y5=max(good.y(.5bar_height-.9),y4l+vair');
+ (x,y4l)=whatever[z4r,z5l]; x4l:=min(x,x4l+.5u);
+ filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
+ & pulled_super_arc.e(3,4)(.5superpull)
+ ..tension .9 and 1..{x5-x4,5(y5-y4)}z5e; % arc and lower terminal
+else: pos1(4/7[vair',flare],80);
+ rt x1r=hround(w-.6u); top y1r=vround .82[bar_height,top y2r];
+ filldraw stroke term.e(2,1,right,.8,4); % upper terminal
+ pos5(.6[vair',flare],275); rt x5r=hround(w-.5u);
+ y5r=good.y(y5r+1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
+ forsuffixes e=l,r: path p.e; p.e=z4e{right}..tension .9 and 1..z5e;
+ if angle direction 1 of p.e>75:
+ p.e:=z4e{right}..tension atleast.9 and 1..{dir 75}z5e; fi endfor
+ filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
+ & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi % arc and lower terminal
+pickup crisp.nib;
+x6=x7=x8=x9=x2; y7=y2; y8=y4; bot y9=-d; y6-y7 = y8-y9;
+pos6(bar,0); pos7(bar,0);
+pos8(bar,0); pos9(bar,0);
+filldraw stroke z6e--z7e; % upper bar
+filldraw stroke z8e--z9e; % lower bar
+penlabels(0,1,2,3,4,5,6,7,8,9); endchar;
+
+cmchar "Upside down e";
+beginchar(hex"55",7.25u#+max(.75u#,.5curve#),x_height#,0);
+italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0);
+adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi);
+numeric left_curve,right_curve;
+left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi;
+if right_curve<tiny.breadth: right_curve:=tiny.breadth; fi
+if left_curve<tiny.breadth: left_curve:=tiny.breadth; fi
+pickup tiny.nib; pos1(right_curve,180);
+pos2(vair,270); pos3(left_curve,0);
+y1=good.y (h-bar_height); bot y2r=vround (-1.5oo); y0l=top y1;
+lft x1r=hround max(.5u,u-.5right_curve);
+rt x3r=hround min(w-.5u,w-(1.25u-.5left_curve)); x2=.5w-.25u;
+{{interim superness:=more_super;
+ filldraw stroke super_arc.e(2,1)}}; % left bowl
+y3=.5[y2,y4]; top y4r=h+oo; x4=x2-.25u;
+if serifs: pos4(vair',90); pos5(hair,180);
+ y5=min(good.y(h-(.5bar_height-.9)),y4l-vair); x5r=x1r;
+ (x,y4l)=whatever[z4r,z5]; x4l:=max(x,x4l-.5u);
+ filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)
+ ...{x5-x4,5(y5-y4)}z5e; % right bowl, arc, and terminal
+else: pos4(vair,90);
+ filldraw stroke super_arc.e(2,3) & super_arc.e(3,4); % right bowl and arc
+ pickup fine.nib; pos4'(vair,90); z4=z4';
+ pos5(.5[vair,flare],95); lft x5r=hround(.6u);
+ y5r=good.y(y5r-1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
+ filldraw stroke term.e(4',5,left,1,4); fi % terminal
+path testpath; testpath=super_arc.l(2,3) & super_arc.l(3,4);
+y1'r=y0r=y0l-.6[thin_join,vair]; y1'l=y0l; x1'l=x1'r=x1;
+forsuffixes $=l,r:
+ x0$=xpart(((2h,y0$)--(x1,y0$)) intersectionpoint testpath); endfor
+fill stroke z0e--z1'e; % crossbar
+penlabels(0,1,2,3,4,5); endchar;
+
+cmchar "Phonetic open o";
+beginchar(hex"6C",8.5u#,x_height#,0);
+italcorr x_height#*slant-.2u#;
+adjust_fit(if monospace: .5u#,.5u# else: 0,0 fi);
+pickup fine.nib; pos2(vair',270); pos4(vair',90);
+x2=x4=.5w; top y4r=vround(h+oo); bot y2r=-1.5oo;
+pos3(curve,0); rt x3l=hround (w-max(.6u,1.35u-.5curve)); y3=.5h;
+if serifs: pos1(hair,180); pos0(flare,180);
+ y1=h-.70[bar_height,h]+.5flare;
+ lft x1r=hround(1.0u); bulb(2,1,0); % bulb
+ pos5(hair,180); lft x5r=hround(1.2u);
+ y5=min(good.y(h+oo-.45bar_height+.9),y4l-vair');
+ (x,y4l)=whatever[z4l,z5r]; x4l:=max(x,x4l-.5u);
+ filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
+ & pulled_super_arc.e(3,4)(.5superpull)
+ ..tension .9 and 1..{x5-x4,5(y5-y4)}z5e; % arc and upper terminal
+else: pos1(4/7[vair',flare],260);
+ lft x1r=hround(.6u); bot y1r=vround (.82[h-bar_height,bot y2r]);
+ filldraw stroke term.e(2,1,left,.8,4); % lower terminal
+ pos5(.6[vair',flare],95); lft x5r=hround(1.5u);
+ y5r=good.y(y5l+h-1/3bar_height-y5); y5l:=good.y y5l; x5l:=good.x x5l;
+ forsuffixes e=l,r: path p.e; p.e=z4e{left}..tension .9 and 1..z5e;
+ if angle direction 1 of p.e<255:
+ p.e:=z4e{left}..tension atleast.9 and 1..{dir 255}z5e; fi endfor
+ filldraw stroke pulled_super_arc.e(2,3)(.7superpull)
+ & pulled_super_arc.e(3,4)(.5superpull) & p.e; fi % arc and upper terminal
+penlabels(0,1,2,3,4,5); endchar;
+
+cmchar "The small islandic thorn";
+beginchar(hex"69",10u#+serif_fit#,asc_height#,desc_depth#);
+italcorr .5x_height#*slant+min(.5curve#-.85u#,-.1u#);
+adjust_fit(serif_fit#,0);
+pickup tiny.nib; pos1(stem',0); pos2(stem,0);
+pos0'(stem',0); pos0(stem,0); z0l=z0'l; x0'=x1; x0=x2;
+lft x1l=hround(2.5u-.5stem'); top y1=h if serifs: +min(oo,serif_drop) fi;
+numeric edge; edge=rt x2r;
+pickup fine.nib; pos3(if hefty:thin_join else: hair fi,180);
+pos4(vair',90); pos5(curve,0); pos6(vair,-90); penpos7(x3l-x3r,-180);
+rt x3l=max(rt x3l-(lft x3r-tiny.lft x2l), 1/3[rt x2,edge]);
+y3=1/8[bar_height,x_height];
+x4l=w-.5(w-serif_fit)+.5u; top y4r=x_height+oo;
+rt x5r=hround min(w-1.35u+.5curve,w-.6u); y5=.5x_height;
+x6l=x4l-.2u; bot y6r=-oo;
+x7=x3; y7=min(y3,y6+y4-y3+.6vair);
+(x,y4r)=whatever[z3l,z4l]; x4r:=min(x,.5[x5r,x4]);
+(x',y6r)=whatever[z7l,z6l]; x6r:=min(x',.5[x5r,x6]);
+filldraw stroke z3e{up}...{right}z4e&super_arc.e(4,5)
+ &super_arc.e(5,6)&z6e{left}...{up}z7e; % bowl
+y0=ypart(((edge,x_height)--(edge,0)) intersectionpoint
+ (z3l{up}...{right}z4l));
+pickup tiny.nib; bot y2=-d;
+filldraw stroke z1e--z0'e--z0e--z2e; % stem
+pickup crisp.nib; pos8(hair,0); pos7'(stem,0);
+z7'=z2; x8l=x7'l; bot y8=0;
+filldraw stroke z7'e--z8e; % point
+if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif
+ dish_serif(2,0,b,1/3,jut,c,1/3,jut); fi % lower serif
+penlabels(0,1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Uppercase Thorn";
+beginchar(hex"6A",12u#,cap_height#,0);
+italcorr .5cap_height#*slant-.5u#;
+adjust_fit(cap_serif_fit#,0);
+pickup tiny.nib; penpos1(cap_stem'-tiny,0); penpos2(cap_stem-tiny,0);
+pos0(cap_stem',0); pos0'(cap_stem,0);
+lft x1l=hround max(2u,3u-.5cap_stem'); top y1=h; bot y2=0;
+x1l=x2l=x0l=x0'l; y0=y0'=y7;
+penpos3(cap_band,90); penpos4(cap_band,90);
+penpos5(cap_curve if hefty:-3stem_corr fi,0);
+penpos6(.5[vair,cap_band],-90); penpos7(.5[vair,cap_band],-90);
+y4=y3; y5=.5[y4l,y6l]; y6=y7;
+x3=x7=x2; x4=x6=.5w+.75u; x5r=hround(w-u);
+y3r=vround(.80h);
+y7r=vround(.20h);
+x4l:=x6l:=x4-.25cap_curve;
+filldraw stroke z1e--z0e--z0'e--z2e; % stem
+fill stroke z3e..pulled_arc.e(4,5) & pulled_arc.e(5,6)..z7e; % lobe
+if serifs: dish_serif(1,0,a,1/3,cap_jut,b,1/3,cap_jut); % upper serif
+ dish_serif(2,0',c,1/3,cap_jut,d,1/3,cap_jut); fi % lower serif
+math_fit(0,ic#-2.5u#); penlabels(0,1,2,3,4,5,6,7); endchar;
+
+cmchar "Islandic edh";
+beginchar(hex"6B",9u#,asc_height#,0);
+italcorr .8x_height#*slant;
+adjust_fit(0,0);
+penpos1(vair,90); penpos3(vair',-90);
+penpos1'(hair,0);
+penpos2(curve,180); penpos4(curve,0); penpos4'(curve,0);
+penpos5(curve,0); penpos6(curve,0);
+x2r=hround max(.5u,1.25u-.5curve);
+x4r=w-x2r; x1=x3=.5w; y1r=x_height; y3r=-oo;
+y2=y4=.5(x_height-oo)-vair_corr; y2l:=y4l:=.5x_height;
+y4'=y4+1.5u; x4'=x4;
+top y6 = h;
+x6= if monospace: 2/3 else: 1/3 fi [x2,x5];
+y5=0.66[y4',y6];
+x5=0.60[x4',x6];
+z1' = z4';
+penstroke pulled_arc.e(1',1)
+ & pulled_arc.e(1,2) & pulled_arc.e(2,3)
+ & pulled_arc.e(3,4)..z4'e..z5e---z6e; % bowl and stem
+numeric newstem; newstem = .5[hair,.7stem];
+penpos7(newstem,-45); penpos8(newstem,-45);
+top y8l = h;
+bot y7r = .12[top y1r,h];
+(x8-x7)/(y6-y5) = (y8-y7)/(x5-x6);
+z=.5[z7,z8]; % make bar symmetric
+(y6-y)/(y6-y5) = (x6-x)/(x6-x5);
+penstroke z7e--z8e; % bar
+penlabels(1,2,3,4,5,6,7,8); endchar;
+
+cmchar "Permille sign";
+cmchar "Per mille sign";
+beginchar(hex"68",9u#+max(9u#,3fudge*(hair#+stem#)),
+ body_height#,body_height#-asc_height#);
+italcorr if hefty: .4asc_height#*slant-.5u# else: h#*slant-u# fi;
+adjust_fit(0,0); pickup fine.nib;
+numeric left_curve,right_curve;
+left_curve=hround 5/6[fudged.hair,fudged.stem];
+right_curve=max(fine.breadth,hround(fudged.hair if hefty:-2stem_corr fi));
+pos1(vair,90); pos2(left_curve,180); pos3(vair,270); pos4(right_curve,360);
+top y1r=h; lft x2r=hround u; rt x4r=hround(.35w-u);
+bot y3r=floor(if monospace: .7 else: .5 fi\\ asc_height);
+x1=x3=.5[x2,x4]; y2=y4=.5[y1,y3];
+filldraw stroke pulled_super_arc.e(1,2)(superpull)
+ & pulled_super_arc.e(2,3)(superpull); % left half of upper bowl
+filldraw stroke super_arc.e(3,4) & super_arc.e(4,1); % right half of upper bowl
+pos5(vair,90); pos6(left_curve,180); pos7(vair,270);
+pos8(right_curve,360);
+bot y7r=-d; rt x8r=hround(.70w-u); x6-x8 = x2-x4;
+top y5r=vround(if monospace: .3 else: .5 fi\\ asc_height);
+x5=x7=.5[x6,x8]; y6=y8=.5[y5,y7];
+filldraw stroke pulled_super_arc.e(5,6)(superpull)
+ & pulled_super_arc.e(6,7)(superpull); % left half of lower bowl
+filldraw stroke super_arc.e(7,8) & super_arc.e(8,5); % right half of lower bowl
+pos5'(vair,90); pos6'(left_curve,180); pos7'(vair,270);
+pos8'(right_curve,360);
+bot y7'r=-d; rt x8'r=hround(w-u); x6'-x8' = x6-x8;
+top y5'r=vround(if monospace: .3 else: .5 fi\\ asc_height);
+x5'=x7'=.5[x6',x8']; y6'=y8'=.5[y5',y7'];
+filldraw stroke pulled_super_arc.e(5',6')(superpull)
+ & pulled_super_arc.e(6',7')(superpull); % left half of lower bowl
+filldraw stroke super_arc.e(7',8') & super_arc.e(8',5'); % right half of lower bowl
+pickup rule.nib; top y9=h; bot y10=-d;
+if hefty: x9=good.x(x5-eps); x10=good.x(x1+eps);
+ draw z9--z10; % diagonal
+else: rt x9=hround(.67w-2.5u); lft x10=hround 2.5u; draw z9--z10; % diagonal
+ pickup fine.nib; pos9(rule_thickness,angle(z9-z10)+90);
+ pos11(vair,angle(z1r-z4r)-90); pos12(vair,angle(z9-z10)+90);
+ path p; p=super_arc.r(1,4); z11r=point 2/3 of p; z12r=z9r;
+ filldraw stroke z11e{direction 2/3 of p}...{z9-z10}z12e; fi % link
+penlabels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;