1
1
% -*- Fundamental -*- (emacs-20 mf mode mucks
2
2
% feta-schrift.mf -- implement scripts
4
4
% source file of the Feta (defintively not an abbreviation for Font-En-Tja)
7
% (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7
% (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
8
8
% Jan Nieuwenhuizen <janneke@gnu.org>
12
fet_begingroup("scripts")
12
fet_begingroup ("scripts");
15
save alpha, radius, crook_thinness, crook_fatness, dot_radius;
17
% [Wanske] and some Baerenreiter editions
18
% suggest ca 80 degrees iso half-circle
21
radius# = 1.25 staff_space#;
22
crook_thinness# = 1.5linethickness#;
23
crook_fatness# = 0.25 staff_space# + 1.5 linethickness#;
25
radius# + crook_fatness#/2 = h#;
26
radius# + crook_thinness#/2 = w#;
27
set_char_box(w#, w#, crook_thinness#/2, h#);
29
define_pixels(radius, crook_thinness, crook_fatness);
30
dot_radius = round (4/6 crook_fatness);
33
penpos1(crook_thinness, 0);
34
penpos2(crook_fatness, -90);
38
fill z1l{dir (-alpha-90)}..{dir (90-alpha)}z1r..
39
{right}z2r -- z2l{left} .. cycle;
41
addto currentpicture also
42
currentpicture xscaled -1;
44
pickup pencircle scaled 2dot_radius;
46
bot y4 = - crook_thinness/2;
15
save alpha, radius, crook_thinness, crook_fatness, dot_size;
19
% [Wanske] and some Baerenreiter editions
20
% suggest about 80 degrees instead of a half-circle
23
radius# = 1.25 staff_space#;
24
crook_thinness# = 1.5 linethickness#;
25
crook_fatness# = 0.25 staff_space# + 1.5 linethickness#;
27
radius# + crook_fatness# / 2 = h#;
28
radius# + crook_thinness# / 2 = w#;
30
set_char_box (w#, w#, crook_thinness# / 2, h#);
32
define_pixels (radius, crook_thinness, crook_fatness);
34
dot_size# = 8/6 crook_fatness#;
35
define_whole_blacker_pixels (dot_size);
37
penpos1 (crook_thinness, 0);
38
penpos2 (crook_fatness, -90);
43
.. z1l{dir (-alpha - 90)}
44
.. {dir (90 - alpha)}z1r
47
-- reverse pat xscaled -1 shifted (-feta_eps, 0)
51
pickup pencircle scaled dot_size;
53
bot y4 = vround (-crook_thinness / 2);
50
fet_beginchar("fermata up", "ufermata", "ufermata")
58
fet_beginchar ("fermata up", "ufermata");
55
fet_beginchar("fermata down", "dfermata", "dfermata")
64
fet_beginchar ("fermata down", "dfermata");
60
70
def draw_short_fermata =
61
save fat_factor, thinness, dot_radius;
62
set_char_box(staff_space#, staff_space#, 0, 2.2 staff_space#);
64
dot_radius# = 0.133 staff_space# + 1.33 linethickness#;
65
define_pixels(dot_radius)
71
save fat_factor, thinness, dot_size;
72
save left_dist, right_dist, se, ne;
73
pair left_dist, right_dist, se, ne;
75
set_char_box (staff_space#, staff_space#, 0, 2.2 staff_space#);
77
dot_size# = 0.266 staff_space# + 2.666 linethickness#;
78
define_whole_blacker_pixels (dot_size);
68
81
thinness = 1.5 linethickness;
70
83
pickup pencircle scaled thinness;
78
92
z1 - z4 = whatever * (charwd, -charht);
79
93
z4 = fat_factor [z3, z5];
81
filldraw z1 -- z2 -- z3 -- z4 -- cycle;
84
pickup pencircle scaled 2dot_radius;
95
ne = unitvector (z3 - z5);
96
se = unitvector (z2 - z3);
98
left_dist = (ne rotated 90) * 0.5 thinness;
99
right_dist = (se rotated 90) * 0.5 thinness;
102
.. (z5 - left_dist){ne}
103
-- (((z5 - left_dist) -- (z3 - left_dist)) intersectionpoint
104
((z1 - right_dist) -- (z4 - right_dist)))
105
-- (z1 - right_dist){se}
108
.. (z2 + right_dist){-se}
109
-- (z3 + right_dist){-se}
111
.. (z3 + left_dist){-ne}
112
-- (z5 + left_dist){-ne}
115
pickup pencircle scaled dot_size;
90
fet_beginchar("short fermata up", "ushortfermata", "ushortfermata")
123
fet_beginchar ("short fermata up", "ushortfermata");
125
labels (1, 2, 3, 4, 5, 6);
94
fet_beginchar("short fermata down", "dshortfermata", "dshortfermata")
129
fet_beginchar ("short fermata down", "dshortfermata");
95
130
draw_short_fermata;
99
135
def draw_long_fermata =
100
save stemthick, beamheight, dot_radius, wd;
101
define_pixels(wd, dot_radius)
136
save stemthick, beamheight, dot_size, wd;
103
140
wd# = 2.5 staff_space#;
104
stemthick = 1.5 linethickness;
105
beamheight = 0.3 staff_space+ linethickness;
106
dot_radius# = 0.133 staff_space#+ + 1.333 *linethickness#;
107
set_char_box(wd#/2, wd#/2, 0, 3/2 staff_space#);
109
draw_rounded_block((-b, h-beamheight), (w, h), blot_diameter);
110
draw_rounded_block((-b, -d),(-b+stemthick, h-stemthick), stemthick);
111
addto currentpicture also currentpicture xscaled -1;
113
pickup pencircle scaled 2dot_radius;
141
stemthick = hround (1.5 linethickness);
142
beamheight = 0.3 staff_space + linethickness;
143
dot_size# = 0.266 staff_space# + 2.666 * linethickness#;
145
define_whole_blacker_pixels (dot_size);
147
set_char_box (wd# / 2, wd# / 2, 0, 3/2 staff_space#);
149
pickup pencircle scaled blot_diameter;
157
pickup pencircle scaled stemthick;
170
-- reverse pat xscaled -1 shifted (-feta_eps, 0)
175
pickup pencircle scaled dot_size;
119
fet_beginchar("long fermata up", "ulongfermata", "ulongfermata")
184
fet_beginchar ("long fermata up", "ulongfermata");
123
fet_beginchar("long fermata down", "dlongfermata", "dlongfermata")
190
fet_beginchar ("long fermata down", "dlongfermata");
124
191
draw_long_fermata;
128
196
def draw_very_long_fermata =
129
197
save ibeamheight, obeamheight;
130
save ihwd, ohwd, iht, oht; % inner/outer half_width/height
131
save stemthick, dot_radius;
132
define_pixels(ihwd, ohwd, iht, oht)
198
save ihwd, ohwd, iht, oht; % inner/outer half_width/height
199
save stemthick, dot_size;
134
203
ihwd# = 1.0 staff_space#;
135
204
ohwd# = 1.5 staff_space#;
136
205
iht# = 0.9 staff_space#;
137
206
oht# = 1.6 staff_space#;
139
stemthick = 1.5 linethickness;
140
ibeamheight = 0.3 staff_space;
141
obeamheight = 0.5 staff_space;
142
dot_radius = ((iht - ibeamheight) * 4/10) ;
144
set_char_box(ohwd#, ohwd#, 0, oht#);
146
draw_rounded_block((-ohwd, oht-obeamheight), (ohwd, oht), blot_diameter);
147
draw_rounded_block((-ohwd, 0),(-ohwd+stemthick, ohwd-stemthick), stemthick);
148
draw_rounded_block((-ihwd, iht-ibeamheight), (ihwd, iht), blot_diameter);
149
draw_rounded_block((-ihwd, 0),(-ihwd+stemthick, ihwd-stemthick), stemthick);
150
addto currentpicture also currentpicture xscaled -1;
152
pickup pencircle scaled 2dot_radius;
207
define_pixels (ihwd, ohwd, iht, oht)
209
stemthick = hround (1.5 linethickness);
210
ibeamheight# = 0.3 staff_space#;
211
obeamheight# = 0.5 staff_space#;
212
define_pixels (ibeamheight, obeamheight);
214
dot_size# = (iht# - ibeamheight#) * 8/10;
215
define_whole_blacker_pixels (dot_size);
217
set_char_box (ohwd#, ohwd#, 0, oht#);
219
pickup pencircle scaled blot_diameter;
228
ipat := top z11{left}
231
pickup pencircle scaled stemthick;
233
x2 = -ohwd + stemthick;
234
y2 = oht - obeamheight;
237
x12 = -ihwd + stemthick;
238
y12 = iht - ibeamheight;
248
-- reverse opat xscaled -1 shifted (-feta_eps, 0)
256
-- reverse ipat xscaled -1 shifted (-feta_eps, 0)
262
pickup pencircle scaled dot_size;
158
fet_beginchar("very long fermata up", "uverylongfermata", "uverylongfermata")
159
draw_very_long_fermata;
271
fet_beginchar ("very long fermata up", "uverylongfermata");
272
draw_very_long_fermata;
273
labels (1, 2, 3, 11, 12, 13, 4);
162
fet_beginchar("very long fermata down", "dverylongfermata", "dverylongfermata")
277
fet_beginchar ("very long fermata down", "dverylongfermata");
163
278
draw_very_long_fermata;
168
284
% Thumbs are used in cello music.
169
285
% TODO : thumbs should look like the finger-font and should be placed in
170
286
% the same way in the score.
173
fet_beginchar("Thumb", "thumb", "thumb")
174
save thin, height, width, thick;
175
height# = 5/4 width#;
176
height# = staff_space#;
177
set_char_box(width#/2, width#/2, height#/2, height#/2);
178
define_pixels (height,width)
180
thin = .6 linethickness + 0.06 staff_space;
289
fet_beginchar ("Thumb", "thumb");
290
save thin, height, width, thick, depth;
291
height# = 5/4 width#;
292
height# = staff_space#;
293
depth# = 1.6 (height# / 2);
295
set_char_box (width# / 2, width# / 2, depth#, height# / 2);
297
define_pixels (height, width);
299
thin = .6 linethickness + 0.06 staff_space;
181
300
2 thick + 0.5 (height - 2 thin) = width;
188
penstroke z1e{up} .. {left}z2e;
189
addto currentpicture also currentpicture xscaled -1;
190
addto currentpicture also currentpicture yscaled -1;
195
draw_brush(z3,1.4*thin, z4,0.9*thick);
304
penpos3 (thick, 180);
311
penlabels (1, 2, 3, 4);
320
y5 = -d + brush_thick / 2;
321
brush_thick = 0.9 thick;
326
draw_brush (z4r, 1.4 thin, z5, brush_thick);
199
% FIXME: rounded endings
201
331
% `\accent' is TeX reserved.
202
fet_beginchar("> accent", "sforzato", "sforzatoaccent")
203
set_char_box(.9 staff_space#, .9 staff_space#, .5 staff_space#, .5 staff_space#);
204
save thickness, diminish;
206
thickness = 0.05 staff_space + linethickness;
334
def draw_accent (expr bottom_left, top_right, thickness, diminish) =
336
thinning_start = 0.4;
207
337
pickup pencircle scaled thickness;
209
% prevent blobs at crossing lines
215
y2 = .25 thickness* diminish;
218
x3 = - linethickness + 0.1 staff_space;
339
lft x1 = xpart bottom_left;
340
top y1 = ypart top_right;
341
lft x6 = xpart bottom_left;
342
bot y6 = ypart bottom_left;
344
rt z4 = (xpart top_right, (ypart top_right + ypart bottom_left) / 2);
345
x5 = x3 = thinning_start [xpart top_right, xpart bottom_left]
346
- linethickness + 0.1 staff_space;
219
347
z3 = whatever [z1, z4];
221
penpos2(thickness*(2 - diminish)/2 , 90);
222
penpos1(thickness, 90);
223
penpos3(thickness, 90);
226
draw (z1 .. z3) yscaled -1;
228
penstroke z3e .. z2e;
229
penstroke (z3e .. z2e) yscaled -1;
235
fet_beginchar("staccato dot", "staccato", "staccato")
348
z5 = whatever [z6, z4];
350
penpos1 (thickness, angle (z3 - z1) + 90);
351
penpos3 (thickness, angle (z3 - z1) + 90);
352
penpos4 (thickness, 90);
353
penpos5 (thickness, angle (z6 - z5) + 90);
354
penpos6 (thickness, angle (z6 - z5) + 90);
356
x4 - x7 = diminish * thickness;
368
..tension 0.8.. rt z4
377
fet_beginchar ("> accent", "sforzato");
378
set_char_box (.9 staff_space#, .9 staff_space#,
379
.5 staff_space#, .5 staff_space#);
381
draw_accent ((-w, -d), (w, h),
382
0.05 staff_space + linethickness, 0.7);
383
penlabels (1, 3, 4, 5, 6);
388
fet_beginchar ("espr", "espr");
389
set_char_box (1.9 staff_space#, 1.9 staff_space#,
390
.5 staff_space#, .5 staff_space#);
392
draw_accent ((w - 1.78 staff_space, -d), (w, h),
393
0.05 staff_space + linethickness, 0.6);
394
addto currentpicture also currentpicture xscaled -1;
398
fet_beginchar ("staccato dot", "staccato");
237
radius# = 0.20 * staff_space#;
238
define_whole_pixels(radius);
400
radius# = 0.20 * staff_space#;
401
define_whole_pixels (radius);
239
403
pickup pencircle scaled 2 radius;
241
set_char_box(radius#, radius#, radius#, radius#);
406
set_char_box (radius#, radius#, radius#, radius#);
244
410
def draw_staccatissimo =
245
411
save radius, height;
246
412
height# = .8 staff_space#;
247
413
radius# = linethickness# + .1 staff_space#;
248
define_whole_pixels(radius);
249
define_pixels(height);
251
draw_brush((0,0), linethickness, (0, height),2 radius);
252
set_char_box(radius#,radius#, blot_diameter#/2, height# + radius#);
414
define_whole_blacker_pixels (radius);
415
define_pixels (height);
417
draw_brush ((0, 0), linethickness, (0, height), 2 radius);
419
set_char_box (radius#, radius#,
420
blot_diameter# / 2, height# + radius#);
255
fet_beginchar("staccatissimo/martellato up", "ustaccatissimo",
424
fet_beginchar ("staccatissimo/martellato up", "ustaccatissimo");
257
425
draw_staccatissimo;
260
fet_beginchar("staccatissimo/martellato down", "dstaccatissimo", "dstaccatissimo")
429
fet_beginchar ("staccatissimo/martellato down", "dstaccatissimo");
261
430
draw_staccatissimo;
265
fet_beginchar("portato/single tenuto", "tenuto", "tenuto")
435
fet_beginchar ("portato/single tenuto", "tenuto");
267
437
thick# = 1.6 linethickness#;
268
define_whole_pixels(thick);
270
set_char_box(.6 staff_space#, .6 staff_space#, thick#/2,thick#/2);
271
pickup pencircle scaled thick;
272
draw_rounded_block((-b,-thick/2),(w,thick/2),thick);
438
define_whole_blacker_pixels (thick);
440
set_char_box (.6 staff_space#, .6 staff_space#,
441
thick# / 2, thick# / 2);
443
draw_rounded_block ((-b, -thick / 2), (w, thick / 2), thick);
448
save thick, dot_size;
277
449
thick# = 1.4 linethickness#;
278
radius# = 1.2 linethickness# + 0.04 staff_space#;
279
define_whole_pixels(thick,radius);
281
set_char_box(.6 staff_space#, .6 staff_space#, thick#/2,.5 staff_space#+ radius#);
282
draw_rounded_block((-b,-thick/2),(w,thick/2),thick);
284
pickup pencircle scaled 2 radius;
450
dot_size# = 2.4 linethickness# + 0.08 staff_space#;
451
define_whole_blacker_pixels (thick, dot_size);
453
set_char_box (.6 staff_space#, .6 staff_space#,
454
thick# / 2, .5 staff_space# + .5 dot_size#);
456
draw_rounded_block ((-b, -thick / 2), (w, thick / 2), thick);
458
pickup pencircle scaled dot_size;
289
fet_beginchar("portato/tenuto with staccato", "uportato",
463
fet_beginchar ("portato/tenuto with staccato", "uportato");
295
fet_beginchar("portato/tenuto with staccato", "dportato",
468
fet_beginchar ("portato/tenuto with staccato", "dportato");
303
475
save fat_factor, thinness;
304
set_char_box(staff_space#/2, staff_space#/2, 0, 1.1 staff_space#);
476
save left_dist, right_dist, ne, se;
477
pair left_dist, right_dist, ne, se;
479
set_char_box (staff_space# / 2, staff_space# / 2,
480
0, 1.1 staff_space#);
307
thinness = linethickness;
483
thinness = linethickness;
309
485
pickup pencircle scaled thinness;
317
494
z1 - z4 = whatever * (charwd, -charht);
318
495
z4 = fat_factor [z3, z5];
320
filldraw z1 -- z2 -- z3 -- z4 -- cycle;
497
ne = unitvector (z3 - z5);
498
se = unitvector (z2 - z3);
500
left_dist = (ne rotated 90) * 0.5 thinness;
501
right_dist = (se rotated 90) * 0.5 thinness;
504
.. (z5 - left_dist){ne}
505
-- (((z5 - left_dist) -- (z3 - left_dist)) intersectionpoint
506
((z1 - right_dist) -- (z4 - right_dist)))
507
-- (z1 - right_dist){se}
510
.. (z2 + right_dist){-se}
511
-- (z3 + right_dist){-se}
513
.. (z3 + left_dist){-ne}
514
-- (z5 + left_dist){-ne}
324
fet_beginchar("marcato up", "umarcato", "umarcato")
519
fet_beginchar ("marcato up", "umarcato");
521
labels (1, 2, 3, 4, 5);
331
% The down marcato char (not very much used).
526
% The down marcato char (not very much used).
332
527
% Contrary to what some MF/TeX `gurus' believe
333
528
% it is *point*-symmetric with the "up" version
335
fet_beginchar("marcato down", "dmarcato", "dmarcato")
531
fet_beginchar ("marcato down", "dmarcato");
342
538
% used in french horn music todo
344
540
% TODO: too light at 20pt
345
fet_beginchar("open (unstopped)", "open", "ouvert")
543
fet_beginchar ("open (unstopped)", "open");
346
544
save thin, height, width, thick;
347
546
height# = 5/4 width#;
348
547
height# = staff_space#;
349
thin = .6 linethickness + 0.06 staff_space;
350
set_char_box(width#/2, width#/2, height#/2, height#/2);
351
define_pixels (width,height);
548
thin = .6 linethickness + 0.06 staff_space;
550
set_char_box (width# / 2, width# / 2, height# / 2, height# / 2);
552
define_pixels (width, height);
352
554
2 thick + 0.6 (height - 2 thin) = width;
558
penpos3 (thick, 180);
359
penstroke z1e{up} .. {left}z2e;
360
addto currentpicture also currentpicture xscaled -1;
361
addto currentpicture also currentpicture yscaled -1;
565
penlabels (1, 2, 3, 4);
365
fet_beginchar("plus (stopped)", "stopped", "plusstop")
367
thick = 2 linethickness;
575
fet_beginchar ("plus (stopped)", "stopped");
576
save hthick, vthick, size, outer_hsize, outer_vsize;
578
hthick# = vthick# = 2 linethickness#;
368
579
size# = 1.1 staff_space#;
370
set_char_box(size#/2, size#/2, size#/2, size#/2);
371
draw_rounded_block((-b,-thick/2),(w,thick/2),thick);
372
addto currentpicture also currentpicture rotated 90;
580
define_whole_blacker_pixels (vthick);
581
define_whole_vertical_blacker_pixels (hthick);
583
set_char_box (size# / 2, size# / 2, size# / 2, size# / 2);
585
outer_hsize = hround ((b + w - vthick) / 2);
586
outer_vsize = vround ((h + d - hthick) / 2);
587
w := b := (2 outer_hsize + vthick) / 2;
588
h := d := (2 outer_vsize + hthick) / 2;
590
draw_rounded_block ((-b, -d + outer_vsize),
591
(w, -d + outer_vsize + hthick), hthick);
592
draw_rounded_block ((-b + outer_hsize, -d),
593
(-b + outer_hsize + vthick, h), vthick);
377
% A vee with tapered insides to prevent visual blotting
380
def draw_vee (expr width, height, thickness) =
386
pickup pencircle scaled thickness;
393
z3 = whatever [z2, z1];
394
y3 = 0.6 [y2, y1] + thickness;
396
penpos3(thickness, 0);
397
penpos4(thickness * diminish, 0);
405
penstroke z3e .. z4e;
406
addto currentpicture also currentpicture xscaled -1;
410
fet_beginchar("Upbow", "upbow", "upbow")
411
save ht, wd, thick, diminish;
597
fet_beginchar ("Upbow", "upbow");
413
600
thick = 1.4 linethickness;
414
601
wd# = 1.3 staff_space#;
416
set_char_box(wd#/2, wd#/2, 0, ht#);
417
draw_vee (wd, ht, thick);
604
set_char_box (wd# / 2, wd# / 2, 0, ht#);
606
draw_accent ((-h, -w), (0, w), thick, 0.9);
607
currentpicture := currentpicture rotated -90;
421
fet_beginchar("Downbow", "downbow", "downbow")
422
save stemthick, beamheight;
611
fet_beginchar ("Downbow", "downbow");
612
save stemthick, beamheight, wd;
426
616
wd# = 1.5 staff_space#;
427
stemthick = 1.2 linethickness;
428
set_char_box(wd#/2, wd#/2, 0, 4/3 staff_space#);
619
stemthick = hround (1.2 linethickness);
621
set_char_box (wd# / 2, wd# / 2, 0, 4/3 staff_space#);
430
623
beamheight = 4/10 h;
432
draw_rounded_block((-b,h-beamheight),(w,h),blot_diameter);
433
draw_rounded_block((-b,-d),(-b+stemthick,h-stemthick),stemthick);
434
addto currentpicture also currentpicture xscaled -1;
625
pickup pencircle scaled blot_diameter;
633
pickup pencircle scaled stemthick;
646
-- reverse pat xscaled -1 shifted (-feta_eps, 0)
438
% Inspired by a computer-set version of Auf dem Strom by Baerenreiter.
655
% Inspired by a computer-set version of Auf dem Strom by Baerenreiter.
456
673
ball_nib_thick = 2.7 darkness;
457
674
ball_diam = ball_nib_thick + (h - ball_nib_thick) / 10;
468
penpos1(1.1 thick, thick_nibangle);
469
penpos2(thick, thick_nibangle);
471
penpos4(ball_nib_thick, -90);
684
penpos1 (1.1 thick, thick_nibangle);
685
penpos2 (thick, thick_nibangle);
687
penpos4 (ball_nib_thick, -90);
473
689
path swoosh, ploop;
474
swoosh := z1l{curl 0} .. z2l .. z3l{up} .. {left}z4l
475
-- z4r .. z3r{down} .. z2r{left} ;
476
fill swoosh .. (swoosh scaled -1) .. cycle;
690
swoosh := z1l{curl 0}
698
.. swoosh scaled -1 shifted (-feta_eps, -feta_eps)
479
y5r = y4l - ball_diam /2;
702
y5r = y4l - ball_diam / 2;
482
penpos5(1.6 ball_diam/2, 10);
483
penpos6(ball_diam/2, 150);
705
penpos5 (1.6 ball_diam / 2, 10);
706
penpos6 (ball_diam / 2, 150);
485
ploop := z4l{left} .. z5l .. z6l -- cycle;
487
fill ploop scaled -1;
713
fill ploop scaled -1 shifted (-feta_eps, -feta_eps);
492
fet_beginchar("Reverse turn","reverseturn","reverseturn")
717
fet_beginchar ("Reverse turn", "reverseturn");
494
719
currentpicture := currentpicture yscaled -1;
498
fet_beginchar("Turn","turn","turn")
723
fet_beginchar ("Turn", "turn");
500
penlabels(1,2,3,4,5,6,7);
725
penlabels (1, 2, 3, 4, 5, 6, 7);
506
% Inspired by a (by now) PD edition of Durand & C'ie edition of
507
% Saint-Saens' Celloconcerto no. 1
730
% Inspired by a (by now) PD edition of Durand & C'ie edition of
731
% Saint-Saens' Celloconcerto no. 1
509
733
% FIXME take out hardcoded vars.
510
734
% FIXME the two loops on the `t' should be smoother (and the left one bigger).
511
735
% FIXME generic macros for serifs: top of the t and bottom of r
515
fet_beginchar("Trill (`tr')","trill","trill")
517
save start_nib_angle, ascender_extra, ex, hair_thick, fatness,
518
slant_angle, slant, t_fatness, r_fatness, kerning, t_overshoot,
519
uitschieter, bulb_size;
738
fet_beginchar ("Trill (`tr')", "trill");
739
save start_nib_angle, ascender_extra, ex, hair_thick, fatness;
740
save slant, t_fatness, r_fatness, kerning, t_overshoot;
741
save uitschieter, bulb_size, krul_ang;
523
744
ascender_extra# = 1/2 ex#;
524
745
ascender# = ascender_extra# + ex#;
525
746
ex# = 1.4 staff_space#;
527
748
start_nib_angle = 20;
529
define_pixels(ex, ascender_extra, ascender, kerning);
750
define_pixels (ex, ascender_extra, ascender, kerning);
531
752
t_overshoot = 0.03 ex;
532
753
fatness = 12/40 ex;
552
774
x1l = 0.2 staff_space;
553
775
x1r - x1l = t_fatness;
554
penpos1(start_nib_wid, start_nib_angle);
776
penpos1 (start_nib_wid, start_nib_angle);
556
778
z2 = (x1, 7/18 ex);
557
penpos2(start_nib_wid, start_nib_angle);
779
penpos2 (start_nib_wid, start_nib_angle);
559
781
z3l = (x2l + 0.5 t_width, - t_overshoot);
561
783
z4l = (x2l + t_width, 0.23 ex);
562
penpos4(whatever, 200);
784
penpos4 (whatever, 180); % 200
563
785
x4l - x4r = hair_thick;
565
787
x3r = 0.5 [x4r, x2r];
566
788
% 1.7 [x3l, x3r] = x4r;
567
789
y3r - y3l = 0.6 t_fatness;
571
path t_p, krul_p, r_p;
573
z5 = (x2l + t_fatness/2, 2/3 ex);
574
% penpos5(hair_thick, );
576
t_p := z1r{dir (angle(z1l-z1r) + 30)} .. z1l{-dir (angle(z1r-z1l) - 45)}
578
.. tension (1 + .5 slant)
581
.. z4l{up} -- z4r{down}
583
.. tension (1.5 + .7 slant)
584
.. z2r{up} .. z1r -- cycle;
589
796
pickup pencircle scaled hair_thick;
798
z5 = (x2l + t_fatness / 2, 2/3 ex);
591
799
lft x6 = x2l - uitschieter;
592
y6 = y5 ; % - 1/20 ex;
594
z7 = z5 + whatever*dir krul_ang;
800
y6 = y5; % - 1/20 ex;
801
z7 = z5 + whatever * dir krul_ang;
802
up_angle = krul_ang; % = angle (z7-z5)
597
803
x7 = 5/10 kerning + x5;
599
penpos7(hair_thick, up_angle + 90);
811
z4' = point 0.85 of krul_p;
812
penpos4' (hair_thick, angle (direction 0.85 of krul_p) + 90);
814
% the body of the `t' and the bottom loop
815
fill z1r{dir (angle (z1l - z1r) + 30)}
816
.. z1l{-dir (angle (z1r - z1l) - 45)}
818
..tension (1 + .5 slant).. z3l{right}
820
.. z4'l{direction 0.85 of krul_p}
821
-- z4'r{-direction 0.85 of krul_p}
824
..tension (1.5 + .7 slant).. z2r{up}
827
z5' = point 1.1 of krul_p;
828
penpos5' (hair_thick, angle (direction 1.1 of krul_p) + 90);
829
z5'' = point 1.5 of krul_p;
830
penpos5'' (hair_thick, angle (direction 1.5 of krul_p) + 90);
831
z5''' = point 1.8 of krul_p;
832
penpos5''' (hair_thick, angle (direction 1.8 of krul_p) + 90);
833
z6 = point 2 of krul_p;
834
penpos6 (hair_thick, angle (direction 2 of krul_p) + 90);
835
z6' = point 2.3 of krul_p;
836
penpos6' (hair_thick, angle (direction 2.3 of krul_p) + 90);
837
z6'' = point 2.6 of krul_p;
838
penpos6'' (hair_thick, angle (direction 2.6 of krul_p) + 90);
839
z6''' = point 2.9 of krul_p;
840
penpos6''' (hair_thick, angle (direction 2.9 of krul_p) + 90);
841
penpos7 (hair_thick, up_angle + 90);
842
z7' = point 3.2 of krul_p;
843
penpos7' (hair_thick, angle (direction 3.2 of krul_p) + 90);
846
penstroke z5'e{direction 1.1 of krul_p}
847
.. z5''e{direction 1.5 of krul_p}
848
.. z5'''e{direction 1.8 of krul_p}
849
.. z6e{direction 2 of krul_p}
850
.. z6'e{direction 2.3 of krul_p}
851
.. z6''e{direction 2.6 of krul_p}
852
.. {direction 2.9 of krul_p}z6'''e;
603
855
x9 = x1 + kerning;
604
penpos9(r_fatness, 0);
856
penpos9 (r_fatness, 0);
607
y10 = -0.3 linethickness;
608
penpos10(r_fatness, 0);
616
r_p := z7l{z7-z5} .. z9l{down} --- simple_serif (z10l, z10r, -30)
618
.. z7r{z5-z7} -- cycle;
621
set_char_box(.85 staff_space# , .85 staff_space#, 0,ascender#);
624
penpos11(hair_thick, -4);
859
y10 = -0.3 linethickness;
860
penpos10 (r_fatness, 0);
862
penpos11 (hair_thick, -4);
627
z13l = (x9l + r_width, y11 - linethickness );
628
penpos13(r_flare, 180);
630
z15 = z13r - ( bulb_size * r_fatness,0);
631
z14 = 0.5 [z13l, z15] - (0,bulb_size* r_fatness);
632
z16 = 0.5 [z13l, z15] + (0,bulb_size* r_fatness);
635
fill z11r{up} .. tension 0.94 .. z13r{down} -- z15{down}
636
.. tension 1.0 .. z13l{up}
637
.. z11l{down} -- cycle;
639
fill z15{up} .. tension 1.06 .. z13l{down} .. z14 .. cycle;
643
penlabels(range 1 thru 15);
865
z13l = (x9l + r_width, y11 - linethickness);
866
penpos13 (r_flare, 180);
868
z15 = z13r - (bulb_size * r_fatness, 0);
869
z14 = 0.5 [z13l, z15] - (0, bulb_size * r_fatness);
878
(u, v) = before intersectiontimes after;
880
save before_bulb, after_bulb;
881
path before_bulb, after_bulb;
882
before_bulb := z9r{up}
883
..tension 0.94.. z13r{down};
884
after_bulb := z13l{up}
885
..tension 1.06.. z15{down};
886
(u_bulb, v_bulb) = before_bulb intersectiontimes after_bulb;
888
% the connection between `t' and `r', the body of the `r',
893
-- simple_serif (z10l, z10r, -30)
895
.. subpath (0, u_bulb) of before_bulb
896
.. subpath (v_bulb, infinity) of after_bulb
899
.. subpath (0, u) of before
900
.. subpath (v, infinity) of after
903
penlabels (range 1 thru 15);
904
penlabels (4', 5', 5'', 5''', 6', 6'', 6''', 7');
649
save radius, thickness, wall;
909
save radius, thickness;
651
913
radius# := .5 staff_space#;
653
define_pixels(radius);
654
set_char_box(radius#, radius#, radius#, 2/3 staff_space#);
656
thickness := 1.5 linethickness;
915
set_char_box (radius#, radius#, radius#, 2/3 staff_space#);
917
thickness := hround (1.5 linethickness);
657
919
pickup pencircle scaled thickness;
667
draw z1{down} .. z2{down} .. z3{left};
668
addto currentpicture also currentpicture xscaled -1;
938
-- reverse pat xscaled -1 shifted (-feta_eps, 0)
673
fet_beginchar("left heel", "upedalheel", "upedalheel")
944
fet_beginchar ("left heel", "upedalheel");
678
fet_beginchar("right heel", "dpedalheel", "dpedalheel")
950
fet_beginchar ("right heel", "dpedalheel");
957
save ht, wd, thickness;
686
959
thickness := 1.5 linethickness;
687
960
ht# := 1.5 staff_space#;
689
define_pixels(ht,wd);
692
set_char_box(wd#, wd#, 0, ht#);
693
draw_vee (wd, ht, thickness);
962
define_pixels (ht, wd);
964
set_char_box (wd#, wd#, 0, ht#);
965
draw_accent ((-h, -w), (0, w), thickness, 0.9);
966
currentpicture := currentpicture rotated -90;
696
fet_beginchar("left toe", "upedaltoe", "upedaltoe")
970
fet_beginchar ("left toe", "upedaltoe");
700
fet_beginchar("right toe", "dpedaltoe", "dpedaltoe")
975
fet_beginchar ("right toe", "dpedaltoe");
705
fet_beginchar("Flageolet", "flageolet", "flageolet")
706
save height,width,thickness;
707
height#=4/15 staffsize#;
709
thickness#=blot_diameter#;
710
define_pixels(height,width,thickness);
711
set_char_box(width#/2,width#/2,height#/2,height#/2);
713
pickup pencircle scaled thickness;
981
fet_beginchar ("Flageolet", "flageolet");
982
save height, width, thickness, superness;
984
height# = 4/15 staffsize#;
986
thickness# = blot_diameter#;
987
define_pixels (height, width);
988
define_whole_blacker_pixels (thickness);
990
set_char_box (width# / 2, width# / 2, height# / 2, height# / 2);
992
penpos1 (thickness, 90);
993
penpos2 (thickness, 180);
994
penpos3 (thickness, 270);
995
penpos4 (thickness, 0);
717
rt x4 - lft x2 =width;
724
draw z1..z2..z3..z4..cycle;
1006
penlabels (1, 2, 3, 4);
1008
% mf doesn't handle pixel dropouts in outline objects, so we use
1009
% `draw' if not called by mpost
1010
if known miterlimit:
1017
pickup pencircle scaled thickness;
729
%TODO: ARGRGHGH code dup.
733
fet_beginchar("Segno", "segno", "segno")
1028
% TODO: ARGRGHGH code dup.
1031
fet_beginchar ("Segno", "segno");
734
1032
save thin, thick, ball_diam, darkness, pointheight;
735
1033
save wd, ht, thick_nibangle, ball_nib_thick;
748
1046
ball_nib_thick = 2.7 darkness;
749
1047
ball_diam = ball_nib_thick + (w - ball_nib_thick) / 10;
750
1048
pointheight = 2 linethickness;
760
penpos1(thick, 2 thick_nibangle);
761
penpos2(thick, thick_nibangle);
763
penpos4(ball_nib_thick, 180-thick_nibangle);
1058
penpos1 (thick, 2 thick_nibangle);
1059
penpos2 (thick, thick_nibangle);
1060
penpos3 (thin, -90);
1061
penpos4 (ball_nib_thick, 180 - thick_nibangle);
765
1064
path swoosh, ploop;
766
swoosh := z1l{curl 0} .. z2l .. z3l{right} .. {down}z4l
767
-- z4r .. z3r{left} .. z2r{down} ;
768
fill swoosh .. (swoosh scaled -1) .. cycle;
1066
swoosh := z1l{curl 0}
1074
.. (swoosh scaled -1)
772
x5r = x4l - ball_diam /2;
1078
x5r = x4l - ball_diam / 2;
775
penpos5(1.6 ball_diam/2, 100);
776
penpos6(ball_diam/2, 240);
1081
penpos5 (1.6 ball_diam / 2, 100);
1082
penpos6 (ball_diam / 2, 240);
778
ploop := z4l{down} .. z5l .. z6l -- cycle;
780
1089
fill ploop scaled -1;
787
filldraw z7l--z8l{right}--z8r{down}--z7r{right}--cycle;
1091
penpos7 (2 thin, 0);
1093
penpos8 (2 thin, 0);
788
1099
pickup pencircle scaled 2 thin;
789
draw (-x2r,pointheight);
790
draw (x2r,-pointheight);
1100
drawdot (-x2r, pointheight);
1101
drawdot (x2r, -pointheight);
1103
penlabels (range 1 thru 8);
793
fet_beginchar("Coda", "coda", "coda")
1107
fet_beginchar ("Coda", "coda");
794
1108
save stickout, thin, thick, codawidth, codaheight;
796
1110
stickout# = 0.35 staff_space#;
797
1111
codawidth# = 2/3 staff_space#;
798
codaheight# = 1 staff_space#;
800
set_char_box(codawidth#+stickout#, codawidth#+stickout#,
801
codaheight#+stickout#, codaheight#+stickout#);
803
define_pixels(codawidth, codaheight);
1112
codaheight# = staff_space#;
1113
define_pixels (codawidth, codaheight);
1115
set_char_box (codawidth# + stickout#, codawidth# + stickout#,
1116
codaheight# + stickout#, codaheight# + stickout#);
804
1118
thin = 1.2 linethickness;
805
0.1 (codaheight - 2 thin) = (codawidth - 2 thick);
818
halfcoda := z1l{up} .. z2l{right} .. z3l{down} --
819
z3r{up} .. z2r{left} .. z1r{down} .. cycle;
821
fill (halfcoda scaled -1);
823
draw_gridline((0,-h),(0,h),thin);
824
draw_gridline((-w,0),(w,0),thin);
1119
0.1 (codaheight - 2 thin) = (codawidth - 2 thick);
1122
penpos2 (thin, -90);
1123
penpos3 (thick, -180);
1124
penpos4 (thin, -270);
1133
penlabels (1, 2, 3, 4);
1141
draw_gridline ((0, -h), (0, h), thin);
1142
draw_gridline ((-w, 0), (w, 0), thin);
828
fet_beginchar("Varied Coda", "varcoda", "varcoda")
1146
fet_beginchar ("Varied Coda", "varcoda");
829
1147
save thin, thick, codawidth, codaheight;
830
1148
thin# = 1.2 linethickness#;
831
1149
thick# = 1.0 linethickness# + 0.25 staff_space#;
832
1150
codawidth# = 2/3 staff_space#;
833
codaheight# = 1 staff_space#;
834
define_pixels(thin, thick, codawidth, codaheight);
836
set_char_box(codawidth#+thick#, codawidth#+thick#,
837
codaheight#+thick#, codaheight#+thick#);
1151
codaheight# = staff_space#;
1152
define_pixels (thin, thick, codawidth, codaheight);
1154
set_char_box (codawidth# + thick#, codawidth# + thick#,
1155
codaheight# + thick#, codaheight# + thick#);
1157
x1 = -codawidth + .5 thick;
1159
x2 = codawidth - .5 thick;
842
1160
y2 = codaheight;
843
draw_rounded_block(z1, z2, blot_diameter);
1161
draw_block (z1, z2);
849
draw_rounded_block(z3, z4, blot_diameter);
852
addto currentpicture also currentpicture xscaled -1;
853
addto currentpicture also currentpicture yscaled -1;
855
draw_gridline((0,-h),(0,h),thin);
856
draw_gridline((-w,0),(w,0),thin);
1167
draw_block (z3, z4);
1169
labels (1, 2, 3, 4);
1171
addto currentpicture also currentpicture scaled -1;
1173
draw_gridline ((0, -h), (0, h), thin);
1174
draw_gridline ((-w, 0), (w, 0), thin);
860
1179
save alpha, thick, thin, ht;
862
1182
thin# = 1.2 linethickness#;
863
1183
thick# = 3 linethickness#;
864
ht# = .6staff_space#;
865
define_pixels(thin, thick,ht);
866
set_char_box(0, .5staff_space#, ht#, ht#);
868
penpos1(thick, alpha);
869
penpos2(thick, alpha+90);
870
penpos3(thin, 180-alpha);
871
penpos4(thin, 90-alpha);
878
fill z1l{dir (alpha+90)} .. z2r{dir alpha} .. z1r{dir (alpha-90)} ..
879
z3l{dir (270-alpha)} .. z4l{dir (alpha+180)} ..
880
z3r{dir (90-alpha)} .. cycle;
1184
ht# = .6 staff_space#;
1185
define_pixels (thin, thick, ht);
1187
set_char_box (0, .5 staff_space#, ht#, ht#);
1189
penpos1 (thick, alpha);
1190
penpos2 (thick, alpha + 90);
1191
penpos3 (thin, 180 - alpha);
1192
penpos4 (thin, 90 - alpha);
1200
fill z1l{dir (alpha + 90)}
1202
.. z1r{dir (alpha - 90)}
1203
.. z3l{dir (270 - alpha)}
1204
.. z4l{dir (180 - alpha)}
1205
.. z3r{dir (90-alpha)}
883
fet_beginchar("Right Comma","rcomma","rcomma");
1210
fet_beginchar ("Right Comma", "rcomma");
1212
penlabels (1, 2, 3, 4);
887
fet_beginchar("Left Comma","lcomma","lcomma");
1216
fet_beginchar ("Left Comma", "lcomma");
893
1223
save thick, thin, ht, wd, alpha;
895
1226
thin# = 1.2 linethickness#;
896
1227
thick# = 3 linethickness#;
897
1228
ht# = .6 staff_space#;
898
1229
wd# = .25 staff_space#;
899
define_pixels(thin, thick, ht, alpha);
900
set_char_box(wd#, wd#, ht#, ht#);
1230
define_pixels (thin, thick, ht, alpha);
1232
set_char_box (wd#, wd#, ht#, ht#);
903
draw_brush(z1, thin, z2, thick);
1237
draw_brush (z1, thin, z2, thick);
906
fet_beginchar("Right Varied Comma","rvarcomma","rvarcomma");
1241
fet_beginchar ("Right Varied Comma", "rvarcomma");
910
fet_beginchar("Left Varied Comma","lvarcomma","lvarcomma");
1247
fet_beginchar ("Left Varied Comma", "lvarcomma");
915
thick#:=1/24designsize;
916
define_blacker_pixels(thick);
918
rthin:= 0.075 *staff_space + 0.5 linethickness;
919
rthick:=2thick+rthin;
1253
thick# := 1/24 designsize;
1254
define_blacker_pixels (thick);
1256
rthin := 0.075 * staff_space + 0.5 linethickness;
1257
rthick := 2 thick + rthin;
921
1260
def draw_arpeggio =
924
save ne,nw,se,sw; pair ne,nw,se,sw;
927
se=dir alpha; nw=dir (alpha+180);
928
ne=dir (alpha+90); sw=dir (alpha-90);
929
penpos1(rthin,alpha+90);
930
penpos2(5/4rthick,alpha);
931
penpos4(5/4rthick,alpha);
932
penpos5(rthin,alpha+90);
933
penpos3(3/4rthick,alpha);
935
z1=(width/2, height) - overshoot*se;
936
z2=2[z4,(width/2,height/2)];
941
z5=2[z1,(width/2,height/2)];
943
z7=z4l+1/2rthin*sw+1/2rthin*se;
944
z8=2[z6,(width/2,height/2)];
945
z9=2[z7,(width/2,height/2)];
947
fill z1l{se}..{se}z6..z3l..z7{se}..{se}z5l..z5r{nw}..{nw}z8..z3r..z9{nw}..{nw}z1r.. cycle;
948
penlabels(1,2,3,4,5,6,7,8,9);
951
fet_beginchar("Arpeggio","arpeggio","arpeggio");
952
%draw_staff (-2, 2, 0.0);
1262
save ne, nw, se, sw;
1264
pair ne, nw, se, sw;
1268
nw = dir (alpha + 180);
1269
ne = dir (alpha + 90);
1271
sw = dir (alpha - 90);
1273
penpos1 (rthin, alpha + 90);
1274
penpos2 (5/4 rthick, alpha);
1275
penpos3 (3/4 rthick, alpha);
1276
penpos4 (5/4 rthick, alpha);
1277
penpos5 (rthin, alpha + 90);
1279
z1 = (width / 2, height) - overshoot * se;
1280
z2 = 2 [z4, (width / 2, height / 2)];
1282
x4 = 2/8 staff_space;
1285
z5 = 2 [z1, (width / 2, height / 2)];
1286
z6 = z2l + 1/2 rthin * sw;
1287
z7 = z4l + 1/2 rthin * sw + 1/2 rthin * se;
1288
z8 = 2 [z6, (width / 2, height / 2)];
1289
z9 = 2 [z7, (width / 2, height / 2)];
1305
fet_beginchar ("Arpeggio", "arpeggio");
953
1306
save height, overshoot, width;
954
1307
height# = staff_space#;
956
overshoot# = 0.25 staff_space#;
957
define_pixels (height,overshoot,width);
958
set_char_box(0, width#, 0, height#);
1308
width# = 0.8 height#;
1309
overshoot# = 0.25 staff_space#;
1310
define_pixels (height, overshoot, width);
1312
set_char_box (0, width#, 0, height#);
1314
penlabels (range 1 thru 9);
1316
draw_staff (-2, 2, 0.0);
962
1321
% Extendable Trill symbol.
964
1323
% Rename me to Trill, rename Trill to Tr?
965
fet_beginchar("Trill-element","trill-element","trillelement");
1326
fet_beginchar ("Trill_element", "trill_element");
966
1327
save height, overshoot;
967
1328
height# = staff_space#;
969
overshoot# = 0.25 staff_space#;
970
define_pixels (height,overshoot,width);
971
set_char_box(0, height#, 0, width#);
1329
width# = 0.8 height#;
1330
overshoot# = 0.25 staff_space#;
1331
define_pixels (height, overshoot, width);
1333
set_char_box (0, height#, 0, width#);
973
currentpicture := currentpicture shifted -(width/2, height/2);
1336
currentpicture := currentpicture shifted -(width / 2, height / 2);
974
1337
currentpicture := currentpicture rotated 90;
975
currentpicture := currentpicture shifted (height/2, width/2);
1338
currentpicture := currentpicture shifted (height / 2, width / 2);
984
1346
def draw_arpeggio_arrow =
985
save thinness, height, width, overshoot, se, sw, ne, nw, alpha;
987
height# = staff_space#;
989
overshoot# = 0.25 staff_space#;
990
define_pixels (height,overshoot,width);
991
set_char_box(0, width#, 0, height#);
993
nw = dir (alpha+180);
994
sw = dir (alpha-90); se = dir alpha;
996
penpos1(rthin, alpha+90);
997
penpos2(5/4 rthick, alpha);
998
penpos3(5/4 rthick, 0);
1000
z1 = (width/2, height) - overshoot*se; % numbering is consistent with the arpeggio symbol
1001
z2 = 2[z4,(width/2,height/2)];
1002
z3 = (0.5 width, 0.5 height);
1003
z4 = (0.25 staff_space, rthin);
1004
z6 = z2l + 1/2rthin*sw;
1005
z9 = (width/2, height) + overshoot*se;
1006
fill z1l {se}..{se} z6 .. z3l .. z3r.. z9{nw} ..{nw} z1r.. cycle;
1008
bot z10 = ( 0.5w, 0 );
1009
lft z11 = (-0.3w, 0.8h);
1010
rt z12 = ( 1.3w, 0.8h);
1011
pickup pencircle scaled 0.5 rthin;
1012
filldraw z3 -- z12 {dir -130} .. {dir -110} z10 {dir 110} .. {dir 130} z11 -- cycle;
1347
save thinness, height, width, overshoot;
1348
save nw, ne, se, sw;
1350
save before_left, before_right, after_left, after_right;
1351
save u_left, v_left, u_right, v_right;
1352
pair nw, ne, se, sw;
1353
path before_left, before_right, after_left, after_right;
1355
height# = staff_space#;
1356
width# = 0.8 height#;
1357
overshoot# = 0.25 staff_space#;
1358
define_pixels (height, overshoot, width);
1360
set_char_box (0, width#, 0, height#);
1363
nw = dir (alpha + 180);
1364
ne = dir (alpha + 90);
1366
sw = dir (alpha - 90);
1368
penpos1 (rthin, alpha + 90);
1369
penpos2 (5/4 rthick, alpha);
1370
penpos3 (5/4 rthick, 0);
1372
z1 = (width / 2, height) - overshoot * se; % numbering is consistent
1373
% with the arpeggio symbol
1374
z2 = 2 [z4, (width / 2, height / 2)];
1375
z3 = (0.5 width, 0.5 height);
1376
z4 = (0.25 staff_space, rthin);
1377
z6 = z2l + 1/2 rthin * sw;
1378
z9 = (width / 2, height) + overshoot * se;
1380
pickup pencircle scaled vround (0.5 rthin);
1382
bot z10 = (0.5 w, 0);
1383
lft z11 = (-0.3 w, 0.8 h);
1384
rt z12 = (1.3 w, 0.8 h);
1389
after_left := (z3 + (0, -0.25 rthin / cosd (angle (nw))))
1390
-- (z11 + 0.25 rthin * ne);
1391
(u_left, v_left) = before_left intersectiontimes after_left;
1393
before_right := (z12 + 0.25 rthin * nw)
1394
-- (z3 + (0, -0.25 rthin / cosd (angle (nw))));
1395
after_right := z3r{up}
1398
(u_right, v_right) = before_right intersectiontimes after_right;
1400
fill subpath (0, u_left) of before_left
1401
.. subpath (v_left, infinity) of after_left
1404
.. {dir -50}(z11 + 0.25 rthin * sw)
1405
.. (z10 + 0.25 rthin * sw){dir -70}
1407
.. {dir 70}(z10 + 0.25 rthin * se)
1408
.. (z12 + 0.25 rthin * se){dir 50}
1411
.. subpath (0, u_right) of before_right
1412
.. subpath (v_right, infinity) of after_right
1415
% mf doesn't handle pixel dropouts in outline objects, so we use
1416
% `draw' if not called by mpost
1417
if not known miterlimit:
1418
pickup pencircle scaled 0.7 rthin;
1420
-- (z9 + 0.5 rthin * dir (alpha - 90));
1015
fet_beginchar("Arpeggio arrow down", "arpeggio-arrow--1", "arpeggioarrowdown");
1016
draw_arpeggio_arrow;
1020
fet_beginchar("Arpeggio arrow up", "arpeggio-arrow-1", "arpeggioarrowup");
1021
draw_arpeggio_arrow;
1022
currentpicture := currentpicture scaled -1 shifted (0.8staff_space, staff_space);
1425
fet_beginchar ("Arpeggio arrow down", "arpeggio.arrow.M1");
1426
draw_arpeggio_arrow;
1427
penlabels (range 1 thru 12);
1431
fet_beginchar ("Arpeggio arrow up", "arpeggio.arrow.1");
1432
draw_arpeggio_arrow;
1433
currentpicture := currentpicture scaled -1
1434
shifted (w - feta_eps, h - feta_eps);
1029
1439
input feta-slag;
1031
1442
% railroad tracks.
1033
% I actually have no clue how they should look, so we use a slightly curvy
1034
% and tapered shape.
1444
% I actually have no clue how they should look, so we use a slightly curvy
1445
% and tapered shape.
1036
fet_beginchar("Caesura", "caesura", "caesura");
1037
save slant, space_between, clearance;
1039
save botthick, topthick;
1044
botthick = 1.5 linethickness;
1045
topthick = 2.5 linethickness;
1046
pickup pencircle scaled botthick;
1050
space_between# = 0.6 staff_space#;
1051
clearance# = 0.2 staff_space#;
1052
height# = 1.2 staff_space#;
1054
set_char_box(0, 2.0 staff_space#, staff_space# - clearance#, height#);
1055
define_pixels (space_between, clearance, height);
1061
x2 = (y2 - y1) / slant;
1065
alpha = angle (z2 - z1);
1066
penpos1 (botthick, alpha - krom);
1067
penpos3 (botthick, alpha - krom + 90);
1069
penpos2 (topthick, alpha + krom );
1070
penpos4 (topthick, alpha + krom + 90);
1072
penlabels (1,2,3,4);
1074
p := z3r{(z1r - z1l)} .. z4r{z2r-z2l} .. z2r{z4l-z4r} .. z4l{z2l-z2r} .. z3l{z1l-z1r} .. z1l{z3r-z3l} .. cycle;
1076
fill p shifted (space_between , 0);
1081
fet_endgroup("scripts");
1448
fet_beginchar ("Caesura", "caesura");
1449
save slant, space_between, clearance;
1451
save botthick, topthick;
1455
botthick = 1.5 linethickness;
1456
topthick = 2.5 linethickness;
1458
pickup pencircle scaled botthick;
1461
space_between# = 0.6 staff_space#;
1462
clearance# = 0.2 staff_space#;
1463
height# = 1.2 staff_space#;
1465
set_char_box (0, 2.0 staff_space#,
1466
staff_space# - clearance#, height#);
1467
define_pixels (clearance, height);
1468
define_whole_pixels (space_between);
1474
x2 = (y2 - y1) / slant;
1478
alpha = angle (z2 - z1);
1479
penpos1 (botthick, alpha - krom);
1480
penpos3 (botthick, alpha - krom + 90);
1482
penpos2 (topthick, alpha + krom);
1483
penpos4 (topthick, alpha + krom + 90);
1488
penlabels (1, 2, 3, 4);
1490
pat := z3r{(z1r - z1l)}
1498
fill pat shifted (space_between, 0);
1502
fet_endgroup ("scripts");