]> git.donarmstrong.com Git - lilypond.git/commitdiff
''
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 7 Apr 2002 22:14:42 +0000 (22:14 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 7 Apr 2002 22:14:42 +0000 (22:14 +0000)
ChangeLog
VERSION
input/mozart-hrn3-romanze.ly
input/regression/dynamics-glyphs.tex [new file with mode: 0644]
lily/simple-spacer.cc
mf/feta-din-code.mf

index 43dcc3c848e837076050c17f6d53319acc59e7dd..5ef85772072e87e4ad8fc325869f8fd4da85340e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,17 @@
-2002-04-06  Jan Nieuwenhuizen  <janneke@gnu.org>
+2002-04-08  Han-Wen  <hanwen@cs.uu.nl>
+
+       * VERSION (MY_PATCH_LEVEL): Release 1.5.51.
+
+       * mf/feta-din-code.mf: kerning for dynamics.
+
+2002-04-07  Han-Wen  <hanwen@cs.uu.nl>
+
+       * input/regression/dynamics-glyphs.ly: new file
+
+       * mf/feta-din-code.mf: dynamic tweaks. New dynamic s.
+
+       * mf/feta-nummer-code.mf: another bulb routine: mimic the bulb of
+       forte f for the 2 number. Some fixes for the other bulbed glyphs.
 
        * Documentation/windows/gs-profile.sh:
        * Documentation/windows/gsview-profile.sh: Remove.  Functionality
@@ -27,7 +40,7 @@
 
 2002-04-05  Han-Wen  <hanwen@cs.uu.nl>
 
-       * mf/cmbase.mf: remove file. -- do without s and z signs for now.
+       * mf/cmbase.mf: remove file. -- do without s, r and z signs for now.
 
 2002-04-04  Han-Wen  <hanwen@cs.uu.nl>
 
diff --git a/VERSION b/VERSION
index 34270fd7a21ec6de58d5d7faf23251a30469bed9..854cc6fc0493c500241e9e653c34324406bfc27a 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=5
-PATCH_LEVEL=50
-MY_PATCH_LEVEL=mb1
+PATCH_LEVEL=51
+MY_PATCH_LEVEL=
 
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
index 4a5fa8e85ec66a09ea1279897189f9eb618b1ff4..54d840d46c863fc94215af37c774ff2972d66286 100644 (file)
@@ -4,6 +4,7 @@
 romanze = \notes \relative c' {
        \key f \major
        \time 2/2
+       \property Score.skipBars = ##t
 
        c'4.( _#'(italic (dynamic "p") " con molto espressione") 
                )f8 a,4 a
