From 65a699255892993bab6e6dd3b10959d4b2bf5ceb Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Fri, 12 Jul 2013 04:09:24 +0200 Subject: [PATCH] Issue 3476: Allow map-some-music to filter elements and articulations --- scm/music-functions.scm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 5e07229a37..eed6f7cd0a 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -1756,7 +1756,11 @@ Entries that conform with the current key signature are not invalidated." (define-public (map-some-music map? music) "Walk through @var{music}, transform all elements calling @var{map?} -and only recurse if this returns @code{#f}." +and only recurse if this returns @code{#f}. @code{elements} or +@code{articulations} that are not music expressions are discarded: +this allows some amount of filtering. + +@code{map-some-music} may overwrite the original @var{music}." (let loop ((music music)) (or (map? music) (let ((elt (ly:music-property music 'element)) @@ -1767,10 +1771,10 @@ and only recurse if this returns @code{#f}." (loop elt))) (if (pair? elts) (set! (ly:music-property music 'elements) - (map loop elts))) + (filter! ly:music? (map! loop elts)))) (if (pair? arts) (set! (ly:music-property music 'articulations) - (map loop arts))) + (filter! ly:music? (map! loop arts)))) music)))) (define-public (for-some-music stop? music) -- 2.39.5