From: Han-Wen Nienhuys Date: Sun, 7 Apr 2002 22:14:42 +0000 (+0000) Subject: '' X-Git-Tag: release/1.5.51~3 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=22f2d4a75d182f202454324e07cd6a5068931dc8;p=lilypond.git '' --- diff --git a/ChangeLog b/ChangeLog index 43dcc3c848..5ef8577207 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,17 @@ -2002-04-06 Jan Nieuwenhuizen +2002-04-08 Han-Wen + + * VERSION (MY_PATCH_LEVEL): Release 1.5.51. + + * mf/feta-din-code.mf: kerning for dynamics. + +2002-04-07 Han-Wen + + * 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 - * 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 diff --git a/VERSION b/VERSION index 34270fd7a2..854cc6fc04 100644 --- 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 diff --git a/input/mozart-hrn3-romanze.ly b/input/mozart-hrn3-romanze.ly index 4a5fa8e85e..54d840d46c 100644 --- a/input/mozart-hrn3-romanze.ly +++ b/input/mozart-hrn3-romanze.ly @@ -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 index 0000000000..09ea6de4ef --- /dev/null +++ b/input/regression/dynamics-glyphs.tex @@ -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 diff --git a/lily/simple-spacer.cc b/lily/simple-spacer.cc index 60e710d68e..75c2ed7752 100644 --- a/lily/simple-spacer.cc +++ b/lily/simple-spacer.cc @@ -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_); diff --git a/mf/feta-din-code.mf b/mf/feta-din-code.mf index 62e19b356b..3408bb9267 100644 --- a/mf/feta-din-code.mf +++ b/mf/feta-din-code.mf @@ -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, 1 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#;