]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/vertical-align-engraver.cc
Merge branch 'lilypond/translation' of ssh://git.sv.gnu.org/srv/git/lilypond into...
[lilypond.git] / lily / vertical-align-engraver.cc
index 347b982b18093f981addca270a13545e9326cba3..14f67333cf54c5f98f8d737fd62f80354062e937 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1997--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  (c) 1997--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
 #include "context.hh"
@@ -33,13 +33,15 @@ protected:
   void process_music ();
   virtual void finalize ();
   virtual void initialize ();
+
+  bool top_level_;
 };
 
 ADD_ACKNOWLEDGER (Vertical_align_engraver, axis_group);
 ADD_TRANSLATOR (Vertical_align_engraver,
                /* doc */
-               "Catch groups (staves, lyrics lines, etc.) and stack them "
-               "vertically.",
+               "Catch groups (staves, lyrics lines, etc.) and stack them"
+               " vertically.",
 
                /* create */
                "VerticalAlignment ",
@@ -56,6 +58,7 @@ Vertical_align_engraver::Vertical_align_engraver ()
 {
   valign_ = 0;
   id_to_group_hashtab_ = SCM_EOL;
+  top_level_ = false;
 }
 
 void
@@ -75,7 +78,9 @@ Vertical_align_engraver::process_music ()
 {
   if (!valign_)
     {
-      valign_ = make_spanner ("VerticalAlignment", SCM_EOL);
+      top_level_ = to_boolean (get_property ("topLevelAlignment"));
+
+      valign_ = make_spanner (top_level_ ? "VerticalAlignment" : "StaffGrouper", SCM_EOL);
       valign_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
       Align_interface::set_ordered (valign_);
     }
@@ -105,7 +110,7 @@ Vertical_align_engraver::qualifies (Grob_info i) const
 void
 Vertical_align_engraver::acknowledge_axis_group (Grob_info i)
 {
-  if (qualifies (i))
+  if (top_level_ && qualifies (i))
     {
       string id = i.context ()->id_string ();
 
@@ -145,4 +150,9 @@ Vertical_align_engraver::acknowledge_axis_group (Grob_info i)
            }
        }
     }
+  else if (!top_level_)
+    {
+      Pointer_group_interface::add_grob (valign_, ly_symbol2scm ("elements"), i.grob ());
+      i.grob ()->set_object ("staff-grouper", valign_->self_scm ());
+    }
 }