X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusical-request.cc;h=5b69a4f5813cfa39e2616efaf8e403f46996cbaf;hb=86d86173c41d3a4b832ce67768d58c6416c71d4e;hp=5ed08aa996b9b6efff759ad753bee4cb541ef1cf;hpb=56126108b2610f82bc7cafaac8741d1aeba1d34f;p=lilypond.git diff --git a/lily/musical-request.cc b/lily/musical-request.cc index 5ed08aa996..5b69a4f581 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -1,7 +1,7 @@ /* request.cc -- implement all musical requests. - source file of the LilyPond music typesetter + source file of the GNU LilyPond music typesetter (c) 1997 Han-Wen Nienhuys */ @@ -11,398 +11,427 @@ #include "debug.hh" #include "script-def.hh" #include "text-def.hh" -#include "voice.hh" -#include "voice-element.hh" +#include "music-list.hh" -IMPLEMENT_STATIC_NAME(Stem_req); -void -Stem_req::do_print() const -{ -#ifndef NPRINT - Rhythmic_req::do_print(); - mtor << "dir : " << dir_i_; -#endif -} -Stem_req::Stem_req() -{ - dir_i_ = 0; -} -/* ************** */ -IMPLEMENT_STATIC_NAME(Musical_req); +IMPLEMENT_IS_TYPE_B1(Musical_req,Request); void -Musical_req::do_print()const{} +Musical_req::do_print() const{} void -Tie_req::do_print()const{} - -IMPLEMENT_STATIC_NAME(Request); +Tie_req::do_print() const{} -void Request::do_print() const{} /* *************** */ + -void -Request::print() const -{ -#ifndef NPRINT - mtor << name() << " {"; - do_print(); - mtor << "}\n"; -#endif -} - -IMPLEMENT_STATIC_NAME(Span_req); +IMPLEMENT_IS_TYPE_B1(Span_req,Musical_req); void Span_req::do_print() const { #ifndef NPRINT - mtor << spantype ; + DOUT << spantype ; #endif } -Request::Request() +IMPLEMENT_IS_TYPE_B1(Spacing_req,Request); + +Spacing_req::Spacing_req() { - elt_l_ = 0; + next = 0; + distance = 0; + strength = 0; } -Request::Request(Request const&src) - :Input(src) + +void +Spacing_req::do_print() const { - elt_l_ = 0; +#ifndef NPRINT + DOUT << "next " << next << "dist " << distance << "strength\n"; +#endif } -/* *************** */ -Spacing_req::Spacing_req() + +IMPLEMENT_IS_TYPE_B1 (Abbreviation_req, Musical_req); + +Abbreviation_req::Abbreviation_req () { - next = 0; - distance = 0; - strength = 0; + type_i_ = 0; } -IMPLEMENT_STATIC_NAME(Spacing_req); void -Spacing_req::do_print()const +Abbreviation_req::do_print() const { #ifndef NPRINT - mtor << "next " << next << "dist " << distance << "strength\n"; + DOUT << "type " << type_i_ << "\n"; #endif } -IMPLEMENT_STATIC_NAME(Blank_req); + +IMPLEMENT_IS_TYPE_B2(Blank_req,Spacing_req,Rhythmic_req); void -Blank_req::do_print()const +Blank_req::do_print() const { - Spacing_req::do_print(); + Spacing_req::do_print(); } /* *************** */ + Melodic_req::Melodic_req() { - notename_i_ = 0; - octave_i_ = 0; - accidental_i_ = 0; + notename_i_ = 0; + octave_i_ = 0; + accidental_i_ = 0; } void -Melodic_req::transpose(Melodic_req const & delta) -{ - int old_pitch = pitch(); - int delta_pitch = delta.pitch(); - octave_i_ += delta.octave_i_; - notename_i_ += delta.notename_i_; - while (notename_i_ >= 7 ) { +Melodic_req::transpose (Melodic_req const & delta) +{ + int old_pitch = pitch(); + int delta_pitch = delta.pitch(); + octave_i_ += delta.octave_i_; + notename_i_ += delta.notename_i_; + while (notename_i_ >= 7) + { notename_i_ -= 7; octave_i_ ++; } - int new_pitch = pitch(); - int delta_acc = new_pitch - old_pitch - delta_pitch; - - accidental_i_ -= delta_acc; - if (abs(accidental_i_) > 2) { - delta.warning("transposition makes accidental larger than 2"); + + int new_pitch = pitch(); + int delta_acc = new_pitch - old_pitch - delta_pitch; + + accidental_i_ -= delta_acc; + if (abs (accidental_i_) > 2) + { + delta.warning ("transposition makes accidental larger than 2"); } } -IMPLEMENT_STATIC_NAME(Melodic_req); +IMPLEMENT_IS_TYPE_B1(Melodic_req,Musical_req); + +bool +Melodic_req::do_equal_b (Request*r) const +{ + Melodic_req* m= r->musical()->melodic (); + return !compare (*m, *this); +} + +int +Melodic_req::compare (Melodic_req const &m1 , Melodic_req const&m2) +{ + int o= m1.octave_i_ - m2.octave_i_; + int n = m1.notename_i_ - m2.notename_i_; + int a = m1.accidental_i_ - m2.accidental_i_; + + if (o) + return o; + if (n) + return n; + if (a) + return a; + return 0; +} void Melodic_req::do_print() const { #ifndef NPRINT - mtor << "notename: " << notename_i_ << " acc: " <musical()->rhythmic (); -/* *************** */ -int -Rhythmic_req::compare(Rhythmic_req const &r1, Rhythmic_req const &r2) -{ - return sign(r1.duration() - r2.duration()); + return !compare (*this, *rh); } void -Rhythmic_req::set_duration(Duration d) +Rhythmic_req::set_duration (Duration d) { - duration_ = d; + duration_ = d; } Rhythmic_req::Rhythmic_req() { } -IMPLEMENT_STATIC_NAME(Rhythmic_req); + +IMPLEMENT_IS_TYPE_B1(Rhythmic_req,Musical_req); void Rhythmic_req::do_print() const { #ifndef NPRINT - mtor << "duration { " <align_i_ = 0; // centre - dir_i_ = -1; // lyrics below (invisible) staff + def_p->align_i_ = 0; // centre + dir_ = DOWN; // lyrics below (invisible) staff } -IMPLEMENT_STATIC_NAME(Lyric_req); + +IMPLEMENT_IS_TYPE_B2(Lyric_req,Musical_req,Rhythmic_req); void Lyric_req::do_print() const { - Rhythmic_req::do_print(); - Text_req::do_print(); + Rhythmic_req::do_print(); + Text_req::do_print(); } /* *************** */ +bool +Note_req::do_equal_b (Request*r) const +{ + return Rhythmic_req::do_equal_b (r) && Melodic_req::do_equal_b (r); +} + + Note_req::Note_req() { - forceacc_b_ = false; + forceacc_b_ = false; } -IMPLEMENT_STATIC_NAME(Note_req); + +IMPLEMENT_IS_TYPE_B2(Note_req,Melodic_req,Rhythmic_req); void Note_req::do_print() const { #ifndef NPRINT - Melodic_req::do_print(); - if (forceacc_b_) { - mtor << " force accidental\n"; + Melodic_req::do_print(); + if (forceacc_b_) + { + DOUT << " force accidental\n"; } - Rhythmic_req::do_print(); + Rhythmic_req::do_print(); #endif } /* *************** */ -IMPLEMENT_STATIC_NAME(Rest_req); + +IMPLEMENT_IS_TYPE_B1(Rest_req,Rhythmic_req); void Rest_req::do_print() const { - Rhythmic_req::do_print(); + Rhythmic_req::do_print(); } /* *************** */ + +IMPLEMENT_IS_TYPE_B1(Beam_req,Span_req); + Beam_req::Beam_req() { - nplet = 0; + nplet = 0; } -IMPLEMENT_STATIC_NAME(Beam_req); + void -Beam_req::do_print()const{} +Beam_req::do_print() const +{ +} + /* *************** */ -IMPLEMENT_STATIC_NAME(Slur_req); + +IMPLEMENT_IS_TYPE_B1 (Abbreviation_beam_req, Span_req); + +Abbreviation_beam_req::Abbreviation_beam_req () +{ + type_i_ = 0; +} + void -Slur_req::do_print()const{} +Abbreviation_beam_req::do_print () const +{ +} + +IMPLEMENT_IS_TYPE_B1(Slur_req,Span_req); + +void +Slur_req::do_print() const +{ +} + /* *************** */ -int -Span_req:: compare(Span_req const &r1, Span_req const &r2) + +bool +Span_req:: do_equal_b (Request*r) const { - return r1.spantype - r2.spantype; + Span_req * s = r->span(); + return spantype - s->spantype; } Span_req::Span_req() { - spantype = NOSPAN; + spantype = NOSPAN; } /* *************** */ -Script_req::Script_req(int d , Script_def*def) +Script_req::Script_req (Script_req const&s) { - dir_i_ = d; - scriptdef_p_ = def; + dir_ = s.dir_; + scriptdef_p_ = s.scriptdef_p_ ? s.scriptdef_p_->clone() : 0; } -int -Script_req::compare(Script_req const &d1, Script_req const &d2) +/* + don't check dirs? + + (d1.dir_ == d2.dir_) + */ +bool +Script_req::do_equal_b (Request*r) const { - return d1.dir_i_ == d2.dir_i_ && - d1.scriptdef_p_->compare(*d2.scriptdef_p_); + Script_req * s = r->script(); + + return scriptdef_p_->equal_b (*s->scriptdef_p_); } -Script_req::Script_req(Script_req const &s) - : Request( s ) +Script_req::Script_req() { - dir_i_ = s.dir_i_; - scriptdef_p_ = new Script_def(*s.scriptdef_p_); + dir_ = CENTER; + scriptdef_p_ = 0; } -IMPLEMENT_STATIC_NAME(Script_req); + +IMPLEMENT_IS_TYPE_B1(Script_req,Request); void Script_req::do_print() const { - mtor << " dir " << dir_i_ ; - scriptdef_p_->print(); +#ifndef NPRINT + DOUT << " dir " << dir_ ; + scriptdef_p_->print(); +#endif +} + +void +Musical_script_req::do_print() const +{ + Script_req::do_print(); } +IMPLEMENT_IS_TYPE_B2(Musical_script_req,Musical_req, Script_req); + + Script_req::~Script_req() { - delete scriptdef_p_; + delete scriptdef_p_; } /* *************** */ -int -Text_req:: compare(Text_req const &r1, Text_req const &r2) -{ - bool b1 = (r1.dir_i_ == r2.dir_i_); - bool b2 = (r1.tdef_p_ ->compare(*r2.tdef_p_)); - return b1 && b2; -} + + Text_req::~Text_req() { - delete tdef_p_; - tdef_p_ = 0; + delete tdef_p_; + tdef_p_ = 0; } -Text_req::Text_req(Text_req const& src) +Text_req::Text_req (Text_req const& src) { - tdef_p_ = new Text_def(*src.tdef_p_); - dir_i_ = src.dir_i_; + tdef_p_ = new Text_def (*src.tdef_p_); + dir_ = src.dir_; } -Text_req::Text_req(int dir_i, Text_def* tdef_p) +Text_req::Text_req (int dir_i, Text_def* tdef_p) { - dir_i_ = dir_i; - tdef_p_ = tdef_p; + dir_ = Direction(dir_i); + tdef_p_ = tdef_p; } -IMPLEMENT_STATIC_NAME(Text_req); + +IMPLEMENT_IS_TYPE_B1(Text_req,Musical_req); void Text_req::do_print() const { #ifndef NPRINT - - mtor << " dir " << dir_i_ ; - tdef_p_->print(); + DOUT << " dir " << dir_ ; + tdef_p_->print(); #endif } /* *************** */ -Moment -Skip_req::duration() const -{ - return duration_; -} -IMPLEMENT_STATIC_NAME(Skip_req); +IMPLEMENT_IS_TYPE_B1(Skip_req,Musical_req); void Skip_req::do_print() const { #ifndef NPRINT - mtor << "duration: " << duration(); + DOUT << "duration: " << duration(); #endif } -Voice * -Request::voice_l() -{ - if (!elt_l_) - return 0; - else - return (Voice*)elt_l_->voice_C_; -} -/* *************** */ -IMPLEMENT_STATIC_NAME(Subtle_req); -void -Subtle_req::do_print() const -{ -#ifndef NPRINT - mtor << " subtime " << subtime_; -#endif -} - -IMPLEMENT_STATIC_NAME(Dynamic_req); +IMPLEMENT_IS_TYPE_B1(Dynamic_req,Musical_req); void Dynamic_req::do_print() const { - Subtle_req::do_print(); + Musical_req::do_print(); } -IMPLEMENT_STATIC_NAME(Absolute_dynamic_req); + +IMPLEMENT_IS_TYPE_B1(Absolute_dynamic_req,Musical_req); void Absolute_dynamic_req::do_print() const { - Dynamic_req::do_print(); - mtor << " loudness " <