lilypond-devel
[Top][All Lists]
Advanced

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

Re: Allows lyrics to slide under TimeSignature when OctaveEight present.


From: mtsolo
Subject: Re: Allows lyrics to slide under TimeSignature when OctaveEight present. (issue 6201068)
Date: Fri, 11 May 2012 05:23:27 +0000

Reviewers: janek, carl.d.sorensen_gmail.com,


http://codereview.appspot.com/6201068/diff/1/lily/pure-from-neighbor-engraver.cc
File lily/pure-from-neighbor-engraver.cc (right):

http://codereview.appspot.com/6201068/diff/1/lily/pure-from-neighbor-engraver.cc#newcode56
lily/pure-from-neighbor-engraver.cc:56: in_same_column (Grob *g1, Grob
*g2)
On 2012/05/10 21:40:48, janek wrote:
That's problably the most stupid question ever, but why this doesn't
it begin
with Pure_from_neighbor_engraver:: ?  I don't see it being special.

It doesn't need to be a class method - it'll never be called outside of
this file.  It is just a small helper function.

http://codereview.appspot.com/6201068/diff/1/lily/pure-from-neighbor-engraver.cc#newcode119
lily/pure-from-neighbor-engraver.cc:119:
Pointer_group_interface::add_grob
(need_pure_heights_from_neighbors[pos[j]][k], ly_symbol2scm
("neighbors"), pure_relevants_[i]);
On 2012/05/10 21:40:48, janek wrote:
could you reduce line width, please?  This one is way over regular 80
chars
limit.

Done.

Description:
Allows lyrics to slide under TimeSignature when OctaveEight present.

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

Affected files:
  A input/regression/lyric-octave-eight.ly
  M lily/pure-from-neighbor-engraver.cc


Index: input/regression/lyric-octave-eight.ly
diff --git a/input/regression/lyric-octave-eight.ly b/input/regression/lyric-octave-eight.ly
new file mode 100644
index 0000000000000000000000000000000000000000..d3ed333bf54f4a7d5a3aa512cc4d5d090d75bdff
--- /dev/null
+++ b/input/regression/lyric-octave-eight.ly
@@ -0,0 +1,16 @@
+\version "2.15.37"
+
+\header {
+  texidoc = "Lyrics should still slide under @code{TimeSignature} when an
address@hidden is present.
+"
+}
+
+\new Staff {
+  \clef "treble_8"
+  b
+}
+\addlyrics {
+  \set stanza = "1."
+  aaa
+}
Index: lily/pure-from-neighbor-engraver.cc
diff --git a/lily/pure-from-neighbor-engraver.cc b/lily/pure-from-neighbor-engraver.cc index a6e7b5f32fe4539867f3ddbabe136357b8ba9335..413bfe5215d2b5c29e8b08e7799981071aa32bab 100644
--- a/lily/pure-from-neighbor-engraver.cc
+++ b/lily/pure-from-neighbor-engraver.cc
@@ -52,6 +52,17 @@ Pure_from_neighbor_engraver::acknowledge_item (Grob_info i)
     pure_relevants_.push_back (i.item ());
 }

+bool
+in_same_column (Grob *g1, Grob *g2)
+{
+  return (g1->spanned_rank_interval ()[LEFT]
+          == g2->spanned_rank_interval ()[LEFT])
+         && (g1->spanned_rank_interval ()[RIGHT]
+             == g2->spanned_rank_interval ()[RIGHT])
+         && (g1->spanned_rank_interval ()[LEFT]
+             == g1->spanned_rank_interval ()[RIGHT]);
+}
+
 void
 Pure_from_neighbor_engraver::acknowledge_pure_from_neighbor (Grob_info i)
 {
@@ -80,8 +91,10 @@ Pure_from_neighbor_engraver::finalize ()
       temp.push_back (need_pure_heights_from_neighbors_[l]);
       for (;
            (l < need_pure_heights_from_neighbors_.size () - 1
- && (need_pure_heights_from_neighbors_[l]->spanned_rank_interval ()[LEFT] - == need_pure_heights_from_neighbors_[l + 1]->spanned_rank_interval ()[LEFT]));
+            && ((need_pure_heights_from_neighbors_[l]
+                 ->spanned_rank_interval ()[LEFT])
+                == (need_pure_heights_from_neighbors_[l + 1]
+                    ->spanned_rank_interval ()[LEFT])));
            l++)
         temp.push_back (need_pure_heights_from_neighbors_[l + 1]);
       need_pure_heights_from_neighbors.push_back (temp);
@@ -99,15 +112,24 @@ Pure_from_neighbor_engraver::finalize ()
     {
       while (pos[1] < (int) need_pure_heights_from_neighbors.size ()
              && (pure_relevants_[i]->spanned_rank_interval ()[LEFT]
- > need_pure_heights_from_neighbors[pos[1]][0]->spanned_rank_interval ()[LEFT]))
+                 > (need_pure_heights_from_neighbors[pos[1]][0]
+                    ->spanned_rank_interval ()[LEFT])))
         {
           pos[0] = pos[1];
           pos[1]++;
         }
       for (int j = 0; j < 2; j++)
- if (pos[j] >= 0 && pos[j] < (int) need_pure_heights_from_neighbors.size ()) - for (vsize k = 0; k < need_pure_heights_from_neighbors[pos[j]].size (); k++) - Pointer_group_interface::add_grob (need_pure_heights_from_neighbors[pos[j]][k], ly_symbol2scm ("neighbors"), pure_relevants_[i]);
+        if (pos[j] >= 0 && pos[j]
+            < (int) need_pure_heights_from_neighbors.size ())
+          for (vsize k = 0;
+               k < need_pure_heights_from_neighbors[pos[j]].size ();
+               k++)
+ if (!in_same_column(need_pure_heights_from_neighbors[pos[j]][k],
+                                pure_relevants_[i]))
+              Pointer_group_interface::add_grob
+                (need_pure_heights_from_neighbors[pos[j]][k],
+                 ly_symbol2scm ("neighbors"),
+                 pure_relevants_[i]);
     }

   need_pure_heights_from_neighbors_.clear ();





reply via email to

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