X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-music-types.scm;h=b59e9ff0f187ef0616543316f528760b7e4321f4;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=a39ad23002b9bf1d4edbd26bf08d7210dc11812b;hpb=a75190dd0a48ac1a8e436cd9867542f4774af36b;p=lilypond.git diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index a39ad23002..b59e9ff0f1 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -1,6 +1,6 @@ ;;;; This file is part of LilyPond, the GNU music typesetter. ;;;; -;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys +;;;; Copyright (C) 1998--2015 Han-Wen Nienhuys ;;;; Jan Nieuwenhuizen ;;;; ;;;; 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)))