]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-music-types.scm
Run grand replace for 2015.
[lilypond.git] / scm / define-music-types.scm
index a39ad23002b9bf1d4edbd26bf08d7210dc11812b..b59e9ff0f187ef0616543316f528760b7e4321f4 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
-;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 ;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;
 ;;;; LilyPond is free software: you can redistribute it and/or modify
@@ -128,7 +128,7 @@ Syntax for manual control: @code{c8-[ c c-] c8}")
 Syntax: @var{note}@code{\\breathe}")
 
         (types . (general-music event breathing-event))
-        ))
+        (midi-length . ,breathe::midi-length)))
 
     (ClusterNoteEvent
      . ((description . "A note that is part of a cluster.")
@@ -666,6 +666,11 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g.,
         (types . (general-music time-signature-music))
         ))
 
+    (TimeSignatureEvent
+     . ((description . "An event created when setting a new time signature")
+        (types . (general-music event time-signature-event))
+        ))
+
     (TransposedMusic
      . ((description . "Music that has been transposed.")
         (iterator-ctor . ,ly:music-wrapper-iterator::constructor)
@@ -685,8 +690,7 @@ Syntax: @code{\\times @var{fraction} @var{music}}, e.g.,
      . ((description . "Repeated notes denoted by tremolo beams.")
         (iterator-ctor . ,ly:chord-tremolo-iterator::constructor)
         (start-callback .  ,ly:repeated-music::first-start)
-        ;; the length of the repeat is handled by shifting the note logs
-        (length-callback . ,ly:repeated-music::folded-music-length)
+        (length-callback . ,ly:repeated-music::unfolded-music-length)
         (types . (general-music repeated-music tremolo-repeated-music))
         ))
 
@@ -712,8 +716,8 @@ brackets start and stop.")
         ))
 
     (UnfoldedRepeatedMusic
-     . ((description . "Repeated music which is fully written
-(and played) out.")
+     . ((description . "Repeated music which is fully written (and
+played) out.")
         (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
         (start-callback .  ,ly:repeated-music::first-start)
         (types . (general-music repeated-music unfolded-repeated-music))
@@ -775,34 +779,43 @@ Syntax: @code{\\\\}")
   "Create a music object of given name, and set its properties
 according to @code{music-properties}, a list of alternating property symbols
 and values. E.g:
+@example
   (make-music 'OverrideProperty
               'symbol 'Stem
               'grob-property 'thickness
-              'grob-value (* 2 1.5))"
+              'grob-value (* 2 1.5))
+@end example
+Instead of a successive symbol and value, an entry in the list may
+also be an alist or a music object in which case its elements,
+respectively its @emph{mutable} property list (properties not inherent
+to the type of the music object) will get taken.
+
+The argument list will be interpreted left-to-right, so later entries
+override earlier ones."
   (if (not (symbol? name))
       (ly:error (_ "symbol expected: ~S") name))
   (let ((props (hashq-ref music-name-to-property-table name '())))
     (if (not (pair? props))
         (ly:error (_ "cannot find music object: ~S") name))
     (let ((m (ly:make-music props)))
+      (define (alist-set-props lst)
+        (for-each (lambda (e)
+                    (set! (ly:music-property m (car e)) (cdr e)))
+                  (reverse lst)))
       (define (set-props mus-props)
-        (if (and (not (null? mus-props))
-                 (not (null? (cdr mus-props))))
-            (begin
-              (set! (ly:music-property m (car mus-props)) (cadr mus-props))
-              (set-props (cddr mus-props)))))
+        (if (pair? mus-props)
+            (let ((e (car mus-props))
+                  (mus-props (cdr mus-props)))
+              (cond ((symbol? e)
+                     (set! (ly:music-property m e) (car mus-props))
+                     (set-props (cdr mus-props)))
+                    ((ly:music? e)
+                     (alist-set-props (ly:music-mutable-properties e))
+                     (set-props mus-props))
+                    ((cheap-list? e)
+                     (alist-set-props e)
+                     (set-props mus-props))
+                    (else
+                     (ly:error (_ "bad make-music argument: ~S") e))))))
       (set-props music-properties)
       m)))
-
-(define-public (make-repeated-music name)
-  (let* ((repeated-music (assoc-get name '(("volta" . VoltaRepeatedMusic)
-                                           ("unfold" . UnfoldedRepeatedMusic)
-                                           ("percent" . PercentRepeatedMusic)
-                                           ("tremolo" . TremoloRepeatedMusic))))
-         (repeated-music-name (if repeated-music
-                                  repeated-music
-                                  (begin
-                                    (ly:warning (_ "unknown repeat type `~S'") name)
-                                    (ly:warning (_ "See define-music-types.scm for supported repeats"))
-                                    'VoltaRepeatedMusic))))
-    (make-music repeated-music-name)))