]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/music-functions-init.ly
Merge branch 'master' of /home/jcharles/GIT/Lily/. into translation
[lilypond.git] / ly / music-functions-init.ly
index 5c6fb24e6ed04e773d5f41bc22d40d0a6c13b046..a23d154fd814d7e1ebdfe4c2de03afb0ab0659d3 100644 (file)
@@ -93,7 +93,7 @@ markups), or inside a score.")
 
 alterBroken =
 #(define-music-function (property arg item)
-  (symbol-list-or-symbol? list? symbol-list-or-music?)
+  (key-list-or-symbol? list? key-list-or-music?)
   (_i "Override @var{property} for pieces of broken spanner @var{item}
 with values @var{arg}.  @var{item} may either be music in the form of
 a starting spanner event, or a symbol list in the form
@@ -908,7 +908,7 @@ octaveCheck =
 
 offset =
 #(define-music-function (property offsets item)
-  (symbol-list-or-symbol? scheme? symbol-list-or-music?)
+  (symbol-list-or-symbol? scheme? key-list-or-music?)
    (_i "Offset the default value of @var{property} of @var{item} by
 @var{offsets}.  If @var{item} is a string, the result is
 @code{\\override} for the specified grob type.  If @var{item} is
@@ -996,7 +996,7 @@ of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.")
 
 overrideProperty =
 #(define-music-function (grob-property-path value)
-   (symbol-list? scheme?)
+   (key-list? scheme?)
 
    (_i "Set the grob property specified by @var{grob-property-path} to
 @var{value}.  @var{grob-property-path} is a symbol list of the form
@@ -1339,7 +1339,7 @@ print @var{secondary-note} as a stemless note head in parentheses.")
 
 propertyOverride =
 #(define-music-function (grob-property-path value)
-   (symbol-list? scheme?)
+   (key-list? scheme?)
    (_i "Set the grob property specified by @var{grob-property-path} to
 @var{value}.  @var{grob-property-path} is a symbol list of the form
 @code{Context.GrobName.property} or @code{GrobName.property}, possibly
@@ -1362,7 +1362,7 @@ command.")
 
 propertyRevert =
 #(define-music-function (grob-property-path)
-   (symbol-list?)
+   (key-list?)
    (_i "Revert the grob property specified by @var{grob-property-path} to
 its previous value.  @var{grob-property-path} is a symbol list of the form
 @code{Context.GrobName.property} or @code{GrobName.property}, possibly
@@ -1399,7 +1399,7 @@ Scheme as a substitute for the built-in @code{\\set} command.")
 
 propertyTweak =
 #(define-music-function (prop value item)
-   (symbol-list-or-symbol? scheme? symbol-list-or-music?)
+   (key-list-or-symbol? scheme? key-list-or-music?)
    (_i "Add a tweak to the following @var{item}, usually music.
 This generally behaves like @code{\\tweak} but will turn into an
 @code{\\override} when @var{item} is a symbol list.
@@ -1425,7 +1425,47 @@ property (inside of an alist) is tweaked.")
    ;; should only be attempted when the simple uses don't match the
    ;; given predicate.
    (if (ly:music? item)
-       (tweak prop value item)
+       (if (music-is-of-type? item 'context-specification)
+           ;; This is essentially dealing with the case
+           ;; \propertyTweak color #red \propertyTweak font-size #3 NoteHead
+           ;; namely when stacked tweaks end in a symbol list
+           ;; rather than a music expression.
+           ;;
+           ;; We have a tweak here to convert into an override,
+           ;; so we need to know the grob to apply it to.  That's
+           ;; easy if we have a directed tweak, and otherwise we
+           ;; need to find the symbol in the expression itself.
+           (let* ((p (check-grob-path prop (*location*)
+                                      #:start 1
+                                      #:default #t
+                                      #:min 2))
+                  (elt (ly:music-property item 'element))
+                  (seq (if (music-is-of-type? elt 'sequential-music)
+                           elt
+                           (make-sequential-music (list elt))))
+                  (elts (ly:music-property seq 'elements))
+                  (symbol (if (symbol? (car p))
+                              (car p)
+                              (and (pair? elts)
+                                   (ly:music-property (car elts)
+                                                      'symbol)))))
+             (if (symbol? symbol)
+                 (begin
+                   (set! (ly:music-property seq 'elements)
+                         (cons (make-music 'OverrideProperty
+                                           'symbol symbol
+                                           'grob-property-path (cdr p)
+                                           'pop-first #t
+                                           'grob-value value
+                                           'origin (*location*))
+                               elts))
+                   (set! (ly:music-property item 'element) seq))
+                 (begin
+                   (ly:parser-error (_ "Cannot \\propertyTweak")
+                                    (*location*))
+                   (ly:music-message item (_ "untweakable"))))
+             item)
+           (tweak prop value item))
        (propertyOverride (append item (if (symbol? prop) (list prop) prop))
                          value)))
 
@@ -1590,7 +1630,7 @@ a context modification duplicating their effect.")
 
 shape =
 #(define-music-function (offsets item)
-   (list? symbol-list-or-music?)
+   (list? key-list-or-music?)
    (_i "Offset control-points of @var{item} by @var{offsets}.  The
 argument is a list of number pairs or list of such lists.  Each
 element of a pair represents an offset to one of the coordinates of a
@@ -1847,7 +1887,7 @@ command without explicit @samp{tuplet-span}, use
 
 tweak =
 #(define-music-function (prop value music)
-   (symbol-list-or-symbol? scheme? ly:music?)
+   (key-list-or-symbol? scheme? ly:music?)
    (_i "Add a tweak to the following @var{music}.
 Layout objects created by @var{music} get their property @var{prop}
 set to @var{value}.  If @var{prop} has the form @samp{Grob.property}, like with
@@ -1868,41 +1908,6 @@ property (inside of an alist) is tweaked.")
            ;; p now contains at least two elements.  The first
            ;; element is #t when no grob has been explicitly
            ;; specified, otherwise it is a grob name.
-           ((music-is-of-type? music 'context-specification)
-            ;; This is essentially dealing with the case
-            ;; \tweak color #red \propertyTweak font-size #3 NoteHead
-            ;; namely when stacked tweaks end in a symbol list
-            ;; rather than a music expression.
-            ;;
-            ;; We have a tweak here to convert into an override,
-            ;; so we need to know the grob to apply it to.  That's
-            ;; easy if we have a directed tweak, and otherwise we
-            ;; need to find the symbol in the expression itself.
-            (let* ((elt (ly:music-property music 'element))
-                   (seq (if (music-is-of-type? elt 'sequential-music)
-                            elt
-                            (make-sequential-music (list elt))))
-                   (elts (ly:music-property seq 'elements))
-                   (symbol (if (symbol? (car p))
-                               (car p)
-                               (and (pair? elts)
-                                    (ly:music-property (car elts)
-                                                       'symbol)))))
-              (if (symbol? symbol)
-                  (begin
-                    (set! (ly:music-property seq 'elements)
-                          (cons (make-music 'OverrideProperty
-                                            'symbol symbol
-                                            'grob-property-path (cdr p)
-                                            'pop-first #t
-                                            'grob-value value
-                                            'origin (*location*))
-                                elts))
-                    (set! (ly:music-property music 'element) seq))
-                  (begin
-                    (ly:parser-error (_ "Cannot \\tweak")
-                                     (*location*))
-                    (ly:music-message music (_ "untweakable"))))))
            (else
             (set! (ly:music-property music 'tweaks)
                   (acons (cond ((pair? (cddr p)) p)