]> git.donarmstrong.com Git - lilypond.git/blobdiff - src/inputmusic.cc
partial: 0.0.38.hanjan
[lilypond.git] / src / inputmusic.cc
index 80f0a258a73b3f0927aee2a2ee1313e806d2a52e..b7ad70b0ab34b61deaa4f0c0540157f9c7ce6e90 100644 (file)
@@ -1,6 +1,24 @@
 #include "debug.hh"
 #include "inputmusic.hh"
 #include "voice.hh"
+#include "musicalrequest.hh"
+
+void
+Input_music::check_plet(Voice_element* velt_l)
+{
+    for (iter_top(velt_l->reqs,i); i.ok(); i++)
+       if ( i->plet() ) {
+           Moment start_moment = 0;
+           if ( !find_plet_start_bo( i->plet()->type_c_, start_moment ) ) {
+               error( "begin of plet not found", i->defined_ch_c_l_ );
+               break;
+           }
+           Moment moment = 0;
+           set_plet_backwards( moment, start_moment, i->plet()->dur_i_, i->plet()->type_i_ );
+           i.del();
+           break;
+        }
+}
 
 void
 Simple_music::add(Voice_element*v)
@@ -9,7 +27,7 @@ Simple_music::add(Voice_element*v)
 }
 
 Moment
-Simple_music::length()
+Simple_music::length()const
 {
     return voice_.last();
 }
@@ -20,7 +38,7 @@ Simple_music::translate_time(Moment t)
 }
 
 Voice_list
-Simple_music::convert()
+Simple_music::convert()const
 {
     Voice_list l;
     l.bottom().add(new Voice(voice_));
@@ -35,8 +53,18 @@ Simple_music::print() const
     voice_.print();
     mtor << "}\n";
 }
+bool
+Simple_music::find_plet_start_bo(char c, Moment& moment_r)
+{
+    return voice_.find_plet_start_bo(c, moment_r);
+}
+void 
+Simple_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i)
+{
+    voice_.set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
+}
 
-/****************/
+/* *************** */
 
 void
 Complex_music::add(Input_music*v)
@@ -67,8 +95,29 @@ Complex_music::Complex_music(Complex_music const&s)
     for (iter_top(s.elts,i); i.ok(); i++)
        add(i->clone());
 }
-
-/****************************************************************/
+void
+Complex_music::set_default_group(String g)
+{
+    for (iter_top(elts,i); i.ok(); i++)
+           i->set_default_group(g);
+}
+bool
+Complex_music::find_plet_start_bo(char c, Moment& moment_r)
+{
+    for (iter_bot(elts,i); i.ok(); i--) {
+        if ( i->find_plet_start_bo(c, moment_r) )
+           return true;
+    }
+    return false;
+}
+void 
+Complex_music::set_plet_backwards(Moment& now_moment_r, Moment until_moment, int num_i, int den_i)
+{
+    for (iter_bot(elts,i); i.ok(); i--) {
+       i->set_plet_backwards(now_moment_r, until_moment, num_i, den_i);
+    }
+}
+/* *************************************************************** */
 
 void
 Music_voice::print() const
@@ -91,12 +140,14 @@ Music_voice::add_elt(Voice_element*v)
     c = elts.bottom();
     Simple_music *s = c->simple();
     s->add(v);             
+
+    check_plet(v);
 }
 
 Moment
-Music_voice::length()
+Music_voice::length()const
 {
-    Moment l = 0.0;
+    Moment l = 0;
     
     for (iter_top(elts,i); i.ok(); i++)
        l += i->length();
@@ -105,10 +156,10 @@ Music_voice::length()
 
     
 Voice_list
-Music_voice::convert()
+Music_voice::convert()const
 {
     Voice_list l;
-    Moment here = 0.0;
+    Moment here = 0;
     
     for (iter_top(elts,i); i.ok(); i++) {
        Moment len = i->length();       
@@ -128,7 +179,7 @@ Music_voice::translate_time(Moment t)
 
     
     
-/****************/
+/* *************** */
 
 void
 Music_general_chord::add_elt(Voice_element*v)
@@ -136,6 +187,8 @@ Music_general_chord::add_elt(Voice_element*v)
     Simple_music*vs = new Simple_music;
     vs->add(v);
     elts.bottom().add(vs);
+
+    check_plet(v);
 }
 
 void
@@ -154,9 +207,9 @@ Music_general_chord::translate_time(Moment t)
 }
 
 Moment
-Music_general_chord::length()
+Music_general_chord::length()const
 {
-    Moment l =0.0;
+    Moment l =0;
     
     for (iter_top(elts,i); i.ok(); i++) 
        l = l >? i->length();
@@ -164,7 +217,7 @@ Music_general_chord::length()
 }
 
 Voice_list
-Music_general_chord::convert()
+Music_general_chord::convert()const
 {
     Voice_list l;
     for (iter_top(elts,i); i.ok(); i++) {
@@ -174,8 +227,20 @@ Music_general_chord::convert()
     return l;
 }
 
+/* *************** */
+
+void
+Multi_voice_chord::set_default_group(String g)
+{
+    int j=0;
+    for (iter_top(elts, i); i.ok(); i++) {
+       i->set_default_group(g + String(j));
+       j++;
+    }
+}
+
 
-/****************/
+/* *************** */
 
 void
 Voice_list::translate_time(Moment x)