X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusical-request.cc;h=ac24a4c9172f6e55a23e63854770088fe406bcfc;hb=1a4e4afd05f01d8b8a872eec876ce49b0639c015;hp=07582ead8cc262919cdce83e767914992910902e;hpb=e590acdf36f87d36f68b322c08246664c9a7297a;p=lilypond.git diff --git a/lily/musical-request.cc b/lily/musical-request.cc index 07582ead8c..ac24a4c917 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -3,482 +3,97 @@ source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--2002 Han-Wen Nienhuys */ #include "musical-request.hh" #include "misc.hh" -#include "debug.hh" -#include "script-def.hh" -#include "text-def.hh" +#include "warn.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,Request); - -IMPLEMENT_IS_TYPE_B2(Musical_span_req, Span_req, Musical_span_req); - -void -Musical_span_req::do_print () const -{ - Span_req::do_print (); -} - - -void -Span_req::do_print () const -{ -#ifndef NPRINT - 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; -} - -void -Abbreviation_req::do_print () const +Tremolo_req::Tremolo_req () { -#ifndef NPRINT - 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 () -{ -} - -void -Melodic_req::transpose (Musical_pitch delta) -{ - pitch_.transpose (delta); - - if (abs (pitch_.accidental_i_) > 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= dynamic_cast (r); - return m&& !compare (*m, *this); -} - -int -Melodic_req::compare (Melodic_req const &m1 , Melodic_req const&m2) -{ - return Musical_pitch::compare (m1.pitch_, m2.pitch_); -} - -void -Melodic_req::do_print () const +Melodic_req::do_equal_b (Request const* r) const { -pitch_.print (); -} - -int -Rhythmic_req::compare (Rhythmic_req const &r1, Rhythmic_req const &r2) -{ - return (r1.duration () - r2.duration ()); + Melodic_req const* m= dynamic_cast (r); + return m; // && !compare (*m, *this); } bool -Rhythmic_req::do_equal_b (Request*r) const +Rhythmic_req::do_equal_b (Request const* r) const { - Rhythmic_req* rh = dynamic_cast (r); + Rhythmic_req const* rh = dynamic_cast (r); - return rh && !compare (*this, *rh); + return rh; // ; && !compare (*this, *rh); } - -IMPLEMENT_IS_TYPE_B1 (Rhythmic_req,Musical_req); - -void -Rhythmic_req::do_print () const -{ -#ifndef NPRINT - DOUT << "duration { " <length_mom (); } void Rhythmic_req::compress (Moment m) { - duration_.compress (m); -} - - - - -IMPLEMENT_IS_TYPE_B1 (Lyric_req,Rhythmic_req); - -void -Lyric_req::do_print () const -{ - Rhythmic_req::do_print (); + Duration *d = unsmob_duration (get_mus_property ("duration")); + if (d) + set_mus_property ("duration", d ->compressed (m.main_part_).smobbed_copy ()); } - bool -Note_req::do_equal_b (Request*r) const +Note_req::do_equal_b (Request const* r) const { - Note_req *n = dynamic_cast (r); + Note_req const* 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 (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); - - -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 -{ -} - -IMPLEMENT_IS_TYPE_B1 (Extender_req,Span_req); - -Extender_req::Extender_req () -{ -} - -void -Extender_req::do_print () const { } bool -Span_req::do_equal_b (Request*r) const +Span_req::do_equal_b (Request const*r) const { - Span_req * s = dynamic_cast (r); - return s && spantype == s->spantype; + Span_req const* s = dynamic_cast (r); + return s && get_span_dir () == s->get_span_dir (); } 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; -} - -/* - don't check dirs? - - (d1.dir_ == d2.dir_) - */ -bool -Script_req::do_equal_b (Request*r) const -{ - Script_req * s = dynamic_cast (r); - - return s&& 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 -{ -#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_; -} - - -Text_req::~Text_req () -{ - delete tdef_p_; - tdef_p_ = 0; -} - -Text_req::Text_req (Text_req const& src) -{ - tdef_p_ = new Text_def (*src.tdef_p_); - dir_ = src.dir_; -} - -Text_req::Text_req (int dir_i, Text_def* tdef_p) -{ - dir_ = Direction (dir_i); - tdef_p_ = tdef_p; -} - - -IMPLEMENT_IS_TYPE_B1 (Text_req,Musical_req); - -void -Text_req::do_print () const -{ -#ifndef NPRINT - 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 -{ -#ifndef NPRINT - Dynamic_req::do_print (); - DOUT << " loudness " < (r); - return a&& loudness_ == a->loudness_; -} - -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 str = loudness_static_str (loudness_); - if (str.empty_b ()) - { - String s = "mf"; - warning (_f ("never heard of dynamic scale `\%s\', assuming %s", - str, s)); - str = s; - } - return str; -} - - -Absolute_dynamic_req::Absolute_dynamic_req () +Text_script_req::do_equal_b (Request const* r) const { - loudness_ = MF; + Text_script_req const* t = dynamic_cast (r); + return t && gh_equal_p (get_mus_property ("text"), + t->get_mus_property ("text")); } - - 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 () +Articulation_req::do_equal_b (Request const* r) const { - dynamic_dir_ = CENTER; + Articulation_req const* a = dynamic_cast (r); + + return a && gh_equal_p (get_mus_property ("articulation-type"), + r->get_mus_property ("articulation-type")) + && get_direction () == a->get_direction (); } -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: " << dynamic_dir_; -#endif -} - -IMPLEMENT_IS_TYPE_B1 (Tie_req,Musical_req);