source file of the GNU LilyPond music typesetter
- (c) 1999--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1999--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
class Lyric_combine_music_iterator : public Music_iterator
{
public:
- VIRTUAL_COPY_CONS (Music_iterator);
Lyric_combine_music_iterator ();
Lyric_combine_music_iterator (Lyric_combine_music_iterator const&src);
DECLARE_SCHEME_CALLBACK(constructor, ());
virtual bool ok () const;
virtual void derived_mark () const;
+ virtual void derived_substitute (Translator_group*,Translator_group*) ;
private:
bool get_busy_status ()const ;
- bool melisma_busy ();
-
+ bool melisma_busy ();
Music_iterator * music_iter_;
Music_iterator * lyric_iter_;
};
+bool
+melisma_busy (Translator* tr)
+{
+ SCM melisma_properties = tr->get_property ("melismaBusyProperties");
+ bool busy = false;
+
+ for (; gh_pair_p (melisma_properties);
+ melisma_properties = gh_cdr (melisma_properties))
+ busy = busy || to_boolean (tr->internal_get_property (gh_car (melisma_properties)));
+
+ return busy;
+}
+
+
/*
Ugh, why static?
Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
{
+ music_iter_ =0;
+ lyric_iter_ =0;
+
if (!busy_req)
{
busy_req
melisma_playing_req
= make_music_by_name (ly_symbol2scm ("MelismaPlayingEvent"));
}
-
- music_iter_ =0;
- lyric_iter_ =0;
}
Moment
scm_gc_mark (lyric_iter_->self_scm());
}
+void
+Lyric_combine_music_iterator::derived_substitute (Translator_group*f,Translator_group* t)
+{
+ if (music_iter_)
+ music_iter_->substitute_outlet (f,t);
+ if (lyric_iter_)
+ lyric_iter_->substitute_outlet (f,t);
+}
+
void
Lyric_combine_music_iterator::construct_children ()
{
if (try_music (busy_req))
return true;
- Translator_group * tr = music_iter_->report_to ();
+ Translator_group * tr = music_iter_->get_outlet ();
SCM grobs = tr->get_property ("busyGrobs");
Moment now = tr->now_mom();
bool
Lyric_combine_music_iterator::melisma_busy ()
{
-#if 0
-
- Translator_group * trg = music_iter_->report_to();
- bool melisma_busy= to_boolean (trg->get_property ("melismaBusy"));
-
- melisma_busy = melisma_busy || to_boolean (trg->get_property ("slurMelismaBusy"));
- melisma_busy = melisma_busy || to_boolean (trg->get_property ("tieMelismaBusy"));
- melisma_busy = melisma_busy || to_boolean (trg->get_property ("beamMelismaBusy"));
- return melisma_busy;
-
-#else
-
/*
- The above code is nicer since it doesn't rely on a special
- engraver to signal the melisma status. Unfortunately,
- music_iter_->report_to() might not be the context that sets the
- melisma properties, but rather a parent context.
+ We can not read the property, since music_iter_->get_outlet () might
+ not be the context that sets the melisma properties, but rather a
+ parent context.
*/
- return music_iter_->try_music (melisma_playing_req);
-#endif
-
+ return music_iter_->try_music (melisma_playing_req);
}
void
music_iter_->quit();
if (lyric_iter_)
lyric_iter_->quit();
-
-}
-Lyric_combine_music_iterator::Lyric_combine_music_iterator (Lyric_combine_music_iterator const & src)
- : Music_iterator (src)
-{
- lyric_iter_ = 0;
- music_iter_ = 0;
-
- if (src.lyric_iter_)
- lyric_iter_ = src.lyric_iter_->clone ();
- if (src.music_iter_)
- music_iter_ = src.music_iter_->clone ();
-
- if (lyric_iter_)
- scm_gc_unprotect_object (lyric_iter_->self_scm());
- if (music_iter_)
- scm_gc_unprotect_object (music_iter_->self_scm());
}
Music_iterator*