% % feta-toevallig.mf -- implement Accidentals % % source file of the Feta (Font-En-Tja) music font % % (c) 1997, 1998 Han-Wen Nienhuys % % % Accidentals from various sources, notably % % Baerenreiter edition of Schuberts `Auf dem Strom' (sharp, natural) % F Hofmeister edition of Muellers `Etueden fuer Horn' (double sharp, flat) % %tracingall; %proofing := 2; %\tracingequations:= tracingonline := 1; fet_begingroup("accidentals"); % % The beams of most sharps have horizontal endings (as if drawn with % a square pen). [Wanske] does not mention this, so we'll just ignore % this fact % fet_beginchar("Sharp" , "1", "sharp"); set_char_box(0, 1.1 interline#, 1.5 interline#, 1.5 interline#); save interbeam, interstem, beamheight, beamwidth, stemwidth; interbeam := 1.05 interline; interstem := 7/16 ; beamheight := 4 stafflinethickness; beamwidth := w; stemwidth := 1.3 stafflinethickness; roundness := 2blot_diameter; pair center; center := (.5 w, 0); roundness + 2 spanwidth = beamwidth; roundness + 2 spanheight = beamheight; 2 horizontal_protrusion + interstem * beamwidth + stemwidth = beamwidth; % wanske: whole beamheight; or ca 18 degrees % z2 - z1 = (beamwidth - roundness, beamheight/2); z2 - z1 = (beamwidth - roundness, beamheight); z1 + z2 = 2*center; beamslope = (y2-y1)/(x2-x1); pair hspan, vspan; hspan = (spanwidth, beamslope * spanwidth); vspan = (0, spanheight); path beam; beam := (hspan + vspan -- -hspan + vspan -- -hspan -vspan -- hspan - vspan -- cycle ) shifted center; pickup pencircle scaled roundness; filldraw (beam shifted (0,-interbeam/2)); filldraw (beam shifted (0,interbeam/2)); pickup pencircle scaled stemwidth; x3 = x4 = xpart center; bot y3 = -1.5 interline + ypart center; top y4 = 1.5 interline + ypart center; path stem; stem := z3 .. z4; numeric xs; xs := interstem* beamwidth / 2; draw stem shifted (- xs, - xs* beamslope); draw stem shifted (xs , xs *beamslope); labels(1,2,3,4); fet_endchar; fet_beginchar( "Natural", "0", "natural") set_char_box(0, 8/12 interline#, 1.5 interline#, 1.5 interline#); save interbeam, interstem, beamheight, beamwidth, stemwidth; beamheight = 4.5 stafflinethickness; interstem + stemwidth = w; stemwidth = 1.3 stafflinethickness; z2 -z1 = (interstem, slope * interstem); xpart .5 [z2,z1] = xcenter ; xcenter = w/2; pickup penrazor scaled beamheight rotated 90; top y2 = interline - 3/2 stafflinethickness ; slope = stafflinethickness / interstem; draw z1 .. z2; draw (xpart z1, -y2) .. (xpart z2, -y1); beamtop = top y2; pickup pencircle scaled stemwidth; xpart z3 = xpart z1; xpart z4 = xpart z2; top y3 = 1.5 interline; top y4 = beamtop; draw (xpart z1, -y4) .. z3; draw (xpart z2, -y3) .. z4; labels(1,2,3,4); fet_endchar; % % Dedicated to my mom. (3/10/97) % % Mamma, ik hou van je; kom je alsjeblieft terug? % -- HW % % TODO: remove crook_fatness def draw_meta_flat(expr xcenter, w, crook_fatness) = clearxy; save crook_thinness; save top_stem_thick, bottom_stem_thick, hair; save center; pair center; center = (xcenter, 0); crook_thinness = 1.25 stafflinethickness; top_stem_thick = 2 stafflinethickness; bottom_stem_thick = 1.2 stafflinethickness; z1 = (0, 2 interline) + center; z2 = (0, - 1/2 interline)+ center; penpos1(top_stem_thick, 0); penpos2(bottom_stem_thick, 0); fill simple_serif(z1r, z1l, 30) -- z2l -- z2r -- cycle; y3l = (interline - stafflinethickness)/2 + ypart center; z3l = whatever [z2r,z1r]; z3r = .26 [z2r, z1r]; z4 = (3/8 interline, interline/2) + center; penpos4(whatever, 53); y4l - y4r = 2 crook_thinness ; % y4l - y4r = 6/20[crook_thinness, crook_fatness] ; y5r = 1/4 interline + ypart center; x5l = w + xpart center; penpos5(crook_fatness, -175); z8 = (0, - interline/2 - stafflinethickness/2) + center; z9 = (x5,0); save ne_angle; ne_angle = angle(z9 - z8); z7 = 8/33 [z8,z9]; z6l = 18/33 [z8,z9] + .5 crook_thinness *dir(ne_angle -90); penpos7(crook_thinness, ne_angle + 90); z6r = .3 (z9-z8) + z7r; % penpos7(crook_thinness, angle(dir(z8-center) -180); penpos8(whatever, ne_angle + 90); x8r = xpart center - bottom_stem_thick/2; penlabels(range 0 thru 10); z10 = (bottom_stem_thick/2, -1/5 interline) + center; unfill z3r{up} .. z4r{right} .. tension .9 .. z6r --- z7r{left} .. z10 {up} -- cycle; fill z8r{down} .. tension 0.8 ..z8l{(z9-z8)} .. z7l .. z6l .. z5l{up} .. z4l{left} .. z3l -- cycle; labels(10); enddef; % % unfortunately, 600dpi is not enough to show the brush of the stem. % fet_beginchar("Flat", "-1", "flat") set_char_box(1.2 stafflinethickness#, .8 interline#, .5 interline#, 2 interline#); draw_meta_flat(0, w, 1/3 interline); fet_endchar; fet_beginchar("Double flat", "-2", "flatflat") save left_wid, overlap, right_wid; left_wid = .7; right_wid = .8; overlap = .05; set_char_box(1.2 stafflinethickness#, (left_wid + right_wid -overlap) *interline#, .5 interline#, 2 interline#); draw_meta_flat(0, left_wid* interline, 1/3 interline); draw_meta_flat((left_wid - overlap) *interline, right_wid *interline, 1/3 interline); fet_endchar; fet_beginchar("Double sharp", "2", "sharpsharp") set_char_box(0, interline#, .5 interline#, .5 interline#); save klaverblad, klaversteel; klaversteel = 1/15 interline; klaverblad = .35 interline; z1 = (klaversteel, 0); z2 = (w/2 - klaverblad / 10, h - klaverblad); z3 = (w/2, h); z4 = z2 reflectedabout((0,0), (1,1)); z5 = z1 reflectedabout((0,0), (1,1)); labels(1,2,3,4,5); pickup pencircle scaled 1/20 interline; filldraw z1{dir 45} .. {right}z2 -- z3 -- z4{down} .. {dir 225}z5 .. cycle; addto currentpicture also currentpicture yscaled (-d/h); addto currentpicture also currentpicture xscaled (-1); % ugh currentpicture := currentpicture shifted (w/2,0); fet_endchar; fet_endgroup("accidentals");