;;;; 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
))
(AlternativeEvent
- . ((description . "Create a alternative event.")
+ . ((description . "Create an alternative event.")
(types . (general-music event alternative-event))
))
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.")
(PartialSet
. ((description . "Create an anacrusis or upbeat (partial measure).")
(iterator-ctor . ,ly:partial-iterator::constructor)
+ ;; The length-callback is kind of cheesy since 'elements is
+ ;; empty. We just use that in order to get a zero length
+ ;; for the overall timing in spite of having a non-zero
+ ;; duration field.
+ (length-callback . ,ly:music-sequence::cumulative-length-callback)
(types . (general-music partial-set))
))
(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)
. ((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))
))
))
(UnfoldedRepeatedMusic
- . ((description . "Repeated music which is fully written
-(and played) out.")
- (iterator-ctor . ,ly:unfolded-repeat-iterator::constructor)
+ . ((description . "Repeated music which is fully written (and
+played) out.")
+ (iterator-ctor . ,ly:sequential-iterator::constructor)
+ (elements-callback . ,make-unfolded-set)
(start-callback . ,ly:repeated-music::first-start)
(types . (general-music repeated-music unfolded-repeated-music))
(length-callback . ,ly:repeated-music::unfolded-music-length)
"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)))