+class Lyric_combine_music_iterator : public Music_iterator
+{
+public:
+ Lyric_combine_music_iterator ();
+ Lyric_combine_music_iterator (Lyric_combine_music_iterator const &src);
+ DECLARE_SCHEME_CALLBACK (constructor, ());
+protected:
+ virtual void construct_children ();
+ virtual Moment pending_moment () const;
+ virtual void do_quit ();
+ virtual void process (Moment);
+ virtual bool run_always ()const;
+ virtual bool ok () const;
+ virtual void derived_mark () const;
+ virtual void derived_substitute (Context *, Context *);
+ void set_music_context (Context *to);
+private:
+ bool start_new_syllable () const;
+ Context *find_voice ();
+ void set_busy (SCM);
+ void check_new_context (SCM);
+
+ bool music_found_;
+ bool lyrics_found_;
+ Context *lyrics_context_;
+ Context *music_context_;
+ SCM lyricsto_voice_name_;
+ SCM lyricsto_voice_type_;
+
+ Moment busy_moment_;
+ Moment pending_grace_moment_;
+
+ Music_iterator *lyric_iter_;
+};
+
+Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
+{
+ music_found_ = false;
+ lyrics_found_ = false;
+ pending_grace_moment_.set_infinite (1);
+ lyric_iter_ = 0;
+ music_context_ = 0;
+ lyrics_context_ = 0;
+ busy_moment_.set_infinite (-1);
+ lyricsto_voice_name_ = SCM_UNDEFINED;
+ lyricsto_voice_type_ = SCM_UNDEFINED;
+}