changeset 57586:376b47c63cfd

From Ulf Jasper <ulf.jasper@web.de>: Set coding to utf-8. (icalendar-version): Increase to 0.07. (icalendar-monthnumber-table): Change March pattern. (icalendar-get-all-event-properties) (icalendar-set-event-property): Delete. (icalendar-all-events): No longer interactive. (icalendar-convert-diary-to-ical) (icalendar-extract-ical-from-buffer): Make obsolete, and alias to their replacements. (icalendar-export-file, icalendar-export-region): New functions; essentially old `icalendar-convert-diary-to-ical' but appending to target rather than overwriting. (icalendar-import-file): Append to target file rather than overwriting. Fourth arg deleted. (icalendar-import-buffer): New name for old `icalendar-extract-ical-from-buffer'. (icalendar--convert-string-for-import): New name for old `icalendar-convert-for-import'. (include-icalendar-files): Delete. Prefix for all internal functions changed from `icalendar-' to `icalendar--'.
author Glenn Morris <rgm@gnu.org>
date Tue, 19 Oct 2004 09:53:50 +0000
parents f14e6888c1ff
children 24a2d7c27b57
files lisp/calendar/icalendar.el
diffstat 1 files changed, 383 insertions(+), 373 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calendar/icalendar.el	Tue Oct 19 06:15:15 2004 +0000
+++ b/lisp/calendar/icalendar.el	Tue Oct 19 09:53:50 2004 +0000
@@ -1,10 +1,10 @@
-;;; icalendar.el --- iCalendar implementation
+;;; icalendar.el --- iCalendar implementation -*-coding: utf-8 -*-
 
 ;; Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
-;; Author:   Ulf Jasper <ulf.jasper@web.de>
-;; Created:  August 2002
-;; Keywords: calendar
+;; Author:         Ulf Jasper <ulf.jasper@web.de>
+;; Created:        August 2002
+;; Keywords:       calendar
 ;; Human-Keywords: calendar, diary, iCalendar, vCalendar
 
 ;; This file is part of GNU Emacs.
@@ -31,8 +31,18 @@
 
 ;;; History:
 
-;;  0.06  Bugfixes regarding icalendar-import-format-*.
-;;        Fix in icalendar-convert-diary-to-ical -- thanks to Philipp Grau.
+;;  0.07: Renamed commands!
+;;        icalendar-extract-ical-from-buffer -> icalendar-import-buffer
+;;        icalendar-convert-diary-to-ical    -> icalendar-export-file
+;;        Naming scheme: icalendar-.* = user command; icalendar--.* =
+;;        internal.
+;;        Added icalendar-export-region.
+;;        The import and export commands do not clear their target file,
+;;        but append their results to the target file.
+
+;;  0.06: Bugfixes regarding icalendar-import-format-*.
+;;        Fix in icalendar-convert-diary-to-ical -- thanks to Philipp
+;;        Grau.
 
 ;;  0.05: New import format scheme: Replaced icalendar-import-prefix-*,
 ;;        icalendar-import-ignored-properties, and
@@ -61,7 +71,7 @@
 ;; ======================================================================
 ;; To Do:
 
-;;  * Import from ical:
+;;  * Import from ical to diary:
 ;;    + Need more properties for icalendar-import-format
 ;;    + check vcalendar version
 ;;    + check (unknown) elements
@@ -73,24 +83,21 @@
 ;;    + error log is incomplete
 ;;    + nice to have: #include "webcal://foo.com/some-calendar.ics"
 
-;;  * Export into ical
+;;  * Export from diary to ical
 ;;    + diary-date, diary-float, and self-made sexp entries are not
 ;;      understood
 ;;    + timezones, currently all times are local!
 
 ;;  * Other things
-;;    + defcustom icalendar-import-ignored-properties does not work with
-;;      XEmacs.
 ;;    + clean up all those date/time parsing functions
 ;;    + Handle todo items?
 ;;    + Check iso 8601 for datetime and period
 ;;    + Which chars to (un)escape?
-;;    + Time to find out how the profiler works?
 
 
 ;;; Code:
 
