%%
%% This is file `imaju.mf',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% inslrmaj.dtx  (with options: `maj')
%% 
%%  Copyright 1999 Peter R. Wilson
%% 
%%  This program is provided under the terms of the
%%  LaTeX Project Public License distributed from CTAN
%%  archives in directory macros/latex/base/lppl.txt.
%% 
%% Author: Peter Wilson (CUA)
%%         now at: peter.r.wilson@boeing.com
%% 

cmchar "IMAJ letter A";
beginchar("A", 2sb#+caprat*hstretch*(5/3x_height#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
path pth[];
pickup quill;
%% left bowl
n1 := w-2pcshiftx;  % actual letter width
n2 := 7/10n1;       % width of left bowl
z1=(pcshiftx,0);
obowl(1, n2, h);
pth1:=obouter; pth2:=obinner;
pth10:=obfirst; pth20:=obsecond;
%% right bowl
n3:=x1+n2-16/12thick;    % leftmost point of "stem"
n4:=2(n1-n3);            % total width of right stem bowl
z2=(n3,0);
offsetbowl(2, n4, h, 6/12, 1/2);
pth3:=obouter; pth4:=obinner;
pth30:=obfirst; pth40:=obsecond;
%% intersect left bowl with outer of right bowl
z1tout = (subpath (0,1) of pth1) intersectionpoint (subpath (4,2) of pth3);
z1tinn = (subpath (0,1) of pth2) intersectionpoint (subpath (4,2) of pth3);
z1lout = (subpath (1,2) of pth1) intersectionpoint (subpath (4,2) of pth3);
z1linn = (subpath (1,2) of pth2) intersectionpoint (subpath (4,2) of pth3);

%%ductus:=true;
if ductus:
  pickup stylus;
  % draw the control paths
  draw pth10; draw pth20;
  draw pth30; draw pth40;
else:
  %%  draw left bowl
  fill z1lout..z1minro{-pdir}..z1maxlo{ppdir}..z1minlo{pdir}..z1tout--
       z1tinn..z1minli{-pdir}..z1maxli{-ppdir}..z1minri{pdir}..z1linn--
       cycle;
  %% draw right stem/bowl
  fill z2minro{-pdir}..z2maxlo{ppdir}..{pdir}z2minlo--
       z2minli{-pdir}..z2maxli{-ppdir}..{pdir}z2minri--cycle;
fi
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,100);
endchar; % end "A"

cmchar "IMAJ letter B";
beginchar("B", 2sb#+caprat*hstretch*(7/6x_height#),
               caprat*asc_height#, 0);
adjust_fit(0,0);
numeric n[];
pcshiftx := sb;
pickup quill;
n1:=w-2pcshiftx;    % actual letter width
n2:=h/ascratio;    % top of bowl
z1=(pcshiftx, -o);
obowl(1, n1, n2+o);
%% draw bowl
fill obouter; unfill obinner;
%% top of stem
x2=x1wt+1/3n1; top y2=h;
tangentpoint(2, subpath (3,4) of obsecond);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw z2tan--z2;
draw_triserif(2,trijut);
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,100);
endchar; % end "B"

