]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.1.7
authorfred <fred>
Sun, 24 Mar 2002 19:53:43 +0000 (19:53 +0000)
committerfred <fred>
Sun, 24 Mar 2002 19:53:43 +0000 (19:53 +0000)
15 files changed:
lily/axis-group.cc [new file with mode: 0644]
lily/bar-column-grav.cc [new file with mode: 0644]
lily/collision.cc
lily/dynamic-grav.cc
lily/engraver-group.cc
lily/grouping.cc
lily/horizontal-align-item.cc
lily/key-grav.cc
lily/local-key-grav.cc
lily/my-lily-parser.cc
lily/note-column-grav.cc
lily/scores.cc
lily/script-grav.cc
lily/slur-grav.cc
lily/template8.cc

diff --git a/lily/axis-group.cc b/lily/axis-group.cc
new file mode 100644 (file)
index 0000000..b6b5eec
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+  axis-group.cc -- implement Axis_group_administration
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "interval.hh"
+#include "axis-group.hh"
+#include "score-elem.hh"
+#include "debug.hh"
+
+/** don't copy anything: an element can only be in one
+  Axis_group_element at one time.  */
+Axis_group_administration::Axis_group_administration(
+    Axis_group_administration const&)
+{
+}
+
+bool 
+Axis_group_administration::contains_b(Score_elem const *e)const
+{
+    return elem_l_arr_.find_l(e);
+}
+
+Interval
+Axis_group_administration::extent(Axis axis)const
+{
+    Interval r;
+    for (int i=0; i < elem_l_arr_.size(); i++) 
+       r.unite(elem_l_arr_[i]->extent(axis));
+    return r;
+}
+
+void
+Axis_group_administration::add_element(Score_elem*e,
+                                      Axis_group_element*g, Axis a1, Axis a2)
+{
+    assert( ! e->axis_group_l_a_[a1] && !e->axis_group_l_a_[a2] );
+    e->axis_group_l_a_[a1] = g;
+    e->axis_group_l_a_[a2] = g;    
+    elem_l_arr_.push ( e);
+}
+
+
+
+void
+Axis_group_administration::remove_element(Score_elem*e, Axis a1, Axis a2)
+{
+    assert( contains_b( e));
+    elem_l_arr_.unordered_substitute(e,0);
+    
+    e->axis_group_l_a_[a1] = 0;
+    e->axis_group_l_a_[a2] = 0;    
+}
+
+void
+Axis_group_administration::remove_all(Axis a1, Axis a2)
+{
+    for (int i=0; i < elem_l_arr_.size(); i++) { 
+       Score_elem*e=elem_l_arr_[i];
+       e->axis_group_l_a_[a1] = 0;
+       e->axis_group_l_a_[a2] = 0;  
+    }
+    elem_l_arr_.clear();
+}
+
+
+void    
+Axis_group_administration::print() const
+{
+#ifndef NPRINT
+    for (int i=0; i < elem_l_arr_.size(); i++) 
+       mtor << elem_l_arr_[i]->name() << ' ';
+#endif
+}
diff --git a/lily/bar-column-grav.cc b/lily/bar-column-grav.cc
new file mode 100644 (file)
index 0000000..1dda511
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+  bar-column-grav.cc -- implement Bar_column_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#include "bar-column-grav.hh"
+#include "bar-column.hh"
+#include "request.hh"
+#include "script.hh"
+#include "bar.hh"
+
+Bar_column_engraver::Bar_column_engraver()
+{
+    bar_l_ =0;
+    barcol_p_ =0;
+}
+
+
+void
+Bar_column_engraver::acknowledge_element(Score_elem_info info)
+{
+    if (info.elem_l_->is_type_b(Script::static_name()) 
+       && info.req_l_->command()
+       && info.origin_grav_l_arr_.size() == 1) {
+       script_l_arr_.push( (Script*)info.elem_l_->item());
+    } else {
+       if  (info.origin_grav_l_arr_.size() == 1 
+            && info.elem_l_->is_type_b(Bar::static_name()))
+            bar_l_ = (Bar*)info.elem_l_->item();
+    }
+       
+    if ( bar_l_ && !barcol_p_ ) {
+       barcol_p_ = new Bar_column;
+       barcol_p_->breakable_b_ =true;
+       barcol_p_->set_bar( bar_l_ );
+       announce_element(Score_elem_info(barcol_p_, 0));
+    }
+
+    if  (barcol_p_ ) {
+       for (int i=0; i < script_l_arr_.size(); i++) {
+           script_l_arr_[i]->breakable_b_ = true;
+           barcol_p_->add(script_l_arr_[i]);
+       }
+       script_l_arr_.clear();
+    }
+}
+
+void
+Bar_column_engraver::do_pre_move_processing()
+{
+    if (barcol_p_) {
+       typeset_element( barcol_p_ );
+       barcol_p_ =0;
+    }
+}
+
+void
+Bar_column_engraver::do_post_move_processing()
+{
+    script_l_arr_.clear();
+    bar_l_ =0;
+}
+
+IMPLEMENT_IS_TYPE_B1(Bar_column_engraver, Engraver);
+ADD_THIS_ENGRAVER(Bar_column_engraver);
index f9a15bc4fa4a11615a42c022e713fa9c8dc1e197..0af68c462e2e3efc6fe9ca1a61cd264d31997416 100644 (file)
@@ -20,6 +20,7 @@ void
 Collision::add(Note_column* ncol_l)
 {
     clash_l_arr_.push(ncol_l);
+    add_element( ncol_l );
     add_dependency(ncol_l);
 }
 /**
@@ -76,7 +77,7 @@ Collision::do_pre_processing()
     do {
        if (!clash_group_arr_a[idx(d, false)].size()){
            clash_group_arr_a[idx(d,  false)] = clash_group_arr_a[idx(d, true)];
-           clash_group_arr_a[idx(d, true)].set_size(0);
+           clash_group_arr_a[idx(d, true)].clear();
        }
     } while ((d *= -1) != 1);
                                  
@@ -133,10 +134,14 @@ Collision::do_pre_processing()
     Real inter_f = paper()->internote_f();
     Real wid_f = paper()->note_width();
     for (int j=0; j < 4; j++) {
-       if (col_l_a[j])
-           col_l_a[j]->translate(Offset(x_off[j] * wid_f,
-                                        y_off[j] * inter_f));
-       
+       if (col_l_a[j]) {
+           /* collision.cc:138: request for method `translate' is ambiguous 
+              
+              (shaddup)
+            */
+           Offset o(x_off[j] * wid_f, y_off[j] * inter_f);
+           ((Score_elem*)col_l_a[j])->translate(o);
+       }
     }
 }
 
