% Feta (not the Font-En-Tja) music font -- ancient time signatures % This file is part of LilyPond, the GNU music typesetter. % % Copyright (C) 1998--2015 Mats Bengtsson , % Christian Mondrup % Copyright (C) 2002--2015 Juergen Reuter % % 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, 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 % 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 . fet_begingroup ("timesig"); path threequartercircle; threequartercircle := halfcircle & quartercircle rotated 180; save mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin; mensural_Cdiameter# := 3/2 staff_space#; mensural_Cthickness# := 2 linethickness#; mensural_Chairpin# := 0.5 linethickness#; define_pixels (mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin); %%%%%%%% % % % % MENSURAL NOTATION % % % def draw_nail (expr bottom_left, top_right) = save round; round = floor min (blot_diameter, xpart (top_right-bottom_left), ypart (top_right-bottom_left)); pickup pencircle scaled round; z2 + (round / 2, round / 2) = top_right + (mensural_Cthickness / 2, 0); z4 - (round / 2,round / 2) = bottom_left; y3 = y2; y4 = y1; x2 = x1 + mensural_Cthickness / 2; x2 - x1 = x4 - x3; x5 = x1; x6 = x4; y5 = y6 = y2 - 2 mensural_Cthickness; fill bot z1{right} .. rt z1{up} -- rt z5{up} .. rt z2 .. top z2{left} -- top z3{left} .. lft z3 .. lft z6{down} -- lft z4{down} .. bot z4{right} -- cycle; % labels (1, 2, 3, 4, 5, 6); enddef; def mensural_timesig (expr verbose_name, internal_name, full_circle, reverse_circle, slashed, dotted) = fet_beginchar (verbose_name, internal_name); if slashed: set_char_box ( 0, mensural_Cdiameter# + mensural_Cthickness#, .75 (mensural_Cdiameter# + mensural_Cthickness#), .75 (mensural_Cdiameter# + mensural_Cthickness#)); if (full_circle or dotted): draw_nail ((-mensural_Cthickness / 2, -d), (mensural_Cthickness / 2, h)); elseif reverse_circle: draw_nail ((0, -d), (mensural_Cthickness, h)); else: draw_nail ((-mensural_Cthickness, -d), (0, h)); fi; else: set_char_box ( 0, mensural_Cdiameter# + mensural_Cthickness#, .5 (mensural_Cdiameter# + mensural_Cthickness#), .5 (mensural_Cdiameter# + mensural_Cthickness#)); fi; save ellipse, pat; path ellipse, pat; ellipse := fullcircle xscaled mensural_Cthickness yscaled mensural_Chairpin; save rot; if reverse_circle: rot := 225; else: rot := 45; fi; if full_circle: pat := fullcircle scaled mensural_Cdiameter; fill get_subpoint (ellipse, direction 0 of pat, point 0 of pat) for i = 1 step 1 until length pat: .. get_subpoint (ellipse, direction i of pat, point i of pat) endfor .. cycle; unfill get_subpoint (ellipse, -direction 0 of pat, point 0 of pat) for i = 1 step 1 until length pat: .. get_subpoint (ellipse, -direction i of pat, point i of pat) endfor .. cycle; else: pat := threequartercircle rotated rot scaled mensural_Cdiameter; fill get_subpath (ellipse, -direction 0 of pat, direction 0 of pat, point 0 of pat) for i = 1 step 1 until (length pat - 1): .. get_subpoint (ellipse, direction i of pat, point i of pat) endfor .. get_subpath (ellipse, direction infinity of pat, -direction infinity of pat, point infinity of pat) for i = (length pat - 1) step -1 until 1: .. get_subpoint (ellipse, -direction i of pat, point i of pat) endfor .. cycle; fi; if dotted: pickup pencircle scaled 4 linethickness; drawdot (0, 0); fi; currentpicture := currentpicture shifted 0.5 (mensural_Cdiameter + mensural_Cthickness, 0); fet_endchar; enddef; %% tempus imperfectum cum prolatione imperfecta mensural_timesig ("Mensural 4/4 meter", "mensural44", false, false, false, false); %% tempus imperfectum cum prolatione imperfecta proportio dupla mensural_timesig ("Mensural 2/2 meter", "mensural22", false, false, true, false); %% tempus perfectum cum prolatione imperfecta mensural_timesig ("Mensural 3/2 meter", "mensural32", true, false, false, false); %% tempus imperfectum cum prolatione perfecta mensural_timesig ("Mensural 6/4 meter", "mensural64", false, false, false, true); %% tempus perfectum cum prolatione perfecta mensural_timesig ("Mensural 9/4 meter", "mensural94", true, false, false, true); %% tempus perfectum cum prolatione imperfecta proportio dupla mensural_timesig ("Mensural 3/4 meter", "mensural34", true, false, true, false); %% tempus imperfectum cum prolatione perfecta proportio dupla mensural_timesig ("Mensural 6/8 meter", "mensural68", false, false, true, true); %% tempus perfectum cum prolatione perfecta proportio dupla mensural_timesig ("Mensural 9/8 meter", "mensural98", true, false, true, true); %% tempus imperfectum cum prolatione imperfecta diminutio simplex mensural_timesig ("Mensural 4/8 meter", "mensural48", false, true, false, false); %% tempus imperfectum cum prolatione perfecta diminutio simplex mensural_timesig ("Mensural 6/8 meter", "mensural68alt", false, true, false, true); %% tempus imperfectum cum prolatione imperfecta diminutio duplex mensural_timesig ("Mensural 2/4 meter", "mensural24", false, true, true, false); %%%%%%%% % % % % NEO-MENSURAL NOTATION % % % save neomensural_Cdiameter, neomensural_Cthickness; neomensural_Cdiameter# := 3/2 staff_space#; neomensural_Cthickness# := 2 linethickness#; define_pixels (neomensural_Cdiameter, neomensural_Cthickness); def neomensural_timesig (expr verbose_name, internal_name, full_circle, reverse_circle, slashed, dotted) = fet_beginchar (verbose_name, internal_name); set_char_box ( 0, neomensural_Cdiameter# + neomensural_Cthickness#, .5 (neomensural_Cdiameter# + neomensural_Cthickness#), .5 (neomensural_Cdiameter# + neomensural_Cthickness#)); if slashed: pickup penrazor scaled neomensural_Cthickness; save t; t := neomensural_Cthickness / 2; if (full_circle or dotted): draw (0, -d + t) -- (0, h - t); elseif reverse_circle: draw (t, -d + t) -- (t, h - t); else: draw (-t, -d + t) -- (-t, h - t); fi; fi; save ellipse, pat; path ellipse, pat; ellipse := fullcircle scaled neomensural_Cthickness; save rot; if reverse_circle: rot := 225; else: rot := 45; fi; if full_circle: pat := fullcircle scaled neomensural_Cdiameter; fill get_subpoint (ellipse, direction 0 of pat, point 0 of pat) for i = 1 step 1 until length pat: .. get_subpoint (ellipse, direction i of pat, point i of pat) endfor .. cycle; unfill get_subpoint (ellipse, -direction 0 of pat, point 0 of pat) for i = 1 step 1 until length pat: .. get_subpoint (ellipse, -direction i of pat, point i of pat) endfor .. cycle; else: pat := threequartercircle rotated rot scaled neomensural_Cdiameter; fill get_subpath (ellipse, -direction 0 of pat, direction 0 of pat, point 0 of pat) for i = 1 step 1 until (length pat - 1): .. get_subpoint (ellipse, direction i of pat, point i of pat) endfor .. get_subpath (ellipse, direction infinity of pat, -direction infinity of pat, point infinity of pat) for i = (length pat - 1) step -1 until 1: .. get_subpoint (ellipse, -direction i of pat, point i of pat) endfor .. cycle; fi; if dotted: pickup pencircle scaled 4 linethickness; drawdot (0, 0); fi; currentpicture := currentpicture shifted 0.5 (neomensural_Cdiameter + neomensural_Cthickness, 0); fet_endchar; enddef; %% tempus imperfectum cum prolatione imperfecta neomensural_timesig ("Mensural 4/4 meter", "neomensural44", false, false, false, false); %% tempus imperfectum cum prolatione imperfecta proportio dupla neomensural_timesig ("Mensural 2/2 meter", "neomensural22", false, false, true, false); %% tempus perfectum cum prolatione imperfecta neomensural_timesig ("Mensural 3/2 meter", "neomensural32", true, false, false, false); %% tempus imperfectum cum prolatione perfecta neomensural_timesig ("Mensural 6/4 meter", "neomensural64", false, false, false, true); %% tempus perfectum cum prolatione perfecta neomensural_timesig ("Mensural 9/4 meter", "neomensural94", true, false, false, true); %% tempus perfectum cum prolatione imperfecta proportio dupla neomensural_timesig ("Mensural 3/4 meter", "neomensural34", true, false, true, false); %% tempus imperfectum cum prolatione perfecta proportio dupla neomensural_timesig ("Mensural 6/8 meter", "neomensural68", false, false, true, true); %% tempus perfectum cum prolatione perfecta proportio dupla neomensural_timesig ("Mensural 9/8 meter", "neomensural98", true, false, true, true); %% tempus imperfectum cum prolatione imperfecta diminutio simplex neomensural_timesig ("Mensural 4/8 meter", "neomensural48", false, true, false, false); %% tempus imperfectum cum prolatione perfecta diminutio simplex neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt", false, true, false, true); %% tempus imperfectum cum prolatione imperfecta diminutio duplex neomensural_timesig ("Mensural 2/4 meter", "neomensural24", false, true, true, false); fet_endgroup ("timesig");