% feta-nummer.mf % part of LilyPond's pretty-but-neat music font fet_begingroup("nummer") height#:=designsize; %thick#:=height#/4; thick#:=height#/3.9; thin#:=thick#/4; hair#:=thin#/2; kuulleke#:=hair#; %kuulleke#:=0; define_pixels(height,thick,thin,hair); foot_top#:=2thin#; foot_width#:=2thick#+thin#; define_pixels(foot_top,foot_width); define_pixels(kuulleke); def draw_foot(expr xpos) = begingroup; clearxy; penpos1(thick,0); z1=(xpos,foot_top); penpos2(foot_width,0); z2=(x1,0); penpos3(hair,-90); z3r=z2r; penpos4(hair,90); z4l=z2l; z5=(x1,hair/2); fill z1..{right}z1r{down}..{right}z3l..z3r{left}..z5..{left}z4l..z4r{right}..{up}z1l{right}..z1..cycle; endgroup; enddef; fet_beginchar("Numeral 0", "0", "zero") set_char_box(0, 3thick#, 0, height#); penpos1(thin,90); z1r=(w/2,h); penpos2(thick,0); z2r=(w,h/2); penpos3(thin,-90); z3r=(w/2,0); penpos4(thick,180); z4r=(0,h/2); fill z1r..z2r..z3r..z4r..cycle; unfill z1l..tension1.2..z2l..tension1.2..z3l..tension1.2..z4l..tension1.2..cycle; fet_endchar; fet_beginchar("Numeral 1", "1", "one") set_char_box(0, 5/2thick#+thin#, 0, height#); save alpha; alpha=0; penpos1(thick,alpha); z1=(thick+thick/2,height); penpos2(hair,alpha+45); z2=z1l+(1/4sqrt(2)*hair)*dir(alpha-45); penpos3(hair,alpha-45); z3=z1r+(1/4sqrt(2)*hair)*dir(alpha-135); z4=z1+kuulleke*dir(alpha-90); penpos5(thick,0); z5=(x1,foot_top); z6=(0,h/2); save beta; beta=angle(z1l-z6); penpos7(thin,beta-90); z7l=z6; penpos8(thin/cosd(beta),-90); z8l=z1l; penpos9(hair,beta-90); z9r=z8r+(hair/cosd(beta))*(0,-1); save gamma; gamma=angle(length(z1r-z1),+2kuulleke); fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l..z3r{down}..{down}z5r{left}..z5..{left}z5l{up}..{up}z2l..cycle; fill z7l{dir(beta)}..{dir(beta)}z1l..z2r..z9r{up}..z9l{dir(180+beta)}..{dir(180+beta)}z7r..cycle; penlabels(7,8,9); draw_foot(x1); fet_endchar; fet_beginchar("Numeral 2", "2", "two") set_char_box(0, 2thick#+3thin#, 0, height#); clearxy; save alpha; alpha=-50; save beta; beta=75; penpos1(thin,90+beta); z1=(0,0)+(1/2sqrt(2)*thin)*dir(45); penpos3(hair,90+beta); z3=(w,thick)+(1/2sqrt(2)*hair)*dir(-135); penpos2(3/4thick,90+alpha); x2-x1=x3-x2; y2=thick/2; penlabels(1,2,3); fill z1r{dir(beta)}..{dir(alpha)}z2r..{dir(beta)}z3r..z3l{dir(180+beta)}..{dir(180+alpha)}z2l..{dir(180+beta)}z1l..cycle; penpos4(thin,90); z4r=(w/2-thin-hair,2/5h); penpos5(thick-hair,0); z5r=(w-thin,(y4+y6)/2); penpos6(thin,90); z6r=(w/2-thin-hair,h); penlabels(4,5,6); % fill z1l{dir(beta)}..{dir(5)}z4l..{up}z5r..{left}z6r..z6l{right}..z5l{down}..z4r{dir(180+5)}..{dir(180+beta)}z1r..cycle; penpos7(thick,90); z7l=(thick/2,y5-hair); penpos8(thick,0); z8=z7; penlabels(7,8); fill z1l{dir(beta)}..{dir(20)}z4l..{up}z5r..{left}z6r..z8l{down}..z7l{right}..{up}z8r..tension0.75..z6l{right}..z5l{down}..z4r{dir(180+20)}..{dir(180+beta)}z1r..cycle; fet_endchar; fet_beginchar("Numeral 4", "4", "four") set_char_box(0, 5/2thick#+3thin#, 0, height#); save alpha; alpha=0; penpos1(3/2thick,alpha); z1r=(w-3thin,height); penpos2(hair,alpha+45); z2=z1l+(1/4sqrt(2)*hair)*dir(alpha-45); penpos3(hair,alpha-45); z3=z1r+(1/4sqrt(2)*hair)*dir(alpha-135); z4=z1+kuulleke*dir(alpha-90); z5=(thin,1/4height+thin); save beta; beta=angle(z3r-z5); penpos6(thin,-90); z6l=z5; penpos7(thin,-90); y7=y6; x7=w-1/2thin; penpos8(thin,-alpha); z8r=z5; save gamma; gamma=angle(length(z1r-z1),+2kuulleke); fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l..z3r{dir(180+beta)}..{dir(180+beta)}z8r{right}..{right}z7l..z7r{left}..{left}z6r..z8l{dir(beta)}..{up}z2l..cycle; penlabels(1,2,3,4,5,6,7); clearxy; save alpha; alpha=beta; penpos1(thick/cosd(alpha),alpha); % ugh, must be just > foot_width/2! z1r=(w-3thin,height-(thin+hair)/cosd(alpha)); penpos2(hair,alpha+45); z2=z1l+(1/4sqrt(2)*hair)*dir(alpha-45); penpos3(hair,alpha-45); z3=z1r+(1/4sqrt(2)*hair)*dir(alpha-135); z4=z1+kuulleke*dir(alpha-90); % ugh % the angle alpha may just let the hair penposes 3 and 4 % stick-out to the right of the vertical... % penpos5(thick,0); % z5=(x1,foot_top); penpos5(whatever,0); x5r-x5l=x3r-x2l; x5r=x3r; y5=foot_top; save gamma; gamma=angle(length(z1r-z1),+2kuulleke); fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l..z3r{down}..{down}z5r{left}..z5..{left}z5l{up}..{up}z2l..cycle; penlabels(1,2,3,4,5); draw_foot(x5); fet_endchar; fet_beginchar("Numeral 7", "7", "seven") % set_char_box(0, 5/2thick#+thin#, 0, height#); set_char_box(0, 5/2thick#+2thin#, 0, height#); save alpha; alpha=-180; penpos1(3/2thick,alpha); z1r=(thin,0); penpos2(hair,alpha+45); z2=z1l+(1/4sqrt(2)*hair)*dir(alpha-45); penpos3(hair,alpha-45); z3=z1r+(1/4sqrt(2)*hair)*dir(alpha-135); z4=z1+kuulleke*dir(alpha-90); save beta; beta=50; penpos5(thin,90+beta); z5=(w,h)+(1/2sqrt(2)*thin)*dir(-135); save gamma; gamma=angle(length(z1r-z1),+2kuulleke); save delta; delta=12; fill z2r{dir(alpha-gamma)}..z4..{dir(alpha+gamma)}z3l..z3r{dir(beta+delta)}..{dir(beta)}z5r..z5l{dir(180+beta)}..{dir(delta-90)}z2l..cycle; penlabels(1,2,3,4,5); clearxy; save alpha; alpha=-50; penpos1(2thin,90); % z1=(3/2thin,h-thick/2-thin); z1=(3/2thin,h-(thick+thin)/2); penpos3(thin,90+beta); z3=(w,h)+(1/2sqrt(2)*thin)*dir(-135); penpos2(3/4thick,90+alpha); x2-x1=x3-x2; y2=h-thick/2; penpos4(thin,0); z4l=(0,h-thin/2); penpos5(thin,0); z5l=(0,h/2+thin/2); penpos6(4thin,90); z6r=(thin,y1r+thin/2); fill z1r{dir(beta)}..{dir(alpha)}z2r..{dir(beta)}z3r..z3l{dir(180+beta)}..{dir(180+alpha)}z2l..{dir(180+beta)}z1l..z6l{down}..{down}z5r..z5l{up}..{up}z4l..z4r{down}..{down}z6r..{right}cycle; penlabels(1,2,3,4,5,6); fet_endchar; fet_endgroup("nummer")