- zs = (0, -il_shift * staff_space);
- za = zs + (+0.00 staff_space, -0.10 staff_space);
- zb = zs + (+0.33 staff_space, -0.30 staff_space);
- zc = zs + (+0.33 staff_space, -0.70 staff_space);
- zd = zs + (+0.00 staff_space, -0.90 staff_space);
-
- draw za{2,1} .. zb .. zc .. {-2,-1}zd;
+def draw_mensural_inner_flare (expr il_shift, idx, d_) =
+ define_pixels (linethickness, staff_space);
+
+ save ellipse, pat, T;
+ path ellipse, pat;
+ transform T;
+
+ T := identity xscaled 1.00 linethickness
+ yscaled 0.22 staff_space
+ rotated -35;
+ pickup pencircle transformed T;
+ ellipse := fullcircle transformed T;
+
+ save i;
+ numeric i[];
+
+ i0 := idx * 10;
+ i1 := idx * 10 + 1;
+ i2 := idx * 10 + 2;
+ i3 := idx * 10 + 3;
+ i4 := idx * 10 + 4;
+
+ z[i0] = (0, -il_shift * staff_space);
+ z[i1] = z[i0] + (+0.00 staff_space, -0.10 staff_space);
+ z[i2] = z[i0] + (+0.33 staff_space, -0.30 staff_space);
+ z[i3] = z[i0] + (+0.33 staff_space, -0.70 staff_space);
+ z[i4] = z[i0] + (+0.00 staff_space, -0.90 staff_space);
+
+ pat := z[i1]{2, 1}
+ .. z[i2]
+ .. z[i3]
+ .. {-2, -1}z[i4];
+
+ % we avoid cusps originally present in `draw pat'
+ fill get_subpath (ellipse,
+ -direction 0 of pat, direction 0 of pat, z[i1])
+ .. get_subpoint (ellipse, direction 1 of pat, z[i2])
+ {direction 1 of pat}
+ .. get_subpoint (ellipse, direction 2 of pat, z[i3])
+ {direction 2 of pat}
+ .. get_subpath (ellipse,
+ direction 3 of pat, -direction 3 of pat, z[i4])
+ .. get_subpoint (ellipse, -direction 2 of pat, z[i3])
+ {-direction 2 of pat}
+ .. get_subpoint (ellipse, -direction 1 of pat, z[i2])
+ {-direction 1 of pat}
+ .. cycle;
+
+ if d_ = dir_up:
+ labels ([i0], [i1], [i2], [i3], [i4]);
+ fi;