X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-din-code.mf;h=e2cf7bb6da20b91acf5f01fa385e33d4523beee8;hb=e9724a76f3795833ab70a6fed852cf78eb344dcf;hp=a7a2f00485adf660bab27d1ed92e8486a11dd30b;hpb=f423fa364db4d816ee207a675fd1c0d7ef26cd22;p=lilypond.git diff --git a/mf/feta-din-code.mf b/mf/feta-din-code.mf index a7a2f00485..e2cf7bb6da 100644 --- a/mf/feta-din-code.mf +++ b/mf/feta-din-code.mf @@ -1,15 +1,17 @@ +% feta-din-code.mf -- implement dynamic signs +% +% part of LilyPond's pretty-but-neat music font +% +% source file of the Feta (not the Font-En-Tja) music font +% +% (c) 1997--2007 Jan Nieuwenhuizen + -ex# := (dynamic_design_size / 2.4)* pt#; +ex# := (dynamic_design_size / 2.4) * pt#; descender# := 0.5 ex#; ascender# := 0.72 ex#; staffspace# := 1.75 / 2.0 * ex#; - - -%% !! synchronize with feta-params.mf -linethickness# := 0.3 pt# + 0.04 staffspace#; -stafflinethickness# := stafflinethickness#; - -horizontal_space# := .66 ex#; +horizontal_space# := .66 ex#; font_x_height ex#; font_normal_space horizontal_space#; @@ -17,99 +19,107 @@ font_normal_space horizontal_space#; define_pixels (staffspace, linethickness, ex, descender, ascender); - -%% % % TODO: blot diameter should be fixed, not scalable. % -% +save serif_thick, med_thick, bottom_blot; -save serif_thick; serif_thick# = 1.1 linethickness#; define_blacker_pixels (serif_thick); + med_thick = round (1.5 linethickness); bottom_blot = 1.3 serif_thick; code := 32; -fet_beginchar("Space", "space") - set_char_box(0, horizontal_space#, 0, ex#); + +fet_beginchar ("Space", "space"); + set_char_box (0, horizontal_space#, 0, ex#); fet_endchar; % -% Couldn't find many z examples. This one is losely inspired -% by a sfz from Mueller etuden fuer Horn (Edition Hofmeister.) +% Couldn't find many z examples. This one is losely inspired +% by a sfz from Mueller Etuden fuer Horn (Edition Hofmeister). % code := 121; -fet_beginchar ("dynamic z", "z"); - set_char_box (0, .98 ex#, 0, 0.9 ex#); +fet_beginchar ("dynamic z", "z"); save thin_thick, top_narrow, over_shoot; save bot_thick; + set_char_box (0, .98 ex#, 0, 0.9 ex#); + thin_thick = serif_thick; top_narrow = thin_thick; - top_overshoot = .8 serif_thick; - top_thick = .3 h ; + top_overshoot = .8 serif_thick; + top_thick = .3 h; bot_thick = .2 ex; bot_overshoot = serif_thick; - x0 = + top_narrow; - y0 = .9 [y1r, y1l]; + x0 = top_narrow; + y0 = .9 [y1r, y1l]; + + penpos1 (top_thick, 80); y1l = .72 h; x1r = .34 ex; + x2 = .66 ex; y2 = y1r - top_overshoot; - y3 = h - .7 thin_thick; x3 = w - .6 top_narrow - .5 thin_thick; - y4 = .5 thin_thick; x4 = .5 thin_thick; + penpos3 (thin_thick, angle (z3 - z4) + 90); + penpos4 (thin_thick, angle (z3 - z4) + 90); + + penpos5 (bot_thick, 70); x5l =.25 ex; y5l = .4 bot_overshoot; + + penpos6 (3/2 bot_thick, 70); y6l = -bot_overshoot; x6 = w - 3 top_narrow; + x7 = w; y7 = .82 [y8r, y6r]; - x8r = w - .35 top_narrow; - x9 = w; - y8r = .45 h; - penpos1(top_thick, 80); - penpos3 (thin_thick, angle(z3-z4) + 90); - penpos4(thin_thick, angle (z3-z4) + 90); - penpos5(bot_thick, 70); - penpos6(3/2 bot_thick, 70); penpos8 (thin_thick, 20); + x8r = w - .35 top_narrow; + y8r = .45 h; - penlabels(range 0 thru 9); - - save p,q,r; - path p,q,r; - - p := z0{down} - .. z1l{dir(10)} - - .. simple_serif (z3l, z3r, 90) .. z2{left} .. z1r{left} - .. tension 1.2 - .. cycle; - q := z3l -- z3r -- z4r -- z4l -- cycle; - r := simple_serif (z4r, z4l, 90) .. z5l{right} - .. z6l{right} - .. z7{up} - .. simple_serif (z8r, z8l, 90) - .. z6r{left} .. z5r{left} .. cycle; - pickup pencircle scaled 1; -% draw p ; draw q ; draw r ; + penlabels (range 0 thru 8); - fill p; fill q; fill r; +% pickup pencircle scaled 1; +% draw + fill z0{down} + .. z1l{dir (10)} + .. simple_serif (z3l, z3r, 90) + .. z2{left} + .. z1r{left} + ..tension 1.2.. cycle; + +% draw + fill z3l + -- z3r + -- z4r + -- z4l + -- cycle; + +% draw + fill simple_serif (z4r, z4l, 90) + .. z5l{right} + .. z6l{right} + .. z7{up} + .. simple_serif (z8r, z8l, 90) + .. z6r{left} + .. z5r{left} + .. cycle; fet_endchar; @@ -117,640 +127,665 @@ fet_endchar; % % NOTES: % -% * the bulbs are open. +% * the bulbs are open % % * blotting around the serif % -% -% % TODO: insert blots around the serif % -% -% -slant_angle = 20; - +slant_angle = 20; code := 101; -fet_beginchar("dynamic f", "f"); - set_char_box (0, 1.1 ex#, descender#, ex# + ascender#); +fet_beginchar ("dynamic f", "f"); save left_angle, right_angle; - save serif_length, serif_excentricity; + save serif_length, serif_eccentricity; save f_thick; save bulb_thick, bulb_diam, fill_up; + save slant; save p; - path p; + path p; + + set_char_box (0, 1.1 ex#, descender#, ex# + ascender#); + bulb_diam = 7.5 / 40 ex; - bulb_thick = 8.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; + 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; + serif_eccentricity = 0.01 ex; + % z1 is the `base point' + z1 = (0.2 ex, -serif_thick); - % z1 is the "base point" - z1 = (0.2 ex, - serif_thick); - y2 = y1 + ex; - z2l = z1 + whatever*dir (90 - left_angle); penpos2 (f_thick, 0); + y2 = y1 + ex; + z2l = z1 + whatever * dir (90 - left_angle); - y3l = y1 + ex + ascender; - x3l = x1 + 1 ex; penpos3 (med_thick, -90); + y3l = y1 + ex + ascender; + x3l = x1 + ex; + penpos4 (bulb_thick, -20); - z3r = whatever [z4r,z4l]; + z3r = whatever [z4r, z4l]; x4l - x3l = 1/10 ex; - penpos5(bulb_thick, -45); + penpos5 (bulb_thick, -45); x5r = 0.1 [x4l, x4r]; y5l = y4l - bulb_diam; - z6 = z2r + whatever* dir (90 - right_angle); + z6 = z2r + whatever * dir (90 - right_angle); y6 = y1 + 3/8 ex; + penpos7 (med_thick, -90); 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]; + + 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; - -% -% todo round for pixels... -% - pickup pencircle scaled round (1.4 serif_thick); - (rt x13) - (lft x14) = serif_length; + + labels (1, 6, 9); + penlabels (2, 3, 4, 5, 7, 8, 9); + +% pickup pencircle scaled 1; + +% draw + fill z1 + -- z2l{z2l - z1} + ..tension 1.1.. z3l{right} + .. z4r{down} + .. z5r{left} + .. z5l{up} + ..tension 0.8.. z4l{up} + .. z3r{left} + ..tension 1.1.. z2r{z6 - z2r} + -- z6{z6 - z2r} + ..tension 1.25.. z7r{left} + .. z8r{up} + .. z9r{right} + .. z9l{down} + ..tension 0.8.. z8l{down} + .. z7l{right} + .. {z2l - z1}cycle; + + x13 - x14 = serif_length; y13 = y14; y14 = y2; - 0.5 [x13, x14] = x2 + serif_excentricity; + 0.5 [x13, x14] = x2 + serif_eccentricity; - draw z13 .. z14; + draw_rounded_block (z14 - (0, 0.7 serif_thick), + z13 + (0, 0.7 serif_thick), + 1.4 serif_thick); - penlabels(16); - labels(13,14,15); + labels (13, 14); fet_endchar; % % Notes: -% -% - The S is trapezoidal (i.e. narrower at the top) +% +% - The `s' is trapezoidal (i.e., narrower at the top). % % - The white space is differently shaped at the top (the bulb's inner -% curve is filled up.) +% curve is filled up). % -% - less heavy than the f and p signs. +% - Less heavy than the `f' and `p' signs. % - code := 114; -fet_beginchar("dynamic s", "s"); - set_char_box (0, 17/24 ex#, 0, 1 ex#); +fet_beginchar ("dynamic s", "s"); save left_angle, right_angle; save s_thick, s_thin; - save base_point; save bulb_diam, bulb_len; save over_shoot; - over_shoot = 0; % .2 serif_thick; + save base_point; pair base_point; + set_char_box (0, 17/24 ex#, 0, ex#); + + over_shoot = 0; % .2 serif_thick; bulb_diam = 11/70 ex; bulb_len = 1.0 bulb_diam; - left_angle = slant_angle - 2; - right_angle = slant_angle -11; - + left_angle = slant_angle - 2; + right_angle = slant_angle - 11; s_thick = 16/70 ex; s_thin = serif_thick; - base_point = (0,0); + base_point = (0, 0); penpos1 (bulb_diam, -45); - z1 = 0.35 [z2l,z2r] + bulb_len * dir(45); + z1 = 0.35 [z2l, z2r] + bulb_len * dir (45); + penpos2 (bulb_diam, -25); y2l = 0.845 [y7r, y3r]; + z2l = base_point + whatever * dir (90 - left_angle); - z2l = base_point + whatever * dir (90-left_angle); penpos3 (s_thin, 100); - x3l = 1/2 w ; - y3l = ypart base_point - over_shoot ; - + x3l = 1/2 w; + y3l = ypart base_point - over_shoot; + penpos4 (s_thick, 25); - ypart z4l = ypart z1r; - z4r = base_point + (w,0) + whatever *dir(90-right_angle); + y4l = y1r; + z4r = base_point + (w, 0) + whatever * dir (90 - right_angle); + penpos5 (s_thick, 40); - z5 = z3l + whatever * dir (90-right_angle); - y5 = ypart (0.48 [z7r, z3r]); + z5 = z3l + whatever * dir (90 - right_angle); + y5 = 0.48 [y7r, y3r]; - penpos6 (s_thick, 25); - z6l = base_point + whatever *dir(90-left_angle); + z6l = base_point + whatever * dir (90 - left_angle); y6r = y9l; penpos7 (.9 s_thin, 110); - z7l = 0.45 [z6r, z8l] + whatever * dir (90-left_angle); + z7l = 0.45 [z6r, z8l] + whatever * dir (90 - left_angle); y7r = h + over_shoot; penpos8 (.9 bulb_diam, -25); - z8 = .6 [z4l,z4r] + whatever *dir(90-right_angle); - - y8r = ypart (0.23 [z7r, z3r]); + z8 = .6 [z4l, z4r] + whatever * dir (90 - right_angle); + y8r = 0.23 [y7r, y3r]; penpos9 (.9 bulb_diam, -45); - z9 = .4 [z8r,z8l] + .9 bulb_len * dir (-135); + z9 = .4 [z8r, z8l] + .9 bulb_len * dir (-135); - penlabels(1,2,3,4,5,6,7,8,9); + penlabels (range 1 thru 9); - labels(12); - save p; - path p; - p := z2l{down} .. z3l{right} .. z4r{up} - .. z5r - .. z6r{up} - .. z7l{right} - %.. z8l{down} - ..z9l{down} - .. z9r{right} .. z7r{left} - .. z6l{down} - .. z5l - .. z4l{down} - .. z3r{left} - .. z2r{up} .. z1r{up} - .. z1l{left} .. cycle; - pickup pencircle scaled 1; - fill p; +% pickup pencircle scaled 1; + +% draw + fill z2l{down} + .. z3l{right} + .. z4r{up} + .. z5r + .. z6r{up} + .. z7l{right} + % .. z8l{down} + .. z9l{dir (-125)} + .. z9r{right} + .. z7r{left} + .. z6l{down} + .. z5l + .. z4l{down} + .. z3r{left} + .. z2r{up} + .. z1r{up} + .. z1l{left} + .. cycle; fet_endchar; +% for `p' and `m' + +save slant; +slant := ypart (dir (slant_angle)); % -% piano p, grabbed from Ed Breitkopf Mozart horn concerto 3. +% Piano `p', grabbed from Ed Breitkopf Mozart horn concerto 3. % % Notes: % -% * there is no dishing in the serif (but we do it anyway) +% * 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 cheek is a little fatter than the stem. % -% * the twiddle (what'sitcalled) is a slightly darker than the serif +% * The slant is extreme: 20 degrees. +% +% * The twiddle (what's-it-called) 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; code := 111; +fet_beginchar ("dynamic p", "p") + % TODO: w really is 13/12 ex + % but should do kerning -fet_beginchar("dynamic p", "p") - % - % 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; + save twiddle_thick, stem_thick, cheek_thick, cheek_width; + save fill_up, straigh_len; + save serif, dishing_angle, p, tmp; + save cheek_medium, left_serif_protrude, right_serif_protrude; save lower_overshoot; + save blot_t, corner_t; + path serif, p; + pair tmp, updir; + + set_char_box (0, 15/12 ex#, descender#, 1.0 ex#); - 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; + fill_up = 1.5 serif_thick; straigh_len = 0.5 ex; - lower_overshoot := .3 serif_thick; + lower_overshoot = .3 serif_thick; 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; - + left_serif_protrude = 18/60 ex; + right_serif_protrude = 15/60 ex; + + currenttransform := currenttransform slanted slant; + penpos1 (twiddle_thick, -slant - 5); - penpos2 (cheek_medium, 90 - slant ); + penpos2 (cheek_medium, 90 - slant); penpos3 (cheek_medium, 90 - slant); x4r - x4l = cheek_thick; + penpos4 (whatever, 0); penpos5 (whatever, -38); penpos6 (stem_thick, 0); - penpos17 (straigh_len, 90 -slant); + 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 ); + y6l = -descender + serif_thick / 2; + z1l = z6l - whatever * dir (110); 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; - - + z7 = whatever * up + z6l; + y7 = 43/60 ex; + z2l = whatever * up + 0.3 [z7, z1r]; + y8 = 0.9 [y7, y2l]; + z8 = 2/3 [z6l, z6r] + whatever * up; y3r = ex; - z3l = 0.58 [(stem_thick, -descender), (stem_thick + cheek_width - cheek_thick, -descender)] + whatever * updir; - y4r = .38 ex; - z4r = whatever*updir + (stem_thick+ cheek_width, -descender); - - z5l = whatever*updir + z3l; + z3l = 0.58 [(stem_thick, -descender), + (stem_thick + cheek_width - cheek_thick, -descender)] + + whatever * up; + y4r = .38 ex; + z4r = whatever * up + (stem_thick + cheek_width, -descender); + z5l = whatever * up + z3l; y5r = -lower_overshoot; - y5l = y5r + cheek_medium * ypart dir(55); - - z9 = z6r + whatever*updir; + y5l = y5r + cheek_medium * ypart dir (55); + z9 = z6r + whatever * up; y9 = .2 [y5l, y5r]; - p := - z2r{right} .. {dir( -60)}z8 & z8{dir 35} .. z3r{right} - .. z4r{-updir} - .. tension 1.1 - .. z5r{left} .. z9 - & z9 -- z6r -- z6l -- z7{updir} - .. z2l{left} .. tension 1.2 .. - % z1r & z1r -- z1l & z1l - simple_serif (z1r, z1l, -90) - .. cycle; - - - save blot_t, corner_t; + p := z2r{right} + .. {dir (-60)}z8{dir 60} + .. z3r{right} + .. z4r{down} + ..tension 1.1.. z5r{left} + .. {curl 1}z9 + -- z6r + -- z6l + -- z7{up} + .. z2l{left} + ..tension 1.2.. simple_serif (z1r, z1l, -90) + .. cycle; blot_t := 0.13; corner_t := xpart (p intersectiontimes z9); - z19 = point corner_t - 2 blot_t of p; - z20 = point corner_t + blot_t of p; - labels(19,20); +% pickup pencircle scaled 1; + +% draw + fill subpath (0, corner_t - 2 blot_t) of p + .. subpath (corner_t + blot_t, length p) of p + .. cycle; - save blot_path; - path blot_path; + y12 = 0.5 ex; + z12 = z6r + whatever * up; - pickup pencircle scaled 1; + unfill z17l + ..tension 1.5.. z17r + .. z3l{left} + ..tension 1.05.. z12{down} + ..tension 1.05.. z5l{right} + .. cycle; - fill z19{up} .. {right}z20{updir} .. z19{-(direction corner_t - 2 blot_t of p)} .. cycle; + penlabels (1, 2, 3, 4, 5, 6, 17); + labels (7, 8, 9); - pickup pencircle scaled 1; - fill p; + pickup pencircle scaled serif_thick; - y12 = 0.5 ex; - z12 = z6r + whatever*updir; + lft x11 = -left_serif_protrude; + rt x10 = stem_thick + right_serif_protrude; + bot y10 = bot y11 = -descender; - 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); + z15 = z6l + up * fill_up; + z16 = z6r + up * 1.2 fill_up; + % Since pens are not affected by currenttransform we directly + % transform the necessary points, then simulating the pen with + % an outline while using the identity transformation. + forsuffixes $ = 7, 10, 11, 15, 16: + tmp := z$ transformed currenttransform; + x$ := xpart tmp; + y$ := ypart tmp; + endfor; + currenttransform := identity; - pickup pencircle scaled serif_thick; - lft x11 = -left_serif_protude; - rt x10 = stem_thick+ right_serif_protude; - bot y10 = bot y11 = -descender; + updir = z7 - z15; - serif := simple_serif (z10, z11, dishing_angle); - draw serif; - labels(7,8, 9, 10, 11,12); + penpos10 (serif_thick, -dishing_angle - 90); + penpos11 (serif_thick, dishing_angle - 90); + penpos13 (serif_thick, angle (direction 0.05 of serif) + 90); + penpos14 (serif_thick, angle (direction 0.85 of serif) + 90); - 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}; + penlabels (10, 11, 13, 14); + labels (15, 16); + +% draw + fill z15{-updir} + .. z14l{direction 0.85 of serif} + .. z11l{-dir (dishing_angle)} + .. z11r{dir (dishing_angle)} + .. z14r{-direction 0.85 of serif} + .. z13r{-direction 0.05 of serif} + .. z10r{dir (-dishing_angle)} + .. z10l{-dir (-dishing_angle)} + .. z13l{direction 0.05 of serif} + .. z16{updir} + -- cycle; 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 +% * Right stem is fatter and more straight than the left two stems. % -% * The bottoms of the stems are blotted. +% * 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. +% This is cut & paste programming. Somehow three `i' shapes in two +% characters (`p' and `m') -- doesn't seem worth the trouble of writing +% a macro. % -code := 108; - -fet_beginchar("dynamic m", "m"); - set_char_box (0, 1.5 ex#, 0, 1.0 ex#); - % should share code with p for twiddle. +code := 108; - save i_thick, i_angle, i_twiddle_thick, - i_twiddle_start_angle, i_twiddle_start_y, - i_left_space; - save p; +fet_beginchar ("dynamic m", "m"); + save i_thick, i_angle, i_twiddle_thick; + save i_twiddle_start_angle, i_twiddle_start_y; + save i_twiddle_end_angle, i_left_space; save idir, center, right_ending; save overshoot; + save p; pair center, idir, right_ending; - path p; - overshoot = .25 serif_thick; - i_thick := 21 / 80 ex; - i_angle := 0; - idir := dir(90- i_angle); + set_char_box (0, 1.5 ex#, 0, 1.0 ex#); - i_left_space = 16/80 ex; + % should share code with p for twiddle. + + overshoot = .25 serif_thick; + i_thick := 21/80 ex; i_twiddle_thick = 1.2 serif_thick; - i_twiddle_start_y = 8/16 ex; + i_twiddle_start_y = 8/16 ex; i_twiddle_start_angle = 0; - center =(0,0); + i_twiddle_end_angle := 35; + + center = (0, 0); + + currenttransform := currenttransform slanted slant; + + i_angle := 0; + idir := dir (90 - i_angle); + i_left_space = 16/80 ex; penpos1 (i_twiddle_thick, -i_twiddle_start_angle); y1 = i_twiddle_start_y; - z1r = center - (i_left_space,0) + whatever * idir; + z1r = center - (i_left_space, 0) + whatever * idir; - y3 = 0.5 bottom_blot + ypart center; - penpos3(i_thick, 0); + y2l = ex + overshoot; + z2l = .08 [z3l, z3r] + whatever * idir; + z2r = 5/8 [z1r, z3l] + whatever * idir; + y2r = y5l + 1/9 ex; + z2 = 1/2 [z2l, z2r]; + + penpos3 (i_thick, 0); + y3 = 0.5 bottom_blot + ypart center; z3l = center + whatever * idir; - y4 = ypart center; + penpos4 (i_thick - bottom_blot, 0); + y4 = ypart center; z4 - z3 = whatever * idir; - y2l = 1 ex + overshoot; - z2l = .08 [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); + 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; + y5 = 55/80 ex; + + fill simple_serif (z1l, z1r, 90) + ..tension 1.2.. z2r{right} + .. z5l{z3 - z5} + -- z3l{z3 - z5} + .. z4l{right} + -- z4r{right} + .. z3r{z5 - z3} + -- z5r{z5 - z3} + ..tension 1.2.. z2l{left} + .. cycle; - fill p; right_ending := z5r; - penlabels (1, 2, 3 , 4,5); + penlabels (1, 2, 3, 4, 5); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clearxy; i_angle := -3.2; - idir := dir(90 - i_angle); + idir := dir (90 - i_angle); i_left_space := 14/80 ex; - + penpos1 (serif_thick, -i_twiddle_start_angle); z1r = right_ending; - z5l = right_ending + (i_left_space,0); - penpos1(serif_thick, - i_twiddle_start_angle); - y3 = .5 bottom_blot + ypart center; - penpos3(i_thick, 0); + y2l = ex+ overshoot; + z2l = .08 [z3l, z3r] + whatever * idir; + z2r = 5/8 [z1r, z3l] + whatever * idir; + y2r = y5l + 1/9 ex; + z2 = 1/2 [z2l, z2r]; + + penpos3 (i_thick, 0); + y3 = 0.5 bottom_blot + ypart center; z3l = z5l + whatever * idir; + + penpos4 (i_thick - bottom_blot, 0); y4 = ypart center; - penpos4(i_thick - bottom_blot, 0); z4 - z3 = whatever * idir; - y2l = 1 ex+ overshoot; + penpos5 (i_thick, 0); + z5l = right_ending + (i_left_space, 0); - z2l = .08 [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); + fill simple_serif (z1l, z1r, 90) + ..tension 1.05.. z2r{right} + .. z5l{z3 - z5} + -- z3l + .. z4l{right} + -- z4r{right} + .. z3r{z5 - z3} + -- z5r{z5 - z3} + ..tension 1.2.. z2l{left} + .. cycle; - 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); + penlabels (1, 2, 3, 4, 5); + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + clearxy; -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - i_thick := 23 / 80 ex; + i_thick := 23/80 ex; i_angle := -6; + idir := dir (90 - i_angle); i_left_space := 14/80 ex; - - idir := dir(90- i_angle); + penpos1 (serif_thick, -i_twiddle_start_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(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+ overshoot; + y2l = ex + 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, 1 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; + z2 = 1/2 [z2l, z2r]; -% pickup pencircle scaled 1; -% draw p; - fill p; - right_ending := z5r; - penlabels (1, 2, 3 , 4,5,6,7, 8); - clearxy; + penpos3 (whatever, 20); + y3l = 1/8 ex + ypart center; + z3l = z7l + whatever * idir; + z3r = z7r + whatever * idir; + penpos5 (whatever, 10); + z5l = right_ending + (i_left_space, 0); + z5r = z7r + whatever * idir; + + penpos6 (serif_thick, -i_twiddle_end_angle); + y6l = 23/80 ex + ypart center; + z6l = 1.6 [z3l, z3r] + whatever * idir; + + penpos7 (i_thick, 0); + y7 = 0; + z7l = z5l + whatever * idir; + + z8 = z7 - (0, overshoot); + + fill simple_serif (z1l, z1r, 90) + ..tension 1.05.. z2r{right} + .. z5l{z3 - z5} + -- z3l{z3 - z5} + .. z8{right} + .. simple_serif (z6r, z6l, 90) + ..tension 0.85.. z3r{z5 - z3} + -- z5r{z5 - z3} + ..tension 1.2.. z2l{left} + .. cycle; + + penlabels (range 1 thru 8); fet_endchar; code := 113; - -currenttransform := identity slanted ypart(dir(15)); -fet_beginchar("dynamic r", "r"); - set_char_box (0, .75 ex#, 0, 1ex#); - - +fet_beginchar ("dynamic r", "r"); save base_point, stem_thick, bulb_diam; save twiddle_thick, attach_len, overshoot, taille; + pair base_point; + + set_char_box (0, .75 ex#, 0, ex#); + stem_thick =.26 ex; bulb_diam = .30 ex; - twiddle_thick= 1.1 serif_thick; + twiddle_thick = 1.1 serif_thick; overshoot = .5 serif_thick; - taille = -0.3 serif_thick; + attach_len + bulb_diam / 2 + stem_thick = w; - pair base_point; - base_point = (0,0); - x1l = 0; - y1l = .5 bottom_blot; + base_point = (0, 0); - penpos10(stem_thick - bottom_blot, 0); - y10 = 0; - x10 = x1; + currenttransform := identity slanted ypart (dir (15)); penpos1 (stem_thick, 0); - y2l - y1l = 36/47 ex; - x2l = x1l; + x1l = 0; + y1l = .5 bottom_blot; + penpos2 (stem_thick, 0); + x2l = x1l; + y2l - y1l = 36/47 ex; - y3 = .77 ex; + penpos3 (twiddle_thick, -20); x3r = x2l - .2 ex; - penpos3(twiddle_thick, -20); - - x9 = 0.15 [x1r, x1l] ; - y9 = y4l - .12 ex ; + y3 = .77 ex; x4l = -0.1 [x1l, x1r]; y4l = ex + overshoot; - x4r = 0.62 [x3r, x2l]; y4r = 0.5 [y4l, y2l]; - penpos5(whatever, -74); + penpos5 (whatever, -74); y5l - y5r = bulb_diam; y5l = ex + overshoot; x5 = x2r + attach_len; - attach_len + bulb_diam/2 + stem_thick = w; - z6 = z5; penpos6 (bulb_diam, 0); -% z7 = z6l + taille* dir(180); - - save alpha; - alpha := 35; - z7 = z6 + .4 * bulb_diam * dir (-90 -alpha); - z8 = 9/10 [z1r, z2r]; + z6 = z5; +% z7 = z6l + taille * dir (180); + z7 = z6 + .4 * bulb_diam * dir (-125); - save p; - path p; + z8 = 9/10 [z1r, z2r]; - p := z1r .. z10r --- z10l .. z1l - --- z2l - .. z4r{left} - .. tension 1.2 - .. {down}simple_serif(z3r, z3l,-90){up} - .. tension 0.95 - .. z4l - .. z9 - & z9{curl 0} - .. z5l - .. z6r{dir(-80)} - .. z5r{left} - .. z7 - .. z6l - .. tension 1.2 - .. z8 --- cycle; - pickup pencircle scaled 1; - draw p; - fill p; - penlabels (1,2,3, 4,5,6,7,8, 9, 10); -fet_endchar ; + x9 = 0.15 [x1r, x1l]; + y9 = y4l - .12 ex; + penpos10 (stem_thick - bottom_blot, 0); + x10 = x1; + y10 = 0; +% pickup pencircle scaled 1; +% draw + fill z1r{down} + .. z10r{left} + -- z10l{left} + .. z1l{up} + -- z2l{up} + .. z4r{left} + ..tension 1.2.. {down}simple_serif (z3r, z3l,-90){up} + ..tension 0.95.. z4l + .. {curl 1}z9{curl 1} + .. z5l + .. z6r{dir (-80)} + .. z5r{left} + .. z7 + .. z6l + ..tension 1.2.. z8{down} + -- cycle; + + penlabels (range 1 thru 10); +fet_endchar; %%% KERNING -ligtable "m" : "p" kern 0.2 ex#, "f" kern -0.1 ex#; -ligtable "f" : "f" kern -0.13 ex#; -ligtable "r" : "f" kern 0.1 ex#; - - - - - - +ligtable "m": + "p" kern 0.2 ex#, + "f" kern -0.1 ex#; +ligtable "f": + "f" kern -0.13 ex#; +ligtable "r": + "f" kern 0.1 ex#; %% 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) +% `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' +% - 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, +% 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 glyphs, % using the x-height as reference point.