X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Frepeated-music.hh;h=e33c4b1b98434ff646422a998ed2363ae51a45d6;hb=9e781b7dc83b60a543ce218aa1a5f139f74c760f;hp=1a4641ff5a068a73f1a70f82b2c39fd170bbdf8a;hpb=2b3853cd624f78756ba0f891fe220776a496d288;p=lilypond.git diff --git a/lily/include/repeated-music.hh b/lily/include/repeated-music.hh index 1a4641ff5a..e33c4b1b98 100644 --- a/lily/include/repeated-music.hh +++ b/lily/include/repeated-music.hh @@ -1,39 +1,78 @@ -/* - repeated-music.hh -- declare Repeated_music - - source file of the GNU LilyPond music typesetter - - (c) 1998 Jan Nieuwenhuizen - - */ +/* + This file is part of LilyPond, the GNU music typesetter. + + Copyright (C) 1999--2014 Han-Wen Nienhuys + + 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 . +*/ #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 */ -