diff --git a/input/regression/dynamics-glyphs.tex b/input/regression/dynamics-glyphs.tex
new file mode 100644 (file)
index 0000000..09ea6de
--- /dev/null
@@ -0,0 +1,365 @@
+% Generated automatically by: lelie, at Sun Apr  7 23:41:57 20022912
+\def\lilypondtagline{Lily was here, 1.5.50.mb1                            }
+\def\LilyPondVersion{1.5.50.mb1}
+\def\lilypondpaperunit{mm}
+% Outputting Score, defined at: 
+% /home/hanwen/usr/src/lilypond/input/regression/dynamics-glyphs.ly:10:1
+\def\lilypondpaperlinethickness{0.175730}
+\def\lilypondpapervsize{296.900000}
+\def\lilypondpaperscmsetting{(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse
+}
+\def\lilypondpaperunit{mm}
+\def\lilypondpaperlineheight{14}
+\def\lilypondpaperstaffheight{7.029196}
+\def\lilypondpaperindent{13.571429}
+\def\lilypondpaperstaffspace{1.757299}
+\def\lilypondpaperpaperfile{a4-init.ly}
+\def\lilypondpaperlinewidth{190.000000}
+\def\lilypondpaperledgerlinethickness{0.351460}
+\let\lilypondpaperpssetting\undefined
+\def\lilypondpaperinterscoreline{4.000000}
+\def\lilypondpaperpapersizename{a4}
+\def\lilypondpaperhsize{210.000000}
+\def\lilypondpaperoutputscale{1.757299}
+\def\lilypondpaperpapersize{a4}
+\def\lilypondpaperblotdiameter{0.014058}
+\let\lilypondpapertexsetting\undefined
+\def\scaletounit{ 2.83464566929134 mul }\special{\string! %!PS-Adobe-1.0: music-drawing-routines.ps %
+% %
+% Functions for direct and embedded PostScript %
+ %
+/blot-diameter { lilypondpaperblotdiameter } bind def %
+ %
+% fucking redhat xdvi patch. %
+/skeel { scale } bind def %
+ %
+ %
+/set_tex_dimen { %
+       cvr def      %
+} bind def %
+ %
+/euclidean_length   %
+{  %
+       1 copy mul exch 1 copy mul add sqrt  %
+} bind def  %
+ %
+/skeel { scale } bind def %
+% FIXME.  translate to middle of box. %
+% Nice rectangle with rounded corners %
+/draw_box % breapth width depth height %
+{ %
+       currentdict /testing known { %
+               %% real thin lines for testing %
+               /blot 0.005 def %
+       }{ %
+               /blot blot-diameter def %
+       } ifelse %
+ %
+       0 setlinecap %
+       blot setlinewidth %
+       1 setlinejoin %
+ %
+       blot 2 div sub /h exch def %
+       blot 2 div sub /d exch def %
+       blot 2 div sub /w exch def %
+       blot 2 div sub /b exch def %
+ %
+       b neg d neg moveto %
+       b w add 0 rlineto %
+       0 d h add rlineto %
+       b w add neg 0 rlineto %
+       0 d h add neg rlineto %
+ %
+       currentdict /testing known { %
+               %% outline only, for testing: %
+               stroke %
+       }{ %
+               closepath gsave stroke grestore fill %
+       } ifelse %
+} bind def %
+ %
+/draw_round_box % breapth width depth height blot %
+{ %
+       /blot exch def %
+ %
+       0 setlinecap %
+       blot setlinewidth %
+       1 setlinejoin %
+ %
+       blot 2 div sub /h exch def %
+       blot 2 div sub /d exch def %
+       blot 2 div sub /w exch def %
+       blot 2 div sub /b exch def %
+ %
+       b neg d neg moveto %
+       b w add 0 rlineto %
+       0 d h add rlineto %
+       b w add neg 0 rlineto %
+       0 d h add neg rlineto %
+ %
+       currentdict /testing known { %
+               %% outline only, for testing: %
+               stroke %
+       }{ %
+               closepath gsave stroke grestore fill %
+       } ifelse %
+} bind def %
+ %
+% Nice beam with rounded corners %
+/draw_beam % slope width thick  %
+{ %
+       currentdict /testing known { %
+               %% real thin lines for testing %
+               /blot 0.005 def %
+       }{ %
+               /blot blot-diameter def %
+       } ifelse %
+       blot setlinewidth %
+ %
+       0 setlinecap %
+       1 setlinejoin %
+ %
+       blot sub /t exch def %
+       blot sub /w exch def %
+       w mul /h exch def %
+ %
+       blot 2 div t 2 div neg moveto %
+       w h rlineto %
+       0 t rlineto %
+       w neg h neg rlineto %
+       0 t neg rlineto %
+ %
+       currentdict /testing known { %
+               %% outline only, for testing: %
+               stroke %
+       }{ %
+               closepath gsave stroke grestore fill %
+       } ifelse %
+} bind def  %
+ %
+/draw_repeat_slash % width slope thick %
+{ %
+       1 setlinecap %
+       1 setlinejoin %
+ %
+       /beamthick exch def %
+       /slope exch def %
+       /width exch def %
+       beamthick beamthick slope div euclidean_length %
+         /xwid exch def  %
+       0 0 moveto %
+       xwid 0  rlineto %
+       width slope width mul rlineto %
+       xwid neg 0 rlineto %
+      %  width neg width angle sin mul neg rlineto %
+       closepath fill %
+} bind def %
+ %
+ %
+/draw_ez_ball % ch letter_col ball_col font %
+{ %
+       % font %
+       findfont 0.7 scalefont setfont  %
+       0.1 setlinewidth %
+       0 0 moveto %
+       0 setgray %
+       0.5 0 0.5 0 360 arc closepath fill stroke %
+       % ball_col %
+       1 eq { %
+               0.01 setlinewidth %
+               1 setgray %
+               0.5 0 0.4 0 360 arc closepath %
+               fill stroke %
+       } if  %
+       % letter_col %
+       setgray %
+       % 0.25 is empiric centering. Change to taste %
+       0.25 -0.25 moveto %
+       % ch %
+       show %
+} bind def %
+ %
+% Simple, but does it work everywhere? %
+% Han-Wen reports that one printer (brand?) at cs.uu.nl chokes on this, %
+% reverted for now -- jcn %
+% %
+% The filled circles are drawn by setting the linewidth %
+% to 2*radius and drawing a point. %
+/simple_draw_ez_ball % ch letter_col ball_col font %
+{ %
+       % font %
+       findfont 0.85 scalefont setfont %
+       /origin { 0.45 0 } def %
+       0 setgray %
+       1.1 setlinewidth %
+       origin moveto %
+       origin lineto stroke %
+       % ball_col %
+       setgray %
+       0.9 setlinewidth %
+       origin moveto %
+       origin lineto stroke %
+       % letter_col %
+       setgray %
+       % 0.25 is empiric centering. Change to taste %
+       origin moveto %
+       -0.28 -0.30 rmoveto %
+       % ch %
+       show %
+} bind def %
+ %
+% this is for drawing slurs.  %
+/draw_bezier_sandwich  % thickness controls  %
+{  %
+       setlinewidth  %
+       moveto  %
+       curveto  %
+       lineto  %
+       curveto  %
+       gsave  %
+       fill  %
+       grestore  %
+       stroke  %
+} bind def  %
+ %
+/draw_dot % x1 y2 R %
+{ %
+%      0 360 arc fill stroke %
+       0 360 arc closepath fill stroke %
+} bind def %
+ %
+/draw_dashed_line % dash thickness dx dy %
+{  %
+       1 setlinecap  %
+       1 setlinejoin  %
+       setdash  %
+       setlinewidth  %
+       0 0 moveto %
+       lineto %
+       stroke  %
+} bind def  %
+ %
+/draw_dashed_slur % dash thickness controls %
+{  %
+       1 setlinecap  %
+       1 setlinejoin  %
+       setdash  %
+       setlinewidth  %
+       8 -2 roll  %
+       moveto  %
+       curveto  %
+       stroke  %
+} bind def  %
+ %
+ %
+ %
+/bracket_traject  %
+{  %
+       /traject_ds exch def  %
+       /traject_alpha exch def  %
+       traject_ds traject_alpha sin mul add  %
+       exch  %
+       traject_ds traject_alpha cos mul add  %
+       exch  %
+} bind def  %
+ %
+ %
+ %
+/half_bracket %
+{  %
+%6  %
+       0 0  %
+%5a  %
+       bracket_thick arch_height add half_height arch_thick sub arch_width add  %
+       arch_angle arch_height -0.15 mul bracket_traject  %
+%5b  %
+       bracket_thick 0.5 mul half_height  %
+       0 arch_height 0.5 mul bracket_traject  %
+%5c  %
+       0 half_height  %
+%4a  %
+       bracket_thick half_height arch_thick sub  %
+       0 arch_height 0.4 mul bracket_traject  %
+%4b  %
+       bracket_thick arch_height add half_height arch_thick sub arch_width add  %
+       arch_angle arch_height -0.25 mul bracket_traject  %
+%4c  %
+       bracket_thick arch_height add half_height arch_thick sub arch_width add  %
+%3  %
+       bracket_thick half_height arch_thick sub  %
+%2  %
+       bracket_thick 0  %
+%1  %
+       0 0  %
+} bind def  %
+ %
+/draw_half_bracket {  %
+       moveto  %
+       lineto  %
+       lineto  %
+       curveto  %
+       curveto  %
+       lineto  %
+       gsave  %
+       fill  %
+       grestore  %
+} bind def  %
+ %
+/draw_bracket % arch_angle arch_width arch_height bracket_height arch_thick bracket_thick %
+{  %
+       % urg %
+ %
+       /bracket_thick exch def %
+       /arch_thick exch def %
+       /bracket_height exch def %
+       /arch_height exch def %
+       /arch_width exch def %
+       /arch_angle exch def %
+ %
+       bracket_height 2 div bracket_thick add /half_height exch def  %
+       bracket_thick 0.5 mul setlinewidth %
+       1 setlinecap  %
+       1 setlinejoin  %
+       half_bracket  %
+       20 copy  %
+       1 -1 scale  %
+       draw_half_bracket  %
+       stroke  %
+       1 -1 scale  %
+       draw_half_bracket  %
+       stroke  %
+} bind def  %
+ %
+}\input lilyponddefs \outputscale=\lilypondpaperoutputscale \lilypondpaperunit\turnOnPostScript\font\magfontAOYTomMMBo=feta20 scaled 1000 
+\font\magfontOHZTomMMBo=feta-din14 scaled 1000 
+\vbox to  12.1900  \outputscale {\hbox{%
+\placebox{ -8.0000  \outputscale }{  7.7229  \outputscale }{\kern  0.0000  \outputscale \vrule width 100.3976  \outputscale depth   0.0500  \outputscale height   0.0500  \outputscale  }%
+\placebox{ -7.0000  \outputscale }{  7.7229  \outputscale }{\kern  0.0000  \outputscale \vrule width 100.3976  \outputscale depth   0.0500  \outputscale height   0.0500  \outputscale  }%
+\placebox{ -6.0000  \outputscale }{  7.7229  \outputscale }{\kern  0.0000  \outputscale \vrule width 100.3976  \outputscale depth   0.0500  \outputscale height   0.0500  \outputscale  }%
+\placebox{ -5.0000  \outputscale }{  7.7229  \outputscale }{\kern  0.0000  \outputscale \vrule width 100.3976  \outputscale depth   0.0500  \outputscale height   0.0500  \outputscale  }%
+\placebox{ -4.0000  \outputscale }{  7.7229  \outputscale }{\kern  0.0000  \outputscale \vrule width 100.3976  \outputscale depth   0.0500  \outputscale height   0.0500  \outputscale  }%
+\placebox{ -6.0000  \outputscale }{ 12.9229  \outputscale }{\magfontAOYTomMMBo\char113 }%
+\placebox{ -7.0000  \outputscale }{  8.7229  \outputscale }{\magfontAOYTomMMBo\char107 }%
+\placebox{ -6.0000  \outputscale }{ 94.2127  \outputscale }{\kern -0.0650  \outputscale \vrule width   0.1300  \outputscale depth   3.0000  \outputscale height   0.2250  \outputscale  }%
+\placebox{ -5.5000  \outputscale }{ 94.1477  \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067  \outputscale }{ 92.3005  \outputscale }{\magfontOHZTomMMBo\hbox{sfp}}%
+\placebox{ -6.0000  \outputscale }{ 72.2307  \outputscale }{\kern  0.0000  \outputscale \vrule width   0.1600  \outputscale depth   2.0000  \outputscale height   2.0000  \outputscale  }%
+\placebox{ -6.0000  \outputscale }{ 80.2399  \outputscale }{\kern -0.0650  \outputscale \vrule width   0.1300  \outputscale depth   3.0000  \outputscale height   0.2250  \outputscale  }%
+\placebox{ -5.5000  \outputscale }{ 80.1749  \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-10.7667  \outputscale }{ 78.7166  \outputscale }{\magfontOHZTomMMBo\hbox{pp}}%
+\placebox{ -6.0000  \outputscale }{ 59.2643  \outputscale }{\kern -0.0650  \outputscale \vrule width   0.1300  \outputscale depth   3.0000  \outputscale height   0.2250  \outputscale  }%
+\placebox{ -5.5000  \outputscale }{ 59.1993  \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-10.7667  \outputscale }{ 57.7118  \outputscale }{\magfontOHZTomMMBo\hbox{mp}}%
+\placebox{ -6.0000  \outputscale }{ 45.2916  \outputscale }{\kern -0.0650  \outputscale \vrule width   0.1300  \outputscale depth   3.0000  \outputscale height   0.2250  \outputscale  }%
+\placebox{ -5.5000  \outputscale }{ 45.2266  \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067  \outputscale }{ 43.7390  \outputscale }{\magfontOHZTomMMBo\hbox{mf}}%
+\placebox{ -6.0000  \outputscale }{ 31.3188  \outputscale }{\kern -0.0650  \outputscale \vrule width   0.1300  \outputscale depth   3.0000  \outputscale height   0.2250  \outputscale  }%
+\placebox{ -5.5000  \outputscale }{ 31.2538  \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067  \outputscale }{ 30.5246  \outputscale }{\magfontOHZTomMMBo\hbox{f}}%
+\placebox{ -6.0000  \outputscale }{ 17.3460  \outputscale }{\kern -0.0650  \outputscale \vrule width   0.1300  \outputscale depth   3.0000  \outputscale height   0.2250  \outputscale  }%
+\placebox{ -5.5000  \outputscale }{ 17.2810  \outputscale }{\magfontAOYTomMMBo\char32 }%
+\placebox{-11.6067  \outputscale }{ 15.8227  \outputscale }{\magfontOHZTomMMBo\hbox{ff}}%
+\placebox{ -7.0000  \outputscale }{  8.7229  \outputscale }{\magfontAOYTomMMBo\char107 }%
+\placebox{ -6.0000  \outputscale }{ 12.9229  \outputscale }{\magfontAOYTomMMBo\char113 }%
+}\vss}
+\EndLilyPondOutput
\ No newline at end of file
index 60e710d68ebbb6343dde5e6d52311633c752bec9..75c2ed7752a2a007af4dc0d799459b779be7ecd6 100644 (file)
@@ -325,7 +325,7 @@ Simple_spacer::solve (Column_x_positions *positions, bool ragged) const
        maybe this should be tunable?
        */
       if (compression_penalty_b_)
-       positions->force_f_ *= 2; //  hmm.
+       ; //    positions->force_f_ *= 2; //  hmm.
     }
   
   positions->config_.push (indent_f_);
