From d543453c6b1256a9a2407b6fc94bf6e7fce626ca Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:32:23 +0000 Subject: [PATCH] lilypond-0.0.32 --- init/table_sixteen.ini | 12 ++--- src/scorewalker.cc | 109 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 src/scorewalker.cc diff --git a/init/table_sixteen.ini b/init/table_sixteen.ini index 7c61810970..689f935b0f 100644 --- a/init/table_sixteen.ini +++ b/init/table_sixteen.ini @@ -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 index 0000000000..760bd29c75 --- /dev/null +++ b/src/scorewalker.cc @@ -0,0 +1,109 @@ +/* + scorewalker.cc -- implement Score_walker + + source file of the LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ +#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 (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::operator++(0); + if (ok() && ptr()->when() == last) + PCursor::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 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 << "." <