Function: diary-icalendar-rrule-sexp-to-recurrence
diary-icalendar-rrule-sexp-to-recurrence is a byte-compiled function
defined in diary-icalendar.el.gz.
Signature
(diary-icalendar-rrule-sexp-to-recurrence SEXP &optional VTIMEZONE)
Documentation
Convert a diary-rrule SEXP to iCalendar recurrence rule properties.
Returns a list containing at least icalendar-dtstart and
icalendar-rrule nodes, and zero or more icalendar-rdate,
icalendar-exdate, and icalendar-duration nodes.
VTIMEZONE, if specified, should be an icalendar-vtimezone. Times in
SEXP will be reinterpreted as local to VTIMEZONE, as UTC, or as floating
times according to diary-icalendar-time-zone-export-strategy.
Source Code
;; Defined in /usr/src/emacs/lisp/calendar/diary-icalendar.el.gz
(defun di:rrule-sexp-to-recurrence (sexp &optional vtimezone)
"Convert a `diary-rrule' SEXP to iCalendar recurrence rule properties.
Returns a list containing at least `icalendar-dtstart' and
`icalendar-rrule' nodes, and zero or more `icalendar-rdate',
`icalendar-exdate', and `icalendar-duration' nodes.
VTIMEZONE, if specified, should be an `icalendar-vtimezone'. Times in
SEXP will be reinterpreted as local to VTIMEZONE, as UTC, or as floating
times according to `diary-icalendar-time-zone-export-strategy'."
(let* ((args (cdr sexp))
(start (plist-get args :start))
(dtstart (di:convert-time-via-strategy
(if (eq 'quote (car start)) (eval start nil) start)
vtimezone))
(rule (plist-get args :rule))
(rrule (if (eq 'quote (car rule)) (eval rule nil) rule))
(included (plist-get args :include))
(rdates (mapcar
(lambda (dt) (di:convert-time-via-strategy dt vtimezone))
(if (eq 'quote (car included)) (eval included nil) included)))
(excluded (plist-get args :exclude))
(exdates (mapcar
(lambda (dt) (di:convert-time-via-strategy dt vtimezone))
(if (eq 'quote (car excluded)) (eval excluded nil) excluded)))
(duration (eval (plist-get args :duration) t))
(dur-value
(if (eq 'quote (car duration)) (eval duration nil) duration))
(tzid
(when (cl-typep dtstart 'ical:date-time)
(ical:with-property-of vtimezone 'ical:tzid)))
nodes)
(push (ical:make-property ical:rrule rrule) nodes)
(push (ical:make-property ical:dtstart dtstart (ical:tzidparam tzid))
nodes)
(when rdates
(push (ical:make-property ical:rdate rdates (ical:tzidparam tzid))
nodes))
(when exdates
(push (ical:make-property ical:exdate exdates (ical:tzidparam tzid))
nodes))
(when duration
(push (ical:make-property ical:duration dur-value) nodes))
nodes))