]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/parmesan-timesig.mf
Run `make grand-replace'.
[lilypond.git] / mf / parmesan-timesig.mf
index ef1e075a491a2cb5fa6ef9b4a59b2c64290bd95e..da077582e1d76cc402e3b793f2f1e2274843b9cd 100644 (file)
+% -%-Fundamental-%- -*-Metafont-*-
+% parmesan-timesig.mf -- implement ancient time signatures
 % 
-% feta-timesig.mf --  implement Time Signatures
+% source file of LilyPond's pretty-but-neat music font
 % 
-% source file of the Feta (not an abbreviation of Font-En-Tja) music font
-% 
-% (c) 1998--2002 Mats Bengtsson <matsb@s3.kth.se>,
+% (c) 1998--2008 Mats Bengtsson <matsb@s3.kth.se>,
 %               Christian Mondrup <scancm@biobase.dk>
+% (c) 2002--2008 Juergen Reuter <reuter@ipd.uka.de>
+% 
+
+fet_begingroup ("timesig");
 
-fet_begingroup("timesig");
 
 path threequartercircle;
-threequartercircle = halfcircle & quartercircle rotated 180;
 
-save Cdiameter,Cthickness;
-Cdiameter# := 3/2 staff_space#;
-Cthickness# := 2 stafflinethickness#;
-define_pixels(Cdiameter,Cthickness);
+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
-fet_beginchar ("Mensural 4/4 meter", "old4/4", "oldfourfourmeter")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               .5 Cdiameter#, .5 Cdiameter#);
-       
-       pickup pencircle scaled Cthickness;
-       draw threequartercircle rotated 45 scaled Cdiameter;
-fet_endchar;
+mensural_timesig ("Mensural 4/4 meter", "mensural44",
+                 false, false, false, false);
+
 
 %% tempus imperfectum cum prolatione imperfecta proportio dupla
-fet_beginchar ("Mensural 2/2 meter", "old2/2", "oldallabreve")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               staff_space#, staff_space#);
-       
-       pickup pencircle scaled Cthickness;
-       draw threequartercircle rotated 45 scaled Cdiameter;
-       draw_block((-Cthickness, -d), (0, h));
-fet_endchar;
+mensural_timesig ("Mensural 2/2 meter", "mensural22",
+                 false, false, true, false);
+
 
 %% tempus perfectum cum prolatione imperfecta
-fet_beginchar ("Mensural 3/2 meter", "old3/2", "oldthreetwometer")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               .5 Cdiameter#, .5 Cdiameter#);
-       
-       pickup pencircle scaled Cthickness;
-       draw fullcircle scaled Cdiameter;
-fet_endchar;
+mensural_timesig ("Mensural 3/2 meter", "mensural32",
+                 true, false, false, false);
+
 
 %% tempus imperfectum cum prolatione perfecta
-fet_beginchar ("Mensural 6/4 meter", "old6/4", "oldsixfourmeter")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               .5 Cdiameter#, .5 Cdiameter#);
-       
-       pickup pencircle scaled Cthickness;
-       draw threequartercircle rotated 45 scaled Cdiameter;
-       pickup pencircle scaled 4 stafflinethickness;
-       draw (0,0);
-fet_endchar;
+mensural_timesig ("Mensural 6/4 meter", "mensural64",
+                 false, false, false, true);
+
 
 %% tempus perfectum cum prolatione perfecta
-fet_beginchar ("Mensural 9/4 meter", "old9/4", "oldninefourmeter")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               .5 Cdiameter#, .5 Cdiameter#);
-       
-       pickup pencircle scaled Cthickness;
-       draw fullcircle scaled Cdiameter;
-       pickup pencircle scaled 4 stafflinethickness;
-       draw (0,0);
-fet_endchar;
+mensural_timesig ("Mensural 9/4 meter", "mensural94",
+                 true, false, false, true);
+
 
 %% tempus perfectum cum prolatione imperfecta proportio dupla
-fet_beginchar ("Mensural 3/4 meter", "old3/4", "oldthreefourmeter")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               staff_space#, staff_space#);
-       
-       pickup pencircle scaled Cthickness;
-       draw fullcircle scaled Cdiameter;
-       draw_block((-Cthickness/2, -d), (Cthickness/2, h));
-fet_endchar;
+mensural_timesig ("Mensural 3/4 meter", "mensural34",
+                 true, false, true, false);
+
 
 %% tempus imperfectum cum prolatione perfecta proportio dupla
-fet_beginchar ("Mensural 6/8 meter", "old6/8", "oldsixeightmeter")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-                staff_space#, staff_space#);
-       
-       pickup pencircle scaled Cthickness;
-       draw threequartercircle rotated 45 scaled Cdiameter;
-       pickup pencircle scaled 4 stafflinethickness;
-       draw (0,0);
-       draw_block((-Cthickness/2, -d), (Cthickness/2, h));
-fet_endchar;
+mensural_timesig ("Mensural 6/8 meter", "mensural68",
+                 false, false, true, true);
+
 
 %% tempus perfectum cum prolatione perfecta proportio dupla
-fet_beginchar ("Mensural 9/8 meter", "old9/8", "oldnineeight")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               staff_space#, staff_space#);
-       
-       pickup pencircle scaled Cthickness;
-       draw fullcircle scaled Cdiameter;
-       pickup pencircle scaled 4 stafflinethickness;
-       draw (0,0);
-       draw_block((-Cthickness/2, -d), (Cthickness/2, h));
-fet_endchar;
+mensural_timesig ("Mensural 9/8 meter", "mensural98",
+                 true, false, true, true);
 
-%% tempus imperfectum cum prolatione imperfecta diminutio simplex
-fet_beginchar ("Mensural 4/8 meter", "old4/8", "oldfoureightmeter")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-       .5 Cdiameter#, .5 Cdiameter#);
        
-       pickup pencircle scaled Cthickness;
-       draw threequartercircle rotated 225 scaled Cdiameter;
-fet_endchar;
+%% 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
-fet_beginchar ("Mensural 6/8 meter", "old6/8alt", "oldsixeightmeteralt")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               .5 Cdiameter#, .5 Cdiameter#);
-       
-       pickup pencircle scaled Cthickness;
-       draw threequartercircle rotated 225 scaled Cdiameter;
-       pickup pencircle scaled 4 stafflinethickness;
-       draw (0,0);
-fet_endchar;
+mensural_timesig ("Mensural 6/8 meter", "mensural68alt",
+                 false, true, false, true);
+
 
 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
-fet_beginchar ("Mensural 2/4 meter", "old2/4", "oldtwofourmeter")
-       set_char_box(.5 Cdiameter# + staff_space#, .5 Cdiameter# + staff_space#, 
-               staff_space#, staff_space#);
+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);
+
        
-       pickup pencircle scaled Cthickness;
-       draw threequartercircle rotated 225 scaled Cdiameter;
-       draw_block((-Cthickness, -d), (0, h));
-fet_endchar;
+%% 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");
+fet_endgroup ("timesig");