source file of the GNU LilyPond music typesetter
- (c) 2006 Joe Neeman <joeneeman@gmail.com>
+ (c) 2006--2007 Joe Neeman <joeneeman@gmail.com>
*/
#include "engraver.hh"
#include "duration.hh"
#include "grob.hh"
#include "international.hh"
-#include "moment.hh"
#include "paper-column.hh"
#include "stream-event.hh"
#include "warn.hh"
ret.push_back (Page_turn_event (intersect[LEFT], intersect[RIGHT], permission_, new_pen));
if (penalty.duration_[RIGHT] < duration_[RIGHT])
- ret.push_back (Page_turn_event (penalty.duration_[RIGHT], duration_[LEFT], permission_, penalty_));
+ ret.push_back (Page_turn_event (penalty.duration_[RIGHT], duration_[RIGHT], permission_, penalty_));
return ret;
}
if (start == breakable_moments_.size ())
return NULL;
- if (end == breakable_moments_.size () || breakable_moments_[end] > brk.duration_[RIGHT])
- {
- if (end == 0)
- return NULL;
- end--;
- }
+ if (end == 0)
+ return NULL;
+ end--;
for (vsize i = end + 1; i-- > start;)
if (special_barlines_[i])
void
Page_turn_engraver::acknowledge_note_head (Grob_info gi)
{
- SCM dur_log_scm = gi.grob ()->get_property ("duration-log");
- if (!scm_is_number (dur_log_scm))
- return;
+ Stream_event *cause = gi.event_cause ();
- int dur_log = scm_to_int (dur_log_scm);
- int dot_count = robust_scm2int (gi.grob ()->get_property ("dot-count"), 0);
+ Duration *dur_ptr = cause
+ ? unsmob_duration (cause->get_property ("duration"))
+ : 0;
+
+ if (!dur_ptr)
+ return;
if (rest_begin_ < now_mom ())
{
if (rest_begin_ <= repeat_begin_)
repeat_begin_rest_length_ = (now_mom () - repeat_begin_).main_part_;
- note_end_ = now_mom () + Moment (Duration (dur_log, dot_count).get_length ());
+ note_end_ = now_mom () + dur_ptr->get_length ();
}
IMPLEMENT_TRANSLATOR_LISTENER (Page_turn_engraver, break);
/* it's possible that the last of my newly-split events overlaps the next repeat_penalty,
in which case we need to refilter that event */
- if (rep_index < repeat_penalties_.size () - 1
+ if (rep_index + 1 < repeat_penalties_.size ()
&& split.size ()
&& split.back ().duration_[RIGHT] > repeat_penalties_[rep_index+1].duration_[LEFT])
{
}
ADD_ACKNOWLEDGER (Page_turn_engraver, note_head);
+
ADD_TRANSLATOR (Page_turn_engraver,
/* doc */ "Decide where page turns are allowed to go",
/* create */ "",
- /* accept */ "",
/* read */
"minimumPageTurnLength "
"minimumRepeatLengthForPageTurn ",