1 % -%-Fundamental-%- -*-Metafont-*-
2 % parmesan-clefs.mf -- implement ancient clefs
4 % source file of LilyPond's pretty-but-neat music font
6 % (c) 2001--2005 Juergen Reuter <reuter@ipd.uka.de>
9 fet_begingroup ("clefs")
14 % Each clef is associated with a particular pitch: the treble clef
15 % with the 'g', the alto clef with the 'c', the bass clef with the
16 % 'f', etc. The shape of each clef character defines a vertical
17 % position that is assumed to represent this pitch. For the treble
18 % clef, it is the vertical position of the center of the spiral
19 % ending that represents the 'g' pitch. For the bass clef, it is
20 % the center between the two fat dots that define the vertical
21 % position of the 'f' pitch. For the alto clef, it is the vertical
22 % center of the clef that is aligned with the 'c' pitch. For each
23 % clef character, this center should be vertically aligned with the
24 % point (0, 0). The horizontal alignment of each clef character
25 % should be such that the vertical line through the point (0, 0)
26 % touches the left-most edge of the clef.
28 % TODO: document exact_center
30 % set_char_box() conventions:
32 % * breapth: Ignored (as far as I know). Should be set to 0.
34 % * width: Should match the head's width.
36 % * depth: Should match the bottom edge of the head. Affects vertical
39 % * height: Should match the top edge of the head. Affects vertical
52 def draw_vaticana_do_clef(expr exact_center, reduction) =
55 reduced_il# = staff_space# * reduction;
56 set_char_box(0 - xpart exact_center,
57 0.5reduced_il# + xpart exact_center,
58 0.8reduced_il# - ypart exact_center,
59 0.8reduced_il# + ypart exact_center);
61 define_pixels(reduced_il);
63 pickup pencircle xscaled 0.6linethickness yscaled 0.6 reduced_il;
65 save za, zb, zc, zd, ze, zf;
66 pair za, zb, zc, zd, ze, zf;
69 xoffs# = xpart exact_center;
70 yoffs# = ypart exact_center;
71 define_pixels(xoffs, yoffs);
73 rt za = (xoffs + 0.50reduced_il, yoffs - .45reduced_il);
74 zb = (xoffs + 0.25reduced_il, yoffs - .50reduced_il);
75 lft zc = (xoffs + 0.00reduced_il, yoffs - .25reduced_il);
76 lft zd = (xoffs + 0.00reduced_il, yoffs + .25reduced_il);
77 ze = (xoffs + 0.25reduced_il, yoffs + .50reduced_il);
78 rt zf = (xoffs + 0.50reduced_il, yoffs + .45reduced_il);
79 draw za .. zb .. zc -- % lower punctum
80 zd .. ze .. zf; % upper punctum
84 fet_beginchar("Ed. Vat. do clef", "vaticana.do")
86 draw_staff(-1,3, 0.0);
88 draw_vaticana_do_clef((0,0), 1.0);
90 fet_beginchar("Ed. Vat. do clef", "vaticana.do_change")
91 draw_vaticana_do_clef((0,0), 1.0); % no reduction
95 def draw_vaticana_fa_clef(expr exact_center, reduction) =
98 reduced_il# = staff_space# * reduction;
99 define_pixels(reduced_il);
101 save za, zb, zc, zd, ze;
102 pair za, zb, zc, zd, ze;
105 xoffs# = xpart exact_center;
106 yoffs# = ypart exact_center;
107 define_pixels(xoffs, yoffs);
110 pickup pencircle xscaled 0.6linethickness yscaled 0.5reduced_il;
111 lft za = (xoffs + 0.00reduced_il, xoffs + 0.00reduced_il);
112 zb = (xoffs + 0.25reduced_il, xoffs + 0.05reduced_il);
113 rt zc = (xoffs + 0.50reduced_il, xoffs - 0.05reduced_il);
117 pickup pencircle scaled 0.6linethickness;
118 xpart zc = xpart zd = xpart ze;
119 ypart zd = yoffs = bot ypart ze + 1.5reduced_il;
122 %right-handed puncta as in do clef
123 draw_vaticana_do_clef(exact_center + (0.55reduced_il#, 0), reduction);
125 set_char_box(0 - xpart exact_center,
126 1.05reduced_il# + xpart exact_center,
127 1.5reduced_il# - ypart exact_center,
128 0.8reduced_il# + ypart exact_center);
132 fet_beginchar("Ed. Vat. fa clef", "vaticana.fa")
134 draw_staff(-1,3, 0.0);
136 draw_vaticana_fa_clef((0,0), 1.0);
138 fet_beginchar("Ed. Vat. fa clef", "vaticana.fa_change")
139 draw_vaticana_fa_clef((0,0), 1.0); % no reduction
150 def draw_medicaea_do_clef(expr exact_center, reduction) =
151 save reduced_il, reduced_slt;
152 reduced_il# = staff_space# * reduction;
153 reduced_slt# = linethickness# * reduction;
154 define_pixels(reduced_il);
155 define_pixels(reduced_slt);
158 flag_height# = 0.5 reduced_il#;
159 define_pixels(flag_height);
162 xoffs# = xpart exact_center;
163 yoffs# = ypart exact_center;
164 define_pixels(xoffs, yoffs);
169 pickup pencircle xscaled reduced_slt yscaled flag_height;
170 xoffs = lft xpart za = rt xpart zb - reduced_il;
171 ypart za = yoffs + 0.5 (reduced_il - flag_height - staff_space);
172 ypart zb = ypart za - reduced_il + flag_height;
178 pickup pencircle xscaled reduced_slt yscaled flag_height;
179 xoffs = lft xpart za = rt xpart zb - reduced_il;
180 ypart za = yoffs + 0.5 (reduced_il - flag_height + staff_space);
181 ypart zb = ypart za - reduced_il + flag_height;
187 pickup pencircle scaled reduced_slt;
188 lft xpart za = lft xpart zb = xoffs;
189 yoffs = top ypart zb - 1.5 reduced_il = bot ypart za + 1.5 reduced_il;
192 set_char_box(0 - xpart exact_center,
193 1.0reduced_il# + xpart exact_center,
194 1.5reduced_il# - ypart exact_center,
195 1.5reduced_il# + ypart exact_center);
199 fet_beginchar("Ed. Med. do clef", "medicaea.do")
201 draw_staff(-1,3, 0.0);
203 draw_medicaea_do_clef((0,0), 1.0);
205 fet_beginchar("Ed. Med. do clef", "medicaea.do_change")
206 draw_medicaea_do_clef((0,0), .8);
210 def draw_medicaea_fa_clef(expr exact_center, reduction) =
211 % inspired by Regensburger Edition of Medicaea (1885/86), in:
212 % MGG, volume 2, col. 1327 ("Choralreform"), fig. 2.
214 save reduced_il, reduced_slt;
215 reduced_il# = staff_space# * reduction;
216 reduced_slt# = linethickness# * reduction;
217 define_pixels(reduced_il);
218 define_pixels(reduced_slt);
220 save za, zb, zc, zd, ze;
221 pair za, zb, zc, zd, ze;
224 xoffs# = xpart exact_center;
225 yoffs# = ypart exact_center;
226 define_pixels(xoffs, yoffs);
229 pickup pencircle scaled linethickness;
230 xpart za = xpart zb = xoffs + 0.4reduced_il;
231 ypart za = yoffs = bot ypart zb + 1.5reduced_il;
235 pickup pencircle xscaled reduced_slt yscaled reduced_il;
236 lft zc = (xoffs, yoffs);
237 zd = lft zc + (0.4reduced_il, 0);
240 %right-handed puncta as in do clef
241 draw_medicaea_do_clef(exact_center + (0.7reduced_il#, 0), reduction);
243 set_char_box(0 - xpart exact_center,
244 1.7reduced_il# + xpart exact_center,
245 1.5reduced_il# - ypart exact_center,
246 1.5reduced_il# + ypart exact_center);
250 fet_beginchar("Ed. Med. fa clef", "medicaea.fa")
252 draw_staff(-1,3, 0.0);
254 draw_medicaea_fa_clef((0,0), 1.0);
256 fet_beginchar("Ed. Med. fa clef", "medicaea.fa_change")
257 draw_medicaea_fa_clef((0,0), .8);
271 % width: interval from left end to right end
272 % height: interval from bottom of lower beam to top of upper beam
273 % exact_center: the coordinates of the vertical center point of the
276 def draw_brevis(expr exact_center, bwidth, bheight, blinethickness) =
278 save brevis_width, brevis_height, linethickness;
279 brevis_width# = bwidth; brevis_height# = bheight;
280 linethickness# = blinethickness;
282 save beam_width, beam_height, serif_size, serif_protrude, hole_height;
283 beam_width# = 1.4 linethickness#;
284 hole_height# = 3 linethickness#;
285 2 beam_height# + hole_height# = brevis_height#;
286 serif_size# = (hole_height# - linethickness#)/2;
287 serif_protrude# = 1.5 serif_size#;
290 xoffs# = xpart exact_center;
291 yoffs# = ypart exact_center;
292 define_pixels(xoffs, yoffs);
294 define_pixels(brevis_width, brevis_height, linethickness);
295 define_pixels(beam_width, beam_height, serif_size, serif_protrude);
297 penpos1(beam_width, 0);
298 penpos2(beam_width, 0);
299 penpos3(beam_height, 90);
300 penpos4(beam_height, 90);
301 penpos5(beam_width, 180);
302 z1l = (xoffs, yoffs);
303 z2l = z1l + (0, -linethickness);
304 z3r = z2r + serif_size*(1,-1);
306 x4l = x1l + brevis_width/2;
307 z5l = z3l + (-serif_size, -serif_protrude);
308 fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right}
309 -- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle;
311 addto currentpicture also currentpicture
312 yscaled -1 shifted (0, 2*yoffs);
314 pickup pencircle scaled linethickness;
315 top y6 = yoffs + brevis_height/2;
316 bot y7 = yoffs - brevis_height/2;
317 lft x6 = lft x7 = xoffs;
320 addto currentpicture also currentpicture
321 xscaled -1 shifted (2xoffs + brevis_width, 0);
325 def draw_neomensural_c_clef(expr exact_center, reduction) =
326 save reduced_il, reduced_slt, stem_width;
327 reduced_il# = staff_space# * reduction;
328 reduced_slt# = linethickness# * reduction;
329 stem_width# = 1.4 reduced_slt#;
330 define_pixels(reduced_il, reduced_slt, stem_width);
332 draw_brevis(exact_center + (3reduced_slt#, 0),
333 2reduced_il#, reduced_il#, reduced_slt#);
336 xoffs# = xpart exact_center;
337 yoffs# = ypart exact_center;
338 define_pixels(xoffs, yoffs);
340 pickup pencircle xscaled stem_width yscaled blot_diameter;
341 lft x8 = lft x9 = xoffs;
342 lft x10 = lft x11 = lft x8 + 3reduced_slt;
343 rt x12 = rt x13 = lft x10 + 2reduced_il;
344 rt x14 = rt x15 = rt x12 + 3reduced_slt;
345 top y9 - bot y8 = 4reduced_il;
346 top y9 + bot y8 = 2yoffs;
347 y12 = y14 = y10 = y8; y13 = y15 = y11 = y9;
353 set_char_box(0 - xpart exact_center,
354 2reduced_il# + 6reduced_slt# + xpart exact_center,
355 2reduced_il# - ypart exact_center,
356 2reduced_il# + ypart exact_center);
360 fet_beginchar("neo-mensural c clef", "neomensural.c")
362 draw_staff(-1,3, 0.0);
364 draw_neomensural_c_clef((0,0), 1.0);
366 fet_beginchar("neo-mensural c clef", "neomensural.c_change")
367 draw_neomensural_c_clef((0,0), .8);
371 def draw_petrucci_c_clef(expr exact_center, flare_align, reduction) =
372 % inspired by Josquin Desprez, "Stabat Mater", Libro tertio,
373 % 1519, printed by Petrucci, in: MGG, volume 7, Table 11.
374 % Also by Petrucci's Canti C, Venedig 1503. In: MGG, volume
377 save reduced_il, reduced_slt;
378 reduced_il# = staff_space# * reduction;
379 reduced_slt# = linethickness# * reduction;
380 define_pixels(reduced_il);
382 draw_brevis(exact_center + (0, 0.5staff_space#),
383 reduced_il#, reduced_il#, reduced_slt#);
385 addto currentpicture also currentpicture shifted (0, -staff_space);
387 save half_reduced_il, left_depth, left_height;
388 half_reduced_il# = staff_space# * sqrt(reduction);
389 left_height# = half_reduced_il# * min(3.2, 3.2 + 0.2 + flare_align);
390 left_depth# = half_reduced_il# * min(3.2, 3.2 + 0.2 - flare_align);
392 define_pixels(half_reduced_il);
393 define_pixels(left_depth, left_height);
396 xoffs# = xpart exact_center;
397 yoffs# = ypart exact_center;
398 define_pixels(xoffs, yoffs);
400 pickup pencircle xscaled 1.4 linethickness yscaled blot_diameter;
401 lft x8 = lft x9 = xoffs;
402 top y8 = yoffs + left_height;
403 bot y9 = yoffs - left_depth;
406 rt x10 = rt x11 = xoffs + brevis_width;
407 y10 = min(y8 - 0.2*half_reduced_il, yoffs + 2.2half_reduced_il);
408 y11 = max(y9 + 0.2*half_reduced_il, yoffs - 2.2half_reduced_il);
411 set_char_box(0 - xpart exact_center,
412 reduced_il# + xpart exact_center,
413 left_depth# - ypart exact_center,
414 left_height# + ypart exact_center);
418 fet_beginchar("petrucci c1 clef", "petrucci.c1")
420 draw_staff(-1,3, 0.0);
422 draw_petrucci_c_clef((0,0), +2, 1.0);
424 fet_beginchar("petrucci c1 clef", "petrucci.c1_change")
425 draw_petrucci_c_clef((0,0), +2, .8);
428 fet_beginchar("petrucci c2 clef", "petrucci.c2")
430 draw_staff(-1,3, 0.0);
432 draw_petrucci_c_clef((0,0), +1, 1.0);
434 fet_beginchar("petrucci c2 clef", "petrucci.c2_change")
435 draw_petrucci_c_clef((0,0), +1, .8);
438 fet_beginchar("petrucci c3 clef", "petrucci.c3")
440 draw_staff(-1,3, 0.0);
442 draw_petrucci_c_clef((0,0), 0, 1.0);
444 fet_beginchar("petrucci c3 clef", "petrucci.c3_change")
445 draw_petrucci_c_clef((0,0), 0, .8);
448 fet_beginchar("petrucci c4 clef", "petrucci.c4")
450 draw_staff(-1,3, 0.0);
452 draw_petrucci_c_clef((0,0), -1, 1.0);
454 fet_beginchar("petrucci c4 clef", "petrucci.c4_change")
455 draw_petrucci_c_clef((0,0), -1, .8);
458 fet_beginchar("petrucci c5 clef", "petrucci.c5")
460 draw_staff(-1,3, 0.0);
462 draw_petrucci_c_clef((0,0), -2, 1.0);
464 fet_beginchar("petrucci c5 clef", "petrucci.c5_change")
465 draw_petrucci_c_clef((0,0), -2, .8);
469 def draw_mensural_c_clef(expr exact_center, reduction) =
470 % inspired by Ockeghem, "Missa Prolationum", in: MGG, volume
474 reduced_il# = staff_space# * reduction;
475 draw_brevis(exact_center + (0, 0.5staff_space#),
476 2reduced_il#, 0.8staff_space#, 0.8linethickness#);
477 define_pixels(reduced_il);
478 addto currentpicture also currentpicture shifted (0, -staff_space);
479 addto currentpicture also currentpicture shifted (0, -staff_space);
481 save half_reduced_il;
482 half_reduced_il# = staff_space# * sqrt(reduction);
483 define_pixels(half_reduced_il);
486 xoffs# = xpart exact_center;
487 yoffs# = ypart exact_center;
488 define_pixels(xoffs, yoffs);
490 pickup pencircle xscaled 1.4 linethickness yscaled blot_diameter;
491 lft x8 = lft x9 = xoffs;
492 top y8 = yoffs + 2.2 half_reduced_il;
493 bot y9 = yoffs - 2.2 half_reduced_il - staff_space;
496 rt x10 = rt x11 = xoffs + brevis_width;
497 y10 = yoffs + 1.4half_reduced_il;
498 y11 = yoffs - 1.4half_reduced_il - staff_space;
501 set_char_box(0 - xpart exact_center,
502 2reduced_il# + xpart exact_center,
503 2.2 half_reduced_il# + staff_space# - 2 ypart exact_center,
504 2.2 half_reduced_il# + 2 ypart exact_center);
508 fet_beginchar("mensural c clef", "mensural.c")
510 draw_staff(-1,3, 0.0);
512 draw_mensural_c_clef((0,0), 1.0);
514 fet_beginchar("mensural c clef", "mensural.c_change")
515 draw_mensural_c_clef((0,0), .8);
518 def draw_diamond(expr exact_center, reduction) =
519 save stem_width, reduced_nht, holeheight, beamheight;
520 save rh_height, rh_width;
522 stem_width# = 1.4 reduced_slt#;
523 reduced_nht# = noteheight# * reduction;
524 holeheight# = 3 reduced_slt#;
525 beamheight# = 0.4(reduced_nht# - holeheight#);
527 rh_height# = 1.2 staff_space# * reduction;
528 rh_width# / rh_height# = tand(30);
530 define_pixels(beamheight);
531 define_pixels(stem_width);
532 define_pixels(rh_height);
533 define_pixels(rh_width);
536 xoffs# = xpart exact_center;
537 yoffs# = ypart exact_center;
538 define_pixels(xoffs, yoffs);
546 (xoffs - rh_width/2, yoffs) --
547 (xoffs, yoffs + rh_height/2) --
548 (xoffs + rh_width/2, yoffs) --
549 (xoffs, yoffs - rh_height/2) --
553 def draw_petrucci_f_clef(expr exact_center, reduction) =
554 % inspired by L'homme arme super voces musicales in Misse
555 % Josquin, 1502, Petrucci, in: MGG, volume 7, col. 200; also
556 % inspired by Gaspar van Weerbeke, "Virgo Maria" (1502), in:
557 % MGG, volume 9, col. 653 ("Motette"), fig. 3.; also by Andr'e
558 % Campra, "Entr'ee des s'er'enades" (1710), in: MGG, volume 2,
559 % col. 1649 ("Contredanse"), fig. 2.
562 save interline, reduced_il, reduced_slt;
563 interline# = staff_space#;
564 reduced_il# = staff_space# * reduction;
565 reduced_slt# = linethickness# * reduction;
567 draw_brevis(exact_center, reduced_il#, reduced_il#, reduced_slt#);
568 draw_diamond(exact_center + (1.6interline#*reduction, interline#/2),
570 draw_diamond(exact_center + (1.6interline#*reduction, -interline#/2),
573 define_pixels(interline);
574 define_pixels(reduced_il);
575 define_pixels(reduced_slt);
578 stem_width# = 1.4 reduced_slt#;
579 define_pixels(stem_width);
582 xoffs# = xpart exact_center;
583 yoffs# = ypart exact_center;
585 define_pixels(xoffs, yoffs);
588 pickup pencircle xscaled stem_width yscaled blot_diameter;
589 rt z8 = (xoffs + reduced_il, yoffs);
590 z9 = z8 + (0, -4reduced_il);
593 % upper diamond's stem
594 pickup pencircle xscaled stem_width yscaled blot_diameter;
595 z10 = (xoffs + 1.6interline*reduction + stem_width/2,
596 yoffs + interline*reduction);
597 top z11 = z10 + (0, 1.5interline*reduction);
600 % lower diamond's stem
601 pickup pencircle xscaled stem_width yscaled blot_diameter;
602 z12 = (xoffs + 1.6interline*reduction - stem_width/2,
603 yoffs - interline*reduction);
604 bot z13 = z12 + (0, -3.5interline*reduction);
607 save reduced_il, rh_height, rh_width;
608 reduced_il# = staff_space# * reduction;
609 rh_height# = 1.2reduced_il#;
610 rh_width# / rh_height# = tand(30);
611 set_char_box(0 - xpart exact_center,
612 1.6interline#*reduction + 0.5rh_width# + xpart exact_center,
613 4.5*interline#*reduction - ypart exact_center,
614 2.5*interline#*reduction + ypart exact_center);
618 fet_beginchar("petrucci f clef", "petrucci.f")
620 draw_staff(-1,3, 0.0);
622 draw_petrucci_f_clef((0,0), 1.0);
624 fet_beginchar("petrucci f clef", "petrucci.f_change")
625 draw_petrucci_f_clef((0,0), .8);
629 def draw_mensural_f_clef(expr exact_center, reduction) =
631 % inspired by Philippe le Duc, "Dite Signori" (1590), in: MGG,
632 % volume 3, col. 848 ("Duc"); also by John Dowland, "The First
633 % Booke of Songes" (1597), in: MGG, volume 3, col. 721
634 % ("Dowland"), fig. 3.
636 save width, reduced_slt, stem_width, dot_diameter;
638 width# = 1.2staff_space# * reduction;
639 reduced_slt# = linethickness# * reduction;
640 stem_width# = 1.4 reduced_slt#;
641 dot_diameter# = 0.1 reduction * staff_space#;
642 define_pixels(width, stem_width, staff_space, dot_diameter);
645 xoffs# = xpart exact_center;
646 yoffs# = ypart exact_center;
647 define_pixels(xoffs, yoffs);
656 draw halfcircle scaled width rotated -90
657 shifted (z5-(xoffs, yoffs));
661 rt x2 = xoffs + width;
662 top y1 = yoffs + 0.5width;
663 z2 - z1 = (dot_diameter, -dot_diameter);
668 top y1 - bot y4 = width;
669 z4 - z3 = (dot_diameter, -dot_diameter);
672 set_char_box(0 - xpart exact_center,
673 width# + xpart exact_center,
674 0.5width# - ypart exact_center,
675 0.5width# + ypart exact_center);
678 fet_beginchar("mensural f clef", "mensural.f")
680 draw_staff(-1,3, 0.0);
682 draw_mensural_f_clef((0,0), 1.0);
684 fet_beginchar("mensural f clef", "mensural.f_change")
685 draw_mensural_f_clef((0,0), .8);
689 def draw_petrucci_g_clef(expr exact_center, reduction) =
690 % inspired by Josquin Desprez, "Stabat Mater", Libro tertio,
691 % 1519, printed by Petrucci, in: MGG, volume 7, Table 11.
693 save reduced_il, reduced_slt;
695 reduced_il# = staff_space# * reduction;
696 reduced_slt# = linethickness# * reduction;
697 define_pixels(reduced_il, reduced_slt);
699 set_char_box(0 - xpart exact_center,
700 1.25 reduced_il# + xpart exact_center,
701 0.65 reduced_il# - ypart exact_center,
702 3.80 reduced_il# + ypart exact_center);
704 save za, zb, zc, zd, ze, zf, zg, zh, zi, zj;
705 pair za, zb, zc, zd, ze, zf, zg, zh, zi, zj;
708 xoffs# = xpart exact_center;
709 yoffs# = ypart exact_center;
710 define_pixels(xoffs, yoffs);
713 xscaled 0.50 reduced_slt
714 yscaled 0.22 reduced_il
717 lft za = (xoffs + 0.80 reduced_il, yoffs + 0.00 reduced_il);
718 lft zb = (xoffs + 1.00 reduced_il, yoffs + 1.20 reduced_il);
719 lft zc = (xoffs + 0.70 reduced_il, yoffs + 2.00 reduced_il);
720 lft zd = (xoffs + 0.30 reduced_il, yoffs + 3.00 reduced_il);
721 lft ze = (xoffs + 0.80 reduced_il, yoffs + 3.70 reduced_il);
722 lft zf = (xoffs + 1.00 reduced_il, yoffs + 3.00 reduced_il);
723 lft zg = (xoffs + 0.60 reduced_il, yoffs + 2.00 reduced_il);
724 lft zh = (xoffs + 0.30 reduced_il, yoffs + 1.70 reduced_il);
725 lft zi = (xoffs + 0.00 reduced_il, yoffs + 0.75 reduced_il);
726 lft zj = (xoffs + 0.20 reduced_il, yoffs + 0.60 reduced_il);
728 draw za{-1,2} .. zb .. zc .. zd .. ze .. zf .. zg .. zh .. zi .. zj;
730 save za, zb, zc, zd, ze, zf;
731 pair za, zb, zc, zd, ze, zf;
734 xscaled 0.75 reduced_slt
735 yscaled 0.33 reduced_il
738 lft za = (xoffs + 1.05 reduced_il, yoffs + 0.45 reduced_il);
739 lft zb = (xoffs + 0.55 reduced_il, yoffs + 0.45 reduced_il);
740 lft zc = (xoffs + 0.55 reduced_il, yoffs - 0.45 reduced_il);
741 lft zd = (xoffs + 1.05 reduced_il, yoffs - 0.45 reduced_il);
742 lft ze = (xoffs + 1.10 reduced_il, yoffs + 0.00 reduced_il);
743 lft zf = (xoffs + 0.80 reduced_il, yoffs + 0.00 reduced_il);
745 draw za .. zb .. zc .. zd .. {up}ze -- zf;
749 fet_beginchar("petrucci g clef", "petrucci.g")
751 draw_staff(-1,3, 0.0);
753 draw_petrucci_g_clef((0,0), 1.0);
755 fet_beginchar("petrucci g clef", "petrucci.g_change")
756 draw_petrucci_g_clef((0,0), .8);
760 def draw_mensural_g_clef(expr exact_center, reduction) =
761 % TODO: Rewrite me. The former mensural g clef looked ugly, and the
762 % code was removed when it broke for small font sizes after some
763 % global changes in the font. Currently, the character is mapped to
764 % a copy of the petrucci g clef (which, after all, *is* a mensural g
765 % clef, but not the one that we have in mind here). -- jr
767 % Possible sources of inspiration for this clef include: Francisco
768 % Guerrero, "Lib. 1. Missarum" (1566), in: MGG, volume 3, col. 858
769 % ("Ducis"); Stefano Fabri, "Quam speciosa veteranis" (1611), in:
770 % MGG, volume 3, col. 1698 ("Fabri"); Philippus Dulichius,
771 % "Fasciculus novus ..." (1598), in: MGG, volume 3, col. 919
772 % ("Dulichius"), fig. 1; Noe Faignient, "Ic sal de Heer myn God
773 % gebenedye" (1568), in: MGG, volume 3, col. 1735 ("Faignient").
777 % FIXME: This clef is preliminarily mapped to the petrucci g clef
778 % until the code for the mensural g clef will be rewritten.
780 fet_beginchar("mensural g clef", "mensural.g")
782 draw_staff(-1,3, 0.0);
784 draw_petrucci_g_clef((0,0), 1.0);
786 fet_beginchar("mensural g clef", "mensural.g_change")
787 draw_petrucci_g_clef((0,0), .8);
800 def draw_hufnagel_do_clef(expr exact_center, reduction) =
802 % inspired by Graduale of Friedrich Zollner (1442), in: MGG,
803 % volume 9, col. 1413 ("Neustift"), fig. 1.
807 reduced_il# = staff_space# * reduction;
809 define_pixels(reduced_il);
812 xscaled (0.60reduced_il)
813 yscaled (0.10reduced_il)
815 save za, zb, zc, zd, ze, zf;
816 pair za, zb, zc, zd, ze, zf;
819 xoffs# = xpart exact_center;
820 yoffs# = ypart exact_center;
821 define_pixels(xoffs, yoffs);
823 za = (xoffs + 0.90reduced_il, yoffs + .45reduced_il);
824 zb = (xoffs + 0.80reduced_il, yoffs + .45reduced_il);
825 zc = (xoffs + 0.50reduced_il, yoffs + .60reduced_il);
826 zd = (xoffs + 0.20reduced_il, yoffs + .45reduced_il);
827 ze = (xoffs + 0.20reduced_il, yoffs - .45reduced_il);
828 zf = (xoffs + 0.40reduced_il, yoffs - .55reduced_il);
829 draw za .. zb .. zc -- zd -- ze -- zf;
831 set_char_box(0 - xpart exact_center,
832 1.10reduced_il# + xpart exact_center,
833 0.70reduced_il# - ypart exact_center,
834 0.75reduced_il# + ypart exact_center);
838 fet_beginchar("Hufnagel do clef", "hufnagel.do")
840 draw_staff(-1,3, 0.0);
842 draw_hufnagel_do_clef((0,0), 1.0);
844 fet_beginchar("Hufnagel do clef", "hufnagel.do_change")
845 draw_hufnagel_do_clef((0,0), .8);
849 def draw_hufnagel_fa_clef(expr exact_center, reduction) =
851 % inspired by Bamberger Manuscript (15th century), in:
852 % MGG, volume 2, table 59.
856 reduced_il# = staff_space# * reduction;
858 define_pixels(reduced_il);
861 xscaled (0.60reduced_il)
862 yscaled (0.10reduced_il)
864 save za, zb, zc, zd, ze, zf;
865 pair za, zb, zc, zd, ze, zf;
868 xoffs# = xpart exact_center;
869 yoffs# = ypart exact_center;
870 define_pixels(xoffs, yoffs);
872 za = (xoffs + 0.90reduced_il, yoffs + 0.70reduced_il);
873 zb = (xoffs + 0.80reduced_il, yoffs + 0.70reduced_il);
874 zc = (xoffs + 0.50reduced_il, yoffs + 0.85reduced_il);
875 zd = (xoffs + 0.20reduced_il, yoffs + 0.70reduced_il);
876 ze = (xoffs + 0.20reduced_il, yoffs - 1.10reduced_il);
877 draw za .. zb .. zc -- zd -- ze;
882 zg = (xoffs + 0.90reduced_il, yoffs - 0.05reduced_il);
883 zh = (xoffs + 0.80reduced_il, yoffs - 0.05reduced_il);
884 zi = (xoffs + 0.50reduced_il, yoffs + 0.10reduced_il);
885 zj = (xoffs + 0.20reduced_il, yoffs - 0.05reduced_il);
886 draw zg .. zh .. zi -- zj;
888 set_char_box(0 - xpart exact_center,
889 1.20reduced_il# + xpart exact_center,
890 1.15reduced_il# - ypart exact_center,
891 1.00reduced_il# + ypart exact_center);
895 fet_beginchar("Hufnagel fa clef", "hufnagel.fa")
897 draw_staff(-1,3, 0.0);
899 draw_hufnagel_fa_clef((0,0), 1.0);
901 fet_beginchar("Hufnagel fa clef", "hufnagel.fa_change")
902 draw_hufnagel_fa_clef((0,0), .8);
906 def draw_hufnagel_do_fa_clef(expr exact_center, reduction) =
907 draw_hufnagel_do_clef(exact_center, reduction);
908 draw_hufnagel_fa_clef(exact_center + (0, -2staff_space#), reduction);
909 set_char_box(0 - xpart exact_center,
910 1.20reduced_il# + xpart exact_center,
911 1.15reduced_il# + 2staff_space# - ypart exact_center,
912 0.75reduced_il# + ypart exact_center);
916 fet_beginchar("Hufnagel do/fa clef", "hufnagel.do.fa")
918 draw_staff(-1,3, 0.0);
920 draw_hufnagel_do_fa_clef((0,0), 1.0);
922 fet_beginchar("Hufnagel do/fa clef", "hufnagel.do.fa_change")
923 draw_hufnagel_do_fa_clef((0,0), .8);
927 fet_endgroup ("clefs")