index 8f99590581b991f38b20ef74db08dda47344f5a0..72d76607df46c68345f1198ba67fb946fce9d6e3 100644 (file)
@@ -28,7 +28,7 @@ Dynamic_engraver::Dynamic_engraver()
 void
 Dynamic_engraver::do_post_move_processing()
 {
-    dynamic_req_l_arr_.set_size(0);
+    dynamic_req_l_arr_.clear();
 }
 
 bool    
index 672c8f2e5f33d760bb314217484b2df1650c98d2..69038b5024eae8375109b40a8cd326a346fe5c76 100644 (file)
 
 Engraver* get_engraver_p(String);
 
+void
+Engraver_group_engraver::print()const
+{ 
+    Engraver::print(); 
+}
+
 Engraver_group_engraver::~Engraver_group_engraver()
 {
     assert(removable_b());
@@ -160,7 +166,7 @@ void
 Engraver_group_engraver::terminate_engraver(Engraver*r_l)
 {
     mtor << "Removing " << r_l->name() << " at " << get_staff_info().when() << "\n";
-    r_l->do_removal_processing();
+    r_l->removal_processing();
     Engraver * grav_p =remove_engraver_p(r_l);
     
     delete grav_p;
@@ -176,7 +182,8 @@ Engraver_group_engraver::do_print()const
 #ifndef NPRINT
     if ( !check_debug)
        return ;
-    mtor << "ID: " << id_str_ << "\n";
+    mtor << "ID: " << id_str_ ;
+    mtor << " iterators: " << iterator_count_<< "\n";
     for (PCursor<Engraver*> i(grav_list_.top()); i.ok(); i++)
        i->print();
 #endif
@@ -266,7 +273,7 @@ Engraver_group_engraver::do_announces()
               nongroup_l_arr_[i]->acknowledge_element(info);
        }
     }
