]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/repeated-music.hh
Run `make grand-replace'.
[lilypond.git] / lily / include / repeated-music.hh
index b068c242caf576d1cfe93c067e08168f35afcc51..ee79243e6ea625c88a56b170cf270214d1be390f 100644 (file)
@@ -1,39 +1,67 @@
-/*   
+/*
   repeated-music.hh -- declare Repeated_music
-  
+
   source file of the GNU LilyPond music typesetter
-  
-  (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
-  
- */
+
+  (c) 1999--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
+*/
 
 #ifndef REPEATED_MUSIC_HH
 #define REPEATED_MUSIC_HH
 
-#include "music-list.hh"
+#include "music.hh"
 
 /**
-   Repeats and voltas
- */
-class Repeated_music : public Music
+   Musical repeats.
+
+   A repeat, when played has the form of BODY A BODY B BODY C.
+
+   In this examples, the list {A B C} is put in ALTERNATIVES_P_.  BODY
+   is put in REPEAT_BODY_P_.  Either the body or the alternative may
+   be omitted.
+
+   There are three modes of representing this  music:
+
+   BODY A
+   B
+   C
+
+   is called "folded". Mostly used for lyrics.
+
+
+   BODY A B C
+
+   is called volta.  This is common notation
+
+   BODY A BODY B BODY C
+
+   is called unfolded.  Useful for MIDI.
+
+   If the number of repeats is smaller than the number of alternatives, then
+   the excess alternatives are ignored for all timing purposes.
+
+   If the number of repeats is bigger than the number of alternatives, then
+   the first alternative is assumed to be repeated.
+*/
+class Repeated_music
 {
 public:
-  int repeats_i_;
-  Music* repeat_p_;
-//  Music_list* alternative_p_;
-  Sequential_music* alternative_p_;
-
-//  Repeated_music (Music*, int n, Music_list*);
-  Repeated_music (Music*, int n, Sequential_music*);
-  Repeated_music (Repeated_music const& s);
-  virtual ~Repeated_music ();
-  
-  virtual void do_print () const;
-  virtual void transpose (Musical_pitch p);
-  virtual Moment duration () const;
-
-  VIRTUAL_COPY_CONS(Music);
+  static Music *body (Music *);
+  static SCM alternatives (Music *);
+
+  /* How often do we repeat? */
+  static int repeat_count (Music *);
+  DECLARE_SCHEME_CALLBACK (relative_callback, (SCM, SCM));
+
+  static Moment body_get_length (Music *);
+  static Moment alternatives_get_length (Music *, bool fold);
+  static Moment alternatives_volta_get_length (Music *);
+
+  DECLARE_SCHEME_CALLBACK (unfolded_music_length, (SCM));
+  DECLARE_SCHEME_CALLBACK (volta_music_length, (SCM));
+  DECLARE_SCHEME_CALLBACK (folded_music_length, (SCM));
+  DECLARE_SCHEME_CALLBACK (minimum_start, (SCM));
+  DECLARE_SCHEME_CALLBACK (first_start, (SCM));
 };
 
 #endif /* REPEATED_MUSIC_HH */
-