-;;;; (c) 2000--2009 Jan Nieuwenhuizen <janneke@gnu.org>
-
-;;; specify generic beam end times
-
-;;; format:
-;;;
-;;; function shortest-duration-in-beam time-signature
-;;;
-;;; where
-;;;
-;;; function = begin or end
-;;; 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 * *
-
-;;; maybe do: '(end shortest-1 16 time-3 4) ?
-
-(define-public default-auto-beam-settings
- `(
- ;; in 2 2 time:
- ;; use beatLength for all except 32nd notes
- ;; end beams with 32nd notes each 1 4 beat
-
- ((end 1 32 2 2) . ,(ly:make-moment 1 4))
- ((end 1 32 2 2) . ,(ly:make-moment 2 4))
- ((end 1 32 2 2) . ,(ly:make-moment 3 4))
-
- ;; in 3 2 time:
- ;; use beatLength for all except 16th and 32nd notes
- ;; end beams with 16th notes each 1 4 beat
- ;; end beams with 32nd notes each 1 8 beat
-
- ((end 1 16 3 2) . ,(ly:make-moment 1 4))
- ((end 1 16 3 2) . ,(ly:make-moment 2 4))
- ((end 1 16 3 2) . ,(ly:make-moment 3 4))
- ((end 1 16 3 2) . ,(ly:make-moment 4 4))
- ((end 1 16 3 2) . ,(ly:make-moment 5 4))
-
- ((end 1 32 3 2) . ,(ly:make-moment 1 8))
- ((end 1 32 3 2) . ,(ly:make-moment 2 8))
- ((end 1 32 3 2) . ,(ly:make-moment 3 8))
- ((end 1 32 3 2) . ,(ly:make-moment 4 8))
- ((end 1 32 3 2) . ,(ly:make-moment 5 8))
- ((end 1 32 3 2) . ,(ly:make-moment 6 8))
- ((end 1 32 3 2) . ,(ly:make-moment 7 8))
- ((end 1 32 3 2) . ,(ly:make-moment 8 8))
- ((end 1 32 3 2) . ,(ly:make-moment 9 8))
- ((end 1 32 3 2) . ,(ly:make-moment 10 8))
- ((end 1 32 3 2) . ,(ly:make-moment 11 8))
-
- ;; in 2 4 time:
- ;; use beatLength for all except 32nd notes
- ;; end beams with 32nd notes each 1 8 beat
-
- ((end 1 32 2 4) . ,(ly:make-moment 1 8))
- ((end 1 32 2 4) . ,(ly:make-moment 2 8))
- ((end 1 32 2 4) . ,(ly:make-moment 3 8))
-
- ;; in 3 4 time:
- ;; override beatLength which would end beams at 1 4 beats
- ;; end beams with 16th notes each 1 4 beat
- ;; end beams with 32nd notes each 1 8 beat
-
- ((end * * 3 4) . ,(ly:make-moment 3 4))
- ((end 1 16 3 4) . ,(ly:make-moment 1 4))
- ((end 1 16 3 4) . ,(ly:make-moment 2 4))
- ((end 1 32 3 4) . ,(ly:make-moment 1 8))
- ((end 1 32 3 4) . ,(ly:make-moment 2 8))
- ((end 1 32 3 4) . ,(ly:make-moment 3 8))
- ((end 1 32 3 4) . ,(ly:make-moment 4 8))
- ((end 1 32 3 4) . ,(ly:make-moment 5 8))
-
- ;; in common time:
- ;; override beatLength which would end beams at 1 4 beats
- ;; end all beams at 1 2 beat
- ;; end beams with 8th triplets each 1 4 beat
- ;; end beams with 16th notes each 1 4 beat
- ;; end beams with 32nd notes each 1 8 beat
-
- ((end * * 4 4) . ,(ly:make-moment 1 2))
-
- ((end 1 12 4 4) . ,(ly:make-moment 1 4))
- ((end 1 12 4 4) . ,(ly:make-moment 3 4))
-
- ((end 1 16 4 4) . ,(ly:make-moment 1 4))
- ((end 1 16 4 4) . ,(ly:make-moment 3 4))
-
- ((end 1 32 4 4) . ,(ly:make-moment 1 8))
- ((end 1 32 4 4) . ,(ly:make-moment 2 8))
- ((end 1 32 4 4) . ,(ly:make-moment 3 8))
- ((end 1 32 4 4) . ,(ly:make-moment 5 8))
- ((end 1 32 4 4) . ,(ly:make-moment 6 8))
- ((end 1 32 4 4) . ,(ly:make-moment 7 8))
-
- ;; in 3 8 time:
- ;; override beatLength which would end beams at 1 8 beats
-
- ((end * * 3 8) . ,(ly:make-moment 3 8))
-
- ;; in 4 8 time
- ;; override beatLength which would end beams at 1 8 beats
- ;; end all beams at 1 4 beat
- ;; end beams with 32nd notes each 1 8 beat
-
- ((end * * 4 8) . ,(ly:make-moment 1 4))
- ((end 1 32 4 8) . ,(ly:make-moment 1 8))
- ((end 1 32 4 8) . ,(ly:make-moment 3 8))
-
- ;; in 6 8, 9 8 and 12 8 time:
- ;; use beatGrouping for all except 32nd notes
- ;; end beams with 32nd notes each 1 8 beat
-
- ((end 1 32 6 8) . ,(ly:make-moment 1 8))
- ((end 1 32 6 8) . ,(ly:make-moment 2 8))
- ((end 1 32 6 8) . ,(ly:make-moment 3 8))
- ((end 1 32 6 8) . ,(ly:make-moment 4 8))
- ((end 1 32 6 8) . ,(ly:make-moment 5 8))
-
- ((end 1 32 9 8) . ,(ly:make-moment 1 8))
- ((end 1 32 9 8) . ,(ly:make-moment 2 8))
- ((end 1 32 9 8) . ,(ly:make-moment 3 8))
- ((end 1 32 9 8) . ,(ly:make-moment 4 8))
- ((end 1 32 9 8) . ,(ly:make-moment 5 8))
- ((end 1 32 9 8) . ,(ly:make-moment 6 8))
- ((end 1 32 9 8) . ,(ly:make-moment 7 8))
- ((end 1 32 9 8) . ,(ly:make-moment 8 8))
-
- ((end 1 32 12 8) . ,(ly:make-moment 1 8))
- ((end 1 32 12 8) . ,(ly:make-moment 2 8))
- ((end 1 32 12 8) . ,(ly:make-moment 3 8))
- ((end 1 32 12 8) . ,(ly:make-moment 4 8))
- ((end 1 32 12 8) . ,(ly:make-moment 5 8))
- ((end 1 32 12 8) . ,(ly:make-moment 6 8))
- ((end 1 32 12 8) . ,(ly:make-moment 7 8))
- ((end 1 32 12 8) . ,(ly:make-moment 8 8))
- ((end 1 32 12 8) . ,(ly:make-moment 9 8))
- ((end 1 32 12 8) . ,(ly:make-moment 10 8))
- ((end 1 32 12 8) . ,(ly:make-moment 11 8))
-
- ;; in 4 16 time
- ;; end all beams each 1 8 beat
-
- ((end * * 4 16) . ,(ly:make-moment 1 8))
-
- ))
-
-(define (override-property-setting context property setting value)
- "Like the C++ code that executes \\override, but without type
-checking. "
- (ly:context-set-property!
- context property
- (cons (cons setting value) (ly:context-property context property))))
-
-(define (revert-property-setting context property setting)
- "Like the C++ code that executes \revert, but without type
-checking. "
-
- (define (revert-member alist entry new)
- "Return ALIST, with ENTRY removed. ALIST is not modified, instead
-a fresh copy of the list-head is made."
- (cond
- ((null? alist) new)
- ((equal? (car alist) entry) (revert-member (cdr alist) entry new))
- (else (revert-member (cdr alist) entry (cons (car alist) new)))))
-
- (ly:context-set-property!
- context property
- (revert-member (ly:context-property context property) 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 (score-override-auto-beam-setting setting num den)
- (override-auto-beam-setting setting num den 'Score))
-
-(define-public (revert-auto-beam-setting setting num den . rest)
- (ly:export
- (context-spec-music
- (make-apply-context
- (lambda (c)
- (revert-property-setting
- c 'autoBeamSettings
- (cons setting (ly:make-moment num den)))))
- (if (and (pair? rest) (symbol? (car rest)))
- (car rest)
- 'Voice))))