2 lyric-combine-music-iterator.cc -- implement Lyric_combine_music_iterator
4 source file of the GNU LilyPond music typesetter
6 (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "translator-group.hh"
11 #include "lyric-combine-music-iterator.hh"
12 #include "lyric-combine-music.hh"
13 #include "musical-request.hh"
15 Busy_playing_req busy_req
;
16 Melisma_req melisma_start_req
;
17 Melisma_req melisma_stop_req
;
18 Melisma_playing_req melisma_playing_req
;
21 Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
23 melisma_start_req
.span_dir_
= START
;
24 melisma_stop_req
.span_dir_
= STOP
;
31 Lyric_combine_music_iterator::next_moment () const
33 Moment musnext
= music_iter_p_
->next_moment ();
38 Lyric_combine_music_iterator::ok () const
40 return music_iter_p_
->ok ();
44 Lyric_combine_music_iterator::do_print () const
46 music_iter_p_
->print ();
47 lyric_iter_p_
->print ();
51 Lyric_combine_music_iterator::construct_children ()
53 Lyric_combine_music
const * m
= dynamic_cast<Lyric_combine_music
const*> (music_l_
);
55 music_iter_p_
= get_iterator_p (m
->music_l ());
56 lyric_iter_p_
= get_iterator_p (m
->lyrics_l ());
60 Lyric_combine_music_iterator::do_process_and_next (Moment m
)
62 Moment my_next
= music_iter_p_
->next_moment ();
66 music_iter_p_
->process_and_next (m
);
68 bool busy
= try_music (&busy_req
);
71 bool melisma_b
= try_music (&melisma_playing_req
);
74 if (lyric_iter_p_
->ok ())
76 #if 0 // devise a new way for this
77 if (melisma_b
&& !melisma_started_b_
)
78 lyric_iter_p_
->try_music (&melisma_start_req
);
79 else if (melisma_started_b_
)
80 lyric_iter_p_
->try_music (&melisma_stop_req
);
83 Moment m
= lyric_iter_p_
->next_moment ();
84 lyric_iter_p_
->process_and_next (m
);
91 Music_iterator::do_process_and_next (m
);
94 Lyric_combine_music_iterator::~Lyric_combine_music_iterator ()
101 Lyric_combine_music_iterator::try_music_in_children (Music
const *m
) const
103 Music_iterator
* i
= music_iter_p_
->try_music (m
);
107 return lyric_iter_p_
->try_music (m
);