X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Fparmesan-timesig.mf;h=8d0ab9d45cfb2ba9216b9c6deba36cbfecf8135f;hb=a8c9e8a7ca320ab0df5fd32e717fd62cd7635ce6;hp=17240cb4981cd2aa6f734fb0cb0acfb6538e1744;hpb=2ac91de7c1099097dd38b46b1b47db71d16d1201;p=lilypond.git diff --git a/mf/parmesan-timesig.mf b/mf/parmesan-timesig.mf index 17240cb498..8d0ab9d45c 100644 --- a/mf/parmesan-timesig.mf +++ b/mf/parmesan-timesig.mf @@ -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--2003 Mats Bengtsson , +% (c) 1998--2009 Mats Bengtsson , % Christian Mondrup -% (c) 2002--2003 Juergen Reuter +% (c) 2002--2009 Juergen Reuter % -fet_begingroup ("timesig") +fet_begingroup ("timesig"); + path threequartercircle; -threequartercircle = halfcircle & quartercircle rotated 180; -save Cdiameter, Cthickness, Chairpin; -Cdiameter# := 3/2 staff_space#; -Cthickness# := 2 stafflinethickness#; -Chairpin# := 0.5 stafflinethickness#; -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 stafflinethickness; - draw (0,0); + pickup pencircle scaled 4 linethickness; + 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 stafflinethickness#; -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 stafflinethickness; - draw (0,0); + pickup pencircle scaled 4 linethickness; + 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", "neo_mensural4/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", "neo_mensural2/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", "neo_mensural3/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", "neo_mensural6/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", "neo_mensural9/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", "neo_mensural3/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", "neo_mensural6/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", "neo_mensural9/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", "neo_mensural4/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", "neo_mensural6/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", "neo_mensural2/4", "neomensuraltwofourmeter", - false, true, true, false); +neomensural_timesig ("Mensural 2/4 meter", "neomensural24", + false, true, true, false); + -fet_endgroup ("timesig") +fet_endgroup ("timesig");