-;;;
-;;; auto-beam.scm -- Auto-beam-engraver settings
-;;;
-;;; source file of the GNU LilyPond music typesetter
-;;;
-;;; (c) 2000--2003 Jan Nieuwenhuizen <janneke@gnu.org>
-;;;
+;;;; auto-beam.scm -- Auto-beam-engraver settings
+;;;;
+;;;; source file of the GNU LilyPond music typesetter
+;;;;
+;;;; (c) 2000--2004 Jan Nieuwenhuizen <janneke@gnu.org>
;;; specify generic beam begin and end times
;;; where
;;;
;;; function = begin or end
-;;; shortest-duration-in-beam = numerator denominator; eg: 1 16
-;;; time-signature = numerator denominator, eg: 4 4
+;;; shortest-duration-in-beam = numerator denominator; e.g.: 1 16
+;;; time-signature = numerator denominator, e.g.: 4 4
;;;
;;; unspecified or wildcard entries for duration or time-signature
;;; are given by * *
;;; end beams with 16th notes each 1 4 note
;;; end beams with 32th notes each 1 8 note
-(define-public auto-beam-settings
+(define-public default-auto-beam-settings
`(
((end * * 3 2) . ,(ly:make-moment 1 2))
((end 1 16 3 2) . ,(ly:make-moment 1 4))
((end 1 16 12 8) . ,(ly:make-moment 3 8))
((end 1 32 12 8) . ,(ly:make-moment 1 8))
))
+
+
+(define (override-property-setting context context-prop setting value)
+ "Like the C++ code that executes \\override, but without type
+checking. "
+
+ (ly:context-set-property! context context-prop
+ (cons (cons setting value)
+ (ly:context-property context context-prop)
+ )
+ )
+ )
+
+(define (revert-property-setting context setting)
+ "Like the C++ code that executes \revert, but without type
+checking. "
+
+ (define (revert-assoc alist key)
+ "Return ALIST, with KEY removed. ALIST is not modified, instead
+a fresh copy of the list-head is made."
+ (cond
+ ((null? alist) '())
+ ((equal? (caar alist) key) (cdr alist))
+ (else (cons (car alist) (revert-assoc alist key)))
+ ))
+
+
+
+ (ly:context-set-property!
+ context context-prop
+ (revert-assoc (ly:context-property context context-prop)
+ setting))
+ )
+
+(define-public (override-auto-beam-setting setting num den . rest)
+ (ly:export
+ (context-spec-music
+ (make-apply-context (lambda (c)
+ (override-property-setting
+ c 'autoBeamSettings
+ setting (ly:make-moment num den))
+ ))
+ (if (and (pair? rest) (symbol? (car rest)))
+ (car rest)
+ 'Voice)
+ )))
+
+(define-public (revert-auto-beam-setting setting . rest)
+ (ly:export
+ (context-spec-music
+ (make-apply-context (lambda (c)
+ (revert-property-setting
+ c 'autoBeamSettings
+ setting)))
+ (if (and (pair? rest) (symbol? (car rest)))
+ (car rest)
+ 'Voice))))
+