% Feta (not the Font-En-Tja) music font -- ancient clefs
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
+% Copyright (C) 2001--2015 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% 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
fet_beginchar ("Ed. Vat. do clef", "vaticana.do");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_vaticana_do_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Ed. Vat. fa clef", "vaticana.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_vaticana_fa_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Ed. Med. do clef", "medicaea.do");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_medicaea_do_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Ed. Med. fa clef", "medicaea.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_medicaea_fa_clef ((0, 0), 1.0);
fet_endchar;
penlabels (1, 2, 3);
enddef;
+
%
% Draw two brevis notes; the second one shifted down by `shift'.
% The other parameters are the same as with `draw_brevis'.
enddef;
-%
-% Draw three brevis notes; the second one shifted down by `shift',
-% the third one by `2 shift'.
-% The other parameters are the same as with `draw_brevis'.
-%
-def draw_triple_brevis (expr exact_center, bwidth, bheight,
- blinethickness, shift) =
- save brevis_width, brevis_height, linethickness;
-
- brevis_width# = bwidth;
- brevis_height# = bheight;
- linethickness# = blinethickness;
-
- save beam_width, beam_height;
- save serif_size, serif_protrude, hole_height;
-
- beam_width# = 1.4 linethickness#;
- hole_height# = 3 linethickness#;
- 2 beam_height# + hole_height# = brevis_height#;
- serif_size# = (hole_height# - linethickness#) / 2;
- serif_protrude# = 1.5 serif_size#;
-
- save xoffs, yoffs;
-
- xoffs# = xpart exact_center;
- yoffs# = ypart exact_center;
-
- define_pixels (xoffs, yoffs);
- define_pixels (brevis_width, brevis_height, linethickness);
- define_pixels (beam_width, beam_height, serif_size, serif_protrude);
-
- z1l = (xoffs, yoffs - linethickness);
- z2r = z1r + serif_size * (1, -1);
- z3l = z2l + (-serif_size, -serif_protrude);
-
- penpos1 (beam_width, 0);
- penpos2 (beam_height, 90);
- penpos3 (beam_width, 180);
-
- z7 = z1 shifted (0, -2 shift);
- z8 = z2 shifted (0, -2 shift);
- z9 = z3 shifted (0, -2 shift);
-
- penpos7 (beam_width, 0);
- penpos8 (beam_height, 90);
- penpos9 (beam_width, 180);
-
- save pat_in, pat_out;
- path pat_in, pat_out;
-
- pat_out := z9r{down}
- .. z9l{up}
- .. z8l{right};
- pat_out := pat_out
- -- reverse pat_out xscaled -1
- shifted (2 xoffs + brevis_width, 0);
- pat_out := pat_out
- -- reverse pat_out yscaled -1
- shifted (0, -2 yoffs)
- -- cycle;
-
- fill pat_out;
-
- pat_in := z1r{down}
- .. z2r{right};
- pat_in := pat_in
- -- reverse pat_in xscaled -1
- shifted (2 xoffs + brevis_width, 0);
- pat_in := pat_in
- -- reverse pat_in yscaled -1
- shifted (0, 2 yoffs)
- -- cycle;
-
- unfill pat_in;
- unfill pat_in shifted (0, -shift);
- unfill pat_in shifted (0, -2 shift);
-
- penlabels (1, 2, 3, 7, 8, 9);
-enddef;
-
-
def draw_neomensural_c_clef (expr exact_center, reduction) =
save reduced_il, reduced_slt, stem_width;
fet_beginchar ("neo-mensural c clef", "neomensural.c");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_neomensural_c_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("petrucci c1 clef", "petrucci.c1");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), +2, 1.0);
fet_endchar;
fet_beginchar ("petrucci c2 clef", "petrucci.c2");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), +1, 1.0);
fet_endchar;
fet_beginchar ("petrucci c3 clef", "petrucci.c3");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), 0, 1.0);
fet_endchar;
fet_beginchar ("petrucci c4 clef", "petrucci.c4");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), -1, 1.0);
fet_endchar;
fet_beginchar ("petrucci c5 clef", "petrucci.c5");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_c_clef ((0, 0), -2, 1.0);
fet_endchar;
fet_endchar;
-def draw_mensural_c_clef (expr exact_center, reduction) =
- % inspired by Ockeghem, "Missa Prolationum", in: MGG, volume
- % 9, table 94.
-
- save reduced_il;
+def draw_mensural_c_clef (expr exact_center, reduction, fill_char) =
+ save reduced_il, vert_thick, hor_thick, blot_rad;
reduced_il# = staff_space# * reduction;
+ vert_thick# = linethickness# * 1.4;
+ hor_thick# = staff_space# * reduction * 0.25;
+
+ blot_rad = blot_diameter / 2;
+
+ define_pixels (reduced_il, vert_thick, hor_thick);
+
+ pickup pencircle scaled blot_diameter;
+
+ penpos1 (vert_thick, 0);
+ penpos2 (vert_thick, 0);
+ penpos3 (hor_thick, 90);
+ penpos4 (hor_thick, 90);
+ penpos5 (hor_thick, 90);
+ penpos6 (hor_thick, 90);
+ penpos7 (vert_thick, 0);
+ penpos8 (hor_thick, 90);
+
+ z1l = (0, 0);
+ x2l = 0;
+ top y2 = 2.2 reduced_il;
+ z3 = (vert_thick, 0.75 reduced_il);
+ z4 = z3 + (reduced_il - vert_thick, 0);
+ z5 = z4 + (vert_thick, -0.5 reduced_il);
+ z6 = z5 - (reduced_il, 0);
+ z7 = z4 + (0.5 vert_thick, 0.5 reduced_il);
+ z8 = z5 - (vert_thick, 0);
+
+ save pat, pat_mid;
+ path pat, pat_mid;
+
+ pat = z1l
+ -- z2l{up}
+ .. z2 + (0, blot_rad)
+ .. {down}z2r
+ -- top z3r{down}
+ .. {right}rt z3r
+ -- lft z4r{right}
+ .. {up}top z4r
+ -- z7l{up}
+ .. z7 + (0, blot_rad)
+ .. {down}z7r
+ -- top z5l{down}
+ .. {left}lft z5l
+ -- rt z6l{left}
+ .. {down}bot z6l
+ --z1r;
+ pat := pat
+ -- reverse pat yscaled -1
+ -- cycle;
+ fill pat;
- define_pixels (reduced_il);
-
- draw_triple_brevis (exact_center + (0, 0.5 staff_space#),
- 2 reduced_il#, 0.8 staff_space#,
- 0.8 linethickness#, staff_space);
-
- save half_reduced_il;
-
- half_reduced_il# = staff_space# * sqrt (reduction);
-
- define_pixels (half_reduced_il);
-
- set_char_box (0 - xpart exact_center,
- 2 reduced_il# + xpart exact_center,
- 2.2 half_reduced_il# + staff_space# -
- 2 ypart exact_center,
- 2.2 half_reduced_il# + 2 ypart exact_center);
-
- save xoffs, yoffs;
-
- xoffs# = xpart exact_center;
- yoffs# = ypart exact_center;
-
- define_pixels (xoffs, yoffs);
-
- save ellipse, T;
- path ellipse;
- transform T;
+ if fill_char:
+ pat_mid = bot z3l{up}
+ .. {right}rt z3l
+ -- lft z4l{right}
+ .. {down}bot z4l
+ -- top z8r{down}
+ .. {left}lft z8r
+ -- rt z6r{left}
+ .. {up}top z6r
+ --cycle;
+ unfill pat_mid;
+
+ pat_mid := pat_mid shifted (0, -reduced_il);
+ unfill pat_mid;
+ fi;
- T := identity xscaled 1.4 linethickness
- yscaled blot_diameter;
- pickup pencircle transformed T;
- ellipse := fullcircle transformed T;
+ set_char_box (0, reduced_il# + vert_thick#,
+ 2.2 reduced_il#, 2.2 reduced_il#);
- lft x11 = lft x13 = xoffs;
- top y11 = yoffs + 2.2 half_reduced_il;
- bot y13 = yoffs - 2.2 half_reduced_il - staff_space;
- rt x15 = rt x17 = xoffs + brevis_width;
- y15 = yoffs + 1.4 half_reduced_il;
- y17 = yoffs - 1.4 half_reduced_il - staff_space;
+ penlabels (1, 2, 3, 4, 5, 6, 7, 8);
+enddef;
- z12 = z14 yscaled -1 shifted (0, -staff_space);
- z14 = z9;
- z16 = z18 yscaled -1 shifted (0, -staff_space);
- rt z18 = lft z14 shifted (brevis_width, 0);
- penpos12 (1.4 linethickness, 0);
- penpos14 (1.4 linethickness, 0);
- penpos16 (1.4 linethickness, 0);
- penpos18 (1.4 linethickness, 0);
+fet_beginchar ("mensural c clef", "mensural.c");
+ draw_staff_if_debugging (-1, 3);
+ draw_mensural_c_clef ((0, 0), 1.0, true);
+fet_endchar;
- fill get_subpath (ellipse, up, down, z11)
- -- z12l
- -- z12r
- -- cycle;
- fill get_subpath (ellipse, down, up, z13)
- -- z14r
- -- z14l
- -- cycle;
- fill get_subpath (ellipse, up, down, z15)
- -- z16l
- -- z16r
- -- cycle;
- fill get_subpath (ellipse, down, up, z17)
- -- z18r
- -- z18l
- -- cycle;
- labels (11, 13, 15, 17);
- penlabels (12, 14, 16, 18);
-enddef;
+fet_beginchar ("mensural c clef", "mensural.c_change");
+ draw_mensural_c_clef ((0, 0), .8, true);
+fet_endchar;
-fet_beginchar ("mensural c clef", "mensural.c");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
- draw_mensural_c_clef ((0, 0), 1.0);
+fet_beginchar ("black mensural c clef", "blackmensural.c");
+ draw_staff_if_debugging (-1, 3);
+ draw_mensural_c_clef ((0, 0), 1.0, false);
fet_endchar;
-fet_beginchar ("mensural c clef", "mensural.c_change");
- draw_mensural_c_clef ((0, 0), .8);
+fet_beginchar ("black mensural c clef", "blackmensural.c_change");
+ draw_mensural_c_clef ((0, 0), 0.8, false);
fet_endchar;
fet_beginchar ("petrucci f clef", "petrucci.f");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_f_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("mensural f clef", "mensural.f");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_mensural_f_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("petrucci g clef", "petrucci.g");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_g_clef ((0, 0), 1.0);
fet_endchar;
% until the code for the mensural g clef will be rewritten.
%
fet_beginchar ("mensural g clef", "mensural.g");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_petrucci_g_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Hufnagel do clef", "hufnagel.do");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_hufnagel_do_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Hufnagel fa clef", "hufnagel.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_hufnagel_fa_clef ((0, 0), 1.0);
fet_endchar;
fet_beginchar ("Hufnagel do/fa clef", "hufnagel.do.fa");
- if test = 1:
- draw_staff (-1, 3, 0.0);
- fi;
+ draw_staff_if_debugging (-1, 3);
draw_hufnagel_do_fa_clef ((0, 0), 1.0);
fet_endchar;
fet_endchar;
+%%%%%%%%
+%%
+%% Medieval East-Slavic (Kievan) Notation clefs
+%% Code by Aleksandr Andreev <aleksandr.andreev@gmail.com>
+%%
+%%%%%%%%
+
+def draw_kievan_do_clef =
+ z1 = (1.108 staff_space, 0.554 staff_space);
+ z2 = (1.063 staff_space, -0.122 staff_space);
+ z3 = (1.467 staff_space, -1.621 staff_space);
+ z4 = (1.002 staff_space, -2.253 staff_space);
+
+ y5 = y3;
+ x4 - x5 = x3 - x4;
+
+ z6 = (0.917 staff_space, -0.383 staff_space);
+ z7 = (0.012 staff_space, -0.448 staff_space);
+ z8 = (0, -0.167 staff_space);
+ z9 = (0.057 staff_space, 0.464 staff_space);
+ z10 = (0.994 staff_space, 0.387 staff_space);
+ z11 = (1.023 staff_space, 0.554 staff_space);
+
+ fill z1
+ .. z2{down}
+ .. z3
+ -- z4
+ -- z5
+ .. {up}z6
+ & z6{left}
+ .. z7
+ & z7
+ .. z8{up}
+ .. z9
+ & z9
+ .. {right}z10
+ & z10
+ .. z11
+ -- cycle;
+
+ set_char_box (0, 1.5 staff_space#,
+ 2.25 staff_space#, 0.55 staff_space#);
+enddef;
+
+
+fet_beginchar ("Kievan tsefaut clef", "kievan.do");
+ % This draws the Tse-Fa-Ut clef; it is a variant alto clef that
+ % always occurs on the third line of the staff.
+ draw_kievan_do_clef;
+fet_endchar;
+
+
+fet_beginchar ("Kievan tsefaut clef", "kievan.do_change");
+ % This is the same thing as a do clef?
+ draw_kievan_do_clef;
+fet_endchar;
+
fet_endgroup ("clefs");