]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' of ssh+git://git.sv.gnu.org/srv/git/lilypond
authorWerner Lemberg <wl@gnu.org>
Thu, 1 Feb 2007 23:36:16 +0000 (00:36 +0100)
committerWerner Lemberg <wl@gnu.org>
Thu, 1 Feb 2007 23:36:16 +0000 (00:36 +0100)
22 files changed:
GNUmakefile.in
THANKS
buildscripts/output-distance.py
input/regression/lyrics-after-grace.ly [new file with mode: 0644]
input/regression/page-break-warn-forbidden.ly [new file with mode: 0644]
lily/accidental.cc
lily/auto-beam-engraver.cc
lily/bend-engraver.cc
lily/completion-note-heads-engraver.cc
lily/context.cc
lily/drum-note-performer.cc
lily/figured-bass-engraver.cc
lily/grob-pq-engraver.cc
lily/include/translator.hh
lily/key-signature-interface.cc
lily/lyric-combine-music-iterator.cc
lily/multi-measure-rest-engraver.cc
lily/note-performer.cc
lily/slash-repeat-engraver.cc
lily/slur.cc
lily/spacing-engraver.cc
lily/translator.cc

index 4eea5f17918f5d9205affb259503424168f2bbbe..4bccec3f5f76ebaf4f9eaf10b076e2ba2fb9cc38 100644 (file)
@@ -229,6 +229,9 @@ test:
 
 
 test-baseline: test
+       if  test -d .git ; then \
+               @$(if $(shell git diff), echo "commit before base lining" && false,true) ; \
+       fi
        rm -rf input/regression/out-test-baseline
        mv input/regression/out-test input/regression/out-test-baseline
 
diff --git a/THANKS b/THANKS
index 75aa8e2d0e234998d3e6d12492c32e1a39689d7f..de0f1900815ca5224f56ccb515bfb287000b474b 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -12,16 +12,19 @@ Graham Percival   - Documentation Editor and Bug Meister
 Mats Bengtsson    - Support Guru 
 John Mandereau    - Translation Meister
 
+
 CONTRIBUTORS
 
 Rune Zedeler
 Maximilian Albert
 
+
 SPONSORS
 
 Mike Amundsen
 Trevor Bača
 
+
 BUG HUNTERS/SUGGESTIONS
 
 Alard de Boer
index a3c4df5cbaf9ca52ee255e0a386e4d0bf6bdd512..483fdb84b53cf32ef6411b8630b589b05f263557 100644 (file)
@@ -347,7 +347,10 @@ class FileLink:
         
     def text_record_string (self):
         return '%-30f %-20s\n' % (self.distance (),
-                                  self.name ())
+                                  self.name ()
+                                  + os.path.splitext (self.file_names[1])[1]
+                                  )
+    
     def calc_distance (self):
         return 0.0
 
@@ -357,11 +360,18 @@ class FileLink:
 
         return self._distance
     
+    def source_file (self):
+        for ext in ('.ly', '.ly.txt'):
+            base = os.path.splitext (self.file_names[1])[0]
+            f = base + ext
+            if os.path.exists (f):
+                return f
+            
+        return ''
         
     def name (self):
         base = os.path.basename (self.file_names[1])
         base = os.path.splitext (base)[0]
-        
         base = hash_to_original_name.get (base, base)
         base = os.path.splitext (base)[0]
         return base
@@ -426,6 +436,7 @@ class FileCompareLink (FileLink):
             return 0.0
         else:
             return 100.0;
+
         
     def get_content (self, f):
         print 'reading', f
@@ -433,6 +444,8 @@ class FileCompareLink (FileLink):
         return s
 
 
+
+
 class GitFileCompareLink (FileCompareLink):
     def get_cell (self, oldnew):
         str = self.contents[oldnew]
@@ -451,6 +464,7 @@ class GitFileCompareLink (FileCompareLink):
             d = 1.0001 *options.threshold
 
         return d
