throughout. Many fixes.
* mf/feta-sleur,slur.mf: remove.
* mf/feta-slag.mf: rewrite.
+2003-12-29 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+ * mf/feta-params.mf (stafflines): fix stafflinethickness at 0.5 pt
+ throughout. Many fixes.
+
+ * mf/feta-sleur,slur.mf: remove.
+
+ * mf/feta-slag.mf: rewrite.
+
2003-12-24 Han-Wen Nienhuys <hanwen@cs.uu.nl>
* stepmake/stepmake/toplevel-targets.make: remove pfa targets
paperSixteen = \paper {
staffheight = 16.0\pt
#(define fonts (scale-font-list (/ 16. 20.)))
-
\include "params-init.ly"
}
\include "paper-init.ly"
staffspace = #(/ staffheight 4.0)
-linethickness = #(/ staffspace 10.0)
+linethickness = 0.5 \pt
outputscale = #(/ staffheight 4.0)
-ledgerlinethickness = #(* 2.0 linethickness)
+
+% don't do full 2x for ledger, otherwise no white is left.
+ledgerlinethickness = #(+ linethickness (/ staffspace 10))
% 2/3 stafflinethickness in 20pt staffheight
% this parameter is independent of the output size.
-blotdiameter = 0.45 \pt
+blotdiameter = 0.35 \pt
interscoreline = 4. \mm
def def_some_vars =
save hs, mb, mt, thin, thick, height, width, cOne, cTwo;
- width = .8staffsize;
+ width = .8(4 staff_space);
height = 2.4staff_space;
% URG. smaller sizes should be wider and fatter
%thin = 0.05staff_space;
enddef;
%fet_beginchar("accTEST", "accTEST", "accTEST")
-% set_char_box(.4staffsize#, .4staffsize#, 0, 2.4staff_space#);
+% set_char_box(.4(4 staff_space#), .4(4 staff_space#), 0, 2.4staff_space#);
% def_some_vars;
% penlabels(10, 11, 12, 13, 14);
% penstroke z10e--z11e{right}..z12e..z13e{left}--z14e;
%fet_endchar;
fet_beginchar("accSB", "accSB", "accSB")
- set_char_box(.4staffsize#, .4staffsize#, 0, 2.4staff_space#);
+ set_char_box(.4(4 staff_space#), .4(4 staff_space#), 0, 2.4staff_space#);
def_some_vars;
def_B(.35width, .7height);
fet_endchar;
fet_beginchar("accBB", "accBB", "accBB")
- set_char_box(.4staffsize#, .4staffsize#, 0, 2.4staff_space#);
+ set_char_box(.4(4 staff_space#), .4(4 staff_space#), 0, 2.4staff_space#);
def_some_vars;
def_B(.35width, .7height);
%
save hip_thickness, foot_thickness;
-hip_thickness# = 1.3 stemthickness#;
-foot_thickness# = 0.95 hip_thickness#;
+
+hip_thickness# = 1.0 stafflinethickness# + 0.069 staff_space#;
+foot_thickness# = 1.2055 stafflinethickness# + 0.06 staff_space#;
%
% Inspired by Adobe Sonata and [Wanske]
%%% Editable values:
-slash_slope := 1.7; % slope of slash. From scm/grob-description.scm. How to auto-copy?
-slt# := 2/3*0.48staff_space#; % thickness of lines. quarter notes get 1.5slt width.
-slh# := 2staff_space#; % height of char.
-%%% Calculated values:
-sxa# := 0; % how much the char exceeds the boundingbox horizontally:
+% slope of slash. From scm/grob-description.scm. How to auto-copy?
+slash_slope := 1.7;
- % Width of hor. pen - with thanks to Pythagoras
-slxt# := sqrt(slt#*slt#+(slt#/slash_slope)*(slt#/slash_slope));
-slw# := slh#/slash_slope; % width of sloping part of slash:
+% thickness of lines. quarter notes get 1.5slt width.
+slash_thick# := 2/3*0.48staff_space#;
-define_pixels(slt,slh,sxa,slxt,slw);
+define_pixels(slash_thick);
+def draw_slash(expr hwid_hash) =
+ set_char_box (0, staff_space# / slash_slope + hwid_hash,
+ staff_space#/2 + stafflinethickness#/2,
+ staff_space#/2 + stafflinethickness#/2);
-%
-%
-% UUGGGH! FIXME -- get rid of those sharp corners.
-%
-%
-%
+ clearxy;
+ pickup pencircle scaled blot_diameter;
+
+ bot y1 = - d;
+ top y2 = h;
+ lft x1 = 0;
+ lft x2 = staff_space / slash_slope;
+
+ rt x3 = w;
+ y3 = y2;
+ y4 = y1;
+ x3- x2 = x4 - x1;
+
+ filldraw z1 --- z2 --- z3 --- z4 --- cycle;
+
+ if hwid_hash > 2 slash_thick#:
+ save th;
+
+ th = slash_thick - blot_diameter;
+ y6 = y7;
+ y5 = y8;
+ y3 - y7 = th;
+ y5 - y1 = th;
+ z6 - z5 = whatever * (1, slash_slope);
+ z8 - z7 = whatever * (1, slash_slope);
+
+ z5 = z1 + whatever * (1, slash_slope) + (th, 0);
+ z8 = z4 + whatever * (1, slash_slope) + (-th, 0);
+
+ unfill
+ z5 -- z6 -- z7 -- z8 -- cycle;
+ fi
+ labels (range 1 thru 10);
-def draw_slash(expr hwid_hash) =
- wid# := slw#+2slxt#+hwid_hash;
- set_char_box(0,wid#-2sxa#,slh#/2,slh#/2);
- define_pixels (wid#);
- pickup penrazor scaled slxt;
- draw (-b+slxt/2-sxa,-d) -- (-b+slxt/2+slw-sxa,h);
- draw (w-slxt/2-slw+sxa,-d) -- (w-slxt/2+sxa,h);
- pickup penrazor scaled slt rotated 90;
- draw (-b+slxt-sxa,-d+slt/2) -- (w-slw+sxa,-d+slt/2);
- draw (-b+slw-sxa,h-slt/2) -- (w-slxt+sxa,h-slt/2);
enddef;
+
+
+
fet_beginchar("Whole slashhead","0slash","wholeslashhead")
- draw_slash(staff_space#);
+ draw_slash(2 slash_thick# + 0.5 staff_space#);
fet_endchar;
fet_beginchar("Half slashhead","1slash","halfslashhead")
- draw_slash(0.6staff_space#);
+ draw_slash(2 slash_thick# + 0.15 staff_space#);
fet_endchar;
fet_beginchar("Quart slashhead","2slash","quartslashhead")
- draw_slash(-slxt#/2);
+ draw_slash(slash_thick#);
fet_endchar;
% thick is the distance between the two parallel lines in the cross (distance between centres of lines)
input feta-macros;
-make_pen_stack;
-make_picture_stack;
input feta-params;
font_x_height staff_space#;
save hair, norm, reduced_ss, right_edge;
reduced_ss#=staff_space#*reduction;
norm#:=2/3reduced_ss#;
- hair#:=1/6norm#;
+ hair#:=0.06 reduced_ss# + 0.5 stafflinethickness# ;
right_edge# = 15/4norm#+2hair#;
z3=(((right_edge -xoff)/2)+xoff,2hair);
penpos4(hair,0);
- z4=(xoff+1/2norm+1/2hair,reduced_ss-hair);
+ z4=(xoff+1/2norm+1/2hair, reduced_ss - stafflinethickness - .2 hair);
penpos5(4hair,0);
z5=(xoff+5/4hair,0);
define_pixels(reduced_ss);
pair downstroke_dir, center;
- thinness = 1.4 stafflinethickness;
+ thinness = 0.1 staff_space + 0.4 stafflinethickness;
downstroke_dir = unitvector (14, -75);
downstroke_angle = angle downstroke_dir;
breapth_factor = 21.0 /14;
inner_thick_end = 45;
inner_start_angle = downstroke_angle - 43;
- thickness = .4 reduced_ss;
+ thickness = .3 reduced_ss + 1 stafflinethickness;
thinnib = thinness;
center := (1.0 * breapth_factor* reduced_ss, 0);
save upward_swoosh_angle;
- upward_swoosh_angle =130 ;
+ upward_swoosh_angle = 132;
penpos7(thickness, upward_swoosh_angle);
penpos5(thickness, upward_swoosh_angle);
z10 = .5 [z10l, z10r];
- z11 = center + whatever * downstroke_dir + ( .05 reduced_ss, 0);
+ z11 = center + whatever * downstroke_dir + ( .00 reduced_ss, 0);
penpos1(thinnib, inner_start_angle);
penpos2(thickness, 90);
save lipje;
pair lipje;
lipje= .5 [z9l, z9r] + .25 ((z9r- z9l) rotated -90);
- penpos13(2 thinnib, 180);
+ penpos13(thinnib + 0.14 staff_space, 180);
pickup pencircle scaled 1;
.. z4l{left}
.. z5l{up}
.. z7l{up}
- %.. z8l
.. tension 1.2
.. z9l -- lipje
--z9r % {dir (downstroke_angle+ 0)}
.. tension 0.8
- %.. z8r
.. z7r{down} .. z5r{down} .. z4r{right}
.. z3r .. z2r{left} ..
tension .95 ..
p := z9 .. z10{down}
.. z6
- .. (.52 [z4, z3])
- .. z11{down}
+ .. z11{dir (-95) }
.. z12{dir(bot_angle)}
.. z13{up}
;
z11r{dir(start_angle)}
.. z12r{dir(bot_angle)}
- ..new_bulb (z13r, 0.45 reduced_ss, 0.38 reduced_ss, 3 stafflinethickness, 1, -1) {down}
+ ..new_bulb (z13r, 0.45 reduced_ss, 0.38 reduced_ss, thinnib
+ + .15 staff_space
+ , 1, -1) {down}
% .. tension 0.98
.. z12l{-dir (bot_angle)}
endgroup
enddef;
+
+pi:=3.14159;
staff_space#:=staffsize#/(stafflines-1);
-% URG!
-%font_x_height staff_space# ;
-%
-% [D.K.Roush & J.S.Gourlay] say this should be 0.072
-% We know better
-% FIXME: generally, the "blackness" of most chars depends on this.
-% these dimensions should be independent.
-stafflinethickness#:=0.1 staff_space#;
+% measuring on pocket scores turns out: stafflinethickness is
+% independent on staff size, and generally 0.5 pt.
+stafflinethickness# :=0.5 pt#;
stemthickness# := 1.3 stafflinethickness#;
ledgerlinethickness# := 2 stafflinethickness#;
blot_diameter# := 1/vppp;
fi
define_pixels(blot_diameter);
+
+
pedbeta = 25;
penh#=0.7stafflinethickness#;
-penw#=4penh#;
-%penw#=penh#;
+
+penw# = 2penh# + 0.14 staff_space#;
+
define_pixels (penh,penw);
pedalh# = 2staff_space#;
% code values for own pedal font commented out
% code := 41; % * = 42
-def draw_asterisk_bulb (expr w, h, i) =
- begingroup;
- clearxy;
- save bulb, p;
+fet_beginchar("Pedal asterisk", "*", "pedalasterisk")
+ set_char_box(0, 7/9pedalh#, 0, pedalh#);
+ z0 = (1/2w, h - 1/2w);
+ save bulb, p, radius, thin;
path p;
- bulb = 4/3penw;
+
+ thin = 0.8 stafflinethickness;
+
+ bulb + 2 radius = w;
+ 0.9 thin + bulb = (radius * pi * 2) / 8;
pickup pencircle scaled penh;
penpos 1 (bulb, 180);
penpos 2 (bulb, 0);
- penpos 3 (penh, 0);
- penpos 4 (penw, 0);
+ penpos 3 (thin, 0);
- z0 = (1/2w, h - 1/2w);
- z1 = (1/2w, h-1/2bulb);
+ z1 = z0 + (0,radius);
z2 = z1;
- z3 = (x1, y1-penw);
- z4 = (x1, y3-2penh);
+
+ save inner_r ;
+ inner_r = .45 radius ;
+
+ z4l = z0 + inner_r * dir (90 + 360/16);
+ z4r = z0 + inner_r * dir (90 - 360/16);
+
+ z4 = .5 [z4l,z4r];
+ z3 = .75 [z1,z4];
+
penlabels (1,2,3,4);
-% penstroke z1e{up}..z2e{down}..z3e{down}..z4e;
- p = z1l{up}..z2l{down}..z3l{down}..z4l..z4r
- ..z3r{up}..z2r{up}..z1r{down}..cycle;
- p := p rotatedaround (z0, 360/8i);
- fill p;
- endgroup;
- enddef;
-fet_beginchar("Pedal asterisk", "*", "pedalasterisk")
- set_char_box(0, 7/9pedalh#, 0, pedalh#);
- z0 = (1/2w, h - 1/2w);
- for i = 0 upto 7:
- draw_asterisk_bulb (w, h, i);
- pickup pencircle scaled penw;
- undraw z0;
- endfor
+ %% what is empty path?
+ p = z3r{up} .. z1l{up}..z2l{down}..z3l{down} .. z4l{dir (180 + 360/16)};
+ for i = 1 upto 7:
+ p := p ... ((z3r{up}.. z1l{up}..z2l{down}..z3l{down}..z4l{dir (180 + 360/16)})
+ rotatedaround (z0, 360/8i));
+ endfor
+
+ p := p .. cycle;
+ fill p;
+ pickup pencircle scaled (7/8 inner_r);
+ undraw z0;
fet_endchar;
% skip + and ,
radius# = 1.25 staff_space#;
crook_thinness# = 1.5stafflinethickness#;
- crook_fatness# = 4 stafflinethickness#;
+ crook_fatness# = 0.25 staff_space# + 1.5 stafflinethickness#;
radius# + crook_fatness#/2 = h#;
radius# + crook_thinness#/2 = w#;
def draw_short_fermata =
save fat_factor, thinness, dot_radius;
set_char_box(staff_space#, staff_space#, 0, 2.2 staff_space#);
- dot_radius# = 8/3*stafflinethickness#;
+
+ dot_radius# = 0.133 staff_space# + 1.33 stafflinethickness#;
define_pixels(dot_radius)
fat_factor = .11;
wd# = 2.5 staff_space#;
stemthick = 1.5 stafflinethickness;
- beamheight = 4 stafflinethickness;
- dot_radius# = 8/3*stafflinethickness#;
+ beamheight = 0.3 staff_space+ stafflinethickness;
+ dot_radius# = 0.133 staff_space#+ + 1.333 *stafflinethickness#;
set_char_box(wd#/2, wd#/2, 0, 3/2 staff_space#);
draw_rounded_block((-b, h-beamheight), (w, h), blot_diameter);
save ibeamheight, obeamheight;
save ihwd, ohwd, iht, oht; % inner/outer half_width/height
save stemthick, dot_radius;
- define_pixels(ihwd, ohwd, iht, oht, dot_radius)
+ define_pixels(ihwd, ohwd, iht, oht)
ihwd# = 1.0 staff_space#;
ohwd# = 1.5 staff_space#;
iht# = 0.9 staff_space#;
oht# = 1.6 staff_space#;
+
stemthick = 1.5 stafflinethickness;
- ibeamheight = 3 stafflinethickness;
- obeamheight = 5 stafflinethickness;
- dot_radius# = 8/3*stafflinethickness#;
+ ibeamheight = 0.3 staff_space;
+ obeamheight = 0.5 staff_space;
+ dot_radius = ((iht - ibeamheight) * 4/10) ;
+
set_char_box(ohwd#, ohwd#, 0, oht#);
draw_rounded_block((-ohwd, oht-obeamheight), (ohwd, oht), blot_diameter);
save thin, height, width, thick;
height# = 5/4 width#;
height# = staff_space#;
- thin = 1.2 stafflinethickness;
- thick = 2 thin;
set_char_box(width#/2, width#/2, height#/2, height#/2);
-
+ define_pixels (height,width)
+
+ thin = .6 stafflinethickness + 0.06 staff_space;
+ 2 thick + 0.5 (height - 2 thin) = width;
+
penpos1(thick, 0);
penpos2(thin, 90);
z1r = (w, 0);
set_char_box(.9 staff_space#, .9 staff_space#, .5 staff_space#, .5 staff_space#);
save thickness, diminish;
- thickness = 3/2 stafflinethickness;
+ thickness = 0.05 staff_space + stafflinethickness;
pickup pencircle scaled thickness;
% prevent blobs at crossing lines
y2 = .25 thickness* diminish;
rt z4 = (w,0);
- x3 =0;
+ x3 = - stafflinethickness + 0.1 staff_space;
z3 = whatever [z1, z4];
penpos2(thickness*(2 - diminish)/2 , 90);
def draw_staccatissimo =
save radius, height;
height# = .8 staff_space#;
- radius# = 2 stafflinethickness#;
+ radius# = stafflinethickness# + .1 staff_space#;
define_whole_pixels(radius);
define_pixels(height);
save thin, height, width, thick;
height# = 5/4 width#;
height# = staff_space#;
- thin = 1.2 stafflinethickness;
- thick = 1.4 thin;
+ thin = .6 stafflinethickness + 0.06 staff_space;
set_char_box(width#/2, width#/2, height#/2, height#/2);
+ define_pixels (width,height);
+ 2 thick + 0.6 (height - 2 thin) = width;
penpos1(thick, 0);
penpos2(thin, 90);
rt x2 = w;
top y2 = h;
- z3 = 0.6 [z2, z1];
+ z3 = whatever [z2, z1];
+ y3 = 0.6 [y2, y1] + thickness;
+
penpos3(thickness, 0);
penpos4(thickness * diminish, 0);
x4r = thickness/2;
wd# = 35/16 staff_space#;
ht# = 18/17 staff_space#;
- darkness = 1.20 stafflinethickness;
+ darkness = 0.3 stafflinethickness + 0.09 staff_space;
set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);
fet_beginchar("Reverse turn","reverseturn","reverseturn")
draw_turn;
currentpicture := currentpicture yscaled -1;
- penlabels(5,6,7);
- penlabels(2,3,4);
fet_endchar;
fet_beginchar("Turn","turn","turn")
draw_turn;
-
- penlabels(5,6,7);
- penlabels(1,2,3,4);
+ penlabels(1,2,3,4,5,6,7);
fet_endchar;
ex# = 1.4 staff_space#;
kerning# = .60 ex#;
start_nib_angle = 20;
- bulb_size = 0.70;
+ bulb_size = 0.80;
define_pixels(ex, ascender_extra, ascender, kerning);
t_overshoot = 0.03 ex;
t_width = 1.9 t_fatness;
r_fatness = 0.78 fatness;
uitschieter = 0.48 ex;
- hair_thick = blot_diameter;
- r_flare = 0.45 r_fatness;
+ hair_thick = stafflinethickness;
+ r_flare = .5 hair_thick + 0.25 r_fatness;
r_width = 2 r_fatness + 0.25 kerning;
slant = .2;
set_char_box(.85 staff_space# , .85 staff_space#, 0,ascender#);
- penpos11(1/4 r_fatness, -4);
+ penpos11(hair_thick, -4);
z11r = z9r;
z13l = (x9l + r_width, y11 - stafflinethickness );
penpos13(r_flare, 180);
- z15 = z13r - (bulb_size * r_fatness,0);
+ z15 = z13r - ( bulb_size * r_fatness,0);
z14 = 0.5 [z13l, z15] - (0,bulb_size* r_fatness);
z16 = 0.5 [z13l, z15] + (0,bulb_size* r_fatness);
draw z1..z2..z3..z4..cycle;
fet_endchar;
+%%
+%
+%TODO: ARGRGHGH code dup.
+%
+%
+
fet_beginchar("Segno", "segno", "segno")
save thin, thick, ball_diam, darkness, pointheight;
save wd, ht, thick_nibangle, ball_nib_thick;
ht# = 3 staff_space#;
wd# = 2 staff_space#;
- darkness = 1.20 stafflinethickness;
+ darkness = .08 staff_space + 0.4 stafflinethickness;
set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);
fet_endchar;
fet_beginchar("Coda", "coda", "coda")
- save thin, thick, codawidth, codaheight;
- thin# = 1.2 stafflinethickness#;
- thick# = 3.5 stafflinethickness#;
+ save stickout, thin, thick, codawidth, codaheight;
+
+ stickout# = 0.35 staff_space#;
codawidth# = 2/3 staff_space#;
codaheight# = 1 staff_space#;
- define_pixels(thin, thick, codawidth, codaheight);
- set_char_box(codawidth#+thick#, codawidth#+thick#,
- codaheight#+thick#, codaheight#+thick#);
+ set_char_box(codawidth#+stickout#, codawidth#+stickout#,
+ codaheight#+stickout#, codaheight#+stickout#);
+
+ define_pixels(codawidth, codaheight);
+ thin = 1.2 stafflinethickness;
+ 0.1 (codaheight - 2 thin) = (codawidth - 2 thick);
penpos1(thick,0);
penpos2(thin,-90);
fet_beginchar("Varied Coda", "varcoda", "varcoda")
save thin, thick, codawidth, codaheight;
thin# = 1.2 stafflinethickness#;
- thick# = 3.5 stafflinethickness#;
+ thick# = 1.0 stafflinethickness# + 0.25 staff_space#;
codawidth# = 2/3 staff_space#;
codaheight# = 1 staff_space#;
define_pixels(thin, thick, codawidth, codaheight);
thick#:=1/24designsize;
define_blacker_pixels(thick);
-rthin:=1/8*staff_space;
+rthin:= 0.075 *staff_space + 0.5 stafflinethickness;
rthick:=2thick+rthin;
def draw_arpeggio =
% this file is included by feta-scripts.mf
-tfat := 1/2;
-%twidth# := 0.5staff_space#;
-%theight# := 0.55staff_space#;
-% tthin# := stafflinethickness#;
-tthin# := 1.6stafflinethickness#;
+trill_thin# = 0.1 staff_space# + 0.6 stafflinethickness#;
+trill_thick# = 1/2 staff_space#;
+trill_width# = 5/12 staff_space#;
+trill_height# = 1/2staff_space#;
+trill_overlap# = 1/6 staff_space#;
-twidth# := 2/3staff_space#;
-theight# := 1/2staff_space#;
+pair trill_ne;
+trill_ne := unitvector ((6,9));
-% uhg/ uhuh?
-% toverlap# := tfat*twidth#+tthin#;
-toverlap# := tfat*twidth#+0.45tthin#;
-define_pixels(twidth,theight,tthin,toverlap);
+define_pixels (trill_thick, trill_thin,
+ trill_width, trill_overlap, trill_height);
-def draw_trillelement =
- save x, y;
- pickup pencircle scaled tthin;
+%
+% the trill element sticks out on both the left and right side
+% out of the normal bbox, so you can glue them together easily.
+%
+def draw_trillelement (expr startx) =
+begingroup
+ clearxy;
+ save x, y, p;
+
+ pickup pencircle scaled trill_thin;
- lft x1 = -twidth;
-% x3 = -1/3*twidth;
- x3 = -0.3*twidth;
- top y3 = theight;
+ x1 = - trill_width;
+ y1 = 0;
+ z3 = whatever * trill_ne + z1;
+ top y3 = trill_height;
+ z2 = z3 - (trill_thick - trill_thin) * trill_ne;
- z3 - z1 = whatever * (0.5twidth, theight);
- z2 = tfat[z3, z1];
+ z4 = z1 - trill_ne * trill_overlap;
path p;
- p = z3 -- z2 -- z1 -- z2;
+ p = z3 -- z2 -- z4 -- z2;
p := p -- (p scaled -1) -- cycle;
- filldraw p;
- labels(1,2,3);
+ %pickup pencircle scaled 2;
+ filldraw (p shifted (startx + trill_width,0)) ;
+ %draw p;
+ labels(1,2,3,4);
+endgroup;
enddef;
-def draw_trill_two =
- draw_trillelement;
- currentpicture := currentpicture shifted (-2*twidth+toverlap, 0);
- draw_trillelement;
- currentpicture := currentpicture shifted (twidth-0.5toverlap, 0);
-enddef;
-def draw_trill_three =
- draw_trillelement;
- currentpicture := currentpicture shifted (-2*twidth+toverlap, 0);
- draw_trillelement;
- currentpicture := currentpicture shifted (-2*twidth+toverlap, 0);
- draw_trillelement;
- currentpicture := currentpicture shifted (2twidth-toverlap, 0);
-enddef;
-def draw_trill_four =
- draw_trillelement;
- currentpicture := currentpicture shifted (-2*twidth+toverlap, 0);
- draw_trillelement;
- currentpicture := currentpicture shifted (-2*twidth+toverlap, 0);
- draw_trillelement;
- currentpicture := currentpicture shifted (-2*twidth+toverlap, 0);
- draw_trillelement;
- currentpicture := currentpicture shifted (3twidth-1.5toverlap, 0);
-enddef;
-
-def draw_mordent(expr a) =
- pickup pencircle scaled tthin;
- save x, y;
- top y1 = 4/3theight;
- x1 = x2 = a;
- y2 = - y1;
- draw z1 -- z2;
-enddef;
fet_beginchar("trilelement", "trilelement", "trilelement")
-% set_char_box(twidth#, twidth#, theight#, theight#);
- set_char_box(twidth#, twidth#-toverlap#, theight#, theight#);
- draw_trillelement;
+ set_char_box(trill_width#, trill_width#,
+ trill_height#, trill_height#);
+ draw_trillelement(-trill_width);
fet_endchar;
fet_beginchar("prall", "prall", "prall")
- trills := 2;
- set_char_box(trills*twidth#-0.5toverlap#, trills*twidth#-0.5toverlap#, theight#, theight#);
- draw_trill_two;
+ set_char_box(2 trill_width#, 2 trill_width#,
+ trill_height#, trill_height#);
+ draw_trillelement(-2 trill_width);
+ draw_trillelement(0);
fet_endchar;
fet_beginchar("mordent", "mordent", "mordent")
- trills := 2;
- set_char_box(trills*twidth#-0.5toverlap#, trills*twidth#-0.5toverlap#, 4/3*theight#, 4/3*theight#);
- draw_trill_two;
- draw_mordent(0);
+ set_char_box(2 trill_width#, 2 trill_width#,
+ 4/3 trill_height#, 4/3 trill_height#);
+ draw_trillelement(-2 trill_width);
+ draw_trillelement(0);
+
+ pickup pencircle scaled trill_thin;
+ top y1 = h;
+ bot y2 = -d;
+ x1 = x2 ;
+ x2 = 0;
+ draw z1 -- z2;
fet_endchar;
-
-% in modern typesetting, i've seen these double symbols implemented
-% as three trills rather than the actual double four [gerou and lusk].
-% it looks nicer and i don't think it introduces ambiguity.
-% would like to have more references -- jcn.
-
fet_beginchar("prallprall", "prallprall", "prallprall")
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
- draw_trill_three;
+ set_char_box(3 trill_width#, 3 trill_width#,
+ trill_height#, trill_height#);
+ draw_trillelement(-3 trill_width);
+ draw_trillelement(-1 trill_width);
+ draw_trillelement(1 trill_width);
fet_endchar;
fet_beginchar("prallmordent", "prallmordent", "prallmordent")
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, 4/3*theight#, 4/3*theight#);
- draw_trill_three;
- draw_mordent(twidth-0.5toverlap);
-fet_endchar;
-input feta-sleur;
+ set_char_box(3 trill_width#, 3 trill_width#,
+ 4/3 trill_height#, 4/3trill_height#);
+ draw_trillelement(-3 trill_width);
+ draw_trillelement(-1 trill_width);
+ draw_trillelement(1 trill_width);
+
+ pickup pencircle scaled trill_thin;
+ top y1 = h;
+ bot y2 = -d;
+ x1 = x2 ;
+ x2 = trill_width;
+ draw z1 -- z2;
+fet_endchar;
-%
-% URG. The attached slurs look weird, and discontinuous in their connection to the
-% main part. --hwn
+save remember_pic;
+picture remember_pic;
fet_beginchar("upprall", "upprall", "upprall")
-% trills := 4;
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
-% draw_slur(-2twidth#,-2theight#,0,-1);
-% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
- draw_slur(0,-2theight#,0,-1);
-% currentpicture := currentpicture shifted (-0.5w+1.3tthin,-tfat*theight+1.5tthin);
- currentpicture := currentpicture shifted (-0.5w+1.65tthin,-tfat*theight+1.15tthin);
-% draw_trill_four;
- draw_trill_three;
-fet_endchar;
-
-fet_beginchar("downprall", "downprall", "downprall")
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
-% draw_slur(-2twidth#,2theight#,0,1);
- draw_slur(0,2theight#,0,1);
-% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
- currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.5tthin);
- draw_trill_three;
+ set_char_box(3 trill_width#, 3 trill_width#,
+ trill_height#, trill_height#);
+ draw_trillelement(-3 trill_width);
+ draw_trillelement(-1 trill_width);
+ draw_trillelement(1 trill_width);
+
+
+ z1 = (- b,0) - trill_overlap * trill_ne ;
+ z4 = z1 + (0, - 2 trill_height);
+ labels (1,4);
+ draw z1{-trill_ne} .. z4{trill_ne yscaled -1};
+ remember_pic := currentpicture ;
fet_endchar;
fet_beginchar("upmordent", "upmordent", "upmordent")
-% trills := 4;
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, 4/3*theight#, 4/3*theight#);
-% draw_slur(-2twidth#,-2theight#,0,-1);
-% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
- draw_slur(0,-2theight#,0,-1);
-% currentpicture := currentpicture shifted (-0.5w+1.3tthin,-tfat*theight+1.5tthin);
- currentpicture := currentpicture shifted (-0.5w+1.65tthin,-tfat*theight+1.15tthin);
-% draw_trill_four;
- draw_trill_three;
- draw_mordent(twidth-0.5toverlap);
+ set_char_box(3 trill_width#, 3 trill_width#,
+ trill_height#, trill_height#);
+
+ currentpicture := remember_pic;
+
+ pickup pencircle scaled trill_thin;
+ top y1 = h;
+ bot y2 = -d;
+ x1 = x2 ;
+ x2 = trill_width;
+ draw z1 -- z2;
fet_endchar;
-fet_beginchar("downmordent", "downmordent", "downmordent")
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, 4/3*theight#, 4/3*theight#);
-% draw_slur(-2twidth#,2theight#,0,1);
- draw_slur(0,2theight#,0,1);
-% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
- currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.5tthin);
- draw_trill_three;
- draw_mordent(twidth-0.5toverlap);
+fet_beginchar("pralldown", "pralldown", "pralldown")
+ set_char_box(3 trill_width#, 3 trill_width#,
+ trill_height#, trill_height#);
+ currentpicture := remember_pic xscaled -1;
fet_endchar;
-fet_beginchar("lineprall", "lineprall", "lineprall")
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, 4*theight#);
- pickup pencircle scaled tthin;
- draw (-0.5w+tthin,-tfat*theight+0.5tthin) -- (-0.5w+tthin,h);
- draw_trill_three;
+fet_beginchar("downprall", "downprall", "downprall")
+ set_char_box(3 trill_width#, 3 trill_width#,
+ trill_height#, trill_height#);
+ remember_pic := currentpicture;
+ draw_trillelement(-3 trill_width);
+ draw_trillelement(-1 trill_width);
+ draw_trillelement(1 trill_width);
+
+
+ z1 = (- b,0) - trill_overlap * trill_ne ;
+ z4 = z1 + (0, 2 trill_height);
+ labels (1,4);
+ draw z1{trill_ne xscaled -1} .. z4{trill_ne};
+ remember_pic := currentpicture ;
+
fet_endchar;
-fet_beginchar("pralldown", "pralldown", "pralldown")
-% trills := 4;
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
-% draw_slur(-2twidth#,-2theight#,0,-1);
-% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
- draw_slur(0,-2theight#,0,-1);
-% currentpicture := currentpicture shifted (-0.5w+1.3tthin,-tfat*theight+1.5tthin);
- currentpicture := currentpicture shifted (-0.5w+1.65tthin,-tfat*theight+1.15tthin);
-% draw_trill_four;
- draw_trill_three;
- currentpicture := currentpicture xscaled -1;
+fet_beginchar("downmordent", "downmordent", "downmordent")
+ set_char_box(3 trill_width#, 3 trill_width#,
+ 4/3 trill_height#, 4/3trill_height#);
+
+ currentpicture := remember_pic;
+
+ pickup pencircle scaled trill_thin;
+ top y1 = h;
+ bot y2 = -d;
+ x1 = x2 ;
+ x2 = trill_width;
+ draw z1 -- z2;
fet_endchar;
fet_beginchar("prallup", "prallup", "prallup")
- trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
-% draw_slur(-2twidth#,2theight#,0,1);
- draw_slur(0,2theight#,0,1);
-% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
- currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.5tthin);
- draw_trill_three;
- currentpicture := currentpicture xscaled -1;
+ set_char_box(3 trill_width#, 3 trill_width#,
+ trill_height#, trill_height#);
+ currentpicture := remember_pic xscaled -1;
+fet_endchar;
+
+
+fet_beginchar("lineprall", "lineprall", "lineprall")
+ set_char_box(3 trill_width#, 3 trill_width#,
+ trill_height#, 4trill_height#);
+ remember_pic := currentpicture;
+ draw_trillelement(-3 trill_width);
+ draw_trillelement(-1 trill_width);
+ draw_trillelement(1 trill_width);
+
+
+ z1 = (- b,0) - trill_overlap * trill_ne ;
+ z4 = z1 + (0, h);
+ labels (1,4);
+ draw z1 -- z4;
fet_endchar;
+
+++ /dev/null
-%
-% feta-sleur.mf -- implement runtime MF slurs
-%
-% source file of LilyPond's pretty-but-neat music font
-%
-% (c) 1997--2003 Jan Nieuwenhuizen <janneke@gnu.org>
-% & Han-Wen Nienhuys <hanwen@cs.uu.nl>
-%
-% see Documentation/fonts.tex
-
-% mode_setup;
-
-%% staffsize#=16pt#;
-% staff_space#:=staffsize#/4;
-% stafflinethickness#:=0.1staff_space#;
-
-pi:=3.14159;
-
-def atan(expr x) =
- (angle(1,x)*pi/180)
- enddef;
-
-
-sleur_pen#:=stafflinethickness#;
-slurheightlimit#:=staffsize#/2;
-slurthick#:=1.8stafflinethickness#;
-
-define_pixels(staffsize,staff_space,stafflinethickness);
-define_pixels(sleur_pen,slurheightlimit,slurthick);
-
-sluralpha:=2slurheightlimit#/pi;
-slurratio:=1/3;
-slurbeta:=pi*slurratio/2slurheightlimit#;
-
-def draw_slur(expr dxs,dys,hs,d) =
- save x, y;
- save b, dx, dy, h, indent;
- dx#:=dxs*1pt#;
- dy#:=dys*1pt#;
- h#:=hs*1pt#;
- define_pixels(dx,dy);
- b#:=length(dx#,dy#);
- indent#:=sluralpha*atan(slurbeta*b#);
- define_pixels(b,h,indent);
- height:=(indent+h)*d;
- z1=(0,0);
- z2=(b,0);
- z3=(indent,height);
- z4=(b-indent,height);
- z5=z4-(0,d*slurthick);
- z6=z3-(0,d*slurthick);
- path boogje;
- boogje=z1..controls z3 and z4..z2..controls z5 and z6..cycle;
- boogje:=boogje rotated angle(dxs,dys);
- pickup pencircle scaled sleur_pen;
- filldraw boogje;
-enddef;
-
-
input feta-bolletjes;
%input feta-banier;
+%input feta-slag;
%input feta-eindelijk;
%input feta-klef;
% input feta-toevallig;
% input feta-schrift;
% input feta-haak;
% input feta-timesig;
-% input feta-pendaal;
+ input feta-pendaal;
% input feta-accordion;
% input feta-solfa;
fet_endchar;
fet_beginchar ("2/2 meter", "C2/2", "allabreve")
-
draw_C;
save excentricity;
pair excentricity;
- xpart excentricity = x2 -1.25 stafflinethickness;
+ xpart excentricity = x2 -1.25 stafflinethickness;
ypart excentricity = 0;
save stemlen ;
stemlen = 1.4 staff_space;
+ save thick;
+ thick = stafflinethickness / 2 + 0.025 staff_space;
- draw_block((- .75 stafflinethickness, - stemlen) + excentricity, (.75 stafflinethickness , stemlen) + excentricity);
+ draw_block((- thick, - stemlen) + excentricity, (thick , stemlen) + excentricity);
fet_endchar;
fet_endgroup("timesig");
pair center;
interbeam := 1.05 staff_space;
- beamheight := 4 stafflinethickness;
+ beamheight := 0.3 staff_space + stafflinethickness;
beamwidth := width;
stemwidth := 1.5 stafflinethickness;
roundness := 2 blot_diameter;
stemwidth;
save top_stem_thick;
- beamheight# = 4.0 stafflinethickness#;
+ beamheight# = 0.3 staff_space# + stafflinethickness#;
height# = 1.5 staff_space#;
set_char_box(0, 2/3 staff_space#, height#, height#);
interstem + stemwidth = w;
- stemwidth = 1.3 stafflinethickness;
+ stemwidth = 0.03 staff_space + stafflinethickness;
z2 -z1 = (interstem, slope * interstem);
xpart .5 [z2,z1] = xcenter ;
% this is a somewhat heuristic. We should probably make it
% straight for low resolution (300 dpi and less).
- top_stem_thick = round (2.2 stafflinethickness) + 0.74;
+ top_stem_thick = round (0.1 staff_space + 1.2 stafflinethickness) + 0.74;
bottom_overshoot = stafflinethickness;
- bottom_stem_thick = 1.2 stafflinethickness;
+ bottom_stem_thick =0.06 staff_space + 0.6 stafflinethickness;
z1 = (0, 2 staff_space) + center - (0, stafflinethickness/2
+ clearing);
+++ /dev/null
-
-staffsize# = 1pt#;
-stafflinethickness# = staffsize#/10;
-define_pixels (stafflinethickness, staffsize);
-
-input feta-sleur;
-
-
-
-% beginchar
-
-indent = 1.17 staffsize;
-height = 6.15 staffsize;
-len = 10 staffsize;
-
-path boogje;
-
-
-
-z1 = (0,0);
-z2 = (indent, height);
-z3 = (len - indent, height);
-z4 = (len, 0);
-
-boogje=z1..controls z2 and z3..z4;
-pickup pencircle scaled stafflinethickness;
-draw boogje;
-shipit;
-
-
-bye
# we want to see botched results as well.
$(outdir)/%.dvi: %.mf
- -$(METAFONT) "\nonstopmode; input $<;"
+ -$(METAFONT) "\scrollmode; input $<;"
gftodvi $(basename $<)
mv $(basename $<).dvi $(outdir)
rm $(basename $<).*gf