-% -*-Fundamental-*-
-% parmesan-flags.mf -- implement ancient flags
-%
-% source file of LilyPond's pretty-but-neat music font
-%
-% (c) 2001--2006 Juergen Reuter <reuter@ipd.uka.de>
+% Feta (not the Font-En-Tja) music font -- ancient flags
+% This file is part of LilyPond, the GNU music typesetter.
+%
+% Copyright (C) 2001--2011 Juergen Reuter <reuter@ipd.uka.de>
%
+%
+% LilyPond 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.
+%
+% LilyPond is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-fet_begingroup ("flags")
+fet_begingroup ("flags");
save between_staff_lines, on_staff_line, anywhere;
-between_staff_lines = 0;
-on_staff_line = 1;
-anywhere = 2;
+
+between_staff_lines := 0;
+on_staff_line := 1;
+anywhere := 2;
save dir_up, dir_down;
-dir_up = 1;
-dir_down = -1;
+
+dir_up := 1;
+dir_down := -1;
%%%%%%%%
%
%
-def draw_mensural_outermost_flare (expr staffline_adjustment) =
- define_pixels(linethickness, staff_space)
+def draw_mensural_outermost_flare (expr staffline_adjustment, d_) =
+ define_pixels (linethickness, staff_space);
- pickup pencircle
- xscaled 1.00 linethickness
- yscaled 0.22 staff_space
- rotated -35;
+ save ellipse, pat, T;
+ path ellipse, pat;
+ transform T;
- save za, zb, zc, zd, ze;
- pair za, zb, zc, zd, ze;
+ T := identity xscaled 1.00 linethickness
+ yscaled 0.22 staff_space
+ rotated -35;
+ pickup pencircle transformed T;
+ ellipse := fullcircle transformed T;
- za = (+0.00 staff_space, -0.00 staff_space);
- zb = (+0.15 staff_space, -0.00 staff_space);
+ z11 = (+0.00 staff_space, -0.00 staff_space);
+ z12 = (+0.15 staff_space, -0.00 staff_space);
if staffline_adjustment = between_staff_lines:
- zc = (+0.45 staff_space, -0.35 staff_space);
- zd = (+0.45 staff_space, -0.85 staff_space);
- ze = (+0.00 staff_space, -2.00 staff_space);
+ z13 = (+0.45 staff_space, -0.35 staff_space);
+ z14 = (+0.45 staff_space, -0.85 staff_space);
+ z15 = (+0.00 staff_space, -2.00 staff_space);
elseif staffline_adjustment = on_staff_line:
- zc = (+0.20 staff_space, -0.05 staff_space);
- zd = (+0.20 staff_space, -1.15 staff_space);
- ze = (+0.00 staff_space, -1.40 staff_space);
+ z13 = (+0.20 staff_space, -0.05 staff_space);
+ z14 = (+0.20 staff_space, -1.15 staff_space);
+ z15 = (+0.00 staff_space, -1.40 staff_space);
else: % staffline_adjustment = anywhere
- zc = (+0.33 staff_space, -0.20 staff_space);
- zd = (+0.33 staff_space, -1.00 staff_space);
- ze = (+0.00 staff_space, -1.70 staff_space);
+ z13 = (+0.33 staff_space, -0.20 staff_space);
+ z14 = (+0.33 staff_space, -1.00 staff_space);
+ z15 = (+0.00 staff_space, -1.70 staff_space);
fi;
- draw za .. zb -- zc{zc-zb} .. {ze-zd}zd -- ze;
+ pat := z13{z13 - z12}
+ .. {z15 - z14}z14;
+
+ fill get_subpath (ellipse, z11 - z12, z12 - z11, z11)
+ -- get_subpoint (ellipse, z12 - z11, z12)
+ -- get_subpoint (ellipse, z13 - z12, z12)
+ -- get_subpoint (ellipse, direction 0 of pat, z13)
+ {direction 0 of pat}
+ .. {direction 1 of pat}
+ get_subpoint (ellipse, direction 1 of pat, z14)
+ -- get_subpath (ellipse, z15 - z14, z14 - z15, z15)
+ -- get_subpoint (ellipse, -direction 1 of pat, z14)
+ {-direction 1 of pat}
+ .. {-direction 0 of pat}
+ get_subpoint (ellipse, -direction 0 of pat, z13)
+ -- get_subpath (ellipse, z12 - z13, z11 - z12, z12)
+ -- cycle;
+
+ if d_ = dir_up:
+ labels (11, 12, 13, 14, 15);
+ fi;
enddef;
-def draw_mensural_inner_flare(expr il_shift) =
- define_pixels(linethickness, staff_space)
-
- pickup pencircle
- xscaled 1.00 linethickness
- yscaled 0.22 staff_space
- rotated -35;
-
- save zs, za, zb, zc, zd;
- pair zs, za, zb, zc, zd;
- zs = (0, -il_shift * staff_space);
- za = zs + (+0.00 staff_space, -0.10 staff_space);
- zb = zs + (+0.33 staff_space, -0.30 staff_space);
- zc = zs + (+0.33 staff_space, -0.70 staff_space);
- zd = zs + (+0.00 staff_space, -0.90 staff_space);
-
- draw za{2,1} .. zb .. zc .. {-2,-1}zd;
+def draw_mensural_inner_flare (expr il_shift, idx, d_) =
+ define_pixels (linethickness, staff_space);
+
+ save ellipse, pat, T;
+ path ellipse, pat;
+ transform T;
+
+ T := identity xscaled 1.00 linethickness
+ yscaled 0.22 staff_space
+ rotated -35;
+ pickup pencircle transformed T;
+ ellipse := fullcircle transformed T;
+
+ save i;
+ numeric i[];
+
+ i0 := idx * 10;
+ i1 := idx * 10 + 1;
+ i2 := idx * 10 + 2;
+ i3 := idx * 10 + 3;
+ i4 := idx * 10 + 4;
+
+ z[i0] = (0, -il_shift * staff_space);
+ z[i1] = z[i0] + (+0.00 staff_space, -0.10 staff_space);
+ z[i2] = z[i0] + (+0.33 staff_space, -0.30 staff_space);
+ z[i3] = z[i0] + (+0.33 staff_space, -0.70 staff_space);
+ z[i4] = z[i0] + (+0.00 staff_space, -0.90 staff_space);
+
+ pat := z[i1]{2, 1}
+ .. z[i2]
+ .. z[i3]
+ .. {-2, -1}z[i4];
+
+ % we avoid cusps originally present in `draw pat'
+ fill get_subpath (ellipse,
+ -direction 0 of pat, direction 0 of pat, z[i1])
+ .. get_subpoint (ellipse, direction 1 of pat, z[i2])
+ {direction 1 of pat}
+ .. get_subpoint (ellipse, direction 2 of pat, z[i3])
+ {direction 2 of pat}
+ .. get_subpath (ellipse,
+ direction 3 of pat, -direction 3 of pat, z[i4])
+ .. get_subpoint (ellipse, -direction 2 of pat, z[i3])
+ {-direction 2 of pat}
+ .. get_subpoint (ellipse, -direction 1 of pat, z[i2])
+ {-direction 1 of pat}
+ .. cycle;
+
+ if d_ = dir_up:
+ labels ([i0], [i1], [i2], [i3], [i4]);
+ fi;
enddef;
-def draw_mensural_flag (expr staffline_adjustment, flares, direction) =
+
+def draw_mensural_flag (expr staffline_adjustment, flares, d_) =
save char_box_adjust, flare_shift;
+
if staffline_adjustment = between_staff_lines:
- flare_shift = 0.5;
+ flare_shift := 0.5;
elseif staffline_adjustment = on_staff_line:
- flare_shift = 0.0;
+ flare_shift := 0.0;
else: % staffline_adjustment = anywhere
- flare_shift = 0.25;
+ flare_shift := 0.25;
fi;
- char_box_adjust = flare_shift+0.5;
- if direction = dir_up:
- set_char_box(0,
- 0.60 staff_space#,
- (flares+char_box_adjust)*staff_space#,
- 0.10 staff_space#)
- else: % direction = dir_down
- set_char_box(0.60 staff_space#,
- 0,
- 0.10 staff_space#,
- (flares+char_box_adjust)*staff_space#)
+
+ char_box_adjust := flare_shift + 0.5;
+
+ if d_ = dir_up:
+ set_char_box (0,
+ 0.60 staff_space#,
+ (flares + char_box_adjust) * staff_space#,
+ 0.10 staff_space#);
+ else: % d_ = dir_down
+ set_char_box (0.60 staff_space#,
+ 0,
+ 0.10 staff_space#,
+ (flares + char_box_adjust) * staff_space#);
fi;
- draw_mensural_outermost_flare (staffline_adjustment)
+
+ draw_mensural_outermost_flare (staffline_adjustment, d_);
+
for flare_count := 2 step 1 until 4:
if flares >= flare_count:
- draw_mensural_inner_flare(flare_shift+flare_count-0.5)
+ draw_mensural_inner_flare (flare_shift
+ + flare_count - 0.5,
+ flare_count, d_);
fi;
endfor;
- if direction = dir_down:
- currentpicture := currentpicture xscaled -1 yscaled -1;
+
+ if d_ = dir_down:
+ currentpicture := currentpicture xscaled -1
+ yscaled -1;
fi;
enddef;
+
% 8th mensural flag, upwards, between staff lines
-fet_beginchar("8th Mensural Flag (up)", "mensuralu03")
- draw_mensural_flag (between_staff_lines, 1, dir_up)
+fet_beginchar ("8th Mensural Flag (up)", "mensuralu03");
+ draw_mensural_flag (between_staff_lines, 1, dir_up);
fet_endchar;
+
% 8th mensural flag, upwards, on staff line
-fet_beginchar("8th Mensural Flag (up)", "mensuralu13")
- draw_mensural_flag (on_staff_line, 1, dir_up)
+fet_beginchar ("8th Mensural Flag (up)", "mensuralu13");
+ draw_mensural_flag (on_staff_line, 1, dir_up);
fet_endchar;
+
% 8th mensural flag, upwards, anywhere
-fet_beginchar("8th Mensural Flag (up)", "mensuralu23")
- draw_mensural_flag (anywhere, 1, dir_up)
+fet_beginchar ("8th Mensural Flag (up)", "mensuralu23");
+ draw_mensural_flag (anywhere, 1, dir_up);
fet_endchar;
+
% 8th mensural flag, downwards, between staff lines
-fet_beginchar("8th Mensural Flag (down)", "mensurald03")
- draw_mensural_flag (between_staff_lines, 1, dir_down)
+fet_beginchar ("8th Mensural Flag (down)", "mensurald03");
+ draw_mensural_flag (between_staff_lines, 1, dir_down);
fet_endchar;
+
% 8th mensural flag, downwards, on staff line
-fet_beginchar("8th Mensural Flag (down)", "mensurald13")
- draw_mensural_flag (on_staff_line, 1, dir_down)
+fet_beginchar ("8th Mensural Flag (down)", "mensurald13");
+ draw_mensural_flag (on_staff_line, 1, dir_down);
fet_endchar;
+
% 8th mensural flag, downwards, anywhere
-fet_beginchar("8th Mensural Flag (down)", "mensurald23")
- draw_mensural_flag (anywhere, 1, dir_down)
+fet_beginchar ("8th Mensural Flag (down)", "mensurald23");
+ draw_mensural_flag (anywhere, 1, dir_down);
fet_endchar;
+
% 16th mensural flag, upwards, between staff lines
-fet_beginchar("16th Mensural Flag (up)", "mensuralu04")
- draw_mensural_flag (between_staff_lines, 2, dir_up)
+fet_beginchar ("16th Mensural Flag (up)", "mensuralu04");
+ draw_mensural_flag (between_staff_lines, 2, dir_up);
fet_endchar;
+
% 16th mensural flag, upwards, on staff line
-fet_beginchar("16th Mensural Flag (up)", "mensuralu14")
- draw_mensural_flag (on_staff_line, 2, dir_up)
+fet_beginchar ("16th Mensural Flag (up)", "mensuralu14");
+ draw_mensural_flag (on_staff_line, 2, dir_up);
fet_endchar;
+
% 16th mensural flag, upwards, anywhere
-fet_beginchar("16th Mensural Flag (up)", "mensuralu24")
- draw_mensural_flag (anywhere, 2, dir_up)
+fet_beginchar ("16th Mensural Flag (up)", "mensuralu24");
+ draw_mensural_flag (anywhere, 2, dir_up);
fet_endchar;
+
% 16th mensural flag, downwards, between staff lines
-fet_beginchar("16th Mensural Flag (down)", "mensurald04")
- draw_mensural_flag (between_staff_lines, 2, dir_down)
+fet_beginchar ("16th Mensural Flag (down)", "mensurald04");
+ draw_mensural_flag (between_staff_lines, 2, dir_down);
fet_endchar;
+
% 16th mensural flag, downwards, on staff line
-fet_beginchar("16th Mensural Flag (down)", "mensurald14")
- draw_mensural_flag (on_staff_line, 2, dir_down)
+fet_beginchar ("16th Mensural Flag (down)", "mensurald14");
+ draw_mensural_flag (on_staff_line, 2, dir_down);
fet_endchar;
+
% 16th mensural flag, downwards, anywhere
-fet_beginchar("16th Mensural Flag (down)", "mensurald24")
- draw_mensural_flag (anywhere, 2, dir_down)
+fet_beginchar ("16th Mensural Flag (down)", "mensurald24");
+ draw_mensural_flag (anywhere, 2, dir_down);
fet_endchar;
+
% 32th mensural flag, upwards, between staff lines
-fet_beginchar("32th Mensural Flag (up)", "mensuralu05")
- draw_mensural_flag (between_staff_lines, 3, dir_up)
+fet_beginchar ("32th Mensural Flag (up)", "mensuralu05");
+ draw_mensural_flag (between_staff_lines, 3, dir_up);
fet_endchar;
+
% 32th mensural flag, upwards, on staff line
-fet_beginchar("32th Mensural Flag (up)", "mensuralu15")
- draw_mensural_flag (on_staff_line, 3, dir_up)
+fet_beginchar ("32th Mensural Flag (up)", "mensuralu15");
+ draw_mensural_flag (on_staff_line, 3, dir_up);
fet_endchar;
+
% 32th mensural flag, upwards, anywhere
-fet_beginchar("32th Mensural Flag (up)", "mensuralu25")
- draw_mensural_flag (anywhere, 3, dir_up)
+fet_beginchar ("32th Mensural Flag (up)", "mensuralu25");
+ draw_mensural_flag (anywhere, 3, dir_up);
fet_endchar;
+
% 32th mensural flag, downwards, between staff lines
-fet_beginchar("32th Mensural Flag (down)", "mensurald05")
- draw_mensural_flag (between_staff_lines, 3, dir_down)
+fet_beginchar ("32th Mensural Flag (down)", "mensurald05");
+ draw_mensural_flag (between_staff_lines, 3, dir_down);
fet_endchar;
+
% 32th mensural flag, downwards, on staff line
-fet_beginchar("32th Mensural Flag (down)", "mensurald15")
- draw_mensural_flag (on_staff_line, 3, dir_down)
+fet_beginchar ("32th Mensural Flag (down)", "mensurald15");
+ draw_mensural_flag (on_staff_line, 3, dir_down);
fet_endchar;
+
% 32th mensural flag, downwards, anywhere
-fet_beginchar("32th Mensural Flag (down)", "mensurald25")
- draw_mensural_flag (anywhere, 3, dir_down)
+fet_beginchar ("32th Mensural Flag (down)", "mensurald25");
+ draw_mensural_flag (anywhere, 3, dir_down);
fet_endchar;
+
% 64th mensural flag, upwards, between staff lines
-fet_beginchar("64th Mensural Flag (up)", "mensuralu06")
- draw_mensural_flag (between_staff_lines, 4, dir_up)
+fet_beginchar ("64th Mensural Flag (up)", "mensuralu06");
+ draw_mensural_flag (between_staff_lines, 4, dir_up);
fet_endchar;
+
% 64th mensural flag, upwards, on staff line
-fet_beginchar("64th Mensural Flag (up)", "mensuralu16")
- draw_mensural_flag (on_staff_line, 4, dir_up)
+fet_beginchar ("64th Mensural Flag (up)", "mensuralu16");
+ draw_mensural_flag (on_staff_line, 4, dir_up);
fet_endchar;
+
% 64th mensural flag, upwards, anywhere
-fet_beginchar("64th Mensural Flag (up)", "mensuralu26")
- draw_mensural_flag (anywhere, 4, dir_up)
+fet_beginchar ("64th Mensural Flag (up)", "mensuralu26");
+ draw_mensural_flag (anywhere, 4, dir_up);
fet_endchar;
+
% 64th mensural flag, downwards, between staff lines
-fet_beginchar("64th Mensural Flag (down)", "mensurald06")
- draw_mensural_flag (between_staff_lines, 4, dir_down)
+fet_beginchar ("64th Mensural Flag (down)", "mensurald06");
+ draw_mensural_flag (between_staff_lines, 4, dir_down);
fet_endchar;
+
% 64th mensural flag, downwards, on staff line
-fet_beginchar("64th Mensural Flag (down)", "mensurald16")
- draw_mensural_flag (on_staff_line, 4, dir_down)
+fet_beginchar ("64th Mensural Flag (down)", "mensurald16");
+ draw_mensural_flag (on_staff_line, 4, dir_down);
fet_endchar;
+
% 64th mensural flag, downwards, anywhere
-fet_beginchar("64th Mensural Flag (down)", "mensurald26")
- draw_mensural_flag (anywhere, 4, dir_down)
+fet_beginchar ("64th Mensural Flag (down)", "mensurald26");
+ draw_mensural_flag (anywhere, 4, dir_down);
fet_endchar;
-fet_endgroup ("flags")
+
+fet_endgroup ("flags");