From 0469b75b984279a9659d8a97677c54114f4f0624 Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:36:07 +0000 Subject: [PATCH] lilypond-0.0.44 --- .dstreamrc | 6 +- lib/duration.cc | 334 ++++------------------------------------ lily/musical-request.cc | 33 ++-- 3 files changed, 49 insertions(+), 324 deletions(-) diff --git a/.dstreamrc b/.dstreamrc index dd50d37872..63a0a94456 100644 --- a/.dstreamrc +++ b/.dstreamrc @@ -1,7 +1,7 @@ # class name silence? Dstream 1 -My_lily_lexer 0 +My_lily_lexer 1 PCol 1 Score_column 1 Ineq_constrained_qp 1 @@ -13,9 +13,9 @@ Idealspacing 1 # yydebug InitParser 1 -Parser 0 +Parser 1 InitDeclarations 1 -Declarations 0 +Declarations 1 # FlexLexer debug InitLexer 1 Lexer 1 diff --git a/lib/duration.cc b/lib/duration.cc index 5504ed6e35..e341d75831 100644 --- a/lib/duration.cc +++ b/lib/duration.cc @@ -1,7 +1,12 @@ -// -// duration.cc -- implement Duration, Plet, Duration_convert, Duration_iterator -// -// copyright 1997 Jan Nieuwenhuizen +/* + duration.cc -- implement Duration, Plet, + + source file of the LilyPond music typesetter + + copyright 1997 Jan Nieuwenhuizen + + (c) 1997 Han-Wen Nienhuys +*/ // split into 4? @@ -13,337 +18,64 @@ #include "moment.hh" #include "duration.hh" #include "debug.hh" //ugh +#include "duration-convert.hh" // statics Duration int Duration::division_1_i_s = 384 * 4; -Duration::Duration( int type_i, int dots_i = 0, Plet* plet_l ) +Duration::Duration( int type_i, int dots_i = 0) { type_i_ = type_i; dots_i_ = dots_i; - plet_p_ = 0; - ticks_i_ = 0; - set_plet( plet_l ); -} - -Duration::Duration( Duration const& dur_c_r ) -{ - type_i_ = 0; - dots_i_ = 0; - plet_p_ = 0; ticks_i_ = 0; - *this = dur_c_r; -} - -Duration::~Duration() -{ - delete plet_p_; } - -Duration const& -Duration::operator =( Duration const& dur_c_r ) +void +Duration::set_plet(int i, int t) { - if ( &dur_c_r == this ) - return *this; - - type_i_ = dur_c_r.type_i_; - dots_i_ = dur_c_r.dots_i_; - ticks_i_ = dur_c_r.ticks_i_; - set_plet( dur_c_r.plet_p_ ); - - return *this; + plet_.iso_i_ = i; + plet_.type_i_ = t; } -void -Duration::set_plet( Plet* plet_l ) +Moment +Duration::length() const { - delete plet_p_; - plet_p_ = 0; - if ( plet_l ) - plet_p_ = new Plet( *plet_l ); + return Duration_convert::dur2_mom(*this); } - void Duration::set_ticks( int ticks_i ) { assert( !type_i_ ); assert( !dots_i_ ); - assert( !plet_p_ ); ticks_i_ = ticks_i; } - +String +Duration::str()const +{ + return Duration_convert::dur2_str(*this); +} Plet::Plet( int iso_i, int type_i ) { iso_i_ = iso_i; type_i_ = type_i; } - - -// statics Duration_convert -bool Duration_convert::be_blonde_b_s = false; -bool Duration_convert::no_double_dots_b_s = false; -bool Duration_convert::no_triplets_b_s = false; -int Duration_convert::no_smaller_than_i_s = 0; - -String -Duration_convert::dur2_str( Duration dur ) -{ - if ( dur.ticks_i_ ) - return String( "[" ) + String( dur.ticks_i_ ) + "]"; - - String str( dur.type_i_ ); - str += String( '.', dur.dots_i_ ); - if ( dur.plet_p_ ) - str += String( "*" ) + String( dur.plet_p_->iso_i_ ) - + String( "/" ) + String( dur.plet_p_->type_i_ ); - return str; -} - -#if 0 -int -Duration_convert::dur2_i( Duration dur, int division_1_i ) -{ - return dur2_mom( dur ) * Moment( division_1_i ); -} -#endif - -int -Duration_convert::dur2ticks_i( Duration dur ) -{ - if ( dur.ticks_i_ ) - return dur.ticks_i_; - return dur2_mom( dur ) * Moment( Duration::division_1_i_s ); -} - -Moment -Duration_convert::dur2_mom( Duration dur ) -{ - if ( dur.ticks_i_ ) - return Moment( dur.ticks_i_, Duration::division_1_i_s ); - - // or simply assert? - if ( !dur.type_i_ ) - return Moment( 0 ); - - Moment mom = Moment( 1 , dur.type_i_ ); - - Moment delta = mom; - while ( dur.dots_i_-- ) { - delta /= 2.0; - mom += delta; - } - - return mom * plet_factor_mom( dur ); -} - -#if 0 -Moment -Duration_convert::i2_mom( int time_i, int division_1_i ) -{ - if ( !time_i ) - return Moment( 0 ); - - if ( division_1_i > 0 ) - return Moment( time_i, division_1_i ); - else - return Moment( -division_1_i, time_i ); -} -#endif - -#if 0 -Duration -Duration_convert::mom2_dur( Moment mom ) -{ - /* this is cute, - but filling an array using Duration_iterator - might speed things up, a little - */ - Duration_iterator iter_dur; - assert( iter_dur ); - while ( iter_dur ) { - Duration lower_dur = iter_dur++; - Duration upper_dur( 0 ); - if ( iter_dur ) - upper_dur = iter_dur(); - Moment lower_mom = dur2_mom( lower_dur ); - Moment upper_mom = dur2_mom( upper_dur ); - if ( mom == lower_mom ) - return lower_dur; - if ( mom == upper_mom ) // don-t miss last (sic) - return upper_dur; - if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) { - warning( String( "duration not exact: " ) + String( (Real)mom ) , 0 ); - if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) ) - return lower_dur; - else - return upper_dur; - } - lower_dur = upper_dur; - } - return Duration( 0 ); -} -#endif - Moment -Duration_convert::plet_factor_mom( Duration dur ) -{ - if ( !dur.plet_p_ ) - return 1; - return Moment( dur.plet_p_->iso_i_, dur.plet_p_->type_i_ ); -} - -Real -Duration_convert::sync_f( Duration dur, Moment mom ) -{ - return mom / dur2_mom( dur ); -} - -Duration -Duration_convert::ticks2_dur( int ticks_i ) -{ - /* this is cute, - but filling an array using Duration_iterator - might speed things up, a little - */ - Moment mom( ticks_i, Duration::division_1_i_s ); - Duration_iterator iter_dur; - assert( iter_dur ); - while ( iter_dur ) { - Duration dur = iter_dur++; - if ( mom == dur2_mom( dur ) ) - return dur; - } - Duration dur( 0 ); - dur.set_ticks( ticks_i ); - return dur; -} - -Duration -Duration_convert::ticks2standardised_dur( int ticks_i ) +Plet::mom()const { - /* this is cute, - but filling an array using Duration_iterator - might speed things up, a little - */ - Moment mom( ticks_i, Duration::division_1_i_s ); - Duration_iterator iter_dur; - assert( iter_dur ); - while ( iter_dur ) { - Duration lower_dur = iter_dur++; -// Duration upper_dur( 0 ); - Duration upper_dur( 1, 1 ); - if ( iter_dur ) - upper_dur = iter_dur(); - Moment lower_mom = dur2_mom( lower_dur ); - Moment upper_mom = dur2_mom( upper_dur ); - if ( mom < lower_mom ) - return lower_dur; - if ( mom == lower_mom ) - return lower_dur; - if ( mom == upper_mom ) // don-t miss last (sic) - return upper_dur; - if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) { - warning( String( "duration not exact: " ) + String( (Real)mom ) , 0 ); - if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) ) - return lower_dur; - else - return upper_dur; - } - lower_dur = upper_dur; - } - return iter_dur(); + return Moment( iso_i_, type_i_ ); } -Duration_iterator::Duration_iterator() +Plet::Plet() { - cursor_dur_.type_i_ = 128; - if ( Duration_convert::no_smaller_than_i_s ) - cursor_dur_.type_i_ = Duration_convert::no_smaller_than_i_s; - cursor_dur_.set_plet( 0 ); + type_i_ = 1; + iso_i_ = 1; } - -Duration -Duration_iterator::operator ++(int) -{ - return forward_dur(); -} - -Duration -Duration_iterator::operator ()() -{ - return dur(); -} - -Duration_iterator::operator bool() -{ - return ok(); -} - -Duration -Duration_iterator::dur() +bool +Plet::unit_b()const { - return cursor_dur_; + return type_i_ == 1 && iso_i_ == 1; } - -Duration -Duration_iterator::forward_dur() -{ - // should do smart table? guessing: - // duration wholes - // 16 0.0625 - // 32.. 0.0703 - // 8:2/3 0.0833 - // 16. 0.0938 - // 8 0.1250 - // 16.. 0.1406 - // 4:2/3 0.1667 - // 8. 0.1875 - - assert( ok() ); - - Duration dur = cursor_dur_; - - if ( !cursor_dur_.dots_i_ && !cursor_dur_.plet_p_ ) { - cursor_dur_.type_i_ *= 2; - cursor_dur_.dots_i_ = 2; - } - else if ( cursor_dur_.dots_i_ == 2 ) { - assert( !cursor_dur_.plet_p_ ); - cursor_dur_.dots_i_ = 0; - cursor_dur_.type_i_ /= 4; - cursor_dur_.set_plet( &Plet( 2, 3 ) ); - } - else if ( cursor_dur_.plet_p_ - && ( cursor_dur_.plet_p_->iso_i_ == 2 ) - && ( cursor_dur_.plet_p_->type_i_ == 3 ) ) { - assert( !cursor_dur_.dots_i_ ); - cursor_dur_.set_plet( 0 ); - cursor_dur_.type_i_ *= 2; - cursor_dur_.dots_i_ = 1; - } - else if ( cursor_dur_.dots_i_ == 1 ) { - assert( !cursor_dur_.plet_p_ ); - cursor_dur_.dots_i_ = 0; - cursor_dur_.type_i_ /= 2; - } - - if ( Duration_convert::no_triplets_b_s && cursor_dur_.plet_p_ && ok() ) - forward_dur(); - if ( Duration_convert::no_double_dots_b_s && ( cursor_dur_.dots_i_ == 2 ) && ok() ) - forward_dur(); - if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.type_i_ > Duration_convert::no_smaller_than_i_s ) && ok() ) - forward_dur(); - if ( Duration_convert::no_smaller_than_i_s && cursor_dur_.dots_i_ && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s ) && ok() ) - forward_dur(); - if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.dots_i_ == 2 ) && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s / 2 ) && ok() ) - forward_dur(); - - return dur; -} - bool -Duration_iterator::ok() +Duration::plet_b() { - return ( cursor_dur_.type_i_ - && !( ( cursor_dur_.type_i_ == 1 ) && ( cursor_dur_.dots_i_ > 2 ) ) ); + return !plet_.unit_b(); } diff --git a/lily/musical-request.cc b/lily/musical-request.cc index 597a60ac76..e90be35ba3 100644 --- a/lily/musical-request.cc +++ b/lily/musical-request.cc @@ -17,12 +17,13 @@ void Stem_req::do_print() const { +#ifndef NPRINT Rhythmic_req::do_print(); mtor << "dir : " << dir_i_; +#endif } -Stem_req::Stem_req(int s, int d) - : Rhythmic_req(s,d) +Stem_req::Stem_req() { dir_i_ = 0; } @@ -56,12 +57,12 @@ Span_req::do_print() const Request::Request() { elt_l_ = 0; - defined_ch_c_l_ = 0; + defined_ch_C_ = 0; } Request::Request(Request const&src) { elt_l_ = 0; - defined_ch_c_l_ = src.defined_ch_c_l_; + defined_ch_C_ = src.defined_ch_C_; } /* *************** */ Spacing_req::Spacing_req() @@ -103,7 +104,7 @@ Melodic_req::transpose(Melodic_req const & delta) accidental_i_ += delta.accidental_i_; if (abs(accidental_i_) > 2) { warning("transposition makes accidental larger than 2", - delta.defined_ch_c_l_); + delta.defined_ch_C_); } } @@ -153,37 +154,29 @@ Rhythmic_req::compare(Rhythmic_req const &r1, Rhythmic_req const &r2) { return sign(r1.duration() - r2.duration()); } -Rhythmic_req::Rhythmic_req(int b, int d) + +void +Rhythmic_req::set_duration(Duration d) { - plet_factor = 1; - balltype = b; - dots = d; + duration_ = d; } Rhythmic_req::Rhythmic_req() { - plet_factor = 1; - balltype = 1; - dots = 0; } void Rhythmic_req::do_print() const { #ifndef NPRINT - mtor << "ball: " << balltype ; - int d =dots; - while (d--) - mtor << '.'; - - mtor<<", plet factor"<