]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.27
authorfred <fred>
Sun, 24 Mar 2002 19:29:18 +0000 (19:29 +0000)
committerfred <fred>
Sun, 24 Mar 2002 19:29:18 +0000 (19:29 +0000)
hdr/register.hh
src/voiceregs.cc

index e94faca7cf308a5501ebd4cc05bafdd936103921..42574ed5bcc80f6fc90219d8693d805514db227e 100644 (file)
 /// data container.
 struct Staff_elem_info {
     Staff_elem * elem_p_;
-//    Array<const Request*> 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<Slur_req*> requests_arr_;
     sstack<Slur *> slur_l_stack_;
     Array<Slur*> 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_;
index b13fd01652ce53d2f74ee9dd128a7a8be139b695..a70a01a4190f83219dc5df05996c4097e62ecdbd 100644 (file)
@@ -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<Slur*> 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);
+    }
 }