From: Dan Eble Date: Fri, 9 Jan 2015 04:27:35 +0000 (-0500) Subject: Issue 4252: Remove Unfolded_repeat_iterator X-Git-Tag: release/2.19.16-1~2^2~38^2~9 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=1dbadfcf82a2cfb2a9cccada47faf449ddf896ed;p=lilypond.git Issue 4252: Remove Unfolded_repeat_iterator To eliminate redundancy, remove Unfolded_repeat_iterator and rely on Sequential_iterator with a customized elements-callback factored out of unfold-repeats-fully. --- diff --git a/lily/unfolded-repeat-iterator.cc b/lily/unfolded-repeat-iterator.cc deleted file mode 100644 index 976861fa8b..0000000000 --- a/lily/unfolded-repeat-iterator.cc +++ /dev/null @@ -1,63 +0,0 @@ -/* - This file is part of LilyPond, the GNU music typesetter. - - Copyright (C) 2002--2015 Han-Wen Nienhuys - - LilyPond is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - LilyPond is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with LilyPond. If not, see . -*/ - -#include "music.hh" -#include "sequential-iterator.hh" -#include "context.hh" - -class Unfolded_repeat_iterator : public Sequential_iterator -{ -public: - DECLARE_SCHEME_CALLBACK (constructor, ()); -protected: - virtual SCM get_music_list () const; -}; - -SCM -Unfolded_repeat_iterator::get_music_list () const -{ - SCM l = SCM_EOL; - SCM *tail = &l; - - SCM body = get_music ()->get_property ("element"); - SCM alts = get_music ()->get_property ("elements"); - int alt_count = scm_ilength (alts); - int rep_count = scm_to_int (get_music ()->get_property ("repeat-count")); - - for (int i = 0; i < rep_count; i++) - { - if (Music::is_smob (body)) - *tail = scm_cons (body, SCM_EOL); - - tail = SCM_CDRLOC (*tail); - - if (alt_count) - { - *tail = scm_cons (scm_car (alts), SCM_EOL); - tail = SCM_CDRLOC (*tail); - if (i >= rep_count - alt_count) - - alts = scm_cdr (alts); - } - } - - return l; -} - -IMPLEMENT_CTOR_CALLBACK (Unfolded_repeat_iterator); diff --git a/scm/define-music-callbacks.scm b/scm/define-music-callbacks.scm index 0683abdb15..7e65125cb6 100644 --- a/scm/define-music-callbacks.scm +++ b/scm/define-music-callbacks.scm @@ -34,6 +34,19 @@ to be used by the sequential-iterator" (make-music 'BarCheck 'origin location)))) +(define (make-unfolded-set music) + (let ((n (ly:music-property music 'repeat-count)) + (alts (ly:music-property music 'elements)) + (body (ly:music-property music 'element))) + (cond ((<= n 0) '()) + ((null? alts) (make-list n body)) + (else + (concatenate + (zip (make-list n body) + (append! (make-list (max 0 (- n (length alts))) + (car alts)) + alts))))))) + (define (make-volta-set music) (let* ((alts (ly:music-property music 'elements)) (lalts (length alts)) diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index b59e9ff0f1..d1795246b2 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -718,7 +718,8 @@ brackets start and stop.") (UnfoldedRepeatedMusic . ((description . "Repeated music which is fully written (and played) out.") - (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor) + (iterator-ctor . ,ly:sequential-iterator::constructor) + (elements-callback . ,make-unfolded-set) (start-callback . ,ly:repeated-music::first-start) (types . (general-music repeated-music unfolded-repeated-music)) (length-callback . ,ly:repeated-music::unfolded-music-length) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 4ba6c6517b..1b679a7228 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -400,18 +400,7 @@ beats to be distinguished." (lambda (m) (and (music-is-of-type? m 'unfolded-repeated-music) (make-sequential-music - (ly:music-deep-copy - (let ((n (ly:music-property m 'repeat-count)) - (alts (ly:music-property m 'elements)) - (body (ly:music-property m 'element))) - (cond ((<= n 0) '()) - ((null? alts) (make-list n body)) - (else - (concatenate - (zip (make-list n body) - (append! (make-list (max 0 (- n (length alts))) - (car alts)) - alts)))))))))) + (ly:music-deep-copy (make-unfolded-set m))))) (unfold-repeats music))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;