]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/document-backend.scm
use usescons for using scons.
[lilypond.git] / scm / document-backend.scm
index d41eabd3704a792403502a9349fc3e23a38243b5..ca5217ec34636cceeb0f3421608f9d9fa4fa8c67 100644 (file)
@@ -2,49 +2,39 @@
 ;;;
 ;;; source file of the GNU LilyPond music typesetter
 ;;; 
-;;; (c)  2000--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;; (c)  2000--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 ;;; Jan Nieuwenhuizen <janneke@gnu.org>
 
 
-;;; This file generates documentation for the backend of lilypond.
-
-;; alist of property descriptions
-
-;;
-"
-TODO:
-
-
-Grob bla
-
-Created by:
-
-  * preset properties + explanation
-
-Interfaces:
-
-  * properties available.
-
-"
-
-
 (define (interface-doc-string interface grob-description)
   (let*
-      (
-       (name (car interface))
+      ((name (car interface))
        (desc (cadr interface))
        (props (sort (caddr interface) symbol<?))
        (docfunc (lambda (pr)
-                 (document-property
-                  pr 'backend grob-description )))
-       (propdocs (map docfunc props))
-       )
-    
-    (string-append
-     desc
-     "\n\n"
-     (description-list->texi propdocs))
-
+                 (property->texi
+                   'backend pr grob-description)))
+       (iprops (filter (lambda (x) (object-property x 'backend-internal) ) props))
+       (uprops (filter (lambda (x) (not (object-property x 'backend-internal)) ) props))
+       (user-propdocs (map docfunc uprops))
+       (internal-propdocs (map docfunc iprops)))
+
+       (string-append
+       desc
+
+       (if (pair? uprops)
+           (string-append
+           "\n\n@unnumberedsubsubsec User settable properties:\n"
+           (description-list->texi user-propdocs))
+           "")
+
+       (if (pair? iprops)
+           (string-append
+            "\n\n@unnumberedsubsubsec Internal properties: \n"
+            (description-list->texi internal-propdocs)
+            )
+           "")
+       )
     ))
 
 
@@ -75,17 +65,32 @@ Interfaces:
     (make <texi-node>
       #:name name
       #:text (string-append
-             (interface-doc-string (cdr interface) #f)
+             (interface-doc-string (cdr interface) '())
              "\n\n"
              "This grob interface is used in the following graphical objects: "
 
              (human-listify
               (map ref-ify
-                   (map symbol->string
-                        (hashq-ref iface->grob-table (car interface) '() )))))
+                   (sort 
+                    (map symbol->string
+                         (hashq-ref iface->grob-table (car interface) '() ))
+                    string<?)
+                   
+                   )))
 
       )))
 
+(define (grob-alist->texi alist)
+  (let*
+      ((uprops (filter (lambda (x) (not (object-property x 'backend-internal)))
+                      (map car alist))))
+
+    (description-list->texi
+     (map (lambda (y) (property->texi 'backend y alist))
+         uprops)
+     )))
+
+
 (define (grob-doc description)
   "Given a property alist DESCRIPTION, make a documentation
 node."
@@ -93,33 +98,30 @@ node."
   (let*
       (
        (metah (assoc 'meta description))
-       
        (meta (cdr metah))
        (name (cdr (assoc 'name meta)))
        (ifaces (map lookup-interface (cdr (assoc 'interfaces meta))))
        (ifacedoc (map (lambda (iface)
-                       (string-append
-"
-@subsubheading "
-(ref-ify (symbol->string (car iface)))
-
-"\n\n"
-                       (interface-doc-string iface description)))
+                       (ref-ify (symbol->string (car iface)))
+                       )
                      (reverse ifaces)))
        (engravers (filter
                   (lambda (x) (engraver-makes-grob? name x)) all-engravers-list))
        (namestr (symbol->string name))
-       (engraver-names (map ly:translator-name engravers))
+       (engraver-names (map symbol->string (map ly:translator-name engravers)))
        )
 
     (make <texi-node>
       #:name namestr
       #:text
       (string-append
-       namestr " grobs are created by: "
+       namestr " objects are created by: "
        (human-listify (map ref-ify
                           (map engraver-name engraver-names)))
-       (apply string-append ifacedoc)
+       "\n\nStandard settings: \n\n"
+       (grob-alist->texi description)
+       "\n\nThis object supports the following interfaces: \n"
+       (human-listify ifacedoc)
        ))
     ))
 
@@ -149,7 +151,7 @@ node."
 
 (define (check-dangling-properties prop)
   (if (not (object-property prop 'iface-marked))
-      (error  "\ngrob-property-description.scm: Can't find interface for property:" prop)))
+      (error  "\ndefine-grob-properties.scm: Can't find interface for property:" prop)))
 
 (map check-dangling-properties all-backend-properties)
 
@@ -157,7 +159,7 @@ node."
 
 (define (lookup-interface name)
   (let*  (
-         (entry  (hashq-ref (ly:all-grob-interfaces) name #f))
+         (entry  (hashq-ref (ly:all-grob-interfaces) name '() ))
          )
 
     (if (equal? entry #f)
@@ -174,21 +176,18 @@ node."
     (map interface-doc interface-description-alist)
     ))
 
-(define (all-backend-properties-doc)
+(define (backend-properties-doc-string lst)
   (let*
       (
-       (ps (sort (map symbol->string all-backend-properties) string<?))
+       (ps (sort (map symbol->string lst) string<?))
        (descs (map (lambda (prop)
-                    (document-property (string->symbol prop) 'backend #f))
+                    (property->texi 'backend (string->symbol prop)  '()))
                   ps))
        (texi (description-list->texi descs))
        )
-    (make <texi-node>
-      #:name "All backend properties"
-      #:desc "All grob properties in a big list"
-      #:text texi)
-  ))
+    texi))
 
+  
 ;(dump-node (grob-doc (cdadr all-grob-descriptions))  (current-output-port) 0 )
 (define (backend-doc-node)
   (make <texi-node>
@@ -198,6 +197,12 @@ node."
     (list
      (all-grobs-doc)
      (all-interfaces-doc)
-     (all-backend-properties-doc)
-     )
-  ))
+    (make <texi-node>
+      #:name "User backend properties"
+      #:desc "All tunable properties in a big list"
+      #:text (backend-properties-doc-string all-user-grob-properties))
+    (make <texi-node>
+      #:name "Internal backend properties"
+      #:desc "All internal layout properties in a big list"
+      #:text (backend-properties-doc-string all-internal-grob-properties))
+  )))