+
         
 class TextFileCompareLink (FileCompareLink):
     def calc_distance (self):
@@ -563,12 +577,8 @@ class SignatureFileLink (FileLink):
             
         return d + orphan_distance
 
-    def source_file (self):
-        for ext in ('.ly', '.ly.txt'):
-            if os.path.exists (self.base_names[1] + ext):
-                return self.base_names[1] + ext
-        return ''
-    
+
+
     def add_file_compare (self, f1, f2):
         system_index = [] 
 
@@ -582,18 +592,6 @@ class SignatureFileLink (FileLink):
         self.base_names = (os.path.normpath (base1),
                            os.path.normpath (base2))
 
-        def note_original (match):
-            hash_to_original_name[os.path.basename (self.base_names[1])] = match.group (1)
-            return ''
-        
-        ## ugh: drop the .ly.txt
-        for ext in ('.ly', '.ly.txt'):
-            try:
-                re.sub (r'\\sourcefilename "([^"]+)"',
-                        note_original, open (base1 + ext).read ())
-            except IOError:
-                pass
-                
         s1 = read_signature_file (f1)
         s2 = read_signature_file (f2)
 
@@ -786,6 +784,23 @@ class ComparisonData:
         self.added = []
         self.file_links = {}
 
+    def read_sources (self):
+
+        ## ugh: drop the .ly.txt
+        for (key, val) in self.file_links.items ():
+            
+            def note_original (match, ln=val):
+                key = ln.name ()
+                hash_to_original_name[key] = match.group (1)
+                return ''
+
+            sf = val.source_file ()
+            if sf:
+                re.sub (r'\\sourcefilename "([^"]+)"',
+                        note_original, open (sf).read ())
+            else:
+                print 'no source for', val
+        
     def compare_trees (self, dir1, dir2):
         self.compare_directories (dir1, dir2)
         
@@ -801,7 +816,11 @@ class ComparisonData:
                 self.compare_trees (d1, d2)
     
     def compare_directories (self, dir1, dir2):
-        for ext in ['signature', 'midi', 'log', 'profile', 'gittxt']:
+        for ext in ['signature',
+                    'midi',
+                    'log',
+                    'profile',
+                    'gittxt']:
             (paired, m1, m2) = paired_files (dir1, dir2, '*.' + ext)
 
             self.missing += [(dir1, m) for m in m1] 
@@ -943,6 +962,9 @@ class ComparisonData:
 def compare_trees (dir1, dir2, dest_dir, threshold):
     data = ComparisonData ()
     data.compare_trees (dir1, dir2)
+    data.read_sources ()
+
+    
     data.print_results (threshold)
 
     if os.path.isdir (dest_dir):
