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 ;; Second level, part of element description
29 (define (document-interface interface element-description)
30 (let* ((name (car interface))
31 (desc (cadr interface))
32 (props (caddr interface))
33 (docs (map (lambda (x)
34 (document-element-property x element-description))
38 (section 2 (string-append "Interface: " (symbol->string name)))
40 (description-list docs))))
42 ;; First level element description
43 (define (document-element iname description)
44 (display (string-append "\nProcessing " iname " ... ") (current-error-port))
45 (let* ((metah (assoc 'meta description))
47 (meta (if (pair? metah)
49 '((properties . ()) (name . "huh?"))
52 (name (cdr (assoc 'name meta)))
53 (ifaces (cdr (assoc 'interface-descriptions meta)))
54 (ifacedoc (map (lambda (x) (document-interface x description))
58 (node (element-name name))
59 (section 2 (element-name name))
62 (let* ((element (string->symbol name))
66 (let ((engraver (car x))
68 (if (member element objs)
71 engraver-description-alist))))
73 name " elements are created by: "
74 (human-listify (map reffy (map engraver-name engravers)))))
76 (apply string-append ifacedoc))))
79 (define (document-all-elements name)
80 (let* ((doc (apply string-append
81 (map (lambda (x) (document-element (car x) (cdr x)))
82 all-element-descriptions)))
83 (names (map car all-element-descriptions)))
86 (texi-node-menu name (map (lambda (x) (cons (element-name x) ""))