- if (i < started_spanners_.size () && started_spanners_[i])
- continue;
-
- Spanner* glep = make_spanner ("TupletBracket");
-
- if (i >= started_spanners_.size ())
- started_spanners_.push (glep);
- else
- started_spanners_[i] = glep;
-
-
- SCM proc = get_property ("tupletNumberFormatFunction");
- if (is_procedure (proc))
- {
- SCM t = scm_apply_0 (proc, scm_list_n (time_scaled_musics_[i]->self_scm (), SCM_UNDEFINED));
- glep->set_property ("text", t);
- }
-
- announce_grob (glep, time_scaled_musics_ [i]->self_scm ());
+ if (tuplets_[i].stop_moment_ == now)
+ {
+ stopped_tuplets_.push_back (tuplets_[i]);
+ tuplets_.erase (tuplets_.begin () + i);
+ }
+ }
+
+ for (vsize i = 0; i < stopped_tuplets_.size (); 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_);
+