]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.45
authorfred <fred>
Sun, 24 Mar 2002 19:36:39 +0000 (19:36 +0000)
committerfred <fred>
Sun, 24 Mar 2002 19:36:39 +0000 (19:36 +0000)
14 files changed:
Documentation/INSTALL.pod
lily/bar.cc
lily/beam.cc
lily/item.cc
lily/notehead.cc
lily/register-group.cc [new file with mode: 0644]
lily/register.cc
lily/rest.cc
lily/spanner.cc
lily/staffsym.cc
lily/stem.cc
lily/text-spanner.cc
lily/voice-group-regs.cc
lily/voice-regs.cc

index 4615b850f2d1b83b16c12ab7cf3d93f7067a5e03..3c1b07819baf253307446aa931ca9b43c373e398 100644 (file)
@@ -35,7 +35,7 @@ AT&T CC.
 
 =item *
 Bash. Most scripts will continue to work with a stock sh, but they
-will generate (harmless) syntax errors
+might generate (harmless) syntax errors
 
 =item *
 GNU make. 
index 8b831d206abb23b98558f03060a860e95fa06c29..f0afa9b402307142c43d8e9ff417908a8885f0cc 100644 (file)
@@ -12,6 +12,8 @@ Bar::Bar( String t)
     type = t;
 }
 
+IMPLEMENT_STATIC_NAME(Bar);
+
 void
 Bar::do_print()const
 {
index 9a07bcc6142979e35ba484c9cb0b3fa63e5ee86d..c4d62b54d2faf83dbefb8e4b27bc5ec2ba8ce884 100644 (file)
@@ -281,6 +281,8 @@ Beam::brew_molecule_p() const return out;
     out->translate(Offset(x0 - left->hpos,0));
 }
 
+IMPLEMENT_STATIC_NAME(Beam);
+
 void
 Beam::do_print()const
 {
index e653c46ac6dfdd74387abe4f260323a3eb9914e2..f9adbba73c7d47c8cf4f19415d7eca87c209d34a 100644 (file)
@@ -8,6 +8,8 @@ Item::Item()
     pcol_l_ = 0;
 }
 
+IMPLEMENT_STATIC_NAME(Item);
+
 void
 Item::do_print() const
 {
index b1f660ef171cc91afbab9ecd06dc75305632ecd8..528460f6f19925355f8a286f93fa7af26400f2bd 100644 (file)
@@ -26,6 +26,8 @@ Notehead::set_rhythmic(Rhythmic_req*r_req_l)
     dots = r_req_l->duration_.dots_i_;
 }
     
