lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Fixes issue 786, "Extenders in lyrics stop prematurely if a single unde


From: csnyder
Subject: Fixes issue 786, "Extenders in lyrics stop prematurely if a single underscore is found."
Date: Mon, 09 Nov 2009 20:43:44 +0000

Reviewers: ,

Message:
This patch fixes 786 (and 800, which I think should be labeled a dupe).

No regression tests were adversely affected, but there could possibly be
some issues with creating "empty" LyricText objects.

Description:
Fixes issue 786, "Extenders in lyrics stop prematurely if a single
underscore is found."
This commit changes the lyrics engraver to create LyricText objects
even for "empty" lyrics (underscores). This change is necessary because
the old behavior
(pre-7531ea6b3 commit) relied on extenders continuing until the presence
of another lyric
syllable, which was not always the case. That commit changed the
behavior to completize
extenders when no more lyrics were present, which fixed the
neverending-extender bug but
introduced the extenders-stopping-prematurely bug.

By adding the "empty" LyricText objects, the extender engraver can now
tell the difference
between melismas and the end of a block of lyrics.

Please review this at http://codereview.appspot.com/150067

Affected files:
  M lily/extender-engraver.cc
  M lily/lyric-engraver.cc


Index: lily/extender-engraver.cc
diff --git a/lily/extender-engraver.cc b/lily/extender-engraver.cc
index 041f9046ed470e9ee45a6ecbdfc0ff7d7c22784f..467f16ff10977fcc30df5d217574a5a61ba215a6 100644
--- a/lily/extender-engraver.cc
+++ b/lily/extender-engraver.cc
@@ -28,6 +28,7 @@ class Extender_engraver : public Engraver
   Stream_event *ev_;
   Spanner *extender_;
   Spanner *pending_extender_;
+  bool current_lyric_is_skip_;

 public:
   TRANSLATOR_DECLARATIONS (Extender_engraver);
@@ -44,6 +45,7 @@ protected:

 Extender_engraver::Extender_engraver ()
 {
+  current_lyric_is_skip_ = false;
   extender_ = 0;
   pending_extender_ = 0;
   ev_ = 0;
@@ -70,7 +72,14 @@ Extender_engraver::acknowledge_lyric_syllable (Grob_info i)
   if (extender_)
     extender_->set_bound (LEFT, item);

-  if (pending_extender_)
+  SCM text = item->get_property ("text");
+  if (ly_is_equal (text, scm_from_locale_string (" "))) {
+    current_lyric_is_skip_ = true;
+  } else {
+    current_lyric_is_skip_ = false;
+  }
+
+  if (pending_extender_ && !current_lyric_is_skip_)
     {
       pending_extender_->set_object ("next", item->self_scm ());
       completize_extender (pending_extender_);
@@ -98,7 +107,7 @@ Extender_engraver::stop_translation_timestep ()
            {
              Pointer_group_interface::add_grob (pending_extender_,
                                                 ly_symbol2scm ("heads"), h);
-             if (!melisma_busy (voice))
+             if (!melisma_busy (voice) && !current_lyric_is_skip_)
                {
                  completize_extender (pending_extender_);
                  pending_extender_ = 0;
Index: lily/lyric-engraver.cc
diff --git a/lily/lyric-engraver.cc b/lily/lyric-engraver.cc
index 74d15e4df1faedef65fddc857260b3fe33c46c5e..5a071535777cdac9b27302b6c3826551a4affe89 100644
--- a/lily/lyric-engraver.cc
+++ b/lily/lyric-engraver.cc
@@ -64,7 +64,6 @@ Lyric_engraver::process_music ()
          if (last_text_)
            last_text_->set_property ("self-alignment-X", scm_from_int (LEFT));
        }
-      else
        text_ = make_item ("LyricText", event_->self_scm ());
     }
 }






reply via email to

[Prev in Thread] Current Thread [Next in Thread]