--- /dev/null
+\version "2.15.6"
+
+\header {
+ texidoc = "@code{\\quoteDuring} and @code{\\cueDuring} shall properly quote
+voices that create a sub-voice. The sub-voice will not be quoted, though.
+"
+}
+
+
+quoteMe = \relative c' {
+ c4 c
+ \new Voice {
+ c4 c
+ }
+}
+\addQuote quoteMe \quoteMe
+
+\relative c'' {
+ c4 \cueDuring #"quoteMe" #DOWN { r4 } % <- show a cue note from quoteMe
+ c4 \cueDuring #"quoteMe" #DOWN { r4 } % <- no cue note due to sub-voice
+}
(define-public (add-quotable parser name mus)
(let* ((tab (eval 'musicQuotes (current-module)))
- (context-list (recording-group-emulate (context-spec-music mus 'Voice)
- (ly:parser-lookup parser 'partCombineListener))))
- (if (pair? context-list)
- (hash-set! tab name
- ;; cdr : skip name string
- (list->vector (reverse! (cdar context-list)
- '()))))))
+ ;; If a Voice is passed, use its contents:
+ (contents (if (equal? (ly:music-property mus 'name) 'ContextSpeccedMusic)
+ (ly:music-property mus 'element)
+ mus))
+ (voicename (get-next-unique-voice-name))
+ ;; recording-group-emulate returns an assoc list, so hand it a
+ ;; proper unique context name and extract that key:
+ (context-list (recording-group-emulate (context-spec-music contents 'Voice voicename)
+ (ly:parser-lookup parser 'partCombineListener)))
+ (quote-contents (if (assoc voicename context-list)
+ (assoc-get voicename context-list)
+ '())))
+
+ (if quote-contents
+ (hash-set! tab name (list->vector (reverse! quote-contents '()))))))