% -*- Fundamental -*-  (emacs-20 mf mode mucks
% feta-pendaal.mf -- piano pedal markings
%
% part of LilyPond's pretty-but-neat music font
%
% source file of the Feta (not the Font-En-Tja) music font
% 
% (c)  2000--2003 Jan Nieuwenhuizen <janneke@gnu.org>
%
% Voor Cup

% Kerning
%
% Pe = -0.034 pedalh == -0.07 staff-space
% ed = -0.27 pedalh == -0.53 staff-space

fet_begingroup("pedal")

pedalpha = 40;
pedbeta = 25;

penh#=0.7stafflinethickness#;
penw#=4penh#;
%penw#=penh#;
define_pixels (penh,penw);

pedalh# = 2staff_space#;
pedalbh# = 4/7pedalh#;
define_pixels (pedalh,pedalbh);

% code values for own pedal font commented out
% code := 41;  % * = 42

def draw_asterisk_bulb (expr w, h, i) =
	begingroup;
	clearxy;
	save bulb, p;
	path p;
	bulb = 4/3penw;

	pickup pencircle scaled penh;
	penpos 1 (bulb, 180);
	penpos 2 (bulb, 0);
	penpos 3 (penh, 0);
	penpos 4 (penw, 0);

	z0 = (1/2w, h - 1/2w);
	z1 = (1/2w, h-1/2bulb);
	z2 = z1;
	z3 = (x1, y1-penw);
	z4 = (x1, y3-2penh);

	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
fet_endchar;

% skip + and ,

% code := 44;  % - = 45

fet_beginchar("Pedal dash", "-", "pedaldash")
	set_char_box(0, 3penw#, 0, pedalbh#);
	pickup pencircle scaled penh;

	penpos 1 (penw, 60);
	penpos 2 (penw, 60);
	z1l = (0, 2/3h - 1/2penw);
	z2r = (w, y1l + 1.2penw);
	penlabels (1,2);
	penstroke z1e{dir 40}..tension 1.2 ..z2e{dir 40};
fet_endchar;

fet_beginchar("Pedal dot", ".", "pedaldot")
	set_char_box(0, penw#, 0, penw#);
	pickup pencircle scaled penw;
	draw (1/2penw,1/2penw);
fet_endchar;

def draw_pedal_P =
	begingroup;
	clearxy;
	pickup pencircle scaled penh;

	penpos 1 (penh, 0);
	penpos 2 (penw, 55);
	penpos 3 (penw, pedalpha);
	penpos 4 (1.2penh, -pedalpha);
	penpos 5 (penh, -pedalpha);
	penpos 6 (penh, 180-pedalpha);
	penpos 7 (2penh, 180-pedalpha);
	penpos 8 (penh, 90);
	penpos 9 (4/3penw,50);
	penpos 10 (1.4penw,50);
	penpos 11 (penh, 90+pedalpha);

	z1r = (0.6w, h);
	x2l = x1l - penw;
	y2 = 0.7h;
	x3r = x2l + 2penw;
	y3r = 0.4h;
	z4l = z5r + 1/4(z3r - z5r);
	x5 = 1/4w;
	y5r = 0;
	z6 = z5;
	z7 = z6r + 1/3(z8r - z6r);
	z8r = z5r + 3/5(z3r - z5r);
	x9l = x10l - penh;
	y9l = 1/4penh;
	x10l = w - tand (90-pedalpha)*y11l;
	y10l = 1/4penh;
	x11l = w;
	y11 = 1/5h;

	penlabels (1,2,3,4,5,6,7,8,9,10,11);
	soft_penstroke z1e..tension 2.5 .. z2e.. tension 1.5 .. z3e ..tension 2.5
		..z4e..tension 1.5
		..z5e..z6e..tension 1.5
		..z7e..tension 1.5
		..z8e{right}..tension 1.5
		..z9e{dir -pedalpha}
		..z10e..tension 2.5..z11e;

	penpos 12 (penh, 0);
	penpos 13 (penw, -90-pedbeta);
	penpos 14 (penh, 90);
	penpos 15 (penw, -90+pedbeta);
	penpos 16 (penh, 180+pedbeta);
	z12 = (5/9x1, y2);
	z13l = (1/2x12r, y15r);
	z14r = z1r;
	z15l = (1/2[x16,w], y2l + 0.5penw);
	x16 = 1/4[x1, w];
	y16r = y2r;

	penlabels (12,13,14,15,16);
	soft_penstroke z12e{down}..tension 1.1
		..z13e{dir (180-pedbeta)}..tension 1.1
		..z14e{right}..tension 1.1
		..z15e{dir (180+pedbeta)}..tension 1.1
		..z16e{dir (90+pedbeta)};
	endgroup;
	enddef;


def draw_pedal_d =
	begingroup;
	clearxy;
	pickup pencircle scaled penh;

	penpos 1 (penh, -70);
	penpos 2 (3/4penw, 0);
	penpos 3 (2penh, 90);
	penpos 4 (penw, 190);
	penpos 5 (penh, -10-90);

	z1l = (2/3w, pedalbh);
	z2l = (1/3w, 1/2pedalbh);
	z3l = (x1l, 0);
	z4 = (w - 1/2penw, 1/2pedalbh + penh);
	x5r = 0;
	y5l = h;

	penlabels (1,2,3,4,5);

	soft_penstroke z1e{dir (-70-90)}..tension 1.1
		..z2e{down}..tension 1.1
		..z3e{right}..tension 1.1
		..z4e{dir (90+10)}..tension 1.1
		..z5e{dir (180-10)};
	endgroup;
	enddef;

def draw_pedal_e =
	begingroup;
	clearxy;
	pickup pencircle scaled penh;

	penpos 1 (penh, pedalpha-90);
	penpos 2 (penh, pedalpha-90);
	penpos 3 (3/5penw, pedalpha);
	penpos 4 (1.2penh, 90+pedalpha);
	penpos 5 (2/3penw, 180);
	penpos 6 (penw, 180+pedalpha);
	penpos 7 (2/3penw, -90-20);
	penpos 8 (penh, pedalpha-90);

	z1l = (0, 1/5pedalh);
	z2 = z1 + dir pedalpha * penw;
	z3 = (3/5w, 8/9h);

	z4 = (2/9w,  y3);

	x5r = 0;
	y5 = y2;

	x6 = 3/8w;
	y6r = 1/2penh;

	z7l = (x6l+penh, y6l);

	x8r = w;
	y8 = 1/5pedalh;

	penlabels (1,2,3,4,5,6,7,8);
	soft_penstroke z1e{dir pedalpha}
		..z2e{dir pedalpha}.. tension 1.1
		%urg
		..z3e..tension 1.05
		..z4e..tension 1.1
		..z5e..tension 1.5
		..z6e{dir -pedalpha}..tension 1.1
		..z7e.. tension 2.5
		..z8e;
	endgroup;
	enddef;


% code := 79;  % P = 80

fet_beginchar("Pedal P", "P", "pedalP")
	set_char_box(0, 5/6pedalh#, 0, pedalh#);
	draw_pedal_P;
fet_endchar;

% code := 99;  % d = 100

fet_beginchar("Pedal d", "d", "pedald")
	set_char_box(0, 2/3pedalh#, 0, 7/8pedalh#);
	draw_pedal_d;
fet_endchar;

fet_beginchar("Pedal e", "e", "pedale")
	set_char_box(0, 2/5pedalh#, 0, pedalbh#);
	draw_pedal_e;
fet_endchar;

%
% Han-Wen insists on having a `Ped' symbol, ready-kerned in mf.
% The pre 1.3.59 user-scm kerning sucks, but I'm not struck by
% the looks of this either.
%
fet_beginchar("Pedal Ped", "Ped", "pedalPed")
	P_width# = 5/6pedalh#;
	e_width# = 2/5pedalh#;
	d_width# = 2/3pedalh#;
	define_pixels (P_width, e_width, d_width);

	e_height# = pedalbh#;
	d_height# = 7/8pedalh#;
	define_pixels (e_height, d_height);

	% Pe = -0.034 pedalh == -0.07 staff-space
	% ed = -0.27 pedalh == -0.53 staff-space
	Pe_kern# = -0.034 pedalh#;
	ed_kern# = -0.27 pedalh#;
	define_pixels (Pe_kern, ed_kern);

	w := d_width;
	h := d_height;
	draw_pedal_d;
	currentpicture := currentpicture shifted (e_width + ed_kern, 0);
	w := e_width;
	h := e_height;
	draw_pedal_e;
	currentpicture := currentpicture shifted (P_width + Pe_kern, 0);
	w := P_width;
	h := pedalh;
	draw_pedal_P;
	set_char_box(0, P_width# + Pe_kern# + e_width# + ed_kern# + d_width#,
		0, pedalh#);
fet_endchar;


fet_endgroup("pedal")

