]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.32
authorfred <fred>
Sun, 24 Mar 2002 19:32:23 +0000 (19:32 +0000)
committerfred <fred>
Sun, 24 Mar 2002 19:32:23 +0000 (19:32 +0000)
init/table_sixteen.ini
src/scorewalker.cc [new file with mode: 0644]

index 7c61810970ad32dbbb93c97dbcdb589ce6c4b17d..689f935b0f3e58f8e00d0c16fe74e278cb7e4a62 100644 (file)
@@ -72,11 +72,11 @@ symboltables {
      }
 
      "bars" = table {
-       "empty" "\emptybar"     0pt     0pt     0pt     0pt
-       "|"     "\maatstreep"   0pt     5pt     -8pt    8pt
-       "||"    "\finishbar"    0pt     2pt     -8pt    8pt
-       ":|"    "\repeatbar"    -4pt    0pt     -8pt    8pt
-       "|:"    "\startrepeat"  0pt     4pt     -8pt    8pt
+       "empty" "\emptybar"             0pt     0pt     0pt     0pt
+       "|"     "\maatstreep"           0pt     0.4pt   -8pt    8pt
+       "||"    "\finishbar"            0pt     2pt     -8pt    8pt
+       ":|"    "\repeatbar"            -4pt    0pt     -8pt    8pt
+       "|:"    "\startrepeat"          0pt     4pt     -8pt    8pt
        ":|:"   "\repeatbarstartrepeat" 0pt     16pt    -8pt    8pt
 
      }
@@ -97,7 +97,7 @@ symboltables {
 
      % dims ignored for this table
      "param" = table {
-            "meter"    "\generalmeter{%}{%}"   -3pt    10pt    -5pt    5pt
+            "meter"    "\generalmeter{%}{%}"   0pt     10pt    -5pt    5pt
             "linestaf" "\linestafsym{%}{%}"
             "stem"     "\stem{%}{%}"           
             "fill"     "\hbox{}"
diff --git a/src/scorewalker.cc b/src/scorewalker.cc
new file mode 100644 (file)
index 0000000..760bd29
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+  scorewalker.cc -- implement Score_walker
+
+  source file of the LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+#include "debug.hh"
+#include "plist.hh"
+#include "scorewalker.hh"
+#include "score.hh"
+#include "staffwalker.hh"
+#include "staff.hh"
+#include "sccol.hh"
+
+Score_walker::Score_walker(Score *s)
+    :PCursor<Score_column *> (s->cols_)
+{
+    for (iter_top(s->staffs_,i); i.ok(); i++) {
+       Staff_walker* w_p=i->get_walker_p();
+       w_p->score_walk_l_ =this;
+       walker_p_arr_.push(w_p);
+    }
+
+    if(ok()) {
+       s->find_col(0, false)->set_breakable();
+       s->find_col(s->last(), false)->set_breakable();
+    }
+    reinit();
+}
+
+
+void
+Score_walker::reinit()
+{
+    disallow_break_walk_l_arr = walker_p_arr_;
+    disallow_break_count_ = disallow_break_walk_l_arr.size();
+}
+
+
+/** Advance the cursor, and all Staff_walkers contained in this. Reset
+  runtime fields */
+void 
+Score_walker::operator ++(int )
+{
+    Moment last = ptr()->when();
+    
+    PCursor<Score_column *>::operator++(0);
+    if (ok() && ptr()->when() == last)
+       PCursor<Score_column *>::operator++(0);
+    reinit();
+    if (!ok())
+       return;
+    for (int i=0; i< walker_p_arr_.size(); i++) {
+       if (walker_p_arr_[i]->ok() &&
+           walker_p_arr_[i]->when() < when()) {
+
+           walker_p_arr_[i]->operator++(0);
+       }
+    }
+}
+
+/** Allow the command_column to be breakable for one staff. If all
+  staffs allow, then allow a break here.  */
+void
+Score_walker::allow_break(Staff_walker*w)
+{
+    for (int i=0; i < disallow_break_walk_l_arr.size(); i++) {
+       if (w == disallow_break_walk_l_arr[i]) {
+           disallow_break_count_ --;
+           disallow_break_walk_l_arr[i] =0;
+
+           if (!disallow_break_count_) {
+               PCursor<Score_column*> col_cursor = *this;
+               if (ptr()->musical_b())
+                   col_cursor --;
+               col_cursor->set_breakable();
+           }
+       }
+    }
+}
+
+Moment
+Score_walker::when()
+{
+    return ptr()->when();
+}
+
+void
+Score_walker::process()
+{
+    for (int i=0; i < walker_p_arr_.size(); i++) {
+       Staff_walker *w = walker_p_arr_[i];
+       if ( w->ok() && w->when() == when() ) {
+           walker_p_arr_[i]->process();
+       }
+    }
+    if (when().denominator() == 1) {
+       *mlog << "." <<flush;
+    }
+}
+
+Score_walker::~Score_walker()
+{
+    for (int i=0; i < walker_p_arr_.size(); i++) 
+       delete walker_p_arr_[i];
+}
+
+