2 ;;; backend-documentation-lib.scm -- Functions for backend documentation
4 ;;; source file of the GNU LilyPond music typesetter
6 ;;; (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 ;;; Jan Nieuwenhuizen <janneke@gnu.org>
10 ;;; This file generates documentation for the backend of lilypond.
13 ;; alist of property descriptions
14 (define (document-element-property prop desc)
15 (let ((handle (assoc (car prop) desc)))
18 "@code{" (symbol->string (car prop)) "} "
19 "(" (type-name (cadr prop)) "):")
22 "\ndefault value: @code{"
24 (scm->string (cdr handle))
28 ;; First level Interface description
29 ;; Second level, part of element description
30 (define (document-interface level interface element-description)
31 (let* ((name (car interface))
32 (desc (cadr interface))
33 (props (caddr interface))
34 (docs (map (lambda (x)
35 (document-element-property x element-description))
39 (section level (string-append (interface-name (symbol->string name))))
41 (description-list docs))))
43 ;; First level Interface description
44 (define (document-separate-interface interface)
45 (let ((name (car interface)))
47 (node (interface-name name))
48 (document-interface 2 interface '()))))
50 ;; First level element description
51 (define (document-element iname description)
52 (display (string-append "\nProcessing " iname " ... ") (current-error-port))
53 (let* ((metah (assoc 'meta description))
55 (meta (if (pair? metah)
57 '((properties . ()) (name . "huh?"))
60 (name (cdr (assoc 'name meta)))
61 (ifaces (cdr (assoc 'interface-descriptions meta)))
62 (ifacedoc (map (lambda (x) (document-interface 3 x description))
66 (node (element-name name))
67 (section 2 (element-name name))
70 (let* ((element (string->symbol name))
74 (let ((engraver (car x))
76 (if (member element objs)
79 engraver-description-alist))))
81 name " elements are created by: "
82 (human-listify (map reffy (map engraver-name engravers)))))
84 (apply string-append ifacedoc))))
87 (define (document-all-elements name)
88 (let* ((doc (apply string-append
89 (map (lambda (x) (document-element (car x) (cdr x)))
90 all-element-descriptions)))
91 (names (map car all-element-descriptions)))
94 (texi-node-menu name (map (lambda (x) (cons (element-name x) ""))
98 ;; testin.. -- how to do this
99 (eval-string (ly-gulp-file "interface.scm"))
100 (define interface-description-alist
102 (general-element . ,general-element-interface)
103 (beam . ,beam-interface)
104 (clef . ,clef-interface)
105 (slur . ,slur-interface)
108 (define (document-all-interfaces name)
110 (texi-node-menu name (map (lambda (x) (cons (interface-name x) ""))
111 (map cadr interface-description-alist)))
113 (map document-separate-interface
114 (map cdr interface-description-alist)))))