diff options
Diffstat (limited to 'vcalendar/output.scm')
-rw-r--r-- | vcalendar/output.scm | 33 |
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))))) |