2 ;;; engraver-documentation-lib.scm -- Functions for engraver 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 (eval-string (ly-gulp-file "translator-description.scm"))
12 ;; alist of translater descriptions
13 (define (document-translator-property prop-desc)
16 "@code{" (car prop-desc) "} "
17 "(" (type-name (cadr prop-desc)) "):")
20 ;; First level Engraver description and
21 ;; second level Context description
22 (define (document-engraver level engraver-descr)
25 (props (car (cdddr engraver-descr)))
26 (name (car engraver-descr))
27 (desc (cadr engraver-descr))
28 (objs (caddr engraver-descr))
32 (section level (engraver-name name))
38 (section (+ level 1) "Properties")
40 (map (lambda (x) (document-translator-property x)) props))))
44 "This engraver creates \n "
45 (human-listify (map reffy (map element-name objs)))
51 (let* ((paper-alist (My_lily_parser::paper_description))
52 (context-description-alist (map cdr paper-alist))
56 (let ((context (cdr (assoc 'type-name x)))
58 (list (cdr (assoc 'group-type x)))
59 (cdr (assoc 'consists x))
60 (cdr (assoc 'end-consists x)))))
62 (if (member name consists)
65 context-description-alist))))
67 name " is part of contexts: "
68 (human-listify (map reffy (map context-name contexts))))))))
71 ;; First level Engraver description
72 (define (document-separate-engraver top description)
73 (let ((name (car description)))
76 (node (engraver-name name))
77 (document-engraver 2 description))))
79 ;; Second level, part of Context description
80 (define (document-engraver-by-name name)
83 (eg (assoc (string->symbol name) engraver-description-alist))
87 (string-append "Engraver " name ", not documented.\n")
88 (document-engraver 3 (cdr eg))
92 (define (context-doc-string context-desc)
95 (name (cdr (assoc 'type-name context-desc)))
96 (desc-handle (assoc (string->symbol name) context-description-alist))
97 (desc (if (pair? desc-handle) (cdr desc-handle) ""))
99 (accepts (cdr (assoc 'accepts context-desc)))
101 (list (cdr (assoc 'group-type context-desc)))
102 (cdr (assoc 'consists context-desc))
103 (cdr (assoc 'end-consists context-desc))
111 "This context is a `bottom' context; it can not contain other contexts."
113 name " can contain \n"
114 (human-listify (map reffy (map context-name accepts)))))
116 "\n\nThis context is built from the following engravers: "
118 (human-listify (map reffy (map engraver-name consists)))
120 (map document-engraver-by-name consists))))))
123 ;; First level Context description
124 (define (document-context top context-desc)
125 (let ((name (cdr (assoc 'type-name context-desc)))
126 (doc (context-doc-string context-desc)))
129 (node (context-name name))
130 (section 2 (context-name name))
133 (define (document-paper name)
134 (let* ((paper-alist (My_lily_parser::paper_description))
135 (names (sort (map car paper-alist) string<?))
136 (contexts (map cdr paper-alist))
137 (doc (apply string-append
138 (map (lambda (x) (document-context name x)) contexts))))
141 (texi-node-menu name (map (lambda (x) (cons (context-name x) ""))
145 (define (document-all-engravers name)
146 (let* ((descs (map cdr engraver-description-alist))
147 (names (map car engraver-description-alist))
148 (doc (apply string-append
149 (map (lambda (x) (document-separate-engraver name x))
153 (texi-node-menu name (map (lambda (x) (cons (engraver-name x) ""))