(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)
(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*)))
;;; \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)