cmchar "IMAJ letter C";
beginchar("C", 2sb#+caprat*hstretch*(5/6x_height#),
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
pcshiftx := sb;
pickup quill;
n1:=w-2pcshiftx;     % actual letter width
n2:=6/5w-2pcshiftx;  % width of full bowl
z1=(pcshiftx,0);
obowl(1, n2, h);
z3=(x1+n1, h);                % top RH corner
z4=(x1obc,1/6h); z5=(3/2w,y4);   % for horizontal line
%% top intersection points
z10i = (z1obc--z3) intersectionpoint obinner;
z10o = (z1obc--z3) intersectionpoint obouter;
%% bottom intersection points
z20i = (z4--z5) intersectionpoint obinner;
z20o = (z4--z5) intersectionpoint obouter;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
fill z20o..z1minro{-pdir}..z1maxlo{ppdir}..z1minlo{pdir}..z10o--
     z10i..z1minli{-pdir}..z1maxli{-ppdir}..z1minri{pdir}..z20i--
     cycle;
ductus:=false;
penlabels(1,2,3,4,5,6,16,17,18,100);
endchar; % end "C"

cmchar "IMAJ letter D";
beginchar("D", 2sb#+caprat*hstretch*(x_height#+1/2thick#),
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
pcshiftx := sb;
pickup quill;
%% bowl
n1 := w-2pcshiftx;    % actual letter width
n2 := n1-1/2thick;    % width of bowl
n3 := h;              % top of bowl
z1=(w-pcshiftx-n2, 0);
obowl(1, n2, n3);
%% top bar
lft x3=pcshiftx; y3=h;
z3i=(pcshiftx, y3-1/2thin); z3o=(x3i,y3i+thin);
z2i=(x1nh,y3i);
z2o=(x2i,y3o);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
fill z1minlo{-pdir}..z1maxlo{-ppdir}..z1minro{pdir}..z1maxro{ppdir}..{left}z2o--
     z3o--z3i--
     z2i{right}..z1maxri{-ppdir}..z1minri{-pdir}..z1maxli{ppdir}..{pdir}z1minli--
     cycle;
draw_utriangle(3, thick);
ductus:=false;
penlabels(0,1,2,3,4,5,6,7,8,100);
endchar; % end "D"

cmchar "IMAJ letter E";
beginchar("E", sb#+caprat*hstretch*(x_height#+3/2thick#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
n1 := w-pcshiftx;    % actual letter width
n2 := n1-3/2thick;   % width of bowl
z1=(pcshiftx,0);
obowl(1, n2, h);
%% for crossbar
z2=(0,2/3h); rt x3=w; y3=y2; z3'=(x1obc,y2);
z4 = (z2--z3') intersectionpoint subpath (3,4) of obsecond;
z10tout = (z3'--z3) intersectionpoint subpath (0,3) of obouter;
z10tinn = (z3'--z3) intersectionpoint subpath (0,3) of obinner;
%% bottom cutoff
z5=(x1obc,1/6h); z6=(w,y5);
z20bout = (z5--z6) intersectionpoint subpath (0,3) of obouter;
z20binn = (z5--z6) intersectionpoint subpath (0,3) of obinner;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
fill z20bout..z1minro{-pdir}..z1maxlo{ppdir}..z1minlo{pdir}..z10tout--
     z10tinn..z1minli{-pdir}..z1maxli{-ppdir}..z1minri{pdir}..z20binn--
     cycle;
draw z4--z3;     % crossbar & decoration
draw_triangle(3,thick);
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,100);
endchar; % end "E"

cmchar "IMAJ letter F";
beginchar("F", 2sb#+caprat*hstretch*(x_height#+trijut#),
               caprat*(x_height#), caprat*desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
%% stem
lft x1=lft x2=pcshiftx+trijut;
top y1=h; bot y2=-d;
%% bottom bar
z4=(rt x1,-thin); rt x6=w-pcshiftx; y6=y4+2thin; z5=1/2[z4,z6];
%% top bar
z7=(rt x1, bot y1);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);            % stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, clubjut);
draw z4{dir(45)}..z5{right}..z6{dir(45)};   % bottom bar
draw_flick(7, 2thin, thin, (w-pcshiftx-x7+1/2thick)); % top bar
ductus:=false;
penlabels(1,2,3,4,5,6,7,100);
endchar; % end "F"

cmchar "IMAJ letter G";
beginchar("G", 2sb#+caprat*hstretch*(5/3x_height#),
               caprat*x_height#, caprat*desc_depth#);
adjust_fit(0,0);
path pth[];
pair vec[];
pcshiftx := sb;
pickup quill;
%% top bar
lft x1=pcshiftx; y1=h; rt x2=w-pcshiftx; y2=h;
%% curves
z3=2/5[z1,z2];
x5=4/5[x1,x2]; y5=-1/2d;
x4=(x3-thick); y4=1/2[y5,y3];
x7=1/2[x1,x4]; y7=y5;
x6=2/3[x7,x5]; bot y6=-d;
pth1 := z3..z4{down}..z5;
pth2 := z5--z6{left}..z7;
%% diagonal to close bottom bowl
vec1 := direction 2 of pth2;
vec2 := (z5-z6);
z7'=(lft x7, bot y7); z7''=(rt x7, y7);
pickup thickstylus;
lft x8 = x7'; bot y8 = y7';
z9' = z8 shifted 2vec2;
z9 = (z8--z9') intersectionpoint pth1;
z7''' = z7'' shifted 2vec1;
z8' = whatever[z7'',z7'''] = whatever[z8,z9'];
%%ductus:=true;
if ductus:
  pickup stylus;
  draw z1--z2;               % top bar
  draw pth1; draw pth2;      % curves
  draw rt z8--z9;            % diagonal
else:
  pickup quill;
  draw z1--z2;               % top bar
  draw_triangle(2,thick);
  draw_utriangle(1,thick);
  draw pth1; draw pth2;      % curves
  pickup thickstylus;
  draw rt z8--z9;            % diagonal
  fill z7''--z8'--z8--cycle;
fi
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,100);
endchar; % end "G"

cmchar "IMAJ letter H";
beginchar("H", 2sb#+caprat*hstretch*(x_height#+trijut#),
               caprat*asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
numeric n[];
%% stem
lft x1=lft x2=pcshiftx+trijut;
top y1=h; bot y2=0;
%% bowl
rt x3 = lft x1; y3=0;
n1 := w-pcshiftx-x3;     % bowl width
n2 := h/ascratio;        % bowl height
obowl(3, n1, n2);
z1'=(rt x1, y1); z2'=(x1',y2); %% right hand side of stem
z10tout = (z1'--z2') intersectionpoint subpath (3,4) of obouter;
z10tinn = (z1'--z2') intersectionpoint subpath (3,4) of obinner;
z10toth = (x1, y10tinn);    % avoids 180 turn in path
z6 = directionpoint down of obsecond;  % top of right leg
z6i=(lft x6, bot y6); z6o=(rt x6, bot y6);
z8=(x6,0);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);                       % stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, clubjut);
draw_tstem(6,8,srad);                       % right leg
draw_clubbase(6, 8, 1/3, 0, 1/2clubjut);
fill z6i{up}..z3minli{-pdir}..z10tinn--z10toth--  % top of bowl
     z10tout..z3minlo{pdir}..{down}z6o--cycle;
ductus:=false;
penlabels(1,2,3,4,5,6,100);
endchar; % end "H"

cmchar "IMAJ letter I";
beginchar("I", 2sb#+caprat*hstretch*(thick#+trijut#+jut#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
lft x1=lft x2=pcshiftx+trijut;
top y1=h; bot y2=0;
%%ductus:=true;
draw_tstem(1,2,srad);
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, clubjut);
ductus:=false;
penlabels(1,2,100);
endchar; % end "I"

cmchar "IMAJ letter J";
beginchar("J", sb#+caprat*hstretch*(2/3x_height#),
               caprat*x_height#, caprat*desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% stem
rt x1 = w-pcshiftx; top y1 = h;
x2=x1; y2=-1/2d;
%% bottom hook
lft x3 = 0; bot y3 = -d;
%% triangle
n1 := thick;       % side length
z6=(lft x3, bot y3);
x7=x6+n1; z7=whatever[z6,z2];
z8=1/2[z6,z7];
z9=(x8, y8+0.9n1);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw z1--z2;               % stem
draw_triserif(1,trijut);
draw z2--z3;               % hook
fill z6--z7--z9--cycle;    % triangle
ductus:=false;
penlabels(1,2,3,100);
endchar; % end "J"

cmchar "IMAJ letter K";
beginchar("K", 2sb#+caprat*hstretch*(x_height#+trijut#),
               caprat*x_height#, caprat*desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
%% stem
lft x1=lft x2=pcshiftx+trijut;
top y1=h; bot y2=-d;
%% top arm
z3=(x1,5/6h);
rt x5=w-pcshiftx; y5=2/3h;
x4=1/2[x3,x5]; top y4=h;
%% lower arm
x7=x5; bot y7=0;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);            % stem
draw_triserif(1,trijut);
draw_clubbase(1,2,1/3, clubjut, clubjut);
draw z3..z4{right}..z5;          % upper arm
draw z3..{right}z7;              % lower arm
ductus:=false;
penlabels(1,2,3,4,5,100);
endchar; % end "K"

cmchar "IMAJ letter L";
beginchar("L", 2sb#+caprat*hstretch*(7/6x_height#),
               caprat*asc_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
lft x2=pcshiftx; y2=1/5h;
x1=x2+trijut; top y1=h;
rt x4=w-pcshiftx; y4=1/5h;
x3=1/2[x2,x4]; bot y3=0;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw z1{down}..z2..z3{right}..z4;
draw_triserif(1,trijut);
ductus:=false;
penlabels(1,2,3,4,100);
endchar; % end "L"

cmchar "IMAJ letter M";
beginchar("M", 2sb#+caprat*hstretch*(5/3x_height#+trijut#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
path pth[];
pickup quill;
%% left stem
lft x1=pcshiftx+trijut; top y1=h;
x2=x1; bot y2=0;
z1'=(rt x1, y1+h); z2'=(rt x2, y2-h);
%% right stem
rt x5=w-pcshiftx; y5=y1;
z6=(x5,0);
%% middle stem
z3=1/2[z1,z5]; z4=1/2[z2,z6];
z3'=(rt x3, y3); z4'=(rt x4, y4);
n1 := x4-x2+3/2thick;       % width of bowl
n2 := 2/3h;                 % height of bowl
%% left bowl
z7=(rt x4 - n1, h-n2);
obowl(7, n1, n2);
pth1 := obouter; pth2 := obinner; pth3 := obsecond;
z17tout = (z1'--z2') intersectionpoint subpath (3,4) of obouter;
z17tinn = (z1'--z2') intersectionpoint subpath (3,4) of obinner;
z17toth = (x2, y17tinn);
%% right bowl
z8=(rt x6 - n1, y7);
obowl(8, n1, n2);
pth5 := obouter; pth6 := obinner; pth7 := obsecond;
z18tout = pth5 intersectionpoint subpath (0,1) of pth1;
z18tinn = pth6 intersectionpoint subpath (0,1) of pth1;
z13 = directionpoint down of pth3;
z15 = directionpoint down of pth7;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);                             % left half
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, clubjut);
fill z17tout..z7minlo{pdir}..{down}(rt x13, y13)--
     (lft x13, y13){up}..z7minli{-pdir}..z17tinn--z17toth--cycle;
draw_tstem(13,4,srad);                            % right half
fill z18tout..z8minlo{pdir}..{down}(rt x15, y15)--
     (lft x15, y15){up}..z8minli{-pdir}..z18tinn--cycle;
draw_tstem(15,6,srad);
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,14,100);
endchar; % end "M"

cmchar "IMAJ letter N";
beginchar("N", 2sb#+caprat*hstretch*(7/6x_height#+trijut#),
               caprat*x_height#, caprat*(1/2desc_depth#));
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
%% left stem
lft x1=pcshiftx+trijut; top y1=h;
x2=x1; bot y2=-d;
%% right stem
rt x3=w-pcshiftx; y3=y1;
z4=(x3,0);
%% bar
z5=(x1,1/3h); z6=(x4,1/6h);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);                % left stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, clubjut);
draw_tstem(3,4,srad);                % right stem
draw_clubbase(3, 4, 1/3, clubjut, clubjut);
draw z5--z6;                         % bar
ductus:=false;
penlabels(1,2,3,4,5,6,100);
endchar; % end "N"

cmchar "IMAJ letter O";
beginchar("O", 2sb#+caprat*hstretch*(7/6x_height#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
z5=(pcshiftx,-o);
obowl(5, w-2pcshiftx, h+2o);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
fill obouter; unfill obinner;
ductus:=false;
penlabels(1,2,3,4,5,100);
endchar; % end "O"

cmchar "IMAJ letter P";
beginchar("P", 2sb#+caprat*hstretch*(8/6x_height#+trijut#),
               caprat*x_height#, caprat*desc_depth#);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% stem
lft x1=lft x2=pcshiftx+trijut;
top y1=1/3h; bot y2=-d;
n1 := w - pcshiftx - lft x1;   % width of bowl
n2 := h+1/4d;                  % height of bowl
z3=(lft x1, -1/4d);
obowl(3, n1, n2);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);                         % stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, 0);
fill lft z1{up}..z3minlo{pdir}..z3maxro{-ppdir}..{-pdir}z3minro--
     z3minri{pdir}..z3maxri{ppdir}..z3minli{-pdir}..{down}rt z1--
     cycle;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,100);
endchar; % end "P"

cmchar "IMAJ letter Q";
beginchar("Q", 2sb#+caprat*hstretch*(x_height#+1/2trijut#),
               caprat*x_height#, caprat*(1/2desc_depth#));
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% right stem
rt x1=w-pcshiftx-1/2trijut; top y1=h;
x2=x1; bot y2=-d;
z3=(pcshiftx,0);
n1 := w;    % width of bowl
n2 := h;    % height of bowl
obowl(3, n1, n2);
z10o = (rt z1--rt z2) intersectionpoint subpath (0,1) of obouter;
z10i = (lft z1--lft z2) intersectionpoint subpath (0,1) of obinner;
z20o = (rt z1--rt z2) intersectionpoint subpath (1,2) of obouter;
z20i = (lft z1--lft z2) intersectionpoint subpath (1,2) of obinner;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);                              % stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, 0, clubjut);
fill z10o..z3minlo{-pdir}..z3maxlo{-ppdir}..z3minro{right}..z20o--
     z20i..z3minri{-pdir}..z3maxli{ppdir}..z3minli{pdir}..z10i--
     cycle;
ductus:=false;
penlabels(0,1,2,3,4,5,6,7,8,100);
endchar; % end "Q"

cmchar "IMAJ letter R";
beginchar("R", sb#+caprat*hstretch*(11/6x_height#+trijut#),
               caprat*x_height#, caprat*(1/2desc_depth#));
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% stem
lft x1=lft x2=pcshiftx+trijut; top y1=h; bot y2=-d;
n1 := w-pcshiftx;      % width of bowl
n2 := 5/6h;            % height of bowl
z3=(x1-1/2n1, h-n2);
obowl(3, n1, n2);
z10o=(x1,h);  z10i=(x1, y10o-thin);
z20o=(x1,y3); z20i=(x20o, y20o+thin);
%% arm
x4=x1; bot y4=y3;
x5=x3maxro; top y5=0;
%%rt x6=w; y6=y4;
rt x6=w; y6=y2;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);                     % stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, 0);
fill z10o{right}..z3maxro{-ppdir}..{left}z20o--
     z20i{right}..z3maxri{ppdir}..{left}z10i--cycle;
%%draw z4{right}..z5{right}..{right}z6;    % arm
draw z4{right}..{right}z6;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,100);
endchar; % end "R"

cmchar "IMAJ letter S";
beginchar("S", 2sb#+caprat*hstretch*(x_height#+trijut#),
               caprat*asc_height#, 0);
adjust_fit(0,0);
numeric n[];
pcshiftx := sb;
pickup quill;
%% stem
lft x1=lft x2=pcshiftx+trijut; top y1=h/ascratio; bot y2=0;
n1 := w;        % width of bowl
n2 := 2(h-y1);  % height of bowl
z3=(lft x1, y1-1/2n2);
obowl(3, n1, n2);
z4=(2w,2h);
z10o = (z3--z4) intersectionpoint subpath (0,1) of obouter;
z10i = (z3--z4) intersectionpoint subpath (0,1) of obinner;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);            % stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, clubjut, clubjut);
fill rt z1{up}..z3minli{pdir}..z10i--
     z10o..z3minlo{-pdir}..{down}lft z1--cycle;
