X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Fparmesan-timesig.mf;h=538016d9eacdb9005f9b0552039c3e1df82cdf71;hb=f68991986ca3298af5275c7db043ed4b075d45d5;hp=cc7f939a0e27eda56f7c1de3ffc8233402211a10;hpb=f525f992e5dbeb579981153775cc9ee10b78cb3f;p=lilypond.git diff --git a/mf/parmesan-timesig.mf b/mf/parmesan-timesig.mf index cc7f939a0e..538016d9ea 100644 --- a/mf/parmesan-timesig.mf +++ b/mf/parmesan-timesig.mf @@ -1,24 +1,28 @@ -% -*-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 , +% (c) 1998--2007 Mats Bengtsson , % Christian Mondrup -% (c) 2002--2004 Juergen Reuter +% (c) 2002--2007 Juergen Reuter % -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)); - 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); + %%%%%%%% % % @@ -147,88 +232,164 @@ mensural_timesig ("Mensural 2/4 meter", "mensural24", "mensuraltwofourmeter", % 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");