aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/parse
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2020-06-15 11:52:39 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2020-06-15 11:52:39 +0200
commitb0f67cc477a984c1088d79d3706fec6947115445 (patch)
tree91f06c49814c3c8c17bc33804e1067c710c2c56e /module/vcomponent/parse
parentWork on parser. (diff)
downloadcalp-b0f67cc477a984c1088d79d3706fec6947115445.tar.gz
calp-b0f67cc477a984c1088d79d3706fec6947115445.tar.xz
Fix multi-valued fields.
Diffstat (limited to 'module/vcomponent/parse')
-rw-r--r--module/vcomponent/parse/component.scm23
1 files changed, 19 insertions, 4 deletions
diff --git a/module/vcomponent/parse/component.scm b/module/vcomponent/parse/component.scm
index 78482b61..d1470694 100644
--- a/module/vcomponent/parse/component.scm
+++ b/module/vcomponent/parse/component.scm
@@ -20,6 +20,12 @@
(file get-file)
(line get-line))
+(define-immutable-record-type <geographical-position>
+ (make-geo latitude longitude)
+ geo-pos?
+ (latitude geo-latitude)
+ (longitude geo-longitude))
+
;; port → (list string)
(define (read-file port)
(define fname (port-filename port))
@@ -174,8 +180,8 @@
;; two semicolon sepparated floats
(lambda (params value)
(let* (((left right) (string-split value #\;)))
- (cons ((get-parser 'FLOAT) params left)
- ((get-parser 'FLOAT) params right))))]
+ (make-geo ((get-parser 'FLOAT) params left)
+ ((get-parser 'FLOAT) params right))))]
[(memv key '(RRULE))
(get-parser 'RECUR)]
@@ -189,7 +195,17 @@
[else
(warning "Unknown key ~a" key)
(get-parser 'TEXT)])))
- (make-vline key (parser params value) params)))
+
+ ;; If we produced a list create multiple VLINES from it.
+ ;; NOTE that the created vlines share parameter tables.
+ ;; TODO possibly allow vlines to reference each other, to
+ ;; indicate that all these vlines are the same.
+ (let ((parsed (parser params value)))
+ (if (list? parsed)
+ (apply values
+ (map (lambda (p) (make-vline key p params))
+ parsed))
+ (make-vline key parsed params)))))
;; (parse-itemline '("DTEND" "20200407T130000"))
;; => DTEND
@@ -267,7 +283,6 @@
;; See RFC 5545 p.53 for list of all repeating types
;; (for vcomponent)
- ;; TODO split on comman (,) here?
(if (memv key '(ATTACH ATTENDEE CATEGORIES
COMMENT CONTACT EXDATE
REQUEST-STATUS RELATED-TO