Le 9 févr. 2010 à 14:42, David Kastrup a écrit : > I find that syntax tiresome to read. It requires evaluation and thus > does not have a close correspondence to print syntax. > > That's partly because of the way the Scheme engraver example has been > written. > > I'd much prefer it to use backquote syntax, such as
A real improvement would be to add syntax to define scheme engravers, something like: #(define-engraver example-engraver) #(define-engraver-method example-engraver initialize (trans) (display (list "initialize" (ly:context-current-moment (ly:translator-context trans)) "\n"))) #(define-engraver-listener example-engraver rest-event (engraver event) (let* ((x (ly:engraver-make-grob engraver 'TextScript event))) (display (list "caught event" event "\ncreate:\n" x "\n")) (ly:grob-set-property! x 'text "hi"))) \layout { \context { \Voice \consists #example-engraver } } I'm using these macros to experiment with scheme engravers. Although the syntax is not the most eleguant, and can be improved, it make things a bit more readable. %%% %%% Engraver definition utilities %%% #(define-macro (define-engraver name) `(define ,name (list))) #(define-macro (define-engraver-method engraver method arg-list . body) `(set! ,engraver (cons (cons ',method (lambda ,arg-list ,@body)) ,engraver))) #(define-macro (define-engraver-alist-method engraver key1 key2 arg-list . body) (let ((assoc-result (gensym)) (methods (gensym))) `(let* ((,assoc-result (assq ',key1 ,engraver)) (,methods (if ,assoc-result (cdr ,assoc-result) (list)))) (set! ,engraver (assoc-set! ,engraver ',key1 (assoc-set! ,methods ',key2 (lambda ,arg-list ,@body))))))) #(define-macro (define-engraver-listener engraver event-type arg-list . body) `(define-engraver-alist-method ,engraver listeners ,event-type ,arg-list ,@body)) #(define-macro (define-engraver-acknowledger engraver interface arg-list . body) `(define-engraver-alist-method ,engraver acknowledgers ,interface ,arg-list ,@body)) #(define-macro (define-engraver-end-acknowledger engraver interface arg-list . body) `(define-engraver-alist-method ,engraver end-acknowledgers ,interface ,arg-list ,@body)) Nicolas _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel