X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmusical-request.cc;h=c5f9de2d56a96eca5c6d2998b9c2f0babee4f334;hb=refs%2Ftags%2Frelease%2F1.2.8;hp=c7a848a18f071a584c703bb8ef188e05a6daf837;hpb=a41a7fb966e8552cc8da7c4eab1b60eb7b8eff3a;p=lilypond.git diff --git a/lily/musical-request.cc b/lily/musical-request.cc index c7a848a18f..c5f9de2d56 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -1,434 +1,207 @@ /* 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 + (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 "voice.hh" -#include "voice-element.hh" +#include "music-list.hh" -IMPLEMENT_STATIC_NAME(Stem_req); void -Stem_req::do_print() const +Span_req::do_print () const { #ifndef NPRINT - Rhythmic_req::do_print(); - mtor << "dir : " << dir_i_; + DOUT << span_dir_; #endif } -Stem_req::Stem_req() +Tremolo_req::Tremolo_req () { - dir_i_ = 0; + type_i_ = 0; } -/* ************** */ -IMPLEMENT_STATIC_NAME(Musical_req); void -Musical_req::do_print()const{} - -IMPLEMENT_STATIC_NAME(Request); - -void Request::do_print() const{} - -/* *************** */ - -void -Request::print() const -{ -#ifndef NPRINT - mtor << name() << " {"; - do_print(); - mtor << "}\n"; -#endif -} - - - -IMPLEMENT_STATIC_NAME(Span_req); - -void -Span_req::do_print() const -{ -#ifndef NPRINT - mtor << spantype ; -#endif -} - -Request::Request() -{ - elt_l_ = 0; - defined_ch_C_ = 0; -} -Request::Request(Request const&src) -{ - elt_l_ = 0; - defined_ch_C_ = src.defined_ch_C_; -} -/* *************** */ -Spacing_req::Spacing_req() -{ - next = 0; - distance = 0; - strength = 0; -} -IMPLEMENT_STATIC_NAME(Spacing_req); - -void -Spacing_req::do_print()const +Tremolo_req::do_print () const { #ifndef NPRINT - mtor << "next " << next << "dist " << distance << "strength\n"; + DOUT << "type " << type_i_ << '\n'; #endif } -IMPLEMENT_STATIC_NAME(Blank_req); - void -Blank_req::do_print()const +Melodic_req::transpose (Musical_pitch delta) { - 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) -{ - octave_i_ += delta.octave_i_; - notename_i_ += delta.notename_i_; - while (notename_i_ >= 7 ) { - notename_i_ -= 7; - octave_i_ ++; - } - accidental_i_ += delta.accidental_i_; - if (abs(accidental_i_) > 2) { - warning("transposition makes accidental larger than 2", - delta.defined_ch_C_); + pitch_.transpose (delta); + + if (abs (pitch_.accidental_i_) > 2) + { + warning (_f ("transposition by %s makes accidental larger than two", + delta.str ())); } } -IMPLEMENT_STATIC_NAME(Melodic_req); -void -Melodic_req::do_print() const -{ -#ifndef NPRINT - mtor << "notename: " << notename_i_ << " acc: " < (r); + return m&& !compare (*m, *this); } -/* - should be settable from input to allow "viola"-mode - */ -static Byte pitch_byte_a[ 7 ] = { 0, 2, 4, 5, 7, 9, 11 }; - int -Melodic_req::pitch() const +Melodic_req::compare (Melodic_req const &m1 , Melodic_req const&m2) { - return pitch_byte_a[ notename_i_ % 7 ] + accidental_i_ + octave_i_ * 12; + return Musical_pitch::compare (m1.pitch_, m2.pitch_); } -Plet_req::Plet_req() +void +Melodic_req::do_print () const { - type_c_ = ']'; - dur_i_ = 1; - type_i_ = 1; + pitch_.print (); } -IMPLEMENT_STATIC_NAME(Plet_req); -void -Plet_req::do_print() const -{ -#ifndef NPRINT - mtor << "plet: " << type_c_ << ": " << dur_i_ << "/" << type_i_; -#endif -} -/* *************** */ + int -Rhythmic_req::compare(Rhythmic_req const &r1, Rhythmic_req const &r2) +Rhythmic_req::compare (Rhythmic_req const &r1, Rhythmic_req const &r2) { - return sign(r1.duration() - r2.duration()); + return (r1.length_mom () - r2.length_mom ()); } -void -Rhythmic_req::set_duration(Duration d) +bool +Rhythmic_req::do_equal_b (Request const* r) const { - duration_ = d; -} + Rhythmic_req const* rh = dynamic_cast (r); -Rhythmic_req::Rhythmic_req() -{ + return rh && !compare (*this, *rh); } -IMPLEMENT_STATIC_NAME(Rhythmic_req); - void -Rhythmic_req::do_print() const +Rhythmic_req::do_print () const { #ifndef NPRINT - mtor << "duration { " <align_i_ = 0; // centre - dir_i_ = -1; // lyrics below (invisible) staff + return duration_.length_mom (); } -IMPLEMENT_STATIC_NAME(Lyric_req); - void -Lyric_req::do_print() const -{ - Rhythmic_req::do_print(); - Text_req::do_print(); -} - -/* *************** */ -Note_req::Note_req() +Rhythmic_req::compress (Moment m) { - forceacc_b_ = false; + duration_.compress (m); } -IMPLEMENT_STATIC_NAME(Note_req); void -Note_req::do_print() const +Lyric_req::do_print () const { #ifndef NPRINT - Melodic_req::do_print(); - if (forceacc_b_) { - mtor << " force accidental\n"; - } - Rhythmic_req::do_print(); + Rhythmic_req::do_print (); + DOUT << "text = " << text_str_; #endif } -/* *************** */ -IMPLEMENT_STATIC_NAME(Rest_req); -void -Rest_req::do_print() const -{ - Rhythmic_req::do_print(); -} -/* *************** */ -Beam_req::Beam_req() -{ - nplet = 0; -} -IMPLEMENT_STATIC_NAME(Beam_req); -void -Beam_req::do_print()const{} -/* *************** */ -IMPLEMENT_STATIC_NAME(Slur_req); -void -Slur_req::do_print()const{} -/* *************** */ -int -Span_req:: compare(Span_req const &r1, Span_req const &r2) +bool +Note_req::do_equal_b (Request const* r) const { - return r1.spantype - r2.spantype; + Note_req const* n = dynamic_cast (r); + return n&& Rhythmic_req::do_equal_b (n) && Melodic_req::do_equal_b (n); } -Span_req::Span_req() -{ - spantype = NOSPAN; -} - -/* *************** */ -Script_req::Script_req(int d , Script_def*def) -{ - dir_i_ = d; - scriptdef_p_ = def; -} - -int -Script_req::compare(Script_req const &d1, Script_req const &d2) -{ - return d1.dir_i_ == d2.dir_i_ && - d1.scriptdef_p_->compare(*d2.scriptdef_p_); -} - -Script_req::Script_req(Script_req const &s) - : Request( s ) -{ - dir_i_ = s.dir_i_; - scriptdef_p_ = new Script_def(*s.scriptdef_p_); -} - -IMPLEMENT_STATIC_NAME(Script_req); - -void -Script_req::do_print() const -{ - mtor << " dir " << dir_i_ ; - scriptdef_p_->print(); -} - - -Script_req::~Script_req() -{ - 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; -} -Text_req::Text_req(Text_req const& src) +Note_req::Note_req () { - tdef_p_ = new Text_def(*src.tdef_p_); - dir_i_ = src.dir_i_; + cautionary_b_ = false; + forceacc_b_ = false; } -Text_req::Text_req(int dir_i, Text_def* tdef_p) -{ - dir_i_ = dir_i; - tdef_p_ = tdef_p; -} -IMPLEMENT_STATIC_NAME(Text_req); void -Text_req::do_print() const +Note_req::do_print () const { #ifndef NPRINT - - mtor << " dir " << dir_i_ ; - tdef_p_->print(); + 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 } -/* *************** */ -Moment -Skip_req::duration() const +bool +Span_req::do_equal_b (Request const*r) const { - return duration_; + Span_req const* s = dynamic_cast (r); + return s && span_dir_ == s->span_dir_; } -IMPLEMENT_STATIC_NAME(Skip_req); - -void -Skip_req::do_print() const +Span_req::Span_req () { -#ifndef NPRINT - - mtor << "duration: " << duration(); -#endif + span_dir_ = CENTER; } -Voice * -Request::voice_l() +Chord_tremolo_req::Chord_tremolo_req () { - if (!elt_l_) - return 0; - else - return (Voice*)elt_l_->voice_l_; + type_i_ = 0; } -/* *************** */ - -IMPLEMENT_STATIC_NAME(Subtle_req); void -Subtle_req::do_print() const +Chord_tremolo_req::do_print () const { #ifndef NPRINT - mtor << " subtime " << subtime_; + DOUT << type_i_; #endif } -IMPLEMENT_STATIC_NAME(Dynamic_req); - -void -Dynamic_req::do_print() const -{ - Subtle_req::do_print(); -} - -IMPLEMENT_STATIC_NAME(Absolute_dynamic_req); - void -Absolute_dynamic_req::do_print() const +Text_script_req::do_print () const { - Dynamic_req::do_print(); - mtor << " loudness " < (r); + return t && t->text_str_ == text_str_ && t->style_str_ == style_str_; } -Absolute_dynamic_req::Absolute_dynamic_req() +void +Articulation_req::do_print () const { - loudness_ = MF; + DOUT << articulation_str_; } - -Span_dynamic_req::Span_dynamic_req() +bool +Articulation_req::do_equal_b (Request const* r) const { - dynamic_dir_i_ = 0; + Articulation_req const* a = dynamic_cast (r); + + return a && articulation_str_ == a->articulation_str_; } -IMPLEMENT_STATIC_NAME(Span_dynamic_req); -void -Span_dynamic_req::do_print()const +Script_req::Script_req () { -#ifndef NPRINT - Span_req::do_print(); - mtor << "louder/louder: " <