/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2014 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
vector<Item *> notes_;
vector<Item *> prev_notes_;
// Must remember notes for explicit ties.
- vector<Item *> tie_note_candidates_;
- vector<Stream_event *> tie_note_candidate_events_;
vector<Grob *> ties_;
vector<Stream_event *> note_events_;
Spanner *tie_column_;
if (unit)
{
Rational const now_unit = e->main_part_ / unit->main_part_;
- if (now_unit.den() > 1)
+ if (now_unit.den () > 1)
{
/*
within a unit - go to the end of that
*/
result = unit->main_part_
- * (Rational (1) - (now_unit - now_unit.trunc_rat ()));
+ * (Rational (1) - (now_unit - now_unit.trunc_rat ()));
}
else
{
note that note_dur may be strictly less than left_to_do_
(say, if left_to_do_ == 5/8)
*/
- if (factor_.denominator () == 1 && factor_ > Rational (1, 1))
- note_dur = Duration (left_to_do_, false);
- else
- note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
+ note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
}
else
{
orig = unsmob_duration (note_events_[0]->get_property ("duration"));
note_dur = *orig;
- factor_ = note_dur.factor ();
+ SCM factor = get_property ("completionFactor");
+ if (ly_is_procedure (factor))
+ factor = scm_call_2 (factor,
+ context ()->self_scm (),
+ note_dur.smobbed_copy ());
+ factor_ = robust_scm2rational (factor, note_dur.factor ());
left_to_do_ = orig->get_length ();
}
Moment nb = next_moment (note_dur.get_length ());
if (nb.main_part_ && nb < note_dur.get_length ())
{
- if (factor_.denominator () == 1 && factor_.numerator () > 1)
- note_dur = Duration (nb.main_part_, false);
- else
- note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
+ note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
}
do_nothing_until_ = now.main_part_ + note_dur.get_length ();
Grob *p = make_spanner ("Tie", SCM_EOL);
Tie::set_head (p, LEFT, left);
Tie::set_head (p, RIGHT, right);
+ announce_end_grob (p, SCM_EOL);
ties_.push_back (p);
}
Moment now = now_mom ();
if (note_end_mom_.main_part_ <= now.main_part_)
{
- tie_note_candidate_events_ = note_events_;
- tie_note_candidates_ = prev_notes_;
-
note_events_.clear ();
prev_notes_.clear ();
}
"TieColumn ",
/* read */
+ "completionFactor "
+ "completionUnit "
"measureLength "
"measurePosition "
"middleCPosition "