1 % feta-klef.mf -- implement Clefs -*-Fundamental-*-
3 % part of LilyPond's pretty-but-neat music font
5 % source file of the Feta (not the Font-En-Tja) music font
7 % (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>,
8 % Jan Nieuwenhuizen <janneke@gnu.org>
11 fet_begingroup("clefs");
14 % [Ross] says that clefs take 1 staff_space space on the left and right
16 def set_horizontal_spacing =
17 save left_space ,right_space;
23 % [Wanske] says the bulbs should be positioned about 1/4 right of the
25 def draw_c_clef (expr reduction) =
26 save hair, norm, reduced_il, right_edge;
27 reduced_il#=staff_space#*reduction;
28 norm#:=2/3reduced_il#;
31 set_horizontal_spacing;
32 right_edge# = 15/4norm#+2hair#;
34 set_char_box (left_space#, right_edge# + right_space#,
35 2 reduced_il#, 2 reduced_il#);
36 define_pixels (hair,norm,reduced_il, right_edge);
38 draw_block ((0,-d), (3/4norm+1/2hair,h));
39 draw_block ((3/4norm+2hair,-d),
45 z1l=(xoff+norm+hair,h);
46 penpos2(norm-3/2hair,180);
49 z3=(((right_edge -xoff)/2)+xoff,2hair);
52 z4=(xoff+1/2norm+1/2hair,reduced_il-hair);
57 penpos6(norm-hair,90);
65 p = z5l..z4l{up}..z4r{down}..z3r{right}..tension t..z2r{up}
66 ..tension t..z1r{left}..z1l{right}..tension t..z2l{down}
67 ..z3l{left}..z6r..z5r{down};
68 pickup pencircle scaled 1pt#;
69 filldraw p..(reverse p yscaled -1)..cycle;
70 penlabels (1,2,3,4,5,6);
72 % ugh, should be bulb, not flare?
73 draw_flare(z1l,180,90,hair,norm-1/2hair);
74 draw_flare(z7r,180,-90,hair,norm-1/2hair);
77 fet_beginchar ("C clef", "C", "altoclef")
79 draw_staff (-2,2, 0.0);
84 fet_beginchar ("C clef", "C_change", "caltoclef")
86 draw_staff (-2,2, 0.0);
92 % Inspired by Baerenreiter and Breitkopf
95 % FIXME: right vertical tangent seems to be lower than the F-line
96 % FIXME: bulb curve smoothly into "long curve" on the inside
99 % [Wanske] says that the extreme x point should be exactly between
100 % the dots, but her picture shows that the extreme is ~ 0.2 ss lower
102 def draw_bass_clef(expr exact_center, reduction) =
103 save reduced_il, left_tilt, left_thick, ball_to_right;
104 reduced_il# = staff_space# * reduction;
106 set_horizontal_spacing;
107 ball_to_right# = 2.1 reduced_il#;
108 set_char_box(left_space# +
109 - xpart exact_center,
111 xpart exact_center + ball_to_right# + 7/12 reduced_il#,
112 - ypart exact_center + 2.5 reduced_il#,
113 ypart exact_center +reduced_il#);
115 define_pixels(reduced_il, ball_to_right);
117 left_thick = .25 reduced_il;
119 x1r - x1l = left_thick;
120 z1l = (hround_pixels(xpart exact_center),
121 vround_pixels(ypart exact_center));
125 x3l - x1l = ball_to_right;
127 x3l - x3r = .48 reduced_il;
128 y3l = -0.05 staff_space;
129 x4 = x1l - stafflinethickness;
130 y4 = -2.2 reduced_il;
131 z5 = (x3l + 1/3 reduced_il, .5 reduced_il);
133 penpos1(whatever, left_tilt);
134 penpos2(1.2 stafflinethickness, -90);
135 penpos3(whatever, 185);
136 penpos4(stafflinethickness, 135);
138 draw_bulb(1, z1r, z1l, .45 reduced_il, 1.0);
141 fill z1r{up} .. z2r{right} .. tension 1.0 .. z3r{down} .. {curl 0}
142 simple_serif(z4r, z4l, 90) {curl 0}
143 .. z3l{up} .. tension 0.9 .. z2l{left}
144 .. z1l{dir (-90 + left_tilt)} -- cycle;
149 2 dot_diam = reduction* (staff_space - stafflinethickness);
150 pickup pencircle scaled dot_diam;
157 fet_beginchar("F clef ", "F", "bassclef")
159 draw_staff(-3,1, 0.0);
161 draw_bass_clef((.5 staff_space#, 0), 1.0);
163 fet_beginchar("F clef (reduced)", "F_change", "cbassclef")
164 draw_bass_clef((.4 staff_space#, 0),0.8);
170 % Inspired by Baerenreiter
172 % FIXME bulb should curve (see bass clef)
173 % FIXME start (inside) should be little thinner
177 % Beste lezers, kijk,
179 % Een bolletje hebben we bij toeval allemaal wel eens getekend, maar begint u
180 % toch eenvoudig. Eerst een eenvoudig kruis of herstellingsteken
181 % en via de dubbelslag naar een voorzichtig vlaggetje, en heb geduld!
182 % Ikzelf heb bijvoorbeeld over mijn eerste gave G-sleutel
183 % 35 kilobyte metafont, 12 patchlevels, 0 vriendinnen en 45 dagen gedaan
185 % -- vrij naar Van Kooten & De Bie
188 def draw_gclef (expr exact_center, reduction)=
189 save reduced_il, downstroke_dir, downstroke_angle, hair, center;
190 save breapth_factor, inner_thick_end, thinness, thickness, thinnib;
191 save inner_start_angle, thinness, thinpen;
192 reduced_il# = staff_space# * reduction;
193 define_pixels(reduced_il);
194 pair downstroke_dir, center;
196 center := (hround_pixels(xpart exact_center),
197 vround_pixels(ypart exact_center));
199 hair = .3 stafflinethickness;
200 thinness = 1.3 stafflinethickness;
201 downstroke_dir = (14, -75);
202 breapth_factor = 11/7;
203 inner_thick_end = 45;
204 inner_start_angle = downstroke_angle - 43;
205 thickness = .4 reduced_il - hair;
207 thinnib = thinness - hair;
209 set_horizontal_spacing;
213 -xpart exact_center + 1.0 * breapth_factor* reduced_il#,
215 xpart exact_center + .66 breapth_factor* reduced_il#,
216 -ypart exact_center + 3 * reduced_il#,
217 ypart exact_center + 5 * reduced_il#);
219 pickup pencircle scaled hair;
220 downstroke_angle = angle downstroke_dir;
222 z1 = center + whatever * dir (inner_start_angle);
223 x1 = xpart center -.28 reduced_il;
225 top z2r = center + (0,reduced_il + stafflinethickness/2);
227 x4 = xpart center - .1 reduced_il;
228 bot y4r = -(reduced_il + .5 stafflinethickness);
230 z3 = (z4 - center) rotated inner_thick_end + center;
232 z5r = (- breapth_factor, .37)* reduced_il + center;
233 penpos5(thickness, 135);
235 z6 = center + whatever * downstroke_dir;
236 y6 = ypart center + 2 reduced_il;
238 z7l - z6 = whatever *(z5- z6) ;
239 y7l = 3.5 reduced_il;
240 z8r = .4 [z9r, z7r] + 1.5 stafflinethickness * dir 52;
243 top y9l = 5 reduced_il;
246 y11 = -11/7 reduced_il;
248 y12 = ypart center - 18.5/7 reduced_il;
249 x12 = x11 - 5 /7 reduced_il;
251 z13 = z12 + .6 reduced_il*(-1,1);
253 (z10r - z10l) dotprod (unitvector downstroke_dir rotated 90) =
256 center - z10= whatever * downstroke_dir;
257 center - z11 = whatever * downstroke_dir;
258 center - z14 = .8 (center - z11);
259 penpos1(thinnib, inner_start_angle);
260 penpos2(thickness, 90);
261 penpos3(thinnib, -90 + inner_thick_end);
262 penpos4(thinnib, -90);
265 penpos7(thickness, 135);
266 penpos8(1.5 thinnib, - 70 + angle downstroke_dir);
267 penpos9(1.4 thickness, -80); % ugh
268 penpos10(whatever, downstroke_angle + 10);
269 penpos11(thinnib, downstroke_angle + 90);
270 penpos14(thinnib, downstroke_angle + 90);
271 penpos12(thinnib, -90);
272 penpos13(3 thinnib, 180);
274 filldraw z2l{right} .. z3l.. z4l{left} .. z5l{up} .. z7l{up}
278 {downstroke_dir}z10l --- z11l -- z11r --- z10r{- downstroke_dir}
280 .. z9r & z9r{dir (downstroke_angle+ 40)} % ugh
282 .. z7r{down} .. z5r{down} .. z4r{right}
283 .. z3r .. z2r{left} ..
286 .. tension 0.85 ..cycle;
288 filldraw simple_serif(z1r, z1l, 90) -- cycle;
290 filldraw z12r{left} .. z13r{up} -- z13l{down} .. z12l{right} .. cycle;
292 draw_bulb(-1, z13l, lft z13r, 6/14 reduced_il, 1.0);
294 pickup pencircle scaled (thinpen);
295 draw z10 --- z14 .. z11 .. tension 0.85 .. z12{left};
297 penlabels(range 1 thru 15);
301 fet_beginchar("G clef", "G", "trebleclef")
303 draw_staff(-1,3, 0.0);
305 draw_gclef((1.7 staff_space#,0), 1.0);
307 fet_beginchar("G clef", "G_change", "ctrebleclef")
308 draw_gclef((1.3 staff_space#,0), .8);
319 def draw_vaticana_do_clef(expr exact_center, reduction) =
322 reduced_il# = staff_space# * reduction;
324 set_char_box(0.4reduced_il#, 0.4reduced_il#, 0, reduced_il#);
326 define_pixels(reduced_il);
328 pickup pencircle xscaled stafflinethickness yscaled 0.6reduced_il;
330 save za, zb, zc, zd, ze, zf;
331 pair za, zb, zc, zd, ze, zf;
333 za = exact_center + (-0.0reduced_il, -.45reduced_il);
334 zb = exact_center + (-0.2reduced_il, -.50reduced_il);
335 zc = exact_center + (-0.4reduced_il, -.25reduced_il);
336 zd = exact_center + (-0.4reduced_il, +.25reduced_il);
337 ze = exact_center + (-0.2reduced_il, +.50reduced_il);
338 zf = exact_center + (-0.0reduced_il, +.45reduced_il);
339 draw za .. zb .. zc -- % lower punctum
340 zd .. ze .. zf; % upper punctum
344 fet_beginchar("Ed. Vat. do clef", "vaticana_do", "vatdoclef")
346 draw_staff(-1,3, 0.0);
348 draw_vaticana_do_clef((0,0), 1.0);
350 fet_beginchar("Ed. Vat. do clef", "vaticana_do_change", "vatcdoclef")
351 draw_vaticana_do_clef((0,0), 1.0); % no reduction
355 def draw_vaticana_fa_clef(expr exact_center, reduction) =
358 reduced_il# = staff_space# * reduction;
359 define_pixels(reduced_il);
361 save za, zb, zc, zd, ze;
362 pair za, zb, zc, zd, ze;
365 pickup pencircle scaled stafflinethickness;
366 xpart za = xpart zb =
367 xpart exact_center + 0.4reduced_il;
368 ypart za = ypart exact_center = ypart zb + 1.5reduced_il;
372 pickup pencircle xscaled stafflinethickness yscaled 0.5reduced_il;
374 (+0.4reduced_il, -0.05reduced_il);
376 (+0.2reduced_il, +0.05reduced_il);
378 (+0.0reduced_il, +0.00reduced_il);
381 %right-handed puncta as in do clef
382 draw_vaticana_do_clef(
384 (+0.8reduced_il + 1.25stafflinethickness, 0),
387 set_char_box(0.5reduced_il#, 1.5reduced_il#, 0, reduced_il#);
391 fet_beginchar("Ed. Vat. fa clef", "vaticana_fa", "vatfaclef")
393 draw_staff(-1,3, 0.0);
395 draw_vaticana_fa_clef((0,0), 1.0);
397 fet_beginchar("Ed. Vat. fa clef", "vaticana_fa_change", "vatcfaclef")
398 draw_vaticana_fa_clef((0,0), 1.0); % no reduction
409 def draw_medicaea_do_clef(expr exact_center, reduction) =
410 save reduced_il, reduced_slt;
411 reduced_il# = staff_space# * reduction;
412 reduced_slt# = stafflinethickness# * reduction;
413 define_pixels(reduced_il);
414 define_pixels(reduced_slt);
417 flag_height# = 0.5 reduced_il#;
418 define_pixels(flag_height);
423 pickup pencircle xscaled reduced_slt yscaled flag_height;
425 = xpart za + 0.5 reduced_il
426 = xpart zb - 0.5 reduced_il;
427 ypart za = ypart exact_center - 0.5 flag_height
428 - 0.5 (staff_space - reduced_il);
429 ypart zb = ypart za - reduced_il + flag_height;
435 pickup pencircle xscaled reduced_slt yscaled flag_height;
437 = xpart za + 0.5 reduced_il
438 = xpart zb - 0.5 reduced_il;
439 ypart za = ypart exact_center - 0.5 flag_height
440 - 0.5 (staff_space - reduced_il)
442 ypart zb = ypart za - reduced_il + flag_height;
448 pickup pencircle scaled reduced_slt;
449 xpart za = xpart zb = xpart exact_center - 0.5 reduced_il;
451 = ypart za + 1.5 reduced_il
452 = ypart zb - 1.5 reduced_il;
455 set_char_box(0.5reduced_il#, 1.5reduced_il#,
456 1.5reduced_il#, 1.5reduced_il#);
460 fet_beginchar("Ed. Med. do clef", "medicaea_do", "meddoclef")
462 draw_staff(-1,3, 0.0);
464 draw_medicaea_do_clef((0,0), 1.0);
466 fet_beginchar("Ed. Med. do clef", "medicaea_do_change", "cmeddoclef")
467 draw_medicaea_do_clef((0,0), .8);
471 def draw_medicaea_fa_clef(expr exact_center, reduction) =
472 % inspired by Regensburger Edition of Medicaea (1885/86), in:
473 % MGG, volume 2, col. 1327 ("Choralreform"), fig. 2.
475 save reduced_il, reduced_slt;
476 reduced_il# = staff_space# * reduction;
477 reduced_slt# = stafflinethickness# * reduction;
478 define_pixels(reduced_il);
479 define_pixels(reduced_slt);
481 save za, zb, zc, zd, ze;
482 pair za, zb, zc, zd, ze;
485 pickup pencircle scaled stafflinethickness;
486 xpart za = xpart zb =
487 xpart exact_center + 0.4reduced_il;
488 ypart za = ypart exact_center = ypart zb + 1.5reduced_il;
492 pickup pencircle xscaled reduced_slt yscaled reduced_il;
499 %right-handed puncta as in do clef
500 draw_medicaea_do_clef(
502 (+1.1reduced_il + 1.25stafflinethickness, 0),
505 set_char_box(reduced_il#/2, 2.6reduced_il#, 0, reduced_il#);
509 fet_beginchar("Ed. Med. fa clef", "medicaea_fa", "medfaclef")
511 draw_staff(-1,3, 0.0);
513 draw_medicaea_fa_clef((0,0), 1.0);
515 fet_beginchar("Ed. Med. fa clef", "medicaea_fa_change", "cmedfaclef")
516 draw_medicaea_fa_clef((0,0), .8);
528 brevis_wid# := 2 staff_space#;
530 def draw_brevis(expr exact_center, reduction, small_width, small_height) =
532 % inspired by function draw_brevis of
535 save reduced_slt, reduced_nht;
536 save stem_width, head_width;
537 save serif_size, serif_protrude;
538 save holeheight, beamheight;
540 reduced_slt# = stafflinethickness# * reduction;
541 reduced_nht# = noteheight# * reduction;
542 stem_width# = 1.4 reduced_slt#;
544 head_width# = 0.5brevis_wid# * reduction;
546 head_width# = brevis_wid# * reduction;
549 serif_size# = 0.64 reduced_slt#;
550 serif_protrude# = 0.96 serif_size#;
551 holeheight# = 3 reduced_slt#;
552 beamheight# = 0.32(reduced_nht# - holeheight#);
554 serif_size# = 1.0 reduced_slt#;
555 serif_protrude# = 1.5 serif_size#;
556 holeheight# = 3 reduced_slt#;
557 beamheight# = 0.5(reduced_nht# - holeheight#);
559 define_pixels(reduced_slt);
560 define_pixels(stem_width);
561 define_pixels(head_width);
562 define_pixels(serif_size);
563 define_pixels(serif_protrude);
564 define_pixels(beamheight);
566 penpos1(stem_width, 0);
567 penpos2(stem_width, 0);
568 penpos3(beamheight, 90);
569 penpos4(beamheight, 90);
570 penpos5(stem_width, 180);
573 z2l = z1l + (0, -reduced_slt/2);
574 z3r = z2r + serif_size*(1,-1);
576 x4l = x1l + head_width/2;
577 z5l = z3l + (-serif_size, -serif_protrude);
579 penlabels(1,2,3,4,5);
580 fill z1r -- z1l -- z5r{down} .. z5l{up} .. z3l{right}
581 -- z4l -- z4r -- z3r{left} .. z2r{up} -- cycle;
585 def draw_mensural_i_c_clef(expr exact_center, reduction) =
586 draw_brevis(exact_center, reduction, false, false);
588 save reduced_il, reduced_slt;
591 reduced_il# = staff_space# * reduction;
592 reduced_slt# = stafflinethickness# * reduction;
593 stem_width# = 1.4 reduced_slt#;
595 define_pixels(reduced_il);
596 define_pixels(reduced_slt);
597 define_pixels(stem_width);
599 penpos6(stem_width, 0);
600 penpos7(stem_width, 0);
602 z7l = z6l + (0, -2reduced_il);
603 fill z6l -- z7l -- z7r -- z6r -- cycle;
604 penpos8(stem_width, 0);
605 penpos9(stem_width, 0);
606 z8l = z6l + (-3reduced_slt, 0);
607 z9l = z8l + (0, -2reduced_il);
608 fill z8l -- z9l -- z9r -- z8r -- cycle;
610 addto currentpicture also currentpicture
611 yscaled -1 shifted (0, 2*(ypart exact_center));
612 addto currentpicture also currentpicture
613 xscaled -1 shifted (2x4l,0);
615 set_char_box(0, 2head_width#,
616 6reduced_slt#*reduction, 6reduced_slt#*reduction);
620 fet_beginchar("mensural c clef", "mensural1_c", "mens1cclef")
622 draw_staff(-1,3, 0.0);
624 draw_mensural_i_c_clef((0,0), 1.0);
626 fet_beginchar("mensural c clef", "mensural1_c_change", "cmens1cclef")
627 draw_mensural_i_c_clef((1.3 staff_space#,0), .8);
631 def draw_mensural_ii_c_clef(expr exact_center, reduction) =
632 draw_brevis(exact_center, reduction, false, true);
634 save reduced_il, reduced_slt;
635 save stem_width, interline;
637 reduced_il# = staff_space# * reduction;
638 reduced_slt# = stafflinethickness# * reduction;
639 stem_width# = 1.4 reduced_slt#;
640 interline# = staff_space#;
642 define_pixels(reduced_il);
643 define_pixels(reduced_slt);
644 define_pixels(stem_width);
645 define_pixels(interline);
647 penpos6(stem_width, 0);
648 penpos7(stem_width, 0);
649 z6l = exact_center + (0, -interline/2);
650 z7l = z6l + (0, -1.5reduced_il);
651 fill z6l -- z7l -- z7r -- z6r -- cycle;
653 addto currentpicture also currentpicture
654 yscaled -1 shifted (0, 2*(ypart exact_center) - interline);
655 addto currentpicture also currentpicture
656 yscaled -1 shifted (0, 4*(ypart exact_center));
657 addto currentpicture also currentpicture
658 xscaled -1 shifted (2x4l,0);
660 set_char_box(0, 2head_width#,
661 noteheight#*4*reduction, noteheight#*4*reduction);
665 fet_beginchar("mensural c clef", "mensural2_c", "mens2cclef")
667 draw_staff(-1,3, 0.0);
669 draw_mensural_ii_c_clef((0,0), 1.0);
671 fet_beginchar("mensural c clef", "mensural2_c_change", "cmens2cclef")
672 draw_mensural_ii_c_clef((1.3 staff_space#,0), .8);
676 def draw_mensural_iii_c_clef(expr exact_center, reduction) =
677 % inspired by Ockeghem, "Missa Prolationum", in: MGG, volume
679 draw_mensural_ii_c_clef(exact_center, reduction);
681 addto currentpicture also currentpicture
682 shifted (0, -interline);
684 set_char_box(0, 2head_width#,
685 noteheight#*6*reduction, noteheight#*6*reduction);
689 fet_beginchar("mensural c clef", "mensural3_c", "mens3cclef")
691 draw_staff(-1,3, 0.0);
693 draw_mensural_iii_c_clef((0,0), 1.0);
695 fet_beginchar("mensural c clef", "mensural3_c_change", "cmens3cclef")
696 draw_mensural_iii_c_clef((0,0), .8);
699 def draw_diamond(expr exact_center, reduction) =
700 save stem_width, reduced_il, reduced_nht, holeheight, beamheight;
701 save rh_height, rh_width;
703 stem_width# = 1.4 reduced_slt#;
704 reduced_il# = staff_space# * reduction;
705 reduced_nht# = noteheight# * reduction;
706 holeheight# = 3 reduced_slt#;
707 beamheight# = 0.4(reduced_nht# - holeheight#);
709 rh_height# = 1.2reduced_il#;
710 rh_width# / rh_height# = 0.58; % tan(30)
712 define_pixels(beamheight);
713 define_pixels(stem_width);
714 define_pixels(rh_height);
715 define_pixels(rh_width);
723 exact_center + (-rh_width/2, 0) --
724 exact_center + (0, rh_height/2) --
725 exact_center + (+rh_width/2, 0) --
726 exact_center + (0, -rh_height/2) --
730 def draw_mensural_f_clef(expr exact_center, reduction) =
732 % inspired by Gaspar van Weerbeke, "Virgo Maria" (1502), in:
733 % MGG, volume 9, col. 653 ("Motette"), fig. 3.; also by
734 % Andr'e Campra, "Entr'ee des s'er'enades" (1710), in: MGG,
735 % volume 2, col. 1649 ("Contredanse"), fig. 2.
737 draw_brevis(exact_center, reduction, true, false);
739 save reduced_il, reduced_slt;
740 save stem_width, interline;
742 reduced_il# = staff_space# * reduction;
743 reduced_slt# = stafflinethickness# * reduction;
744 stem_width# = 1.4 reduced_slt#;
745 interline# = staff_space#;
747 define_pixels(reduced_il);
748 define_pixels(reduced_slt);
749 define_pixels(stem_width);
750 define_pixels(interline);
752 addto currentpicture also currentpicture
753 yscaled -1 shifted (0, 2*(ypart exact_center));
754 addto currentpicture also currentpicture
755 xscaled -1 shifted (2x4l,0);
757 penpos6(stem_width, 0);
758 penpos7(stem_width, 0);
759 z6r = exact_center + (2x4l, 0);
760 z7r = z6r + (0, -4reduced_il);
761 fill z6l -- z7l -- z7r -- z6r -- cycle;
763 draw_diamond(exact_center +
764 (1.6interline*reduction, interline/2), reduction);
765 %% some editions put a stem on top of the upper note head:
766 % penpos8(stem_width, 0);
767 % penpos9(stem_width, 0);
768 % z8l = exact_center + (1.6interline*reduction, interline*reduction);
769 % z9l = z8l + (0, 1.5interline*reduction);
770 % fill z8l -- z9l -- z9r -- z8r -- cycle;
772 draw_diamond(exact_center +
773 (1.6interline*reduction, -interline/2), reduction);
774 penpos10(stem_width, 0);
775 penpos11(stem_width, 0);
776 z10r = exact_center + (1.6interline*reduction, -interline*reduction);
777 z11r = z10r + (0, -3.5interline*reduction);
778 fill z10l -- z11l -- z11r -- z10r -- cycle;
780 set_char_box(0, 3head_width#,
781 3.5noteheight#*reduction, 1.5noteheight#*reduction);
785 fet_beginchar("mensural f clef", "mensural_f", "mensfclef")
787 draw_staff(-1,3, 0.0);
789 draw_mensural_f_clef((0,0), 1.0);
791 fet_beginchar("mensural f clef", "mensural_f_change", "cmensfclef")
792 draw_mensural_f_clef((0,0), .8);
804 def draw_hufnagel_do_clef(expr exact_center, reduction) =
806 % inspired by Graduale of Friedrich Zollner (1442), in: MGG,
807 % volume 9, col. 1413 ("Neustift"), fig. 1.
811 reduced_il# = staff_space# * reduction;
813 define_pixels(reduced_il);
816 xscaled (0.60reduced_il)
817 yscaled (0.10reduced_il)
819 save za, zb, zc, zd, ze, zf;
820 pair za, zb, zc, zd, ze, zf;
822 za = exact_center + (+0.30reduced_il, +.45reduced_il);
823 zb = exact_center + (+0.20reduced_il, +.45reduced_il);
824 zc = exact_center + (-0.10reduced_il, +.60reduced_il);
825 zd = exact_center + (-0.40reduced_il, +.45reduced_il);
826 ze = exact_center + (-0.40reduced_il, -.45reduced_il);
827 zf = exact_center + (-0.20reduced_il, -.55reduced_il);
828 draw za .. zb .. zc -- zd -- ze -- zf;
830 set_char_box(0.5reduced_il#, 0.5reduced_il#, 0, reduced_il#);
834 fet_beginchar("Hufnagel do clef", "hufnagel_do", "hufnageldoclef")
836 draw_staff(-1,3, 0.0);
838 draw_hufnagel_do_clef((0,0), 1.0);
840 fet_beginchar("Hufnagel do clef", "hufnagel_do_change", "chufnageldoclef")
841 draw_hufnagel_do_clef((1.3 staff_space#,0), .8);
845 def draw_hufnagel_fa_clef(expr exact_center, reduction) =
847 % inspired by Bamberger Manuscript (15th century), in:
848 % MGG, volume 2, table 59.
852 reduced_il# = staff_space# * reduction;
854 define_pixels(reduced_il);
857 xscaled (0.60reduced_il)
858 yscaled (0.10reduced_il)
860 save za, zb, zc, zd, ze, zf;
861 pair za, zb, zc, zd, ze, zf;
863 za = exact_center + (+0.30reduced_il, +0.70reduced_il);
864 zb = exact_center + (+0.20reduced_il, +0.70reduced_il);
865 zc = exact_center + (-0.10reduced_il, +0.85reduced_il);
866 zd = exact_center + (-0.40reduced_il, +0.70reduced_il);
867 ze = exact_center + (-0.40reduced_il, -1.10reduced_il);
868 draw za .. zb .. zc -- zd -- ze;
873 zg = exact_center + (+0.30reduced_il, -0.05reduced_il);
874 zh = exact_center + (+0.20reduced_il, -0.05reduced_il);
875 zi = exact_center + (-0.10reduced_il, +0.10reduced_il);
876 zj = exact_center + (-0.40reduced_il, -0.05reduced_il);
877 draw zg .. zh .. zi -- zj;
879 set_char_box(0.5reduced_il#, 0.5reduced_il#, 0, reduced_il#);
883 fet_beginchar("Hufnagel fa clef", "hufnagel_fa", "hufnagelfaclef")
885 draw_staff(-1,3, 0.0);
887 draw_hufnagel_fa_clef((0,0), 1.0);
889 fet_beginchar("Hufnagel fa clef", "hufnagel_fa_change", "chufnagelfaclef")
890 draw_hufnagel_fa_clef((0,0), .8);
894 def draw_hufnagel_do_fa_clef(expr exact_center, reduction) =
895 draw_hufnagel_do_clef(exact_center, reduction);
896 draw_hufnagel_fa_clef(exact_center + (0, -2staff_space), reduction);
900 fet_beginchar("Hufnagel do/fa clef", "hufnagel_do_fa", "hufnageldofaclef")
902 draw_staff(-1,3, 0.0);
904 draw_hufnagel_do_fa_clef((0,0), 1.0);
906 fet_beginchar("Hufnagel do/fa clef", "hufnagel_do_fa_change",
908 draw_hufnagel_do_fa_clef((0,0), .8);
912 fet_endgroup("clefs");