X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Flyric-combine-music-iterator.cc;h=d053fa1859f50d706fa17dbf6f75d43e348bc9ba;hb=015bb3813eb4ac879df0561e5c6e28e9d1146792;hp=feebdceb0fa26a9d514e1857af12e59e283e5591;hpb=ac93c7dd01e0b6661c360acf89721ce9d32e4e4c;p=lilypond.git diff --git a/lily/lyric-combine-music-iterator.cc b/lily/lyric-combine-music-iterator.cc index feebdceb0f..d053fa1859 100644 --- a/lily/lyric-combine-music-iterator.cc +++ b/lily/lyric-combine-music-iterator.cc @@ -3,12 +3,11 @@ source file of the GNU LilyPond music typesetter - (c) 1999--2004 Han-Wen Nienhuys + (c) 1999--2005 Han-Wen Nienhuys */ #include "context.hh" -#include "lyric-combine-music.hh" #include "event.hh" #include "note-head.hh" #include "grob.hh" @@ -29,11 +28,14 @@ protected: virtual bool ok () const; virtual void derived_mark () const; - virtual void derived_substitute (Context *,Context *) ; + virtual void derived_substitute (Context *, Context *) ; private: bool get_busy_status ()const ; bool melisma_busy (); + Music* get_combine_lyrics () const; + Music* get_combine_music () const; + Music_iterator * music_iter_; Music_iterator * lyric_iter_; }; @@ -62,8 +64,8 @@ Music *melisma_playing_req; Lyric_combine_music_iterator::Lyric_combine_music_iterator () { - music_iter_ =0; - lyric_iter_ =0; + music_iter_ = 0; + lyric_iter_ = 0; if (!busy_req) { @@ -97,21 +99,41 @@ Lyric_combine_music_iterator::derived_mark ()const } void -Lyric_combine_music_iterator::derived_substitute (Context *f,Context * t) +Lyric_combine_music_iterator::derived_substitute (Context *f, Context * t) { if (music_iter_) - music_iter_->substitute_outlet (f,t); + music_iter_->substitute_outlet (f, t); if (lyric_iter_) - lyric_iter_->substitute_outlet (f,t); + lyric_iter_->substitute_outlet (f, t); } +Music* +Lyric_combine_music_iterator::get_combine_music () const +{ + SCM l = get_music ()->get_property ("elements"); + if (!scm_is_pair (l)) + return 0; + return unsmob_music (scm_car (l)); +} + +Music* +Lyric_combine_music_iterator::get_combine_lyrics () const +{ + SCM l = get_music ()->get_property ("elements"); + if (!scm_is_pair (l)) + return 0; + l = scm_cdr (l); + if (!scm_is_pair (l)) + return 0; + return unsmob_music (scm_car (l)); +} + + void Lyric_combine_music_iterator::construct_children () { - Lyric_combine_music const * m = dynamic_cast (get_music ()); - - music_iter_ = unsmob_iterator (get_iterator (m->get_music ())); - lyric_iter_ = unsmob_iterator (get_iterator (m->get_lyrics ())); + music_iter_ = unsmob_iterator (get_iterator (get_combine_music ())); + lyric_iter_ = unsmob_iterator (get_iterator (get_combine_lyrics ())); } bool @@ -168,7 +190,7 @@ Lyric_combine_music_iterator::process (Moment m) if (get_busy_status () && !melisma_busy () && lyric_iter_->ok ()) { - Moment m= lyric_iter_->pending_moment (); + Moment m = lyric_iter_->pending_moment (); lyric_iter_->process (m); } }