-    announce_info_arr_.set_size(0);
+    announce_info_arr_.clear();
 }
 
 
@@ -274,7 +281,7 @@ void
 Engraver_group_engraver::do_removal_processing()
 {
     for (PCursor<Engraver*> i(grav_list_.top()); i.ok(); i++)
-       i->do_removal_processing();
+       i->removal_processing();
 }
 
 Staff_info
@@ -309,3 +316,16 @@ Engraver_group_engraver::is_bottom_engraver_b()const
 {
     return !itrans_l_->get_default_itrans_l();
 }
+
+Engraver*
+Engraver_group_engraver::get_simple_engraver(char const *type)const
+{
+    for (int i=0; i < nongroup_l_arr_.size(); i++) {
+       if (nongroup_l_arr_[i]->name() == type )
+           return nongroup_l_arr_[i];
+    }
+    if ( daddy_grav_l_ )
+       return daddy_grav_l_->get_simple_engraver(type);
+    return 0;
+}
+
index 0781bf9cb32de9995badb74ea21244ea214b83b9..f35ae8e354b0b0482c877dbb031d022afb4454a6 100644 (file)
@@ -14,7 +14,7 @@ void
 Rhythmic_grouping::init()
 {
     interval_ = 0;
-    children.set_size(0);     
+    children.clear();     
 }
 
 void
index 46c9b70b853b2a40d761e7ad48d6ec727e337ced..8b4427fc0d68d3341847f380fbd36f5dbdba5371 100644 (file)
@@ -69,8 +69,8 @@ Horizontal_align_item::do_pre_processing()
                Horizontal_align_item_content(
                    item_l_arr_[i], priority_i_arr_[i]));
        content.sort(Horizontal_align_item_content::compare);
-       item_l_arr_.set_size(0);
-       priority_i_arr_.set_size(0);
+       item_l_arr_.clear();
+       priority_i_arr_.clear();
        for  (int i =0; i < content.size(); i++) {
            item_l_arr_.push( content[i].item_l_ );
            priority_i_arr_.push( content[i].priority_i_);
@@ -93,14 +93,14 @@ Horizontal_align_item::do_pre_processing()
     Real center_dx_f = 0;
     for ( int i=0 ;  i < item_l_arr_.size(); i++) {
        Real dx = where_f -dims[i][-1];
-       item_l_arr_[i]->translate_x( dx );
+       item_l_arr_[i]->translate( dx , X_AXIS);
        if (item_l_arr_[i] == center_l_)
            center_dx_f = where_f;
        where_f += dims[i].length();
     }
     if (center_dx_f && !align_i_ )
        for ( int i=0 ;  i < item_l_arr_.size(); i++) 
-           item_l_arr_[i]->translate_x( - center_dx_f );
+           item_l_arr_[i]->translate( - center_dx_f , X_AXIS);
     
 }
 
