Function: icalendar--convert-block-to-ical
icalendar--convert-block-to-ical is a byte-compiled function defined
in icalendar.el.gz.
Signature
(icalendar--convert-block-to-ical NONMARKER ENTRY-MAIN)
Documentation
Convert block diary entry to iCalendar format.
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-block-to-ical (nonmarker entry-main)
"Convert block diary entry to iCalendar format.
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-block \\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\)"
" +\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*"
"\\(\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
"\\("
"-\\([0-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
"\\)?"
"\\s-*\\(.*?\\) ?$")
entry-main)
(let* ((startstring (substring entry-main
(match-beginning 1)
(match-end 1)))
(endstring (substring entry-main
(match-beginning 2)
(match-end 2)))
(startisostring (icalendar--datestring-to-isodate
startstring))
(endisostring (icalendar--datestring-to-isodate
endstring))
(endisostring+1 (icalendar--datestring-to-isodate
endstring 1))
(starttimestring (icalendar--diarytime-to-isotime
(if (match-beginning 4)
(substring entry-main
(match-beginning 4)
(match-end 4))
nil)
(if (match-beginning 5)
(substring entry-main
(match-beginning 5)
(match-end 5))
nil)))
(endtimestring (icalendar--diarytime-to-isotime
(if (match-beginning 7)
(substring entry-main
(match-beginning 7)
(match-end 7))
nil)
(if (match-beginning 8)
(substring entry-main
(match-beginning 8)
(match-end 8))
nil)))
(summary (icalendar--convert-string-for-export
(substring entry-main (match-beginning 9)
(match-end 9)))))
(icalendar--dmsg "diary-block %s" entry-main)
(when starttimestring
(unless endtimestring
(let ((time
(read (replace-regexp-in-string "^T0?" ""
starttimestring))))
(setq endtimestring (format "T%06d"
(+ 10000 time))))))
(if starttimestring
;; with time -> write rrule
(cons (concat "\nDTSTART;VALUE=DATE-TIME:"
startisostring
starttimestring
"\nDTEND;VALUE=DATE-TIME:"
startisostring
endtimestring
"\nRRULE:FREQ=DAILY;INTERVAL=1;UNTIL="
endisostring)
summary)
;; no time -> write long event
(cons (concat "\nDTSTART;VALUE=DATE:" startisostring
"\nDTEND;VALUE=DATE:" endisostring+1)
summary)))
;; no match
nil))