]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/document-backend.scm
(dump-page): Implement landscape.
[lilypond.git] / scm / document-backend.scm
index 20a24dcc158d09c7600af48635d63aa09b56f8b7..72aa188d34ff258fed72ed69ac20f5f9d9df8d25 100644 (file)
@@ -2,49 +2,39 @@
 ;;;
 ;;; source file of the GNU LilyPond music typesetter
 ;;; 
-;;; (c) 2000--2002 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,60 +65,69 @@ 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."
-  
+
   (let*
-      (
-       (metah (assoc 'meta description))
-       
+      ((metah (assoc 'meta description))
        (meta (cdr metah))
        (name (cdr (assoc 'name meta)))
+;       (bla (display name))
        (ifaces (map lookup-interface (cdr (assoc 'interfaces meta))))
        (ifacedoc (map (lambda (iface)
-                       (string-append
-"@html
-<hr>
-@end html
-
-@subsubheading "
-(ref-ify (symbol->string (car iface)))
-
-"\n\n"
-                       (interface-doc-string iface description)))
+                       (if (pair? iface)
+                           (ref-ify (symbol->string (car iface)))
+                           (error (format "Error making doc of ~s" name))))
                      (reverse ifaces)))
-       (engravers (filter-list
+       (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)
        ))
     ))
 
 (define (all-grobs-doc)
   (make <texi-node>
-    #:name "All Graphical objects"
+    #:name "All layout objects"
     #:desc "Description and defaults for all Grobs"
     #:children
     (map (lambda (x) (grob-doc (cdr x)))  all-grob-descriptions)))
@@ -152,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)
 
@@ -160,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)
@@ -177,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 "backend properties"
-      #:desc "all the properties in use as grob properties"
-      #:text texi)
-  ))
+    texi))
 
+  
 ;(dump-node (grob-doc (cdadr all-grob-descriptions))  (current-output-port) 0 )
 (define (backend-doc-node)
   (make <texi-node>
@@ -201,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))
+  )))