+#include "engraver.hh"
+#include "axis-group-interface.hh"
+#include "note-spacing.hh"
+#include "group-interface.hh"
+
+struct Spacings
+{
+ Item * staff_spacing_;
+ Link_array<Item> note_spacings_;
+
+ Spacings ()
+ {
+ staff_spacing_ = 0;
+ }
+
+ bool empty( )const
+ {
+ return !staff_spacing_ && !note_spacings_.size ();
+ }
+ void clear () {
+ staff_spacing_ = 0;
+ note_spacings_.clear();
+ }
+};
+
+class Separating_line_group_engraver : public Engraver
+{
+protected:
+ Item * break_malt_p_;
+ Item * musical_malt_p_;
+ Item * last_musical_malt_p_;
+
+ Spacings current_spacings_;
+ Spacings last_spacings_;
+
+ Spanner * sep_span_p_;
+
+ virtual void acknowledge_grob (Grob_info);
+ virtual void initialize ();
+ virtual void finalize ();
+ virtual void stop_translation_timestep ();
+ virtual void start_translation_timestep ();
+public:
+ TRANSLATOR_DECLARATIONS(Separating_line_group_engraver);
+};