2 % piano p, grabbed from Ed Breitkopf Mozart horn concerto 3.
6 % * there is no dishing in the serif (but we do it anyway)
8 % * The cheek is a little fatter than the stem
10 % * The slant is extreme: 20 degrees
12 % * the twiddle (what'sitcalled) is a slightly darker than the serif
14 % * The hole in the cheek has a straight right side.
16 % * Corners are filled up.
23 currenttransform := identity;
27 serif_thick# = 1.1 stafflinethickness#;
28 define_blacker_pixels (serif_thick);
29 med_thick = round (1.5 stafflinethickness);
31 fet_beginchar("dynamic p", "p", "dynp")
33 % TODO w really is 13/12 ex
34 % but should do kerning
35 set_char_box (0, 15/12 ex#, descender#, 1.0 ex#);
37 save twiddle_thick, stem_thick, cheek_thick;
39 save serif, dishing_angle, p, q;
40 save cheek_medium, left_serif_protude, right_serif_protude;
45 updir := dir (90 - slant );
46 twiddle_thick = med_thick;
47 cheek_medium = 1/6 ex;
50 fill_up := 1.5 serif_thick;
54 cheek_thick = 11/32 ex;
55 cheek_width = 0.72 ex;
56 left_serif_protude = 18/60 ex;
57 right_serif_protude= 15/60 ex;
59 penpos1 (twiddle_thick, -slant - 5);
60 penpos2 (cheek_medium, 90 - slant );
61 penpos3 (cheek_medium, 90 - slant);
63 % x4r - x4l = cheek_thick;
64 penpos4 (cheek_thick, -slant);
65 penpos5 (cheek_medium, -55);
66 penpos6 (stem_thick, 0);
67 penpos17 (straigh_len, 90 -slant);
71 y6l = - descender + serif_thick/2;
75 z7 = whatever * updir + z6l;
78 z2l = whatever *updir + 0.3 [z7, z1r];
79 y8 = ypart (0.9 [z7, z2l]);
80 z8 = 2/3 [z6l, z6r] + whatever * updir;
84 z3l = 0.58 [(stem_thick, -descender), (stem_thick + cheek_width - cheek_thick, -descender)] + whatever * updir;
86 z4r = whatever*updir + (stem_thick+ cheek_width, -descender);
88 z5l = whatever*updir + z3l;
91 z9 = z6r + whatever*updir;
95 z2r{right} .. {dir( -60)}z8 & z8{dir 35} .. z3r{right}
96 .. tension 0.9 .. z4r{-updir} .. z5r{left} .. z9
97 & z9 -- z6r -- z6l -- z7{updir}
98 .. z2l{left} .. tension 1.2 ..
99 % z1r & z1r -- z1l & z1l
100 simple_serif (z1r, z1l, -90)
102 pickup pencircle scaled 1;
106 z12 = z6r + whatever*updir;
111 z17l --- z17r .. z3l{left}.. tension 1.05 .. z12{-updir} .. tension 1.05 .. z5l{right} .. cycle;
113 penlabels (1, 2, 3, 4, 5, 6, 17);
118 pickup pencircle scaled serif_thick;
119 lft x11 = -left_serif_protude;
120 rt x10 = stem_thick+ right_serif_protude;
121 bot y10 = bot y11 = -descender;
124 serif := simple_serif (z10, z11, dishing_angle);
127 labels(7,8, 9, 10, 11,12);
130 z13 = point 0.05 of serif;
131 z14 = point 0.85 of serif;
132 z15 = z6l + updir * fill_up +( serif_thick/2, 0);
133 z16 = z6r + updir * 1.2fill_up- +( serif_thick/2, 0);
134 labels(13,14, 15, 16);
136 % pickup pencircle scaled 1;
137 draw z13{direction 0.05 of serif} .. z16{updir};
138 draw z14{-(direction 0.85 of serif)} .. z15{updir};
141 % forte f, grabbed from Ed Breitkopf Mozart horn concerto 3.
145 % * the bulbs are open.
147 % * blotting around the serif
151 % TODO: insert blots around the serif
157 fet_beginchar("dynamic f", "f", "dynf");
158 set_char_box (0, 1.25 ex#, descender#, ex# + ascender#);
160 save left_angle, right_angle;
161 save serif_length, serif_excentricity;
163 save bulb_thick, bulb_diam, fill_up;
166 bulb_diam = 7.5 / 40 ex;
167 fill_up = 1.5 serif_thick;
168 left_angle = slant - 6;
169 right_angle = slant - 3;
171 bulb_thick = 8/40 ex;
172 serif_length = 0.96 ex;
173 serif_excentricity = 0.01 ex;
175 z1 = (0.375 ex, - serif_thick);
178 z2l = z1 + whatever*dir (90 - left_angle);
179 penpos2 (f_thick, 0);
181 y3l = y1 + ex + ascender;
183 penpos3 (med_thick, -90);
184 penpos4 (bulb_thick, -20);
185 z3r = whatever [z4r,z4l];
189 penpos5(bulb_thick, -45);
190 x5r = 0.1 [x4l, x4r];
191 y5l = y4l - bulb_diam;
193 z6 = z2r + whatever* dir (90 - right_angle);
198 penpos7(med_thick, -90);
200 penpos8 (bulb_thick, 160);
202 z7l = whatever [z8r,z8l];
204 penpos9 (bulb_thick, 135);
205 x9r = 0.1 [x8l, x8r];
206 y9l = y8l + bulb_diam;
208 penlabels(2, 3,4,5, 7, 8,9);
212 .. z3l{right} .. z4r{down}
213 .. z5r{left} .. z5l{up}
215 .. z4l{up} .. z3r{left}
217 .. z2r --- z6 .. tension 1.25 .. z7r{left}
218 .. z8r{up} .. z9r{right} .. z9l{down} .. tension 0.8
219 .. z8l{down} .. z7l{right} .. cycle;
220 pickup pencircle scaled 1;
224 pickup pencircle scaled 1.1 serif_thick;
225 (rt x13) - (lft x14) = serif_length;
228 0.5 [x13, x14] = x2 + serif_excentricity;
239 % * right stem is fatter and more straight than the left 2 two stems.
241 % * The twiddle at the left is similar to the p twiddle
243 % * The bottoms of the stems are blotted.
249 % This is cut & paste programming. Somehow 3 i shapes in two chars (p and m)
250 % Doesn't seem worth the trouble of writing a macro.
253 fet_beginchar("dynamic m", "m", "dynm");
254 set_char_box (0, 1.3 ex#, 0, 1.0 ex#);
256 % should share code with p for twiddle.
258 save i_thick, i_angle, i_twiddle_thick,
259 i_twiddle_start_angle, i_twiddle_start_y,
262 save idir, center, right_ending;
263 pair center, idir, right_ending;
266 i_thick := 21 / 80 ex;
268 idir := dir(90- i_angle);
270 i_left_space = 16/80 ex;
271 i_twiddle_thick = serif_thick;
272 i_twiddle_start_y = 1/2 ex;
273 i_twiddle_start_angle = 20;
274 bottom_blot = serif_thick;
276 penpos1 (i_twiddle_thick, -i_twiddle_start_angle);
279 y1 = i_twiddle_start_y;
280 z1r = center - (i_left_space,0) + whatever * idir;
282 y3 = bottom_blot + ypart center;
284 z3l = center + whatever * idir;
286 penpos4(i_thick - bottom_blot, 0);
287 z4 - z3 = whatever * idir;
290 z2l = .25 [z3l, z3r] + whatever * idir;
291 z2r = 3/4 [z1r, z3l] + whatever * idir;
293 z2 = 1/2 [z2l, z2r] ;
295 z5 = z4 + whatever * idir;
298 p := simple_serif (z1l, z1r, 90) .. tension 1.05 .. z2r{right} .. z5l --- z3l
299 .. z4l --- z4r .. z3r --- z5r .. z2l{left} .. cycle;
303 % penlabels (1, 2, 3 , 4,5);
308 z5l = right_ending + (i_left_space,0);
309 penpos1(serif_thick, - i_twiddle_start_angle);
311 y3 = bottom_blot + ypart center;
313 z3l = z5l + whatever * idir;
315 penpos4(i_thick - bottom_blot, 0);
316 z4 - z3 = whatever * idir;
319 z2l = .25 [z3l, z3r] + whatever * idir;
320 z2r = 3/4 [z1r, z3l] + whatever * idir;
322 z2 = 1/2 [z2l, z2r] ;
325 p := simple_serif (z1l, z1r, 90) .. tension 1.05 .. z2r{right} .. z5l --- z3l
326 .. z4l --- z4r .. z3r --- z5r .. z2l{left} .. cycle;
330 % penlabels (1, 2, 3 , 4,5);
332 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
334 i_thick := 25 / 80 ex;
336 i_left_space := 14/80 ex;
337 end_overshoot = 1/2 serif_thick;
340 idir := dir(90- i_angle);
342 z5l = right_ending + (i_left_space,0);
343 penpos5 (whatever, 10);
344 penpos3 (whatever, 20);
349 penpos1(serif_thick, - i_twiddle_start_angle);
351 z3l = z7l + whatever * idir;
352 z3r = z7r + whatever * idir;
353 z5l = z7l + whatever * idir;
354 z5r = z7r + whatever * idir;
356 save end_twiddle_angle;
357 end_twiddle_angle := 35;
358 penpos6(serif_thick, - end_twiddle_angle);
359 y6l = 23/80 ex + ypart center;
360 z6l = 1.6 [z3l, z3r] + whatever * idir;
364 y3l = 1/8 ex + ypart center;
365 y2l = 1 ex+ end_overshoot;
366 z2l = .08 [z3l, z3r] + whatever * idir;
367 z2r = 3/4 [z1r, z3l] + whatever * idir;
369 z2 = 1/2 [z2l, z2r] ;
370 z8 = z7 - (0, 2 end_overshoot);
372 p := simple_serif (z1l, z1r, 90) .. tension 1.05
373 .. z2r{right} .. z5l --- z3l
375 .. simple_serif(z6r, z6l, 90)
379 .. z2l{left} .. cycle;
381 % pickup pencircle scaled 1;
385 % penlabels (1, 2, 3 , 4,5,6,7, 8);
390 %% notes from old dyn code.
392 % "f" obviously has a _lot_ bigger slant than "p" (see Wanske p.239)
393 % however; perhaps we need two f symbols:
394 % - a super-slanted one used in "f" "mf" "sfz" "sf", and
395 % - a more normal-slanted in "ff" "fff" "fp" "fp" (see Wanske p.241)
397 % looking at professionally typeset music reveals that typesetters
398 % are somewhat unsure about slanting in "mf", "fp", "sfz"
400 % "f" and "p" (in any combination) are a lot (factor two) fatter than
401 % "s", "m", and "z". sometimes the "m" and "z" are a bit fatter than
405 % Chester, Breitkopf suggest smaller sizes of these other chars,
406 % using the x-height as reference point.