]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-music-callbacks.scm
Release: update news.
[lilypond.git] / scm / define-music-callbacks.scm
index fbb82789048a54b93deae2decc526b8d24a9c9e0..de442ba6d643ff9832f6c879b2eb81b0030169ed 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; This file is part of LilyPond, the GNU music typesetter.
 ;;;;
-;;;; Copyright (C) 1998--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 ;;;;                Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;;                 Neil Puttock <n.puttock@gmail.com>
 ;;;;                 Carl Sorensen <c_sorensen@byu.edu>
@@ -34,6 +34,34 @@ to be used by the sequential-iterator"
          (make-music 'BarCheck
                      'origin location))))
 
+(define (make-volta-set music)
+  (let* ((alts (ly:music-property music 'elements))
+         (lalts (length alts))
+         (times (ly:music-property music 'repeat-count)))
+    (map (lambda (x y)
+           (make-music
+             'SequentialMusic
+             'elements
+               ;; set properties for proper bar numbering
+               (append
+                 (list (make-music 'AlternativeEvent
+                                   'alternative-dir (if (= y 0)
+                                                        -1
+                                                        0)
+                                   'alternative-increment
+                                     (if (= 0 y)
+                                         (1+ (- times
+                                                lalts))
+                                             1)))
+                       (list x)
+                       (if (= y (1- lalts))
+                           (list (make-music 'AlternativeEvent
+                                             'alternative-dir 1
+                                             'alternative-increment 0))
+                           '()))))
+         alts
+         (iota lalts))))
+
 (define (make-ottava-set music)
   "Set context properties for an ottava bracket."
   (let ((octavation (ly:music-property music 'ottava-number)))
@@ -54,10 +82,9 @@ to be used by the sequential-iterator"
 
 (define (make-time-signature-set music)
   "Set context properties for a time signature."
-  (let* ((arguments (ly:music-property music 'time-signature-arguments))
-         (num (car arguments))
-         (den (cadr arguments))
-         (rest (caddr arguments))
+  (let* ((num (ly:music-property music 'numerator))
+         (den (ly:music-property music 'denominator))
+         (structure (ly:music-property music 'beat-structure))
          (fraction (cons num den)))
     (list (descend-to-context
             (context-spec-music
@@ -68,11 +95,11 @@ to be used by the sequential-iterator"
                          (my-base-fraction
                            (base-fraction fraction time-signature-settings))
                          (my-beat-structure
-                           (if (null? rest)
+                           (if (null? structure)
                                (beat-structure my-base-fraction
                                                fraction
                                                time-signature-settings)
-                               rest))
+                               structure))
                          (beaming-exception
                            (beam-exceptions fraction time-signature-settings))
                          (new-measure-length (ly:make-moment num den)))