(set! (ly:music-property music 'elements) filtered-es)
(set! (ly:music-property music 'articulations) filtered-as)
;; if filtering emptied the expression, we remove it completely.
- (if (or (pred? music)
+ (if (or (not (pred? music))
(and (eq? filtered-es '()) (not (ly:music? e))
(or (not (eq? es '()))
(ly:music? e))))
music
(make-music 'Music))) ;must return music.
-(define-public (remove-tag tag)
- (lambda (mus)
- (music-filter
- (lambda (m)
- (let* ((tags (ly:music-property m 'tags))
- (res (memq tag tags)))
- res))
- mus)))
(define-public (display-music music)
"Display music, not done with music-map for clarity of presentation."
(lambda (,@args)
,@body)))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(define-public ((quote-substitute quote-tab) music)
+ (let*
+ ((quoted-name (ly:music-property music 'quoted-music-name))
+ (quoted-vector (if (string? quoted-name)
+ (hash-ref quote-tab quoted-name #f)
+ #f
+ ))
+
+ )
+
+ (if (string? quoted-name)
+ (if (vector? quoted-vector)
+ (set! (ly:music-property music 'quoted-events) quoted-vector)
+ (ly:warn "Cannot find quoted music `~S'" quoted-name)))
+
+ music))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; switch it on here, so parsing and init isn't checked (too slow!)
;;
(set-debug-cell-accesses! 15000))
m)
+(define (music-check-error music)
+ (define found #f)
+ (define (signal m)
+ (if (and (ly:music? m)
+ (eq? (ly:music-property m 'error-found) #t))
+ (set! found #t)))
+
+ (for-each signal (ly:music-property music 'elements))
+ (signal (ly:music-property music 'element))
+
+ (if found
+ (set! (ly:music-property music 'error-found) #t))
+ music)
+
(define-public toplevel-music-functions
(list
;; check-start-chords ; ; no longer needed with chord syntax.
- voicify-music
- (lambda (x) (music-map glue-mm-rest-texts x))
+ (lambda (music parser) (voicify-music music))
+ (lambda (x parser) (music-map glue-mm-rest-texts x))
+ (lambda (x parser) (music-map music-check-error x))
+ (lambda (music parser)
+
+ (music-map (quote-substitute (ly:parser-lookup parser 'musicQuotes)) music))
;; switch-on-debugging
))
;; Accidentals are cancelled across the staves in the same grand staff as well
((equal? style 'piano)
(set-accidentals-properties #f
- '( Staff (same-octave . 0) (any-octave . 0) (same-octave . 1)
- GrandStaff (any-octave . 0) (same-octave . 1))
+ '(Staff (same-octave . 0)
+ (any-octave . 0) (same-octave . 1)
+ GrandStaff (any-octave . 0) (same-octave . 1))
'()
pcontext))
((equal? style 'piano-cautionary)