X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcommand-request.cc;h=904c74da9a315bc6ccdbc170e6ed7cad4f3ac8ec;hb=0c8900ebb927c893d684b2eecf8e46a2e3701d8a;hp=1d4b35dadf3c56c12b69fa37326ae0123dcb10db;hpb=036af34aa44a151b9e67c18e0acccaafdfae9de8;p=lilypond.git diff --git a/lily/command-request.cc b/lily/command-request.cc index 1d4b35dadf..904c74da9a 100644 --- a/lily/command-request.cc +++ b/lily/command-request.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1999 Han-Wen Nienhuys */ #include "command-request.hh" @@ -13,226 +13,370 @@ void Command_script_req::do_print() const {} -IMPLEMENT_STATIC_NAME(Command_script_req); -IMPLEMENT_IS_TYPE_B1(Command_script_req,Command_req); +Command_script_req::Command_script_req(){} +Command_script_req::~Command_script_req(){} + + + + -IMPLEMENT_STATIC_NAME(Cadenza_req); -IMPLEMENT_IS_TYPE_B1(Cadenza_req, Timing_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_; } -IMPLEMENT_STATIC_NAME(Bar_req); -IMPLEMENT_IS_TYPE_B1(Bar_req,Command_req); + + + + void Bar_req::do_print() const { - mtor << type_str_; + DOUT << type_str_; +} + +void +Bracket_req::do_print () const +{ + Span_req::do_print (); +} + +Bar_req::Bar_req (String s) +{ + type_str_ = s; } -Bar_req::Bar_req(String s) +Partial_measure_req::Partial_measure_req (Moment m) { - type_str_ = s; + length_mom_ =m; } -Partial_measure_req::Partial_measure_req(Moment m) +bool +Partial_measure_req::do_equal_b (Request* r) const { - duration_ =m; + Partial_measure_req *p = dynamic_cast (r); + + return p&& p->length_mom_ == length_mom_; } -/* *************** */ -IMPLEMENT_STATIC_NAME(Timing_req); -IMPLEMENT_IS_TYPE_B1(Timing_req,Command_req); + + void -Timing_req::do_print()const{} +Timing_req::do_print() const{} + + -IMPLEMENT_STATIC_NAME(Command_req); -IMPLEMENT_IS_TYPE_B1(Command_req,Request); void -Command_req::do_print()const{} -/* *************** */ -IMPLEMENT_STATIC_NAME(Barcheck_req); -IMPLEMENT_IS_TYPE_B1(Barcheck_req,Timing_req); +Command_req::do_print() const{} + + void Barcheck_req::do_print() const{} -/* *************** */ -IMPLEMENT_STATIC_NAME(Clef_change_req); -IMPLEMENT_IS_TYPE_B1(Clef_change_req,Command_req); +bool +Barcheck_req::do_equal_b (Request*r) const +{ + Barcheck_req *b = dynamic_cast (r); + return b; +} + + + void Clef_change_req::do_print() const { #ifndef NPRINT - mtor << clef_str_ ; + DOUT << clef_str_ ; #endif } -Clef_change_req::Clef_change_req(String s) +Clef_change_req::Clef_change_req (String s) { - clef_str_ = s; + clef_str_ = s; } -/* *************** */ -IMPLEMENT_STATIC_NAME(Group_feature_req); -IMPLEMENT_IS_TYPE_B1(Group_feature_req,Command_req); -void -Group_feature_req::do_print() const -{ -#ifndef NPRINT - mtor << type_str_ << "=" << value_str_; -#endif -} -/* *************** */ -IMPLEMENT_STATIC_NAME(Partial_measure_req); -IMPLEMENT_IS_TYPE_B1(Partial_measure_req,Timing_req); + + void Partial_measure_req::do_print() const { - mtor << duration_; + DOUT << length_mom_; } -IMPLEMENT_STATIC_NAME(Meter_change_req); -IMPLEMENT_IS_TYPE_B1(Meter_change_req,Timing_req); + + void -Meter_change_req::do_print() const +Time_signature_change_req::do_print() const { - mtor << beats_i_ << "/" << one_beat_i_; +#ifndef NPRINT + DOUT << beats_i_ << "/" << one_beat_i_; +#endif } -int -Meter_change_req::compare(Meter_change_req const &m) +bool +Time_signature_change_req::do_equal_b (Request * r) const { - return m.beats_i_ == beats_i_ && one_beat_i_ == m.one_beat_i_; + Time_signature_change_req * m = dynamic_cast (r); + + return m && m->beats_i_ == beats_i_ + && one_beat_i_ == m->one_beat_i_; } -Meter_change_req::Meter_change_req() +Time_signature_change_req::Time_signature_change_req() { - beats_i_ = 0; - one_beat_i_ =0; + beats_i_ = 0; + one_beat_i_ =0; +} + + +Tempo_req::Tempo_req() +{ + metronome_i_ = 60; + dur_. durlog_i_ = 2; } void -Meter_change_req::set(int b,int o) +Tempo_req::do_print() const +{ + DOUT << dur_.str() << " = " << metronome_i_; +} + + +bool +Tempo_req::do_equal_b (Request *r) const { - beats_i_=b; - one_beat_i_=o; + Tempo_req *t = dynamic_cast (r); + + return t&& t->dur_.length_mom ()== dur_.length_mom () && metronome_i_ == t->metronome_i_; } -/* *************** */ -IMPLEMENT_STATIC_NAME(Measure_grouping_req); -IMPLEMENT_IS_TYPE_B1(Measure_grouping_req,Timing_req); + + + void Measure_grouping_req::do_print() const { - for (int i=0; i < elt_length_arr_.size(); i++) { - mtor << beat_i_arr_[i] <<"*" << elt_length_arr_[i]<<" "; + 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 -Key_change_req::transpose(Melodic_req const & d)const +Key_change_req::transpose (Musical_pitch d) { - WARN << "don't know how to transpose a key. \n"; - for (int i=0; i < melodic_p_arr_.size(); i++) { - melodic_p_arr_[i]->transpose(d); + 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); + } + } } } -IMPLEMENT_STATIC_NAME(Key_change_req); -IMPLEMENT_IS_TYPE_B1(Key_change_req,Command_req); + void Key_change_req::squash_octaves() { - for (int i=0; i < melodic_p_arr_.size(); i++) { - melodic_p_arr_[i]->octave_i_ = 0; + 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() { - minor_b_ = false; - multi_octave_b_= false; + modality_i_ = 0; + ordinary_key_b_= false; } -Key_change_req::Key_change_req(Key_change_req const&c) + + +Break_req::Break_req () { - for (int i=0; i < c.melodic_p_arr_.size(); i++) - melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->musical()->melodic() ); - minor_b_ = c.minor_b_; - multi_octave_b_ = c.multi_octave_b_; + penalty_i_ = 0; } -Key_change_req::~Key_change_req() +void +Break_req::do_print () const +{ +} + + + +Mark_req::Mark_req (String s) { - for (int i=0; i < melodic_p_arr_.size(); i++) - delete melodic_p_arr_[i]; + str_ = s; +} + +void +Mark_req::do_print () const +{ + DOUT << str_; } int Key_change_req::flats_i() { - int flats_i = 0; - for ( int i = 0; i < melodic_p_arr_.size(); i++ ) { - Melodic_req* mel_l = melodic_p_arr_[i]->melodic(); - assert( mel_l ); - if ( mel_l->accidental_i_ < 0 ) - flats_i -= mel_l->accidental_i_; - } - return 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; } -int -Key_change_req::minor_b() +bool +Key_change_req::minor_b() const { - return minor_b_; + return modality_i_ == 3; } int Key_change_req::sharps_i() { - int sharps_i = 0; - for ( int i = 0; i < melodic_p_arr_.size(); i++ ) { - Melodic_req* mel_l = melodic_p_arr_[i]->melodic(); - assert( mel_l ); - if ( mel_l->accidental_i_ > 0 ) - sharps_i+= mel_l->accidental_i_; - } - return sharps_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; } -