]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.3.15
authorfred <fred>
Tue, 26 Mar 2002 22:44:34 +0000 (22:44 +0000)
committerfred <fred>
Tue, 26 Mar 2002 22:44:34 +0000 (22:44 +0000)
lily/duration.cc [new file with mode: 0644]
lily/parser.yy

diff --git a/lily/duration.cc b/lily/duration.cc
new file mode 100644 (file)
index 0000000..03c769e
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+  duration.cc -- implement Duration, Plet, 
+
+  source file of the LilyPond music typesetter
+
+  (c)  1997--1999 Jan Nieuwenhuizen <janneke@gnu.org>
+           Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+*/
+
+#include <assert.h>
+
+#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;
+}
+
+
index 0d802fd2ff78f6a6d2a323e419de364018c58f15..58931e8277d8baee1a9e5e93e3fbf2305cb574f8 100644 (file)
@@ -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"
 // 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"));