aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/recurrence/parse.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/vcomponent/recurrence/parse.scm')
-rw-r--r--module/vcomponent/recurrence/parse.scm16
1 files changed, 12 insertions, 4 deletions
diff --git a/module/vcomponent/recurrence/parse.scm b/module/vcomponent/recurrence/parse.scm
index 3477f6d4..d45cedf9 100644
--- a/module/vcomponent/recurrence/parse.scm
+++ b/module/vcomponent/recurrence/parse.scm
@@ -51,7 +51,9 @@
(define-macro (quick-case key . cases)
(let ((else-clause (or (assoc-ref cases 'else)
- '(error "Guard failed"))))
+ '(scm-error 'misc-error "quick-case"
+ "Guard failed"
+ #f #f))))
`(case ,key
,@(map (match-lambda
((key guard '=> body ...)
@@ -72,6 +74,12 @@
`(else ,@body)))
cases))))
+(define* (string->number/throw string optional: (radix 10))
+ (or (string->number string radix)
+ (scm-error 'wrong-type-arg
+ "string->number/throw"
+ "Can't parse ~s as number in base ~a"
+ (list string radix) (list string radix))))
;; RFC 5545, Section 3.3.10. Recurrence Rule, states that the UNTIL value MUST have
;; the same type as the DTSTART of the event (date or datetime). I have seen events
@@ -92,8 +100,8 @@
(parse-ics-datetime val)))
(day (rfc->datetime-weekday (string->symbol val)))
(days (map parse-day-spec (string-split val #\,)))
- (num (string->number val))
- (nums (map string->number (string-split val #\,))))
+ (num (string->number/throw val))
+ (nums (map string->number/throw (string-split val #\,))))
;; It's an error to give BYHOUR and smaller for pure dates.
;; 3.3.10. p 41
@@ -123,7 +131,7 @@
(else o)))))
;; obj
- (make-recur-rule interval: 1 wkst: mon)
+ (make-recur-rule)
;; ((key val) ...)
(map (cut string-split <> #\=)