]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/repeated-music.hh
Run grand replace for 2015.
[lilypond.git] / lily / include / repeated-music.hh
index 1a4641ff5a068a73f1a70f82b2c39fd170bbdf8a..e0e7cdf3769c54d070310610740cff6693947508 100644 (file)
@@ -1,39 +1,78 @@
-/*   
-  repeated-music.hh -- declare Repeated_music
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
-  
- */
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 1999--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+*/
 
 #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_;
-  Music_sequence* alternative_p_;
-
-//  Repeated_music (Music*, int n, Music_list*);
-  Repeated_music (Music*, int n, Music_sequence*);
-  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 */
-