From 1547df975ef6d6cc602c84860dc9244366f862fd Mon Sep 17 00:00:00 2001
From: Han-Wen Nienhuys <hanwen@xs4all.nl>
Date: Fri, 26 May 2006 10:42:10 +0000
Subject: [PATCH] *** empty log message ***

---
 ChangeLog                |  9 ++++++++-
 lily/translator-group.cc | 11 +++++++++++
 lily/tuplet-engraver.cc  | 15 ++++++++-------
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 47f0181aa6..52a833d138 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,11 @@
-2006-05-25  Han-Wen Nienhuys  <hanwen@lilypond.org>
+2006-05-25  Erik Sandberg  <mandolaerik@gmail.com>
+
+	* translator-group.cc: send music events to engravers in
+	non-bottom contexts.
+
+	* tuplet-engraver.cc: process tuplet brackets in correct order.
+
+2006-05-24  Han-Wen Nienhuys  <hanwen@lilypond.org>
 
 	* stepmake/aclocal.m4: STEPMAKE_PYTHON(): clear cached value since
 	arg 2 might point us to a new binary (patch by Karl Hammar)
diff --git a/lily/translator-group.cc b/lily/translator-group.cc
index 0fd2bc4d21..e2541996ef 100644
--- a/lily/translator-group.cc
+++ b/lily/translator-group.cc
@@ -12,6 +12,7 @@
 #include "context-def.hh"
 #include "context.hh"
 #include "dispatcher.hh"
+#include "international.hh"
 #include "main.hh"
 #include "music.hh"
 #include "output-def.hh"
@@ -113,6 +114,16 @@ Translator_group::try_music (Music *m)
       if (t && t->try_music (m))
 	return true;
     }
+    
+  // We couldn't swallow the event in this context. Try parent.
+  Context *p = context ()->get_parent_context ();
+  // Global context's translator group is a dummy, so don't try it.
+  if (p->get_parent_context())
+    // ES todo: Make Translators listeners directly instead.
+    return p->implementation ()->try_music (m);
+  else
+    // We have tried all possible contexts. Give up.
+    m->origin ()->warning (_f ("junking event: `%s'", m->name ()));
   return false;
 }
 
diff --git a/lily/tuplet-engraver.cc b/lily/tuplet-engraver.cc
index ac38db14e3..92b062f116 100644
--- a/lily/tuplet-engraver.cc
+++ b/lily/tuplet-engraver.cc
@@ -95,11 +95,11 @@ Tuplet_engraver::process_music ()
     }
   stopped_tuplets_.clear ();
 
-  if (!tuplets_.size ())
-    return;
-
-  for (vsize i = 0; i < tuplets_.size (); i++)
+  for (vsize j = tuplets_.size (); j > 0; j--)
     {
+      /* i goes from size-1 downto 0, inclusively */
+      vsize i = j - 1;
+
       if (tuplets_[i].bracket_)
 	continue;
 
@@ -110,11 +110,12 @@ Tuplet_engraver::process_music ()
       tuplets_[i].number_->set_object ("bracket", tuplets_[i].bracket_->self_scm ());
       tuplets_[i].bracket_->set_object ("tuplet-number", tuplets_[i].number_->self_scm ());
       
+      if (i < tuplets_.size () - 1 && tuplets_[i + 1].bracket_)
+	Tuplet_bracket::add_tuplet_bracket (tuplets_[i].bracket_, tuplets_[i + 1].bracket_);
+      
       if (i > 0 && tuplets_[i - 1].bracket_)
-	Tuplet_bracket::add_tuplet_bracket (tuplets_[i].bracket_, tuplets_[i - 1].bracket_);
+	Tuplet_bracket::add_tuplet_bracket (tuplets_[i - 1].bracket_, tuplets_[i].bracket_);
 
-      if (i < tuplets_.size () - 1 && tuplets_[i + 1].bracket_)
-	Tuplet_bracket::add_tuplet_bracket (tuplets_[i + 1].bracket_, tuplets_[i].bracket_);
 
       SCM proc = get_property ("tupletNumberFormatFunction");
       if (ly_is_procedure (proc))
-- 
2.39.5