X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcommand-request.cc;h=904c74da9a315bc6ccdbc170e6ed7cad4f3ac8ec;hb=0c8900ebb927c893d684b2eecf8e46a2e3701d8a;hp=7e33d78a9dd67493fc0000041b7bbad45b710ab6;hpb=01ddcb81463d7a68530971100469d3e2baf8c94b;p=lilypond.git diff --git a/lily/command-request.cc b/lily/command-request.cc index 7e33d78a9d..904c74da9a 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -1,149 +1,382 @@ /* commandrequest.cc -- implement Nonmusical reqs - source file of the LilyPond music typesetter + source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ #include "command-request.hh" #include "debug.hh" #include "musical-request.hh" +void +Command_script_req::do_print() const +{} +Command_script_req::Command_script_req(){} +Command_script_req::~Command_script_req(){} + + + + + void -Cadenza_req::do_print()const +Cadenza_req::do_print() const { - mtor << on_b_; +#ifndef NPRINT + DOUT << on_b_; +#endif } -Cadenza_req::Cadenza_req(bool b) +bool +Cadenza_req::do_equal_b (Request*r) const { - on_b_ =b; + Cadenza_req*cad = dynamic_cast (r); + return cad && cad->on_b_ == on_b_; } -/* *************** */ +Cadenza_req::Cadenza_req (bool b) +{ + on_b_ =b; +} -int -Bar_req::compare(Bar_req const &c1)const + + +bool +Bar_req::do_equal_b (Request*r) const { - return type_str_ == c1.type_str_; + Bar_req * b = dynamic_cast (r); + return b && type_str_ == b->type_str_; } + + + + + void Bar_req::do_print() const { - mtor << type_str_; + DOUT << type_str_; } -Bar_req::Bar_req(String s) +void +Bracket_req::do_print () const { - type_str_ = s; + Span_req::do_print (); } -Partial_measure_req::Partial_measure_req(Moment m) +Bar_req::Bar_req (String s) { - duration_ =m; + type_str_ = s; } -/* *************** */ -Meter_change_req::Meter_change_req() + +Partial_measure_req::Partial_measure_req (Moment m) { - beats_i_ = 0; - one_beat_i_ =0; + length_mom_ =m; } -void -Meter_change_req::set(int b,int o) + +bool +Partial_measure_req::do_equal_b (Request* r) const { - beats_i_=b; - one_beat_i_=o; + Partial_measure_req *p = dynamic_cast (r); + + return p&& p->length_mom_ == length_mom_; } + + + void -Timing_req::do_print()const{} +Timing_req::do_print() const{} + + + void -Command_req::do_print()const{} -/* *************** */ +Command_req::do_print() const{} + + + void Barcheck_req::do_print() const{} -/* *************** */ +bool +Barcheck_req::do_equal_b (Request*r) const +{ + Barcheck_req *b = dynamic_cast (r); + return b; +} + + + + void Clef_change_req::do_print() const { - mtor << clef_str_ ; +#ifndef NPRINT + DOUT << clef_str_ ; +#endif +} + +Clef_change_req::Clef_change_req (String s) +{ + clef_str_ = s; } -Clef_change_req::Clef_change_req(String s) + + + + + +void +Partial_measure_req::do_print() const { - clef_str_ = s; + DOUT << length_mom_; } -/* *************** */ + + + + void -Group_feature_req::do_print() const +Time_signature_change_req::do_print() const { - mtor << "stemdir " << stemdir_i_; +#ifndef NPRINT + DOUT << beats_i_ << "/" << one_beat_i_; +#endif } -Group_feature_req::Group_feature_req() +bool +Time_signature_change_req::do_equal_b (Request * r) const { - stemdir_i_ = 0; + Time_signature_change_req * m = dynamic_cast (r); + + return m && m->beats_i_ == beats_i_ + && one_beat_i_ == m->one_beat_i_; } -void -Group_change_req::do_print()const +Time_signature_change_req::Time_signature_change_req() { - mtor << "id : " << newgroup_str_; + beats_i_ = 0; + one_beat_i_ =0; } -/* *************** */ + + +Tempo_req::Tempo_req() +{ + metronome_i_ = 60; + dur_. durlog_i_ = 2; +} + void -Terminate_voice_req::do_print()const +Tempo_req::do_print() const { + DOUT << dur_.str() << " = " << metronome_i_; } -/* *************** */ + +bool +Tempo_req::do_equal_b (Request *r) const +{ + Tempo_req *t = dynamic_cast (r); + + return t&& t->dur_.length_mom ()== dur_.length_mom () && metronome_i_ == t->metronome_i_; +} + + + + + + void -Partial_measure_req::do_print() const +Measure_grouping_req::do_print() const { - mtor << duration_; + for (int i=0; i < elt_length_arr_.size(); i++) + { + DOUT << beat_i_arr_[i] << "*" << elt_length_arr_[i].str () << " "; + } +} + + +bool +Measure_grouping_req::do_equal_b (Request*) const +{ + return false; // todo } void -Meter_change_req::do_print() const +Key_change_req::transpose (Musical_pitch d) { - mtor << beats_i_ << "*" << one_beat_i_; + if (ordinary_key_b_ ) + { + if (pitch_arr_.size () > 0) + pitch_arr_[0].transpose(d); + else + { + warning(_ ("don't know how handle empty keys")); // TODO + } + } + else + { + Array old_pitch_arr_; + for (int i = 0; i < pitch_arr_.size(); i++) + { + old_pitch_arr_.push(pitch_arr_[i]); + } + // set accidentals for \key d (as in Key_engraver::read_req) + // (later called "new accidentals") + int p = d.semitone_pitch (); + /* Solve the equation 7*no_of_acc mod 12 = p, -6 <= no_of_acc <= 5 */ + int no_of_acc = (7*p) % 12; + no_of_acc = (no_of_acc + 18) % 12 -6; + + /* Correct from flats to sharps or vice versa */ + if (no_of_acc * d.accidental_i_ < 0) + no_of_acc += 12 * sign (d.accidental_i_); + + pitch_arr_.clear (); + if (no_of_acc < 0) + { + int accidental = 6 ; // First accidental: bes + for ( ; no_of_acc < 0 ; no_of_acc++ ) + { + Musical_pitch m; + m.accidental_i_ = -1; + m.notename_i_ = accidental; + pitch_arr_.push(m); + + accidental = (accidental + 3) % 7 ; + } + } + else + { + int accidental = 3 ; // First accidental: fis + for ( ; no_of_acc > 0 ; no_of_acc-- ) + { + Musical_pitch m; + m.accidental_i_ = 1; + m.notename_i_ = accidental; + pitch_arr_.push(m); + + accidental = (accidental + 4) % 7 ; + } + } + // Check if transposed old accidentals and the new ones coincide + no_of_acc = pitch_arr_.size(); + int acc_found; + Musical_pitch mm; + for (int i=0; i < old_pitch_arr_.size(); i++) + { + acc_found = 0; + mm = old_pitch_arr_[i]; + mm.transpose(d); + for (int j=0; ((j < no_of_acc) && (acc_found == 0)); j++) + { + if (pitch_arr_[j].notename_i_ == mm.notename_i_) + { + if (mm.accidental_i_ == 0) + { + // remove new accidental + pitch_arr_.del(j); + no_of_acc--; + acc_found = 1; + } + else + { + // change new accidental + pitch_arr_[j].accidental_i_ = mm.accidental_i_; + acc_found = 1; + } + } + } + if (acc_found == 0) + { + // add transposed old accidental + pitch_arr_.push(mm); + } + } + } } -/* *************** */ void -Measure_grouping_req::do_print() const +Key_change_req::squash_octaves() { - for (int i=0; i < elt_length_arr_.size(); i++) { - mtor << beat_i_arr_[i] <<"*" << elt_length_arr_[i]<<" "; + for (int i=0; i < pitch_arr_.size(); i++) + { + pitch_arr_[i].octave_i_ = 0; } } -/* *************** */ + void Key_change_req::do_print() const { - for (int i=0; i < melodic_p_arr_.size(); i++) { - melodic_p_arr_[i]->print(); +#ifndef NPRINT + for (int i=0; i < pitch_arr_.size(); i++) + { + pitch_arr_[i].print(); } +#endif } Key_change_req::Key_change_req() { + modality_i_ = 0; + ordinary_key_b_= false; +} + + + +Break_req::Break_req () +{ + penalty_i_ = 0; +} + +void +Break_req::do_print () const +{ +} + + + +Mark_req::Mark_req (String s) +{ + str_ = s; } -Key_change_req::Key_change_req(Key_change_req const&c) + +void +Mark_req::do_print () const { - for (int i=0; i < c.melodic_p_arr_.size(); i++) { - melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->melodic() ); + DOUT << str_; +} + +int +Key_change_req::flats_i() +{ + int flats_i = 0; + for (int i = 0; i < pitch_arr_.size(); i++) + { + if (pitch_arr_[i].accidental_i_ < 0) + flats_i -= pitch_arr_[i].accidental_i_; } + return flats_i; +} + +bool +Key_change_req::minor_b() const +{ + return modality_i_ == 3; } -Key_change_req::~Key_change_req() +int +Key_change_req::sharps_i() { - for (int i=0; i < melodic_p_arr_.size(); i++) - delete melodic_p_arr_[i]; + int sharps_i = 0; + for (int i = 0; i < pitch_arr_.size(); i++) + { + if (pitch_arr_[i].accidental_i_ > 0) + sharps_i += pitch_arr_[i].accidental_i_; + } + return sharps_i; }