X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fly-syntax-constructors.scm;h=ee798233611a6a65361f1fae414962848a9f3cfa;hb=cb47f0d75cc88e34d5cb06fcfbf4104ce0780c90;hp=cd4a0f9374112a06a71d47ac106c6e3b77bc3cf5;hpb=3ce3a814dbbeec888397b07fb1e9e4d485948a4b;p=lilypond.git diff --git a/scm/ly-syntax-constructors.scm b/scm/ly-syntax-constructors.scm index cd4a0f9374..ee79823361 100644 --- a/scm/ly-syntax-constructors.scm +++ b/scm/ly-syntax-constructors.scm @@ -78,6 +78,30 @@ (make-music 'TransposedMusic 'element (ly:music-transpose music pitch))) +(define-ly-syntax-simple (tempo text duration tempo) + (let ((props (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)))) + (set! props (cons + (if text (make-property-set 'tempoText text) + (make-property-unset 'tempoText)) + props)) + (context-spec-music + (make-sequential-music props) + 'Score))) + +(define-ly-syntax-simple (tempoText text) + (context-spec-music + (make-sequential-music + (list + (make-property-unset 'tempoUnitDuration) + (make-property-unset 'tempoUnitCount) + (make-property-set 'tempoText text))) + 'Score)) + (define-ly-syntax-simple (skip-music dur) (make-music 'SkipMusic 'duration dur)) @@ -85,14 +109,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))) @@ -106,9 +143,14 @@ ((PropertySet) (list 'value (car args))) ((PropertyUnset) '()) ((OverrideProperty) (list 'grob-value (car args) - 'grob-property-path (cdr args) + 'grob-property-path (if (list? (cadr args)) + (cadr args) + (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