Nicolas Sceaux <[EMAIL PROTECTED]> writes:
> 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 :
>
hm, this was not enough.
(define (read-dotted-expression chr port)
(define (gen-music-prop-expr music prop . rest)
(let ((result-expr (if (number? prop)
`(list-ref ,music ,prop)
`(ly:music-property ,music ',prop))))
(if (null? rest)
result-expr
(apply gen-music-prop-expr result-expr rest))))
(let ((tokens (map (lambda (token)
(or (string->number token)
(string->symbol token)))
(string-split (symbol->string (read port)) #\.))))
(apply gen-music-prop-expr tokens)))
(read-hash-extend #\@ read-dotted-expression)
guile> (define titi #{ \notes { c d e } #})
guile> (mus:display titi)
(make-music 'SequentialMusic
'elements (
(make-music 'SequentialMusic
'elements (
(make-music 'EventChord
'elements (
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1 1)
'pitch (ly:make-pitch -1 0 0))))
(make-music 'EventChord
'elements (
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1 1)
'pitch (ly:make-pitch -1 1 0))))
(make-music 'EventChord
'elements (
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1 1)
'pitch (ly:make-pitch -1 2 0))))))))
guile> (set! [EMAIL PROTECTED] (ly:make-pitch -1 4 0))
guile> (mus:display titi)
(make-music 'SequentialMusic
'elements (
(make-music 'SequentialMusic
'elements (
(make-music 'EventChord
'elements (
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1 1)
'pitch (ly:make-pitch -1 0 0))))
(make-music 'EventChord
'elements (
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1 1)
'pitch (ly:make-pitch -1 1 0))))
(make-music 'EventChord
'elements (
(make-music 'NoteEvent
'duration (ly:make-duration 2 0 1 1)
'pitch (ly:make-pitch -1 4 0))))))))
_______________________________________________
lilypond-devel mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/lilypond-devel