index 84288bd1012dc75d57cdcfe1c32acfc5c4aac600..5de204bd2507b9f31981d4a6958add82cadfd7af 100644 (file)
@@ -28,7 +28,11 @@ void
 Key_engraver::create_key()
 {
     if (!kit_p_) {
-       int c0_i= *get_staff_info().c0_position_i_l_;   
+       int c0_i=0;
+
+       Staff_info inf = get_staff_info();
+       if (inf.c0_position_i_l_)
+           c0_i = *get_staff_info().c0_position_i_l_;  
        
        kit_p_ = new Key_item(c0_i);
        announce_element(Score_elem_info(kit_p_,keyreq_l_));
@@ -67,9 +71,9 @@ Key_engraver::acknowledge_element(Score_elem_info info)
 void
 Key_engraver::do_process_requests()
 {
-    if (key_.multi_octave_b_)
+    if (key_.multi_octave_b_) {
        assert(false); // TODO . 
-    else if (keyreq_l_) {
+    else if (keyreq_l_) {
        create_key();
     }
 }
@@ -79,7 +83,7 @@ Key_engraver::do_pre_move_processing()
 { 
     if (kit_p_) {
        kit_p_->default_b_ = default_key_b_;
-       typeset_breakable_item( kit_p_);
+       typeset_element( kit_p_);
        kit_p_ = 0;
     }
 }
@@ -90,7 +94,7 @@ void
 Key_engraver::read_req(Key_change_req * r)
 {
     key_.multi_octave_b_ = r->multi_octave_b_;
-    accidental_idx_arr_.set_size(0);
+    accidental_idx_arr_.clear();
     for (int i = 0; i < r->melodic_p_arr_.size(); i ++) {
        Melodic_req *  m_l =r->melodic_p_arr_[i];
        int n_i =m_l->notename_i_;
index 78fbae299214cc5eb5220371f8cf9ad22aa39c50..bd474f4d2bb021a9d1a159c026f16943cab05e17 100644 (file)
@@ -40,8 +40,15 @@ Local_key_engraver::do_pre_move_processing()
                
                
 
-           if (!key_item_p)
-               key_item_p = new Local_key_item(*get_staff_info().c0_position_i_l_);
+           if (!key_item_p) {
+               int c0_i=0;
+
+               Staff_info inf = get_staff_info();
+               if (inf.c0_position_i_l_)
+                   c0_i = *get_staff_info().c0_position_i_l_;  
+               
+               key_item_p = new Local_key_item(c0_i);
+           }
            key_item_p->add(note_l);
            key_item_p->add_support(support_l);
            local_key_.oct(note_l->octave_i_)
@@ -57,12 +64,14 @@ Local_key_engraver::do_pre_move_processing()
        typeset_element(key_item_p);
     }
     
-    mel_l_arr_.set_size(0);
-    tied_l_arr_.set_size(0);
-    support_l_arr_.set_size(0);
-    forced_l_arr_.set_size(0); 
+    mel_l_arr_.clear();
+    tied_l_arr_.clear();
+    support_l_arr_.clear();
+    forced_l_arr_.clear();     
 }
-
+/*
+  whoah .. this looks hairy!
+ */
 void
 Local_key_engraver::acknowledge_element(Score_elem_info info)
 {    
@@ -95,11 +104,9 @@ void
 Local_key_engraver::do_process_requests()
 {
     Time_description const * time_C_ = get_staff_info().time_C_;
-    if (time_C_->whole_in_measure_){
+    if (time_C_ && !time_C_->whole_in_measure_){
        if (key_C_)
            local_key_= *key_C_;
-       else if(0&& time_C_->when_ >Moment(0))
-           warning ("Help me! can't figure out current key");
     }
 }
 
index 5c14442745860ffb32fef0245173469b6d690165..3f12eba6fe04598bb2b12e8c8bd5319d26914ab0 100644 (file)
@@ -203,7 +203,7 @@ My_lily_parser::get_parens_request(char c)
     case ']':
     {
        Beam_req*b = new Beam_req;
-       int p_i=default_duration_.plet_.type_i_ ; // ugh . Should junk?
+       int p_i=plet_.type_i_ ; // ugh . Should junk?
        if (p_i!= 1)
            b->nplet = p_i;
        req_p = b;
@@ -270,11 +270,11 @@ My_lily_parser::add_requests(Chord*v)
     for (int i = 0; i < pre_reqs.size(); i++) {
        v->add(pre_reqs[i]);
     }
-    pre_reqs.set_size(0);
+    pre_reqs.clear();
     for (int i = 0; i <post_reqs.size(); i++) {
        v->add(post_reqs[i]);
     }
-    post_reqs.set_size(0);
+    post_reqs.clear();
 }
 
 Input
index 67614565588c115f2457835906209d1539022192..7ce98ae77cac26a79d38f46143f83045b3ffea94 100644 (file)
@@ -49,7 +49,7 @@ Note_column_engraver::acknowledge_element(Score_elem_info i)
 
     char const*nC = i.elem_l_->name();
 
-    if (nC == Script::static_name()) {
+    if (nC == Script::static_name() && i.req_l_ && i.req_l_->musical()) {
        script_l_arr_.push((Script*)i.elem_l_->item());
     } else if (nC == Note_head::static_name()) {
        Note_head * h_l = (Note_head*)i.elem_l_->item();
@@ -78,7 +78,7 @@ Note_column_engraver::acknowledge_element(Score_elem_info i)
                ncol_p_->add(script_l_arr_[i]);
        }
     
-       script_l_arr_.set_size(0);
+       script_l_arr_.clear();
     }
 
 }
@@ -107,7 +107,7 @@ Note_column_engraver::do_pre_move_processing()
 void
 Note_column_engraver::do_post_move_processing()
 {
-    script_l_arr_.set_size(0);
+    script_l_arr_.clear();
     stem_l_ =0;
 }
 
index be558b29c153fcf12e145259acba072f7a7a600d..3cfc56969cb4ce3d91cca71a1a1a51a00ea9bf85 100644 (file)
@@ -28,9 +28,8 @@ do_scores()
        
        if (is_p->errorlevel_i_) {
            is_p->warning("Score contains errors. Will not process it. ");
-         
+           exit_status_i_ |= 1;
        } else { 
-       
            is_p->print ();
            is_p->process();
        }
@@ -38,7 +37,7 @@ do_scores()
        is_p =0;
 
     }
-    score_array_global.set_size(0);
+    score_array_global.clear();
 }
 
 void
index e33f121bb178eab8ba92e740ccf85bad5c0dc295..cd58609143543ad8d6051db89678890e9d14a3d9 100644 (file)
@@ -21,11 +21,11 @@ Script_engraver::do_try_request(Request *r_l)
     if (!r_l->musical() || ! r_l->musical()->musicalscript())
        return false ;
     
-    for (int i=0; i < script_req_l_arr_.size(); i++)
-       if ( !Script_req::compare(*script_req_l_arr_[i], *r_l->script())) {
+    for (int i=0; i < script_req_l_arr_.size(); i++) {
+       if ( r_l->equal_b(script_req_l_arr_[i]))
            return true;
-       }
        
+    }
     script_req_l_arr_.push( r_l->script());
     
     return true;
@@ -44,44 +44,22 @@ Script_engraver::do_process_requests()
     }
 }
 
-bool
-Script_engraver::acceptable_elem_b(Score_elem*s_l)
-{
-    char const *nC = s_l->name();
-    return (nC == Stem::static_name());
-}
-
-void
-Script_engraver::acknowledge_element(Score_elem_info info)
-{
-    Score_elem *elem_l = info.elem_l_;
-    if (!acceptable_elem_b(elem_l))
-       return;
-    
-    for (int i=0; i < script_p_arr_.size(); i++) {
-       Script*script_l = script_p_arr_[i];
-       if (elem_l->name() == Stem::static_name())
-           script_l->set_stem((Stem*)elem_l->item());
-    }
-}
-
 void
 Script_engraver::do_pre_move_processing()
 {
     Staff_symbol* s_l = get_staff_info().staff_sym_l_;
     for (int i=0; i < script_p_arr_.size(); i++) {
-       
        Script*script_p = script_p_arr_[i];
        script_p->set_staffsym( s_l);
        typeset_element(script_p);
     }
-    script_p_arr_.set_size(0);
+    script_p_arr_.clear();
 }
 
 void
 Script_engraver::do_post_move_processing()
 {
-    script_req_l_arr_.set_size(0);
+    script_req_l_arr_.clear();
 }
 
 
index feabdd45b4b2ebbfb2350edc4e1d10711e03c923..1c5c51df4e67046d3c75d6de1ddc4e16e4994827 100644 (file)
@@ -85,13 +85,13 @@ Slur_engraver::do_pre_move_processing()
            end_slur_l_arr_[i]->dir_i_ = dir_i_;
        typeset_element(end_slur_l_arr_[i]);
     }
-    end_slur_l_arr_.set_size(0);
+    end_slur_l_arr_.clear();
 }
 
 void
 Slur_engraver::do_post_move_processing()
 {
-    new_slur_req_l_arr_.set_size(0);
+    new_slur_req_l_arr_.clear();
 }
 Slur_engraver::~Slur_engraver()
 {
index bd33a49eb311d64c380d93cbfa5c0a87ac1f3437..de06b70477f10154c6b1d063135242f67a210bc2 100644 (file)
@@ -1,5 +1,21 @@
+/*
+  template8.cc -- instantiate audio List classes
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
 
 #include "proto.hh"
 #include "plist.hh"
-#include "plist.tcc"
+#include "audio-column.hh"
+#include "audio-item.hh"
+#include "audio-staff.hh"
 #include "pcursor.tcc"
+#include "plist.tcc"
+
+
+IPL_instantiate(Audio_element);
+IPL_instantiate(Audio_column);
+
+