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))