aboutsummaryrefslogtreecommitdiff
path: root/module/vcomponent/recurrence/internal.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@hornquist.se>2019-04-23 18:03:49 +0200
committerHugo Hörnquist <hugo@hornquist.se>2019-04-23 18:03:49 +0200
commit8f4fbcd493e28c86c598efcecdb6dc79d8fe0bfe (patch)
tree37e49d78df0916efcb0d547e0b28b63247cfec3d /module/vcomponent/recurrence/internal.scm
parentChange event-length => event-length/day. (diff)
downloadcalp-8f4fbcd493e28c86c598efcecdb6dc79d8fe0bfe.tar.gz
calp-8f4fbcd493e28c86c598efcecdb6dc79d8fe0bfe.tar.xz
Rename module vcalendar => vcomponent.
Diffstat (limited to 'module/vcomponent/recurrence/internal.scm')
-rw-r--r--module/vcomponent/recurrence/internal.scm45
1 files changed, 45 insertions, 0 deletions
diff --git a/module/vcomponent/recurrence/internal.scm b/module/vcomponent/recurrence/internal.scm
new file mode 100644
index 00000000..f7095d1d
--- /dev/null
+++ b/module/vcomponent/recurrence/internal.scm
@@ -0,0 +1,45 @@
+(define-module (vcomponent recurrence internal)
+ #:use-module (util)
+ #:use-module ((ice-9 optargs) #:select (define*-public))
+ #:use-module (srfi srfi-88)
+ #:export (make-recur-rule
+ weekdays intervals))
+
+;; Immutable, since I easily want to be able to generate the recurence set for
+;; the same event multiple times.
+(define-quick-record recur-rule
+ (public: freq until count interval bysecond byminute byhour
+ byday bymonthday byyearday byweekno bymonth bysetpos
+ wkst))
+
+(define (make-recur-rule interval wkst)
+ ((record-constructor <recur-rule> '(interval wkst)) interval wkst))
+
+;; TODO make this part of define-quick-record.
+;; Only "hard" part would be to provide type hints for fields for
+;; string conversions.
+(define-public (format-recur-rule r)
+ (define (a f)
+ ((record-accessor <recur-rule> f) r))
+ (with-output-to-string
+ (lambda ()
+ (format #t "#<recur-rule>~%")
+ (for-each
+ (lambda (field)
+ (when (a field)
+ (format #t " ~8@a: ~a~%"
+ field
+ ((case field
+ ((until) (@ (srfi srfi-19 util) time->string))
+ (else identity))
+ (a field)))))
+ (record-type-fields <recur-rule>)))))
+
+(define*-public (print-recur-rule r #:optional (port (current-output-port)))
+ (display (format-recur-rule r) port))
+
+(define weekdays
+ '(SU MO TU WE TH FR SA))
+
+(define intervals
+ '(SECONDLY MINUTELY HOURLY DAILY WEEKLY MONTHLY YEARLY))