From ee8f78c08a35777bf7d4da02f0d3c9c967ada4d6 Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Thu, 20 Jul 2006 09:29:41 +0000
Subject: [PATCH] (struct Tuplet_description): read tupletFullLengthNote too.
 Choose right bound depending on value.

---
 ChangeLog                         | 11 +++++++++--
 lily/tuplet-engraver.cc           | 31 +++++++++++++++++++++----------
 scm/define-context-properties.scm |  1 +
 3 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b75ac3fd9f..e65e10d455 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-07-20  Han-Wen Nienhuys  <hanwen@lilypond.org>
+
+	* lily/tuplet-engraver.cc (struct Tuplet_description): read
+	tupletFullLengthNote too. Choose right bound depending on value.
+
+	* input/regression/tuplet-full-length-note.ly: new file.
+
 2006-07-19  Erik Sandberg  <mandolaerik@gmail.com>
 
 	* lily/*-performer.cc: Converted try_music to listen_*
@@ -11,8 +18,8 @@
 2006-07-19  Mats Bengtsson  <mabe@drongo.s3.kth.se>
 
 	* Documentation/user/advanced-notation.itely (Font selection):
-	Document how to get a list of available fonts using
-	'lilypond -dshow-available-fonts blabla'.
+	Document how to get a list of available fonts using 'lilypond
+	-dshow-available-fonts blabla'.
 
 2006-07-19  Han-Wen Nienhuys  <hanwen@lilypond.org>
 
diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc
index 53d85bd933..a588f48571 100644
--- a/lily/tuplet-engraver.cc
+++ b/lily/tuplet-engraver.cc
@@ -19,8 +19,14 @@ struct Tuplet_description
   Music *music_;
   Spanner *bracket_;
   Spanner *number_;
+
+  bool full_length_;
+  bool full_length_note_;
+  
   Tuplet_description ()
   {
+    full_length_note_ = false;
+    full_length_ = false;
     music_ = 0;
     bracket_ = 0;
     number_ = 0;
@@ -70,12 +76,14 @@ Tuplet_engraver::process_music ()
 {
   for (vsize i = 0; i < stopped_tuplets_.size (); i++)
     {
-      bool full_length = to_boolean (get_property ("tupletFullLength"));
       if (stopped_tuplets_[i].bracket_)
 	{
-	  if (full_length)
+	  if (stopped_tuplets_[i].full_length_)
 	    {
-	      Item *col = unsmob_item (get_property ("currentMusicalColumn"));
+	      Item *col =
+		unsmob_item (stopped_tuplets_[i].full_length_note_
+			     ? get_property ("currentMusicalColumn")
+			     : get_property ("currentCommandColumn"));
 	      
 	      stopped_tuplets_[i].bracket_->set_bound (RIGHT, col);
 	      stopped_tuplets_[i].number_->set_bound (RIGHT, col);
@@ -100,9 +108,14 @@ Tuplet_engraver::process_music ()
       /* i goes from size-1 downto 0, inclusively */
       vsize i = j - 1;
 
+            
       if (tuplets_[i].bracket_)
 	continue;
 
+      tuplets_[i].full_length_ = to_boolean (get_property ("tupletFullLength"));
+      tuplets_[i].full_length_note_
+	= to_boolean (get_property ("tupletFullLengthNote"));
+      
       tuplets_[i].bracket_ = make_spanner ("TupletBracket",
 					   tuplets_[i].music_->self_scm ());
       tuplets_[i].number_ = make_spanner ("TupletNumber",
@@ -141,13 +154,11 @@ void
 Tuplet_engraver::finalize ()
 {
   if (to_boolean (get_property ("tupletFullLength")))
-    {
-      for (vsize i = 0; i < last_tuplets_.size (); i++)
-	{
-	  Item *col = unsmob_item (get_property ("currentCommandColumn"));
-	  last_tuplets_[i]->set_bound (RIGHT, col);
-	}
-    }
+    for (vsize i = 0; i < last_tuplets_.size (); i++)
+      {
+	Item *col = unsmob_item (get_property ("currentCommandColumn"));
+	last_tuplets_[i]->set_bound (RIGHT, col);
+      }
 }
 
 Tuplet_engraver::Tuplet_engraver ()
diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm
index 8efe40eb5b..9576f697fb 100644
--- a/scm/define-context-properties.scm
+++ b/scm/define-context-properties.scm
@@ -412,6 +412,7 @@ number is specified.")
 
      (tupletFullLength ,boolean? "If set, the tuplet is printed up to
 the start of the next note.")
+     (tupletFullLengthNote ,boolean? "If set, end at the next note, otherwise end on the matter (time sigs, etc.) before the note.")
      (tupletSpannerDuration ,ly:moment? "
 Normally a tuplet bracket is as wide as the
 @code{\\times} expression that gave rise to it.  By setting this
-- 
2.39.5