summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf')
-rw-r--r--Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf1464
1 files changed, 1464 insertions, 0 deletions
diff --git a/Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf b/Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf
new file mode 100644
index 00000000000..54c2c06236e
--- /dev/null
+++ b/Master/texmf-dist/fonts/source/public/mathabx/mathcall.mf
@@ -0,0 +1,1464 @@
+% mathematical symbols by Anthony Phan.
+% file: mathcall.mf (calligraphic font)
+% last modification: May 16, 2005.
+
+%
+% LOWERCASE
+%
+% design, metrics and italic corrections checked (nov. 28, 2002).
+%
+
+cmchar "Calligraphic a";
+beginchar("a", 9u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#) if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98h; x1 = x2 = good.x(w-2.5u); x4 = w;
+ draw z1..hook_out(2, 3, 4);
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = x1; x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic b";
+beginchar("b", 8u#, asc_height#, 0);
+ italcorr .75x_height#*slant+0.5curve#-u# if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; y2 = 0.5x_height; bot y3 = -oo;
+ y4 = 0.5x_height; top y5 = x_height+oo;
+ x1 = x2 = good.x 1.5u; x3 = 0.5[x2, x4];
+ x4 = good.x(w-1.25u); x5 = 0.5[x2, x4];
+ draw z1-cal.extension--z1..z2{down}
+ ...z3{right}...z4{up}...z5{left}...z2{down};
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic c";
+beginchar("c", 8u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x2-x1 = hround u; rt x2 = hround(w-1.1u);
+ if x2 > w-1.25u: x2 := good.x w-1.25u; fi
+ x3 = 0.6[x4, x2]; x4 = good.x 1.25u;
+ x5 = 0.5[x4, x6]; x6 = good.x w;
+ top y3 = h+oo; y4 = .5h; bot y5 = -oo;
+ y1 = good.y 0.65[y5, y3]; y2 = .8[y5, y3];
+ y6 = good.y 1/4x_height;
+ draw z1 ... z2 up_to_left z3 left_to_down
+ z4 down_to_right z5...z6;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic d";
+beginchar("d", 9u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ h#*slant+0.5lower_cal_width#-2u#) if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; x1 = x2 = good.x(w-2.5u); x4 = w;
+ draw z1-cal.extension--z1---hook_out(2, 3, 4);
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = x1; x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic e";
+beginchar("e", 8u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ rt x1 = hround(w-1.1u); x2 = 0.6[x3, x1];
+ if x1 > w-1.25u: x1 := good.x w-1.25u; fi
+ x3 = good.x 1.25u; x4 = 0.5[x3, x5]; x5 = good.x w;
+ y1 = 0.8[y4, y2]; top y2 = h+oo; y3 = .5h; bot y4 = -oo;
+ y5 = good.y 1/4x_height;
+ draw z3 right_to_up z1 up_to_left z2
+ left_to_down z3 down_to_right z4...z5;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic f";
+beginchar("f", 5.5u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant+.75u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ z88 = (0.5w-0.5u, h); z89 = (0.5w+0.5u, -d);
+ top y2 = h+oo; bot y5 = -d-oo; top y8 = top y9 = x_height;
+ y2-y0 = y6-y5 = vround 0.35min(d, h-x_height);
+ y1 = 0.5[y0, y2]; y6 = 0.5[y5, y7];
+ y3 = 0.25[x_height, y2]; y4 = 0.5[y5, y3];
+ rt x1-w = -lft x6 = hround 0.25u; x7-x6 = hround 0.5u;
+ x0 = x1; x2 = 0.4[x1, x3]; x5 = 0.4[x6, x4];
+ z3 = whatever[z88, z89]; z4 = whatever[z88, z89];
+ lft x8 = hround(lft x3-0.5stem-1.25u);
+ rt x9 = hround(rt x3+0.5stem+1.7u);
+ draw (z0--z1) softjoin (z1 up_to_left z2....z3
+ ---z4....z5{left}...z6);%...z7);
+ draw z8..z9;
+ %
+ math_fit(desc_depth#*slant+u#, x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic g";
+beginchar("g", 8u#, x_height#, desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#-u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98h;
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x1 = x2 = x5 = good.x(w-1.5u); x4 = 1.5u;
+ x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z1..desc_curve(2, 3, 4);
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-min(.3x_height#*slant+0.5curve#-u#,
+ 1.5u#-desc_depth#*slant), ic#-1/3x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic h";
+beginchar("h", 9u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.75x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; bot y2 = -oo;
+ x1 = x2 = good.x 1.5u;
+ x4 = w-2.45u; x5 = w-2.80u; x7 = w;
+ draw z1-cal.extension--z1--z2
+ --ital_arch(2, 3, 4)...hook_out(5, 6, 7);
+ %
+ math_fit(0, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic i";
+beginchar("i", 5u#, min(10/7x_height#+0.5flare#, asc_height#), 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ (h#-0.5flare#)*slant
+ -2.5u#-0.4(h#-x_height#)*slant+0.5flare#+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(0.5w+0.30u);
+ x4 = good.x(0.5w-0.30u); x6 = w;
+ draw hook_in(1, 2, 3)...hook_out(4, 5, 6);
+ %
+ pickup fine_cal.nib;
+ cal_dot7(0.5w-0.4(h-x_height)*slant, h+1-0.5flare, flare);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6); penlabels(7, 7');
+endchar;
+
+cmchar "Calligraphic j";
+beginchar("j", 5u#, min(10/7x_height#+0.5flare#, asc_height#), desc_depth#);
+ italcorr max(0.8x_height#*slant+0.5lower_cal_width#-u#,
+ (h#-0.5flare#)*slant
+ -1.5u#+0.5lower_cal_width#-0.6(h#-x_height#)*slant+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x(w-1.5u);
+ x6 = good.x 0; x0 = rt x3;
+ draw hook_in(1, 2, 3)..desc_curve(4, 5, 6);
+ %
+ pickup fine_cal.nib;
+ cal_dot7(x0-0.5flare-0.6(h-x_height)*slant, h+1-0.5flare, flare);
+ %
+ math_fit(desc_depth#*slant, x_height#*slant+0.5stem#-u#);
+ labels(1, 2, 3, 4, 5, 6); penlabels(7, 7');
+endchar;
+
+cmchar "Calligraphic k";
+beginchar("k", 8.5u#, asc_height#, 0);
+ italcorr max(0.2x_height#*slant+0.1w#,
+ 0.95x_height#*slant-0.1w#+0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; bot y2 = -oo; x1 = x2 = good.x 1.5u;
+ draw z1-cal.extension--z1--z2;
+ %
+ rt x4 = .9w; x5 = x4-.1w; x7 = .8w; rt x8 = 1.1w;
+ y4 = .9x_height; top y5 = x_height+oo; bot y7 = -oo; y8 = .2x_height-oo;
+ (lft z6)t_ = (x2, 0.4x_height).t_+penoffset up of pen_[lower_cal.nib];
+ draw z4{up}...{left}z5..tension atleast 2..{down}z6
+ ..tension atleast 3 and atleast 2..z7{right}...{up}z8; % diagonals
+ %
+ math_fit(0, 1/3x_height#*slant+0.5hair#+0.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic l";
+beginchar("l", 4.5u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ asc_height#*slant+0.5lower_cal_width#-2.1u#) if math_fitting: +0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; x1 = x2 = good.x 1.9u; x4 = w;
+ draw z1-cal.extension--z1---hook_out(2, 3, 4);
+ %
+ math_fit(-0.5u#, 1/3x_height#*slant+0.5hair#+u#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic m";
+beginchar("m", 15u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.75x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; x6 = x7 = good.x 0.5w;
+ x9 = good.x(w-2.45u); x10 = good.x(w-2.80u); x12 = w;
+ bot y4 = bot y7 = -oo;
+ draw hook_in(1, 2, 3)---z4;
+ draw ital_arch(4, 5, 6)---z7;
+ draw ital_arch(7, 8, 9)...hook_out(10, 11, 12);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
+endchar;
+
+cmchar "Calligraphic n";
+beginchar("n", 10u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.75x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; bot y4 = -oo;
+ x6 = good.x(w-2.45u); x7 = good.x(w-2.80u);
+ x9 = w;
+ draw hook_in(1, 2, 3)---z4;
+ draw ital_arch(4, 5, 6)...hook_out(7, 8, 9);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+cmchar "Calligraphic o";
+beginchar("o", 9u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ % not good
+% x5 = good.x 0.75[x2, x1]; x6 = 0.5[x5, x7]; x7 = good.x w;
+% y5 = 0.75[y6, y1]; y6 = good.y 0.6[y3, y1]; y7 = good.y 3/4x_height;
+% draw z1{left}...z5 down_to_right z6...z7;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic p";
+beginchar("p", 9u#, x_height#, desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; bot y4 = -d-eps;
+ draw hook_in(1, 2, 3)..z4;
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = good.x(w-1.25u); x7 = x3; x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-min(2/3x_height#*slant-0.5hair#-0.5u#,
+ 2u#-0.5stem#-desc_depth#*slant), ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic q";
+beginchar("q", 8u#, x_height#, desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#-u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98h; bot y2 = -d-eps;
+ x1 = x2 = good.x(w-1.5u);
+ draw z1--z2--z2+cal.extension;
+ top y6 = x_height+oo; bot y8 = -oo; y5 = y7 = 0.5[y6, y8];
+ x5 = x1; x7 = good.x(1.25u); x6 = x8 = 0.5[x5, x7];
+ draw z5 up_to_left z6 left_to_down z7
+ down_to_right z8 right_to_up z5;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#-1/3x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic r";
+beginchar("r", 7.25u#, x_height#, 0);
+ italcorr 0.8x_height#*slant+0.5lower_cal_width#-0.15u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x 2.5u; bot y4 = -oo;
+ draw hook_in(1, 2, 3)---z4;
+ y5 = y2; y7 = good.y 0.65[y4, y5]; y6 = .8[y4, y5];
+ x6 = good.x(w-0.65u); x6-x7 = hround 0.75u; x5 = 0.75[x4, x6];
+ draw z4{up}...z5 right_to_down z6...z7;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#-0.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic s";
+beginchar("s", 5.25u#+1.75u#, x_height#, 0);
+ italcorr 0.9x_height#*slant-0.05w#+0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ rt x0 = rt x1 = .95w; x2 = .5[x3, x1]; lft x3 = .15w; x4 = .5[x6, x2];
+ rt x5 = w; x6 = .5w; lft x7 = 0; lft x8 = .075w;
+ y0 = .8h; y1 = .9h; top y2 = h+o; y3 = .55[y4, y2]; y4 = .55[y6, y2];
+ y5 = .45[y6, y4]; bot y6 = -o; y7 = .2h; y8 = .35h;
+ draw\\(z0--z1) softjoin (z1...z2{left}...z3{down}...z4...z5{down}
+ ...z6{left}...z7) softjoin (z7{up}...{right}z8); % stroke
+ math_fit(0, ic#);
+ labels(0, 1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic t";
+beginchar("t", 5.5u#, min(asc_height#, 10/7x_height#), 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant-.25u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h; x1 = x2 = good.x 2u; x4 = w;
+ draw z1---hook_out(2, 3, 4);
+ lft x5 = hround -0.75u; rt x6 = hround(w-0.65u);
+ top y5 = top y6 = x_height;
+ draw z5..z6;
+ %
+ math_fit(1.25u#-x_height#*slant, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic u";
+beginchar("u", 9.5u#, x_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = x7 = x8 = good.x(w-2.5u); x10 = w;
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57h; top y7 = h;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up};
+ draw z7..hook_out(8, 9, 10);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 6, 7, 8, 9, 10);
+endchar;
+
+%cmchar "Calligraphic v";
+% beginchar("v", 8u#, x_height#, 0);
+% italcorr 0.8x_height#*slant;
+% adjust_fit(0, 0.5u#);
+% %
+% pickup lower_cal.nib;
+% x1 = 0; top y1 = h; z3 = (.48w, 0);
+% z0.t_ = z2.t_+penoffset down of currentpen
+% = z3.t_+penoffset down of pen_[tilted.nib];
+% draw z1{right}..tension atleast 1 and infinity..z2; % left diagonal
+% pickup tilted.nib;
+% rt x4 = w; x5 = x4-.2w; top y4 = .8h; top y5 = h;
+% path p; p = z3..tension atleast 3 and 1..{up}z4;
+% erase fill z0--(x0, y0-0.5h)--(x4, y0-0.5h)--(x4+eps, y4)--reverse p--cycle;
+% draw p...{left}z5; % right diagonal
+% %
+% math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, 2/3ic#);
+% labels(0, 1, 2, 3, 4, 5);
+% endchar;
+
+cmchar "Calligraphic v";
+beginchar("v", 8.75u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi; % same as "o"
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = good.x(w-1.25u); x7 = good.x(w-2.25u);
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57h; top y7 = h+oo;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up}...z7;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic w";
+% beginchar("w", 12.3u#, x_height#, 0);
+% italcorr 0.8x_height#*slant;
+% adjust_fit(0.2u#, 0.5u#);
+% %
+% pickup lower_cal.nib;
+% x1 = 0; x3 = .5[x1, x6]; x6 = .52w;
+% x9 = .58[x6, x10]; y3 = y9 = 0; top y1 = top y6 = h;
+% z7 = .5[z8, z6]+bend; z4 = .5[z3, z5]+bend;
+% (z0)t_ = (z2)t_+penoffset down of currentpen
+% = (z3)t_+penoffset down of pen_[tilted.nib];
+% (z20)t_ = (z8)t_+penoffset down of currentpen
+% = (z9)t_+penoffset down of pen_[tilted.nib];
+% draw z1{right}..tension atleast 1 and infinity..z2; % first diagonal
+% pickup tilted.nib;
+% x5 = x6; rt x10 = w;
+% x11 = x10-.1w; top y5 = h; top y10 = .8h; top y11 = h;
+% erase fill z0--(x0, y0-0.5h)--(x5, y0-0.5h)--z5..z4..z3--cycle;
+% draw z3..z4..z5; % second diagonal
+% pickup lower_cal.nib;
+% erase fill\\(.3w, bot y6)--(w, bot y6)--(w, top y6)--(.3w, top y6)--cycle;
+% draw z6..z7..z8; % third diagonal
+% pickup tilted.nib;
+% path p; p = z9..tension atleast 3 and 1..{up}z10;
+% erase fill z20--(x20, y20-0.5h)--(x10, y20-0.5h)--(x10+eps, y10)
+% --reverse p--cycle;
+% draw p..{left}z11; % fourth diagonal
+% %
+% math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, 3/4ic#);
+% labels(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 20);
+% endchar;
+
+cmchar "Calligraphic w";
+beginchar("w", 12.5u#, x_height#, 0);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi; % same as "o"
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = x7 = good.x 0.5[2.5u,w-1.5u]; x8 = 0.5[x6,x9];
+ x9 = good.x(w-1.25u); x10 = good.x(w-2.25u);
+ y4 = 0.7[y5, y6]; bot y5 = bot y8 = -oo; y6 = y9 = 0.57h;
+ top y7 = top y10 = h+oo;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6---z7;
+ draw z6 down_to_right z8...z9{up}...z10;
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic x";
+beginchar("x", 8.25u#, x_height#, 0);
+ italcorr max(1/9x_height#*slant, 0.9x_height#*slant+.5u#);
+ adjust_fit(0, 0.25u#);
+ %
+ pickup lower_cal.nib;
+ lft x1 = .08w; lft x2 = .2w; x4-x3 = x2-x1; rt x4 = w;
+ h-y1 = y4 = 1/9h; top y2 = h; bot y3 = 0;
+ draw z1{up}....z2{right}
+ ... .2[z2+(.1w, 0), z3-(.1w, 0)]---.8[z2+(.1w, 0), z3-(.1w, 0)]
+ ...{right}z3....{up}z4; % left diagonal
+ x5 = x6-u; rt x6 = w; lft x7 = 0; x8 = x7+u;
+ top y5 = h; y6 = .85h; y7 = h-y6; bot y8 = 0;
+ draw z5{right}...z6{down}
+ ..tension atleast 3..{down}z7...{right}z8; % right diagonal
+ %
+ math_fit(0, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+cmchar "Calligraphic y";
+beginchar("y", 8.5u#, x_height#, desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#-0.5u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(2.80u); x4 = x10 = good.x(2.3u);
+ x5 = 0.5[x4, x6]; x6 = x7 = x8 = good.x(w-1.5u);
+ y4 = 0.7[y5, y6]; bot y5 = -oo; y6 = 0.57h; top y7 = h;
+ draw hook_in(1, 2, 3)...z4 down_to_right z5...z6{up};
+ draw z7..desc_curve(8, 9, 10);
+ %
+ math_fit(-2/3x_height#*slant+0.5hair#+0.5u#, ic#-1/3x_height#*slant);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+cmchar "Calligraphic z";
+beginchar("z", 5.5u#+max(1.5u#, stem#), x_height#, 0);%desc_depth#);
+ italcorr x_height#*slant+0.5lower_cal_width#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ y1 = good.y 3/4x_height;
+ top y2 = h+oo; top y3 = vround 0.98h+eps;
+ bot y4 = -oo; bot y5 = -oo;
+ y6 = good.y 1/4x_height;
+ x1 = x4 = good.x u; x6 = good.x w; x6-x3 = hround 0.5u;
+ x2 = 0.25[x1, x3]; x5 = 0.25[x6, x4];
+ draw z1 ... z2{right}..{z3-z4}z3
+ --z4{z3-z4}..z5{right}... z6;
+ %
+ math_fit(0, 1/3x_height#*slant+0.5hair#+0.5u#);
+ labels(1, 2, 3, 5, 6);
+endchar;
+
+%
+% LATIN EXTENSION
+%
+% the three first have been checked: design, metrics
+% and italic corrections (nov. 28, 2002).
+%
+
+cmchar "Calligraphic dotless i";
+beginchar(hex"10", 5u#, x_height#, 0);% height
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ 0.8x_height#*slant+0.5lower_cal_width#-1.7u#);
+ italcorr 1/3x_height#*slant+0.5hair#+0.5u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = good.x(0.5w+0.30u);
+ x4 = good.x(0.5w-0.30u); x6 = w;
+ draw hook_in(1, 2, 3)...hook_out(4, 5, 6);
+ %
+ math_fit(0, 0);
+ labels(1, 2, 3, 4, 5, 6, 7);
+endchar;
+
+cmchar "Calligraphic dotless j";
+beginchar(hex"11", 5u#, x_height#, desc_depth#);
+ italcorr max(0.8x_height#*slant+0.5lower_cal_width#-u#,
+ 0.8x_height#*slant+0.5lower_cal_width#-0.5u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = 0; x3 = x4 = good.x(w-1.5u);
+ x6 = good.x 0;
+ draw hook_in(1, 2, 3)..desc_curve(4, 5, 6);
+ %
+ math_fit(0, 0);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic es-zet";
+beginchar(oct"31", 8u#, asc_height#, desc_depth#);
+ italcorr max(.8h#*slant-.1w#, .5x_height#*slant)+.5u#;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ x1 = x3 = good.x 1.5u; x4 = .6[x2, x5]; rt x5 = .9w; x6 = .4w;
+ rt x7 = w;
+ x8 = .4[x9, x7]; lft x9 = rt x3;
+ top y1 = x_height+oo; bot y3 = -d-eps; z2 = .3[z3, z1]+bend;
+ top y4 = h+oo; y5 = .6[y6, y4]; y6 = .55h; y7 = .45[y8, y6];
+ bot y8 = -oo; y9 = .1h;
+ draw z1-cal.extension--flex(z1, z2, z3); % stem
+ draw z2{up}...z4...z5{down}...{dir 200}z6{dir 10}
+ ...z7{down}...z8{left}...z9; % lobes
+ %
+ math_fit(.5u#, .3h#*slant+.5u#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+cmchar "Calligraphic ae";
+beginchar(oct"32", 13u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x 0.5w;
+ x1 = 0.5[x2, x4]; x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ %
+ rt x5 = hround(w-1.1u); x6 = 0.6[x7, x5];
+ if x5 > w-1.25u: x5 := good.x w-1.25u; fi
+ x7 = x4; x8 = 0.5[x7, x9]; x9 = good.x w;
+ y5 = 0.8[y8, y6]; top y6 = h+oo; y7 = .5h; bot y8 = -oo;
+ y9 = good.y 1/4x_height;
+ draw z7 right_to_up z5 up_to_left z6
+ left_to_down z7 down_to_right z8...z9;
+ %
+ top y10=vround 0.98h; bot y11=0;
+ x10=x11=x4; draw z10..z11;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
+endchar;
+
+cmchar "Calligraphic oe";
+beginchar(oct"33", 13u#, x_height#, 0);
+ italcorr max(0.25x_height#*slant+0.5lower_cal_width#,
+ 0.85x_height#*slant+0.5lower_cal_width#-1.1u#);
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = h+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x 0.5w; x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ %
+ rt x5 = hround(w-1.1u); x6 = 0.6[x7, x5];
+ if x5 > w-1.25u: x5 := good.x w-1.25u; fi
+ x7 = x4; x8 = 0.5[x7, x9]; x9 = good.x w;
+ y5 = 0.8[y8, y6]; top y6 = h+oo; y7 = .5h; bot y8 = -oo;
+ y9 = good.y 1/4x_height;
+ draw z7 right_to_up z5 up_to_left z6
+ left_to_down z7 down_to_right z8...z9;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+endchar;
+
+cmchar "Calligraphic o/slash";
+beginchar(oct"34", 9u#, x_height#+0.5desc_depth#, 0.5desc_depth#);
+ italcorr .7x_height#*slant+0.5lower_cal_width#-u#
+ if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);%(-0.25u#, -0.25u#);
+ %
+ pickup lower_cal.nib;
+ top y1 = x_height+oo; bot y3 = -oo; y2 = y4 = 0.5[y1, y3];
+ x2 = good.x 1.25u; x4 = good.x(w-1.25u); x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right
+ z3 right_to_up z4 up_to_left z1;
+ %
+ pickup fine_cal.nib;
+ x5=good.x x4; x6=good.x x2; top y5=h+eps; bot y6=-d-eps; draw z5..z6;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6);
+endchar;
+
+cmchar "Calligraphic AE";
+beginchar(oct"35",18u#,cap_height#,0);
+ italcorr max(h#*slant-.1w#,.2h#*slant)+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ w':=hround 8.5u;
+ x1=.9[x3,x2]; rt x2=.9w'+w-w'; x3=.6[x4,x2]; lft x4=.05w'+w-w';
+ x5=.7[x6,x2]; lft x6=w-w'; x7=.5[x6,x8]; rt x8=w;
+ y1=y2-.1h; y2=.9h+o; top y3=h+o; y4=.5[y5,y3];
+ y5=.55h; y6=.6[y5,y7]; bot y7=-o; y8=.2h;
+ %
+ pickup tilted.nib;
+ lft x4'=.05w'+w-w';
+ w':=hround 14.4u;
+ lft x1'=.05w'; x2'=.2w';
+ y1'=y2'+.1h; bot y2'=bot_flourish_line;
+ y3'=y6; z3'=whatever[z2',z4]+2bend; y4'=y4;
+ draw\\(z1'..tension 1.2..{right}z2') softjoin (z2'...z3'...z4'{up});
+% left diagonal
+ pickup cal.nib;
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3{left}...z4{down}...{right}z5); % upper arc
+ draw z5{left}...z6{down}...z7{right}...z8; % lower arc
+ draw rt z3'--z6; % bar
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1',2',3',4',1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "Calligraphic OE";
+beginchar(oct"36",16u#,cap_height#,0);
+ italcorr max(h#*slant-.1w#,.2h#*slant)+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ w':=hround 8.5u;
+ x1=.9[x3,x2]; rt x2=.9w'+w-w'; x3=.6[x4,x2]; lft x4=.05w'+w-w';
+ x5=.7[x6,x2]; lft x6=w-w'; x7=.5[x6,x8]; rt x8=w;
+ y1=y2-.1h; y2=.9h+o; top y3=h+o; y4=.5[y5,y3];
+ y5=.55h; y6=.6[y5,y7]; bot y7=-o; y8=.2h;
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3{left}...z4{down}...{right}z5); % upper arc
+ draw z5{left}...z6{down}...z7{right}...z8; % lower arc
+ %
+ w':=hround 12.6u;
+ x1'=.3w'; lft x2'=0; x3'=0.6[x2',x6]; x5'=0.75[x2',x4];
+ lft x6'=.27w';
+ top y1'=top y5'=h+o; y2'=.55h; bot y3'=-o; y6'=y2';
+ draw z1'...z2'{down}...z3'{right}...z6{up};
+ save p; path p; p = z4{up}...z5'{left}...{down}z6';
+ draw subpath (0,1.8) of p;
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1',2',3',5',6',1,2,3,4,5,6,7,8);
+endchar;
+
+cmchar "Calligraphic O/slash";
+beginchar(oct"37",12.6u#,cap_height#+0.25desc_depth#, 0.25desc_depth#);
+ italcorr .7h#*slant+.5u#;
+ adjust_fit(0,0); pickup cal.nib;
+ x1=.3w; lft x2=0; x3=.5w; rt x4=w; x5=.6w; lft x6=.27w;
+ top y1=top y5=cap_height+o; y2=.55cap_height;
+ bot y3=-o; y4=.5cap_height; y6=y2;
+ path p; p=z1...z2{down}...z3{right}...z4{up}...z5{left}...{down}z6;
+ draw subpath(0,4.8) of p; % bowl
+% pickup .nib;
+ top y7= vround(h+0.25desc_depth)+eps; bot y8=-hround(0.25desc_depth)-eps;
+ x7 = good.x x4; x8 = good.x 0.1[x2, x6]; draw z7..z8;
+ math_fit(.5u#-.3h#*slant,ic#-.5u#);
+ labels(1,2,3,4,5,6);
+endchar;
+
+%
+% DIGITS
+%
+
+beginchar("0", 9u#, fig_height#, 0);
+ "The digit 0";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ numeric a; a = min(0.25h, 0.5(x_height-o));
+ top y1 = h+o; bot y3 = -o; y2 = y4 = 0.5[y1, y3];
+ lft x2 = hround max(0.7u, lft 1.45u); x4 = w-x2;
+ x1 = x3 = 0.5[x2, x4];
+ draw z1 left_to_down z2 down_to_right z3
+ right_to_up z4 up_to_left z1;
+ labels(1, 2, 3, 4);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("1", 9u#, fig_height#, 0);
+ "The digit 1";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = h+o; bot y3 = -max(hround(0.05h)+eps, oo); y1 = good.y 0.35[y2, y3];
+ rt x2-lft x1 = hround 4.875u; rt x2 = w-hround 2.125u;
+ rt x3 = w-hround 3.75u;
+ draw z1{x2-x1, 0.5(y2-y1)}...z2 & z2{x3-x2, 0.4(y3-y2)}...{down}z3;
+ labels(1, 2, 3);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("2", 9u#, fig_height#, 0);
+ "The digit 2";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = h+o; bot y5 = bot y6 = 0; y1 = y3 = good.y 0.75h;
+ lft x1 = lft x5+eps = hround u; rt x3 = rt x6-eps = w-hround u;
+ x2 = x4 = 0.5[x1, x3]; y4 = 0.4[y5, y3];
+ draw z1 up_to_right z2 right_to_down z3...z4---z5--z6;
+ labels(1, 2, 3, 4, 5, 6);
+ math_fit(0, 0.5ic#);
+endchar;
+
+% beginchar("3", 9u#, fig_height#, 0);
+% "The digit 3";
+% italcorr fig_height#*slant-0.5u#;
+% adjust_fit(0, 0);
+% pickup lower_cal.nib;
+% bot y2 = -o; top y5 = top y6 = x_height;
+% y1 = good.y 1/4x_height;
+% y3 = a; y5-y4 = y3-y2; top y7 = top y8 = h;
+% rt x3 = w-hround u; x3 = x4 = x7+hround 0.5u-eps;
+% lft x1 = hround u; x1+hround 0.5u-eps = x8;
+% lft x6 = hround 3u-eps;
+% x2 = x5 = 0.5[x1, x3];
+% draw z1 ... z2 right_to_up z3..z4 up_to_left z5--z6--z7--z8;
+% labels(1, 2, 3, 4, 5, 6, 7, 8);
+% math_fit(0, 0.5ic#);
+% endchar;
+
+beginchar("3", 9u#,fig_height#,0);
+ "The digit 3";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0,0); pickup lower_cal.nib;
+ lft x2 = hround 1.25u; x3=.46[x2,x4]; x4=good.x(w-2u);
+ x5=.7[x6,x2]; x6= good.x(w-1.25u); x7=.5[x6,x8]; lft x8 = hround u;
+ x1=good.x 0.6[x5, x2];
+ %y1=y2-.1h;
+ y2=.85h+oo; top y3=h+oo; y4=.5[y5,y3];
+ y5=good.y .55h; y6=.5[y5,y7]; bot y7=-oo; y8=good.y 1/4x_height;
+ y1 = good.y 0.55[y5, y3];
+ draw\\(z1{2(x2-x1),y2-y1}...z2)
+ softjoin (z2...z3 right_to_down z4...{left}z5); % upper arc
+ draw z5 right_to_down z6...z7{left}...z8; % lower arc
+ math_fit(.5u#-.2h#*slant,.2h#*slant+.5u#);
+ labels(1,2,3,4,5,6,7,8);
+endchar;
+
+beginchar("4", 9u#, fig_height#, 0);
+ "The digit 4";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y1 = h+o; bot y5 = -max(hround(0.05h)+eps, oo); top y4 = x_height+eps;
+ y2 = y3 = good.y(0.5x_height);
+ rt x3 = w-hround 0.1u+eps;
+ lft x2 = hround 0.5u-eps;
+ x1 = good.x 0.33[x2, x3];
+ x4 = good.x 0.725[x2, x3];
+ x5 = good.x 0.475[x2, x3];
+ draw z1{down}...z2--z3; draw z4{x5-x4, 0.45(y5-y4)}..z5{down};
+ labels(1, 2, 3, 4, 5);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("5", 9u#, fig_height#, 0);
+ "The digit 5";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y2 = -o; top y4 = x_height+eps; y1 = good.y 1/4x_height;
+ y3 = 0.5[y2, y4]; y5 = good.y 0.2[y4, y2]; top y6 = top y7 = h;
+ rt x3 = w-hround u; x3 = x7+hround 0.5u-eps;
+ lft x1 = hround u; x1+hround 0.5u = x5 = x6;
+ x2 = x4 = 0.5[x1, x3];
+ draw z1 ... z2 right_to_up z3
+ up_to_left z4 ... z5&z5..{0.5(x6-x4), y6-y4}z6&z6..{x7-x5, 0.5(y7-y5)}z7;
+ labels(1, 2, 3, 4, 5, 6, 7);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("6", 9u#, fig_height#, 0);
+ "The digit 6";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = h+o; bot y4 = -o; y1 = good.y(h-0.2x_height);
+ top y6 = x_height+eps; y3 = 0.45[y4, y2]; y5 = 0.5[y4, y6];
+ lft x3 = hround max(0.7u, lft 1.45u); x5 = w-x3;
+ rt x1 = w-hround u; x2 = 0.6[x3, x1]; x4 = x6 = 0.5[x3, x5];
+ draw z1 ... z2{left} ... z3 down_to_right z4
+ right_to_up z5 up_to_left z6 ...z3;
+ labels(1, 2, 3, 4, 5, 6);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("7", 9u#, fig_height#, 0);
+ "The digit 7";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y2 = top y3 = h+o; bot y4 = -max(hround(0.05h)+eps, oo);
+ y1 = good.y 0.3[y2, y4];
+ lft x1 = lft x2 = hround 0.75u; rt x3 = w-hround 0.25u;
+ x4 = good.x 0.4[x2, x3];
+ draw z1{0.2(x3-x1), y3-y1}..z2 & z2{x4-x2, 0.2(y4-y2)}..z3
+ &z3{x4-x3, 0.4(y4-y3)}..z4;
+ labels(1, 2, 3, 4);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("8", 9u#, fig_height#, 0);
+ "The digit 8";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y1 = vround 0.5h; bot y4 = -o;
+ y1-y2 = y1-y6 = y3-y4; y3 = y5 = a;
+ lft x2 = lft x3 = hround u;
+ rt x5 = rt x6 = w-hround u;
+ x1 = x4 = x7 = 0.5[x2, x6];
+ top y7 = h+o; y8 = y9 = 0.5[y7, y1];
+ lft x8 = w-rt x9 = hround 1.4u-eps;
+ draw z1 left_to_down z2..z3 down_to_right z4 right_to_up z5..z6
+ up_to_left z1; draw superellipse(z9, z7, z8, z1, superness);
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ math_fit(0, 0.5ic#);
+endchar;
+
+beginchar("9", 9u#, fig_height#, 0);
+ "The digit 9";
+ italcorr fig_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y2 = -o; top y4 = h+o; y1 = good.y 0.2x_height;
+ bot y6 = h-x_height-eps; y3 = 0.45[y4, y2]; y5 = 0.5[y4, y6];
+ lft x5 = hround max(0.7u, lft 1.45u); x3 = w-x5;
+ lft x1 = hround u; x2 = 0.6[x3, x1]; x4 = x6 = 0.5[x3, x5];
+ draw z1 ... z2{right}... z3 up_to_left z4
+ left_to_down z5 down_to_right z6 ...z3;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9);
+ math_fit(0, 0.5ic#);
+endchar;
+
+%
+% PUNCTUATION
+%
+
+call_spanish_query:=0;
+call_spanish_shriek:=1;
+call_laquo:=2;
+call_raquo:=3;
+
+vardef complete_quote@#(expr $,$$)=
+ pickup lower_cal.nib;
+ bot y@#.c=hround 0.06h; y@#.b=good.y 0.5h; y@#.a-y@#.b=y@#.b-y@#.c;
+ if $$<0: lft x@#.a=lft x@#.c=rt x@#.b-(hround 4u+2eps)=$;
+ else: rt x@#.a=rt x@#.c=lft x@#.b+(hround 4u+2eps)=$; fi
+ draw z@#.a{(z@#.b-z@#.a) yscaled 3}..z@#.b
+ &z@#.b..{(z@#.c-z@#.b) yscaled 3}z@#.c;
+ labels(@#.a,@#.b,@#.c);
+enddef;
+
+beginchar("<",8u#,x_height#,0);
+ "French single opening quote";
+ complete_quote1(w-hround 2u+eps,1);
+endchar;
+
+beginchar(">",8u#,x_height#,0);
+ "French single closing quote";
+ complete_quote1(hround 2u-eps,-1);
+endchar;
+
+beginchar(call_laquo,10u#,x_height#,0);
+ "French double opening quote";
+ complete_quote1(w-hround u+eps,1);
+ complete_quote2(w-hround 4u+eps,1);
+endchar;
+
+beginchar(call_raquo,10u#,x_height#,0);
+ "French double closing quote";
+ complete_quote1(hround u-eps,-1);
+ complete_quote2(hround 4u-eps,-1);
+endchar;
+
+cmchar "Hash mark (number sign)";
+spread#:=math_spread[0.45x_height#,0.55x_height#];
+spread:=2ceiling(spread#*hppp/2)+eps;
+beginchar("#",15u#,asc_height#,asc_depth#);
+ italcorr (math_axis#+.5(spread#+rth1#))*slant-.5u#;
+ adjust_fit(0,0);
+ pickup lower_cal.nib; lft x1=hround u-eps; x3=x1; x2=x4=w-x1;
+ y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
+ draw z1--z2; % upper bar
+ draw z3--z4; % lower bar
+ lft x6=hround 3u; rt x7=hround(w-3u); x5-x6=x7-x8;
+ x8=good.x .5\\w;
+ top y5=top y7=h+eps; bot y6=bot y8=-d-eps;
+ y15=y1; z15=whatever[z5,z6]; y36=y3; z36=whatever[z5,z6];
+ y27=y2; z27=whatever[z7,z8]; y48=y4; z48=whatever[z7,z8];
+ draw z5--if x5>x6+1:(good.x(x15+.5),y1)--(good.x(x15-.5),y1)
+ --(good.x(x36+.5),y3)--(good.x(x36-.5),y3)--fi\\z6; % left diagonal
+ draw z7--if x7>x8+1:(good.x(x27+.5),y2)--(good.x(x27-.5),y2)
+ --(good.x(x48+.5),y4)--(good.x(x48-.5),y4)--fi\\z8; % right diagonal
+ labels(1,2,3,4,5,6,7,8,15,27,36,48);
+endchar;
+
+cmchar "Plus sign";
+beginchar("+",arithmetic_bounds);
+ pickup lower_cal.nib;
+ x1=x2=good.x .5w; top y1=h+eps; .5[y1,y2]=math_axis;
+ lft x3=hround u-eps; x4=w-x3; y3=y4=math_axis;
+ draw z1--z2; % stem
+ draw z3--z4; % crossbar
+ labels(1,2,3,4);
+endchar;
+
+beginchar("*",9u#,body_height#,0);
+ "Asterisk";
+ italcorr body_height#*slant-u#;
+ pickup lower_cal.nib;
+ top y1=h+eps; bot y2=h-x_height-eps;
+ x1=x2=good.x 0.5w;
+ x3=good.x (x1-3u*cosd 30);
+ x1-x3=x1-x6=x5-x1=x4-x1;
+ y3=good.y (0.5[y1,y2]+3u*sind 30);
+ y1-y3=y1-y5=y4-y2=y6-y2;
+ draw z1..z2; draw z3..z4; draw z5..z6;
+ labels(1,2,3,4,5,6);
+endchar;
+
+cmchar "Virgule (slash)";
+beginchar("/",9u#,body_height#,paren_depth#);
+ italcorr body_height#*slant-.5u#;
+ pickup fine_cal.nib;
+ rt x1=hround(w-u)+eps; top y1=h+eps;
+ lft x2=hround u-eps; bot y2=-d-eps;
+ draw z1--z2; % diagonal
+ labels(1,2);
+endchar;
+
+beginchar("=",14u#,v_center(spread#+rth1#));
+ italcorr h#*slant-.5u#;
+ adjust_fit(0,0); pickup lower_cal.nib;
+ lft x1=hround u-eps; x3=x1; x2=x4=w-x1;
+ y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
+ draw z1--z2; % upper bar
+ draw z3--z4; % lower bar
+ labels(1,2,3,4);
+endchar;
+
+cmchar "Calligraphic dot";
+beginchar(".", 5u#, dtsz#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, 0.5dtsz, dtsz);
+ math_fit(0, 0);
+ penlabels(1, 1');
+endchar;
+
+cmchar "Calligraphic comma";
+beginchar(", ", 5u#, dtsz#, comma_depth#);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.5w, 0.5dtsz, 1, -comma_depth);
+ math_fit(0, 0);
+endchar;
+
+cal_apostrophe=hex"27"; cal_reverse_apostrophe=hex"60";
+cal_opening_quotes=hex"5C"; cal_closing_quotes=hex"22";
+
+cmchar "Calligraphic apostrophe";
+beginchar(cal_apostrophe, 5u#, asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.5w, h-0.5dtsz, 1, h-comma_depth-dtsz);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic reverse apostrophe";
+beginchar(cal_reverse_apostrophe, 5u#, asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.5w, h-0.5dtsz-comma_depth,
+ -1, h);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic opening quotes";
+beginchar(cal_opening_quotes, 7u#+max(2u#, dtsz#),
+ asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(w-0.6u-0.5dtsz,
+ h-0.5dtsz-comma_depth, -1, h);
+ cal_comma2(w-0.6u-0.5dtsz-1.5u-max(2u, dtsz),
+ h-0.5dtsz-comma_depth, -1, h);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic closing quotes";
+beginchar(cal_closing_quotes, 7u#+max(2u#, dtsz#),
+ asc_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ cal_comma1(0.6u+0.5dtsz,
+ h-0.5dtsz, 1, h-dtsz-comma_depth);
+ cal_comma2(0.6u+0.5dtsz+1.5u+max(2u, dtsz),
+ h-0.5dtsz, 1, h-dtsz-comma_depth);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic semicolon";
+beginchar(";", 5u#, x_height#, comma_depth#);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, h-0.5dtsz, dtsz);
+ cal_comma2(0.5w, 0.5dtsz, 1, -comma_depth);
+ math_fit(0, 0);
+endchar;
+
+cmchar "Calligraphic colon";
+beginchar(":", 5u#, x_height#, 0);
+ italcorr 0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, 0.5dtsz, dtsz);
+ cal_dot2(0.5w, h-0.5dtsz, dtsz);
+ math_fit(0, 0);
+ penlabels(1, 1', 2, 2');
+endchar;
+
+cmchar "Calligraphic hyphen";
+beginchar("-", 6u#, x_height#, 0);
+ italcorr 0.5x_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ y1 = y3 = good.y 0.5h;
+ lft x1 = hround 0.2u-eps; rt x3 = hround(w-u)+eps;
+ z2 = 0.5[z1, z3];
+ draw z1{w, h}...z2{w, -0.5h}...z3{w, h};
+ math_fit(0, 0);
+ labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic en-dash";
+beginchar(oct"173", 9u#, x_height#, 0);
+ italcorr 0.61803x_height#*slant+0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ y1 = y2 = good.y 0.61803h; lft x1 = -eps; rt x2 = w+eps;
+ draw z1..z2; math_fit(0, 0); labels(1, 2);
+endchar;
+
+cmchar "Calligraphic em-dash";
+beginchar(oct"174", 18u#, x_height#, 0);
+ italcorr 0.61803x_height#*slant+0.5u#;
+ adjust_fit(letter_fit#, letter_fit#);
+ pickup lower_cal.nib;
+ y1 = y2 = good.y 0.61803h; lft x1 = -eps; rt x2 = w+eps;
+ draw z1..z2; math_fit(0, 0); labels(1, 2, 3);
+endchar;
+
+beginchar("(", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = h; bot y3 = -d; y2 = 0.5(y1+y3);
+ rt x1 = rt x3 = hround(w-0.5u); lft x2 = hround u;
+ draw z1{x2-x1, 0.5(y2-y1)}...z2{down}...{x3-x2, 0.5(y3-y2)}z3;
+ labels(1, 2, 3);
+ endchar;
+
+ beginchar(")", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = h; bot y3 = -d; y2 = 0.5(y1+y3);
+ lft x1 = lft x3 = hround(0.5u); rt x2 = hround(w-u);
+ draw z1{x2-x1, 0.5(y2-y1)}...z2{down}...{x3-x2, 0.5(y3-y2)}z3;
+ labels(1, 2, 3);
+endchar;
+
+beginchar("[", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = top y2 = h; bot y4 = bot y5 = -d; y3 = 0.5[y1, y5];
+ rt x1 = rt x5 = hround(w-0.25u); lft x2 = lft x4 = hround 1.25u;
+ lft x3 = hround 1.5u;
+ draw z1--z2...z3{down}...z4--z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar("]", 6u#, asc_height#, desc_depth#);
+ italcorr asc_height#*slant;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ top y1 = top y2 = h; bot y4 = bot y5 = -d; y3 = 0.5[y1, y5];
+ lft x1 = lft x5 = hround(0.25u); rt x2 = rt x4 = hround(w-1.25u);
+ rt x3 = hround(w-1.5u);
+ draw z1--z2...z3{down}...z4--z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+beginchar("!", 5u#, asc_height#, 0);
+ "Exclamation point";
+ italcorr asc_height#*slant-2u#+0.5curve#;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ x1=x2=good.x 0.5w;
+ top y2= h+eps;
+ cal_dot3(0.5w, 0.5dtsz, dtsz);
+ bot y1=ceiling 0.25[top y3.b, x_height]-eps;
+ draw z1..z2; labels(1, 2);
+endchar;
+
+beginchar(call_spanish_shriek, 5u#, asc_height#-desc_depth#, desc_depth#);
+ "Spanish shriek";
+ italcorr (charht-0.5dtsz#)*slant-2u#+0.5dtsz#;
+ adjust_fit(0, 0);
+ pickup med_cal.nib;
+ x1=x2=good.x 0.5w;
+ bot y2=-d-eps;
+ cal_dot3(0.5w, h-0.5dtsz, dtsz);
+ top y1=floor 0.25[bot y3.d, h-x_height]+eps;
+ draw z1..z2; labels(1, 2);
+endchar;
+
+cmchar "Question mark";
+beginchar("?", 9u#, asc_height#, 0);
+ italcorr 0.8asc_height#*slant-0.5u#;
+ pickup med_cal.nib;
+ cal_dot9(0.5w, 0.5dtsz, dtsz);
+ top y4 = h+oo; bot y7=ceiling 0.25[top y9.b, x_height]-eps;
+ y2=good.y 0.5[y7, y4]; y3=y5=0.5[y2,y4]; y1= good.y 0.4[y2,y3];
+ y6=1/9[y7,y4]; y8 = good.y 0.8[y7, y6];
+ x3=good.x 1.5u; x5=good.x(w-1.25u); x4=0.55[x3,x5]; x7=0.5w;
+ x1=good.x 0.5[x3,x5]; x2=0.25[x3,x5]; x6=good.x 2/3[x3,x4];
+ x8=good.x 0.5[x7,x5];
+ draw z1...z2 left_to_up z3 ...z4 right_to_down z5...z6 down_to_right z7...z8;
+ labels(1, 2, 3, 4, 5, 6,7,8);
+endchar;
+
+beginchar(call_spanish_query, 9u#, asc_height#-desc_depth#, desc_depth#);
+ "Spanish query";
+ pickup med_cal.nib;
+ cal_dot9(0.5w, h-0.5dtsz, dtsz);
+ bot y4 = -d-oo; top y7=ceiling 0.25[bot y9.d, h-x_height]+eps;
+ y2=good.y 0.5[y7, y4]; y3=y5=0.5[y2,y4]; y1=good.y 0.4[y2,y3];
+ y6=1/9[y7,y4]; y8 = good.y 0.8[y7,y6];
+ x3=good.x(w-1.5u); x5=good.x 1.25u; x4=0.55[x3,x5]; x7=0.5w;
+ x1=good.x 0.5[x3,x5]; x2=0.25[x3,x5]; x6=good.x 2/3[x3,x4];
+ x8=good.x 0.5[x7,x5];
+ draw z1...z2 right_to_down z3 ...z4 left_to_up z5...z6 up_to_left z7...z8;
+ labels(1, 2, 3, 4, 5, 6,7,8);
+endchar;
+
+% just look at italic corection and math fitting
+cmchar "Calligraphic ampersand";
+beginchar(oct"46", 14u#, asc_height#, 0);
+ italcorr max(0.15x_height#*slant+0.5lower_cal_width#,
+ x_height#*slant+0.5lower_cal_width#-2u#) if math_fitting: -0.5u# fi;
+ adjust_fit(0, 0);
+ %
+ pickup lower_cal.nib;
+ top y1 = vround 0.98x_height;
+ bot y2 = bot y7 = -oo;
+ top y5 = h+oo;
+ y3 = 0.5[y2, x_height]; y4 = y6 = 0.6[x_height, y5];
+ y8 = good.y 7/8[x_height, y7];
+ x1 = x7 = good.x(w-2.5u);
+ x3 = good.x 1.25u; x6 = good.x 3u;
+ x8 = good.x w; x2 = 5u; x4-x6=hround 3u; x5=0.6[x6,x4];
+ draw z1{down}...z2 left_to_up z3...z4 up_to_left z5 left_to_down z6
+ ...z7{right}...z8;
+ %
+ math_fit(-.3x_height#*slant+0.5curve#-u#, ic#);
+ labels(1, 2, 3, 4, 5, 6, 7, 8);
+endchar;
+
+%
+% ACCENTS
+%
+
+cmchar "Calligraphic grave accent";
+beginchar(oct"22", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = h+eps; bot y2 = vround 1/3[x_height, h]-eps;
+ lft x1 = hround 1.75u; rt x2 = hround 2/3[x1, w-x1];
+ draw z1{x2-x1, 2(y2-y1)}..z2;
+ labels(1, 2);
+endchar;
+
+cmchar "Calligraphic acute accent";
+beginchar(oct"23", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = h+eps; bot y2 = vround 1/3[x_height, h]-eps;
+ rt x1 = w-hround 1.75u; lft x2 = hround 2/3[x1, w-x1];
+ draw z1{x2-x1, 2(y2-y1)}..z2;
+ labels(1, 2);
+endchar;
+
+% HUM
+cmchar "Calligraphic tilde accent";
+beginchar(oct"176", 9u#,
+ min(asc_height#, 10/7x_height#+0.5flare#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y4 = vround 1/3[x_height, h]-eps;
+ top y2 = h+eps; y1 = y3 = y5 = good.y 0.5[y2, y4];
+ lft x1 = w-rt x5 = hround 1.25u;
+ x2 = 0.25[x1, x5]; x3 = 0.5[x1, x5]; x4 = 0.75[x1, x5];
+ draw z1{(z2-z1) yscaled 2}...z2{right}...
+ z3{(z4-z3)yscaled 2}...z4{right} ...{(z5-z4) yscaled 2}z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic circumflex accent";
+beginchar(oct"136", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y2 = h+eps; bot y1 = bot y3 = vround 1/3[x_height, h]-eps;
+ lft x1 = w-rt x3 = hround 1.75u; x2 = good.x 0.5[x1, x3];
+ draw z1..{x2-x1, 2(y2-y1)}z2
+ &z2{x3-x2, 2(y3-y2)}..z3;
+ labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic hacheck accent";
+beginchar(oct"24", 9u#, min(asc_height#, 2x_height#), 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = top y3 = h+eps; bot y2 = vround 1/3[x_height, h]-eps;
+ lft x1 = w-rt x3 = hround 1.75u; x2 = good.x 0.5[x1, x3];
+ draw z1..{x2-x1, 2(y2-y1)}z2
+ &z2{x3-x2, 2(y3-y2)}..z3;
+ labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic breve accent";
+beginchar(oct"25", 9u#, min(asc_height#, 2x_height#), 0);
+ "Breve accent";
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+% pickup pencircle xscaled stem yscaled hair;
+ pickup lower_cal.nib;
+ top y1 = top y3=h+eps; bot y2=vround 1/3[x_height, h]-eps;
+ lft x1 = w-rt x3=hround 1.5u; x2=0.5[x1, x3];
+ draw z1 down_to_right z2 right_to_up z3; labels(1, 2, 3);
+endchar;
+
+cmchar "Calligraphic macron accent";
+beginchar(oct"26", 9u#, 0.4[x_height#, asc_height#]+0.5hair#, 0);
+ italcorr charht*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib; top y1 = top y2 = h;
+ lft x1 = w-rt x2 = hround 1.25u;
+ draw z1..z2; labels(1, 2);
+endchar;
+
+cmchar "Calligraphic circ accent";
+beginchar(oct"27", 14.4u#
+ +4/3(asc_height#-x_height#)*slant+1.5u#,
+ asc_height#, 0);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ numeric a, b; b = vround(1/3[x_height, h]);
+ a = round max(3.6u, h+o-b);
+ top y2 = b+a+eps; bot y4 = b-eps;
+ y0 = y1 = y3 = 0.5[y4, y2]; x0 = x2 = x4 = 0.5w;
+ lft x3 = hround(x0-0.5a)-eps; x1-x0 = x0-x3;
+ draw superellipse(z1, z2, z3, z4, superness);
+ labels(1, 2, 3, 4, 0);
+endchar;
+
+cmchar "Calligraphic cedilla accent";
+beginchar(oct"30", 9u#, 0, desc_depth#);
+ italcorr asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ bot y1 = -oo; top y2 = -vround max(o, -d/6);
+ bot y4 = -d; y3 = 0.5[y2, y4]; y5 = good.y 0.4[y4, y3];
+ x1 = x2 = x4 = good.x 0.5w;
+ lft x5 = w-rt x3 = hround 1.5u-eps;
+ draw z1--z2 right_to_down z3 down_to_left
+ z4 ... z5;
+ labels(1, 2, 3, 4, 5);
+endchar;
+
+cmchar "Calligraphic dot accent";
+beginchar(oct"137", 9u#,
+ min(asc_height#, 10/7x_height#+0.5flare#), 0);
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(0.5w, h-0.5flare, flare);
+ math_fit(0, 0);
+ penlabels(1, 1');
+endchar;
+
+cmchar "Calligraphic umlaut accent";
+beginchar(oct"177", 9u#,
+ min(asc_height#, 10/7x_height#+0.5flare#), 0);
+ adjust_fit(0, 0);
+ pickup fine_cal.nib;
+ cal_dot1(2.75u, h-0.5flare, flare);
+ cal_dot2(w-2.75u, h-0.5flare, flare);
+ math_fit(0, 0);
+ penlabels(1, 1', 2, 2');
+endchar;
+
+cmchar "Calligraphic long umlaut accent";
+beginchar(oct"175", 9u#, min(asc_height#, 2x_height#), 0);
+ adjust_fit(0, 0);
+ pickup pencircle xscaled stem yscaled hair;
+ top y1 = top y3 = h+eps;
+ bot y2 = bot y4 = vround 1/3[x_height, h]-eps;
+ lft x4 = hround 2.25u; rt x1 = w-hround 1.5u;
+ x1-x3 = x2-x4 = hround 3u;
+ draw z1{x2-x1, 2(y2-y1)}..z2;
+ draw z3{x4-x3, 2(y4-y3)}..z4;
+ labels(1, 2, 3, 4);
+endchar;
+
+beginchar("@", 15u#, asc_height#, 0);
+ "The at sign";
+ italcorr 0.7asc_height#*slant-0.5u#;
+ adjust_fit(0, 0);
+ pickup lower_cal.nib;
+ top y1 = 0.75h+eps; bot y3 = vround 0.25h-eps; y4 = 0.333[y3, y5];
+ top y5 = h+o; y6 = 0.5[y5, y7]; bot y7 = -o; y8 = good.y 0.15h;
+ y2 = 0.2[y3, y1];
+ rt x4 = rt x8 = w-hround u+eps; lft x6 = hround u-eps;
+ x5 = x7 = 0.5[x4, x6];
+ x1 = x2 = good.x(0.7[x6, x4]); x3 = 0.333[x2, x4];
+ draw z1..z2 down_to_right z3 right_to_up z4 up_to_left z5
+ left_to_down z6 down_to_right z7...z8;
+ %
+ y9b = good.y(0.73[y7, y5]); y9d = good.y(0.27[y7, y5]);
+ 0.5[y9b, y9d] = y9a = y9c;
+ y9a-y9e = 0.4*(y9b-y9e);
+ x9a = x1; x9c = good.x 0.71[x4, x6];
+ x9b = x9d = 0.5[x9a, x9c];
+ draw z9a up_to_left z9b...z9c down_to_right
+ z9d right_to_up z9a;
+ labels(1, 2, 3, 4, 5, 6, 7, 8, 9a, 9b, 9c, 9d);
+ math_fit(0, 0);
+endchar;
+
+skewchar=oct"060"; skew#=.5u#;
+
+ligtable cal_reverse_apostrophe: cal_reverse_apostrophe=: cal_opening_quotes;
+ligtable cal_apostrophe: cal_apostrophe=: cal_closing_quotes;
+ligtable "!": cal_reverse_apostrophe =: call_spanish_shriek;
+ligtable "?": cal_reverse_apostrophe =: call_spanish_query;
+ligtable "<": "<" =: call_laquo;
+ligtable ">": ">" =: call_raquo;
+
+ligtable "-" : "-" =: oct"173";
+ligtable oct"173" : "-" =: oct"174";
+
+ligtable "I": "T": "V": skewchar kern skew#;
+ligtable "D": "R": "U": "W": "Y": skewchar kern 3skew#;
+ligtable "E": "G": "O": "Q": skewchar kern 4skew#;
+ligtable "B": "C": "L": "S": "X": "Z": skewchar kern 5skew#;
+ligtable "J": skewchar kern 6skew#;
+ligtable "A": skewchar kern 7skew#;
+
+ligtable "F": skewchar kern 4skew#,
+"a" kern -2u#, "e" kern -2u#, "o" kern -2u#, "r" kern -u#;
+
+ligtable "H": skewchar kern 4skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "K": skewchar kern 2skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "M": skewchar kern 5skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#, "r" kern -u#;
+
+ligtable "N": skewchar kern 3skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "P": skewchar kern 3skew#,
+"a" kern -u#, "e" kern -u#, "o" kern -u#;
+
+ligtable "f": "a" kern -0.5u#, "e" kern -0.5u#, "o" kern -0.5u#;
+ligtable "h": "m": "n": "t": "x":
+"a" kern -0.25u#, "e" kern -0.25u#, "o" kern -0.25u#,
+"d" kern -0.25u#, "g" kern -0.25u#, "q" kern -0.25u#;
+ligtable "o": "x" kern -0.25u#;
+
+endinput.