-% -*-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;
+
+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);
+
%%%%%%%%
%
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 + (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;
+ 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, 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,
- 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));
+ elseif reverse_circle:
+ draw_nail ((0, -d), (mensural_Cthickness, 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;
- draw (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", "mensuralfourfourmeter",
+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", "mensuralallabreve",
+mensural_timesig ("Mensural 2/2 meter", "mensural22",
false, false, true, false);
+
%% tempus perfectum cum prolatione imperfecta
-mensural_timesig ("Mensural 3/2 meter", "mensural32", "mensuralthreetwometer",
+mensural_timesig ("Mensural 3/2 meter", "mensural32",
true, false, false, false);
+
%% tempus imperfectum cum prolatione perfecta
-mensural_timesig ("Mensural 6/4 meter", "mensural64", "mensuralsixfourmeter",
+mensural_timesig ("Mensural 6/4 meter", "mensural64",
false, false, false, true);
+
%% tempus perfectum cum prolatione perfecta
-mensural_timesig ("Mensural 9/4 meter", "mensural94", "mensuralninefourmeter",
+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", "mensuralthreefourmeter",
+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", "mensuralsixeightmeter",
+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", "mensuralnineeight",
+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", "mensuralfoureightmeter",
+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", "mensuralsixeightmeteralt",
+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", "mensuraltwofourmeter",
+mensural_timesig ("Mensural 2/4 meter", "mensural24",
false, true, true, false);
+
%%%%%%%%
%
%
%
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, ly_name,
- full_circle, reverse_circle, slashed, dotted) =
+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#));
- fet_beginchar(verbose_name, internal_name, ly_name)
if slashed:
- set_char_box(0,
- neomensural_Cdiameter# + neomensural_Cthickness#,
- .5 (neomensural_Cdiameter# + neomensural_Cthickness#),
- .5 (neomensural_Cdiameter# + neomensural_Cthickness#));
+ pickup penrazor scaled neomensural_Cthickness;
+
+ save t;
+ t := neomensural_Cthickness / 2;
+
if (full_circle or dotted):
- draw_block((-neomensural_Cthickness/2, -d), (neomensural_Cthickness/2, h));
+ draw (0, -d + t)
+ -- (0, h - t);
+ elseif reverse_circle:
+ draw (t, -d + t)
+ -- (t, h - t);
else:
- draw_block((-neomensural_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,
- 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;
- draw (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", "neomensuralfourfourmeter",
- false, false, false, false);
+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", "neomensuralallabreve",
- false, false, true, false);
+neomensural_timesig ("Mensural 2/2 meter", "neomensural22",
+ false, false, true, false);
+
%% tempus perfectum cum prolatione imperfecta
-neomensural_timesig ("Mensural 3/2 meter", "neomensural32", "neomensuralthreetwometer",
- true, false, false, false);
+neomensural_timesig ("Mensural 3/2 meter", "neomensural32",
+ true, false, false, false);
+
%% tempus imperfectum cum prolatione perfecta
-neomensural_timesig ("Mensural 6/4 meter", "neomensural64", "neomensuralsixfourmeter",
- false, false, false, true);
+neomensural_timesig ("Mensural 6/4 meter", "neomensural64",
+ false, false, false, true);
+
%% tempus perfectum cum prolatione perfecta
-neomensural_timesig ("Mensural 9/4 meter", "neomensural94", "neomensuralninefourmeter",
- true, false, false, true);
+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", "neomensuralthreefourmeter",
- true, false, true, false);
+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", "neomensuralsixeightmeter",
- false, false, true, true);
+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", "neomensuralnineeight",
- true, false, true, true);
+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", "neomensuralfoureightmeter",
- false, true, false, false);
+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", "neomensuralsixeightmeteralt",
- false, true, false, true);
+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", "neomensuraltwofourmeter",
- false, true, true, false);
+neomensural_timesig ("Mensural 2/4 meter", "neomensural24",
+ false, true, true, false);
+
-fet_endgroup ("timesig")
+fet_endgroup ("timesig");