diff --git a/input/regression/lyrics-after-grace.ly b/input/regression/lyrics-after-grace.ly
new file mode 100644 (file)
index 0000000..0d5d3d1
--- /dev/null
@@ -0,0 +1,19 @@
+\header
+{
+
+  texidoc = "Lyrics are ignored for aftergrace notes."
+
+}
+
+\version "2.11.13"
+\paper {
+  ragged-right = ##t
+}
+
+<<
+  \new Staff {
+    \new Voice = "myVoice" {
+      \afterGrace c''2 { e''32( } c''2)
+    }}
+  \new Lyrics \lyricsto "myVoice" \lyricmode { foo -- bar }
+>>
diff --git a/input/regression/page-break-warn-forbidden.ly b/input/regression/page-break-warn-forbidden.ly
new file mode 100644 (file)
index 0000000..7624483
--- /dev/null
@@ -0,0 +1,16 @@
+
+\header {
+
+  texidoc = "If a page break is forced where it is forbidden,
+ a warning is printed."
+
+}
+
+\version "2.11.14"
+
+\new Staff {
+   c'1 \glissando
+   \pageBreak
+   d'1
+}
+
index 571c33cbea497e5c8db3cf9eaa305c5b154dc952..3e5d0475f7afa671f23187b9616e8f81ef70df0a 100644 (file)
@@ -72,9 +72,13 @@ Accidental_interface::accurate_boxes (Grob *me, Grob **common)
   if (!to_boolean (me->get_property ("restore-first"))
       && !parens)
     {
-      Rational alteration
-       = robust_scm2rational (me->get_property ("alteration"), 0);
-      if (alteration == FLAT_ALTERATION)
+      SCM alist = me->get_property ("glyph-name-alist");
+      SCM alt = me->get_property ("alteration");
+      string glyph_name = robust_scm2string (ly_assoc_get (alt, alist, SCM_BOOL_F),
+                                            "");
+      
+      if (glyph_name == "accidentals.flat"
+         || glyph_name == "accidentals.mirroredflat")
        {
          Box stem = b;
          Box bulb = b;
@@ -83,7 +87,9 @@ Accidental_interface::accurate_boxes (Grob *me, Grob **common)
            we could make the stem thinner, but that places the flats
            really close.
          */
-         stem[X_AXIS][RIGHT] *= .5;
+         Direction bulb_dir =
+           glyph_name=="accidentals.mirroredflat" ? LEFT : RIGHT;
+         stem[X_AXIS][bulb_dir] = stem[X_AXIS].center ();
 
          /*
            To prevent vertical alignment for 6ths
@@ -94,7 +100,7 @@ Accidental_interface::accurate_boxes (Grob *me, Grob **common)
          boxes.push_back (bulb);
          boxes.push_back (stem);
        }
-      else if (alteration == NATURAL_ALTERATION)
+      else if (glyph_name ==  "accidentals.natural")
        {
          Box lstem = b;
          Box rstem = b;
index 481625606fa2056cd78c7ec46d64f9a8668f2ac4..a98b05f48d953384474d5e5996fb023062b02eb1 100644 (file)
@@ -388,7 +388,7 @@ Auto_beam_engraver::acknowledge_stem (Grob_info info)
                       durlog - 2);
   stems_->push_back (stem);
   last_add_mom_ = now;
-  extend_mom_ = max (extend_mom_, now) + get_event_length (ev);
+  extend_mom_ = max (extend_mom_, now) + get_event_length (ev, now);
 }
 
 void
index 4287084c1e5ccaa2ecaa63a4b8f2ea8b7cbf6762..4f243dfc7371bbcb7f5447ea7f5fadd3a4a955c4 100644 (file)
@@ -79,7 +79,8 @@ Bend_engraver::acknowledge_note_head (Grob_info info)
     }
 
   note_head_ = info.grob ();
-  stop_moment_ = now_mom () + get_event_length (info.event_cause ());
+  stop_moment_ = now_mom () + get_event_length (info.event_cause (),
+                                               now_mom ());
 }
 
 Bend_engraver::Bend_engraver ()
index cb4471528623ed66c9a7ce5ded3c4b708a533fc9..f514f7d37febd3c1e774216c3fa3f93ec9633826 100644 (file)
@@ -85,14 +85,8 @@ Completion_heads_engraver::listen_note (Stream_event *ev)
   note_events_.push_back (ev);
   
   is_first_ = true;
-  Moment musiclen = get_event_length (ev);
   Moment now = now_mom ();
-
-  if (now_mom ().grace_part_)
-    {
-      musiclen.grace_part_ = musiclen.main_part_;
-      musiclen.main_part_ = Rational (0, 1);
-    }
+  Moment musiclen = get_event_length (ev, now);
 
   note_end_mom_ = max (note_end_mom_, (now + musiclen));
   do_nothing_until_ = Rational (0, 0);
index 7e5ea8ae2ac0c83ee84e30de36f38f8d10590e34..da83c9a98c07dc7242d3e84ae32420fe0dd939bb 100644 (file)
@@ -710,7 +710,7 @@ melisma_busy (Context *tr)
   SCM melisma_properties = tr->get_property ("melismaBusyProperties");
   bool busy = false;
 
-  for (; scm_is_pair (melisma_properties);
+  for (; !busy && scm_is_pair (melisma_properties);
        melisma_properties = scm_cdr (melisma_properties))
     busy = busy || to_boolean (tr->internal_get_property (scm_car (melisma_properties)));
 
index a4187c187cfb83c1bb86d69e26724494be1b9bb5..bb55ac2ef6a417c2eae20c369aa19b965ae0409c 100644 (file)
@@ -64,13 +64,7 @@ Drum_note_performer::process_music ()
                 tie_event = ev;
             }
 
-         Moment len = get_event_length (n);
-         if (now_mom ().grace_part_)
-           {
-             len.grace_part_ = len.main_part_;
-             len.main_part_ = Rational (0);
-           }
-             
+         Moment len = get_event_length (n, now_mom ());
 
          Audio_note *p = new Audio_note (*pit, len,
                                           tie_event, Pitch (0, 0, 0));
index 29185bc2c847f1e907b63f4ef32d8b7f755e9e92..a73cdf6bd8b845eacf044368c1c9e7f175a08252 100644 (file)
@@ -156,7 +156,7 @@ void
 Figured_bass_engraver::listen_bass_figure (Stream_event *ev)
 {
   new_event_found_ = true;
-  Moment stop  = now_mom () + get_event_length (ev);
+  Moment stop  = now_mom () + get_event_length (ev, now_mom ());
   stop_moment_ = max (stop_moment_, stop);
 
   if (to_boolean (get_property ("useBassFigureExtenders")))
index 7cb4afab87900821d25ee4f39df5e28a8cec35ea..563e7218c08a60cb994b896757686e6bf4ac80be 100644 (file)
@@ -67,17 +67,11 @@ Grob_pq_engraver::acknowledge_grob (Grob_info gi)
       && !gi.grob ()->internal_has_interface (ly_symbol2scm ("multi-measure-interface")))
     {
       Moment n = now_mom ();
-      Moment l = get_event_length (ev);
+      Moment l = get_event_length (ev, n);
 
       if (!l.to_bool ())
        return;
 
-      if (n.grace_part_)
-       {
-         l.grace_part_ = l.main_part_;
-         l.main_part_ = 0;
-       }
-
       Moment end = n + l;
 
       Grob_pq_entry e;
index 6145cae05253a849438fc2e2c4a93e95505f7b5d..33fafaea0e11b3775e6511cc2dbec0f4285818e1 100644 (file)
@@ -141,6 +141,7 @@ protected:                  // should be private.
 void add_translator (Translator *trans);
 
 Translator *get_translator (SCM s);
+Moment get_event_length (Stream_event *s, Moment now);
 Moment get_event_length (Stream_event *s);
 DECLARE_UNSMOB (Translator, translator);
 
index d4ddb075e837fcf963f04dae4e5de0b9729140ac..1e673319612bb8fe3a428c5aed7fdf1ca2dbcf17 100644 (file)
@@ -65,15 +65,17 @@ Key_signature_interface::print (SCM smob)
        ? scm_from_int (0)
        : scm_cdar (s);
 
-      SCM glyph_name = ly_assoc_get (alt, alist, SCM_BOOL_F);
-      if (!scm_is_string (glyph_name))
+      SCM glyph_name_scm = ly_assoc_get (alt, alist, SCM_BOOL_F);
+      if (!scm_is_string (glyph_name_scm))
        {
          me->warning (_f ("No glyph found for alteration: %s",
                           ly_scm2rational (alt).to_string ().c_str ()));
          continue;
        }
-      
-      Stencil acc (fm->find_by_name (ly_scm2string (glyph_name)));
+
+      string glyph_name = ly_scm2string (glyph_name_scm);
+
+      Stencil acc (fm->find_by_name (glyph_name));
 
       if (acc.is_empty ())
        me->warning (_ ("alteration not found"));
@@ -91,11 +93,12 @@ Key_signature_interface::print (SCM smob)
            has vertical edges on both sides. A little padding is
            needed to prevent collisions.
          */
-         Real padding = 0.0;
-         if (is_cancellation
+         Real padding = robust_scm2double (me->get_property ("padding"),
+                                           0.0);
+         if (glyph_name ==  "accidentals.natural"
              && last_pos < pos + 2
              && last_pos > pos - 6)
-           padding = 0.3;
+           padding += 0.3;
 
          mol.add_at_edge (X_AXIS, LEFT, acc, padding);
          last_pos = pos;
@@ -113,5 +116,6 @@ ADD_INTERFACE (Key_signature_interface,
               "alteration-alist "
               "c0-position "
               "glyph-name-alist "
+              "padding "
               "style "
               );
index ed2cff898667e2bb936bac8312410e7aaad89b3a..7639e03a8f35dcbbfee034d3dae77f81ae08d768 100644 (file)
@@ -51,13 +51,13 @@ private:
   DECLARE_LISTENER (set_busy);
   DECLARE_LISTENER (check_new_context);
 
-  bool pending_grace_lyric_;
   bool music_found_;
   Context *lyrics_context_;
   Context *music_context_;
   SCM lyricsto_voice_name_;
 
   Moment busy_moment_;
+  Moment pending_grace_moment_;
   
   Music_iterator *lyric_iter_;
 };
@@ -65,7 +65,7 @@ private:
 Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
 {
   music_found_ = false;
-  pending_grace_lyric_ = false;
+  pending_grace_moment_.set_infinite (1);
   lyric_iter_ = 0;
   music_context_ = 0;
   lyrics_context_ = 0;
@@ -86,6 +86,7 @@ Lyric_combine_music_iterator::set_busy (SCM se)
 
   if ((e->in_event_class ("note-event") || e->in_event_class ("cluster-note-event"))
       && music_context_)
+    
     busy_moment_ = max (music_context_->now_mom (),
                        busy_moment_);
   
@@ -254,8 +255,10 @@ Lyric_combine_music_iterator::find_voice ()
 }
 
 void
-Lyric_combine_music_iterator::process (Moment)
+Lyric_combine_music_iterator::process (Moment when)
 {
+  (void) when;
+  
   /* see if associatedVoice has been changed */
   Context *new_voice = find_voice ();
   if (new_voice)
@@ -278,16 +281,21 @@ Lyric_combine_music_iterator::process (Moment)
 
 
   if (music_context_
-      && (start_new_syllable () || pending_grace_lyric_)
+      && (start_new_syllable () ||
+         (busy_moment_ >= pending_grace_moment_))
       && lyric_iter_->ok ())
     {
-      if (music_context_->now_mom ().grace_part_)
+      Moment now = music_context_->now_mom ();
+      if (now.grace_part_)
        {
-         pending_grace_lyric_ = true;
+         pending_grace_moment_ = now;
+         pending_grace_moment_.grace_part_ = Rational (0);
          return;
        }
       else
-       pending_grace_lyric_ = false;
+       {
+         pending_grace_moment_.set_infinite (1);
+       }
       
       Moment m = lyric_iter_->pending_moment ();
       lyrics_context_->set_property (ly_symbol2scm ("associatedVoiceContext"),
index ecb0d97a62246863ef4fd011c5096563f0a21799..c8ea549701b57a4537c7e4f387c632e278a05ca8 100644 (file)
@@ -69,7 +69,7 @@ Multi_measure_rest_engraver::listen_multi_measure_rest (Stream_event *ev)
   /* FIXME: Should use ASSIGN_EVENT_ONCE. Can't do that yet because of
      the kill-mm-rests hack in part-combine-iterator. */
   rest_ev_ = ev;
-  stop_moment_ = now_mom () + get_event_length (rest_ev_);
+  stop_moment_ = now_mom () + get_event_length (rest_ev_, now_mom ());
   /*
   if (ASSIGN_EVENT_ONCE (rest_ev_, ev))
     stop_moment_ = now_mom () + get_event_length (rest_ev_);
index d6554bbdc8520a4ded490bd6c26a24b9420c4422..776061f6c6f1690ec9fc38eac13624b3c85effe3 100644 (file)
@@ -67,12 +67,7 @@ Note_performer::process_music ()
                tie_event = ev;
            }
 
-         Moment len = get_event_length (n);
-         if (now_mom ().grace_part_)
-           {
-             len.grace_part_ = len.main_part_;
-             len.main_part_ = Rational (0);
-           }
+         Moment len = get_event_length (n, now_mom ());
          
          Audio_note *p = new Audio_note (*pitp, len, 
                                          tie_event, transposing.negated ());
index 7d71b677a193aa6f0e20581a495c54285cabc992..f772e876fb508016c733726449b74812b957c508 100644 (file)
@@ -50,7 +50,7 @@ Slash_repeat_engraver::listen_percent (Stream_event *ev)
   
   if (get_event_length (ev) < meas_length)
     ASSIGN_EVENT_ONCE (slash_, ev);
-
+  
   /*
     don't warn if nothing happens: this can happen if there are whole
     measure repeats.
index 3d22a2cb19a95355fe5730a8816e526e8a40fcf1..1bb88339a6d254a540956d12d067d1ca8d55416f 100644 (file)
 #include "output-def.hh"
 #include "spanner.hh"
 #include "staff-symbol-referencer.hh"
-#include "staff-symbol.hh"
 #include "stem.hh"
 #include "text-interface.hh"
 #include "tie.hh"
 #include "warn.hh"
 #include "slur-scoring.hh"
 #include "separation-item.hh"
-#include "script-interface.hh"
+#include "international.hh"
 
 
 
@@ -353,7 +352,8 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info,
        }
     }
   else
-    e->warning ("Ignoring grob for slur. avoid-slur not set?");
+    e->warning (_f ("Ignoring grob for slur: %s. avoid-slur not set?",
+                   e->name().c_str ()));
 }
 
 MAKE_SCHEME_CALLBACK (Slur, cross_staff, 1)
index ad49a345b6de47eae4ed06cb6854e4003e899652..fae9a120c7b404d4511e27cb581d936b4d136724 100644 (file)
@@ -174,7 +174,7 @@ Spacing_engraver::add_starter_duration (Grob_info i)
       Stream_event *r = i.event_cause ();
       if (r && r->in_event_class ("rhythmic-event"))
        {
-         Moment len = get_event_length (r);
+         Moment len = get_event_length (r, now_);
          Rhythmic_tuple t (i, now_mom () + len);
          now_durations_.push_back (t);
        }
@@ -211,6 +211,7 @@ Spacing_engraver::stop_translation_timestep ()
       Stream_event *ev = playing_durations_[i].info_.event_cause ();
       if (ev)
        {
+         Moment now = now_mom ();
          Moment m = get_event_length (ev);
          shortest_playing = min (shortest_playing, m);
        }
index a6b4342de91ea43aaddfd07477f7b7c4f85bff1e..ae1dfbe7ff5158e4a755dd08047022b7044e80fe 100644 (file)
@@ -295,6 +295,7 @@ generic_get_acknowledger (SCM sym, vector<Acknowledge_information> const *ack_ar
   return 0;
 }
 
+
 Moment
 get_event_length (Stream_event *e)
 {
@@ -305,6 +306,19 @@ get_event_length (Stream_event *e)
     return Moment (0);
 }
 
+Moment
+get_event_length (Stream_event *e, Moment now)
+{
+  Moment len = get_event_length (e);
+  
+  if (now.grace_part_)
+    {
+      len.grace_part_ = len.main_part_;
+      len.main_part_ = Rational (0);
+    }
+  return len;
+}
+
 /*
   Helper, used through ASSIGN_EVENT_ONCE to throw warnings for
   simultaneous events. The helper is only useful in listen_* methods