Function: icalendar-recur-next-interval

icalendar-recur-next-interval is a byte-compiled function defined in icalendar-recur.el.gz.

Signature

(icalendar-recur-next-interval INTERVAL RRULE &optional VTIMEZONE)

Documentation

Return the next recurrence interval after INTERVAL.

Given a recurrence interval [LOW HIGH NEXT], returns the next interval
[NEXT HIGHER HIGHER-NEXT], where HIGHER and HIGHER-NEXT are determined
by the frequency and interval sizes of RRULE.

Source Code

;; Defined in /usr/src/emacs/lisp/calendar/icalendar-recur.el.gz
(defun icr:next-interval (interval rrule &optional vtimezone)
  "Return the next recurrence interval after INTERVAL.

Given a recurrence interval [LOW HIGH NEXT], returns the next interval
[NEXT HIGHER HIGHER-NEXT], where HIGHER and HIGHER-NEXT are determined
by the frequency and interval sizes of RRULE."
  (let* ((new-low (icr:interval-next interval))
         (freq (ical:rrule-freq rrule))
         (unit (cl-case freq
                 (YEARLY :year)
                 (MONTHLY :month)
                 (WEEKLY :week)
                 (DAILY :day)
                 (HOURLY :hour)
                 (MINUTELY :minute)
                 (SECONDLY :second)))
         (intervalsize (ical:rrule-interval-size rrule))
         (new-high (ical:date/time-add new-low unit 1 vtimezone))
         (new-next
          (when (< 1 intervalsize)
            (ical:date/time-add new-low unit intervalsize vtimezone))))

    (when vtimezone
      (icr:tz-set-zone new-low vtimezone)
      ;; (icr:tz-set-zone new-high vtimezone)
      ;; (icr:tz-set-zone new-next vtimezone)
      )

    (icr:make-interval new-low new-high new-next)))