X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpercent-repeat-iterator.cc;h=5573dc7609b988b99667b51b3304cb78169b70e3;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=29021ee3964e7350a982f2b910b266ed37605281;hpb=70d5609d63efe8a9b42ff763b79348bf99953bf2;p=lilypond.git diff --git a/lily/percent-repeat-iterator.cc b/lily/percent-repeat-iterator.cc index 29021ee396..5573dc7609 100644 --- a/lily/percent-repeat-iterator.cc +++ b/lily/percent-repeat-iterator.cc @@ -3,31 +3,38 @@ source file of the GNU LilyPond music typesetter - (c) 2001--2006 Han-Wen Nienhuys , Erik Sandberg + (c) 2001--2008 Han-Wen Nienhuys + Erik Sandberg */ -#include "percent-repeat-iterator.hh" - #include "input.hh" -#include "international.hh" -#include "music.hh" #include "repeated-music.hh" +#include "sequential-iterator.hh" + +class Percent_repeat_iterator : public Sequential_iterator +{ +public: + DECLARE_CLASSNAME (Percent_repeat_iterator); + DECLARE_SCHEME_CALLBACK (constructor, ()); + Percent_repeat_iterator (); +protected: + virtual SCM get_music_list () const; +}; IMPLEMENT_CTOR_CALLBACK (Percent_repeat_iterator); Percent_repeat_iterator::Percent_repeat_iterator () { - child_list_ = SCM_EOL; } -void -Percent_repeat_iterator::construct_children () +SCM +Percent_repeat_iterator::get_music_list () const { - /* TODO: Distinction between percent and slash */ + /* TODO: Distinction between percent, double-percent and slash */ Music *mus = get_music (); Music *child = Repeated_music::body (mus); SCM length = child->get_length ().smobbed_copy (); - child_list_ = SCM_EOL; + SCM child_list = SCM_EOL; int repeats = scm_to_int (mus->get_property ("repeat-count")); for (int i = repeats; i > 1; i--) @@ -36,28 +43,12 @@ Percent_repeat_iterator::construct_children () percent->set_spot (*mus->origin ()); percent->set_property ("length", length); if (repeats > 1) - percent->set_property ("repeat-count", scm_int2num (i - 1)); - Music *percent_chord = make_music_by_name (ly_symbol2scm ("EventChord")); - percent_chord->set_spot (*mus->origin ()); - percent_chord->set_property ("elements", scm_list_1 (percent->self_scm ())); - child_list_ = scm_cons (percent_chord->self_scm (), child_list_); - percent->unprotect (); - percent_chord->unprotect (); + percent->set_property ("repeat-count", scm_int2num (i)); + + child_list = scm_cons (percent->unprotect (), child_list); } - child_list_ = scm_cons (child->self_scm (), child_list_); - Sequential_iterator::construct_children (); -} + child_list = scm_cons (child->self_scm (), child_list); -SCM -Percent_repeat_iterator::get_music_list () const -{ - return child_list_; -} - -void -Percent_repeat_iterator::derived_mark () const -{ - scm_gc_mark (child_list_); - Sequential_iterator::derived_mark (); + return child_list; }