Function: icalendar--convert-float-to-ical
icalendar--convert-float-to-ical is a byte-compiled function defined
in icalendar.el.gz.
Signature
(icalendar--convert-float-to-ical NONMARKER ENTRY-MAIN)
Documentation
Convert float diary entry to iCalendar format -- partially unsupported!
FIXME! DAY from diary-float yet unimplemented.
NONMARKER is a regular expression matching the start of non-marking
entries. ENTRY-MAIN is the first line of the diary entry.
Source Code
;; Defined in /usr/src/emacs/lisp/calendar/icalendar.el.gz
(defun icalendar--convert-float-to-ical (nonmarker entry-main)
"Convert float diary entry to iCalendar format -- partially unsupported!
FIXME! DAY from `diary-float' yet unimplemented.
NONMARKER is a regular expression matching the start of non-marking
entries. ENTRY-MAIN is the first line of the diary entry."
(if (string-match (concat nonmarker "%%\\((diary-float .+\\) ?$") entry-main)
(with-temp-buffer
(insert (match-string 1 entry-main))
(goto-char (point-min))
(let* ((sexp (read (current-buffer))) ;using `read' here
;easier than regexp
;matching, esp. with
;different forms of
;MONTH
(month-exp (nth 1 sexp))
(months (cond ((eq month-exp t) nil) ; don't add a BYMONTH clause
((integerp month-exp) (list month-exp))
(t month-exp)))
(dayname (nth 2 sexp))
(n (nth 3 sexp))
(day (nth 4 sexp))
(dtstart
;; Start on the first day matching the rule in
;; icalendar-recurring-start-year:
(calendar-nth-named-day n dayname
(if months (apply #'min months) 1)
icalendar-recurring-start-year))
(summary
(replace-regexp-in-string
"\\(^\s+\\|\s+$\\)" ""
(buffer-substring (point) (point-max)))))
(when day
(progn
(icalendar--dmsg "diary-float %s" entry-main)
(error "Don't know if or how to implement day in `diary-float'")))
(cons (concat
"\nDTSTART;VALUE=DATE:"
(format "%04d%02d%02d"
(calendar-extract-year dtstart)
(calendar-extract-month dtstart)
(calendar-extract-day dtstart))
"\nRRULE:"
(if months
"FREQ=YEARLY;BYMONTH="
"FREQ=MONTHLY")
(when months
(mapconcat
(lambda (m) (number-to-string m))
months ","))
";BYDAY="
(number-to-string n)
(aref icalendar--weekday-array dayname))
summary)))
;; no match
nil))