X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Fparmesan-custodes.mf;h=f554eef04730053a215232d96e906974902f5ab7;hb=30e335ef53c04c48a840e1c2be1ad546331767ff;hp=6c763199574b15bb153a351ddf66d0d14d1efa06;hpb=c68dcdd91af21149820ba888acb0874214972dbb;p=lilypond.git diff --git a/mf/parmesan-custodes.mf b/mf/parmesan-custodes.mf index 6c76319957..f554eef047 100644 --- a/mf/parmesan-custodes.mf +++ b/mf/parmesan-custodes.mf @@ -1,9 +1,9 @@ -% -*-Fundamental-*- +% -%-Fundamental-%- -*-Metafont-*- % parmesan-custodes.mf -- implement ancient custodes % % source file of LilyPond's pretty-but-neat music font % -% (c) 2000--2003 Juergen Reuter +% (c) 2000--2006 Juergen Reuter % save black_notehead_width; @@ -11,8 +11,28 @@ numeric black_notehead_width; fet_begingroup ("custodes") -noteheight#:=staff_space#+ (1 + overdone_heads) *stafflinethickness#; -define_pixels(noteheight); +% +% character aligment: +% +% The custos is assumed to be vertically centered around (0, 0). +% The left-most edge of the custos should touch the vertical line +% that goes though the point (0, 0). +% +% set_char_box() conventions: +% +% * breapth: Ignored (as far as I know). Should be set to 0. +% +% * width: Should cover the horizontal range of the custos that is to +% be printed in the staff. If the custos has an appendage that is +% supposed to reach beyond the right end of the staff, the width +% should be set such that the appendage is outside of the char box. +% +% * depth: Should match the bottom edge of the custos. Affects +% vertical collision handling. +% +% * height: Should match the top edge of the custos. Affects vertical +% collision handling. +% save between_staff_lines, on_staff_line, anywhere; between_staff_lines = 0; @@ -32,75 +52,75 @@ dir_down = -1; % % parameterized hufnagel custos -def custos_hufnagel(expr verbose_name, internal_name, ly_name, +def custos_hufnagel(expr verbose_name, internal_name, direction, staffline_adjustment) = - fet_beginchar(verbose_name, internal_name, ly_name) - - save b_h, a_w; - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; - - save a, beta, ht, wd; + fet_beginchar(verbose_name, internal_name) + save alpha, dalpha, ht, wd, stem_ht, pen_size; ht# = noteheight#; - 2beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 2a# / a_w; - black_notehead_width# := wd#; - - save rh_width, rh_height, rh_edge; % rhombus dimensions - rh_width# / ht# = tand(35); - rh_height# = 1.0ht#; - rh_edge# * cosd(35) = ht# / 2; + wd#/ht# = 0.6; + alpha# = 35; + dalpha# = direction*alpha#; - save stem_size; if staffline_adjustment = between_staff_lines: - stem_size = 0.25; + stem_ht# = 1.00 staff_space#; elseif staffline_adjustment = on_staff_line: - stem_size = 0.75; + stem_ht# = 1.50 staff_space#; else: % staffline_adjustment = anywhere - stem_size = 0.50; + stem_ht# = 1.25 staff_space#; fi; + pen_size# = 0.5*sqrt(wd#*wd#+ht#*ht#); - define_pixels(rh_width, rh_height, rh_edge); + define_pixels(ht, wd, pen_size, stem_ht); pickup pencircle - xscaled stafflinethickness - yscaled rh_edge - rotated (-35*direction); - z1=(0.0rh_width,+0.25direction*rh_height); - z2=(0.5rh_width,-0.25direction*rh_height); - z3-z2=(stem_size*rh_width,+0.75*stem_size*direction*rh_height); + xscaled linethickness + yscaled pen_size + rotated -dalpha#; + + if direction = dir_up: + top y1 = ht/2; + bot y2 = -ht/2; + else: + bot y1 = -ht/2; + top y2 = ht/2; + fi; + lft x1 = 0; + rt x2 = wd; + y3 - y2 = direction*stem_ht; + (y3 - y2) = (x3 - x2) * tand(90-dalpha#); draw z1 -- z2 -- z3; - set_char_box(stafflinethickness#, wd# / 2, - ht# / 2, ht# / 2); - + % The stem is intentionally outside of the char box. + if direction > 0: + set_char_box(0, wd#, ht#/2, stem_ht#); + else: + set_char_box(0, wd#, stem_ht#, ht#/2); + fi; fet_endchar; enddef; % custos hufnagel, stem up, between staff lines -custos_hufnagel("Custos Hufnagel", "hufnagel-u0", "hufnagelu0", +custos_hufnagel("Custos Hufnagel", "hufnagel.u0", dir_up, between_staff_lines); % custos hufnagel, stem up, on staff line -custos_hufnagel("Custos Hufnagel", "hufnagel-u1", "hufnagelu1", +custos_hufnagel("Custos Hufnagel", "hufnagel.u1", dir_up, on_staff_line); % custos hufnagel, stem up, anywhere -custos_hufnagel("Custos Hufnagel", "hufnagel-u2", "hufnagelu2", +custos_hufnagel("Custos Hufnagel", "hufnagel.u2", dir_up, anywhere); % custos hufnagel, stem down, between staff lines -custos_hufnagel("Reverse Custos Hufnagel", "hufnagel-d0", "hufnageld0", +custos_hufnagel("Reverse Custos Hufnagel", "hufnagel.d0", dir_down, between_staff_lines); % custos hufnagel, stem down, on staff line -custos_hufnagel("Reverse Custos Hufnagel", "hufnagel-d1", "hufnageld1", +custos_hufnagel("Reverse Custos Hufnagel", "hufnagel.d1", dir_down, on_staff_line); % custos hufnagel, stem down, anywhere -custos_hufnagel("Reverse Custos Hufnagel", "hufnagel-d2", "hufnageld2", +custos_hufnagel("Reverse Custos Hufnagel", "hufnagel.d2", dir_down, anywhere); %%%%%%%% @@ -110,71 +130,69 @@ custos_hufnagel("Reverse Custos Hufnagel", "hufnagel-d2", "hufnageld2", % % -def custos_medicaea(expr verbose_name, internal_name, ly_name, +def custos_medicaea(expr verbose_name, internal_name, direction, staffline_adjustment) = - fet_beginchar(verbose_name, internal_name, ly_name) - - save b_h, a_w; - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; + fet_beginchar(verbose_name, internal_name) - save a, beta, ht, wd; - ht# = noteheight#; %% * mag; - 2beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 0.4a# / a_w; % width intentionally too small - black_notehead_width# := wd#; - - define_pixels(ht, wd); + save ht, wd, stem_ht; + ht# = noteheight#; + wd#/ht# = 0.25; - save stem_size; if staffline_adjustment = between_staff_lines: - stem_size = 0.90; + stem_ht# = 1.00 staff_space#; elseif staffline_adjustment = on_staff_line: - stem_size = 1.40; + stem_ht# = 1.50 staff_space#; else: % staffline_adjustment = anywhere - stem_size = 1.15; + stem_ht# = 1.25 staff_space#; fi; - pickup pencircle xscaled blot_diameter yscaled 1.0ht; - z1 = (0.0wd, 0.0ht); - z2 = z1 + (1.0wd - blot_diameter/2, 0); - draw z1 .. z2; + define_pixels(ht, wd, stem_ht); - pickup pencircle scaled stafflinethickness; - z3 = (1.0wd - stafflinethickness/2, 0.0ht); - z4 = z3 + (0, +direction*stem_size*ht); - draw z3 .. z4; + pickup pencircle xscaled 0.6linethickness yscaled ht; + lft x1 = 0; + y1 = 0; + rt x2 = wd; + y2 = y1; + draw z1 -- z2; - set_char_box(0, wd#, ht# / 2, ht# / 2); + pickup pencircle scaled 0.6linethickness; + rt x3 = wd; + y3 = 0; + x4 = x3; + y4 = direction*stem_ht; + draw z3 -- z4; + if direction > 0: + set_char_box(0, wd#, ht#/2, stem_ht#); + else: + set_char_box(0, wd#, stem_ht#, ht#/2); + fi; fet_endchar; enddef; % custos medicaea, stem up, between staff lines -custos_medicaea("Custos Med.", "medicaea-u0", "medicaeau0", +custos_medicaea("Custos Med.", "medicaea.u0", dir_up, between_staff_lines); % custos medicaea, stem up, on staff line -custos_medicaea("Custos Med.", "medicaea-u1", "medicaeau1", +custos_medicaea("Custos Med.", "medicaea.u1", dir_up, on_staff_line); % custos medicaea, stem up, anywhere -custos_medicaea("Custos Med.", "medicaea-u2", "medicaeau2", +custos_medicaea("Custos Med.", "medicaea.u2", dir_up, anywhere); % custos medicaea, stem down, between staff lines -custos_medicaea("Reverse Custos Med.", "medicaea-d0", "medicaead0", +custos_medicaea("Reverse Custos Med.", "medicaea.d0", dir_down, between_staff_lines); % custos medicaea, stem down, on staff line -custos_medicaea("Reverse Custos Med.", "medicaea-d1", "medicaead1", +custos_medicaea("Reverse Custos Med.", "medicaea.d1", dir_down, on_staff_line); % custos medicaea, stem down, anywhere -custos_medicaea("Reverse Custos Med.", "medicaea-d2", "medicaead2", +custos_medicaea("Reverse Custos Med.", "medicaea.d2", dir_down, anywhere); %%%%%%%% @@ -184,72 +202,78 @@ custos_medicaea("Reverse Custos Med.", "medicaea-d2", "medicaead2", % % -def custos_vaticana(expr verbose_name, internal_name, ly_name, +def custos_vaticana(expr verbose_name, internal_name, direction, staffline_adjustment) = - fet_beginchar(verbose_name, internal_name, ly_name) - - save b_h, a_w; - a_b := 1.54; % b_h * a_b / a_w = wd / ht - b_h := 0.85; - a_w := 1.09; - - save a, beta, ht, wd; - ht# = noteheight# ; %% * mag; - 2beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 0.4a# / a_w; - black_notehead_width# := wd#; + fet_beginchar(verbose_name, internal_name) + save ht, wd, u_offs, l_offs, stem_size, stem_end; + save pen_ht, l_shift, curve_ht, bend_ht; + ht# = noteheight#; + wd# = 0.24ht#; - save stem_size; if staffline_adjustment = between_staff_lines: - stem_size = 0.60; + stem_size# = 1.00; elseif staffline_adjustment = on_staff_line: - stem_size = 1.10; + stem_size# = 1.50; else: % staffline_adjustment = anywhere - stem_size = 0.85; + stem_size# = 1.25; + fi; + curve_ht# = 0.6ht#; + bend_ht# = 0.10ht#; + l_shift# = 0.04ht#; + u_offs# = +direction*0.5*(bend_ht#+l_shift#); + l_offs# = -direction*0.5*(bend_ht#-l_shift#); + stem_end# = direction*stem_size#*staff_space#; + pen_ht# = curve_ht#-l_shift#; + + define_pixels(u_offs, l_offs, stem_end, ht, wd, pen_ht); + + pickup pencircle scaled 0.6linethickness; + z1 = (0, u_offs); + z2 = (0.7wd, l_offs); + z3 = (wd, l_offs); + penpos1(pen_ht, 90); + penpos2(pen_ht, 90); + penpos3(pen_ht, 90); + penstroke z1e{z2 - z1} .. {right}z2e .. z3e; + + rt x4 = wd; + bot y4 = 0; + x5 = x4; + top y5 = stem_end; + draw z4 -- z5; + + if direction > 0: + set_char_box(0, wd#, -l_offs#+0.5pen_ht#, stem_end#); + else: + set_char_box(0, wd#, -stem_end#, +l_offs#+0.5pen_ht#); fi; - - define_pixels(ht, wd); - pickup pencircle scaled stafflinethickness; - - z1 = (0.0wd, +direction*0.05ht); - z2 = (1.0wd + 0.5stafflinethickness, 0.0ht); - penpos1(0.5ht, 90); - penpos2(0.5ht, 90); - penstroke z1e{z2 - z1} .. {right}z2e; - - z3=(1.0wd, +0.0ht); - z4=(1.0wd, +direction*stem_size*ht); - draw z3 -- z4; - - set_char_box(0, wd#, 0.3 ht#, 0.3 ht#); fet_endchar; enddef; % custos vaticana, stem up, between staff lines -custos_vaticana("Custos Ed. Vat.", "vaticana-u0", "vaticanau0", +custos_vaticana("Custos Ed. Vat.", "vaticana.u0", dir_up, between_staff_lines); % custos vaticana, stem up, on staff line -custos_vaticana("Custos Ed. Vat.", "vaticana-u1", "vaticanau1", +custos_vaticana("Custos Ed. Vat.", "vaticana.u1", dir_up, on_staff_line); % custos vaticana, stem up, anywhere -custos_vaticana("Custos Ed. Vat.", "vaticana-u2", "vaticanau2", +custos_vaticana("Custos Ed. Vat.", "vaticana.u2", dir_up, anywhere); % custos vaticana, stem down, between staff lines -custos_vaticana("Reverse Custos Ed. Vat.", "vaticana-d0", "vaticanad0", +custos_vaticana("Reverse Custos Ed. Vat.", "vaticana.d0", dir_down, between_staff_lines); % custos vaticana, stem down, on_staff_line -custos_vaticana("Reverse Custos Ed. Vat.", "vaticana-d1", "vaticanad1", +custos_vaticana("Reverse Custos Ed. Vat.", "vaticana.d1", dir_down, on_staff_line); % custos vaticana, stem down, anywhere -custos_vaticana("Reverse Custos Ed. Vat.", "vaticana-d2", "vaticanad2", +custos_vaticana("Reverse Custos Ed. Vat.", "vaticana.d2", dir_down, anywhere); %%%%%%%% @@ -259,71 +283,75 @@ custos_vaticana("Reverse Custos Ed. Vat.", "vaticana-d2", "vaticanad2", % % -def custos_mensural(expr verbose_name, internal_name, ly_name, +def custos_mensural(expr verbose_name, internal_name, direction, staffline_adjustment) = - fet_beginchar(verbose_name, internal_name, ly_name) - - save b_h,a_w; - a_b:=1.54; % b_h * a_b / a_w = wd / ht - b_h:=0.85; - a_w:=1.09; - - save a, beta, ht, wd; + fet_beginchar(verbose_name, internal_name) + save alpha, dalpha, ht, wd, stem_ht; ht# = noteheight#; - 2beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 2a# / a_w; % width intentionally too small - set_char_box(0, wd#, ht# / 2, ht# / 2); - black_notehead_width# := wd#; + wd#/ht# = 1.2; + alpha# = 35; + dalpha# = direction*alpha#; - save stem_size; if staffline_adjustment = between_staff_lines: - stem_size = 0.85; + stem_ht# = 1.00 staff_space#; elseif staffline_adjustment = on_staff_line: - stem_size = 1.35; + stem_ht# = 1.50 staff_space#; else: % staffline_adjustment = anywhere - stem_size = 1.10; + stem_ht# = 1.25 staff_space#; fi; - define_pixels(ht, wd); + define_pixels(ht, wd, stem_ht); pickup pencircle - xscaled stafflinethickness + xscaled linethickness yscaled 0.4ht - rotated (-35*direction); - z1=(0.0wd,-direction*0.2ht); - z2=(0.2wd,+direction*0.2ht); - z3=(0.4wd,-direction*0.2ht); - z4=(0.6wd,+direction*0.2ht); - z5=(0.8wd,-direction*0.2ht); - z6-z5=(stem_size*0.5wd,+direction*stem_size*ht); + rotated -dalpha#; + + if direction > 0: + bot y1 = bot y3 = bot y5 = -direction*0.33ht; + top y2 = top y4 = +direction*0.33ht; + else: + top y1 = top y3 = top y5 = -direction*0.33ht; + bot y2 = bot y4 = +direction*0.33ht; + fi; + lft x1 = 0.0wd; lft x2 = 0.2wd; lft x3 = 0.4wd; + lft x4 = 0.6wd; lft x5 = 0.8wd; + y6 - y5 = direction*stem_ht; + (y6 - y5) = (x6 - x5) * tand(90-dalpha#); + draw z1 -- z2 -- z3 -- z4 -- z5 -- z6; + % The stem is intentionally outside of the char box. + if direction > 0: + set_char_box(0, wd#, +direction*0.33ht#, stem_ht#); + else: + set_char_box(0, wd#, stem_ht#, -direction*0.33ht#); + fi; fet_endchar; enddef; % custos mensural, stem up, between staff lines -custos_mensural("Custos Mensural", "mensural-u0", "mensuralu0", +custos_mensural("Custos Mensural", "mensural.u0", dir_up, between_staff_lines); % custos mensural, stem up, on staff line -custos_mensural("Custos Mensural", "mensural-u1", "mensuralu1", +custos_mensural("Custos Mensural", "mensural.u1", dir_up, on_staff_line); % custos mensural, stem up, anywhere -custos_mensural("Custos Mensural", "mensural-u2", "mensuralu2", +custos_mensural("Custos Mensural", "mensural.u2", dir_up, anywhere); % custos mensural, stem down, between staff lines -custos_mensural("Reverse Custos Mensural", "mensural-d0", "mensurald0", +custos_mensural("Reverse Custos Mensural", "mensural.d0", dir_down, between_staff_lines); % custos mensural, stem down, on staff line -custos_mensural("Reverse Custos Mensural", "mensural-d1", "mensurald1", +custos_mensural("Reverse Custos Mensural", "mensural.d1", dir_down, on_staff_line); % custos mensural, stem down, anywhere -custos_mensural("Reverse Custos Mensural", "mensural-d2", "mensurald2", +custos_mensural("Reverse Custos Mensural", "mensural.d2", dir_down, anywhere); fet_endgroup ("custodes")