]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.30
authorfred <fred>
Sun, 24 Mar 2002 19:30:57 +0000 (19:30 +0000)
committerfred <fred>
Sun, 24 Mar 2002 19:30:57 +0000 (19:30 +0000)
hdr/headreg.hh [new file with mode: 0644]
hdr/register.hh
src/groupregs.cc

diff --git a/hdr/headreg.hh b/hdr/headreg.hh
new file mode 100644 (file)
index 0000000..d5eb6fa
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+  headreg.hh -- part of LilyPond
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef HEADREG_HH
+#define HEADREG_HH
+#include "register.hh"
+
+struct Notehead_register : Request_register {
+    Item* note_p_;
+    int dir_i_;
+    /* *************** */
+    Notehead_register(Complex_walker*);
+    virtual bool try_request(Request *req_l) ;
+    virtual void process_request();
+    virtual void do_pre_move_process();
+    void set_dir(int);
+};
+
+
+#endif // HEADREG_HH
index e2b5167d8d0d405f70967708fc86bf5213606ff4..0c47e35cd1979bd2ed7a8c6a04c7bc0b9e03c2e2 100644 (file)
 #define REGISTER_HH
 #include "proto.hh"
 #include "varray.hh"
+#include "request.hh"
 
 /// data container.
 struct Staff_elem_info {
     Staff_elem * elem_p_;
     Request*req_l_;
     const Voice * voice_l_;
-    Voice_group_registers * group_regs_l_;
+    Voice_group_registers * group_regs_l_; 
     Request_register * origin_reg_l_;
 
-    /****/
+    /* *** */
     Staff_elem_info(Staff_elem*, Request*, Request_register*);
     Staff_elem_info();
 };
 
 /// Hungarian postfix: reg
+/**
+  a struct which processes requests, and creates the Staff_elems  
+  */
 struct Request_register {
     Complex_walker * walk_l_;
     Array<Request*> accepted_req_arr_;
     
-    /****************/
-
+    /* *************** */
+    /**
+      Warning: you can't copy a Request_register
+      */
+    Request_register(Request_register const &);
     Request_register(Complex_walker*);
     Request_register();
     virtual ~Request_register(){}
 
-    /// take note of item/spaanner
+    /** take note of item/spaanner
+       put item in spanner. Adjust local key; etc.
+      */
     virtual void acknowledge_element(Staff_elem_info){}
     /**
-      put item in spanner. Adjust local key; etc.
+      Announce element to  walker
+      */
+    void announce_element(Staff_elem_info);
+
+    /**
+      invoke walker method to typeset element
       */
+    void typeset_element(Staff_elem*elem_p);
     
-    ///
-    virtual bool try_request(Request *req_l) =0;
     /**
       try to fit the request in this register
 
-      RETURN
-      false: request noted, but not taken.
+      @return
+      false: not noted,  not taken.
 
       true: request swallowed. Don't try to put elsewhere
 
       (may be we could use C++ exceptions.. :-)
       */
-
+    virtual bool try_request(Request *req_l) =0;
+    
     /// make items/spanners with the requests you got
     virtual void process_request()=0;
-
+    Paperdef * paper() const;
     /// typeset any spanners. Empty accepted_req_arr_
     void pre_move_processing();
     void post_move_processing();
-    
+    virtual void set_dir(int){}
 protected:
     /// virtual, called by pre_move_process()
     virtual void do_pre_move_process(){}
     virtual void do_post_move_process(){}
 };
-/**
-  a struct which processes requests, and creates the Staff_elems  
-  */
 
