Hello,
Manipulating music expressions makes me impatient and lazy (don't know
about hubris). Here is a little utility which can be used as a
shortcut for ly:music-property :
(define (read-dotted-expression chr port)
(define (gen-music-prop-expr music prop . rest)
(if (null? rest)
`(ly:music-property ,music ',prop)
(apply gen-music-prop-expr `(ly:music-property ,music ',prop) rest)))
(let ((tokens (map string->symbol (string-split (symbol->string (read port)) #\.))))
(apply gen-music-prop-expr tokens)))
(read-hash-extend #\@ read-dotted-expression)
It has some limitations: the symbols (music variable and property
names) must not have dots. Example of use:
guile> (define toto (car (ly:music-property #{ \override TextScript #'padding = #4 #}
'elements)))
guile> (mus:display toto)
(make-music 'ContextSpeccedMusic
'property-operations ()
'context-type 'Bottom
'element (make-music 'OverrideProperty
'pop-first #t
'grob-property 'padding
'grob-value 4
'symbol 'TextScript))
guile> (mus:display [EMAIL PROTECTED])
(make-music 'OverrideProperty
'pop-first #t
'grob-property 'padding
'grob-value 4
'symbol 'TextScript)
guile> (set! [EMAIL PROTECTED] 'extra-offset)
guile> (set! [EMAIL PROTECTED] (cons 1 2))
guile> (mus:display toto)
(make-music 'ContextSpeccedMusic
'property-operations ()
'context-type 'Bottom
'element (make-music 'OverrideProperty
'pop-first #t
'grob-property 'extra-offset
'grob-value (1 . 2)
'symbol 'TextScript))
guile> (let ((override-property [EMAIL PROTECTED]))
(set! [EMAIL PROTECTED] (cons 2 3)))
guile> (mus:display toto)
(make-music 'ContextSpeccedMusic
'property-operations ()
'context-type 'Bottom
'element (make-music 'OverrideProperty
'pop-first #t
'grob-property 'extra-offset
'grob-value (2 . 3)
'symbol 'TextScript))
guile>
nicolas
_______________________________________________
lilypond-devel mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/lilypond-devel