]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/feta-klef.mf
release: 1.5.29
[lilypond.git] / mf / feta-klef.mf
index 6ad17211d68d77a884645ba3ab4329f65241bbde..cf05a663a5c393aa38ef8d382a765e056ce0f247 100644 (file)
@@ -4,9 +4,9 @@
 %
 % source file of the Feta (not the Font-En-Tja) music font
 % 
-% (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>,
+% (c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>,
 % Jan Nieuwenhuizen <janneke@gnu.org>,
-% Juergen Reuter <reuterj@ira.uka.de>
+% Juergen Reuter <reuter@ipd.uka.de>
 
 
 fet_begingroup("clefs");
@@ -309,875 +309,210 @@ fet_beginchar("G clef", "G_change", "ctrebleclef")
        draw_gclef((1.3 staff_space#,0), .8);
 fet_endchar;
 
-%%%%%%%%
+%%%%
+% PERCUSSION
 %
 %
-%
-% Editio Vaticana
-%
-%
-%
-def draw_vaticana_do_clef(expr exact_center, reduction) = 
-       save reduced_il;
-
-       reduced_il# = staff_space# * reduction;
-       
-       set_char_box(0.4reduced_il#, 0.4reduced_il#, 0, reduced_il#);
-
-       define_pixels(reduced_il);
-
-       pickup pencircle xscaled stafflinethickness yscaled 0.6reduced_il;
-
-       save za, zb, zc, zd, ze, zf;
-       pair za, zb, zc, zd, ze, zf;
-
-       za = exact_center + (-0.0reduced_il, -.45reduced_il);
-       zb = exact_center + (-0.2reduced_il, -.50reduced_il);
-       zc = exact_center + (-0.4reduced_il, -.25reduced_il);
-       zd = exact_center + (-0.4reduced_il, +.25reduced_il);
-       ze = exact_center + (-0.2reduced_il, +.50reduced_il);
-       zf = exact_center + (-0.0reduced_il, +.45reduced_il);
-       draw za .. zb .. zc --  % lower punctum
-            zd .. ze .. zf;    % upper punctum
-enddef;
-
-
-fet_beginchar("Ed. Vat. do clef", "vaticana_do", "vatdoclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_vaticana_do_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("Ed. Vat. do clef", "vaticana_do_change", "vatcdoclef")
-       draw_vaticana_do_clef((0,0), 1.0); % no reduction
-fet_endchar;
-
-
-def draw_vaticana_fa_clef(expr exact_center, reduction) = 
-
-       save reduced_il, z;
-       reduced_il# = staff_space# * reduction;
-       define_pixels(reduced_il);
-
-       save za, zb, zc, zd, ze;
-       pair za, zb, zc, zd, ze;
-
-       %stem
-       pickup pencircle scaled stafflinethickness;
-       xpart za = xpart zb =
-               xpart exact_center + 0.4reduced_il;
-       ypart za = ypart exact_center = ypart zb + 1.5reduced_il;
-       draw za .. zb;
-
-       %left-handed punctum
-       pickup pencircle xscaled stafflinethickness yscaled 0.5reduced_il;
-       zc = exact_center +
-               (+0.4reduced_il, -0.05reduced_il);
-       zd = exact_center +
-               (+0.2reduced_il, +0.05reduced_il);
-       ze = exact_center +
-               (+0.0reduced_il, +0.00reduced_il);
-       draw zc .. zd .. ze;
-
-       %right-handed puncta as in do clef
-       draw_vaticana_do_clef(
-               exact_center +
-               (+0.8reduced_il + 1.25stafflinethickness, 0),
-               reduction);
-
-       set_char_box(0.5reduced_il#, 1.5reduced_il#, 0, reduced_il#);
-enddef;
 
 
-fet_beginchar("Ed. Vat. fa clef", "vaticana_fa", "vatfaclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_vaticana_fa_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("Ed. Vat. fa clef", "vaticana_fa_change", "vatcfaclef")
-       draw_vaticana_fa_clef((0,0), 1.0); % no reduction
-fet_endchar;
-
-%%%%%%%%
-%
-%
-%
-% Editio Medicaea
-%
-%
-%
-def draw_medicaea_do_clef(expr exact_center, reduction) = 
-       save reduced_il, reduced_slt;
-       reduced_il# = staff_space# * reduction;
-       reduced_slt# = stafflinethickness# * reduction;
-       define_pixels(reduced_il);
-       define_pixels(reduced_slt);
-
-       save flag_height;
-       flag_height# = 0.5 reduced_il#;
-       define_pixels(flag_height);
-
-       %lower flag
-       save za, zb;
-       pair za, zb;
-       pickup pencircle xscaled reduced_slt yscaled flag_height;
-       xpart exact_center
-               = xpart za + 0.5 reduced_il
-               = xpart zb - 0.5 reduced_il;
-       ypart za = ypart exact_center - 0.5 flag_height
-                       - 0.5 (staff_space - reduced_il);
-       ypart zb = ypart za - reduced_il + flag_height;
-       draw za .. zb;
-
-       %upper flag
-       save za, zb;
-       pair za, zb;
-       pickup pencircle xscaled reduced_slt yscaled flag_height;
-       xpart exact_center
-               = xpart za + 0.5 reduced_il
-               = xpart zb - 0.5 reduced_il;
-       ypart za = ypart exact_center - 0.5 flag_height
-                       - 0.5 (staff_space - reduced_il)
-                       + staff_space;
-       ypart zb = ypart za - reduced_il + flag_height;
-       draw za .. zb;
-
-       %stem
-       save za, zb;
-       pair za, zb;
-       pickup pencircle scaled reduced_slt;
-       xpart za = xpart zb = xpart exact_center - 0.5 reduced_il;
-       ypart exact_center
-               = ypart za + 1.5 reduced_il
-               = ypart zb - 1.5 reduced_il;
-       draw za .. zb;
-
-       set_char_box(0.5reduced_il#, 1.5reduced_il#,
-                    1.5reduced_il#, 1.5reduced_il#);
-enddef;
-
-
-fet_beginchar("Ed. Med. do clef", "medicaea_do", "meddoclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_medicaea_do_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("Ed. Med. do clef", "medicaea_do_change", "cmeddoclef")
-       draw_medicaea_do_clef((0,0), .8);
-fet_endchar;
-
-
-def draw_medicaea_fa_clef(expr exact_center, reduction) = 
-       % inspired by Regensburger Edition of Medicaea (1885/86), in:
-       % MGG, volume 2, col. 1327 ("Choralreform"), fig. 2.
-
-       save reduced_il, reduced_slt;
-       reduced_il# = staff_space# * reduction;
-       reduced_slt# = stafflinethickness# * reduction;
-       define_pixels(reduced_il);
-       define_pixels(reduced_slt);
-
-       save za, zb, zc, zd, ze;
-       pair za, zb, zc, zd, ze;
-
-       %stem
-       pickup pencircle scaled stafflinethickness;
-       xpart za = xpart zb =
-               xpart exact_center + 0.4reduced_il;
-       ypart za = ypart exact_center = ypart zb + 1.5reduced_il;
-       draw za -- zb;
-
-       %left-handed punctum
-       pickup pencircle xscaled reduced_slt yscaled reduced_il;
-       zc = exact_center +
-               (+0.4reduced_il, 0);
-       zd = exact_center +
-               (+0.0reduced_il, 0);
-       draw zc -- zd;
-
-       %right-handed puncta as in do clef
-       draw_medicaea_do_clef(
-               exact_center +
-               (+1.1reduced_il + 1.25stafflinethickness, 0),
-               reduction);
-
-       set_char_box(reduced_il#/2, 2.6reduced_il#, 0, reduced_il#);
-enddef;
-
-
-fet_beginchar("Ed. Med. fa clef", "medicaea_fa", "medfaclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_medicaea_fa_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("Ed. Med. fa clef", "medicaea_fa_change", "cmedfaclef")
-       draw_medicaea_fa_clef((0,0), .8);
-fet_endchar;
-
-
-%%%%%%%%
-%
-%
-%
-% Mensural Notation
-%
-%
-%
-brevis_wid# := 2 staff_space#;
-
-def draw_brevis(expr exact_center, reduction, small_width, small_height) =
-       %
-       % inspired by function draw_brevis of
-       % feta-bolletjes.mf
-       %
-       save reduced_slt, reduced_nht;
-       save stem_width, head_width;
-       save serif_size, serif_protrude;
-       save holeheight, beamheight;
-
-       reduced_slt# = stafflinethickness# * reduction;
-       reduced_nht# = noteheight# * reduction;
-       stem_width# = 1.4 reduced_slt#;
-       if small_width:
-               head_width# = 0.5brevis_wid# * reduction;
-       else:
-               head_width# = brevis_wid# * reduction;
-       fi;
-       if small_height:
-               serif_size# = 0.64 reduced_slt#;
-               serif_protrude# = 0.96 serif_size#;
-               holeheight# = 3 reduced_slt#;
-               beamheight# = 0.32(reduced_nht# - holeheight#);
-       else:
-               serif_size# = 1.0 reduced_slt#;
-               serif_protrude# = 1.5 serif_size#;
-               holeheight# = 3 reduced_slt#;
-               beamheight# = 0.5(reduced_nht# - holeheight#);
-       fi;
-       define_pixels(reduced_slt);
-       define_pixels(stem_width);
-       define_pixels(head_width);
-       define_pixels(serif_size);
-       define_pixels(serif_protrude);
-       define_pixels(beamheight);
-
-       penpos1(stem_width, 0);
-       penpos2(stem_width, 0);
-       penpos3(beamheight, 90);
-       penpos4(beamheight, 90);
-       penpos5(stem_width, 180);
-
-       z1l = exact_center;
-       z2l = z1l + (0, -reduced_slt/2);
-       z3r = z2r + serif_size*(1,-1);
-       y4r = y3r;
-       x4l = x1l + head_width/2;
-       z5l = z3l + (-serif_size, -serif_protrude);
-
-       penlabels(1,2,3,4,5);
-       fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right}
-               -- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle;
-enddef;
-
-
-def draw_neo_mensural_c_clef(expr exact_center, reduction) = 
-       draw_brevis(exact_center, reduction, false, false);
-
-       save reduced_il, reduced_slt;
-       save stem_width;
-
-       reduced_il# = staff_space# * reduction;
-       reduced_slt# = stafflinethickness# * reduction;
-       stem_width# = 1.4 reduced_slt#;
-
-       define_pixels(reduced_il);
-       define_pixels(reduced_slt);
-       define_pixels(stem_width);
-
-       penpos6(stem_width, 0);
-       penpos7(stem_width, 0);
-       z6l = exact_center;
-       z7l = z6l + (0, -2reduced_il);
-       fill z6l -- z7l -- z7r -- z6r -- cycle;
-       penpos8(stem_width, 0);
-       penpos9(stem_width, 0);
-       z8l = z6l + (-3reduced_slt, 0);
-       z9l = z8l + (0, -2reduced_il);
-       fill z8l -- z9l -- z9r -- z8r -- cycle;
-
-       addto currentpicture also currentpicture
-               yscaled -1 shifted (0, 2*(ypart exact_center));
-       addto currentpicture also currentpicture 
-               xscaled -1 shifted (2x4l,0);
-
-       set_char_box(0, 2head_width#,
-                    6reduced_slt#*reduction, 6reduced_slt#*reduction);
-enddef;
-
-
-fet_beginchar("neo-mensural c clef", "neo_mensural_c", "neomenscclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_neo_mensural_c_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("neo-mensural c clef", "neo_mensural_c_change", "cneomenscclef")
-       draw_neo_mensural_c_clef((1.3 staff_space#,0), .8);
-fet_endchar;
-
-
-def draw_petrucci_c_clef(expr exact_center, reduction) = 
-       % inspired by Josquin Desprez, "Stabat Mater", Libro tertio,
-       % 1519, printed by Petrucci, in: MGG, volume 7, Table 11.
-       draw_brevis(exact_center, reduction, true, true);
-
-       save reduced_il, reduced_slt;
-       save stem_width, interline;
-
-       reduced_il# = staff_space# * reduction;
-       reduced_slt# = stafflinethickness# * reduction;
-       stem_width# = 1.4 reduced_slt#;
-       interline# = staff_space#;
-
-       define_pixels(reduced_il);
-       define_pixels(reduced_slt);
-       define_pixels(stem_width);
-       define_pixels(interline);
-
-       addto currentpicture also currentpicture
-               yscaled -1 shifted (0, 2*(ypart exact_center) - interline);
-
-       penpos6(stem_width, 0);
-       penpos7(stem_width, 0);
-       z6l = exact_center + (0, 0);
-       z7l = z6l + (0, -2.2reduced_il);
-       fill z6l -- z7l -- z7r -- z6r -- cycle;
-
-       addto currentpicture also currentpicture 
-               xscaled -1 shifted (2x4l,0);
-
-       penpos8(stem_width, 0);
-       penpos9(stem_width, 0);
-       z8l = exact_center + (0, 0);
-       z9l = z8l + (0, -3.2reduced_il);
-       fill z8l -- z9l -- z9r -- z8r -- cycle;
-
-       addto currentpicture also currentpicture
-               yscaled -1 shifted (0, 4*(ypart exact_center));
-
-       set_char_box(0, 2head_width#,
-                    noteheight#*4*reduction, noteheight#*4*reduction);
-enddef;
-
-
-fet_beginchar("petrucci c clef", "petrucci_c", "petruccicclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_petrucci_c_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("petrucci c clef", "petrucci_c_change", "cpetruccicclef")
-       draw_petrucci_c_clef((1.3 staff_space#,0), .8);
-fet_endchar;
-
-
-def draw_mensural_c_clef(expr exact_center, reduction) =
-       % inspired by Ockeghem, "Missa Prolationum", in: MGG, volume
-       % 9, table 94.
-       draw_petrucci_c_clef(exact_center, reduction);
-
-       addto currentpicture also currentpicture
-               shifted (0, -interline);
-
-       set_char_box(0, 2head_width#,
-                    noteheight#*6*reduction, noteheight#*6*reduction);
-enddef;
-
-
-fet_beginchar("mensural c clef", "mensural_c", "menscclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_mensural_c_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("mensural c clef", "mensural_c_change", "cmenscclef")
-       draw_mensural_c_clef((0,0), .8);
-fet_endchar;
-
-def draw_diamond(expr exact_center, reduction) =
-       save stem_width, reduced_il, reduced_nht, holeheight, beamheight;
-       save rh_height, rh_width;
-
-       stem_width# = 1.4 reduced_slt#;
-       reduced_il# = staff_space# * reduction;
-       reduced_nht# = noteheight# * reduction;
-       holeheight# = 3 reduced_slt#;
-       beamheight# = 0.4(reduced_nht# - holeheight#);
-
-       rh_height# = 1.2reduced_il#;
-       rh_width# / rh_height# = 0.58; % tan(30)
-
-       define_pixels(beamheight);
-       define_pixels(stem_width);
-       define_pixels(rh_height);
-       define_pixels(rh_width);
-
-       pickup pencircle
-               xscaled beamheight
-               yscaled stem_width
-               rotated 45;
-
-       draw
-               exact_center + (-rh_width/2, 0) --
-               exact_center + (0, rh_height/2) --
-               exact_center + (+rh_width/2, 0) --
-               exact_center + (0, -rh_height/2) --
-               cycle;
-enddef;
-
-def draw_petrucci_f_clef(expr exact_center, reduction) =
-       % inspired by L'homme arme super voces musicales in Misse
-       % Josquin, 1502, Petrucci, in: MGG, volume 7, col. 200; also
-       % inspired by Gaspar van Weerbeke, "Virgo Maria" (1502), in:
-       % MGG, volume 9, col. 653 ("Motette"), fig. 3.; also by Andr'e
-       % Campra, "Entr'ee des s'er'enades" (1710), in: MGG, volume 2,
-       % col. 1649 ("Contredanse"), fig. 2.
-       %
-       draw_brevis(exact_center, reduction, true, false);
-
-       save reduced_il, reduced_slt;
-       save stem_width, interline;
-
-       reduced_il# = staff_space# * reduction;
-       reduced_slt# = stafflinethickness# * reduction;
-       stem_width# = 1.4 reduced_slt#;
-       interline# = staff_space#;
-
-       define_pixels(reduced_il);
-       define_pixels(reduced_slt);
-       define_pixels(stem_width);
-       define_pixels(interline);
-
-       addto currentpicture also currentpicture
-               yscaled -1 shifted (0, 2*(ypart exact_center));
-       addto currentpicture also currentpicture 
-               xscaled -1 shifted (2x4l,0);
-
-       penpos6(stem_width, 0);
-       penpos7(stem_width, 0);
-       z6r = exact_center + (2x4l, 0);
-       z7r = z6r + (0, -4reduced_il);
-       fill z6l -- z7l -- z7r -- z6r -- cycle;
-
-       draw_diamond(exact_center +
-                    (1.6interline*reduction, interline/2), reduction);
-
-       % upper stem
-       penpos8(stem_width, 0);
-       penpos9(stem_width, 0);
-       z8l = exact_center + (1.6interline*reduction, interline*reduction);
-       z9l = z8l + (0, 1.5interline*reduction);
-       fill z8l -- z9l -- z9r -- z8r -- cycle;
-
-       draw_diamond(exact_center +
-                    (1.6interline*reduction, -interline/2), reduction);
-       penpos10(stem_width, 0);
-       penpos11(stem_width, 0);
-       z10r = exact_center + (1.6interline*reduction, -interline*reduction);
-       z11r = z10r + (0, -3.5interline*reduction);
-       fill z10l -- z11l -- z11r -- z10r -- cycle;
-
-       set_char_box(0, 3head_width#,
-                    3.5noteheight#*reduction, 1.5noteheight#*reduction);
-enddef;
-
-
-fet_beginchar("petrucci f clef", "petrucci_f", "petruccifclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_petrucci_f_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("petrucci f clef", "petrucci_f_change", "cpetruccifclef")
-       draw_petrucci_f_clef((0,0), .8);
-fet_endchar;
-
-
-def draw_mensural_f_clef(expr exact_center, reduction) =
-       %
-       % inspired by Philippe le Duc, "Dite Signori" (1590), in: MGG,
-       % volume 3, col. 848 ("Duc"); also by John Dowland, "The First
-       % Booke of Songes" (1597), in: MGG, volume 3, col. 721
-       % ("Dowland"), fig. 3.
-
-       save reduced_slt, stem_width, reduced_nht, holeheight, beamheight;
-
-       reduced_slt# = stafflinethickness# * reduction;
-       stem_width# = 1.4 reduced_slt#;
-       reduced_nht# = noteheight# * reduction;
-       holeheight# = 3 reduced_slt#;
-       beamheight# = 0.4(reduced_nht# - holeheight#);
-
-       define_pixels(beamheight, stem_width, staff_space);
-
-       pickup pencircle
-               xscaled beamheight
-               yscaled stem_width
-               rotated 45;
-
-       draw
-               exact_center + (1.0 staff_space, 0.6 staff_space) --
-               exact_center + (1.25 staff_space, 0.4 staff_space);
-
-       draw
-               exact_center + (1.0 staff_space, -0.4 staff_space) --
-               exact_center + (1.25 staff_space, -0.6 staff_space);
-
-       draw    halfcircle scaled 1.2 staff_space rotated -90
-               shifted (-exact_center + (+0.1 staff_space, 0));
-
-       set_char_box(0, 3staff_space#, 3staff_space#, 0);
-enddef;
-
-fet_beginchar("mensural f clef", "mensural_f", "mensfclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_mensural_f_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("mensural f clef", "mensural_f_change", "cmensfclef")
-       draw_mensural_f_clef((0,0), .8);
-fet_endchar;
-
-
-def draw_mensural_g_clef(expr exact_center, reduction) =
-       %
-       % inspired by Francisco Guerrero, "Lib. 1.  Missarum" (1566),
-       % in: MGG, volume 3, col. 858 ("Ducis"); also by Stefano
-       % Fabri, "Quam speciosa veteranis" (1611), in: MGG, volume 3,
-       % col. 1698 ("Fabri"); also by Philippus Dulichius,
-       % "Fasciculus novus ..." (1598), in: MGG, volume 3, col. 919
-       % ("Dulichius"), fig. 1; also by Noe Faignient, "Ic sal de
-       % Heer myn God gebenedye" (1568), in: MGG, volume 3, col. 1735
-       % ("Faignient").
-       %
-       % Metafont code partially inspired by Schwabacher 'G' of yswab
-       % font.
-
-       save reduced_il, stem_width, height, width, apex_o, hair;
-
-       reduced_il#=staff_space#*reduction;
-
-       set_char_box(0.5reduced_il#, 1.5reduced_il#,
-                    1.5reduced_il#, 1.5reduced_il#);
-
-       stem_width# = 0.17 reduced_il#;
-       height# = 1.5 reduced_il#;
-       width# = 1.13 reduced_il#;
-       apex_o# = 0.02 reduced_il#;
-       hair# =  3 stafflinethickness#;
-       define_pixels(reduced_il, stem_width, height, width, apex_o, hair);
-
-       penpos1(2 stem_width, -142);
-       z1l = (0.715 width, 0.742 height);
-       penpos1'(hair, -90);
-       z1'l = z1r;
-       penpos2(1.179 stem_width, -142);
-       z2l = (width, 0.466 height);
-       penpos3(hair, 77);
-       z3 = (0.764 width, 0.067 height); 
-       z4 = (0.59 width, -apex_o);
-       penpos5(1.179 stem_width, 32);
-       z5l=(0, 0.457 height);
-       penpos6(hair, -56.5);
-       z7 = (x4 - 0.843 stem_width, height + apex_o);
-       z7 - z6l = whatever * dir33.5;
-       penpos8(1.286 stem_width, -130);
-       z8r = (0.715 width, 0.742 height) + (-apex_o, apex_o);
-       z6r - z8r = whatever * (z7 - z8l);
-       filldraw
-               z1'r{dir45} .. z2r{down} .. z3r{dir207} .. z5r{up} ..
-               z6r{z7-z6l} & z6r -- z8r -- z8l -- z7 --- z6l ...
-               z5l{down} .. z4{right} .. z3l{dir27} .. z2l{up} ..
-               z1l{1/3[z6l,z7]-z1l} & z1l -- z1r -- z1'r & cycle
-               shifted (-exact_center + (0, -0.75reduced_il));
-
-       penpos9(stem_width, 0);
-       x9r = x4; y9 = 0.3 height;
-
-       pickup pencircle
-               scaled stem_width
-               rotated 45;
-       draw    z9 -- (z9 + (0, -0.4reduced_il))
-               shifted (-exact_center + (0, -0.75reduced_il));
-
-       pickup pencircle
-               xscaled stem_width
-               yscaled hair
-               rotated 30;
-
-       draw halfcircle
-               scaled 0.5 reduced_il
-               rotated -90
-               shifted z8
-               shifted (0, 0.25reduced_il)
-               shifted (-exact_center + (0, -0.75reduced_il));
-
-       draw halfcircle
-               scaled 0.4 reduced_il
-               rotated 90
-               shifted (z8 + (0, 0.45 reduced_il))
-               shifted (0, 0.25reduced_il)
-               shifted (-exact_center + (0, -0.75reduced_il));
-enddef;
-
-
-fet_beginchar("mensural g clef", "mensural_g", "mensgclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_mensural_g_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("mensural g clef", "mensural_g_change", "cmensgclef")
-       draw_mensural_g_clef((0,0), .8);
-fet_endchar;
-
-
-
-def draw_petrucci_g_clef(expr exact_center, reduction) =
-       % inspired by Josquin Desprez, "Stabat Mater", Libro tertio,
-       % 1519, printed by Petrucci, in: MGG, volume 7, Table 11.
-
-       set_char_box(0.6 staff_space#, 0.8 staff_space#, 0.6 staff_space#, 
-         4.0 staff_space#);
-
-       save reduced_il, reduced_slt;
-
-       reduced_il# = staff_space# * reduction;
-       reduced_slt# = stafflinethickness# * reduction;
-       define_pixels(reduced_il, reduced_slt);
-
-       save za, zb, zc, zd, ze, zf, zg, zh, zi, zj;
-       pair za, zb, zc, zd, ze, zf, zg, zh, zi, zj;
-
-       pickup pencircle
-               xscaled 0.50 reduced_slt
-               yscaled 0.22 reduced_il
-               rotated -35;
-
-       za = exact_center + (+0.00 reduced_il, +0.00 reduced_il);
-       zb = exact_center + (+0.20 reduced_il, +1.20 reduced_il);
-       zc = exact_center + (-0.10 reduced_il, +2.00 reduced_il);
-       zd = exact_center + (-0.50 reduced_il, +3.00 reduced_il);
-       ze = exact_center + (+0.00 reduced_il, +3.70 reduced_il);
-       zf = exact_center + (+0.20 reduced_il, +3.00 reduced_il);
-       zg = exact_center + (-0.20 reduced_il, +2.00 reduced_il);
-       zh = exact_center + (-0.50 reduced_il, +1.70 reduced_il);
-       zi = exact_center + (-0.80 reduced_il, +0.75 reduced_il);
-       zj = exact_center + (-0.60 reduced_il, +0.60 reduced_il);
-
-       draw za{-1,2} .. zb .. zc .. zd .. ze .. zf .. zg .. zh .. zi .. zj;
-
-       save za, zb, zc, zd, ze, zf;
-       pair za, zb, zc, zd, ze, zf;
-
-       pickup pencircle
-               xscaled 0.75 reduced_slt
-               yscaled 0.33 reduced_il
-               rotated -35;
-
-       za = exact_center + (+0.25 reduced_il, +0.45 reduced_il);
-       zb = exact_center + (-0.25 reduced_il, +0.45 reduced_il);
-       zc = exact_center + (-0.25 reduced_il, -0.45 reduced_il);
-       zd = exact_center + (+0.25 reduced_il, -0.45 reduced_il);
-       ze = exact_center + (+0.30 reduced_il, +0.00 reduced_il);
-       zf = exact_center + (+0.00 reduced_il, +0.00 reduced_il);
-
-       draw za .. zb .. zc .. zd .. {up}ze -- zf;
-enddef;
-
-
-fet_beginchar("petrucci g clef", "petrucci_g", "petruccigclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_petrucci_g_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("petrucci g clef", "petrucci_g_change", "cpetruccigclef")
-       draw_petrucci_g_clef((0,0), .8);
-fet_endchar;
-
-
-
-%%%%%%%%
-%
-%
-%
-% Hufnagel
-%
-%
-%
-def draw_hufnagel_do_clef(expr exact_center, reduction) =
-       %
-       % inspired by Graduale of Friedrich Zollner (1442), in: MGG,
-       % volume 9, col. 1413 ("Neustift"), fig. 1.
-       %
-       save reduced_il;
-
-       reduced_il# = staff_space# * reduction;
-
-       define_pixels(reduced_il);
-
-       pickup pencircle
-               xscaled (0.60reduced_il)
-               yscaled (0.10reduced_il)
-               rotated 40;
-       save za, zb, zc, zd, ze, zf;
-       pair za, zb, zc, zd, ze, zf;
-
-       za = exact_center + (+0.30reduced_il, +.45reduced_il);
-       zb = exact_center + (+0.20reduced_il, +.45reduced_il);
-       zc = exact_center + (-0.10reduced_il, +.60reduced_il);
-       zd = exact_center + (-0.40reduced_il, +.45reduced_il);
-       ze = exact_center + (-0.40reduced_il, -.45reduced_il);
-       zf = exact_center + (-0.20reduced_il, -.55reduced_il);
-       draw za .. zb .. zc -- zd -- ze -- zf;
-
-       set_char_box(0.5reduced_il#, 0.5reduced_il#, 0, reduced_il#);
-enddef;
-
-
-fet_beginchar("Hufnagel do clef", "hufnagel_do", "hufnageldoclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_hufnagel_do_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("Hufnagel do clef", "hufnagel_do_change", "chufnageldoclef")
-       draw_hufnagel_do_clef((1.3 staff_space#,0), .8);
-fet_endchar;
-
-
-def draw_hufnagel_fa_clef(expr exact_center, reduction) =
-       %
-       % inspired by Bamberger Manuscript (15th century), in:
-       % MGG, volume 2, table 59.
-       %
-       save reduced_il;
-
-       reduced_il# = staff_space# * reduction;
-
-       define_pixels(reduced_il);
-
-       pickup pencircle
-               xscaled (0.60reduced_il)
-               yscaled (0.10reduced_il)
-               rotated 40;
-       save za, zb, zc, zd, ze, zf;
-       pair za, zb, zc, zd, ze, zf;
-
-       za = exact_center + (+0.30reduced_il, +0.70reduced_il);
-       zb = exact_center + (+0.20reduced_il, +0.70reduced_il);
-       zc = exact_center + (-0.10reduced_il, +0.85reduced_il);
-       zd = exact_center + (-0.40reduced_il, +0.70reduced_il);
-       ze = exact_center + (-0.40reduced_il, -1.10reduced_il);
-       draw za .. zb .. zc -- zd -- ze;
-
-       save zg, zh, zi, zj;
-       pair zg, zh, zi, zj;
-
-       zg = exact_center + (+0.30reduced_il, -0.05reduced_il);
-       zh = exact_center + (+0.20reduced_il, -0.05reduced_il);
-       zi = exact_center + (-0.10reduced_il, +0.10reduced_il);
-       zj = exact_center + (-0.40reduced_il, -0.05reduced_il);
-       draw zg .. zh .. zi -- zj;
-
-       set_char_box(0.5reduced_il#, 0.5reduced_il#, 0, reduced_il#);
-enddef;
-
-
-fet_beginchar("Hufnagel fa clef", "hufnagel_fa", "hufnagelfaclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_hufnagel_fa_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("Hufnagel fa clef", "hufnagel_fa_change", "chufnagelfaclef")
-       draw_hufnagel_fa_clef((0,0), .8);
-fet_endchar;
-
-
-def draw_hufnagel_do_fa_clef(expr exact_center, reduction) =
-       draw_hufnagel_do_clef(exact_center, reduction);
-       draw_hufnagel_fa_clef(exact_center + (0, -2staff_space), reduction);
-enddef;
-
-
-fet_beginchar("Hufnagel do/fa clef", "hufnagel_do_fa", "hufnageldofaclef")
-       if test = 1:
-               draw_staff(-1,3, 0.0);
-       fi;
-       draw_hufnagel_do_fa_clef((0,0), 1.0);
-fet_endchar;
-fet_beginchar("Hufnagel do/fa clef", "hufnagel_do_fa_change",
-             "chufnageldofaclef")
-       draw_hufnagel_do_fa_clef((0,0), .8);
-fet_endchar;
-
 def draw_percussion_clef(expr reduction) =
        save reduced_il;
        reduced_il# = staff_space# * reduction;
        define_pixels(reduced_il);
        set_char_box(-.67reduced_il#,2.0reduced_il#,reduced_il#,reduced_il#);
        razt := 0.45reduced_il;
-        pickup penrazor scaled razt;
-       draw (-b+razt/2,h) -- (-b+razt/2,-d);
-       draw (w-razt/2,h) -- (w-razt/2,-d);
+       draw_block((-b,-d),(-b+razt,h));
+       draw_block((w-razt,-d),(w,h));
 enddef;
 
 fet_beginchar("percussion clef", "percussion", "percussionclef")
        draw_percussion_clef(1.0);
 fet_endchar;
 
-fet_beginchar("percussion clef", "percussion_change", "cpercussionclef")
+fet_beginchar("percussion clef (reduced)", "percussion_change", "cpercussionclef")
        draw_percussion_clef(.8);
 fet_endchar;
 
+def draw_tab_T(expr pos, siz, slant) =
+       begingroup;
+       clearxy;
+       pair vx,vy;
+       vx=(xpart siz) * dir 0;
+       vy=(ypart siz) * dir 90;
+
+       penpos1(.75penh, 100);
+       z1=z2+(1/6*vx-.15*vy);
+       penpos2(.9penw, 0);
+       z2l = pos+.75vy;
+       penpos3(penh,-100);
+       z3l = pos+.4vx+vy;
+       penpos4(penh,-90);
+       z4=-.1vy+.5[z3,z5];
+       penpos5(.8penh,-30);
+       x5r=xpart (pos+siz);
+       y5l=ypart (pos+siz);
+
+       penpos10(penw,170);
+       z10=pos+.55vx+.85vy;
+       penpos11(.75[penh,penw],170);
+       z11=z10-.5vy+.025vx;
+       penpos12(penh,100);
+       z12l=(xpart .5[z13,z11],ypart (pos-.025*siz));
+       penpos13(.75penh,60);
+       z13=pos +.2vx+.15vy;
+       
+       % penlabels (1,2,3,4,5,10,11,12,13);
+
+       soft_penstroke (z1e..tension 1.1
+               ..z2e
+               ..z3e{right}..tension 1.5
+               ..z4e
+               ..z5e
+               ) slanted slant shifted (slant*-ypart pos,0);
+
+       soft_penstroke (z10e..tension 1.5
+               ..z11e
+               ..z12e..tension 1.1
+               ..z13e{(z13r-z13l) rotated 90}
+               ) slanted slant shifted (slant*-ypart pos,0);
+       endgroup;
+enddef;
+          
+def draw_tab_A(expr pos, siz, slant) =
+       begingroup;
+       clearxy;
+       pair vx,vy;
+       vx=(xpart siz) * dir 0;
+       vy=(ypart siz) * dir 90;
+       
+       penpos1(.75penh,-110);
+       z1r=pos+.07vy;
+       penpos2(penh,-75);
+       z2r=(.5[x1,x3],ypart pos);
+       penpos3(.25[penh,penw],-30);
+       z3=(.45[x2,x4],.15[y2,y4]);
+       penpos4(1[penh,penw],0);
+       z4=pos+.5vx+.975vy;
+
+       penpos5(1[penh,penw],-180);
+       z5=z4;
+       penpos6(.2[penh,penw],-150);
+       z6l=(.8[x5l,x7l],.9[y5l,y7l]);
+       penpos7(penh,-90);
+       z7r=(.5[x6,x8],ypart pos);
+       penpos8(.75penh,-70);
+       z8r=(xpart(pos+siz),y7r+.075ypart(siz));
+
+       penpos10(penh,-105);
+       z10=.2[z3,z4];
+       penpos11(.9penh,-90);
+       z11=.4[z10,z6]-0.05vy;
+       penpos12(.75penh,-75);
+       z12=.3[z11,z6]+0.02vy;
+
+       % penlabels(1,2,3,4,5,6,7,8,10,11,12);
+
+       soft_penstroke (z1e {(z1r-z1l) rotated 90}
+               ..z2e 
+               ..z3e
+               ..z4e
+               ) slanted slant shifted (slant*-ypart pos,0);
+
+       soft_penstroke (z5e
+               ..z6e 
+               ..z7e
+               ..z8e {(z8r-z8l) rotated 90}
+               ) slanted slant shifted (slant*-ypart pos,0);
+
+       soft_penstroke (z10e
+               ..z11e
+               ..z12e
+               ) slanted slant shifted (slant*-ypart pos,0);
+
+       endgroup;
+enddef;
+
+def draw_tab_B(expr pos, siz, slant) =
+       begingroup;
+       clearxy;
+       pair vx,vy;
+       vx=(xpart siz) * dir 0;
+       vy=(ypart siz) * dir 90;
+
+       penpos1(.75penh, 100);
+       z1=z2+(.15*vx-.1*vy);
+       penpos2(.9penw, 0);
+       z2l = pos+.75vy;
+       penpos3(penh,-100);
+       z3l = pos+.4vx+1.05vy;
+       penpos4(.8[penh,penw],-180);
+       z4=(xpart(pos+.75siz),.5[y3,y5]);
+       penpos5(.8penh,90);
+       z5=(.5[x10,x4],ypart (pos+.55siz));
+
+       penpos6(.8penh,270);
+       z6=z5;
+       penpos7(penw,180);
+       z7l=(xpart(pos+siz),.5[y6,y8]);
+       penpos8(.8penh,45);
+       z8=.5[z12l,z11l]+.15vx-.05vy;
+
+       penpos10(.75[penh,penw],170);
+       z10=pos+.375vx+.95vy;
+       penpos11(.8[penh,penw],150);
+       z11=z10-.5vy+.04vx;
+       penpos12(penh,100);
+       z12l=(xpart .5[z13,z11],ypart pos);
+       penpos13(.75penh,60);
+       z13=pos+.1vx+.15vy;
+       
+       % penlabels (1,2,3,4,5,6,7,8,10,11,12,13);
+
+       soft_penstroke (z1e..tension 1.1
+               ..z2e
+               ..z3e
+               ..z4e
+               ..z5e{left}
+               ) slanted slant shifted (slant*-ypart pos,0);
+
+       soft_penstroke (z6e{right}
+               ..z7e
+               ..z8e{(z8r-z8l) rotated 90}
+               ) slanted slant shifted (slant*-ypart pos,0);
+
+       soft_penstroke (z10e.. tension 1.5
+               ..z11e
+               ..z12e..tension 1.1
+               ..z13e{(z13r-z13l) rotated 90}
+               ) slanted slant shifted (slant*-ypart pos,0);
+       endgroup;
+enddef;
+
 def draw_tab_clef(expr reduction) =
-       save reduced_il;
+        save reduced_il,vx,vy,letterheight,penw,penh;
        reduced_il# = staff_space# * reduction;
-       define_pixels(reduced_il);
-       set_char_box(-.5reduced_il#,1.8reduced_il#,2.25reduced_il#,2.25reduced_il#);
-       bs := -d+0.65reduced_il;
-       cx := 0.5(-b+w);
-       xp := 0.32 reduced_il;
-       yp := 0.25reduced_il;
-        pickup pensquare xscaled xp yscaled yp;
-
-       draw (-b,h) -- (w,h);
-       draw (cx,h) -- (cx,h-1.2reduced_il);
-
-       pickup penrazor scaled yp rotated 90;
-       draw (-0.85b+0.15w,-0.25reduced_il) -- (-0.15b+0.85w,-0.25reduced_il);
-       pickup penrazor scaled xp;
-       draw (-b,-0.6reduced_il-yp/2) -- (cx,0.6reduced_il+yp/2) -- (w,-0.6reduced_il-yp/2);
-
-
-        pickup pensquare xscaled xp yscaled yp;
-       draw (-b,-d+1.2reduced_il) -- (-b,-d);
-        pickup pencircle xscaled xp yscaled yp;
-       draw (-b,-d) --- (cx,-d) .. (w,0.5(bs-d)) .. (cx,bs) --- (-b,bs) --- (cx,bs)
-            .. (0.3cx+0.7w,0.5(bs-d+1.2reduced_il)) .. (cx,-d+1.2reduced_il) --- (-b,-d+1.2reduced_il)
+       letterheight# = 1.8*reduced_il#;
+       define_pixels(reduced_il,letterheight);
+       set_char_box(-.2*reduced_il#,2.8*reduced_il#,1.6*letterheight#,1.6*letterheight#);
+
+               %draw_staff (-3,2, 0.5);
+
+       penw = .45reduced_il;
+       penh = .2reduced_il;
+
+       draw_tab_T((-b+.15reduced_il,h-letterheight),
+         (2.1*reduced_il,letterheight),0.2);
+       draw_tab_A((-b-.05reduced_il,-.5letterheight +.15reduced_il),
+         (2.2*reduced_il,letterheight),0.4);
+       draw_tab_B((-b+.025reduced_il,-d),
+         (2.1*reduced_il,letterheight),0.25);
 enddef;
 
 fet_beginchar("tab clef", "tab", "tabclef")
        draw_tab_clef(1.0);
 fet_endchar;
 
-fet_beginchar("tab clef", "tab_change", "ctabclef")
+fet_beginchar("tab clef (reduced)", "tab_change", "ctabclef")
        draw_tab_clef(.8);
 fet_endchar;