]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/display-lily.scm
Run `make grand-replace'.
[lilypond.git] / scm / display-lily.scm
index a19a3f7974e2bc8398a01510b549ba02e8950da3..e85159059df198020dba621b003d713de156040f 100644 (file)
@@ -2,7 +2,7 @@
 ;;;
 ;;;
 ;;;
-;;; (c) 2005 Nicolas Sceaux  <nicolas.sceaux@free.fr>
+;;; (c) 2005--2008 Nicolas Sceaux  <nicolas.sceaux@free.fr>
 ;;;
 
 ;;; - This file defines the procedures used to define display methods for each
 ;;; Display methods are stored in the `display-methods' property of each music
 ;;; type.
 ;;;
-;;; - `display-lily-music' can be called to display a music expression using
-;;; LilyPond notation. `music->lily-string' return a string describing a music
-;;; expression using LilyPond notation.
+;;; - `music->lily-string' return a string describing a music expression using
+;;; LilyPond notation. The special variables *indent*, *previous-duration*,
+;;; and *force-duration* influence the indentation level and the display of
+;;; music durations.
 ;;;
 ;;; - `with-music-match' can be used to destructure a music expression, extracting
 ;;; some interesting music properties.
@@ -42,7 +43,7 @@
 `display-methods' property of the music type entry found in the
 `music-name-to-property-table' hash table. Print methods previously
 defined for that music type are lost. 
-Syntax: (define-display-method MusicType (expression)
+Syntax: (define-display-method MusicType (expression parser)
          ...body...))"
   `(let ((type-props (hashq-ref music-name-to-property-table
                                ',music-type '()))
@@ -75,15 +76,12 @@ display method will be called."
      new-method))
 
 (define* (tag->lily-string expr #:optional (post-event? #f))
-  (let ((tags (ly:music-property expr 'tags)))
-    (cond ((null? tags)
-          "")
-         ((null? (cdr tags))
-          (format #f "~a\\tag #'~a " (if post-event? "-" "") (car tags)))
-         (else
-          (format #f "~a\\tag #'(~a~{ ~a~}) " (if post-event? "-" "") (car tags) (cdr tags))))))
+  (format #f "~{~a ~}"
+         (map (lambda (tag)
+                (format #f "~a\\tag #'~a" (if post-event? "-" "") tag))
+              (ly:music-property expr 'tags))))
 
-(define-public (music->lily-string expr)
+(define-public (music->lily-string expr parser)
   "Print expr, a music expression, in LilyPond syntax"
   (if (ly:music? expr)
       (let* ((music-type (ly:music-property expr 'name))
@@ -91,7 +89,7 @@ display method will be called."
                                          music-type '())
                               'display-methods))
             (result-string (and procs (any (lambda (proc)
-                                             (proc expr))
+                                             (proc expr parser))
                                            procs))))
        (if result-string
            (format #f "~a~a" 
@@ -101,13 +99,6 @@ display method will be called."
                    music-type)))
       (format #f "%{ expecting a music expression: ~a %}" expr)))
 
-(define*-public (display-lily-music expr #:key force-duration)
-  (parameterize ((*indent* 0)
-                (*previous-duration* (ly:make-duration 2))
-                (*force-duration* force-duration))
-    (display (music->lily-string expr))
-    (newline)))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;
 ;;; Music pattern matching
@@ -141,7 +132,7 @@ display method will be called."
 (define (gen-condition expr pattern)
   "Helper function for `with-music-match'.
 Generate an form that checks if the properties of `expr'
-match thoses desscribed in `pattern'."
+match thoses described in `pattern'."
   (let* (;; all (property . value) found at the first depth in pattern,
         ;; including a (name . <Musictype>) pair.
         (pat-all-props (cons (cons 'name (second pattern))
@@ -270,13 +261,13 @@ inside body."
 ;;;
 
 ;;; indentation
-(define *indent* (make-parameter 0))
+(define-public *indent* (make-parameter 0))
 
 ;;; set to #t to force duration printing
-(define *force-duration* (make-parameter #f))
+(define-public *force-duration* (make-parameter #f))
 
 ;;; last duration found
-(define *previous-duration* (make-parameter (ly:make-duration 2)))
+(define-public *previous-duration* (make-parameter (ly:make-duration 2)))
 
 ;;; Set to #t to force a line break with some kinds of expressions (eg sequential music)
 (define *force-line-break* (make-parameter #t))
@@ -286,8 +277,6 @@ inside body."
 (define *time-factor-denominator* (make-parameter #f))
 (define *time-factor-numerator* (make-parameter #f))
 
-(define *parser* (make-parameter #f))
-
 (define *current-context* (make-parameter 'Bottom))
 
 (define *explicit-mode* (make-parameter #t))