% phonetic characters cmchar "schwa"; newchar(schwa,7.25u#+max(.75u#,.5curve#),body_height#,0); italcorr .5[bar_height#,x_height#]*slant+.5min(curve#-1.5u#,0); r_adjust_fit(if monospace: .25u#,.5u# else: 0,0 fi); numeric left_curve,right_curve; h:=x_height; left_curve=right_curve+6stem_corr=curve if not serifs: -3stem_corr fi; if right_curve75: 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 x77=.5w; y77=.5h; flip(77); endchar; cmchar "The letter eng"; newchar(eng,10u#,x_height#,desc_depth#); italcorr .5[bar_height#,x_height#]*slant-serif_fit#+.5stem#-2u#; adjust_fit(serif_fit#+stem_shift#,serif_fit#-stem_shift#); pickup tiny.nib; pos1(stem,0); pos2(stem,0); numeric shaved_stem; shaved_stem=hround(stem-2stem_corr); pos1'(shaved_stem,0); pos2'(shaved_stem,0); pos3(stem,0); lft x1l=hround(2.5u-.5stem); x1l=x1'l=x2l=x2'l; x3=w-x1; top y1=h+min(oo,serif_drop); bot y2=0; y1=y1'; y2=y2'; filldraw stroke z1'e--z2'e; % left stem h_stroke(2,a,3,4); % arch and right stem if serifs: sloped_serif.l(1',2',b,1/3,jut,serif_drop); % upper left serif numeric inner_jut; pickup tiny.nib; if rt x2r+jut+.5u+1<=lft x4l-jut: inner_jut=jut; else: rt x2r+jut+.5u+1=lft x4l-inner_jut; fi dish_serif(2,1,c,1/3,jut,d,1/3,jut); % lower left serif fi x22=x4; bot y22=-1/3d; pos22(stem',0); filldraw stroke z4e--z22e; if serifs: pickup tiny.nib; pos55(vair,-90); pos66(hair,-180); pos77(flare,-180); x55=.5[x22,x66r]; bot y55r=-d-oo; y66-.5flare=-.88d; if monospace: lft x66r=4u else: z66r=z77r; rt x77l=floor 4.5u fi; (x,y55r)=whatever[z55l,z22l]; x55r:=max(x,.5[x66r,x55]); filldraw stroke z22e{down}...z55e{left}; bulb(55,66,77); % arc and bulb else: pickup fine.nib; pos22'(stem',0); z22'=z22; pos66(.2[vair,stem'],-90); pos77(vair,-90); lft x77r=hround 3.5u; bot y77r=vround 5/6(-d-oo); (x,y77l)=whatever[z77r,z3]; x77l:=x; z55r=z22'r; (x22'l,y55l)=whatever[z77l,z55r]; x55l=x22'l; y55=y55r; x66r=.5[x77r,x55r]; x66l:=.5[x77l,x55l]; bot y66r=-d-oo; filldraw stroke z22'e..{down}z55e & super_arc.e(55,66) & z66e{left}..z77e; fi % arc and terminal 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=.5[x1,x4]; x7=.5[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;