]> git.donarmstrong.com Git - lilypond.git/commitdiff
''
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 9 Apr 2002 23:21:21 +0000 (23:21 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 9 Apr 2002 23:21:21 +0000 (23:21 +0000)
ChangeLog
Documentation/user/refman.itely
VERSION
input/mozart-hrn3-romanze.ly
input/regression/dynamics-glyphs.ly
lily/arpeggio.cc
lily/include/arpeggio.hh
lilypond-mode.el
ly/property-init.ly
mf/feta-din-code.mf
mf/feta-eindelijk.mf

index f6b7966f19aee85c80e74e33757dd03fec1c9bf3..3720b62e9bf30868424b9a602f4fc6c4729ce502 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2002-04-09 Chris Jackson <chris@fluffhouse.org.uk>
+
+       * lily/arpeggio.cc: New function brew_chord_bracket to draw chord
+       brackets using arpeggio requests.
+       
+       * ly/property-init.ly: Shorthand \arpeggioBracket defined as the
+       molecule-callback to use for drawing the brackets.
+
+       * Documentation/user/refman.itely: 
+       * input/test/chord-bracket.ly: Chord brackets documented
+       
 2002-04-10  Han-Wen  <hanwen@cs.uu.nl>
 
        * mf/feta-din-code.mf: tweaks for p, s. New dynamic r sign. 
 2002-04-10  Han-Wen  <hanwen@cs.uu.nl>
 
        * mf/feta-din-code.mf: tweaks for p, s. New dynamic r sign. 
@@ -20,6 +31,9 @@
        separate "Command"-menu and "LilyPond"-menu. Added "Miscellanous"-
        submenu to "LilyPond"-menu.
 
        separate "Command"-menu and "LilyPond"-menu. Added "Miscellanous"-
        submenu to "LilyPond"-menu.
 
+       * lilypond-mode.el: Added "Midi all" to "Command"-menu, i.e.,
+       an interface to play midi.
+
 2002-04-08  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
 
        * input/regression/script-stack-order.ly: new file.
 2002-04-08  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
 
        * input/regression/script-stack-order.ly: new file.
index ec472a3fd43e5fe46100a3ea5c3cb1bb59423843..d0a5b015b653f97a1393f9b5eeba41094364411a 100644 (file)
@@ -2016,7 +2016,7 @@ to the chords in both staves, and set
 @end lilypond
 
 This command creates @internalsref{Arpeggio} grobs.  Cross staff arpeggios
 @end lilypond
 
 This command creates @internalsref{Arpeggio} grobs.  Cross staff arpeggios
-are @code{PianoStaff.Arpeggio}. @internalsref{Arpeggio}
+are @code{PianoStaff.Arpeggio}.
 
 To add an arrow head to explicitly specify the direction of the
 arpeggio, you should set the arpeggio grob property
 
 To add an arrow head to explicitly specify the direction of the
 arpeggio, you should set the arpeggio grob property
@@ -2031,19 +2031,20 @@ arpeggio, you should set the arpeggio grob property
   }
 @end lilypond
 
   }
 @end lilypond
 
-@ignore
 A square bracket on the left indicates that the player should not
 A square bracket on the left indicates that the player should not
-arpeggiate the chord.
+arpeggiate the chord. To draw these brackets, set the
+@code{molecule-callback} property of @code{Arpeggio} or
+@code{PianoStaff.Arpeggio} grobs to @code{\arpeggioBracket}, and use
+@code{\arpeggio} statements within the chords as before.
 
 
-@lil ypond[fragment,relative,verbatim]
+@lilypond[fragment,relative,verbatim]
   \context PianoStaff <
     \property PianoStaff.connectArpeggios = ##t
   \context PianoStaff <
     \property PianoStaff.connectArpeggios = ##t
