X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Fparmesan-accidentals.mf;h=4aa5f0dba12e7c2c63f310af3a05f928439b5549;hb=0b544cfb7332615ef809b71b57ab656741311ae1;hp=5f851d93bb90aa61ebf95ef11c7d4e9956d09454;hpb=e7cb72c9fce8f40b1b1cad506597178223323a78;p=lilypond.git diff --git a/mf/parmesan-accidentals.mf b/mf/parmesan-accidentals.mf index 5f851d93bb..4aa5f0dba1 100644 --- a/mf/parmesan-accidentals.mf +++ b/mf/parmesan-accidentals.mf @@ -1,12 +1,22 @@ -% -*-Fundamental-*- -% parmesan-accidentals.mf -- implement ancient accidentals -% -% source file of LilyPond's pretty-but-neat music font -% -% (c) 2001--2003 Juergen Reuter +% Feta (not the Font-En-Tja) music font -- ancient accidentals +% This file is part of LilyPond, the GNU music typesetter. +% +% Copyright (C) 2001--2014 Juergen Reuter % +% The LilyPond font is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version, or under the SIL Open Font License. +% +% LilyPond is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with LilyPond. If not, see . -fet_begingroup ("accidentals") +fet_begingroup ("accidentals"); %%%%%%%% @@ -17,36 +27,65 @@ fet_begingroup ("accidentals") % % % -fet_beginchar("Ed. Med. Flat" , "medicaea-1", "medicaeaflat"); - set_char_box(0.1 staff_space#, 0.6 staff_space#, - 0.6 staff_space#, 1.0 staff_space#); - - pickup pencircle - xscaled 0.50 linethickness - yscaled 0.22 staff_space; - - save za, zb; - pair za, zb; +fet_beginchar ("Ed. Med. Flat" , "medicaeaM1"); + set_char_box (0.1 staff_space#, 0.6 staff_space#, + 0.6 staff_space#, 1.0 staff_space#); + + save ellipse, pat, outline, T; + path ellipse, pat, outline; + transform T; + + T := identity xscaled 0.50 linethickness + yscaled 0.22 staff_space; + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + x1 = x2 = 0; + top y1 = h; + bot y2 = -d; + + fill get_subpath (ellipse, up, down, z1) + -- get_subpath (ellipse, down, up, z2) + -- cycle; + + T := identity xscaled 0.50 linethickness + yscaled 0.22 staff_space + rotated -63; + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + z3 = (0.10 staff_space, -0.50 staff_space); + z4 = (0.40 staff_space, +0.40 staff_space); + z5 = (0.10 staff_space, +0.40 staff_space); + + pat := z3{(1, 2)} + .. z4 + .. z5{(-1, -1)}; + + % the original envelope curve created with `draw' contains + % cusps which we avoid + outline := get_subpath (ellipse, -direction 0 of pat, + direction 0 of pat, z3) + .. get_subpoint (ellipse, direction 1 of pat, z4) + .. get_subpath (ellipse, direction 2 of pat, + -direction 1.8 of pat, z5) + .. get_subpoint (ellipse, -direction 1 of pat, z4) + {-direction 1 of pat} + .. cycle; + + save shift; + pair shift; + + % make the outline touch the bounding box + shift = find_tangent_shift (((w, -d) -- (w, h)), outline, + (b, 0), (-b, 0)); + outline := outline shifted shift; + + fill outline; + + labels (1, 2, 3, 4, 5); +fet_endchar; - za = (0.00 staff_space, +0.90 staff_space); - zb = (0.00 staff_space, -0.50 staff_space); - draw za -- zb; - - pickup pencircle - xscaled 0.50 linethickness - yscaled 0.22 staff_space - rotated -63; - - save zc, zd, ze; - pair zc, zd, ze; - - zc = (0.10 staff_space, -0.50 staff_space); - zd = (0.40 staff_space, +0.40 staff_space); - ze = (0.10 staff_space, +0.40 staff_space); - - draw zc{(1,2)} .. zd .. ze{(-1,-1)}; - - fet_endchar; %%%%%%%% % @@ -56,52 +95,97 @@ fet_beginchar("Ed. Med. Flat" , "medicaea-1", "medicaeaflat"); % % % -fet_beginchar("Ed. Vat. Flat" , "vaticana-1", "vaticanaflat"); - save za, zb, zc, zd, ze, zf, zg; - pair za, zb, zc, zd, ze, zf, zg; - za = (0.00 staff_space, +0.80 staff_space); - zb = (0.00 staff_space, -0.03 staff_space); - zc = (0.25 staff_space, -0.23 staff_space); - zd = (0.50 staff_space, -0.23 staff_space); - ze = (0.50 staff_space, +0.00 staff_space); - zf = (0.25 staff_space, +0.20 staff_space); - zg = (0.15 staff_space, +0.26 staff_space); - - pickup pencircle - xscaled 0.50 linethickness - yscaled 0.22 staff_space; - draw za{down} .. {down}zb .. zc .. zd{up} .. {up}ze .. zf .. zg; - - set_char_box(0.00 staff_space# + 0.25 linethickness#, - 0.50 staff_space# + 0.25 linethickness#, - 0.23 staff_space# + 0.11 staff_space#, - 0.80 staff_space# + 0.11 staff_space#); - fet_endchar; - -fet_beginchar("Ed. Vat. Natural" , "vaticana0", "vaticananatural"); - save za, zb, zc, zd; - pair za, zb, zc, zd; - pickup pencircle - xscaled 0.80 linethickness - yscaled 0.22 staff_space; - za = (0.00 staff_space, +0.65 staff_space); - zb = (0.00 staff_space, -0.35 staff_space); - zc = (0.00 staff_space, -0.30 staff_space); - zd = (0.40 staff_space, -0.08 staff_space); - draw za -- zb; - draw zc -- zd; +fet_beginchar ("Ed. Vat. Flat" , "vaticanaM1"); + z1 = (0.00 staff_space, +0.80 staff_space); + z2 = (0.00 staff_space, -0.08 staff_space); + z3 = (0.25 staff_space, -0.23 staff_space); + z4 = (0.50 staff_space, -0.24 staff_space); + z5 = (0.50 staff_space, +0.03 staff_space); + z6 = (0.25 staff_space, +0.20 staff_space); + z7 = (0.15 staff_space, +0.26 staff_space); + + save pat, ellipse, T; + path pat, ellipse; + transform T; + + T := identity xscaled 0.50 linethickness + yscaled 0.22 staff_space; + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + pat := z1 + -- z2{down} + ... z3 + ... {up}z4 + -- z5{up} + .. z6 + .. z7; + + % the original envelope curve created with `draw' contains + % cusps which we avoid + fill get_subpath (ellipse, up, down, z1) + -- get_subpath (ellipse, down, direction 1.1 of pat, z2) + ... bot z3 + ... get_subpath (ellipse, direction 2.9 of pat, up, z4) + -- get_subpath (ellipse, up, direction 4.1 of pat, z5) + .. top z6 + .. get_subpath (ellipse, + direction 6 of pat, -direction 6 of pat, z7) + .. bot z6 + .. {down}bot lft z5 + -- top lft z4{down} + ... top z3 + ... top rt z2{up} + -- cycle; + + set_char_box (0.00 staff_space# + 0.25 linethickness#, + 0.50 staff_space# + 0.25 linethickness#, + 0.23 staff_space# + 0.11 staff_space#, + 0.80 staff_space# + 0.11 staff_space#); + + labels (1, 2, 3, 4, 5, 6, 7); +fet_endchar; + + +fet_beginchar ("Ed. Vat. Natural" , "vaticana0"); + save ellipse, T; + path ellipse; + transform T; + + T := identity xscaled 0.80 linethickness + yscaled 0.22 staff_space; + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + z1 = (0.00 staff_space, +0.65 staff_space); + z2 = (0.00 staff_space, -0.35 staff_space); + + fill get_subpath (ellipse, up, down, z1) + -- get_subpath (ellipse, down, up, z2) + -- cycle; + + pickup penrazor scaled 0.22 staff_space + rotated 90; + + z3 = (0.00 staff_space, -0.30 staff_space); + z4 = (0.40 staff_space, -0.08 staff_space); + + draw z3 + -- z4; addto currentpicture also currentpicture - xscaled -1 - yscaled -1 - shifted (0.40 staff_space, 0.0 staff_space); + xscaled -1 + yscaled -1 + shifted (0.40 staff_space, 0.0 staff_space); + + set_char_box (0.00 staff_space# + 0.40 linethickness#, + 0.40 staff_space# + 0.40 linethickness#, + 0.65 staff_space# + 0.11 staff_space#, + 0.65 staff_space# + 0.11 staff_space#); - set_char_box(0.00 staff_space# + 0.40 linethickness#, - 0.40 staff_space# + 0.40 linethickness#, - 0.65 staff_space# + 0.11 staff_space#, - 0.65 staff_space# + 0.11 staff_space#); + labels (1, 2, 3, 4); +fet_endchar; - fet_endchar; %%%%%%%% % @@ -111,79 +195,292 @@ fet_beginchar("Ed. Vat. Natural" , "vaticana0", "vaticananatural"); % % % -fet_beginchar("Mensural Sharp" , "mensural1", "mensuralsharp"); +fet_beginchar ("Mensural Sharp" , "mensural1"); save stemthick; + define_pixels (stemthick); + stemthick# = linethickness#; - save za, zb; - pair za, zb; - pickup pencircle scaled 0.8 stemthick; - za = 0.4 * staff_space * (0.8, 1); - za = -zb; - draw za .. zb; + save circle, pat, T; + path circle, pat; + transform T; - addto currentpicture also currentpicture xscaled -1; - addto currentpicture also currentpicture shifted (0.20 staff_space, 0); + T := identity scaled 0.8 stemthick; + pickup pencircle transformed T; + circle := fullcircle transformed T; - set_char_box(0.8 * 0.4 staff_space# + 0.4 stemthick#, - (0.8 * 0.4 + 0.2) * staff_space# + 0.4 stemthick#, - 0.4 staff_space# + 0.4 stemthick#, - 0.4 staff_space# + 0.4 stemthick#); + z1 = 0.4 staff_space * (0.8, 1); + z1 = -z2; - fet_endchar; + pat := get_subpath (circle, z1 - z2, z2 - z1, z1) + -- get_subpath (circle, z2 - z1, z1 - z2, z2) + -- cycle; -fet_beginchar("Mensural Flat" , "mensural-1", "mensuralflat"); - save stemthick; - define_pixels (stemthick); - stemthick# = linethickness#; + fill pat; + fill pat xscaled -1; + fill pat shifted (0.20 staff_space, 0); + fill pat xscaled -1 shifted (0.20 staff_space, 0); + + set_char_box (0.8 * 0.4 staff_space# + 0.4 stemthick#, + (0.8 * 0.4 + 0.2) * staff_space# + 0.4 stemthick#, + 0.4 staff_space# + 0.4 stemthick#, + 0.4 staff_space# + 0.4 stemthick#); - save za, zb, zc, zd, ze; - pair za, zb, zc, zd, ze; - pickup pencircle - xscaled 1.4 stemthick - yscaled 0.6 stemthick - rotated 45; + labels (1, 2); +fet_endchar; - za = (0.00 staff_space, +1.80 staff_space); - zb = (0.00 staff_space, -0.25 staff_space); - zc = (0.35 staff_space, -0.25 staff_space); - zd = (0.35 staff_space, +0.25 staff_space); - ze = (0.00 staff_space, +0.25 staff_space); - draw za -- zb .. zc .. zd .. ze; - set_char_box(0.00 staff_space# + 0.75 stemthick#, - 0.40 staff_space# + 0.75 stemthick#, - 0.25 staff_space# + 0.75 stemthick#, - 1.80 staff_space# + 0.75 stemthick#); +fet_beginchar ("Mensural Flat" , "mensuralM1"); + save stemthick; + + define_pixels (stemthick); - fet_endchar; + stemthick# = linethickness#; -fet_beginchar("Hufnagel Flat" , "hufnagel-1", "hufnagelflat"); + save ellipse, pat, outline, T; + path ellipse, pat, outline; + transform T; + + T := identity xscaled 1.4 stemthick + yscaled 0.6 stemthick + rotated 45; + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + z1 = (0.00 staff_space, +1.80 staff_space); + z2 = (0.00 staff_space, -0.25 staff_space); + z3 = (0.35 staff_space, -0.25 staff_space); + z4 = (0.35 staff_space, +0.25 staff_space); + z5 = (0.00 staff_space, +0.25 staff_space); + + pat := z2 + .. z3 + .. z4 + .. z5; + + save dirs, s; + pair dirs[]; + + s := 1/4; + + % we approximate `draw pat' + for i = 2 step s until (length pat + 2): + dirs[i] := direction (i - 2) of pat; + endfor; + + outline := get_subpath (ellipse, up, down, z1) + -- get_subpath (ellipse, down, dirs2, z2) + for i = (2 + s) step s until (length pat + 2 - s): + .. get_subpoint (ellipse, dirs[i], + point (i - 2) of pat) + endfor + .. top z5 + -- bot z5 + for i = (length pat + 2 - s) step -s until 2: + .. get_subpoint (ellipse, -dirs[i], + point (i - 2) of pat) + endfor + -- get_subpoint (ellipse, up, z2) + -- cycle; + + fill outline; + + set_char_box (0.00 staff_space# + 0.75 stemthick#, + 0.40 staff_space# + 0.75 stemthick#, + 0.25 staff_space# + 0.75 stemthick#, + 1.80 staff_space# + 0.75 stemthick#); + + labels (1, 2, 3, 4, 5); +fet_endchar; + + +fet_beginchar ("Hufnagel Flat" , "hufnagelM1"); save stemthick; + define_pixels (stemthick); + stemthick# = linethickness#; - save za, zb, zc, zd, ze, zf; - pair za, zb, zc, zd, ze, zf; - pickup pencircle - xscaled 2.4 stemthick - yscaled 0.4 stemthick - rotated 45; - - za = (0.00 staff_space, +1.80 staff_space); - zb = (0.00 staff_space, -0.15 staff_space); - zc = (0.25 staff_space, -0.30 staff_space); - zd = (0.50 staff_space, +0.00 staff_space); - ze = (0.30 staff_space, +0.30 staff_space); - zf = (0.00 staff_space, +0.15 staff_space); - draw za -- zb -- zc .. zd .. ze -- zf; - - set_char_box(0.00 staff_space# + 1.0 stemthick#, - 0.50 staff_space# + 1.0 stemthick#, - 0.30 staff_space# + 0.5 stemthick#, - 1.80 staff_space# + 0.5 stemthick#); - - fet_endchar; - -fet_endgroup ("accidentals") + save ellipse, pat, T; + path ellipse, pat; + transform T; + + T := identity xscaled 2.4 stemthick + yscaled 0.4 stemthick + rotated 45; + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + z1 = (0.00 staff_space, +1.80 staff_space); + z2 = (0.00 staff_space, -0.15 staff_space); + z3 = (0.25 staff_space, -0.30 staff_space); + z4 = (0.50 staff_space, +0.00 staff_space); + z5 = (0.30 staff_space, +0.30 staff_space); + z6 = (0.00 staff_space, +0.15 staff_space); + + pat := z3 + .. z4 + .. z5; + + save t; + numeric t[]; + + % we have to find the envelope intersections (if any) + t1 = find_envelope_cusp (reverse ellipse, pat, 1/256) + 3; + if t1 < 3: + t1 := 3; + fi; + t2 = find_envelope_cusp (ellipse, reverse pat, 1/256); + if t2 < 0: + t2 := 3; + else: + t2 := length pat - t2 + 3; + fi; + + save dirs, s; + pair dirs[]; + + s := 1/8; + + % we approximate `draw pat' + for i = 3 step s until 5: + dirs[i] := direction (i - 3) of pat; + endfor; + + fill get_subpath (ellipse, up, down, z1) + -- get_subpath (ellipse, down, z3 - z2, z2) + -- get_subpoint (ellipse, z3 - z2, z3) + for i = 3 step s until 5: + .. get_subpoint (ellipse, dirs[i], + point (i - 3) of pat) + endfor + .. get_subpoint (ellipse, z6 - z5, z5) + -- get_subpoint (ellipse, z6 - z5, z6) + -- get_subpoint (ellipse, z5 - z6, z6) + -- get_subpoint (ellipse, z5 - z6, z5) + -- get_subpoint (ellipse, -dirs[5], z5) + for i = (5 - s) step -s until t2: + .. get_subpoint (ellipse, -dirs[i], + point (i - 3) of pat) + endfor + .. get_subpoint (ellipse, -direction (t2 - 3) of pat, + point (t2 - 3) of pat) + -- get_subpoint (ellipse, -direction (t1 - 3) of pat, + point (t1 - 3) of pat) + for i = (floor ((t1 - 3) / s) * s + 3) step -s until (3 + s): + .. get_subpoint (ellipse, -dirs[i], + point (i - 3) of pat) + endfor + .. get_subpoint (ellipse, -dirs[3], z3) + -- get_subpoint (ellipse, z2 - z3, z3) + -- get_subpoint (ellipse, z2 - z3, z2) + -- get_subpoint (ellipse, up, z2) + -- cycle; + +% draw z1 +% -- z2 +% -- pat +% -- z6; + + set_char_box (0.00 staff_space# + 1.0 stemthick#, + 0.50 staff_space# + 1.0 stemthick#, + 0.30 staff_space# + 0.5 stemthick#, + 1.80 staff_space# + 0.5 stemthick#); + + labels (1, 2, 3, 4, 5, 6); +fet_endchar; + + +%%%%%%%%%%%%%%% +%%% +%%% Glyphs for Kievan Music Notation +%%% +%%%%%%%%%%%%%%% + + +fet_beginchar ("Kievan sharp", "kievan1"); + % This draws the sharp. + % It never occurs in Synodal music and + % can only be found in some early manuscripts. + + z1 = (0.579 staff_space, 1.459 staff_space); + z2 = (1.414 staff_space, -0.904 staff_space); + z3 = (0.187 staff_space, 0.904 staff_space); + + x2 - x1 = x4 - x3; + y1 - y2 = y3 - y4; + + z5 = (1.296 staff_space, 1.613 staff_space); + z6 = (0.090 staff_space, -0.864 staff_space); + z7 = (1.532 staff_space, 0.892 staff_space); + + x5 - x6 = x7 - x8; + y5 - y6 = y7 - y8; + + pickup pensquare xscaled 0.167staff_space + yscaled 0.167staff_space + rotated -69.2; + draw z1{dir -69.2} + .. {dir -74.1}z2; + draw z3{dir -69.2} + .. {dir -74.1}z4; + + pickup pensquare xscaled 0.167staff_space + yscaled 0.167staff_space + rotated -114.6; + draw z5{dir -114.6} + ... {dir -125.0}z6; + draw z7{dir -114.6} + ... {dir -125.0}z8; + + set_char_box (0, 1.6 staff_space#, + 1.6 staff_space#, 1.6 staff_space#); +fet_endchar; + + +fet_beginchar ("Kievan flat", "kievanM1"); + % This draws the flat sign. + % In Synodal music, the flat only occurs on the high B + % but it may be used elsewhere in early manuscripts. + + z1 = (0.452 staff_space, 1.772 staff_space); + z2 = (0.481 staff_space, 1.735 staff_space); + z3 = (0.464 staff_space, 1.626 staff_space); + z4 = (0.249 staff_space, 0.322 staff_space); + z5 = (0.432 staff_space, -0.762 staff_space); + z6 = (0.611 staff_space, -0.583 staff_space); + z7 = (0.611 staff_space, 0.224 staff_space); + z8 = (0.652 staff_space, 0.513 staff_space); + z9 = (0.900 staff_space, 0.684 staff_space); + z10 = (0.872 staff_space, 0.640 staff_space); + z11 = (0.811 staff_space, 0.359 staff_space); + z12 = (0.811 staff_space, -0.587 staff_space); + z13 = (0.338 staff_space, -1.063 staff_space); + z14 = (0.016 staff_space, 0.196 staff_space); + z15 = (0.204 staff_space, 1.316 staff_space); + + fill z13 + .. z14{up} + .. z15{dir 70.8} + .. z1{dir 4.9} + .. z2 + .. z3 + .. z4{down} + .. z5 + -- z6 + -- z7{up} + .. z8 + .. {dir 23}z9 + & z9 + .. z10{dir -135} + .. {down}z11 + -- z12 + -- z13 + & cycle; + + set_char_box (0, 1.0 staff_space#, + 1.0 staff_space#, 1.8 staff_space#); +fet_endchar; + +fet_endgroup ("accidentals");