-(defconst icalendar-version 0.06
+(defconst icalendar-version 0.07
   "Version number of icalendar.el.")
 
 ;; ======================================================================
@@ -173,7 +180,7 @@
 (defconst icalendar-monthnumber-table
   '(("^jan\\(uar\\)?y?$"       . 1)
     ("^feb\\(ruar\\)?y?$"      . 2)
-    ("^mar\\(ch\\)?\\|märz?$" . 3)
+    ("^mar\\(ch\\)?\\|märz$"   . 3)
     ("^apr\\(il\\)?$"          . 4)
     ("^ma[iy]$"                . 5)
     ("^jun[ie]?$"              . 6)
@@ -195,11 +202,19 @@
 (require 'appt)
 
 ;; ======================================================================
+;; misc
+;; ======================================================================
+(defun icalendar--dmsg (&rest args)
+  "Print message ARGS if `icalendar-debug' is non-nil."
+  (if icalendar-debug
+      (apply 'message args)))
+
+;; ======================================================================
 ;; Core functionality
 ;; Functions for parsing icalendars, importing and so on
 ;; ======================================================================
 
-(defun icalendar-get-unfolded-buffer (folded-ical-buffer)
+(defun icalendar--get-unfolded-buffer (folded-ical-buffer)
   "Return a new buffer containing the unfolded contents of a buffer.
 Folding is the iCalendar way of wrapping long lines.  In the
 created buffer all occurrences of CR LF BLANK are replaced by the
@@ -211,13 +226,12 @@
       (erase-buffer)
       (insert-buffer folded-ical-buffer)
       (while (re-search-forward "\r?\n[ \t]" nil t)
-        (replace-match "" nil nil))
-      )
+        (replace-match "" nil nil)))
     unfolded-buffer))
 
-;; Replace regexp RE with RP in string ST and return the new string.
-;; This is here for compatibility with XEmacs.
-(defsubst icalendar-rris (re rp st)
+(defsubst icalendar--rris (re rp st)
+  "Replace regexp RE with RP in string ST and return the new string.
+This is here for compatibility with XEmacs."
   ;; XEmacs:
   (if (fboundp 'replace-in-string)
       (save-match-data ;; apparently XEmacs needs save-match-data
@@ -225,7 +239,7 @@
     ;; Emacs:
     (replace-regexp-in-string re rp st)))
 
-(defun icalendar-read-element (invalue inparams)
+(defun icalendar--read-element (invalue inparams)
   "Recursively read the next iCalendar element in the current buffer.
 INVALUE gives the current iCalendar element we are reading.
 INPARAMS gives the current parameters.....
@@ -233,7 +247,7 @@
 it finds"
   (let (element children line name params param param-name param-value
                 value
-        (continue t))
+                (continue t))
     (setq children '())
     (while (and continue
                 (re-search-forward "^\\([A-Za-z0-9-]+\\)[;:]" nil t))
@@ -261,13 +275,13 @@
         (error "Oops"))
       (forward-char 1)
       (re-search-forward  "\\(.*\\)\\(\r?\n[ \t].*\\)*" nil t)
-      (setq value (icalendar-rris "\r?\n[ \t]" "" (match-string 0)))
+      (setq value (icalendar--rris "\r?\n[ \t]" "" (match-string 0)))
       (setq line (list name params value))
       (cond ((eq name 'BEGIN)
              (setq children
                    (append children
-                           (list (icalendar-read-element (intern value)
-                                                         params)))))
+                           (list (icalendar--read-element (intern value)
+                                                          params)))))
             ((eq name 'END)
              (setq continue nil))
             (t
@@ -280,11 +294,11 @@
 ;; helper functions for examining events
 ;; ======================================================================
 
-(defsubst icalendar-get-all-event-properties (event)
-  "Return the list of properties in this EVENT."
-  (car (cddr event)))
+;;(defsubst icalendar--get-all-event-properties (event)
+;;  "Return the list of properties in this EVENT."
+;;  (car (cddr event)))
 
-(defun icalendar-get-event-property (event prop)
+(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)
@@ -295,21 +309,21 @@
         (setq props (cdr props))))
     nil))
 
-(defun icalendar-set-event-property (event prop new-value)
-  "For the given EVENT set the property PROP to the value NEW-VALUE."
-  (catch 'found
-    (let ((props (car (cddr event))) pp)
-      (while props
-        (setq pp (car props))
-        (when (eq (car pp) prop)
-          (setcdr (cdr pp) new-value)
-          (throw 'found (car (cddr pp))))
-        (setq props (cdr props)))
-      (setq props (car (cddr event)))
-      (setcar (cddr event)
-              (append props (list (list prop nil new-value)))))))
+;; (defun icalendar--set-event-property (event prop new-value)
+;;   "For the given EVENT set the property PROP to the value NEW-VALUE."
+;;   (catch 'found
+;;     (let ((props (car (cddr event))) pp)
+;;       (while props
+;;         (setq pp (car props))
+;;         (when (eq (car pp) prop)
+;;           (setcdr (cdr pp) new-value)
+;;           (throw 'found (car (cddr pp))))
+;;         (setq props (cdr props)))
+;;       (setq props (car (cddr event)))
+;;       (setcar (cddr event)
+;;               (append props (list (list prop nil new-value)))))))
 
-(defun icalendar-get-children (node name)
+(defun icalendar--get-children (node name)
   "Return all children of the given NODE which have a name NAME.
 For instance the VCALENDAR node can have VEVENT children as well as VTODO
 children."
@@ -321,22 +335,21 @@
     (when children
       (let ((subresult
              (delq nil
-		   (mapcar (lambda (n)
-			     (icalendar-get-children n name))
-			   children))))
+                   (mapcar (lambda (n)
+                             (icalendar--get-children n name))
+                           children))))
         (if subresult
             (if result
                 (setq result (append result subresult))
               (setq result subresult)))))
     result))
 
-; private
-(defun icalendar-all-events (icalendar)
+                                        ; private
+(defun icalendar--all-events (icalendar)
   "Return the list of all existing events in the given ICALENDAR."
-  (interactive "")
-  (icalendar-get-children (car icalendar) 'VEVENT))
+  (icalendar--get-children (car icalendar) 'VEVENT))
 
-(defun icalendar-split-value (value-string)
+(defun icalendar--split-value (value-string)
   "Splits VALUE-STRING at ';='."
   (let ((result '())
         param-name param-value)
@@ -348,22 +361,22 @@
         (insert value-string)
         (goto-char (point-min))
         (while
-	    (re-search-forward
-	     "\\([A-Za-z0-9-]+\\)=\\(\\([^;,:]+\\)\\|\"\\([^\"]+\\)\"\\);?"
-	     nil t)
+            (re-search-forward
+             "\\([A-Za-z0-9-]+\\)=\\(\\([^;,:]+\\)\\|\"\\([^\"]+\\)\"\\);?"
+             nil t)
           (setq param-name (intern (match-string 1)))
           (setq param-value (match-string 2))
           (setq result
-		(append result (list (list param-name param-value)))))))
+                (append result (list (list param-name param-value)))))))
     result))
 
-(defun icalendar-decode-isodatetime (isodatetimestring)
+(defun icalendar--decode-isodatetime (isodatetimestring)
   "Return ISODATETIMESTRING in format like `decode-time'.
 Converts from ISO-8601 to Emacs representation.  If ISODATETIMESTRING
 specifies UTC time (trailing letter Z) the decoded time is given in
 the local time zone! FIXME: TZID-attributes are ignored....! FIXME:
 multiple comma-separated values should be allowed!"
-  (icalendar-dmsg isodatetimestring)
+  (icalendar--dmsg isodatetimestring)
   (if isodatetimestring
       ;; day/month/year must be present
       (let ((year  (read (substring isodatetimestring 0 4)))
@@ -373,14 +386,14 @@
             (minute 0)
             (second 0))
         (when (> (length isodatetimestring) 12)
-	  ;; hour/minute present
+          ;; hour/minute present
           (setq hour (read (substring isodatetimestring 9 11)))
           (setq minute (read (substring isodatetimestring 11 13))))
         (when (> (length isodatetimestring) 14)
-	  ;; seconds present
+          ;; seconds present
           (setq second (read (substring isodatetimestring 13 15))))
         (when (and (> (length isodatetimestring) 15)
-		   ;; UTC specifier present
+                   ;; UTC specifier present
                    (char-equal ?Z (aref isodatetimestring 15)))
           ;; if not UTC add current-time-zone offset
           (setq second (+ (car (current-time-zone)) second)))
@@ -395,7 +408,7 @@
     ;; isodatetimestring == nil
     nil))
 
-(defun icalendar-decode-isoduration (isodurationstring)
+(defun icalendar--decode-isoduration (isodurationstring)
   "Return ISODURATIONSTRING in format like `decode-time'.
 Converts from ISO-8601 to Emacs representation.  If ISODURATIONSTRING
 specifies UTC time (trailing letter Z) the decoded time is given in
@@ -409,7 +422,7 @@
           "\\(\\([0-9]+\\)D\\)"         ; days only
           "\\|"
           "\\(\\(\\([0-9]+\\)D\\)?T\\(\\([0-9]+\\)H\\)?" ; opt days
-          "\\(\\([0-9]+\\)M\\)?\\(\\([0-9]+\\)S\\)?\\)" ; mand. time
+          "\\(\\([0-9]+\\)M\\)?\\(\\([0-9]+\\)S\\)?\\)"  ; mand. time
           "\\|"
           "\\(\\([0-9]+\\)W\\)"         ; weeks only
           "\\)$") isodurationstring)
@@ -419,41 +432,41 @@
               (days 0)
               (months 0)
               (years 0))
-        (cond
-         ((match-beginning 2)           ;days only
-          (setq days (read (substring isodurationstring
-                                      (match-beginning 3)
-                                      (match-end 3))))
-          (when icalendar-duration-correction
-            (setq days (1- days))))
-         ((match-beginning 4)           ;days and time
-          (if (match-beginning 5)
-              (setq days (* 7 (read (substring isodurationstring
-                                               (match-beginning 6)
-                                               (match-end 6))))))
-          (if (match-beginning 7)
-              (setq hours (read (substring isodurationstring
-                                           (match-beginning 8)
-                                           (match-end 8)))))
-          (if (match-beginning 9)
-              (setq minutes (read (substring isodurationstring
-                                             (match-beginning 10)
-                                             (match-end 10)))))
-          (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)))
+          (cond
+           ((match-beginning 2)         ;days only
+            (setq days (read (substring isodurationstring
+                                        (match-beginning 3)
+                                        (match-end 3))))
+            (when icalendar-duration-correction
+              (setq days (1- days))))
+           ((match-beginning 4)         ;days and time
+            (if (match-beginning 5)
+                (setq days (* 7 (read (substring isodurationstring
+                                                 (match-beginning 6)
+                                                 (match-end 6))))))
+            (if (match-beginning 7)
+                (setq hours (read (substring isodurationstring
+                                             (match-beginning 8)
+                                             (match-end 8)))))
+            (if (match-beginning 9)
+                (setq minutes (read (substring isodurationstring
+                                               (match-beginning 10)
+                                               (match-end 10)))))
+            (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))
 
-(defun icalendar-add-decoded-times (time1 time2)
+(defun icalendar--add-decoded-times (time1 time2)
   "Add TIME1 to TIME2.
 Both times must be given in decoded form.  One of these times must be
 valid (year > 1900 or something)."
@@ -470,40 +483,40 @@
                 ;;(or (nth 6 time1) (nth 6 time2)) ;; FIXME?
                 )))
 
-(defun icalendar-datetime-to-noneuropean-date (datetime)
+(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
+      (list (nth 4 datetime)            ;month
+            (nth 3 datetime)            ;day
+            (nth 5 datetime))           ;year
     ;; datetime == nil
     nil))
 
-(defun icalendar-datetime-to-european-date (datetime)
+(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
+      (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)
+(defun icalendar--datetime-to-colontime (datetime)
   "Extract the time part of a decoded DATETIME into 24-hour format.
 Note that this silently ignores seconds."
   (format "%02d:%02d" (nth 2 datetime) (nth 1 datetime)))
 
-(defun icalendar-get-month-number (monthname)
+(defun icalendar--get-month-number (monthname)
   "Return the month number for the given MONTHNAME."
   (save-match-data
     (let ((case-fold-search t))
       (assoc-default monthname icalendar-monthnumber-table
                      'string-match))))
 
-(defun icalendar-get-weekday-abbrev (weekday)
+(defun icalendar--get-weekday-abbrev (weekday)
   "Return the abbreviated WEEKDAY."
   ;;FIXME: ISO-like(?).
   (save-match-data
@@ -511,108 +524,118 @@
       (assoc-default weekday icalendar-weekdayabbrev-table
                      'string-match))))
 
-(defun icalendar-datestring-to-isodate (datestring &optional day-shift)
+(defun icalendar--datestring-to-isodate (datestring &optional day-shift)
   "Convert diary-style DATESTRING to iso-style date.
 If DAY-SHIFT is non-nil, the result is shifted by DAY-SHIFT days
 -- DAY-SHIFT must be either nil or an integer.  This function
 takes care of european-style."
   (let ((day -1) month year)
     (save-match-data
-      (cond (;; numeric date
-	     (string-match (concat "\\s-*"
-				   "0?\\([1-9][0-9]?\\)[ \t/]\\s-*"
-				   "0?\\([1-9][0-9]?\\),?[ \t/]\\s-*"
-				   "\\([0-9]\\{4\\}\\)")
-			   datestring)
-	     (setq day (read (substring datestring (match-beginning 1)
-					(match-end 1))))
-	     (setq month (read (substring datestring (match-beginning 2)
-					  (match-end 2))))
-	     (setq year (read (substring datestring (match-beginning 3)
-					 (match-end 3))))
-	     (unless european-calendar-style
-	       (let ((x month))
-		 (setq month day)
-		 (setq day x))))
-	    (;; date contains month names -- european-style
-	     (and european-calendar-style
-		  (string-match (concat "\\s-*"
-					"0?\\([123]?[0-9]\\)[ \t/]\\s-*"
-					"\\([A-Za-z][^ ]+\\)[ \t/]\\s-*"
-					"\\([0-9]\\{4\\}\\)")
-				datestring))
-		 (setq day (read (substring datestring (match-beginning 1)
-					    (match-end 1))))
-		 (setq month (icalendar-get-month-number
-			      (substring datestring (match-beginning 2)
-					 (match-end 2))))
-		 (setq year (read (substring datestring (match-beginning 3)
-					     (match-end 3)))))
-	    (;; date contains month names -- non-european-style
-	     (and (not european-calendar-style)
-		  (string-match (concat "\\s-*"
-					"\\([A-Za-z][^ ]+\\)[ \t/]\\s-*"
-					"0?\\([123]?[0-9]\\),?[ \t/]\\s-*"
-					"\\([0-9]\\{4\\}\\)")
-				datestring))
-	     (setq day (read (substring datestring (match-beginning 2)
-					(match-end 2))))
-	     (setq month (icalendar-get-month-number
-			  (substring datestring (match-beginning 1)
-				     (match-end 1))))
-	     (setq year (read (substring datestring (match-beginning 3)
-					 (match-end 3)))))
-	    (t
-	     nil)))
+      (cond ( ;; numeric date
+             (string-match (concat "\\s-*"
+                                   "0?\\([1-9][0-9]?\\)[ \t/]\\s-*"
+                                   "0?\\([1-9][0-9]?\\),?[ \t/]\\s-*"
+                                   "\\([0-9]\\{4\\}\\)")
+                           datestring)
+             (setq day (read (substring datestring (match-beginning 1)
+                                        (match-end 1))))
+             (setq month (read (substring datestring (match-beginning 2)
+                                          (match-end 2))))
+             (setq year (read (substring datestring (match-beginning 3)
+                                         (match-end 3))))
+             (unless european-calendar-style
+               (let ((x month))
+                 (setq month day)
+                 (setq day x))))
+            ( ;; date contains month names -- european-style
+             (and european-calendar-style
+                  (string-match (concat "\\s-*"
+                                        "0?\\([123]?[0-9]\\)[ \t/]\\s-*"
+                                        "\\([A-Za-z][^ ]+\\)[ \t/]\\s-*"
+                                        "\\([0-9]\\{4\\}\\)")
+                                datestring))
+             (setq day (read (substring datestring (match-beginning 1)
+                                        (match-end 1))))
+             (setq month (icalendar--get-month-number
+                          (substring datestring (match-beginning 2)
+                                     (match-end 2))))
+             (setq year (read (substring datestring (match-beginning 3)
+                                         (match-end 3)))))
+            ( ;; date contains month names -- non-european-style
+             (and (not european-calendar-style)
+                  (string-match (concat "\\s-*"
+                                        "\\([A-Za-z][^ ]+\\)[ \t/]\\s-*"
+                                        "0?\\([123]?[0-9]\\),?[ \t/]\\s-*"
+                                        "\\([0-9]\\{4\\}\\)")
+                                datestring))
+             (setq day (read (substring datestring (match-beginning 2)
+                                        (match-end 2))))
+             (setq month (icalendar--get-month-number
+                          (substring datestring (match-beginning 1)
+                                     (match-end 1))))
+             (setq year (read (substring datestring (match-beginning 3)
+                                         (match-end 3)))))
+            (t
+             nil)))
     (if (> day 0)
-	(let ((mdy (calendar-gregorian-from-absolute
-		    (+ (calendar-absolute-from-gregorian (list month day year))
-		       (or day-shift 0)))))
-	  (format "%04d%02d%02d" (nth 2 mdy) (nth 0 mdy) (nth 1 mdy)))
+        (let ((mdy (calendar-gregorian-from-absolute
+                    (+ (calendar-absolute-from-gregorian (list month day
+							       year))
+                       (or day-shift 0)))))
+          (format "%04d%02d%02d" (nth 2 mdy) (nth 0 mdy) (nth 1 mdy)))
       nil)))
 
-(defun icalendar-dmsg (&rest args)
-  "Print message ARGS if `icalendar-debug' is non-nil."
-  (if icalendar-debug
-      (apply 'message args)))
-
-(defun icalendar-diarytime-to-isotime (timestring ampmstring)
+(defun icalendar--diarytime-to-isotime (timestring ampmstring)
   "Convert a a time like 9:30pm to an iso-conform string like T213000.
 In this example the TIMESTRING would be \"9:30\" and the AMPMSTRING
 would be \"pm\"."
   (if timestring
-      (let ((starttimenum (read (icalendar-rris ":" "" timestring))))
+      (let ((starttimenum (read (icalendar--rris ":" "" timestring))))
         ;; take care of am/pm style
         (if (and ampmstring (string= "pm" ampmstring))
             (setq starttimenum (+ starttimenum 1200)))
         (format "T%04d00" starttimenum))
     nil))
 
-(defun icalendar-convert-string-for-export (s)
+(defun icalendar--convert-string-for-export (s)
   "Escape comma and other critical characters in string S."
-  (icalendar-rris "," "\\\\," s))
+  (icalendar--rris "," "\\\\," s))
 
-(defun icalendar-convert-for-import (string)
+(defun icalendar--convert-string-for-import (string)
   "Remove escape chars for comma, semicolon etc. from STRING."
-  (icalendar-rris
-   "\\\\n" "\n " (icalendar-rris
-               "\\\\\"" "\"" (icalendar-rris
-                              "\\\\;" ";" (icalendar-rris
-                                           "\\\\," "," string)))))
+  (icalendar--rris
+   "\\\\n" "\n " (icalendar--rris
+                  "\\\\\"" "\"" (icalendar--rris
+                                 "\\\\;" ";" (icalendar--rris
+                                              "\\\\," "," string)))))
 
 ;; ======================================================================
-;; export -- convert emacs-diary to icalendar
+;; Export -- convert emacs-diary to icalendar
 ;; ======================================================================
 
-(defun icalendar-convert-diary-to-ical (diary-filename ical-filename
-                                        &optional do-not-clear-diary-file)
-  "Export diary file to iCalendar format -- erases ical-filename!!!.
-Argument DIARY-FILENAME is the input `diary-file'.
-Argument ICAL-FILENAME is the output iCalendar file.
-If DO-NOT-CLEAR-DIARY-FILE is not nil the target iCalendar file
-is not erased."
+;; User function
+(defun icalendar-export-file (diary-filename ical-filename)
+  "Export diary file to iCalendar format.
+All diary entries in the file DIARY-FILENAME are converted to iCalendar
+format.  The result is appended to the file ICAL-FILENAME."
   (interactive "FExport diary data from file:
 Finto iCalendar file: ")
+  (save-current-buffer
+    (set-buffer (find-file diary-filename))
+    (icalendar-export-region (point-min) (point-max) ical-filename)))
+
+(defalias 'icalendar-convert-diary-to-ical 'icalendar-export-file)
+(make-obsolete 'icalendar-convert-diary-to-ical 'icalendar-export-file
+               "icalendar 0.07")
+
+;; User function
+(defun icalendar-export-region (min max ical-filename)
+  "Export region in diary file to iCalendar format.
+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."
+  (interactive "r
+FExport diary data into iCalendar file: ")
   (let ((result "")
         (start 0)
         (entry-main "")
@@ -621,12 +644,11 @@
         (contents)
         (oops nil)
         (nonmarker (concat "^" (regexp-quote diary-nonmarking-symbol)
-			   "?")))
-    (save-current-buffer
-      (set-buffer (find-file diary-filename))
-      (goto-char (point-min))
+                           "?")))
+    (save-excursion
+      (goto-char min)
       (while (re-search-forward
-              "^\\([^ \t\n].*\\)\\(\n[ \t].*\\)*" nil t)
+              "^\\([^ \t\n].*\\)\\(\n[ \t].*\\)*" max t)
         (setq entry-main (match-string 1))
         (if (match-beginning 2)
             (setq entry-rest (match-string 2))
@@ -642,16 +664,16 @@
            (concat nonmarker
                    "%%(diary-anniversary \\([^)]+\\))\\s-*\\(.*\\)")
            entry-main)
-          (icalendar-dmsg "diary-anniversary %s" entry-main)
+          (icalendar--dmsg "diary-anniversary %s" entry-main)
           (let* ((datetime (substring entry-main (match-beginning 1)
                                       (match-end 1)))
-                 (summary (icalendar-convert-string-for-export
+                 (summary (icalendar--convert-string-for-export
                            (substring entry-main (match-beginning 2)
                                       (match-end 2))))
-                 (startisostring (icalendar-datestring-to-isodate
-				  datetime))
-                 (endisostring (icalendar-datestring-to-isodate
-				datetime 1)))
+                 (startisostring (icalendar--datestring-to-isodate
+                                  datetime))
+                 (endisostring (icalendar--datestring-to-isodate
+                                datetime 1)))
             (setq contents
                   (concat "\nDTSTART;VALUE=DATE:" startisostring
                           "\nDTEND;VALUE=DATE:" endisostring
@@ -666,7 +688,7 @@
                           )))
           (unless (string= entry-rest "")
             (setq contents (concat contents "\nDESCRIPTION:"
-                                   (icalendar-convert-string-for-export
+                                   (icalendar--convert-string-for-export
                                     entry-rest)))))
          ;; cyclic events
          ;; %%(diary-cyclic )
@@ -675,18 +697,18 @@
                    "%%(diary-cyclic \\([^ ]+\\) +"
                    "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*\\(.*\\)")
            entry-main)
-          (icalendar-dmsg "diary-cyclic %s" entry-main)
+          (icalendar--dmsg "diary-cyclic %s" entry-main)
           (let* ((frequency (substring entry-main (match-beginning 1)
                                        (match-end 1)))
                  (datetime (substring entry-main (match-beginning 2)
                                       (match-end 2)))
-                 (summary (icalendar-convert-string-for-export
+                 (summary (icalendar--convert-string-for-export
                            (substring entry-main (match-beginning 3)
                                       (match-end 3))))
-                 (startisostring (icalendar-datestring-to-isodate
-				  datetime))
-                 (endisostring (icalendar-datestring-to-isodate
-				datetime 1)))
+                 (startisostring (icalendar--datestring-to-isodate
+                                  datetime))
+                 (endisostring (icalendar--datestring-to-isodate
+                                datetime 1)))
             (setq contents
                   (concat "\nDTSTART;VALUE=DATE:" startisostring
                           "\nDTEND;VALUE=DATE:" endisostring
@@ -697,21 +719,21 @@
                           )))
           (unless (string= entry-rest "")
             (setq contents (concat contents "\nDESCRIPTION:"
-                                   (icalendar-convert-string-for-export
+                                   (icalendar--convert-string-for-export
                                     entry-rest)))))
          ;; diary-date -- FIXME
          ((string-match
            (concat nonmarker
                    "%%(diary-date \\([^)]+\\))\\s-*\\(.*\\)")
            entry-main)
-          (icalendar-dmsg "diary-date %s" entry-main)
+          (icalendar--dmsg "diary-date %s" entry-main)
           (setq oops t))
          ;; float events -- FIXME
          ((string-match
            (concat nonmarker
                    "%%(diary-float \\([^)]+\\))\\s-*\\(.*\\)")
            entry-main)
-          (icalendar-dmsg "diary-float %s" entry-main)
+          (icalendar--dmsg "diary-float %s" entry-main)
           (setq oops t))
          ;; block events
          ((string-match
@@ -719,18 +741,18 @@
                    "%%(diary-block \\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\) +"
                    "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\))\\s-*\\(.*\\)")
            entry-main)
-          (icalendar-dmsg "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
+                 (summary (icalendar--convert-string-for-export
                            (substring entry-main (match-beginning 3)
                                       (match-end 3))))
-                 (startisostring (icalendar-datestring-to-isodate
-				  startstring))
-                 (endisostring (icalendar-datestring-to-isodate
-				endstring 1)))
+                 (startisostring (icalendar--datestring-to-isodate
+                                  startstring))
+                 (endisostring (icalendar--datestring-to-isodate
+                                endstring 1)))
             (setq contents
                   (concat "\nDTSTART;VALUE=DATE:" startisostring
                           "\nDTEND;VALUE=DATE:" endisostring
@@ -738,14 +760,14 @@
                           ))
             (unless (string= entry-rest "")
               (setq contents (concat contents "\nDESCRIPTION:"
-                                     (icalendar-convert-string-for-export
+                                     (icalendar--convert-string-for-export
                                       entry-rest))))))
          ;; other sexp diary entries -- FIXME
          ((string-match
            (concat nonmarker
                    "%%(\\([^)]+\\))\\s-*\\(.*\\)")
            entry-main)
-          (icalendar-dmsg "diary-sexp %s" entry-main)
+          (icalendar--dmsg "diary-sexp %s" entry-main)
           (setq oops t))
          ;; weekly by day
          ;; Monday 8:30 Team meeting
@@ -758,13 +780,13 @@
                         "\\)?"
                         "\\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
+               (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)
                                   (match-end 1))))
-                 (starttimestring (icalendar-diarytime-to-isotime
+                 (starttimestring (icalendar--diarytime-to-isotime
                                    (if (match-beginning 3)
                                        (substring entry-main
                                                   (match-beginning 3)
@@ -775,24 +797,24 @@
                                                   (match-beginning 4)
                                                   (match-end 4))
                                      nil)))
-                 (endtimestring (icalendar-diarytime-to-isotime
+                 (endtimestring (icalendar--diarytime-to-isotime
                                  (if (match-beginning 6)
                                      (substring entry-main
-						(match-beginning 6)
+                                                (match-beginning 6)
                                                 (match-end 6))
                                    nil)
                                  (if (match-beginning 7)
                                      (substring entry-main
-						(match-beginning 7)
+                                                (match-beginning 7)
                                                 (match-end 7))
                                    nil)))
-                 (summary (icalendar-convert-string-for-export
+                 (summary (icalendar--convert-string-for-export
                            (substring entry-main (match-beginning 8)
                                       (match-end 8)))))
             (when starttimestring
               (unless endtimestring
-                (let ((time (read (icalendar-rris "^T0?" ""
-						  starttimestring))))
+                (let ((time (read (icalendar--rris "^T0?" ""
+                                                   starttimestring))))
                   (setq endtimestring (format "T%06d" (+ 10000 time))))))
             (setq contents
                   (concat "\nDTSTART"
@@ -809,7 +831,7 @@
                           )))
           (unless (string= entry-rest "")
             (setq contents (concat contents "\nDESCRIPTION:"
-                                   (icalendar-convert-string-for-export
+                                   (icalendar--convert-string-for-export
                                     entry-rest)))))
          ;; yearly by day
          ;; 1 May Tag der Arbeit
@@ -821,20 +843,20 @@
                    "\\*?\\s-*"
                    "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
                    "\\("
-		   "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
-		   "\\)?"
-                   "\\s-*\\([^0-9]+.*\\)$"; must not match years
+                   "-0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?\\)?"
+                   "\\)?"
+                   "\\s-*\\([^0-9]+.*\\)$" ; must not match years
                    )
            entry-main)
-          (icalendar-dmsg "yearly %s" entry-main)
+          (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
+                 (month (icalendar--get-month-number
                          (substring entry-main (match-beginning monpos)
                                     (match-end monpos))))
-                 (starttimestring (icalendar-diarytime-to-isotime
+                 (starttimestring (icalendar--diarytime-to-isotime
                                    (if (match-beginning 4)
                                        (substring entry-main
                                                   (match-beginning 4)
@@ -845,24 +867,24 @@
                                                   (match-beginning 5)
                                                   (match-end 5))
                                      nil)))
-                 (endtimestring (icalendar-diarytime-to-isotime
+                 (endtimestring (icalendar--diarytime-to-isotime
                                  (if (match-beginning 7)
                                      (substring entry-main
-						(match-beginning 7)
+                                                (match-beginning 7)
                                                 (match-end 7))
                                    nil)
                                  (if (match-beginning 8)
                                      (substring entry-main
-						(match-beginning 8)
+                                                (match-beginning 8)
                                                 (match-end 8))
                                    nil)))
-                 (summary (icalendar-convert-string-for-export
+                 (summary (icalendar--convert-string-for-export
                            (substring entry-main (match-beginning 9)
                                       (match-end 9)))))
             (when starttimestring
               (unless endtimestring
-                (let ((time (read (icalendar-rris "^T0?" ""
-						  starttimestring))))
+                (let ((time (read (icalendar--rris "^T0?" ""
+                                                   starttimestring))))
                   (setq endtimestring (format "T%06d" (+ 10000 time))))))
             (setq contents
                   (concat "\nDTSTART"
@@ -881,7 +903,7 @@
                           )))
           (unless (string= entry-rest "")
             (setq contents (concat contents "\nDESCRIPTION:"
-                                   (icalendar-convert-string-for-export
+                                   (icalendar--convert-string-for-export
                                     entry-rest)))))
          ;; "ordinary" events, start and end time given
          ;; 1 Feb 2003 Hs Hochzeitsfeier, Dreieich
@@ -890,15 +912,15 @@
                    "\\([^ /]+[ /]+[^ /]+[ /]+[^ ]+\\)\\s-+"
                    "\\(0?\\([1-9][0-9]?:[0-9][0-9]\\)\\([ap]m\\)?"
                    "\\("
-		   "-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-dmsg "ordinary %s" entry-main)
-          (let* ((datestring (icalendar-datestring-to-isodate
+          (icalendar--dmsg "ordinary %s" entry-main)
+          (let* ((datestring (icalendar--datestring-to-isodate
                               (substring entry-main (match-beginning 1)
                                          (match-end 1))))
-                 (starttimestring (icalendar-diarytime-to-isotime
+                 (starttimestring (icalendar--diarytime-to-isotime
                                    (if (match-beginning 3)
                                        (substring entry-main
                                                   (match-beginning 3)
@@ -909,38 +931,38 @@
                                                   (match-beginning 4)
                                                   (match-end 4))
                                      nil)))
-                 (endtimestring (icalendar-diarytime-to-isotime
+                 (endtimestring (icalendar--diarytime-to-isotime
                                  (if (match-beginning 6)
                                      (substring entry-main
-						(match-beginning 6)
+                                                (match-beginning 6)
                                                 (match-end 6))
                                    nil)
                                  (if (match-beginning 7)
                                      (substring entry-main
-						(match-beginning 7)
+                                                (match-beginning 7)
                                                 (match-end 7))
                                    nil)))
-                 (summary (icalendar-convert-string-for-export
+                 (summary (icalendar--convert-string-for-export
                            (substring entry-main (match-beginning 8)
                                       (match-end 8)))))
             (when starttimestring
               (unless endtimestring
-                (let ((time (read (icalendar-rris "^T0?" ""
-						  starttimestring))))
+                (let ((time (read (icalendar--rris "^T0?" ""
+                                                   starttimestring))))
                   (setq endtimestring (format "T%06d" (+ 10000 time))))))
             (setq contents (format
-			    "\nDTSTART%s:%s%s\nDTEND%s:%s%s\nSUMMARY:%s"
-			    (if starttimestring "" ";VALUE=DATE")
-			    datestring
-			    (or starttimestring "")
-			    (if endtimestring ""
-			      ";VALUE=DATE")
-			    datestring
-			    (or endtimestring "")
-			    summary))
+                            "\nDTSTART%s:%s%s\nDTEND%s:%s%s\nSUMMARY:%s"
+                            (if starttimestring "" ";VALUE=DATE")
+                            datestring
+                            (or starttimestring "")
+                            (if endtimestring ""
+                              ";VALUE=DATE")
+                            datestring
+                            (or endtimestring "")
+                            summary))
             (unless (string= entry-rest "")
               (setq contents (concat contents "\nDESCRIPTION:"
-                                     (icalendar-convert-string-for-export
+                                     (icalendar--convert-string-for-export
                                       entry-rest))))))
          ;; everything else
          (t
@@ -948,52 +970,42 @@
           (setq oops t)))
         (if oops
             (message "Cannot export entry on line %d"
-		     (count-lines (point-min) (point)))
+                     (count-lines (point-min) (point)))
           (setq result (concat result header contents "\nEND:VEVENT"))))
       ;; we're done, insert everything into the file
       (let ((coding-system-for-write 'utf8))
         (set-buffer (find-file ical-filename))
-        (unless do-not-clear-diary-file
-          (erase-buffer))
-        (insert
-	 "BEGIN:VCALENDAR\nPRODID:-//Emacs//NONSGML icalendar.el//EN")
+        (goto-char (point-max))
+        (insert "BEGIN:VCALENDAR")
+	(insert "\nPRODID:-//Emacs//NONSGML icalendar.el//EN")
         (insert "\nVERSION:2.0")
         (insert result)
         (insert "\nEND:VCALENDAR\n")))))
 
-
 ;; ======================================================================
-;; import -- convert icalendar to emacs-diary
+;; Import -- convert icalendar to emacs-diary
 ;; ======================================================================
 
-;; user function
+;; User function
 (defun icalendar-import-file (ical-filename diary-filename
-                                            &optional non-marking
-                                            do-not-clear-diary-file)
-  "Import a iCalendar file and save to a diary file -- erases diary-file!
+                                            &optional non-marking)
+  "Import a iCalendar file and append to a diary file.
 Argument ICAL-FILENAME output iCalendar file.
 Argument DIARY-FILENAME input `diary-file'.
 Optional argument NON-MARKING determines whether events are created as
-non-marking or not.
-If DO-NOT-CLEAR-DIARY-FILE is not nil the target diary file is
-not erased."
+non-marking or not."
   (interactive "fImport iCalendar data from file:
-Finto diary file (will be erased!):
+Finto diary file:
 p")
   ;; clean up the diary file
   (save-current-buffer
-    (unless do-not-clear-diary-file
-      ;; clear the target diary file
-      (set-buffer (find-file diary-filename))
-      (erase-buffer))
     ;; now load and convert from the ical file
     (set-buffer (find-file ical-filename))
-    (icalendar-extract-ical-from-buffer diary-filename t non-marking)))
+    (icalendar-import-buffer diary-filename t non-marking)))
 
-; user function
-(defun icalendar-extract-ical-from-buffer (&optional
-					   diary-file do-not-ask
-					   non-marking)
+;; User function
+(defun icalendar-import-buffer (&optional diary-file do-not-ask
+                                          non-marking)
   "Extract iCalendar events from current buffer.
 
 This function searches the current buffer for the first iCalendar
@@ -1013,7 +1025,7 @@
   (save-current-buffer
     ;; prepare ical
     (message "Preparing icalendar...")
-    (set-buffer (icalendar-get-unfolded-buffer (current-buffer)))
+    (set-buffer (icalendar--get-unfolded-buffer (current-buffer)))
     (goto-char (point-min))
     (message "Preparing icalendar...done")
     (if (re-search-forward "^BEGIN:VCALENDAR\\s-*$" nil t)
@@ -1021,11 +1033,11 @@
           ;; read ical
           (message "Reading icalendar...")
           (beginning-of-line)
-          (setq ical-contents (icalendar-read-element nil nil))
+          (setq ical-contents (icalendar--read-element nil nil))
           (message "Reading icalendar...done")
           ;; convert ical
           (message "Converting icalendar...")
-          (setq ical-errors (icalendar-convert-ical-to-diary
+          (setq ical-errors (icalendar--convert-ical-to-diary
                              ical-contents
                              diary-file do-not-ask non-marking))
           (when diary-file
@@ -1035,17 +1047,23 @@
               (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? ")))
+                                (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
+               "icalendar 0.07")
+
+;; ======================================================================
 ;; private area
-;; ----------------------------------------------------------------------
-(defun icalendar-format-ical-event (event)
+;; ======================================================================
+
+(defun icalendar--format-ical-event (event)
   "Create a string representation of an iCalendar EVENT."
   (let ((string icalendar-import-format)
         (conversion-list
@@ -1058,25 +1076,23 @@
               (let* ((spec (car i))
                      (prop (cadr i))
                      (format (car (cddr i)))
-                     (contents (icalendar-get-event-property event prop))
+                     (contents (icalendar--get-event-property event prop))
                      (formatted-contents ""))
-                ;;(message "%s" event)
-                ;;(message "contents%s = %s" prop contents)
                 (when (and contents (> (length contents) 0))
                   (setq formatted-contents
-                        (icalendar-rris "%s"
-                                        (icalendar-convert-for-import
-                                         contents)
-                                        (symbol-value format))))
-                (setq string (icalendar-rris spec
-                                             formatted-contents
-                                             string))))
+                        (icalendar--rris "%s"
+                                         (icalendar--convert-string-for-import
+                                          contents)
+                                         (symbol-value format))))
+                (setq string (icalendar--rris spec
+                                              formatted-contents
+                                              string))))
             conversion-list)
     string))
 
-(defun icalendar-convert-ical-to-diary (ical-list diary-file
-                                                  &optional do-not-ask
-                                                  non-marking)
+(defun icalendar--convert-ical-to-diary (ical-list diary-file
+                                                   &optional do-not-ask
+                                                   non-marking)
   "Convert an iCalendar file to an Emacs diary file.
 Import VEVENTS from the iCalendar object ICAL-LIST and saves them to a
 DIARY-FILE.  If DO-NOT-ASK is nil the user is asked for each event
@@ -1085,7 +1101,7 @@
 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*'."
-  (let* ((ev (icalendar-all-events ical-list))
+  (let* ((ev (icalendar--all-events ical-list))
          (error-string "")
          (event-ok t)
          (found-error nil)
@@ -1096,69 +1112,69 @@
       (setq ev (cdr ev))
       (setq event-ok nil)
       (condition-case error-val
-          (let* ((dtstart (icalendar-decode-isodatetime
-                           (icalendar-get-event-property e 'DTSTART)))
+          (let* ((dtstart (icalendar--decode-isodatetime
+                           (icalendar--get-event-property e 'DTSTART)))
                  (start-d (calendar-date-string
-                           (icalendar-datetime-to-noneuropean-date
-			    dtstart)
+                           (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)))
+                 (start-t (icalendar--datetime-to-colontime dtstart))
+                 (dtend (icalendar--decode-isodatetime
+                         (icalendar--get-event-property e 'DTEND)))
                  end-d
                  end-t
-                 (subject (icalendar-convert-for-import
-                           (or (icalendar-get-event-property e 'SUMMARY)
+                 (subject (icalendar--convert-string-for-import
+                           (or (icalendar--get-event-property e 'SUMMARY)
                                "No Subject")))
-                 (rrule (icalendar-get-event-property e 'RRULE))
-                 (rdate (icalendar-get-event-property e 'RDATE))
-                 (duration (icalendar-get-event-property e 'DURATION)))
-            (icalendar-dmsg "%s: %s" start-d subject)
+                 (rrule (icalendar--get-event-property e 'RRULE))
+                 (rdate (icalendar--get-event-property e 'RDATE))
+                 (duration (icalendar--get-event-property e 'DURATION)))
+            (icalendar--dmsg "%s: %s" start-d subject)
             (when duration
-              (let ((dtend2 (icalendar-add-decoded-times
+              (let ((dtend2 (icalendar--add-decoded-times
                              dtstart
-                             (icalendar-decode-isoduration duration))))
+                             (icalendar--decode-isoduration duration))))
                 (if (and dtend (not (eq dtend dtend2)))
                     (message "Inconsistent endtime and duration for %s"
                              subject))
                 (setq dtend dtend2)))
             (setq end-d (if dtend
                             (calendar-date-string
-                             (icalendar-datetime-to-noneuropean-date
-			      dtend)
+                             (icalendar--datetime-to-noneuropean-date
+                              dtend)
                              t t)
                           start-d))
             (setq end-t (if dtend
-                            (icalendar-datetime-to-colontime dtend)
+                            (icalendar--datetime-to-colontime dtend)
                           start-t))
-            (icalendar-dmsg "start-d: %s, end-d: %s" start-d end-d)
+            (icalendar--dmsg "start-d: %s, end-d: %s" start-d end-d)
             (cond
              ;; recurring event
              (rrule
-              (icalendar-dmsg "recurring event")
-              (let* ((rrule-props (icalendar-split-value 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))))))
+                                                       rrule-props))))))
                 (cond ((string-equal frequency "WEEKLY")
                        (if (not start-t)
                            (progn
                              ;; weekly and all-day
-                             (icalendar-dmsg "weekly all-day")
+                             (icalendar--dmsg "weekly all-day")
                              (setq diary-string
                                    (format
-				    "%%%%(diary-cyclic %d %s)"
-				    (* interval 7)
-				    (icalendar-datetime-to-european-date
-				     dtstart))))
+                                    "%%%%(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
-				 (cdr (rassoc
-				       byday
-				       icalendar-weekdayabbrev-table))))
-                           (icalendar-dmsg "weekly not-all-day")
+                                 (cdr (rassoc
+                                       byday
+                                       icalendar-weekdayabbrev-table))))
+                           (icalendar--dmsg "weekly not-all-day")
                            (if weekday
                                (setq diary-string
                                      (format "%s %s%s%s" weekday
@@ -1169,19 +1185,19 @@
                              ;; 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 ""))))
+                                    "%%%%(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")
+                       (icalendar--dmsg "yearly")
                        (setq diary-string
                              (format
-			      "%%%%(diary-anniversary %s)"
-			      (icalendar-datetime-to-european-date dtstart)))
+                              "%%%%(diary-anniversary %s)"
+                              (icalendar--datetime-to-european-date dtstart)))
                        (setq event-ok t))
                       ;; FIXME: war auskommentiert:
                       ((and (string-equal frequency "DAILY")
@@ -1189,34 +1205,34 @@
                             ;;(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
+                       (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))))
+                                "%%%%(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")
+              (icalendar--dmsg "rdate event")
               (setq diary-string "")
               (mapcar (lambda (datestring)
                         (setq diary-string
                               (concat diary-string
                                       (format "......"))))
-                      (icalendar-split-value rdate)))
+                      (icalendar--split-value rdate)))
              ;; non-recurring event
              ;; 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)))
+              (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)
@@ -1225,17 +1241,17 @@
              ;; not all-day
              ((and start-t (or (not end-t)
                                (not (string= start-t end-t))))
-              (icalendar-dmsg "not all day event")
+              (icalendar--dmsg "not all day event")
               (cond (end-t
                      (setq diary-string (format "%s %s-%s" start-d
-						start-t end-t)))
+                                                start-t end-t)))
                     (t
                      (setq diary-string (format "%s %s" start-d
-						start-t))))
+                                                start-t))))
               (setq event-ok t))
              ;; all-day event
              (t
-              (icalendar-dmsg "all day event")
+              (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
@@ -1243,16 +1259,16 @@
             (if event-ok
                 (progn
                   (setq diary-string
-			(concat diary-string " "
-				(icalendar-format-ical-event e)))
+                        (concat diary-string " "
+                                (icalendar--format-ical-event e)))
                   (if do-not-ask (setq subject nil))
-                  (icalendar-add-diary-entry diary-string diary-file
-                                             non-marking subject))
+                  (icalendar--add-diary-entry diary-string diary-file
+                                              non-marking subject))
               ;; event was not ok
               (setq found-error t)
               (setq error-string
-		    (format "%s\nCannot handle this event:%s"
-			    error-string e))))
+                    (format "%s\nCannot handle this event:%s"
+                            error-string e))))
         ;; handle errors
         (error
          (message "Ignoring event \"%s\"" e)
@@ -1267,17 +1283,17 @@
     (message "Converting icalendar...done")
     found-error))
 
-(defun icalendar-add-diary-entry (string diary-file non-marking
-                                         &optional subject)
+(defun icalendar--add-diary-entry (string diary-file non-marking
+                                          &optional subject)
   "Add STRING to the diary file DIARY-FILE.
 STRING must be a properly formatted valid diary entry.  NON-MARKING
 determines whether diary events are created as non-marking.  If
 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)                       ;
+  (when (or (not subject)               ;
             (y-or-n-p (format "Add appointment for `%s' to diary? "
-			      subject)))
+                              subject)))
     (when subject
       (setq non-marking
             (y-or-n-p (format "Make appointment non-marking? "))))
@@ -1287,12 +1303,6 @@
               (read-file-name "Add appointment to this diary file: ")))
       (make-diary-entry string non-marking diary-file))))
 
-;; ======================================================================
-;; (add-hook 'list-diary-entries-hook 'include-icalendar-files)
-;; ======================================================================
-(defun include-icalendar-files ()
-  "Not yet implemented.")
-
 (provide 'icalendar)
 
 ;; arch-tag: 74fdbe8e-0451-4e38-bb61-4416e822f4fc