unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#11525: 24.0.97; Add icalendar-import-format-uid
@ 2012-05-20 13:54 Leo
  2012-05-21 18:13 ` Ulf Jasper
  0 siblings, 1 reply; 3+ messages in thread
From: Leo @ 2012-05-20 13:54 UTC (permalink / raw)
  To: 11525

[-- Attachment #1: Type: text/plain, Size: 227 bytes --]

Hello Ulf,

I am teaching Gnus to add invitation/events to diary and so I have found
UID in icalendar useful to identify events. Does it make sense to apply
the following patch, which I have been using since may 2011? Thanks.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: ical.diff --]
[-- Type: text/x-diff, Size: 5426 bytes --]

=== modified file 'lisp/calendar/icalendar.el'
--- lisp/calendar/icalendar.el	2012-03-13 06:54:37 +0000
+++ lisp/calendar/icalendar.el	2012-05-20 13:45:46 +0000
@@ -130,6 +130,7 @@
 %s Summary, see `icalendar-import-format-summary'
 %t Status, see `icalendar-import-format-status'
 %u URL, see `icalendar-import-format-url'
+%U UID, see `icalendar-import-format-uid'
 
 A formatting FUNCTION will be called with a VEVENT as its only
 argument.  It must return a string.  See
@@ -179,6 +180,14 @@
   :type 'string
   :group 'icalendar)
 
+(defcustom icalendar-import-format-uid
+  "\n UID: %s"
+  "Format string defining how the UID element is formatted.
+This applies only if the UID is not empty! `%s' is replaced by
+the UID."
+  :type 'string
+  :group 'icalendar)
+
 (defcustom icalendar-import-format-status
   "\n Status: %s"
   "Format string defining how the status element is formatted.
@@ -1098,7 +1107,8 @@
         ;; can't do anything
         nil
       ;; split summary-and-rest
-      (let* ((s icalendar-import-format)
+      (let* ((case-fold-search nil)
+             (s icalendar-import-format)
              (p-cla (or (string-match "%c" icalendar-import-format) -1))
              (p-des (or (string-match "%d" icalendar-import-format) -1))
              (p-loc (or (string-match "%l" icalendar-import-format) -1))
@@ -1106,9 +1116,10 @@
              (p-sum (or (string-match "%s" icalendar-import-format) -1))
              (p-sta (or (string-match "%t" icalendar-import-format) -1))
              (p-url (or (string-match "%u" icalendar-import-format) -1))
-             (p-list (sort (list p-cla p-des p-loc p-org p-sta p-sum p-url) '<))
+             (p-uid (or (string-match "%U" icalendar-import-format) -1))
+             (p-list (sort (list p-cla p-des p-loc p-org p-sta p-sum p-url p-uid) '<))
 	     (ct 0)
-             pos-cla pos-des pos-loc pos-org pos-sta pos-sum pos-url)
+             pos-cla pos-des pos-loc pos-org pos-sta pos-sum pos-url pos-uid)
         (dotimes (i (length p-list))
 	  ;; Use 'ct' to keep track of current position in list
           (cond ((and (>= p-cla 0) (= (nth i p-list) p-cla))
@@ -1131,7 +1142,10 @@
                  (setq pos-sum (* 2 ct)))
                 ((and (>= p-url 0) (= (nth i p-list) p-url))
 		 (setq ct (+ ct 1))
-                 (setq pos-url (* 2 ct)))) )
+                 (setq pos-url (* 2 ct)))
+                ((and (>= p-uid 0) (= (nth i p-list) p-uid))
+		 (setq ct (+ ct 1))
+                 (setq pos-uid (* 2 ct)))) )
         (mapc (lambda (ij)
                 (setq s (icalendar--rris (car ij) (cadr ij) s t t)))
               (list
@@ -1149,13 +1163,15 @@
                (list "%t"
                      (concat "\\(" icalendar-import-format-status "\\)??"))
                (list "%u"
-                     (concat "\\(" icalendar-import-format-url "\\)??"))))
+                     (concat "\\(" icalendar-import-format-url "\\)??"))
+               (list "%U"
+                     (concat "\\(" icalendar-import-format-uid "\\)??"))))
 	;; Need the \' regexp in order to detect multi-line items
         (setq s (concat "\\`"
 			   (icalendar--rris "%s" "\\(.*?\\)" s nil t)
                         "\\'"))
         (if (string-match s summary-and-rest)
-            (let (cla des loc org sta sum url)
+            (let (cla des loc org sta sum url uid)
               (if (and pos-sum (match-beginning pos-sum))
                   (setq sum (substring summary-and-rest
                                        (match-beginning pos-sum)
@@ -1184,13 +1200,18 @@
                   (setq url (substring summary-and-rest
                                        (match-beginning pos-url)
                                        (match-end pos-url))))
+              (if (and pos-uid (match-beginning pos-uid))
+                  (setq uid (substring summary-and-rest
+                                       (match-beginning pos-uid)
+                                       (match-end pos-uid))))
               (list (if cla (cons 'cla cla) nil)
                     (if des (cons 'des des) nil)
                     (if loc (cons 'loc loc) nil)
                     (if org (cons 'org org) nil)
                     (if sta (cons 'sta sta) nil)
                     ;;(if sum (cons 'sum sum) nil)
-                    (if url (cons 'url url) nil))))))))
+                    (if url (cons 'url url) nil)
+                    (if uid (cons 'uid uid) nil))))))))
 
 ;; subroutines for icalendar-export-region
 (defun icalendar--convert-ordinary-to-ical (nonmarker entry-main)
@@ -1864,6 +1885,7 @@
   (if (functionp icalendar-import-format)
       (funcall icalendar-import-format event)
     (let ((string icalendar-import-format)
+          (case-fold-search nil)
         (conversion-list
          '(("%c" CLASS       icalendar-import-format-class)
            ("%d" DESCRIPTION icalendar-import-format-description)
@@ -1871,7 +1893,8 @@
            ("%o" ORGANIZER   icalendar-import-format-organizer)
            ("%s" SUMMARY     icalendar-import-format-summary)
            ("%t" STATUS      icalendar-import-format-status)
-           ("%u" URL         icalendar-import-format-url))))
+           ("%u" URL         icalendar-import-format-url)
+           ("%U" UID         icalendar-import-format-uid))))
     ;; convert the specifiers in the format string
     (mapc (lambda (i)
 	    (let* ((spec (car i))


^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#11525: 24.0.97; Add icalendar-import-format-uid
  2012-05-20 13:54 bug#11525: 24.0.97; Add icalendar-import-format-uid Leo
@ 2012-05-21 18:13 ` Ulf Jasper
  2012-05-29 19:44   ` Ulf Jasper
  0 siblings, 1 reply; 3+ messages in thread
From: Ulf Jasper @ 2012-05-21 18:13 UTC (permalink / raw)
  To: Leo; +Cc: 11525

Leo <sdl.web@gmail.com> writes:

> Hello Ulf,
>
> I am teaching Gnus to add invitation/events to diary and so I have found
> UID in icalendar useful to identify events. Does it make sense to apply
> the following patch, which I have been using since may 2011? Thanks.

Makes perfect sense!  I shall apply the patch the next days.





^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#11525: 24.0.97; Add icalendar-import-format-uid
  2012-05-21 18:13 ` Ulf Jasper
@ 2012-05-29 19:44   ` Ulf Jasper
  0 siblings, 0 replies; 3+ messages in thread
From: Ulf Jasper @ 2012-05-29 19:44 UTC (permalink / raw)
  To: Leo; +Cc: 11525


Added/modified Unit Tests and applied to trunk.

Done





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-05-29 19:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-20 13:54 bug#11525: 24.0.97; Add icalendar-import-format-uid Leo
2012-05-21 18:13 ` Ulf Jasper
2012-05-29 19:44   ` Ulf Jasper

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).