X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-event-classes.scm;h=c8ecbcf22709dd6a6750315d1d9f8e033ad0c570;hb=8b39eb741ede02e7e930fbf6ac107c76133d02fd;hp=51709463db64d6e9c334fd43e1b5769550eee029;hpb=c8e0c11cd618db0ad8af087da74a704b284add35;p=lilypond.git diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index 51709463db..c8ecbcf227 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -44,9 +44,11 @@ (break-event . (line-break-event page-break-event page-turn-event)) (dynamic-event . (absolute-dynamic-event)) (span-event . (span-dynamic-event beam-event episema-event ligature-event - pedal-event phrasing-slur-event slur-event staff-span-event - text-span-event trill-span-event tremolo-span-event - tuplet-span-event)) + measure-counter-event pedal-event + phrasing-slur-event slur-event + staff-span-event text-span-event + trill-span-event tremolo-span-event + tuplet-span-event)) (span-dynamic-event . (decrescendo-event crescendo-event)) (break-span-event . (break-dynamic-span-event)) (pedal-event . (sostenuto-event sustain-event una-corda-event)) @@ -72,47 +74,19 @@ (acons elt lineage alist)) classlist class)))) -(define all-event-classes - (fold (lambda (elt classlist) - (event-class-cons (cdr elt) (car elt) classlist)) - '() event-classes)) - -;; Maps event-class to a list of ancestors (inclusive) -(define-public ancestor-lookup - (let ((h (make-hash-table (length all-event-classes)))) - (for-each (lambda (ent) (hashq-set! h (car ent) ent)) - all-event-classes) - h)) - - ;; Each class will be defined as ;; (class parent grandparent .. ) ;; so that (eq? (cdr class) parent) holds. -(define-public (define-event-class leaf heritage) - (cond - ((not (eq? leaf (car heritage))) - (ly:warning (_ "All classes must be the last in their matrilineal line."))) - ((not (equal? (cdr heritage) - (list-head (hashq-ref ancestor-lookup (cadr heritage) '()) - (length (cdr heritage))))) - (ly:warning (_ "All classes must have a well-defined pedigree in the existing class hierarchy."))) - (else (hashq-set! ancestor-lookup - leaf - (cons leaf - (hashq-ref ancestor-lookup - (cadr heritage) - '()))))) - *unspecified*) - -;; TODO: Allow entering more complex classes, by taking unions. -(define-public (ly:make-event-class leaf) - (hashq-ref ancestor-lookup leaf)) - (define-public (ly:in-event-class? ev cl) "Does event @var{ev} belong to event class @var{cl}?" (memq cl (ly:event-property ev 'class))) +(define-public all-event-classes + (fold (lambda (elt classlist) + (event-class-cons (cdr elt) (car elt) classlist)) + '() event-classes)) + ;; does this exist in guile already? (define (map-tree f t) (cond @@ -166,7 +140,7 @@ (list 'unquote `(ly:make-moment ,(ly:moment-main-numerator e) ,(ly:moment-main-denominator e) - . ,(if (eq? 0 (ly:moment-grace-numerator e)) + . ,(if (zero? (ly:moment-grace-numerator e)) '() (list (ly:moment-grace-numerator e) (ly:moment-grace-denominator e)))))) @@ -174,8 +148,7 @@ (list 'unquote `(ly:make-duration ,(ly:duration-log e) ,(ly:duration-dot-count e) - ,(car (ly:duration-factor e)) - ,(cdr (ly:duration-factor e))))) + ,(ly:duration-scale)))) ((ly:pitch? e) (list 'unquote `(ly:make-pitch ,(ly:pitch-octave e)