- if (i < started_span_p_arr_.size () && started_span_p_arr_[i])
- continue;
-
- Spanner* glep = new Spanner (get_property ("TupletBracket"));
- Tuplet_bracket::set_interface (glep);
- if (i >= started_span_p_arr_.size ())
- started_span_p_arr_.push (glep);
- else
- started_span_p_arr_[i] = glep;
-
-
- SCM proc = get_property ("tupletNumberFormatFunction");
- if (gh_procedure_p (proc))
- {
- SCM t = gh_apply (proc, scm_list_n (time_scaled_music_arr_[i]->self_scm (), SCM_UNDEFINED));
- glep->set_grob_property ("text", t);
- }
-
- announce_grob (glep, time_scaled_music_arr_ [i]);
+ Spanner *bracket = stopped_tuplets_[i].bracket_;
+ Spanner *number = stopped_tuplets_[i].number_;
+ if (bracket)
+ {
+ if (stopped_tuplets_[i].full_length_)
+ {
+ Item *col
+ = unsmob<Item> (stopped_tuplets_[i].full_length_note_
+ ? get_property ("currentMusicalColumn")
+ : get_property ("currentCommandColumn"));
+
+ bracket->set_bound (RIGHT, col);
+ number->set_bound (RIGHT, col);
+ }
+ else if (!bracket->get_bound (RIGHT))
+ {
+ if (bracket->get_bound (LEFT))
+ {
+ bracket->set_bound (RIGHT,
+ bracket->get_bound (LEFT));
+ number->set_bound (RIGHT,
+ stopped_tuplets_[i].bracket_->get_bound (LEFT));
+ }
+ else
+ {
+ warning ("omitting tuplet bracket with neither left nor right bound");
+ continue;
+ }
+ }
+ // todo: scrap last_tuplets_, use stopped_tuplets_ only.
+ // clear stopped_tuplets_ at start_translation_timestep
+ last_tuplets_.push_back (bracket);
+ last_tuplets_.push_back (number);
+ }
+ }
+ stopped_tuplets_.clear ();
+
+ concat (tuplets_, new_tuplets_);
+ new_tuplets_.clear ();
+ for (vsize j = tuplets_.size (); j > 0; j--)
+ {
+ /* i goes from size-1 downto 0, inclusively */
+ vsize i = j - 1;
+
+ if (tuplets_[i].bracket_)
+ continue;
+
+ tuplets_[i].full_length_ = to_boolean (get_property ("tupletFullLength"));
+ tuplets_[i].full_length_note_
+ = to_boolean (get_property ("tupletFullLengthNote"));
+
+ tuplets_[i].bracket_ = make_spanner ("TupletBracket",
+ tuplets_[i].event_->self_scm ());
+ tuplets_[i].number_ = make_spanner ("TupletNumber",
+ tuplets_[i].event_->self_scm ());
+ tuplets_[i].number_->set_object ("bracket", tuplets_[i].bracket_->self_scm ());
+ tuplets_[i].number_->set_parent (tuplets_[i].bracket_, X_AXIS);
+ tuplets_[i].number_->set_parent (tuplets_[i].bracket_, Y_AXIS);
+ tuplets_[i].bracket_->set_object ("tuplet-number", tuplets_[i].number_->self_scm ());
+ tuplets_[i].stop_moment_.grace_part_ = 0;
+
+ if (i + 1 < tuplets_.size () && tuplets_[i + 1].bracket_)
+ Tuplet_bracket::add_tuplet_bracket (tuplets_[i].bracket_, tuplets_[i + 1].bracket_);
+
+ if (i > 0 && tuplets_[i - 1].bracket_)
+ Tuplet_bracket::add_tuplet_bracket (tuplets_[i - 1].bracket_, tuplets_[i].bracket_);
+