]> git.donarmstrong.com Git - lilypond.git/blob - mf/feta-schrift.mf
release: 1.5.8
[lilypond.git] / mf / feta-schrift.mf
1 % -*- Fundamental -*-  (emacs-20 mf mode mucks
2 % feta-schrift.mf --  implement scripts
3
4 % source file of the Feta (defintively not an abbreviation for Font-En-Tja)
5 % music font
6
7 % (c) 1997 Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 %       Jan Nieuwenhuizen <janneke@gnu.org>
9
10
11
12 fet_begingroup("scripts")
13
14 def draw_fermata =
15   save alpha, radius, crook_thinness, crook_fatness, dot_diam;
16   
17         % [Wanske] and some  Baerenreiter editions
18         % suggest ca 80 degrees iso half-circle
19   alpha := 10;
20
21   radius# = 1.25 staff_space#;
22   crook_thinness# = 1.5stafflinethickness#;
23   crook_fatness# = 4 stafflinethickness#;
24
25   radius# + crook_fatness#/2 = h#;
26   radius# + crook_thinness#/2 = w#;
27   set_char_box(w#, w#, crook_thinness#/2, h#);
28   
29   define_pixels(radius, crook_thinness, crook_fatness);
30   dot_diam = 4/3 crook_fatness;
31
32
33   penpos1(crook_thinness, 0);
34   penpos2(crook_fatness, -90);
35   z1 = (-radius,0);
36   z2 = (0, radius);
37
38   fill z1l{dir (-alpha-90)}..{dir (90-alpha)}z1r..
39   {right}z2r -- z2l{left} .. cycle;
40
41   addto currentpicture also 
42   currentpicture xscaled -1;
43
44   pickup pencircle scaled dot_diam;
45   x4 =0;
46   bot y4 = - crook_thinness/2;
47   draw z4;
48 enddef;
49
50 fet_beginchar("fermata up", "ufermata", "ufermata")
51         draw_fermata;   
52         penlabels(1,2,4);
53 fet_endchar;
54
55 fet_beginchar("fermata down", "dfermata", "dfermata")
56         draw_fermata;
57         y_mirror_char;
58 fet_endchar;
59
60 %
61 % Thumbs are used in cello music.
62 % TODO : thumbs should look like the finger-font and should be placed in
63 % the same way in the score.
64 %
65
66 fet_beginchar("Thumb", "thumb", "thumb")
67         save thin, height, width, thick;
68         height# = 5/4 width#;
69         height# = staff_space#;
70         thin = 1.2 stafflinethickness;
71         thick =  2 thin;
72         set_char_box(width#/2, width#/2, height#/2, height#/2);
73         
74         penpos1(thick, 0);
75         penpos2(thin, 90);
76         z1r = (w, 0);
77         z2r = (0, h);
78         penlabels(1,2);
79         penstroke z1e{up} .. {left}z2e;
80         addto currentpicture also currentpicture xscaled -1;
81         addto currentpicture also currentpicture yscaled -1;
82
83         z3 = (0, -h);
84         z4 = (0, -1.5h);
85         penlabels(3,4);
86         draw_brush(z3,1.4*thin, z4,0.9*thick);
87 fet_endchar;
88
89 %
90 % FIXME: rounded endings
91 %
92 % `\accent' is TeX reserved.
93 fet_beginchar("> accent", "sforzato", "sforzatoaccent")
94         set_char_box(.9 staff_space#, .9 staff_space#, .5 staff_space#, .5 staff_space#);
95         save thickness, diminish;
96
97         thickness = 3/2 stafflinethickness;
98         pickup pencircle scaled thickness;
99
100         % prevent blobs at crossing lines
101         diminish = .75;
102
103         top y1 = h;
104         lft x1 = -b;
105         rt x2 = w;
106         y2 = .25 thickness* diminish;
107
108         rt z4 = (w,0);
109         x3 =0;
110         z3 = whatever [z1, z4];
111
112         penpos2(thickness*(2 - diminish)/2 , 90);
113         penpos1(thickness, 90);
114         penpos3(thickness, 90);
115
116         draw z1 .. z3;
117         draw (z1 .. z3) yscaled -1;
118         draw z4;
119         penstroke z3e .. z2e;
120         penstroke (z3e .. z2e) yscaled -1;
121
122         penlabels(1,2,3);
123         labels(4);
124 fet_endchar;
125
126 % Hmm, changed 1.5 to 1.4 to avoid problems with "random" placement of
127 % the dots because of quantization effects for almost integer values. /MB
128
129
130 %
131 % Hmm. Should not meddle with darkness of font. Check out the 
132 % correct value for radius. Maybe we'd better change padding --hwn
133 %
134 fet_beginchar("staccato dot", "staccato", "staccato")
135         save radius;
136         radius# = 1.4 stafflinethickness#;
137         define_pixels(radius);
138         pickup pencircle scaled 2 radius;
139         draw (0,0);
140         set_char_box(radius#, radius#, radius#, radius#);
141 fet_endchar;
142
143 def draw_staccatissimo =
144         save radius, height;
145         height# = .8 staff_space#;
146         radius# = 2 stafflinethickness#;
147         define_pixels(radius, height);
148
149         draw_brush((0,0), stafflinethickness, (0, height),2 radius);
150         set_char_box(radius#,radius#, blot_diameter#/2, height# + radius#);
151 enddef;
152
153 fet_beginchar("staccatissimo/martellato up", "ustaccatissimo", 
154                 "ustaccatissimo")
155         draw_staccatissimo;
156 fet_endchar;
157
158 %
159 % FIXEM: scale labels too.
160 %
161 fet_beginchar("staccatissimo/martellato down", "dstaccatissimo", "dstaccatissimo")
162         draw_staccatissimo;
163         y_mirror_char;
164 fet_endchar;
165
166 fet_beginchar("portato/single tenuto", "tenuto", "tenuto")
167         save thick;
168         thick# = 1.4 stafflinethickness#;
169         define_pixels(thick);
170
171         set_char_box(.6 staff_space#, .6 staff_space#, thick#/2,thick#/2);
172         pickup pencircle scaled thick;
173         lft x1 = -b;
174         rt x2 = w;
175         y1 = y2 = 0;
176         draw z1 .. z2;
177 fet_endchar;
178
179
180 def draw_marcato = 
181         save fat_factor, thinness;
182         set_char_box(staff_space#/2, staff_space#/2, 0, 1.1 staff_space#);
183
184         fat_factor = .3;
185         thinness =  stafflinethickness;
186
187         pickup pencircle scaled thinness;
188         rt x2 = w;
189         lft x5 = -b;
190         bot y5 = 0;
191         top y3 = h;
192         y1 = y2 = y5;
193
194         x3 =0;
195         z1 - z4 = whatever * (charwd, -charht);
196         z4 = fat_factor [z3, z5];
197
198         filldraw z1 -- z2 -- z3 -- z4 -- cycle;
199         draw z3 .. z5;
200 enddef;
201
202 fet_beginchar("marcato up", "umarcato", "umarcato")
203         draw_marcato;
204         labels(1,2,3,4,5);
205 fet_endchar;
206
207
208 %
209 % The down marcato char (not very much used). 
210 % Contrary to what some MF/TeX `gurus' believe
211 % it is *point*-symmetric with the "up" version
212 fet_beginchar("marcato down", "dmarcato", "dmarcato")
213         draw_marcato;
214         xy_mirror_char;
215 fet_endchar;
216  
217
218 %
219 % used in french horn music todo
220 %
221 % TODO: too light at 20pt
222 fet_beginchar("open (unstopped)", "open", "ouvert")
223         save thin, height, width, thick;
224         height# = 5/4 width#;
225         height# = staff_space#;
226         thin = 1.2 stafflinethickness;
227         thick =  1.4 thin;
228         set_char_box(width#/2, width#/2, height#/2, height#/2);
229         
230         penpos1(thick, 0);
231         penpos2(thin, 90);
232         z1r = (w, 0);
233         z2r = (0, h);
234         penlabels(1,2);
235         penstroke z1e{up} .. {left}z2e;
236         addto currentpicture also currentpicture xscaled -1;
237         addto currentpicture also currentpicture yscaled -1;
238 fet_endchar;
239
240
241 fet_beginchar("plus (stopped)", "stopped", "plusstop")
242         save thick, size;
243         thick = 2 stafflinethickness;
244         size# = 1.1 staff_space#;
245
246         set_char_box(size#/2, size#/2, size#/2, size#/2);
247         pickup pencircle scaled thick;
248
249         rt x1 = w;
250         y1 = 0;
251         z2 = -z1;
252
253         draw z1 .. z2;
254         draw (z1 .. z2) rotated 90;
255 fet_endchar;
256
257 %
258 % FIXME: blotting 
259 %
260 fet_beginchar("Upbow", "upbow", "upbow")
261         save ht, wd, thick;
262
263         thick = 1.4 stafflinethickness;
264         wd# = 1.3 staff_space#;
265         ht# = 1.6 wd#; 
266
267         
268         set_char_box(wd#/2, wd#/2, 0, ht#);
269         pickup pencircle scaled thick;
270
271         x1 = 0;
272         bot y1 = 0;
273         rt x2 =  w;
274         top y2 = h;
275
276         labels(1,2);
277         draw z2 -- z1 -- (z2 xscaled -1);
278 fet_endchar;
279
280
281 fet_beginchar("Downbow", "downbow", "downbow")
282         save stemthick, beamheight;
283         save wd;
284         define_pixels(wd)
285
286         wd# = 1.5 staff_space#;
287         stemthick = 1.2 stafflinethickness;
288
289         set_char_box(wd#/2, wd#/2, 0, 4/3 staff_space#);
290
291         beamheight = 4/10 h;
292
293
294         pickup pencircle scaled blot_diameter;
295         top y2 - bot y1  = beamheight;
296         top y2 = h;
297         rt x1 = w;
298         x1 = x2;
299         y2 = y3;
300         y1 = y4;
301         x3 = 0;
302         x4 = x3;
303         save p;
304         path p;
305         filldraw z1 -- z2 -- z3 -- z4 --cycle;
306
307         pickup pencircle scaled stemthick;
308
309         bot y5 =0;
310         rt x5 = rt x6 = w;
311         y6 = h - beamheight;
312         draw z6 -- z5;
313         labels(1, 2,3,4,5,6);
314         addto currentpicture also currentpicture xscaled -1;
315 fet_endchar;
316
317 %
318 % Inspired by a computer-set version of Auf dem Strom by Baerenreiter. 
319 %
320
321 def draw_turn =
322         save thin, thick, ball_diam, darkness;
323         save wd, ht, thick_nibangle, ball_nib_thick;
324         save turndir;
325         pair turndir;
326
327         wd# = 35/16 staff_space#;
328         ht# = 18/17 staff_space#;
329         darkness = 1.20 stafflinethickness;
330
331         set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);       
332
333         thick_nibangle = 60;
334         thick = 3 darkness;
335         thin = darkness;
336         ball_nib_thick = 2.7 darkness;
337         ball_diam = ball_nib_thick + (h - ball_nib_thick) / 10;
338
339         
340         x3l = w;
341         y3 = 0;
342         y4l = h;
343         x4 = x2;
344         x2l = w/2;
345         y2l = -d;
346         z1 = (0,0);
347
348         penpos1(1.1 thick, thick_nibangle);
349         penpos2(thick, thick_nibangle);
350         penpos3(thin, 180);
351         penpos4(ball_nib_thick, -90);
352
353         path swoosh, ploop;
354         swoosh :=  z1l{curl 0} .. z2l .. z3l{up} .. {left}z4l 
355           -- z4r .. z3r{down} .. z2r{left} ;
356         fill swoosh .. (swoosh scaled -1) .. cycle;
357
358         x5r = x4;
359         y5r = y4l - ball_diam /2;
360         z6r = z5r;
361
362         penpos5(1.6 ball_diam/2, 10);
363         penpos6(ball_diam/2, 150);
364
365         ploop := z4l{left} .. z5l .. z6l -- cycle;
366         fill ploop;
367         fill ploop scaled -1;
368
369
370 enddef;
371
372 fet_beginchar("Reverse turn","reverseturn","reverseturn")
373         draw_turn;
374         currentpicture := currentpicture yscaled -1;
375         penlabels(5,6,7);
376         penlabels(2,3,4);
377 fet_endchar;
378
379
380 fet_beginchar("Turn","turn","turn")
381         draw_turn;
382                 
383         penlabels(5,6,7);
384         penlabels(1,2,3,4);
385 fet_endchar;
386
387
388
389 %
390 % Inspired by a (by now) PD edition of Durand & C'ie edition of 
391 % Saint-Saens' Celloconcerto no. 1 
392 %
393 % FIXME take out hardcoded vars.
394 % FIXME the two loops on the `t' should be smoother (and the left one bigger).
395 % FIXME generic macros for serifs: top of the t and bottom of r
396 %
397
398
399 fet_beginchar("Trill (`tr')","trill","trill")
400         
401         save start_nib_angle,  ascender_extra, ex, hair_thick, fatness,
402           slant_angle, slant, t_fatness, r_fatness, kerning, t_overshoot, 
403           uitschieter, bulb_size;
404         ;
405         pair slant_vec;
406
407         ascender_extra# = 1/2 ex#;
408         ascender# = ascender_extra# + ex#;
409         ex# = 1.5 staff_space#;
410         kerning# = .75 ex#;
411         start_nib_angle = 20;
412         bulb_size = 0.47;
413         define_pixels(ex, ascender_extra, ascender, kerning);
414
415         t_overshoot = 0.03 ex;
416         fatness = 12/40 ex;
417         t_fatness = 8/10 fatness;
418         r_fatness = .75 fatness;
419         uitschieter = 21/40 ex;
420         hair_thick =  blot_diameter;
421
422         slant = .2;
423
424         local_copy(transform)(currenttransform);
425         currenttransform := currenttransform slanted slant shifted (- staff_space, 0)  ;
426
427         y1 = ascender;
428         x1l = 0;
429         x1r = t_fatness;
430         penpos1(start_nib_wid, start_nib_angle);
431         
432         z2 = (x1, 7/18 ex);
433         penpos2(start_nib_wid, start_nib_angle);
434
435         z3l = (11/10 t_fatness, - t_overshoot);
436
437         z4l = (13/6 t_fatness, 5/16 ex);
438         penpos4(hair_thick, 180);
439
440         1.9 [z3l, z3r] = z4r;
441         z3 = .5 [z3l, z3r];
442         
443         save t_p, krul_p;
444         path t_p, krul_p, r_p;
445
446
447         t_p := z1l -- z2l{down} .. tension (1 + .5 slant)
448                 .. z3l{right} 
449                 
450                 .. z4l{up} -- z4r{down} 
451                 .. z3r{left} .. z2r{up} .. z1r -- cycle;
452         fill t_p ;
453
454         krul_ang = 32;
455
456         pickup pencircle scaled hair_thick;
457
458         z5 = (t_fatness/2, 2/3 ex);
459         
460         lft x6 = - uitschieter;
461         y6 =  y5 - 1/20 ex;
462
463         z7 = z5 + whatever*dir krul_ang;
464         up_angle = krul_ang;
465         % angle (z7-z5)
466         x7 = 5/10 kerning + x5;
467         
468         penpos7(hair_thick, up_angle + 90);
469
470         
471         x8l = .7 [x9r, x7r];
472         y8l = y7l;
473         penpos8(2 hair_thick, (up_angle +90)/2);
474
475         y9 = 3/4 ex;
476         x9 = x1 + kerning;
477         penpos9(r_fatness, 0);
478
479         x10 = x9;
480         y10 = 0;
481         penpos10(r_fatness, 0);
482
483         krul_p := z4{up} .. tension 1.1  .. z5 
484                 .. tension 1 and .75 .. {down}z6
485                 .. tension .85 and 1.1 .. z5 --- z7;
486         draw krul_p;
487         r_p := z7l{z7-z5} .. z8l{right} .. z9l{down} --- z10l -- z10r
488                 --- z9r{up} 
489                 ..  z8r{left} ..  z7r{z5-z7} -- cycle;
490         fill r_p;
491         set_char_box(staff_space# , staff_space#, 0,ascender#);
492
493
494         penpos11(1/4 r_fatness, -20);
495         z11r = z9r;
496         
497         z13 = (x9 + 2 r_fatness, y11 );
498         penpos13(r_fatness, 180);
499         fill z11r{dir 70} .. z13r{down} -- z13l{up} .. z11l{dir 250} -- cycle;
500         penlabels(range 1 thru 15);
501
502
503         draw_bulb(-1, z13r, z13l, bulb_size * r_fatness, 1.5);
504 fet_endchar;
505
506
507 def draw_heel =
508         save radius, thickness, wall;
509
510         radius# := .5 staff_space#;
511
512         define_pixels(radius);
513         set_char_box(radius#, radius#, radius#, 2/3 staff_space#);
514
515         thickness := 1.5 stafflinethickness;    
516         pickup pencircle scaled thickness;
517         rt x1 = b;
518         top y1 = h;
519         
520         x2 =x1;
521         y2 = 0;
522
523         x3 = 0;
524         bot y3 = -d;
525
526         draw z1{down} .. z2{down} .. z3{left};
527         addto currentpicture also currentpicture xscaled -1;
528         
529 enddef;
530
531
532 fet_beginchar("left heel", "upedalheel", "upedalheel")
533         draw_heel;
534         labels(1,2,3);
535 fet_endchar;
536
537 fet_beginchar("right heel", "dpedalheel", "dpedalheel")
538         draw_heel;
539         y_mirror_char;
540 fet_endchar;
541
542 def draw_toe =
543         save ht,wd;
544
545         thickness := 1.5 stafflinethickness;
546         ht# := 1.5 staff_space#;
547         wd# := 1/3 ht#;
548         define_pixels(ht,wd);
549
550
551         set_char_box(wd#, wd#, 0, ht#);
552         
553         pickup pencircle scaled thickness;
554         lft x1 = -b;
555         bot y1 = 0;
556         x2 =0;
557         top y2 = h;
558         z3 = z1 xscaled -1;
559
560
561         draw z1 -- z2 -- z3;
562
563 enddef;
564         
565 fet_beginchar("left toe", "upedaltoe", "upedaltoe")
566         draw_toe;
567         labels(1,2,3);
568 fet_endchar;
569 fet_beginchar("right toe", "dpedaltoe", "dpedaltoe")
570         draw_toe;
571         y_mirror_char;
572 fet_endchar;
573
574 fet_beginchar("Flageolet", "flageolet", "flageolet")
575         save height,width,thickness;
576         height#=4/15 staffsize#;
577         width#=height#;
578         thickness#=blot_diameter#;
579         define_pixels(height,width,thickness);
580         set_char_box(width#/2,width#/2,height#/2,height#/2);
581         
582         pickup pencircle scaled thickness;
583         x1= .5 [x2, x4];
584         x1 = 0;
585         top y1=height/2;
586         rt x4  - lft x2 =width; 
587         y2 = 0;
588         y4=y2;
589         x3=x1;
590         bot y3=-height/2;
591
592         penlabels(1,2,3,4);
593         draw z1..z2..z3..z4..cycle;
594 fet_endchar;
595
596 fet_beginchar("Segno", "segno", "segno")
597         save thin, thick, ball_diam, darkness, pointheight;
598         save wd, ht, thick_nibangle, ball_nib_thick;
599         save turndir;
600         pair turndir;
601
602         ht# = 3 staff_space#;
603         wd# = 2 staff_space#;
604         darkness = 1.20 stafflinethickness;
605
606         set_char_box(wd#/2, wd#/2, ht#/2, ht#/2);       
607
608         thick_nibangle = 30;
609         thick = 3 darkness;
610         thin = darkness;
611         ball_nib_thick = 2.7 darkness;
612         ball_diam = ball_nib_thick + (w - ball_nib_thick) / 10;
613         pointheight = 2 stafflinethickness;
614         
615         y3l = h;
616         2 x3 = x2 + x4;
617         x4 = 0;
618         y4 = y2;
619         y2l = .6 h;
620         x2l = -b;
621         z1 = (0,0);
622
623         penpos1(thick, 2 thick_nibangle);
624         penpos2(thick, thick_nibangle);
625         penpos3(thin, -90);
626         penpos4(ball_nib_thick, 180-thick_nibangle);
627
628         path swoosh, ploop;
629         swoosh :=  z1l{curl 0} .. z2l .. z3l{right} .. {down}z4l 
630           -- z4r .. z3r{left} .. z2r{down} ;
631         fill swoosh .. (swoosh scaled -1) .. cycle;
632         penlabels(1,2,3,4);
633
634         y5r = y4;
635         x5r = x4l - ball_diam /2;
636         z6r = z5r;
637
638         penpos5(1.6 ball_diam/2, 100);
639         penpos6(ball_diam/2, 240);
640
641         ploop := z4l{down} .. z5l .. z6l -- cycle;
642         fill ploop;
643         fill ploop scaled -1;
644         penlabels(4,5,6);
645
646         penpos7(2 thin,0);
647         z7l=(-b,-d);
648         penpos8(2 thin,0);
649         z8r=(w,h);
650         filldraw z7l--z8l{right}--z8r{down}--z7r{right}--cycle;
651         pickup pencircle scaled 2 thin;
652         draw (-x2r,pointheight);
653         draw (x2r,-pointheight);
654 fet_endchar;
655
656 fet_beginchar("Coda", "coda", "coda")
657         save thin, thick, codawidth, codaheight;
658         thin# = 1.2 stafflinethickness#;
659         thick# = 3.5 stafflinethickness#;
660         codawidth# = 2/3 staff_space#;
661         codaheight# = 1 staff_space#;
662         define_pixels(thin, thick, codawidth, codaheight);
663
664         set_char_box(codawidth#+thick#, codawidth#+thick#,
665                 codaheight#+thick#, codaheight#+thick#);
666
667         penpos1(thick,0);
668         penpos2(thin,-90);
669         penpos3(thick,180);
670         x1l=-codawidth;
671         y2l=codaheight;
672         y1=0;
673         x2=0;
674         z3 = - z1;
675         penlabels(1,2,3);
676
677         path halfcoda;
678         halfcoda := z1l{up} .. z2l{right} .. z3l{down} -- 
679                 z3r{up} .. z2r{left} .. z1r{down} .. cycle;
680         fill halfcoda;
681         fill (halfcoda scaled -1);
682
683         pickup pencircle scaled thin;
684         draw (0,-h) -- (0,h);
685         draw (-w,0) -- (w,0);
686
687 fet_endchar;
688
689 def draw_comma = 
690         save alpha, thick, thin, ht;
691         alpha:=35;
692         thin# = 1.2 stafflinethickness#;
693         thick# = 3 stafflinethickness#;
694         ht# = .6staff_space#;
695         define_pixels(thin, thick,ht);
696         set_char_box(0, .5staff_space#, ht#, ht#);
697
698         penpos1(thick, alpha);
699         penpos2(thick, alpha+90);
700         penpos3(thin, 180-alpha);
701         penpos4(thin, 90-alpha);
702         x3r=0;
703         x1l=x3l;
704         y2r=-y4l=h;
705         z1=z2;
706         z3=z4;
707         penlabels(1,2,3,4);
708         fill z1l{dir (alpha+90)} .. z2r{dir alpha} .. z1r{dir (alpha-90)} .. 
709         z3l{dir (270-alpha)} .. z4l{dir (alpha+180)} .. 
710         z3r{dir (90-alpha)} .. cycle;
711 enddef;
712
713 fet_beginchar("Right Comma","rcomma","rcomma");
714         draw_comma;
715 fet_endchar;
716
717 fet_beginchar("Left Comma","lcomma","lcomma");
718         draw_comma;
719         xy_mirror_char;
720 fet_endchar;
721
722 thick#:=1/24designsize;
723 define_blacker_pixels(thick);
724
725 rthin:=1/8*staff_space;
726 rthick:=2thick+rthin;
727
728 def draw_arpeggio =
729         save alpha;
730         alpha:=-40;
731         save ne,nw,se,sw; pair ne,nw,se,sw;
732         save x,y;
733         
734         se=dir alpha; nw=dir (alpha+180);
735         ne=dir (alpha+90); sw=dir (alpha-90);
736         penpos1(rthin,alpha+90);
737         penpos2(5/4rthick,alpha);
738         penpos4(5/4rthick,alpha);
739         penpos5(rthin,alpha+90);
740         penpos3(3/4rthick,alpha);
741
742         z1=(width/2, height) - overshoot*se;
743         z2=2[z4,(width/2,height/2)];
744         z3=1/2[z2,z4];
745         x4=2/8staff_space;
746         y4=rthin;
747
748         z5=2[z1,(width/2,height/2)];
749         z6=z2l+1/2rthin*sw;
750         z7=z4l+1/2rthin*sw+1/2rthin*se;
751         z8=2[z6,(width/2,height/2)];
752         z9=2[z7,(width/2,height/2)];
753         
754         fill z1l{se}..{se}z6..z3l..z7{se}..{se}z5l..z5r{nw}..{nw}z8..z3r..z9{nw}..{nw}z1r.. cycle;
755         penlabels(1,2,3,4,5,6,7,8,9);
756         enddef;
757
758 fet_beginchar("Arpeggio","arpeggio","arpeggio");
759         %draw_staff (-2, 2, 0.0);       
760         save height, overshoot, width;
761         height# = staff_space#;
762         width# = 0.8height#;
763         overshoot# = 0.25 staff_space#;
764         define_pixels (height,overshoot,width);
765         set_char_box(0, width#, 0, height#);
766         draw_arpeggio;
767         fet_endchar;
768
769 % Extendable Trill symbol.
770 % Not yet used
771 % Rename me to Trill, rename Trill to Tr?
772 fet_beginchar("Trill-element","trill-element","trill-element");
773         save height, overshoot;
774         height# = staff_space#;
775         width# = 0.8height#;
776         overshoot# = 0.25 staff_space#;
777         define_pixels (height,overshoot,width);
778         set_char_box(0, height#, 0, width#);
779         draw_arpeggio;
780         currentpicture := currentpicture shifted -(width/2, height/2);
781         currentpicture := currentpicture rotated 90;
782         currentpicture := currentpicture shifted (height/2, width/2);
783         fet_endchar;
784
785 % Hmm
786 input feta-slag;
787
788 fet_endgroup("scripts");
789