code := 111; save serif_thick; serif_thick# = 1.1 stafflinethickness#; define_blacker_pixels (serif_thick); med_thick = round (1.5 stafflinethickness); % forte f, grabbed from Ed Breitkopf Mozart horn concerto 3. % % NOTES: % % * the bulbs are open. % % * blotting around the serif % % % % TODO: insert blots around the serif % % % slant_angle = 20; code := 101; fet_beginchar("dynamic f", "f", "dynf"); set_char_box (0, 1.25 ex#, descender#, ex# + ascender#); save left_angle, right_angle; save serif_length, serif_excentricity; save f_thick; save bulb_thick, bulb_diam, fill_up; save p; path p; bulb_diam = 7.5 / 40 ex; bulb_thick = 8.5/40 ex; fill_up = 1.5 serif_thick; save slant; left_angle = slant_angle - 6; right_angle = slant_angle - 3; f_thick = 7/16 ex; serif_length = 0.96 ex; serif_excentricity = 0.01 ex; z1 = (0.375 ex, - serif_thick); y2 = y1 + ex; z2l = z1 + whatever*dir (90 - left_angle); penpos2 (f_thick, 0); y3l = y1 + ex + ascender; x3l = x1 + 1 ex; penpos3 (med_thick, -90); penpos4 (bulb_thick, -20); z3r = whatever [z4r,z4l]; x4l - x3l = 1/10 ex; penpos5(bulb_thick, -45); x5r = 0.1 [x4l, x4r]; y5l = y4l - bulb_diam; z6 = z2r + whatever* dir (90 - right_angle); y6 = y1 + 3/8 ex; x7 = x1 - 1/4 ex; y7r = y1 -descender; penpos7(med_thick, -90); penpos8 (bulb_thick, 160); x8l = x7l - 1/10 ex; z7l = whatever [z8r,z8l]; penpos9 (bulb_thick, 135); x9r = 0.1 [x8l, x8r]; y9l = y8l + bulb_diam; labels(1,6,9); penlabels(2, 3,4,5, 7, 8,9); p := z1 --- z2l .. tension 1.1 .. z3l{right} .. z4r{down} .. z5r{left} .. z5l{up} .. tension 0.8 .. z4l{up} .. z3r{left} .. tension 1.1 .. z2r --- z6 .. tension 1.25 .. z7r{left} .. z8r{up} .. z9r{right} .. z9l{down} .. tension 0.8 .. z8l{down} .. z7l{right} .. cycle; pickup pencircle scaled 1; fill p; % draw p; pickup pencircle scaled 1.1 serif_thick; (rt x13) - (lft x14) = serif_length; y13 = y14; y14 = y2; 0.5 [x13, x14] = x2 + serif_excentricity; draw z13 .. z14; penlabels(16); labels(13,14,15); fet_endchar; save slant; slant := ypart (dir(20)); % % piano p, grabbed from Ed Breitkopf Mozart horn concerto 3. % % Notes: % % * there is no dishing in the serif (but we do it anyway) % % * The cheek is a little fatter than the stem % % * The slant is extreme: 20 degrees % % * the twiddle (what'sitcalled) is a slightly darker than the serif % % * The hole in the cheek has a straight right side. % % * Corners are filled up. % % save slant; slant := ypart (dir(slant_angle)); currenttransform := currenttransform slanted slant; fet_beginchar("dynamic p", "p", "dynp") % % TODO w really is 13/12 ex % but should do kerning set_char_box (0, 15/12 ex#, descender#, 1.0 ex#); save twiddle_thick, stem_thick, cheek_thick; save updir, fill_up; save serif, dishing_angle, p, q; save cheek_medium, left_serif_protude, right_serif_protude; pair updir; path serif,q,p; save my_slant_angle; my_slant_angle = 0; updir := dir (90 - my_slant_angle ); twiddle_thick = med_thick; cheek_medium = 1/6 ex; dishing_angle = 5; fill_up := 1.5 serif_thick; straigh_len = 0.5 ex; stem_thick = 2/6 ex; cheek_thick = 13/32 ex; cheek_width = 0.72 ex; left_serif_protude = 18/60 ex; right_serif_protude= 15/60 ex; penpos1 (twiddle_thick, -slant - 5); penpos2 (cheek_medium, 90 - slant ); penpos3 (cheek_medium, 90 - slant); x4r - x4l = cheek_thick; penpos4 (whatever, 0); penpos5 (cheek_medium, -55); penpos6 (stem_thick, 0); penpos17 (straigh_len, 90 -slant); whatever [z17l, z17r] = z4l; y17 = 7/16 ex; x6l = 0; y6l = - descender + serif_thick/2; z1l = z6l - whatever *dir (90 - my_slant_angle + 20 ); y1r = 0.5 ex; y2r = ex; z7 = whatever * updir + z6l; y7 = 43/60 ex; z2l = whatever *updir + 0.3 [z7, z1r]; y8 = ypart (0.9 [z7, z2l]); z8 = 2/3 [z6l, z6r] + whatever * updir; y3r = ex; z3l = 0.58 [(stem_thick, -descender), (stem_thick + cheek_width - cheek_thick, -descender)] + whatever * updir; y4r = 1/3 ex; z4r = whatever*updir + (stem_thick+ cheek_width, -descender); z5l = whatever*updir + z3l; y5l = 1/12 ex; z9 = z6r + whatever*updir; y9 = .2 [y5l, y5r]; p := z2r{right} .. {dir( -60)}z8 & z8{dir 35} .. z3r{right} .. tension 1.0 .. z4r{-updir} .. z5r{left} .. z9 & z9 -- z6r -- z6l -- z7{updir} .. z2l{left} .. tension 1.2 .. % z1r & z1r -- z1l & z1l simple_serif (z1r, z1l, -90) .. cycle; pickup pencircle scaled 1; fill p; y12 = 0.5 ex; z12 = z6r + whatever*updir; save inner_tension; inner_tension = 1.4; q := z17l .. tension 1.5 .. z17r .. z3l{left}.. tension 1.05 .. z12{-updir} .. tension 1.05 .. z5l{right} .. cycle; unfill q; penlabels (1, 2, 3, 4, 5, 6, 17); pickup pencircle scaled serif_thick; lft x11 = -left_serif_protude; rt x10 = stem_thick+ right_serif_protude; bot y10 = bot y11 = -descender; serif := simple_serif (z10, z11, dishing_angle); draw serif; labels(7,8, 9, 10, 11,12); z13 = point 0.05 of serif; z14 = point 0.85 of serif; z15 = z6l + updir * fill_up +( serif_thick/2, 0); z16 = z6r + updir * 1.2fill_up- +( serif_thick/2, 0); labels(13,14, 15, 16); % pickup pencircle scaled 1; draw z13{direction 0.05 of serif} .. z16{updir}; draw z14{-(direction 0.85 of serif)} .. z15{updir}; fet_endchar; % % NOTES: % % * right stem is fatter and more straight than the left 2 two stems. % % * The twiddle at the left is similar to the p twiddle % % * The bottoms of the stems are blotted. % % % % This is cut & paste programming. Somehow 3 i shapes in two chars (p and m) % Doesn't seem worth the trouble of writing a macro. % code := 108; fet_beginchar("dynamic m", "m", "dynm"); set_char_box (0, 1.3 ex#, 0, 1.0 ex#); % should share code with p for twiddle. save i_thick, i_angle, i_twiddle_thick, i_twiddle_start_angle, i_twiddle_start_y, i_left_space; save p; save idir, center, right_ending; pair center, idir, right_ending; path p; i_thick := 21 / 80 ex; i_angle := 0; idir := dir(90- i_angle); i_left_space = 18/80 ex; i_twiddle_thick = serif_thick; i_twiddle_start_y = 8/16 ex; i_twiddle_start_angle = 0; center =(0,0); bottom_blot = serif_thick; penpos1 (i_twiddle_thick, -i_twiddle_start_angle); y1 = i_twiddle_start_y; z1r = center - (i_left_space,0) + whatever * idir; y3 = bottom_blot + ypart center; penpos3(i_thick, 0); z3l = center + whatever * idir; y4 = ypart center; penpos4 (i_thick - bottom_blot, 0); z4 - z3 = whatever * idir; y2l = 1 ex; z2l = .15 [z3l, z3r] + whatever * idir; z2r = 5/8 [z1r, z3l] + whatever * idir; y2r = y5l + 1/9 ex; z2 = 1/2 [z2l, z2r] ; penpos5(i_thick, 0); z5 = z4 + whatever * idir; y5 = 55 / 80 ex; p := simple_serif (z1l, z1r, 90) .. tension 1.2 .. z2r{right} .. z5l --- z3l .. z4l --- z4r .. z3r --- z5r .. tension 1.2 .. z2l{left} .. cycle; fill p; right_ending := z5r; penlabels (1, 2, 3 , 4,5); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clearxy; z1r = right_ending; z5l = right_ending + (i_left_space,0); penpos1(serif_thick, - i_twiddle_start_angle); y3 = bottom_blot + ypart center; penpos3(i_thick, 0); z3l = z5l + whatever * idir; y4 = ypart center; penpos4(i_thick - bottom_blot, 0); z4 - z3 = whatever * idir; y2l = 1 ex; z2l = .15 [z3l, z3r] + whatever * idir; z2r = 5/8 [z1r, z3l] + whatever * idir; y2r = y5l + 1/9 ex; z2 = 1/2 [z2l, z2r] ; penpos5(i_thick, 0); p := simple_serif (z1l, z1r, 90) .. tension 1.05 .. z2r{right} .. z5l --- z3l .. z4l --- z4r .. z3r --- z5r .. tension 1.2 .. z2l{left} .. cycle; fill p; right_ending := z5r; penlabels (1, 2, 3 , 4,5); clearxy; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% i_thick := 23 / 80 ex; i_angle := -7; i_left_space := 14/80 ex; end_overshoot = .25 serif_thick; idir := dir(90- i_angle); z1r = right_ending; z5l = right_ending + (i_left_space,0); penpos5 (whatever, 10); penpos3 (whatever, 20); y7 = 0; penpos7(i_thick ,0); penpos1(serif_thick, - i_twiddle_start_angle); z3l = z7l + whatever * idir; z3r = z7r + whatever * idir; z5l = z7l + whatever * idir; z5r = z7r + whatever * idir; save end_twiddle_angle; end_twiddle_angle := 35; penpos6(.9 serif_thick, - end_twiddle_angle); y6l = 23/80 ex + ypart center; z6l = 1.6 [z3l, z3r] + whatever * idir; y3l = 1/8 ex + ypart center; y2l = 1 ex+ end_overshoot; z2l = .08 [z3l, z3r] + whatever * idir; z2r = 5/8 [z1r, z3l] + whatever * idir; y2r = y5l + 1/9 ex; z2 = 1/2 [z2l, z2r] ; z8 = z7 - (0, 2 end_overshoot); p := simple_serif (z1l, z1r, 90) .. tension 1.05 .. z2r{right} .. z5l --- z3l .. z8{right} .. simple_serif(z6r, z6l, 90) .. tension 0.85 .. z3r --- z5r .. tension 1.2 .. z2l{left} .. cycle; % pickup pencircle scaled 1; % draw p; fill p; right_ending := z5r; penlabels (1, 2, 3 , 4,5,6,7, 8); clearxy; fet_endchar; %% notes from old dyn code. % "f" obviously has a _lot_ bigger slant than "p" (see Wanske p.239) % however; perhaps we need two f symbols: % - a super-slanted one used in "f" "mf" "sfz" "sf", and % - a more normal-slanted in "ff" "fff" "fp" "fp" (see Wanske p.241) % % looking at professionally typeset music reveals that typesetters % are somewhat unsure about slanting in "mf", "fp", "sfz" % "f" and "p" (in any combination) are a lot (factor two) fatter than % "s", "m", and "z". sometimes the "m" and "z" are a bit fatter than % "s". % Chester, Breitkopf suggest smaller sizes of these other chars, % using the x-height as reference point.