X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffolded-repeat-iterator.cc;h=79bfcb2fc797aba35c884da3950c06c9f6f2b299;hb=cc18fd6f82df460cc31695c4c31f47f45b7e434e;hp=b2e07aed32d6ba45a581dd93b30ac962bbd8c0f3;hpb=d765f3af45be51f15da55cf570a4b172200e1035;p=lilypond.git diff --git a/lily/folded-repeat-iterator.cc b/lily/folded-repeat-iterator.cc index b2e07aed32..79bfcb2fc7 100644 --- a/lily/folded-repeat-iterator.cc +++ b/lily/folded-repeat-iterator.cc @@ -1,23 +1,18 @@ -/* - folded-repeat-iterator.cc -- implement Folded_repeat_iterator - - source file of the GNU LilyPond music typesetter - - (c) 1999--2002 Han-Wen Nienhuys - - */ +/* + folded-repeat-iterator.cc -- implement Folded_repeat_iterator + source file of the GNU LilyPond music typesetter -/* - Folded repeats are a stupid idea at this point, so we refrain from - implementing get_pending_events () and skip (). + (c) 1999--2006 Han-Wen Nienhuys */ #include "folded-repeat-iterator.hh" + +#include "context.hh" +#include "input.hh" +#include "international.hh" #include "repeated-music.hh" -#include "music-list.hh" #include "simultaneous-music-iterator.hh" -#include "translator-group.hh" Folded_repeat_iterator::Folded_repeat_iterator () { @@ -31,31 +26,17 @@ Folded_repeat_iterator::ok () const return main_iter_ || alternative_iter_; } void -Folded_repeat_iterator::do_quit() +Folded_repeat_iterator::do_quit () { - if (main_iter_)main_iter_->quit(); - if (alternative_iter_)alternative_iter_->quit(); -} - -Folded_repeat_iterator::Folded_repeat_iterator (Folded_repeat_iterator const &src) - : Music_iterator (src) -{ - main_iter_ = src.main_iter_ ? src.main_iter_->clone () : 0; - alternative_iter_ = src.alternative_iter_ ? src.alternative_iter_->clone () : 0; - main_length_mom_ = src.main_length_mom_; - if (main_iter_) - scm_gc_unprotect_object (main_iter_->self_scm()); - if (alternative_iter_) - scm_gc_unprotect_object (alternative_iter_->self_scm()); + if (main_iter_)main_iter_->quit (); + if (alternative_iter_)alternative_iter_->quit (); } Moment Folded_repeat_iterator::pending_moment () const { if (main_iter_) - { - return main_iter_->pending_moment (); - } + return main_iter_->pending_moment (); else return main_length_mom_ + alternative_iter_->pending_moment (); } @@ -63,8 +44,8 @@ Folded_repeat_iterator::pending_moment () const void Folded_repeat_iterator::construct_children () { - Repeated_music * mus = dynamic_cast (get_music ()); - main_iter_ = unsmob_iterator (get_iterator (mus->body ())); + Music *mus = get_music (); + main_iter_ = unsmob_iterator (get_iterator (Repeated_music::body (mus))); if (!main_iter_->ok ()) { leave_body (); @@ -75,13 +56,6 @@ Folded_repeat_iterator::construct_children () void Folded_repeat_iterator::process (Moment m) { - if (!m.to_bool () ) - { - bool success = try_music (get_music ()); - if (!success) - get_music ()->origin ()->warning (_ ("no one to print a repeat brace")); - } - if (main_iter_) { main_iter_->process (m); @@ -90,17 +64,15 @@ Folded_repeat_iterator::process (Moment m) } if (!main_iter_ && !alternative_iter_) - { - enter_alternative (); - } - + enter_alternative (); + if (alternative_iter_) { alternative_iter_->process (m - main_length_mom_); if (!alternative_iter_->ok ()) { - alternative_iter_->quit(); - alternative_iter_ =0; + alternative_iter_->quit (); + alternative_iter_ = 0; } } } @@ -108,51 +80,49 @@ Folded_repeat_iterator::process (Moment m) void Folded_repeat_iterator::leave_body () { - Repeated_music * mus = dynamic_cast (get_music ()); + Music *mus = get_music (); main_iter_->quit (); main_iter_ = 0; - main_length_mom_ += mus->body ()->length_mom (); + main_length_mom_ += Repeated_music::body (mus)->get_length (); } void Folded_repeat_iterator::enter_alternative () { - Repeated_music * mus = dynamic_cast (get_music ()); - if (mus->alternatives ()) + Music *mus = get_music (); + if (scm_is_pair (Repeated_music::alternatives (mus))) { - /* - ugh. - */ - Simultaneous_music_iterator * s = new Simultaneous_music_iterator; - s->separate_contexts_b_ = true; - s->init_translator (mus, report_to ()); - + /* + ugh. + */ + Simultaneous_music_iterator *s = new Simultaneous_music_iterator; + s->create_separate_contexts_ = true; + s->init_context (mus, get_outlet ()); + alternative_iter_ = s; alternative_iter_->construct_children (); - scm_gc_unprotect_object (s->self_scm()); + s->unprotect (); } } - -Music_iterator* -Folded_repeat_iterator::try_music_in_children (Music * m) const +void +Folded_repeat_iterator::derived_mark () const { if (main_iter_) - { - return main_iter_->try_music (m); - } + scm_gc_mark (main_iter_->self_scm ()); if (alternative_iter_) - return alternative_iter_->try_music (m); - return 0; + scm_gc_mark (alternative_iter_->self_scm ()); } + void -Folded_repeat_iterator::derived_mark()const +Folded_repeat_iterator::derived_substitute (Context *f, Context *t) { if (main_iter_) - scm_gc_mark (main_iter_->self_scm()); + main_iter_->substitute_outlet (f, t); if (alternative_iter_) - scm_gc_mark (alternative_iter_->self_scm()); + alternative_iter_->substitute_outlet (f, t); } + IMPLEMENT_CTOR_CALLBACK (Folded_repeat_iterator);