Function: icalendar--convert-weekly-to-ical
icalendar--convert-weekly-to-ical is a byte-compiled function defined
in icalendar.el.gz.
Signature
(icalendar--convert-weekly-to-ical NONMARKER ENTRY-MAIN)
Documentation
Convert weekly 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-weekly-to-ical (nonmarker entry-main)
"Convert weekly 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 (and (string-match (concat nonmarker
"\\([a-z]+\\)\\s-+"
"\\(\\([0-9][0-9]?:[0-9][0-9]\\)"
"\\([ap]m\\)?"
"\\(-"
"\\([0-9][0-9]?:[0-9][0-9]\\)"
"\\([ap]m\\)?\\)?"
"\\)?"
"\\s-*\\(.*?\\) ?$")
entry-main)
(icalendar--get-weekday-abbrev
(substring entry-main (match-beginning 1)
(match-end 1))))
(let* ((day (icalendar--get-weekday-abbrev
(substring entry-main (match-beginning 1)
(match-end 1))))
(starttimestring (icalendar--diarytime-to-isotime
(if (match-beginning 3)
(substring entry-main
(match-beginning 3)
(match-end 3))
nil)
(if (match-beginning 4)
(substring entry-main
(match-beginning 4)
(match-end 4))
nil)))
(endtimestring (icalendar--diarytime-to-isotime
(if (match-beginning 6)
(substring entry-main
(match-beginning 6)
(match-end 6))
nil)
(if (match-beginning 7)
(substring entry-main
(match-beginning 7)
(match-end 7))
nil)))
(summary (icalendar--convert-string-for-export
(substring entry-main (match-beginning 8)
(match-end 8)))))
(icalendar--dmsg "weekly %s" entry-main)
(when starttimestring
(unless endtimestring
(let ((time (read
(replace-regexp-in-string "^T0?" ""
starttimestring))))
(setq endtimestring (format "T%06d"
(+ 10000 time))))))
(cons (concat "\nDTSTART;"
(if starttimestring
"VALUE=DATE-TIME:"
"VALUE=DATE:")
;; Find the first requested weekday of the
;; start year
(funcall 'format "%04d%02d%02d"
icalendar-recurring-start-year 1
(icalendar-first-weekday-of-year
day icalendar-recurring-start-year))
(or starttimestring "")
"\nDTEND;"
(if endtimestring
"VALUE=DATE-TIME:"
"VALUE=DATE:")
(funcall 'format "%04d%02d%02d"
;; end is non-inclusive!
icalendar-recurring-start-year 1
(+ (icalendar-first-weekday-of-year
day icalendar-recurring-start-year)
(if endtimestring 0 1)))
(or endtimestring "")
"\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY="
day)
summary))
;; no match
nil))