From: David Kastrup Date: Fri, 12 Jul 2013 02:09:24 +0000 (+0200) Subject: Issue 3476: Allow map-some-music to filter elements and articulations X-Git-Tag: release/2.17.24-1~16^2~14 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=65a699255892993bab6e6dd3b10959d4b2bf5ceb;hp=870695225865b42dc84193106590412429de4f08;p=lilypond.git Issue 3476: Allow map-some-music to filter elements and articulations --- 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)