ductus:=false;
penlabels(1,2,3,4,5,6,7,11,17,26,27,28,100);
endchar; % end "S"

cmchar "IMAJ letter T";
beginchar("T", 2sb#+caprat*hstretch*(4/3x_height#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% bar
lft x1 = pcshiftx; y1=h; rt x2=w-pcshiftx; y2=y1;
n1 := w;     % width of bowl
n2 := h;     % height of bowl
z3=(pcshiftx+thick,0);
obowl(3, n1, n2);
z5=(x1+w, 0);
z20o = (z1--z5) intersectionpoint subpath (1,2) of obouter;
z20i = (z1--z5) intersectionpoint subpath (1,2) of obinner;
z10o = (x3minlo, top y1);
z10i = (x3minlo, bot y1);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw z1--z2;           % bar
draw_utriangle(1, thick);
draw_triangle(2, thick);
fill z10o{left}..z3maxlo{-ppdir}..z3minro{pdir}..z20o--
     z20i..z3minri{-pdir}..z3maxli{ppdir}..z10i{right}--
     cycle;
ductus:=false;
penlabels(1,2,3,4,5,6,11,12,100);
endchar; % end "T"

cmchar "IMAJ letter U";
beginchar("U", 2sb#+caprat*hstretch*(7/6x_height#+1/2trijut#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
numeric n[];
pickup quill;
%% right stem
rt x1 = rt x2 = w-pcshiftx-1/2trijut;
y1=h; y2=0;
z1'=(x1-1/2thick,2h); z2'=(x1',-h);
%% bowl
n1 := w;       % width of bowl
n2 := 4/3h;    % height of bowl
z3=(pcshiftx,0);
obowl(3, n1, n2);
z4=(pcshiftx,h); z5=(w,y4);
z10o = (z4--z5) intersectionpoint subpath (3,4) of obouter;
z10i = (z4--z5) intersectionpoint subpath (3,4) of obinner;
z10'=1/2[z10o,z10i];
z10=(x10i,y1);
z20o = (z1'--z2') intersectionpoint subpath (1,3) of obouter;
z20i = (z1'--z2') intersectionpoint subpath (1,3) of obinner;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_tstem(1,2,srad);           % stem
draw_triserif(1,trijut);
draw_clubbase(1, 2, 1/3, 0, clubjut);
fill z10o..z3maxlo{-ppdir}..z3minro{pdir}..z20o--
     z20i..z3minri{-pdir}..z3maxli{ppdir}..z10i--cycle;
draw_triserif(10,trijut);       % serif on bowl
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,11,16,100);
endchar; % end "U"

cmchar "IMAJ letter V";
beginchar("V", 2sb#+caprat*hstretch*(x_height#+trijut#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
numeric midx; midx:= pcshiftx;
lft x1=midx+trijut; top y1=h;
x2=x1; y2=h/2;
rt x4=w-pcshiftx; y4=y2;
x3=0.5[x2,x4]; bot y3=0;
x5=x4-trijut; y5=y1;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_triserif(1,trijut);
%%draw_triserif(5,trijut);
draw z1--z2{down}..z3{right}..z4{up}..z5;
ductus:=false;
penlabels(1,2,3,4,5,11,100);
endchar; % end "V"

cmchar "IMAJ letter W";
beginchar("W", 2sb#+caprat*hstretch*(5/3x_height#+trijut#),
               caprat*x_height#, 0);
adjust_fit(0,0);
pcshiftx := sb;
pickup quill;
numeric midx; midx:= w/2-trijut;
lft x1=midx+trijut; top y1=h;
x2=x1; y2=h/2;
rt x4=w-pcshiftx; y4=y2;
x3=0.5[x2,x4]; bot y3=0;
x5=x4-trijut; y5=y1;
lft x6=pcshiftx+trijut;
top y6=h;
%%lft x7=pcshiftx; y7=y2;
x7=x6; y7=y2;
x8=0.5[x7,x1]; y8=y3;
x15=0.5[x8,x1]; y15=y8;
z15'=z15 shifted (w*pdir);
x2'=x2; y2'=y15;
path p[];
p1=z1--z2';
p2=z15--z15';
z9= p2 intersectionpoint p1;
pair vec[];
p3=z6..z7{down}..{right}z8;
vec3 = direction 0 of p3;
z16=z6 shifted vec3;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw_triserif(1,trijut);                      % right half
draw z1--z2{down}..z3{right}..z4{up}..z5;
draw_triserif(6,trijut);                      % left half
draw z6--z7{down}..z8{right}..z9;
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,11,16,100);
endchar; % end "W"

cmchar "IMAJ letter X";
beginchar("X", 2sb#+caprat*hstretch*(16/6x_height#),
               caprat*x_height#, caprat*desc_depth#);
adjust_fit(0,0);
numeric n[];
pcshiftx := sb;
pickup quill;
n1 := w-2pcshiftx;    % total width
n2 := thick;          % triangle side
%% diag top left to bottom right
lft x1=pcshiftx; bot y1=2/3h;
x2=pcshiftx+1/7n1; top y2=h;
x5=pcshiftx+11/14n1; bot y5=-1/4d;
rt x6=pcshiftx+n1; top y6=1/6h;
%% diag bottom left to top right
x10=x1; bot y10=-d;
x50=pcshiftx+9/14n1; top y50=h;
rt x60=x5; bot y60=2/3h;
x40=pcshiftx+8/14n1; y40=h;
%% triangle
z100=(lft x10, bot y10);
x101=x100+n2; z101=whatever[z100,z40];
x102=x100; y102=1/2[y100,y101]+n2;
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw z1..z2{right}..z5{right}..z6;    % top left to bottom right
draw z10{z40-z10}..z50{right}..z60;   % bottom left to top right
fill z100--z101--z102--cycle;         % triangle
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,100);
endchar; % end "X"

cmchar "IMAJ letter Y";
beginchar("Y", 2sb#+caprat*hstretch*(x_height#),
               caprat*x_height#, caprat*desc_depth#);
adjust_fit(0,0);
pcshiftx := u;
pickup quill;
%% main stroke
rt x1=w-pcshiftx; top y1=h;
lft x3=pcshiftx; y3=1/2h;
x4=x1; y4=0;
x2=2/3[x3,x1]; bot y2=h;
lft x5=1/2[x3,x4]; bot y5=-d;
%% arm
z101=1/2[z3,z4];
z103=(x1,y3);
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw z1..z2{left}..z3{down}..z4{down}..z5;  % main stroke
draw z101..z103{right};                     % arm
ductus:=false;
penlabels(1,2,3,4,5,6,7,8,9,10,100);
endchar; % end "Y"

cmchar "IMAJ letter Z";
beginchar("Z", 2sb#+caprat*hstretch*(9/6x_height#),
               caprat*x_height#, 0);
adjust_fit(0,0);
numeric n[];
pcshiftx := sb;
pickup quill;
%% top bar
n10 := w-2pcshiftx;   % letter width
lft x1=pcshiftx; y1=h;
rt x2=pcshiftx+2/3n10; y2=y1;
%% diagonal
x3=x1; bot y3=0;
%% bowl
n1 := 2/3n10;          % width of bowl
n2 := 5/6h;            % height of bowl
z4=(w-pcshiftx-n1, 0);
obowl(4, n1, n2);
z5'=(0,1/4n2); z6'=(x4obc,y5');
z20o = (z5'--z6') intersectionpoint obouter;
z20i = (z5'--z6') intersectionpoint obinner;
z7'=(0,2/3n2); z8'=(x6',y7');
z10o = whatever[lft z3, lft z2] = whatever[z7',z8'];
z10i = whatever[rt z3, rt z2] = whatever[z7',z8'];
%%ductus:=true;
if ductus:
  pickup stylus;
fi
draw z1--z2;              % top bar
draw_utriangle(1,thick);
draw z2--z3;              % diagonal
fill z20o..z4minro{pdir}..z4maxro{ppdir}..z4minlo{-pdir}..{z3-z2}z10o--
     z10i{z2-z3}..z4minli{pdir}..z4maxri{-ppdir}..z4minri{-pdir}..z20i--
     cycle;
ductus:=false;
penlabels(1,2,3,4,5,6,10o,10i,20o,20i,100);
endchar; % end "Z"