+IMPLEMENT_STATIC_NAME(Notehead);
+
 void
 Notehead::do_print()const
 {
diff --git a/lily/register-group.cc b/lily/register-group.cc
new file mode 100644 (file)
index 0000000..0725d6c
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+  registergroup.cc -- implement Register_group_register
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "proto.hh"
+#include "plist.hh"
+#include "register-group.hh"
+#include "register.hh"
+
+bool
+Register_group_register::acceptable_request_b(Request* r)
+{
+    for (iter_top(reg_list_, i); i.ok(); i++) {
+       if (i->acceptable_request_b(r))
+           return true;
+    }
+    return false;
+}
+
+void
+Register_group_register::set_feature(Features d)
+{
+    for (iter_top(reg_list_, i); i.ok(); i++) {
+       i->set_feature(d);
+    }
+}
+
+void
+Register_group_register::pre_move_processing()
+{
+    for (iter_top(reg_list_, i); i.ok(); i++) 
+       i->pre_move_processing();
+}
+
+void
+Register_group_register::process_requests()
+{
+    for (iter_top(reg_list_, i); i.ok(); i++) 
+       i->process_requests();
+}
+
+void
+Register_group_register::post_move_processing()
+{
+    iter_top(reg_list_, i);
+    while (i.ok()) {
+       // this construction to ensure clean deletion
+       Request_register *reg_l = i++; 
+       reg_l->post_move_processing();
+    }
+}
+
+void
+Register_group_register::acknowledge_element(Staff_elem_info info)
+{
+    if (!contains_b(info.origin_reg_l_arr_[0]))
+       return;
+    
+    for (iter_top(reg_list_, i); i.ok(); i++) 
+       i->acknowledge_element(info);
+}
+
+bool
+Register_group_register::contains_b(Request_register* reg_l)
+{
+    bool parent_b = Request_register::contains_b(reg_l);
+    
+    if (parent_b)
+       return true;
+    for (iter_top(reg_list_, j); j.ok(); j++)
+       if (j->contains_b(reg_l))
+           return true;
+    return false;
+}
+       
+
+
+bool
+Register_group_register::try_request(Request*req_l)
+{
+    iter_top(reg_list_, i); 
+    while (i.ok()) {
+
+
+       // this construction to ensure clean deletion
+       Request_register *reg_l = i++; 
+       if (reg_l->try_request( req_l ))
+           return true;
+    }
+    return false;
+}
+
+void
+Register_group_register::add(Request_register *reg_p)
+{
+    reg_list_.bottom().add(reg_p);
+    reg_p->daddy_reg_l_ = this;
+}
+
+
+Register_group_register::~Register_group_register()
+{
+    
+}
+
+Request_register *
+Register_group_register::get_register_p(Request_register*reg_l)
+{
+    iterator(reg_list_) reg_cur= reg_list_.find(reg_l);
+    assert(reg_cur.ok());
+    return reg_cur.remove_p();
+}
+
+void
+Register_group_register::terminate_register(Request_register*r_l)
+{
+    delete get_register_p(r_l);
+}
+
+IMPLEMENT_STATIC_NAME(Register_group_register);
+
+void
+Register_group_register::do_print()const
+{
+#ifndef NPRINT
+    for (iter_top(reg_list_, i); i.ok(); i++) 
+       i->print();
+#endif
+}
index dfaa3ce05b57bec7de44559aaa2ce2bfb3ead363..b9edcf9d584486528e01577396c45588977bf00b 100644 (file)
@@ -13,7 +13,7 @@
 #include "complex-walker.hh"
 #include "local-key-item.hh"
 #include "complex-staff.hh"
-#include "registergroup.hh"
+#include "register-group.hh"
 #include "debug.hh"
 
 
@@ -82,6 +82,8 @@ Request_register::print() const
 #endif
 }
 
+IMPLEMENT_STATIC_NAME(Request_register);
+
 void
 Request_register::do_print()const
 {
index 97f91a6a6a44d5613fd268acb17ede3ef1a06d8f..3e582511e937d99b002faa49ca207c811288a6c6 100644 (file)
@@ -22,6 +22,8 @@ Rest::Rest(Duration d)
 }
 
 
