aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/describe.scm
blob: a16c67d040f93f3a1104774ccc8229f447b30896 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(define-module (vcomponent describe)
  :use-module (util)
  :use-module (vcomponent base)
  :use-module (text util))

(define*-public (describe vcomponent optional: (indent 0))
  (define ii (make-string indent #\space))
  (define iii (make-string (1+ indent) #\space))

  (define maxlen (find-max (hash-map->list
                            (lambda (a _) (string-length (symbol->string a)))
                            (properties vcomponent))))

  (format #t "~aBEGIN ~a~%" ii (type vcomponent))

  (hash-for-each (lambda (key vline)
                   (format #t "~a~a = ~a"
                           iii
                           (trim-to-width (symbol->string key) maxlen)
                           (trim-to-width
                                   (format #f "~a" (value vline))
                                   (- 80 indent maxlen)))
                   (awhen (parameters vline)
                          (display " ;")
                          (for (key value) in it
                               (format #t " ~a=~a" key value)))
                   (newline))
                 (properties vcomponent))

  (for child in (children vcomponent)
       (describe child (+ indent 2)))

  (format #t "~aEND   ~a~%" ii (type vcomponent)))