+struct Bracket_nesting_staff : public Bracket_nesting_node
+{
+ Grob *staff_;
+
+ Bracket_nesting_staff (Grob *s) { staff_ = s; }
+ virtual bool add_staff (Grob *);
+};
+
+Bracket_nesting_group::Bracket_nesting_group ()
+{
+ symbol_ = SCM_EOL;
+ delimiter_ = 0;
+}
+
+bool
+Bracket_nesting_staff::add_staff (Grob *g)
+{
+ if (!staff_)
+ {
+ staff_ = g;
+ return true;
+ }
+ return false;
+}
+
+void
+Bracket_nesting_group::create_grobs (Engraver *engraver, SCM default_type)
+{
+ SCM type = scm_is_symbol (symbol_) ? symbol_ : default_type;
+ delimiter_ = engraver->make_spanner (ly_symbol2string (type).c_str (),
+ SCM_EOL);
+
+ for (vsize i = 0; i < children_.size (); i++)
+ children_[i]->create_grobs (engraver, default_type);
+}
+
+void
+Bracket_nesting_group::add_support (Grob *g)
+{
+ Side_position_interface::add_support (g, delimiter_);
+ for (vsize i = 0; i < children_.size (); i++)
+ children_[i]->add_support (g);
+}