;;;; This file is part of LilyPond, the GNU music typesetter.
;;;;
-;;;; Copyright (C) 2009--2011 Carl Sorensen <c_sorensen@byu.edu>
+;;;; Copyright (C) 2009--2012 Carl Sorensen <c_sorensen@byu.edu>
;;;;
;;;; LilyPond is free software: you can redistribute it and/or modify
;;;; it under the terms of the GNU General Public License as published by
;;; If an exception is specified for a given beam-type, it will apply to all
;;; beams of shorter durations that don't have an individual exception, so
;;; ((1 . 8) . (3 3 2))
-;;; will cause all primary beams to be broken at 3/8, 5/8, and 8/8.
+;;; will cause all primary beams to be broken at 3/8, 6/8, and 8/8.
;;;
-;;; ((1. 32) . (16 8 4 4))
+;;; ((1 . 32) . (16 8 4 4))
;;; will cause all 1/32, 1/64, and 1/128 beams to be broken at 1/2, 3/4,
;;; 7/8, and 8/8.
;;;
;;; a list of (1 1 1 ...), where the number of entries is the
;;; number of base moments in a measure otherwise.
;;;
-;;; If no value is given for beatCombinations, no beats will be combined without
-;;; beamExceptions rules.
-;;;
;;; NOTE: numerator is kept in beam-type because of
;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8)
;;; for eighth-note triplets.
+;;;
(define-public default-time-signature-settings
'(
;; combine beats 1 and 2, so beam in 2
((4 . 8) . ((beatStructure . (2 2))))
- ;; in 4/8 and 4/16 time:
+ ;; in 4/16 time:
;; use defaults, so no entries necessary
;; in 6 4 time:
((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4))))))))
;; in 6 8 time:
- ;; use defaults, but end beams with 32nd or finer each 1 8 beat
- ((6 . 8) .
- ((beamExceptions . ((end . (((1 . 32) . (4 4 4 4 4 4))))))))
+ ;; use defaults, so no entries necessary
;; in 6 16 time:
- ;; use defaults, so no entry necessary
+ ;; use defaults, so no entries necessary
;; in 9 4 time:
;; use defaults, but end beams with 32nd or finer each 1 4 beat
((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8))))))))
;; in 9 8 time
- ;; use defaults, but end beams with 32nd notes each 1 8 beat
- ((9 . 8) .
- ((beamExceptions . ((end . (((1 . 32) . (4 4 4 4 4 4 4 4 4))))))))
+ ;; use defaults, so no entries necessary
;; in 9 16 time
- ;; use defaults, so no entry necessary
+ ;; use defaults, so no entries necessary
;; in 12 4 time:
;; use defaults, but end beams with 32nd or finer notes each 1 4 beat
((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8 8 8 8 8))))))))
;; in 12 8 time:
- ;; use defaults, but end beams with 32nd notes each 1 8 beat
- ((12 . 8) .
- ((beamExceptions . ((end . (((1 . 32) . (4 4 4 4 4 4 4 4 4 4 4 4))))))))
+ ;; use defaults, so no entries necessary
;; in 12 16 time:
- ;; use defaults; no entry needed
+ ;; use defaults, so no entries necessary
;; in 5 8 time:
;; default: group (3 2)
((5 . 8) .
- ((baseMoment . (1 . 8))
- (beatStructure . (3 2))))
+ ((beatStructure . (3 2))))
;; in 8 8 time:
;; default: group (3 3 2)
((8 . 8) .
- ((baseMoment . (1 . 8))
- (beatStructure . (3 3 2))))
+ ((beatStructure . (3 3 2))))
)) ; end of alist definition
beat-structure
beam-exceptions)
(list
- (cons 'baseMoment base-fraction)
+ (cons 'baseMoment (if (pair? base-fraction)
+ (/ (car base-fraction) (cdr base-fraction))
+ base-fraction))
(cons 'beatStructure beat-structure)
(cons 'beamExceptions beam-exceptions)))
-(define-public (base-fraction time-signature time-signature-settings)
- "Get @code{baseMoment} fraction value for @var{time-signature} from
+(define-public (base-length time-signature time-signature-settings)
+ "Get @code{baseMoment} rational value for @var{time-signature} from
@var{time-signature-settings}."
(let ((return-value (get-setting 'baseMoment
time-signature
time-signature-settings)))
(if (null? return-value)
- (cons 1 (cdr time-signature))
+ (/ (cdr time-signature))
return-value)))
-(define-public (beat-structure base-fraction time-signature time-signature-settings)
- "Get @code{beatStructure} value in @var{base-fraction} units
+(define-public (beat-structure base-length time-signature time-signature-settings)
+ "Get @code{beatStructure} value in @var{base-length} units
for @var{time-signature} from @var{time-signature-settings}."
- (define (fraction-divide numerator denominator)
- (/ (* (car numerator) (cdr denominator))
- (* (cdr numerator) (car denominator))))
(let ((return-value (get-setting 'beatStructure
time-signature
(zero? (remainder numerator 3)))
3
1))
- (beat-length (cons (* group-size (car base-fraction))
- (cdr base-fraction)))
- (beat-count (fraction-divide time-signature beat-length)))
+ (beat-count (/ (car time-signature)
+ (cdr time-signature)
+ base-length
+ group-size)))
(if (integer? beat-count)
(make-list beat-count group-size)
'()))
"Like the C++ code that executes \\override, but without type
checking."
(begin
- (revert-property-setting context property setting)
(ly:context-set-property!
context
property
;; body of revert-property-setting
(let ((current-value (ly:context-property context property)))
- (if (> (entry-count current-value setting) 1)
+ (if (> (entry-count current-value setting) 0)
(ly:context-set-property!
context
property