X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fdefine-event-classes.scm;h=f631bcddc0b9f8365eb3d8bf8688e10f810fccf2;hb=23e9acfb081e6d194b63fa185bf54b34bb425c59;hp=e1f3b4aa33b3122aff4d30b256c079c83bc6b8fc;hpb=3a8ec248ca3bd6bd04490f386949a95a4140338d;p=lilypond.git diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index e1f3b4aa33..f631bcddc0 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -72,6 +72,21 @@ (cdr rel))) event-classes) +(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) + '())))))) + ;; TODO: Allow entering more complex classes, by taking unions. (define-public (ly:make-event-class leaf) (hashq-ref ancestor-lookup leaf))