X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Fparmesan-timesig.mf;h=da077582e1d76cc402e3b793f2f1e2274843b9cd;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=ef1e075a491a2cb5fa6ef9b4a59b2c64290bd95e;hpb=d9b43b93f2c885409bafdb157138158f65cc49aa;p=lilypond.git diff --git a/mf/parmesan-timesig.mf b/mf/parmesan-timesig.mf index ef1e075a49..da077582e1 100644 --- a/mf/parmesan-timesig.mf +++ b/mf/parmesan-timesig.mf @@ -1,133 +1,395 @@ +% -%-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 , +% (c) 1998--2008 Mats Bengtsson , % Christian Mondrup +% (c) 2002--2008 Juergen Reuter +% + +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");