- Grob * elem_p = elem_p_arr_[i];
-
- if (Spanner *s = dynamic_cast <Spanner *> (elem_p))
- {
- /*
- do something sensible if spanner not
- spanned on 2 items.
- */
- Direction d = LEFT;
- do {
- if (!s->get_bound (d))
- {
- s->set_bound (d, command_column_l_);
- /* don't warn for empty/suicided spanners,
- it makes real warningsinvisible.
- maybe should be junked earlier? */
- if (!elem_p->live())
- ; // gdb hook
- else
- elem_p->warning (_f ("unbound spanner `%s'", s->name ().ch_C ()));
- }
- }
- while (flip (&d) != LEFT);
-
- if (dynamic_cast<Item*> (s->get_parent (Y_AXIS)))
- programming_error ("Spanner Y-parent is an item.");
- }
- else
- {
- if (!elem_p->get_parent (X_AXIS))
- {
- bool br = to_boolean (elem_p->get_grob_property ("breakable"));
- Axis_group_interface::add_element (br ? command_column_l_ : musical_column_l_, elem_p);
-
- }
- }
- if (!elem_p->get_parent (Y_AXIS))
- Axis_group_interface::add_element (scoreline_l_, elem_p);
+ precomputed_recurse_over_translators (context (), PROCESS_MUSIC, UP);
+ Engraver_group::do_announces ();