+ add_starter_duration (i);
+}
+
+void
+Spacing_engraver::acknowledge_rhythmic_head (Grob_info i)
+{
+ add_starter_duration (i);
+}
+
+
+void
+Spacing_engraver::add_starter_duration (Grob_info i)
+{
+ if (i.grob ()->internal_has_interface (ly_symbol2scm ("lyric-syllable-interface"))
+ || i.grob ()->internal_has_interface (ly_symbol2scm ("multi-measure-interface")))
+ return;
+
+ /*
+ only pay attention to durations that are not grace notes.
+ */
+ if (!now_.grace_part_)
+ {
+ Stream_event *r = i.event_cause ();
+ if (r && r->in_event_class ("rhythmic-event"))
+ {
+ Moment len = get_event_length (r, now_);
+ Rhythmic_tuple t (i, now_mom () + len);
+ now_durations_.push_back (t);
+ }
+ }
+}
+
+void
+Spacing_engraver::stop_translation_timestep ()
+{
+ Paper_column *musical_column
+ = dynamic_cast<Paper_column *> (unsmob_grob (get_property ("currentMusicalColumn")));
+
+
+ if (!spacing_)
+ start_spanner ();
+
+ musical_column->set_object ("spacing", spacing_->self_scm ());
+ unsmob_grob (get_property ("currentCommandColumn"))
+ ->set_object ("spacing", spacing_->self_scm ());
+
+ SCM proportional = get_property ("proportionalNotationDuration");
+ if (unsmob_moment (proportional))
+ {
+ musical_column->set_property ("shortest-playing-duration", proportional);
+ musical_column->set_property ("shortest-starter-duration", proportional);
+ musical_column->set_property ("used", SCM_BOOL_T);
+ return;
+ }
+