% Feta (not the Font-En-Tja) music font -- implement scripts
% This file is part of LilyPond, the GNU music typesetter.
%
-% Copyright (C) 1997--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+% Copyright (C) 1997--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
%
-% 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_endchar;
+fet_beginchar ("halfopen vertical", "halfopenvertical");
+ save thin, height, width, thick, factor, slash;
+
+ factor := 3/2;
+ height# = 5/4 width#;
+ height# = staff_space#;
+ thin = 0.6 linethickness + 0.06 staff_space;
+ slash# = 1.05 linethickness#;
+
+ set_char_box (width# / 2, width# / 2,
+ height# / 2, height# / 2);
+
+ define_pixels (width, height, slash);
+
+ 2 thick + 0.6 (height - 2 thin) = width;
+
+ penpos1 (thick, 0);
+ penpos2 (thin, 90);
+ penpos3 (thick, 180);
+ penpos4 (thin, 270);
+ z1r = (w, 0);
+ z2r = (0, h);
+ z3r = (-w, 0);
+ z4r = (0, -h);
+
+ penlabels (1, 2, 3, 4);
+
+ penstroke z1e{up}
+ .. z2e{left}
+ .. z3e{down}
+ .. z4e{right}
+ .. cycle;
+
+ draw_brush ((0, -h * factor), slash,
+ (0, h * factor), slash);
+fet_endchar;
+
+
fet_beginchar ("plus (stopped)", "stopped");
save hthick, vthick, size, outer_hsize, outer_vsize;
penlabels (range 1 thru 8);
fet_endchar;
+
fet_beginchar ("Varied Segno", "varsegno");
save ht, wd, loopdist, loopangle;
save thin, med, thick;
- save bulbradius;
+ save bulbradius, center;
+ pair center;
ht# = 8 staff_space#;
wd# = 2.5 staff_space#;
set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2);
- %set_char_box (0, 0, ht# / 2, ht# / 2);
+ % set_char_box (0, 0, ht# / 2, ht# / 2);
loopdist = 4/3 staff_space;
loopangle = 35;
thick = 1/2 staff_space;
- med = 1/4 staff_space;
+ med = 1/4 staff_space;
thin = 1/10 staff_space;
x1 = staff_space;
y1 = 13/4 staff_space;
- penpos1 (med, 210);
+ penpos1 (med, 210);
z2l = (0, 4 staff_space);
penpos2 (med, 270 - loopangle);
y3 = y1 + 1/4 staff_space;
penpos3 (med, 270 + loopangle);
- pair center;
center = (0, 2 staff_space);
- z4 = (3/4 staff_space, 2 staff_space) rotatedabout (center, 180 - loopangle);
- z5 = 2[z4,center];
- x9 = x4; y9 = y4 - 2 loopdist;
- x10 = x5; y10 = y5 - 2 loopdist;
- penpos4 (thick, 90 - loopangle);
- penpos5 (thick, 90 - loopangle);
- penpos9 (thick, 90 - loopangle);
+ z4 = (3/4 staff_space, 2 staff_space)
+ rotatedabout (center, 180 - loopangle);
+ z5 = 2[z4, center];
+ x9 = x4;
+ y9 = y4 - 2 loopdist;
+ x10 = x5;
+ y10 = y5 - 2 loopdist;
+
+ penpos4 (thick, 90 - loopangle);
+ penpos5 (thick, 90 - loopangle);
+ penpos9 (thick, 90 - loopangle);
penpos10 (thick, 90 - loopangle);
- z6 = (4/3 staff_space, 4/3 staff_space) rotatedabout (2/3 center, -loopangle);
- x11 = x6; y11 = y6 - 2 loopdist;
- penpos6 (thin, -loopangle);
+ z6 = (4/3 staff_space, 4/3 staff_space)
+ rotatedabout (2/3 center, -loopangle);
+ x11 = x6;
+ y11 = y6 - 2 loopdist;
+
+ penpos6 (thin, -loopangle);
penpos11 (thin, -loopangle);
z7 = 1/3 center;
z12 = -center;
penpos12 (thick, 270 - loopangle);
- z1' = 4/3[z1l,z1r];
- bulbradius = length ( z1l - z1');
+ z1' = 4/3[z1l, z1r];
+ bulbradius = length (z1l - z1');
pickup pencircle scaled 2 bulbradius;
- drawdot z1';
+
+ save se_dir, nw_dir;
+ pair se_dir, nw_dir;
+ se_dir := dir -loopangle;
+ nw_dir := dir (180 - loopangle);
+
+ draw_bulb (-1, z1r, z1l, bulbradius, .8);
penstroke z1e
- .. z2e
- .. z3e
- .. z4e{dir (-loopangle)}
- .. z5e{dir (-loopangle)}
- .. z6e
- .. z7e
- .. z8e
- .. z9e{dir (-loopangle)}
- .. z10e{dir (-loopangle)}
- .. z11e
- .. {dir (180 - loopangle)}z12e;
+ .. z2e
+ .. z3e
+ ... {se_dir}z4e
+ -- z5e{se_dir}
+ ... z6e
+ ... z7e{nw_dir}
+ ... z8e
+ ... {se_dir}z9e
+ -- z10e{se_dir}
+ ... z11e
+ ... {nw_dir}z12e;
addto currentpicture also currentpicture scaled -1;
penlabels (1, 1', 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
- %draw_staff (-2, 2, 0);
fet_endchar;
-
fet_beginchar ("Coda", "coda");
save stickout, thin, thick, codawidth, codaheight;
fet_beginchar ("Arpeggio", "arpeggio");
+ begingroup;
save height, overshoot, width;
- height# = staff_space#;
- width# = 0.8 height#;
- overshoot# = 0.25 staff_space#;
+ height# := staff_space#;
+ width# := 0.8 * height#;
+ overshoot# := 0.25 * staff_space#;
define_pixels (height, overshoot, width);
-
set_char_box (0, width#, 0, height#);
draw_arpeggio;
penlabels (range 1 thru 9);
- draw_staff (-2, 2, 0.0);
+ draw_staff_if_debugging (-2, 2);
+ endgroup;
fet_endchar;
%
fet_beginchar ("Trill_element", "trill_element");
- save height, overshoot;
+ begingroup;
+ save height, overshoot, width;
height# = staff_space#;
width# = 0.8 height#;
overshoot# = 0.25 staff_space#;
currentpicture := currentpicture shifted -(width / 2, height / 2);
currentpicture := currentpicture rotated 90;
currentpicture := currentpicture shifted (height / 2, width / 2);
+ endgroup;
fet_endchar;
fet_endchar;
+% A tick character to use instead of a comma or caesura as a breath mark.
+% Very common in vocal notation.
+
+fet_beginchar ("Tick mark", "tickmark");
+ save end_rad, bot_rad, pat, x_centre, x_extent;
+ path pat;
+
+ end_rad = linethickness / 2;
+ bot_rad = linethickness;
+
+ x_centre# = 0.6 staff_space#;
+ x_extent# = 1.7 staff_space#;
+
+ define_pixels (x_centre, x_extent);
+
+ pickup pencircle scaled end_rad;
+
+ lft x1 = -x_centre;
+ y1 = 0.8 staff_space;
+
+ x2 = 0;
+ y2l = 0;
+
+ top rt z3 = (x_extent - x_centre, x_extent);
+
+ x4 = lft x1;
+ y4 = staff_space;
+
+ penpos2 (0.4 staff_space, 90);
+ penpos3 (end_rad, angle(z4 - z3) + 90);
+ penpos1 (end_rad, angle(z2 - z1) + 90);
+
+ pat = z1r
+ .. top z1
+ .. z1l{z2 - z1}
+ .. {z2 - (z1 + (0.3 staff_space,0))}z2l + (-bot_rad, bot_rad)
+ .. z2l
+ .. z2l + (bot_rad, bot_rad){z3 - (0.6 staff_space, 0) - z2}
+ .. {z3 - z4}z3r
+ .. rt z3
+ .. {z4 - z3}z3l
+ .. {z2 - (z3 - (0.6 staff_space, 0))}rt z2r
+ .. {z1 - z2}lft z2r{z1 - z2}
+ .. cycle;
+ fill pat;
+
+ set_char_box (x_centre#, x_extent# - x_centre#, 0, x_extent#);
+
+ penlabels (1, 2, 3);
+ labels (4);
+fet_endchar;
+
+
fet_beginchar ("snap pizzicato (Bartok pizzicato)", "snappizzicato");
save height, width, thickness, superness;