diff options
Diffstat (limited to 'Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf')
-rw-r--r-- | Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf | 4282 |
1 files changed, 4202 insertions, 80 deletions
diff --git a/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf index bf4606bcb02..2fa53b208f6 100644 --- a/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf +++ b/Master/texmf-dist/fonts/source/public/boisik/bskletters-r.mf @@ -1,4 +1,7 @@ %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; @@ -16,7 +19,7 @@ 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-- +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}.. @@ -152,6 +155,18 @@ 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"; @@ -184,12 +199,36 @@ 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_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); +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; @@ -214,6 +253,136 @@ filldraw subpath(0,rundy(p0,tim1).zpet) of p0 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)( @@ -246,11 +415,12 @@ 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 "0x10C"; +beginchar(chars.latin_Ccaron,13.3u#,Acc_height#,0); uni "0x010C"; italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; @@ -292,6 +462,27 @@ 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"; @@ -350,6 +541,62 @@ 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"; @@ -436,6 +683,29 @@ infill subpath(rundy(p3,tim20),rundy(p3,tim8).zpet) of p3 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; @@ -458,6 +728,7 @@ 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: @@ -471,6 +742,49 @@ 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; @@ -533,6 +847,7 @@ 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: @@ -647,6 +962,17 @@ 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"; @@ -706,9 +1032,30 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z7l+hai 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; +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; @@ -732,7 +1079,7 @@ if monospace: penlabels(4); labels(4a,4b,4c); else: p=reverse arm_top_r_points(2r,4); fi; -x2l'=x2l; z2l'=whatever[z2l+alpha*cap_hair*right,z7]; +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'); @@ -752,7 +1099,7 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. 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)--cycle; + obl(2l',7l,1l).more--cycle; penlabels(1,2,2l',5,5',6,6',7,8,8',9); ); @@ -830,12 +1177,7 @@ infill z1l.b{down}..{left}z1l.c+top o*down..z7r..{right}z2l.c+top o*up..z2l.b--- penlabels(1,2,2l',5,5',6,6',7); endchar; -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; +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); @@ -851,31 +1193,78 @@ filldraw z1l.b{down}..{left}z1l.c..z1l.a{right}..z1+ser_boule*up.. {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, po; numeric tim[], sersh; +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; -p:=z1r{down}..z2r..z3r..z4r..{down}cycle; -po:=z1l{down}..z2l..z3l..z4l..{down}cycle; -tim1= ypart(((.5w,y3+.2h)--(2w,y3+.2h)) intersectiontimes reverse p); +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 po; 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 po); +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 po; 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 po); -tim5=ypart((z5''f--(x5''f,0)) intersectiontimes p); +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 p}z5'..z5'a--z5'b---z5'e..subpath (tim3,5) of po.. - reverse (subpath(0,tim5) of p---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 po) & cycle; +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); ); @@ -886,6 +1275,7 @@ 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: @@ -954,6 +1344,58 @@ 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"; @@ -1039,6 +1481,7 @@ 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: @@ -1063,6 +1506,19 @@ 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"; @@ -1097,6 +1553,30 @@ infill obl(13l,12l,8r)---z8r{dir-100}..z6r---z5r..{dir100}z7r---obl(12l,7r,13l)- 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; @@ -1115,6 +1595,7 @@ 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: @@ -1247,6 +1728,17 @@ 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"; @@ -1270,6 +1762,20 @@ filldraw z1l.b{down}..{left}z1l.c..z3l+hair*left 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; @@ -1287,6 +1793,7 @@ 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: @@ -1309,6 +1816,40 @@ 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"; @@ -1362,6 +1903,7 @@ 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: @@ -1386,6 +1928,52 @@ 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; @@ -1404,6 +1992,7 @@ italcorr .5bar_height#*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; +math_fit(0,ic#); endchar; iff known chars.latin_Ldot: @@ -1461,6 +2050,32 @@ 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"; @@ -1525,6 +2140,53 @@ 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)( @@ -1557,6 +2219,7 @@ 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: @@ -1614,6 +2277,87 @@ 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"; @@ -1658,6 +2402,7 @@ 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: @@ -1793,6 +2538,49 @@ 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); @@ -1910,6 +2698,32 @@ italcorr .2[x_height#,cap_height#]*slant; adjust_fit(cap_serif_fit#,0); pickup tiny.nib; usechar; +math_fit(0,ic#-4u#); +endchar; + +iff known chars.latin_P_BB: +bskchar "The blackboard-bold letter P"; +beginchar(chars.latin_P_BB,12.5u#,cap_height#,0); uni "0x2119"; +italcorr .2[x_height#,cap_height#]*slant; +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,y5))); +tim101=xpart(p101 intersectiontimes (z102--(x102,y4l+5))); +tim102=xpart(p100 intersectiontimes (z103--(x103,y5))); +tim103=xpart(p101 intersectiontimes (z103--(x103,0))); +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); +math_fit(0,ic#-2.5u#); endchar; iff known chars.sign_published: @@ -1962,6 +2776,30 @@ infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle; penlabels(1,2,3,4,5,6,7,8,8',9,9'); endchar; +iff known chars.latin_P_SS: +bskchar "The sans-serif letter P"; +beginchar(chars.latin_P_SS,12.5u#,cap_height#,0); uni "0x1D5AF"; +italcorr .2[x_height#,cap_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(1.5cap_stem,270); pos4(cap_hair,270); pos5(.95cap_curve,180); +pos6(cap_hair,90); pos7(1.5cap_stem,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..z1..z1r.b---z7l{dir70}.. + (x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)--- + z6l..z5l..z4l---z2..z2l.b---cycle; +infill z7r{down}..{right}z6r..z5r..z4r{left}..{down} if y3r>y7r: 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"; @@ -1988,12 +2826,7 @@ infill z7r{down}..{right}z6r..z5r..z4r{left}..{down}z3r---cycle; penlabels(1,2,3,4,5,6,7); endchar; -iff known chars.latin_Q: -bskchar "The letter Q"; -beginchar(chars.latin_Q,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x0051"; -italcorr .5cap_height#*slant+.5u#; -adjust_fit(0,0); -pickup tiny.nib; +charscription(14.3u,cap_height,3.5u if not monospace:+.5cap_curve fi)( path p[]; numeric tim[]; oblu:=1/3(x2-x1); 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]; @@ -2007,7 +2840,7 @@ x6=x1r; z6=z5+whatever*(direction tim1 of p0) rotated 180; pos8(cap_curve,angle(z2-z4)); z7=z6; x8=.5[x5r,x3r]; y8r=-d; x9=w if not monospace: +cap_stem fi; y9=.5y6; p1:=z5l{z6-z5}..{z6-z3}z6l; -p2:=z9{dir-125}..z8l..{z6-z3}z7l..z7r{if dpi<=300:dir40 else:(x4,y3)-z6 fi}..z8r..{dir70}z9; +p2:=z9{dir-125}..z8l..{z6-z3}z7l..z7r{if testdpi:dir40 else:(x4,y3)-z6 fi}..z8r..{dir70}z9; p3:=z6r{z3-z6}..{z5-z6}z5r; (tim2,tim3)=p1 intersectiontimes p2; (tim4,tim5)=p3 intersectiontimes p2; @@ -2021,6 +2854,89 @@ filldraw subpath(0,rundy(p0,tim6).zpet) of p0.. subpath(rundy(p0,tim8),infinity) of p0&cycle; infill z1r{up}..z4r..z3r..z2r..{up}cycle; penlabels(1,2,3,4,5,6,7,8,9); +); + +iff known chars.latin_Q: +bskchar "The letter Q"; +beginchar(chars.latin_Q,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x0051"; +italcorr .5cap_height#*slant+.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +math_fit(-.5u#,ic#); +endchar; + +iff known chars.latin_Q_BB: +bskchar "The blackboard-bold letter Q"; +beginchar(chars.latin_Q_BB,14.3u#,cap_height#,3.5u# if not monospace:+.5cap_curve# fi); uni "0x211A"; +italcorr .5cap_height#*slant+.5u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +p100:=z4r..z1r{down}..z2r..z3r..cycle; +p101:=reverse z4l..z1l{down}..z2l..z3l..cycle; +p102:=subpath(0,1.3) of p2; +tim99-3=xpart(subpath(3,infinity) of p2 intersectiontimes + (point infinity of p102--(xpart(point infinity of p102),-d))); +p103:=subpath(tim99,infinity) of p2; +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); +z104=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(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))); +tim108=xpart(p102 intersectiontimes (z104--(x104,0))); +tim109=xpart(p103 intersectiontimes (z104--(x104,-d))); +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; +infill subpath(rundy(p102,tim108),infinity) of p102 + ..subpath(0,rundy(p103,tim109).zpet) of p103..cycle; +labels(100,101,102,103); +endchar; + +iff known chars.latin_Q_SS: +bskchar "The sans-serif letter Q"; +beginchar(chars.latin_Q_SS,14.3u#,cap_height#,3.5u#); uni "0x1D5B0"; +italcorr .5cap_height#*slant+.5u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=1/3(x2-x1); +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; +p0:=z1l{down}..z2l..z3l..z4l..{down}z1l; +tim1= ypart(((.5w, .5cap_hair)--(w,.5cap_hair)) intersectiontimes p0); +z5r=point tim1 of p0; +pos5(cap_hair,angle(direction tim1 of p0)-90); pos6(cap_hair,angle(direction tim1 of p0)-90); +pos7(cap_hair+o,angle(direction tim1 of p0)-90); +x6=.25[x1,x2]; z6=z5+whatever*(direction tim1 of p0) rotated 180; +pos8(cap_curve,angle(z2-z4)); +z7=z6; x8=x3; y8r=-d; +p1:=z5l{z6-z5}..{z6-z3}z6l; +p2:=z8l{left}..{z6-z3}z7l..z7r{z3-z6}..{right}z8r; +p3:=z6r{z3-z6}..{z5-z6}z5r; +(tim2,tim3)=p1 intersectiontimes p2; +(tim4,tim5)=p3 intersectiontimes p2; +(tim6,tim7)=p0 intersectiontimes p1; +(tim8,tim9)=p0 intersectiontimes p3; +filldraw subpath(0,rundy(p0,tim6).zpet) of p0 + ..subpath(rundy(p1,tim7),rundy(p1,(tim2,hair))) of p1 + ..subpath(rundy(p2,(tim3,hair)),infinity) of p2 + ..subpath(0,rundy(p2,tim5).zpet) of p2 + ..subpath(rundy(p3,tim4),rundy(p3,tim9).zpet) of p3 + ..subpath(rundy(p0,tim8),infinity) of p0&cycle; +infill z1r{up}..z4r..z3r..z2r..{up}cycle; +penlabels(1,2,3,4,5,6,7,8); endchar; iff known chars.latin_Q_alt: @@ -2100,6 +3016,7 @@ italcorr .2[x_height#,cap_height#]*slant-1.75u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; +math_fit(0,ic#); endchar; iff known chars.latin_Racute: @@ -2158,6 +3075,35 @@ bot y100=top y4l+2o; tieacc(100,101,102).capital; endchar; +iff known chars.latin_R_BB: +bskchar "The blackboard-bold letter R"; +beginchar(chars.latin_R_BB,14u#,cap_height#,0); uni "0x211D"; +italcorr .2[x_height#,cap_height#]*slant-1.75u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +bot z100=(x1l,y1l.c); top z101=(x2l,y2l.c); +oblu:=f_obl; +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); +y103=y104=y5; z103=whatever[z9r,z8r.bb]; z104=whatever[z9l,z8l]; +bot z105=(lft x8r,y8r.c); +p102=z8r.bb--z103; +p103=z104---obl(8l,104,8)---z8r...obl(105,8r.c,9r)---z8r.bb; +tim100=xpart(p100 intersectiontimes (z102--(x102,y5))); +tim101=xpart(p101 intersectiontimes (z102--(x102,y4l+5))); +(tim102,tim103)=p100 intersectiontimes p103; +(tim104,tim105)=p101 intersectiontimes p102; +oblu:=1.25bbw; +infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 + ..subpath(rundy(p103,tim103),infinity) of p103 + ..subpath(0,rundy(p102,tim105).zpet) of p102 + ..subpath(rundy(p101,tim104),rundy(p101,tim101).zpet) of p101..cycle; +labels(102,103,104,8r.bb); +endchar; + iff known chars.sign_registered: bskchar "Registered sign (circled R)"; beginchar(chars.sign_registered,15u#,asc_height#,0); uni "0x00AE"; @@ -2194,6 +3140,45 @@ multiply(2.5*zv)(cap_curve,cap_hair,ser_height,cap_stem); usechar shifted -(.5[x8,x2],.5[y4l,y1]) scaled zv shifted (.5WW+ys*slant,ys); endchar; +iff known chars.latin_R_SS: +bskchar "The sans-serif letter R"; +beginchar(chars.latin_R_SS,13.5u#,cap_height#,0); uni "0x1D5B1"; +italcorr .5[x_height#,cap_height#]*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +numeric alpha, tim[]; 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(1.5cap_stem,270); pos4(cap_hair,270); pos5(.95cap_curve,180); +pos6(cap_hair,90); pos7(1.5cap_stem,90); +x7=x1r; y6r=com_height-hair; y7l=y6l; rt x5l=w-2u; +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-1.5u; bot y8r=0; +x9r=x5r if .65cap_curve<u: -u fi; y9r=y6l-cap_hair; +alpha=diag_ratio(2,cap_stem,y9r-y8r,x8r-x9r); +pos8(alpha*cap_stem,0); pos9(alpha*cap_stem,0); +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); cap_serifs_br(8r); +z8'=z8l+(serif_o,0) rotated(angle(z9l-z8l)); +y8''=.5[y8r.b,y8]; z8''=whatever[z8r,z9r]; +p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l.. + z5l..z4l---z2..{down}z2l.b; +p1=z8''---z9r..{left}z6r--z6l{(x9l-x6l,0)}..z9l---z8'..z8; +p2=subpath ((length p1)-4, length p1) of p1; +(tim1,tim2)=p0 intersectiontimes p2; +(tim3,tim4)=p0 intersectiontimes p1; +filldraw z1l.b..z1..z1r.b--- + subpath(0,rundy(p0,tim1).zpet) of p0.. + subpath(rundy(p2,tim2),infinity) of p2.. + subpath(0,rundy(p1,tim4).zpet) of p1.. + subpath(rundy(p0,tim3),infinity) of p0---cycle; +infill z7r..{right}z6r..z5r..z4r{left}..if y3r>y7r: 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"; @@ -2243,6 +3228,57 @@ infill z7r..{right}z6r..z5r..z4r{left}..z3r---cycle; penlabels(1,2,3,4,5,6,7,8,9,10,10',11,11'); labels(8'); endchar; +iff known chars.sign_AR: +bskchar "Aspect ratio sign"; +beginchar(chars.sign_AR,18u#,cap_height#,0); uni "non"; +italcorr .2[x_height#,cap_height#]*slant-1.75u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +numeric alpha, beta, tim[]; oblu:=2oblu; oblu.more:=3f_obl; +path p[]; +pos1(cap_stem,0); pos2(cap_stem,0); +bot y1=0; top y2=h-drop_stem; +lft x1l=lft x2l=8.5u; +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_curve<u: -u fi; y9r=y6l-cap_hair; +alpha=diag_ratio(2,cap_stem,y9r-y8r,x8r-x9r); +pos8(alpha*cap_stem,0); pos9(alpha*cap_stem,0); +cap_serifs_tl(2l); cap_serifs_bl(1l); cap_serifs_br_p(1r,1.1); cap_serifs_br(8r); +z8'=z8l+(serif_o,0) rotated(angle(z9l-z8l)); +lft x10l=2u; y10l=y1; +beta=diag_ratio(2,cap_hair,y2l-y7l,x2l-x7l); +pos10(beta*cap_hair,0); pos6'(ser_height,90); +pos12(cap_bar,90); y11r-y11l=cap_bar-tiny; .5[y11r,y11l]=y12=y6=y6'; x6'=x1l; +x2l'=x2l; z2l'=whatever[z2l+alpha*(cap_hair-.5currentbreadth)*right,z10]; +x1l-x12=x6-x7; z11r=whatever[z10,z2l']; z11l=whatever[z10,z2l']; +y11'r=y11r; y11'l=y11l; x11'l=x11'r=.5[x11l,x11r]+(x6-x7); +cap_serifs_bl(10l); cap_serifs_br(10r); +p0=z7l{dir70}..(x7l if x7l+cap_hair<x6l: +cap_hair fi,y6l)---z6l..z5l..z4l + ---obl(2l,2,10l)---diag_serif(10l,2l)..{left}z10l.c..z10l.a{right} + ..z10+ser_boule*up..{right}z10r.a..{left}z10r.c..diag_serif(10r,2r) + ---obl(11l,10r,12l)---z12l{right}..{down}(x1l,y6'l); +p1=z8r.a{right}..z8r.c{left}..diag_serif(8r,9r)---z9r..{left}z6r-- + z6l{(x9l-x6l,0)}..z9l---z8l{right}...z8+ser_boule*up..{right}z8r.a; +p2=subpath ((length p1)-4, length p1) of p1; +(tim1,tim2)=p0 intersectiontimes p2; +(tim3,tim4)=p0 intersectiontimes p1; +filldraw z1l.b..{left}z1l.c..z1l.a{right}..z1+ser_boule*up..{right}z1r.a..z1r.c{left} + ..z1r.b---subpath(0,rundy(p0,tim1).zpet) of p0 + ..subpath(rundy(p2,tim2),infinity) of p2 + ..subpath(0,rundy(p1,tim4).zpet) of p1 + ..subpath(rundy(p0,tim3),infinity) of p0---cycle; +infill z7r..{right}z6r..z5r..z4r{left}..z3r---cycle; +infill (x1l,y6'r)..{left}z12r---obl(11r,12r,2l')--- + obl(2l',10l,1l).more---cycle; +penlabels(1,2,3,4,5,6,6',7,8,9,10,11,12); labels(8'); +endchar; + charscription(10u,cap_height,0)( numeric exc; exc=(w-u)/h; path p[]; numeric tim[]; @@ -2254,6 +3290,10 @@ x2=x3=x4=.5w; top y2r=h+o; bot y4l=-o; y3=.5[y2l,y4r]+.5cap_hair; pos1(cap_hair,0); x1r=w-x5r; y1=y5-.5cap_hair; pos7(cap_hair,0); x7l=w-x6l; y7=y6+.5cap_hair; +if x5r<x7r+currentbreadth: %Correction for HC variant + numeric sh; sh:=x7r+currentbreadth-x5r; + forsuffixes $=5r,5l,5,2l,2r,2: x$:=x$+sh; endfor +fi 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 ((.5w,y2-.5cap_hair)--(w,y2-.5cap_hair))); @@ -2270,6 +3310,25 @@ italcorr cap_height#*slant-u#; adjust_fit(0,0); pickup tiny.nib; usechar; +math_fit(-.5u#,.75ic#); +endchar; + +iff known chars.sign_circled_S: +bskchar "Circled S sign"; +beginchar(chars.sign_circled_S,15u#,asc_height#,0); uni "non"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric zv; zv=.6; +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,cap_stem,ser_height); +usechar shifted -(x4,.5[y4l,y2r]) scaled zv shifted (.5WW+.5HH*slant,.5HH); endchar; iff known chars.latin_Scaron: @@ -2316,6 +3375,27 @@ 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,10u#, cap_height#, 0); uni "0x1D54A"; +italcorr cap_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +p100=subpath(1,5) of p0; +p101=subpath(1,5) of p1; +z100=bsktouch(subpath(0,1) of p100,bbs*down,p101,up); +z101=bsktouch(subpath(0,1) of p101,bbs*up,p100,down); +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))); +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(100,101); +endchar; + iff known chars.latin_SS: bskchar "Two letters S (Small Caps variant of eszet)"; beginchar(chars.latin_SS,10u#, cap_height#, 0); uni "non"; @@ -2327,6 +3407,28 @@ r:=r+w; charwd:=2charwd; addto currentpicture also currentpicture shifted (w,0); endchar; +iff known chars.latin_S_SS: +bskchar "The sans-serif letter S"; +beginchar(chars.latin_S_SS,9u#, cap_height#, 0); uni "0x1D5B2"; +italcorr cap_height#*slant-u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric exc, hpa; exc=(w-u)/h; +pos2(cap_hair,90); pos3(cap_curve,angle((w-u,h))+180); pos4(cap_hair,90); +pos5(cap_stem,180); pos6(cap_stem,180); +y5=.5[y2l,y3]+.5like_cap_hair; x3-hpa=.5(y2l-y3l)*exc; +y6=.5[y4r,y3]-.5like_cap_hair; rt x6l=w-u; +x3=x4=.5w; top y2r=h+o; bot y4l=-o; x2=.5[x1,x5l]; +y3=.5[y2l,y4r]+.5cap_hair; +if hpa-cap_stem+.5currentbreadth<rt u: lft x5r=1.25u; rt x1r=w-u; +else: x5l=hpa; x1r=w-x5r+.5u; fi; +pos1(cap_hair,30); y1=.5[y5,y2l]; +pos7(cap_hair,0); x7l=w-x6l; y7=y6; +filldraw z1r{dir110}..z2r{left}..z5r..z3r..z6r..{left}z4r..{up}z7r..z7l{down}..z4l{right} + ..z6l..z3l..z5l..{right}z2l..{dir-70}z1..cycle; +penlabels(0,1,2,3,4,5,6,7); +endchar; + iff known chars.sign_service: bskchar "Service sign"; beginchar(chars.sign_service,14.5u#,asc_height#,0); uni "0x2120"; @@ -2396,6 +3498,7 @@ italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; +math_fit(-(cap_height#-beak#)*slant-.5u#,ic#-4.5u#); endchar; iff known chars.latin_Tcaron: @@ -2420,6 +3523,18 @@ x100=x1; top y100''r=-2o; 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,15.5u#,cap_height#,0); uni "0x1D54B"; +italcorr cap_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +bot z100=(x1l,y1l.c); +infill ifobl(2l,2r,1l,1r,,)---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle; +math_fit(0,ic#-3u#); +endchar; + iff known chars.sign_trademark: bskchar "Trademark sign"; beginchar(chars.sign_trademark,17.5u#,asc_height#,0); uni "0x2122"; @@ -2435,6 +3550,24 @@ _saved_w:=_saved_w_m; usechar shifted -(_saved_w_m,y2) scaled zv shifted (WW-u*(1-zv),HH); endchar; +iff known chars.latin_T_SS: +bskchar "The sans-serif letter T"; +beginchar(chars.latin_T_SS,14u#,cap_height#,0); uni "0x1D5B3"; +italcorr cap_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,90); pos4(cap_hair,90); +bot y1=0; top y2=h; x1=x2=.5w; +cap_serifs_bl(1l); cap_serifs_br(1r); +top y3r=top y4r=h; rt x3r=w-u; lft x4r=u; +y100=y101=y3l; x100=x1l; x101=x1r; +oblu:=cap_hair; +filldraw z1l.b..z1..z1r.b---obl(101,1r,3l)---z3l+cap_stem*left...z3...z3r+cap_stem*left + ---z4r+cap_stem*right...z4...z4l+cap_stem*right---obl(100,4l,1l)---cycle; +penlabels(1,2,3,4); labels(100,101); +math_fit(0,ic#-3u#); +endchar; + iff known chars.latin_Tcedilla: bskchar "The letter T with cedilla"; beginchar(chars.latin_Tcedilla,15.5u#,cap_height#,.65desc_depth#); uni "0x0162"; @@ -2505,6 +3638,7 @@ italcorr cap_height#*slant+.75u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; +math_fit(-1/3cap_height#*slant-u#,ic#-2u#); endchar; iff known chars.latin_Uacute: @@ -2628,7 +3762,6 @@ x101-x100=6u; bot y100=top y1+o; x.tilde=x2'r+o; tilde(100,101).capital; endchar; - iff known chars.latin_Uumlaut: bskchar "The letter U with umlaut"; beginchar(chars.latin_Uumlaut,14u#,Acc_height#,0); uni "0x00DC"; @@ -2640,6 +3773,45 @@ x100=x1r; x101=x4; umlaut(100,101); endchar; +iff known chars.latin_U_BB: +bskchar "The blackboard-bold letter U"; +beginchar(chars.latin_U_BB,14u#,cap_height#,0); uni "0x1D54C"; +italcorr cap_height#*slant+.75u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +path p[]; numeric tim[]; +top z100=(x1l,y1l.c); +p100=z2l{down}..{right}z2'l...{up}z3l; +p101=z3r{down}..z2'r{left}..{up}z2r; +z101=bsktouch(p100,bbs*dir135,p101,dir-45); +tim100=xpart(p100 intersectiontimes (z101--(x101,0))); +tim101=xpart(p101 intersectiontimes (z101--(x101,y3))); +infill subpath(0,rundy(p100,(tim100,1.5bbw)).zpet) of p100 + ..subpath(rundy(p101,(tim101,1.5bbw)),infinity) of p101 + ---obl(1r,2r,1l)---z1l...obl(100,1l.c,2l)---cycle; +labels(101); +endchar; + +iff known chars.latin_U_SS: +bskchar "The sans-serif letter U"; +beginchar(chars.latin_U_SS,14u#,cap_height#,0); uni "0x1D5B4"; +italcorr cap_height#*slant+.75u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +path p[]; +pos1(cap_stem,0); pos2(cap_stem,0); pos3(cap_hair,180); pos4(cap_hair,180); +top y1=top y4=h; y2=y3=.45(x4-x1); +y2'l=-.5o; x2'l=.5[x2,x3]; +lft x1l=2u; x2=x1; rt x4r=w-2.5u; x3=x4; +p1:=z2l{down}...{up}z3l; p2:=z2r{down}...{up}z3r; +z2'l-z2'r=(((x2'l,h)--(x2'l,-h)) intersectionpoint p1)-(((x2'l,h)--(x2'l,-h)) intersectionpoint p2); +cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(4l); cap_serifs_tl(4r); +y100l=y100r=.5[y4l.b,y4]; x100l=x4l; x100r=x4r; +filldraw z1..z1l.b---z2l...z2'l{right}...z3l---z100l...z4...z100r---z3r...z2'r{left}...z2r---z1r.b..cycle; +penlabels(1,2,2',3,4,100); +endchar; + iff known chars.latin_Uogonek: bskchar "The letter U with ogonek"; beginchar(chars.latin_Uogonek,14u#,cap_height#,.85desc_depth#); uni "0x0172"; @@ -2668,6 +3840,27 @@ filldraw z1l---z1l.a..{right}z1l.c..z1l.b penlabels(1,2,2',3,4,5,6,7,8); endchar; +charscription(14u,cap_height,0)( +lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; +x3l=.5w+o; bot y3l=-apex_o; +left_stem=cap_stem; +right_stem=cap_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(.65cap_hair,90); pos5(.65cap_hair,90); +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]; +cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(2r); cap_serifs_tl(2l); +filldraw z1l--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---cycle; +penlabels(1,1',2,2',3,3',4,5,6,7); +); + iff known chars.latin_V: bskchar "The letter V"; beginchar(chars.latin_V,14u#,cap_height#,0); uni "0x0056"; @@ -2675,7 +3868,33 @@ italcorr cap_height#*slant+.75u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); numeric alpha, right_stem, left_stem; pickup tiny.nib; -lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; +usechar; +math_fit(-cap_height#*slant,ic#-5u#); +endchar; + +iff known chars.latin_V_BB: +bskchar "The blackboard-bold letter V"; +beginchar(chars.latin_V_BB,14u#,cap_height#,0); uni "0x1D54D"; +italcorr cap_height#*slant+.75u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +numeric alpha, right_stem, left_stem; +pickup tiny.nib; +usechar; +oblu.more:=3oblu; +top y100=y1l.c; z100=whatever[z1l.bb,z3l]; +infill z1l.bb---ifobl(3l,3',1l.bb,1r.bb,more,)---z1r.bb + ..obl(1r,3',1l)---z1l...obl(100,1l.c,1l.bb)---cycle; +math_fit(0,ic#-3u#); +endchar; + +iff known chars.latin_V_SS: +bskchar "The sans-serif letter V"; +beginchar(chars.latin_V_SS,13.5u#,cap_height#,0); uni "0x1D5B5"; +italcorr cap_height#*slant+.25u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +numeric alpha, right_stem, left_stem; +pickup tiny.nib; +lft x1l=2u; rt x2r=w-1.5u; top y1l=top y2r=h; x3l=.5w+o; bot y3l=-apex_o; left_stem=cap_stem; right_stem=cap_hair; @@ -2688,11 +3907,12 @@ 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]; cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_tr(2r); cap_serifs_tl(2l); -filldraw z1l--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---cycle; +y100l=y100r=y101l=y101r=.5[y1l.b,y1]; +z100l=whatever[z1l,z3l]; z100r=whatever[z1r,z3']; +z101l=whatever[z3',z2l]; z101r=whatever[z2r,z3l]; +filldraw z1..z100l---z3l---z101r...z2...z101l---z3'r..z3'l---z100r..cycle; penlabels(1,1',2,2',3,3',4,5,6,7); +math_fit(0,ic#-2u#); endchar; charscription(19u,cap_height,0)( @@ -2730,6 +3950,7 @@ italcorr cap_height#*slant+.75u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; +math_fit(-cap_height#*slant,ic#-5u#); endchar; iff known chars.latin_Wcircumflex: @@ -2776,12 +3997,103 @@ usechar; umlaut(100,101); endchar; -iff known chars.latin_X: -bskchar "The letter X"; -beginchar(chars.latin_X,15u#,cap_height#,0); uni "0x0058"; -italcorr cap_height#*slant+.4u#; +iff known chars.latin_W_BB: +bskchar "The blackboard-bold letter W"; +beginchar(chars.latin_W_BB,19u#,cap_height#,0); uni "0x1D54E"; +italcorr cap_height#*slant+.75u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +oblu:=f_obl; +oblu.more:=3f_obl; +top y100=y1l.c; z100=whatever[z1l.bb,z4]; +infill ifobl(4,1'',1l.bb,1r.bb,more,)---z1r.bb + ..obl(1r,1'',1l)---z1l...obl(100,1l.c,1l.bb)---cycle; +infill ifobl(3,0,2'',5,more,)---ifobl(5,2'',0,3,more,)---cycle; +math_fit(0,ic#-3u#); +endchar; + +iff known chars.latin_W_SS: +bskchar "The sans-serif letter W"; +beginchar(chars.latin_W_SS,18u#,cap_height#,0); uni "0x1D5B6"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_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(cap_stem-cap_hair) fi; top y3=h if monospace and (x2r-x1l<4cap_stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.37w; +bot y4=bot y5=-apex_o; +left_stem=cap_stem; +right_stem=cap_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); +cap_serifs_tl(1l); cap_serifs_tr(1r); +cap_serifs_tl(2l); cap_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]; +y100l=y100r=y101l=y101r=.5[y1l.b,y1]; +z100l=whatever[z1l,z4]; z100r=whatever[z1r,z1'']; +z101l=whatever[z2'',z2l]; z101r=whatever[z2r,z5]; +filldraw z1..z100l---z4---obl(0,4,5)---z5---z101r...z2...z101l---obl(2'',2l,3)---z3 + ---obl(1'',3,1r)---z100r..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.sign_won: +bskchar "Won sign"; +beginchar(chars.sign_won,19u#,cap_height#,0); uni "0x20A9"; +italcorr cap_height#*slant+.75u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; +numeric alpha[], right_stem, left_stem; +oblu:=2oblu; +pos8(hair,90); pos9(hair,90); pos10(hair,90); pos11(hair,90); +lft x1l=2u; rt x2r=w-2u; top y1l=top y2r=h; +x3=.5w if monospace: +.5(cap_stem-cap_hair) fi; top y3=h if monospace and (x2r-x1l<4cap_stem): -1/3(x2r-x1l) else: +o fi; .5[x4,x5]=x3; x5-x4=.37w; +bot y4=bot y5=-apex_o; +left_stem=cap_stem; +right_stem=cap_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); +cap_serifs_tl(1l); cap_serifs_tr(1r); +cap_serifs_tl(2l); cap_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]; +y8=y9=x_height; y10=y11=bar_height; +lft x8=lft x10=u; rt x9=rt x11=w-u; +y8'r=y8''r=y8'''r=y9'r=y9''r=y9'''r=y8r; y8'l=y8''l=y8'''l=y9'l=y9''l=y9'''l=y8l; +y10'r=y11'r=y10r; y10'l=y11'l=y10l; +z8'r=whatever[z1l,z4]; z8'l=whatever[z1l,z4]; z10'r=whatever[z1l,z4]; z10'l=whatever[z1l,z4]; +z9'r=whatever[z2r,z5]; z9'l=whatever[z2r,z5]; z11'r=whatever[z2r,z5]; z11'l=whatever[z2r,z5]; +z9''r=whatever[z2'',z2l]; z9''l=whatever[z2'',z2l]; z9'''r=whatever[z2'',z3]; z9'''l=whatever[z2'',z3]; +z8''r=whatever[z1'',z1r]; z8''l=whatever[z1'',z1r]; z8'''r=whatever[z1'',z3]; z8'''l=whatever[z1'',z3]; +filldraw z1l.a..{right}z1l.c..diag_serif(1l,4)---obl(8'r,1l,8r)---z8r + ..z8l---obl(8'l,8l,10'r)---obl(10'r,8'l,10r)---z10r..z10l---obl(10'l,10l,4) + ---z4---obl(0,4,5)---z5---obl(11'l,5,11l)---z11l..z11r---obl(11'r,11r,9'l) + ---obl(9'l,11'l,9l)---z9l..z9r---obl(9'r,9r,2r)---diag_serif(2r,5) + ..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c..diag_serif(2l,2') + ---obl(9''r,2l,9'''r)---obl(9'''r,9''r,3)---z3---obl(8'''r,3,8''r) + ---obl(8''r,8'''r,1r)---diag_serif(1r,1'')..z1r.c{right}..z1r.a--cycle; +infill obl(9''l,9'''l,2'')---obl(2'',9''l,9'''l)---obl(9'''l,2'',9''l)---cycle; +infill obl(8''l,8'''l,1'')---obl(1'',8''l,8'''l)---obl(8'''l,1'',8''l)---cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11); labels(0,1',1'',2',2'',4',5'); +endchar; + +charscription(15u,cap_height,0)( oblu:=1.5oblu; numeric alpha[]; lft x1l=2.5u; top y1l=h; rt x2r=w-2u; bot y2r=0; @@ -2805,6 +4117,59 @@ filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l)--- {right}z3l.c..diag_serif(3l,3')---obl(3',3l,1r)--- diag_serif(1r,3')..{right}z1r.c..z1r.a---cycle; penlabels(1,2,3,4); labels(1',2',3',4',5'); +); + +iff known chars.latin_X: +bskchar "The letter X"; +beginchar(chars.latin_X,15u#,cap_height#,0); uni "0x0058"; +italcorr cap_height#*slant+.4u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +math_fit(0,u#); +endchar; + +iff known chars.latin_X_BB: +bskchar "The blackboard-bold letter X"; +beginchar(chars.latin_X_BB,15u#,cap_height#,0); uni "0x1D54F"; +italcorr cap_height#*slant+.4u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +oblu:=f_obl; +top y100=y1l.c; bot y101=y2r.c; z100=whatever[z1l.bb,z2l]; z101=whatever[z2r.bb,z1r]; +infill obl(100,1l.c,2l)---obl(2l,100,2r)---z2r...obl(101,2r.c,1r)---obl(1r,101,1l)---z1l...cycle; +endchar; + +iff known chars.latin_X_SS: +bskchar "The sans-serif letter X"; +beginchar(chars.latin_X_SS,13u#,cap_height#,0); uni "0x1D5B7"; +italcorr cap_height#*slant; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +oblu:=1.5oblu; +numeric alpha[]; +lft x1l=2u; top y1l=h; x2r=w-x4l; bot y2r=0; +x3r=w-x1l; top y3r=h; x4l=x1l-.5u; bot y4l=0; +alpha1=diag_ratio(2,cap_stem,y1l-y2r,x1l-x2r); +alpha2=diag_ratio(1,cap_hair,y3r-y4l,x3r-x4l); +pos1(alpha1*cap_stem,0); pos2(alpha1*cap_stem,0); +pos3(alpha2*cap_hair,0); pos4(alpha2*cap_hair,0); +cap_serifs_tl(1l); cap_serifs_tr(1r); cap_serifs_bl(2l); cap_serifs_br(2r); +cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_bl(4l); cap_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]; +y100l=y100r=y101l=y101r=.5[y1l.b,y1]; +y102l=y102r=y103l=y103r=.5[y2l.b,y2]; +z100l=whatever[z1l,z2l]; z100r=whatever[z1r,z2r]; +z101l=whatever[z4l,z3l]; z101r=whatever[z4r,z3r]; +z102l=whatever[z1l,z2l]; z102r=whatever[z1r,z2r]; +z103l=whatever[z4l,z3l]; z103r=whatever[z4r,z3r]; +filldraw z100l---obl(1',1l,4l)---z103l...z4...z103r---obl(4',4r,2l)---z102l..z2..z102r + ---obl(2',2r,3r)---z101r...z3...z101l---obl(3',3l,1r)---z100r..z1..cycle; +penlabels(1,2,3,4,100,101,102,103); labels(1',2',3',4',5'); endchar; charscription(14u,cap_height,0)( @@ -2829,10 +4194,11 @@ penlabels(1,2,3,4); labels(0',0'',0''',0,0'''',2',4l'); iff known chars.latin_Y: bskchar "The letter Y"; beginchar(chars.latin_Y,14u#,cap_height#,0); uni "0x0059"; -italcorr cap_height#*slant+.75u#; +italcorr cap_height#*slant+.5u#; adjust_fit(cap_serif_fit#,cap_serif_fit#); pickup tiny.nib; usechar; +math_fit(-cap_height#*slant,ic#-4.5u#); endchar; iff known chars.latin_Ygrave: @@ -2890,6 +4256,42 @@ x101=x2+o; circumflex(100,101,102).capital; endchar; +iff known chars.latin_Y_BB: +bskchar "The blackboard-bold letter Y"; +beginchar(chars.latin_Y_BB,14u#,cap_height#,0); uni "0x1D550"; +italcorr cap_height#*slant+.75u#; +adjust_fit(cap_serif_fit#,cap_serif_fit#); +pickup tiny.nib; +usechar; +bot z100=(x1r,y1r.c); top y101=y3l.c; z101=whatever[z3l.bb,z2l]; +infill obl(3r,3l,2r)---obl(2r,3r,1r)---obl(100,2r,1r.c)...z1r---obl(1l,1r,2l)---obl(2l,1l,3l)---obl(101,2l,3l.c)...z3l---cycle; +math_fit(0,ic#-3u#); +endchar; + +iff known chars.latin_Y_SS: +bskchar "The sans-serif letter Y"; +beginchar(chars.latin_Y_SS,14u#,cap_height#,0); uni "0x1D5B8"; +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=.5h; x1=x2=.5w; +pos3(whatever,0); pos4(whatever,0); +lft x3l=2u; rt x4r=w-2u; top y3l=top y4r=h; +z3r=z2r+whatever*(z3l-z2l); z4l'=z2r+(0,cap_hair-tiny) rotated (angle(z4r-z2r)); +z4l=z4l'+whatever*(z4r-z2r); z2'=whatever[z4l',z4l]=whatever[z2r,z3r]; +z0'=z2r+(u,0) rotated (angle(z4r-z2r)); z0'''=z2l+(u,0) rotated (angle(z3l-z2l)); +z0''=z2'+(u,0) rotated (angle(z4l-z2')); z0''''=z2'+(u,0) rotated (angle(z3r-z2r)); +cap_serifs_bl(1l); cap_serifs_br(1r); cap_serifs_tl(3l); cap_serifs_tr(3r); cap_serifs_tr(4r); cap_serifs_tl(4l); +y100l=y100r=y101l=y101r=.5[y3l.b,y3]; +z100l=whatever[z3l,z2l]; z100r=whatever[z3r,z2']; +z101l=whatever[z0'',z4l]; z101r=whatever[z2r,z0']; +filldraw z1l.b..z1..z1r.b---z2r+u*down..z0'---z101r...z4...z101l---z0''...z0'''' + ---z100r..z3..z100l---z0'''..z2l+u*down---cycle; +penlabels(1,2,3,4,100,101); labels(0',0'',0''',0,0'''',2',4l'); +math_fit(0,ic#-2u#); +endchar; + iff known chars.sign_yen: bskchar "Yen symbol"; beginchar(chars.sign_yen,14u#,cap_height#,0); uni "0x00A5"; @@ -2952,6 +4354,7 @@ italcorr cap_height#*slant; adjust_fit(0,0); pickup tiny.nib; usechar; +math_fit(-.5u#,.75ic#); endchar; iff known chars.latin_Zcaron: @@ -2987,6 +4390,43 @@ usechar; acute(100,101).capital; endchar; +iff known chars.latin_Z_BB: +bskchar "The blackboard-bold letter Z"; +beginchar(chars.latin_Z_BB,13u#,cap_height#,0); uni "0x2124"; +italcorr cap_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +usechar; +oblu.more:=2oblu; +y100=y4e; x100=.5[x1r,x4e]; +infill ifobl(2l,2r,1l,1r,,more)---obl(1',2r,1r)...z100..z1r + ---obl(1l,1r,2l).more---cycle; +labels(100); +endchar; + +iff known chars.latin_Z_SS: +bskchar "The sans-serif letter Z"; +beginchar(chars.latin_Z_SS,13u#,cap_height#,0); uni "0x1D5B9"; +italcorr cap_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +numeric alpha; +lft x1l=u; bot y1l=0; rt x2r=w-u-o; top y2r=h; +x2r-x2l=x1r-x1l; +alpha=diag_ratio(2,cap_stem,y2r-y1l,x2r-x1l); +pos1(alpha*cap_stem,0); pos2(alpha*cap_stem,0); +pos4(cap_hair,-90); pos5(cap_hair,90); +bot y4r=0; rt x4r=w-u; top y5r=h; x5r=1.5u; +y1'=y4l; z1'=whatever[z1r,z2r]; +y2'=y5l; z2'=whatever[z1l,z2l]; +oblu:=.5[cap_hair,cap_stem]; +filldraw z1l---z4r+cap_stem*left...z4...z4l+cap_stem*left---obl(1',4l,2r)---z2r + ---z5r+cap_stem*right...z5...z5l+cap_stem*right---obl(2',5l,1l)---cycle; +penlabels(1,2,3,4,5); labels(0',0'',0''',0,0'''',2',4l'); +endchar; + +bskboundary; + charscription(9u,x_height,0)( numeric aend; aend:=stem; oblu:=2oblu; path p[]; numeric tim[]; @@ -3026,8 +4466,6 @@ infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2.. penlabels(0,0',1,2,3,4,5,6,8,9,10); labels(4',4'',7,11,12); ); -bskboundary; - iff known chars.latin_a: bskchar "The letter a"; beginchar(chars.latin_a,9u#,x_height#,0); uni "0x0061"; @@ -3214,6 +4652,111 @@ infill subpath(rundy(p2,tim5),rundy(p2,2+tim7).zpet) of p2.. 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"; @@ -3248,9 +4791,94 @@ infill p4..cycle; penlabels(1,1',2,3,4); labels(0,7); endchar; +iff known chars.latin_b_BB: +bskchar "The blackboard-bold letter b"; +beginchar(chars.latin_b_BB,11u#,asc_height#,0); uni "0x1D553"; +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(cap_stem,180); pos4(hair,270); +rt x1r=2u+.8cap_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, stem; serif_drop:=.81oldserif; stem:=.8cap_stem; + 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))<hair: y0:=y0-2o; fi; +p4=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; +filldraw z0---z5l+apex_o*down---lowercase_stem_upper(5,6)---z7 + ..subpath (tim3, tim2) of p0..cycle; +infill p4..cycle; +p100:=z5a--z5l; +p101:=z5l+apex_o*down--z0---obl(5f,5l,6r); +p102:=subpath(1,3) of p0; +p103:=subpath(1,3) of p4; +z100=bsktouch(p100,right,p101,dir135); +z101=bsktouch(p102,down,p103,up); +z102=bsktouch(p102,up,p103,down); +tim100=xpart(p100 intersectiontimes (z100--(0,y100))); +tim101=xpart(p101 intersectiontimes (z100--(w,y100))); +tim102=xpart(p102 intersectiontimes (z101--(x101,h))); +tim103=xpart(p103 intersectiontimes (z101--(x101,0))); +tim104=xpart(p102 intersectiontimes (z102--(x102,y2l-5))); +tim105=xpart(p103 intersectiontimes (z102--(x102,y3))); +infill ifobl(6r,6b,5r,5l,more,)---subpath(0,rundy(p100,tim100).zpet) of p100 + ..subpath(rundy(p101,tim101),infinity) of p101---cycle; +oblu:=bbw; +infill subpath(rundy(p102,tim102),rundy(p102,tim104).zpet) of p102 + ..reverse subpath(rundy(p103,tim103),rundy(p103,tim105).zpet) of p103..cycle; +penlabels(1,1',2,3,4); labels(0,7,100,101,102); +endchar; + +iff known chars.latin_b_SS: +bskchar "The sans-serif letter b"; +beginchar(chars.latin_b_SS,11u#,asc_height#,0); uni "0x1D5BB"; +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=0; 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))<hair: y0:=y0-2o; fi; +p4=z1r{up}..z4r..z3r..z2r..(z2r+hair*left)..{up}z1'r--z1r; +filldraw obl(5l,2l,6l)---z6b..z6r---z7..subpath (tim3, 3) of p0---cycle; +infill p4..cycle; +penlabels(1,1',2,3,4); labels(0,7); +endchar; + iff known chars.sign_blank_b: bskchar "Blank b sign"; -beginchar(chars.sign_blank_b,11u#,asc_height#,0); uni "non"; +beginchar(chars.sign_blank_b,11u#,asc_height#,0); uni "0x2422"; italcorr .5x_height#*slant; adjust_fit(serif_fit#,0); pickup tiny.nib; @@ -3356,6 +4984,54 @@ x100=x3; dotabove(100); endchar; +iff known chars.latin_c_BB: +bskchar "The blackboard-bold letter c"; +beginchar(chars.latin_c_BB,8.5u#,x_height#,0); uni "0x1D554"; +italcorr .5[x_height#,bar_height#]*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric cend; cend:=stem; +pos1(cap_stem,0); pos2(hair,90); pos3(hair,270); pos4(cend,20); +lft x1l=u; y1=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o; +rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10; +rt x4r=w-u; y4r=.85h; +z4'-z4l=hair*unitvector(z4l-z3r); +filldraw z0---z0'+o*down..{left}z2l..z1l..{right}z3l.. + z4r..z4'..{dir(angle(z4l-z4')-20)}z4l.. + z3'r..z3r{left}..z1r..{right}z2r..z0'---cycle; +path p[]; numeric tim[]; +oblu:=bbw; +p100:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l; +p101:=z3r{left}..z1r..{right}z2r..z0'---z0; +z100=bsktouch(p100,up,p101,down); +z101=bsktouch(p100,down,p101,up); +tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5))); +tim101=xpart(p101 intersectiontimes (z100--(x100,y1))); +tim102=xpart(p100 intersectiontimes (z101--(x101,y3l+5))); +tim103=xpart(p101 intersectiontimes (z101--(x101,y1))); +infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 + ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; +penlabels(1,2,3,4); labels(0,0',3'r,4',100,101); +endchar; + +iff known chars.latin_c_SS: +bskchar "The sans-serif letter c"; +beginchar(chars.latin_c_SS,8.5u#,x_height#,0); uni "0x1D5BC"; +italcorr .5[x_height#,bar_height#]*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric cend; cend:=stem; +pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(cend,20); +lft x1l=u; y1=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o; +rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; z3'r=z3r+like_hair*dir-10; +rt x4r=w-u; y4r=.85h; +z4'-z4l=hair*unitvector(z4l-z3r); +filldraw z0---z0'+o*down..{left}z2l..z1l..{right}z3l.. + z4r..z4'..{dir(angle(z4l-z4')-20)}z4l.. + z3'r..z3r{left}..z1r..{right}z2r..z0'---z0+o*up..cycle; +penlabels(1,2,3,4); labels(0,0',3'r,4'); +endchar; + iff known chars.latin_ccedilla: bskchar "The letter c with cedilla"; beginchar(chars.latin_ccedilla,8.5u#,x_height#,.65desc_depth#); uni "0x00E7"; @@ -3379,7 +5055,7 @@ filldraw subpath(0,rundy(p1,2).zpet) of p1 ..subpath(rundy(p3,0),rundy(p3,infinity).zpet) of p3 ..subpath(rundy(p1,tim1),infinity) of p1.. z4r..z4'..{dir(angle(z4l-z4')-20)}z4l.. - z3'r..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up-- else: --- fi cycle; + z3'r..z3r{left}..z1r..{right}z2r..z0'if testdpi: +up-- else: --- fi cycle; penlabels(1,2,3,4,5,6,7,8); labels(0,0',3'r,4'); endchar; @@ -3411,7 +5087,7 @@ p3:=z5rr---z6r; (tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3; (tim12,tim13)=p1 intersectiontimes p2; (tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2; -{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi +{{ if testdpi: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi filldraw subpath(0,rundy(p0,tim0).zpet) of p0 ..subpath(rundy(p3,tim1),infinity) of p3 ---subpath(0,rundy(p2,tim3).zpet) of p2 @@ -3457,7 +5133,7 @@ p3:=z5rr---z6r; (tim10-3,tim11)=subpath(3,infinity) of p1 intersectiontimes p3; (tim12,tim13)=p1 intersectiontimes p2; (tim14-3,tim15)=subpath(3,infinity) of p1 intersectiontimes p2; -{{ if dpi<=300: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi +{{ if testdpi: save rundy; def rundy(expr p,t)suffix modifier:= t enddef; fi filldraw subpath(0,rundy(p0,tim0).zpet) of p0 ..subpath(rundy(p3,tim1),infinity) of p3 ---subpath(0,rundy(p2,tim3).zpet) of p2 @@ -3508,7 +5184,7 @@ iff known chars.latin_d: bskchar "The letter d"; beginchar(chars.latin_d,11u#,asc_height#,0); uni "0x0064"; italcorr asc_height#*slant-.75u#; -adjust_fit(serif_fit#,0); +adjust_fit(0,serif_fit#); pickup tiny.nib; usechar; endchar; @@ -3517,13 +5193,96 @@ iff known chars.latin_dcaron: bskchar "The letter d with caron (treated like comma)"; beginchar(chars.latin_dcaron,11u#,asc_height#,0); uni "0x010F"; italcorr asc_height#*slant+2u#; -adjust_fit(serif_fit#,0); +adjust_fit(0,0); pickup tiny.nib; usechar; y100''r=h; rt x100'''=w+u; comma(100,.75dot_size,.5hair,.75comma_depth); endchar; +iff known chars.latin_d_BB: +bskchar "The blackboard-bold letter d"; +beginchar(chars.latin_d_BB,11u#,asc_height#,0); uni "0x1D555"; +italcorr asc_height#*slant-.75u#; +adjust_fit(0,serif_fit#); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(cap_stem,0); pos3'(hair,180); pos2(hair,90); +pos3(hair,180); pos4(hair,270); +lft x1l=u; lft x3r=w-2u-.8cap_stem; y3=.65x_height; y1=.5x_height; +.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=x_height+o; +rt x5r=w-2u; bot y5=-d; top y6r=h; +{{ + save stem; stem:=.8cap_stem; + lowercase_points(5,6,1.2jut); +}}; +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=lowercase_lower_u_serif(5,hair); +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; +tim4 =xpart(p0 intersectiontimes ((.5w,y7-.5hair)--(w,y7-.5hair))); +if tim4=-1: tim4:=xpart(p0 intersectiontimes ((.5[x4,x7],bar_height)--(.5[x4,x7],h))) fi; +p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r; +filldraw subpath (tim2, tim4) of p0..z7---lowercase_stem_upper(5,6) + ---subpath(0,tim3) of p3..cycle; +oblu.more:=1.25f_obl; +infill p4..cycle; +infill ifobl(6r,6b,5r,5l,more,)---z5a..z5..z5f---cycle; +oblu:=bbw; +p100:=subpath(2,4) of p0; +p101:=subpath(1,3) of p4; +z100=bsktouch(p100,down,p101,up); +z101=bsktouch(p100,up,p101,down); +tim100=xpart(p100 intersectiontimes (z100--(x100,h))); +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,3',2,3,4); labels(7,100,101); +endchar; + +iff known chars.latin_d_SS: +bskchar "The sans-serif letter d"; +beginchar(chars.latin_d_SS,11u#,asc_height#,0); uni "0x1D5BD"; +italcorr asc_height#*slant-.75u#; +adjust_fit(0,serif_fit#); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +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=.5x_height; +.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=0; top y4l=x_height+o; +rt x5r=w-2u; bot y5=-d; top y6r=h; +lowercase_points(5,6,1.2jut); +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=lowercase_lower_u_serif(5,hair); +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; +tim4 =xpart(p0 intersectiontimes ((.5w,y7-.5hair)--(w,y7-.5hair))); +if tim4=-1: tim4:=xpart(p0 intersectiontimes ((.5[x4,x7],bar_height)--(.5[x4,x7],h))) fi; +p4=z3r{up}..z4r..z1r..z2r..z2r+2hair*right..{up}z3'r--z3r; +filldraw subpath (2, tim4) of p0..z7---z6b..z6r---obl(5r,6r,2l)---cycle; +infill p4..cycle; +penlabels(1,3',2,3,4); labels(7); +endchar; + iff known chars.latin_dstroke: bskchar "The letter d with stroke"; beginchar(chars.latin_dstroke,11u#,asc_height#,0); uni "0x0111"; @@ -3661,7 +5420,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height))); shift:=lft xpart(point tim1 of p0)- w+u; x4l:=x4l-shift; x4r:=x4r-shift; p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; -p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300:+up fi; +p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi:+up fi; tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height))); tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); @@ -3797,6 +5556,95 @@ x101=x3; x102-x100=5u; tieacc(100,101,102); endchar; +iff known chars.latin_e_BB: +bskchar "The blackboard-bold letter e"; +beginchar(chars.latin_e_BB,9u#,x_height#,0); uni "0x1D556"; +italcorr bar_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[], shift; +oblu:=2.5oblu; +pos1(cap_stem,0); pos2(hair,90); pos3(hair,270); pos4(cap_stem,180); +lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o; +rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1; +p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; +p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0'; +tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height))); +tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height))); +shift:=lft xpart(point tim1 of p0)- w+u; +x4l:=x4l-shift; x4r:=x4r-shift; +p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; +p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi:+up fi; +tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height))); +tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); +tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); +tim6=xpart(p1 intersectiontimes ((w,bar_height+bar-tiny)--(x3,bar_height+bar-tiny))); +tim7=xpart(p1 intersectiontimes ((0,bar_height+bar-tiny)--(x3,bar_height+bar-tiny))); +p2=point tim3 of p0 -- point tim4 of p1; +p3=point tim7 of p1 -- point tim6 of p1; +filldraw subpath(0,rundy(p0,(tim3,hair)).zpet) of p0--(subpath(0,rundy(p2,1).zpet) of p2).. + subpath(rundy(p1,(tim5,if bold_face: 2f_obl else: oblu fi)),infinity) of p1 + {z0-z0'-o*down}..cycle; +oblu:=1.5f_obl; +infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet) + of p3..cycle; +oblu:=bbw; +p100:=p0; +p101:=subpath(1,infinity) of p1; +p102:=subpath(4,tim3) of p100; +p103:=subpath(tim6,1) of p1; +z100=bsktouch(p100,up,p101,down); +z101=bsktouch(p100,down,p101,up); +z102=bsktouch(p102,down,p103,up); +tim100=xpart(p100 intersectiontimes (z100--(x100,y2l-5))); +tim101=xpart(p101 intersectiontimes (z100--(x100,y1))); +tim102=xpart(p100 intersectiontimes (z101--(x101,y3l+5))); +tim103=xpart(p101 intersectiontimes (z101--(x101,y1))); +tim104=xpart(p102 intersectiontimes (z102--(x102,y3l+5))); +tim105=xpart(p103 intersectiontimes (z102--(x102,y1))); +infill subpath(rundy(p100,tim100),rundy(p100,tim102).zpet) of p100 + ..subpath(rundy(p101,tim103),rundy(p101,tim101).zpet) of p101..cycle; +oblu:=.75bbw; +infill subpath(rundy(p102,tim104),rundy(p102,length(p102)).zpet) of p102 + ..subpath(rundy(p103,0),rundy(p103,tim105).zpet) of p103..cycle; +penlabels(1,2,3,4); labels(0,0',100,101,102); +endchar; + +iff known chars.latin_e_SS: +bskchar "The sans-serif letter e"; +beginchar(chars.latin_e_SS,9u#,x_height#,0); uni "0x1D5BE"; +italcorr bar_height#*slant; +adjust_fit(-o#,0); +pickup tiny.nib; +path p[]; numeric tim[], shift; +oblu:=2.5oblu; +pos1(curve,0); pos2(hair,90); pos3(hair,270); pos4(curve,180); +lft x1l=u; y1=y4=.5h; x2=x3=.5w+hair; bot y2l=-o; top y3l=h+o; +rt x0=w-u; y0=.2h; z0'=z0+hair*dir220; x4=w-x1; +p0=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; +p1=z4r{up}..z3r{left}..z1r..{right}z2r..z0'; +tim1=xpart(p0 intersectiontimes ((.5w,bar_height)--(w,bar_height))); +tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height))); +shift:=lft xpart(point tim1 of p0)- w+u; +x4l:=x4l-shift; x4r:=x4r-shift; +p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; +p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi:+up fi---z0+o*up; +tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height))); +tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); +tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); +tim6=xpart(p1 intersectiontimes ((w,bar_height+hair-tiny)--(x3,bar_height+hair-tiny))); +tim7=xpart(p1 intersectiontimes ((0,bar_height+hair-tiny)--(x3,bar_height+hair-tiny))); +p2=point tim3 of p0 -- point tim4 of p1; +p3=point tim7 of p1 -- point tim6 of p1; +filldraw subpath(0,rundy(p0,(tim3,hair)).zpet) of p0--(subpath(0,rundy(p2,1).zpet) of p2).. + subpath(rundy(p1,(tim5,if bold_face: 2f_obl else: oblu fi)),infinity) of p1 + {z0-z0'-o*down}..cycle; +oblu:=1.5f_obl; +infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet) + of p3..cycle; +penlabels(1,2,3,4); labels(0,0'); +endchar; + iff known chars.latin_eogonek: bskchar "The letter e with ogonek"; beginchar(chars.latin_eogonek,9u#,x_height#+o#,.85desc_depth#); uni "0x0119"; @@ -3862,7 +5710,7 @@ x4l:=x4l-shift; x4r:=x4r-shift; x5l=x6l; z5r=z2l; y6=-hair; y7=-.5d; rt x7r-lft x8r=4u; x5r-lft x8r=2u; y8r=-d; p0:=z0---z0'+o*down..{left}z2l..z1l..{right}z3l..{down}z4l; -p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if dpi<=300: +up fi; +p1:=z4r{up}..z3r{left}..z1r..{right}z2r..z0'if testdpi: +up fi; tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height))); tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); @@ -3905,7 +5753,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height))); shift:=lft xpart(point tim1 of p0)- w+u; x4l:=x4l-shift; x4r:=x4r-shift; p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l; -p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+o*up}z0 else: z0' fi if dpi<=300: +up fi; +p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+o*up}z0 else: z0' fi if testdpi: +up fi; tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height))); tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); @@ -3954,7 +5802,7 @@ tim2=xpart(p1 intersectiontimes ((.5w,bar_height)--(w,bar_height))); shift:=lft xpart(point tim1 of p0)- w+u; x4l:=x4l-shift; x4r:=x4r-shift; p0:=z0---z0'+if monospace: 1.5\\fi o*down..{left}z2l..z1l..{right}z3l..{down}z4l; -p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+.5o*up}z0 else: z0' fi if dpi<=300: +up fi; +p1:=z4r{up}..z3r{left}..z1r..{right}z2r..if monospace:{z0-z0'+.5o*up}z0 else: z0' fi if testdpi: +up fi; tim3=xpart(p0 intersectiontimes ((w,bar_height)--(x3,bar_height))); tim4=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); tim5=xpart(p1 intersectiontimes ((0,bar_height)--(x3,bar_height))); @@ -3967,22 +5815,31 @@ p5=z1l---z11l..{left}z12l..{down}z13l..z13'..{up}z13r..z13'' ..{right}z12r...z11r---(x11r,y1); p6=z10r{dir(angle(z9l-z1))}..z9r..z8r..{z6r-z7-hair*up}z6r; (tim8,tim9)=p0 intersectiontimes p4; +if tim8<0: %Hack for math parameters + tim8:=xpart(p0 intersectiontimes (z10l--(x2,y10l))); + tim9:=0; +fi (tim10,tim11)=p4 intersectiontimes p5; (tim12,tim13)=subpath(2,infinity) of p5 intersectiontimes p0; (tim14,tim15)=p6 intersectiontimes p0; +if tim15<0: %Hack for math parameters + tim15:=xpart(p0 intersectiontimes (z10r--(x2,y10r))); + tim14:=0; +fi (tim16,tim17)=p6 intersectiontimes p5; if tim16<0: tim16:=infinity; fi -filldraw subpath(0,rundy(p0,tim8).zpet) of p0.. - subpath(rundy(p4,tim9),rundy(p4,tim10).zpet) of p4.. - subpath(rundy(p5,tim11),rundy(p5,2+tim12).zpet) of p5.. - subpath(rundy(p0,tim13),rundy(p0,(tim3,hair)).zpet) of p0-- - subpath(0,rundy(p2,1).zpet) of p2.. - subpath(rundy(p1,(tim5, if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1 - {z0-z0'-o*down}..cycle; +filldraw subpath(0,rundy(p0,tim8).zpet) of p0 + ..subpath(rundy(p4,tim9),rundy(p4,tim10).zpet) of p4 + ..subpath(rundy(p5,tim11),rundy(p5,2+tim12).zpet) of p5 + ..subpath(rundy(p0,tim13),rundy(p0,(tim3,hair)).zpet) of p0 + --subpath(0,rundy(p2,1).zpet) of p2 + ..subpath(rundy(p1,(tim5, if bold_face: 1.5f_obl else: oblu fi)),infinity) of p1{z0-z0'-o*down} + ..cycle; oblu:=1.5f_obl; -infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1..subpath(rundy(p3,0),rundy(p3,1).zpet) - of p3..cycle; -infill subpath(rundy(p6,tim14),rundy(p6,tim16).zpet) of p6..(reverse subpath(0,rundy(p5,tim17).zpet) of p5) +infill subpath (rundy(p1,tim6),rundy(p1,tim7).zpet) of p1 + ..subpath(rundy(p3,0),rundy(p3,1).zpet) of p3..cycle; +infill subpath(rundy(p6,tim14),rundy(p6,tim16).zpet) of p6 + ..(reverse subpath(0,rundy(p5,tim17).zpet) of p5) ..subpath(3,rundy(p0,tim15)) of p0..cycle; penlabels(1,2,3,4,5,6,8,9,10,11,12,13); labels(0,0',7,13',13''); ); @@ -4042,6 +5899,65 @@ filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d.. penlabels(3,4,5,5',6,6'); labels(4',4''); endchar; +iff known chars.latin_f_BB: +bskchar "The blackboard-bold letter f"; +beginchar(chars.latin_f_BB,6.5u#, asc_height#, 0); uni "0x1D557"; +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-.5(cap_stem-stem),x4]=x3; y4''=y3r-like_hair; +z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +save stem; numeric stem; stem:=.8cap_stem; +lowercase_points(1,2,jut); +if not bold_face: y2r:=y2r+hair; fi; +z3'r=z3r+.5hair*right; +pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90); +y5=y5'=y6=y6'=bot x_height; +lft x5=u; x6=if monospace: 2x1-x5 else: w-u fi; x5'=x1l; x6'=x1r; +filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d.. + {left}z1e..{up}z1f---obl(6'l,1r,6l)---z6l..z6r---obl(6'r,6r,2r)--- + z2r...{right}z3r..z4r..z4'..z4l{up}..z4''..z3l..z2l--- + obl(5'r,2l,5r)---z5r..z5l---obl(5'l,5l,1l)---cycle; +path p[]; numeric tim[]; +p100:=z6'r---z2r..{right}z3r; +p101:=z4l{up}..z4''..z3l..z2l---z5'r; +bot z100=(x1l,y1b); +z101=bsktouch(p100,up,p101,down); +tim100=xpart(p100 intersectiontimes (z101--(x101,y2))); +tim101=xpart(p101 intersectiontimes (z101--(x101,y3l+5))); +infill subpath(rundy(p101,(tim101,bbw)),infinity) of p101---obl(100,2b,1b) + ...z1l---obl(1r,1l,2r)---subpath(0,rundy(p100,(tim100,bbw)).zpet) of p100 + ..cycle; +penlabels(3,4,5,5',6,6'); labels(4',4'',100,101); +endchar; + +iff known chars.latin_f_SS: +bskchar "The sans-serif letter f"; +beginchar(chars.latin_f_SS,6.5u#, asc_height#, 0); uni "0x1D5BF"; +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); +z3'r=z3r+.5hair*right; +pos5(hair,90); pos5'(hair,90); pos6(hair,90); pos6'(hair,90); +y5=y5'=y6=y6'=bot x_height; +lft x5=u; x6=if monospace: 2x1-x5 else: w-u fi; x5'=x1l; x6'=x1r; +filldraw z1a..z1..z1f---obl(6'l,1r,6l)---z6l..z6r---obl(6'r,6r,2r)--- + 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',6,6'); labels(4',4''); +endchar; + iff known chars.latin_ff: bskchar "The ligature ff"; beginchar(chars.latin_ff,11u#, asc_height#, 0); uni "0xFB00"; @@ -4082,6 +5998,46 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l-- penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8''); endchar; +iff known chars.latin_ff_alt: +bskchar "The ligature ff---alternative"; +beginchar(chars.latin_ff_alt,11u#, asc_height#, 0); uni "non"; %"0xFB00"; +italcorr asc_height#*slant+1.75u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric fend, ijut, tim[]; fend:=stem; +path p[]; +pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180); +lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2+like_hair=top y6=h-like_curve; +top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=y3r-like_hair; lft x4r=w-2.2u-stem; +y8''=y7r-like_hair; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45; +x7=if monospace: .6[w,x5r] else: w-1.25u fi; .5[x6r,x8]=x7; +z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +lowercase_points(1,2,jut); lowercase_points(5,6,jut); +if not bold_face: y2r:=y6r:=y2r+hair; fi; +ijut=.5hair; x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut; +z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right; +pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90); +pos11(hair,90); pos11'(hair,90); +y9=y9'=y10=y10'=y11=y11'=bot x_height; +lft x9=u; x11=if monospace: x5r+x9'-x9 else: w-u fi; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r; +p0=z8l{up}..z8''..z7l..{down}z6l; +p1=z4l{up}..z4''..z3l..{down}z2l; +p2=z2r...{right}z3r..z4r..z4'..{up}z4l; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p0; +filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d.. + {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)--- + z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d.. + {left}z5e..z5f---obl(11'l,5r,11l)---z11l..z11r---obl(11'r,11r,6r)--- + z6r...{right}z7r..z8r..z8'..subpath(0,rundy(p0,tim0).zpet) of p0.. + subpath(rundy(p1,tim1),infinity) of p1 + --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle; +infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l-- + (reverse subpath(rundy(p0,tim3),infinity) of p0).. + (reverse subpath(0,rundy(p2,tim2).zpet) of p2)&cycle; +penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8''); +endchar; + charscription(11u,asc_height,0)( numeric fend, tim; fend:=stem; path p; @@ -4186,6 +6142,53 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l.. penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8''); endchar; +iff known chars.latin_ffl_alt: +bskchar "The ligature ffl---alternative"; +beginchar(chars.latin_ffl_alt,15u#, asc_height#, 0); uni "non"; %"0xFB04"; +italcorr asc_height#*slant-u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric fend, ijut, tim[]; fend:=stem; +path p[]; +pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180); +lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2+like_hair=top y6=h-like_curve; +top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=y3r-like_hair; lft x4r=w-6.2u-stem; +y8''=y7r-top like_hair; z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45; +.5[x6r,x8]=x7; +z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +lowercase_points(1,2,jut); lowercase_points(5,6,jut); +if not bold_face: y2r:=y6r:=y2r+hair; fi; +ijut=.5hair; + x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut; +z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right; +bot y12=0; top y13=h; rt x12r=w-2u; x8r=x12l; +lowercase_points(12,13,jut); +pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90); +pos11(hair,90); pos11'(hair,90); +y9=y9'=y10=y10'=y11=y11'=bot x_height; +lft x9=u; x11=x5r+x9'-x9; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r; +p0=z8l{up}..z8''..z7l..{down}z6l; +p1=z4l{up}..z4''..z3l..{down}z2l; +p2=z2r...{right}z3r..z4r..z4'..{up}z4l; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p0; +tim4=xpart(p0 intersectiontimes ((.75[x12a,x12l],y8r)--(.75[x12a,x12l],h))); +if x12c-x5d<u: x5d:=x5d-ijut; x5e:=x5e-ijut; fi; +filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d.. + {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)--- + z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d.. + {left}z5e..z5f---obl(11'l,5r,11l)---z11l..z11r---obl(11'r,11r,6r)--- + z6r...{right}z7r..z8r---z12a..{left}z12b..{right}z12c..z12+ser_boule*up + ..z12d{right}..{left}z12e..z12f---z13r{z13a-z13}.. + subpath(tim4,rundy(p0,(tim0,2hair)).zpet) of p0.. + subpath(rundy(p1,(tim1,2hair)),infinity) of p1 + --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle; +infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l.. + (reverse subpath(rundy(p0,tim3),infinity) of p0).. + (reverse subpath(0,rundy(p2,tim2).zpet) of p2)..cycle; +penlabels(3,4,7,8,9,9',10,10',11,11'); labels(4',4'',8',8''); +endchar; + iff known chars.latin_fi: bskchar "The ligature fi"; beginchar(chars.latin_fi,11u#, asc_height#, 0); uni "0xFB01"; @@ -4308,6 +6311,59 @@ infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l-- penlabels(3,4,7,8,9,9',10,10',11,11',14); labels(4',4'',8',8''); endchar; +iff known chars.latin_ffi_alt: +bskchar "The ligature ffi---alternative"; +beginchar(chars.latin_ffi_alt,15u#, asc_height#, 0); uni "non"; %"0xFB03"; +italcorr .5[asc_height#,x_height#]*slant-.5u#; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +numeric fend, ijut, help, tim[]; fend:=stem; +path p[]; +pos3(hair,-90); pos4(fend,180); pos7(hair,-90); pos8(fend,180); +lft x1l=2.5u; x5l=.5[x3,x4]; bot y1=bot y5=0; top y2+like_hair=top y6=h-like_curve; +top y3l+like_hair=top y7l=h+o; .5[x2r,x4]=x3; y4''+like_hair=y3r-like_hair; lft x4r=w-6.2u-stem; +y8''=y7r-top like_hair; +help:=y8''-.2fend-dot_size-x_height; +if help<.85stem: y8'':=.5[y3r,x_height]+.5dot_size+tiny; fi +z8'=z8+.2fend*down+o*left; z8''=z8+.5(fend-currentbreadth)*dir45; +.5[x6r,x8]=x7; +z4'=z4+.2fend*down+o*left; z4''=z4+.5(fend-currentbreadth)*dir45; +lowercase_points(1,2,1.2jut); lowercase_points(5,6,jut); +if not bold_face: y2r:=y6r:=y2r+hair; fi; +ijut=.5hair; + x1e:=x1e-ijut; x1d:=x1d-ijut; x5c:=x5c+ijut; x5b:=x5b+ijut; +z3'r=z3r+.5hair*right; z7'r=z7r+.5hair*right; +bot y12=0; top y13=x_height; rt x12r=w-2u; x8r=x12l; +lowercase_points(12,13,1.2jut); +pos9(hair,90); pos9'(hair,90); pos10(hair,90); pos10'(hair,90); +pos11(hair,90); pos11'(hair,90); pos14(dot_size+tiny,10); +y9=y9'=y10=y10'=y11=y11'=bot x_height-.5serif_drop; +lft x9=u; x11=x5r+x9'-x9; x9'=x1l; x10=x6l; x10'=x1r; x11'=x6r; +lft x14r=x8l; y14=y8l-.5dot_size; +p0=z8l{up}..z8''..z7l..{down}z6l; +p1=z4l{up}..z4''..z3l..{down}z2l; +p2=z2r...{right}z3r..z4r..z4'..{up}z4l; +p3=z7r{right}..{z8'-z8r}z8r; +(tim0,tim1)=p0 intersectiontimes p1; +(tim2,tim3)=p2 intersectiontimes p0; +tim4=xpart(p0 intersectiontimes ((.75[x12a,x12l],y8r)--(.75[x12a,x12l],h))); +if x12c-x5d<u: x5d:=x5d-ijut; x5e:=x5e-ijut; fi; +filldraw z1a..z1b{left}..z1c{right}..z1+ser_boule*up..{right}z1d.. + {left}z1e..z1f---obl(10'l,1r,10l)---obl(10l,10'l,5l)--- + z5a..z5b{left}..z5c{right}..z5+ser_boule*up..{right}z5d.. + {left}z5e..z5f---obl(11'l,5r,11l)---z13a---obl(13b,13a,12a) + ---z12a..{left}z12b..{right}z12c..z12+ser_boule*up..z12d{right}.. + {left}z12e..z12f---z13r---obl(11'r,11r,6r)--- + z6r...subpath(0,rundy(p3,infinity).zpet) of p3..{down}z14l..z14r{up}..z8'' + ..subpath(1,rundy(p0,(tim0,2hair)).zpet) of p0.. + subpath(rundy(p1,(tim1,2hair)),infinity) of p1 + --obl(9'r,2l,9r)---z9r..z9l---obl(9'l,9l,1l)---cycle; +infill z2r---obl(10'r,2r,10r)---obl(10r,10'r,6l)---z6l-- + (reverse subpath(rundy(p0,tim3),infinity) of p0).. + (reverse subpath(0,rundy(p2,tim2).zpet) of p2)&cycle; +penlabels(3,4,7,8,9,9',10,10',11,11',14); labels(4',4'',8',8''); +endchar; + charscription(11u,x_height,desc_depth)( path p[]; numeric tim[]; oblu:=2oblu; pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); @@ -4419,6 +6475,117 @@ x101=x4r; x102-x100=5u; breve(100,101,102); endchar; +iff known chars.latin_g_BB: +bskchar "The blackboard-bold letter g"; +beginchar(chars.latin_g_BB,11u#,x_height#,desc_depth#); uni "0x1D558"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(cap_stem,0); pos2(hair,90); pos3(cap_stem,180); pos4(hair,270); +lft x1l=1.5u; rt x3l=w-2.5u; y1=y3=.5[y4l,y2l]; .5[x2,x4]=.5[x1,x3]; x2=x4; +bot y2l=1/3bar_height+.25stem; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l; +tim1=xpart(p0 intersectiontimes ((0,y2l+tiny)--(w,y2l+tiny))); +z5r=point tim1 of p0; +tim2=xpart(p0 intersectiontimes ((x5r-hair+tiny,0)--(x5r-hair+tiny,h))); +z5l=point tim2 of p0; z5=.5[z5l,z5r]; +lft z5'=(1.75u,0); +pos6(.8cap_stem,90); pos8(hair,270); +y6l=top y7l+.5stem; y6=0; x6=x5+u; x6r:=x6r+.5hair; rt x7l=w-2.75u; +x8=x2; bot y8r=-d; +pos9(dot_size,180); lft x9r=u; top y9=-.45d; +p1=subpath(0,.5tim2) of p0 .. z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l; +z7r-z7l=.8cap_stem*dir(angle(direction 3 of p1)+90); z7=.5[z7r,z7l]; +y9'=y7l if not bold_face:-.25dot_size fi; z9'=whatever[z9l,z5]; +pos10(hair,135); pos11(hair,135); z11-z10=tiny*dir45; +z10=(.5[z2,z4]--(w-u,h)) intersectionpoint p0; +pos12(stem,45); pos12'(stem,45); x12r=w-u; y12l=y11l; z12'=z12+.5tiny*dir135; +p2=.5[z2,z4]---z11l..{dir-60}z12'l--z12l; +p3=z12r---z12'r..z11r---z10r--z10; +p4=z8r{right}..z7r..{left}z6r..{dir30}z5r; +(tim3,tim4)=p0 intersectiontimes p2; +(tim5,tim6)=p3 intersectiontimes p0; +filldraw p1..{(w,h)-z9l}z9l..z9'{left}..{down}z9r.. + subpath(0,rundy(p4,(infinity,if bold_face: 1.5f_obl else: oblu fi)).zpet) of p4 + ..subpath(rundy(p0,tim1),rundy(p0,tim3).zpet) of p0.. + subpath(rundy(p2,1),infinity) of p2{dir0}.. + subpath(0,rundy(p3,(2,hair)).zpet) of p3.. + subpath(rundy(p0,tim6),infinity) of p0-- cycle; +infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; +p100:=p4; +p101:=z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l; +p102:=z4r..z1r{down}..z2r..z3r..cycle; +p103:=reverse z4l..z1l{down}..z2l..z3l..cycle; +z100=bsktouch(p100,left,subpath(0,2) of p101,right); +z101=bsktouch(p100,up,p101,down); +z102=bsktouch(subpath(0,1) of p102,up,p103,down); +z103=bsktouch(subpath(1,2) of p102,down,p103,up); +z104=bsktouch(subpath(3,4) of p102,up,p103,down); +z105=bsktouch(subpath(2,3) of p102,down,p103,up); +tim100=xpart(p100 intersectiontimes (z100--(w,y100))); +tim101=xpart(p101 intersectiontimes (z100--(0,y100))); +tim102=xpart(p100 intersectiontimes (z101--(x101,-d-5))); +tim103=xpart(p101 intersectiontimes (z101--(x101,y9))); +tim104=xpart(p102 intersectiontimes (z102--(x102,y1))); +tim105=xpart(p103 intersectiontimes (z102--(x102,y4l+5))); +tim106=xpart(p102 intersectiontimes (z103--(x103,y1))); +tim107=xpart(p103 intersectiontimes (z103--(x103,y2l-5))); +tim108=xpart(p102 intersectiontimes (z104--(x104,y1))); +tim109=xpart(p103 intersectiontimes (z104--(x104,y4l+5))); +tim110=xpart(p102 intersectiontimes (z105--(x105,y1))); +tim111=xpart(p103 intersectiontimes (z105--(x105,y2l-5))); +oblu:=bbw; +infill subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101 + ..subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100..cycle; +infill subpath(rundy(p102,tim104),rundy(p102,tim106).zpet) of p102 + ..subpath(rundy(p103,tim107).zpet,rundy(p103,tim105)) of p103..cycle; +infill subpath(rundy(p102,tim108).zpet,rundy(p102,tim110)) of p102 + ..subpath(rundy(p103,tim111),rundy(p103,tim109).zpet) of p103..cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9',100,101,102,103,104,105); +endchar; + +iff known chars.latin_g_SS: +bskchar "The sans-serif letter g"; +beginchar(chars.latin_g_SS,11u#,x_height#,desc_depth#); uni "0x1D5C0"; +italcorr x_height#*slant; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=2oblu; +pos1(curve,0); pos2(hair,90); pos3(curve,180); pos4(hair,270); +lft x1l=1.5u; rt x3l=w-2.5u; y1=y3=.5[y4l,y2l]; .5[x2,x4]=.5[x1,x3]; x2=x4; +bot y2l=1/3bar_height+.25stem; top y4l=h+o; x4r:=x4r+.25u; x2r:=x2r-.25u; +p0:=z1l{down}..z2l..{up}z3l..z4l..{down}z1l; +tim1=xpart(p0 intersectiontimes ((0,y2l+tiny)--(w,y2l+tiny))); +z5r=point tim1 of p0; +tim2=xpart(p0 intersectiontimes ((x5r-hair+tiny,0)--(x5r-hair+tiny,h))); +z5l=point tim2 of p0; z5=.5[z5l,z5r]; +lft z5'=(1.75u,0); +pos6(stem,90); pos8(hair,270); +y6l=top y7l+.5stem; y6=0; x6=x5+u; x6r:=x6r-.5hair; rt x7l=w-2.5u; +x8=x2; bot y8r=-d; +pos9(stem,180); lft x9r=u; top y9=-.45d; +p1=subpath(0,.5tim2) of p0 .. z5l+hair*dir-130{dir-130}..z5'..{right}z6l..z7l..{left}z8l; +z7r-z7l=.8stem*dir(angle(direction 3 of p1)+90); z7=.5[z7r,z7l]; +z9'-z9=(o,hair); +pos10(hair,135); pos11(hair,135); z11-z10=tiny*dir45; +z10=(.5[z2,z4]--(w-u,h)) intersectionpoint p0; +pos12(stem,45); pos12'(stem,45); x12r=w-u; y12l=y11l; z12'=z12+.5tiny*dir135; +p2=.5[z2,z4]---z11l..{dir-60}z12'l--z12l; +p3=z12r---z12'r..z11r---z10r--z10; +p4=z8r{right}..z7r..{left}z6r..{dir30}z5r; +(tim3,tim4)=p0 intersectiontimes p2; +(tim5,tim6)=p3 intersectiontimes p0; +filldraw p1..z9l{up}..z9'{left}..{down}z9r.. + subpath(0,rundy(p4,(infinity,if bold_face: 1.5f_obl else: oblu fi)).zpet) of p4 + ..subpath(rundy(p0,tim1),rundy(p0,tim3).zpet) of p0.. + subpath(rundy(p2,1),infinity) of p2{dir0}.. + subpath(0,rundy(p3,(2,hair)).zpet) of p3.. + subpath(rundy(p0,tim6),infinity) of p0-- cycle; +infill z1r{up}..z4r..{down}z3r..z2r..{up}cycle; +penlabels(1,2,3,4,5,6,7,8,9,10,11,12,12'); labels(5',9'); +endchar; + charscription(11u,asc_height,0)( path p[]; numeric tim[]; oblu:=2oblu; pos3(stem,0); pos4(stem,0); pos5(n_str_hair,90); pos6(hair,180); @@ -4468,6 +6635,65 @@ 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"; @@ -4662,6 +6888,61 @@ 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"; @@ -4763,6 +7044,78 @@ 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; @@ -4822,6 +7175,76 @@ 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"; @@ -4922,6 +7345,34 @@ 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"; @@ -4973,8 +7424,95 @@ 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: oblu fi)).zpet) of p3..broken_stem_draw(1',1,2)---cycle; +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; @@ -5064,6 +7602,60 @@ 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"; @@ -5246,6 +7838,49 @@ 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); @@ -5366,6 +8001,83 @@ 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"; @@ -5401,7 +8113,7 @@ 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(serif_fit#,0); +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); @@ -5429,6 +8141,84 @@ 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); @@ -5513,6 +8303,62 @@ 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[]; @@ -5586,6 +8432,64 @@ 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"; @@ -5683,7 +8587,7 @@ 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..{left}z5r..controls (z1l+hair*dir100).. + ..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); ); @@ -5719,6 +8623,34 @@ 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"; @@ -5766,6 +8698,24 @@ filldraw z2r..z3r..{dir(angle(z4r-z3r)+10)}z4r--z4l{dir(angle(z3l-z4l)+20)} 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); @@ -5918,6 +8868,65 @@ 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"; @@ -5977,6 +8986,64 @@ filldraw z1l.a{left}..{right}z1l.c..diag_serif(1l,3l)--z3l-- 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; @@ -6060,6 +9127,79 @@ 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"; @@ -6092,6 +9232,69 @@ filldraw z1l.a..{right}z1l.c..diag_serif(1l,2l)---obl(1',1l,4l) 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[]; @@ -6190,6 +9393,86 @@ x101=x3'; circumflex(100,101,102); endchar; +iff known chars.latin_y_BB: +bskchar "The blackboard-bold letter y"; +beginchar(chars.latin_y_BB,11.5u#,x_height#,desc_depth#); uni "0x1D56A"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +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=.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(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'<u: x5':=lft u;fi +z4'=z3l+(alpha*right_stem-currentbreadth)*unitvector(z1l-z3l); +p0=z1l.a{left}..z1l.c{right}..diag_serif(1l,3l)--z4'; +p1=z4'--z4l; +tim1=xpart(p0 intersectiontimes ((0,y6)--(w,y6))); +filldraw subpath(0,rundy(p0,infinity).zpet) of p0..subpath(rundy(p1,0),1) of p1 + ..{left}z5l..z5'..{right}z5r...z4r---z3l--- + diag_serif(2r,3l)..{right}z2r.c..z2r.a---z2l.a..{right}z2l.c + ..diag_serif(2l,3')---z3'r+oblu*unitvector(z2l-z3'r).. + z3'l+.75oblu*unitvector(z1r-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,4',3',more,)---ifobl(3',4',1r,1l,,)---cycle; +penlabels(1,1',2,2',3,3',4,5); labels(4',6); +math_fit(0,ic#-2u#); +endchar; + +iff known chars.latin_y_SS: +bskchar "The sans-serif letter y"; +beginchar(chars.latin_y_SS,11.5u#,x_height#,desc_depth#); uni "0x1D5D2"; +italcorr x_height#*slant; +adjust_fit(serif_fit#,serif_fit#); +pickup tiny.nib; +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(stem,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'<u: x5':=lft u;fi +z4'=z3l+(alpha*right_stem-currentbreadth)*unitvector(z1l-z3l); +p0=diag_serif(1l,3l)--z4'; +p1=z4'--z4l; +tim1=xpart(p0 intersectiontimes ((0,y6)--(w,y6))); +filldraw subpath(0,rundy(p0,infinity).zpet) of p0..subpath(rundy(p1,0),1) of p1 + ..{left}z5l..z5'..{right}z5r...z4r---z3l--- + diag_serif(2r,3l)...z2 + ...diag_serif(2l,3')---z3'r+oblu*unitvector(z2l-z3'r).. + z3'l+.75oblu*unitvector(z1r-z3'l)---diag_serif(1r,3') + ...z1...cycle; +penlabels(1,1',2,2',3,3',4,5); labels(4',6); +math_fit(0,ic#-1u#); +endchar; + charscription(9u,x_height,0)( oblu:=2oblu; numeric alpha; @@ -6251,13 +9534,61 @@ usechar; acute(100,101); endchar; +iff known chars.latin_z_BB: +bskchar "The blackboard-bold letter z"; +beginchar(chars.latin_z_BB,9u#,x_height#,0); uni "0x1D56B"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +numeric alpha; +lft x1l=u; bot y1l=0; rt x2r=w-u; top y2r=h; +x2r-x2l=x1r-x1l; +alpha=diag_ratio(2,.8cap_stem,y2r-y1l,x2r-x1l); +pos1(alpha*.8cap_stem,0); pos2(alpha*.8cap_stem,0); +pos3(.5beak,80); pos4(.6beak,80); +z3a=z3r+hair*right; z3b=z3r+(stem,-hair+currentbreadth); +x3l=1.3u; top y3r=h; z3c=z3l+(hair-currentbreadth)*dir(angle(z3l-z3)+90); +y2'=y2-hair+currentbreadth; z2'=whatever[z2l,z1l]; +y1'=y1+hair-currentbreadth; z1'=whatever[z2r,z1r]; +bot y4l=0; x4r=w-u; z4b=z4r+(hair-currentbreadth)*dir(angle(z4l-z4)-90); +y4a=y4l+hair-currentbreadth; x4a=.5w; +filldraw z2r---z3a..z3r---z3l..z3c{dir80}..z3b---obl(2',3b,1l)---z1l---z4l +---z4r..{down}z4b...if not bold_face: z4a--- else: {left}fi obl(1',4a,2r)---cycle; +oblu:=f_obl; oblu.more:=2oblu; +infill ifobl(2l,2r,1l,1r,,more)---ifobl(1',1l,2r,2l,,)---cycle; +penlabels(1,2,3,4); labels(1',2',3a,3b,3c,4a,4b,4c); +endchar; + +iff known chars.latin_z_SS: +bskchar "The sans-serif letter z"; +beginchar(chars.latin_z_SS,9u#,x_height#,0); uni "0x1D5D3"; +italcorr x_height#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +oblu:=2oblu; +numeric alpha; +lft x1l=u; bot y1l=0; rt x2r=w-u; top y2r=h; +x2r-x2l=x1r-x1l; +alpha=diag_ratio(2,stem,y2r-y1l,x2r-x1l); +pos1(alpha*stem,0); pos2(alpha*stem,0); +pos3(hair,90); pos4(hair,90); +x3l=1.3u; top y3r=h; +y2'=y2-hair+currentbreadth; z2'=whatever[z2l,z1l]; +y1'=y1+hair-currentbreadth; z1'=whatever[z2r,z1r]; +bot y4l=0; x4r=w-u; +filldraw z2r---z3r+stem*right...z3...z3l+stem*right---obl(2',3l,1l)---z1l + ---z4l+stem*left...z4...z4r+stem*left---obl(1',4r,2r)---cycle; +penlabels(1,2,3,4); labels(1',2'); +endchar; + bskboundary; skal:=.5; charscription(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)( numeric sair; sair=if medieval: vair else: hair fi; pos1(curve,0); pos2(sair,90); pos3(curve,180); pos4(sair,270); -lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h+o; +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; 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); @@ -6282,6 +9613,54 @@ multiply(1.7skal)(curve,hair,vair); usechar shifted (-x1l,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; +iff known chars.numeral_zero_BB: +bskchar "The blackboard-bold numeral 0"; +beginchar(chars.numeral_zero_BB,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x1D7D8"; +italcorr .5h#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +numeric sair; sair=if medieval: vair else: hair fi; +pos1(cap_stem,0); pos2(sair,90); pos3(cap_stem,180); pos4(sair,270); +lft x1l=u; rt x3l=w-u; y1=y3=.5h; .5[x2,x4]=.5[x1,x3]; x2-x4=0; bot y2l=-o; top y4r=h+o; +filldraw z1l{down}..z2l..z3l..z4l..{down}cycle; +infill z1r{up}..z4r..z3r..z2r..{up}cycle; +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); +penlabels(1,2,3,4); +endchar; + +iff known chars.numeral_zero_SS: +bskchar "The sans-serif numeral 0"; +beginchar(chars.numeral_zero_SS,figw(if medieval: 9.5u else: 11u fi),medfig,0); uni "0x1D7E2"; +italcorr .5h#*slant-.25u#; +adjust_fit(0,0); +pickup tiny.nib; +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=0; 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(figwu(if medieval: 9.5u else: 11u fi),medfigu,0)( path p; numeric sair; sair=if medieval: vair else: hair fi; @@ -6353,6 +9732,45 @@ multiply(1.7skal)(curve,hair,vair,serif_o,dig_stem); usechar shifted (-x3,0) scaled skal shifted (u+(HH-skal*fig_height)*slant,HH-skal*fig_height); endchar; +iff known chars.numeral_one_BB: +bskchar "The blackboard-bold numeral 1"; +beginchar(chars.numeral_one_BB,figw(8u),medfig,0); uni "0x1D7D9"; +adjust_fit(0,serif_fit#); +pickup tiny.nib; +pos1(cap_stem,0); pos2(cap_stem,0); +pos3(hair,90); +oblu:=f_obl; +x1=.5w; bot y1=0; x2=x1; top y2=h; +lft x3=u; x4=x1l; +if medieval: + y3=y2-if monofig: 1.5 \\fi hair; y4=y3-.5o; + filldraw one_serif(1)---z2r--z2{dir200}..{left}z3r..z3l---obl(4,3l,1l)--cycle; +else: + y3=.9h-o; y4=y3+o; + path p[]; p1=z3l{right}..z4; p0=z4---one_serif(1); + filldraw subpath(rundy(p0,0),infinity) of p0---z2r{dir200}..{left}z3r.. + subpath(0,rundy(p1,1).zpet) of p1..cycle; +fi +bot z100=(x1l,y1f); +infill ifobl(4,2r,1l,1r,,)---obl(1r,2r,1l)---z1l...obl(100,1f,2l)---cycle; +penlabels(1,2,3); labels(4); +endchar; + +iff known chars.numeral_one_SS: +bskchar "The sans-serif numeral 1"; +beginchar(chars.numeral_one_SS,figw(8u),medfig,0); uni "0x1D7E3"; +adjust_fit(0,serif_fit#-1.5u#); +pickup tiny.nib; +pos1(stem,0); pos2(stem,0); +pos3(hair,90); +oblu:=f_obl; +x1=.5w; bot y1=0; x2=x1; top y2=h; +lft x3=u; x4=x1l; +y3=y2-hair; y4=y3-.5o; z1a=z1l+.75u*up; z1b=z1r+.75u*up; +filldraw z1a..z1..z1b---z2r--z2{dir200}..{left}z3r..z3l---obl(4,3l,1l)---cycle; +penlabels(1,2,3); labels(4); +endchar; + charscription(figwu(if medieval: 9u else: 10u fi),medfigu,0)( path p[]; oblu:=3f_obl; pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos0(vair,-60); @@ -6406,6 +9824,61 @@ filldraw bskrule(10,11,hair,hair); penlabels(10,11); endchar; +iff known chars.numeral_two_BB: +bskchar "The blackboard-bold numeral 2"; +beginchar(chars.numeral_two_BB,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x1D7DA"; +italcorr 2/3h#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; numeric tim[]; oblu:=3f_obl; +pos1(.45[hair,stem],180); pos2(hair,90); pos3(cap_stem,0); pos0(vair,-60); +lft x1r=u; y1=2/3h+hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=.35[x2,x1]; +rt x3r=w-if medieval:1.5\\ fi u; y3=2/3h; lft x4l=u; bot y4l=0; +rt x8=w-u; y8=stem-tiny; y7=-hair; z7=z8+whatever*dir-135; +x6=x7-hair; bot y6=0; +p0:=z4l{dir if medieval: 40 else:20 fi}..{up}z3l; +z4r=(((0,y8)--(w,y8)) intersectionpoint p0)+.5cap_stem*right; +p1:=z3r{down}..{dir-140}z4r; +p2=z4r--z8; +filldraw p0..z2l{left}..z1l..{dir60}z0l..{dir-120}z0r..z1r..{right}z2r.. + subpath(0,rundy(p1,(1,curve)).zpet) of p1..subpath(rundy(p2,(0,curve)),infinity) of p2&z8 + ..{dir(angle(z7-z8)+15)}z7+.25vair*right..z7{up}..z6---cycle; +p100:=p0..{left}z2l; +p101:=z2r{right}..p1; +z100=bsktouch(p100,up,subpath(0,1) of p101,down); +tim100=xpart(p100 intersectiontimes (z100--(x100,y3))); +tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+5))); +z101=bsktouch(subpath(0,1) of p100,2dir-45,p101,2dir135); +tim102=xpart(p100 intersectiontimes (z101--(0,y101))); +tim103=xpart(p101 intersectiontimes (z101--(w,y101))); +oblu:=bbw; +infill subpath(rundy(p101,tim101),rundy(p101,(tim103,.8oblu)).zpet) of p101 + ..subpath(rundy(p100,(tim102,.8oblu)),rundy(p100,tim100).zpet) of p100 + ..cycle; +penlabels(0,1,2,3,4); labels(6,7,8,100,101); +endchar; + +iff known chars.numeral_two_SS: +bskchar "The sans-serif numeral 2"; +beginchar(chars.numeral_two_SS,figw(if medieval: 9u else: 10u fi),medfig,0); uni "0x1D7E4"; +italcorr 2/3h#*slant-.75u#; +adjust_fit(0,0); +pickup tiny.nib; +path p[]; oblu:=3f_obl; +pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos0(hair,-60); +lft x1r=u; y1=2/3h+hair; top y2r=h+o; x2=.5w-hair; y0l=y1-2hair; x0=.35[x2,x1]; +rt x3r=w-if medieval:1.5\\ fi u; y3=2/3h; lft x4l=u; bot y4l=0; +rt x8=w-u; y8=stem-tiny; y7=-hair; z7=z8+whatever*dir-135; +x6=x7-hair; bot y6=0; +p0:=z4l{dir if medieval: 40 else:20 fi}..{up}z3l; +z4r=(((0,y8)--(w,y8)) intersectionpoint p0)+vair*right; +p1:=z3r{down}..{dir-140}z4r; +p2=z4r--z8; +filldraw p0..z2l{left}..z1l..{dir60}z0l..{dir-120}z0r..z1r..{right}z2r.. + subpath(0,rundy(p1,(1,curve)).zpet) of p1..subpath(rundy(p2,(0,curve)),infinity) of p2&z8...(x7,y6)---cycle; +penlabels(0,1,2,3,4); labels(6,7,8); +endchar; + charscription(figwu(9.5u),medfigu,medfigdu)( numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi; path p[]; @@ -6469,6 +9942,87 @@ filldraw bskrule(10,11,hair,hair); penlabels(10,11); endchar; +iff known chars.numeral_three_BB: +bskchar "The blackboard-bold numeral 3"; +beginchar(chars.numeral_three_BB,figw(9.5u),medfig,medfigd); uni "0x1D7DB"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi; +path p[]; +pos1(.45[hair,stem],180); pos2(hair,90); pos3(cap_stem,0); pos4(.45[hair,stem],0); pos0(vair,-60); +pos5(hair,90); pos6(cap_stem,0); pos7(like_hair,270); +lft x1r=1.5u; y1=y3+hair; top y2r=h+o; x2=.5w-hair; y0l=y3-hair; x0=.35[x2,x1]; +rt x3r=w-1.75u; y3=if medieval: 2/3h else: .8h fi; lft x4l=1.5u; +bot y4l=.5(h-d); z4'=(x4l,y4l-like_hair); +x5=.5w; y5=y4+hair; rt x6r=w-u; y6=.5[y4,-d]; +x7=.55[x5,x4]; bot y7r=-d; rt x8r=u; y8=y7+1.25like_stem; +p0=z4l{dir40}..{up}z3l..z2l{left}..z1l..{dir60}z0l; +p1=z0l{dir60}..{dir-120}z0r..z1r..{right}z2r..z3r{down}..{dir-140}z4r..z4'..{dir40}z4l; +p2=z4l..z5r..z6r..z7r..smitko(8,curve)..z7l..z6l..z5l..z4'; +p3=subpath(3,infinity) of p2; +z9=bsktouch(p1,down,p2,up); +tim1-3=xpart(subpath(3,infinity) of p1 intersectiontimes (z9--(x9,y3))); +tim2=xpart(p2 intersectiontimes (z9--(x9,y6))); +(tim3,tim4-3)=p1 intersectiontimes p3; +filldraw p0..subpath(0,rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p2,tim2),rundy(p2,(tim4,f_obl)).zpet) of p2 + ..subpath(tim3,infinity) of p1 + ..cycle; +p100:=subpath(0,2) of p0; +p101:=subpath(3,5) of p1; +p102:=subpath(1,3) of p2; +p103:=subpath(5,infinity) of p2; +z100=bsktouch(p100,up,subpath(0,1) of p101,down); +tim100=xpart(p100 intersectiontimes (z100--(x100,y3))); +tim101=xpart(p101 intersectiontimes (z100--(x100,y2r+5))); +z101=bsktouch(subpath(0,1) of p100,dir-50,p101,dir120); +tim102=xpart(p100 intersectiontimes (z101--(0,y101))); +tim103=xpart(p101 intersectiontimes (z101--(w,y101))); +z102=bsktouch(p102,down,p103,up); +tim104=xpart(p102 intersectiontimes (z102--(x102,y5r+5))); +tim105=xpart(p103 intersectiontimes (z102--(x102,y6))); +z103=bsktouch(p102,bbs*up,p103,down); +tim106=xpart(p102 intersectiontimes (z103--(x103,y7r-u))); +tim107=xpart(p103 intersectiontimes (z103--(x103,y6))); +oblu:=bbw; +infill subpath(rundy(p101,tim101),rundy(p101,tim103).zpet) of p101 + ..subpath(rundy(p100,tim102),rundy(p100,tim100).zpet) of p100 + ..cycle; +infill subpath(rundy(p103,tim107),rundy(p103,tim105).zpet) of p103 + ..reverse subpath(rundy(p102,tim106).zpet,rundy(p102,tim104)) of p102 + ..cycle; +penlabels(0,1,2,3,4,5,6,7,8); labels(4',9,100,101,102,103); +endchar; + +iff known chars.numeral_three_SS: +bskchar "The sans-serif numeral 3"; +beginchar(chars.numeral_three_SS,figw(9.5u),medfig,medfigd); uni "0x1D7E5"; +adjust_fit(0,0); +pickup tiny.nib; +numeric tim[]; oblu:=if bold_face: 2f_obl else: 4f_obl fi; +path p[]; +pos1(.45[hair,stem],180); pos2(hair,90); pos3(curve,0); pos4(.45[hair,stem],0); pos0(hair,-60); +pos5(hair,90); pos6(curve,0); pos7(hair,270); pos8(curve,150); +lft x1r=1.5u; y1=y3+hair; top y2r=h+o; x2=.5w-hair; y0l=y3-hair; x0=.35[x2,x1]; +rt x3r=w-1.75u; y3=if medieval: 2/3h else: .8h fi; lft x4l=1.5u; +bot y4l=.5(h-d); z4'=(x4l,y4l-like_hair); +x5=.5w; y5=y4+hair; rt x6r=w-u; y6=.5[y4,-d]; +x7=.55[x5,x4]; bot y7r=-d; rt x8r=u; y8=y7+1.25like_stem; +p0=z4l{dir40}..{up}z3l..z2l{left}..z1l..{dir60}z0l; +p1=z0l{dir60}..{dir-120}z0r..z1r..{right}z2r..z3r{down}..{dir-140}z4r..z4'..{dir40}z4l; +p2=z4l..z5r..z6r..z7r..{up}z8r..{down}z8l..z7l..z6l..z5l..z4'; +p3=subpath(3,infinity) of p2; +z9=bsktouch(p1,down,p2,up); +tim1-3=xpart(subpath(3,infinity) of p1 intersectiontimes (z9--(x9,y3))); +tim2=xpart(p2 intersectiontimes (z9--(x9,y6))); +(tim3,tim4-3)=p1 intersectiontimes p3; +filldraw p0..subpath(0,rundy(p1,tim1).zpet) of p1 + ..subpath(rundy(p2,tim2),rundy(p2,(tim4,f_obl)).zpet) of p2 + ..subpath(tim3,infinity) of p1 + ..cycle; +penlabels(0,1,2,3,4,5,6,7,8); labels(4',9); +endchar; + charscription(figwu(12u),medfigu,medfigdu)( oblu:=2f_obl; oblu.light:=.5oblu; pos1(dig_stem,0); pos2(dig_stem,0); pos4(hair,90); pos5(stem,30); @@ -6547,6 +10101,56 @@ 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[]; @@ -6590,6 +10194,85 @@ 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); @@ -6628,6 +10311,77 @@ 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); @@ -6657,6 +10411,46 @@ 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]; @@ -6703,6 +10497,103 @@ 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); @@ -6742,19 +10633,92 @@ 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#+punct_fit#, asc_height#, 0); uni "0x003F"; +beginchar(chars.sign_query, 9.5u#, asc_height#, 0); uni "0x003F"; italcorr .5[asc_height#,x_height#]*slant-.25u#; -adjust_fit(0,0); +adjust_fit(punct_fit#,0); pickup tiny.nib; path p[]; -bot z0=(2u+.5dot_size+punct_fit,.5dot_size); dot(0); +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-punct_fit)+punct_fit; top y1r=h+o; -y2''=1/4[h,x_height]; lft x2r=u+punct_fit; +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]]; @@ -6765,6 +10729,126 @@ filldraw z5l---z4'..z4l..z3l{up}..z1l{left}..{dir-70}z2l..z2'..{up}z2r..z2''..{r 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"; @@ -6809,6 +10893,45 @@ filldraw z5l---z4'..z4l..z3l{down}..z1l{right}..{dir110}z2l..z2'..{down}z2r..z2' 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"; @@ -6892,9 +11015,8 @@ p2=z10r{z9l-z1}..z9r..z8r..{z6r-z7-hair*up}z6r; 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:=.75f_obl; fi +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; - |