From b3bb50420a17987fcd0c4aec7a57df67a5b7d756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sat, 9 May 2020 13:44:53 +0200 Subject: Un-escape escaped characters. Slow? --- module/vcomponent/parse/new.scm | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'module/vcomponent/parse') diff --git a/module/vcomponent/parse/new.scm b/module/vcomponent/parse/new.scm index 9c97a7c8..bba74316 100644 --- a/module/vcomponent/parse/new.scm +++ b/module/vcomponent/parse/new.scm @@ -1,5 +1,6 @@ (define-module (vcomponent parse new) :use-module (util) + :use-module (util exceptions) :use-module ((ice-9 rdelim) :select (read-line)) :use-module (vcomponent base) :use-module (datetime) @@ -86,8 +87,21 @@ (prop vline 'VALUE) 'DATE))) ;; TOOD actually handle repeated keys (when (eq? key 'EXDATE) - (set! (value vline) (list (value vline)))) - )]) + (set! (value vline) (list (value vline)))))] + + [else (set! (value vline) + (list->string + (let loop ((rem (string->list (value vline)))) + (if (null? rem) + '() + (if (char=? #\\ (car rem)) + (case (cadr rem) + [(#\n #\N) (cons #\newline (loop (cddr rem)))] + [(#\; #\, #\\) => (lambda (c) (cons c (loop (cddr rem))))] + [else => (lambda (c) (warning "Non-escapable character: ~a" c) + (loop (cddr rem)))]) + (cons (car rem) (loop (cdr rem))))) + ))) ]) vline) ;; (parse-itemline '("DTEND" "TZID=Europe/Stockholm" "VALUE=DATE-TIME" "20200407T130000")) -- cgit v1.2.3