;;;
;;; 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))
(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)
+ )
+ "")
+ )
))
(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))
-
(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))
#: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 (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)
(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)
(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>
(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))
+ )))