X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Fparmesan-heads.mf;h=b69c378ffce6e04be36034b6ab12bc6466b8188d;hb=c7555d70732969277c5e906285ec04e5b561c38e;hp=6aadef228994230d6192e018b6ec3ee6ddd53efe;hpb=c8f35b49edadbef240fe3ad4931a6c9f526cc6d6;p=lilypond.git diff --git a/mf/parmesan-heads.mf b/mf/parmesan-heads.mf index 6aadef2289..b69c378ffc 100644 --- a/mf/parmesan-heads.mf +++ b/mf/parmesan-heads.mf @@ -3,7 +3,7 @@ % % source file of LilyPond's pretty-but-neat music font % -% (c) 2001--2006 Juergen Reuter +% (c) 2001--2007 Juergen Reuter % % Neo-mensural heads originally by % Christian Mondrup and Mats Bengtsson @@ -12,7 +12,7 @@ save black_notehead_width; numeric black_notehead_width; -fet_begingroup ("noteheads") +fet_begingroup ("noteheads"); % % character aligment: @@ -145,38 +145,6 @@ fet_beginchar ("Left stemmed notehead", "slneomensural"); fet_endchar; -% -% Find point on `curve' which gives the tangent between point `p' -% and `curve'. To guide the search, two auxiliary points must be -% specified, `p_in' and `p_out'. The line between `p' and `p_in' -% must intersect `curve', while the line between `p' and `p_out' -% must not. -% -def find_tangent (expr p, curve, p_in, p_out) = - begingroup; - save mid, t, t_good, in, out; - pair mid, in, out; - - in := p_in; - out := p_out; - - forever: - mid := 0.5 [in, out]; - exitif abs (out - mid) <= eps; - t := xpart (curve intersectiontimes (p -- mid)); - if (t > 0): - in := mid; - t_good := t; - else: - out := mid; - fi; - endfor; - - point t_good of curve - endgroup -enddef; - - % % Some sources (eg. Musix/OpusTeX) think that the appendage should be on % the left, some say right. Right wins democratically. @@ -214,17 +182,17 @@ enddef; % % (ze is wel breed) % -fet_beginchar ("Neo-mensural maxima notehead", "s-3neomensural"); +fet_beginchar ("Neo-mensural maxima notehead", "sM3neomensural"); draw_neomensural_longa (2.6 staff_space#); fet_endchar; -fet_beginchar ("Neo-mensural longa notehead", "s-2neomensural"); +fet_beginchar ("Neo-mensural longa notehead", "sM2neomensural"); draw_neomensural_longa (2 staff_space#); fet_endchar; -fet_beginchar ("Neo-mensural brevis notehead", "s-1neomensural"); +fet_beginchar ("Neo-mensural brevis notehead", "sM1neomensural"); draw_neomensural_brevis (2 staff_space#); fet_endchar; @@ -396,77 +364,25 @@ fet_beginchar ("Mensural left stemmed notehead", "slmensural"); fet_endchar; -fet_beginchar ("Mensural maxima notehead", "s-3mensural"); +fet_beginchar ("Mensural maxima notehead", "sM3mensural"); draw_mensural_longa (2.0 staff_space#); fet_endchar; -fet_beginchar ("Mensural longa notehead", "s-2mensural"); +fet_beginchar ("Mensural longa notehead", "sM2mensural"); draw_mensural_longa (staff_space#); fet_endchar; -fet_beginchar ("Mensural brevis notehead", "s-1mensural"); +fet_beginchar ("Mensural brevis notehead", "sM1mensural"); draw_mensural_brevis (staff_space#); fet_endchar; -% -% Shift `curve' along the line given by the auxiliary points `p_in' -% and `p_out' until `line' is a tangent, and return the shift. -% If `curve' is shifted to position `p_in', it must intersect -% `line', while shifted to `p_out' it must not. -% -def find_tangent_shift (expr line, curve, p_in, p_out) = - begingroup; - save mid, t, t_good, in, out; - pair mid, in, out; - - in := p_in; - out := p_out; - - forever: - mid := 0.5 [in, out]; - exitif abs (out - mid) <= eps; - t := xpart ((curve shifted mid) intersectiontimes line); - if (t > 0): - in := mid; - t_good := t; - else: - out := mid; - fi; - endfor; - - mid - endgroup -enddef; - - -% -% Get subpath specified by `dir_in' and `dir_out' of `curve' -% which is then shifted by `offset'. Assure that result has -% the same orientation as `curve'. -% -def get_subpath (expr curve, dir_in, dir_out, offset) = - begingroup; - save t_in, t_out; - - t_in := directiontime dir_in of curve; - t_out := directiontime dir_out of curve; - - if t_in > t_out: - t_out := t_out + length curve; - fi; - - (subpath (t_in, t_out) of curve) shifted offset - endgroup -enddef; - - def draw_diamond_head (expr head_h, pen_w, pen_h, angle, open) = save head_width, head_height; save ellipse, ellipse_r; - path ellipse, ellipse_r; + path ellipse, ellipse_r, diamond_shape; head_height# = head_h; head_width# / head_height# = tand (angle); @@ -493,11 +409,12 @@ def draw_diamond_head (expr head_h, pen_w, pen_h, angle, open) = z4 = find_tangent_shift (((0, -h) -- (w, -h)), ellipse, (w / 2, -h), (w / 2, 0)); - fill get_subpath (ellipse, z1 - z4, z2 - z1, z1) - -- get_subpath (ellipse, z2 - z1, z3 - z2, z2) - -- get_subpath (ellipse, z3 - z2, z4 - z3, z3) - -- get_subpath (ellipse, z4 - z3, z1 - z4, z4) - -- cycle; + diamond_shape := get_subpath (ellipse, z1 - z4, z2 - z1, z1) + -- get_subpath (ellipse, z2 - z1, z3 - z2, z2) + -- get_subpath (ellipse, z3 - z2, z4 - z3, z3) + -- get_subpath (ellipse, z4 - z3, z1 - z4, z4) + -- cycle; + fill diamond_shape; if open: save l; @@ -565,10 +482,9 @@ fet_endchar; % % -% parameterized punctum -def punctum_char (expr verbose_name, internal_name, - linea, cavum, straight, auctum, - d_up, up_shift, down_shift, mag) = +def vat_punctum_char (expr verbose_name, internal_name, + linea, cavum, straight, auctum, + d_up, up_shift, down_shift, mag) = fet_beginchar (verbose_name, "s" & internal_name); save a_b, b_h, a_w; @@ -579,9 +495,9 @@ def punctum_char (expr verbose_name, internal_name, save a, beta, ht, wd; ht# = noteheight# * mag; - 2 beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 2 a# / a_w; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; black_notehead_width# := wd#; % direction @@ -744,14 +660,16 @@ def punctum_char (expr verbose_name, internal_name, pickup pencircle scaled 0.6 linethickness; - draw_block ((-0.10 wd - linea_width / 2, - -linea_height / 2), - (-0.10 wd + linea_width / 2, - +linea_height / 2)); - draw_block ((+0.52 wd - linea_width / 2, - -linea_height / 2), - (+0.52 wd + linea_width / 2, - +linea_height / 2)); + draw_rounded_block ((-0.10 wd - linea_width / 2, + -linea_height / 2), + (-0.10 wd + linea_width / 2, + +linea_height / 2), + 0.6 linethickness); + draw_rounded_block ((+0.52 wd - linea_width / 2, + -linea_height / 2), + (+0.52 wd + linea_width / 2, + +linea_height / 2), + 0.6 linethickness); set_char_box (0, 0.62 wd# + linea_width#, linea_height# / 2, @@ -764,7 +682,6 @@ def punctum_char (expr verbose_name, internal_name, enddef; -% parameterized punctum def plica_char (expr verbose_name, internal_name, d_up, mag) = fet_beginchar (verbose_name, "s" & internal_name); @@ -777,9 +694,9 @@ def plica_char (expr verbose_name, internal_name, save a, beta, ht, wd; ht# = noteheight# * mag; - 2 beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 2 a# / a_w; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; black_notehead_width# := wd#; % direction @@ -875,7 +792,6 @@ def plica_char (expr verbose_name, internal_name, enddef; -% parameterized punctum def epiphonus_char (expr verbose_name, internal_name, left_stem, d_up, down_shift, mag) = fet_beginchar (verbose_name, "s" & internal_name); @@ -888,9 +804,9 @@ def epiphonus_char (expr verbose_name, internal_name, save a, beta, ht, wd; ht# = noteheight# * mag; - 2 beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 2 a# / a_w; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; black_notehead_width# := wd#; % direction @@ -957,8 +873,6 @@ def epiphonus_char (expr verbose_name, internal_name, .. {d_}z6 -- cycle; -% filldraw p; - labels (1, 2, 3, 4, 5, 6); save dirs; @@ -981,16 +895,21 @@ def epiphonus_char (expr verbose_name, internal_name, .. get_subpath (circle, dirs65, down, z6) -- cycle; - pickup pencircle scaled 0.6 linethickness; - save stem_bt; if left_stem: - z11 = (0.00 wd + 0.6 linethickness / 2, yoffs - 1.1 ht); - z12 = (0.00 wd + 0.6 linethickness / 2, yoffs); - draw_block ((0, yoffs - 1.1 ht - linethickness / 2), - (0.6 linethickness, yoffs)); + pickup pencircle scaled 0.6 linethickness; + + lft x11 = x1 - linethickness / 2; + bot y11 = yoffs - 1.1 ht - linethickness / 2; + x12 = x11; + y12 = y1; + + draw_rounded_block (bot lft z11, top rt z12, + 0.6 linethickness); stem_bt# = yoffs# - 1.1 ht#; + + labels (11, 12); else: stem_bt# = 0; fi; @@ -1002,10 +921,9 @@ def epiphonus_char (expr verbose_name, internal_name, enddef; -% parameterized punctum inclinatum def inclinatum_char (expr verbose_name, internal_name, small, stropha, auctum) = - fet_beginchar (verbose_name, "s" & internal_name) + fet_beginchar (verbose_name, "s" & internal_name); save ht, alpha; alpha := 35; @@ -1018,63 +936,137 @@ def inclinatum_char (expr verbose_name, internal_name, draw_diamond_head (ht#, 0, 0, alpha, false); - if stropha: - pickup pencircle xscaled 0.25 head_height - yscaled 0.55 head_height - rotated alpha; - - save za, off_angle; - pair za; - - off_angle := 15; - - za = (0, -0.25 head_height) - rotated -(alpha + off_angle) - shifted (0.48 head_width, -0.02 head_width); - - undrawdot za; + save off_angle; + + off_angle := alpha + 15; + + save stropha_ellipse, auctum_hook, circle; + path stropha_ellipse, auctum_hook, circle; + + circle := reverse fullcircle scaled linethickness; + + stropha_ellipse := fullcircle xscaled 0.25 head_height + yscaled 0.55 head_height + rotated alpha; + + z11 = z12 + + linethickness / 2 * dir (180 - off_angle) + - directionpoint dir (90 - off_angle) + of stropha_ellipse; + z12 = directionpoint -dir (90 - off_angle) of diamond_shape + + linethickness / 2 * dir (180 - off_angle); + z13 = (0, -0.5 head_height + linethickness); + + auctum_hook := z12{-dir (90 - off_angle)} + .. {dir (90 + alpha)}z13; + + labels (12); + + if (stropha and not auctum): + clearit; + + save t_in, t_out; + + t_in := xpart ((stropha_ellipse shifted z11) + intersectiontimes + get_subpath (diamond_shape, + left, up, + (0, 0))); + t_out := xpart ((stropha_ellipse shifted z11) + intersectiontimes + get_subpath (diamond_shape, + up, right, + (0, 0))); + + % the addition or subtraction of `1' is necessary + % so that we get the right starting point + fill get_subpath_i (diamond_shape, + dir (angle (z2 - z1) - 1), + dir (angle (z1 - z4) + 1), + (0, 0)) + -- get_subpath (stropha_ellipse, + direction t_in of stropha_ellipse, + direction t_out of stropha_ellipse, + z11) + -- cycle; + + labels (11); fi; - if auctum: - pickup pencircle scaled linethickness; - - save za, zb, zc; - pair za, zb, zc; - - za = (0, -0.5 head_height + linethickness); - zb = 0.6 (za + zc); - zc = za + (0.52 head_width, 0); + if (auctum and not stropha): + clearit; + + fill get_subpath (diamond_shape, + left, + -dir (90 - off_angle), + (0, 0)) + .. get_subpath (circle, + dir (90 + alpha), + -dir (90 + alpha), + z13) + .. get_subpath (circle, + dir (90 - off_angle), + right, + z12) + -- cycle; + + labels (13); + fi; - draw za{(0, -1) rotated alpha} - .. {right}zb{right} - .. {(0, 1) rotated -alpha}zc; + if (auctum and stropha): + clearit; + + save t; + + t := xpart ((stropha_ellipse shifted z11) + intersectiontimes + get_subpath (diamond_shape, up, right, + (0, 0))); + + % the addition or subtraction of `1' is necessary + % so that we get the right starting point + fill get_subpath_i (diamond_shape, + dir (angle (z2 - z1) - 1), + -dir (90 - off_angle), + (0, 0)) + .. get_subpath (circle, + dir (90 + alpha), + -dir (90 + alpha), + z13) + .. get_subpath (stropha_ellipse, + dir (90 - off_angle), + direction t of stropha_ellipse, + z11) + -- cycle; + + labels (11, 13); fi; fet_endchar; enddef; % punctum -punctum_char ("Ed. Vat. punctum", "vaticana.punctum", - false, false, false, false, - false, false, false, 1.0); +vat_punctum_char ("Ed. Vat. punctum", "vaticana.punctum", + false, false, false, false, + false, false, false, 1.0); % punctum cavum (for OpusTeX compatibility) -punctum_char ("Ed. Vat. punctum cavum", "vaticana.punctum.cavum", - false, true, false, false, - false, false, false, 1.0); +vat_punctum_char ("Ed. Vat. punctum cavum", "vaticana.punctum.cavum", + false, true, false, false, + false, false, false, 1.0); % linea punctum (for OpusTeX compatibility) -punctum_char ("Ed. Vat. linea punctum", "vaticana.linea.punctum", - true, false, false, false, - false, false, false, 1.0); +vat_punctum_char ("Ed. Vat. linea punctum", "vaticana.linea.punctum", + true, false, false, false, + false, false, false, 1.0); % linea punctum cavum (for OpusTeX compatibility) -punctum_char ("Ed. Vat. linea punctum cavum", "vaticana.linea.punctum.cavum", - true, true, false, false, - false, false, false, 1.0); +vat_punctum_char ("Ed. Vat. linea punctum cavum", "vaticana.linea.punctum.cavum", + true, true, false, false, + false, false, false, 1.0); % punctum inclinatum @@ -1083,21 +1075,21 @@ inclinatum_char ("Ed. Vat. inclinatum", "vaticana.inclinatum", % pes lower punctum -punctum_char ("Ed. Vat. pes lower punctum", "vaticana.lpes", - false, false, true, false, - true, false, false, 1.0); +vat_punctum_char ("Ed. Vat. pes lower punctum", "vaticana.lpes", + false, false, true, false, + true, false, false, 1.0); % pes lower punctum -punctum_char ("Ed. Vat. pes var lower punctum", "vaticana.vlpes", - false, false, true, false, - true, false, true, 1.0); +vat_punctum_char ("Ed. Vat. pes var lower punctum", "vaticana.vlpes", + false, false, true, false, + true, false, true, 1.0); % pes upper punctum -punctum_char ("Ed. Vat. pes upper punctum", "vaticana.upes", - false, false, true, false, - false, false, false, 1.0); +vat_punctum_char ("Ed. Vat. pes upper punctum", "vaticana.upes", + false, false, true, false, + false, false, false, 1.0); % pes upper punctum (shifted variation) @@ -1106,15 +1098,15 @@ punctum_char ("Ed. Vat. pes upper punctum", "vaticana.upes", % avoid collision with the lower punctum note of the pes when the upper % punctum sits directly on top of the lower punctum. % -punctum_char ("Ed. Vat. var pes upper punctum", "vaticana.vupes", - false, false, true, false, - false, true, false, 1.0); +vat_punctum_char ("Ed. Vat. var pes upper punctum", "vaticana.vupes", + false, false, true, false, + false, true, false, 1.0); % small punctum as used in epiphonus -punctum_char ("Ed. Vat. plica", "vaticana.plica", - false, false, false, false, - false, false, false, 0.6); +vat_punctum_char ("Ed. Vat. plica", "vaticana.plica", + false, false, false, false, + false, false, false, 0.6); % small punctum as used in epiphonus @@ -1138,9 +1130,9 @@ epiphonus_char ("Ed. Vat. var epiphonus", "vaticana.vepiphonus", % small punctum as used in cephalicus -punctum_char ("Ed. Vat. rev. plica", "vaticana.reverse.plica", - false, false, false, false, - true, false, false, 0.6); +vat_punctum_char ("Ed. Vat. rev. plica", "vaticana.reverse.plica", + false, false, false, false, + true, false, false, 0.6); % small punctum as used in cephalicus @@ -1159,31 +1151,56 @@ epiphonus_char ("Ed. Vat. cephalicus", "vaticana.cephalicus", % quilisma -fet_beginchar ("Ed. Vat. quilisma", "svaticana.quilisma") +fet_beginchar ("Ed. Vat. quilisma", "svaticana.quilisma"); save a_b, b_h, a_w; - a_b:=1.54; % b_h*a_b/a_w = wd/ht - b_h:=0.85; - a_w:=1.09; + 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#; - 2 beta# = ht# * b_h; - a# = beta#*a_b; - wd# = 2 a# / a_w; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; + set_char_box (0, 0.42 wd#, 0.28 ht#, 0.36 ht#); + black_notehead_width# := wd#; define_pixels (ht, wd); - pickup pencircle xscaled linethickness yscaled 0.44 ht; - lft x1 = 0.00 wd; bot y1 = -0.28 ht; - x2 = 0.11 wd; y2 = -0.14 ht; - x3 = 0.12 wd; y3 = +0.03 ht; - x4 = 0.25 wd; y4 = -0.09 ht; - x5 = 0.26 wd; y5 = +0.08 ht; - x6 = 0.40 wd; y6 = -0.04 ht; - rt x7 = 0.42 wd; top y7 = +0.36 ht; - draw z1 .. z2 -- z3 .. z4 -- z5 .. z6 -- z7; + + save ellipse, T; + path ellipse; + transform T; + + T := identity xscaled linethickness + yscaled 0.44 ht; + pickup pencircle transformed T; + ellipse := reverse fullcircle transformed T; + + z1 = (rt 0.00 wd, top -0.28 ht); + z2 = (0.11 wd, -0.14 ht); + z3 = (0.12 wd, +0.03 ht); + z4 = (0.25 wd, -0.09 ht); + z5 = (0.25 wd, +0.08 ht); + z6 = (lft 0.42 wd, -0.04 ht); + z7 = (lft 0.40 wd, bot +0.36 ht); + + fill get_subpath (ellipse, z1 - z2, z2 - z1, z1) + -- get_subpath (ellipse, z2 - z1, z1 - z2, z2) + -- cycle; + fill get_subpath (ellipse, z3 - z4, z4 - z3, z3) + -- get_subpath (ellipse, z4 - z3, z3 - z4, z4) + -- cycle; + fill get_subpath (ellipse, z5 - z6, z6 - z5, z5) + -- point 0 of get_subpath (ellipse, z6 - z5, z5 - z6, z6) + -- get_subpath (ellipse, z7 - z6, z6 - z7, z7) + -- get_subpath (ellipse, z6 - z7, z5 - z6, z6) + -- cycle; + + labels (1, 2, 3, 4, 5, 6, 7); fet_endchar; @@ -1193,15 +1210,15 @@ inclinatum_char ("Solesmes punctum inclinatum parvum", "solesmes.incl.parvum", % solesmes punctum auctum ascendens -punctum_char ("Solesmes punctum auctum ascendens", "solesmes.auct.asc", - false, false, false, true, - true, false, false, 1.0); +vat_punctum_char ("Solesmes punctum auctum ascendens", "solesmes.auct.asc", + false, false, false, true, + true, false, false, 1.0); % solesmes punctum auctum descendens -punctum_char ("Solesmes punctum auctum descendens", "solesmes.auct.desc", - false, false, false, true, - false, false, false, 1.0); +vat_punctum_char ("Solesmes punctum auctum descendens", "solesmes.auct.desc", + false, false, false, true, + false, false, false, 1.0); % solesmes punctum inclinatum auctum @@ -1220,32 +1237,73 @@ inclinatum_char ("Solesmes stropha aucta", "solesmes.stropha.aucta", % solesmes oriscus -fet_beginchar ("Solesmes oriscus", "ssolesmes.oriscus") +fet_beginchar ("Solesmes oriscus", "ssolesmes.oriscus"); save a_b, b_h, a_w; - a_b := 1.54; % b_h*a_b/a_w = wd/ht + 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#; - 2 beta# = ht# * b_h; - a# = beta# * a_b; - wd# = 2 a# / a_w; + 2 beta = ht# * b_h; + a = beta * a_b; + wd# = 2 a / a_w; black_notehead_width# := wd#; save convexity; + convexity# = +0.05 ht#; define_pixels (ht, wd, convexity); - pickup pencircle xscaled blot_diameter yscaled 0.50 ht; - lft x1 = 0.00 wd; y1 = -convexity; - x2 = 0.16 wd; y2 = +convexity; - x3 = 0.33 wd; y3 = -convexity; - rt x4 = 0.50 wd; y4 = +convexity; - draw z1 .. z2 .. z3 .. z4; + set_char_box (0.00 wd#, 0.50 wd#, 0.25 ht# + convexity#, 0.25 ht# + convexity#); + + z1 = (0.00 wd + blot_diameter / 2, -convexity); + z2 = (1/6 wd, +convexity); + z3 = (2/6 wd, -convexity); + z4 = (0.50 wd - blot_diameter / 2, +convexity); + + + save height; + + height = 2 ypart (directionpoint right of (z1 + .. z2 + .. z3 + .. z4)); + + save ellipse, T; + path ellipse; + transform T; + + T := identity xscaled blot_diameter + yscaled (h + d - height); + pickup pencircle transformed T; + ellipse := fullcircle transformed T; + + % Adjust vertical coordinates to touch bounding box. + y1 := top -d; + y4 := bot h; + + save d_; + pair d_; + + d_ := direction 0 of (z1 + .. z2 + .. z3 + .. z4); + + fill get_subpath (ellipse, -d_, d_, z1) + .. bot z2 + .. bot z3 + .. get_subpath (ellipse, d_, -d_, z4) + .. top z3 + .. top z2 + .. cycle; + + labels (1, 2, 3, 4); fet_endchar; @@ -1259,16 +1317,15 @@ fet_endchar; % % inclinatum -fet_beginchar ("Ed. Med. inclinatum", "smedicaea.inclinatum") +fet_beginchar ("Ed. Med. inclinatum", "smedicaea.inclinatum"); draw_diamond_head (1.2 staff_space#, 0, 0, 35, false); fet_endchar; -% parametrized punctum -def punctum_char (expr verbose_name, internal_name, - left_up_stem, left_down_stem) = +def med_punctum_char (expr verbose_name, internal_name, + left_up_stem, left_down_stem) = fet_beginchar (verbose_name, "s" & internal_name); - save a, beta, ht, wd; + save a, ht, wd; ht# = 2 staff_space#; wd# = ht#; @@ -1276,33 +1333,52 @@ def punctum_char (expr verbose_name, internal_name, define_pixels (ht, wd); - pickup pencircle xscaled blot_diameter - yscaled 0.50 ht; + save ellipse; + path ellipse; + + ellipse := fullcircle xscaled blot_diameter + yscaled 0.50 ht; z1 = (0.00 wd + blot_diameter / 2, 0); z2 = (0.4 wd - blot_diameter / 2, 0); - draw z1 - .. z2; + labels (1, 2); - pickup pencircle xscaled linethickness - yscaled blot_diameter; + pickup pencircle scaled linethickness; if left_down_stem: - z4 = (0.00 wd + linethickness / 2, blot_diameter / 2); - z5 = (0.00 wd + linethickness / 2, -1.25 ht); + z4 = (0.00 wd + linethickness / 2, -1.25 ht); + + fill get_subpath (ellipse, left, down, z1) + -- top lft z4{down} + .. z4{right} + .. top rt z4{up} + -- (rt x4, -.5 ht / 2) + -- get_subpath (ellipse, right, left, z2) + -- cycle; + + labels (4); - draw z4 - .. z5; set_char_box (0.0, 0.4 wd#, 1.25 ht#, 0.25 ht#); elseif left_up_stem: - z4 = (0.00 wd + linethickness / 2, blot_diameter / 2); - z5 = (0.00 wd + linethickness / 2, +1.25 ht); + z4 = (0.00 wd + linethickness / 2, +1.25 ht); + + fill get_subpath (ellipse, down, right, z1) + -- get_subpath (ellipse, right, left, z2) + -- (rt x4, .5 ht / 2) + -- bot rt z4{up} + .. z4{left} + .. bot lft z4{down} + -- cycle; + + labels (4); - draw z4 - .. z5; set_char_box (0.0, 0.4 wd#, 0.25 ht#, 1.25 ht#); else: + fill get_subpath (ellipse, left, right, z1) + -- get_subpath (ellipse, right, left, z2) + -- cycle; + set_char_box (0.0, 0.4 wd#, 0.25 ht#, 0.25 ht#); fi; @@ -1311,18 +1387,19 @@ enddef; % punctum -punctum_char ("Ed. Med. punctum", "medicaea.punctum", - false, false); +med_punctum_char ("Ed. Med. punctum", "medicaea.punctum", + false, false); % left up-stemmed punctum -punctum_char ("Ed. Med. reverse virga", "medicaea.rvirga", - true, false); +med_punctum_char ("Ed. Med. reverse virga", "medicaea.rvirga", + true, false); % virga (i.e. left down-stemmed punctum) -punctum_char ("Ed. Med. virga", "medicaea.virga", - false, true); +med_punctum_char ("Ed. Med. virga", "medicaea.virga", + false, true); + %%%%%%%% % @@ -1333,60 +1410,83 @@ punctum_char ("Ed. Med. virga", "medicaea.virga", % % -% punctum -% parametrized punctum -def punctum_char (expr verbose_name, internal_name, - down_stem) = +def huf_punctum_char (expr verbose_name, internal_name, + down_stem) = fet_beginchar (verbose_name, "s" & internal_name); save alpha; - alpha# = 55; - draw_diamond_head (staff_space#, 0, 0, alpha#, false); - if down_stem: - pickup pencircle xscaled blot_diameter - yscaled 0.7 staff_space - rotated -alpha#; - - save za, zb; - pair za, zb; + alpha = 55; - za = (head_width / 2, 0); - bot zb = (head_width / 2, -1.5 staff_space); + draw_diamond_head (staff_space#, 0, 0, alpha, false); - draw za - -- zb; + if down_stem: set_char_box (0, head_width#, 1.5 staff_space#, head_height# / 2); + + save ellipse; + path ellipse; + + ellipse := reverse fullcircle xscaled blot_diameter + yscaled 0.7 staff_space + rotated -alpha; + + z11 = (head_width / 2, 0); + z12 = find_tangent_shift (((0, -d) -- (w, -d)), ellipse, + (w / 2, -d), (w / 2, 0)); + + fill get_subpath (ellipse, up, down, z11) + -- get_subpath (ellipse, down, up, z12) + -- cycle; + + labels (11, 12); fi; fet_endchar; enddef; + % punctum -punctum_char ("Hufnagel punctum", "hufnagel.punctum", false) +huf_punctum_char ("Hufnagel punctum", "hufnagel.punctum", false) + % virga -punctum_char ("Hufnagel virga", "hufnagel.virga", true) +huf_punctum_char ("Hufnagel virga", "hufnagel.virga", true) + % pes lower punctum fet_beginchar ("Hufnagel pes lower punctum", "shufnagel.lpes") save width, height, alpha; - width# = 2*staff_space#; - height# = 0.7*staff_space#; - alpha# = 35; - set_char_box (0, width#, height#/2, height#/2); + width# = 2 * staff_space#; + height# = 0.7 * staff_space#; + alpha = 35; + + set_char_box (0, width#, height# / 2, height# / 2); - pickup pencircle scaled linethickness; define_pixels (width, height); - rt x3 = -lft x1 = width/2; - y2 = y3 = height/2; - y1 = y4 = -height/2; - tand (alpha#) * (y2 - y1) = x2 - x1 = x3 - x4; + save circle; + path circle; + + circle := reverse fullcircle scaled linethickness; + + pickup pencircle scaled linethickness; + + rt x3 = -lft x1 = width / 2; + y2 = y3 = height / 2; + y1 = y4 = -height / 2; + + tand (alpha) * (y2 - y1) = x2 - x1 = x3 - x4; - filldraw z1 -- z2 -- z3 -- z4 -- cycle; + fill get_subpath (circle, left, z2 - z1, z1) + -- get_subpath (circle, z2 - z1, right, z2) + -- get_subpath (circle, right, z4 - z3, z3) + -- get_subpath (circle, z4 - z3, left, z4) + -- cycle; currentpicture := currentpicture shifted (width/2, 0); + +% labels (1, 2, 3, 4); fet_endchar; -fet_endgroup ("noteheads") + +fet_endgroup ("noteheads");