]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/parmesan-noteheads.mf
Issue 5167/6: Changes: show \markup xxx = ... \etc assignments
[lilypond.git] / mf / parmesan-noteheads.mf
index c1b6e1d53a7e84ac473e9eb6d672c5123764dc6b..00b8578cb403cce9130535aba551562e8f5b5a50 100644 (file)
@@ -1,15 +1,15 @@
 % Feta (not the Font-En-Tja) music font --  ancient note heads
 % This file is part of LilyPond, the GNU music typesetter.
 %
-% Copyright (C) 2001--2011 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2015 Juergen Reuter <reuter@ipd.uka.de>
 %
 % Neo-mensural heads originally by
 % Christian Mondrup and Mats Bengtsson
 %
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font is free software: you can redistribute it and/or modify
 % it under the terms of the GNU General Public License as published by
 % the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version.
+% (at your option) any later version, or under the SIL Open Font License.
 %
 % LilyPond is distributed in the hope that it will be useful,
 % but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -75,7 +75,7 @@ def draw_neomensural_brevis (expr brevwid, holeheight, open, full) =
                      head_height# / 2, head_height# / 2);
 
        2 beamheight + holeheight = head_height;
-       serif_size := .75 linethickness;
+       serif_size := blot_diameter;
        serif_protrude := .15 head_height;
 
        z1l = (0, 0);
@@ -166,14 +166,13 @@ def draw_neomensural_longa (expr wid, holeheight, direction) =
 enddef;
 
 
-def draw_neomensural_black_head (expr wid, height) =
-       save head_height, head_width, stem_width,
-                        ne, nw, ne_dist, nw_dist, penthickness;
+def draw_neomensural_black_head (expr width, height, concaveness) =
+       save head_width, head_height, stem_width;
+       save ne, nw, ne_dist, nw_dist;
        pair ne, nw, ne_dist, nw_dist;
 
