X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusical-request.cc;h=369066fa7f19a1f03462551a40510e5ca772506a;hb=194ef0e7e19c7a7c0836b6bd3ed2788a56220d2f;hp=3469aaff33df17796041c183f7039324df1e58fe;hpb=69b9cead5afe7164b9053d26eba582fec3825ef8;p=lilypond.git diff --git a/lily/musical-request.cc b/lily/musical-request.cc index 3469aaff33..369066fa7f 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -3,59 +3,23 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1999 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 (Musical_req,Request); -void -Musical_req::do_print () const{} -void -Tie_req::do_print () const{} - -/* *************** */ - - - - -IMPLEMENT_IS_TYPE_B1 (Span_req,Musical_req); +#include "music-list.hh" void Span_req::do_print () const { #ifndef NPRINT - DOUT << spantype ; + DOUT << spantype_; #endif } -IMPLEMENT_IS_TYPE_B1 (Spacing_req,Request); - -Spacing_req::Spacing_req () -{ - next = 0; - distance = 0; - strength = 0; -} - -void -Spacing_req::do_print () const -{ -#ifndef NPRINT - DOUT << "next " << next << "dist " << distance << "strength\n"; -#endif -} - -IMPLEMENT_IS_TYPE_B1 (Abbreviation_req, Musical_req); - Abbreviation_req::Abbreviation_req () { type_i_ = 0; @@ -65,129 +29,63 @@ 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 (); - - return !compare (*this, *rh); -} - -void -Rhythmic_req::set_duration (Duration d) -{ - duration_ = d; -} + Rhythmic_req* rh = dynamic_cast (r); -Rhythmic_req::Rhythmic_req () -{ + return rh && !compare (*this, *rh); } - -IMPLEMENT_IS_TYPE_B1 (Rhythmic_req,Musical_req); - void Rhythmic_req::do_print () const { @@ -198,320 +96,136 @@ Rhythmic_req::do_print () const Moment -Rhythmic_req::duration () const +Rhythmic_req::length_mom () const { - return duration_.length (); + return duration_.length_mom (); } -/* *************** */ -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 -{ - 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; } -void -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 () -{ - plet_i_ = 0; -} - -void -Plet_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; -} - -/* *************** */ -Script_req::Script_req (Script_req const&s) -{ - dir_ = s.dir_; - scriptdef_p_ = s.scriptdef_p_ ? s.scriptdef_p_->clone () : 0; + spantype_ = CENTER; } -/* - don't check dirs? - - (d1.dir_ == d2.dir_) - */ -bool -Script_req::do_equal_b (Request*r) const -{ - Script_req * s = r->script (); - - return scriptdef_p_->equal_b (*s->scriptdef_p_); -} - -Script_req::Script_req () -{ - dir_ = CENTER; - scriptdef_p_ = 0; -} - - -IMPLEMENT_IS_TYPE_B1 (Script_req,Request); void -Script_req::do_print () const +Absolute_dynamic_req::do_print () const { #ifndef NPRINT - DOUT << " dir " << dir_ ; - scriptdef_p_->print (); + DOUT << " loudness " < (r); + return a&& loudness_str_ == a->loudness_str_; } - -IMPLEMENT_IS_TYPE_B2 (Musical_script_req,Musical_req, Script_req); - - -Script_req::~Script_req () +Absolute_dynamic_req::Absolute_dynamic_req () { - delete scriptdef_p_; + loudness_str_ = "fm"; // yes, "illegal" on purpose. } -/* *************** */ -Text_req::~Text_req () -{ - delete tdef_p_; - tdef_p_ = 0; -} -Text_req::Text_req (Text_req const& src) +bool +Span_dynamic_req::do_equal_b (Request *req) const { - tdef_p_ = new Text_def (*src.tdef_p_); - dir_ = src.dir_; -} + Span_dynamic_req * s = dynamic_cast (req); -Text_req::Text_req (int dir_i, Text_def* tdef_p) -{ - dir_ = Direction (dir_i); - tdef_p_ = tdef_p; + return s&& Span_req::do_equal_b (req) && s->dynamic_dir_ == dynamic_dir_; } - -IMPLEMENT_IS_TYPE_B1 (Text_req,Musical_req); - -void -Text_req::do_print () const +Span_dynamic_req::Span_dynamic_req () { -#ifndef NPRINT - DOUT << " dir " << dir_ ; - tdef_p_->print (); -#endif + dynamic_dir_ = CENTER; } -/* *************** */ - - -IMPLEMENT_IS_TYPE_B1 (Skip_req,Musical_req); - void -Skip_req::do_print () const +Span_dynamic_req::do_print () const { #ifndef NPRINT - - DOUT << "duration: " << duration (); + Span_req::do_print (); + DOUT << "softer/louder: " << dynamic_dir_; #endif } - - -IMPLEMENT_IS_TYPE_B1 (Dynamic_req,Musical_req); - void -Dynamic_req::do_print () const +Text_script_req::do_print () const { - Musical_req::do_print (); + DOUT << "text" << text_str_ + << ", style = " << style_str_; } - -IMPLEMENT_IS_TYPE_B1 (Absolute_dynamic_req,Musical_req); - void -Absolute_dynamic_req::do_print () const +Articulation_req::do_print () const { -#ifndef NPRINT - Dynamic_req::do_print (); - DOUT << " loudness " <musical ()->dynamic ()->absdynamic (); - return loudness_ == a->loudness_; + Articulation_req * a = dynamic_cast(r); + return articulation_str_ == a->articulation_str_; } - -String -Dynamic_req::loudness_static_str (Loudness l) -{ - switch (l) - { - case FFF: return "fff"; - case FF: return "ff"; - case F: return "f"; - case MF: return "mf"; - case MP: return "mp"; - case P: return "p"; - case PP: return "pp"; - case PPP: return "ppp"; - case FP: return "fp"; - case SF: return "sf"; - case SFZ: return "sfz"; - } - return ""; -} - -String -Absolute_dynamic_req::loudness_str () const -{ - String s = loudness_static_str (loudness_); - if (s.empty_b ()) - { - s = "mf"; - warning (String (_ ("Never heard of dynamic scale ")) - + loudness_ + _ (" assuming mf")); - } - return s; -} - - -Absolute_dynamic_req::Absolute_dynamic_req () -{ - loudness_ = MF; -} - - -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: " <