%Boisik Latin letters in Roman form %(plus blackboard-bold and sans-serif variants for math only!) numeric bbs; bbs:=if cap_hair+eps>tiny-eps: 2 else 1 fi; %correction for BB letters charscription(14u,cap_height,0)( numeric alpha, right_stem, left_stem; lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0; x3l=.5w; top y3l=h+apex_o; left_stem=cap_hair; right_stem=cap_stem; alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l); pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); y4=y5=.35h; z1'l=z3l=z2'r; z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem]; z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; pos4(cap_bar,angle(z3'-z1r)); pos5(cap_bar,angle(z3'-z2l)); z4l=whatever[z1'r,z3']; z5l=whatever[z2'l,z3']; cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l); y3''=y1r.b if bold_face: -hair fi; z3''=whatever[z1r,z3']; filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)---z3l--- diag_serif(2r,3l)..{right}z2r.c..z2r.a{left}..z2r+ser_boule*up.. {left}z2l.a..{right}z2l.c..diag_serif(2l,3')---obl(5l,2l,4l)--- obl(4l,5l,1l)---z3'' ..z1r.c{right}.. z1r.a{left}..cycle; infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle; penlabels(1,1',2,2',3,3',4,5); labels(3''); ); iff known chars.latin_A: bskchar "The letter A"; beginchar(chars.latin_A,14u#,cap_height#,0); uni "0x0041"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_Aacute: bskchar "The letter A with acute"; beginchar(chars.latin_Aacute,14u#,Acc_height#,0); uni "0x00C1"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x2'l; acute(100,101).capital; endchar; iff known chars.latin_Agrave: bskchar "The letter A with grave"; beginchar(chars.latin_Agrave,14u#,Acc_height#,0); uni "0x00C0"; pickup tiny.nib; adjust_fit(cap_serif_fit#,cap_serif_fit#); usechar; x101=x3l+(x3l-x2'l); grave(100,101).capital; endchar; iff known chars.latin_Adoublegrave: bskchar "The letter A with doublegrave"; beginchar(chars.latin_Adoublegrave,14u#,Acc_height#,0); uni "0x0200"; pickup tiny.nib; adjust_fit(cap_serif_fit#,cap_serif_fit#); usechar; x102-x100=3u; .5[x101,x103]=x3l; d_grave(100,101,102,103,whatever).capital; endchar; iff known chars.latin_Aumlaut: bskchar "The letter A with umlaut"; beginchar(chars.latin_Aumlaut,14u#,Acc_height#,0); uni "0x00C4"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; .5[x100,x101]=x3l; x101-x100=2/3(x5-x4); umlaut(100,101); endchar; iff known chars.latin_Acircumflex: bskchar "The letter A with circumflex"; beginchar(chars.latin_Acircumflex,14u#,Acc_height#,0); uni "0x00C2"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x3l; circumflex(100,101,102).capital; endchar; iff known chars.latin_Acaron: bskchar "The letter A with caron"; beginchar(chars.latin_Acaron,14u#,Acc_height#,0); uni "0x01CD"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x1'r; bot y101l=cap_height+apex_o; hacek(100,101,102).capital; endchar; iff known chars.latin_Abreve: bskchar "The letter A with breve"; beginchar(chars.latin_Abreve,14u#,Acc_height#+apex_o#,0); uni "0x0102"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x1'r; x102-x100=5u; bot y101l=top cap_height+apex_o; breve(100,101,102).capital; endchar; iff known chars.latin_Ainvbreve: bskchar "The letter A with inverted breve"; beginchar(chars.latin_Ainvbreve,14u#,Acc_height#,0); uni "0x0202"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x1'r; x102-x100=5u; tieacc(100,101,102).capital; endchar; iff known chars.latin_Amacron: bskchar "The letter A with macron"; beginchar(chars.latin_Amacron,14u#,Acc_height#-.1x_height#,0); uni "0x0100"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; macron(100,101); endchar; iff known chars.latin_Atilde: bskchar "The letter A with tilde"; beginchar(chars.latin_Atilde,14u#,Acc_height#,0); uni "0x00C3"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101-x100=6u; bot y100=top y3l; tilde(100,101).capital; endchar; iff known chars.latin_Aring: bskchar "The letter A with ring"; beginchar(chars.latin_Aring,14u#,Acc_height#,0); uni "0x00C5"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x100=x3l; x100-x101=1.3u; ring(100,101).capital; endchar; iff known chars.latin_Adotabove: bskchar "The letter A with dot above"; beginchar(chars.latin_Adotabove,14u#,Acc_height#,0); uni "0x0226"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x100=x3l; dotabove(100); endchar; iff known chars.latin_A_BB: bskchar "The blackboard-bold letter A"; beginchar(chars.latin_A_BB,14u#,cap_height#,0); uni "0x1D538"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; numeric oblu.more; oblu.more:=2oblu; bot y100=y2r.c; z100=whatever[z3l,z2r]; infill ifobl(3',3l,2r,2l,,more)---obl(100,3l,2r.c)..z2r---obl(2l,2r,3')---cycle; labels(100); endchar; iff known chars.latin_Aogonek: bskchar "The letter A with ogonek"; beginchar(chars.latin_Aogonek,14u#,cap_height#,.85desc_depth#); uni "0x0104"; adjust_fit(0,0); pickup tiny.nib; numeric alpha, right_stem, left_stem; lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0; x3l=.5w; top y3l=h+apex_o; left_stem=cap_hair; right_stem=cap_stem; alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l); pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); pos6(stem,0); pos7(curve,0); pos8(hair,45); pos9(hair,160); y4=y5=.35h; z1'l=z3l=z2'r; z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem]; z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; pos4(cap_bar,angle(z3'-z1r)); pos5(cap_bar,angle(z3'-z2l)); z4l=whatever[z1'r,z3']; z5l=whatever[z2'l,z3']; cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l); y3''=y1r.b if bold_face: -hair fi; z3''=whatever[z1r,z3']; x6=x7l+1.5u=x2l.a; x8-x7l=3u; rt x9l=x8+1.5u; bot y6=0; y7=-.5d; bot y8l=-d; y9=-2/3d; filldraw z1l+ser_boule*up..{left}z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l-- diag_serif(2r,3l)..{right}z2r.c..z2r.a{left}..z2+ser_boule*up.. {left}z6r&z6r..z7r..z8r..{z6-z7}z9r..z9l{z7-z6}..z8l..z7l..{z6r-z7l}z6l..{right}z2l.c..diag_serif(2l,3')---obl(5l,2l,4l)--- obl(4l,5l,1l)---z3'' ..z1r.c{right}.. z1r.a{left}..cycle; infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle; penlabels(1,1',2,2',3,3',4,5,6,7,8,9); labels(3''); endchar; iff known chars.latin_A_SS: bskchar "The sans-serif letter A"; beginchar(chars.latin_A_SS,14u#,cap_height#,0); uni "0x1D5A0"; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; numeric alpha, right_stem, left_stem; lft x1l=2u; rt x2r=w-2u; bot y1l=bot y2r=0; x3l=.5w; top y3l=h+apex_o; left_stem=cap_hair; right_stem=cap_stem; alpha=diag_ratio(2,left_stem,y3l-y1l,x3l-x1l); pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); y4=y5=.35h; z1'l=z3l=z2'r; z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'-.25[cap_hair,cap_stem]; z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; pos4(cap_bar,angle(z3'-z1r)); pos5(cap_bar,angle(z3'-z2l)); z4l=whatever[z1'r,z3']; z5l=whatever[z2'l,z3']; cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_br_p(2r,.8); cap_serifs_bl(2l); y3''=y1r.b if bold_face: -hair fi; z3''=whatever[z1r,z3']; y100l=y100r=y101l=y101r=.5[y1l.b,y1]; z100l=whatever[z1l,z3l]; z100r=whatever[z1r,z4l]; z101l=whatever[z2l,z5l]; z101r=whatever[z2r,z3l]; oblu:=cap_bar; filldraw z100l---z3l---z101r..z2..z101l---obl(5l,2l,4l)---obl(4l,5l,1l)---z100r...z1...cycle; infill z3'r..z3'l---obl(4r,3'l,5r)---obl(5r,4r,3'r)---cycle; penlabels(1,1',2,2',3,3',4,5,100,101); labels(3''); endchar; charscription(13u,cap_height,0)( numeric tim[]; path p[]; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2u; pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0); pos6(.75cap_hair,90); pos7(ser_height,90); pos8(.7ser_height,270); pos9(cap_hair,270); pos10(.95cap_curve,180); x3=x7=x1r; y7=y6=com_height; rt x5r=w-u; y5=.45[y4,y6]; bot y3r=bot y4r=0; x6=.5[x7,x9]; x4=.5[x1r,x5l]; y8l+serif_o=y9l; top y9l=h+drop_stem; x8=x3; x9=.5[x6,x4]; x5-x10=.3cap_curve; y10=.45[y9,y6]; cap_serifs_tl(2l); cap_serifs_bl(1l); p0=z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r---z4r..z5r..z6r---z7; p1=z7l{dir90}..{right}z6l..z5l..{left}z4l..{up}z3l; p2=z2l.b{up}..{left}z2l.c..{right}z2l.a..z9l..z10l..z6---z7; p3=z7r{dir-90}..{right}z6r..z10r..z9r{left}..{down}z8r; z0=bsktouch(p0,2up,p2,2down); tim1=xpart(p0 intersectiontimes (z0--(x0,bar_height))); tim2=xpart(p2 intersectiontimes (z0--(x0,x_height))); filldraw subpath(0,rundy(p0,tim1).zpet) of p0 ..(reverse subpath(0,rundy(p2,tim2).zpet) of p2)--cycle; infill p1---cycle; infill p3---cycle; penlabels(0,1,2,3,4,5,6,7,8,9,10); ); iff known chars.latin_B: bskchar "The letter B"; beginchar(chars.latin_B,13u#,cap_height#,0); uni "0x0042"; italcorr .5[x_height#,cap_height#]*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; math_fit(0,.75ic#); endchar; iff known chars.latin_B_BB: bskchar "The blackboard-bold letter B"; beginchar(chars.latin_B_BB,13u#,cap_height#,0); uni "0x1D539"; italcorr .5[x_height#,cap_height#]*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; z102=bsktouch(subpath(3,4) of p2,bbs*dir-90,p3,dir60); z103=bsktouch(subpath(5,6) of p0,bbs*dir90,p1,dir-60); tim100-5=xpart(subpath(5,6) of p0 intersectiontimes (z103--(x103,y4r))); tim101-3=xpart(subpath(3,4) of p2 intersectiontimes (z102--(x102,y9l+5))); tim102=xpart(p3 intersectiontimes (z102--(x102,y10))); tim103=xpart(p3 intersectiontimes ((x0-hair-1,y0)--(x0-hair-1,y10))); tim104=xpart(p1 intersectiontimes ((x0-hair-1,y0)--(x0-hair-1,y5))); tim105=xpart(p1 intersectiontimes (z4+u*right--(x4+u,y5))); tim106=xpart(p1 intersectiontimes (z103--(x103,y5))); infill subpath(rundy(p0,(tim100,bbw)),rundy(p0,tim1).zpet) of p0 ..(reverse subpath(rundy(p2,(tim101,bbw)),rundy(p2,tim2).zpet) of p2) ..(reverse subpath(tim103,rundy(p3,(tim102,bbw)).zpet) of p3) ..subpath(tim104,rundy(p1,(tim106,bbw)).zpet) of p1..cycle; labels(102,103); endchar; iff known chars.latin_B_SS: bskchar "The sans-serif letter B"; beginchar(chars.latin_B_SS,13u#,cap_height#,0); uni "0x1D5A1"; italcorr .5[x_height#,cap_height#]*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; numeric tim[]; path p[]; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2u; pos3(1.5cap_stem,270); pos4(cap_hair,270); pos5(cap_curve,0); pos6(cap_hair,90); pos7(1.5cap_stem,90); pos8(ser_height,270); pos9(cap_hair,270); pos10(.95cap_curve,180); x3=x7=x1r; y7=y6=com_height; rt x5r=w-u; y5=.45[y4,y6]; bot y3r=bot y4r=0; x6=.5[x7,x9]; x4=.5[x1r,x5l]; y8l+serif_o=y9l; top y9l=h+drop_stem; x8=x3; x9=.5[x6,x4]; x5-x10=.3cap_curve; y10=.45[y9,y6]; cap_serifs_tl(2l); cap_serifs_bl(1l); p0=z1l.b{down}..z1..z3r---z4r..z5r..z6r---z7; p1=z7l{dir90}..{right}z6l..z5l..{left}z4l..{up}z3l; p2=z2l.b{up}..z2---z9l..z10l..z6---z7; p3=z7r{dir-90}..{right}z6r..z10r..z9r{left}..{down}z8r; z0=bsktouch(p0,2up,p2,2down); tim1=xpart(p0 intersectiontimes (z0--(x0,bar_height))); tim2=xpart(p2 intersectiontimes (z0--(x0,x_height))); filldraw subpath(0,rundy(p0,tim1).zpet) of p0 ..(reverse subpath(0,rundy(p2,tim2).zpet) of p2)--cycle; infill p1---cycle; infill p3---cycle; penlabels(0,1,2,3,4,5,6,7,8,9,10); endchar; iff known chars.sign_baht: bskchar "Baht sign"; beginchar(chars.sign_baht,13u#,Acc_height#,Acc_height#-cap_height#); uni "0x0E3F"; italcorr .5[x_height#,cap_height#]*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; numeric tim[]; path p[]; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=cap_height-drop_stem; lft x1l= lft x2l= 2u; pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0); pos6(.75cap_hair,90); pos7(ser_height,90); pos8(.7ser_height,270); pos9(cap_hair,270); pos10(.95cap_curve,180); pos11(hair,0); pos12(hair,0); x3=x7=x1r; y7=y6=com_height; rt x5r=w-u; y5=.45[y4,y6]; bot y3r=bot y4r=0; x6=.5[x7,x9]; x4=.5[x1r,x5l]; y8l+serif_o=y9l; top y9l=cap_height+drop_stem; x8=x3; x9=.5[x6,x4]; x5-x10=.3cap_curve; y10=.45[y9,y6]; x11=x12=.5[x4,x9]; top y11=h; bot y12=-d; cap_serifs_tl(2l); cap_serifs_bl(1l); p0=z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r---z4r..z5r..z6r---z7; p1=z7l{dir90}..{right}z6l..z5l..{left}z4l..{up}z3l; p2=z2l.b{up}..{left}z2l.c..{right}z2l.a..z9l..z10l..z6---z7; p3=z7r{dir-90}..{right}z6r..z10r..z9r{left}..{down}z8r; p4=z12l--z11l; p5=z11r--z12r; z0=bsktouch(p0,2up,p2,2down); tim1=xpart(p0 intersectiontimes (z0--(x0,bar_height))); tim2=xpart(p2 intersectiontimes (z0--(x0,x_height))); (tim3,tim4)=p2 intersectiontimes p4; (tim5,tim6)=p2 intersectiontimes p5; (tim7,tim8)=p0 intersectiontimes p4; (tim9,tim10)=p0 intersectiontimes p5; (tim11,tim12)=p1 intersectiontimes p4; (tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p4; (tim15,tim16)=p1 intersectiontimes p5; (tim17-2,tim18)=subpath(2,infinity) of p1 intersectiontimes p5; (tim19,tim20)=p3 intersectiontimes p4; (tim21-2,tim22)=subpath(2,infinity) of p3 intersectiontimes p4; (tim23,tim24)=p3 intersectiontimes p5; (tim25-2,tim26)=subpath(2,infinity) of p3 intersectiontimes p5; filldraw subpath(0,rundy(p0,tim7).zpet) of p0 ..(reverse (subpath(rundy(p5,tim10),infinity) of p5 ..subpath(0,rundy(p4,tim8).zpet) of p4)) ..subpath(rundy(p0,tim9),rundy(p0,tim1).zpet) of p0 ..(reverse (subpath(0,rundy(p2,tim3).zpet) of p2 ..subpath(rundy(p4,tim4),infinity) of p4 ..subpath(0,rundy(p5,tim6).zpet) of p5 ..subpath(rundy(p2,tim5),rundy(p2,tim2).zpet) of p2)) --cycle; infill subpath(0,rundy(p1,tim11).zpet) of p1 ..subpath(rundy(p4,tim12).zpet,rundy(p4,tim14)) of p4 ..subpath(rundy(p1,tim13),infinity) of p1---cycle; infill subpath(rundy(p1,tim15),rundy(p1,tim17).zpet) of p1 ..subpath(rundy(p5,tim18).zpet,rundy(p5,tim16)) of p5..cycle; infill subpath(0,rundy(p3,tim19).zpet) of p3 ..subpath(rundy(p4,tim20),rundy(p4,tim22).zpet) of p4 ..subpath(rundy(p3,tim21),infinity) of p3---cycle; infill subpath(rundy(p3,tim23),rundy(p3,tim25).zpet) of p3 ..subpath(rundy(p5,tim26),rundy(p5,tim24).zpet) of p5..cycle; penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12); endchar; charscription(13.3u,cap_height,0)( path p[]; numeric tim[], sersh; sersh=.15tiny; pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o; p0:=z1r{down}..z2r..z3r..z4r..{down}cycle; p1:=z1l{down}..z2l..z3l..z4l..{down}cycle; z5'=((.5w,y3+.2h)--(2w,y3+.2h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0); z5''=((.5w,y3-.2h+o)--(2w,y3-.2h+o)) intersectionpoint p0; tim2= ypart(((.5w,y3-.2h)--(2w,y3-.2h)) intersectiontimes p0); z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3); z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd]; tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1); z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3); z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); p2:=counterclockwise (subpath(0,tim1) of reverse p0..z5'a--z5'b---z5'e..subpath (tim3,5) of p1.. reverse (subpath(0,tim2) of p0..z5''a--z5''b---z5''e.. reverse subpath (1,tim4) of p1) & cycle); bskcharscriptcmd; filldraw p2; penlabels(1,2,3,4); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,); ); iff known chars.latin_C: bskchar "The letter C"; beginchar(chars.latin_C,13.3u#,cap_height#,0); uni "0x0043"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; math_fit(-.5cap_height#*slant+.5u#,.75ic#); endchar; iff known chars.latin_Ccaron: bskchar "The letter C with caron"; beginchar(chars.latin_Ccaron,13.3u#,Acc_height#,0); uni "0x010C"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4; hacek(100,101,102).capital; endchar; iff known chars.latin_Cacute: bskchar "The letter C with acute"; beginchar(chars.latin_Cacute,13.3u#,Acc_height#,0); uni "0x0106"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4-u; acute(100,101).capital; endchar; iff known chars.latin_Ccircumflex: bskchar "The letter C with circumflex"; beginchar(chars.latin_Ccircumflex,13.3u#,Acc_height#,0); uni "0x0108"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4; circumflex(100,101,102).capital; endchar; iff known chars.latin_Cdotabove: bskchar "The letter C with dot above"; beginchar(chars.latin_Cdotabove,13.3u#,Acc_height#,0); uni "0x010A"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x4; dotabove(100); endchar; iff known chars.latin_C_BB: bskchar "The blackboard-bold letter C"; beginchar(chars.latin_C_BB,13.3u#,cap_height#,0); uni "0x2102"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; p100:=subpath(-1,1) of p0; p101:=reverse subpath(-1,1) of p1; oblu:=1.25bbw; z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down); z101=bsktouch(p100,bbs*down,subpath(0,1) of p101,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y1))); tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5))); tim102=xpart(p100 intersectiontimes (z101--(x101,y1))); tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5))); infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; labels(100,101); endchar; iff known chars.sign_centigrade: bskchar "Centigrade sign"; beginchar(chars.sign_centigrade,17.3u#,asc_height#+o#,0); uni "0x2103"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar shifted (4u*right); save x,y; pos1a(hair,0); pos1b(hair,90); pos1c(hair,180); pos1d(hair,270); z0=(3u,h-2u)=.5[z1a,z1c]=.5[z1b,z1d]; x1b=x1d; y1a=y1c; y1d-y1b=(x1c-x1a); x1a.l=x1; lft x1=u; filldraw z1a.l{down}..z1b.l..z1c.l..z1d.l..cycle; infill z1a.r{down}..z1b.r..z1c.r..z1d.r..cycle; penlabels(1a,1b,1c,1d); labels(0); endchar; iff known chars.sign_copyright: bskchar "Copyright sign (circled C)"; beginchar(chars.sign_copyright,15u#,asc_height#,0); uni "0x00A9"; italcorr x_height#*slant+.25u#; adjust_fit(0,0); pickup tiny.nib; numeric zv; zv=.66; lft x6=u; x2=w-x6; y2=.5h; top y8=h; lft x11=3u; x12+x11=w; x13=x11; x14=x12; y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread; circle_points(rule_thickness); filldraw draw_circle.l; infill draw_circle.r; save x,y; multiply(1.5*zv)(cap_curve,cap_hair,ser_height,serif_o); usechar shifted -z5''c scaled zv shifted (.5WW+.33u,.5HH); endchar; iff known chars.sign_copyleft: bskchar "Copyleft sign (circled turned C)"; beginchar(chars.sign_copyleft,15u#,asc_height#,0); uni "non"; italcorr x_height#*slant+.25u#; adjust_fit(0,0); pickup tiny.nib; numeric zv; zv=.66; lft x6=u; x2=w-x6; y2=.5h; top y8=h; lft x11=3u; x12+x11=w; x13=x11; x14=x12; y11=y12; y13=y14; .5[y11,y13]=y2; y11-y13=spread; circle_points(rule_thickness); filldraw draw_circle.l; infill draw_circle.r; save x,y; def bskcharscriptcmd:= save counterclockwise; vardef counterclockwise primary c:= reverse c enddef enddef; multiply(1.5*zv)(cap_curve,cap_hair,ser_height,serif_o); usechar slanted (-slant) shifted -z5''c reflectedabout (origin,(0,h)) slanted (slant) scaled zv shifted (.5WW+slant*5u,.5HH); endchar; iff known chars.sign_euro: bskchar "The Euro sign"; beginchar(chars.sign_euro,12u#,cap_height#,0); uni "0x20AC"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[], sersh; sersh=.15tiny; pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); pos6(cap_bar,90); pos7(cap_bar,90); pos8(.5[cap_stem,cap_hair],90); pos9(.5[cap_stem,cap_hair],90); lft x1l=2u; rt x3r=w-o; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o; lft x8=.75u; lft x6=u; x9=x4; z6-z8=z7-z9; .5[y6,y8]=bot y1-o; y6l-y8r=cap_bar+cap_stem; z9-z8=whatever*dir(10); p0:=z1r{down}..z2r..z3r..z4r..{down}cycle; p1:=z1l{down}..z2l..z3l..z4l..{down}cycle; z5'=((.5w,y3+.3h)--(2w,y3+.3h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.3h)--(2w,y3+.3h)) intersectiontimes reverse p0); z5''=((.5w,y3-.3h+o)--(2w,y3-.3h+o)) intersectionpoint p0; tim2= ypart(((.5w,y3-.3h)--(2w,y3-.3h)) intersectiontimes p0); z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3); z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd]; tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1); z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3); z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); bskpoints(6,7,hair,hair); bskpoints(8,9,hair,hair); p2:=subpath(0,tim1) of reverse p0..z5'a--z5'b{dir225}..subpath (tim3,5) of p1.. reverse (subpath(0,tim2) of p0..z5''a--z5''b{dir135}.. reverse subpath (1,tim4) of p1) & cycle; p3:=z6l--z7ll; p4:=z7r--z6r; p5:=z8l--z9ll; p6:=z9r--z8r; (tim5,tim6)=subpath(0,1) of p2 intersectiontimes p3; (tim7,tim8)=subpath(0,1) of p2 intersectiontimes p4; (tim9-1,tim10)=subpath(1,length p2) of p2 intersectiontimes p4; (tim11-1,tim12)=subpath(1,length p2) of p2 intersectiontimes p3; (tim13-1,tim14)=subpath(1,length p2) of p2 intersectiontimes p6; (tim15-1,tim16)=subpath(1,length p2) of p2 intersectiontimes p5; (tim17-10,tim18)=subpath(10,length p2) of p2 intersectiontimes p5; (tim19-10,tim20)=subpath(10,length p2) of p2 intersectiontimes p6; filldraw subpath(0,rundy(p2,tim5).zpet) of p2 ..subpath(rundy(p3,tim6),infinity) of p3 ..subpath(0,rundy(p4,tim8).zpet) of p4 ..subpath(rundy(p2,tim7),rundy(p2,tim9).zpet) of p2 ..subpath(rundy(p4,tim10), infinity) of p4 ..subpath(0,rundy(p3,tim12).zpet) of p3 ..subpath(rundy(p2,tim11),rundy(p2,tim13).zpet) of p2 ..subpath(rundy(p6,tim14),infinity) of p6 ..subpath(0,rundy(p5,tim16).zpet) of p5 ..subpath(rundy(p2,tim15),rundy(p2,tim17).zpet) of p2 ..subpath(rundy(p5,tim18),infinity) of p5 ..subpath(0,rundy(p6,tim20).zpet) of p6 ..subpath(rundy(p2,tim19),length p2) of p2..cycle; penlabels(1,2,3,4,6,7,8,9); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,); endchar; iff known chars.latin_Ccedilla: bskchar "The letter C with cedilla"; beginchar(chars.latin_Ccedilla,13.3u#,cap_height#,.65desc_depth#); uni "0x00C7"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; path p[],po; numeric tim[], sersh; sersh=.15tiny; pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); pos6(.5stem,0); pos7(.5stem,0); pos8(stem,0); pos9(.5stem,-110); lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o; p0:=z1r{down}..z2r..z3r..z4r..{down}cycle; p1:=z1l{down}..z2l..z3l..z4l..{down}cycle; z5'=((.5w,y3+.2h)--(2w,y3+.2h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0); z5''=((.5w,y3-.2h+o)--(2w,y3-.2h+o)) intersectionpoint p1; tim2= ypart(((.5w,y3-.2h)--(2w,y3-.2h)) intersectiontimes p1); z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3); z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd]; tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1); z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3); z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); x6l=x7l=x2; y6=0; y7=-hair; y8=-.5d; rt x8r-lft x9r=4u; x6r-lft x9r=2u; y9r=-d; p3:=z7r..{down}z8r..{left}z9r..{right}z9l..{up}z8l..z7l--z6l; p4:=reverse(z6r{down}..subpath (rundy(p3,(0,curve)),infinity) of p3); filldraw subpath(0,tim1) of reverse p0..z5'a--z5'b---z5'e ..subpath (tim3,length p1) of p1 & subpath(0,rundy(p1,1).zpet) of p1 ..subpath(rundy(p4,0),rundy(p4,infinity).zpet) of p4 ..reverse (subpath(0,tim2) of p0..z5''a--z5''b---z5''e ..reverse subpath (rundy(p1,1),tim4) of p1) & cycle; penlabels(1,2,3,4,6,7,8,9); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,); penlabels(); endchar; iff known chars.sign_cedi: bskchar "Cedi sign"; beginchar(chars.sign_cedi,13.3u#,Acc_height#,Acc_height#-cap_height#); uni "0x20B5"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[], sersh; sersh=.15tiny; pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); pos7(hair,0); pos8(hair,0); lft x1l=u-o; rt x3r=w-u; y1=y3=.5cap_height; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=cap_height+o; x7=x8=x4; top y7=h; bot y8=-d; p0:=z1r{down}..z2r..z3r..z4r..{down}z1r; p1:=z1l{up}..z4l..z3l..z2l..{up}z1l; p2:=z7r--z8r; p3:=z8l--z7l; z5'=((.5w,y3+.2cap_height)--(2w,y3+.2cap_height)) intersectionpoint p0; tim1= ypart(((.5w,y3+.2cap_height)--(2w,y3+.2cap_height)) intersectiontimes p0); z5''=((.5w,y3-.2cap_height+o)--(2w,y3-.2cap_height+o)) intersectionpoint p0; tim2= ypart(((.5w,y3-.2cap_height)--(2w,y3-.2cap_height)) intersectiontimes p0); z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,cap_height+o); z5'c=(.35[x4,x3r],y3); z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd]; tim3=ypart(((.5w,y5'e+.15ser_height)--(w,y5'e+.15ser_height)) intersectiontimes p1); z5''a=z5''+serif_o*right; z5''b=(x5''a-sersh,0); z5''c=(.15[x4,x3r],y3); z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); (tim5-2,tim6)=subpath(2,infinity) of p0 intersectiontimes p2; (tim7-2,tim8)=subpath(2,infinity) of p0 intersectiontimes p3; (tim9,tim10)=subpath(0,3) of p0 intersectiontimes p2; (tim11-2,tim12)=subpath(2,infinity) of p1 intersectiontimes p2; (tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p3; (tim15,tim16)=subpath(0,2) of p1 intersectiontimes p3; (tim17,tim18)=subpath(0,2) of p1 intersectiontimes p2; (tim19,tim20)=subpath(0,3) of p0 intersectiontimes p3; filldraw z5'e---z5'b--z5'a..subpath(tim1,rundy(p0,tim5).zpet) of p0 ..subpath(rundy(p2,tim6),rundy(p2,tim10).zpet) of p2 ..subpath(rundy(p0,tim9),tim2) of p0..z5''a--z5''b---z5''e ..subpath(tim4,rundy(p1,tim11).zpet) of p1 ..subpath(rundy(p2,tim12),infinity) of p2 ..subpath(0,rundy(p3,tim14).zpet) of p3 ..subpath(rundy(p1,tim13),infinity) of p1 ..subpath(0,rundy(p1,tim15).zpet) of p1 ..subpath(rundy(p3,tim16),infinity) of p3 ..subpath(0,rundy(p2,tim18).zpet) of p2 ..subpath(rundy(p1,tim17),tim3) of p1..cycle; infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3 ..subpath(rundy(p0,tim7),infinity) of p0 ..subpath(0,rundy(p0,tim19).zpet) of p0..cycle; penlabels(1,2,3,4,7,8); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,); endchar; iff known chars.latin_C_SS: bskchar "The sans-serif letter C"; beginchar(chars.latin_C_SS,12.5u#,cap_height#,0); uni "0x1D5A2"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_hair,180); pos4(1.1cap_hair,270); lft x1l=u-o; rt x3r=w-u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o; p0:=z1r{down}..z2r..z3r..z4r..{down}cycle; p1:=z1l{down}..z2l..z3l..z4l..{down}cycle; z5'=((.5w,y3+.2h)--(2w,y3+.2h)) intersectionpoint p0; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0); z5''=((.5w,y3-.2h+o)--(2w,y3-.2h+o)) intersectionpoint p0; tim2= ypart(((.5w,y3-.2h)--(2w,y3-.2h)) intersectiontimes p0); tim3=ypart(((.5w,y3+.2h)--(w,y3+.2h)) intersectiontimes p1); tim4=ypart(((.5w,y3-.2h)--(w,y3-.2h)) intersectiontimes p1); filldraw subpath(0,tim1) of reverse p0 ..subpath (tim3,5) of p1 ..reverse (subpath(0,tim2) of p0..reverse subpath (1,tim4) of p1) & cycle; penlabels(1,2,3,4); labels(5,5',5''); endchar; charscription(15u,cap_height,0)( pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2u; pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0); pos6(cap_hair,90); pos7(.75ser_height,90); x3=x7=x1r; y7r+serif_o=y6r; top y6r=h+drop_stem; rt x5r=w-u; y5=.52[y4,y6]; bot y3r=bot y4r=0; x6=x4 if not monospace:+u fi; x6=.5[x1r,x5l]-u; cap_serifs_tl(2l); cap_serifs_bl(1l); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r--- z4r..z5r..{left}z6r..z2l.a{left}..z2l.c{right}..{down}z2l.b---cycle; infill z7l..{right}z6l..z5l..{left}z4l..z3l---cycle; penlabels(1,2,3,4,5,6,7); ); iff known chars.latin_D: bskchar "The letter D"; beginchar(chars.latin_D,15u#,cap_height#,0); uni "0x0044"; italcorr x_height#*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; math_fit(0,.75ic#); endchar; iff known chars.latin_Dcaron: bskchar "The letter D with caron"; beginchar(chars.latin_Dcaron,15u#,Acc_height#,0); uni "0x010E"; italcorr x_height#*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=.6[x2r,x6]; hacek(100,101,102).capital; endchar; iff known chars.latin_D_BB: bskchar "The blackboard-bold letter D"; beginchar(chars.latin_D_BB,15u#,cap_height#,0); uni "0x1D53B"; italcorr x_height#*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; path p[]; numeric tim[]; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; p100=z4r{right}..z5r..{left}z6r; p101=z6l{right}..z5l..{left}z4l; z102=bsktouch(subpath (0,1) of p100,bbs*up,p101,down); z103=bsktouch(subpath (0,1) of p101,bbs*up,p100,down); tim100=xpart(p100 intersectiontimes (z102--(x102,y4r))); tim101=xpart(p101 intersectiontimes (z102--(x102,y5))); tim102=xpart(p100 intersectiontimes (z103--(x103,y6r))); tim103=xpart(p101 intersectiontimes (z103--(x103,y5))); oblu:=1.25bbw; infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; labels(102,103); endchar; iff known chars.latin_D_SS: bskchar "The sans-serif letter D"; beginchar(chars.latin_D_SS,14u#,cap_height#,0); uni "0x1D5A3"; italcorr x_height#*slant-.25u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2u; pos3(1.5cap_stem,270); pos4(cap_hair,270); pos5(cap_curve,0); pos6(cap_hair,90); pos7(1.5cap_stem,90); x3=x7=x1r; y7r+serif_o=y6r; top y6r=h+drop_stem; rt x5r=w-u; y5=.52[y4,y6]; bot y3r=bot y4r=0; x6=x4 if not monospace and ((substring(0,5) of font_identifier_) <> "BSKHC"):+u fi; x6=.5[x1r,x5l]-u; cap_serifs_tl(2l); cap_serifs_bl(1l); filldraw z1l.b{down}..z1..z3r---z4r..z5r..{left}z6r---z2..z2l.b---cycle; infill z7l..{right}z6l..z5l..{left}z4l..z3l---cycle; penlabels(1,2,3,4,5,6,7); endchar; charscription(15.5u,cap_height,0)( pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2.5u; pos3(ser_height,270); pos4(cap_hair,270); pos5(cap_curve,0); pos6(cap_hair,90); pos7(.75ser_height,90); pos8(bar,90); pos8'(bar,90); pos9(bar,90); pos9'(bar,90); x3=x7=x1r; y7r+serif_o=y6r; top y6r=h+drop_stem; rt x5r=w-u; y5=.52[y4,y6]; bot y3r=bot y4r=0; x6=x4 if not monospace:+u fi; x6=.5[x1r,x5l]-u; cap_serifs_tl(2l); cap_serifs_bl(1l); x9-x8=4u if bold_face:+u fi; y9=y9'=y8=y8'=.8[bar_height,x_height]; lft x8=u; x8'=x1l; x9'=x1r; bskpoints(8,9,hair,hair); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..z3r ---z4r..z5r..{left}z6r..z2l.a{left}..z2l.c{right}..{down}z2l.b ---obl(8'r,2l,8rr)---z8rr..z8l---obl(8'l,8l,1l)---cycle; infill z7l..{right}z6l..z5l..{left}z4l..z3l---obl(9'l,1l,9l)---z9ll..z9r---obl(9'r,9r,2r)---cycle; penlabels(1,2,3,4,5,6,7,8,8',9,9'); labels(8rr,9ll); ); iff known chars.latin_Dstroke: bskchar "The letter D with stroke"; beginchar(chars.latin_Dstroke,15.5u#,cap_height#,0); uni "0x0110"; italcorr x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_Eth: bskchar "The letter Eth"; beginchar(chars.latin_Eth,15.5u#,cap_height#,0); uni "0x00D0"; italcorr x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; charscription(13.5u, cap_height,0)( path p; pos1(cap_stem,0); pos2(cap_stem,0); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; top y4r=h; rt x4r=w-2.5u; lft x1l=lft x2l=2u; y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u; cap_serifs_tl(2l); cap_serifs_bl(1l); p=reverse arm_top_r_points(2r,4); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. arm_bot_r_points(1r,3).alt---z5'l{dir80}..z5l---z6l.. z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r.. {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r--- p---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,5,5',6,6'); ); iff known chars.latin_E: bskchar "The letter E"; beginchar(chars.latin_E,13.5u#,cap_height#,0); uni "0x0045"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; math_fit(0,ic#); endchar; iff known chars.latin_Eacute: bskchar "The letter E with acute"; beginchar(chars.latin_Eacute,13.5u#,Acc_height#,0); uni "0x00C9"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=x6-u; acute(100,101).capital; endchar; iff known chars.latin_Ecaron: bskchar "The letter E with caron"; beginchar(chars.latin_Ecaron,13.5u#,Acc_height#,0); uni "0x011A"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=x6; hacek(100,101,102).capital; endchar; iff known chars.latin_Egrave: bskchar "The letter E with grave"; beginchar(chars.latin_Egrave,13.5u#,Acc_height#,0); uni "0x00C8"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=.5[x4d,x6]; grave(100,101).capital; endchar; iff known chars.latin_Edoublegrave: bskchar "The letter E with double grave"; beginchar(chars.latin_Edoublegrave,13.5u#,Acc_height#,0); uni "0x0204"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x102-x100=3u; .5[x100,x101]=x2r; d_grave(100,101,102,103,whatever).capital; endchar; iff known chars.latin_Ecircumflex: bskchar "The letter E with circumflex"; beginchar(chars.latin_Ecircumflex,13.5u#,Acc_height#,0); uni "0x00CA"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=x6; circumflex(100,101,102).capital; endchar; iff known chars.latin_Eumlaut: bskchar "The letter E with umlaut"; beginchar(chars.latin_Eumlaut,13.5u#,Acc_height#,0); uni "0x00CB"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; .5[x100,x101]=x6l; x101-x100=x6'-x2r; umlaut(100,101); endchar; iff known chars.latin_Emacron: bskchar "The letter E with macron"; beginchar(chars.latin_Emacron,13.5u#,Acc_height#-.1x_height#,0); uni "0x0112"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; lft x100=rt x2r; x101-x100=5u; macron(100,101); endchar; iff known chars.latin_Edotabove: bskchar "The letter E with dot above"; beginchar(chars.latin_Edotabove,13.5u#,Acc_height#,0); uni "0x0116"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x100=x6; dotabove(100); endchar; iff known chars.latin_Ebreve: bskchar "The letter E with breve"; beginchar(chars.latin_Ebreve,13.5u#,Acc_height#,0); uni "0x0114"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=x6; x102-x100=5u; bot bot y101l=cap_height; breve(100,101,102).capital; endchar; iff known chars.latin_Einvbreve: bskchar "The letter E with inverted breve"; beginchar(chars.latin_Einvbreve,13.5u#,Acc_height#+o#,0); uni "0x0206"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=x6; x102-x100=5u; bot bot y100=cap_height+o; tieacc(100,101,102).capital; endchar; iff known chars.latin_E_BB: bskchar "The blackboard-bold letter E"; beginchar(chars.latin_E_BB,13.5u#,cap_height#,0); uni "0x1D53C"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; endchar; iff known chars.latin_Eogonek: bskchar "The letter E with ogonek"; beginchar(chars.latin_Eogonek,13.5u#,cap_height#,.85desc_depth#); uni "0x0118"; italcorr cap_height#*slant-1.75u#; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; pos1(cap_stem,0); pos2(cap_stem,0); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); pos7(stem,0); pos8(curve,0); pos9(hair,45); pos10(hair,160); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; top y4r=h; rt x4r=w-2.5u; lft x1l=lft x2l=2u; y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u; x7=x8l+1.5u=x3a-o; x9-x8l=3u; rt x10l=x9+1.5u; bot y7=0; y8=-.5d; bot y9l=-d; y10=-2/3d; cap_serifs_tl(2l); cap_serifs_bl(1l); p0=reverse arm_top_r_points(2r,4); p1=arm_bot_r_points(1r,3).alt; p2=z7l{z8l-z7r}..z8l...z9l..{z7-z8}z10l..z10r{z8-z7}..z9r..z8r..z7r &z7r..z7+.5o*up; (tim1,tim2)=p1 intersectiontimes p2; (tim3,tim4-2)=p1 intersectiontimes subpath(2,infinity) of p2; filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. subpath(0,rundy(p1,(tim1,2hair)).zpet) of p1 ..subpath(rundy(p2,(tim2,2hair)),rundy(p2,tim4).zpet) of p2 ..subpath(rundy(p1,tim3),infinity) of p1---z5'l{dir80}..z5l---z6l.. z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r.. {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r--- p0---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,5,5',6,6',7,8,9,10); endchar; iff known chars.latin_Ecedilla: bskchar "The letter E with cedilla"; beginchar(chars.latin_Ecedilla,13.5u#,cap_height#,.65desc_depth#); uni "0x0228"; italcorr cap_height#*slant-1.75u#; adjust_fit(0,0); pickup tiny.nib; path p[]; pos1(cap_stem,0); pos2(cap_stem,0); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); pos7(.5stem,0); pos8(.5stem,0); pos9(stem,0); pos10(.5stem,-110); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; top y4r=h; rt x4r=w-2.5u; lft x1l=lft x2l=2u; y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u; cap_serifs_tl(2l); cap_serifs_bl(1l); p0=reverse arm_top_r_points(2r,4); x7l=x8l=x6'; bot y7=0; y8=-hair; y9=-.5d; rt x9r-lft x10r=4u; x7r-lft x10r=2u; y10r=-d; p1:=z8r..{down}z9r..{left}z10r..{right}z10l..{up}z9l..z8l--z7l; p2:=reverse(z7r{down}..subpath (rundy(p1,(0,curve)),infinity) of p1); p3:=arm_bot_r_points(1r,3).alt; filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z7l+hair*left..subpath(rundy(p2,0),rundy(p2,infinity).zpet) of p2..z7r+stem*right---subpath(1,infinity) of p3---z5'l{dir80}..z5l---z6l..z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r..{down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r---p0---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,5,5',6,6',7,8,9,10); endchar; iff known chars.latin_E_SS: bskchar "The sans-serif letter E"; beginchar(chars.latin_E_SS,12u#,cap_height#,0); uni "0x1D5A4"; italcorr cap_height#*slant-1.75u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); pos4(cap_hair,90); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(1.5cap_stem,90); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; top y4r=h; rt x4r=w-2.5u; lft x1l=lft x2l=2u; y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+4/8(x4-x2r); x5'=x2r; x6'-x6=u; cap_serifs_tl(2l); cap_serifs_bl(1l); z1'=(x1r,y3l); z2'=(x2r,y4l); oblu:=cap_hair; filldraw z1l.b{down}..z1---z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(1',3l,5'l) ---z5'l{dir80}..z5l---z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,4l) ---z4l+cap_stem*left...z4...z4r+cap_stem*left---z2..z2l.b---cycle; penlabels(1,2,3,4,5,5',6); labels(1',2',6'); endchar; charscription(18u,cap_height,0)( numeric alpha; path p; oblu.more:=3oblu; pos1(cap_stem,0); pos2(cap_stem,0); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; top y4r=h; rt x4r=w-2u; lft x1l=lft x2l=8.5u; lft x7l=2u; y7l=y1; alpha=diag_ratio(2,cap_hair,y2l-y7l,x2l-x7l); pos7(alpha*cap_hair,0); y5=y5'=y6=y6'=.475[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_bl(7l); cap_serifs_br(7r); if monospace: pos3(beak,-90); %Bottom arm z3c=(x3-2/3u,y3); z3d=(.5[x3e,x3c],y3e); z3e=z1r+(alt_cap_hair-currentbreadth,cap_jut); z3f=z1r+.75ser_height*up; penlabels(3); labels(3c,3d,3e,3f); pos4(.65beak,90); %Top arm z4a=z2r+.55ser_height*down; z4b=z2r+(cap_jut,-cap_hair+currentbreadth); z4c=z4l+serif_o*left; penlabels(4); labels(4a,4b,4c); else: p=reverse arm_top_r_points(2r,4); fi; x2l'=x2l; z2l'=whatever[z2l+alpha*(cap_hair-.5currentbreadth)*right,z7]; pos9(cap_bar,90); y8r-y8l=cap_bar-tiny; .5[y8r,y8l]=y9=y5; x1l-x9=x5-x5'; z8r=whatever[z7,z2l']; z8l=whatever[z7,z2l']; y8'r=y8r; y8'l=y8l; x8'l=x8'r=.5[x8l,x8r]+(x5-x5'); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. if monospace: z1r---z3r+o*left..z3r+o*up---z3l..z3l+o*left{down} ..z3c..z3d---z3e..{up}z3f else: arm_bot_r_points(1r,3).alt fi ---z5'l{dir80}..z5l---z6l..z6'l+.5serif_o*left{down}.. z6'l{dir87}..{dir93}z6'r..{down}z6'r+.5serif_o*left.. z6r---z5r..{dir100}z5'r--- if monospace: z4a{up}..z4b---z4b+o*right..{dir-45}z4c..z4l ---z4r+o*down..z4r+o*left---z2r else: p fi ---obl(2l,2r,7l)--- diag_serif(7l,2l)..{left}z7l.c..z7l.a{right}.. z7+ser_boule*up..{right}z7r.a..{left}z7r.c.. diag_serif(7r,2r)---obl(8l,7r,9l)---z9l{right}..(x1l,y5'l)---cycle; oblu:=2oblu; if x8r+oblu>x9r: oblu:=f_obl; fi infill (x1l,y5'r)..{left}z9r---obl(8r,9r,2l')--- obl(2l',7l,1l).more--cycle; penlabels(1,2,2l',5,5',6,6',7,8,8',9); ); iff known chars.latin_AE: bskchar "The ligature AE"; beginchar(chars.latin_AE,18u#,cap_height#,0); uni "0x00C6"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_AEmacron: bskchar "The ligature AE with macron"; beginchar(chars.latin_AEmacron,18u#,Acc_height#-.1x_height#,0); uni "0x01E2"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; .5[x100,x101]=x6; macron(100,101); endchar; iff known chars.latin_AEacute: bskchar "The ligature AE with acute"; beginchar(chars.latin_AEacute,18u#,Acc_height#,0); uni "0x01FC"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=x2; acute(100,101).capital; endchar; iff known chars.latin_OE: bskchar "The ligature OE"; beginchar(chars.latin_OE,19u#,cap_height#,0); uni "0x0152"; italcorr cap_height#*slant-1.5u#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; numeric alpha; path p; pos1(cap_stem,0); pos2(cap_stem,0); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; top y4r=h; rt x4r=w-2.5u; lft x1l=lft x2l=8.5u; pos7(cap_curve,0); lft x7l=u-o; y7=.5h; y5=y5'=y6=y6'=.5[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x4-x2r); x5'=x2r; x6'-x6=1.5u; cap_serifs_tl(2l); cap_serifs_bl(1l); if monospace: pos3(beak,-90); %Bottom arm z3c=(x3-2/3u,y3); z3d=(.5[x3e,x3c],y3e); z3e=z1r+(alt_cap_hair-currentbreadth,cap_jut); z3f=z1r+.75ser_height*up; penlabels(3); labels(3c,3d,3e,3f); pos4(.65beak,90); %Top arm z4a=z2r+.55ser_height*down; z4b=z2r+(cap_jut,-cap_hair+currentbreadth); z4c=z4l+serif_o*left; penlabels(4); labels(4a,4b,4c); else: p=reverse arm_top_r_points(2r,4); fi; filldraw z2l.a+o*up..z7l..z1l.a+o*down{right}..z1+ser_boule*up.. if monospace: z1r---z3r+o*left..z3r+o*up---z3l..z3l+o*left{down} ..z3c..z3d---z3e..{up}z3f else: arm_bot_r_points(1r,3).alt fi ---z5'l{dir80}..z5l---z6l.. z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r.. {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r--- if monospace: z4a{up}..z4b---z4b+o*right..{dir-45}z4c..z4l ---z4r+o*down..z4r+o*left---z2r else: p fi ..z2..cycle; infill z1l.b{down}..{left}z1l.c+top o*down..z7r..{right}z2l.c+top o*up..z2l.b---cycle; penlabels(1,2,2l',5,5',6,6',7); endchar; charscription(12u,cap_height,0)( path p; pos1(cap_stem,0); pos2(cap_stem,0); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); pos6'(1.21beak,90); bot y1=0; top y2=h; top y3r=h; rt x3r=w-u; lft x1l=lft x2l=2u; y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+3/8(x3-x2r); x5'=x2r; x6'-x6=1.5u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); p=reverse arm_top_r_points(2r,3); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..{left}z1r.c..z1r.b---z5'l{dir80}..z5l--- z6l..z6'l+.5serif_o*left{down}..z6'l{dir87}..{dir93}z6'r.. {down}z6'r+.5serif_o*left..z6r---z5r..{dir100}z5'r--- p--z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,5,5',6,6'); ); iff known chars.latin_F: bskchar "The letter F"; beginchar(chars.latin_F,12u#,cap_height#,0); uni "0x0046"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; math_fit(0,ic#-4u#); endchar; iff known chars.latin_F_BB: bskchar "The blackboard-bold letter F"; beginchar(chars.latin_F_BB,12u#,cap_height#,0); uni "0x1D53D"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; math_fit(0,ic#-3u#); endchar; iff known chars.latin_F_SS: bskchar "The sans-serif letter F"; beginchar(chars.latin_F_SS,11u#,cap_height#,0); uni "0x1D5A5"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; path p; pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90); pos5(cap_bar,90); pos6(cap_bar,90); pos5'(ser_height,90); bot y1=0; top y2=h; top y3r=h; rt x3r=w-u; lft x1l=lft x2l=2u; y5=y5'=y6=y6'=.52[y1,y2]; x5=x2r+cap_hair; x6=x2r+4/8(x3-x2r); x5'=x2r; x6'-x6=u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); z2'=(x2r,y3l); oblu:=cap_hair; filldraw z1l.b{down}..z1..z1r.b---z5'l{dir80}..z5l--- z6l...z6'...z6r---z5r..{dir100}z5'r---obl(2',5'r,3l)---z3l+cap_stem*left ...z3...z3r+cap_stem*left---z2..z2l.b---cycle; penlabels(1,2,3,5,5',6); labels(2',6'); math_fit(0,ic#-3u#); endchar; charscription(14.3u,cap_height,0)( path p[]; numeric tim[], sersh; sersh=.15tiny; pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); lft x1l=u-o; rt x3r=w-2.3u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o; penpos6(beak,0); rt x6r=w-u; p0:=z1r{down}..z2r..z3r..z4r..{down}cycle; p1:=z1l{down}..z2l..z3l..z4l..{down}cycle; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p0); z5'=(x6,y3+.2h); z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,h+o); z5'c=(.35[x4,x3r],y3); z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd]; tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes p1); x5''a=x6r-.5cap_stem; y5''a=y3-.2h; z5''=z5''a+serif_o*left; y6=y5''a+cap_hair; z5''b=(x5''a-sersh,cap_hair); z5''c=(.5[x4,x1r],y3); z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left; tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p0); if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi filldraw z1r{up}..z4r..{direction tim1 of reverse p0}z5'..z5'a--z5'b---z5'e ..subpath (tim3,5) of p1.. reverse (subpath(0,tim5) of p0---z5''f..{left}z6l..z6l+serif_o*up --z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e.. reverse subpath (1,tim4) of p1) & cycle; penlabels(1,2,3,4,6); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f); ); iff known chars.latin_G: bskchar "The letter G"; beginchar(chars.latin_G,14.3u#,cap_height#,0); uni "0x0047"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; usechar; math_fit(-.5cap_height#*slant+.5u#,ic#); endchar; iff known chars.latin_Gacute: bskchar "The letter G with acute"; beginchar(chars.latin_Gacute,14.3u#,Acc_height#,0); uni "0x01F4"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; usechar; .5[x100,x101]=x4; acute(100,101).capital; endchar; iff known chars.latin_Gcaron: bskchar "The letter G with caron"; beginchar(chars.latin_Gcaron,14.3u#,Acc_height#,0); uni "0x01E6"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4; hacek(100,101,102).capital; endchar; iff known chars.latin_Gcircumflex: bskchar "The letter G with circumflex"; beginchar(chars.latin_Gcircumflex,14.3u#,Acc_height#,0); uni "0x011C"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4; circumflex(100,101,102).capital; endchar; iff known chars.latin_Gcedilla: bskchar "The letter G with cedilla (treated as comma)"; beginchar(chars.latin_Gcedilla,14.3u#,cap_height#,.75comma_depth#); uni "0x0122"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x2; top y100''r=-2o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_Gdotabove: bskchar "The letter G with dot above"; beginchar(chars.latin_Gdotabove,14.3u#,Acc_height#,0); uni "0x0120"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x4; dotabove(100); endchar; iff known chars.latin_Gbreve: bskchar "The letter G with breve"; beginchar(chars.latin_Gbreve,14.3u#,Acc_height#+o#,0); uni "0x011E"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4; x102-x100=5u; bot y101l=top y4l+o; breve(100,101,102).capital; endchar; iff known chars.latin_G_BB: bskchar "The blackboard-bold letter G"; beginchar(chars.latin_G_BB,14.3u#,cap_height#,0); uni "0x1D53E"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; path p[]; usechar; oblu.more:=2oblu; infill obl(5''a,5''f,5''b)---obl(5''b,5''a,5''d).more ---obl(5''d,5''b,5''f)---obl(5''f,5''e,5''a)---cycle; p100:=subpath(-1,1) of p0; p101:=reverse subpath(-1,1) of p1; oblu:=1.25bbw; z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down); z101=bsktouch(p100,bbs*down,subpath(0,1) of p101,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y1))); tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5))); tim102=xpart(p100 intersectiontimes (z101--(x101,y1))); tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5))); infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; labels(100,101); endchar; iff known chars.latin_G_SS: bskchar "The sans-serif letter G"; beginchar(chars.latin_G_SS,12.5u#,cap_height#,0); uni "0x1D5A6"; italcorr cap_height#*slant-u#; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[], sersh; sersh=.15tiny; pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); lft x1l=u-o; rt x3r=w-1.5u; y1=y3=.5h; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=h+o; penpos6(cap_stem,0); rt x6r=w-u; p0:=z1r{down}..z2r..z3r..z4r..{down}cycle; p1:=z1l{down}..z2l..z3l..z4l..{down}cycle; tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p0); tim3= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes p1); z5'=(x3r,y3+.2h); y6=bar_height; z5''b=(x6r,cap_hair); z5''c=(.5[x4,x1r],y3); z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left; tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); tim5=ypart((z6l--(x6l,0)) intersectiontimes p0); filldraw reverse subpath (tim1,length(p0)) of p0 ..subpath (tim3,5) of p1..reverse (subpath(0,tim5) of p0---z6l--z6r---z5''b---z5''e ..reverse subpath (1,tim4) of p1) & cycle; penlabels(1,2,3,4,6); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f); endchar; iff known chars.sign_guarani: bskchar "Guarani sign"; beginchar(chars.sign_guarani,14.3u#,Acc_height#,Acc_height#-cap_height#); uni "0x20B2"; italcorr cap_height#*slant-2u#; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[], sersh; sersh=.15tiny; pos1(cap_curve,0); pos2(1.1cap_hair,90); pos3(cap_hair,180); pos4(cap_hair,270); pos7(hair,0); pos8(hair,0); lft x1l=u-o; rt x3r=w-2.3u; y1=y3=.5cap_height; x2=x4=.5[x1,x3]; bot y2l=-o; top y4l=cap_height+o; penpos6(beak,0); rt x6r=w-u; x7=x8=x4; top y7=h; bot y8=-d; p0:=z1r{down}..z2r..z3r..z4r..{down}z1r; p1:=z1l{up}..z4l..z3l..z2l..{up}z1l; p2:=z7r--z8r; p3:=z8l--z7l; tim1= ypart(((.5w,y3+.2cap_height)--(2w,y3+.2cap_height)) intersectiontimes p0); z5'=(x6,y3+.2cap_height); z5'a=z5'+serif_o*right; z5'b=(x5'a-sersh,cap_height+o); z5'c=(.35[x4,x3r],y3); if xpart(point tim1 of p0) > x5'a: x5'a:=xpart(point tim1 of p0)+1 fi; z5'd=(z5'c--z5'b) intersectionpoint p1; z5'e=.35[z5'b,z5'd]; tim3=ypart(((.5w,y5'e+if monospace: .1 else: .15 fi \\ser_height)--(w,y5'e+if monospace: .15 else: .25 fi\\ser_height)) intersectiontimes p1); x5''a=x6r-.5cap_stem; y5''a=y3-.2h; z5''=z5''a+serif_o*left; y6=y5''a+cap_hair; z5''b=(x5''a-sersh,cap_hair); z5''c=(.5[x4,x1r],y3); z5''d=(z5''c--z5''b) intersectionpoint p1; z5''e=.5[z5''b,z5''d]; z5''f=z5''a+cap_stem*left; tim4=ypart(((.5w,y5''e-.25ser_height)--(w,y5''e-.25ser_height)) intersectiontimes p1); tim2=ypart((z5''f--(x5''f,0)) intersectiontimes p0); if x6l>x5''f: x6l:=x5''f-(x6r-x5''a); fi (tim5-2,tim6)=subpath(2,infinity) of p0 intersectiontimes p2; (tim7-2,tim8)=subpath(2,infinity) of p0 intersectiontimes p3; (tim9,tim10)=subpath(0,3) of p0 intersectiontimes p2; (tim11-2,tim12)=subpath(2,infinity) of p1 intersectiontimes p2; (tim13-2,tim14)=subpath(2,infinity) of p1 intersectiontimes p3; (tim15,tim16)=subpath(0,2) of p1 intersectiontimes p3; (tim17,tim18)=subpath(0,2) of p1 intersectiontimes p2; (tim19,tim20)=subpath(0,3) of p0 intersectiontimes p3; filldraw z5'e---z5'b--z5'a..subpath(tim1,rundy(p0,tim5).zpet) of p0 ..subpath(rundy(p2,tim6),rundy(p2,tim10).zpet) of p2 ..subpath(rundy(p0,tim9),tim2) of p0---z5''f..{left}z6l ..z6l+serif_o*up--z6r+serif_o*up..z6r{left}..z5''a---z5''b---z5''e ..subpath(tim4,rundy(p1,tim11).zpet) of p1 ..subpath(rundy(p2,tim12),infinity) of p2 ..subpath(0,rundy(p3,tim14).zpet) of p3 ..subpath(rundy(p1,tim13),infinity) of p1 ..subpath(0,rundy(p1,tim15).zpet) of p1 ..subpath(rundy(p3,tim16),infinity) of p3 ..subpath(0,rundy(p2,tim18).zpet) of p2 ..subpath(rundy(p1,tim17),tim3) of p1..cycle; infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3 ..subpath(rundy(p0,tim7),infinity) of p0 ..subpath(0,rundy(p0,tim19).zpet) of p0..cycle; penlabels(1,2,3,4,6,7,8); labels(5,5',5'a,5'b,5'c,5'd,5'e,5'',5''a,5''b,5''c,5''d,5''e,5''f); endchar; charscription(15u,cap_height,0)( pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_stem,0); pos4(cap_stem,0); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=0; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r); pos5(cap_hair,90); pos6(cap_hair,90); pos7(ser_height,90); pos8(ser_height,90); y5=y6=.52h; x5=x1r.a; x6=x3l.a; y7=y8=y5; x7=x1r; x8=x3l; filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir80}..z5l---z6l.. {dir-80}z8l---z3l.b{down}..{left}z3l.c..z3l.a{right}.. z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b---z4r.b.. {right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b--- z8r{dir-100}..z6r---z5r..{dir100}z7r---z2r.b..{right}z2r.c.. z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,3,4,5,6,7,8); ); iff known chars.latin_H: bskchar "The letter H"; beginchar(chars.latin_H,15u#,cap_height#,0); uni "0x0048"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; math_fit(0,.75ic#); endchar; iff known chars.latin_Hcaron: bskchar "The letter H with caron"; beginchar(chars.latin_Hcaron,15u#,Acc_height#,0); uni "0x021E"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=.5w; hacek(100,101,102).capital; endchar; iff known chars.latin_Hcircumflex: bskchar "The letter H with circumflex"; beginchar(chars.latin_Hcircumflex,15u#,Acc_height#,0); uni "0x0124"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=.5w; circumflex(100,101,102).capital; endchar; iff known chars.latin_H_BB: bskchar "The blackboard-bold letter H"; beginchar(chars.latin_H_BB,15u#,cap_height#,0); uni "0x210D"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); bot z102=(x3r,y3r.c); top z103=(x4r,y4r.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(102,3r.c,4r)---obl(103,3r,4r.c)...z4r---cycle; endchar; iff known chars.latin_Hstroke: bskchar "The letter H with stroke"; beginchar(chars.latin_Hstroke,15u#,cap_height#,0); uni "0x0126"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_stem,0); pos4(cap_stem,0); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=0; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r); pos5(cap_hair,90); pos6(cap_hair,90); pos7(ser_height,90); pos8(ser_height,90); y5=y6=.52h; x5=x1r.a; x6=x3l.a; y7=y8=y5; x7=x1r; x8=x3l; forsuffixes i=10,11,12,13,14,15: pos.i(bar,90); y[i]=.35[x_height,h]; endfor; lft x10=.75u; x15=w-x10; x11=x1l; x12=x1r; x13=x3l; x14=x3r; bskpoints(10,15,.5hair,.5hair); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir80}..z5l---z6l.. {dir-80}z8l---z3l.b{down}..{left}z3l.c..z3l.a{right}.. z3+ser_boule*up..{right}z3r.a..z3r.c{left}..z3r.b--- obl(14l,3r,15l)---z15ll..z15r---obl(14r,15r,4r)--- z4r.b..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b--- obl(13r,4l,12r)---obl(12r,13r,2r)--- z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b--- obl(11r,2l,10r)---z10rr..z10l---obl(11l,10l,1l)---cycle; infill obl(13l,12l,8r)---z8r{dir-100}..z6r---z5r..{dir100}z7r---obl(12l,7r,13l)---cycle; penlabels(1,2,3,4,5,6,7,8,10,11,12,13,14,15); labels(15ll,10rr); endchar; iff known chars.latin_H_SS: bskchar "The sans-serif letter H"; beginchar(chars.latin_H_SS,13.5u#,cap_height#,0); uni "0x1D5A7"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_stem,0); pos4(cap_stem,0); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=0; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_tl(4l); cap_serifs_tr(4r); cap_serifs_bl(3l); cap_serifs_br(3r); pos5(cap_hair,90); pos6(cap_hair,90); pos7(1.5cap_stem,90); pos8(1.5cap_stem,90); y5=y6=.52h; x5=x1r.a; x6=x3l.a; y7=y8=y5; x7=x1r; x8=x3l; filldraw z1l.b{down}..z1..z1r.b---z7l{dir80}..z5l---z6l.. {dir-80}z8l---z3l.b..z3..z3r.b---z4r.b.. z4..z4l.b---z8r{dir-100}..z6r---z5r..{dir100}z7r---z2r.b..z2..z2l.b---cycle; penlabels(1,2,3,4,5,6,7,8); endchar; charscription(6u,cap_height,0)( pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h; x1=x2=.5w; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..z1r.c{left}..z1r.b---z2r.b..{right}z2r.c.. z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2); ); iff known chars.latin_I: bskchar "The letter I"; beginchar(chars.latin_I,6u#,cap_height#,0); uni "0x0049"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; math_fit(0,.75ic#); endchar; iff known chars.latin_I_dotless: bskchar "The letter I (dotless I for Small Caps)"; beginchar(chars.latin_I_dotless,6u#,cap_height#,0); uni "non"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_Iacute: bskchar "The letter I with acute"; beginchar(chars.latin_Iacute,6u#,Acc_height#,0); uni "0x00CD"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; .5[x100,x101]=x2; x100r-x101=3u; acute(100,101).capital; endchar; iff known chars.latin_Igrave: bskchar "The letter I with grave"; beginchar(chars.latin_Igrave,6u#,Acc_height#,0); uni "0x00CC"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; .5[x100,x101]=x2; grave(100,101).capital; endchar; iff known chars.latin_Idoublegrave: bskchar "The letter I with double grave"; beginchar(chars.latin_Idoublegrave,6u#,Acc_height#,0); uni "0x0208"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x102-x100=3u; d_grave(100,101,102,103,x1l).capital; endchar; iff known chars.latin_Imacron: bskchar "The letter I with macron"; beginchar(chars.latin_Imacron,6u#,Acc_height#-.1x_height#,0); uni "0x012A"; italcorr (Acc_height#-.1x_height#)*slant+.2u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; macron(100,101); endchar; iff known chars.latin_Icircumflex: bskchar "The letter I with circumflex"; beginchar(chars.latin_Icircumflex,6u#,Acc_height#,0); uni "0x00CE"; italcorr (cap_height#+.75u#)*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x2; circumflex(100,101,102).capital; endchar; iff known chars.latin_Iumlaut: bskchar "The letter I with umlaut"; beginchar(chars.latin_Iumlaut,6u#,Acc_height#,0); uni "0x00CF"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; .5[x100,x101]=x2; x100-x101=3u; umlaut(100,101); endchar; iff known chars.latin_Idotabove: bskchar "The letter I with dot above"; beginchar(chars.latin_Idotabove,6u#,Acc_height#,0); uni "0x0130"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x100=x2; dotabove(100); endchar; iff known chars.latin_Ibreve: bskchar "The letter I with breve"; beginchar(chars.latin_Ibreve,6u#,Acc_height#,0); uni "0x012C"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x2+o; breve(100,101,102).capital; endchar; iff known chars.latin_Iinvbreve: bskchar "The letter I with inverted breve"; beginchar(chars.latin_Iinvbreve,6u#,Acc_height#+o#,0); uni "0x020A"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x2+o; bot bot y100=cap_height+o; tieacc(100,101,102).capital; endchar; iff known chars.latin_Itilde: bskchar "The letter I with tilde"; beginchar(chars.latin_Itilde,6u#,Acc_height#,0); uni "0x0128"; italcorr Acc_height#*slant+.5u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101-x100=6u; bot y100=top y2+o; tilde(100,101).capital; endchar; iff known chars.latin_Icaron: bskchar "The letter I with caron"; beginchar(chars.latin_Icaron,6u#,Acc_height#,0); uni "0x01CF"; italcorr Acc_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=x2; hacek(100,101,102).capital; endchar; iff known chars.latin_I_BB: bskchar "The blackboard-bold letter I"; beginchar(chars.latin_I_BB,6u#,cap_height#,0); uni "0x1D540"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; endchar; iff known chars.latin_Iogonek: bskchar "The letter I with ogonek"; beginchar(chars.latin_Iogonek,7u#,cap_height#,.85desc_depth#); uni "0x012E"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; path p; pos1(cap_stem,0); pos2(cap_stem,0); pos3(stem,0); pos4(curve,0); pos5(hair,45); pos6(hair,160); bot y1=0; top y2=h; x1=x2=.5w; x3=x4l+1.5u; x3=x1l; x5-x4l=3u; rt x6l=x5+1.5u; bot y3=0; y4=-.5d; bot y5l=-d; y6=-2/3d; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); p:=z3l{z4l-z3r}..z4l...z5l..{z3-z4}z6l..z6r{z4-z3}..z5r..z4r..z3r; filldraw z1l.b{down}..{left}z1l.c..z3l+hair*left ..subpath(rundy(p,0),rundy(p,length p).zpet) of p ..z3r+hair*right---z1r.a..z1r.c{left}..z1r.b ---z2r.b..{right}z2r.c.. z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,3,4,5,6); endchar; iff known chars.latin_I_SS: bskchar "The sans-serif letter I"; beginchar(chars.latin_I_SS,6u#,cap_height#,0); uni "0x1D5A8"; italcorr cap_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h; x1=x2=.5w; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); filldraw z1l.b{down}..z1..z1r.b---z2r.b..z2..z2l.b---cycle; penlabels(1,2); endchar; charscription(7u,cap_height,.6desc_depth)( pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); bot y1=-cap_hair; top y2=h; rt x1r=rt x2r=w-2u; bot y3r=-d; x3=if monospace: .3w else: u fi; top y4=-.3d; x4l=if monospace: cap_stem else: -u fi; cap_serifs_tl(2l); cap_serifs_tr(2r); filldraw z3r{right}...z1r--- z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b--- z1l...{left}z3l..reverse smitko(4,cap_stem)..cycle; penlabels(1,2,3,4); labels(4',4'',4'''); ); iff known chars.latin_J: bskchar "The letter J"; beginchar(chars.latin_J,7u#,cap_height#,.6desc_depth#); uni "0x004A"; italcorr cap_height#*slant+.5u#; adjust_fit(0,cap_serif_fit#); pickup tiny.nib; usechar; math_fit(.6desc_depth#*slant+1.5u#,ic#-3u#); endchar; iff known chars.latin_J_dotless: bskchar "The letter J (dotless J for Small Caps)"; beginchar(chars.latin_J_dotless,7u#,cap_height#,.6desc_depth#); uni "non"; italcorr cap_height#*slant+.5u#; adjust_fit(0,cap_serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_Jcircumflex: bskchar "The letter J with circumflex"; beginchar(chars.latin_Jcircumflex,7u#,Acc_height#,.6desc_depth#); uni "0x0134"; italcorr (cap_height#+.75u#)*slant+.5u#; adjust_fit(0,cap_serif_fit#); pickup tiny.nib; usechar; x101=x2; circumflex(100,101,102).capital; endchar; iff known chars.latin_J_BB: bskchar "The blackboard-bold letter J"; beginchar(chars.latin_J_BB,7u#,cap_height#,.6desc_depth#); uni "0x1D541"; italcorr cap_height#*slant+.5u#; adjust_fit(0,cap_serif_fit#); pickup tiny.nib; usechar; path p[]; numeric tim[]; top z100=(x2r,y2r.c); p100=z1l{down}..{left}z3l; p101=z3r{right}..{up}z1r; z101=bsktouch(p100,bbs*down,p101,up); tim100=xpart(p100 intersectiontimes (z101--(x101,y1))); tim101=xpart(p101 intersectiontimes (z101--(x101,y3r))); infill obl(2l,2r,1l)---subpath(0,rundy(p100,(tim100,.75bbw)).zpet) of p100 ..subpath(rundy(p101,(tim101,.75bbw)),infinity) of p101---obl(100,1r,2r.c)...z2r---cycle; labels(101); endchar; iff known chars.latin_J_SS: bskchar "The sans-serif letter J"; beginchar(chars.latin_J_SS,7u#,cap_height#,.6desc_depth#); uni "0x1D5A9"; italcorr cap_height#*slant+.5u#; adjust_fit(0,cap_serif_fit#); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); pos4(cap_stem,160); bot y1=-cap_hair; top y2=h; rt x1r=rt x2r=w-2u; bot y3r=-d; x3=u; top y4=-.3d; x4l=-u; z4'=z4+.75currentbreadth*(unitvector(z4l-z4r) rotated 90); cap_serifs_tl(2l); cap_serifs_tr(2r); filldraw z3r{right}...z1r---z2r.b..z2..z2l.b---z1l...{left}z3l..{up}z4l.. if (substring(0,5) of font_identifier_) <> "BSKHC": z4'.. fi {down}z4r..cycle; penlabels(1,2,3,4); labels(4'); endchar; iff known chars.latin_IJ: bskchar "The letter IJ"; beginchar(chars.latin_IJ,12.5u#,cap_height#,.6desc_depth#); uni "0x0132"; italcorr cap_height#*slant+.5u#; adjust_fit(0,cap_serif_fit#); pickup tiny.nib; numeric shift; shift=w-7u; usechar shifted (shift*right); pos5(cap_stem,0); pos6(cap_stem,0); bot y5=0; top y6=h; lft x5l=2u; x5=x6; cap_serifs_tl(6l); cap_serifs_tr(6r); cap_serifs_bl(5l); cap_serifs_br(5r); filldraw z5l.b{down}..{left}z5l.c..z5l.a{right}..z5+ser_boule*up.. {right}z5r.a..z5r.c{left}..z5r.b---z6r.b..{right}z6r.c.. z6r.a---z6l.a..{right}z6l.c..z6l.b---cycle; penlabels(5,6); endchar; charscription(14u,cap_height,0)( pos1(cap_stem,0); pos2(cap_stem,0); pos3(whatever,0); pos5(whatever,0); bot y1=0; top y2=h; lft x1l=lft x2l=2u; rt x3r=w-3.5u; top y3=h; rt x5r=w-2u; bot y5r=0; y4r=.4h; x4r=x2r; z4l=z4r+(cap_hair-tiny,0) rotated (angle(z3r-z4r)+90); z3l=z4l+whatever*(z3r-z4r); x6l=x4r+cap_hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)+90); z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; x4'=x2r; z4'=whatever[z3l,z4l]; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_br(5r); cap_serifs_bl(5l); z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r)); x2'=x6l; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..z1r.c{left}..z1r.b---z4r..z4r'' if x6l'>x4r'': ..z6l' fi ..z6l''---diag_serif(5l,6l).. {left}z5l.c..z5l.a{right}..z5+ser_boule*up..{right}z5r.a.. {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r''--- diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a.. z3l.c{dir0}..diag_serif(3l,4l)---z2'..z2''--- z2r.b..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); ); iff known chars.latin_K: bskchar "The letter K"; beginchar(chars.latin_K,14u#,cap_height#,0); uni "0x004B"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; math_fit(0,.75ic#); endchar; iff known chars.latin_Kcaron: bskchar "The letter K with caron"; beginchar(chars.latin_Kcaron,14u#,Acc_height#,0); uni "0x01E8"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=.5[x2r.a,x3l.a]; hacek(100,101,102).capital; endchar; iff known chars.latin_Kcedilla: bskchar "The letter K with cedilla (treated as comma)"; beginchar(chars.latin_Kcedilla,14u#,cap_height#,.75comma_depth#); uni "0x0136"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x100=.5[x1r.a,x5l.a]; top y100''r=0; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_K_BB: bskchar "The blackboard-bold letter K"; beginchar(chars.latin_K_BB,14u#,cap_height#,0); uni "0x1D542"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; path p[]; numeric tim[]; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; bot z102=(lft x5r,y5r.c); p100=ifobl(6r,6l,5r,5l,,)---obl(5l,6l,5)---z5r...obl(102,5r.c,6r)---cycle; infill p100; endchar; iff known chars.latin_K_SS: bskchar "The sans-serif letter K"; beginchar(chars.latin_K_SS,13u#,cap_height#,0); uni "0x1D5AA"; italcorr cap_height#*slant-u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); pos3(whatever,0); pos5(whatever,0); bot y1=0; top y2=h; lft x1l=lft x2l=2u; rt x3r=w-3u; top y3=h; rt x5r=w-1.5u; bot y5r=0; y4r=.4h; x4r=x2r; z4l=z4r+(cap_hair-tiny,0) rotated (angle(z3r-z4r)+90); z3l=z4l+whatever*(z3r-z4r); x6l=x4r+cap_hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)+90); z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; x4'=x2r; z4'=whatever[z3l,z4l]; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_br(5r); cap_serifs_bl(5l); z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r)); x2'=x6l; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u); y100l=y100r=.5[y3l.b,y3]; y101l=y101r=.5[y5l.b,y5]; z100l=whatever[z3l,z4l]; z100r=whatever[z3r,z4r]; z101l=whatever[z5l,z6l]; z101r=whatever[z5r,z6r]; filldraw z1l.b{down}..z1..z1r.b---z4r..z4r'' if x6l'>x4r'': ..z6l' fi ..z6l''---z101l..z5..z101r---z6r'..z6r''--- z100r...z3...z100l---z2'..z2''---z2r.b..z2..z2l.b---cycle; penlabels(1,2,3,4,5,6,100,101); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); endchar; charscription(12.5u,cap_height,0)( pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. arm_bot_r_points(1r,3).alt---z2r.b..{right}z2r.c..z2r.a--- z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2); ); iff known chars.latin_L: bskchar "The letter L"; beginchar(chars.latin_L,12.5u#,cap_height#,0); uni "0x004C"; italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; math_fit(0,ic#); endchar; iff known chars.latin_Ldot: bskchar "The letter L with middle dot"; beginchar(chars.latin_L,14u#,cap_height#,0); uni "0x013F"; italcorr x_height#*slant+.35dot_size#; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; top y100=x_height; rt x100+.5dot_size=w-.5u; dot(100); endchar; iff known chars.latin_Lacute: bskchar "The letter L with acute"; beginchar(chars.latin_Lacute,12.5u#,Acc_height#,0); uni "0x0139"; italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x101=x2l; acute(100,101).capital; endchar; iff known chars.latin_Lcaron: bskchar "The letter L with caron (treated like comma)"; beginchar(chars.latin_Lcaron,12.5u#,asc_height#,0); uni "0x013D"; italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; y100''r=h; lft x100'l=rt x2r.a+stem; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_Lcedilla: bskchar "The letter L with cedilla (treated as comma)"; beginchar(chars.latin_Lcedilla,12.5u#,cap_height#,.75comma_depth#); uni "0x013B"; italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x100=.5w; top y100''r=-o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_Ldotabove: bskchar "The letter L with dot above"; beginchar(chars.latin_Ldotabove,12.5u#,Acc_height#,0); uni "non"; italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; x100=x2; dotabove(100); endchar; iff known chars.latin_L_BB: bskchar "The blackboard-bold letter L"; beginchar(chars.latin_L_BB,12.5u#,cap_height#,0); uni "0x1D543"; italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); infill obl(2r,2l,1r)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---obl(101,1l,2l.c)...z2l---cycle; endchar; iff known chars.latin_L_SS: bskchar "The sans-serif letter L"; beginchar(chars.latin_L_SS,12u#,cap_height#,0); uni "0x1D5AB"; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,-90); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; lft x1l=lft x2l=2u; z1'=(x1r,y3l); cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); oblu:=cap_hair; filldraw z1l.b{down}..z1---z3r+cap_stem*left...z3...z3l+cap_stem*left---obl(1',3l,2r) ---z2r.b..z2..z2l.b---cycle; penlabels(1,2,3); labels(1'); endchar; iff known chars.latin_Lslash: bskchar "The letter L with slash"; beginchar(chars.latin_Lslash,12.5u#,cap_height#,0); uni "0x0141"; italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; numeric theta; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h; bot y3r=0; rt x3r=w-u; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); x5-x4=4u; x4r=x2l.a; y5-y4=stem; .5[y4,y5]=.8[bar_height,x_height]; theta=angle(z5-z4)+90; pos4(bar,theta); pos5(bar,theta); x4'l=x4'r=x1l; x5'l=x5'r=x1r; z4'l=whatever[z4l,z5l]; z5'l=whatever[z4l,z5l]; z4'r=whatever[z4r,z5r]; z5'r=whatever[z4r,z5r]; bskpoints(4,5,bar,bar); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. arm_bot_r_points(1r,3).alt---obl(5'l,1r,5l)---z5ll..z5r---obl(5'r,5r,2r)--- z2r.b..{right}z2r.c..z2r.a--- z2l.a..{right}z2l.c..z2l.b---obl(4'r,2l,4r)---z4rr..z4l---obl(4'l,4l,1l)---cycle; penlabels(1,2,4,4',5,5'); labels(4rr,5ll); endchar; charscription(17u,cap_height,0)( pos1(cap_hair,0); pos2(cap_hair,0); pos3(cap_stem,0); pos4(cap_stem,0); penpos5(whatever,0); penpos6(whatever,90); penpos10(whatever,0); penpos11(whatever,90); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=0; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_bl_p(3l,.9); cap_serifs_br(3r); cap_serifs_tr(4r); z5r=z2l; z6l=(.49w, if monospace and (x3l-x1r<3cap_stem): 2/3(x3l-x1r) else: -apex_o fi); z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90); z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); y2'=y5'=y2l.b-cap_hair-o; x2'=x2r; z5'=whatever[z6l,z5r]; z5''=(.5[x2',x5'],y2'+o); z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); z10r=z4l; z11l=z6l; z12=z11l+(cap_hair-tiny,0) rotated (angle(z10r-z11l)+90); z10l=z12+whatever*(z10r-z11l); z11r=z12+whatever*(z10r-z11l); z4''=whatever[z10l,z11r]=whatever[z5l,z6r]; y4'=y6'=y4''+cap_hair; z4'=whatever[z10l,z11r]; z6'=whatever[z6r,z5l]; y3'=y3''=y2'; x3'=x3l; z3''=whatever[z11l,z10r]; z10'=z10l+(cap_hair,0) rotated(angle(z11l-z10r)); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a.. z1r.c{left}..z1r.b---z2'..if not bold_face:z5''.. fi z5'---z6l---z3''..z3'---z3l.b.. {left}z3l.c..z3l.a{right}..z3+ser_boule*up..{right}z3r.a..{left}z3r.c.. z3r.b---z4r.b..{right}z4r.c..z4r.a---z4..z10'---z4'..z6'---z8..z5---z2l.a.. {right}z2l.c..z2l.b---cycle; penlabels(1,2,3,4,5,6,10,11); labels(2',3',3'',4',4'',5',5'',6',7,8,9,10',12); ); let _saved_char_m=_saved_char; numeric _saved_w_m; _saved_w_m:=_saved_w; iff known chars.latin_M: bskchar "The letter M"; beginchar(chars.latin_M,17u#,cap_height#,0); uni "0x004D"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; math_fit(0,.75ic#); endchar; iff known chars.latin_M_BB: bskchar "The blackboard-bold letter M"; beginchar(chars.latin_M_BB,17u#,cap_height#,0); uni "0x1D544"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; oblu.more:=3oblu; bot z100=(x3r,y3r.c); top z101=(x4r,y4r.c); top y102=y2l.c; rt z102=whatever[z5',z6l]; infill obl(4l,4r,3l)---obl(3l,4l,3r)---z3r...obl(100,3r.c,4r)---obl(101,3r,4r.c)...z4r---cycle; infill z5'---ifobl(6l,4'',5',8,more,)---z8..z5---z2l...obl(102,2l.c,5')---cycle; endchar; iff known chars.latin_M_SS: bskchar "The sans-serif letter M"; beginchar(chars.latin_M_SS,17u#,cap_height#,0); uni "0x1D5AC"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; pos1(cap_hair,0); pos2(cap_hair,0); pos3(cap_stem,0); pos4(cap_stem,0); penpos5(whatever,0); penpos6(whatever,90); penpos10(whatever,0); penpos11(whatever,90); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=0; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_bl_p(3l,.9); cap_serifs_br(3r); cap_serifs_tr(4r); z5r=z2l; z6l=(.49w, if monospace and (x3l-x1r<3cap_stem): 2/3(x3l-x1r) else: -apex_o fi); z7=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)-90); z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); y2'=y5'=y2l.b-cap_hair-o; x2'=x2r; z5'=whatever[z6l,z5r]; z5''=(.5[x2',x5'],y2'+o); z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); z10r=z4l; z11l=z6l; z12=z11l+(cap_hair-tiny,0) rotated (angle(z10r-z11l)+90); z10l=z12+whatever*(z10r-z11l); z11r=z12+whatever*(z10r-z11l); z4''=whatever[z10l,z11r]=whatever[z5l,z6r]; y4'=y6'=y4''+cap_hair; z4'=whatever[z10l,z11r]; z6'=whatever[z6r,z5l]; y3'=y3''=y2'; x3'=x3l; z3''=whatever[z11l,z10r]; z10'=z10l+(cap_hair,0) rotated(angle(z11l-z10r)); y100l=y100r=.5[y1l.b,y1]; x100l=x1l; x100r=x1r; filldraw z100l...z1...z100r---z2'+cap_hair*down..z5'+cap_hair*unitvector(z6l-z5')---z6l ---z3''..z3'---z3l.b..z3..z3r.b---z4r.b..z4..z10'---z4'..z6'---z8..z5..z2l.b---cycle; penlabels(1,2,3,4,5,6,10,11); labels(2',3',3'',4',4'',5',5'',6',7,8,9,10',12); endchar; charscription(14u,cap_height,0)( pos1(cap_hair,0); pos2(cap_hair,0); pos3(cap_hair,0); pos4(cap_hair,0); penpos5(whatever,0); penpos6(whatever,90); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=-apex_o; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_tl(4l); cap_serifs_tr(4r); z5r=z2l; z6l=z3l; z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90); z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r]; y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l]; z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..z1r.c{left}..z1r.b---z2'..z5'---z6l..z3r--- z4r.b..{right}z4r.c..z4r.a---z4l.a..{right}z4l.c..z4l.b--- z4'..z6'---z8..z5---z2l.a..{right}z2l.c..z2l.b---cycle; penlabels(1,2,3,4,5,6); labels(2',4',5',6',7,8,9); ); iff known chars.latin_N: bskchar "The letter N"; beginchar(chars.latin_N,14u#,cap_height#,0); uni "0x004E"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; math_fit(0,.75ic#-.5u#); endchar; iff known chars.latin_Ncaron: bskchar "The letter N with caron"; beginchar(chars.latin_Ncaron,14u#,Acc_height#,0); uni "0x0147"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101=.5w; y101l=y4; hacek(100,101,102).capital; endchar; iff known chars.latin_Nacute: bskchar "The letter N with acute"; beginchar(chars.latin_Nacute,14u#,Acc_height#,0); uni "0x0143"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x100r=x4l.a; acute(100,101).capital; endchar; iff known chars.latin_Ngrave: bskchar "The letter N with grave"; beginchar(chars.latin_Ngrave,14u#,Acc_height#,0); uni "0x01F8"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; lft x100l=x5l; grave(100,101).capital; endchar; iff known chars.latin_Ntilde: bskchar "The letter N with tilde"; beginchar(chars.latin_Ntilde,14u#,Acc_height#,0); uni "0x00D1"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x101-x100=6u; bot y100=top y5+hair; tilde(100,101).capital; endchar; iff known chars.latin_Ncedilla: bskchar "The letter N with cedilla (treated as comma)"; beginchar(chars.latin_N,14u#,Acc_height#,.75comma_depth#); uni "0x0145"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; x100=.5w; top y100''r=0; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_N_BB: bskchar "The blackboard-bold letter N"; beginchar(chars.latin_N_BB,14u#,cap_height#,0); uni "0x2115"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; oblu.more:=3oblu; top y100=y2l.c; rt z100=whatever[z5',z6l]; infill z5'---obl(6l,5',6r).more---obl(6r,6l,8)---z8..z5---z2...obl(100,2l.c,5')---cycle; endchar; iff known chars.latin_N_SS: bskchar "The sans-serif letter N"; beginchar(chars.latin_N_SS,14u#,cap_height#,0); uni "0x1D5AD"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; pos1(cap_hair,0); pos2(cap_hair,0); pos3(cap_hair,0); pos4(cap_hair,0); penpos5(whatever,0); penpos6(whatever,90); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=-apex_o; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_tl(4l); cap_serifs_tr(4r); z5r=z2l; z6l=z3l; z7=z6l+(cap_stem-tiny,0) rotated (angle(z5r-z6l)-90); z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r]; y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l]; z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); y100l=y100r=.5[y1l.b,y1]; x100l=x1l; x100r=x1r; filldraw z100l...z1...z100r---z2'..z5'---z6l..z3r--- z4r.b...z4...z4l.b---z4'..z6'---z8..z5..z2l.b---cycle; penlabels(1,2,3,4,5,6,100); labels(2',4',5',6',7,8,9); endchar; iff known chars.sign_naira: bskchar "Naira sign"; beginchar(chars.sign_naira,14u#,cap_height#,0); uni "0x20A6"; italcorr cap_height#*slant+.25u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; pos1(cap_hair,0); pos2(cap_hair,0); pos3(cap_hair,0); pos4(cap_hair,0); penpos5(whatever,0); penpos6(whatever,90); pos9(hair,90); pos10(hair,90); pos11(hair,90); pos12(hair,90); bot y1=0; top y2=h; lft x1l=lft x2l=2u; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br(1r); bot y3=-apex_o; top y4=h; rt x3r=rt x4r=w-2u; cap_serifs_tl(4l); cap_serifs_tr(4r); z5r=z2l; z6l=z3l; z7=z6l+(cap_stem,0) rotated (angle(z5r-z6l)-90); z5l=z7+whatever*(z5r-z6l); z6r=z7+whatever*(z5r-z6l); y2'+o=y5'=y2l.b-cap_hair; x2'=x2r; z5'=whatever[z6l,z5r]; y4'-o=y6'=y6r+2cap_hair; x4'=x4l; z6'=whatever[z6r,z5l]; z8=z5l+(cap_hair,0) rotated (angle(z6l-z5r)); y9=y10=x_height; y11=y12=bar_height; lft x9=lft x11=.5u; rt x10=rt x12=w-.5u; y9'r=y10'r=y10''r=y10'''r=y9r; y9'l=y10'l=y10''l=y10'''l=y9l; y11'r=y11''r=y11'''r=y12'r=y11r; y11'l=y11''l=y11'''l=y12'l=y11l; x9'r=x9'l=x11'l=x11'r=x1l; x11''r=x11''l=x1r; x10'r=x10'l=x12'r=x12'l=x4r; x10''r=x10''l=x4l; z11'''l=whatever[z5',z6l]; z11'''r=whatever[z5',z6l]; z10'''l=whatever[z6',z8]; z10'''r=whatever[z6',z8]; filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a ..z1r.c{left}..z1r.b---obl(11''l,1r,11'''l)---obl(11'''l,11''l,6l)---z6l ..z3r---obl(12'l,3r,12l)---z12l..z12r---obl(12'r,12r,10'l)---obl(10'l,12'r,10l) ---z10l..z10r---obl(10'r,10r,4r)---z4r.b..{right}z4r.c..z4r.a---z4l.a ..{right}z4l.c..z4l.b---obl(10''r,4l,10'''r)---obl(10'''r,10''r,8)---z8..z5 ---z2l.a..{right}z2l.c..z2l.b---obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,11'r) ---obl(11'r,9'l,11r)---z11r..z11l---obl(11'l,11l,1l)---cycle; infill obl(11''r,11'''r,2')---z2'..z5'---obl(11'''r,5',11''r)---cycle; infill obl(10''l,10'''l,4')---z4'..z6'---obl(10'''l,6',10''l)---cycle; penlabels(1,2,3,4,5,6,9,10,11,12); labels(2',4',5',6',7,8,9); endchar; iff known chars.latin_Eng: bskchar "The letter Eng"; beginchar(chars.latin_Eng,14u#, cap_height#, desc_depth#); uni "0x014A"; italcorr .75cap_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_stem,0); pos4(cap_stem,0); pos5(1.5cap_hair,90); pos6(cap_hair,180); pos7(cap_hair,-90); lft x1l=2u; bot y1=0; top y2=h+apex_o; x1=x2; rt x3r=w-u; y3=.5bar_height; x4=x3; y4=.75h; y5r=h; x5=.5[x3l,x1r]; x6l=x1r; y6=.6h; y6l:=y6l-hair; bot y7r=-o; x3-x7=3u; top y8=y7+like_curve; x7-x8l=2u; cap_serifs_bl(1l); cap_serifs_br(1r); drop_serif(2,cap_jut); p1:=z6l{up}..z5l..z4l---z3l...{left}z7l..reverse smitko(8,cap_stem)..{right}z7r..{up}z3r; p2:=z3r---z4r..z5r..{down}z6r; p3:=z1r.b--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi filldraw p1..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..{up}z1' --z2r+.2u*left..{(x1l.a-x1l,-.25serif_drop)}z2a&z2a ---z2b+.75u*left..z2b+u*down---z1l.b..z1l.c{left} ..{right}z1l.a..z1+ser_boule*up..{right}z1r.a..{left}z1r.c ..{up}z1r.b---cycle; penlabels(1,2,3,4,5,6,7,8); labels(1'); endchar; charscription(14.3u,cap_height,0)( pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; filldraw z1l{down}..z2l..z3l..z4l..{down}cycle; infill z1r{up}..z4r..z3r..z2r..{up}cycle; penlabels(1,2,3,4); ); iff known chars.latin_O: bskchar "The letter O"; beginchar(chars.latin_O,14.3u#,cap_height#,0); uni "0x004F"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; math_fit(-.5cap_height#*slant+.5u#,.5cap_height#*slant); endchar; iff known chars.latin_Ograve: bskchar "The letter O with grave"; beginchar(chars.latin_Ograve,14.3u#,Acc_height#,0); uni "0x00D2"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4+u; grave(100,101).capital; endchar; iff known chars.latin_Odoublegrave: bskchar "The letter O with double grave"; beginchar(chars.latin_Odoublegrave,14.3u#,Acc_height#,0); uni "0x020C"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x102-x100=3u; x102=x4; d_grave(100,101,102,103,whatever).capital; endchar; iff known chars.latin_Oacute: bskchar "The letter O with acute"; beginchar(chars.latin_Oacute,14.3u#,Acc_height#,0); uni "0x00D3"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4-u; acute(100,101).capital; endchar; iff known chars.latin_Oumlaut: bskchar "The letter O with umlaut"; beginchar(chars.latin_Oumlaut,14.3u#,Acc_height#,0); uni "0x00D6"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; .5[x100,x101]=rt x4; x101-x100=.4(x3-x1); umlaut(100,101); endchar; iff known chars.latin_Ocircumflex: bskchar "The letter O with circumflex"; beginchar(chars.latin_Ocircumflex,14.3u#,Acc_height#,0); uni "0x00D4"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4+hair; circumflex(100,101,102).capital; endchar; iff known chars.latin_Ocaron: bskchar "The letter O with caron"; beginchar(chars.latin_Ocaron,14.3u#,Acc_height#,0); uni "0x01D1"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4; hacek(100,101,102).capital; endchar; iff known chars.latin_Otilde: bskchar "The letter O with tilde"; beginchar(chars.latin_Otilde,14.3u#,Acc_height#,0); uni "0x00D5"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101-x100=6u; bot y100=top y4l+o; tilde(100,101).capital; endchar; iff known chars.latin_Omacron: bskchar "The letter O with macron"; beginchar(chars.latin_Omacron,14.3u#,Acc_height#-.1x_height#,0); uni "0x014C"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; macron(100,101); endchar; iff known chars.latin_Odotabove: bskchar "The letter O with dot above"; beginchar(chars.latin_Odotabove,14.3u#,Acc_height#,0); uni "0x022E"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x4; dotabove(100); endchar; iff known chars.latin_Ohumlaut: bskchar "The letter O with Hungarian umlaut"; beginchar(chars.latin_Ohumlaut,14.3u#,Acc_height#,0); uni "0x0150"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101-x100=3u; .5[x100,x101]=.5w+1.5u; h_umlaut(100,101,102,103,2u).capital; endchar; iff known chars.latin_Obreve: bskchar "The letter O with breve"; beginchar(chars.latin_Obreve,14.3u#,Acc_height#+o#,0); uni "0x014E"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=.5w+o; x102-x100=5u; bot y101l=top y4l+o; breve(100,101,102).capital; endchar; iff known chars.latin_Oinvbreve: bskchar "The letter O with inverted breve"; beginchar(chars.latin_Oinvbreve,14.3u#,Acc_height#+o#,0); uni "0x020E"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=.5w+o; x102-x100=5u; bot y100=top y4l; tieacc(100,101,102).capital; endchar; iff known chars.latin_O_BB: bskchar "The blackboard-bold letter O"; beginchar(chars.latin_O_BB,14.3u#,cap_height#,0); uni "0x1D546"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; path p[]; numeric tim[]; p100:=z4r..z1r{down}..z2r..z3r..cycle; p101:=reverse z4l..z1l{down}..z2l..z3l..cycle; oblu:=1.25bbw; z100=bsktouch(subpath(0,1) of p100,bbs*up,p101,down); z101=bsktouch(subpath(1,2) of p100,bbs*down,p101,up); z102=bsktouch(subpath(3,4) of p100,bbs*up,p101,down); z103=bsktouch(subpath(2,3) of p100,bbs*down,p101,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y1))); tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5))); tim102=xpart(p100 intersectiontimes (z101--(x101,y1))); tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5))); tim104=xpart(p100 intersectiontimes (z102--(x102,y1))); tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5))); tim106=xpart(p100 intersectiontimes (z103--(x103,y1))); tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5))); infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle; infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100 ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle; labels(100,101,102,103); endchar; iff known chars.latin_O_SS: bskchar "The sans-serif letter O"; beginchar(chars.latin_O_SS,14u#,cap_height#,0); uni "0x1D5AE"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; filldraw z1l{down}..z2l..z3l..z4l..{down}cycle; infill z1r{up}..z4r..z3r..z2r..{up}cycle; penlabels(1,2,3,4); endchar; charscription(14.3u,cap_height,.85desc_depth)( path p[]; pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160); lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u; bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d; p0=z1l{down}..z2l..z3l..z4l..{down}z1l; p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r; filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0 ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1 ..subpath(rundy(p1,(1,if bold_face:.5\\ fi stem)),infinity) of p0..cycle; infill z1r{up}..z4r..z3r..z2r..{up}cycle; penlabels(1,2,3,4,5,6,7,8); ); iff known chars.latin_Oogonek: bskchar "The letter O with ogonek"; beginchar(chars.latin_Oogonek,14.3u#,cap_height#,.85desc_depth#); uni "0x01EA"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_Oogonekmacron: bskchar "The letter O with ogonek and macron"; beginchar(chars.latin_Oogonekmacron,14.3u#,Acc_height#-.1x_height#,.85desc_depth#); uni "0x01EC"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; macron(100,101); penlabels(1,2,3,4,5,6,7,8); endchar; charscription(14.3u,cap_height,0)( path p[]; numeric tim[]; oblu:=2oblu; numeric inoblu; inoblu:=1.5f_obl; pos1(cap_curve,0); pos2(cap_hair,90); pos3(cap_curve,180); pos4(cap_hair,270); lft x1l=u-o; rt x3l=w-u+o; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=.5u; bot y2l=-o; top y4l=h+o; z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90); z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l]; p0:=z1l{down}..z2l..z3l..z4l..{down}z1l; p1:=z1r{up}..z4r..z3r..z2r..{up}z1r; bskpoints(5,6,hair,hair); (tim1,tim2)=p0 intersectiontimes (z5l--z6l); (tim3,tim4)=p0 intersectiontimes (z6r--z5r); (tim5,tim6)=p0 intersectiontimes (z0r--z5r); (tim7,tim8)=p0 intersectiontimes (z5l--z0l); (tim11,tim12)=p1 intersectiontimes (z0r--z6r); (tim13,tim14)=p1 intersectiontimes (z5r--z0r); (tim15,tim16)=p1 intersectiontimes (z6l--z0l); (tim17,tim18)=p1 intersectiontimes (z5l--z0l); filldraw subpath (0,rundy(p0,tim1).zpet) of p0..subpath(rundy((z5l--z6ll),tim2),infinity) of (z5l--z6ll).. subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r).. subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0.. subpath(rundy(z0r--z5r,tim6),infinity) of (z0r--z5rr).. subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l) .. subpath(rundy(p0,tim7),infinity) of p0--cycle; infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r).. subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1.. subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle; infill subpath (0, rundy(p1,(tim17,inoblu)).zpet) of p1.. subpath(rundy(z5l--z0l,(tim18,inoblu)),infinity) of (z5l--z0l).. subpath(0,rundy(z0l--z5l,tim16).zpet) of (z0l--z6l).. subpath(rundy(p1,(tim15,inoblu)),infinity) of p1--cycle; penlabels(0,1,2,3,4,5,6); ); iff known chars.latin_Oslash: bskchar "The letter O slash"; beginchar(chars.latin_Oslash,14.3u#,cap_height#,0); uni "0x00D8"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_Oslashacute: bskchar "The letter O slash with acute"; beginchar(chars.latin_Oslashacute,14.3u#,Acc_height#,0); uni "0x01FE"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4-u; acute(100,101).capital; endchar; charscription(12.5u,cap_height,0)( pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2u; pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180); pos6(cap_hair,90); pos7(.8ser_height,90); x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-u; x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi; y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; y5=.5[y4,y6]; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir70}.. (x7l if x7l+cap_hairx1r: -u fi; y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; y5=.5[y4,y6]; lft x8=.5u; x8'=x1l; x9'=x1r; x9=.5[x6,x5]; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); y8=.65y7l; if y8x1r: -u fi; y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; y5=.5[y4,y6]; cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); filldraw z1l.b..z1..z1r.b---z7l{dir70}.. (x7l if x7l+cap_hairy7r: z3r else: z7r+up fi---cycle; penlabels(1,2,3,4,5,6,7); math_fit(0,ic#-2.5u#); endchar; iff known chars.latin_Thorn: bskchar "The letter Thorn"; beginchar(chars.latin_Thorn,12u#,cap_height#,0); uni "0x00DE"; italcorr .5[x_height#,bar_height#]*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2u; pos3(.8ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180); pos6(cap_hair,90); pos7(.8ser_height,90); x7=x1r; y7l=y6l; rt x5l=w-u; x6=x4=.5[x1r,x5r]-u; y7l:=y7l-hair; y3l=y4l; x3=x7; y3l:=y3l+hair; y5=.5[y4,y6]=.5[x_height,bar_height]; y4r-y6r=bar_height; cap_serifs_tl(2l); cap_serifs_tr(2r); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); if y1r.b>y7l: y1r.b:=y7l; fi filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {right}z1r.a..z1r.c{left}..z1r.b---z7l{dir70}.. (x7l if x7l+cap_hairx1r: -u fi; y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; y5=.5[y4,y6]; rt x8r=w-2u; bot y8r=0; x9r=x5r if .65cap_curvex1r: -u fi; y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; y5=.5[y4,y6]; rt x8r=w-1.5u; bot y8r=0; x9r=x5r if .65cap_curvey7r: z3r else: z7r+up fi---cycle; penlabels(1,2,3,4,5,6,7,8,9); labels(8',8''); endchar; iff known chars.sign_recipe: bskchar "Recipe sign"; beginchar(chars.sign_recipe,14u#,cap_height#,0); uni "0x211E"; italcorr bar_height#*slant; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; numeric alpha, tim[],theta; oblu:=2oblu; path p[]; pos1(cap_stem,0); pos2(cap_stem,0); bot y1=0; top y2=h-drop_stem; lft x1l= lft x2l= 2u; pos3(.75ser_height,270); pos4(cap_hair,270); pos5(.95cap_curve,180); pos6(cap_hair,90); pos7(.8ser_height,90); x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-2.5u; x4=.5[x1r,x5r]; y7l:=y7l-hair; x6=x4 if x4-1.5u>x1r: -u fi; y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; y5=.5[y4,y6]; rt x8r=w-2u; bot y8r=0; x9r=x5r if .65cap_curvex1r: -u fi; y3l+serif_o=y4l; top y4l=h+drop_stem; x3=x7; y5=.5[y4,y6]; rt x8r=w-2u; bot y8r=0; x9r=x5r if .65cap_curvey11): subpath(tim8,tim6) of p0 else: subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0 fi ..cycle; penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12); ); iff known chars.latin_a: bskchar "The letter a"; beginchar(chars.latin_a,9u#,x_height#,0); uni "0x0061"; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_aacute: bskchar "The letter a with acute"; beginchar(chars.latin_aacute,9u#,asc_height#,0); uni "0x00E1"; italcorr asc_height#*slant-1.75u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x3; acute(100,101); endchar; iff known chars.latin_agrave: bskchar "The letter a with grave"; beginchar(chars.latin_agrave,9u#,asc_height#,0); uni "0x00E0"; adjust_fit(0,0); pickup tiny.nib; usechar; lft x100l=x4l; grave(100,101); endchar; iff known chars.latin_aumlaut: bskchar "The letter a with umlaut"; beginchar(chars.latin_aumlaut,9u#,asc_height#-dot_size#,0); uni "0x00E4"; adjust_fit(0,0); pickup tiny.nib; usechar; .5[x100,x101]=x3; umlaut(100,101); endchar; iff known chars.latin_adoublegrave: bskchar "The letter a with doublegrave"; beginchar(chars.latin_adoublegrave,9u#,asc_height#,0); uni "0x0201"; pickup tiny.nib; adjust_fit(0,0); usechar; x102-x100=3u; d_grave(100,101,102,103,x3l); endchar; iff known chars.latin_acircumflex: bskchar "The letter a with circumflex"; beginchar(chars.latin_acircumflex,9u#,asc_height#-.1x_height#,0); uni "0x00E2"; italcorr .5[asc_height#,x_height#]*slant-u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x3+2o; circumflex(100,101,102); endchar; iff known chars.latin_acaron: bskchar "The letter a with caron"; beginchar(chars.latin_acaron,9u#,asc_height#,0); uni "0x01CE"; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x3; hacek(100,101,102); endchar; iff known chars.latin_abreve: bskchar "The letter a with breve"; beginchar(chars.latin_abreve,9u#,asc_height#+apex_o#,0); uni "0x0103"; adjust_fit(0,0); pickup tiny.nib; usechar; lft x101=x3+o; x102-x100=5u; breve(100,101,102); endchar; iff known chars.latin_ainvbreve: bskchar "The letter a with inverted breve"; beginchar(chars.latin_ainvbreve,9u#,asc_height#,0); uni "0x0203"; adjust_fit(0,0); pickup tiny.nib; usechar; lft x101=x3+o; x102-x100=5u; tieacc(100,101,102); endchar; iff known chars.latin_amacron: bskchar "The letter a with macron"; beginchar(chars.latin_amacron,9u#,.5[asc_height#,x_height#],0); uni "0x0101"; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x4r; macron(100,101); endchar; iff known chars.latin_atilde: bskchar "The letter a with tilde"; beginchar(chars.latin_atilde,9u#,asc_height#,0); uni "0x00E3"; italcorr asc_height#*slant-u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101-x100=6u; lft x.tilde=x3; tilde(100,101); endchar; iff known chars.latin_aring: bskchar "The letter a with ring"; beginchar(chars.latin_aring,9u#,asc_height#,0); uni "0x00E5"; adjust_fit(0,0); pickup tiny.nib; usechar; lft x100=x3; x100-x101=1.3u; ring(100,101); endchar; iff known chars.latin_adotabove: bskchar "The letter a with dot above"; beginchar(chars.latin_adotabove,9u#,asc_height#-.5dot_size#,0); uni "0x0227"; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x3l; dotabove(100); endchar; iff known chars.latin_a_feminine: bskchar "Feminine ordinal indicator (superscript a)"; beginchar(chars.latin_a_feminine,5.5u#,asc_height#-.5x_height#,0); uni "0x00AA"; adjust_fit(0,0); pickup tiny.nib; multiply(.85)(curve,hair,vair); usechar shifted (-x8l+o,-y3r) scaled .5 shifted (u+(HH-.5x_height)*slant,HH); endchar; iff known chars.latin_aogonek: bskchar "The letter a with ogonek"; beginchar(chars.latin_aogonek,9u#,x_height#,.85desc_depth#); uni "0x0105"; adjust_fit(0,0); pickup tiny.nib; numeric aend; aend:=stem; oblu:=2oblu; path p[]; numeric tim[]; pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right; pos13(stem,0); pos14(curve,0); pos15(hair,45); pos16(hair,160); z4''=z4+.5(aend-currentbreadth)*dir135; rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve; x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r]; x3=.5[x1r,lft u]; top y3r=h+o; y4''=.5[y2,y3l]; lft x4r=u+o; z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1); x13-x14l=1.5u; x13r=x0'; x15-x14l=3u; rt x16l-x15=1.5u; y13=0; y14=-.5d; bot y15l=-d; y16=-2/3d; pos6(hair,angle(z7-z6l)+90); pos8(curve,30); lft x8l=u; y8r=y7-like_hair; pos9(hair,120); x9r=x3; y9l=o; pos10(hair,angle(z1-z9l)+90); z10l=z1; p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l.. {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r.. {right}z0'r..{z0r-z0'}z0r; p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l; p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r; p3:=reverse (z13l{z14l-z13r}..z14l...z15l..{z13-z14}z16l..z16r{z14-z13}..z15r..z14r..z13r); (tim1,tim2)=p0 intersectiontimes p1; (tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0; (tim5,tim6)=p2 intersectiontimes p0; (tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0; filldraw subpath(0,rundy(p0,1).zpet) of p0 ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3 ..subpath(rundy(p0,1),rundy(p0,tim1).zpet) of p0.. subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1.. subpath(rundy(p0,tim4),infinity) of p0..cycle; z11=point rundy(p0,tim8).zpet of p0; z12=point rundy(p0,tim6) of p0; infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2.. if (y12>y11): subpath(tim8,tim6) of p0 else: subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0 fi ..cycle; penlabels(0,0',1,2,3,4,5,6,8,9,10,13,14,15,16); labels(4',4'',7,11,12); endchar; iff known chars.latin_a_BB: bskchar "The blackboard-bold letter a"; beginchar(chars.latin_a_BB,9u#,x_height#,0); uni "0x1D552"; adjust_fit(0,0); pickup tiny.nib; numeric aend; aend:=.8cap_stem; oblu:=2oblu; path p[]; numeric tim[]; pos0(hair,180); pos0'(.9[stem,hair],90); pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right; z4''=z4+.5(aend-currentbreadth)*dir135; rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve; x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r]; x3=.5[x1r,lft u]; top y3r=h+o; y4''=.5[y2,y3l]; lft x4r=u+o; z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1); pos6(hair,angle(z7-z6l)+90); pos8(cap_stem,30); lft x8l=u; y8=y7-like_hair; pos9(hair,120); x9r=x3; y9l=o; pos10(hair,angle(z1-z9l)+90); z10l=z1; p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l.. {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r.. {right}z0'r..{z0r-z0'}z0r; p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l; p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r; (tim1,tim2)=p0 intersectiontimes p1; (tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0; (tim5,tim6)=p2 intersectiontimes p0; (tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0; filldraw subpath(0,rundy(p0,tim1).zpet) of p0.. subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1.. subpath(rundy(p0,tim4),infinity) of p0..cycle; z11=point rundy(p0,tim8).zpet of p0; z12=point rundy(p0,tim6) of p0; infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2.. if (y12>y11): subpath(tim8,tim6) of p0 else: subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0 fi ..cycle; p100:=subpath(1,4) of p0; p101:=subpath(9,12) of p0; p102:=subpath(1,infinity) of p1; p103:=subpath(1,infinity) of p2; z100=bsktouch(p100,up,p101,down); z101=bsktouch(subpath(1,infinity) of p100,up,p101,down); z102=bsktouch(p102,up,p103,down); z103=bsktouch(p102,dir-30,p103,dir120); tim100=xpart(p100 intersectiontimes (z100--(x100,0'l-5))); tim101=xpart(p101 intersectiontimes (z100--(x100,y1))); tim102=xpart(p100 intersectiontimes (z101--(x101,y1))); tim103=xpart(p101 intersectiontimes (z101--(x101,y3r+5))); tim104=xpart(p102 intersectiontimes (z102--(x102,y9l-5))); tim105=xpart(p103 intersectiontimes (z102--(x102,y12))); tim106=xpart(p102 intersectiontimes (z103--(x103,y2))); tim107=xpart(p103 intersectiontimes (z103--(x103,y7))); oblu:=bbw; infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102 ..reverse subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle; penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12,100,101,102,103); endchar; iff known chars.latin_a_SS: bskchar "The sans-serif letter a"; beginchar(chars.latin_a_SS,9u#,x_height#,0); uni "0x1D5BA"; adjust_fit(0,-stem#); pickup tiny.nib; numeric aend; aend:=stem; oblu:=2oblu; path p[]; numeric tim[]; pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right; z4''=z4+.5(aend-currentbreadth)*dir135; rt x1r=w-u-stem; x2=x1; y1=stem+hair; y2=h-like_curve; x0l=w-u; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r]; x3=.5[x1r,lft u]; top y3r=h+o; y4''=.5[y2,y3l]; lft x4r=u+o; z5l=z2l; z6l=z5l+like_hair*down; z7=(u,y1); pos6(hair,angle(z7-z6l)+90); pos8(curve,30); lft x8l=u; y8r=y7-like_hair; pos9(hair,120); x9r=x3; y9l=o; pos10(hair,angle(z1-z9l)+90); z10l=z1; p0=(x1l,hair)---z2l..{left}z3l..{down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---(x1r,hair)..(x1,0)..{up}(x1l,hair); p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l; p2:=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r; (tim1,tim2)=p0 intersectiontimes p1; (tim3,tim4)=subpath(2,infinity) of p1 intersectiontimes p0; (tim5,tim6)=p2 intersectiontimes p0; (tim7,tim8)=subpath(2,infinity) of p2 intersectiontimes p0; filldraw subpath(0,rundy(p0,tim1).zpet) of p0.. subpath(rundy(p1,tim2),rundy(p1,2+tim3).zpet) of p1.. subpath(rundy(p0,tim4),infinity) of p0..cycle; z11=point rundy(p0,tim8).zpet of p0; z12=point rundy(p0,tim6) of p0; infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2.. if (y12>y11): subpath(rundy(p0,(tim8,f_obl)).zpet,rundy(p0,(tim6,f_obl))) of p0 else: subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0 fi ..cycle; penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12); endchar; iff known chars.latin_b: bskchar "The letter b"; beginchar(chars.latin_b,11u#,asc_height#,0); uni "0x0062"; italcorr .5x_height#*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2oblu; pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; bot y2l=-o; top y4l=x_height+o; lft x5l=2u; bot y5=-d; top y6r=h; {{ numeric oldserif; oldserif:=serif_drop; save serif_drop; serif_drop:=.81oldserif; lowercase_points(5,6,jut); }}; p0=z1l{up}..z4l..z3l..z2l..{z1r-z2r}z1'l---cycle; p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; p2=z5f--z6r; tim1 =xpart(subpath (0,3) of p0 intersectiontimes p2); tim2-3=xpart(subpath (3,5) of p0 intersectiontimes ((0,hair)--(w,hair))); z7=point tim1 of p0 + like_stem*up; tim3 =xpart(p0 intersectiontimes ((0,y7-.5hair)--(w,y7-.5hair))); y0=ypart(point tim2 of p0)+o; z0=whatever[z5l,z5f]; if (abs(z0-z1'l))y5: y1':=y5; fi; tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'--- lowercase_stem_draw(1,2)---cycle; penlabels(3,4,5,6); labels(1'); ); iff known chars.latin_h: bskchar "The letter h"; beginchar(chars.latin_h,11u#, asc_height#, 0); uni "0x0068"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_hcaron: bskchar "The letter h with caron"; beginchar(chars.latin_hcaron,11u#,asc_height#,0); uni "0x021F"; italcorr asc_height#*slant-1.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; lft x101=x5+hair; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair; hacek(100,101,102); endchar; iff known chars.latin_hcircumflex: bskchar "The letter h with circumflex"; beginchar(chars.latin_hcircumflex,11u#,asc_height#,0); uni "0x0125"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; lft x101=x5+hair; x102-x100=4.5u; circumflex(100,101,102); endchar; iff known chars.latin_h_BB: bskchar "The blackboard-bold letter h"; beginchar(chars.latin_h_BB,11u#, asc_height#, 0); uni "0x1D559"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2oblu; pos3(.8cap_stem,0); pos4(.8cap_stem,0); pos5(n_str_hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h; rt x3r=w-2u; bot y3=0; serif_bot(3); x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.5x_height; save stem; stem:=.8cap_stem; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+hair+tiny)*up; if y1'>y5: y1':=y5; fi; tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'--- lowercase_stem_draw(1,2)---cycle; oblu:=f_obl; oblu.more:=1.25oblu; bot z100=(x1l,y1b); bot z103=(x3r,y3e); p100=subpath(3,4) of p2; p101=subpath(1,2) of p1; z101=bsktouch(p100,down,p101,up); tim100=xpart(p100 intersectiontimes (z101--(x101,h))); tim101=xpart(p101 intersectiontimes (z101--(x101,0))); infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle; infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100 ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101 ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle; penlabels(3,4,5,6); labels(1',100,101,102); endchar; iff known chars.latin_h_SS: bskchar "The sans-serif letter h"; beginchar(chars.latin_h_SS,11u#, asc_height#, 0); uni "0x1D5C1"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h; rt x3r=w-2u; bot y3=0; serif_bot(3); x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.5x_height; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3a..{right}z3; p2:=z3{right}..z3f---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+hair+tiny)*up; if y1'>y5: y1':=y5; fi; tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---z2r..z2b---z1a..z1..z1f---cycle; penlabels(3,4,5,6); labels(1'); endchar; iff known chars.latin_hstroke: bskchar "The letter h with stroke"; beginchar(chars.latin_hstroke,11u#, asc_height#, 0); uni "0x0127"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2f_obl; oblu.light:=f_obl; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90); x8-x7=4u; y8=y8'=y7=y7'=.4[x_height,h]; lft x7=.5u; x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair); lft x1l=2u; bot y1=0; top y2=h; rt x3r=w-2u; bot y3=0; serif_bot(3); x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.5x_height; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+hair+tiny)*up; if y1'>y5: y1':=y5; fi; tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---obl(8'l,1',8l).light ---z8ll..z8r---obl(8'r,8r,2).light---subpath(0,3) of lowercase_stem_draw(1,2) ---obl(7'r,2l,7r).light---z7rr..z7l---obl(7'l,7l,1l).light ---subpath(4,infinity) of lowercase_stem_draw(1,2)---cycle; penlabels(3,4,5,6,7,7',8,8'); labels(1',7rr,8ll); endchar; iff known chars.latin_hbar: bskchar "The letter h with bar (Dirac constant)"; beginchar(chars.latin_hbar,11u#, asc_height#, 0); uni "0x210F"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[], theta; oblu:=2f_obl; oblu.light:=f_obl; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); x8-x7=4u; .5[y8,y7]=.35[x_height,h]; y8-y7=stem; lft x7=.5u; theta:=angle(z8-z7)+90; pos7(bar,theta); pos8(bar,theta); x7'l=x7'r=x1l; x8'l=x8'r=x1r; bskpoints(7,8,hair,hair); z7'l=whatever[z7l,z8l]; z8'l=whatever[z7l,z8l]; z7'r=whatever[z7r,z8r]; z8'r=whatever[z7r,z8r]; lft x1l=2u; bot y1=0; top y2=h; rt x3r=w-2u; bot y3=0; serif_bot(3); x4=x3; y4=.65x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.5x_height; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+hair+tiny)*up; if y1'>y5: y1':=y5; fi; tim3=xpart(p2 intersectiontimes((0,y1'-.5hair)--(.5w,y1'-.5hair))); filldraw p1..z3+ser_boule*up..subpath (0,tim3) of p2..z1'---obl(8'l,1',8l).light ---z8ll..z8r---obl(8'r,8r,2).light---subpath(0,3) of lowercase_stem_draw(1,2) ---obl(7'r,2l,7r).light---z7rr..z7l---obl(7'l,7l,1l).light ---subpath(4,infinity) of lowercase_stem_draw(1,2)---cycle; penlabels(3,4,5,6,7,7',8,8'); labels(1',7rr,8ll); endchar; charscription(6u,x_height,0)( oblu:=2oblu; x1=.5w; bot y1=0; top y2=x_height; lowercase_stem(1,2,1.2jut).alt; ); iff known chars.latin_dotless_i: bskchar "The dotless i"; beginchar(chars.latin_dotless_i,6u#, x_height#, 0); uni "0x0131"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_i: bskchar "The letter i"; beginchar(chars.latin_i,6u#, asc_height#-.5dot_size#, 0); uni "0x0069"; italcorr (asc_height#-.5dot_size#)*slant-1.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; x3=x1-ddot; top y3=h-.5dot_size; usechar; dot(3); endchar; iff known chars.latin_iacute: bskchar "The letter i with acute"; beginchar(chars.latin_iacute,6u#, asc_height#, 0); uni "0x00ED"; italcorr asc_height#*slant-u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; x101=x2l; usechar; acute(100,101); endchar; iff known chars.latin_igrave: bskchar "The letter i with grave"; beginchar(chars.latin_igrave,6u#,asc_height#,0); uni "0x00EC"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x2; grave(100,101); endchar; iff known chars.latin_idoublegrave: bskchar "The letter i with double grave"; beginchar(chars.latin_idoublegrave,6u#,asc_height#,0); uni "0x0209"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x102-x100=2.5u; x103r=x2r; d_grave(100,101,102,103,whatever); endchar; iff known chars.latin_imacron: bskchar "The letter i with macron"; beginchar(chars.latin_imacron,6u#,.5[asc_height#,x_height#],0); uni "0x012B"; italcorr .5[asc_height#,x_height#]*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=w-u; x100=.5u; macron(100,101); endchar; iff known chars.latin_icircumflex: bskchar "The letter i with circumflex"; beginchar(chars.latin_icircumflex,6u#,asc_height#-.1x_height#,0); uni "0x00EE"; italcorr .5[asc_height#,x_height#]*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x2l; circumflex(100,101,102); endchar; iff known chars.latin_iumlaut: bskchar "The letter i with umlaut"; beginchar(chars.latin_iumlaut,6u#,asc_height#-dot_size#,0); uni "0x00EF"; italcorr (asc_height#-dot_size#)*slant-.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; .5[x100,x101]=x2l; x100-x101=1.8dot_size; umlaut(100,101); endchar; iff known chars.latin_ibreve: bskchar "The letter i with breve"; beginchar(chars.latin_ibreve,6u#,asc_height#,0); uni "0x012D"; italcorr asc_height#*slant-u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x2l-o; breve(100,101,102); endchar; iff known chars.latin_iinvbreve: bskchar "The letter i with inverted breve"; beginchar(chars.latin_iinvbreve,6u#,asc_height#,0); uni "0x020B"; italcorr x_height#*slant-.25u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x2l; tieacc(100,101,102); endchar; iff known chars.latin_itilde: bskchar "The letter i with tilde"; beginchar(chars.latin_itilde,6u#,asc_height#,0); uni "0x0129"; italcorr asc_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101-x100=5.5u; rt x.tilde=x2l; tilde(100,101); endchar; iff known chars.latin_icaron: bskchar "The letter i with caron"; beginchar(chars.latin_icaron,6u#,asc_height#,0); uni "0x01D0"; italcorr asc_height#*slant-.25u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x2l; x102-x100=4.5u; hacek(100,101,102); endchar; charscription(6u,x_height,0)( oblu:=2oblu; x1=.5w; bot y1=0; top y2=x_height; save stem; stem:=.8cap_stem; lowercase_stem(1,2,1.2jut).alt; bot z100=(x1l,y1b); oblu:=f_obl; oblu.more:=1.25oblu; infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle; ); iff known chars.latin_dotless_i_BB: bskchar "The blackboard-bold dotless i"; beginchar(chars.latin_dotless_i_BB,6u#, x_height#, 0); uni "non"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_i_BB: bskchar "The blackboard-bold letter i"; beginchar(chars.latin_i_BB,6u#, asc_height#-.5dot_size#, 0); uni "0x1D55A"; italcorr (asc_height#-.5dot_size#)*slant-1.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x3=x1-ddot; top y3=h-.5dot_size; dot(3); endchar; charscription(6u,x_height,0)( oblu:=2oblu; x1=.5w; bot y1=0; top y2=x_height; lowercase_points(1,2,1.2jut).alt; filldraw z1f---z2r..z2b---z1a..z1..cycle; ); iff known chars.latin_dotless_i_SS: bskchar "The sans-serif dotless i"; beginchar(chars.latin_dotless_i_SS,6u#, x_height#, 0); uni "non"; adjust_fit(serif_fit#-.5u#,serif_fit#-.5u#); pickup tiny.nib; usechar; endchar; iff known chars.latin_i_SS: bskchar "The sans-serif letter i"; beginchar(chars.latin_i_SS,6u#, asc_height#-.5dot_size#, 0); uni "0x1D5C2"; italcorr (asc_height#-.5dot_size#)*slant-1.5u#; adjust_fit(serif_fit#-.5u#,serif_fit#-.5u#); pickup tiny.nib; x3=x1-ddot; top y3=h-.5dot_size; usechar; dot(3); endchar; iff known chars.latin_iogonek: bskchar "The letter i with ogonek"; beginchar(chars.latin_iogonek,6u#,asc_height#-.5dot_size#,.85desc_depth#); uni "0x012F"; italcorr (asc_height#-.5dot_size#)*slant-1.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; oblu:=2oblu; path p[]; numeric tim[]; x1=.5w; bot y1=0; top y2=x_height; lowercase_points(1,2,1.2jut).alt; p0:=lowercase_stem_draw(1,2)--z2r; pos3(stem,0); pos4(curve,0); pos5(hair,45); pos6(hair,160); x3-x4l=1.5u; x3=x1; x5-x4l=3u; rt x6l-x5=1.5u; y3=0; y4=-.5d; bot y5l=-d; y6=-2/3d; p1:=z3l{z4l-z3r}..z4l...z5l..{z3-z4}z6l..z6r{z4-z3}..z5r..z4r..z3r; tim0=xpart(p0 intersectiontimes ((x3l,0)--(x3l,y1b))); tim1=xpart(p0 intersectiontimes ((x3r,0)--(x3r,y1b))); filldraw subpath(0,rundy(p0,tim0).zpet) of p0 ..subpath(rundy(p1,0),rundy(p1,infinity).zpet) of p1 ..subpath(rundy(p0,tim1),infinity) of p0..cycle; x0=x1-ddot; top y0=h-.5dot_size; dot(0); penlabels(3,4,5,6); endchar; iff known chars.logo_i: bskchar "The letter i for logo"; beginchar(chars.logo_i,6u#, asc_height#-.5dot_size#, comma_depth#); uni "non"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; x3=x1-ddot; top y3=h-.5dot_size; oblu:=2oblu; x1=.5w; bot y1=0; top y2=x_height; lowercase_points(1,2,1.2jut).alt; z5=z1b-z1c; y1c:=-d; y1a:=0; x4=x1; z4=whatever[z1c,z1d]+o*up; z6=z1c+ z5 rotated angle(z1d-z1c); filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---z1a..z6{z1c-z1d}..{z1d-z1c}z1c ..z4..{z1d-z1c}z1d{right}..{left}z1e..{up}z1f---z2r&cycle; dot(3); labels(1a,1b,1c,4,6); endchar; charscription(5u,x_height,desc_depth)( oblu:=2oblu; pos3(hair,-90); bot y1=-d+like_curve; top y2=x_height; rt x1r=w-u; bot y3r=-d; x3=if monospace: .4w else: u fi; top y4=y1; if monospace: x4=u; else: x4l=-u; fi; lowercase_points(1,2,1.2jut).alt; filldraw z3r{right}...{up}z1r--z2r..{(x2a-x1r,-.25serif_drop)}z2a& z2a---obl(2b,2a,1a)---z1l...{left}z3l..reverse smitko(4,stem)..cycle; penlabels(1,2,3,4); labels(4',4'',4'''); ); iff known chars.latin_dotless_j: bskchar "The dotless j"; beginchar(chars.latin_dotless_j,5u#,x_height#,desc_depth#); uni "non"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_j: bskchar "The letter j"; beginchar(chars.latin_j,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x006A"; italcorr (asc_height#-.5dot_size#)*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; top y5=h-.5dot_size; x5=x1-ddot; usechar; dot(5); endchar; iff known chars.latin_jcircumflex: bskchar "The letter j with circumflex"; beginchar(chars.latin_jcircumflex,5u#,asc_height#-.1x_height#,1.5like_cap_curve#); uni "0x0135"; italcorr .5[asc_height#,x_height#]*slant+1.5u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x2l; circumflex(100,101,102); endchar; iff known chars.latin_ij: bskchar "The letter ij"; beginchar(chars.latin_ij,9.5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x0133"; italcorr (asc_height#-.5dot_size#)*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; numeric shift; shift:=w-5u; usechar shifted (shift*right); oblu:=2f_obl; lft x5l=2u; bot y5=0; top y6=x_height; top y7=top y8=h-.5dot_size; x7=x5-ddot; x8=x1-ddot+shift; lowercase_stem(5,6,1.2jut).alt; dot(7); dot(8); endchar; charscription(5u,x_height,desc_depth)( path p[]; numeric tim[]; oblu:=2oblu; pos3(hair,-90); bot y1=-d+like_curve; top y2=x_height; rt x1r=w-u; bot y3r=-d; x3=if monospace: .4w else: u fi; top y4=y1; if monospace: x4=u; else: x4l=-u; fi; save stem; stem:=.8cap_stem; lowercase_points(1,2,1.2jut).alt; filldraw z3r{right}...{up}z1r--z2r..{(x2a-x1r,-.25serif_drop)}z2a& z2a---obl(2b,2a,1a)---z1l...{left}z3l..reverse smitko(4,stem)..cycle; p100:=z1l{down}...{left}z3l; p101:=z3r{right}..{up}z1r; z100=bsktouch(p100,down,p101,up); tim100=xpart(p100 intersectiontimes (z100--z1c)); tim101=xpart(p101 intersectiontimes (z100--(w,-d))); oblu:=bbw; oblu.more:=1.25f_obl; oblu.m:=f_obl; infill ifobl(2r,2b,1r,1l,more,m)---subpath(0,rundy(p100,tim100).zpet) of p100 ..subpath(rundy(p101,tim101),infinity) of p101---cycle; penlabels(1,2,3,4); labels(4',4'',4''',100); ); iff known chars.latin_dotless_j_BB: bskchar "The blackboard-bold dotless j"; beginchar(chars.latin_dotless_j_BB,5u#,x_height#,desc_depth#); uni "non"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_j_BB: bskchar "The blackboard-bold letter j"; beginchar(chars.latin_j_BB,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x1D55B"; italcorr (asc_height#-.5dot_size#)*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; top y5=h-.5dot_size; x5=x1-ddot; usechar; dot(5); endchar; charscription(5u,x_height,desc_depth)( oblu:=2oblu; pos3(hair,-90); pos4(stem,150); bot y1=-d+like_curve; top y2=x_height; rt x1r=w-u; bot y3r=-d; x3=if monospace: .4w else: u fi; top y4=y1; if monospace: x4=u; else: x4l=-u; fi; lowercase_points(1,2,1.2jut).alt; z4'=z4+(o,.2stem); z4''=z4+.5(stem-currentbreadth)*dir-135; filldraw z3r{right}...{up}z1r---z2r..z2b---z1l...{left}z3l.. z4l..z4'..z4''..cycle; penlabels(1,2,3,4); labels(4',4'',4'''); ); iff known chars.latin_dotless_j_SS: bskchar "The sans-serif dotless j"; beginchar(chars.latin_dotless_j_SS,5u#,x_height#,desc_depth#); uni "non"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_j_SS: bskchar "The sans-serif letter j"; beginchar(chars.latin_j_SS,5u#,asc_height#-.5dot_size#,desc_depth#); uni "0x1D5C3"; italcorr (asc_height#-.5dot_size#)*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; top y5=h-.5dot_size; x5=x1-ddot; usechar; dot(5); endchar; charscription(10.5u,asc_height,0)( pos3(whatever,0); pos5(whatever,0); bot y1=0; top y2=h; lft x1l=2u; rt x3r=w-3u; top y3=x_height; rt x5r=w-2u; bot y5r=0; lowercase_points(1,2,jut); y4r=.45x_height; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90); z3l=z4l+whatever*(z3r-z4r); x6l=x4r+hair+.75u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90); z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; x4'=x2r; z4'=whatever[z3l,z4l]; serifs_tl(3l); serifs_tr(3r); serifs_br(5r); serifs_bl(5l); z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=(z6r+(u,0) rotated (angle(z3r-z4r))) shifted ((hair-currentbreadth)*unitvector(z3r-z4r) rotated -90); z2'=z4'+(1.5u,0) rotated (angle(z3l-z4l)); z2''=z4'+(0,2u); filldraw z1a{down}..{left}z1b..z1c{right}..z1+ser_boule*up..{right}z1d.. z1e{left}..z1f---obl(4r,1f,4r'')..z4r''..z6l''--- obl(5l,6l'',5r){right}..z5r+.5ser_boule*up..{right}z5r.a.. {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r'' if not bold_face: ---diag_serif(3r,4r) fi ..{dir0}z3r.c..z3r.a---z3l.a..z3l.c{dir0}.. diag_serif(3l,4l)---z2'..{up}z2''--z2r ..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a) ---cycle; penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); ); iff known chars.latin_k: bskchar "The letter k"; beginchar(chars.latin_k,10.5u#,asc_height#,0); uni "0x006B"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_kcaron: bskchar "The letter k with caron"; beginchar(chars.latin_kcaron,10.5u#,asc_height#,0); uni "0x01E9"; italcorr asc_height#*slant-.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=x1r+u; x102-x100=4.5u; y100=h+hair; y101l=1/4[x_height,y100]+hair; hacek(100,101,102); endchar; iff known chars.latin_kcedilla: bskchar "The letter k with cedilla (treated as comma)"; beginchar(chars.latin_kcedilla,10.5u#,asc_height#,.75comma_depth#); uni "0x0137"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; lft x100=.5w; top y100''r=-o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_k_BB: bskchar "The blackboard-bold letter k"; beginchar(chars.latin_k_BB,11u#,asc_height#,0); uni "0x1D55C"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; pos3(whatever,0); pos5(whatever,0); bot y1=0; top y2=h; lft x1l=2u; rt x3r=w-3u; top y3=x_height; rt x5r=w-2u; bot y5r=0; {{save stem; numeric stem; stem:=.8cap_stem; lowercase_points(1,2,jut); y4r=.45x_height; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90); z3l=z4l+whatever*(z3r-z4r); x6l=x4r+hair+.75u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90); }}; z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; x4'=x2r; z4'=whatever[z3l,z4l]; serifs_tl(3l); serifs_tr(3r); serifs_br(5r); serifs_bl(5l); z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=(z6r+(u,0) rotated (angle(z3r-z4r))) shifted ((hair-currentbreadth)*unitvector(z3r-z4r) rotated -90); z2'=z4'+(1.5u,0) rotated (angle(z3l-z4l)); z2''=z4'+(0,2u); filldraw z1a{down}..{left}z1b..z1c{right}..z1+ser_boule*up..{right}z1d.. z1e{left}..z1f---obl(4r,1f,4r'')..z4r''..z6l''--- obl(5l,6l'',5r){right}..z5r+.5ser_boule*up..{right}z5r.a.. {left}z5r.c..diag_serif(5r,6r)---z6r'..z6r'' if not bold_face: ---diag_serif(3r,4r) fi ..{dir0}z3r.c..z3r.a---z3l.a..z3l.c{dir0}.. diag_serif(3l,4l)---z2'..{up}z2''--z2r ..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a) ---cycle; oblu.more:=1.25oblu; bot z100=(x1l,y1b); bot y101=y5r.c; rt z101=whatever[z5r,z6r]; infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle; infill ifobl(6r,6l,5r,5l,,)---obl(5l,6l,5r)...{right}z5r...obl(101,5r.c,6r)---cycle; penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); endchar; iff known chars.latin_k_SS: bskchar "The sans-serif letter k"; beginchar(chars.latin_k_SS,10.5u#,asc_height#,0); uni "0x1D5C4"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; pos3(whatever,0); pos5(whatever,0); bot y1=0; top y2=h; lft x1l=2u; rt x3r=w-3u; top y3=x_height; rt x5r=w-2u; bot y5r=0; lowercase_points(1,2,jut); y4r=.45x_height; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90); z3l=z4l+whatever*(z3r-z4r); x6l=x4r+hair+.75u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90); z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; x4'=x2r; z4'=whatever[z3l,z4l]; serifs_tl(3l); serifs_tr(3r); serifs_br(5r); serifs_bl(5l); z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=(z6r+(u,0) rotated (angle(z3r-z4r))) shifted ((hair-currentbreadth)*unitvector(z3r-z4r) rotated -90); z2'=z4'+(1.5u,0) rotated (angle(z3l-z4l)); z2''=z4'+(0,2u); y100=y6r''; z100=whatever[z3r,z4r]; filldraw z1a..z1..z1f---obl(4r,1f,4r'')..z4r''..z6l''--- obl(5l,6l'',5r){right}..diag_serif(5r,6r)---z6r'..z100 ---z3r..z3l---z2'..{up}z2''---z2r..z2b---cycle; penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r'',100); endchar; iff known chars.latin_kra: bskchar "The letter kra"; beginchar(chars.latin_kra,11.5u#,x_height#,0); uni "0x0138"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; oblu:=2oblu; pos1(stem,0); pos2(stem,0); pos3(whatever,0); pos5(whatever,0); bot y1=0; top y2=h; lft x1l=lft x2l=2u; rt x3r=w-3u; top y3=h; rt x5r=w-2u; bot y5r=0; y4r=.45h; x4r=x2r; z4l=z4r+(hair-tiny,0) rotated (angle(z3r-z4r)+90); z3l=z4l+whatever*(z3r-z4r); x6l=x4r+hair+.5u; z6l=whatever[z4r,z3r]; z6'=z6l+(stem-tiny,0) rotated (angle(z5r-z6l)+90); z5l=z6l+whatever*(z5r-z6'); z6r=whatever[z5r,z6']=whatever[z4r,z3r]; x4'=x2r; z4'=whatever[z3l,z4l]; serif_bot(1); drop_serif(2,jut).alt; serif_bot(5); serifs_tl(3l); serifs_tr(3r); z4r'=z4r+.5u*down; z4r''=z4r+(u,0) rotated (angle(z3r-z4r)); z6l'=z6l+(-u,0) rotated (angle(z3r-z4r)); z6l''=z6l+(u,0) rotated (angle(z5l-z6l)); z6r'=z6r+(u,0) rotated (angle(z5r-z6r)); z6r''=z6r+(u,0) rotated (angle(z3r-z4r)); x2'=x1r; z2'=whatever[z3l,z4l]; z2''=z4'+(0,2u); z5l.b=z5a; z5r.b=z5f; filldraw z1a{down}..{left}z1b..z1c---z1d..z1e{left}..z1f---z4r..z4r'' if x6l'>x4r'': ..z6l' fi ..z6l''---diag_serif(5l,6l)..{left}z5b..z5c---z5d..{left}z5e..diag_serif(5r,6r)---z6r' ..z6r''--- diag_serif(3r,4r)..{dir0}z3r.c..z3r.a---z3l.a.. z3l.c{dir0}..diag_serif(3l,4l) ---obl(2',3l,2'')---z2''--z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---cycle; penlabels(1,2,3,4,5,6); labels(2',2'',4',4r',4r'',6l',6l'',6r',6r''); endchar; charscription(6u,asc_height,0)( x1=.5w; bot y1=0; top y2=h; lowercase_stem(1,2,jut); ); iff known chars.latin_l: bskchar "The letter l"; beginchar(chars.latin_l,6u#, asc_height#, 0); uni "0x006C"; italcorr asc_height#*slant-1.75u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_lacute: bskchar "The letter l with acute"; beginchar(chars.latin_lacute,6u#, asc_height#+.3x_height#, 0); uni "0x013A"; italcorr asc_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=.5[x2a,x2l]; x100r=w-u; y101=asc_height+.75u; acute(100,101).capital; endchar; iff known chars.latin_lcaron: bskchar "The letter l with caron (treated like comma)"; beginchar(chars.latin_lcaron,6u#, asc_height#, 0); uni "0x013E"; italcorr asc_height#*slant+u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; y100''r=h; x100'''=w; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_ldot: bskchar "The letter l with middle dot"; beginchar(chars.latin_l,6u#+dot_size#,asc_height#,0); uni "0x0140"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; top y100=x_height; x100+.5dot_size=w-u; dot(100); endchar; iff known chars.latin_lcedilla: bskchar "The letter l with cedilla (treated as comma)"; beginchar(chars.latin_lcedilla,6u#,asc_height#,.75comma_depth#); uni "0x013C"; italcorr asc_height#*slant-1.75u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=.5w; top y100''r=-o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_ldotabove: bskchar "The letter l with dot above"; beginchar(chars.latin_ldotabove,6u#,Acc_height#+o#,0); uni "non"; italcorr asc_height#*slant-1.25u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=x1; dotabove(100); endchar; iff known chars.latin_l_BB: bskchar "The blackboard-bold letter l"; beginchar(chars.latin_l_BB,6u#, asc_height#, 0); uni "0x1D55D"; italcorr asc_height#*slant-1.75u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; save stem; stem:=.8cap_stem; x1=.5w; bot y1=0; top y2=h; lowercase_stem(1,2,jut); oblu.more:=1.25oblu; bot z100=(x1l,y1b); infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle; endchar; iff known chars.latin_l_SS: bskchar "The sans-serif letter l"; beginchar(chars.latin_l_SS,6u#, asc_height#, 0); uni "0x1D5C5"; italcorr asc_height#*slant-1.75u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; pos3(hair,60); x1=.5w; bot y1=0; top y2=h; lowercase_points(1,2,jut); x3=.5[x1,x1e]; bot y3l=-o; filldraw z1f---z2r..z2b---z1a...{right}z3l..{left}z3r...cycle; penlabels(3); endchar; iff known chars.latin_lslash: bskchar "The letter l with slash"; beginchar(chars.latin_lslash,6u#,asc_height#,0); uni "0x0142"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; numeric theta; x1=.5w; bot y1=0; top y2=h; lowercase_points(1,2,jut); x4-x3=4u; .5[x3,x4]=x1; y4-y3=stem; .5[y3,y4]=.8[bar_height,x_height]; theta=angle(z4-z3)+90; pos3(bar,theta); pos4(bar,theta); x3'l=x3'r=x1l; x4'l=x4'r=x1r; z3'l=whatever[z3l,z4l]; z4'l=whatever[z3l,z4l]; z3'r=whatever[z3r,z4r]; z4'r=whatever[z3r,z4r]; bskpoints(3,4,bar,bar); filldraw z2r..{(x1a-x1r,-.25serif_drop)}z2a&z2a---obl(2b,2a,1a)---obl(3'r,2l,3r) ---z3rr..z3l---obl(3'l,3l,1l)---z1a..z1b{left}..{right}z1c..z1+ser_boule*up ..z1d{right}..{left}z1e..{up}z1f---obl(4'l,1r,4l)---z4ll..z4r ---obl(4'r,4r,2r)---z2r..cycle; penlabels(1,2,3,3',4,4'); labels(3rr,4ll); endchar; iff known chars.latin_m: bskchar "The letter m"; beginchar(chars.latin_m,16u#, x_height#, 0); uni "0x006D"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; boolean correct; correct:=true; oblu:=6oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); pos7(stem,0); pos8(stem,0); pos9(n_str_hair,90); pos10(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; x3=.5w; bot y3=bot y7=0; x4=x3; y4=y8=.75x_height; y5r=y9r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=y10=if monospace: .75 else: .6 fi\\ x_height; x10l=x3r; rt x7r=w-2u; x8=x7; x9=.5[x7l,x3r]; {{ if monospace and (x3l-x1l-stem-tiny<2jut): correct:=false; save jut; numeric jut; jut:=.4(x3l-x1l-stem-.5tiny); fi serif_bot(3); serif_bot(7); lowercase_points(1,2,jut);}}; p1:=z6l{up}..z5l..z4l---z3a if correct:.. else: -- fi z3b{left}..{right}z3c; p2:=z3d{right}..{left}z3e if correct:..{up} else: -- fi z3f---z10l..z9l.. z8l---z7a if correct:.. else: -- fi z7b{left}..z7c{right}.. z7+ser_boule*up..{right}z7d..{left}z7e if correct:.. else: -- fi z7f---z8r..z9r..{down}z10r; p21:=subpath(6,infinity) of p2; p3:=z4r{up}..z5r..{down}z6r; p4:=z1f--z2r; tim3=xpart(p3 intersectiontimes p4); z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi z0=(x4r,y1'); tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair))); tim2=xpart(p3 intersectiontimes (z0--(x5,y0))); filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21 ..subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: if (substring(0,5) of font_identifier_) = "BSKRW": f_obl else: oblu fi fi)).zpet) of p3 ..broken_stem_draw(1',1,2)---cycle; penlabels(3,4,5,6,7,8,9,10); labels(0,1'); endchar; iff known chars.latin_m_BB: bskchar "The blackboard-bold letter m"; beginchar(chars.latin_m_BB,16u#, x_height#, 0); uni "0x1D55E"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; boolean correct; correct:=true; save stem; stem:=.8cap_stem; oblu:=6oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); pos7(stem,0); pos8(stem,0); pos9(n_str_hair,90); pos10(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; x3=.5w; bot y3=bot y7=0; x4=x3; y4=y8=.75x_height; y5r=y9r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=y10=if monospace: .75 else: .6 fi\\ x_height; x10l=x3r; rt x7r=w-2u; x8=x7; x9=.5[x7l,x3r]; {{ if monospace and (x3l-x1l-stem-tiny<2jut): correct:=false; save jut; numeric jut; jut:=.4(x3l-x1l-stem-.5tiny); fi serif_bot(3); serif_bot(7); lowercase_points(1,2,jut);}}; p1:=z6l{up}..z5l..z4l---z3a if correct:.. else: -- fi z3b{left}..{right}z3c; p2:=z3d{right}..{left}z3e if correct:..{up} else: -- fi z3f---z10l..z9l.. z8l---z7a if correct:.. else: -- fi z7b{left}..z7c{right}.. z7+ser_boule*up..{right}z7d..{left}z7e if correct:.. else: -- fi z7f---z8r..z9r..{down}z10r; p21:=subpath(6,infinity) of p2; p3:=z4r{up}..z5r..{down}z6r; p4:=z1f--z2r; tim3=xpart(p3 intersectiontimes p4); z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi z0=(x4r,y1'); tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair))); tim2=xpart(p3 intersectiontimes (z0--(x5,y0))); filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 .. subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21 ..subpath(tim2,rundy(p3,(tim3,if bold_face: 4f_obl else: if (substring(0,5) of font_identifier_) = "BSKRW": f_obl else: oblu fi fi)).zpet) of p3 ..broken_stem_draw(1',1,2)---cycle; oblu:=f_obl; oblu.more:=1.25oblu; bot z100=(x1l,y1b); bot z103=(x3r,y3e); bot z104=(x7r,y7e); p100=subpath(0,1) of p3; p101=subpath(1,2) of p1; p102=z8r{up}..z9r..{down}z10r; p103=z10l{up}..z9l..{down}z8l; z101=bsktouch(p100,down,p101,up); z102=bsktouch(p102,down,p103,up); tim100=xpart(p100 intersectiontimes (z101--(x101,h+o+5))); tim101=xpart(p101 intersectiontimes (z101--(x101,0))); tim102=xpart(p102 intersectiontimes (z102--(x102,h+o+5))); tim103=xpart(p103 intersectiontimes (z102--(x102,0))); infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle; infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100 ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101 ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle; infill subpath(0,rundy(p102,(tim102,bbw)).zpet) of p102 ..subpath(rundy(p103,(tim103,bbw)),infinity) of p103 ---obl(7l,8l,7r)---z7r...obl(104,7e,8r)---cycle; penlabels(3,4,5,6,7,8,9,10); labels(0,1',100,101,102,103,104); endchar; iff known chars.latin_m_SS: bskchar "The sans-serif letter m"; beginchar(chars.latin_m_SS,16u#, x_height#, 0); uni "0x1D5C6"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; boolean correct; correct:=true; oblu:=6oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); pos7(stem,0); pos8(stem,0); pos9(n_str_hair,90); pos10(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; x3=.5w; bot y3=bot y7=0; x4=x3; y4=y8=.75x_height; y5r=y9r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=y10=if monospace: .75 else: .6 fi\\ x_height; x10l=x3r; rt x7r=w-2u; x8=x7; x9=.5[x7l,x3r]; {{ if monospace and (x3l-x1l-stem-tiny<2jut): correct:=false; save jut; numeric jut; jut:=.4(x3l-x1l-stem-.5tiny); fi serif_bot(3); serif_bot(7); lowercase_points(1,2,jut);}}; p1:=z6l{up}..z5l..z4l---z3a..{right}z3; p2:=z3{right}..z3f---z10l..z9l..z8l---z7a..z7..z7f---z8r..z9r..{down}z10r; p21:=subpath(6,infinity) of p2; p3:=z4r{up}..z5r..{down}z6r; p4:=z1f--z2r; tim3=xpart(p3 intersectiontimes p4); z1'=(p3 intersectionpoint p4)+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi z0=(x4r,y1'); tim1=xpart(p21 intersectiontimes ((0,y0-.5hair)--(x9,y0-.5hair))); tim2=xpart(p3 intersectiontimes (z0--(x5,y0))); filldraw p1..z3+ser_boule*up..subpath (0,6) of p2 ..subpath(0,rundy(p21,(tim1,1.5u)).zpet) of p21 ..subpath(tim2,rundy(p3,tim3).zpet) of p3 ..z1'..z2..z2b---z1a..z1..z1f---cycle; penlabels(3,4,5,6,7,8,9,10); labels(0,1'); endchar; charscription(11.5u,x_height,0)( path p[]; numeric tim[]; oblu:=8oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; rt x3r=w-2u; bot y3=0; serif_bot(3); x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.6x_height; y6l:=y6l-hair; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi filldraw p1..z3+ser_boule*up..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle; penlabels(3,4,5,6); labels(1'); ); iff known chars.latin_n: bskchar "The letter n"; beginchar(chars.latin_n,11.5u#, x_height#, 0); uni "0x006E"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_ncaron: bskchar "The letter n with caron"; beginchar(chars.latin_ncaron,11.5u#, asc_height#, 0); uni "0x0148"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x5; hacek(100,101,102); endchar; iff known chars.latin_nacute: bskchar "The letter n with acute"; beginchar(chars.latin_nacute,11.5u#,asc_height#,0); uni "0x0144"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=.5[x5,x2r]; acute(100,101); endchar; iff known chars.latin_napostrophe: bskchar "The letter n with apostrophe"; beginchar(chars.latin_napostrophe,11.5u#,asc_height#+o#,0); uni "0x0149"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; lft x100=.5u; top y100=h-.5dot_size; comma(100,dot_size,.9hair,.8comma_depth); endchar; iff known chars.latin_ngrave: bskchar "The letter n with grave"; beginchar(chars.latin_ngrave,11.5u#,asc_height#,0); uni "0x01F9"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x5; grave(100,101); endchar; iff known chars.latin_ntilde: bskchar "The letter n with tilde"; beginchar(chars.latin_ntilde,11.5u#,asc_height#,0); uni "0x00F1"; italcorr asc_height#*slant-1.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101-x100=6u; x.tilde=.5[x1r,x4l]; tilde(100,101); endchar; iff known chars.latin_ncedilla: bskchar "The letter n with cedilla (treated as comma)"; beginchar(chars.latin_ncedilla,11.5u#,x_height#,.75comma_depth#); uni "0x0146"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=.5w; top y100''r=-o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_n_BB: bskchar "The blackboard-bold letter n"; beginchar(chars.latin_n_BB,11.5u#, x_height#, 0); uni "0x1D55F"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=8oblu; save stem; stem:=.8cap_stem; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; rt x3r=w-2u; bot y3=0; serif_bot(3); x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.6x_height; y6l:=y6l-hair; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3a..z3b{left}..{right}z3c; p2:=z3d{right}..{left}z3e..z3f---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi filldraw p1..z3+ser_boule*up..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle; oblu:=f_obl; oblu.more:=1.25oblu; bot z100=(x1l,y1b); bot z103=(x3r,y3e); p100=subpath(3,4) of p2; p101=subpath(1,2) of p1; z101=bsktouch(p100,down,p101,up); tim100=xpart(p100 intersectiontimes (z101--(x101,h+o+5))); tim101=xpart(p101 intersectiontimes (z101--(x101,0))); infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle; infill subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100 ..subpath(rundy(p101,(tim101,bbw)),infinity) of p101 ---obl(3l,4l,3r)---z3r...obl(103,3e,4r)---cycle; penlabels(3,4,5,6); labels(1',100,101,102); endchar; iff known chars.latin_n_SS: bskchar "The sans-serif letter n"; beginchar(chars.latin_n_SS,11.5u#, x_height#, 0); uni "0x1D5C7"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=8oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; rt x3r=w-2u; bot y3=0; serif_bot(3); x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.6x_height; y6l:=y6l-hair; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3a..{right}z3; p2:=z3{right}..z3f---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi filldraw p1..z3+ser_boule*up..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..z1'..z2..z2b---z1a..z1..z1f---cycle; penlabels(3,4,5,6); labels(1'); endchar; iff known chars.latin_eng: bskchar "The letter eng"; beginchar(chars.latin_eng,10.5u#, x_height#, desc_depth#); uni "0x014B"; italcorr .5[bar_height#,x_height#]*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; oblu:=8oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); pos7(hair,-90); lft x1l=2u; bot y1=0; top y2=h+apex_o; rt x3r=w-u; y3=-.5d; x4=x3; y4=.75x_height; y5r=x_height; x5=.5[x3l,x1r]; x6l=x1r; y6=.6x_height; y6l:=y6l-hair; bot y7r=-d; x3-x7=3u; top y8=y7+like_curve; x7-x8l=2u; lowercase_points(1,2,jut); p1:=z6l{up}..z5l..z4l---z3l...{left}z7l..reverse smitko(8,stem)..{right}z7r..{up}z3r; p2:=z3r---z4r..z5r..{down}z6r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+tiny)*up; if y1'>y5l: y1':=y5l; fi filldraw p1..subpath (0,rundy(p2,(tim1,2u)).zpet) of p2..broken_stem_draw(1',1,2)---cycle; penlabels(3,4,5,6,7,8); labels(1'); endchar; charscription(10u,x_height,0)( pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle; infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; penlabels(1,2,3,4); ); iff known chars.latin_o: bskchar "The letter o"; beginchar(chars.latin_o,10u#,x_height#,0); uni "0x006F"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_oacute: bskchar "The letter o with acute"; beginchar(chars.latin_oacute,10u#,asc_height#,0); uni "0x00F3"; italcorr asc_height#*slant-1.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4l; acute(100,101); endchar; iff known chars.latin_oumlaut: bskchar "The letter o with umlaut"; beginchar(chars.latin_oumlaut,10u#,asc_height#-dot_size#,0); uni "0x00F6"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; .5[x100,x101]=x4l; x101-x100=2/3(x3-x1); umlaut(100,101); endchar; iff known chars.latin_ocircumflex: bskchar "The letter o with circumflex"; beginchar(chars.latin_ocircumflex,10u#,asc_height#-.1x_height#,0); uni "0x00F4"; italcorr .5[x_height#,asc_height#]*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4r; circumflex(100,101,102); endchar; iff known chars.latin_ograve: bskchar "The letter o with grave"; beginchar(chars.latin_ograve,10u#,asc_height#,0); uni "0x00F2"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4+u; grave(100,101); endchar; iff known chars.latin_odoublegrave: bskchar "The letter o with double grave"; beginchar(chars.latin_odoublegrave,10u#,asc_height#,0); uni "0x020D"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x102-x100=3u; x102=x4; d_grave(100,101,102,103,whatever); endchar; iff known chars.latin_ocaron: bskchar "The letter o with caron"; beginchar(chars.latin_ocaron,10u#,asc_height#,0); uni "0x01D2"; italcorr asc_height#*slant-1.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4r; hacek(100,101,102); endchar; iff known chars.latin_otilde: bskchar "The letter o with tilde"; beginchar(chars.latin_otilde,10u#,asc_height#,0); uni "0x00F5"; italcorr asc_height#*slant-u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101-x100=6u; tilde(100,101); endchar; iff known chars.latin_omacron: bskchar "The letter o with macron"; beginchar(chars.latin_omacron,10u#,.5[asc_height#,x_height#],0); uni "0x014D"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; macron(100,101); endchar; iff known chars.latin_odotabove: bskchar "The letter o with dot above"; beginchar(chars.latin_odotabove,10u#,asc_height#-.5dot_size#,0); uni "0x022F"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x4; dotabove(100); endchar; iff known chars.latin_ohumlaut: bskchar "The letter o with Hungarian umlaut"; beginchar(chars.latin_ohumlaut,10u#,asc_height#,0); uni "0x0151"; italcorr asc_height#*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101-x100=3u; .5[x100,x101]=x4+1.75u; h_umlaut(100,101,102,103,2u); endchar; iff known chars.latin_obreve: bskchar "The letter o with breve"; beginchar(chars.latin_obreve,10u#,asc_height#+o#,0); uni "0x014F"; italcorr asc_height#*slant-1.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4r; x102-x100=5u; breve(100,101,102); endchar; iff known chars.latin_oinvbreve: bskchar "The letter o with inverted breve"; beginchar(chars.latin_oinvbreve,10u#,asc_height#+o#,0); uni "0x020F"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4r; x102-x100=5u; tieacc(100,101,102); endchar; iff known chars.latin_o_masculine: bskchar "Masculine ordinal indicator (superscript o)"; beginchar(chars.latin_o_masculine,6u#,asc_height#-.5x_height#,0); uni "0x00BA"; italcorr (asc_height#-.75x_height#)*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; multiply(.85)(curve,hair,vair); usechar shifted (-x1l,-y4l) scaled .5 shifted (u+(HH-.5x_height)*slant,HH); endchar; iff known chars.latin_o_BB: bskchar "The blackboard-bold letter o"; beginchar(chars.latin_o_BB,10u#,x_height#,0); uni "0x1D560"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270); lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; filldraw z1l{down}..z2l..{up}z3l..z4l..{down}cycle; infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; penlabels(1,2,3,4); path p[]; numeric tim[]; p100:=z4r..z1r{down}..z2r..z3r..cycle; p101:=reverse z4l..z1l{down}..z2l..z3l..cycle; oblu:=1.25bbw; z100=bsktouch(subpath(0,1) of p100,up,p101,down); z101=bsktouch(subpath(1,2) of p100,down,p101,up); z102=bsktouch(subpath(3,4) of p100,up,p101,down); z103=bsktouch(subpath(2,3) of p100,down,p101,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y1))); tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5))); tim102=xpart(p100 intersectiontimes (z101--(x101,y1))); tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5))); tim104=xpart(p100 intersectiontimes (z102--(x102,y1))); tim105=xpart(p101 intersectiontimes (z102--(x102,y4l+5))); tim106=xpart(p100 intersectiontimes (z103--(x103,y1))); tim107=xpart(p101 intersectiontimes (z103--(x103,y2l-5))); infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle; infill subpath(rundy(p100,tim104).zpet,rundy(p100,tim106)) of p100 ..subpath(rundy(p101,tim107),rundy(p101,tim105).zpet) of p101..cycle; labels(100,101,102,103); endchar; iff known chars.latin_o_SS: bskchar "The sans-serif letter o"; beginchar(chars.latin_o_SS,10u#,x_height#,0); uni "0x1D5C8"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; charscription(10u,x_height,.85desc_depth)( path p[]; pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); pos5(stem,0); pos6(curve,0); pos7(hair,45); pos8(hair,160); lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; x5=x6l+1.5u; x5=x2; x7-x6l=3u; rt x8l=x7+1.5u; bot y5=0; y6=-.5d; bot y7l=-d; y8=-2/3d; p0=z1l{down}..z2l..{up}z3l..z4l..{down}z1l; p1=z5l{z6l-z5r}..z6l...z7l..{z5-z6}z8l..z8r{z6-z5}..z7r..z6r..z5r; filldraw subpath(0,rundy(p0,(1,stem)).zpet) of p0 ..subpath(rundy(p1,(0,stem)),rundy(p1,infinity).zpet) of p1 ..subpath(rundy(p1,(1,stem)),infinity) of p0..cycle; infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; penlabels(1,2,3,4,5,6,7,8); ); iff known chars.latin_oogonek: bskchar "The letter o with ogonek"; beginchar(chars.latin_oogonek,10u#,x_height#,.85desc_depth#); uni "0x01EB"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_oogonekmacron: bskchar "The letter o with ogonek and macron"; beginchar(chars.latin_oogonekmacron,10u#,.5[asc_height#,x_height#],.85desc_depth#); uni "0x01ED"; italcorr .5x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; macron(100,101); endchar; charscription(10u,x_height,0)( numeric tim[]; path p[]; oblu:=2oblu; pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2=x4; bot y2l=-o; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; z5=(w-u,h); z6=(u,0); pos5(hair, angle(z6-z5)+90); pos6(hair,angle(z6-z5)+90); z0r=.5[z5r,z6r]; z0l=.5[z5l,z6l]; p0:=z1l{down}..z2l..z3l..z4l..{down}z1l; p1:=z1r{up}..z4r..z3r..z2r..{up}z1r; bskpoints(5,6,hair,hair); (tim1,tim2)=p0 intersectiontimes (z5l--z6l); (tim3,tim4)=p0 intersectiontimes (z6r--z5r); (tim5,tim6)=p0 intersectiontimes (z0r--z5r); (tim7,tim8)=p0 intersectiontimes (z5l--z0l); (tim11,tim12)=p1 intersectiontimes (z0r--z6r); (tim13,tim14)=p1 intersectiontimes (z0r--z5r); (tim15,tim16)=p1 intersectiontimes (z0l--z6l); (tim17,tim18)=p1 intersectiontimes (z5l--z0l); filldraw subpath (0,rundy(p0,tim1).zpet) of p0..subpath(rundy((z6l--z5l),tim2),infinity) of (z5l---z6ll).. subpath(0,rundy(z6r--z5r,tim4).zpet) of (z6r--z5r).. subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0.. subpath(rundy(z0r--z5r,tim6),infinity) of (z0r---z5rr).. subpath(0,rundy(z5l--z0l,tim8).zpet) of (z5l--z0l) .. subpath(rundy(p0,tim7),infinity) of p0--cycle; infill subpath(0,rundy(z0r--z6r,tim12).zpet) of (z0r--z6r).. subpath(rundy(p1,tim11).zpet,rundy(p1,tim13)) of p1.. subpath(rundy(z5r--z0r,tim14),infinity) of (z5r--z0r)--cycle; infill subpath (0, rundy(p1,tim17).zpet) of p1.. subpath(rundy(z5l--z0l,tim18),infinity) of (z5l--z0l).. subpath(0,rundy(z0l--z6l,tim16).zpet) of (z0l--z6l).. subpath(rundy(p1,tim15),infinity) of p1--cycle; penlabels(0,1,2,3,4,5,6); ); iff known chars.latin_oslash: bskchar "The letter o slash"; beginchar(chars.latin_oslash,10u#,x_height#,0); uni "0x00F8"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_oslashacute: bskchar "The letter o slash with acute"; beginchar(chars.latin_oslashacute,10u#,asc_height#,0); uni "0x01FF"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x4l; acute(100,101); endchar; iff known chars.latin_p: bskchar "The letter p"; beginchar(chars.latin_p,11u#,x_height#,desc_depth#); uni "0x0070"; italcorr .5x_height#*slant-.25u#; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; bot y2l=-o; top y4l=h+o; lft x5l=2u; bot y5=-d; top y6r=h+o; lowercase_points(5,6,jut); p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l; p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; p2=z5r---lowercase_stem_draw(5,6); p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right); tim1=xpart(p0 intersectiontimes (z0--(x2,y0))); tim2=xpart(p2 intersectiontimes (z0--(0,y0))); z7=bsktouch(subpath(3,infinity) of p0,left,p2,right); tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7))); tim4=xpart(p2 intersectiontimes (z7--(0,y7))); filldraw subpath (rundy(p0,tim1), rundy(p0,tim3).zpet) of p0 ..subpath(rundy(p2,tim4),infinity) of p2 ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle; infill p3..cycle; penlabels(1,1',2,3,4); labels(7); endchar; iff known chars.latin_p_BB: bskchar "The blackboard-bold letter p"; beginchar(chars.latin_p_BB,11u#,x_height#,desc_depth#); uni "0x1D561"; italcorr .5x_height#*slant-.25u#; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; save stem; stem:=.8cap_stem; pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270); rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; bot y2l=-o; top y4l=h+o; lft x5l=2u; bot y5=-d; top y6r=h+o; lowercase_points(5,6,jut); p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l; p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; p2=z5r---lowercase_stem_draw(5,6); p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right); tim1=xpart(p0 intersectiontimes (z0--(x2,y0))); tim2=xpart(p2 intersectiontimes (z0--(0,y0))); z7=bsktouch(subpath(3,infinity) of p0,left,p2,right); tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7))); tim4=xpart(p2 intersectiontimes (z7--(0,y7))); filldraw subpath (rundy(p0,tim1), rundy(p0,tim3).zpet) of p0 ..subpath(rundy(p2,tim4),infinity) of p2 ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle; infill p3..cycle; oblu.more:=1.25oblu; bot z102=(x5l,y5b); infill ifobl(6r,6b,5r,5l,more,)---obl(102,6b,5b)...z5l---obl(5r,5l,6r)---cycle; oblu:=bbw; p100:=subpath(2,4) of p0; p101:=subpath(1,3) of p3; z100=bsktouch(p100,down,p101,up); z101=bsktouch(p100,up,p101,down); tim100=xpart(p100 intersectiontimes (z100--(x100,h+5))); tim101=xpart(p101 intersectiontimes (z100--(x100,0))); tim102=xpart(p100 intersectiontimes (z101--(x101,y2l-5))); tim103=xpart(p101 intersectiontimes (z101--(x101,y3))); infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100 ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle; penlabels(1,1',2,3,4); labels(7,100,101,102); endchar; iff known chars.latin_p_SS: bskchar "The sans-serif letter p"; beginchar(chars.latin_p_SS,11u#,x_height#,desc_depth#); uni "0x1D5C9"; italcorr .5x_height#*slant-.25u#; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; bot y2l=-o; top y4l=h+o; lft x5l=2u; bot y5=-d; top y6r=h+o; lowercase_points(5,6,jut); p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l; p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; p2=z5f---z6r..z6b---z5a..z5..{up}z5f; p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right); tim1=xpart(p0 intersectiontimes (z0--(x2,y0))); tim2=xpart(p2 intersectiontimes (z0--(0,y0))); z7=bsktouch(subpath(3,infinity) of p0,left,p2,right); tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7))); tim4=xpart(p2 intersectiontimes (z7--(0,y7))); filldraw subpath (rundy(p0,tim1), rundy(p0,tim3).zpet) of p0 ..subpath(rundy(p2,tim4),infinity) of p2 ..{up}subpath(0,rundy(p2,tim2).zpet) of p2..cycle; infill p3..cycle; penlabels(1,1',2,3,4); labels(7); endchar; iff known chars.latin_thorn: bskchar "The letter thorn"; beginchar(chars.latin_thorn,11u#,asc_height#,desc_depth#); uni "0x00FE"; italcorr .5x_height#*slant-.25u#; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; pos1(hair,0); pos1'(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); rt x1r=2u+stem; rt x3l=w-u; y1=.65x_height; y3=.5x_height; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x1'r=x1r; y1'=.2x_height; if (y1'/hair)<2.5: x1'l:=x1'l-.5hair; fi; bot y2l=-o; top y4l=x_height+o; lft x5l=2u; bot y5=-d; top y6r=h; lowercase_points(5,6,jut); p0=z1l---z1'l{z2r-z1r}..z2l..z3l..z4l..{down}z1l; p1=z1r{up}..z4r..z3r..z2r..{up}z1'r--z1r; p2=z5r---lowercase_stem_draw(5,6); p3=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; z0=bsktouch(subpath(1,infinity) of p0,left,subpath(0,1) of p2,right); tim1=xpart(p0 intersectiontimes (z0--(x2,y0))); tim2=xpart(p2 intersectiontimes (z0--(0,y0))); z7=bsktouch(subpath(3,infinity) of p0,left,p2,right); tim3-3=xpart(subpath(3,infinity) of p0 intersectiontimes (z7--(x4,y7))); tim4=xpart(p2 intersectiontimes (z7--(0,y7))); filldraw subpath (rundy(p0,tim1), rundy(p0,(tim3,2oblu)).zpet) of p0 ..subpath(rundy(p2,tim4),infinity) of p2 ..subpath(0,rundy(p2,tim2).zpet) of p2..cycle; infill p3..cycle; penlabels(1,1',2,3,4); labels(0,7); endchar; iff known chars.latin_q: bskchar "The letter q"; beginchar(chars.latin_q,11u#,x_height#,desc_depth#); uni "0x0071"; italcorr x_height#*slant; adjust_fit(0,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2.5oblu; pos1(curve,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270); lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x3'r=x3r; y3'=.3x_height; if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi; bot y2l=-o; top y4l=h+o; rt x5r=w-2u; bot y5=-d; top y6r=h; lowercase_points(5,6,jut); p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l; p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r; p2=z5a--z6l; p3=reverse lowercase_stem_draw(5,6); tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2); tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0))); if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi; tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o))); z7=point tim1 of p0 + like_stem*up; if y7>y6r-.8hair: y7:=y6r-.8hair; fi p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r; bot rt z9=(w-u,x_height+o); z9'=z6r+stem*down; tim4=xpart(p0 intersectiontimes ((.5w,y7)--(w,y7))); filldraw subpath (tim2, rundy(p0,tim4).zpet) of p0..bot z6---z9--z9+down{z7-z9}.. {down}z9'---subpath (0,tim3) of p3..cycle; infill p4..cycle; penlabels(1,3',2,3,4); labels(7,9,9'); endchar; iff known chars.latin_q_BB: bskchar "The blackboard-bold letter q"; beginchar(chars.latin_q_BB,11u#,x_height#,desc_depth#); uni "0x1D562"; italcorr x_height#*slant; adjust_fit(0,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2.5oblu; save stem; stem:=.8cap_stem; pos1(cap_stem,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270); lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x3'r=x3r; y3'=.3x_height; if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi; bot y2l=-o; top y4l=h+o; rt x5r=w-2u; bot y5=-d; top y6r=h; lowercase_points(5,6,jut); p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l; p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r; p2=z5a--z6l; p3=reverse lowercase_stem_draw(5,6); tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2); tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0))); if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi; tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o))); z7=point tim1 of p0 + like_stem*up; if y7>y6r-.8hair: y7:=y6r-.8hair; fi p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r; bot rt z9=(w-u,x_height+o); z9'=z6r+stem*down; tim4=xpart(p0 intersectiontimes ((.5w,y7)--(w,y7))); filldraw subpath (tim2, rundy(p0,tim4).zpet) of p0..bot z6---z9--z9+down{z7-z9}.. {down}z9'---subpath (0,tim3) of p3..cycle; infill p4..cycle; bot z100=(x5r,y5e); p100:=subpath(2,4) of p0; p101:=subpath(1,3) of p4; z101=bsktouch(p100,down,p101,up); z102=bsktouch(p100,up,p101,down); tim100=xpart(p100 intersectiontimes (z101--(x101,h+5))); tim101=xpart(p101 intersectiontimes (z101--(x101,0))); tim102=xpart(p100 intersectiontimes (z102--(x102,y2l-5))); tim103=xpart(p101 intersectiontimes (z102--(x102,y3))); oblu:=f_obl; oblu.more:=1.25f_obl; infill ifobl(6r,6b,5r,5l,more,)---obl(5l,6b,5r)---z5r...obl(100,5e,6r)---cycle; oblu:=bbw; infill subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100 ..reverse subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101..cycle; penlabels(1,3',2,3,4); labels(7,9,9',100,101,102); endchar; iff known chars.latin_q_SS: bskchar "The sans-serif letter q"; beginchar(chars.latin_q_SS,11u#,x_height#,desc_depth#); uni "0x1D5CA"; italcorr x_height#*slant; adjust_fit(0,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2.5oblu; pos1(curve,0); pos3'(hair,180); pos2(hair,90); pos3(hair,180); pos4(hair,270); lft x1l=u; lft x3r=w-2u-stem; y3=.65x_height; y1=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=-.5u; x3'r=x3r; y3'=.3x_height; if (y3'/hair)<3.5: x3'l:=x3'l+.5hair; fi; bot y2l=-o; top y4l=h+o; rt x5r=w-2u; bot y5=-d; top y6r=h; lowercase_points(5,6,jut); p0=z3l---z3'l{z2r-z3r}..z2l..z1l..z4l..{down}z3l; p1=z3r{up}..z4r..z1r..z2r..{up}z3'r--z3r; p2=z5a--z6l; p3=z5f{down}..z5..z5a---z6b..z6r---z5f; tim1-2=xpart(subpath (2, 5) of p0 intersectiontimes p2); tim2 =xpart(subpath (0,3) of p0 intersectiontimes ((0,0)--(w,0))); if tim2<0: tim2:=xpart(subpath (0,3) of p0 intersectiontimes ((0,o)--(w,o))); fi; tim3 =xpart(p3 intersectiontimes ((0,-o)--(x3'r,-o))); z7=point tim1 of p0 + like_stem*up; if y7>y6r-.8hair: y7:=y6r-.8hair; fi p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r; bot rt z9=(w-u,x_height+o); z9'=z6r+stem*down; tim4=xpart(p0 intersectiontimes ((.5w,y7)--(w,y7))); filldraw subpath (tim2, rundy(p0,tim4).zpet) of p0..z6r--subpath (0,tim3) of p3..cycle; infill p4..cycle; penlabels(1,3',2,3,4); labels(7,9,9'); endchar; charscription(8.5u,x_height,0)( path p[]; numeric tim[]; pos3(like_curve,0); pos5(hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; rt x3r=w-u; y3r=y5l-.75like_stem; y5r=x_height; x5=.5w+.5like_stem; x6l=x1r; y6=.6x_height; z4=(x3l,x_height+o); lowercase_points(1,2,jut); p2:=z3r{up}..{dir180}z4..{down}z6r; p1:=z6l{up}..{dir10}z5l..z5l+(hair,-o)...z3l..z3+o*down..z3r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up; if y1'>y5r: y1':=y5r-.5hair; fi; tim3-1=xpart(subpath (1,2) of p2 intersectiontimes ((0,y1')--(w,y1'))); filldraw p1..subpath (0,tim3) of p2..broken_stem_draw(1',1,2)---cycle; penlabels(3,5,6); labels(1',4,7); ); iff known chars.latin_r: bskchar "The letter r"; beginchar(chars.latin_r,8.5u#, x_height#, 0); uni "0x0072"; italcorr .5[bar_height#,x_height#]*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_racute: bskchar "The letter r with acute"; beginchar(chars.latin_racute,8.5u#, asc_height#, 0); uni "0x0155"; italcorr asc_height#*slant-.75u#; adjust_fit(serif_fit#,0); pickup tiny.nib; usechar; x101=.5[x2r,x5]; acute(100,101); endchar; iff known chars.latin_rcaron: bskchar "The letter r with caron"; beginchar(chars.latin_rcaron,8.5u#, asc_height#, 0); uni "0x0159"; italcorr asc_height#*slant-.75u#; adjust_fit(serif_fit#,0); pickup tiny.nib; usechar; x101=.5[x2r,x5]; hacek(100,101,102); endchar; iff known chars.latin_rdoublegrave: bskchar "The letter r with double grave"; beginchar(chars.latin_rdoublegrave,8.5u#,asc_height#,0); uni "0x0211"; italcorr .5[bar_height#,x_height#]*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; usechar; x102-x100=3u; d_grave(100,101,102,103,.5[x5r,x2]); endchar; iff known chars.latin_rcedilla: bskchar "The letter r with cedilla (treated as comma)"; beginchar(chars.latin_rcedilla,8.5u#,x_height#,.75comma_depth#); uni "0x0157"; italcorr .5[bar_height#,x_height#]*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; usechar; x100=x1; top y100''r=-o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_rinvbreve: bskchar "The letter r with inverted breve"; beginchar(chars.latin_rinvbreve,8.5u#,asc_height#,0); uni "0x0213"; italcorr .5[bar_height#,x_height#]*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; usechar; x101=.45[x4,x2r]; x102-x100=4.5u; tieacc(100,101,102); endchar; iff known chars.latin_r_BB: bskchar "The blackboard-bold letter r"; beginchar(chars.latin_r_BB,8.5u#, x_height#, 0); uni "0x1D563"; italcorr .5[bar_height#,x_height#]*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; save stem; stem:=.8cap_stem; pos3(like_curve,0); pos5(hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; rt x3r=w-u; y3r=y5l-.75like_stem; y5r=x_height; x5=.5w+.5like_stem; x6l=x1r; y6=.6x_height; z4=(x3l,x_height+o); lowercase_points(1,2,jut); p2:=z3r{up}..{dir180}z4..{down}z6r; p1:=z6l{up}..{dir10}z5l..z5l+(hair,-o)...z3l..z3+o*down..z3r; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up; if y1'>y5r: y1':=y5r-.5hair; fi; tim3-1=xpart(subpath (1,2) of p2 intersectiontimes ((0,y1')--(w,y1'))); filldraw p1..subpath (0,tim3) of p2..broken_stem_draw(1',1,2)---cycle; oblu:=f_obl; oblu.more:=1.25oblu; bot z100=(x1l,y1b); infill ifobl(2r,2b,1r,1l,more,)---obl(100,2b,1b)...z1l---obl(1r,1l,2r)---cycle; penlabels(3,5,6); labels(1',4,7,100); math_fit(0,ic#-1.5u#); endchar; iff known chars.latin_r_SS: bskchar "The sans-serif letter r"; beginchar(chars.latin_r_SS,8.5u#, x_height#, 0); uni "0x1D5CB"; italcorr .5[bar_height#,x_height#]*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; pos3(stem,0); pos5(hair,90); pos6(hair,180); lft x1l=2u; bot y1=0; top y2=h+apex_o; rt x3r=w-u; y3r=y5l-.75like_stem; y5r=x_height; x5=.5w+.5like_stem; x6l=x1r; y6=.6x_height; z4=(x3l,y5r); lowercase_points(1,2,jut); p2:=z3r{up}..z5r..{down}z6r; p1:=z6l{up}..{dir10}z5l...{down}z3l; p3:=z1f--z2r; (tim1,tim2)=p2 intersectiontimes p3; z1'=point tim2 of p3+(like_stem+.5hair+.5tiny)*up+o*right; if y1'>y5r: y1':=y5r-.5hair; fi; tim3-1=xpart(subpath (1,2) of p2 intersectiontimes ((0,y1')--(w,y1'))); filldraw p1..subpath (0,tim3) of p2..z1'..z2..z2b---z1a..z1..z1f---cycle; penlabels(3,5,6); labels(1',4,7); math_fit(0,ic#-1.5u#); endchar; charscription(7.7u,x_height,0)( numeric exc; exc=(w-u)/h; oblu:=1.5oblu; path p[]; numeric tim[]; pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90); pos5(stem,180); pos6(stem,180); y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc; y6=.5[y4r,y3]-.5hair; rt x6l=w-u; x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o; y3=.5[y2l,y4r]+.5hair; pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-x5r; y1=y5-.5hair; y1'=h+o; pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o; p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r; p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h))); tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h))); filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)), infinity) of p1..cycle; penlabels(0,1,1',2,3,4,5,6,7,7'); ); iff known chars.latin_s: bskchar "The letter s"; beginchar(chars.latin_s,7.7u#, x_height#, 0); uni "0x0073"; italcorr x_height#*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_scaron: bskchar "The letter s with caron"; beginchar(chars.latin_scaron,7.7u#, asc_height#, 0); uni "0x0161"; italcorr asc_height#*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x2; x100r=u; hacek(100,101,102); endchar; iff known chars.latin_scircumflex: bskchar "The letter s with circumflex"; beginchar(chars.latin_scircumflex,7.7u#, asc_height#-.1x_height#, 0); uni "0x015D"; italcorr .5[asc_height#,x_height#]*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x2+o; x102-x100=5u; circumflex(100,101,102); endchar; iff known chars.latin_sacute: bskchar "The letter s with acute"; beginchar(chars.latin_sacute,7.7u#, asc_height#, 0); uni "0x015B"; italcorr x_height#*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; usechar; x101=x2-u; acute(100,101); endchar; iff known chars.latin_scommabelow: bskchar "The letter s with comma below"; beginchar(chars.latin_scommabelow,7.7u#,x_height#,.75comma_depth#); uni "0x0219"; italcorr x_height#*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x4; top y100''r=-2o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_s_BB: bskchar "The blackboard-bold letter s"; beginchar(chars.latin_s_BB,7.7u#, x_height#, 0); uni "0x1D564"; italcorr x_height#*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; numeric exc; exc=(w-u)/h; oblu:=1.5oblu; path p[]; numeric tim[]; pos2(hair,90); pos3(cap_stem,angle((w-u,h))+180); pos4(hair,90); pos5(.8cap_stem,180); pos6(.8cap_stem,180); y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc; y6=.5[y4r,y3]-.5hair; rt x6l=w-u; x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o; y3=.5[y2l,y4r]+.5hair; pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-.5[x5,x5r]; y1=y5-.5hair; y1'=h+o; pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o; p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r; p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h))); tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h))); filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)), infinity) of p1..cycle; oblu:=bbw; p100:=subpath(1,5) of p0; p101:=subpath(1,5) of p1; z100=bsktouch(subpath(0,1) of p100,down,p101,up); z101=bsktouch(p100,down,subpath(0,1) of p101,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y2r+5))); tim101=xpart(p101 intersectiontimes (z100--(x100,y5))); tim102=xpart(p100 intersectiontimes (z101--(x101,y6))); tim103=xpart(p101 intersectiontimes (z101--(x101,y4l-5))); infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; penlabels(0,1,1',2,3,4,5,6,7,7'); labels(100,101); endchar; iff known chars.latin_s_SS: bskchar "The sans-serif letter s"; beginchar(chars.latin_s_SS,7u#, x_height#, 0); uni "0x1D5CC"; italcorr x_height#*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; numeric exc; exc=(w-u)/h; oblu:=1.5oblu; path p[]; numeric tim[]; pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90); pos5(stem,180); pos6(stem,180); y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc; y6=.5[y4r,y3]-.5hair; rt x6l=w-u; x3=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l]; .5[x2,x4]=x3; y3=.5[y2l,y4r]+.5hair; pos1(hair,0); x1r=w-x5r; y1=y5+o; pos7(hair,0); x7l=w-x6l; y7=y6; p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r; p1=z7l{dir-90}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; filldraw p0..p1..cycle; penlabels(0,1,2,3,4,5,6,7); endchar; iff known chars.latin_scedilla: bskchar "The letter s with cedilla"; beginchar(chars.latin_scedilla,7.7u#, x_height#,.65desc_depth#); uni "0x015F"; italcorr x_height#*slant-.75u#; adjust_fit(0,0); pickup tiny.nib; numeric exc; exc=(w-u)/h; oblu:=1.5hair; path p[]; numeric tim[]; pos2(hair,90); pos3(curve,angle((w-u,h))+180); pos4(hair,90); pos5(stem,180); pos6(stem,180); pos8(.5stem,0); pos9(.5stem,0); pos10(.8stem,0); pos11(.5stem,-110); y5=.5[y2l,y3]+.5hair; x3-x5l=.5(y2l-y3l)*exc; y6=.5[y4r,y3]-.5hair; rt x6l=w-u; x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o; y3=.5[y2l,y4r]+.5hair; pos1(hair,0); pos1'(hair,0); x1r=x1'r+.5o=w-x5r; y1=y5-.5hair; y1'=h+o; pos7(hair,0); pos7'(hair,0); x7l=x7'l-o=w-x6l; y7=y6+.5hair; y7'=-o; x8=x9; z8l=z4l; y9=-hair; y10=-.5d; rt x10r-lft x11r=4u; x8r-lft x11r=2u; y11r=-d; p0=z1r{up}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r; p1=z7l{dir-80}..z4l{right}..z6l..z3l..z5l..{right}z2l..{down}z1l; p2:=z9r..{down}z10r..{left}z11r..{right}z11l..{up}z10l..z9l--z8l; p3:=reverse(z8r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2); tim1=xpart(p0 intersectiontimes ((x1'l-.5o,h)--(x1'l-.5o,.5h))); tim2=xpart(p1 intersectiontimes ((x7'r+o,0)--(x7'r+o,.5h))); if tim2>1: tim2:=1; fi; tim3=xpart(p1 intersectiontimes (z9l--(x8l,y6))); filldraw z1r---z1'r..z1'l..subpath(rundy(p0,tim1),infinity) of p0..z7l ---z7'l..z7'r..subpath(rundy(p1,(tim2,1.33oblu)),rundy(p1,1).zpet) of p1 ..subpath(rundy(p3,(0,hair)),rundy(p3,infinity).zpet) of p3 ..subpath(rundy(p1,tim3),infinity) of p1 ..cycle; penlabels(0,1,1',2,3,4,5,6,7,7',8,9,10,11); endchar; iff known chars.latin_eszet: bskchar "The german eszet"; beginchar(chars.latin_eszet,11.5u#, asc_height#, 0); uni "0x00DF"; italcorr .5[asc_height#,x_height#]*slant-1.25u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; numeric tim; path p[]; pos3(hair,-90); pos4(stem,180); pos4'(stem,180); pos6(stem,180); pos7(.9stem,180); pos8(hair,90); lft x1l=2.5u; bot y1=0; top y2=.4[x_height,h]; top y3l=h+o; x3=.5w+.5u; .5[x2r,x4]=x3; y4=y2+hair; lowercase_points(1,2,jut); if not bold_face: y2r:=y2r+hair; fi; x1d:=x1d-hair; z3'r=z3r+.5hair*right; pos5(hair,90); pos5'(hair,90); y5=y5'=bot x_height; lft x5=u; x5'=x1l; x6r=x2r+stem+u; rt x7l=w-u; y7=.25x_height; y6=.5[x_height,y9]; bot y8l=-o; x8=x9=.5[x6,x7]; y9=.5[x_height,y8l]+.5hair; y7r:=y7-.225stem; pos9(curve,angle((x7r-x6r,x_height))+180); pos10(hair,0); pos10'(hair,0); rt x10r=x6r; x10'r=x10r+o; y10=.5[y8r,y9]+.5hair; y10'=-o; p0:=z10l{dir-80}..{right}z8l; tim=xpart(p0 intersectiontimes (z10'r--z9r)); filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d..{left}z1e.. {up}z1f---z2r...{right}z3r..z4r{down}..z6r..z9r..{down}z7r..{left}z8r.. {up}z10r..z10l---z10'l..z10'r..subpath (rundy(p0,tim),1) of p0..z7l{up}.. z9l..z6l..z4l{up}..z3l..z2l---obl(5'r,2l,5r)---z5r..z5l--- obl(5'l,5l,1l)---cycle; penlabels(3,4,5,5',6,7,8,9,10,10'); endchar; iff known chars.latin_long_s: bskchar "The letter long s"; beginchar(chars.latin_long_s,6.5u#, asc_height#, 0); uni "0x017F"; italcorr asc_height#*slant+1.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; numeric fend; fend:=stem; pos3(hair,-90); pos4(fend,180); lft x1l=2.5u; bot y1=0; top y2=h-like_curve; top y3l=h+o; x3=if monospace: .6[w,x1r] else: w-1.25u fi; .5[x2r,x4]=x3; y4''=y3r-like_hair; z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; lowercase_points(1,2,jut); if not bold_face: y2r:=y2r+hair; fi; z3'r=z3r+.5hair*right; pos5(hair,90); pos5'(hair,90); y5=y5'=bot x_height; lft x5=u; x5'=x1l; filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d.. {left}z1e..{up}z1f---z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l--- obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle; penlabels(3,4,5,5'); labels(4',4''); endchar; charscription(7.5u,.4[asc_height,x_height], 0)( pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180); x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u; y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; pos5(hair,90); pos6(hair,90); y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}..{left}z3l ..z2l---obl(1'l,2l,5l)---z5l..{right}z5r..controls (z1l+hair*dir100).. z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle; penlabels(0,1,1',2,3,4,5,6); labels(1''r); ); iff known chars.latin_t: bskchar "The letter t"; beginchar(chars.latin_t,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0074"; italcorr x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.latin_tcommabelow: bskchar "The letter t with comma below"; beginchar(chars.latin_tcommabelow,7.5u#,.4[asc_height#,x_height#],.75comma_depth#); uni "0x021B"; italcorr x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; x100=x3-o; top y100''r=-2o; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_tcaron: bskchar "The letter t with caron (treated like comma)"; beginchar(chars.latin_tcaron,7.5u#, asc_height#, 0); uni "0x0165"; italcorr asc_height#*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; usechar; rt x100'''=w-u; top y100''r=h; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; iff known chars.latin_t_BB: bskchar "The blackboard-bold letter t"; beginchar(chars.latin_t_BB,7.5u#,.4[asc_height#,x_height#], 0); uni "0x1D565"; italcorr x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; pos0(hair,0); pos1(.8cap_stem,0); pos2(.8cap_stem,0); pos3(hair,90); pos4(hair,180); x1=x2; x2r=.5w; rt x3=.5[x2r,x4]; rt x4l=w-u; y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; pos5(hair,90); pos6(hair,90); y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)}..{left}z3l ..z2l---obl(1'l,2l,5l)---z5l..{right}z5r..controls (z1l+hair*dir100).. z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle; path p[]; numeric tim[]; p100:=subpath(0,2) of (z1r---z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r); p101:=subpath(1,infinity) of (z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..{up}z2l); z100=bsktouch(p100,down,p101,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y2))); tim101=xpart(p101 intersectiontimes (z100--(x100,y3l-5))); z101=2/3[z1r,z0r]; oblu:=.8bbw; infill subpath(0,rundy(p100,tim100).zpet) of p100 ..subpath(rundy(p101,tim101),infinity) of p101---ifobl(1l,101,2l,1r,,)---cycle; penlabels(0,1,1',2,3,4,5,6); labels(1''r,100,101); endchar; iff known chars.latin_tcedilla: bskchar "The letter t with cedilla"; beginchar(chars.latin_tcedilla,7.5u#,.4[asc_height#,x_height#],.65desc_depth#); uni "0x0163"; italcorr x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; numeric tim[]; pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180); pos7(.5stem,0); pos8(.5stem,0); pos9(.8stem,0); pos10(.5stem,-110); x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u; y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; pos5(hair,90); pos6(hair,90); y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; x7l=x8l; z7r=z3r; y8=-hair; y9=-.5d; rt x9r-lft x10r=4u; x7r-lft x10r=2u; y10r=-d; p1:=z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..z2l; p2:=z8r..{down}z9r..{left}z10r..{right}z10l..{up}z9l..z8l--z7l; p3:=z7r{down}..subpath (rundy(p2,(0,curve)),infinity) of p2; tim1=xpart(p1 intersectiontimes (z8l--(x7l,y2))); filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--subpath(0,rundy(p1,1).zpet) of p1..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3..subpath(rundy(p1,tim1),infinity) of p1---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100)..z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle; penlabels(0,1,1',2,3,4,5,6,7,8,9,10); labels(1''r); endchar; iff known chars.latin_tstroke: bskchar "The letter t with stroke"; beginchar(chars.latin_tstroke,7.5u#,.4[asc_height#,x_height#], 0); uni "0x0167"; italcorr x_height#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180); pos5(hair,90); pos6(hair,90); pos7(bar,90); pos7'(bar,90); pos8(bar,90); pos8'(bar,90); x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u; y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; x8-x7=4u if bold_face: +.5u fi; y8=y8'=y7=y7'=bar_height; .5[x7,x8]=x1+o; x7'=x1l; x8'=x1r; bskpoints(7,8,hair,hair); filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)} ..{left}z3l..z2l---obl(7'l,2l,7l)---z7l..z7rr---obl(7'r,7rr,1l) ---obl(1'l,2l,5l)---z5l..{left}z5r..controls (z1l+hair*dir100) ..z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r) ---obl(8'r,1r,8r)---z8r..z8ll---obl(8'l,8l,2r)---cycle; penlabels(0,1,1',2,3,4,5,6,7,7',8,8'); labels(1''r,7rr,8ll); endchar; iff known chars.latin_t_SS: bskchar "The sans-serif letter t"; beginchar(chars.latin_t_SS,7.5u#,.4[asc_height#,x_height#], 0); uni "0x1D5CD"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; pos0(hair,0); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(hair,180); x1=x2; x2r=.5w; x3=.5[x2r,x4]; rt x4l=w-u; y2=.15h; y4=2/3(x4-x3); y1=x_height; bot y3l=-o; y4l:=y4-.5(hair-currentbreadth); top y0=h+apex_o; x0r=x1r; y0r:=y0-apex_o; pos5(hair,90); pos6(hair,90); y5=y6=y1; lft x5=u; rt x6=w-u; z1'l-z1l=z1'r-z1r=z1r-z1''r=.5(hair-currentbreadth)*down; y5'=y5r; x5'=x1l; oblu:=cap_hair; filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r..z4l{dir(angle(z3l-z4l)+20)}..{left}z3l..z2l---obl(1'l,2l,5l)---z5l..z5r---obl(5',5r,0l)---z0l..z0r---obl(1''r,0r,6r)---z6r..z6l---obl(1'r,6l,2r)---cycle; penlabels(0,1,1',2,3,4,5,6); labels(1''r,5'); endchar; charscription(11u,x_height,0)( path p[]; numeric tim[]; pos1(stem,0); pos2(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,90); lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4; bot y3=0; top y2= top y4=h; y4=y4'; y1=.25x_height; serifs_tl(2l); serifs_tl(4l); lowercase_points(3,4',jut); y5l=0; x5=.5[x3l,x1r]; x6l=x3l; y6=.4x_height; oblu:=.5f_obl; p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right ..z2l.b---z1l..z5l..{up}z6l; p2:=z6l---(reverse lowercase_lower_u_serif(3,.5hair))---obl(4r,3f,4l) ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b; tim0=y3a-like_hair; tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0))); tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0))); filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle; penlabels(1,2,4,5,6,7); ); iff known chars.latin_u: bskchar "The letter u"; beginchar(chars.latin_u,11u#, x_height#, 0); uni "0x0075"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_uacute: bskchar "The letter u with acute"; beginchar(chars.latin_uacute,11u#, asc_height#, 0); uni "0x00FA"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=.5[x2r,x4'a]; acute(100,101); endchar; iff known chars.latin_uring: bskchar "The letter u with ring"; beginchar(chars.latin_uring,11u#, asc_height#, 0); uni "0x016F"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=.5[x2r,x4'a]; lft x101=x2r; ring(100,101); endchar; iff known chars.latin_uumlaut: bskchar "The letter u with umlaut"; beginchar(chars.latin_uumlaut,11u#, asc_height#-dot_size#, 0); uni "0x00FC"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=x2; x101=x4l; umlaut(100,101); endchar; iff known chars.latin_ugrave: bskchar "The letter u with grave"; beginchar(chars.latin_ugrave,11u#,asc_height#,0); uni "0x00F9"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x5; grave(100,101); endchar; iff known chars.latin_udoublegrave: bskchar "The letter u with double grave"; beginchar(chars.latin_udoublegrave,11u#,asc_height#,0); uni "0x0215"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x102-x100=3u; d_grave(100,101,102,103,x5-o); endchar; iff known chars.latin_umacron: bskchar "The letter u with macron"; beginchar(chars.latin_umacron,11u#,.5[asc_height#,x_height#],0); uni "0x016B"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=x1r; x101=x3l; macron(100,101); endchar; iff known chars.latin_ucaron: bskchar "The letter u with caron"; beginchar(chars.latin_ucaron,11u#,asc_height#,0); uni "0x01D4"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x5; hacek(100,101,102); endchar; iff known chars.latin_ucircumflex: bskchar "The letter u with circumflex"; beginchar(chars.latin_ucircumflex,11u#,asc_height#-.1x_height#,0); uni "0x00FB"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x5; circumflex(100,101,102); endchar; iff known chars.latin_ubreve: bskchar "The letter u with breve"; beginchar(chars.latin_ubreve,11u#,asc_height#,0); uni "0x016D"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x5; x102-x100=5u; breve(100,101,102); endchar; iff known chars.latin_uinvbreve: bskchar "The letter u with inverted breve"; beginchar(chars.latin_uinvbreve,11u#,asc_height#,0); uni "0x0217"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x5; x102-x100=5u; tieacc(100,101,102); endchar; iff known chars.latin_uhumlaut: bskchar "The letter u with Hungarian umlaut"; beginchar(chars.latin_uhumlaut,11.3u#,asc_height#,0); uni "0x0171"; italcorr asc_height#*slant-1.5u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101-x100=3u; .5[x100,x101]=x5+1.5u; h_umlaut(100,101,102,103,2u); endchar; iff known chars.latin_utilde: bskchar "The letter u with tilde"; beginchar(chars.latin_utilde,11u#,asc_height#,0); uni "0x0169"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101-x100=6u; x.tilde=x5-o; tilde(100,101); endchar; iff known chars.latin_u_BB: bskchar "The blackboard-bold letter u"; beginchar(chars.latin_u_BB,11u#, x_height#, 0); uni "0x1D566"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; save stem; stem:=.8cap_stem; pos1(stem,0); pos2(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,90); lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4; bot y3=0; top y2= top y4=h; y4=y4'; y1=.25x_height; serifs_tl(2l); serifs_tl(4l); lowercase_points(3,4',jut); y5l=0; x5=.5[x3l,x1r]; x6l=x3l; y6=.4x_height; oblu:=.5f_obl; p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right ..z2l.b---z1l..z5l..{up}z6l; p2:=z6l---(reverse lowercase_lower_u_serif(3,.5hair))---obl(4r,3f,4l) ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b; tim0=y3a-like_hair; tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0))); tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0))); filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle; oblu:=2f_obl; oblu.more:=1.25f_obl; bot z101=(x2l,y2l.c); p100:=z1l{down}..z5l..{up}z6l; p101:=z6r{down}..z5r..{up}z1r; z100=bsktouch(p100,up,p101,down); tim100=xpart(p100 intersectiontimes (z100--(x100,y5l-5-u))); tim101=xpart(p101 intersectiontimes (z100--(x100,y1))); infill ifobl(4'r,4'b,3r,3l,more,)---z3a..z3..z3f---cycle; oblu.m:=f_obl; oblu:=bbw; infill ifobl(2r,2l.b,1r,1l,more,) ---subpath(0,rundy(p100,tim100).zpet) of p100 ..subpath(rundy(p101,tim101),infinity) of p101---cycle; penlabels(1,2,4,5,6,7); labels(100,101); endchar; iff known chars.latin_u_SS: bskchar "The sans-serif letter u"; beginchar(chars.latin_u_SS,11u#, x_height#, 0); uni "0x1D5CE"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; pos1(stem,0); pos2(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,90); lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4; bot y3=0; top y2= top y4=h; y4=y4'; y1=.25x_height; serifs_tl(2l); serifs_tl(4l); lowercase_points(3,4',jut); y5l=0; x5=.5[x3l,x1r]; x6l=x3l; y6=.3x_height; oblu:=.5f_obl; filldraw z6r{down}..z5r..z1r---z2r..z2l.b---z1l..z5l---z3l..z3f---z4r..{down}z4l.b---cycle; penlabels(1,2,4,5,6,7); endchar; iff known chars.latin_uogonek: bskchar "The letter u with ogonek"; beginchar(chars.latin_uogonek,11u#,x_height#,.85desc_depth#); uni "0x0173"; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; path p[]; numeric tim[]; pos1(stem,0); pos2(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,90); lft x1l=2u; x2=x1; rt x3r=w-2u; x3=x4; bot y3=0; top y2= top y4=h; y4=y4'; y1=.25x_height; serifs_tl(2l); serifs_tl(4l); lowercase_points(3,4',jut); y5l=0; x5=.5[x3l,x1r]; x6l=x3l; y6=.4x_height; pos8(stem,0); pos9(curve,0); pos10(hair,45); pos11(hair,160); x8-x9l=1.5u; x8l=x3l; x10-x9l=3u; rt x11l-x10=1.5u; bot y8=0; y9=-.5d; bot y10l=-d; y11=-2/3d; oblu:=.5f_obl; p1:=z6r{down}..z5r..z1r---obl(2r,1r,2l)---z2l.a..z2l.c---z2l.c+.5hair*right ..z2l.b---z1l..z5l..{up}z6l; p2:=z6l---reverse (z3f{down}..{right}z3e..{left}z3d..z8r..z9r..z10r ..{z8-z9}z11r..z11l{z9-z8}..z10l..z9l..{z8r-z9l}z8l---z3a) ---obl(4r,3f,4l) ---z4l.a..z4l.c---z4l.c+.5hair*right..z4l.b; tim0=y3a-like_hair; tim1-7=xpart(subpath(7,length p1) of p1 intersectiontimes ((.5w,tim0)--(w,tim0))); tim2 =xpart(p2 intersectiontimes ((0,tim0)--(x3,tim0))); filldraw subpath(0,tim1) of p1..subpath(rundy(p2,tim2),infinity) of p2---cycle; penlabels(1,2,4,5,6,7,8,9,10,11); endchar; iff known chars.latin_v: bskchar "The letter v"; beginchar(chars.latin_v,11u#,x_height#,0); uni "0x0076"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); numeric alpha, right_stem, left_stem; pickup tiny.nib; lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; x3l=.5w; bot y3l=-apex_o; left_stem=stem; right_stem=hair; alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l); pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); pos4(.65hair,90); pos5(.65hair,90); z1'l=z3l=z2'r; z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[hair,stem]; z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; serifs_tl(1l); serifs_tr(1r); serifs_tr(2r); serifs_tl(2l); filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l-- diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3') ..z1r.c{right}..z1r.a{left}..z1+serif_bend..{left}cycle; penlabels(1,1',2,2',3,3',4,5,6,7); endchar; iff known chars.latin_v_BB: bskchar "The blackboard-bold letter v"; beginchar(chars.latin_v_BB,11u#,x_height#,0); uni "0x1D567"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); numeric alpha, right_stem, left_stem; pickup tiny.nib; lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; x3l=.5w; bot y3l=-apex_o; left_stem=.8cap_stem; right_stem=hair; alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l); pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); pos4(.65hair,90); pos5(.65hair,90); z1'l=z3l=z2'r; z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[hair,stem]; z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; serifs_tl(1l); serifs_tr(1r); serifs_tr(2r); serifs_tl(2l); filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l-- diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c ..diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3') ..z1r.c{right}..z1r.a{left}..z1+serif_bend..{left}cycle; oblu:=f_obl; oblu.more:=1.25oblu; infill ifobl(1l,1r,3l,3',more,)---ifobl(3',3l,1r,1l,,)---cycle; penlabels(1,1',2,2',3,3',4,5,6,7); math_fit(0,ic#-2u#); endchar; iff known chars.latin_v_SS: bskchar "The sans-serif letter v"; beginchar(chars.latin_v_SS,11u#,x_height#,0); uni "0x1D5CF"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); numeric alpha, right_stem, left_stem; pickup tiny.nib; lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; x3l=.5w; bot y3l=-apex_o; left_stem=stem; right_stem=hair; alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l); pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); pos4(.65hair,90); pos5(.65hair,90); z1'l=z3l=z2'r; z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[hair,stem]; z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; serifs_tl(1l); serifs_tr(1r); serifs_tr(2r); serifs_tl(2l); filldraw diag_serif(1l,3l)---z3l---diag_serif(2r,3l)...z2 ...diag_serif(2l,3')---z3'r..z3'l---diag_serif(1r,3')...z1...cycle; penlabels(1,1',2,2',3,3',4,5,6,7); math_fit(0,ic#-1u#); endchar; charscription(14.5u,x_height,0)( numeric alpha[], right_stem, left_stem; oblu:=2oblu; lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; x3=.5w if monospace: +.5(stem-hair) fi; top y3=h if monospace and (x2r-x1l<4stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.35w; bot y4=bot y5=-apex_o; left_stem=stem; right_stem=hair; alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l); alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5); alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3); alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4); pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0); serifs_tl(1l); serifs_tr(1r); serifs_tl(2l); serifs_tr(2r); bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5); y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny); z0=whatever[z4,z4']=whatever[z5,z5']; z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right]; z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left]; filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---z4---obl(0,4,5)---z5 ---diag_serif(2r,5)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c ..diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r) ---diag_serif(1r,1'')..z1r.c{right}..z1r.a{left}.. z1+serif_bend..{left}cycle; penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5'); ); iff known chars.latin_w: bskchar "The letter w"; beginchar(chars.latin_w,14.5u#,x_height#,0); uni "0x0077"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; endchar; iff known chars.latin_wcircumflex: bskchar "The letter w with circumflex"; beginchar(chars.latin_wcircumflex,14.5u#,asc_height#-.1x_height#,0); uni "0x0175"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x101=x4'+o; circumflex(100,101,102); endchar; iff known chars.latin_wgrave: bskchar "The letter w with grave"; beginchar(chars.latin_wgrave,14.5u#,asc_height#,0); uni "0x1E81"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; .5[x100,x101]=x4'-u; grave(100,101); endchar; iff known chars.latin_wacute: bskchar "The letter w with acute"; beginchar(chars.latin_wacute,14.5u#,asc_height#,0); uni "0x1E83"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; .5[x100,x101]=x4'; acute(100,101); endchar; iff known chars.latin_wumlaut: bskchar "The letter w with umlaut"; beginchar(chars.latin_wumlaut,14.5u#,asc_height#-dot_size#,0); uni "0x1E85"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; usechar; x100=x1''; x101=x2''; umlaut(100,101); endchar; iff known chars.latin_w_BB: bskchar "The blackboard-bold letter w"; beginchar(chars.latin_w_BB,14.5u#,x_height#,0); uni "0x1D568"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; numeric alpha[], right_stem, left_stem; oblu:=2oblu; lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; x3=.5w if monospace: +.5(stem-hair) fi; top y3=h if monospace and (x2r-x1l<4stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.35w; bot y4=bot y5=-apex_o; left_stem=.8cap_stem; right_stem=hair; alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l); alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5); alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3); alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4); pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0); serifs_tl(1l); serifs_tr(1r); serifs_tl(2l); serifs_tr(2r); bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5); y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny); z0=whatever[z4,z4']=whatever[z5,z5']; z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right]; z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left]; filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---z4---obl(0,4,5)---z5 ---diag_serif(2r,5)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c ..diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r) ---diag_serif(1r,1'')..z1r.c{right}..z1r.a{left}.. z1+serif_bend..{left}cycle; oblu:=f_obl; oblu.more:=1.25oblu; oblu.m:=2oblu; infill ifobl(1l,1r,4,1'',more,)---ifobl(1'',4,1r,1l,,)---cycle; infill ifobl(0,3,5,2'',more,m)---ifobl(2'',5,3,0,,)---cycle; penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5'); math_fit(0,ic#-2u#); endchar; iff known chars.latin_w_SS: bskchar "The sans-serif letter w"; beginchar(chars.latin_w_SS,14.5u#,x_height#,0); uni "0x1D5D0"; italcorr x_height#*slant; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; numeric alpha[], right_stem, left_stem; oblu:=2oblu; lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; x3=.5w if monospace: +.5(stem-hair) fi; top y3=h if monospace and (x2r-x1l<4stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.35w; bot y4=bot y5=-apex_o; left_stem=stem; right_stem=hair; alpha1=diag_ratio(1,left_stem,y1l-y4,x4-x1l); alpha2=diag_ratio(1,right_stem,y2r-y5,x2r-x5); alpha3=diag_ratio(1,left_stem,y3-y5,x5-x3); alpha4=diag_ratio(1,right_stem,y3-y4,x3-x4); pos1(alpha1*left_stem,0); pos2(alpha2*right_stem,0); serifs_tl(1l); serifs_tr(1r); serifs_tl(2l); serifs_tr(2r); bot y1'=bot y2'=-o; z1'=z1r+whatever*(z1l-z4); z2'=z2l+whatever*(z2r-z5); y5'=y4'=y3; x3-x5'=alpha3*(left_stem-tiny); x4'-x3=alpha4*(right_stem-tiny); z0=whatever[z4,z4']=whatever[z5,z5']; z2''=whatever[z2l,z2']=whatever[z3,z5+(x3-x5')*right]; z1''=whatever[z1r,z1']=whatever[z3,z4+(x4'-x3)*left]; filldraw diag_serif(1l,4)---z4---obl(0,4,5)---z5---diag_serif(2r,5)...z2 ...diag_serif(2l,2')---obl(2'',2l,3)---z3---obl(1'',3,1r) ---diag_serif(1r,1'')...z1...cycle; penlabels(1,2,3,4,5,6,7); labels(0,1',1'',2',2'',4',5'); math_fit(0,ic#-1u#); endchar; iff known chars.latin_x: bskchar "The letter x"; beginchar(chars.latin_x,11.5u#,x_height#,0); uni "0x0078"; italcorr x_height#*slant-.25u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; numeric alpha[]; oblu:=1.5oblu; lft x1l=2.25u; top y1l=h; rt x2r=w-2u; bot y2r=0; x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0; alpha1=diag_ratio(2,stem,y1l-y2r,x1l-x2r); alpha2=diag_ratio(1,hair,y3r-y4l,x3r-x4l); pos1(alpha1*stem,0); pos2(alpha1*stem,0); pos3(alpha2*hair,0); pos4(alpha2*hair,0); serifs_tl(1l); serifs_tr(1r); serifs_bl(2l); serifs_br(2r); serifs_tl(3l); serifs_tr(3r); serifs_bl(4l); serifs_br(4r); z1'=whatever[z1l,z2l]=whatever[z3l,z4l]; z2'=whatever[z1r,z2r]=whatever[z3r,z4r]; z3'=whatever[z1r,z2r]=whatever[z3l,z4l]; z4'=whatever[z1l,z2l]=whatever[z3r,z4r]; filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l) ---diag_serif(4l,1')..{left}z4l.c..z4l.a{right}.. z4+ser_boule*up..{right}z4r.a..{left}z4r.c ..diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l).. {left}z2l.c..z2l.a{right}..z2+ser_boule*up..{right}z2r.a..{left}z2r.c.. diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2').. {right}z3r.c..{left}z3r.a..z3..{left}z3l.a..{right}z3l.c.. diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3').. {right}z1r.c..{left}z1r.a..z1+serif_bend..{left}cycle; penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5'); endchar; iff known chars.latin_x_BB: bskchar "The blackboard-bold letter x"; beginchar(chars.latin_x_BB,11.5u#,x_height#,0); uni "0x1D569"; italcorr x_height#*slant-.25u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; save stem; stem:=.8cap_stem; numeric alpha[]; oblu:=1.5oblu; lft x1l=2.25u; top y1l=h; rt x2r=w-2u; bot y2r=0; x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0; alpha1=diag_ratio(2,stem,y1l-y2r,x1l-x2r); alpha2=diag_ratio(1,hair,y3r-y4l,x3r-x4l); pos1(alpha1*stem,0); pos2(alpha1*stem,0); pos3(alpha2*hair,0); pos4(alpha2*hair,0); serifs_tl(1l); serifs_tr(1r); serifs_bl(2l); serifs_br(2r); serifs_tl(3l); serifs_tr(3r); serifs_bl(4l); serifs_br(4r); z1'=whatever[z1l,z2l]=whatever[z3l,z4l]; z2'=whatever[z1r,z2r]=whatever[z3r,z4r]; z3'=whatever[z1r,z2r]=whatever[z3l,z4l]; z4'=whatever[z1l,z2l]=whatever[z3r,z4r]; filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l) ---diag_serif(4l,1')..{left}z4l.c..z4l.a{right}.. z4+ser_boule*up..{right}z4r.a..{left}z4r.c ..diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l).. {left}z2l.c..z2l.a{right}..z2+ser_boule*up..{right}z2r.a..{left}z2r.c.. diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2').. {right}z3r.c..{left}z3r.a..z3..{left}z3l.a..{right}z3l.c.. diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3').. {right}z1r.c..{left}z1r.a..z1+serif_bend..{left}cycle; oblu:=f_obl; oblu.more:=1.25oblu; bot y100=y2r.c; z100=whatever[z2r.bb,z1r]; infill ifobl(1r,1l,2r,2l,,more)---obl(2l,1r,2r)---z2r...obl(100,2r.c,1r)---cycle; penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5',100); endchar; iff known chars.latin_x_SS: bskchar "The sans-serif letter x"; beginchar(chars.latin_x_SS,11.5u#,x_height#,0); uni "0x1D5D1"; italcorr x_height#*slant-.25u#; adjust_fit(serif_fit#,serif_fit#); pickup tiny.nib; numeric alpha[]; oblu:=1.5oblu; lft x1l=2.25u; top y1l=h; rt x2r=w-2u; bot y2r=0; x3r=w-x1l; top y3r=h; lft x4l=2u; bot y4l=0; alpha1=diag_ratio(2,stem,y1l-y2r,x1l-x2r); alpha2=diag_ratio(1,hair,y3r-y4l,x3r-x4l); pos1(alpha1*stem,0); pos2(alpha1*stem,0); pos3(alpha2*hair,0); pos4(alpha2*hair,0); serifs_tl(1l); serifs_tr(1r); serifs_bl(2l); serifs_br(2r); serifs_tl(3l); serifs_tr(3r); serifs_bl(4l); serifs_br(4r); z1'=whatever[z1l,z2l]=whatever[z3l,z4l]; z2'=whatever[z1r,z2r]=whatever[z3r,z4r]; z3'=whatever[z1r,z2r]=whatever[z3l,z4l]; z4'=whatever[z1l,z2l]=whatever[z3r,z4r]; filldraw diag_serif(1l,2l)---obl(1',1l,4l)---diag_serif(4l,1')...z4 ...diag_serif(4r,4')---obl(4',4r,2l)---diag_serif(2l,1l)...z2 ...diag_serif(2r,1r)---obl(2',2r,3r)---diag_serif(3r,2')...z3 ...diag_serif(3l,3')---obl(3',3l,1r)---diag_serif(1r,3')...z1...cycle; penlabels(1,2,3,4,4l.bb); labels(1',2',3',4',5'); endchar; charscription(11.5u,x_height,desc_depth)( numeric alpha, right_stem, left_stem, tim[]; oblu:=2oblu; path p[]; lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; x3l=.52w; bot y3l=-u; left_stem=stem; right_stem=hair; alpha=diag_ratio(2,left_stem,y1l-y3l,x3l-x1l); pos1(alpha*left_stem,0); pos2(alpha*right_stem,0); pos1'(alpha*left_stem,0); pos2'(alpha*right_stem,0); pos4(whatever,0); pos5(dot_size,260); z1'l=z3l=z2'r; z3'=whatever[z1'r,z1r]=whatever[z2'l,z2l]; y3'l=y3'r=y3'+.25[hair,stem]; z3'l=whatever[z3',z1r]; z3'r=whatever[z3',z2l]; serifs_tl(1l); serifs_tr(1r); serifs_tr(2r); serifs_tl(2l); y4=-d+dot_size+hair; z4l=whatever[z2l,z3']; z4r=whatever[z3l,z2r]; y6=y3'l; z6=whatever[z3l,z1l]; bot y5r=-d; x5=x1; rt z5'=(x5-1/3dot_size,y5); if rt x5'oblu.light:..z4r fi ..obl(4r',4r,2r).light---z2r-- z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi ---z1l.b..{dir181}z1l.a{right}..z1+ser_boule*up.. {right}z1r.a{dir179}..cycle; infill obl(4',4r,2'')---obl(2'',4',1')---obl(1',2'',4')---cycle; penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r'); ); let _saved_char_four=_saved_char; numeric _saved_w_four; _saved_w_four:=_saved_w; iff known chars.numeral_four: bskchar "The numeral 4"; beginchar(chars.numeral_four,figw(12u),medfig,medfigd); uni "0x0034"; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.superscript_numeral_four: bskchar "The superscript numeral 4"; beginchar(chars.superscript_numeral_four,if monofig: 5.5u# else: 7u# fi,asc_height#,0); uni "0x2074"; adjust_fit(0,0); pickup tiny.nib; multiply(1.7skal)(curve,hair,vair,dig_stem); usechar shifted (-x3l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; iff known chars.fraction_one_quarter: bskchar "Fraction one quarter"; beginchar(chars.fraction_one_quarter,7u#,asc_height#,0); uni "0x00BC"; adjust_fit(0,0); pickup tiny.nib; numeric zv; zv:=if medieval: .5 else: .4 fi; multiply(1.7zv)(curve,hair,stem,like_hair,like_stem); usechar shifted (-.5w,0) scaled zv shifted (.5WW,0); save x,y; let _saved_char=_saved_char_one; _saved_w:=_saved_w_one; usechar shifted -(x1,0) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); pos10(hair,90); pos11(hair,90); lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi; filldraw bskrule(10,11,hair,hair); penlabels(10,11); endchar; iff known chars.fraction_three_quarters: bskchar "Fraction three quarters"; beginchar(chars.fraction_three_quarters,7u#,asc_height#,0); uni "0x00BE"; adjust_fit(0,0); pickup tiny.nib; numeric zv; zv:=if medieval: .5 else: .4 fi; multiply(1.7zv)(curve,hair,stem,like_hair,like_stem); let _saved_char=_saved_char_four; _saved_w:=_saved_w_four; usechar shifted (-.5w,0) scaled zv shifted (.5WW,0); save x,y; let _saved_char=_saved_char_three; _saved_w:=_saved_w_three; usechar shifted -(x2+hair,if medieval: y7 else: 0 fi) scaled zv shifted (.5WW+(HH-zv*fig_height)*slant,HH-zv*fig_height); pos10(hair,90); pos11(hair,90); lft x10=u; rt x11=w-u; y10=y11=if medieval: bar_height else: .5[x_height,bar_height] fi if bold_face: +.5hair fi; filldraw bskrule(10,11,hair,hair); penlabels(10,11); endchar; iff known chars.numeral_four_BB: bskchar "The blackboard-bold numeral 4"; beginchar(chars.numeral_four_BB,figw(12u),medfig,medfigd); uni "0x1D7DC"; adjust_fit(0,0); pickup tiny.nib; oblu:=2f_obl; oblu.light:=.5oblu; pos1(cap_stem,0); pos2(cap_stem,0); pos4(hair,90); pos5(stem,30); rt x1r= rt x2r=w-3.5u; bot y1=-d; top y2=h+apex_o; lft x3l=u; y3l=if medieval: -stem else: .5x_height fi; z4l=(x1r+hair,y3l); rt x5r=w-u; y5l=y3l; z2'=whatever[z2r,z3l]=whatever[z1l,z2l]; z3l'=z3l+(hair-tiny,0) rotated(angle(z2r-z3l)-90); x2''=x2'; z2''=z3l'+whatever*(z2r-z3l); z4'=whatever[z3l',z2'']=whatever[z4r,(x3l,y4r)]; z4l'=(x1r,y4l); z4r'=(x1r,y4r); z4l''=(x1l,y4l); z4r''=(x1l,y4r); z1'=(x1l,y4r); cap_serifs_bl(1l); cap_serifs_br(1r); filldraw z1r.b---obl(4l',1r,5l)if bold_face:.light fi ---z5l..z5r if x4-x1r>oblu.light:..z4r fi ..obl(4r',4r,2r).light---z2r-- z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi ---z1l.b..{dir181}z1l.a{right}..z1+ser_boule*up.. {right}z1r.a{dir179}..cycle; infill obl(4',4r,2'')---obl(2'',4',1')---obl(1',2'',4')---cycle; bot z100=(x1l,y1l.c); oblu:=f_obl; oblu.more:=2oblu; infill ifobl(2',2r,100,1r,,more)%obl(2',100,2r)---obl(2r,2',1r).more ---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle; penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r'); endchar; iff known chars.numeral_four_SS: bskchar "The sans-serif numeral 4"; beginchar(chars.numeral_four_SS,figw(11.5u),medfig,medfigd); uni "0x1D7E5"; adjust_fit(0,0); pickup tiny.nib; oblu:=2f_obl; oblu.light:=.5oblu; pos1(dig_stem,0); pos2(dig_stem,0); pos4(hair,90); pos5(hair,90); rt x1r= rt x2r=w-3u; bot y1=-d; top y2=h+apex_o; lft x3l=u; y3l=if medieval: -stem else: .5x_height fi; z4l=(x1r+hair,y3l); rt x5r=w-u; y5l=y3l; z2'=whatever[z2r,z3l]=whatever[z1l,z2l]; z3l'=z3l+(hair-tiny,0) rotated(angle(z2r-z3l)-90); x2''=x2'; z2''=z3l'+whatever*(z2r-z3l); z4'=whatever[z3l',z2'']=whatever[z4r,(x3l,y4r)]; z4l'=(x1r,y4l); z4r'=(x1r,y4r); z4l''=(x1l,y4l); z4r''=(x1l,y4r); z1'=(x1l,y4r); cap_serifs_bl(1l); cap_serifs_br(1r); filldraw z1r.b---obl(4l',1r,5l)if bold_face:.light fi ---z5l..z5r---obl(4r',4r,2r).light---z2r-- z2'--z3l---obl(4l'',3l,1l)if bold_face:.light fi ---z1l.b...z1...cycle; infill obl(4',4r,2'')---obl(2'',4',1')---obl(1',2'',4')---cycle; penlabels(1,2,3,4,5); labels(2',2'',3l',4',4l',4r'); endchar; charscription(figwu(if medieval: 10.5u else: 9.5u fi),medfigu,medfigdu)( numeric theta; theta=if medieval: 0 else: 10 fi; path p[]; oblu:=2f_obl; pos1(hair,0); pos2(hair,0); pos3(stem,75); pos4(hair,-90); pos5(curve,180); pos6(hair,90); x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1; y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; z3r=z2r; z2'=(x2r,.5[y4,y2]); x4=.5w; rt x5l=w-u; y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem); y5=.48[y4,y6]; x6=.5w-o; bot y6l=-d; lft x7r=u; y7=y6+if known superscript: 3 else: 4 fi /3like_curve; x8=w-u; y8=y1+.5apex_o; z1'=z1r+if bold_face:.8\\fi curve*down; p0=z1l---z2l..{down}z3l..(x3r,y3l)..{up}z3r..{up}z2r..{right}z4r.. {down}z5r..{left}z6r..(reverse smitko(7,curve))..z6l{right}.. {up}z5l; p1=z5l{up}..z4l..z2'; p2=z2'--z1'; p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l; filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,infinity).zpet) of p2.. subpath(rundy(p3,0),infinity) of p3&cycle; penlabels(1,2,3,4,5,6,7); labels(1',2',8); ); iff known chars.numeral_five: bskchar "The numeral 5"; beginchar(chars.numeral_five,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x0035"; italcorr h#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.superscript_numeral_five: bskchar "The superscript numeral 5"; beginchar(chars.superscript_numeral_five,if monofig: 5.5u# else: if medieval: 6.25u# else: 5.75u#fi fi,asc_height#,0); uni "0x2075"; adjust_fit(0,0); pickup tiny.nib; boolean superscript; superscript=true; multiply(1.7skal)(curve,hair,stem); usechar shifted (-x7r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; iff known chars.numeral_five_BB: bskchar "The blackboard-bold numeral 5"; beginchar(chars.numeral_five_BB,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x1D7DD"; italcorr h#*slant; adjust_fit(0,0); pickup tiny.nib; numeric theta; theta=if medieval: 0 else: 10 fi; path p[]; numeric tim[]; oblu:=2f_obl; pos1(hair,0); pos2(hair,0); pos3(stem,75); pos4(hair,-90); pos5(cap_stem,180); pos6(hair,90); x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1; y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; z3r=z2r; z2'=(x2r,.5[y4,y2]); x4=.5w; rt x5l=w-u; y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem); y5=.48[y4,y6]; x6=.5w-o; bot y6l=-d; lft x7r=u; y7=y6+if known superscript: 3 else: 4 fi /3like_curve; x8=w-u; y8=y1+.5apex_o; z1'=z1r+if bold_face:.8\\fi curve*down; p0=z1l---z2l..{down}z3l..(x3r,y3l)..{up}z3r..{up}z2r..{right}z4r.. {down}z5r..{left}z6r..(reverse smitko(7,curve))..z6l{right}.. {up}z5l; p1=z5l{up}..z4l..z2'; p2=z2'--z1'; p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l; filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,infinity).zpet) of p2.. subpath(rundy(p3,0),infinity) of p3&cycle; p100:=z2'..z4l..{down}z5l..{left}z6l; p101:=subpath(6,8) of p0; p102:=subpath(0,1) of p3; p103:=subpath(1,2) of p3; z100=bsktouch(p100,down,p101,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y4l+5))); tim101=xpart(p101 intersectiontimes (z100--(x100,y5))); z101=bsktouch(p100,up,p101,down); tim102=xpart(p100 intersectiontimes (z101--(x101,y6l-u))); tim103=xpart(p101 intersectiontimes (z101--(x101,y5))); z102=bsktouch(p102,up,p103,down); tim104=xpart(p102 intersectiontimes (z102--(x102,y4))); tim105=xpart(p103 intersectiontimes (z102--(x102,y8))); oblu:=bbw; infill subpath(rundy(p101,tim103).zpet,rundy(p101,tim101)) of p101 ..reverse subpath(rundy(p100,tim102).zpet,rundy(p100,tim100)) of p100 ..cycle; infill subpath(rundy(p102,(0,f_obl)),rundy(p102,tim104).zpet) of p102 ..subpath(rundy(p103,tim105),rundy(p103,(1,2f_obl)).zpet) of p103..cycle; penlabels(1,2,3,4,5,6,7); labels(1',2',8,100,101,102); endchar; iff known chars.numeral_five_SS: bskchar "The sans-serif numeral 5"; beginchar(chars.numeral_five_SS,figw(if medieval: 10.5u else: 9.5u fi),medfig,medfigd); uni "0x1D7E6"; italcorr h#*slant; adjust_fit(0,0); pickup tiny.nib; numeric theta; theta=if medieval: 0 else: 10 fi; path p[]; oblu:=2f_obl; pos1(hair,0); pos2(hair,0); pos3(hair,0); pos4(hair,-90); pos5(curve,180); pos6(hair,90); pos7(curve,150); x1l=if monofig: 2u else: 3u fi; top y1l=h+apex_o; x2=x1; y2=if medieval: .2x_height else: .5[bar_height,x_height] fi; x3r=x2r; y3r=y2r-hair; z2'=(x2r,.5[y4,y2]); x4=.5w; rt x5l=w-u; y4=y2+ if known superscript: .5\\fi (if not medieval: .8\\fi stem); y5=.48[y4,y6]; x6=.5w-o; bot y6l=-d; lft x7r=u; y7=y6+if known superscript: 3 else: 4 fi /3like_curve; x8=w-u; y8=y1+.5apex_o; z1'=z1r+if bold_face:.8\\fi curve*down; p0=z1l---z2l..{down}z3l..{up}z3r..{up}z2r..{right}z4r.. {down}z5r..{left}z6r..{up}z7l..{down}z7r..z6l{right}.. {up}z5l; p1=z5l{up}..z4l..z2'; p2=z2'--z1'; p3=z1'..{dir(70-theta)}z8{dir(-140-theta)}..z1l; filldraw p0&subpath(0,rundy(p1,infinity).zpet) of p1..subpath (rundy(p2,0),rundy(p2,infinity).zpet) of p2.. subpath(rundy(p3,0),infinity) of p3&cycle; penlabels(1,2,3,4,5,6,7); labels(1',2',8); endchar; charscription(figwu(10u),fig_height,0)( path p[]; numeric tim[]; oblu:=2oblu; pos1(vair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); pos5(curve,0); pos6(hair,-90); pos7(curve,160); rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3; lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem; rt x7l=w-u; y7=y6r-like_stem; p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0); p1=z2l{right}..z3l..z4l..{down}z1l; p2=z2r{left}..z5r..{right}z6r; z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right); tim1=xpart(p1 intersectiontimes (z0--(x4,y0))); tim2=xpart(p2 intersectiontimes (z0--(0,y0))); filldraw z7r{down}..z7l{up}..{left}z6l..z5l..{right}z2l.. subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2..cycle; infill z1r{up}..z4r..z3r..z2r..cycle; penlabels(0,1,2,3,4,5,6,7); ); iff known chars.numeral_six: bskchar "The numeral 6"; beginchar(chars.numeral_six,figw(10u),fig_height#,0); uni "0x0036"; italcorr .5[fig_height#,x_height#]*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.superscript_numeral_six: bskchar "The superscript numeral 6"; beginchar(chars.superscript_numeral_six,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2076"; adjust_fit(0,0); pickup tiny.nib; multiply(1.7skal)(curve,hair,vair,stem); usechar shifted (-x5l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; iff known chars.numeral_six_BB: bskchar "The blackboard-bold numeral 6"; beginchar(chars.numeral_six_BB,figw(10u),fig_height#,0); uni "0x1D7DE"; italcorr .5[fig_height#,x_height#]*slant; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2oblu; pos1(vair,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270); pos5(cap_stem,0); pos6(hair,-90); pos7(curve,160); rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3; lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem; rt x7l=w-u; y7=y6r-like_stem; p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0); p1=z2l{right}..z3l..z4l..{down}z1l; p2=z2r{left}..z5r..{right}z6r; z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right); tim1=xpart(p1 intersectiontimes (z0--(x4,y0))); tim2=xpart(p2 intersectiontimes (z0--(0,y0))); filldraw z7r{down}..z7l{up}..{left}z6l..z5l..{right}z2l.. subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2..cycle; infill z1r{up}..z4r..z3r..z2r..cycle; p100:=z4r..z3r..z2r..{up}z1r..cycle; p101:=p1; p102:=z6l{left}..z5l..{right}z2l; p103:=p2; oblu:=1.25bbw; z100=bsktouch(p100,up,p101,down); z101=bsktouch(p100,down,p101,up); z102=bsktouch(p102,up,p103,down); z103=bsktouch(p102,down,p103,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y1))); tim101=xpart(p101 intersectiontimes (z100--(x100,y4l+5))); tim102=xpart(p100 intersectiontimes (z101--(x101,y1))); tim103=xpart(p101 intersectiontimes (z101--(x101,y2l-5))); tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-5))); tim105=xpart(p103 intersectiontimes (z102--(x102,y1))); tim106=xpart(p102 intersectiontimes (z103--(x103,y6l+5))); tim107=xpart(p103 intersectiontimes (z103--(x103,y1))); infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; infill subpath(rundy(p102,tim106),rundy(p102,tim104).zpet) of p102 ..subpath(rundy(p103,tim105),rundy(p103,tim107).zpet) of p103..cycle; penlabels(0,1,2,3,4,5,6,7); labels(100,101,102,103); endchar; iff known chars.numeral_six_SS: bskchar "The sans-serif numeral 6"; beginchar(chars.numeral_six_SS,figw(10u),fig_height#,0); uni "0x1D7E7"; italcorr .5[fig_height#,x_height#]*slant; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2oblu; pos1(hair,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); pos5(curve,0); pos6(hair,-90); pos7(curve,160); rt x3l=w-u; y1=y3=.5x_height; x2=x4=.5w+.5hair; bot y2l=-o; .5[y4r,y2r]=y3; lft x5l=u; y5l=y1l+stem; top y6l=h+o; x6=.5w+.75stem; rt x7l=w-u; y7=y6r-like_stem; p0=z2r{left}..z5r..{right}z6r; x1r=xpart (((0,y1)--(.5w,y1))intersectionpoint p0); p1=z2l{right}..z3l..z4l..{down}z1l; p2=z2r{left}..z5r..{right}z6r; z0=bsktouch(p1,left,subpath(.2,infinity) of p2,right); tim1=xpart(p1 intersectiontimes (z0--(x4,y0))); tim2=xpart(p2 intersectiontimes (z0--(0,y0))); filldraw z7r{down}..z7l{up}..{left}z6l..z5l..{right}z2l.. subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2..cycle; infill z1r{up}..z4r..z3r..z2r..cycle; penlabels(0,1,2,3,4,5,6,7); endchar; charscription(figwu(11u),medfigu,medfigdu)( path p; numeric tim[]; pos1(hair,0); pos2(curve,0); pos3(stem,90); pos4(.4(h+d),80); rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem; y3r=y1r; y4r=y1r+if not medieval: .5\\fi stem; lft x4l=u; x3=x4r+hair; x3l:=x3l+o; p:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p + u*left; filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p,(tim1,curve)).zpet) of p..z1' ---z3l..{z4l-z4r}z4l..z4l+left--z4r{down}..z3r---cycle; penlabels(1,2,3,4); labels(1'); ); iff known chars.numeral_seven: bskchar "The numeral 7"; beginchar(chars.numeral_seven,figw(11u),medfig,medfigd); uni "0x0037"; italcorr h#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.superscript_numeral_seven: bskchar "The superscript numeral 7"; beginchar(chars.superscript_numeral_seven,if monofig: 5.5u# else: 6.5u# fi,asc_height#,0); uni "0x2077"; adjust_fit(0,0); pickup tiny.nib; multiply(1.7skal)(curve,hair,stem); usechar shifted (-x4l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; iff known chars.numeral_seven_BB: bskchar "The blackboard-bold numeral 7"; beginchar(chars.numeral_seven_BB,figw(11u),medfig,medfigd); uni "0x1D7DF"; italcorr h#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; pos1(.5cap_stem,0); pos2(cap_stem,0); pos3(stem,90); pos4(.4(h+d),80); rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem; y3r=y1r; y4r=y1r+if not medieval: .5\\fi stem; lft x4l=u; x3=x4r+hair; x3l:=x3l+o; p0:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p0 intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p0 + u*left; filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p0,(tim1,curve)).zpet) of p0..z1' ---z3l..{z4l-z4r}z4l..z4l+left--z4r{down}..z3r---cycle; p100:=z1r{z2r-z1}...{dir-100}z2r; p101:=p0; z100=bsktouch(p100,2left,p101,2right); tim100=xpart(p100 intersectiontimes (z100--(w,y100))); tim101=xpart(p101 intersectiontimes (z100--(0,y100))); oblu:=bbw; infill subpath(rundy(p100,tim100),infinity) of p100 ..subpath(0,rundy(p101,tim101).zpet) of p101..cycle; penlabels(1,2,3,4); labels(1',100); endchar; iff known chars.numeral_seven_SS: bskchar "The sans-serif numeral 7"; beginchar(chars.numeral_seven_SS,figw(11u),medfig,medfigd); uni "0x1D7E8"; italcorr h#*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; path p; numeric tim[]; pos1(hair,0); pos2(curve,0); pos3(stem,90); pos4(stem,90); rt top z1r=(w-u,h); lft x2l=2.5u; top y2=-d+.5stem; y3r=y4r=y1r; lft x4l=u; x3=x4r+hair; x3l:=x3l+o; p:=z2l{dir80}...{z1-z2r}z1l; tim1=xpart(p intersectiontimes ((0,y3l)--(w,y3l))); z1'=point tim1 of p + u*left; filldraw z1r{z2r-z1}...{dir-100}z2r..subpath(0,rundy(p,(tim1,curve)).zpet) of p..z1' ---z4l+.5stem*right...z4...z4r+.5stem*right---cycle; penlabels(1,2,3,4); labels(1'); endchar; charscription(figwu(9u),fig_height,0)( path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl; testem=.5[curve, hair]; tlstem=.75[curve,stem]; pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0); pos5(vair,90); pos6(vair,90); lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h; x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3]; p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90); p1=z6r{left}..z3r..z0r..z2r..z5r{left}; p2=z4l{down}..z0{dir-160}..{down}z1l; p3=z5l{right}..z2l..z0l..z3l..{right}z6l; p4=z1r{up}..z0{dir20}..{up}z4r; p5=z6l{left}..z3l..z0l..z2l..z5l{left}; (tim1,tim2)=p1 intersectiontimes p2; (tim3,tim4)=p3 intersectiontimes p4; (tim5,tim6)=p5 intersectiontimes p2; (tim7,tim8)=p1 intersectiontimes p4; filldraw subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2.. subpath(0,rundy(p3,tim3).zpet) of p3.. subpath(rundy(p4,tim4),infinity) of p4..cycle; infill subpath(0,rundy(p5,tim5).zpet) of p5 .. (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle; infill subpath(rundy(p1,tim7),infinity) of p1.. subpath(0,rundy(p4,tim8).zpet) of p4..cycle; penlabels(0,1,2,3,4,5,6); ); iff known chars.numeral_eight: bskchar "The numeral 8"; beginchar(chars.numeral_eight,figw(9u),fig_height#,0); uni "0x0038"; italcorr .5[fig_height#,x_height#]*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.superscript_numeral_eight: bskchar "The superscript numeral 8"; beginchar(chars.superscript_numeral_eight,if monofig: 5.5u# else: 5.5u# fi,asc_height#,0); uni "0x2078"; adjust_fit(0,0); pickup tiny.nib; multiply(1.7skal)(curve,hair,vair,stem); usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; iff known chars.numeral_eight_BB: bskchar "The blackboard-bold numeral 8"; beginchar(chars.numeral_eight_BB,figw(9u),fig_height#,0); uni "0x1D7E0"; italcorr .5[fig_height#,x_height#]*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl; testem=.5[curve, cap_stem]; tlstem=cap_stem; pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0); pos5(vair,90); pos6(vair,90); lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h; x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3]; p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90); p1=z6r{left}..z3r..z0r..z2r..z5r{left}; p2=z4l{down}..z0{dir-160}..{down}z1l; p3=z5l{right}..z2l..z0l..z3l..{right}z6l; p4=z1r{up}..z0{dir20}..{up}z4r; p5=z6l{left}..z3l..z0l..z2l..z5l{left}; (tim1,tim2)=p1 intersectiontimes p2; (tim3,tim4)=p3 intersectiontimes p4; (tim5,tim6)=p5 intersectiontimes p2; (tim7,tim8)=p1 intersectiontimes p4; filldraw subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2.. subpath(0,rundy(p3,tim3).zpet) of p3.. subpath(rundy(p4,tim4),infinity) of p4..cycle; infill subpath(0,rundy(p5,tim5).zpet) of p5 .. (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle; infill subpath(rundy(p1,tim7),infinity) of p1.. subpath(0,rundy(p4,tim8).zpet) of p4..cycle; p100:=p1; p101:=p3; p102:=z6l{right}..p2; p103:=p4..{left}z6r; p104:=p2..{right}z5l; p105:=z5r{left}..p4; z100=bsktouch(subpath(0,1) of p100,down,p101,up); z101=bsktouch(p100,down,subpath(0,1) of p101,up); z102=bsktouch(subpath(0,1) of p102,dir45,p103,dir-135); z103=bsktouch(subpath(1,infinity) of p102,dir-45,p103,dir135); z104=bsktouch(p104,dir-45,subpath(1,2) of p105,dir135); z105=bsktouch(p104,dir45,subpath(0,1) of p105,dir-135); tim100=xpart(p100 intersectiontimes (z100--(x100,y6r+5))); tim101=xpart(p101 intersectiontimes (z100--(x100,y3))); tim102=xpart(p100 intersectiontimes (z101--(x101,y2))); tim103=xpart(p101 intersectiontimes (z101--(x101,y5l-5))); tim104=xpart(p102 intersectiontimes (z102--(x102,y4))); tim105=xpart(p103 intersectiontimes (z102--(x102,y6r+5))); tim106=xpart(p102 intersectiontimes (z103--(x103,y4))); tim107=xpart(p103 intersectiontimes (z103--(x103,y1))); tim108=xpart(p104 intersectiontimes (z104--(x104,y3))); tim109=xpart(p105 intersectiontimes (z104--(x104,y1))); tim110=xpart(p104 intersectiontimes (z105--(x105,y5l-5))); tim111=xpart(p105 intersectiontimes (z105--(x105,y1))); oblu:=bbw; infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102 ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle; infill subpath(rundy(p104,tim108),rundy(p104,tim110).zpet) of p104 ..subpath(rundy(p105,tim111),rundy(p105,tim109).zpet) of p105..cycle; penlabels(0,1,2,3,4,5,6); labels(100,101,102,103,104,105); endchar; iff known chars.numeral_eight_SS: bskchar "The sans-serif numeral 8"; beginchar(chars.numeral_eight_SS,figw(9u),fig_height#,0); uni "0x1D7E9"; italcorr .5[fig_height#,x_height#]*slant-.5u#; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric testem, tlstem, tim[]; oblu:=2f_obl; testem=.5[curve, stem]; tlstem=.75[curve,stem]; pos1(testem,0); pos2(tlstem,180); pos3(tlstem,180); pos4(testem,0); pos5(hair,90); pos6(hair,90); lft x1l=u; rt x2l=w-u; x3r=u+hair; x4r=w-x3r; y1=y2=.27h; y3=y4=.76h; x5=x6=.5w; bot y5l=-o; top y6r=h+o; z0=whatever[z1,z4]=whatever[z2,z3]; p0:=z6{left}..z3..z0..z2..{left}z5; pos0(curve,angle(direction 2 of p0)-90); p1=z6r{left}..z3r..z0r..z2r..z5r{left}; p2=z4l{down}..z0{dir-160}..{down}z1l; p3=z5l{right}..z2l..z0l..z3l..{right}z6l; p4=z1r{up}..z0{dir20}..{up}z4r; p5=z6l{left}..z3l..z0l..z2l..z5l{left}; (tim1,tim2)=p1 intersectiontimes p2; (tim3,tim4)=p3 intersectiontimes p4; (tim5,tim6)=p5 intersectiontimes p2; (tim7,tim8)=p1 intersectiontimes p4; filldraw subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2.. subpath(0,rundy(p3,tim3).zpet) of p3.. subpath(rundy(p4,tim4),infinity) of p4..cycle; infill subpath(0,rundy(p5,tim5).zpet) of p5 .. (reverse subpath(0,rundy(p2,tim6).zpet) of p2) .. cycle; infill subpath(rundy(p1,tim7),infinity) of p1.. subpath(0,rundy(p4,tim8).zpet) of p4..cycle; penlabels(0,1,2,3,4,5,6); endchar; charscription(figwu(10u),medfigu,medfigdu)( path p[]; numeric tim[]; oblu:=2oblu; pos1(vair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90); pos5(curve,0); pos6(hair,-90); pos7(curve,160); lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi; rt x5r=w-u; y5r=y1r-stem; bot y6r=-d-o; x6=.5w-.75stem; lft x7r=u; y7=y6r+like_stem; p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0); p1=z2r{right}..z1r{up}..z4r..z3r; p2=z4l{right}..z5l..{left}z6l; z0=bsktouch(p1,right,p2,left); tim1=xpart(p1 intersectiontimes (z0--(.5w,y0))); tim2=xpart(p2 intersectiontimes (z0--(w,y0))); filldraw z7l{up}..{down}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r.. subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2..cycle; infill z1l{up}..z4l..z3l..z2l..cycle; penlabels(1,2,3,4,5,6,7); ); iff known chars.numeral_nine: bskchar "The numeral 9"; beginchar(chars.numeral_nine,figw(10u),medfig,medfigd); uni "0x0039"; italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant; adjust_fit(0,0); pickup tiny.nib; usechar; endchar; iff known chars.superscript_numeral_nine: bskchar "The superscript numeral 9"; beginchar(chars.superscript_numeral_nine,if monofig: 5.5u# else: 6u# fi,asc_height#,0); uni "0x2079"; adjust_fit(0,0); pickup tiny.nib; multiply(1.7skal)(curve,hair,vair); usechar shifted (-x3r,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; iff known chars.numeral_nine_BB: bskchar "The blackboard-bold numeral 9"; beginchar(chars.numeral_nine_BB,figw(10u),medfig,medfigd); uni "0x1D7E1"; italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2oblu; pos1(vair,0); pos2(hair,-90); pos3(cap_stem,180); pos4(hair,90); pos5(cap_stem,0); pos6(hair,-90); pos7(curve,160); lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi; rt x5r=w-u; y5r=y1r-stem; bot y6r=-d-o; x6=.5w-.75stem; lft x7r=u; y7=y6r+like_stem; p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0); p1=z2r{right}..z1r{up}..z4r..z3r; p2=z4l{right}..z5l..{left}z6l; z0=bsktouch(p1,right,p2,left); tim1=xpart(p1 intersectiontimes (z0--(.5w,y0))); tim2=xpart(p2 intersectiontimes (z0--(w,y0))); filldraw z7l{up}..{down}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r.. subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2..cycle; infill z1l{up}..z4l..z3l..z2l..cycle; p100:=z6r{right}..z5r..z4r..z3r..{right}z2r; p101:=z1l{down}..z2l..z3l..z4l..cycle; p102:=p100; p103:=p2; oblu:=1.25bbw; z100=bsktouch(subpath(2,infinity) of p100,down,p101,up); z101=bsktouch(p100,up,p101,down); z102=bsktouch(p102,up,p103,down); z103=bsktouch(p102,down,p103,up); tim100=xpart(p100 intersectiontimes (z100--(x100,y4r+5))); tim101=xpart(p101 intersectiontimes (z100--(x100,y1))); tim102=xpart(p100 intersectiontimes (z101--(x101,y2r-5))); tim103=xpart(p101 intersectiontimes (z101--(x101,y1))); tim104=xpart(p102 intersectiontimes (z102--(x102,y6r-5))); tim105=xpart(p103 intersectiontimes (z102--(x102,y1))); tim106=xpart(p102 intersectiontimes (z103--(x103,y4r+5))); tim107=xpart(p103 intersectiontimes (z103--(x103,y1))); infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102 ..subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103..cycle; penlabels(1,2,3,4,5,6,7); labels(100,101,102,103); endchar; iff known chars.numeral_nine_SS: bskchar "The sans-serif numeral 9"; beginchar(chars.numeral_nine_SS,figw(10u),medfig,medfigd); uni "0x1D7EA"; italcorr if medieval: .4x_height# else: (fig_height#-.5x_height#)fi*slant; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; oblu:=2oblu; pos1(hair,0); pos2(hair,-90); pos3(curve,180); pos4(hair,90); pos5(curve,0); pos6(hair,-90); pos7(curve,160); lft x3r=u; y1=y3; x2+.5hair=x4=.5w-.5hair; top y4r=h+o; .5[y4l,y2l]=y3; y2=if medieval:-hair else: h-x_height fi; rt x5r=w-u; y5r=y1r-stem; bot y6r=-d-o; x6=.5w-.75stem; lft x7r=u; y7=y6r+like_stem; p0=z4l{right}..z5l..{left}z6l; x1l=xpart (((.5w,y1)--(w,y1))intersectionpoint p0); p1=z2r{right}..z1r{up}..z4r..z3r; p2=z4l{right}..z5l..{left}z6l; z0=bsktouch(p1,right,p2,left); tim1=xpart(p1 intersectiontimes (z0--(.5w,y0))); tim2=xpart(p2 intersectiontimes (z0--(w,y0))); filldraw z7l{up}..{down}z7r..z6r{right}..z5r..z4r..z3r..{right}z2r.. subpath(0,rundy(p1,tim1).zpet) of p1.. subpath(rundy(p2,tim2),infinity) of p2..cycle; infill z1l{up}..z4l..z3l..z2l..cycle; penlabels(1,2,3,4,5,6,7); endchar; iff known chars.sign_query: bskchar "Question mark"; beginchar(chars.sign_query, 9.5u#, asc_height#, 0); uni "0x003F"; italcorr .5[asc_height#,x_height#]*slant-.25u#; adjust_fit(punct_fit#,0); pickup tiny.nib; path p[]; bot z0=(2u+.5dot_size,.5dot_size); dot(0); pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0); z2'=z2+.2curve*down+o*right; z2''=z2+.5(curve-currentbreadth)*dir135; x1=.45w; top y1r=h+o; y2''=1/4[h,x_height]; lft x2r=u; rt x3r=w-u; y3=.5[y1r,y4l]; lft x4l=x0+.25stem-.25dot_size; y4=.75x_height; z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]]; p0=z3r{down}..z4; p1=z4r--z5r; filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r.. subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; penlabels(1,2,3,4,5); labels(2',2'',4'); endchar; iff known chars.sign_interrobang: bskchar "Interrobang mark"; beginchar(chars.sign_interrobang, 9.5u#, asc_height#, 0); uni "0x203D"; italcorr .5[asc_height#,x_height#]*slant-.25u#; adjust_fit(punct_fit#,0); pickup tiny.nib; path p[]; numeric tim[]; bot z0=(2u+.5dot_size,.5dot_size); dot(0); pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0); penpos6(dot_size,0); pos7(hair,0); x6=x7=x0; z2'=z2+.2curve*down+o*right; z2''=z2+.5(curve-currentbreadth)*dir135; x1=.45w; top y1r=h+o; y2''=1/4[h,x_height]; lft x2r=u; rt x3r=w-u; y3=.5[y1r,y4l]; lft x4l=x0+.25stem-.25dot_size; y4=.75x_height; z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]]; y6=h-.5stem; bot y7=dot_size+stem; y7r:=y7r+.5hair; p0=z3r{down}..z4; p1=z4r--z5r; p2=z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r; p3=z2r{up}..z2''..{right}z1r..subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1; p4=z7l---z6l..z6r{z7r-z6r}..z7r{z7r-.5[z6,z6r]}..{z6l-z7l}z7l; (tim0-3,tim1)=subpath(3,infinity) of p2 intersectiontimes subpath(0,2) of p4; (tim2,tim3)=subpath(0,2) of p3 intersectiontimes subpath(0,1.5) of p4; (tim4,tim5-1)=subpath(0,3) of p3 intersectiontimes subpath(1,infinity) of p4; (tim6-3,tim7-2)=subpath(3,6) of p3 intersectiontimes subpath(2,infinity) of p4; (tim8,tim9-2)=subpath(0,3) of p2 intersectiontimes subpath(2,infinity) of p4; (tim10-3,tim11-1)=subpath(3,5) of p2 intersectiontimes subpath(1,infinity) of p4; filldraw subpath(0,rundy(p4,(tim1,2oblu)).zpet) of p4 ..subpath(rundy(p2,(tim0,2oblu)),infinity) of p2 ..subpath(0,rundy(p3,tim2).zpet) of p3 ..subpath(rundy(p4,tim3),rundy(p4,tim5).zpet) of p4 ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3 ..subpath(rundy(p4,tim7),infinity) of p4..cycle; infill subpath(rundy(p2,tim8),rundy(p2,tim10).zpet) of p2 ..subpath(rundy(p4,tim11),rundy(p4,tim9).zpet) of p4..cycle; penlabels(1,2,3,4,5,6,7); labels(2',2'',4'); endchar; iff known chars.sign_query_double: bskchar "Double question mark"; beginchar(chars.sign_query_double, 16u#, asc_height#, 0); uni "0x2047"; italcorr .5[asc_height#,x_height#]*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; path p[]; bot z0=(2u+.5dot_size,.5dot_size); dot(0); pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0); z2'=z2+.2curve*down+o*right; z2''=z2+.5(curve-currentbreadth)*dir135; x1=.45(w-6.5u); top y1r=h+o; y2''=1/4[h,x_height]; lft x2r=u; rt x3r=w-8.5u; y3=.5[y1r,y4l]; lft x4l=x0+.25stem-.25dot_size; y4=.75x_height; z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]]; p0=z3r{down}..z4; p1=z4r--z5r; z6=z0 shifted (w-u-x3r,0); dot(6); filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r.. subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; filldraw (z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r.. subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle) shifted (w-u-x3r,0); penlabels(1,2,3,4,5); labels(2',2'',4'); endchar; iff known chars.sign_query_exclam: bskchar "Question exclamation mark"; beginchar(chars.sign_query_exclam, 13.5u#, asc_height#, 0); uni "0x2048"; italcorr .5[asc_height#,x_height#]*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; path p[]; bot z0=(2u+.5dot_size,.5dot_size); dot(0); pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0); z2'=z2+.2curve*down+o*right; z2''=z2+.5(curve-currentbreadth)*dir135; x1=.45(w-4u); top y1r=h+o; y2''=1/4[h,x_height]; lft x2r=u; rt x3r=w-5u; y3=.5[y1r,y4l]; lft x4l=x0+.25stem-.25dot_size; y4=.75x_height; z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]]; p0=z3r{down}..z4; p1=z4r--z5r; filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r.. subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; bot y6=.5dot_size; x6=w-3u; dot(6); penpos7(dot_size,0); pos8(hair,0); x7=x8=x6; y7=h-.5stem; bot y8=dot_size+stem; y8r:=y8r+.5hair; filldraw z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle; penlabels(1,2,3,4,5,7,8,); labels(2',2'',4'); endchar; iff known chars.sign_exclam_query: bskchar "Exclamation query mark"; beginchar(chars.sign_exclam_query, 13.5u#, asc_height#, 0); uni "0x2049"; italcorr .5[asc_height#,x_height#]*slant-.25u#; adjust_fit(0,0); pickup tiny.nib; path p[]; bot z0=(6u+.5dot_size,.5dot_size); dot(0); pos1(hair,90); pos2(curve,180); pos3(curve,0); pos4(like_hair,-135); pos5(hair,0); z2'=z2+.2curve*down+o*right; z2''=z2+.5(curve-currentbreadth)*dir135; x1=4u+.45(w-4u); top y1r=h+o; y2''=1/4[h,x_height]; lft x2r=5u; rt x3r=w-u; y3=.5[y1r,y4l]; lft x4l=x0+.25stem-.25dot_size; y4=.75x_height; z4'=(x4l-.5stem, y4l); y5=y0+.5dot_size+stem; z5=whatever[z0,.5[z4',z4l]]; p0=z3r{down}..z4; p1=z4r--z5r; filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{right}z1r.. subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; bot y6=.5dot_size; x6=3u; dot(6); penpos7(dot_size,0); pos8(hair,0); x7=x8=x6; y7=h-.5stem; bot y8=dot_size+stem; y8r:=y8r+.5hair; filldraw z7l---z8l..{.5[z7,z7r]-z8r}z8r..{z7r-z8r}z7r..cycle; penlabels(1,2,3,4,5,7,8,); labels(2',2'',4'); endchar; iff known chars.sign_turned_query: bskchar "Turned question mark"; beginchar(chars.sign_turned_query, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "non"; adjust_fit(0,0); pickup tiny.nib; path p[]; top z0=(2u+.5dot_size,h-.5dot_size); dot(0); pos1(hair,-90); pos2(curve,180); pos3(curve,0); pos4(like_hair,135); pos5(hair,0); z2'=z2+.2curve*up+o*right; z2''=z2+.5(curve-currentbreadth)*dir-135; x1=.45w; bot y1r=-d-o; y2''=1/4[-d,-d+(asc_height-x_height)]; lft x2r=u; rt x3r=w-u; y3=.5[y1r,y4l]; lft x4l=x0+.25stem-.25dot_size; y4=-d+(asc_height-.75x_height); z4'=(x4l-.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]]; p0=z3r{up}..z4; p1=z4r--z5r; filldraw z5l---z4'..z4l..z3l{down}..z1l{left}..{dir70}z2l..z2'..{down}z2r..z2''..{right}z1r.. subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; penlabels(1,2,3,4,5); labels(2',2'',4'); endchar; iff known chars.sign_spanish_query: bskchar "Reversed question mark"; beginchar(chars.sign_spanish_query, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "0x00BF"; adjust_fit(0,0); pickup tiny.nib; path p[]; top z0=(w-2u-.5dot_size,h-.5dot_size); dot(0); pos1(hair,-90); pos2(curve,0); pos3(curve,180); pos4(like_hair,45); pos5(hair,180); z2'=z2+.2curve*up+o*left; z2''=z2+.5(curve-currentbreadth)*dir-45; x1=.55w; bot y1r=-d-o; y2''=1/4[-d,-d+(asc_height-x_height)]; rt x2r=w-u; lft x3r=u; y3=.5[y1r,y4l]; rt x4l=x0-.25stem+.25dot_size; y4=-d+(asc_height-.75x_height); z4'=(x4l+.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]]; p0=z3r{up}..z4; p1=z4r--z5r; filldraw z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r..z2''..{left}z1r.. subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1..cycle; penlabels(1,2,3,4,5); labels(2',2'',4'); endchar; iff known chars.sign_gnaborretni: bskchar "Reversed interrobang mark"; beginchar(chars.sign_gnaborretni, 9.5u#, asc_height#-desc_depth#, desc_depth#); uni "non"; adjust_fit(0,0); pickup tiny.nib; path p[]; numeric tim[]; top z0=(w-2u-.5dot_size,h-.5dot_size); dot(0); pos1(hair,-90); pos2(curve,0); pos3(curve,180); pos4(like_hair,45); pos5(hair,180); penpos6(dot_size,180); pos7(hair,180); x6=x7=x0; z2'=z2+.2curve*up+o*left; z2''=z2+.5(curve-currentbreadth)*dir-45; x1=.55w; bot y1r=-d-o; y2''=1/4[-d,-d+(asc_height-x_height)]; rt x2r=w-u; lft x3r=u; y3=.5[y1r,y4l]; rt x4l=x0-.25stem+.25dot_size; y4=-d+(asc_height-.75x_height); z4'=(x4l+.5stem, y4l); y5=y0-.5dot_size-stem; z5=whatever[z0,.5[z4',z4l]]; y6=-d+.5stem; top y7=h-dot_size-stem; y7r:=y7r-.5hair; p0=z3r{up}..z4; p1=z4r--z5r; p2=z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r; p3=z2r{down}..z2''..{left}z1r..subpath(0,rundy(p0,1).zpet) of p0..subpath(rundy(p1,0),1) of p1; p4=z7l---z6l..z6r{z7r-z6r}..z7r{z7r-.5[z6,z6r]}..{z6l-z7l}z7l; (tim0-3,tim1)=subpath(3,infinity) of p2 intersectiontimes subpath(0,2) of p4; (tim2,tim3)=subpath(0,2) of p3 intersectiontimes subpath(0,1.5) of p4; (tim4,tim5-1)=subpath(0,3) of p3 intersectiontimes subpath(1,infinity) of p4; (tim6-3,tim7-2)=subpath(3,6) of p3 intersectiontimes subpath(2,infinity) of p4; (tim8,tim9-2)=subpath(0,3) of p2 intersectiontimes subpath(2,infinity) of p4; (tim10-3,tim11-1)=subpath(3,5) of p2 intersectiontimes subpath(1,infinity) of p4; filldraw subpath(0,rundy(p4,(tim1,2oblu)).zpet) of p4 ..subpath(rundy(p2,(tim0,2oblu)),infinity) of p2 ..subpath(0,rundy(p3,tim2).zpet) of p3 ..subpath(rundy(p4,tim3),rundy(p4,tim5).zpet) of p4 ..subpath(rundy(p3,tim4),rundy(p3,tim6).zpet) of p3 ..subpath(rundy(p4,tim7),infinity) of p4..cycle; infill subpath(rundy(p2,tim8),rundy(p2,tim10).zpet) of p2 ..subpath(rundy(p4,tim11),rundy(p4,tim9).zpet) of p4..cycle; penlabels(1,2,3,4,5,6,7); labels(2',2'',4'); endchar; iff known chars.sign_ampersand: bskchar "Ampersand"; beginchar(chars.sign_ampersand, 14u#, asc_height#, 0); uni "0x0026"; italcorr x_height#*slant; adjust_fit(0,0); pickup tiny.nib; numeric alpha, tim[]; path p[]; numeric radius; radius:=2hair; oblu:=2oblu; pos1(hair,180); pos4(hair,-90); pos5(hair,180); rt x1r=w-u-hair; y1=y2; top y4l=h+o; x4-x3'=if monospace:expansion_factor*fi (y4-y3'); lft x3l=if monospace: 2u else:3u fi +stem; rt x2r=x1r-if monospace:.85expansion_factor*fi(y2r+u); y3l=x_height; y2r=.25x_height; alpha=diag_ratio(2,stem,y3l-y2r,x3l-x2r); pos2(alpha*stem,0); pos3(alpha*stem,0); pos3'(stem,0); .5[x3'r,rt x5r-if not monospace:.5\\fi hair]=x4; y5=y3'=.5[x_height,h]; x3'r-x3r=(y3'-y3)*cosd(angle(z3-z2)); bot y2'=-o; x2'=.5[x2r,x1l]; pos6(curve,180); pos7(.5[hair,stem],270); pos8(hair,-45); pos9(hair,270); pos10(stem,180); lft x6r=u; y6r-y7r=x7-x6; bot y7r=-o; x7=x3; x8=x2; y8=bar_height; top y9l=x_height+o; x9=.5[x8,w-u]+.5hair; z10'=z10+.2stem*down+o*left; z10''=z10+.5(stem-currentbreadth)*dir 45; rt x10l=w-u; y10''=y9r-hair; p0=z1l{z2'+u*right-z1l}..{left}z2'..z2l---z3l..z3'l..z4l..{down}z5l..{down}z6l; p1=z6l{down}..z7l..z8l..{right}z9l..z10''..{down}z10l..z10'.. z10r..z9r{left}..z8r..z7r..{up}z6r; p2=z6r{up}..z5r{up}..z4r..z3'r..z3r---z2r..{up}z1r; (tim0,tim1-9)=p0 intersectiontimes (subpath (9,infinity) of p1); (tim2,tim3)=p2 intersectiontimes p0; (tim4-3,tim5-5)=(subpath(3,infinity) of p2) intersectiontimes subpath(5,infinity) of p0; (tim6-3,tim7)=(subpath(3,infinity) of p2) intersectiontimes p1; (tim8-8,tim9)=(subpath(8,infinity) of p1) intersectiontimes p2; (tim10,tim11-3)=p2 intersectiontimes subpath (3,infinity) of p2; (tim12,tim13)=p1 intersectiontimes p0; (tim14,tim15-5)=p0 intersectiontimes subpath(5,infinity) of p0; filldraw subpath(0,rundy(p0,tim0).zpet) of p0..subpath(rundy(p1,tim1),infinity) of p1..subpath (0,rundy(p2,tim2).zpet) of p2..subpath(rundy(p0,tim3),rundy(p0,tim5).zpet) of p0..subpath(rundy(p2,tim4),rundy(p2,(tim6,hair)).zpet) of p2..subpath(rundy(p1,(2,f_obl)),8) of p1..subpath (8,rundy(p1,tim8).zpet) of p1..subpath(rundy(p2,tim9),infinity) of p2..cycle; infill subpath(rundy(p2,tim10),rundy(p2,tim11).zpet) of p2..cycle; infill subpath(0,rundy(p1,tim12).zpet) of p1 ..subpath(rundy(p0,tim13),rundy(p0,tim14).zpet) of p0 ..subpath(rundy(p0,tim15),infinity) of p0..cycle; penlabels(1,2,3,3',4,5,6,7,8,9,10); labels(2',10',10''); endchar; iff known chars.sign_at: bskchar "At sign"; beginchar(chars.sign_at, 16u#, asc_height#-.3desc_depth#, .6desc_depth#); uni "0x0040"; adjust_fit(0,0); pickup tiny.nib; numeric aend,H,W,shift; aend:=stem; H:=x_height; W=9u; oblu:=2oblu; path p[]; numeric tim[]; shift=.5(w-W) if not monospace: + hair fi; pos0(hair,180); pos0'(.9[stem,hair],90); pos1(stem,0); pos2(stem,0); pos3(hair,90); pos4(aend,180); z4'=z4+.2aend*down+o*right; z4''=z4+.5(aend-currentbreadth)*dir135; rt x1r=W-u- if monospace: .25\\fi stem +shift; x2=x1; y1=stem+hair; y2=H-like_curve; x0l=W if not monospace: -.75u fi +shift; y0=2/3(x0r-x1r); y0'l=0; x0'=.5[x0r,x1r]; x3=.5[x1r,lft u+shift]; top y3r=H+o; y4''=.5[y2,y3l]; lft x4r=u if not monospace:+o fi +shift; z5l=z2l; z6l=z5l+like_hair*down; z7=(u+shift,y1); pos6(hair,angle(z7-z6l)+90); pos8(curve,30); lft x8l=if not monospace: u+ fi shift; y8r=y7-hair; pos9(hair,120); x9r=x3; y9l=o; pos10(hair,angle(z1-z9l)+90); z10l=z1; pos11(hair,0); pos12(hair,90); pos13(hair,180); pos14(hair,270); pos15(hair,0); lft x13r=u; y13=bar_height; y15=if monospace: 0 else:.2bar_height fi; rt x15r=w-u; top y12r=h+o; bot y14r=-d+o; x12=x14=.5w; z11r=(z12r{right}..{dir(angle(z0'l-z0r)+10)}z0l) intersectionpoint ((.5w,y13)--(w,y13)); p0=z0l{dir(angle(z0'l-z0r)+10)}..z0'l{left}..z1l---z2l..{left}z3l.. {down}z4l..z4'..{up}z4r..z4''..{right}z3r...z2r---z1r.. {right}z0'r..{dir(angle(z0r-z0'l)+10)}z0r..{up}z11l..{left}z12l..z13l.. {right}z14l..{dir(angle(z0r-z0'l)+10)}z15l..z15r{dir(angle(z0'l-z0r)+10)} ..z14r{left}..z13r..{right}z12r..{down}z11r; p1=z10l{z9l-z1}..z9l..z8l..{z6l-z7-hair*up}z6l; p2=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r; (tim1,tim2)=p0 intersectiontimes p1; (tim3-2,tim4)=subpath(2,infinity) of p1 intersectiontimes p0; (tim5,tim6)=p2 intersectiontimes p0; (tim7-2,tim8)=subpath(2,infinity) of p2 intersectiontimes p0; filldraw subpath(0,rundy(p0,tim1).zpet) of p0.. subpath(rundy(p1,tim2),rundy(p1,tim3).zpet) of p1.. subpath(rundy(p0,tim4),length p0) of p0..cycle; if bold_face: oblu:=.5f_obl; fi infill subpath(rundy(p2,tim5),rundy(p2,tim7).zpet) of p2.. subpath(rundy(p0,tim8).zpet,rundy(p0,tim6)) of p0..cycle; penlabels(0,0',1,2,3,4,5,6,8,9,10,11,12,13,14,15); labels(4',4'',7); endchar;