1 % Feta (not the Font-En-Tja) music font -- ancient time signatures
2 % This file is part of LilyPond, the GNU music typesetter.
4 % Copyright (C) 1998--2010 Mats Bengtsson <matsb@s3.kth.se>,
5 % Christian Mondrup <scancm@biobase.dk>
6 % Copyright (C) 2002--2010 Juergen Reuter <reuter@ipd.uka.de>
9 % LilyPond is free software: you can redistribute it and/or modify
10 % it under the terms of the GNU General Public License as published by
11 % the Free Software Foundation, either version 3 of the License, or
12 % (at your option) any later version.
14 % LilyPond is distributed in the hope that it will be useful,
15 % but WITHOUT ANY WARRANTY; without even the implied warranty of
16 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 % GNU General Public License for more details.
19 % You should have received a copy of the GNU General Public License
20 % along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
22 fet_begingroup ("timesig");
25 path threequartercircle;
27 threequartercircle := halfcircle & quartercircle rotated 180;
29 save mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin;
31 mensural_Cdiameter# := 3/2 staff_space#;
32 mensural_Cthickness# := 2 linethickness#;
33 mensural_Chairpin# := 0.5 linethickness#;
35 define_pixels (mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin);
47 def draw_nail (expr bottom_left, top_right) =
50 round = floor min (blot_diameter,
51 xpart (top_right-bottom_left),
52 ypart (top_right-bottom_left));
54 pickup pencircle scaled round;
56 z2 + (round / 2, round / 2) = top_right +
57 (mensural_Cthickness / 2, 0);
58 z4 - (round / 2,round / 2) = bottom_left;
61 x2 = x1 + mensural_Cthickness / 2;
65 y5 = y6 = y2 - 2 mensural_Cthickness;
79 % labels (1, 2, 3, 4, 5, 6);
83 def mensural_timesig (expr verbose_name, internal_name,
84 full_circle, reverse_circle, slashed, dotted) =
85 fet_beginchar (verbose_name, internal_name);
89 mensural_Cdiameter# + mensural_Cthickness#,
90 .75 (mensural_Cdiameter# + mensural_Cthickness#),
91 .75 (mensural_Cdiameter# + mensural_Cthickness#));
93 if (full_circle or dotted):
94 draw_nail ((-mensural_Cthickness / 2, -d),
95 (mensural_Cthickness / 2, h));
96 elseif reverse_circle:
97 draw_nail ((0, -d), (mensural_Cthickness, h));
99 draw_nail ((-mensural_Cthickness, -d), (0, h));
104 mensural_Cdiameter# + mensural_Cthickness#,
105 .5 (mensural_Cdiameter# + mensural_Cthickness#),
106 .5 (mensural_Cdiameter# + mensural_Cthickness#));
112 ellipse := fullcircle xscaled mensural_Cthickness
113 yscaled mensural_Chairpin;
124 pat := fullcircle scaled mensural_Cdiameter;
126 fill get_subpoint (ellipse,
129 for i = 1 step 1 until length pat:
130 .. get_subpoint (ellipse,
135 unfill get_subpoint (ellipse,
138 for i = 1 step 1 until length pat:
139 .. get_subpoint (ellipse,
145 pat := threequartercircle rotated rot
146 scaled mensural_Cdiameter;
148 fill get_subpath (ellipse,
152 for i = 1 step 1 until (length pat - 1):
153 .. get_subpoint (ellipse,
157 .. get_subpath (ellipse,
158 direction infinity of pat,
159 -direction infinity of pat,
160 point infinity of pat)
161 for i = (length pat - 1) step -1 until 1:
162 .. get_subpoint (ellipse,
170 pickup pencircle scaled 4 linethickness;
174 currentpicture := currentpicture
175 shifted 0.5 (mensural_Cdiameter
176 + mensural_Cthickness, 0);
181 %% tempus imperfectum cum prolatione imperfecta
182 mensural_timesig ("Mensural 4/4 meter", "mensural44",
183 false, false, false, false);
186 %% tempus imperfectum cum prolatione imperfecta proportio dupla
187 mensural_timesig ("Mensural 2/2 meter", "mensural22",
188 false, false, true, false);
191 %% tempus perfectum cum prolatione imperfecta
192 mensural_timesig ("Mensural 3/2 meter", "mensural32",
193 true, false, false, false);
196 %% tempus imperfectum cum prolatione perfecta
197 mensural_timesig ("Mensural 6/4 meter", "mensural64",
198 false, false, false, true);
201 %% tempus perfectum cum prolatione perfecta
202 mensural_timesig ("Mensural 9/4 meter", "mensural94",
203 true, false, false, true);
206 %% tempus perfectum cum prolatione imperfecta proportio dupla
207 mensural_timesig ("Mensural 3/4 meter", "mensural34",
208 true, false, true, false);
211 %% tempus imperfectum cum prolatione perfecta proportio dupla
212 mensural_timesig ("Mensural 6/8 meter", "mensural68",
213 false, false, true, true);
216 %% tempus perfectum cum prolatione perfecta proportio dupla
217 mensural_timesig ("Mensural 9/8 meter", "mensural98",
218 true, false, true, true);
221 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
222 mensural_timesig ("Mensural 4/8 meter", "mensural48",
223 false, true, false, false);
226 %% tempus imperfectum cum prolatione perfecta diminutio simplex
227 mensural_timesig ("Mensural 6/8 meter", "mensural68alt",
228 false, true, false, true);
231 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
232 mensural_timesig ("Mensural 2/4 meter", "mensural24",
233 false, true, true, false);
240 % NEO-MENSURAL NOTATION
245 save neomensural_Cdiameter, neomensural_Cthickness;
247 neomensural_Cdiameter# := 3/2 staff_space#;
248 neomensural_Cthickness# := 2 linethickness#;
250 define_pixels (neomensural_Cdiameter, neomensural_Cthickness);
253 def neomensural_timesig (expr verbose_name, internal_name,
254 full_circle, reverse_circle, slashed, dotted) =
255 fet_beginchar (verbose_name, internal_name);
258 neomensural_Cdiameter# + neomensural_Cthickness#,
259 .5 (neomensural_Cdiameter# + neomensural_Cthickness#),
260 .5 (neomensural_Cdiameter# + neomensural_Cthickness#));
263 pickup penrazor scaled neomensural_Cthickness;
266 t := neomensural_Cthickness / 2;
268 if (full_circle or dotted):
271 elseif reverse_circle:
283 ellipse := fullcircle scaled neomensural_Cthickness;
294 pat := fullcircle scaled neomensural_Cdiameter;
296 fill get_subpoint (ellipse,
299 for i = 1 step 1 until length pat:
300 .. get_subpoint (ellipse,
305 unfill get_subpoint (ellipse,
308 for i = 1 step 1 until length pat:
309 .. get_subpoint (ellipse,
315 pat := threequartercircle rotated rot
316 scaled neomensural_Cdiameter;
318 fill get_subpath (ellipse,
322 for i = 1 step 1 until (length pat - 1):
323 .. get_subpoint (ellipse,
327 .. get_subpath (ellipse,
328 direction infinity of pat,
329 -direction infinity of pat,
330 point infinity of pat)
331 for i = (length pat - 1) step -1 until 1:
332 .. get_subpoint (ellipse,
340 pickup pencircle scaled 4 linethickness;
344 currentpicture := currentpicture
345 shifted 0.5 (neomensural_Cdiameter
346 + neomensural_Cthickness, 0);
351 %% tempus imperfectum cum prolatione imperfecta
352 neomensural_timesig ("Mensural 4/4 meter", "neomensural44",
353 false, false, false, false);
356 %% tempus imperfectum cum prolatione imperfecta proportio dupla
357 neomensural_timesig ("Mensural 2/2 meter", "neomensural22",
358 false, false, true, false);
361 %% tempus perfectum cum prolatione imperfecta
362 neomensural_timesig ("Mensural 3/2 meter", "neomensural32",
363 true, false, false, false);
366 %% tempus imperfectum cum prolatione perfecta
367 neomensural_timesig ("Mensural 6/4 meter", "neomensural64",
368 false, false, false, true);
371 %% tempus perfectum cum prolatione perfecta
372 neomensural_timesig ("Mensural 9/4 meter", "neomensural94",
373 true, false, false, true);
376 %% tempus perfectum cum prolatione imperfecta proportio dupla
377 neomensural_timesig ("Mensural 3/4 meter", "neomensural34",
378 true, false, true, false);
381 %% tempus imperfectum cum prolatione perfecta proportio dupla
382 neomensural_timesig ("Mensural 6/8 meter", "neomensural68",
383 false, false, true, true);
386 %% tempus perfectum cum prolatione perfecta proportio dupla
387 neomensural_timesig ("Mensural 9/8 meter", "neomensural98",
388 true, false, true, true);
391 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
392 neomensural_timesig ("Mensural 4/8 meter", "neomensural48",
393 false, true, false, false);
396 %% tempus imperfectum cum prolatione perfecta diminutio simplex
397 neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt",
398 false, true, false, true);
401 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
402 neomensural_timesig ("Mensural 2/4 meter", "neomensural24",
403 false, true, true, false);
406 fet_endgroup ("timesig");