From 7249e164edc571cebc236f2cd3988a5c8ae4c121 Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:32:25 +0000 Subject: [PATCH] lilypond-0.0.32 --- src/staffwalker.cc | 111 ++++++++++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 41 deletions(-) diff --git a/src/staffwalker.cc b/src/staffwalker.cc index eac45b5b13..d93243255d 100644 --- a/src/staffwalker.cc +++ b/src/staffwalker.cc @@ -1,10 +1,28 @@ -#include "request.hh" +/* + staffwalker.cc -- implement Staff_walker + + source file of the LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + +#include "grouping.hh" +#include "staff.hh" +#include "musicalrequest.hh" #include "staffwalker.hh" #include "stcol.hh" #include "sccol.hh" #include "debug.hh" +#include "timedescription.hh" +#include "commandrequest.hh" +#include "grouping.hh" +#include "scorewalker.hh" + +Staff_walker::~Staff_walker() +{ + do_pre_move(); +} -Staff_walker::~Staff_walker() {} Staff_walker::Staff_walker(Staff_walker const &s) :PCursor (s) { @@ -16,62 +34,73 @@ Staff_walker::Staff_walker(Staff * s, PScore*ps ) { staff_l_ = s; pscore_l_ = ps; - break_status = BREAK_END - BREAK_PRE; + default_grouping = new Rhythmic_grouping(MInterval(0, 1), 4); // should be in tdes. TODO + score_walk_l_ = 0; } Moment Staff_walker::when() const { - return (* (PCursor *) this)->when(); -} - -void -Staff_walker::process() -{ - break_status = BREAK_END - BREAK_PRE; - - if (ptr()->musical_b()) { - process_requests(); - } else if (ptr()->staff_commands_p_) - for (iter_top(*ptr()->staff_commands_p_,i); i.ok(); i++) { - process_command(i); - } + return ptr()->when(); } void -Staff_walker::process_command(Command*com) +Staff_walker::process_timing_reqs() { - switch (com->code){ - case BREAK_PRE: - case BREAK_MIDDLE: - case BREAK_POST: - case BREAK_END: - (*this)->score_column_l_->set_breakable(); - break_status = com->code- BREAK_PRE; - break; - case INTERPRET: - do_INTERPRET_command(com); - break; - - case TYPESET: - do_TYPESET_command(com); - break; - - default : - break; + for (int i=0; i < ptr()->timing_req_l_arr_.size(); i++) { + Timing_req * tr_l = ptr()->timing_req_l_arr_[i]; + if (tr_l->meterchange()) { + int b_i=tr_l->meterchange()->beats_i_; + int o_i = tr_l->meterchange()->one_beat_i_; + time_.set_meter(b_i, o_i); + + *default_grouping = Rhythmic_grouping( + MInterval(0,Moment(b_i, o_i)), b_i); + } + } + + for (int i=0; i < ptr()->timing_req_l_arr_.size(); i++) { + Timing_req * tr_l = ptr()->timing_req_l_arr_[i]; + if (tr_l->partial()) { + time_.setpartial(tr_l->partial()->duration_); + } else if (tr_l->barcheck() && time_.whole_in_measure_) { + warning( "Barcheck failed", tr_l->defined_ch_c_l_ ); + } else if (tr_l->cadenza()) { + time_.set_cadenza(tr_l->cadenza()->on_b); + } else if (tr_l->measuregrouping()) { + *default_grouping = parse_grouping( + tr_l->measuregrouping()->beat_i_arr_, + tr_l->measuregrouping()->elt_length_arr_); + } } + time_.OK(); } void Staff_walker::operator++(int i) { + Moment last = when(); + do_pre_move(); - if (ptr()->musical_b() && ptr()->tdescription_ - && !ptr()->tdescription_->whole_in_measure) { - *mlog << "[" << ptr()->tdescription_->bars<<"]"<< flush; - } PCursor::operator++(i); - + if (ok() ) { + Moment delta_t = when() - last; + assert(delta_t >0); + time_.add( delta_t ); + } do_post_move(); } + +void +Staff_walker::process() +{ + process_timing_reqs(); + process_requests(); +} +void +Staff_walker::allow_break() +{ + score_walk_l_->allow_break(this); +} + -- 2.39.5