]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-dynamics.mf
Doc: NR 1.1.2 - @knownissue for transposing
[lilypond.git] / mf / feta-dynamics.mf
1 % Feta (not the Font-En-Tja) music font --  dynamic signs
2 % This file is part of LilyPond, the GNU music typesetter.
3 %
4 % Copyright (C) 1997--2011 Jan Nieuwenhuizen <janneke@gnu.org>
5 %
6 % LilyPond is free software: you can redistribute it and/or modify
7 % it under the terms of the GNU General Public License as published by
8 % the Free Software Foundation, either version 3 of the License, or
9 % (at your option) any later version.
10 %
11 % LilyPond is distributed in the hope that it will be useful,
12 % but WITHOUT ANY WARRANTY; without even the implied warranty of
13 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 % GNU General Public License for more details.
15 %
16 % You should have received a copy of the GNU General Public License
17 % along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
18
19
20 ex# := (dynamic_design_size / 2.4) * pt#;
21 descender# := 0.5 ex#;
22 ascender# := 0.72 ex#;
23 staffspace# := 1.75 / 2.0 * ex#;
24 horizontal_space# := .66 ex#;
25
26 font_x_height ex#;
27 font_normal_space horizontal_space#;
28
29 define_pixels (staffspace, linethickness, ex, descender, ascender);
30
31
32 %
33 % TODO: blot diameter should be fixed, not scalable.
34 %
35
36 save serif_thick, med_thick, bottom_blot;
37
38 serif_thick# = 1.1 linethickness#;
39 define_blacker_pixels (serif_thick);
40
41 med_thick = round (1.5 linethickness);
42 bottom_blot = 1.3 serif_thick;
43
44
45 code := 32;
46
47 fet_beginchar ("Space", "space");
48         set_char_box (0, horizontal_space#, 0, ex#);
49 fet_endchar;
50
51
52 %
53 % Couldn't find many z examples.  This one is losely inspired
54 % by a sfz from Mueller Etuden fuer Horn (Edition Hofmeister).
55 %
56
57 code := 121;
58
59 fet_beginchar ("dynamic z", "z");
60         save thin_thick, top_narrow, over_shoot;
61         save bot_thick;
62
63         set_char_box (0, .98 ex#, 0, 0.9 ex#);
64
65         thin_thick = serif_thick;
66         top_narrow = thin_thick;
67         top_overshoot = .8 serif_thick;
68         top_thick = .3 h;
69         bot_thick = .2 ex;
70         bot_overshoot = serif_thick;
71
72         x0 = top_narrow;
73         y0 = .9 [y1r, y1l];
74
75         penpos1 (top_thick, 80);
76         y1l = .72 h;
77         x1r = .34 ex;
78
79         x2 = .66 ex;
80         y2 = y1r - top_overshoot;
81
82         y3 = h - .7 thin_thick;
83         x3 = w - .6 top_narrow - .5 thin_thick;
84         y4 = .5 thin_thick;
85         x4 = .5 thin_thick;
86
87         penpos3 (thin_thick, angle (z3 - z4) + 90);
88         penpos4 (thin_thick, angle (z3 - z4) + 90);
89
90         penpos5 (bot_thick, 70);
91         x5l =.25 ex;
92         y5l = .4 bot_overshoot;
93
94         penpos6 (3/2 bot_thick, 70);
95         y6l = -bot_overshoot;
96         x6 = w - 3 top_narrow;
97
98         x7 = w;
99         y7 = .82 [y8r, y6r];
100
101         penpos8 (thin_thick, 20);
102         x8r = w - .35 top_narrow;
103         y8r = .45 h;
104
105         penlabels (range 0 thru 8);
106
107 %       pickup pencircle scaled 1;
108
109 %       draw
110         fill z0{down}
111              .. z1l{dir (10)}
112              .. simple_serif (z3l, z3r, 90)
113              .. z2{left}
114              .. z1r{left}
115              ..tension 1.2.. cycle;
116
117 %       draw
118         fill z3l
119              -- z3r
120              -- z4r
121              -- z4l
122              -- cycle;
123
124 %       draw
125         fill simple_serif (z4r, z4l, 90)
126              .. z5l{right}
127              .. z6l{right}
128              .. z7{up}
129              .. simple_serif (z8r, z8l, 90)
130              .. z6r{left}
131              .. z5r{left}
132              .. cycle;
133 fet_endchar;
134
135
136 % forte f, grabbed from Ed Breitkopf Mozart horn concerto 3.
137 %
138 % NOTES:
139 %
140 % * the bulbs are open
141 %
142 % * blotting around the serif
143 %
144 % TODO: insert blots around the serif
145 %
146
147 slant_angle = 20;
148 code := 101;
149
150 fet_beginchar ("dynamic f", "f");
151         save left_angle, right_angle;
152         save serif_length, serif_eccentricity;
153         save f_thick;
154         save bulb_thick, bulb_diam, fill_up;
155         save slant;
156         save p;
157         path p;
158
159         set_char_box (0, 1.1 ex#, descender#, ex# + ascender#);
160
161         bulb_diam = 7.5 / 40 ex;
162         bulb_thick = 8.5 / 40 ex;
163         fill_up = 1.5 serif_thick;
164         left_angle = slant_angle - 6;
165         right_angle = slant_angle - 3;
166         f_thick = 7/16 ex;
167         serif_length = 0.96 ex;
168         serif_eccentricity = 0.01 ex;
169
170         % z1 is the `base point'
171         z1 = (0.2 ex, -serif_thick);
172
173         penpos2 (f_thick, 0);
174         y2 = y1 + ex;
175         z2l = z1 + whatever * dir (90 - left_angle);
176
177         penpos3 (med_thick, -90);
178         y3l = y1 + ex + ascender;
179         x3l = x1 + ex;
180
181         penpos4 (bulb_thick, -20);
182         z3r = whatever [z4r, z4l];
183
184         x4l - x3l = 1/10 ex;
185
186         penpos5 (bulb_thick, -45);
187         x5r = 0.1 [x4l, x4r];
188         y5l = y4l - bulb_diam;
189
190         z6 = z2r + whatever * dir (90 - right_angle);
191         y6 = y1 + 3/8 ex;
192
193         penpos7 (med_thick, -90);
194         x7 = x1 - 1/4 ex;
195         y7r = y1 -descender;
196
197         penpos8 (bulb_thick, 160);
198         x8l = x7l - 1/10 ex;
199
200         z7l = whatever [z8r, z8l];
201
202         penpos9 (bulb_thick, 135);
203         x9r = 0.1 [x8l, x8r];
204         y9l = y8l + bulb_diam;
205
206         labels (1, 6, 9);
207         penlabels (2, 3, 4, 5, 7, 8, 9);
208
209 %       pickup pencircle scaled 1;
210
211 %       draw
212         fill z1
213              -- z2l{z2l - z1}
214              ..tension 1.1.. z3l{right}
215              .. z4r{down}
216              .. z5r{left}
217              .. z5l{up}
218              ..tension 0.8.. z4l{up}
219              .. z3r{left}
220              ..tension 1.1.. z2r{z6 - z2r}
221              -- z6{z6 - z2r}
222              ..tension 1.25.. z7r{left}
223              .. z8r{up}
224              .. z9r{right}
225              .. z9l{down}
226              ..tension 0.8.. z8l{down}
227              .. z7l{right}
228              .. {z2l - z1}cycle;
229
230         x13 - x14 = serif_length;
231         y13 = y14;
232         y14 = y2;
233         0.5 [x13, x14] = x2 + serif_eccentricity;
234
235         draw_rounded_block (z14 - (0, 0.7 serif_thick),
236                             z13 + (0, 0.7 serif_thick),
237                             1.4 serif_thick);
238
239         labels (13, 14);
240 fet_endchar;
241
242
243 %
244 % Notes:
245 %
246 % - The `s' is trapezoidal (i.e., narrower at the top).
247 %
248 % - The white space is differently shaped at the top (the bulb's inner
249 %   curve is filled up).
250 %
251 % - Less heavy than the `f' and `p' signs.
252 %
253
254 code := 114;
255
256 fet_beginchar ("dynamic s", "s");
257         save left_angle, right_angle;
258         save s_thick, s_thin;
259         save bulb_diam, bulb_len;
260         save over_shoot;
261         save base_point;
262         pair base_point;
263
264         set_char_box (0, 17/24 ex#, 0, ex#);
265
266         over_shoot = 0;                 % .2 serif_thick;
267         bulb_diam = 11/70 ex;
268         bulb_len = 1.0 bulb_diam;
269         left_angle = slant_angle - 2;
270         right_angle = slant_angle - 11;
271         s_thick = 16/70 ex;
272         s_thin = serif_thick;
273
274         base_point = (0, 0);
275
276         penpos1 (bulb_diam, -45);
277         z1 = 0.35 [z2l, z2r] + bulb_len * dir (45);
278
279         penpos2 (bulb_diam, -25);
280         y2l = 0.845 [y7r, y3r];
281         z2l = base_point + whatever * dir (90 - left_angle);
282
283         penpos3 (s_thin, 100);
284         x3l = 1/2 w;
285         y3l = ypart base_point - over_shoot;
286
287         penpos4 (s_thick, 25);
288         y4l = y1r;
289         z4r = base_point + (w, 0) + whatever * dir (90 - right_angle);
290
291         penpos5 (s_thick, 40);
292         z5 = z3l + whatever * dir (90 - right_angle);
293         y5 = 0.48 [y7r, y3r];
294
295         penpos6 (s_thick, 25);
296         z6l = base_point + whatever * dir (90 - left_angle);
297         y6r = y9l;
298
299         penpos7 (.9 s_thin, 110);
300         z7l = 0.45 [z6r, z8l] + whatever * dir (90 - left_angle);
301         y7r = h + over_shoot;
302
303         penpos8 (.9 bulb_diam, -25);
304         z8 = .6 [z4l, z4r] + whatever * dir (90 - right_angle);
305         y8r = 0.23 [y7r, y3r];
306
307         penpos9 (.9 bulb_diam, -45);
308         z9 = .4 [z8r, z8l] + .9 bulb_len * dir (-135);
309
310         penlabels (range 1 thru 9);
311
312 %       pickup pencircle scaled 1;
313
314 %       draw
315         fill z2l{down}
316              .. z3l{right}
317              .. z4r{up}
318              .. z5r
319              .. z6r{up}
320              .. z7l{right}
321         %    .. z8l{down}
322              .. z9l{dir (-125)}
323              .. z9r{right}
324              .. z7r{left}
325              .. z6l{down}
326              .. z5l
327              .. z4l{down}
328              .. z3r{left}
329              .. z2r{up}
330              .. z1r{up}
331              .. z1l{left}
332              .. cycle;
333 fet_endchar;
334
335
336 % for `p' and `m'
337
338 save slant;
339 slant := ypart (dir (slant_angle));
340
341
342 %
343 % Piano `p', grabbed from Ed Breitkopf Mozart horn concerto 3.
344 %
345 % Notes:
346 %
347 % * There is no dishing in the serif (but we do it anyway).
348 %
349 % * The cheek is a little fatter than the stem.
350 %
351 % * The slant is extreme: 20 degrees.
352 %
353 % * The twiddle (what's-it-called) is a slightly darker than the serif.
354 %
355 % * The hole in the cheek has a straight right side.
356 %
357 % * Corners are filled up.
358 %
359
360 code := 111;
361
362 fet_beginchar ("dynamic p", "p")
363         % TODO: w really is 13/12 ex
364         %       but should do kerning
365
366         save twiddle_thick, stem_thick, cheek_thick, cheek_width;
367         save fill_up, straigh_len;
368         save serif, dishing_angle, p, tmp;
369         save cheek_medium, left_serif_protrude, right_serif_protrude;
370         save lower_overshoot;
371         save blot_t, corner_t;
372         path serif, p;
373         pair tmp, updir;
374
375         set_char_box (0, 15/12 ex#, descender#, 1.0 ex#);
376
377         twiddle_thick = med_thick;
378         cheek_medium = 1/6 ex;
379
380         dishing_angle = 5;
381         fill_up = 1.5 serif_thick;
382         straigh_len = 0.5 ex;
383         lower_overshoot = .3 serif_thick;
384
385         stem_thick = 2/6 ex;
386         cheek_thick = 13/32 ex;
387         cheek_width = 0.72 ex;
388         left_serif_protrude = 18/60 ex;
389         right_serif_protrude = 15/60 ex;
390
391         currenttransform := currenttransform slanted slant;
392
393         penpos1 (twiddle_thick, -slant - 5);
394         penpos2 (cheek_medium, 90 - slant);
395         penpos3 (cheek_medium, 90 - slant);
396
397         x4r - x4l = cheek_thick;
398
399         penpos4 (whatever, 0);
400         penpos5 (whatever, -38);
401         penpos6 (stem_thick, 0);
402         penpos17 (straigh_len, 90 - slant);
403
404         whatever [z17l, z17r] =  z4l;
405         y17 = 7/16 ex;
406         x6l = 0;
407         y6l = -descender + serif_thick / 2;
408         z1l = z6l - whatever * dir (110);
409         y1r = 0.5 ex;
410         y2r = ex;
411         z7 = whatever * up + z6l;
412         y7 = 43/60 ex;
413         z2l = whatever * up + 0.3 [z7, z1r];
414         y8 = 0.9 [y7, y2l];
415         z8 = 2/3 [z6l, z6r] + whatever * up;
416         y3r = ex;
417         z3l = 0.58 [(stem_thick, -descender),
418                     (stem_thick + cheek_width - cheek_thick, -descender)]
419               + whatever * up;
420         y4r = .38 ex;
421         z4r = whatever * up + (stem_thick + cheek_width, -descender);
422         z5l = whatever * up + z3l;
423         y5r = -lower_overshoot;
424         y5l = y5r + cheek_medium * ypart dir (55);
425         z9 = z6r + whatever * up;
426         y9 = .2 [y5l, y5r];
427
428         p := z2r{right}
429              .. {dir (-60)}z8{dir 60}
430              .. z3r{right}
431              .. z4r{down}
432              ..tension 1.1.. z5r{left}
433              .. {curl 1}z9
434              -- z6r
435              -- z6l
436              -- z7{up}
437              .. z2l{left}
438              ..tension 1.2.. simple_serif (z1r, z1l, -90)
439              .. cycle;
440
441         blot_t := 0.13;
442         corner_t := xpart (p intersectiontimes z9);
443
444 %       pickup pencircle scaled 1;
445
446 %       draw
447         fill subpath (0, corner_t - 2 blot_t) of p
448              .. subpath (corner_t + blot_t, length p) of p
449              .. cycle;
450
451         y12 = 0.5 ex;
452         z12 = z6r + whatever * up;
453
454         unfill z17l
455                ..tension 1.5.. z17r
456                .. z3l{left}
457                ..tension 1.05.. z12{down}
458                ..tension 1.05.. z5l{right}
459                .. cycle;
460
461         penlabels (1, 2, 3, 4, 5, 6, 17);
462         labels (7, 8, 9);
463
464         pickup pencircle scaled serif_thick;
465
466         lft x11 = -left_serif_protrude;
467         rt x10 = stem_thick + right_serif_protrude;
468         bot y10 = bot y11 = -descender;
469
470         z15 = z6l + up * fill_up;
471         z16 = z6r + up * 1.2 fill_up;
472
473         % Since pens are not affected by currenttransform we directly
474         % transform the necessary points, then simulating the pen with
475         % an outline while using the identity transformation.
476
477         forsuffixes $ = 7, 10, 11, 15, 16:
478                 tmp := z$ transformed currenttransform;
479                 x$ := xpart tmp;
480                 y$ := ypart tmp;
481         endfor;
482
483         currenttransform := identity;
484
485         updir = z7 - z15;
486
487         serif := simple_serif (z10, z11, dishing_angle);
488
489         penpos10 (serif_thick, -dishing_angle - 90);
490         penpos11 (serif_thick, dishing_angle - 90);
491         penpos13 (serif_thick, angle (direction 0.05 of serif) + 90);
492         penpos14 (serif_thick, angle (direction 0.85 of serif) + 90);
493
494         z13 = point 0.05 of serif;
495         z14 = point 0.85 of serif;
496
497         penlabels (10, 11, 13, 14);
498         labels (15, 16);
499
500 %       draw
501         fill z15{-updir}
502              .. z14l{direction 0.85 of serif}
503              .. z11l{-dir (dishing_angle)}
504              .. z11r{dir (dishing_angle)}
505              .. z14r{-direction 0.85 of serif}
506              .. z13r{-direction 0.05 of serif}
507              .. z10r{dir (-dishing_angle)}
508              .. z10l{-dir (-dishing_angle)}
509              .. z13l{direction 0.05 of serif}
510              .. z16{updir}
511              -- cycle;
512 fet_endchar;
513
514
515 %
516 % NOTES:
517 %
518 % * Right stem is fatter and more straight than the left two stems.
519 %
520 % * The twiddle at the left is similar to the `p' twiddle.
521 %
522 % * The bottoms of the stems are blotted.
523 %
524 %
525 % This is cut & paste programming.  Somehow three `i' shapes in two
526 % characters (`p' and `m') -- doesn't seem worth the trouble of writing
527 % a macro.
528 %
529
530 code := 108;
531
532 fet_beginchar ("dynamic m", "m");
533         save i_thick, i_angle, i_twiddle_thick;
534         save i_twiddle_start_angle, i_twiddle_start_y;
535         save i_twiddle_end_angle, i_left_space;
536         save idir, center, right_ending;
537         save overshoot;
538         save p;
539         pair center, idir, right_ending;
540         path p;
541
542         set_char_box (0, 1.5 ex#, 0, 1.0 ex#);
543
544         % should share code with p for twiddle.
545
546         overshoot = .25 serif_thick;
547         i_thick := 21/80 ex;
548         i_twiddle_thick = 1.2 serif_thick;
549         i_twiddle_start_y = 8/16 ex;
550         i_twiddle_start_angle = 0;
551         i_twiddle_end_angle := 35;
552
553         center = (0, 0);
554
555         currenttransform := currenttransform slanted slant;
556
557         i_angle := 0;
558         idir := dir (90 - i_angle);
559         i_left_space = 16/80 ex;
560
561         penpos1 (i_twiddle_thick, -i_twiddle_start_angle);
562         y1 = i_twiddle_start_y;
563         z1r = center - (i_left_space, 0) + whatever * idir;
564
565         y2l = ex + overshoot;
566         z2l = .08 [z3l, z3r] + whatever * idir;
567         z2r = 5/8 [z1r, z3l] + whatever * idir;
568         y2r = y5l + 1/9 ex;
569         z2 = 1/2 [z2l, z2r];
570
571         penpos3 (i_thick, 0);
572         y3 = 0.5 bottom_blot + ypart center;
573         z3l = center + whatever * idir;
574
575         penpos4 (i_thick - bottom_blot, 0);
576         y4 = ypart center;
577         z4 - z3 = whatever * idir;
578
579         penpos5 (i_thick, 0);
580         z5 = z4 + whatever * idir;
581         y5 = 55/80 ex;
582
583         fill simple_serif (z1l, z1r, 90)
584              ..tension 1.2.. z2r{right}
585              .. z5l{z3 - z5}
586              -- z3l{z3 - z5}
587              .. z4l{right}
588              -- z4r{right}
589              .. z3r{z5 - z3}
590              -- z5r{z5 - z3}
591              ..tension 1.2.. z2l{left}
592              .. cycle;
593
594         right_ending := z5r;
595         penlabels (1, 2, 3, 4, 5);
596
597         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
598
599         clearxy;
600
601         i_angle := -3.2;
602         idir := dir (90 - i_angle);
603         i_left_space := 14/80 ex;
604
605         penpos1 (serif_thick, -i_twiddle_start_angle);
606         z1r = right_ending;
607
608         y2l = ex+ overshoot;
609         z2l = .08 [z3l, z3r] + whatever * idir;
610         z2r = 5/8 [z1r, z3l] + whatever * idir;
611         y2r = y5l + 1/9 ex;
612         z2 = 1/2 [z2l, z2r];
613
614         penpos3 (i_thick, 0);
615         y3 = 0.5 bottom_blot + ypart center;
616         z3l = z5l + whatever * idir;
617
618         penpos4 (i_thick - bottom_blot, 0);
619         y4 = ypart center;
620         z4 - z3 = whatever * idir;
621
622         penpos5 (i_thick, 0);
623         z5l = right_ending + (i_left_space, 0);
624
625         fill simple_serif (z1l, z1r, 90)
626              ..tension 1.05.. z2r{right}
627              .. z5l{z3 - z5}
628              -- z3l
629              ..  z4l{right}
630              -- z4r{right}
631              .. z3r{z5 - z3}
632              -- z5r{z5 - z3}
633              ..tension 1.2.. z2l{left}
634              .. cycle;
635
636         right_ending := z5r;
637         penlabels (1, 2, 3, 4, 5);
638
639         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
640
641         clearxy;
642
643         i_thick := 23/80 ex;
644         i_angle := -6;
645         idir := dir (90 - i_angle);
646         i_left_space := 14/80 ex;
647
648         penpos1 (serif_thick, -i_twiddle_start_angle);
649         z1r = right_ending;
650
651         y2l = ex + overshoot;
652         z2l = .08 [z3l, z3r] + whatever * idir;
653         z2r = 5/8 [z1r, z3l] + whatever * idir;
654         y2r = y5l + 1/9 ex;
655         z2 = 1/2 [z2l, z2r];
656
657         penpos3 (whatever, 20);
658         y3l = 1/8 ex + ypart center;
659         z3l = z7l + whatever * idir;
660         z3r = z7r + whatever * idir;
661
662         penpos5 (whatever, 10);
663         z5l = right_ending + (i_left_space, 0);
664         z5r = z7r + whatever * idir;
665
666         penpos6 (serif_thick, -i_twiddle_end_angle);
667         y6l = 23/80 ex + ypart center;
668         z6l = 1.6 [z3l, z3r] + whatever * idir;
669
670         penpos7 (i_thick, 0);
671         y7 = 0;
672         z7l = z5l + whatever * idir;
673
674         z8 = z7 - (0, overshoot);
675
676         fill simple_serif (z1l, z1r, 90)
677              ..tension 1.05.. z2r{right}
678              .. z5l{z3 - z5}
679              -- z3l{z3 - z5}
680              .. z8{right}
681              .. simple_serif (z6r, z6l, 90)
682              ..tension 0.85.. z3r{z5 - z3}
683              -- z5r{z5 - z3}
684              ..tension 1.2.. z2l{left}
685              .. cycle;
686
687         penlabels (range 1 thru 8);
688 fet_endchar;
689
690
691 code := 113;
692
693 fet_beginchar ("dynamic r", "r");
694         save base_point, stem_thick, bulb_diam;
695         save twiddle_thick, attach_len, overshoot, taille;
696         pair base_point;
697
698         set_char_box (0, .75 ex#, 0, ex#);
699
700         stem_thick =.26 ex;
701         bulb_diam = .30 ex;
702         twiddle_thick = 1.1 serif_thick;
703         overshoot = .5 serif_thick;
704         taille = -0.3 serif_thick;
705         attach_len + bulb_diam / 2 + stem_thick = w;
706
707
708         base_point = (0, 0);
709
710         currenttransform := identity slanted ypart (dir (15));
711
712         penpos1 (stem_thick, 0);
713         x1l = 0;
714         y1l = .5 bottom_blot;
715
716         penpos2 (stem_thick, 0);
717         x2l = x1l;
718         y2l - y1l = 36/47 ex;
719
720         penpos3 (twiddle_thick, -20);
721         x3r = x2l - .2 ex;
722         y3 = .77  ex;
723
724         x4l = -0.1 [x1l, x1r];
725         y4l = ex + overshoot;
726         x4r = 0.62 [x3r, x2l];
727         y4r = 0.5 [y4l, y2l];
728
729         penpos5 (whatever, -74);
730         y5l - y5r =  bulb_diam;
731         y5l = ex + overshoot;
732         x5 = x2r + attach_len;
733
734         penpos6 (bulb_diam, 0);
735         z6 = z5;
736
737 %       z7 = z6l + taille * dir (180);
738         z7 = z6 + .4 * bulb_diam * dir (-125);
739
740         z8 = 9/10 [z1r, z2r];
741
742         x9 = 0.15 [x1r, x1l];
743         y9 = y4l - .12 ex;
744
745         penpos10 (stem_thick - bottom_blot, 0);
746         x10 = x1;
747         y10 = 0;
748
749 %       pickup pencircle scaled 1;
750
751 %       draw
752         fill z1r{down}
753              .. z10r{left}
754              -- z10l{left}
755              .. z1l{up}
756              -- z2l{up}
757              .. z4r{left}
758              ..tension 1.2.. {down}simple_serif (z3r, z3l,-90){up}
759              ..tension 0.95.. z4l
760              .. {curl 1}z9{curl 1}
761              .. z5l
762              .. z6r{dir (-80)}
763              .. z5r{left}
764              .. z7
765              .. z6l
766              ..tension 1.2.. z8{down}
767              -- cycle;
768
769         penlabels (range 1 thru 10);
770 fet_endchar;
771
772
773 %%% KERNING
774
775 ligtable "m":
776         "p" kern 0.2 ex#,
777         "f" kern -0.1 ex#;
778
779 ligtable "f":
780         "f" kern -0.13 ex#;
781
782 ligtable "r":
783         "f" kern 0.1 ex#;
784
785
786 %% notes from old dyn code.
787
788 % `f' obviously has a _lot_ bigger slant than `p' (see Wanske p.239).
789 % However; perhaps we need two f symbols:
790 %  - a super-slanted one used in `f', `mf', `sfz', `sf'
791 %  - a more normal-slanted in `ff', `fff', `fp', `fp' (see Wanske p.241)
792 %
793 % Looking at professionally typeset music reveals that typesetters
794 % are somewhat unsure about slanting in `mf', `fp', `sfz'
795 %
796 % `f' and `p' (in any combination) are a lot (factor two) fatter than
797 % `s', `m', and `z'.  Sometimes the `m' and `z' are a bit fatter than
798 % `s'.
799 %
800 % Chester, Breitkopf suggest smaller sizes of these other glyphs,
801 % using the x-height as reference point.