X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fly-syntax-constructors.scm;h=9e6325a1563b9897828eb8e8ebfa3e2cfac3fdb2;hb=2f870443addbe29bcb5495533a185b8258d62a52;hp=cd4a0f9374112a06a71d47ac106c6e3b77bc3cf5;hpb=fa2334a102b9a1a195df25f3ff28ec3b16224ad4;p=lilypond.git diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index cd4a0f9374..9e6325a156 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -78,6 +78,17 @@ (make-music 'TransposedMusic 'element (ly:music-transpose music pitch))) +(define-ly-syntax-simple (tempo duration tempo) + (context-spec-music + (make-sequential-music + (list + (make-property-set 'tempoWholesPerMinute + (ly:moment-mul (ly:make-moment tempo 1) + (ly:duration-length duration))) + (make-property-set 'tempoUnitDuration duration) + (make-property-set 'tempoUnitCount tempo))) + 'Score)) + (define-ly-syntax-simple (skip-music dur) (make-music 'SkipMusic 'duration dur)) @@ -85,14 +96,27 @@ (define-ly-syntax-simple (repeat type num body alts) (make-repeat type num body alts)) -;; UGH. TODO: represent mm rests in a decent way as music expressions. -;; Also eliminate glue-mm-rests while we are at it. +(define (script-to-mmrest-text music) + "Extract 'direction and 'text from SCRIPT-MUSIC, and transform MultiMeasureTextEvent" + + (if (memq 'script-event (ly:music-property music 'types)) + + (let* + ((dir (ly:music-property music 'direction)) + (tags (ly:music-property music 'tags)) + (p (make-music 'MultiMeasureTextEvent + 'tags tags + 'text (ly:music-property music 'text)))) + (if (ly:dir? dir) + (set! (ly:music-property p 'direction) dir)) + p) + music)) + (define-ly-syntax (multi-measure-rest parser location duration articulations) - (let* ((mus (make-multi-measure-rest duration location)) - (elts (ly:music-property mus 'elements))) - (set! (ly:music-property mus 'elements) - (append elts articulations)) - mus)) + (make-music 'MultiMeasureRestMusic + 'articulations (map script-to-mmrest-text articulations) + 'duration duration + 'origin location)) (define-ly-syntax-simple (context-specification type id mus ops create-new) (let* ((type-sym (if (symbol? type) type (string->symbol type))) @@ -108,7 +132,10 @@ ((OverrideProperty) (list 'grob-value (car args) 'grob-property-path (cdr args) 'pop-first #t)) - ((RevertProperty) (list 'grob-property-path args)) + ((RevertProperty) + (if (list? (car args)) + (list 'grob-property-path (car args)) + (list 'grob-property-path args))) (else (ly:error (_ "Invalid property operation ~a") music-type)))) (oprops (if once (cons* 'once once props) props)) (m (apply make-music music-type