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