]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/document-music.scm
Merge branch 'master' into jneeman
[lilypond.git] / scm / document-music.scm
index bd6a8ea7efe3e10ce39d71fcbb55a212f8cf4bee..0d01abb6b9c66b5289ae8ab0cda057f387240150 100644 (file)
@@ -1,45 +1,39 @@
+;;;; document-markup.scm -- part of generated backend documentation
+;;;;
+;;;;  source file of the GNU LilyPond music typesetter
+;;;; 
+;;;; (c) 1998--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;;                 Jan Nieuwenhuizen <janneke@gnu.org>
 
 (define (music-props-doc)
   (make <texi-node>
     #:name "Music properties"
-    #:desc "All music properties, including descriptions"
+    #:desc "All music properties, including descriptions."
     #:text
-  (let* (
-        (ps (sort (map symbol->string all-music-properties) string<?))
-        (descs (map (lambda (prop)
-                      (property->texi 'music (string->symbol prop)))
-                    ps))
-        (texi (description-list->texi descs))
-        )
-    texi)
-  ))
+    (let* ((ps (sort (map symbol->string all-music-properties) string<?))
+          (descs (map (lambda (prop)
+                        (property->texi 'music (string->symbol prop)))
+                      ps))
+          (texi (description-list->texi descs)))
+      texi)))
 
 (define music-types->names (make-vector 61 '()))
-(map (lambda (entry)
-       (let*
-          (
-           (types (cdr (assoc 'types (cdr entry) )))
-           )
-        (map (lambda (type)
-               (hashq-set! music-types->names type
-                           (cons (car entry)
-                                 (hashq-ref music-types->names type '())))
-                           
-               ) types)
-        
-        ))
-  music-descriptions)
-
-
-(define (hash-table->alist t)
-  "Convert table t to list"
-  (apply append
-        (vector->list t)
-  ))
+(filter-map (lambda (entry)
+             (let* ((class (ly:camel-case->lisp-identifier (car entry)))
+                    (classes (ly:make-event-class class)))
+               (if classes
+                   (map (lambda (cl)
+                          (hashq-set! music-types->names cl
+                                      (cons (car entry)
+                                            (hashq-ref music-types->names cl '()))))
+                        classes)
+                   #f)))
+           
+           music-descriptions)
 
 (define (strip-description x)
-    (cons (symbol->string (car x))
-         ""))
+  (cons (symbol->string (car x))
+       ""))
 
 (define (music-type-doc entry)
   (make <texi-node>
     (string-append
      "\nMusic event type @code{"
      (symbol->string (car entry))
-     "} is in Music objects of type "
+     "} is in music objects of type "
      (human-listify
       (sort
        (map (lambda (x) (ref-ify (symbol->string x)))
-            (cdr entry)) string<?))
+           (cdr entry)) string<?))
+     "."
 
      "\n\nAccepted by: "
      (human-listify
       (map ref-ify
-      (map ly:translator-name
-          (filter-list
-           (lambda (x) (engraver-accepts-music-type? (car entry) x)) all-engravers-list))))
-     "\n\n"
-     )))
+          (map symbol->string
+               (map ly:translator-name
+                    (filter
+                     (lambda (x) (engraver-accepts-music-type? (car entry) x)) all-engravers-list)))))
+     "."
+     "\n\n")))
 
 (define (music-types-doc)
   (make <texi-node>
     #:children 
     (map music-type-doc
         (sort
-         (hash-table->alist music-types->names) alist<?))
-    ))
+         (hash-table->alist music-types->names) alist<?))))
 
 (define (music-doc-str obj)
-  (let*
-      (
-       (namesym  (car obj))
-       (props (cdr obj))
-       (types (cdr (assoc  'types props)))
-       )
-    
+  (let* ((namesym  (car obj))
+        (props (cdr obj))
+        (class (ly:camel-case->lisp-identifier namesym))
+        (classes (ly:make-event-class class))
+        (event-texi (if classes
+                        (string-append
+                         "\n\nEvent classes:\n"
+                         (human-listify (map ref-ify (map symbol->string classes)))
+                         "."
+
+                         "\n\nAccepted by: "
+                         (human-listify
+                          (map ref-ify
+                               (map symbol->string (map ly:translator-name
+                                                        (filter
+                                                         (lambda (x) (engraver-accepts-music-types? classes x)) all-engravers-list)))))
+                         ".")
+                        "")))
+
     (string-append
      (object-property namesym 'music-description)
-     "\n\nMusic types:\n"
-     (human-listify (map ref-ify (map symbol->string types)))
-     "\n\n"
-     "\n\nAccepted by: "
-     (human-listify
-      (map ref-ify
-      (map ly:translator-name
-          (filter-list
-           (lambda (x) (engraver-accepts-music-types? types x)) all-engravers-list))))
-     "\n\nProperties: \n"
+     event-texi
+     "\n\nProperties:\n"
      (description-list->texi
       (map
-       (lambda (x) (document-property x 'music props))
-       (map car props)))
-     
-     )
-    ))
+       (lambda (x) (property->texi 'music x props))
+       (map car props))))))
 
 (define (music-object-doc obj)
   (make <texi-node>
     #:name (symbol->string (car obj))
-    #:text (music-doc-str obj)
-    ))
+    #:text (music-doc-str obj)))
 
 (define (music-expressions-doc)
   (make <texi-node>
     #:name "Music expressions"
     #:desc "Objects that represent music."
     #:children
-     (map music-object-doc music-descriptions)
-  ))
-  
+    (map music-object-doc music-descriptions)))
+
 (define (music-doc-node)
   (make <texi-node>
     #:name "Music definitions"
-    #:desc "Definition of the Input data structures"
+    #:desc "Definition of the input data structures."
     #:children
     (list
      (music-expressions-doc)
      (music-types-doc)
-     (music-props-doc))
-    ))
-
-  
-  
-
+     (music-props-doc))))