source file of the GNU LilyPond music typesetter
- (c) 1997--2001 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "translator-group.hh"
#include "debug.hh"
#include "sequential-music-iterator.hh"
#include "music-list.hh"
-#include "request-chord-iterator.hh"
/*
- TODO: handling of grace notes is excuisite pain. This handling
+ TODO: handling of grace notes is exquisite pain. This handling
should be formally specified and then the implementation verified.
*/
if (gh_pair_p (cursor_))
- iter_p_->music_l_ == unsmob_music (gh_car (cursor_))
+ iter_p_->music_l_ == unsmob_music (ly_car (cursor_))
else
iter_p_ == 0;
Grace_fixup *head = 0;
Grace_fixup **tail = &head;
- for (; gh_pair_p (cursor); cursor = gh_cdr (cursor))
+ for (; gh_pair_p (cursor); cursor = ly_cdr (cursor))
{
- Music * mus = unsmob_music (gh_car (cursor));
- Moment l =mus->length_mom ();
+ Music * mus = unsmob_music (ly_car (cursor));
Moment s = mus->start_mom ();
+ Moment l =mus->length_mom () - s;
if (s.grace_part_)
{
{
cursor_ = dynamic_cast<Music_sequence const*> (music_l ())->music_list ();
- iter_p_ = gh_pair_p (cursor_) ? get_iterator_p (unsmob_music (gh_car (cursor_))) : 0;
+ iter_p_ = gh_pair_p (cursor_) ? get_iterator_p (unsmob_music (ly_car (cursor_))) : 0;
while (iter_p_ && !iter_p_->ok ())
{
next_element ();
void
Sequential_music_iterator::next_element ()
{
- Moment len =iter_p_->music_length_mom ();
+ Moment len =iter_p_->music_length_mom () - iter_p_->music_start_mom ();
assert (!grace_fixups_ || grace_fixups_->start_ >= here_mom_);
if (len.main_part_ && grace_fixups_ &&
}
delete iter_p_;
- cursor_ = gh_cdr (cursor_);
+ cursor_ = ly_cdr (cursor_);
if (gh_pair_p (cursor_))
- iter_p_ = get_iterator_p (unsmob_music (gh_car (cursor_)));
+ iter_p_ = get_iterator_p (unsmob_music (ly_car (cursor_)));
else
iter_p_ = 0;
}
s = gh_append2 (nm, s);
Moment m = 0;
- for (SCM i = nm; gh_pair_p (i); i = gh_cdr (i))
- m = m >? unsmob_music (gh_car (i))->length_mom ();
-
+ for (SCM i = nm; gh_pair_p (i); i = ly_cdr (i))
+ {
+ Music *mus=unsmob_music (ly_car (i));
+ m = m >? (mus->length_mom () - mus->start_mom ());
+ }
if (m > Moment (0))
break ;
else
return s;
}
+
+
/*
Skip events till UNTIL. We don't do any other side effects such as
descending to child iterator contexts, because they might depend on
\context specs and \translator changes being executed
+
TODO: build support for grace notes here.
*/
void
/*
do the stuff/note/rest preceding a grace.
*/
- iter_p_->process (iter_p_->music_length_mom ()+
- iter_p_->music_start_mom ());
-
+ iter_p_->process (iter_p_->music_length_mom ());
}
else
iter_p_->process (until - here_mom_ + iter_p_->music_start_mom ());