[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
\apply nest-props Re: constructive criticism
From: |
Nicolas Sceaux |
Subject: |
\apply nest-props Re: constructive criticism |
Date: |
Sat, 10 Jan 2004 18:39:18 +0100 |
User-agent: |
Gnus/5.1002 (Gnus v5.10.2) Emacs/21.3 (gnu/linux) |
Thu, 8 Jan 2004 12:00:14 +0100, Han-Wen a dit :
> Come to think of it, this form of \with is superfluous. It is possible
> to write it with something like
> \apply #(nest-props '((Stem thickness 4) (Slur transparent #t)))
> { .. }
> where nest-props takes care of pre- and appending the appropriate
> settings.
for the record, here is a possible implementation (using lily 2.1.0):
----------------------------------------------------
#(use-modules (ice-9 optargs))
#(define-public (nthcdr n source)
(do ((rest source (if (pair? rest) (cdr rest)))
(i 0 (1+ i)))
((= i n) rest)))
#(define-public (group source n)
(if (zero? n) (error "zero length"))
(letrec ((rec (lambda (source acc)
(let ((rest (nthcdr n source)))
(if (pair? rest)
(rec rest (cons (list-head source n) acc))
(reverse! (cons source acc)))))))
(if (null? source) '() (rec source '()))))
#(defmacro* make-music (name #:rest props)
"Make a music expression, of type `name' (a non quoted symbol).
`props' describe the music expression properties. For isntance:
(make-music PropertySet
symbol 'autoBeaming
value #f)"
(let ((prop-clauses (group props 2))
(gmus (gensym)))
`(let ((,gmus (make-music-by-name ',name)))
,@(map (lambda (clause)
`(ly:set-mus-property! ,gmus ',(car clause) ,(cadr clause)))
prop-clauses)
,gmus)))
#(defmacro* context-override (context property setting value #:key (once #f))
"Make a ContextSpeccedMusic with OverrideProperty element, similar to:
[\\once] \\property context.property \override #'setting = #value"
`(context-spec-music
(make-music OverrideProperty
once ,once
symbol ',property
grob-property ',setting
grob-value ,value)
',context))
#(defmacro context-revert (context property setting)
"Make a ContextSpeccedMusic with RevertProperty element, similar to:
\\property context.property \revert #'setting"
`(context-spec-music
(make-music RevertProperty
symbol ',property
grob-property ',setting)
',context))
#(defmacro* nest-props (#:rest prop-clauses)
`(lambda (mus)
(ly:set-mus-property! mus 'elements
(list
,@(map (lambda (prop-clause)
`(context-override ,@prop-clause))
prop-clauses)
(make-music SequentialMusic elements (ly:get-mus-property mus 'elements))
,@(map (lambda (prop-clause)
`(context-revert ,(car prop-clause) ,(cadr prop-clause) ,(caddr
prop-clause)))
prop-clauses)))
mus))
titi = \notes { c'8( d') e'( f') g'4( a') }
\score {
\notes {
\titi
\apply #(nest-props (Voice Stem thickness 4)
(Voice Slur transparent #t))
{ \titi }
\titi
}
}
----------------------------------------------------
test-nest-props.preview.png
Description: PNG image
nicolas
Re: constructive criticism, Nicolas Sceaux, 2004/01/07
- Re: constructive criticism, Mats Bengtsson, 2004/01/08
- Re: constructive criticism, Han-Wen Nienhuys, 2004/01/08
- Re: constructive criticism, Jan Nieuwenhuizen, 2004/01/08
- Re: constructive criticism, Han-Wen Nienhuys, 2004/01/08
- Re: constructive criticism, Mats Bengtsson, 2004/01/08
\apply nest-props Re: constructive criticism,
Nicolas Sceaux <=
Re: constructive criticism, Nicolas Sceaux, 2004/01/09