-       penthickness# = linethickness#;
-       head_height# := height + penthickness#;
-       head_width# := wid + penthickness#;
+       head_width# := width;
+       head_height# := height;
        stem_width# := 1.3 linethickness#;
 
        set_char_box (0, head_width#,
@@ -182,12 +181,10 @@ def draw_neomensural_black_head (expr wid, height) =
        charwx := head_width# / 2;
        charwy := head_height# / 2 - 2 stem_width#;
 
-       define_pixels (penthickness);
-
        y3 = y1 = 0;
        x2 = x4 = 1/2 [x1, x3];
 
-       pickup pencircle scaled penthickness;
+       pickup pencircle scaled blot_diameter;
 
        top y2 = h;
        bot y4 = -d;
@@ -195,35 +192,35 @@ def draw_neomensural_black_head (expr wid, height) =
        rt x3 = w;
 
        ne := unitvector (z2 - z1);
-       nw_dist := (ne rotated 90) * penthickness / 2;
+       nw_dist := (ne rotated 90) * blot_diameter / 2;
        nw := unitvector (z2 - z3);
-       ne_dist := (nw rotated -90) * penthickness / 2;
+       ne_dist := (nw rotated -90) * blot_diameter / 2;
 
        fill lft z1
-            .. (z1 + nw_dist)
-            -- (z2 + nw_dist)
+            .. (z1 + nw_dist){ ne rotated -concaveness }
+            .. { ne rotated concaveness }(z2 + nw_dist)
             .. top z2
-            .. (z2 + ne_dist)
-            -- (z3 + ne_dist)
+            .. (z2 + ne_dist){ nw rotated (180 - concaveness) }
+            .. { nw rotated (180 + concaveness) }(z3 + ne_dist)
             .. rt z3
-            .. (z3 - nw_dist)
-            -- (z4 - nw_dist)
+            .. (z3 - nw_dist){ ne rotated (180 - concaveness) }
+            .. { ne rotated (180 + concaveness) }(z4 - nw_dist)
             .. bot z4
-            .. (z4 - ne_dist)
-            -- (z1 - ne_dist)
+            .. (z4 - ne_dist){ nw  rotated -concaveness }
+            .. { nw  rotated concaveness }(z1 - ne_dist)
             .. cycle;
 
        labels (1, 2, 3, 4);
 enddef;
 
 
-def draw_neomensural_open_head (expr wid, height)=
-       draw_neomensural_black_head (wid, height);
+def draw_neomensural_open_head (expr width, height, concaveness)=
+       draw_neomensural_black_head (width, height, concaveness);
 
        save headNW, headSW, stem_width;
 
-       headNW = length (z2 - z1) + penthickness;
-       headSW = length (z4 - z1) + penthickness;
+       headNW = length (z2 - z1) + blot_diameter;
+       headSW = length (z4 - z1) + blot_diameter;
        stem_width = 1.3 linethickness;
 
        save hole_widthNW, hole_widthSW;
@@ -233,8 +230,8 @@ def draw_neomensural_open_head (expr wid, height)=
 
        (rt z7 + lft z5) / 2 = (w / 2, 0);
        (bot z8 + top z6) / 2 = (w / 2, 0);
-       z6 - z5 = (hole_widthNW - penthickness) * unitvector (z2 - z1);
-       z7 - z6 = (hole_widthSW - penthickness) * unitvector (z4 - z1);
+       z6 - z5 = (hole_widthNW - blot_diameter) * unitvector (z2 - z1);
+       z7 - z6 = (hole_widthSW - blot_diameter) * unitvector (z4 - z1);
 
        unfill lft z5
               .. (z5 + nw_dist)
@@ -262,8 +259,9 @@ enddef;
 % (ze is wel breed)
 %
 
-save nm_maxima_width, nm_longa_width, nm_brevis_width,
-                nm_holeheight, nm_red_holeheight;
+save nm_maxima_width, nm_longa_width, nm_brevis_width;
+save nm_holeheight, nm_red_holeheight;
+
 nm_maxima_width := 2.6 staff_space#;
 nm_longa_width := 2 staff_space#;
 nm_brevis_width := nm_longa_width;
@@ -319,15 +317,15 @@ save nm_height, nm_width;
 nm_height := noteheight#;
 nm_width := staff_space#;
 fet_beginchar ("Neo-mensural semibrevis head", "s0neomensural");
-       draw_neomensural_open_head (nm_width, nm_height);
+       draw_neomensural_open_head (nm_width, nm_height, 0);
 fet_endchar;
 
 fet_beginchar ("Neo-mensural minima head", "s1neomensural");
-       draw_neomensural_open_head (nm_width, nm_height);
+       draw_neomensural_open_head (nm_width, nm_height, 0);
 fet_endchar;
 
 fet_beginchar ("Neo-mensural semiminima head", "s2neomensural");
-       draw_neomensural_black_head (nm_width, nm_height);
+       draw_neomensural_black_head (nm_width, nm_height, 0);
 fet_endchar;
 
 %%%%%%%%
@@ -344,13 +342,13 @@ fet_endchar;
 %
 
 fet_beginchar ("Harmonic notehead (Neo-mensural open)", "s0harmonic");
-       draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#);
+       draw_neomensural_open_head (1.3 staff_space#, 1.3 noteheight#, 5);
        charwx := head_width#;
        charwy := 0;
 fet_endchar;
 
 fet_beginchar ("Harmonic notehead (Neo-mensural black)", "s2harmonic");
-       draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#);
+       draw_neomensural_black_head (1.3 staff_space#, 1.3 noteheight#, 5);
        charwx := head_width#;
        charwy := 0;
 fet_endchar;
@@ -371,7 +369,7 @@ def draw_mensural_brevis (expr wid, holeheight, open, full) =
 enddef;
 
 
-def draw_mensural_longa (expr wid, holeheight, open, full, direction) =
+def draw_mensural_longa (expr wid, holeheight, open, full, direction, ligature) =
        draw_mensural_brevis (wid, holeheight, open, full);
 
        save dir;
@@ -384,7 +382,11 @@ def draw_mensural_longa (expr wid, holeheight, open, full, direction) =
        z17 = (x7, y7 - dir * stem_width / 2);
 
        penpos6 (stem_width, 0);
-       penpos7 (1.5 stem_width, 0);
+       if ligature:
+               penpos7 (stem_width, 0);
+       else:
+               penpos7 (1.5 stem_width, 0);
+       fi;
 
        fill z7l
             -- z6l
@@ -471,50 +473,87 @@ m_brevis_width := m_longa_width;
 m_holeheight := nm_holeheight;
 m_red_holeheight := nm_red_holeheight;
 
+
 fet_beginchar ("Mensural maxima notehead (up)", "uM3mensural");
-       draw_mensural_longa (m_maxima_width, m_holeheight, true, true, 1);
+       draw_mensural_longa (m_maxima_width, m_holeheight,
+                            true, true, 1, false);
 fet_endchar;
 
+
 fet_beginchar ("Mensural maxima notehead (down)", "dM3mensural");
-       draw_mensural_longa (m_maxima_width, m_holeheight, true, true, -1);
+       draw_mensural_longa (m_maxima_width, m_holeheight,
+                            true, true, -1, false);
 fet_endchar;
 
+
 fet_beginchar ("Mensural maxima notehead (ligature)", "sM3ligmensural");
        draw_mensural_brevis (m_maxima_width, m_holeheight, true, true);
 fet_endchar;
 
+
 fet_beginchar ("Mensural longa notehead (up)", "uM2mensural");
-       draw_mensural_longa (m_longa_width, m_holeheight, true, true, 1);
+       draw_mensural_longa (m_longa_width, m_holeheight,
+                            true, true, 1, false);
 fet_endchar;
 
+
 fet_beginchar ("Mensural longa notehead (down)", "dM2mensural");
-       draw_mensural_longa (m_longa_width, m_holeheight, true, true, -1);
+       draw_mensural_longa (m_longa_width, m_holeheight,
+                            true, true, -1, false);
+fet_endchar;
+
+fet_beginchar ("Mensural longa notehead (ligature)", "sM2ligmensural");
+       draw_mensural_longa (m_longa_width, m_holeheight,
+                            true, true, -1, true);
 fet_endchar;
 
+
 fet_beginchar ("Mensural brevis notehead", "sM1mensural");
        draw_mensural_brevis (m_brevis_width, m_holeheight, true, true);
 fet_endchar;
 
-fet_beginchar ("Mensural maxima notehead (up, reduced hole)", "urM3mensural");
-       draw_mensural_longa (m_maxima_width, m_red_holeheight, true, true, 1);
+
+fet_beginchar ("Mensural maxima notehead (up, reduced hole)",
+              "urM3mensural");
+       draw_mensural_longa (m_maxima_width, m_red_holeheight,
+                            true, true, 1, false);
 fet_endchar;
 
-fet_beginchar ("Mensural maxima notehead (down, reduced hole)", "drM3mensural");
-       draw_mensural_longa (m_maxima_width, m_red_holeheight, true, true, -1);
+
+fet_beginchar ("Mensural maxima notehead (down, reduced hole)",
+              "drM3mensural");
+       draw_mensural_longa (m_maxima_width, m_red_holeheight,
+                            true, true, -1, false);
 fet_endchar;
 
-fet_beginchar ("Mensural maxima notehead (ligature, reduced hole)", "srM3ligmensural");
+
+fet_beginchar ("Mensural maxima notehead (ligature, reduced hole)",
+              "srM3ligmensural");
        draw_mensural_brevis (m_maxima_width, m_red_holeheight, true, true);
 fet_endchar;
 
-fet_beginchar ("Mensural longa notehead (up, reduced hole)", "urM2mensural");
-       draw_mensural_longa (m_longa_width, m_red_holeheight, true, true, 1);
+
+fet_beginchar ("Mensural longa notehead (up, reduced hole)",
+              "urM2mensural");
+       draw_mensural_longa (m_longa_width, m_red_holeheight,
+                            true, true, 1, false);
 fet_endchar;
 
-fet_beginchar ("Mensural longa notehead (down, reduced hole)", "drM2mensural");
-       draw_mensural_longa (m_longa_width, m_red_holeheight, true, true, -1);
+
+fet_beginchar ("Mensural longa notehead (down, reduced hole)",
+              "drM2mensural");
+       draw_mensural_longa (m_longa_width, m_red_holeheight,
+                            true, true, -1, false);
 fet_endchar;
 
+
+fet_beginchar ("Mensural longa notehead (ligature, reduced hole)",
+              "srM2ligmensural");
+       draw_mensural_longa (m_longa_width, m_red_holeheight,
+                            true, true, -1, true);
+fet_endchar;
+
+
 fet_beginchar ("Mensural brevis notehead (reduced hole)", "srM1mensural");
        draw_mensural_brevis (m_brevis_width, m_red_holeheight, true, true);
 fet_endchar;
@@ -524,51 +563,95 @@ fet_endchar;
 % Semi-colored mensural/Petrucci maxima/longa/brevis
 %
 
-fet_beginchar ("Semi-colored mensural maxima notehead (up)", "uM3semimensural");
-       draw_mensural_longa (m_maxima_width, m_holeheight, true, false, 1);
+fet_beginchar ("Semi-colored mensural maxima notehead (up)",
+              "uM3semimensural");
+       draw_mensural_longa (m_maxima_width, m_holeheight,
+                            true, false, 1, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural maxima notehead (down)", "dM3semimensural");
-       draw_mensural_longa (m_maxima_width, m_holeheight, true, false, -1);
+
+fet_beginchar ("Semi-colored mensural maxima notehead (down)",
+              "dM3semimensural");
+       draw_mensural_longa (m_maxima_width, m_holeheight,
+                            true, false, -1, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural maxima notehead (ligature)", "sM3semiligmensural");
+
+fet_beginchar ("Semi-colored mensural maxima notehead (ligature)",
+              "sM3semiligmensural");
        draw_mensural_brevis (m_maxima_width, m_holeheight, true, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural longa notehead (up)", "uM2semimensural");
-       draw_mensural_longa (m_longa_width, m_holeheight, true, false, 1);
+
+fet_beginchar ("Semi-colored mensural longa notehead (up)",
+              "uM2semimensural");
+       draw_mensural_longa (m_longa_width, m_holeheight,
+                            true, false, 1, false);
+fet_endchar;
+
+
+fet_beginchar ("Semi-colored mensural longa notehead (down)",
+              "dM2semimensural");
+       draw_mensural_longa (m_longa_width, m_holeheight,
+                            true, false, -1, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural longa notehead (down)", "dM2semimensural");
-       draw_mensural_longa (m_longa_width, m_holeheight, true, false, -1);
+
+fet_beginchar ("Semi-colored mensural longa notehead (ligature)",
+              "sM2semiligmensural");
+       draw_mensural_longa (m_longa_width, m_holeheight,
+                            true, false, -1, true);
 fet_endchar;
 
+
 fet_beginchar ("Semi-colored mensural brevis notehead", "sM1semimensural");
        draw_mensural_brevis (m_brevis_width, m_holeheight, true, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural maxima notehead (up, reduced hole)", "urM3semimensural");
-       draw_mensural_longa (m_maxima_width, m_red_holeheight, true, false, 1);
+
+fet_beginchar ("Semi-colored mensural maxima notehead (up, reduced hole)",
+              "urM3semimensural");
+       draw_mensural_longa (m_maxima_width, m_red_holeheight,
+                            true, false, 1, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural maxima notehead (down, reduced hole)", "drM3semimensural");
-       draw_mensural_longa (m_maxima_width, m_red_holeheight, true, false, -1);
+
+fet_beginchar ("Semi-colored mensural maxima notehead (down, reduced hole)",
+              "drM3semimensural");
+       draw_mensural_longa (m_maxima_width, m_red_holeheight,
+                            true, false, -1, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural maxima notehead (ligature, reduced hole)", "srM3semiligmensural");
+
+fet_beginchar ("Semi-colored mensural maxima notehead (ligature, reduced hole)",
+              "srM3semiligmensural");
        draw_mensural_brevis (m_maxima_width, m_red_holeheight, true, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural longa notehead (up, reduced hole)", "urM2semimensural");
-       draw_mensural_longa (m_longa_width, m_red_holeheight, true, false, 1);
+
+fet_beginchar ("Semi-colored mensural longa notehead (up, reduced hole)",
+              "urM2semimensural");
+       draw_mensural_longa (m_longa_width, m_red_holeheight,
+                            true, false, 1, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural longa notehead (down, reduced hole)", "drM2semimensural");
-       draw_mensural_longa (m_longa_width, m_red_holeheight, true, false, -1);
+
+fet_beginchar ("Semi-colored mensural longa notehead (down, reduced hole)",
+              "drM2semimensural");
+       draw_mensural_longa (m_longa_width, m_red_holeheight,
+                            true, false, -1, false);
 fet_endchar;
 
-fet_beginchar ("Semi-colored mensural brevis notehead (reduced hole)", "srM1semimensural");
+
+fet_beginchar ("Semi-colored mensural longa notehead (ligature, reduced hole)",
+              "srM2semiligmensural");
+       draw_mensural_longa (m_longa_width, m_red_holeheight,
+                            true, false, -1, true);
+fet_endchar;
+
+
+fet_beginchar ("Semi-colored mensural brevis notehead (reduced hole)",
+              "srM1semimensural");
        draw_mensural_brevis (m_brevis_width, m_red_holeheight, true, false);
 fet_endchar;
 
@@ -578,25 +661,37 @@ fet_endchar;
 %
 
 fet_beginchar ("Black mensural maxima notehead (up)", "uM3blackmensural");
-       draw_mensural_longa (m_maxima_width, 0, false, false, 1);
+       draw_mensural_longa (m_maxima_width, 0, false, false, 1, false);
 fet_endchar;
 
+
 fet_beginchar ("Black mensural maxima notehead (down)", "dM3blackmensural");
-       draw_mensural_longa (m_maxima_width, 0, false, false, -1);
+       draw_mensural_longa (m_maxima_width, 0, false, false, -1, false);
 fet_endchar;
 
-fet_beginchar ("Black mensural maxima notehead (ligature)", "sM3blackligmensural");
+
+fet_beginchar ("Black mensural maxima notehead (ligature)",
+              "sM3blackligmensural");
        draw_mensural_brevis (m_maxima_width, 0, false, false);
 fet_endchar;
 
+
 fet_beginchar ("Black mensural longa notehead (up)", "uM2blackmensural");
-       draw_mensural_longa (m_longa_width, 0, false, false, 1);
+       draw_mensural_longa (m_longa_width, 0, false, false, 1, false);
 fet_endchar;
 
+
 fet_beginchar ("Black mensural longa notehead (down)", "dM2blackmensural");
-       draw_mensural_longa (m_longa_width, 0, false, false, -1);
+       draw_mensural_longa (m_longa_width, 0, false, false, -1, false);
 fet_endchar;
 
+
+fet_beginchar ("Black mensural longa notehead (ligature)",
+              "sM2blackligmensural");
+       draw_mensural_longa (m_longa_width, 0, false, false, -1, true);
+fet_endchar;
+
+
 fet_beginchar ("Black mensural brevis notehead", "sM1blackmensural");
        draw_mensural_brevis (m_brevis_width, 0, false, false);
 fet_endchar;
@@ -610,10 +705,12 @@ fet_beginchar ("Mensural semibrevis head", "s0mensural");
        draw_diamond_head (staff_space#, 0.15, 0.30, 30, true);
 fet_endchar;
 
+
 fet_beginchar ("Mensural minima head", "s1mensural");
        draw_diamond_head (staff_space#, 0.15, 0.30, 30, true);
 fet_endchar;
 
+
 fet_beginchar ("Mensural semiminima head", "s2mensural");
        draw_diamond_head (staff_space#, 0.15, 0.30, 30, false);
 fet_endchar;
@@ -636,19 +733,19 @@ fet_endchar;
 % Josquin Desprez, BNF
 
 save petrucci_width, petrucci_height;
-petrucci_height := 1.3 noteheight#;
+petrucci_height := 1.4 noteheight#;
 petrucci_width := .72 petrucci_height;
 
 fet_beginchar ("Petrucci semibrevis head", "s0petrucci");
-       draw_neomensural_open_head (petrucci_width, petrucci_height);
+       draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci minima head", "s1petrucci");
-       draw_neomensural_open_head (petrucci_width, petrucci_height);
+       draw_neomensural_open_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci semiminima head", "s2petrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 
@@ -657,15 +754,15 @@ fet_endchar;
 %
 
 fet_beginchar ("Petrucci colored semibrevis head", "s0blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci colored minima head", "s1blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 fet_beginchar ("Petrucci colored semiminima head", "s2blackpetrucci");
-       draw_neomensural_black_head (petrucci_width, petrucci_height);
+       draw_neomensural_black_head (petrucci_width, petrucci_height, 0);
 fet_endchar;
 
 
@@ -1685,4 +1782,337 @@ fet_beginchar ("Hufnagel pes lower punctum", "shufnagel.lpes")
 fet_endchar;
 
 
+%%%%%%%%%%%%
+%%
+%% Noteheads for Medieval East-Slavic (Kievan) Notation
+%% Code by Aleksandr Andreev <aleksandr.andreev@gmail.com>
+%%
+%%%%%%%%%%%%
+
+
+fet_beginchar ("Kievan final note", "sM2kievan");
+       % This draws the Final Note.
+       % It is the last note of a piece of music
+       % equivalent to having a whole note and fermata in CMN.
+       % It always has an invariant representation.
+
+       vert_bar_thickness# := 2 * stafflinethickness#;
+       vert_height# := 1.5 * staff_space#;
+       blank_space# := 1.5 * stafflinethickness#;
+       note_width#  := vert_height# - 2 * vert_bar_thickness#;
+
+       define_pixels (vert_height, blank_space, note_width);
+       define_blacker_pixels (vert_bar_thickness);
+
+       path p;
+       p := (0, blank_space)
+            -- (0, staff_space - blank_space)
+            -- (note_width + 0.5 vert_bar_thickness,
+                staff_space - blank_space)
+            -- (note_width + 0.5 vert_bar_thickness, blank_space)
+            -- cycle;
+       fill p;
+       fill p reflectedabout ((0, 0), (1, 0));
+
+       pickup pensquare xscaled vert_bar_thickness;
+
+       draw (note_width + 0.5 * vert_bar_thickness, vert_height)
+            -- (note_width + 0.5 * vert_bar_thickness, -vert_height);
+
+       set_char_box (0, note_width# + vert_bar_thickness#,
+                     vert_height#, vert_height#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan recitative mark", "sM1kievan");
+       inner_width# := 4 * staff_space#;
+       vert_bar_thickness# := 2 * stafflinethickness#;
+       vert_bar_height# := staff_space# - stafflinethickness#;
+       blank_space# := 0.20 * vert_bar_height#;
+
+       define_pixels (inner_width, blank_space, vert_bar_height);
+       define_blacker_pixels (vert_bar_thickness);
+
+       path p;
+       p := (2.5 * vert_bar_thickness, blank_space)
+            -- (2.5 * vert_bar_thickness, vert_bar_height - blank_space)
+            -- (3.5 * vert_bar_thickness + inner_width,
+                vert_bar_height - blank_space)
+            -- (3.5 * vert_bar_thickness + inner_width, blank_space)
+            -- cycle;
+       fill p;
+       fill p reflectedabout ((0, 0), (1, 0));
+
+       % draw the four vertical lines
+       pickup pensquare xscaled vert_bar_thickness;
+       p := (0.5 * vert_bar_thickness, vert_bar_height)
+            -- (0.5 * vert_bar_thickness, -vert_bar_height);
+       draw p;
+       draw p shifted (2 * vert_bar_thickness, 0);
+       draw p shifted (3 * vert_bar_thickness + inner_width, 0);
+       draw p shifted (5 * vert_bar_thickness + inner_width, 0);
+
+       set_char_box (0, 6 * vert_bar_thickness# + inner_width#,
+                     vert_bar_height#, vert_bar_height#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan whole note", "s0kievan");
+       % the amount by which top and bottom diamond overlap
+       overlap# := stafflinethickness#;
+       height# := staff_space# - stafflinethickness#;
+       width# := height# + overlap#;
+
+       define_pixels (overlap, height, width);
+
+       % parameters for superellipse are right, top, left, bottom
+       fill superellipse ((width, 0.5 * (height + overlap)),
+                          (width/2, height + overlap),
+                          (0, 0.5 * (height + overlap)),
+                          (width/2, -overlap),
+                          0.51);
+       fill superellipse ((width, -0.5 * (height + overlap)),
+                          (width/2, overlap),
+                          (0, -0.5 * (height + overlap)),
+                          (width/2, -height - overlap),
+                          0.51);
+
+       set_char_box (0, width#, height# + overlap#,
+                     height# + overlap#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan quarter note down", "d2kievan");
+       z1 = (0.09 * staff_space, 0.33 * staff_space);
+       z2 = (0.66 * staff_space, 0.37 * staff_space);
+       z3 = (0.99 * staff_space, 0.36 * staff_space);
+       z4 = (0.90 * staff_space, -1.05 * staff_space);
+       z5 = (1.02 * staff_space, -2.19 * staff_space);
+       z6 = (0.60 * staff_space, -2.49 * staff_space);
+       z7 = (0.58 * staff_space, -1.91 * staff_space);
+       z8 = (0.73 * staff_space, -0.35 * staff_space);
+       z9 = (0.02 * staff_space, -0.39 * staff_space);
+       z10 = (0, -0.24 * staff_space);
+
+       fill z1{dir 8.6}
+            .. z2
+            .. z3
+            & z3
+            .. z4
+            .. z5
+            -- z6
+            .. z7
+            .. z8
+            & z8{left}
+            .. z9
+            & z9
+            .. z10
+            ... {dir 75}cycle;
+
+       set_char_box (0, 1.02 staff_space#,
+                     2.50 staff_space#, 0.40 staff_space#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan quarter note up", "u2kievan");
+       z1 = (0.090 staff_space, -0.330 staff_space);
+       z2 = (0.664 staff_space, -0.371 staff_space);
+       z3 = (0.986 staff_space, -0.363 staff_space);
+       z4 = (0.897 staff_space, 1.051 staff_space);
+       z5 = (1.019 staff_space, 2.387 staff_space);
+       z6 = (0.603 staff_space, 2.587 staff_space);
+       z7 = (0.583 staff_space, 1.911 staff_space);
+       z8 = (0.725 staff_space, 0.346 staff_space);
+       z9 = (0.017 staff_space, 0.391 staff_space);
+       z10 = (0, 0.240 staff_space);
+
+       fill z1{dir -6.9}
+            .. z2
+            .. z3
+            & z3
+            .. z4
+            .. z5
+            -- z6
+            .. z7
+            .. z8
+            & z8{left}
+            .. z9
+            & z9
+            .. z10
+            ... {dir -76.9}cycle;
+
+       set_char_box (0, 1.02 staff_space#,
+                     0.40 staff_space#, 2.6 staff_space#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan half note (line position)", "s1kievan");
+       % This draws the half note with a short tail up and a long tail down.
+       % This version of the half note is used on any line of the staff.
+
+       z1 = (1.031 staff_space, 0.945 staff_space);
+       z2 = (0.945 staff_space, -0.122 staff_space);
+       z3 = (1.059 staff_space, -1.393 staff_space);
+       z4 = (0.713 staff_space, -1.564 staff_space);
+       z5 = (0.672 staff_space, -0.729 staff_space);
+       z6 = (0.684 staff_space, -0.318 staff_space);
+       z7 = (0.448 staff_space, -0.326 staff_space);
+       z8 = (0, -0.281 staff_space);
+       z9 = (0.086 staff_space, 0.350 staff_space);
+       z10 = (0.746 staff_space, 0.277 staff_space);
+       z11 = (0.909 staff_space, 0.921 staff_space);
+
+       fill z1
+            .. z2{down}
+            .. z3
+            -- z4
+            .. z5{up}
+            .. z6
+            & z6
+            .. z7{left}
+            .. z8
+            -- z9
+            .. {right}z10
+            & z10{up}
+            .. z11
+            -- cycle;
+
+       set_char_box (0, 1.06 staff_space#,
+                     1.6 staff_space#, 1.0 staff_space#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan half note (space position)", "sr1kievan");
+       % This draws the half note with a short tail down and a long tail up.
+       % This version of the half note is used in any space of the staff.
+
+       z1 = (1.071 staff_space, 1.426 staff_space);
+       z2 = (0.974 staff_space, 0.191 staff_space);
+       z3 = (1.059 staff_space, -0.994 staff_space);
+       z4 = (0.713 staff_space, -1.169 staff_space);
+       z5 = (0.676 staff_space, -0.436 staff_space);
+       z6 = (0.684 staff_space, -0.310 staff_space);
+       z7 = (0.448 staff_space, -0.322 staff_space);
+       z8 = (0, -0.277 staff_space);
+       z9 = (0.0856 staff_space, 0.359 staff_space);
+       z10 = (0.746 staff_space, 0.281 staff_space);
+       z11 = (0.807 staff_space, 0.847 staff_space);
+       z12 = (0.945 staff_space, 1.401 staff_space);
+
+       fill z1
+            .. z2{down}
+            .. z3
+            -- z4
+            .. z5{up}
+            .. z6
+            & z6
+            .. z7{left}
+            .. z8
+            -- z9
+            .. z10{right}
+            & z10
+            .. z11
+            .. z12
+            -- cycle;
+
+       set_char_box (0, 1.1 staff_space#,
+                     1.0 staff_space#, 1.4 staff_space#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan eighth note (down)", "d3kievan");
+       % This draws the eighth note.
+       % This form of the eight note occurs on the third line or higher
+       % and sometimes between the second line and the third line.
+
+       z1 = (0.261 staff_space, 0.416 staff_space);
+       z2 = (1.022 staff_space, 0.269 staff_space);
+       z3 = (0.664 staff_space, -0.603 staff_space);
+       z4 = (1.259 staff_space, -0.726 staff_space);
+       z5 = (1.055 staff_space, -2.012 staff_space);
+       z6 = (1.186 staff_space, -2.794 staff_space);
+       z7 = (0.778 staff_space, -2.999 staff_space);
+       z8 = (0.741 staff_space, -2.567 staff_space);
+       z9 = (0.941 staff_space, -1.467 staff_space);
+       z10 = (0.33 staff_space, -1.340 staff_space);
+       z11 = (0.631 staff_space, -0.448 staff_space);
+       z12 = (0, -0.334 staff_space);
+
+       fill z1{right}
+            .. z2
+            -- z3{right}
+            .. z4
+            & z4
+            .. z5{down}
+            .. z6
+            -- z7
+            .. z8{up}
+            .. z9
+            & z9
+            .. {left}z10
+            & z10{dir 78.7}
+            .. z11
+            & z11
+            .. {left}z12
+            & z12{dir 78.7}
+            .. {dir 62}cycle;
+
+       set_char_box (0, 1.25 staff_space#,
+                     3.0 staff_space#, 0.5 staff_space#);
+fet_endchar;
+
+
+fet_beginchar ("Kievan eighth note (up)", "u3kievan");
+       % This draws the flagged eighth note.
+       % This version of the eighth note occurs on the second line or lower.
+
+       % first, draw the upside down quarter note
+       z1 = (0.090 staff_space, -0.33 staff_space);
+       z2 = (0.664 staff_space, -0.371 staff_space);
+       z3 = (0.986 staff_space, -0.363 staff_space);
+       z4 = (0.896 staff_space, 1.051 staff_space);
+       z5 = (1.019 staff_space, 2.387 staff_space);
+       z6 = (0.603 staff_space, 2.587 staff_space);
+       z7 = (0.583 staff_space, 1.911 staff_space);
+       z8 = (0.725 staff_space, 0.346 staff_space);
+       z9 = (0.016 staff_space, 0.391 staff_space);
+       z10 = (0, 0.240 staff_space);
+
+       fill z1{dir -6.9}
+            .. z2
+            .. z3
+            & z3
+            .. z4
+            .. z5
+            -- z6
+            .. z7
+            .. z8
+            & z8{left}
+            .. z9
+            & z9
+            .. z10
+            ... {dir -76.9}cycle;
+
+       % now, draw the stem
+       z11 = (0.033 staff_space, 2.823 staff_space);
+       z12 = (0.391 staff_space, 2.648 staff_space);
+       z13 = (0.354 staff_space, 2.290 staff_space);
+       z14 = (0.676 staff_space, 1.076 staff_space);
+       z15 = (0.693 staff_space, 0.88 staff_space);
+       z16 = (0.208 staff_space, 1.699 staff_space);
+       z17 = (0.024 staff_space, 2.616 staff_space);
+
+       fill z11
+            -- z12
+            .. z13{down}
+            .. z14
+            -- z15
+            .. z16
+            .. z17{up}
+            .. cycle;
+
+       set_char_box (0, 1.0 staff_space#,
+                     0.4 staff_space#, 2.9 staff_space#);
+fet_endchar;
+
 fet_endgroup ("noteheads");