%
% source file of the Feta (not the Font-En-Tja) music font
%
-% (c) 1997--2002 Jan Nieuwenhuizen <janneke@gnu.org>
+% (c) 1997--2004 Jan Nieuwenhuizen <janneke@gnu.org>
+%
+% These numbers were taken from a part that that the EJE violas played
+% 1997 -- Probably Mendelssohn's ouverture Heimkehr aus der Fremde.
+%
%
% TODO all the invocation of flare_path are weird --
define_pixels(foot_top,foot_width);
define_pixels(kuulleke);
-
-
%
% Yet Another Bulb Routine with smooth inside curve.
%
%
%
-% The basic idea, is to put a really bulb shaped ending at
-% an angle of 45 degrees with the normal ending.
-% the length can be controlled using flare_len and flare_thick.
+% move_away_to = amount left (for 2)
+% turn_to = amount down (for 2 )
+%
def number_flare_path(expr pos,alpha,beta,line,flare,
move_away_to,
- turn_to,
- away_from_start_pos, direction) =
+ turn_to, taille, taille_ratio,
+ direction) =
begingroup;
clearxy;
- save flare_thick, flare_len;
-
- flare_thick= 0.7 flare;
- flare_len = 0.9 * 0.75 flare;
- save taille;
- taille = -0.05 flare;
+% z5 = z2 + 0.43* flare *dir (alpha - 1.5 beta);
+ z4 = (0.75 - taille) [z2r, z2l] + whatever* dir (alpha - beta) ;
+ z4 = (taille_ratio * taille) [z3l, z3r] + whatever* dir(alpha);
penpos1(line,180+beta+alpha);
z1r=pos;
z2r = z1r + move_away_to *dir (alpha) + (line + turn_to) * dir(alpha+beta);
- penpos2(flare_thick, alpha + 0.45 beta);
- penpos3(flare_thick, alpha + 0.5 beta);
-
- z3 = 0.5 [z2l,z2r] + flare_len* dir (alpha + 3/2 beta);
+ z3r = 0.5 [z2l,z2r] + 0.5 *flare *dir(alpha + beta);
- z4 = z2l + taille * dir (alpha);
- penlabels(1,2,3,4);
+ penpos2(flare, alpha );
+ penpos3(flare, alpha + beta);
+ penlabels(1, 2, 3, 4, 5);
pickup pencircle;
save p;
path p;
p := z1r{dir(alpha)}
- .. super_curvelet (z1r, z2r, 0.73, -1)
- .. z2r{dir(180+alpha-beta)}.. z3r{dir(alpha+180)}
- ..z3l{dir(180+alpha+beta)}
+ .. z2r{dir(180+alpha-beta)}
+ .. z3r{dir(alpha+180)}
+ .. z2l{dir(alpha-beta)}
+
+%%% Two versions of the curve: one with z4, the other with z5.
+% .. z5{dir(alpha- beta/2 )}
..z4{dir(180+alpha+beta)}
- .. super_curvelet (z4, z1l, 0.69, 1)
..z1l{dir(alpha+180)};
% draw p ;
if direction = 1:
enddef;
def draw_six =
- set_char_box(0, 2/3height#*widen, 0, height#);
+ set_char_box(0, .68 height#*widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
penpos2(hair,90);
z2=(w/2,y1);
- penpos3(7/8thick,0);
+
+ penpos3 (15/16 thick,0);
% yup, should use the path fract [] "everywhere"
- z3r=(w,1/2[0,y1]);
+ x3r=w;
+ y3r = .5 [y4r, y2r];
penpos4(hair,-90);
z4r=(x2,0);
penpos6(hair,90);
- z6r=(w-flare,h);
- penpos7(7/8thick,180);
- z7r=(0,h/2);
- penpos10(7/8thick,180);
+ x6r = .56 w;
+ y6r = h;
+ penpos7(thick,180);
+
+ x7r=0;
+ y7r = .50 h;
+
+ penpos10(thick,180);
z10r=(0,y3);
penlabels(1,2,3,4,5,6,7,8,9,10,11);
- save t; t=tense;
- fill z7{right}..z2r{right}..tension t..z3r{down}
- ..tension t..z4r{left}
- ..tension t..z7r{up}
- .. super_curvelet(z7r, z6r, 0.76, 1)
- .. flare_path (z6r,0,-90,hair,flare, 1)
-
- ..tension t..z7l{down}..z10l{up}..cycle;
+ save outer_t; outer_t= 0.88;
+ save t ; t := tense;
+ fill
+% draw
+ z7{right}..z2r{right}
+ ..tension outer_t
+ ..z3r{down}
+ ..tension outer_t
+ ..z4r{left}
+% ..tension t
+ ..z7r{up}
+% .. flare_path (z6r,0,-90,hair,flare, 1)
+ .. number_flare_path (z6r, 0,-90,hair,flare,
+ w - x6r -hair/2, .16 h, 0.05, 2.5, 1)
+
+% ..tension t
+ ..z7l{down}
+ .. {down}z10l -- cycle;
unfill z2l{right}..tension t..z3l{down}..tension t
..z4l{left}..tension t..z10l{up}..tension t..cycle;
dot_diam# = 7/8flare#;
define_pixels(dot_diam);
-code := 32;
+code := 31; % , 32
fet_beginchar("Space", "space", "space")
set_char_box(0, space#, 0,height#);
fet_endchar;
code := 47; % 0 = 48
fet_beginchar("Numeral 0", "0", "zero")
-% set_char_box(0, 4/5height#*widen, 0, height#);
- set_char_box(0, 11/15height#*widen, 0, height#);
+ set_char_box(0, 11/15height# * widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
penpos1(thin,90);
fet_endchar;
fet_beginchar("Numeral 2", "2", "two")
- set_char_box(0, 11/15height#*widen, 0, height#);
+ set_char_box(0, 22/30 height#*widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
clearxy;
z1=(0,0)+(1/2sqrt(2)*hair)*dir(45);
penpos3(hair,90+gamma);
z3=(w,thick)+(1/2sqrt(2)*hair)*dir(-135);
- penpos2(thick,90+alpha);
- x2-x1=x3-x2; y2=11/16thick/widen;
- fill z1r{dir(beta)}..{dir(alpha)}z2r..{dir(gamma)}z3r
- ..z3l{dir(180+gamma)}..{dir(180+alpha)}z2l
+ penpos2(thick, 90+alpha -15);
+ x2-x1=x3-x2;
+ y2=10/16 thick/widen;
+ fill z1r{dir(beta)}.. tension 0.9 .. {dir(alpha + 10)}z2r..{dir(gamma)}z3r
+ ..z3l{dir(180+gamma)}..{dir(180+alpha - 5)}z2l
..{dir(180+beta)}z1l..cycle;
penpos4(thick,0);
z4r=(w-thin/2, .71 h);
- penpos5(thin,90);
+ penpos5(hair,90);
y5r = h;
- x5r = 1/2 hair + 1.0 flare + flare_start* flare;
+ x5r = 9/20 w ;
penlabels(1,2,3,4);
penlabels(5,6);
save p;
path p ;
p := z1l{dir(beta)}..tension t..z4r{up}
- .. number_flare_path(z5r,180,90,thin, flare,
+ .. number_flare_path(z5r,180,90,hair, 1.05 flare,
x5r - 1/2 hair,
- .22 h,
- flare_start* flare, 1)
+ .21 h, 0.006, 0.4, 1)
.. z4l{down}..tension t
..{dir(180+beta)}z1r..cycle;
fet_endchar;
+
+%%
+% TODO: should widen a bit. The right edge of the 3 bumps into next glyph in
+% combinations
+%
fet_beginchar("Numeral 3", "3", "three")
set_char_box(0, 2/3height#*widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
penpos1(hair,-90);
- z1l=(17/16thick,h);
+
+% flare_start = 0.25 ;
+ x1l = 36/80 w;
+ y1l = h;
+
+% z1l=(17/16thick,h);
penpos2(7/8thick,180);
- z2l=(w-thick/8,3/4h+thick/16);
+ x2l= w-thick/8;
+ y2l = 3/4h + thick* 3/32;
penpos3(thin,90);
z3=(w/2,h/2+1/8thick);
penpos4(thin,90);
z4=(5/8thick+1/2thin,y3);
penpos5(thick,0);
- z5r=(w,1/4h+thick/16);
+ x5r=w;
+ y5r = 17/64 h + thick/16;
+
penpos6(hair,-90);
- z6r=(9/8thick,0);
+
+ x6r= 37/80 w;
+ y6r = 0;
penpos7(3/2thin,90);
- z7=(x5,y3);
+ x7 = .83 w ;
+ y7 = y3;
penlabels(1,2,3,4,5,6,7);
save alpha; alpha=25;
save t; t=tense;
+ save outer_t; outer_t := 0.93;
pickup pencircle scaled 1;
+
% draw
fill
- flare_path (z1l, 180, 90, hair, 7/8 flare, -1)
- .. super_curvelet(z1l, z2l, 0.76, -1)
- .. z2l{down}..z7r{dir(180+alpha)}
- ..z7l{dir(-alpha)}..z5r{down}..tension t..
-
- flare_path (z6r, 180, -90, hair, flare, 1) ..tension t..
-
- z5l{up}
- ..tension t..z3l{left}..z4l{left}
- ..z4r{right}..z3r{right}..tension t..z2r{up}
- ..tension t.. cycle
+ number_flare_path (z1l, 180, 90, hair, 7/8 flare, x1l - .5 hair,
+ .16 h, 0.06, 1.5, -1)
+ ..tension outer_t
+ .. z2l{down}
+ .. tension outer_t
+ ..z7r{dir(180+alpha)}
+ ..z7l{dir(-alpha)}
+ .. tension outer_t
+ ..z5r{down}
+ .. tension outer_t
+ .. number_flare_path (z6r, 180, -90, hair, flare, x6l,
+ .18 h, 0.06, 1.5, 1)
+
+ .. z5l{up}
+ ..tension t
+ ..z3l{left}
+ ..z4l{left}
+ ..z4r{right}
+ ..z3r{right}
+ ..tension t
+ ..z2r{up}
+ ..tension t
+ .. cycle
;
fet_endchar;
fet_endchar;
fet_beginchar("Numeral 5", "5", "five")
- set_char_box(0, 7/10height#*widen, 0, height#);
+ set_char_box(0, 27/40 height#*widen, 0, height#);
message "w:"&decimal w;
message "h:"&decimal h;
calc_kuulleke(w-thin,0);
+
z1=(w/2+1/8thick,h);
save alpha; alpha=0;
penpos5(thin,0);
penpos8(thin,90);
z8l=(x7r,y7r-1/16thick);
penpos9(thin,90);
- z9=(x11+3/16thick,10/16[y5,y7]);
+
+
+ y9=10/16[y5,y7];
+ x9 = .36 [x8r, x10r] ;
+
penpos10(thick,0);
- z10r=(w,1/2[y9r,y11r]);
+ x10r = w+ hair/2;
+ y10r = 1/2[y9r,y11r];
penpos11(hair,-90);
- z11r=(9/8thick,0);
- penlabels(8,9,10,11);
+ y11r = 0;
+ x11r = .7 [0, x10l];
+
+ penlabels(8,9,10,11, 12);
save beta; beta=45;
- save t; t=tense;
- fill z8r{dir(beta)}..z9r{right}..tension t..z10r{down}
- .. super_curvelet(z10r, z11r, 0.76, 1)
- .. flare_path(z11r,180,-90,hair,flare, 1)
- ..z11l{right}..tension t..z10l{up}..tension t
+
+ save inner_t, outer_t;
+ inner_t= 1.0;
+ outer_t= .85;
+ fill z8r{dir(beta)}..z9r{right}
+ ..tension outer_t
+ ..z10r{down}
+ .. number_flare_path (z11r, 180, -90, hair, flare, x11l,
+ .18 h, 0.06, 1.5, 1)
+ ..z11l{right}
+ ..tension inner_t
+ ..z10l{up}
+ ..tension inner_t
..z9l{left}..z8l{dir(180+beta+10)}..cycle;
fet_endchar;
save alpha; alpha=60;
save beta; beta=alpha-15;
z1=(w/2,h/2+thick/8);
- penpos2(hair,90+180+beta);
+ penpos2(14/8 thin,0);
z2=(w/3,h/2+thin);
penpos3(3/2thin,0);
z3l=(0,h/4+thin/2);
penpos4(hair,90);
- z4l=(x1,0);
+
+ z4l=(x1 ,0);
penpos5(thick,90+90+alpha);
z5=z1+w/4*dir(alpha-90);
penpos6(thick,90+90+alpha);
z6=z1+(w/4-thin/2)*dir(90+alpha);
penpos7(hair,90);
- z7r=(x1,h);
+ z7r= (x1 + .02 w ,h);
penpos8(3/2thin,0);
z8r=(w-thin/2,3/4h+thin/2);
- penpos9(hair,90+180+beta);
+ penpos9( 13/8 thin,0);
z9=(2/3w,h/2);
penlabels(1,2,3,4,5,6,7,8,9);
save t; t=tense;
fet_endgroup("number")
+ligtable "3" : "3" kern 0.1 space#, "0" kern 0.1 space#;
+ligtable "2" : "7" kern 0.15 space#;
+