X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fsequential-music-iterator.hh;h=37cfbe34be57dccdac82a5284f7b74a5cf7e4f39;hb=refs%2Ftags%2Frelease%2F1.5.19;hp=5da129b28661eb9dd1c52ae94979342a8969914f;hpb=8da6cef580cce3365b219f6aca429b434cb60fcf;p=lilypond.git diff --git a/lily/include/sequential-music-iterator.hh b/lily/include/sequential-music-iterator.hh index 5da129b286..37cfbe34be 100644 --- a/lily/include/sequential-music-iterator.hh +++ b/lily/include/sequential-music-iterator.hh @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2000 Han-Wen Nienhuys + (c) 1997--2001 Han-Wen Nienhuys */ #ifndef SEQUENTIAL_MUSIC_ITERATOR_HH @@ -11,6 +11,39 @@ #include "music-iterator.hh" + +/* + + This is a lookahead list for grace notes. + + { ... X \grace Y Z ... } + + normally, the ending of X is the start of Z. In case of a grace + note, we take off a little at the end of X. What is stored: START + (start point of X), LENGTH (length of X), GRACE_START (start_music + of Y), and the next fixup element. + + This is also done for nested musics, i.e. + + voiceA = \notes { \grace b16 c'2 } + voiceB = \notes { c'2 \voiceA } + + the iterator for voiceB will contain a fixup entry with (START=0/1, + LENGTH=2/1, GRACE_START=(0G-1/16) ) + + Graces at the start of a sequential music iterator are handled + by initting here_mom_ with Music::start_music (); no fixups are needed. + +*/ +struct Grace_fixup +{ + Moment start_; + Moment length_; + + Rational grace_start_; + Grace_fixup *next_; +}; + /** Sequential_music iteration: walk each element in turn, and construct an iterator for every element. @@ -18,6 +51,8 @@ class Sequential_music_iterator : public Music_iterator { public: + Grace_fixup * grace_fixups_; + VIRTUAL_COPY_CONS (Music_iterator); static SCM constructor_cxx_function; Sequential_music_iterator ();