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 ();
70 music_list_to_relative (SCM l,Pitch p, bool ret_first)
76 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
78 if (Music *m = unsmob_music (scm_car (s)))
80 last = m->to_relative_octave (last);
86 return (ret_first)? first : last;
91 compress_music_list (SCM l, Moment m)
93 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
94 unsmob_music (scm_car (s))->compress (m);
97 ADD_MUSIC (Music_sequence);
100 Music_sequence::minimum_start (SCM l)
104 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
106 m = m <? unsmob_music (scm_car (s))->start_mom ();
112 Music_sequence::first_start (SCM l)
116 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
118 Music * mus = unsmob_music (scm_car (s));
119 Moment l = mus->get_length ();
120 Moment s = mus->start_mom ();
121 if (l.to_bool () || s.to_bool ())