From: fred Date: Sun, 24 Mar 2002 19:29:18 +0000 (+0000) Subject: lilypond-0.0.27 X-Git-Tag: release/1.5.59~5528 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=67f829225dd75ad29f7322a09f63f6dfaf54274e;p=lilypond.git lilypond-0.0.27 --- diff --git a/hdr/register.hh b/hdr/register.hh index e94faca7cf..42574ed5bc 100644 --- a/hdr/register.hh +++ b/hdr/register.hh @@ -12,11 +12,10 @@ /// data container. struct Staff_elem_info { Staff_elem * elem_p_; -// Array requestor_l_arr_; Request*req_l_; const Voice * voice_l_; Voice_group_registers * group_regs_l_; - int group; + Request_register * origin_reg_l_; /****/ @@ -49,7 +48,7 @@ struct Request_register { RETURN false: request noted, but not taken. - true: request swallowed, now owned by this + true: request swallowed. Don't try to put elsewhere (may be we could use C++ exceptions.. :-) */ @@ -71,7 +70,7 @@ protected: */ struct Notehead_register : Request_register { - Item* note_l_; + Item* note_p_; /****************/ Notehead_register(Complex_walker*); virtual bool try_request(Request *req_l) ; @@ -80,10 +79,10 @@ struct Notehead_register : Request_register { }; struct Slur_register : Request_register { + sstack requests_arr_; sstack slur_l_stack_; Array end_slur_l_arr_; - - + /****************/ ~Slur_register(); Slur_register(Complex_walker*); @@ -98,12 +97,15 @@ struct Stem_beam_register : Request_register { Beam * beam_p_; Beam_req * beam_req_l_; Stem_req * stem_req_l_; + Beam_req * start_req_l_; bool end_beam_b_; Rhythmic_grouping *current_grouping; - + int default_dir_i_; + /****************/ Stem_beam_register(Complex_walker*); ~Stem_beam_register(); + void set_dir(int dir_i_); virtual bool try_request(Request*); virtual void process_request(); virtual void acknowledge_element(Staff_elem_info); @@ -111,10 +113,11 @@ struct Stem_beam_register : Request_register { virtual void do_post_move_process(); }; -#if 0 struct Script_register : Request_register { Script * script_p_; + /****************/ + void set_dir(int dir_i_); Script_register(Complex_walker*); virtual bool try_request(Request*); virtual void process_request(); @@ -122,17 +125,17 @@ struct Script_register : Request_register { virtual void do_pre_move_process(); }; -struct Text_register:Request_register{ +struct Text_register : Request_register{ Text_item * text_p_; /****************/ + void set_dir(int dir_i_); Text_register(Complex_walker*); virtual bool try_request(Request*); virtual void process_request(); - virtual void acknowledge_element(Staff_elem_info); virtual void do_pre_move_process(); }; -#endif + struct Local_key_register : Request_register { Local_key_item* key_item_p_; diff --git a/src/voiceregs.cc b/src/voiceregs.cc index b13fd01652..a70a01a419 100644 --- a/src/voiceregs.cc +++ b/src/voiceregs.cc @@ -53,12 +53,18 @@ Voice_registers::process_requests() slur_reg_.process_request(); } +bool +Voice_registers::acceptable_request(Request*r) +{ + return (r->rest() || r->note() || r->slur()); + +} /****************/ Notehead_register::Notehead_register(Complex_walker*w_l) :Request_register(w_l) { - note_l_ = 0; + note_p_ = 0; } bool @@ -75,34 +81,36 @@ Notehead_register::try_request(Request *req_l) void Notehead_register::process_request() { + if (!accepted_req_arr_.size()) + return; + Request* req_l = accepted_req_arr_.last(); if (req_l->note()) { Notehead*n_p = new Notehead(8); // ugh - note_l_ = n_p; + note_p_ = n_p; n_p->set_rhythmic(req_l->rhythmic()); n_p->position = req_l->note()->height() + -2; } else { - note_l_ = new Rest ( req_l->rhythmic()->balltype, + note_p_ = new Rest ( req_l->rhythmic()->balltype, req_l->rhythmic()->dots); if (req_l->rhythmic()->balltype <= 2) - note_l_->translate( + note_p_->translate( Offset(0, - 5 * walk_l_->staff()->paper()->internote())); + 6 * walk_l_->staff()->paper()->internote())); } - Staff_elem_info itinf(note_l_,req_l,this); + Staff_elem_info itinf(note_p_,req_l,this); walk_l_->announce_element(itinf); } void Notehead_register::do_pre_move_process() { - if (note_l_) { - walk_l_->typeset_element(note_l_); - note_l_ = 0; + if (note_p_) { + walk_l_->typeset_element(note_p_); + note_p_ = 0; } } -/****************/ /****************/ Slur_register::Slur_register(Complex_walker* w) @@ -131,21 +139,29 @@ Slur_register::acknowledge_element(Staff_elem_info info) end_slur_l_arr_[i]->add(head_p); } } - +/* + abracadabra + */ void Slur_register::process_request() { Array start_slur_l_arr_; for (int i=0; i< accepted_req_arr_.size(); i++) { Slur_req* slur_req_l = accepted_req_arr_[i]->slur(); + // end slur: move the slur to other array if (slur_req_l->spantype == Span_req::STOP) { if (slur_l_stack_.empty()) - error_t("can't find slur to end; ", - *walk_l_->col()->tdescription_); - end_slur_l_arr_.push(slur_l_stack_.pop()); - + warning("can't find slur to end; ", + slur_req_l->defined_ch_c_l_m); + else { + end_slur_l_arr_.push(slur_l_stack_.pop()); + requests_arr_.pop(); + } } else if (slur_req_l->spantype == Span_req::START) { + // push a new slur onto stack. + //(use temp. array to wait for all slur STOPs) Slur * s_p =new Slur; + requests_arr_.push(slur_req_l); start_slur_l_arr_.push(s_p); walk_l_->announce_element(Staff_elem_info(s_p, slur_req_l, this)); } @@ -164,6 +180,7 @@ Slur_register::do_pre_move_process() Slur_register::~Slur_register() { - if (slur_l_stack_.size()) - error("unterminated slur"); + for (int i=0; i < requests_arr_.size(); i++) { + warning("unterminated slur: ", requests_arr_[i]->defined_ch_c_l_m); + } }