index 62e19b356b402db9967ec4da843798abb5fa2278..3408bb92670cd45bc7fc918d39f2bf7ececeefb2 100644 (file)
@@ -1,6 +1,4 @@
 
-code := 111;
-
 save serif_thick;
 serif_thick# = 1.1 stafflinethickness#;
 define_blacker_pixels (serif_thick);
@@ -27,7 +25,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 +43,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 +93,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 +109,96 @@ 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, 2/3 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 - 0;
+       right_angle =  slant_angle -9;
+       s_thick = 7.5/36 ex;
+       s_thin = 5/70 ex;
+       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 +223,8 @@ save slant;
 slant := ypart (dir(slant_angle));
 currenttransform := currenttransform slanted slant;
 
+code := 111;
+
 
 fet_beginchar("dynamic p", "p", "dynp")
        %
@@ -264,7 +357,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,9 +366,12 @@ 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);
@@ -285,21 +381,21 @@ fet_beginchar("dynamic m", "m", "dynm");
        i_twiddle_start_y =  8/16 ex;
        i_twiddle_start_angle = 0;
        center =(0,0);
-       bottom_blot = serif_thick;
+       bottom_blot = 1.5 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 +413,25 @@ fet_beginchar("dynamic m", "m", "dynm");
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        clearxy;
 
+       i_angle := -3.2;
+       idir := dir(90 - i_angle);
+       i_left_space := 15/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 +447,8 @@ fet_beginchar("dynamic m", "m", "dynm");
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
        i_thick := 23 / 80 ex;
-       i_angle := -7;
-       i_left_space := 14/80 ex;
-       end_overshoot = .25  serif_thick;
+       i_angle := -6;
+       i_left_space := 15/80 ex;
 
 
        idir := dir(90- i_angle);
@@ -376,12 +476,12 @@ fet_beginchar("dynamic m", "m", "dynm");
 
 
        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
@@ -418,3 +518,6 @@ fet_endchar;
 
 % Chester, Breitkopf suggest smaller sizes of these other chars,
 % using the x-height as reference point.
+
+ligtable "m" : "p" kern 0.25 ex#, "f" kern;
+ligtable "f" : "f"  kern -0.13 ex#;