From ad4adc7576c5c2e2c0cae010a6b0a14601a849ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 17 Apr 2020 22:07:28 +0200 Subject: RRULE parser now converts weekdays to (datetime util) weekdays. --- module/vcomponent/recurrence/parse.scm | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'module/vcomponent/recurrence/parse.scm') diff --git a/module/vcomponent/recurrence/parse.scm b/module/vcomponent/recurrence/parse.scm index 9de8a4be..66605c11 100644 --- a/module/vcomponent/recurrence/parse.scm +++ b/module/vcomponent/recurrence/parse.scm @@ -12,6 +12,18 @@ #:use-module (ice-9 match)) +;; transform into weekday objects from +(define (rfc->datetime-weekday symbol) + (case symbol + [(SU) sun] + [(MO) mon] + [(TU) tue] + [(WE) wed] + [(TH) thu] + [(FR) fri] + [(SA) sat] + [else => (lambda (d) (error "No such day ~a" d))])) + ;; @example ;; ∈ weekdays ;; ::= [[±] ] ;; +3MO @@ -31,7 +43,7 @@ (numbers letters (span (cut memv <> numerical-characters) (string->list str)))) (cons (string->number (list->string numbers)) - (apply symbol letters)))) + (rfc->datetime-weekday (apply symbol letters))))) (define-macro (quick-case key . cases) (let ((else-clause (or (assoc-ref cases 'else) @@ -70,7 +82,7 @@ (INTERVAL (<= 0 num) => (set! (interval o) num)) (FREQ (memv symb intervals) => (set! (freq o) symb)) - (WKST (memv symb weekdays) => (set! (wkst o) symb)) + (WKST (memv symb weekdays) => (set! (wkst o) (cdar days))) ;; Always positive (BYSECOND (every (lambda (n) (<= 0 n 60)) nums) => (set! (bysecond o) nums)) @@ -89,7 +101,7 @@ (else o))))) ;; obj - (make-recur-rule (interval 1) (wkst 'MO)) + (make-recur-rule (interval 1) (wkst mon)) ;; ((key val) ...) (map (cut string-split <> #\=) -- cgit v1.2.3