From: fred Date: Tue, 26 Mar 2002 22:44:34 +0000 (+0000) Subject: lilypond-1.3.15 X-Git-Tag: release/1.5.59~1937 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=b7645ae2f3fc8991eeb5dd9e414a221053ce44b8;p=lilypond.git lilypond-1.3.15 --- diff --git a/lily/duration.cc b/lily/duration.cc new file mode 100644 index 0000000000..03c769ec32 --- /dev/null +++ b/lily/duration.cc @@ -0,0 +1,73 @@ +/* + duration.cc -- implement Duration, Plet, + + source file of the LilyPond music typesetter + + (c) 1997--1999 Jan Nieuwenhuizen + Han-Wen Nienhuys + +*/ + +#include + +#include "lily-proto.hh" +#include "string.hh" +#include "moment.hh" +#include "duration.hh" + +Duration::Duration () +{ + durlog_i_ = 0; + dots_i_ = 0; + tuplet_iso_i_ = 1; + tuplet_type_i_ = 1; +} + +void +Duration::compress (Rational m) +{ + tuplet_iso_i_ *= m.num_i (); + tuplet_type_i_ *= m.den_i (); +} + +Rational +Duration::length_mom () const +{ + Rational mom (1 << abs (durlog_i_)); + + if (durlog_i_> 0) + mom = Moment (1)/mom; + + Rational delta = mom; + + for (int d = dots_i_; d; d--) + { + delta /= 2.0; + mom += delta; + } + + return mom * Moment (tuplet_iso_i_, tuplet_type_i_); +} + +void +Duration::set_plet (int i, int t) +{ + tuplet_iso_i_ = i; + tuplet_type_i_ = t; +} + + +String +Duration::str () const +{ + return to_str (durlog_i_) + to_str ('.', dots_i_); +} + + +bool +Duration::plet_b () +{ + return tuplet_iso_i_ != 1 || tuplet_type_i_ != 1; +} + + diff --git a/lily/parser.yy b/lily/parser.yy index 0d802fd2ff..58931e8277 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -30,7 +30,6 @@ #include "translator-group.hh" #include "score.hh" #include "music-list.hh" -#include "duration-convert.hh" #include "change-translator.hh" #include "file-results.hh" #include "scope.hh" @@ -46,6 +45,13 @@ // mmm Mudela_version oldest_version ("1.3.4"); +bool +is_duration_b (int t) +{ + return t == 1 << intlog2(t); +} + + void @@ -920,7 +926,7 @@ abbrev_command_req: $$ =b; } | '[' ':' unsigned { - if (!Duration::duration_type_b ($3)) + if (!is_duration_b ($3)) THIS->parser_error (_f ("not a duration: %d", $3)); else if ($3 < 8) THIS->parser_error (_ ("Can't abbreviate")); @@ -1300,10 +1306,10 @@ duration_length: $$ = $1; } | duration_length '*' unsigned { - $$->plet_.iso_i_ *= $3; + $$->tuplet_iso_i_ *= $3; } | duration_length '/' unsigned { - $$->plet_.type_i_ *= $3; + $$->tuplet_type_i_ *= $3; } ; @@ -1325,10 +1331,10 @@ optional_notemode_duration: steno_duration: unsigned { $$ = new Duration; - if (!Duration::duration_type_b ($1)) + if (!is_duration_b ($1)) THIS->parser_error (_f ("not a duration: %d", $1)); else { - $$->durlog_i_ = Duration_convert::i2_type ($1); + $$->durlog_i_ = intlog2 ($1); } } | DURATION_IDENTIFIER { @@ -1345,7 +1351,7 @@ abbrev_type: $$ =0; } | ':' unsigned { - if (!Duration::duration_type_b ($2)) + if (!is_duration_b ($2)) THIS->parser_error (_f ("not a duration: %d", $2)); else if ($2 < 8) THIS->parser_error (_ ("Can't abbreviate"));