#include "translator.icc"
-using std::vector;
-
class Horizontal_bracket_engraver : public Engraver
{
public:
TRANSLATOR_DECLARATIONS (Horizontal_bracket_engraver);
vector<Spanner *> bracket_stack_;
+ vector<Spanner *> text_stack_;
vector<Stream_event *> events_;
vsize pop_count_;
vsize push_count_;
void stop_translation_timestep ();
void process_music ();
- DECLARE_ACKNOWLEDGER (note_column);
- DECLARE_TRANSLATOR_LISTENER (note_grouping);
+ void acknowledge_note_column (Grob_info);
+ void listen_note_grouping (Stream_event *);
};
-Horizontal_bracket_engraver::Horizontal_bracket_engraver ()
+Horizontal_bracket_engraver::Horizontal_bracket_engraver (Context *c)
+ : Engraver (c)
{
pop_count_ = 0;
push_count_ = 0;
}
-IMPLEMENT_TRANSLATOR_LISTENER (Horizontal_bracket_engraver, note_grouping);
void
Horizontal_bracket_engraver::listen_note_grouping (Stream_event *ev)
{
ly_symbol2scm ("columns"), gi.grob ());
add_bound_item (bracket_stack_[i],
gi.grob ());
+ add_bound_item (text_stack_[i],
+ gi.grob ());
}
}
{
Spanner *sp = make_spanner ("HorizontalBracket", events_[k]->self_scm ());
+ Spanner *hbt = make_spanner ("HorizontalBracketText", sp->self_scm ());
+
+ sp->set_object ("bracket-text", hbt->self_scm ());
+
+ Side_position_interface::add_support (hbt, sp);
+
+ hbt->set_parent (sp, X_AXIS);
+ hbt->set_parent (sp, Y_AXIS);
+ hbt->set_object ("bracket", sp->self_scm ());
+
for (vsize i = 0; i < bracket_stack_.size (); i++)
/* sp is the smallest, it should be added to the bigger brackets. */
- Side_position_interface::add_support (bracket_stack_[i], sp);
+ {
+ Side_position_interface::add_support (bracket_stack_[i], sp);
+ Side_position_interface::add_support (bracket_stack_[i], hbt);
+ }
+
bracket_stack_.push_back (sp);
+ text_stack_.push_back (hbt);
}
}
Horizontal_bracket_engraver::stop_translation_timestep ()
{
for (vsize i = pop_count_; i--;)
- if (bracket_stack_.size ())
- bracket_stack_.pop_back ();
+ {
+ if (bracket_stack_.size ())
+ bracket_stack_.pop_back ();
+ if (text_stack_.size ())
+ text_stack_.pop_back ();
+ }
pop_count_ = 0;
push_count_ = 0;
events_.clear ();
}
-ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
+void
+Horizontal_bracket_engraver::boot ()
+{
+ ADD_LISTENER (Horizontal_bracket_engraver, note_grouping);
+ ADD_ACKNOWLEDGER (Horizontal_bracket_engraver, note_column);
+}
+
ADD_TRANSLATOR (Horizontal_bracket_engraver,
/* doc */
"Create horizontal brackets over notes for musical analysis"
" purposes.",
/* create */
- "HorizontalBracket ",
+ "HorizontalBracket "
+ "HorizontalBracketText ",
/* read */
"",