]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/parmesan-timesig.mf
Run `make grand-replace'.
[lilypond.git] / mf / parmesan-timesig.mf
index a7134a5495dc81e377ee5554040fd1d61e849932..da077582e1d76cc402e3b793f2f1e2274843b9cd 100644 (file)
@@ -1,23 +1,28 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-timesig.mf -- implement ancient time signatures
 % 
 % source file of LilyPond's pretty-but-neat music font
 % 
-% (c) 1998--2004 Mats Bengtsson <matsb@s3.kth.se>,
+% (c) 1998--2008 Mats Bengtsson <matsb@s3.kth.se>,
 %               Christian Mondrup <scancm@biobase.dk>
-% (c) 2002--2004 Juergen Reuter <reuter@ipd.uka.de>
+% (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, Chairpin;
-Cdiameter# := 3/2 staff_space#;
-Cthickness# := 2 linethickness#;
-Chairpin# := 0.5 linethickness#;
-define_pixels(Cdiameter, Cthickness, Chairpin);
+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);
+
 
 %%%%%%%%
 %
@@ -30,111 +35,192 @@ define_pixels(Cdiameter, Cthickness, Chairpin);
 
 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;
+       round = floor min (blot_diameter,
+                          xpart (top_right-bottom_left),
+                          ypart (top_right-bottom_left));
 
-       begingroup;
-               save x,y;
-               z2+(round/2,round/2) = top_right + (Cthickness/2, 0);
-               z4-(round/2,round/2) = bottom_left;
-               y3 = y2;
-               y4 = y1;
-               x2 = x1 + Cthickness/2;
-               x2 - x1 = x4 - x3;
-               x5 = x1;
-               x6 = x4;
-               y5 = y6 = y2 - 2Cthickness;
-
-               pickup pencircle scaled round;
-               fill bot z1 .. rt z1 --- rt z5 .. rt z2 .. top z2 ---
-                    top z3 .. lft z3 .. lft z6 --- lft z4 .. bot z4 ---
-                    cycle;
-        endgroup;
+       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 mens_timesig (expr verbose_name, internal_name, ly_name,
-                       full_circle, reverse_circle, slashed, dotted) =
 
-       fet_beginchar(verbose_name, internal_name, ly_name)
+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,
-                                    Cdiameter# + Cthickness#,
-                                    .75 (Cdiameter# + Cthickness#),
-                                    .75 (Cdiameter# + Cthickness#));
+                       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((-Cthickness/2, -d), (Cthickness/2, h));
+                               draw_nail ((-mensural_Cthickness / 2, -d),
+                                          (mensural_Cthickness / 2, h));
+                       elseif reverse_circle:
+                               draw_nail ((0, -d), (mensural_Cthickness, h));
                        else:
-                               draw_nail((-Cthickness, -d), (0, h));
+                               draw_nail ((-mensural_Cthickness, -d), (0, h));
                        fi;
                else:
-                       set_char_box(0,
-                                    Cdiameter# + Cthickness#,
-                                    .5 (Cdiameter# + Cthickness#),
-                                    .5 (Cdiameter# + Cthickness#));
+                       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;
-               pickup pencircle xscaled Cthickness yscaled Chairpin rotated 0;
+
                if full_circle:
-                       draw fullcircle scaled Cdiameter;
-               elseif reverse_circle:
-                       draw threequartercircle rotated 225 scaled Cdiameter;
+                       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:
-                       draw threequartercircle rotated 45 scaled Cdiameter;
+                       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;
-                       draw (0,0);
+                       drawdot (0, 0);
                fi;
-               currentpicture := currentpicture shifted 0.5(Cdiameter + Cthickness, 0);
+
+               currentpicture := currentpicture
+                                   shifted 0.5 (mensural_Cdiameter
+                                                + mensural_Cthickness, 0);
        fet_endchar;
 enddef;
 
+
 %% tempus imperfectum cum prolatione imperfecta
-mens_timesig ("Mensural 4/4 meter", "mensural4/4", "mensuralfourfourmeter",
-               false, false, false, false);
+mensural_timesig ("Mensural 4/4 meter", "mensural44",
+                 false, false, false, false);
+
 
 %% tempus imperfectum cum prolatione imperfecta proportio dupla
-mens_timesig ("Mensural 2/2 meter", "mensural2/2", "mensuralallabreve",
-               false, false, true, false);
+mensural_timesig ("Mensural 2/2 meter", "mensural22",
+                 false, false, true, false);
+
 
 %% tempus perfectum cum prolatione imperfecta
-mens_timesig ("Mensural 3/2 meter", "mensural3/2", "mensuralthreetwometer",
-               true, false, false, false);
+mensural_timesig ("Mensural 3/2 meter", "mensural32",
+                 true, false, false, false);
+
 
 %% tempus imperfectum cum prolatione perfecta
-mens_timesig ("Mensural 6/4 meter", "mensural6/4", "mensuralsixfourmeter",
-               false, false, false, true);
+mensural_timesig ("Mensural 6/4 meter", "mensural64",
+                 false, false, false, true);
+
 
 %% tempus perfectum cum prolatione perfecta
-mens_timesig ("Mensural 9/4 meter", "mensural9/4", "mensuralninefourmeter",
-               true, false, false, true);
+mensural_timesig ("Mensural 9/4 meter", "mensural94",
+                 true, false, false, true);
+
 
 %% tempus perfectum cum prolatione imperfecta proportio dupla
-mens_timesig ("Mensural 3/4 meter", "mensural3/4", "mensuralthreefourmeter",
-               true, false, true, false);
+mensural_timesig ("Mensural 3/4 meter", "mensural34",
+                 true, false, true, false);
+
 
 %% tempus imperfectum cum prolatione perfecta proportio dupla
-mens_timesig ("Mensural 6/8 meter", "mensural6/8", "mensuralsixeightmeter",
-               false, false, true, true);
+mensural_timesig ("Mensural 6/8 meter", "mensural68",
+                 false, false, true, true);
+
 
 %% tempus perfectum cum prolatione perfecta proportio dupla
-mens_timesig ("Mensural 9/8 meter", "mensural9/8", "mensuralnineeight",
-               true, false, true, true);
+mensural_timesig ("Mensural 9/8 meter", "mensural98",
+                 true, false, true, true);
+
        
 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
-mens_timesig ("Mensural 4/8 meter", "mensural4/8", "mensuralfoureightmeter",
-               false, true, false, false);
+mensural_timesig ("Mensural 4/8 meter", "mensural48",
+                 false, true, false, false);
+
 
 %% tempus imperfectum cum prolatione perfecta diminutio simplex
-mens_timesig ("Mensural 6/8 meter", "mensural6/8alt", "mensuralsixeightmeteralt",
-               false, true, false, true);
+mensural_timesig ("Mensural 6/8 meter", "mensural68alt",
+                 false, true, false, true);
+
 
 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
-mens_timesig ("Mensural 2/4 meter", "mensural2/4", "mensuraltwofourmeter",
-               false, true, true, false);
+mensural_timesig ("Mensural 2/4 meter", "mensural24",
+                 false, true, true, false);
+
 
 %%%%%%%%
 %
@@ -145,89 +231,165 @@ mens_timesig ("Mensural 2/4 meter", "mensural2/4", "mensuraltwofourmeter",
 %
 %
 
-save neo_Cdiameter, neo_Cthickness;
-neo_Cdiameter# := 3/2 staff_space#;
-neo_Cthickness# := 2 linethickness#;
-define_pixels(neo_Cdiameter, neo_Cthickness);
+save neomensural_Cdiameter, neomensural_Cthickness;
+
+neomensural_Cdiameter# := 3/2 staff_space#;
+neomensural_Cthickness# := 2 linethickness#;
+
+define_pixels (neomensural_Cdiameter, neomensural_Cthickness);
 
-def neo_mens_timesig (expr verbose_name, internal_name, ly_name,
-                       full_circle, reverse_circle, slashed, dotted) =
 
-       fet_beginchar(verbose_name, internal_name, ly_name)
+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:
-                       set_char_box(0,
-                                    neo_Cdiameter# + neo_Cthickness#,
-                                    .5 (neo_Cdiameter# + neo_Cthickness#),
-                                    .5 (neo_Cdiameter# + neo_Cthickness#));
+                       pickup penrazor scaled neomensural_Cthickness;
+
+                       save t;
+                       t := neomensural_Cthickness / 2;
+
                        if (full_circle or dotted):
-                               draw_block((-neo_Cthickness/2, -d), (neo_Cthickness/2, h));
+                               draw (0, -d + t)
+                                    -- (0, h - t);
+                       elseif reverse_circle:
+                               draw (t, -d + t)
+                                    -- (t, h - t);
                        else:
-                               draw_block((-neo_Cthickness, -d), (0, h));
+                               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:
-                       set_char_box(0,
-                                    neo_Cdiameter# + neo_Cthickness#,
-                                    .5 (neo_Cdiameter# + neo_Cthickness#),
-                                    .5 (neo_Cdiameter# + neo_Cthickness#));
+                       rot := 45;
                fi;
-               pickup pencircle scaled neo_Cthickness;
+
                if full_circle:
-                       draw fullcircle scaled neo_Cdiameter;
-               elseif reverse_circle:
-                       draw threequartercircle rotated 225 scaled neo_Cdiameter;
+                       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:
-                       draw threequartercircle rotated 45 scaled neo_Cdiameter;
+                       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;
-                       draw (0,0);
+                       drawdot (0, 0);
                fi;
-               currentpicture := currentpicture shifted 0.5(neo_Cdiameter + neo_Cthickness, 0);
+
+               currentpicture := currentpicture
+                                    shifted 0.5 (neomensural_Cdiameter
+                                                 + neomensural_Cthickness, 0);
        fet_endchar;
 enddef;
 
+
 %% tempus imperfectum cum prolatione imperfecta
-neo_mens_timesig ("Mensural 4/4 meter", "neomensural4/4", "neomensuralfourfourmeter",
-                       false, false, false, false);
+neomensural_timesig ("Mensural 4/4 meter", "neomensural44",
+                    false, false, false, false);
+
 
 %% tempus imperfectum cum prolatione imperfecta proportio dupla
-neo_mens_timesig ("Mensural 2/2 meter", "neomensural2/2", "neomensuralallabreve",
-                       false, false, true, false);
+neomensural_timesig ("Mensural 2/2 meter", "neomensural22",
+                    false, false, true, false);
+
 
 %% tempus perfectum cum prolatione imperfecta
-neo_mens_timesig ("Mensural 3/2 meter", "neomensural3/2", "neomensuralthreetwometer",
-                       true, false, false, false);
+neomensural_timesig ("Mensural 3/2 meter", "neomensural32",
+                    true, false, false, false);
+
 
 %% tempus imperfectum cum prolatione perfecta
-neo_mens_timesig ("Mensural 6/4 meter", "neomensural6/4", "neomensuralsixfourmeter",
-                       false, false, false, true);
+neomensural_timesig ("Mensural 6/4 meter", "neomensural64",
+                    false, false, false, true);
+
 
 %% tempus perfectum cum prolatione perfecta
-neo_mens_timesig ("Mensural 9/4 meter", "neomensural9/4", "neomensuralninefourmeter",
-                       true, false, false, true);
+neomensural_timesig ("Mensural 9/4 meter", "neomensural94",
+                    true, false, false, true);
+
 
 %% tempus perfectum cum prolatione imperfecta proportio dupla
-neo_mens_timesig ("Mensural 3/4 meter", "neomensural3/4", "neomensuralthreefourmeter",
-                       true, false, true, false);
+neomensural_timesig ("Mensural 3/4 meter", "neomensural34",
+                    true, false, true, false);
+
 
 %% tempus imperfectum cum prolatione perfecta proportio dupla
-neo_mens_timesig ("Mensural 6/8 meter", "neomensural6/8", "neomensuralsixeightmeter",
-                       false, false, true, true);
+neomensural_timesig ("Mensural 6/8 meter", "neomensural68",
+                    false, false, true, true);
+
 
 %% tempus perfectum cum prolatione perfecta proportio dupla
-neo_mens_timesig ("Mensural 9/8 meter", "neomensural9/8", "neomensuralnineeight",
-                       true, false, true, true);
+neomensural_timesig ("Mensural 9/8 meter", "neomensural98",
+                    true, false, true, true);
+
        
 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
-neo_mens_timesig ("Mensural 4/8 meter", "neomensural4/8", "neomensuralfoureightmeter",
-                       false, true, false, false);
+neomensural_timesig ("Mensural 4/8 meter", "neomensural48",
+                    false, true, false, false);
+
 
 %% tempus imperfectum cum prolatione perfecta diminutio simplex
-neo_mens_timesig ("Mensural 6/8 meter", "neomensural6/8alt", "neomensuralsixeightmeteralt",
-                       false, true, false, true);
+neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt",
+                    false, true, false, true);
+
 
 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
-neo_mens_timesig ("Mensural 2/4 meter", "neomensural2/4", "neomensuraltwofourmeter",
-                       false, true, true, false);
+neomensural_timesig ("Mensural 2/4 meter", "neomensural24",
+                    false, true, true, false);
+
 
-fet_endgroup ("timesig")
+fet_endgroup ("timesig");