aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/parse
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2020-05-09 13:44:53 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2020-05-09 13:44:53 +0200
commitb3bb50420a17987fcd0c4aec7a57df67a5b7d756 (patch)
tree8e16320c7e506b8c0e408c0b1bb7449d7455f909 /module/vcomponent/parse
parentNew parser now works with old code. (diff)
downloadcalp-b3bb50420a17987fcd0c4aec7a57df67a5b7d756.tar.gz
calp-b3bb50420a17987fcd0c4aec7a57df67a5b7d756.tar.xz
Un-escape escaped characters. Slow?
Diffstat (limited to 'module/vcomponent/parse')
-rw-r--r--module/vcomponent/parse/new.scm18
1 files changed, 16 insertions, 2 deletions
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"))