3 (define (uniqued-alist alist acc)
5 (if (assoc (caar alist) acc)
6 (uniqued-alist (cdr alist) acc)
7 (uniqued-alist (cdr alist) (cons (car alist) acc)
13 (define (wordwrap string)
18 (define (self-evaluating? x)
19 (or (number? x) (string? x))
22 (define (type-name predicate)
24 ((eq? predicate dir?) "direction")
25 ((eq? predicate ly-element?) "graphic element")
26 ((eq? predicate pair?) "pair")
27 ((eq? predicate integer?) "integer")
28 ((eq? predicate list?) "list")
29 ((eq? predicate symbol?) "symbol")
30 ((eq? predicate string?) "string")
31 ((eq? predicate boolean?) "string")
32 ((eq? predicate number?) "number")
33 ((eq? predicate procedure?) "procedure")
37 (define (scm->string val)
39 (if (self-evaluating? val) "" "'")
40 (call-with-output-string (lambda (port) (display val port)))
43 (define (document-property prop desc)
44 (let ((handle (assoc (car prop) desc)))
46 "\n" (symbol->string (car prop)) " (" (type-name (cadr prop)) ") -- "
50 (scm->string (cdr handle))
58 ;; todo: setup ifaces differently.
60 (define (document-element description)
61 (let* ((metah (assoc 'meta description))
62 (meta (if (pair? metah)
64 '((properties . ()) (name . "huh?"))
67 (name (cdr (assoc 'name meta)))
68 ; (iface-descs (cdr (assoc 'interface-descriptions meta)))
69 (propdesc (cdr (assoc 'properties meta)))
70 (docs (map (lambda (x) (document-property x description))
71 (uniqued-alist propdesc '())))
75 "\n-------------------------\n"
77 "-------------------------\n"
80 ; (apply string-append iface-descs)
81 "-------------------------\n"
83 (apply string-append docs)
88 (define (document-elements elts)
90 (map (lambda (x) (display (car x)) (document-element (cdr x)))
95 (define (test-module )
98 (scm->string '(1 2 abc))
101 (uniqued-alist '((a . 1 ) (a . 1)) '() )
105 ; (define b (cdr (assoc 'Beam all-element-descriptions)))
108 ; (display (document-element b))
110 (display (document-elements all-element-descriptions))