]> git.donarmstrong.com Git - lilypond.git/blobdiff - mf/feta-din-code.mf
Lily was here -> Engraved by LilyPond also in the reference manual.
[lilypond.git] / mf / feta-din-code.mf
index 62e19b356b402db9967ec4da843798abb5fa2278..438b923f4b30ddc4b5bc69d6113ab1691e5dc75b 100644 (file)
@@ -1,11 +1,97 @@
 
-code := 111;
+%%
+%
+% TODO: blot diameter should be fixed, not scalable.
+%
+%
+
 
 save serif_thick;
-serif_thick# = 1.1 stafflinethickness#;
+serif_thick# = 1.1 linethickness#;
 define_blacker_pixels (serif_thick);
-med_thick = round (1.5 stafflinethickness);
+med_thick = round (1.5 linethickness);
+bottom_blot = 1.3 serif_thick;
+
+
+code := 32;
+fet_beginchar("Space", "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.)
+%
+
+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.
@@ -27,7 +113,7 @@ slant_angle = 20;
 
 code := 101;
 fet_beginchar("dynamic f", "f", "dynf");
-       set_char_box (0, 1.25 ex#, descender#, ex# + ascender#);
+       set_char_box (0, 1.1 ex#, descender#, ex# + ascender#);
 
        save left_angle, right_angle;
        save serif_length, serif_excentricity;
@@ -45,7 +131,9 @@ fet_beginchar("dynamic f", "f", "dynf");
        serif_length = 0.96 ex;
        serif_excentricity = 0.01 ex;
 
-       z1 = (0.375 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);
@@ -93,7 +181,10 @@ fet_beginchar("dynamic f", "f", "dynf");
        fill p;
 %      draw p;
 
-       pickup pencircle scaled 1.1 serif_thick;
+%
+% todo round for pixels...
+%
+       pickup pencircle scaled round (1.4 serif_thick);
        (rt x13) - (lft x14) = serif_length;
        y13 = y14;
        y14 = y2;
@@ -106,8 +197,98 @@ fet_beginchar("dynamic f", "f", "dynf");
 fet_endchar;
 
 
-save slant;
-slant := ypart (dir(20));
+%
+% Notes:
+%  
+% - 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.)
+%
+% - 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;
+
+
+
 
 %
 % piano p, grabbed from Ed Breitkopf Mozart horn concerto 3.
@@ -132,6 +313,8 @@ save slant;
 slant := ypart (dir(slant_angle));
 currenttransform := currenttransform slanted slant;
 
+code := 111;
+
 
 fet_beginchar("dynamic p", "p", "dynp")
        %
@@ -143,6 +326,7 @@ fet_beginchar("dynamic p", "p", "dynp")
        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;
@@ -155,6 +339,7 @@ fet_beginchar("dynamic p", "p", "dynp")
        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;
@@ -168,7 +353,7 @@ fet_beginchar("dynamic p", "p", "dynp")
 
        x4r - x4l = cheek_thick;
        penpos4 (whatever, 0);
-       penpos5 (cheek_medium, -55);
+       penpos5 (whatever, -38);
        penpos6 (stem_thick, 0);
        penpos17 (straigh_len, 90 -slant);
        whatever [z17l, z17r] =  z4l;
@@ -189,23 +374,44 @@ fet_beginchar("dynamic p", "p", "dynp")
 
        y3r = ex;
        z3l = 0.58 [(stem_thick, -descender), (stem_thick + cheek_width - cheek_thick, -descender)] + whatever * updir;
-       y4r = 1/3  ex;
+       y4r = .38  ex;
        z4r = whatever*updir + (stem_thick+  cheek_width, -descender);
 
        z5l = whatever*updir  + z3l;
-       y5l = 1/12 ex;
+       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}
-               .. tension 1.0 .. z4r{-updir} .. z5r{left} .. z9
+               .. 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;
 
@@ -248,14 +454,13 @@ fet_endchar;
 %
 % NOTES:
 %
-% * right stem is fatter and more straight than the left 2 two  stems.
+% * 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)
@@ -264,7 +469,7 @@ fet_endchar;
 code := 108;
 
 fet_beginchar("dynamic m", "m", "dynm");
-       set_char_box (0, 1.3 ex#, 0, 1.0 ex#);
+       set_char_box (0, 1.5 ex#, 0, 1.0 ex#);
 
        % should share code with p for twiddle.
 
@@ -273,33 +478,35 @@ fet_beginchar("dynamic m", "m", "dynm");
                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 = 18/80 ex;
-       i_twiddle_thick = serif_thick;
+       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);
-       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; 
+       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;
-       z2l = .15 [z3l, z3r] + 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] ;
@@ -317,20 +524,25 @@ fet_beginchar("dynamic m", "m", "dynm");
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        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 = bottom_blot + ypart center; 
+       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;
-       z2l = .15 [z3l, z3r] + 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] ;
@@ -346,9 +558,8 @@ fet_beginchar("dynamic m", "m", "dynm");
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
        i_thick := 23 / 80 ex;
-       i_angle := -7;
+       i_angle := -6;
        i_left_space := 14/80 ex;
-       end_overshoot = .25  serif_thick;
 
 
        idir := dir(90- i_angle);
@@ -369,19 +580,19 @@ fet_beginchar("dynamic m", "m", "dynm");
 
        save end_twiddle_angle;
        end_twiddle_angle := 35;
-       penpos6(.9 serif_thick, - end_twiddle_angle);
+       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+  end_overshoot;
+       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, 2 end_overshoot);
+       z8 = z7 - (0, overshoot);
 
        p := simple_serif (z1l, z1r, 90) .. tension 1.05
                .. z2r{right} .. z5l --- z3l
@@ -401,6 +612,112 @@ fet_beginchar("dynamic m", "m", "dynm");
 
 fet_endchar;
 
+
+code := 113;
+
+
+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;
+
+       pair base_point;
+       base_point = (0,0);
+
+       x1l = 0;
+       y1l = .5 bottom_blot;
+
+       penpos10(stem_thick - bottom_blot, 0);
+       y10 = 0;
+       x10 = x1;
+
+       penpos1 (stem_thick, 0);
+       y2l - y1l = 36/47 ex;
+       x2l = x1l;
+       penpos2 (stem_thick, 0);
+
+       y3 = .77  ex;
+       x3r = x2l - .2 ex;
+       penpos3(twiddle_thick, -20);
+
+       x9 = 0.15 [x1r, x1l] ;
+       y9 = y4l - .12 ex ;
+
+       x4l = -0.1 [x1l, x1r];
+       y4l = ex + overshoot;
+
+       x4r = 0.62 [x3r, x2l];
+       y4r = 0.5 [y4l, y2l];
+
+       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];
+
+
+       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.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)