-    \property PianoStaff.Arpeggio \override #'arpeggio-direction = #'bracket
+    \property PianoStaff.Arpeggio \override #'molecule-callback = \arpeggioBracket
     \context Voice = one  { <c'\arpeggio e g c> }
     \context Voice = other { \clef bass  <c,,\arpeggio e g>}
   >  
     \context Voice = one  { <c'\arpeggio e g c> }
     \context Voice = other { \clef bass  <c,,\arpeggio e g>}
   >  
-@ e nd lilypond
-@end ignore
+@end lilypond
 
 
 @refbugs
 
 
 @refbugs
diff --git a/VERSION b/VERSION
index c7e7eef60be4e5e70388a13f548226ac40933254..a94c8d5d6192a450931aec37ebb9bc58b36a0568 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=5
 PATCH_LEVEL=51
 MAJOR_VERSION=1
 MINOR_VERSION=5
 PATCH_LEVEL=51
-MY_PATCH_LEVEL=hjj1
+MY_PATCH_LEVEL=uu1
 
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
index 54d840d46c863fc94215af37c774ff2972d66286..c6dccf0f548a5b363d64a9ddc1ba2cd6a2aba229 100644 (file)
@@ -65,7 +65,7 @@ romanze = \notes \relative c' {
        [c8( e g )bes] [a( c f ) d]
        c-. r e-. r f4 r4       
        g,1\pp
        [c8( e g )bes] [a( c f ) d]
        c-. r e-. r f4 r4       
        g,1\pp
-       c,2~c4. c8
+       c,2 c4. c8
        [c8( e g )bes] [a( c f ) d]
        c r e r f4 r4                   % -. ? 
 
        [c8( e g )bes] [a( c f ) d]
        c r e r f4 r4                   % -. ? 
 
index 3cb389a100f9a7f313183292fce8de38922f164f..ed6d268a016f6f054597274cb37221a85c9193c7 100644 (file)
@@ -7,6 +7,7 @@ of the hairpin signs."
     
 \notes\relative c'' { c4-\ff
                      c \f
     
 \notes\relative c'' { c4-\ff
                      c \f
+                     c \rfz                  
                      c \mf
                      c \mp \> \!
                      c \pp \< \!
                      c \mf
                      c \mp \> \!
                      c \pp \< \!
index dcf1a03dac2098dfd0c39ebf68bc0247267ae394..dfd112887bd6ad7b099449f7d5870439db03b56b 100644 (file)
@@ -1,5 +1,5 @@
 /*   
 /*   
-  arpegggio.cc -- implement Arpeggio
+  arpeggio.cc -- implement Arpeggio
 
   source file of the GNU LilyPond music typesetter
   
 
   source file of the GNU LilyPond music typesetter
   
@@ -15,6 +15,7 @@
 #include "staff-symbol.hh"
 #include "warn.hh"
 #include "font-interface.hh"
 #include "staff-symbol.hh"
 #include "warn.hh"
 #include "font-interface.hh"
+#include "lookup.hh"
 
 bool
 Arpeggio::has_interface (Grob* me)
 
 bool
 Arpeggio::has_interface (Grob* me)
@@ -93,6 +94,52 @@ Arpeggio::brew_molecule (SCM smob)
   return mol.smobbed_copy () ;
 }
 
   return mol.smobbed_copy () ;
 }
 
+/* Draws a vertical bracket to the left of a chord 
+   Chris Jackson <chris@fluffhouse.org.uk> */
+
+MAKE_SCHEME_CALLBACK (Arpeggio, brew_chord_bracket, 1);
+SCM 
+Arpeggio::brew_chord_bracket (SCM smob) 
+{
+  Grob *me = unsmob_grob (smob);
+  
+  Grob * common = me;
+  for (SCM s = me->get_grob_property ("stems"); gh_pair_p (s); s = ly_cdr (s))
+    {
+      Grob * stem =  unsmob_grob (ly_car (s));
+      common =  common->common_refpoint (Staff_symbol_referencer::staff_symbol_l (stem),
+                                Y_AXIS);
+    }
+
+  Interval heads;
+  Real my_y = me->relative_coordinate (common, Y_AXIS);
+      
+  for (SCM s = me->get_grob_property ("stems"); gh_pair_p (s); s = ly_cdr (s))
+    {
+      Grob * stem = unsmob_grob (ly_car (s));
+      Grob * ss = Staff_symbol_referencer::staff_symbol_l (stem);
+      Interval iv = Stem::head_positions (stem);
+      iv *= Staff_symbol::staff_space (ss)/2.0;      
+      heads.unite (iv  +  ss->relative_coordinate (common, Y_AXIS)  -  my_y);
+    }
+
+  Real lt =  me->paper_l ()->get_var ("linethickness");
+  Real sp = 1.5 * Staff_symbol_referencer::staff_space (me);
+  Real dy = heads.length() + sp;
+  Real x = 0.7;
+
+  Molecule l1     = Lookup::line (lt, Offset(0, 0),  Offset (0, dy));
+  Molecule bottom = Lookup::line (lt, Offset(0, 0),  Offset (x, 0));
+  Molecule top    = Lookup::line (lt, Offset(0, dy), Offset (x, dy));
+  Molecule mol;
+  mol.add_molecule (l1);
+  mol.add_molecule (bottom);
+  mol.add_molecule (top);
+  mol.translate_axis (heads[LEFT] - sp/2.0, Y_AXIS);
+  return mol.smobbed_copy();
+}
+
+
 /*
   We have to do a callback, because brew_molecule () triggers a
   vertical alignment if it is cross-staff.
 /*
   We have to do a callback, because brew_molecule () triggers a
   vertical alignment if it is cross-staff.
index d397abcfedfd56f1c709dafb9bbad290148411ec..aa29b173b6f572f3b508b7c6ae40d6af527d9e69 100644 (file)
@@ -16,6 +16,7 @@ class Arpeggio
 {
 public:
   DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM));
 {
 public:
   DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM));
+  DECLARE_SCHEME_CALLBACK (brew_chord_bracket, (SCM));
   DECLARE_SCHEME_CALLBACK (width_callback, (SCM,SCM));
   static bool has_interface (Grob*);
 };
   DECLARE_SCHEME_CALLBACK (width_callback, (SCM,SCM));
   static bool has_interface (Grob*);
 };
index af14b7c5b2d5da1bc8ee6f446b4bfe53d98a6cae..5914ed201782c0bd434e66197465fc4da7837187 100644 (file)
@@ -149,13 +149,13 @@ in LilyPond-include-path."
   :group 'LilyPond
   :type 'string)
 
   :group 'LilyPond
   :type 'string)
 
-(defcustom LilyPond-gv-command "gv -watch"
-  "Command used to display PS files."
+(defcustom LilyPond-midi-command "timidity"
+  "Command used to play MIDI files."
 
   :group 'LilyPond
   :type 'string)
 
 
   :group 'LilyPond
   :type 'string)
 
-(defcustom LilyPond-midi-command "timidity"
+(defcustom LilyPond-midi-all-command "timidity -ig"
   "Command used to play MIDI files."
 
   :group 'LilyPond
   "Command used to play MIDI files."
 
   :group 'LilyPond
@@ -369,6 +369,25 @@ Must be the car of an entry in `LilyPond-command-alist'."
                ".midi"))
      "Midi")))
 
                ".midi"))
      "Midi")))
 
+(defun LilyPond-command-all-midi ()
+  "Play next midi score of the current document."
+  (interactive)
+  (if (Midi-running)
+      (quit-process (get-process "midi") t)
+    (LilyPond-compile-file 
+     (let ((fname (LilyPond-master-file))
+          (allcount (string-to-number (substring (count-midi-words) 0 -12))))
+       (concat  LilyPond-midi-all-command " "
+               (if (> allcount 0) ; at least one midi-score
+                   (concat (substring fname 0 -3) ".midi "))
+               (if (> allcount 1) ; more than one midi-score
+                   (concat (substring fname 0 -3) "-?.midi "))
+               (if (> allcount 9) ; etc.
+                   (concat (substring fname 0 -3) "-??.midi"))
+               (if (> allcount 99) ; not first score
+                   (concat (substring fname 0 -3) "-???.midi"))))
+     "Midi")))
+
 (defun LilyPond-un-comment-region (start end level)
   "Remove up to LEVEL comment characters from each line in the region."
   (interactive "*r\np") 
 (defun LilyPond-un-comment-region (start end level)
   "Remove up to LEVEL comment characters from each line in the region."
   (interactive "*r\np") 
@@ -571,6 +590,7 @@ command."
          '([ "View" (LilyPond-command (LilyPond-command-menu "View") 'LilyPond-master-file) :keys "C-c C-v"])
          '([ "ViewPS" (LilyPond-command (LilyPond-command-menu "ViewPS") 'LilyPond-master-file) :keys "C-c C-p"])
          '([ "Midi (off)" (LilyPond-command-next-midi) :keys "C-c C-m"])
          '([ "View" (LilyPond-command (LilyPond-command-menu "View") 'LilyPond-master-file) :keys "C-c C-v"])
          '([ "ViewPS" (LilyPond-command (LilyPond-command-menu "ViewPS") 'LilyPond-master-file) :keys "C-c C-p"])
          '([ "Midi (off)" (LilyPond-command-next-midi) :keys "C-c C-m"])
+         '([ "Midi all" (LilyPond-command-all-midi)])
          ))
 
 (easy-menu-define LilyPond-mode-menu
          ))
 
 (easy-menu-define LilyPond-mode-menu
index dca3b4930d7abeaedbabfa594a4f29327e69ba19..a49e7e1f394d45ee4cb64dd5380de6e6354ee73a 100644 (file)
@@ -220,3 +220,10 @@ forgetAccidentals = {
 % set it to turnOff. Example: \property Staff.VoltaBracket = \turnOff
 
 turnOff = #'()
 % set it to turnOff. Example: \property Staff.VoltaBracket = \turnOff
 
 turnOff = #'()
+
+% For drawing vertical chord brackets with \arpeggio
+% This is a shorthand for the value of the molecule-callback property 
+% of either Staff.Arpeggio or PianoStaff.Arpeggio, depending whether 
+% cross-staff brackets are desired. 
+
+arpeggioBracket = #(lambda (grob) (Arpeggio::brew_chord_bracket grob))
index 0d760c2c1e1cff2717a6a81755d69689771dee5e..ba4009587a8a8c93e57e27f625b0fcde2452a667 100644 (file)
@@ -3,6 +3,7 @@ save serif_thick;
 serif_thick# = 1.1 stafflinethickness#;
 define_blacker_pixels (serif_thick);
 med_thick = round (1.5 stafflinethickness);
 serif_thick# = 1.1 stafflinethickness#;
 define_blacker_pixels (serif_thick);
 med_thick = round (1.5 stafflinethickness);
+bottom_blot = 1.3 serif_thick;
 
 
 
 
 
 
@@ -123,7 +124,7 @@ fet_endchar;
 
 code := 114;
 fet_beginchar("dynamic s", "s", "dyns");
 
 code := 114;
 fet_beginchar("dynamic s", "s", "dyns");
-       set_char_box (0, 2/3 ex#, 0, 1 ex#);
+       set_char_box (0, 17/24  ex#, 0, 1 ex#);
 
        save left_angle, right_angle;
        save s_thick, s_thin;
 
        save left_angle, right_angle;
        save s_thick, s_thin;
@@ -135,10 +136,12 @@ fet_beginchar("dynamic s", "s", "dyns");
 
        bulb_diam = 11/70 ex;
        bulb_len = 1.0 bulb_diam;
 
        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;
+       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);
        base_point = (0,0);
 
        penpos1 (bulb_diam, -45);
@@ -236,6 +239,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 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;
 
        pair updir;
        path serif,q,p;
@@ -248,6 +252,7 @@ fet_beginchar("dynamic p", "p", "dynp")
        dishing_angle = 5;
        fill_up := 1.5 serif_thick;
        straigh_len = 0.5 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;
 
        stem_thick = 2/6 ex;
        cheek_thick = 13/32 ex;
@@ -261,7 +266,7 @@ fet_beginchar("dynamic p", "p", "dynp")
 
        x4r - x4l = cheek_thick;
        penpos4 (whatever, 0);
 
        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;
        penpos6 (stem_thick, 0);
        penpos17 (straigh_len, 90 -slant);
        whatever [z17l, z17r] =  z4l;
@@ -282,23 +287,44 @@ fet_beginchar("dynamic p", "p", "dynp")
 
        y3r = ex;
        z3l = 0.58 [(stem_thick, -descender), (stem_thick + cheek_width - cheek_thick, -descender)] + whatever * updir;
 
        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;
        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}
 
        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;
                & 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;
 
        pickup pencircle scaled 1;
        fill p;
 
@@ -375,12 +401,11 @@ fet_beginchar("dynamic m", "m", "dynm");
        i_angle := 0;
        idir := dir(90- i_angle);
 
        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);
        i_twiddle_start_y =  8/16 ex;
        i_twiddle_start_angle = 0;
        center =(0,0);
-       bottom_blot = 1.5 serif_thick;
 
        penpos1 (i_twiddle_thick, -i_twiddle_start_angle);
        y1 = i_twiddle_start_y;
 
        penpos1 (i_twiddle_thick, -i_twiddle_start_angle);
        y1 = i_twiddle_start_y;
@@ -414,7 +439,7 @@ fet_beginchar("dynamic m", "m", "dynm");
 
        i_angle := -3.2;
        idir := dir(90 - i_angle);
 
        i_angle := -3.2;
        idir := dir(90 - i_angle);
-       i_left_space := 15/80 ex;
+       i_left_space := 14/80 ex;
 
 
        z1r = right_ending;
 
 
        z1r = right_ending;
@@ -447,7 +472,7 @@ fet_beginchar("dynamic m", "m", "dynm");
 
        i_thick := 23 / 80 ex;
        i_angle := -6;
 
        i_thick := 23 / 80 ex;
        i_angle := -6;
-       i_left_space := 15/80 ex;
+       i_left_space := 14/80 ex;
 
 
        idir := dir(90- i_angle);
 
 
        idir := dir(90- i_angle);
@@ -468,7 +493,7 @@ fet_beginchar("dynamic m", "m", "dynm");
 
        save end_twiddle_angle;
        end_twiddle_angle := 35;
 
        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;
        
        y6l = 23/80 ex + ypart center;
        z6l = 1.6 [z3l, z3r]  + whatever * idir;
        
@@ -500,8 +525,102 @@ fet_beginchar("dynamic m", "m", "dynm");
 
 fet_endchar;
 
 
 fet_endchar;
 
-ligtable "m" : "p" kern 0.25 ex#, "f" kern -0.1 ex#;
+
+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.15 ex#, "f" kern -0.1 ex#;
 ligtable "f" : "f" kern -0.13 ex#;
 ligtable "f" : "f" kern -0.13 ex#;
+ligtable "r" : "f" kern 0.1 ex#;
 
 
 
 
 
 
index e2709e6d388d7cf32cae965f2a6d39edbf8832ed..b8c97f2f178e5eb2589a7d855630ac93446ae9d9 100644 (file)
@@ -222,10 +222,10 @@ def draw_eighth_rest =
        
        x2r = width;
 
        
        x2r = width;
 
-       y3 - y2l = 0.25 staff_space;
+
        x2r - x1 = 0.5 staff_space;
 
        x2r - x1 = 0.5 staff_space;
 
-       x3 = x1l ;
+       x3 = x1l - 0.045 staff_space ;
 
 
        x4 = 1.02 bulb_diam ;
 
 
        x4 = 1.02 bulb_diam ;
@@ -238,13 +238,14 @@ def draw_eighth_rest =
 
 %      z7 = %(bulb_diam/2,ycenter) + 0.23 staff_space * dir ( 35);
        z7 = 0.5 [z4, z5] + (0.45 stafflinethickness,0.4 stafflinethickness);
 
 %      z7 = %(bulb_diam/2,ycenter) + 0.23 staff_space * dir ( 35);
        z7 = 0.5 [z4, z5] + (0.45 stafflinethickness,0.4 stafflinethickness);
-       z8 = (0, ycenter + 0.5 stafflinethickness);
+       x8 = 0;
+       y8 = ycenter + 0.25 stafflinethickness;
 
        z6 = whatever [z1l, z2l];
        z6 = whatever [z2l, z4] + crook_thick * (crook_dir rotated -90);
        crook_dir = normalize(z2l - z4);
 
 
        z6 = whatever [z1l, z2l];
        z6 = whatever [z2l, z4] + crook_thick * (crook_dir rotated -90);
        crook_dir = normalize(z2l - z4);
 
-       y3 := ycenter +floor (- bulb_diam/2);
+       y3 := ycenter +floor (- 0.45 bulb_diam);
 
 
        penlabels (1, 2);
 
 
        penlabels (1, 2);
@@ -256,6 +257,7 @@ def draw_eighth_rest =
                .. z5{left} .. z8 .. z3{right}
                .. {curl 0.2}z6 -- cycle;
 
                .. z5{left} .. z8 .. z3{right}
                .. {curl 0.2}z6 -- cycle;
 
+%      draw_staff (-2,2,0.0);
 
        enddef;
 
 
        enddef;