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 maximum_length (me->get_property ("elements")).smobbed_copy();
86 music_list_to_relative (SCM l,Pitch p, bool ret_first)
92 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
94 if (Music *m = unsmob_music (scm_car (s)))
96 last = m->to_relative_octave (last);
102 return (ret_first)? first : last;
107 compress_music_list (SCM l, Moment m)
109 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
110 unsmob_music (scm_car (s))->compress (m);
113 ADD_MUSIC (Music_sequence);
116 Music_sequence::minimum_start (SCM l)
120 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
122 m = m <? unsmob_music (scm_car (s))->start_mom ();
128 Music_sequence::first_start (SCM l)
132 for (SCM s = l; scm_is_pair (s); s = scm_cdr (s))
134 Music * mus = unsmob_music (scm_car (s));
135 Moment l = mus->get_length ();
136 Moment s = mus->start_mom ();
137 if (l.to_bool () || s.to_bool ())