aboutsummaryrefslogtreecommitdiff
path: root/vcalendar/output.scm
diff options
context:
space:
mode:
Diffstat (limited to 'vcalendar/output.scm')
-rw-r--r--vcalendar/output.scm33
1 files changed, 33 insertions, 0 deletions
diff --git a/vcalendar/output.scm b/vcalendar/output.scm
new file mode 100644
index 00000000..908dab34
--- /dev/null
+++ b/vcalendar/output.scm
@@ -0,0 +1,33 @@
+(define-module (vcalendar output)
+ #:use-module (vcalendar)
+ #:use-module (util)
+ #:use-module (srfi srfi-26)
+ #:export (print-vcomponent
+ color-if
+ STR-YELLOW STR-RESET))
+
+(define STR-YELLOW "\x1b[0;33m")
+(define STR-RESET "\x1b[m")
+
+(define-syntax-rule (color-if pred color body ...)
+ (let ((pred-value pred))
+ (format #f "~a~a~a"
+ (if pred-value color "")
+ (begin body ...)
+ (if pred-value STR-RESET ""))))
+
+(define* (print-vcomponent comp #:optional (depth 0))
+ (let ((kvs (map (lambda (key) (cons key (attr comp key)))
+ (attributes comp))))
+ (format #t "~a <~a> :: ~:a~%"
+ (make-string depth #\:)
+ (type comp) comp)
+ (for-each-in kvs
+ (lambda (kv)
+ (let ((key (car kv))
+ (value (cdr kv)))
+ (format #t "~a ~20@a: ~a~%"
+ (make-string depth #\:)
+ key value))))
+ (for-each-in (children comp)
+ (cut print-vcomponent <> (1+ depth)))))