-struct Notehead_register : Request_register {
-    Item* note_p_;
-    /****************/
-    Notehead_register(Complex_walker*);
-    virtual bool try_request(Request *req_l) ;
-    virtual void process_request();
-    virtual void do_pre_move_process();
-};
-
-struct Slur_register : Request_register {
-    Array<Slur_req*> requests_arr_;
-    Array<Slur *> slur_l_stack_;
-    Array<Slur*> end_slur_l_arr_;
-    
-    /****************/
-    ~Slur_register();
-    Slur_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();
-};
-
-struct Stem_beam_register : Request_register {
-    Stem * stem_p_;
-    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);
-    virtual void do_pre_move_process();
-    virtual void do_post_move_process();
-};
-
-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();
-    virtual void acknowledge_element(Staff_elem_info);
-    virtual void do_pre_move_process();
-};
-
-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 do_pre_move_process();
-};
-
-
-struct Local_key_register : Request_register {
-    Local_key_item* key_item_p_;
-
-    /****************/
-    
-    virtual bool try_request(Request*);
-    virtual void process_request();
-    virtual void acknowledge_element(Staff_elem_info);
-    virtual void do_pre_move_process();
-    Local_key_register(Complex_walker*);
-};
 
 #endif // REGISTER_HH
 
index 9367c92cd50ae04cff393edc4643c791596d5ad5..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,244 +0,0 @@
-#include "script.hh"
-#include "request.hh"
-#include "beam.hh"
-#include "stem.hh"
-#include "register.hh"
-#include "grouping.hh"
-#include "complexwalker.hh"
-#include "debug.hh"
-#include "complexstaff.hh"
-#include "textspanner.hh"
-#include "textitem.hh"
-
-Stem_beam_register::Stem_beam_register(Complex_walker*w)
-    :Request_register(w)
-{
-    do_post_move_process();
-    current_grouping = 0;
-    beam_p_ = 0;
-    set_dir(0);
-    start_req_l_ = 0;
-}
-
-bool
-Stem_beam_register::try_request(Request*req_l)
-{
-    if ( req_l->beam() ) {
-       if (bool(beam_p_ ) == bool(req_l->beam()->spantype == Span_req::START))
-           return false;
-       
-       if (beam_req_l_ && Beam_req::compare(*beam_req_l_ , *req_l->beam()))
-           return false;
-       
-       beam_req_l_ = req_l->beam();
-       return true;
-    }
-    
-    if ( req_l->stem() ) {
-       if (current_grouping && !current_grouping->child_fit_query(
-           walk_l_->col()->tdescription_->whole_in_measure))
-           return false;
-
-       if (stem_req_l_ && Stem_req::compare(*stem_req_l_, *req_l->stem()))
-           return false;
-
-       stem_req_l_ = req_l->stem();
-       return true;
-    }
-    return false;
-}
-
-void
-Stem_beam_register::process_request()
-{
-    if (beam_req_l_) {
-       if (beam_req_l_->spantype == Span_req::STOP) {
-           end_beam_b_ = true;
-           start_req_l_ = 0;
-       } else {
-           beam_p_ = new Beam;
-           start_req_l_ = beam_req_l_;
-//         walk_l_->announce_element(Staff_elem_info(beam_p_, ))
-           current_grouping = new Rhythmic_grouping;
-           if (beam_req_l_->nplet) {
-               Text_spanner* t = new Text_spanner();
-               t->set_support(beam_p_);
-               t->spec.align_i_ = 0;
-               t->spec.text_str_ = beam_req_l_->nplet;
-               walk_l_->typeset_element(t);
-           }
-            
-       }
-    }
-
-    if (stem_req_l_) {
-       stem_p_ = new Stem(4);
-       if (current_grouping)
-           current_grouping->add_child(
-               walk_l_->col()->tdescription_->whole_in_measure,
-               stem_req_l_->duration());
-
-       stem_p_->flag = stem_req_l_->balltype;
-
-       if (beam_p_) {
-           if (stem_req_l_->balltype<= 4)
-               warning( "stem doesn't fit in Beam",
-                        stem_req_l_->defined_ch_c_l_m);
-           else
-               beam_p_->add(stem_p_);
-           stem_p_->print_flag = false;
-       } else {
-           stem_p_->print_flag = true;
-       }
-       
-       walk_l_->announce_element(Staff_elem_info(stem_p_,
-                                                 stem_req_l_,  this));
-    }
-}
-
-void
-Stem_beam_register::acknowledge_element(Staff_elem_info info)
-{
-    if (!stem_p_)
-       return;
-
-    if (info.elem_p_->name() == String("Notehead") &&
-       stem_req_l_->duration() == info.req_l_->rhythmic()->duration())
-       
-       stem_p_->add((Notehead*)info.elem_p_);
-}
-
-void
-Stem_beam_register::do_pre_move_process()
-{
-    if (stem_p_) {
-       if (default_dir_i_)
-           stem_p_->dir = default_dir_i_;
-       
-       walk_l_->typeset_element(stem_p_);
-       stem_p_ = 0;
-    }
-    if (beam_p_ && end_beam_b_) {
-       walk_l_->default_grouping.extend(current_grouping->interval());
-       beam_p_->set_grouping(walk_l_->default_grouping, *current_grouping);
-       walk_l_->typeset_element(beam_p_);
-       delete current_grouping;
-       current_grouping = 0;
-       beam_p_ = 0;
-    }
-    end_beam_b_ = false;
-}
-void
-Stem_beam_register::do_post_move_process()
-{
-    stem_p_ = 0;
-    beam_req_l_ = 0;
-    stem_req_l_ = 0;
-    end_beam_b_ = false;
-}
-
-Stem_beam_register::~Stem_beam_register()
-{
-    if (beam_p_)
-       warning("unterminated beam", start_req_l_->defined_ch_c_l_m);
-}
-
-void
-Stem_beam_register::set_dir(int i)
-{
-    default_dir_i_ = i;
-}
-/****************/
-
-Script_register::Script_register(Complex_walker*w)
-    : Request_register(w)
-{
-    script_p_ = 0;
-}
-
-bool
-Script_register::try_request(Request *r_l)
-{
-    if (!r_l->script())
-       return false ;
-
-    if (accepted_req_arr_.size()
-       && Script_req::compare(
-           *accepted_req_arr_[0]->script(), *r_l->script()))
-       
-       return false;
-
-    accepted_req_arr_.push(r_l);
-    
-    return true;
-}
-void
-Script_register::process_request()
-{
-    if (accepted_req_arr_.size() ) {
-       script_p_ = new Script(accepted_req_arr_[0]->script(), 10);
-       walk_l_->announce_element(
-           Staff_elem_info(script_p_, accepted_req_arr_[0], this));
-    }
-}
-
-void
-Script_register::acknowledge_element(Staff_elem_info info)
-{
-    if (!script_p_)
-       return;
-    if (info.elem_p_->name() == String("Stem"))
-       script_p_->set_stem((Stem*)info.elem_p_);
-    else if (info.req_l_->rhythmic())
-       script_p_->set_support(info.elem_p_->item());
-}
-
-void
-Script_register::do_pre_move_process()
-{
-    if (script_p_){
-       walk_l_->typeset_element(script_p_);
-       script_p_ = 0;
-    }
-}
-/******************/
-
-
-Text_register::Text_register(Complex_walker*w)
-    : Request_register(w)
-{
-    text_p_ = 0;
-}
-
-bool
-Text_register::try_request(Request*req_l)
-{
-    if (!req_l->text())
-       return false;
-    if (accepted_req_arr_.size() &&
-       Text_req::compare(*req_l->text(), *accepted_req_arr_[0]->text()))
-
-       return false;
-
-    accepted_req_arr_.push(req_l);
-    return true;
-}
-
-void
-Text_register::process_request()
-{
-    
-    if (accepted_req_arr_.size()) {
-       text_p_ = new Text_item(accepted_req_arr_[0]->text(), 10);
-       walk_l_->announce_element(Staff_elem_info(text_p_,
-                                                 accepted_req_arr_[0], this));
-    }
-}
-void
-Text_register::do_pre_move_process()
-{
-    if (text_p_) {
-       walk_l_->typeset_element(text_p_);
-       text_p_ = 0;
-    }
-}