]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of ssh+git://git.sv.gnu.org/srv/git/lilypond
authorWerner Lemberg <wl@gnu.org>
Mon, 30 Apr 2007 18:49:38 +0000 (20:49 +0200)
committerWerner Lemberg <wl@gnu.org>
Mon, 30 Apr 2007 18:49:38 +0000 (20:49 +0200)
mf/parmesan-scripts.mf
mf/parmesan-timesig.mf

index 99c3547c370d3587a4d32f340c6d43c8e245e09c..435cc86a13c7775b5d352a5c050c54738e0b7460 100644 (file)
@@ -1,4 +1,4 @@
-% -*-Fundamental-*-
+% -%-Fundamental-%- -*-Metafont-*-
 % parmesan-scripts.mf -- implement ancient script symbols
 % 
 % source file of LilyPond's pretty-but-neat music font
 % (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
 % 
 
-fet_begingroup ("scripts")
+fet_begingroup ("scripts");
 
-fet_beginchar("ictus", "ictus")
+fet_beginchar ("ictus", "ictus");
        save ht, wd;
        ht# = .35 staff_space#;
        wd# = linethickness#;
-       define_pixels(wd, ht);
-       pickup pencircle
-               xscaled wd
-               yscaled blot_diameter;
-       set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);
-       x1 = 0; top y1 = ht/2;
-       x2 = 0; bot y2 = -ht/2;
-       draw z1 -- z2;
+
+       define_pixels (wd, ht);
+
+       save ellipse;
+       path ellipse;
+
+       pickup pencircle xscaled wd
+                        yscaled blot_diameter;
+
+       ellipse := fullcircle xscaled wd
+                             yscaled blot_diameter;
+
+       set_char_box (wd# / 2, wd# / 2, ht# / 2, ht# / 2);
+
+       x1 = 0;
+       top y1 = ht / 2;
+       x2 = 0;
+       bot y2 = -ht / 2;
+
+       fill get_subpath (ellipse, up, down, z1)
+            -- get_subpath (ellipse, down, up, z2)
+            -- cycle;
+
+       labels (1, 2);
 fet_endchar;
 
 
 def draw_accentus =
        save thick, thin, ht, wd;
+
        thin# = 1 linethickness#;
        thick# = 1.2 linethickness#;
        ht# = .35 staff_space#;
        wd# = .25 staff_space#;
-       define_pixels(wd, ht, thin, thick);
-       z1 = z2 = (-wd/2 + thin/2, -ht/2 + thin/2);
-       z3 = z4 = (wd/2 - thick/2, ht/2 - thick/2);
-       penpos1(thin, angle(z1-z3));
-       penpos2(thin, angle(z1-z3)+90);
-       penpos3(thick, angle(z3-z1)+90);
-       penpos4(thick, angle(z3-z1));
-       fill z1r .. z2r -- z3l .. z4r .. z3r -- z2l .. cycle;
-       set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);
+
+       define_pixels (wd, ht, thin, thick);
+
+       z1 = z2 = (-wd / 2 + thin / 2, -ht / 2 + thin / 2);
+       z3 = z4 = (wd / 2 - thick / 2, ht / 2 - thick / 2);
+
+       penpos1 (thin, angle (z1 - z3));
+       penpos2 (thin, angle (z1 - z3) + 90);
+       penpos3 (thick, angle (z3 - z1) + 90);
+       penpos4 (thick, angle (z3 - z1));
+
+       fill z1r
+            .. z2r
+            -- z3l
+            .. z4r
+            .. z3r
+            -- z2l
+            .. cycle;
+
+       set_char_box (wd#/2, wd#/2, ht#/2, ht#/2);
 enddef;
 
-fet_beginchar("accentus up", "uaccentus")
+
+fet_beginchar ("accentus up", "uaccentus");
        draw_accentus;
+       penlabels (1, 2, 3, 4);
 fet_endchar;
 
-fet_beginchar("accentus down", "daccentus")
+
+fet_beginchar ("accentus down", "daccentus");
        draw_accentus;
        y_mirror_char;
 fet_endchar;
 
 
-def draw_half_ellipse(expr ellips_width, ellips_height) =
-       save width, height, thin, thick;
-       width# = ellips_width;
-       height# = ellips_height;
-       define_pixels(width, height);
-
-       thin = thick = 0.6 linethickness;
-       penpos1(thick, 0);
-       penpos2(thin, -90);
-       z1r = (width/2, 0);
-       z2r = (0, -height/2);
-       penlabels(1,2);
-       penstroke z1e{down} .. {left}z2e;
-       addto currentpicture also currentpicture xscaled -1;
+def draw_half_circle (expr diam) =
+       save diameter, thick;
+
+       diameter# = diam;
+
+       define_pixels (diameter);
+
+       thick = 0.6 linethickness;
+
+       penpos1 (thick, 0);
+       penpos2 (thick, -90);
+       penpos3 (thick, -180);
+
+       z1r = (diameter / 2, 0);
+       z2r = (0, -diameter / 2);
+       z3r = (-diameter / 2, 0);
+       
+       penstroke z1e{down}
+                 .. z2e{left}
+                 .. z3e{up};
 enddef;
 
-fet_beginchar("half circle", "usemicirculus")
-       draw_half_ellipse(5/16 staff_space#, 5/16 staff_space#);
+
+fet_beginchar ("half circle", "usemicirculus");
+       draw_half_circle (5/16 staff_space#);
+
        currentpicture := currentpicture yscaled -1;
-       set_char_box(width#/2, width#/2, 0, height#/2);
+
+       set_char_box (diameter# / 2, diameter# / 2,
+                     0, diameter# / 2);
 fet_endchar;
 
 
-fet_beginchar("half circle", "dsemicirculus")
-       draw_half_ellipse(5/16 staff_space#, 5/16 staff_space#);
-       set_char_box(width#/2, width#/2, height#/2, 0);
+fet_beginchar ("half circle", "dsemicirculus");
+       draw_half_circle (5/16 staff_space#);
+
+       set_char_box (diameter# / 2, diameter# / 2,
+                     diameter# / 2, 0);
+
+       penlabels (1, 2, 3);
 fet_endchar;
 
 
-fet_beginchar("circle", "circulus")
-       draw_half_ellipse(5/16 staff_space#, 5/16 staff_space#);
-       set_char_box(width#/2, width#/2, height#/2, height#/2);
-       addto currentpicture also currentpicture yscaled -1;
+fet_beginchar ("circle", "circulus");
+       save diameter, thick;
+
+       diameter# = 5/16 staff_space#;
+
+       define_pixels (diameter);
+
+       thick = 0.6 linethickness;
+
+       fill fullcircle scaled diameter;
+       unfill fullcircle scaled (diameter - 2 thick);
+
+       set_char_box (diameter# / 2, diameter# / 2,
+                     diameter# / 2, diameter# / 2);
 fet_endchar;
 
 
-fet_beginchar("augmentum", "augmentum")
+fet_beginchar ("augmentum", "augmentum");
        save diameter;
+
        diameter# = 0.25 staff_space#;
-       define_pixels(diameter);
+
+       define_pixels (diameter);
+
        pickup pencircle scaled diameter;
-       drawdot (0,0);
-       set_char_box(diameter#/2, diameter#/2, diameter#/2, diameter#/2);
+
+       drawdot (0, 0);
+
+       set_char_box (diameter# / 2, diameter# / 2,
+                     diameter# / 2, diameter# / 2);
 fet_endchar;
 
 
 def draw_signum_congruentiae =
-       save za, zb, zc, zd, ze, zf, zg, zh;
-       pair za, zb, zc, zd, ze, zf, zg, zh;
-
-       set_char_box(0.50 staff_space# + 1.5 linethickness#,
-                    0.50 staff_space# + 1.5 linethickness#,
-                    2.5 linethickness#,
-                    2.00 staff_space# + 3.5 linethickness#);
-
-       pickup pencircle
-               xscaled 1.0 linethickness
-               yscaled 5.0 linethickness
-               rotated -35;
-       za = (+0.50staff_space, +2.00staff_space);
-       zb = (+0.00staff_space, +2.00staff_space);
-       zc = (-0.50staff_space, +1.50staff_space);
-       zd = (-0.25staff_space, +1.00staff_space);
-       ze = (+0.10staff_space, +0.80staff_space);
-       zf = (+0.00staff_space, +0.00staff_space);
-       draw za{-1,+1} .. zb .. zc .. zd .. ze .. zf;
+       set_char_box (0.50 staff_space# + 1.5 linethickness#,
+                     0.50 staff_space# + 1.5 linethickness#,
+                     2.5 linethickness#,
+                     2.00 staff_space# + 3.5 linethickness#);
+
+       save ellipse, pat;
+       path ellipse, pat;
+
+       ellipse := fullcircle xscaled 1.0 linethickness
+                             yscaled 5.0 linethickness
+                             rotated -35;
+
+       z1 = (+0.50 staff_space, +2.00 staff_space);
+       z2 = (+0.00 staff_space, +2.00 staff_space);
+       z3 = (-0.50 staff_space, +1.50 staff_space);
+       z4 = (-0.25 staff_space, +1.00 staff_space);
+       z5 = (+0.10 staff_space, +0.80 staff_space);
+       z6 = (+0.00 staff_space, +0.00 staff_space);
+
+       pat := z1{-1, +1}
+              .. z2
+              .. z3
+              .. z4
+              .. z5
+              .. z6;
+
+       % we avoid cusps originally present in `draw pat'
+       fill get_subpath (ellipse,
+                         -direction 0 of pat, direction 0 of pat, z1)
+            .. get_subpoint (ellipse, direction 1 of pat, z2)
+                 {direction 1 of pat}
+            .. get_subpoint (ellipse, direction 2 of pat, z3)
+                 {direction 2 of pat}
+            .. get_subpoint (ellipse, direction 3 of pat, z4)
+                 {direction 3 of pat}
+            .. get_subpoint (ellipse, direction 4 of pat, z5)
+                 {direction 4 of pat}
+            .. get_subpath (ellipse,
+                            direction 4.8 of pat, -direction 5 of pat, z6)
+            .. get_subpoint (ellipse, -direction 4 of pat, z5)
+                 {-direction 4 of pat}
+            .. get_subpoint (ellipse, -direction 3 of pat, z4)
+                 {-direction 3 of pat}
+            .. get_subpoint (ellipse, -direction 2.5 of pat, point 2.5 of pat)
+            .. get_subpoint (ellipse, -direction 1 of pat, z2)
+                 {-direction 1 of pat}
+            .. cycle;
 
        pickup pencircle scaled 3.0 linethickness;
-       zg = (-0.5staff_space, +0.0staff_space);
-       zh = (+0.5staff_space, +0.0staff_space);
-       drawdot zg;
-       drawdot zh;
+
+       z7 = (-0.5 staff_space, +0.0 staff_space);
+       z8 = (+0.5 staff_space, +0.0 staff_space);
+
+       drawdot z7;
+       drawdot z8;
 enddef;
 
-fet_beginchar("signum congruentiae up", "usignumcongruentiae")
+
+fet_beginchar ("signum congruentiae up", "usignumcongruentiae");
        draw_signum_congruentiae;
+       labels (1, 2, 3, 4, 5, 6, 7, 8);
 fet_endchar;
 
-fet_beginchar("signum congruentiae down", "dsignumcongruentiae")
+
+fet_beginchar ("signum congruentiae down", "dsignumcongruentiae");
        draw_signum_congruentiae;
        xy_mirror_char;
 fet_endchar;
 
-fet_endgroup ("scripts")
+
+fet_endgroup ("scripts");
index ef5539d615632a4357c78055aebe84b225b6eabb..307811a402e38c7e9dc301f24d8a908ab157df46 100644 (file)
@@ -8,17 +8,21 @@
 % (c) 2002--2006 Juergen Reuter <reuter@ipd.uka.de>
 % 
 
-fet_begingroup ("timesig")
+fet_begingroup ("timesig");
+
 
 path threequartercircle;
-threequartercircle = halfcircle & quartercircle rotated 180;
+
+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);
-define_pixels(mensural_Chairpin);
+
+define_pixels (mensural_Cdiameter, mensural_Cthickness, mensural_Chairpin);
+
 
 %%%%%%%%
 %
@@ -31,112 +35,193 @@ define_pixels(mensural_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));
+
+       round = floor min (blot_diameter,
+                          xpart (top_right-bottom_left),
+                          ypart (top_right-bottom_left));
 
        pickup pencircle scaled round;
 
-       begingroup;
-               save x,y;
-               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 - 2mensural_Cthickness;
-
-               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;
+       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;
+
+       pickup pencircle scaled round;
 
+       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)
+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#));
+                       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));
+                               draw_nail ((-mensural_Cthickness / 2, -d),
+                                          (mensural_Cthickness / 2, h));
                        else:
-                               draw_nail((-mensural_Cthickness, -d), (0, h));
+                               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#));
+                       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 mensural_Cthickness yscaled mensural_Chairpin rotated 0;
+
                if full_circle:
-                       draw fullcircle scaled mensural_Cdiameter;
-               elseif reverse_circle:
-                       draw threequartercircle rotated 225 scaled mensural_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 mensural_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;
-                       drawdot (0,0);
+                       drawdot (0, 0);
                fi;
-               currentpicture := currentpicture shifted 0.5(mensural_Cdiameter + mensural_Cthickness, 0);
+
+               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);
 
+
 %%%%%%%%
 %
 %
@@ -147,88 +232,160 @@ mensural_timesig ("Mensural 2/4 meter", "mensural24",
 %
 
 save neomensural_Cdiameter, neomensural_Cthickness;
+
 neomensural_Cdiameter# := 3/2 staff_space#;
 neomensural_Cthickness# := 2 linethickness#;
-define_pixels(neomensural_Cdiameter, neomensural_Cthickness);
+
+define_pixels (neomensural_Cdiameter, neomensural_Cthickness);
+
 
 def neomensural_timesig (expr verbose_name, internal_name,
-                        full_circle, reverse_circle, slashed, dotted) =
+                             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#));
 
-       fet_beginchar(verbose_name, internal_name)
                if slashed:
-                       set_char_box(0,
-                                    neomensural_Cdiameter# + neomensural_Cthickness#,
-                                    .5 (neomensural_Cdiameter# + neomensural_Cthickness#),
-                                    .5 (neomensural_Cdiameter# + neomensural_Cthickness#));
                        if (full_circle or dotted):
-                               draw_block((-neomensural_Cthickness/2, -d), (neomensural_Cthickness/2, h));
+                               draw_block ((-neomensural_Cthickness / 2,
+                                            -d + neomensural_Cthickness / 2),
+                                           (neomensural_Cthickness / 2,
+                                            h - neomensural_Cthickness / 2));
                        else:
-                               draw_block((-neomensural_Cthickness, -d), (0, h));
+                               draw_block ((-neomensural_Cthickness,
+                                            -d + neomensural_Cthickness / 2),
+                                           (0,
+                                            h - neomensural_Cthickness / 2));
                        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,
-                                    neomensural_Cdiameter# + neomensural_Cthickness#,
-                                    .5 (neomensural_Cdiameter# + neomensural_Cthickness#),
-                                    .5 (neomensural_Cdiameter# + neomensural_Cthickness#));
+                       rot := 45;
                fi;
-               pickup pencircle scaled neomensural_Cthickness;
+
                if full_circle:
-                       draw fullcircle scaled neomensural_Cdiameter;
-               elseif reverse_circle:
-                       draw threequartercircle rotated 225 scaled neomensural_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 neomensural_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;
-                       drawdot (0,0);
+                       drawdot (0, 0);
                fi;
-               currentpicture := currentpicture shifted 0.5(neomensural_Cdiameter + neomensural_Cthickness, 0);
+
+               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);
+                    false, false, false, false);
+
 
 %% tempus imperfectum cum prolatione imperfecta proportio dupla
 neomensural_timesig ("Mensural 2/2 meter", "neomensural22",
-                       false, false, true, false);
+                    false, false, true, false);
+
 
 %% tempus perfectum cum prolatione imperfecta
 neomensural_timesig ("Mensural 3/2 meter", "neomensural32",
-                       true, false, false, false);
+                    true, false, false, false);
+
 
 %% tempus imperfectum cum prolatione perfecta
 neomensural_timesig ("Mensural 6/4 meter", "neomensural64",
-                       false, false, false, true);
+                    false, false, false, true);
+
 
 %% tempus perfectum cum prolatione perfecta
 neomensural_timesig ("Mensural 9/4 meter", "neomensural94",
-                       true, false, false, true);
+                    true, false, false, true);
+
 
 %% tempus perfectum cum prolatione imperfecta proportio dupla
 neomensural_timesig ("Mensural 3/4 meter", "neomensural34",
-                       true, false, true, false);
+                    true, false, true, false);
+
 
 %% tempus imperfectum cum prolatione perfecta proportio dupla
 neomensural_timesig ("Mensural 6/8 meter", "neomensural68",
-                       false, false, true, true);
+                    false, false, true, true);
+
 
 %% tempus perfectum cum prolatione perfecta proportio dupla
 neomensural_timesig ("Mensural 9/8 meter", "neomensural98",
-                       true, false, true, true);
+                    true, false, true, true);
+
        
 %% tempus imperfectum cum prolatione imperfecta diminutio simplex
 neomensural_timesig ("Mensural 4/8 meter", "neomensural48",
-                       false, true, false, false);
+                    false, true, false, false);
+
 
 %% tempus imperfectum cum prolatione perfecta diminutio simplex
 neomensural_timesig ("Mensural 6/8 meter", "neomensural68alt",
-                       false, true, false, true);
+                    false, true, false, true);
+
 
 %% tempus imperfectum cum prolatione imperfecta diminutio duplex
 neomensural_timesig ("Mensural 2/4 meter", "neomensural24",
-                       false, true, true, false);
+                    false, true, true, false);
+
 
-fet_endgroup ("timesig")
+fet_endgroup ("timesig");