X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusical-request.cc;h=573e86f4997165ea4f110d36ac45d943c598fabb;hb=2619a69eb4af00d06a77467c4f15ba5ae347f908;hp=0def2d2f518da02bdaa886a62bfc1311e866ed9c;hpb=225485917d3e66bd7eb907d6462e981ae1bd1654;p=lilypond.git diff --git a/lily/musical-request.cc b/lily/musical-request.cc index 0def2d2f51..573e86f499 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ #include "musical-request.hh" @@ -15,29 +15,34 @@ -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 +Musical_span_req::do_print () const +{ + Span_req::do_print (); +} + void Span_req::do_print () const { #ifndef NPRINT - DOUT << spantype ; + DOUT << spantype_; #endif } -IMPLEMENT_IS_TYPE_B1 (Spacing_req,Request); + Spacing_req::Spacing_req () { @@ -54,7 +59,7 @@ Spacing_req::do_print () const #endif } -IMPLEMENT_IS_TYPE_B1 (Abbreviation_req, Musical_req); + Abbreviation_req::Abbreviation_req () { @@ -65,102 +70,56 @@ void Abbreviation_req::do_print () const { #ifndef NPRINT - DOUT << "type " << type_i_ << "\n"; + DOUT << "type " << type_i_ << '\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 (Musical_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) + pitch_.transpose (delta); + + if (abs (pitch_.accidental_i_) > 2) { - 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")); + warning (_f ("transposition by %s makes accidental larger than two", + delta.str ())); } } -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); + Melodic_req* m= dynamic_cast (r); + return m&& !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; + return Musical_pitch::compare (m1.pitch_, m2.pitch_); } void Melodic_req::do_print () const { -#ifndef NPRINT - DOUT << "notename: " << notename_i_ - << " acc: " <musical ()->rhythmic (); + Rhythmic_req* rh = dynamic_cast (r); - return !compare (*this, *rh); -} - -void -Rhythmic_req::set_duration (Duration d) -{ - duration_ = d; + return rh && !compare (*this, *rh); } -Rhythmic_req::Rhythmic_req () -{ -} -IMPLEMENT_IS_TYPE_B1 (Rhythmic_req,Musical_req); void Rhythmic_req::do_print () const @@ -202,55 +151,52 @@ Rhythmic_req::duration () const { return duration_.length (); } -/* *************** */ -Lyric_req::Lyric_req (Text_def* def_p) - :Text_req (0, def_p) +void +Rhythmic_req::compress (Moment m) { - def_p->align_i_ = CENTER; // centre - dir_ = DOWN; // lyrics below (invisible) staff + duration_.compress (m); } - -IMPLEMENT_IS_TYPE_B2 (Lyric_req,Musical_req,Rhythmic_req); - void Lyric_req::do_print () const { 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 *n = dynamic_cast (r); + return n&& Rhythmic_req::do_equal_b (n) && Melodic_req::do_equal_b (n); } Note_req::Note_req () { + cautionary_b_ = false; forceacc_b_ = false; } -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_) + if (cautionary_b_) + { + DOUT << " force cautionary accidental\n"; + } + else if (forceacc_b_) { DOUT << " force accidental\n"; } Rhythmic_req::do_print (); #endif } -/* *************** */ - -IMPLEMENT_IS_TYPE_B1 (Rest_req, Rhythmic_req); void Rest_req::do_print () const @@ -258,33 +204,18 @@ Rest_req::do_print () const Rhythmic_req::do_print (); } -/* *************** */ - -IMPLEMENT_IS_TYPE_B1 (Multi_measure_rest_req, Rhythmic_req); - void Multi_measure_rest_req::do_print () const { Rhythmic_req::do_print (); } -/* *************** */ - -IMPLEMENT_IS_TYPE_B1 (Beam_req,Span_req); - -Beam_req::Beam_req () -{ -} void Beam_req::do_print () const { } -/* *************** */ - -IMPLEMENT_IS_TYPE_B1 (Abbreviation_beam_req, Span_req); - Abbreviation_beam_req::Abbreviation_beam_req () { type_i_ = 0; @@ -295,39 +226,38 @@ Abbreviation_beam_req::do_print () const { } -IMPLEMENT_IS_TYPE_B1 (Slur_req,Span_req); + void Slur_req::do_print () const { } -IMPLEMENT_IS_TYPE_B1 (Plet_req,Span_req); -Plet_req::Plet_req () + + + +Extender_req::Extender_req () { - plet_i_ = 0; } void -Plet_req::do_print () const +Extender_req::do_print () const { } -/* *************** */ bool -Span_req:: do_equal_b (Request*r) const +Span_req::do_equal_b (Request*r) const { - Span_req * s = r->span (); - return spantype == s->spantype; + Span_req * s = dynamic_cast (r); + return s && spantype_ == s->spantype_; } Span_req::Span_req () { - spantype = NOSPAN; + spantype_ = CENTER; } -/* *************** */ Script_req::Script_req (Script_req const&s) { dir_ = s.dir_; @@ -342,9 +272,8 @@ Script_req::Script_req (Script_req const&s) bool Script_req::do_equal_b (Request*r) const { - Script_req * s = r->script (); - - return scriptdef_p_->equal_b (*s->scriptdef_p_); + Script_req * s = dynamic_cast (r); + return s && scriptdef_p_->equal_b (*s->scriptdef_p_); } Script_req::Script_req () @@ -354,13 +283,13 @@ Script_req::Script_req () } -IMPLEMENT_IS_TYPE_B1 (Script_req,Request); + void Script_req::do_print () const { #ifndef NPRINT - DOUT << " dir " << dir_ ; + DOUT << " dir " << dir_; scriptdef_p_->print (); #endif } @@ -371,15 +300,10 @@ 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_; } -/* *************** */ Text_req::~Text_req () @@ -400,45 +324,29 @@ Text_req::Text_req (int dir_i, Text_def* tdef_p) tdef_p_ = tdef_p; } - -IMPLEMENT_IS_TYPE_B1 (Text_req,Musical_req); - void Text_req::do_print () const { #ifndef NPRINT - DOUT << " dir " << dir_ ; + DOUT << " dir " << dir_; tdef_p_->print (); #endif } -/* *************** */ - - -IMPLEMENT_IS_TYPE_B1 (Skip_req,Musical_req); - void Skip_req::do_print () const { #ifndef NPRINT - DOUT << "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 { @@ -448,12 +356,11 @@ Absolute_dynamic_req::do_print () const #endif } - bool Absolute_dynamic_req::do_equal_b (Request *r) const { - Absolute_dynamic_req *a = r->musical ()->dynamic ()->absdynamic (); - return loudness_ == a->loudness_; + Absolute_dynamic_req *a = dynamic_cast (r); + return a&& loudness_ == a->loudness_; } String @@ -461,6 +368,9 @@ Dynamic_req::loudness_static_str (Loudness l) { switch (l) { + case FFFFFF: return "ffffff"; + case FFFFF : return "fffff"; + case FFFF: return "ffff"; case FFF: return "fff"; case FF: return "ff"; case F: return "f"; @@ -469,9 +379,17 @@ Dynamic_req::loudness_static_str (Loudness l) case P: return "p"; case PP: return "pp"; case PPP: return "ppp"; + case PPPP: return "pppp"; + case PPPPP: return "ppppp"; + case PPPPPP: return "pppppp"; + case FP: return "fp"; case SF: return "sf"; + case SFF: return "sff"; case SFZ: return "sfz"; + case SP: return "sp"; + case SPP: return "spp"; + case RFZ: return "rfz"; } return ""; } @@ -479,14 +397,15 @@ Dynamic_req::loudness_static_str (Loudness l) String Absolute_dynamic_req::loudness_str () const { - String s = loudness_static_str (loudness_); - if (s.empty_b ()) + String str = loudness_static_str (loudness_); + if (str.empty_b ()) { - s = "mf"; - warning (String (_ ("Never heard of dynamic scale ")) - + loudness_ + _ (" assuming mf")); + String s = "mf"; + warning (_f ("never heard of dynamic scale `\%s\', assuming %s", + str, s)); + str = s; } - return s; + return str; } @@ -496,22 +415,28 @@ Absolute_dynamic_req::Absolute_dynamic_req () } + +bool +Span_dynamic_req::do_equal_b (Request *req) const +{ + Span_dynamic_req * s = dynamic_cast (req); + + return s&& Span_req::do_equal_b (req) && s->dynamic_dir_ == dynamic_dir_; +} + Span_dynamic_req::Span_dynamic_req () { dynamic_dir_ = CENTER; } - -IMPLEMENT_IS_TYPE_B1 (Span_dynamic_req,Musical_req); - void Span_dynamic_req::do_print () const { #ifndef NPRINT Span_req::do_print (); - DOUT << "softer/louder: " <