\version "2.15.31" \header { texidoc = "Use @code{define-event-class}, scheme engraver methods, and grob creation methods to create a fully functional text spanner in scheme." } #(define my-grob-descriptions '()) #(define my-event-classes (ly:make-context-mod)) defineEventClass = #(define-void-function (parser location class parent) (symbol? symbol?) (ly:add-context-mod my-event-classes `(apply ,(lambda (context class parent) (ly:context-set-property! context 'EventClasses (event-class-cons class parent (ly:context-property context 'EventClasses '())))) ,class ,parent))) \defineEventClass #'scheme-text-span-event #'span-event #(define (add-grob-definition grob-name grob-entry) (let* ((meta-entry (assoc-get 'meta grob-entry)) (class (assoc-get 'class meta-entry)) (ifaces-entry (assoc-get 'interfaces meta-entry))) (set-object-property! grob-name 'translation-type? list?) (set-object-property! grob-name 'is-grob? #t) (set! ifaces-entry (append (case class ((Item) '(item-interface)) ((Spanner) '(spanner-interface)) ((Paper_column) '((item-interface paper-column-interface))) ((System) '((system-interface spanner-interface))) (else '(unknown-interface))) ifaces-entry)) (set! ifaces-entry (uniq-list (sort ifaces-entry symbol>