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--2012 Mats Bengtsson <matsb@s3.kth.se>,
5 % Christian Mondrup <scancm@biobase.dk>
6 % Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
8 % The LilyPond font is free software: you can redistribute it and/or modify
9 % it under the terms of the GNU General Public License as published by
10 % the Free Software Foundation, either version 3 of the License, or
11 % (at your option) any later version, or under the SIL Open Font License.
13 % LilyPond is distributed in the hope that it will be useful,
14 % but WITHOUT ANY WARRANTY; without even the implied warranty of
15 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 % GNU General Public License for more details.
18 % You should have received a copy of the GNU General Public License
19 % along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
21 fet_begingroup ("timesig");
24 path threequartercircle;
26 threequartercircle := halfcircle & quartercircle rotated 180;
28 save mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin;
30 mensural_Cdiameter# := 3/2 staff_space#;
31 mensural_Cthickness# := 2 linethickness#;
32 mensural_Chairpin# := 0.5 linethickness#;
34 define_pixels (mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin);
46 def draw_nail (expr bottom_left, top_right) =
49 round = floor min (blot_diameter,
50 xpart (top_right-bottom_left),
51 ypart (top_right-bottom_left));
53 pickup pencircle scaled round;
55 z2 + (round / 2, round / 2) = top_right +
56 (mensural_Cthickness / 2, 0);
57 z4 - (round / 2,round / 2) = bottom_left;
60 x2 = x1 + mensural_Cthickness / 2;
64 y5 = y6 = y2 - 2 mensural_Cthickness;
78 % labels (1, 2, 3, 4, 5, 6);
82 def mensural_timesig (expr verbose_name, internal_name,
83 full_circle, reverse_circle, slashed, dotted) =
84 fet_beginchar (verbose_name, internal_name);
88 mensural_Cdiameter# + mensural_Cthickness#,
89 .75 (mensural_Cdiameter# + mensural_Cthickness#),
90 .75 (mensural_Cdiameter# + mensural_Cthickness#));
92 if (full_circle or dotted):
93 draw_nail ((-mensural_Cthickness / 2, -d),
94 (mensural_Cthickness / 2, h));
95 elseif reverse_circle:
96 draw_nail ((0, -d), (mensural_Cthickness, h));
98 draw_nail ((-mensural_Cthickness, -d), (0, h));
103 mensural_Cdiameter# + mensural_Cthickness#,
104 .5 (mensural_Cdiameter# + mensural_Cthickness#),
105 .5 (mensural_Cdiameter# + mensural_Cthickness#));
111 ellipse := fullcircle xscaled mensural_Cthickness
112 yscaled mensural_Chairpin;
123 pat := fullcircle scaled mensural_Cdiameter;
125 fill get_subpoint (ellipse,
128 for i = 1 step 1 until length pat:
129 .. get_subpoint (ellipse,
134 unfill get_subpoint (ellipse,
137 for i = 1 step 1 until length pat:
138 .. get_subpoint (ellipse,
144 pat := threequartercircle rotated rot
145 scaled mensural_Cdiameter;
147 fill get_subpath (ellipse,
151 for i = 1 step 1 until (length pat - 1):
152 .. get_subpoint (ellipse,
156 .. get_subpath (ellipse,
157 direction infinity of pat,
158 -direction infinity of pat,
159 point infinity of pat)
160 for i = (length pat - 1) step -1 until 1:
161 .. get_subpoint (ellipse,
169 pickup pencircle scaled 4 linethickness;
173 currentpicture := currentpicture
174 shifted 0.5 (mensural_Cdiameter
175 + mensural_Cthickness, 0);
180 %% tempus imperfectum cum prolatione imperfecta
181 mensural_timesig ("Mensural 4/4 meter", "mensural44",
182 false, false, false, false);
185 %% tempus imperfectum cum prolatione imperfecta proportio dupla
186 mensural_timesig ("Mensural 2/2 meter", "mensural22",
187 false, false, true, false);
190 %% tempus perfectum cum prolatione imperfecta
191 mensural_timesig ("Mensural 3/2 meter", "mensural32",
192 true, false, false, false);
195 %% tempus imperfectum cum prolatione perfecta
196 mensural_timesig ("Mensural 6/4 meter", "mensural64",
197 false, false, false, true);
200 %% tempus perfectum cum prolatione perfecta
201 mensural_timesig ("Mensural 9/4 meter", "mensural94",
202 true, false, false, true);
205 %% tempus perfectum cum prolatione imperfecta proportio dupla
206 mensural_timesig ("Mensural 3/4 meter", "mensural34",
207 true, false, true, false);
210 %% tempus imperfectum cum prolatione perfecta proportio dupla
211 mensural_timesig ("Mensural 6/8 meter", "mensural68",
212 false, false, true, true);
215 %% tempus perfectum cum prolatione perfecta proportio dupla
216 mensural_timesig ("Mensural 9/8 meter", "mensural98",
217 true, false, true, true);
220 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
221 mensural_timesig ("Mensural 4/8 meter", "mensural48",
222 false, true, false, false);
225 %% tempus imperfectum cum prolatione perfecta diminutio simplex
226 mensural_timesig ("Mensural 6/8 meter", "mensural68alt",
227 false, true, false, true);
230 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
231 mensural_timesig ("Mensural 2/4 meter", "mensural24",
232 false, true, true, false);
239 % NEO-MENSURAL NOTATION
244 save neomensural_Cdiameter, neomensural_Cthickness;
246 neomensural_Cdiameter# := 3/2 staff_space#;
247 neomensural_Cthickness# := 2 linethickness#;
249 define_pixels (neomensural_Cdiameter, neomensural_Cthickness);
252 def neomensural_timesig (expr verbose_name, internal_name,
253 full_circle, reverse_circle, slashed, dotted) =
254 fet_beginchar (verbose_name, internal_name);
257 neomensural_Cdiameter# + neomensural_Cthickness#,
258 .5 (neomensural_Cdiameter# + neomensural_Cthickness#),
259 .5 (neomensural_Cdiameter# + neomensural_Cthickness#));
262 pickup penrazor scaled neomensural_Cthickness;
265 t := neomensural_Cthickness / 2;
267 if (full_circle or dotted):
270 elseif reverse_circle:
282 ellipse := fullcircle scaled neomensural_Cthickness;
293 pat := fullcircle scaled neomensural_Cdiameter;
295 fill get_subpoint (ellipse,
298 for i = 1 step 1 until length pat:
299 .. get_subpoint (ellipse,
304 unfill get_subpoint (ellipse,
307 for i = 1 step 1 until length pat:
308 .. get_subpoint (ellipse,
314 pat := threequartercircle rotated rot
315 scaled neomensural_Cdiameter;
317 fill get_subpath (ellipse,
321 for i = 1 step 1 until (length pat - 1):
322 .. get_subpoint (ellipse,
326 .. get_subpath (ellipse,
327 direction infinity of pat,
328 -direction infinity of pat,
329 point infinity of pat)
330 for i = (length pat - 1) step -1 until 1:
331 .. get_subpoint (ellipse,
339 pickup pencircle scaled 4 linethickness;
343 currentpicture := currentpicture
344 shifted 0.5 (neomensural_Cdiameter
345 + neomensural_Cthickness, 0);
350 %% tempus imperfectum cum prolatione imperfecta
351 neomensural_timesig ("Mensural 4/4 meter", "neomensural44",
352 false, false, false, false);
355 %% tempus imperfectum cum prolatione imperfecta proportio dupla
356 neomensural_timesig ("Mensural 2/2 meter", "neomensural22",
357 false, false, true, false);
360 %% tempus perfectum cum prolatione imperfecta
361 neomensural_timesig ("Mensural 3/2 meter", "neomensural32",
362 true, false, false, false);
365 %% tempus imperfectum cum prolatione perfecta
366 neomensural_timesig ("Mensural 6/4 meter", "neomensural64",
367 false, false, false, true);
370 %% tempus perfectum cum prolatione perfecta
371 neomensural_timesig ("Mensural 9/4 meter", "neomensural94",
372 true, false, false, true);
375 %% tempus perfectum cum prolatione imperfecta proportio dupla
376 neomensural_timesig ("Mensural 3/4 meter", "neomensural34",
377 true, false, true, false);
380 %% tempus imperfectum cum prolatione perfecta proportio dupla
381 neomensural_timesig ("Mensural 6/8 meter", "neomensural68",
382 false, false, true, true);
385 %% tempus perfectum cum prolatione perfecta proportio dupla
386 neomensural_timesig ("Mensural 9/8 meter", "neomensural98",
387 true, false, true, true);
390 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
391 neomensural_timesig ("Mensural 4/8 meter", "neomensural48",
392 false, true, false, false);
395 %% tempus imperfectum cum prolatione perfecta diminutio simplex
396 neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt",
397 false, true, false, true);
400 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
401 neomensural_timesig ("Mensural 2/4 meter", "neomensural24",
402 false, true, true, false);
405 fet_endgroup ("timesig");