+IMPLEMENT_STATIC_NAME(Rest);
+
 void
 Rest::do_print()const
 {
index d89301bc1086e89b5b5b5e093ddc7ff5ec3e3d6d..87a01078aa675e08e805cd2624610e63960ef980 100644 (file)
@@ -4,6 +4,8 @@
 
 
 
+IMPLEMENT_STATIC_NAME(Spanner);
+
 void
 Spanner::do_print()const
 {
index ad639e9c2d87f28a1c965b4b1671b4d003f9a449..0ad2411589351434d7b61e9e3954971811bfe6da 100644 (file)
@@ -17,6 +17,8 @@ Staff_symbol::Staff_symbol(int l)
     no_lines_i_ = l;
 }
 
+IMPLEMENT_STATIC_NAME(Staff_symbol);
+
 void
 Staff_symbol::do_print()const
 {
index 4b141cb2e88e36029618913634949a3ebf178a4c..5e6592c482e4b5ce82ea99cc3d066cbf77d8baf9 100644 (file)
@@ -26,6 +26,8 @@ Stem::Stem(int c) //, Moment len)
     stem_xoffset=0;
 }
 
+IMPLEMENT_STATIC_NAME(Stem);
+
 void
 Stem::do_print() const
 {
index 3f231223d880f94251381968bc445a2b4158455a..77ab800bdbd080e53c7e9f7771216c98e391808d 100644 (file)
@@ -19,6 +19,8 @@ Text_spanner::Text_spanner()
     support = 0;
 }
 
+IMPLEMENT_STATIC_NAME(Text_spanner);
+
 void
 Text_spanner::do_print() const
 {
index 8a602a520152f282713e09afb331244f3d84d7a7..b9351bd8e8edb923abed6703947a64f4ad749ac0 100644 (file)
@@ -5,7 +5,7 @@
 
   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
 */
-
+#include "voice.hh"
 #include "proto.hh"
 #include "plist.hh"
 #include "musical-request.hh"
@@ -32,6 +32,7 @@ Voice_group_registers::Voice_group_registers(String id)
     if (id=="")                        // UGH
        id = __FUNCTION__ + String(temp_id_count++);
     group_id_str_ = id;
+    termination_mom_ = 0; 
 }
 
 bool
@@ -65,17 +66,21 @@ Voice_group_registers::terminate_register(Request_register*r_l)
        for (int i=0; i <voice_regs_l_.size(); i++) {
            if (r_l == voice_regs_l_[i])
                voice_regs_l_.del(i);
+           mtor << "Terminating voice_reg " ;
            Register_group_register::terminate_register(r_l);
            return;
        }
     }
     assert(false);
 }
+IMPLEMENT_STATIC_NAME(Voice_group_registers);
+
 void
 Voice_group_registers::do_print() const
 {
 #ifndef NPRINT
     mtor << "ID: " << group_id_str_<<"\n";
+    mtor << "stopping at " << termination_mom_ << "\n";
     Register_group_register::do_print();
 #endif
 }
@@ -83,6 +88,22 @@ void
 Voice_group_registers::add(Request_register*r_l)
 {
     Register_group_register::add(r_l);
-    if (r_l->name() == Voice_registers::static_name())
-       voice_regs_l_.push( (Voice_registers*)r_l );
+    if (r_l->name() == Voice_registers::static_name()) {
+       Voice_registers * vregs_l = (Voice_registers*)r_l;
+       voice_regs_l_.push( vregs_l );
+       Voice *v_l = vregs_l->voice_l_;
+       termination_mom_ = termination_mom_ >? v_l -> last();
+       mtor << "adding Voice_registers, now terminating at " << 
+           termination_mom_<< "\n";
+    }
+}
+
+void
+Voice_group_registers::post_move_processing()
+{
+    if ( get_staff_info().time_C_ ->when_ > termination_mom_ ){
+       mtor << "Terminating voice_group\n";
+       daddy_reg_l_->terminate_register(this);
+    }
+    Register_group_register::post_move_processing();
 }
index ca39524be0e0969bcec91cb0a3b79998db01546e..2aa7f18eb002d600d0f58cf2b6c127d943694815 100644 (file)
@@ -55,13 +55,17 @@ Voice_registers::try_request(Request*r_l)
 bool
 Voice_registers::acceptable_request_b(Request*r)
 {
-//    return (r->rest() || r->note() || r->slur() || r->groupchange());
-    return  r->groupchange()
+    Command_req *  c_l = r->command();
+    return  r->groupchange() || (c_l&&c_l->terminate())
        || Register_group_register::acceptable_request_b(r);
 }
+IMPLEMENT_STATIC_NAME(Voice_registers);
+
 void
 Voice_registers::do_print() const
 {
+#ifndef NPRINT
     mtor << "Voice= " << voice_l_<<'\n';
     Register_group_register::do_print();
+#endif
 }