X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusical-request.cc;h=463d0775e81c558d266b09e98e77b3d58c6465a1;hb=68a168bff1fec7f8011b2afa82d4fc89182c4bf7;hp=0d14c09c386ad81f67dabcddc7e4dbc651dd7614;hpb=48bdd9154a32245a075494b403639181615864e2;p=lilypond.git diff --git a/lily/musical-request.cc b/lily/musical-request.cc index 0d14c09c38..463d0775e8 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -3,419 +3,122 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys */ #include "musical-request.hh" #include "misc.hh" #include "debug.hh" -#include "script-def.hh" -#include "text-def.hh" #include "music-list.hh" -IMPLEMENT_IS_TYPE_B1(Stem_req,Rhythmic_req); - -void -Stem_req::do_print() const -{ -#ifndef NPRINT - Rhythmic_req::do_print(); - mtor << "dir : " << dir_i_; -#endif -} - -Stem_req::Stem_req() +Tremolo_req::Tremolo_req () { - dir_i_ = 0; } -/* ************** */ - -IMPLEMENT_IS_TYPE_B1(Musical_req,Request); -void -Musical_req::do_print()const{} -void -Tie_req::do_print()const{} - - -/* *************** */ - - - - -IMPLEMENT_IS_TYPE_B1(Span_req,Musical_req); - -void -Span_req::do_print() const -{ -#ifndef NPRINT - mtor << spantype ; -#endif -} - -Spacing_req::Spacing_req() -{ - next = 0; - distance = 0; - strength = 0; -} - -IMPLEMENT_IS_TYPE_B1(Spacing_req,Request); - -void -Spacing_req::do_print()const -{ -#ifndef NPRINT - mtor << "next " << next << "dist " << distance << "strength\n"; -#endif -} - - -IMPLEMENT_IS_TYPE_B2(Blank_req,Spacing_req,Rhythmic_req); - -void -Blank_req::do_print()const -{ - Spacing_req::do_print(); -} -/* *************** */ -Melodic_req::Melodic_req() -{ - notename_i_ = 0; - octave_i_ = 0; - accidental_i_ = 0; -} void -Melodic_req::transpose(Melodic_req const & delta) +Melodic_req::transpose (Pitch 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_ ++; + Pitch p = *unsmob_pitch (get_mus_property ("pitch")); + + p.transpose (delta); + + if (abs (p.alteration_i_) > 2) + { + warning (_f ("Transposition by %s makes accidental larger than two", + delta.str ())); } - 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_IS_TYPE_B1(Melodic_req,Musical_req); - -int -Melodic_req::compare(Melodic_req const&m1, Melodic_req const&m2) -{ - if (m1.octave_i_ != m2.octave_i_) - return m1.octave_i_ -m2.octave_i_; - else if (m1.notename_i_ != m2.notename_i_) - return m1.notename_i_ - m2.notename_i_; - else if (m1.accidental_i_ != m2.accidental_i_) - return m1.accidental_i_ - m2.accidental_i_; - return 0; + set_mus_property ("pitch", p.smobbed_copy ()); } -void -Melodic_req::do_print() const +bool +Melodic_req::do_equal_b (Request const* r) const { -#ifndef NPRINT - mtor << "notename: " << notename_i_ << " acc: " < (r); + return m; // && !compare (*m, *this); } -int -Melodic_req::height() const +bool +Rhythmic_req::do_equal_b (Request const* r) const { - return notename_i_ + octave_i_*7; -} - -/* - should be settable from input to allow "viola"-mode - */ -static Byte pitch_byte_a[ 7 ] = { 0, 2, 4, 5, 7, 9, 11 }; + Rhythmic_req const* rh = dynamic_cast (r); -int -Melodic_req::pitch() const -{ - return pitch_byte_a[ notename_i_ % 7 ] + accidental_i_ + octave_i_ * 12; + return rh; // ; && !compare (*this, *rh); } -/* *************** */ -int -Rhythmic_req::compare(Rhythmic_req const &r1, Rhythmic_req const &r2) -{ - return sign(r1.duration() - r2.duration()); -} - -void -Rhythmic_req::set_duration(Duration d) -{ - duration_ = d; -} - -Rhythmic_req::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 -} - + return unsmob_duration (get_mus_property ("duration"))->length_mom (); -IMPLEMENT_IS_TYPE_B2(Lyric_req,Musical_req,Rhythmic_req); - -void -Lyric_req::do_print() const -{ - Rhythmic_req::do_print(); - Text_req::do_print(); } -/* *************** */ -Note_req::Note_req() -{ - forceacc_b_ = false; -} - -IMPLEMENT_IS_TYPE_B2(Note_req,Melodic_req,Rhythmic_req); - void -Note_req::do_print() const +Rhythmic_req::compress (Moment m) { -#ifndef NPRINT - Melodic_req::do_print(); - if (forceacc_b_) { - mtor << " force accidental\n"; - } - Rhythmic_req::do_print(); -#endif -} -/* *************** */ - -IMPLEMENT_IS_TYPE_B1(Rest_req,Rhythmic_req); + Duration *d = unsmob_duration (get_mus_property ("duration")); -void -Rest_req::do_print() const -{ - Rhythmic_req::do_print(); + set_mus_property ("duration", d ->compressed (m).smobbed_copy ()); } -/* *************** */ -Beam_req::Beam_req() +bool +Note_req::do_equal_b (Request const* r) const { - nplet = 0; + Note_req const* n = dynamic_cast (r); + return n&& Rhythmic_req::do_equal_b (n) && Melodic_req::do_equal_b (n); } -IMPLEMENT_IS_TYPE_B1(Beam_req,Span_req); -void -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) +Note_req::Note_req () { - return r1.spantype - r2.spantype; } -Span_req::Span_req() -{ - spantype = NOSPAN; -} -/* *************** */ -Script_req::Script_req(Script_req const&s) -{ - dir_i_ = s.dir_i_; - scriptdef_p_ = s.scriptdef_p_ ? s.scriptdef_p_->clone() : 0; -} -int -Script_req::compare(Script_req const &d1, Script_req const &d2) -{ - return !(d1.dir_i_ == d2.dir_i_ && - d1.scriptdef_p_->equal_b(*d2.scriptdef_p_)); -} -Script_req::Script_req() -{ - dir_i_ = 0; - scriptdef_p_ = 0; -} - -IMPLEMENT_IS_TYPE_B1(Script_req,Request); - -void -Script_req::do_print() const +bool +Span_req::do_equal_b (Request const*r) const { -#ifndef NPRINT - mtor << " dir " << dir_i_ ; - scriptdef_p_->print(); -#endif + Span_req const* s = dynamic_cast (r); + return s && get_span_dir () == s->get_span_dir (); } -void -Musical_script_req::do_print() const +Span_req::Span_req () { - Script_req::do_print(); } -IMPLEMENT_IS_TYPE_B2(Musical_script_req,Musical_req, Script_req); - - -Script_req::~Script_req() -{ - delete scriptdef_p_; -} -/* *************** */ -int -Text_req:: compare(Text_req const &r1, Text_req const &r2) +bool +Text_script_req::do_equal_b (Request const* r) const { - bool b1 = (r1.dir_i_ == r2.dir_i_); - bool b2 = (r1.tdef_p_ ->equal_b(*r2.tdef_p_)); - return b1 && b2; -} -Text_req::~Text_req() -{ - delete tdef_p_; - tdef_p_ = 0; + Text_script_req const* t = dynamic_cast (r); + return t && gh_equal_p (get_mus_property ("text"), + t->get_mus_property ("text")); } -Text_req::Text_req(Text_req const& src) +bool +Articulation_req::do_equal_b (Request const* r) const { - tdef_p_ = new Text_def(*src.tdef_p_); - dir_i_ = src.dir_i_; + Articulation_req const* a = dynamic_cast (r); + + return a; // && articulation_str_ == a->articulation_str_; } -Text_req::Text_req(int dir_i, Text_def* tdef_p) -{ - dir_i_ = dir_i; - tdef_p_ = tdef_p; -} -IMPLEMENT_IS_TYPE_B1(Text_req,Musical_req); -void -Text_req::do_print() const -{ -#ifndef NPRINT - mtor << " dir " << dir_i_ ; - tdef_p_->print(); -#endif -} -/* *************** */ -IMPLEMENT_IS_TYPE_B1(Skip_req,Musical_req); -void -Skip_req::do_print() const -{ -#ifndef NPRINT - - mtor << "duration: " << duration(); -#endif -} - - - -IMPLEMENT_IS_TYPE_B1(Dynamic_req,Musical_req); - -void -Dynamic_req::do_print() const -{ - Musical_req::do_print(); -} - - -IMPLEMENT_IS_TYPE_B1(Absolute_dynamic_req,Musical_req); - -void -Absolute_dynamic_req::do_print() const -{ -#ifndef NPRINT - Dynamic_req::do_print(); - mtor << " loudness " <