+Bar_number_engraver::Bar_number_engraver ()
+{
+ text_ = 0;
+}
+
+void
+Bar_number_engraver::acknowledge_grob (Grob_info inf)
+{
+ Grob *s = inf.grob ();
+ if (text_
+ && dynamic_cast<Item *> (s)
+ && s->get_property ("break-align-symbol") == ly_symbol2scm ("left-edge"))
+ {
+ /*
+ By default this would land on the Paper_column -- so why
+ doesn't it work when you leave this out? */
+ text_->set_parent (s, X_AXIS);
+ }
+}
+
+void
+Bar_number_engraver::stop_translation_timestep ()
+{
+ if (text_)
+ {
+ text_->set_property ("side-support-elements", get_property ("stavesFound"));
+
+ text_ = 0;
+ }
+}
+
+void
+Bar_number_engraver::create_items ()
+{
+ if (text_)
+ return;
+
+ text_ = make_item ("BarNumber", SCM_EOL);
+ Side_position_interface::set_axis (text_, Y_AXIS);
+}
+
+ADD_TRANSLATOR (Bar_number_engraver,
+ /* descr */ "A bar number is created whenever measurePosition is zero. It is\n"
+ "put on top of all staves, and appears only at left side of the staff. "
+ "The staves are taken from @code{stavesFound}, which is maintained by "
+ "@code{@ref{Staff_collecting_engraver}}. ",
+
+ /* creats*/ "BarNumber",
+ /* accepts */ "",
+ /* acks */ "break-aligned-interface",
+ /* reads */ "currentBarNumber stavesFound barNumberVisibility",
+ /* write */ "");