% phonetic characters cmchar "The letter schwa"; newchar("schwa",8u#,x_height#,0); italcorr max(1/3x_height#*slant,x_height#*slant+.5(.2[hair#,stem#])-u#); adjust_fit(0,0); pickup fine.nib; numeric heavy_hair; heavy_hair=hround .2[hair,stem]; pos0(vair,-90); pos1(heavy_hair,0); pos2(vair,90); pos3(curve,180); pos4(vair,270); pos5(hair,320); x0=rt x3l; rt x1r=hround(w-1.5u+.5heavy_hair); x2=x4=.5(w+u); lft x3r=hround(1.5u-.5curve); x5r=good.x(w-eps); x6=x5; y0=y3=y6=bar_height; y1=.5[y0,y2]; top y2r=h+oo; bot y4r=-oo; top y5l=vround .5bar_height; path p; p=z4{right}..z5..z6; filldraw stroke z0e{right}...z1e{up}...pulled_arc.e(2,3) & pulled_arc.e(3,4)...{direction 1 of p}z5e; % arc x77=.5w; y77=.5h; flip(77); math_fit(-.3x_height#*slant+.5curve#-u#,ic#); penlabels(0,1,2,3,4,5,6); endchar; cmchar "The letter open o"; newchar("openo",8u#,x_height#,0); italcorr if math_fitting:1/3x_height#*slant else:x_height#*slant-u# fi; adjust_fit(0,0); pickup fine.nib; pos0(flare,0); pos1(hair,0); pos2(vair,90); pos3(curve,180); pos4(vair,270); pos5(hair,320); x2=x4=.5(w+u); rt x1r=max(rt x2,hround(w-u))+eps; lft x3r=hround(1.5u-.5curve); x5r=good.x(w-eps); x6=x5; y1=.5[bar_height,h]; top y2r=h+oo; bulb(2,1,0); % bulb bot y4r=-oo; y3=.5[y2,y4]; top y5l=vround .5bar_height; y6=bar_height; path p; p=z4{right}..z5..z6; filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)...{direction 1 of p}z5e; % arc x99=.5w; y99=.5h; flip(99); math_fit(-.3x_height#*slant+.5curve#-u#,ic#); penlabels(0,1,2,3,4,5,6); endchar; cmchar "The letter open oe"; newchar("openoe",11.5u#,x_height#,0); italcorr if math_fitting:1/3x_height#*slant else:x_height#*slant-u# fi; adjust_fit(0,0); pickup fine.nib; w:=7u; pos0(flare,0); pos1(hair,0); pos2(vair,90); pos3(curve,180); pos4(vair,270); pos5(hair,320); x2=x4=.5(w+u); rt x1r=max(rt x2,hround(w-u))+eps; lft x3r=hround(1.5u-.5curve); x5r=good.x(w-eps); x6=x5; y1=.5[bar_height,h]; top y2r=h+oo; bulb(2,1,0); % bulb bot y4r=-oo; y3=.5[y2,y4]; top y5l=vround .5bar_height; y6=bar_height; path p; p=z4{right}..z5..z6; filldraw stroke pulled_arc.e(2,3) & pulled_arc.e(3,4)...{direction 1 of p}z5e; % arc x99=.5w; y99=.5h; flip(99); z83=z3 rotatedabout(z99,180); w:=11.5u; y83:=bar_height; forsuffixes $=hair,stem: shaved$:=mfudged$; save $; $=shaved$; endfor numeric heavy_hair; heavy_hair=hround .2[hair,stem]; pos80(vair,-90); pos81(heavy_hair,0); pos82(vair,90); pos83(stem,180); pos84(vair,270); pos85(hair,320); x80=rt x83l; rt x81r=hround(w-1.5u+.5heavy_hair); x82=x84=.5(w+6u); x85r=good.x(w-.5u); x86=x85; y80=y86=y83; y81=.5[y80,y82]; top y82r=h+oo; bot y84r=-oo; top y85l=vround(.5bar_height+.5); path p; p=z84{right}..z85..z86; filldraw stroke z80e{right}...z81e{up}...pulled_arc.e(82,83) & pulled_arc.e(83,84)...{direction 1 of p}z85e; % arc of e math_fit(-.3x_height#*slant+.5curve#-u#,ic#); endchar; cmchar "The letter eng"; newchar("eng",10u#,x_height#,desc_depth#); italcorr 1/3x_height#*slant+.5hair#+.5u#; adjust_fit(0,0); pickup fine.nib; x0=0; x1=x2; pos2(stem,0); lft x2l=hround(2.5u-.5stem); y2-.5stem=-oo; hook_in(0,a,1); % opening hook filldraw circ_stroke z2e--z1e; % left stem x4+.5stem=hround(w-2.5u+.5stem); x5=x4; ital_arch(2,3,4); % arch y5=0; pos5(stem,0); filldraw stroke z4e--z5e; % right stem l_tail(5,q); math_fit(-2/3x_height#*slant+.5hair#+.5u#,ic#); penlabels(0,a,1,2,3,4,5,6,7); endchar; cmchar "esh"; newchar("esh",max(1.5u#,stem#)+max(3.5u#,2flare#)+2u#,body_height#,desc_depth#); italcorr body_height#*slant+.75u#; adjust_fit(if monospace:u#,u# else: .5u#,.5u# fi); pickup fine.nib; numeric theta; z88=(.5w,h); z89=(.5w,-d); theta=angle(z88-z89); pos0(flare,0); pos1(hair,0); pos2(vair,90); pos3(.5[hair,stem],180); pos4(stem,theta+90); pos5(stem,theta-90); pos6(.5[hair,stem],0); pos7(vair,-90); pos8(hair,-180); pos9(flare,-180); rt x1r=hround(w+.25u); lft x8r=hround-.35u; x2=.6[x1,x4]; x7=.6[x8,x5]; y9-.5flare=vround -.85d; y2-y0=y9-y7; top y2r=h+oo; bot y7r=-d-oo; y4=.25[x_height,h]; y5=.5[-d,y4]; z4=whatever[z88,z89]; z5=whatever[z88,z89]; x3=.8[x2+x4-x88,x88]; x6=.8[x7+x5-x89,x89]; y3=.8[y4,y2]; y6=.8[y5,y7]; bulb(2,1,0); bulb(7,8,9); % bulbs filldraw stroke z2e{left}...z3e...{z89-z88}z4e; % upper arc filldraw z4r--z5l--z5r--z4l--cycle; % stem filldraw stroke z5e{z89-z88}...z6e...{left}z7e; % lower arc pickup crisp.nib; % pos20(bar,90); pos21(bar,90); % top y20r=top y21r=x_height; % lft x20=lft x4r-.5stem-u; rt x21=rt x4l+.5stem+1.5u; % filldraw stroke z20e--z21e; % crossbar math_fit(desc_depth#*slant+u#,x_height#*slant); penlabels(0,1,2,3,4,5,6,7,8,9,88,89); endchar; cmchar "d-yogh ligature"; newchar("dyogh",15u#+serif_fit#,asc_height#,desc_depth#); italcorr asc_height#*slant-serif_fit#+.5stem#-2u#; adjust_fit(0,serif_fit#); % first, the yogh h:=x_height; w:=9u; numeric arm_thickness[],z_stem,mid_thickness,bot_thickness; if hefty: arm_thickness1=Vround(vair-vair_corr); arm_thickness2=vair; z_stem=.6[vair,stem]; else: arm_thickness1=vair; arm_thickness2=vair'; z_stem=.9[vair,stem]; fi pickup tiny.nib; rt x1r=rt x2r=hround(w-.8u); lft x3l=lft x4l=hround .5u; top y1=h; y2=min(y1,h-2/3arm_thickness1); bot y4=0; y3=max(y4,2/3arm_thickness2); numeric alpha; alpha=diag_ratio(1,z_stem-tiny,y2-y3,x2r-x3l-slant*(y2-y3)); penpos1(alpha*(z_stem-tiny),0); penpos2(alpha*(z_stem-tiny),0); penpos3(alpha*(z_stem-tiny),0); penpos4(alpha*(z_stem-tiny),0); z21=.6[z1,z3]; penpos21(alpha*(z_stem-tiny),0); %UW_HACC pair delta; delta=penoffset z3-z2 of currentpen; % fill top lft z1l--z2l+delta---z3l+delta..lft z3l---lft z4l..bot z4l % ---bot rt z4r--z3r-delta---z2r-delta..rt z2r---rt z1r..top z1r % ---cycle; % diagonal fill top lft z1l--z2l+delta---z21l+delta..lft z21l---z21r..rt z21r-delta ---z2r-delta..rt z2r---rt z1r..top z1r---cycle; % short diag pickup crisp.nib; pos5(arm_thickness1,90); pos6(hair,180); top y5r=h; x5=x1; lft x6r=hround 1.75u; y6=good.y(y5l-beak/1.4)-eps; arm(5,6,a,beak_darkness,-.4beak_jut); % upper arm and beak % pos7(arm_thickness2,-90); pos8(hair,0); % bot y7r=0; x7=x4; rt x8r=hround(w-.75u); y8=good.y(y7l+beak/1.2)+eps; % arm(7,8,b,beak_darkness,.6beak_jut); % lower arm and beak %% from here on all is UW_HACC bot_thickness:=max(fine.breadth,vround (slab-vair_corr)); mid_thickness:=max(fine.breadth,vround 2/3vair); bot y28=-desc_depth; x28=.45w; y27=0; rt x27r=rt x1r; pickup fine.nib; pos22(mid_thickness,90); lft x22l=lft x21l; y22=y21; pos27(cap_curve,0); pos28(bot_thickness,-90); % show mid_thickness,bot_thickness; % show z21,z21r,z21l,z22,z22r,z22l,z27,z27r,z27l,z28,z28r,z28l; if serifs: numeric bulb_diam[]; % bulb_diam1=flare+.5(cap_stem-stem); if monospace: bulb_diam2:=flare+cap_stem-stem else: bulb_diam2:=.5flare+cap_stem-stem fi; % pos0(bulb_diam1,180); pos1(hair,180); % lft x0r=hround 1.25u; y0=min(.9h-.5bulb_diam1,.75h+.5bulb_diam1); % bulb(2,1,0); % upper bulb pos30(bulb_diam2,-180-angle(x1-x4,y1-y4)); pos29(cap_hair,-180); lft x30r=hround .75u; y30=-.5bulb_diam2; % bulb(28,29,30); % lower bulb else: pos29(bot_thickness,angle(-2u,-h)); lft x29r=hround .75u; top y29l= -o; y29r:=good.y y29r-eps; x29l:=good.x x29l; z30=z29; pos30(bot_thickness,angle(-2u,-h)); % filldraw stroke term.e(2,1,left,1,4); % upper terminal % filldraw stroke term.e(28,29,left,1,4); fi % lower terminal filldraw stroke pulled_super_arc.e(22,27)(.5superpull) & pulled_super_arc.e(27,28)(.5superpull) & pulled_super_arc.e(28,30)(.5superpull); picture V; V:=currentpicture; clearit; clearxy; % w:=10u; h:=asc_height; d:=0; pickup tiny.nib; pos1(stem',0); pos2(stem,0); pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2; rt x1r=hround(w-2.5u+.5stem'); top y1=h; numeric edge; edge=lft x2l; pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0); pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360); lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),1/3[lft x2,edge]); y3=1/8[bar_height,x_height]; x4l=.5(w-serif_fit)-.3u; top y4r=x_height+oo; lft x5r=hround max(1.35u-.5curve,.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:=max(x,.5[x5r,x4]); (x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]); filldraw stroke z3e{up}...pulled_arc.e(4,5) & pulled_arc.e(5,6)...{up}z7e; % bowl y0=ypart(((edge,h)--(edge,0))intersectionpoint(z3l{up}...{left}z4l)); pickup tiny.nib; bot y2=if serifs:-min(oo,serif_drop) else: 0 fi; filldraw stroke z1e--z0'e--z0e--z2e; % stem if serifs: sloped_serif.l(1,0',a,1/3,jut,serif_drop); % upper serif sloped_serif.r(2,0,b,1/3,jut,min(oo,serif_drop)); fi % lower serif numeric shiftval; shiftval=x2-1.5u; addto currentpicture also V shifted(shiftval,0); penlabels(0,1,2,3,4,5,6,7); endchar; cmchar "Variant letter a"; newchar("fata",10u#+serif_fit#,x_height#,0); italcorr x_height#*slant-serif_fit#+.5stem#-2u# if serifs:+.5u# fi; adjust_fit(0,serif_fit# if serifs: -.5u# fi); pickup tiny.nib; pos1(stem',0); pos2(stem,0); pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2; rt x1r=hround(w-2.5u+.5stem'); numeric edge; edge=lft x2l; path edge_path; edge_path=(edge,h)--(edge,0); pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0); pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360); lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height; x4l=.5(w-serif_fit)-.3u; top y4r=x_height+oo; lft x5r=hround max(1.35u-.5curve,.6u); y5=.5x_height; x6l=x4l-.2u; bot y6r=vround 1/3vair; lft x7l=edge; y7=min(y3,y6+y4-y3+.6vair); (x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]); (x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]); filldraw stroke z3e{up}...{left}z4e&super_arc.e(4,5) &super_arc.e(5,6)&z6e{right}...{up}z7e; % bowl y1=ypart(edge_path intersectionpoint(z3l{up}...{left}z4l)); y0=ypart(edge_path intersectionpoint(z7l{down}...{left}z6l)); pickup tiny.nib; bot y2=0; filldraw stroke z1e--z0'e--z0e--z2e; % stem if serifs: sloped_serif.r(2,1,b,1/3,jut,min(oo,serif_drop)); fi pickup crisp.nib; pos8(hround(hair-stem_corr),0); pos7'(stem',0); z7'=z1; x8r=x7'r; top y8=h+oo; filldraw stroke z7'e--z8e; % point penlabels(0,1,2,3,4,5,6,7,8); endchar; cmchar "turned Variant letter a"; newchar("tfata",10u#+serif_fit#,x_height#,0); italcorr x_height#*slant-serif_fit#+.5stem#-2u# if serifs:+.5u# fi; adjust_fit(0,serif_fit# if serifs: -.5u# fi); pickup tiny.nib; pos1(stem',0); pos2(stem,0); pos0'(stem',0); pos0(stem,0); z0r=z0'r; x0'=x1; x0=x2; rt x1r=hround(w-2.5u+.5stem'); numeric edge; edge=lft x2l; path edge_path; edge_path=(edge,h)--(edge,0); pickup fine.nib; pos3(if hefty:thin_join else: hair fi,0); pos4(vair,90); pos5(curve,180); pos6(vair,270); penpos7(x3r-x3l,360); lft x3l=min(lft x3l-(rt x3r-tiny.rt x2r),2/3[lft x2,edge]); y3=bar_height; x4l=.5(w-serif_fit)-.3u; top y4r=x_height+oo; lft x5r=hround max(1.35u-.5curve,.6u); y5=.5x_height; x6l=x4l-.2u; bot y6r=vround 1/3vair; lft x7l=edge; y7=min(y3,y6+y4-y3+.6vair); (x,y4r)=whatever[z3l,z4l]; x4r:=max(x,.5[x5r,x4]); (x',y6r)=whatever[z7l,z6l]; x6r:=max(x',.5[x5r,x6]); filldraw stroke z3e{up}...{left}z4e&super_arc.e(4,5) &super_arc.e(5,6)&z6e{right}...{up}z7e; % bowl y1=ypart(edge_path intersectionpoint(z3l{up}...{left}z4l)); y0=ypart(edge_path intersectionpoint(z7l{down}...{left}z6l)); pickup tiny.nib; bot y2=0; filldraw stroke z1e--z0'e--z0e--z2e; % stem if serifs: sloped_serif.r(2,1,b,1/3,jut,min(oo,serif_drop)); fi pickup crisp.nib; pos8(hround(hair-stem_corr),0); pos7'(stem',0); z7'=z1; x8r=x7'r; top y8=h+oo; filldraw stroke z7'e--z8e; % point x77=.5w; y77=.5h; flip(77); penlabels(0,1,2,3,4,5,6,7,8); endchar;