X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fglobal-translator.cc;h=a7fb3e0c3c0f5f946e1e8f19a3ddb9bf600c7e17;hb=38655bc28e73a0b218ba1582bdb84bab0fdfec4b;hp=33ff9f81a15e603c656c5e6f230ea65f5ffa907b;hpb=cec6dfa6bf0fb931eb7f42b1ee44ca2ec19a9f34;p=lilypond.git diff --git a/lily/global-translator.cc b/lily/global-translator.cc index 33ff9f81a1..a7fb3e0c3c 100644 --- a/lily/global-translator.cc +++ b/lily/global-translator.cc @@ -1,61 +1,116 @@ /* - global-translator.cc -- implement + global-translator.cc -- implement Global_translator source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2002 Han-Wen Nienhuys */ +#include "debug.hh" +#include "music.hh" +#include "request.hh" +#include "music-list.hh" +#include "music-iterator.hh" #include "global-translator.hh" -Global_translator::Global_translator() +Global_translator::Global_translator () { - last_mom_ = 0; } void Global_translator::add_moment_to_process (Moment m) { - if (m > last_mom_) + if (m > final_mom_) return; + + if (m < now_mom_) + programming_error ("Trying to freeze in time."); - for (int i=0; i < extra_mom_pq_.size(); i++) + for (int i=0; i < extra_mom_pq_.size (); i++) if (extra_mom_pq_[i] == m) return; extra_mom_pq_.insert (m); } -void -Global_translator::modify_next (Moment &w) +Moment +Global_translator::sneaky_insert_extra_moment (Moment w) { - while (extra_mom_pq_.size() && - extra_mom_pq_.front() <= w) - - w =extra_mom_pq_.get(); + while (extra_mom_pq_.size () && extra_mom_pq_.front () <= w) + w = extra_mom_pq_.get (); + return w; } int -Global_translator::moments_left_i() const +Global_translator::moments_left_i () const { - return extra_mom_pq_.size(); + return extra_mom_pq_.size (); } void Global_translator::prepare (Moment m) { + prev_mom_ = now_mom_; now_mom_ = m; } Moment -Global_translator::now_moment () const +Global_translator::now_mom () const { return now_mom_; } -IMPLEMENT_IS_TYPE_B1(Global_translator, Translator_group); + Music_output* -Global_translator::get_output_p() +Global_translator::get_output_p () { return 0; } + +void +Global_translator::one_time_step () +{ +} +void +Global_translator::start () +{ +} +void +Global_translator::finish () +{ +} + +void +Global_translator::run_iterator_on_me (Music_iterator * iter) +{ + if (iter-> ok ()) + prev_mom_ = now_mom_ = iter->pending_moment (); + + bool first = true; + while (iter->ok () || moments_left_i ()) + { + Moment w; + w.set_infinite (1); + if (iter->ok ()) + { + w = iter->pending_moment (); + } + + w = sneaky_insert_extra_moment (w); + + // cout << "Proccing " << w << endl; + + + if (first) + { + first = false; + set_property ("measurePosition", w.smobbed_copy ()); + } + + prepare (w); + if (iter->ok ()) + iter->process (w); + + one_time_step (); + } +}