lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: parsing ly code from SCM


From: Nicolas Sceaux
Subject: Re: parsing ly code from SCM
Date: Sun, 25 Apr 2004 16:38:54 +0200
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Sun, 25 Apr 2004 15:36:34 +0200, Nicolas a dit : 

 > #(define (textoffset dx dy)
 >   #{ \override Voice.TextScript #'extra-offset = #(cons $dx $dy) #})

 > #(define (export-lily-expression chr port)
 >   `(ly:export ,(read port)))

 > #(read-hash-extend #\x export-lily-expression)

 > \score {
 >     \notes {
 >         c'^"normal text"
        
 >         ##x(textoffset 3 -4)
        
 >         c'^"text with offset hm"
 >     }
 > }

Another example:

#(use-modules (srfi srfi-1))

#(define (override->revert override-expr)
  "Return a revert music expression for `override-expr', or
#f if it's not an override music expression."
  (if (ly:music? override-expr)
      (let* ((override (ly:music-property override-expr 'element))
             (context (ly:music-property override-expr 'context-type))
             (property (ly:music-property override 'grob-property))
             (layout (ly:music-property override 'symbol)))
        (if (and (ly:music? override) context property layout) 
            #{ \revert $context . $layout #'$property #}
            #f))
      #f))

#(define (overrides->reverts music)
  "Return a sequential music expression with reverts for
each override found in music, which is supposed to be a music 
expression"
  (make-music 'SequentialMusic
    'elements (filter-map override->revert (ly:music-property music 
'elements))))

#(define (with-props props)
   (lambda (music)
     (set! (ly:music-property music 'elements)
           (append (ly:music-property props 'elements)
                   (ly:music-property music 'elements)
                   (ly:music-property (overrides->reverts props) 'elements)))
     music))

#(define thickTransparent 
  (with-props #{ \override Stem #'thickness = #4 
                 \override Slur #'transparent = ##t #}))

foo = \notes { c'8( d') e'( f') g'4( a') }

\score {
    \notes {
        \foo
        \apply \thickTransparent { \foo }
        \foo
    }
}
nicolas

reply via email to

[Prev in Thread] Current Thread [Next in Thread]