From 042ad4cf33c6310798283dcf9879251cd97a9da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Fri, 22 May 2020 23:14:35 +0200 Subject: Cleanup in recurrence generate. --- module/vcomponent/recurrence/generate.scm | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'module/vcomponent/recurrence/generate.scm') diff --git a/module/vcomponent/recurrence/generate.scm b/module/vcomponent/recurrence/generate.scm index 30cbf4bf..7f681aa7 100644 --- a/module/vcomponent/recurrence/generate.scm +++ b/module/vcomponent/recurrence/generate.scm @@ -1,5 +1,4 @@ (define-module (vcomponent recurrence generate) - :export (generate-recurrence-set) :use-module (util) :use-module (util exceptions) :use-module (srfi srfi-1) @@ -94,7 +93,6 @@ [HOURLY || month yearday monthday day hour #|setpos|#] [MINUTELY || month yearday monthday day hour minute #|setpos|#] [SECONDLY || month yearday monthday day hour minute second #|setpos|#] - ;; [else] )) ;; next, done @@ -113,8 +111,6 @@ list)) vv))))))) -;; TODO more special expands (p. 44) -;; TODO which of THESE can be negative ;; (a := (date|datetime)), rrule, extension-rule → a (define (update date-object rrule extension-rule) ;; Branching fold instead of regular fold since BYDAY @@ -129,12 +125,10 @@ (t (as-time dt)) (to-dt (lambda (o) (if (date? dt) - (cond [(date? o) o] - [(time? o) d] - [else (error "faoeuhtnsaoeu htnaoeu" )]) - (cond [(date? o) (datetime date: o time: t tz: (get-timezone dt))] - [(time? o) (datetime date: d time: o tz: (get-timezone dt))] - [else (error "faoeuhtnsaoeu htnaoeu" )]))))) + (if (date? o) o d) + (if (date? o) + (datetime date: o time: t tz: (get-timezone dt)) + (datetime date: d time: o tz: (get-timezone dt))))))) (case key [(BYMONTH) (if (and (eq? 'YEARLY (freq rrule)) @@ -158,7 +152,6 @@ [(WEEKLY) ;; set day to that day in the week which d lies within (to-dt (date+ (start-of-week d (wkst rrule)) - ;; TODO check that this actually is the correct calculation (date day: (modulo (- value (wkst rrule)) 7))))] @@ -248,8 +241,7 @@ ;; The initial DTSTART SHOULD be synchronized with the RRULE. ;; An unsynchronized DTSTART/RRULE results in an undefined recurrence set. -;; TODO ought to be [rrule, a → (stream a)] where a := (date | datetime) -;; rrule, date → (stream datetime) +;; rrule, (a := date|datetime) → (stream a) (define-stream (extend-recurrence-set rrule base-date) (stream-append ;; If no BY-rules are present just add the base-date to the set. @@ -282,8 +274,6 @@ ;; if the datetime is part of the reccurrence set, and ;; false otherwise. ;; -;; TODO how many of these can take negative numbers? -;; ;; limiters → (a → bool) (define (limiters->predicate limiters) (lambda (dt) @@ -358,6 +348,8 @@ date-stream))] [else date-stream]))) +(export rrule-instances) + (define-public (final-event-occurence event) (define rrule (attr event 'RRULE)) @@ -368,7 +360,7 @@ #f)) -(define (generate-recurrence-set base-event) +(define-public (generate-recurrence-set base-event) (define duration -- cgit v1.2.3