From: David Kastrup Date: Fri, 5 Jul 2013 16:23:28 +0000 (+0200) Subject: Issue 3439: Create a two-argument form of define-event-class X-Git-Tag: release/2.17.22-1~7 X-Git-Url: https://git.donarmstrong.com/lilypond.git?a=commitdiff_plain;h=e5f1f0e94c271d556bbcb77e565a6a70cbda2584;p=lilypond.git Issue 3439: Create a two-argument form of define-event-class This definition of define-event-class just specifies the event class symbol itself as well as its immediate parent class. Redefining existing event classes is not (yet?) supported. --- diff --git a/input/regression/scheme-text-spanner.ly b/input/regression/scheme-text-spanner.ly index e4d84a1cbb..309fdd6926 100644 --- a/input/regression/scheme-text-spanner.ly +++ b/input/regression/scheme-text-spanner.ly @@ -6,11 +6,7 @@ and grob creation methods to create a fully functional text spanner in scheme." } -#(define-event-class 'scheme-text-span-event - '(scheme-text-span-event - span-event - music-event - StreamEvent)) +#(define-event-class 'scheme-text-span-event 'span-event) #(define (add-grob-definition grob-name grob-entry) (let* ((meta-entry (assoc-get 'meta grob-entry)) diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index 84f8a14798..dd6405a73e 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -98,21 +98,20 @@ ;; (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*) +(define-public (define-event-class class parent) + "Defines a new event @code{class} derived from @code{parent}, a +previously defined event class." + (let ((parentclass (ly:make-event-class parent))) + (cond + ((ly:make-event-class class) + (ly:error (_ "Cannot redefine event class `~S'") class)) + ((not parentclass) + (ly:error (_ "Undefined parent event class `~S'" parentclass))) + (else + (hashq-set! ancestor-lookup + class + (cons class parentclass)))) + *unspecified*)) ;; TODO: Allow entering more complex classes, by taking unions. (define-public (ly:make-event-class leaf)