+ for (vsize i = 0; i < now_heads_.size (); i++)
+ {
+ Grob *head = now_heads_[i];
+ Stream_event *left_ev
+ = unsmob<Stream_event> (head->get_property ("cause"));
+
+ if (!left_ev)
+ {
+ // may happen for ambitus
+ continue;
+ }
+
+ // We only want real notes to cause ties, not e.g. pitched trills
+ if (!left_ev->in_event_class ("note-event"))
+ continue;
+
+ SCM left_articulations = left_ev->get_property ("articulations");
+
+ Stream_event *tie_event = 0;
+ Stream_event *tie_stream_event = event_;
+ for (SCM s = left_articulations;
+ !tie_event && !tie_stream_event && scm_is_pair (s);
+ s = scm_cdr (s))
+ {
+ Stream_event *ev = unsmob<Stream_event> (scm_car (s));
+ if (!ev)
+ continue;
+
+ if (ev->in_event_class ("tie-event"))
+ tie_event = ev;
+ }
+
+ if (left_ev && (tie_event || tie_stream_event)
+ && (!Tie_engraver::has_autosplit_end (left_ev)))
+ {
+ event_processed_ = true;
+
+ Head_event_tuple event_tup;
+
+ event_tup.head_ = head;
+ event_tup.tie_event_ = tie_event;
+ event_tup.tie_stream_event_ = tie_stream_event;
+ event_tup.tie_ = make_spanner ("Tie", tie_event
+ ? tie_event->self_scm ()
+ : tie_stream_event->self_scm ());
+
+ Moment end = now_mom ();
+ if (end.grace_part_)
+ {
+ end.grace_part_ += get_event_length (left_ev).main_part_;
+ }
+ else
+ {
+ end += get_event_length (left_ev);
+ }
+ event_tup.end_moment_ = end;
+
+ new_heads_to_tie.push_back (event_tup);
+ }