]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/define-music-display-methods.scm
Merge branch 'master' of ssh://git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / scm / define-music-display-methods.scm
index c0811990f72afd6496c99baa81797463228d4e55..60a38b0f5639ed629aee0176c96c44d30020bf0e 100644 (file)
@@ -1,7 +1,7 @@
 ;;; define-music-display-methods.scm -- data for displaying music
 ;;; expressions using LilyPond notation.
 ;;;
-;;; (c) 2005--2009 Nicolas Sceaux  <nicolas.sceaux@free.fr>
+;;; Copyright (C) 2005--2009 Nicolas Sceaux  <nicolas.sceaux@free.fr>
 ;;;
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -81,7 +81,7 @@
     (if (and (car alist) (test item (cdar alist)))
        (set! result (car alist)))))
 
-(define (note-name->lily-string ly-pitch parser)
+(define-public (note-name->lily-string ly-pitch parser)
   ;; here we define a custom pitch= function, since we do not want to
   ;; test whether octaves are also equal. (otherwise, we would be using equal?)
   (define (pitch= pitch1 pitch2)
@@ -92,7 +92,7 @@
        (car result)
        #f)))
 
-(define (octave->lily-string pitch)
+(define-public (octave->lily-string pitch)
   (let ((octave (ly:pitch-octave pitch)))
     (cond ((>= octave 0)
           (make-string (1+ octave) #\'))
 ;;;
 ;;; durations
 ;;;
-(define* (duration->lily-string ly-duration #:key (prev-duration (*previous-duration*))
+(define*-public (duration->lily-string ly-duration #:key (prev-duration (*previous-duration*))
                        (force-duration (*force-duration*))
                        (time-factor-numerator (*time-factor-numerator*))
                        (time-factor-denominator (*time-factor-denominator*)))
@@ -961,11 +961,11 @@ Otherwise, return #f."
                                                                 symbol 'clefOctavation)
                                                          (music 'ApplyContext
                                                                 procedure ly:set-middle-C!)))))
-    (let ((clef-prop+name (assoc (list ?clef-glyph ?clef-position 0)
+    (let ((clef-name (assoc-get (list ?clef-glyph ?clef-position 0)
                                 clef-name-alist)))
-      (if clef-prop+name
+      (if clef-name
          (format #f "\\clef \"~a~{~a~a~}\"~a"
-                 (cdr clef-prop+name)
+                 clef-name
                  (cond ((= 0 ?clef-octavation)
                         (list "" ""))
                        ((> ?clef-octavation 0)
@@ -978,32 +978,37 @@ Otherwise, return #f."
 ;;; \time
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   "If `expr' is a time signature set, return \"\\time ...\".
-Otherwise, return #f."
-  (with-music-match (expr (music
-                          'ContextSpeccedMusic
-                          element (music
-                                   'ContextSpeccedMusic
-                                   context-type 'Timing
-                                   element (music
-                                            'SequentialMusic
-                                            elements ((music
-                                                       'PropertySet
-                                                       value ?num+den
-                                                       symbol 'timeSignatureFraction)
-                                                      (music
-                                                       'PropertySet
-                                                       symbol 'beatLength)
-                                                      (music
-                                                       'PropertySet
-                                                       symbol 'measureLength)
-                                                      (music
-                                                       'PropertySet
-                                                       value ?grouping
-                                                       symbol 'beatGrouping))))))
-    (if (null? ?grouping)
-       (format #f "\\time ~a/~a~a" (car ?num+den) (cdr ?num+den) (new-line->lily-string))
-       (format #f "#(set-time-signature ~a ~a '~s)~a"
-               (car ?num+den) (cdr ?num+den) ?grouping (new-line->lily-string)))))
+Otherwise, return #f.  Note: default grouping is not available."
+  (with-music-match
+   (expr (music
+           'ContextSpeccedMusic
+          element (music
+                   'ContextSpeccedMusic
+                   context-type 'Timing
+                   element (music
+                            'SequentialMusic
+                            elements ?elts))))
+   (and
+    (> (length ?elts) 2)
+    (with-music-match ((cadr ?elts)
+                       (music 'PropertySet
+                              symbol 'beatLength))
+       #t)
+    (with-music-match ((caddr ?elts)
+                       (music 'PropertySet
+                              symbol 'measureLength))
+       #t)
+    (with-music-match ((car ?elts)
+                       (music 'PropertySet
+                              value ?num+den
+                              symbol 'timeSignatureFraction))
+       (if (eq? (length ?elts) 3)
+           (format
+             #f "\\time ~a/~a~a"
+             (car ?num+den) (cdr ?num+den) (new-line->lily-string))
+           (format
+             #f "#(set-time-signature ~a ~a '(<grouping-specifier>))~a"
+             (car ?num+den) (cdr ?num+den)  (new-line->lily-string)))))))
 
 ;;; \bar
 (define-extra-display-method ContextSpeccedMusic (expr parser)
@@ -1028,6 +1033,7 @@ Otherwise, return #f."
             ((= i dots) m)
           (set! m (+ m delta)))
         factor))))
+
 (define moment-duration-alist (map (lambda (duration)
                                     (cons (duration->moment duration)
                                           duration))
@@ -1038,9 +1044,7 @@ Otherwise, return #f."
                                               (list 0 1 2 3 4))))
 
 (define (moment->duration moment)
-  (let ((result (assoc (- moment) moment-duration-alist =)))
-    (and result
-        (cdr result))))
+  (assoc-get (- moment) moment-duration-alist))
 
 (define-extra-display-method ContextSpeccedMusic (expr parser)
   "If `expr' is a partial measure, return \"\\partial ...\".