X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=mf%2Ffeta-din-code.mf;h=24f0e65747138bfd382ba1a815be7dc2867295ad;hb=7ba83c74a6c70ca067ac464af977389558092a14;hp=ed795cb4e825fcec600aea602003d9ffe54d16f0;hpb=acec5c037f53a163237c31486b84971aa33deaab;p=lilypond.git diff --git a/mf/feta-din-code.mf b/mf/feta-din-code.mf index ed795cb4e8..24f0e65747 100644 --- a/mf/feta-din-code.mf +++ b/mf/feta-din-code.mf @@ -1,179 +1,725 @@ -% feta-din.mf + +save serif_thick; +serif_thick# = 1.1 stafflinethickness#; +define_blacker_pixels (serif_thick); +med_thick = round (1.5 stafflinethickness); +bottom_blot = 1.3 serif_thick; + + + +% +% 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", "dynz"); + set_char_box (0, .98 ex#, 0, 0.9 ex#); + + save thin_thick, top_narrow, over_shoot; + save bot_thick; + + thin_thick = serif_thick; + top_narrow = thin_thick; + top_overshoot = .8 serif_thick; + top_thick = .3 h ; + bot_thick = .2 ex; + bot_overshoot = serif_thick; + + x0 = + top_narrow; + y0 = .9 [y1r, y1l]; + 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; + + x5l =.25 ex; + y5l = .4 bot_overshoot; + 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); + + 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 ; + + fill p; fill q; fill r; + +fet_endchar; + + +% forte f, grabbed from Ed Breitkopf Mozart horn concerto 3. +% +% NOTES: +% +% * the bulbs are open. +% +% * blotting around the serif % -% from cmbxti10.mf % -% feta dynamics -% too easy now to use this copy from cm, but we might want to do ourselves % -% 16pt staff: \font\dynfont=feta-din10 scaled \magstep1 -% 20pt staff: \font\dynfont=feta-din10 scaled \magstep2 +% TODO: insert blots around the serif +% +% +% +slant_angle = 20; + + +code := 101; +fet_beginchar("dynamic f", "f", "dynf"); + set_char_box (0, 1.1 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 is the "base point" + z1 = (0.2 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; + +% +% todo round for pixels... +% + pickup pencircle scaled round (1.4 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; + % -% Computer Modern Bold Extended Text Italic 10 point +% Notes: +% +% - The S is trapezoidal (i.e. narrower at the top) % -% font_identifier:="CMBXTI"; font_size 10pt#; +% - The white space is differently shaped at the top (the bulb's inner +% curve is filled up.) % +% - less heavy than the f and p signs. +% + + +code := 114; +fet_beginchar("dynamic s", "s", "dyns"); + set_char_box (0, 17/24 ex#, 0, 1 ex#); + + 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; + pair base_point; + + bulb_diam = 11/70 ex; + bulb_len = 1.0 bulb_diam; + left_angle = slant_angle - 2; + right_angle = slant_angle -11; + + s_thick = 16/70 ex; + s_thin = serif_thick; + + base_point = (0,0); + + penpos1 (bulb_diam, -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); + penpos3 (s_thin, 100); + 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); + penpos5 (s_thick, 40); + z5 = z3l + whatever * dir (90-right_angle); + y5 = ypart (0.48 [z7r, z3r]); + + + penpos6 (s_thick, 25); + 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); + y7r = h + over_shoot; + + penpos8 (.9 bulb_diam, -25); + z8 = .6 [z4l,z4r] + whatever *dir(90-right_angle); + + y8r = ypart (0.23 [z7r, z3r]); + + penpos9 (.9 bulb_diam, -45); + z9 = .4 [z8r,z8l] + .9 bulb_len * dir (-135); + + penlabels(1,2,3,4,5,6,7,8,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; +fet_endchar; -input cmbase; + +% +% 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. % -% We bluntly multiply by font-size / 10pt#, -% before we did plain scaling anyway. % -M:=design_size/10; +save slant; +slant := ypart (dir(slant_angle)); +currenttransform := currenttransform slanted slant; + +code := 111; + + +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; + save lower_overshoot; + + 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; + 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; + + penpos1 (twiddle_thick, -slant - 5); + 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); + 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 = .38 ex; + z4r = whatever*updir + (stem_thick+ cheek_width, -descender); + + z5l = whatever*updir + z3l; + y5r = -lower_overshoot; + y5l = y5r + cheek_medium * ypart dir(55); + + z9 = z6r + whatever*updir; + 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; + + 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); + + save blot_path; + path blot_path; + + pickup pencircle scaled 1; + + fill z19{up} .. {right}z20{updir} .. z19{-(direction corner_t - 2 blot_t of p)} .. 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; -u#:=M*21.2/36pt#; % unit width -width_adj#:=M*11/36pt#; % width adjustment for certain characters -serif_fit#:=M*0pt#; % extra sidebar near lowercase serifs -cap_serif_fit#:=M*7/36pt#; % extra sidebar near uppercase serifs -letter_fit#:=M*11/36pt#; % extra space added to all sidebars +% +% 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. +% -body_height#:=M*270/36pt#; % height of tallest characters -asc_height#:=M*250/36pt#; % height of lowercase ascenders -cap_height#:=M*247/36pt#; % height of caps -fig_height#:=M*232/36pt#; % height of numerals -x_height#:=M*160/36pt#; % height of lowercase without ascenders -math_axis#:=M*90/36pt#; % axis of symmetry for math symbols -bar_height#:=M*85/36pt#; % height of crossbar in lowercase e -comma_depth#:=M*70/36pt#; % depth of comma below baseline -desc_depth#:=M*70/36pt#; % depth of lowercase descenders +% +% +% 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.5 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; + save overshoot; + pair center, idir, right_ending; + + path p; + + overshoot = .25 serif_thick; + i_thick := 21 / 80 ex; + i_angle := 0; + idir := dir(90- i_angle); + + i_left_space = 16/80 ex; + i_twiddle_thick = 1.2 serif_thick; + i_twiddle_start_y = 8/16 ex; + i_twiddle_start_angle = 0; + center =(0,0); + + penpos1 (i_twiddle_thick, -i_twiddle_start_angle); + y1 = i_twiddle_start_y; + z1r = center - (i_left_space,0) + whatever * idir; + + y3 = 0.5 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 + 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); + 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; + + i_angle := -3.2; + idir := dir(90 - i_angle); + i_left_space := 14/80 ex; + + + 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); + z3l = z5l + whatever * idir; + y4 = ypart center; + penpos4(i_thick - bottom_blot, 0); + 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); + + 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 := -6; + i_left_space := 14/80 ex; + + + 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(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; + 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; + +% pickup pencircle scaled 1; +% draw p; + fill p; + right_ending := z5r; + penlabels (1, 2, 3 , 4,5,6,7, 8); + clearxy; -crisp#:=M*13/36pt#; % diameter of serif corners -tiny#:=M*13/36pt#; % diameter of rounded corners -fine#:=M*10/36pt#; % diameter of sharply rounded corners -thin_join#:=M*10/36pt#; % width of extrafine details -hair#:=M*20/36pt#; % lowercase hairline breadth -stem#:=M*38/36pt#; % lowercase stem breadth -curve#:=M*43/36pt#; % lowercase curve breadth -ess#:=M*35/36pt#; % breadth in middle of lowercase s -flare#:=M*42/36pt#; % diameter of bulbs or breadth of terminals -dot_size#:=M*53/36pt#; % diameter of dots -cap_hair#:=M*22/36pt#; % uppercase hairline breadth -cap_stem#:=M*49/36pt#; % uppercase stem breadth -cap_curve#:=M*52/36pt#; % uppercase curve breadth -cap_ess#:=M*50/36pt#; % breadth in middle of uppercase s -rule_thickness#:=M*.6pt#; % thickness of lines in math symbols +fet_endchar; -dish#:=M*1/36pt#; % amount erased at top or bottom of serifs -bracket#:=M*10/36pt#; % vertical distance from serif base to tangent -jut#:=M*27/36pt#; % protrusion of lowercase serifs -cap_jut#:=M*39/36pt#; % protrusion of uppercase serifs -beak_jut#:=M*10/36pt#; % horizontal protrusion of beak serifs -beak#:=M*70/36pt#; % vertical protrusion of beak serifs -vair#:=M*13/36pt#; % vertical diameter of hairlines -notch_cut#:=M*10pt#; % maximum breadth above or below notches -bar#:=M*17/36pt#; % lowercase bar thickness -slab#:=M*17/36pt#; % serif and arm thickness -cap_bar#:=M*17/36pt#; % uppercase bar thickness -cap_band#:=M*17/36pt#; % uppercase thickness above/below lobes -cap_notch_cut#:=M*10pt#; % max breadth above/below uppercase notches -serif_drop#:=M*3/36pt#; % vertical drop of sloped serifs -stem_corr#:=M*2/36pt#; % for small refinements of stem breadth -vair_corr#:=M*1.5/36pt#; % for small refinements of hairline height -apex_corr#:=M*0pt#; % extra width at diagonal junctions -o#:=M*6/36pt#; % amount of overshoot for curves -apex_o#:=M*6/36pt#; % amount of overshoot for diagonal junctions +code := 113; -slant:=.25; % tilt ratio $(\Delta x/\Delta y)$ -fudge:=1; % factor applied to weights of heavy characters -math_spread:=.5; % extra openness of math symbols -superness:=8/11; % parameter for superellipses -superpull:=1/8; % extra openness inside bowls -beak_darkness:=.4; % fraction of triangle inside beak serifs -ligs:=2; % level of ligatures to be included -square_dots:=false; % should dots be square? -hefty:=false; % should we try hard not to be overweight? -serifs:=true; % should serifs and bulbs be attached? -monospace:=false; % should all characters have the same width? -variant_g:=true; % should an italic-style g be used? -low_asterisk:=false; % should the asterisk be centered at the axis? -math_fitting:=false; % should math-mode spacing be used? +currenttransform := identity slanted ypart(dir(15)); +fet_beginchar("dynamic r", "r", "dynr"); + set_char_box (0, .75 ex#, 0, 1ex#); + save base_point, stem_thick, bulb_diam; + save twiddle_thick, attach_len, overshoot, taille; + stem_thick =.26 ex; + bulb_diam = .30 ex; + twiddle_thick= 1.1 serif_thick; + overshoot = .5 serif_thick; + taille = -0.3 serif_thick; -% "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" + pair base_point; + base_point = (0,0); -% "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". + x1l = 0; + y1l = .5 bottom_blot; -slant:=.68; % tilt ratio $(\Delta x/\Delta y)$ -crisp#:=M*19/36pt#; % diameter of serif corners -tiny#:=M*19/36pt#; % diameter of rounded corners -fine#:=M*20/36pt#; % diameter of sharply rounded corners -thin_join#:=M*20/36pt#; % width of extrafine details -stem#:=M*72/36pt#; % lowercase stem breadth -flare#:=M*52/36pt#; % diameter of bulbs or breadth of terminals + penpos10(stem_thick - bottom_blot, 0); + y10 = 0; + x10 = x1; -mode_setup; -font_setup; + penpos1 (stem_thick, 0); + y2l - y1l = 36/47 ex; + x2l = x1l; + penpos2 (stem_thick, 0); -num=-1; -xbar:=M*u; + y3 = .77 ex; + x3r = x2l - .2 ex; + penpos3(twiddle_thick, -20); -save fcode; + x9 = 0.15 [x1r, x1l] ; + y9 = y4l - .12 ex ; -fcode = 101; -input feta-ital-f; + x4l = -0.1 [x1l, x1r]; + y4l = ex + overshoot; -bar#:=M*17/36pt#; % lowercase bar thickness -slant:=.38; % tilt ratio $(\Delta x/\Delta y)$ -stem#:=M*58/36pt#; % lowercase stem breadth -font_setup; -xbar:=M*.4u; + x4r = 0.62 [x3r, x2l]; + y4r = 0.5 [y4l, y2l]; -save fcode; + penpos5(whatever, -74); + y5l - y5r = bulb_diam; + y5l = ex + overshoot; + x5 = x2r + attach_len; + attach_len + bulb_diam/2 + stem_thick = w; -fcode = 102; + z6 = z5; + penpos6 (bulb_diam, 0); +% z7 = z6l + taille* dir(180); -input feta-ital-f; -stem#:=M*54/36pt#; % lowercase stem breadth -hair#:=M*12/36pt#; % lowercase hairline breadth -vair#:=M*7/36pt#; % vertical diameter of hairlines + save alpha; + alpha := 35; + z7 = z6 + .4 * bulb_diam * dir (-90 -alpha); + z8 = 9/10 [z1r, z2r]; -font_setup; -input feta-ital-p; + save p; + path p; + + 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 ; + + + + + +%%% KERNING + +ligtable "m" : "p" kern 0.15 ex#, "f" kern -0.1 ex#; +ligtable "f" : "f" kern -0.13 ex#; +ligtable "r" : "f" kern 0.1 ex#; -slant:=.28; % tilt ratio $(\Delta x/\Delta y)$ -stem#:=M*32/36pt#; % lowercase stem breadth -ess#:=M*28/36pt#; % breadth in middle of lowercase s -hair#:=M*14/36pt#; % lowercase hairline breadth -vair#:=M*9/36pt#; % vertical diameter of hairlines -flare#:=M*36/36pt#; % diameter of bulbs or breadth of terminals -crisp#:=M*13/36pt#; % diameter of serif corners -tiny#:=M*13/36pt#; % diameter of rounded corners -fine#:=M*10/36pt#; % diameter of sharply rounded corners -thin_join#:=M*10/36pt#; % width of extrafine details -curve#:=M*43/36pt#; % lowercase curve breadth -% Chester, Breitkopf suggest smaller sizes of these other chars, -% using the x-height as reference point. -x_height#:=M*135/36pt#; % height of lowercase without ascenders -font_setup; -input feta-ital-m; -input feta-ital-r; -input feta-ital-s; -input feta-ital-z; -font_slant slant; -font_x_height x_height#; -font_quad 18u#; % to have a working em unit -%%fet_endfont("feta-din"); + + +%% 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.