2 music-sequence.cc -- implement Music_sequence
4 source file of the GNU LilyPond music typesetter
6 (c) 1998--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
9 #include "music-list.hh"
14 Music_sequence::Music_sequence (SCM x)
20 Music_sequence::music_list () const
22 return get_property ("elements");
26 transpose_music_list (SCM lst, Pitch rq)
28 for (SCM s = lst; scm_is_pair (s); s = scm_cdr (s))
29 unsmob_music (scm_car (s))->transpose (rq);
33 Music_sequence::cumulative_length (SCM l)
38 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
40 Moment l = unsmob_music (scm_car (s))->get_length ();
41 if (last_len.grace_part_ && l.main_part_)
43 last_len.grace_part_ = Rational (0);
45 cumulative += last_len;
49 last_len.grace_part_ = Rational (0);
50 cumulative += last_len;
56 Music_sequence::maximum_length (SCM l)
59 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
61 Music * m = unsmob_music (scm_car (s));
62 Moment l = m->get_length ();
69 MAKE_SCHEME_CALLBACK(Music_sequence,maximum_length_callback,1);
71 Music_sequence::maximum_length_callback (SCM m)
73 Music* me = unsmob_music (m);
74 return maximum_length (me->get_property ("elements")).smobbed_copy();
77 MAKE_SCHEME_CALLBACK(Music_sequence,cumulative_length_callback,1);
79 Music_sequence::cumulative_length_callback (SCM m)
81 Music* me = unsmob_music (m);
82 return cumulative_length (me->get_property ("elements")).smobbed_copy();
86 MAKE_SCHEME_CALLBACK(Music_sequence,minimum_start_callback,1);
88 Music_sequence::minimum_start_callback (SCM m)
90 Music* me = unsmob_music (m);
91 return minimum_start (me->get_property ("elements")).smobbed_copy();
94 MAKE_SCHEME_CALLBACK(Music_sequence,first_start_callback,1);
96 Music_sequence::first_start_callback (SCM m)
98 Music* me = unsmob_music (m);
99 return first_start (me->get_property ("elements")).smobbed_copy();
103 music_list_to_relative (SCM l,Pitch p, bool ret_first)
109 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
111 if (Music *m = unsmob_music (scm_car (s)))
113 last = m->to_relative_octave (last);
119 return (ret_first)? first : last;
124 compress_music_list (SCM l, Moment m)
126 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
127 unsmob_music (scm_car (s))->compress (m);
130 ADD_MUSIC (Music_sequence);
133 Music_sequence::minimum_start (SCM l)
137 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
139 m = m <? unsmob_music (scm_car (s))->start_mom ();
145 Music_sequence::first_start (SCM l)
149 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
151 Music * mus = unsmob_music (scm_car (s));
152 Moment l = mus->get_length ();
153 Moment s = mus->start_mom ();
154 if (l.to_bool () || s.to_bool ())