[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/calendar/icalendar.el
From: |
Glenn Morris |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/calendar/icalendar.el |
Date: |
Thu, 10 Feb 2005 20:02:56 -0500 |
Index: emacs/lisp/calendar/icalendar.el
diff -c emacs/lisp/calendar/icalendar.el:1.5
emacs/lisp/calendar/icalendar.el:1.6
*** emacs/lisp/calendar/icalendar.el:1.5 Tue Nov 2 01:05:27 2004
--- emacs/lisp/calendar/icalendar.el Fri Feb 11 01:02:56 2005
***************
*** 1,6 ****
;;; icalendar.el --- iCalendar implementation -*-coding: utf-8 -*-
! ;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
;; Author: Ulf Jasper <address@hidden>
;; Created: August 2002
--- 1,6 ----
;;; icalendar.el --- iCalendar implementation -*-coding: utf-8 -*-
! ;; Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
;; Author: Ulf Jasper <address@hidden>
;; Created: August 2002
***************
*** 90,96 ****
;;; Code:
! (defconst icalendar-version 0.08
"Version number of icalendar.el.")
;; ======================================================================
--- 90,96 ----
;;; Code:
! (defconst icalendar-version 0.09
"Version number of icalendar.el.")
;; ======================================================================
***************
*** 268,274 ****
;; (car (cddr event)))
(defun icalendar--get-event-property (event prop)
! "For the given EVENT return the value of the property PROP."
(catch 'found
(let ((props (car (cddr event))) pp)
(while props
--- 268,274 ----
;; (car (cddr event)))
(defun icalendar--get-event-property (event prop)
! "For the given EVENT return the value of the first occurence of PROP."
(catch 'found
(let ((props (car (cddr event))) pp)
(while props
***************
*** 278,283 ****
--- 278,304 ----
(setq props (cdr props))))
nil))
+ (defun icalendar--get-event-property-attributes (event prop)
+ "For the given EVENT return attributes of the first occurence of PROP."
+ (catch 'found
+ (let ((props (car (cddr event))) pp)
+ (while props
+ (setq pp (car props))
+ (if (eq (car pp) prop)
+ (throw 'found (cadr pp)))
+ (setq props (cdr props))))
+ nil))
+
+ (defun icalendar--get-event-properties (event prop)
+ "For the given EVENT return a list of all values of the property PROP."
+ (let ((props (car (cddr event))) pp result)
+ (while props
+ (setq pp (car props))
+ (if (eq (car pp) prop)
+ (setq result (cons (car (cddr pp)) result)))
+ (setq props (cdr props)))
+ result))
+
;; (defun icalendar--set-event-property (event prop new-value)
;; "For the given EVENT set the property PROP to the value NEW-VALUE."
;; (catch 'found
***************
*** 319,325 ****
(icalendar--get-children (car icalendar) 'VEVENT))
(defun icalendar--split-value (value-string)
! "Splits VALUE-STRING at ';='."
(let ((result '())
param-name param-value)
(when value-string
--- 340,346 ----
(icalendar--get-children (car icalendar) 'VEVENT))
(defun icalendar--split-value (value-string)
! "Split VALUE-STRING at ';='."
(let ((result '())
param-name param-value)
(when value-string
***************
*** 424,436 ****
(if (match-beginning 11)
(setq seconds (read (substring isodurationstring
(match-beginning 12)
! (match-end 12)))))
! )
((match-beginning 13) ;weeks only
(setq days (* 7 (read (substring isodurationstring
(match-beginning 14)
! (match-end 14))))))
! )
(list seconds minutes hours days months years)))
;; isodatetimestring == nil
nil))
--- 445,455 ----
(if (match-beginning 11)
(setq seconds (read (substring isodurationstring
(match-beginning 12)
! (match-end 12))))))
((match-beginning 13) ;weeks only
(setq days (* 7 (read (substring isodurationstring
(match-beginning 14)
! (match-end 14)))))))
(list seconds minutes hours days months years)))
;; isodatetimestring == nil
nil))
***************
*** 452,478 ****
;;(or (nth 6 time1) (nth 6 time2)) ;; FIXME?
)))
! (defun icalendar--datetime-to-noneuropean-date (datetime)
"Convert the decoded DATETIME to non-european-style format.
! Non-European format: (month day year)."
(if datetime
! (list (nth 4 datetime) ;month
! (nth 3 datetime) ;day
! (nth 5 datetime)) ;year
;; datetime == nil
nil))
! (defun icalendar--datetime-to-european-date (datetime)
"Convert the decoded DATETIME to European format.
European format: (day month year).
FIXME"
(if datetime
! (format "%d %d %d" (nth 3 datetime) ; day
(nth 4 datetime) ;month
(nth 5 datetime)) ;year
;; datetime == nil
nil))
(defun icalendar--datetime-to-colontime (datetime)
"Extract the time part of a decoded DATETIME into 24-hour format.
Note that this silently ignores seconds."
--- 471,515 ----
;;(or (nth 6 time1) (nth 6 time2)) ;; FIXME?
)))
! (defun icalendar--datetime-to-noneuropean-date (datetime &optional separator)
"Convert the decoded DATETIME to non-european-style format.
! Optional argument SEPARATOR gives the separator between month,
! day, and year. If nil a blank character is used as separator.
! Non-European format: \"month day year\"."
(if datetime
! (format "%d%s%d%s%d" (nth 4 datetime) ;month
! (or separator " ")
! (nth 3 datetime) ;day
! (or separator " ")
! (nth 5 datetime)) ;year
;; datetime == nil
nil))
! (defun icalendar--datetime-to-european-date (datetime &optional separator)
"Convert the decoded DATETIME to European format.
+ Optional argument SEPARATOR gives the separator between month,
+ day, and year. If nil a blank character is used as separator.
European format: (day month year).
FIXME"
(if datetime
! (format "%d%s%d%s%d" (nth 3 datetime) ;day
! (or separator " ")
(nth 4 datetime) ;month
+ (or separator " ")
(nth 5 datetime)) ;year
;; datetime == nil
nil))
+ (defun icalendar--datetime-to-diary-date (datetime &optional separator)
+ "Convert the decoded DATETIME to diary format.
+ Optional argument SEPARATOR gives the separator between month,
+ day, and year. If nil a blank character is used as separator.
+ Call icalendar--datetime-to-(non)-european-date according to
+ value of `european-calendar-style'."
+ (if european-calendar-style
+ (icalendar--datetime-to-european-date datetime separator)
+ (icalendar--datetime-to-noneuropean-date datetime separator)))
+
(defun icalendar--datetime-to-colontime (datetime)
"Extract the time part of a decoded DATETIME into 24-hour format.
Note that this silently ignores seconds."
***************
*** 495,509 ****
(defun icalendar--get-weekday-number (abbrevweekday)
"Return the number for the ABBREVWEEKDAY."
! (catch 'found
! (let ((num 0)
! (aw (downcase abbrevweekday)))
! (mapc (lambda (day)
! (let ((d (downcase day)))
! (if (string-equal d aw)
! (throw 'found num))
! (setq num (1+ num))))
! icalendar--weekday-array))
;; Error:
-1))
--- 532,547 ----
(defun icalendar--get-weekday-number (abbrevweekday)
"Return the number for the ABBREVWEEKDAY."
! (if abbrevweekday
! (catch 'found
! (let ((num 0)
! (aw (downcase abbrevweekday)))
! (mapc (lambda (day)
! (let ((d (downcase day)))
! (if (string-equal d aw)
! (throw 'found num))
! (setq num (1+ num))))
! icalendar--weekday-array)))
;; Error:
-1))
***************
*** 605,613 ****
(format "T%04d00" starttimenum))
nil))
! (defun icalendar--convert-string-for-export (s)
! "Escape comma and other critical characters in string S."
! (icalendar--rris "," "\\\\," s))
(defun icalendar--convert-string-for-import (string)
"Remove escape chars for comma, semicolon etc. from STRING."
--- 643,651 ----
(format "T%04d00" starttimenum))
nil))
! (defun icalendar--convert-string-for-export (string)
! "Escape comma and other critical characters in STRING."
! (icalendar--rris "," "\\\\," string))
(defun icalendar--convert-string-for-import (string)
"Remove escape chars for comma, semicolon etc. from STRING."
***************
*** 641,649 ****
All diary entries in the region from MIN to MAX in the current buffer are
converted to iCalendar format. The result is appended to the file
ICAL-FILENAME.
!
! Returns non-nil if an error occurred. In this case an error message is
! written to the buffer ` *icalendar-errors*'."
(interactive "r
FExport diary data into iCalendar file: ")
(let ((result "")
--- 679,687 ----
All diary entries in the region from MIN to MAX in the current buffer are
converted to iCalendar format. The result is appended to the file
ICAL-FILENAME.
! This function attempts to return t if something goes wrong. In this
! case an error string which describes all the errors and problems is
! written into the buffer `*icalendar-errors*'."
(interactive "r
FExport diary data into iCalendar file: ")
(let ((result "")
***************
*** 659,664 ****
--- 697,703 ----
(save-current-buffer
(set-buffer (get-buffer-create " *icalendar-errors*"))
(erase-buffer))
+
;; here we go
(save-excursion
(goto-char min)
***************
*** 699,711 ****
;; but korganizer seems to expect this... ;(
;; and evolution doesn't understand it... :(
;; so... who is wrong?!
! ";BYMONTH=" (substring startisostring 4 6)
! ";BYMONTHDAY=" (substring startisostring 6 8)
! )))
(unless (string= entry-rest "")
! (setq contents (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; cyclic events
;; %%(diary-cyclic )
((string-match
--- 738,752 ----
;; but korganizer seems to expect this... ;(
;; and evolution doesn't understand it... :(
;; so... who is wrong?!
! ";BYMONTH="
! (substring startisostring 4 6)
! ";BYMONTHDAY="
! (substring startisostring 6 8))))
(unless (string= entry-rest "")
! (setq contents
! (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; cyclic events
;; %%(diary-cyclic )
((string-match
***************
*** 734,742 ****
;; BYSOMETHING here...
)))
(unless (string= entry-rest "")
! (setq contents (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; diary-date -- FIXME
((string-match
(concat nonmarker
--- 775,784 ----
;; BYSOMETHING here...
)))
(unless (string= entry-rest "")
! (setq contents
! (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; diary-date -- FIXME
((string-match
(concat nonmarker
***************
*** 754,766 ****
;; block events
((string-match
(concat nonmarker
! "%%(diary-block \\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\) +"
! "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*\\(.*\\)")
entry-main)
(icalendar--dmsg "diary-block %s" entry-main)
! (let* ((startstring (substring entry-main (match-beginning 1)
(match-end 1)))
! (endstring (substring entry-main (match-beginning 2)
(match-end 2)))
(summary (icalendar--convert-string-for-export
(substring entry-main (match-beginning 3)
--- 796,811 ----
;; block events
((string-match
(concat nonmarker
! "%%(diary-block \\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\)"
! " +\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*"
! "\\(.*\\)")
entry-main)
(icalendar--dmsg "diary-block %s" entry-main)
! (let* ((startstring (substring entry-main
! (match-beginning 1)
(match-end 1)))
! (endstring (substring entry-main
! (match-beginning 2)
(match-end 2)))
(summary (icalendar--convert-string-for-export
(substring entry-main (match-beginning 3)
***************
*** 772,783 ****
(setq contents
(concat "\nDTSTART;VALUE=DATE:" startisostring
"\nDTEND;VALUE=DATE:" endisostring
! "\nSUMMARY:" summary
! ))
(unless (string= entry-rest "")
! (setq contents (concat contents "\nDESCRIPTION:"
!
(icalendar--convert-string-for-export
! entry-rest))))))
;; other sexp diary entries -- FIXME
((string-match
(concat nonmarker
--- 817,828 ----
(setq contents
(concat "\nDTSTART;VALUE=DATE:" startisostring
"\nDTEND;VALUE=DATE:" endisostring
! "\nSUMMARY:" summary))
(unless (string= entry-rest "")
! (setq contents
! (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest))))))
;; other sexp diary entries -- FIXME
((string-match
(concat nonmarker
***************
*** 790,803 ****
((and (string-match
(concat nonmarker
"\\([a-z]+\\)\\s-+"
! "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
"\\(-0?"
! "\\([1-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))))
(icalendar--dmsg "weekly %s" entry-main)
(let* ((day (icalendar--get-weekday-abbrev
(substring entry-main (match-beginning 1)
--- 835,851 ----
((and (string-match
(concat nonmarker
"\\([a-z]+\\)\\s-+"
! "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)"
! "\\([ap]m\\)?"
"\\(-0?"
! "\\([1-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))))
(icalendar--dmsg "weekly %s" entry-main)
(let* ((day (icalendar--get-weekday-abbrev
(substring entry-main (match-beginning 1)
***************
*** 829,837 ****
(match-end 8)))))
(when starttimestring
(unless endtimestring
! (let ((time (read (icalendar--rris "^T0?" ""
! starttimestring))))
! (setq endtimestring (format "T%06d" (+ 10000
time))))))
(setq contents
(concat "\nDTSTART;"
(if starttimestring
--- 877,887 ----
(match-end 8)))))
(when starttimestring
(unless endtimestring
! (let ((time (read
! (icalendar--rris "^T0?" ""
! starttimestring))))
! (setq endtimestring (format "T%06d"
! (+ 10000 time))))))
(setq contents
(concat "\nDTSTART;"
(if starttimestring
***************
*** 854,865 ****
(if endtimestring 2 3)))
(or endtimestring "")
"\nSUMMARY:" summary
! "\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=" day
! )))
(unless (string= entry-rest "")
! (setq contents (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; yearly by day
;; 1 May Tag der Arbeit
((string-match
--- 904,916 ----
(if endtimestring 2 3)))
(or endtimestring "")
"\nSUMMARY:" summary
! "\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY="
! day)))
(unless (string= entry-rest "")
! (setq contents
! (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; yearly by day
;; 1 May Tag der Arbeit
((string-match
***************
*** 878,887 ****
(icalendar--dmsg "yearly %s" entry-main)
(let* ((daypos (if european-calendar-style 1 2))
(monpos (if european-calendar-style 2 1))
! (day (read (substring entry-main (match-beginning
daypos)
(match-end daypos))))
(month (icalendar--get-month-number
! (substring entry-main (match-beginning monpos)
(match-end monpos))))
(starttimestring (icalendar--diarytime-to-isotime
(if (match-beginning 4)
--- 929,940 ----
(icalendar--dmsg "yearly %s" entry-main)
(let* ((daypos (if european-calendar-style 1 2))
(monpos (if european-calendar-style 2 1))
! (day (read (substring entry-main
! (match-beginning daypos)
(match-end daypos))))
(month (icalendar--get-month-number
! (substring entry-main
! (match-beginning monpos)
(match-end monpos))))
(starttimestring (icalendar--diarytime-to-isotime
(if (match-beginning 4)
***************
*** 910,918 ****
(match-end 9)))))
(when starttimestring
(unless endtimestring
! (let ((time (read (icalendar--rris "^T0?" ""
! starttimestring))))
! (setq endtimestring (format "T%06d" (+ 10000
time))))))
(setq contents
(concat "\nDTSTART;"
(if starttimestring "VALUE=DATE-TIME:"
--- 963,973 ----
(match-end 9)))))
(when starttimestring
(unless endtimestring
! (let ((time (read
! (icalendar--rris "^T0?" ""
! starttimestring))))
! (setq endtimestring (format "T%06d"
! (+ 10000 time))))))
(setq contents
(concat "\nDTSTART;"
(if starttimestring "VALUE=DATE-TIME:"
***************
*** 924,942 ****
"VALUE=DATE:")
;; end is not included! shift by one day
(icalendar--date-to-isodate
! (list month day 1900) (if endtimestring 0 1))
(or endtimestring "")
"\nSUMMARY:"
summary
"\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH="
(format "%2d" month)
";BYMONTHDAY="
! (format "%2d" day)
! )))
(unless (string= entry-rest "")
! (setq contents (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; "ordinary" events, start and end time given
;; 1 Feb 2003 Hs Hochzeitsfeier, Dreieich
((string-match
--- 979,998 ----
"VALUE=DATE:")
;; end is not included! shift by one day
(icalendar--date-to-isodate
! (list month day 1900)
! (if endtimestring 0 1))
(or endtimestring "")
"\nSUMMARY:"
summary
"\nRRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH="
(format "%2d" month)
";BYMONTHDAY="
! (format "%2d" day))))
(unless (string= entry-rest "")
! (setq contents
! (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest)))))
;; "ordinary" events, start and end time given
;; 1 Feb 2003 Hs Hochzeitsfeier, Dreieich
((string-match
***************
*** 982,990 ****
(error "Could not parse date"))
(when starttimestring
(unless endtimestring
! (let ((time (read (icalendar--rris "^T0?" ""
! starttimestring))))
! (setq endtimestring (format "T%06d" (+ 10000
time))))))
(setq contents (concat
"\nDTSTART;"
(if starttimestring "VALUE=DATE-TIME:"
--- 1038,1048 ----
(error "Could not parse date"))
(when starttimestring
(unless endtimestring
! (let ((time
! (read (icalendar--rris "^T0?" ""
! starttimestring))))
! (setq endtimestring (format "T%06d"
! (+ 10000 time))))))
(setq contents (concat
"\nDTSTART;"
(if starttimestring "VALUE=DATE-TIME:"
***************
*** 1004,1012 ****
summary))
;; could not parse the date
(unless (string= entry-rest "")
! (setq contents (concat contents "\nDESCRIPTION:"
!
(icalendar--convert-string-for-export
! entry-rest))))))
;; everything else
(t
;; Oops! what's that?
--- 1062,1071 ----
summary))
;; could not parse the date
(unless (string= entry-rest "")
! (setq contents
! (concat contents "\nDESCRIPTION:"
! (icalendar--convert-string-for-export
! entry-rest))))))
;; everything else
(t
;; Oops! what's that?
***************
*** 1023,1036 ****
entry-main))))))
;; we're done, insert everything into the file
! (let ((coding-system-for-write 'utf8))
! (set-buffer (find-file ical-filename))
! (goto-char (point-max))
! (insert "BEGIN:VCALENDAR")
! (insert "\nPRODID:-//Emacs//NONSGML icalendar.el//EN")
! (insert "\nVERSION:2.0")
! (insert result)
! (insert "\nEND:VCALENDAR\n")))
found-error))
;; ======================================================================
--- 1082,1098 ----
entry-main))))))
;; we're done, insert everything into the file
! (save-current-buffer
! (let ((coding-system-for-write 'utf8))
! (set-buffer (find-file ical-filename))
! (goto-char (point-max))
! (insert "BEGIN:VCALENDAR")
! (insert "\nPRODID:-//Emacs//NONSGML icalendar.el//EN")
! (insert "\nVERSION:2.0")
! (insert result)
! (insert "\nEND:VCALENDAR\n")
! ;; save the diary file
! (save-buffer))))
found-error))
;; ======================================================================
***************
*** 1046,1052 ****
Optional argument NON-MARKING determines whether events are created as
non-marking or not."
(interactive "fImport iCalendar data from file:
! Finto diary file:
p")
;; clean up the diary file
(save-current-buffer
--- 1108,1114 ----
Optional argument NON-MARKING determines whether events are created as
non-marking or not."
(interactive "fImport iCalendar data from file:
! Finto diary file:
p")
;; clean up the diary file
(save-current-buffer
***************
*** 1070,1077 ****
NON-MARKING determines whether diary events are created as
non-marking.
! This function attempts to notify about problems that occur when
! reading, parsing, or converting iCalendar data!"
(interactive)
(save-current-buffer
;; prepare ical
--- 1132,1140 ----
NON-MARKING determines whether diary events are created as
non-marking.
! Return code t means that importing worked well, return code nil
! means that an error has occured. Error messages will be in the
! buffer `*icalendar-errors*'."
(interactive)
(save-current-buffer
;; prepare ical
***************
*** 1097,1109 ****
(set-buffer (find-buffer-visiting diary-file))
(save-buffer)))
(message "Converting icalendar...done")
! (if (and ical-errors (y-or-n-p
! (concat "Something went wrong -- "
! "do you want to see the "
! "error log? ")))
! (switch-to-buffer " *icalendar-errors*")))
(message
! "Current buffer does not contain icalendar contents!"))))
(defalias 'icalendar-extract-ical-from-buffer 'icalendar-import-buffer)
(make-obsolete 'icalendar-extract-ical-from-buffer 'icalendar-import-buffer)
--- 1160,1171 ----
(set-buffer (find-buffer-visiting diary-file))
(save-buffer)))
(message "Converting icalendar...done")
! ;; return t if no error occured
! (not ical-errors))
(message
! "Current buffer does not contain icalendar contents!")
! ;; return nil, i.e. import did not work
! nil)))
(defalias 'icalendar-extract-ical-from-buffer 'icalendar-import-buffer)
(make-obsolete 'icalendar-extract-ical-from-buffer 'icalendar-import-buffer)
***************
*** 1163,1172 ****
(condition-case error-val
(let* ((dtstart (icalendar--decode-isodatetime
(icalendar--get-event-property e 'DTSTART)))
! (start-d (calendar-date-string
! (icalendar--datetime-to-noneuropean-date
! dtstart)
! t t))
(start-t (icalendar--datetime-to-colontime dtstart))
(dtend (icalendar--decode-isodatetime
(icalendar--get-event-property e 'DTEND)))
--- 1225,1232 ----
(condition-case error-val
(let* ((dtstart (icalendar--decode-isodatetime
(icalendar--get-event-property e 'DTSTART)))
! (start-d (icalendar--datetime-to-diary-date
! dtstart))
(start-t (icalendar--datetime-to-colontime dtstart))
(dtend (icalendar--decode-isodatetime
(icalendar--get-event-property e 'DTEND)))
***************
*** 1179,1184 ****
--- 1239,1251 ----
(rdate (icalendar--get-event-property e 'RDATE))
(duration (icalendar--get-event-property e 'DURATION)))
(icalendar--dmsg "%s: %s" start-d subject)
+ ;; check whether start-time is missing
+ (if (and (icalendar--get-event-property-attributes
+ e 'DTSTART)
+ (string= (cadr (icalendar--get-event-property-attributes
+ e 'DTSTART))
+ "DATE"))
+ (setq start-t nil))
(when duration
(let ((dtend2 (icalendar--add-decoded-times
dtstart
***************
*** 1188,1197 ****
subject))
(setq dtend dtend2)))
(setq end-d (if dtend
! (calendar-date-string
! (icalendar--datetime-to-noneuropean-date
! dtend)
! t t)
start-d))
(setq end-t (if dtend
(icalendar--datetime-to-colontime dtend)
--- 1255,1261 ----
subject))
(setq dtend dtend2)))
(setq end-d (if dtend
! (icalendar--datetime-to-diary-date dtend)
start-d))
(setq end-t (if dtend
(icalendar--datetime-to-colontime dtend)
***************
*** 1202,1252 ****
(rrule
(icalendar--dmsg "recurring event")
(let* ((rrule-props (icalendar--split-value rrule))
! (frequency (car (cdr (assoc 'FREQ rrule-props))))
! (until (car (cdr (assoc 'UNTIL rrule-props))))
! (interval (read (car (cdr (assoc 'INTERVAL
! rrule-props))))))
(cond ((string-equal frequency "WEEKLY")
(if (not start-t)
(progn
;; weekly and all-day
(icalendar--dmsg "weekly all-day")
(setq diary-string
(format
! "%%%%(diary-cyclic %d %s)"
(* interval 7)
! (icalendar--datetime-to-european-date
! dtstart))))
;; weekly and not all-day
(let* ((byday (cadr (assoc 'BYDAY rrule-props)))
(weekday
(icalendar--get-weekday-number byday)))
(icalendar--dmsg "weekly not-all-day")
! (if (> weekday -1)
! (setq diary-string
! (format "%s %s%s%s"
! (aref calendar-day-name-array
! weekday)
! start-t (if end-t "-" "")
! (or end-t "")))
;; FIXME!!!!
;; DTSTART;VALUE=DATE-TIME:20030919T090000
;; DTEND;VALUE=DATE-TIME:20030919T113000
(setq diary-string
(format
! "%%%%(diary-cyclic %s %s) %s%s%s"
(* interval 7)
! (icalendar--datetime-to-european-date
dtstart)
! start-t (if end-t "-" "") (or end-t ""))))
(setq event-ok t))))
;; yearly
((string-equal frequency "YEARLY")
(icalendar--dmsg "yearly")
(setq diary-string
(format
! "%%%%(diary-anniversary %s)"
! (icalendar--datetime-to-european-date dtstart)))
(setq event-ok t))
;; FIXME: war auskommentiert:
((and (string-equal frequency "DAILY")
--- 1266,1361 ----
(rrule
(icalendar--dmsg "recurring event")
(let* ((rrule-props (icalendar--split-value rrule))
! (frequency (cadr (assoc 'FREQ rrule-props)))
! (until (cadr (assoc 'UNTIL rrule-props)))
! (interval (read (cadr (assoc 'INTERVAL rrule-props)))))
(cond ((string-equal frequency "WEEKLY")
(if (not start-t)
(progn
;; weekly and all-day
(icalendar--dmsg "weekly all-day")
+ (if until
+ (let ((fro
+ (icalendar--datetime-to-diary-date
+ (icalendar--decode-isodatetime
+ (icalendar--get-event-property
+ e
+ 'DTSTART))))
+ (unt
+ (icalendar--datetime-to-diary-date
+ (icalendar--decode-isodatetime
+ until))))
(setq diary-string
(format
! (concat "%%%%(and "
! "(diary-cyclic %d %s) "
! "(diary-block %s %s))")
(* interval 7)
! (icalendar--datetime-to-diary-date
! dtstart)
! (icalendar--datetime-to-diary-date
! dtstart)
! (icalendar--datetime-to-diary-date
! (icalendar--decode-isodatetime
! until)))))
! (setq diary-string
! (format "%%%%(and (diary-cyclic %d %s))"
! (* interval 7)
!
(icalendar--datetime-to-diary-date
! dtstart))))
! (setq event-ok t))
;; weekly and not all-day
(let* ((byday (cadr (assoc 'BYDAY rrule-props)))
(weekday
(icalendar--get-weekday-number byday)))
(icalendar--dmsg "weekly not-all-day")
! (if until
! (let ((fro
! (icalendar--datetime-to-diary-date
! (icalendar--decode-isodatetime
! (icalendar--get-event-property
! e
! 'DTSTART))))
! (unt
! (icalendar--datetime-to-diary-date
! (icalendar--decode-isodatetime
! until))))
! (setq diary-string
! (format
! (concat "%%%%(and "
! "(diary-cyclic %d %s) "
! "(diary-block %s %s)) "
! "%s%s%s")
! (* interval 7)
! (icalendar--datetime-to-diary-date
! dtstart)
! (icalendar--datetime-to-diary-date
! dtstart)
! (icalendar--datetime-to-diary-date
! (icalendar--decode-isodatetime
! until))
! start-t
! (if end-t "-" "") (or end-t ""))))
! ;; no limit
;; FIXME!!!!
;; DTSTART;VALUE=DATE-TIME:20030919T090000
;; DTEND;VALUE=DATE-TIME:20030919T113000
(setq diary-string
(format
! "%%%%(and (diary-cyclic %s %s)) %s%s%s"
(* interval 7)
! (icalendar--datetime-to-diary-date
dtstart)
! start-t
! (if end-t "-" "") (or end-t ""))))
(setq event-ok t))))
;; yearly
((string-equal frequency "YEARLY")
(icalendar--dmsg "yearly")
(setq diary-string
(format
! "%%%%(and (diary-anniversary %s))"
! (icalendar--datetime-to-diary-date dtstart)))
(setq event-ok t))
;; FIXME: war auskommentiert:
((and (string-equal frequency "DAILY")
***************
*** 1254,1273 ****
;;(not start-t)
;;(not end-t)
)
! (let ((ds (icalendar--datetime-to-noneuropean-date
(icalendar--decode-isodatetime
! (icalendar--get-event-property e
! 'DTSTART))))
! (de (icalendar--datetime-to-noneuropean-date
(icalendar--decode-isodatetime
until))))
(setq diary-string
(format
! "%%%%(diary-block %d %d %d %d %d %d)"
! (nth 1 ds) (nth 0 ds) (nth 2 ds)
! (nth 1 de) (nth 0 de) (nth 2 de))))
! (setq event-ok t)))
! ))
(rdate
(icalendar--dmsg "rdate event")
(setq diary-string "")
--- 1363,1402 ----
;;(not start-t)
;;(not end-t)
)
! (let ((ds (icalendar--datetime-to-diary-date
(icalendar--decode-isodatetime
! (icalendar--get-event-property
! e 'DTSTART))))
! (de (icalendar--datetime-to-diary-date
(icalendar--decode-isodatetime
until))))
(setq diary-string
(format
! "%%%%(and (diary-block %s %s))"
! ds de)))
! (setq event-ok t))))
! ;; Handle exceptions from recurrence rules
! (let ((ex-dates (icalendar--get-event-properties e
! 'EXDATE)))
! (while ex-dates
! (let* ((ex-start (icalendar--decode-isodatetime
! (car ex-dates)))
! (ex-d (icalendar--datetime-to-diary-date
! ex-start)))
! (setq diary-string
! (icalendar--rris "^%%(\\(and \\)?"
! (format
! "%%%%(and (not (diary-date %s)) "
! ex-d)
! diary-string)))
! (setq ex-dates (cdr ex-dates))))
! ;; FIXME: exception rules are not recognized
! (if (icalendar--get-event-property e 'EXRULE)
! (setq diary-string
! (concat diary-string
! "\n Exception rules: "
! (icalendar--get-event-properties
! e 'EXRULE)))))
(rdate
(icalendar--dmsg "rdate event")
(setq diary-string "")
***************
*** 1280,1307 ****
;; long event
((not (string= start-d end-d))
(icalendar--dmsg "non-recurring event")
! (let ((ds (icalendar--datetime-to-noneuropean-date dtstart))
! (de (icalendar--datetime-to-noneuropean-date dtend)))
(setq diary-string
! (format "%%%%(diary-block %d %d %d %d %d %d)"
! (nth 1 ds) (nth 0 ds) (nth 2 ds)
! (nth 1 de) (nth 0 de) (nth 2 de))))
(setq event-ok t))
;; not all-day
((and start-t (or (not end-t)
(not (string= start-t end-t))))
(icalendar--dmsg "not all day event")
(cond (end-t
! (setq diary-string (format "%s %s-%s" start-d
! start-t end-t)))
(t
! (setq diary-string (format "%s %s" start-d
! start-t))))
(setq event-ok t))
;; all-day event
(t
(icalendar--dmsg "all day event")
! (setq diary-string start-d)
(setq event-ok t)))
;; add all other elements unless the user doesn't want to have
;; them
--- 1409,1442 ----
;; long event
((not (string= start-d end-d))
(icalendar--dmsg "non-recurring event")
! (let ((ds (icalendar--datetime-to-diary-date dtstart))
! (de (icalendar--datetime-to-diary-date dtend)))
(setq diary-string
! (format "%%%%(and (diary-block %s %s))"
! ds de)))
(setq event-ok t))
;; not all-day
((and start-t (or (not end-t)
(not (string= start-t end-t))))
(icalendar--dmsg "not all day event")
(cond (end-t
! (setq diary-string
! (format "%s %s-%s"
! (icalendar--datetime-to-diary-date
! dtstart "/")
! start-t end-t)))
(t
! (setq diary-string
! (format "%s %s"
! (icalendar--datetime-to-diary-date
! dtstart "/")
! start-t))))
(setq event-ok t))
;; all-day event
(t
(icalendar--dmsg "all day event")
! (setq diary-string (icalendar--datetime-to-diary-date
! dtstart "/"))
(setq event-ok t)))
;; add all other elements unless the user doesn't want to have
;; them
***************
*** 1318,1329 ****
(setq error-string
(format "%s\nCannot handle this event:%s"
error-string e))))
;; handle errors
(error
(message "Ignoring event \"%s\"" e)
(setq found-error t)
! (setq error-string (format "%s\nCannot handle this event: %s"
! error-string e)))))
(if found-error
(save-current-buffer
(set-buffer (get-buffer-create " *icalendar-errors*"))
--- 1453,1466 ----
(setq error-string
(format "%s\nCannot handle this event:%s"
error-string e))))
+ ;; FIXME: inform user about ignored event properties
;; handle errors
(error
(message "Ignoring event \"%s\"" e)
(setq found-error t)
! (setq error-string (format "%s\n%s\nCannot handle this event: %s"
! error-val error-string e))
! (message error-string))))
(if found-error
(save-current-buffer
(set-buffer (get-buffer-create " *icalendar-errors*"))
***************
*** 1340,1346 ****
SUBJECT is not nil it must be a string that gives the subject of the
entry. In this case the user will be asked whether he wants to insert
the entry."
! (when (or (not subject) ;
(y-or-n-p (format "Add appointment for `%s' to diary? "
subject)))
(when subject
--- 1477,1483 ----
SUBJECT is not nil it must be a string that gives the subject of the
entry. In this case the user will be asked whether he wants to insert
the entry."
! (when (or (not subject)
(y-or-n-p (format "Add appointment for `%s' to diary? "
subject)))
(when subject
- [Emacs-diffs] Changes to emacs/lisp/calendar/icalendar.el,
Glenn Morris <=