X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fly-syntax-constructors.scm;h=0a12672095701cf1844cef2ba881010afe2be0de;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=c690413c88d2957db10b642b8b8c44dac4b1a599;hpb=099c754c4fed2f2df70d49b88a028fb39272d165;p=lilypond.git diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index c690413c88..0a12672095 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -50,7 +50,7 @@ (if (ly:music? m) (ly:set-origin! m) m) (music-function-call-error fun m)) (and (pair? sigcar) - (if (ly:music (cdr sigcar)) + (if (ly:music? (cdr sigcar)) (ly:music-deep-copy (cdr sigcar) (*location*)) (cdr sigcar)))))) @@ -203,14 +203,17 @@ into a @code{MultiMeasureTextEvent}." (define-public (partial-markup commands) ;; Like composed-markup-list, except that the result is a single ;; markup command that can be applied to one markup - (define (compose arg) + (define (compose rest) (fold (lambda (cmd prev) (append cmd (list prev))) - arg - commands)) - (let ((chain (lambda (layout props arg) - (interpret-markup layout props (compose arg))))) - (set-object-property! chain 'markup-signature (list markup?)) + (append (car commands) rest) + (cdr commands))) + (let ((chain (lambda (layout props . rest) + (interpret-markup layout props (compose rest))))) + (set! (markup-command-signature chain) + (list-tail + (markup-command-signature (caar commands)) + (length (cdar commands)))) chain)) (define-public (property-set context property value) @@ -246,14 +249,23 @@ into a @code{MultiMeasureTextEvent}." 'grob-property-path (cdr path))) context))) +;; The signature here is slightly fishy since the "fallback return +;; value" is not actually music but #f. This used to be (void-music) +;; but triggered "Parsed object should be dead" warnings for music +;; objects outside of the current parser session/module. The called +;; functions always deliver music and are used from the parser in a +;; manner where only the last argument is provided from outside the +;; parser, and its predicate "scheme?" is always true. So the +;; fallback value will never get used and its improper type is no +;; issue. (define-public property-override-function (ly:make-music-function - (list (cons ly:music? (void-music)) symbol? symbol-list? scheme?) + (list (cons ly:music? #f) symbol? symbol-list? scheme?) property-override)) (define-public property-set-function (ly:make-music-function - (list (cons ly:music? (void-music)) symbol? symbol? scheme?) + (list (cons ly:music? #f) symbol? symbol? scheme?) property-set)) (define (get-first-context-id! mus) @@ -301,14 +313,16 @@ into a @code{MultiMeasureTextEvent}." 'origin (ly:music-property music 'origin)))) (voice-type (ly:music-property voice 'context-type)) (lyricstos (map - (lambda (mus) + (lambda (mus+mods) (with-location - (ly:music-property mus 'origin) + (ly:music-property (car mus+mods) 'origin) (ly:set-origin! (make-music 'ContextSpeccedMusic 'create-new #t 'context-type 'Lyrics + 'property-operations (cdr mus+mods) 'element (lyric-combine - voice-name voice-type mus))))) + voice-name voice-type + (car mus+mods)))))) addlyrics-list))) (make-simultaneous-music (cons voice lyricstos))))