From unknown Tue Sep 09 18:21:46 2025 X-Loop: help-debbugs@gnu.org Subject: bug#6766: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. Resent-From: speters@itasoftware.com (Stephen Peters) Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 30 Jul 2010 20:41:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 6766 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 6766@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.12805224253889 (code B ref -1); Fri, 30 Jul 2010 20:41:01 +0000 Received: (at submit) by debbugs.gnu.org; 30 Jul 2010 20:40:25 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OewNT-00010g-S2 for submit@debbugs.gnu.org; Fri, 30 Jul 2010 16:40:24 -0400 Received: from mail.gnu.org ([199.232.76.166] helo=mx10.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OerRQ-0007IK-OX for submit@debbugs.gnu.org; Fri, 30 Jul 2010 11:24:10 -0400 Received: from lists.gnu.org ([199.232.76.165]:51395) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1OerRg-000555-C1 for submit@debbugs.gnu.org; Fri, 30 Jul 2010 11:24:24 -0400 Received: from [140.186.70.92] (port=37329 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OerRJ-0007b4-Ir for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:24:24 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00, DATE_IN_PAST_12_24, T_RP_MATCHES_RCVD autolearn=no version=3.3.1 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OerR0-0003Zb-9K for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:23:56 -0400 Received: from ita4fw1.itasoftware.com ([63.107.91.99]:10494 helo=ita4mta2.internal.itasoftware.com) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OerR0-0003Yw-4I for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:23:42 -0400 Received: from leng-speters (lb1.dc4nat177.dc4.internal.itasoftware.com [10.4.199.177]) by ita4mta2.internal.itasoftware.com (Postfix) with ESMTP id E0B2519D805F for ; Fri, 30 Jul 2010 11:23:40 -0400 (EDT) Received: by leng-speters (Postfix, from userid 1000) id AFCA45D038C; Thu, 29 Jul 2010 15:13:10 -0400 (EDT) Sent-via: bug-gnu-emacs@gnu.org Message-Id: <20100729191310.AFCA45D038C@leng-speters> Date: Thu, 29 Jul 2010 15:13:10 -0400 (EDT) From: speters@itasoftware.com (Stephen Peters) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Spam-Score: -2.4 (--) X-Mailman-Approved-At: Fri, 30 Jul 2010 16:40:22 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.7 (---) When trying to use icalendar-import-file to create a diary file from my work calendar, I noticed that recurring events for multiple days in a week were not properly handled. Here's an example .ics file, including both timed and all-day events: ----------z.ics---------- BEGIN:VCALENDAR VERSION:2.0 BEGIN:VTIMEZONE TZID:America/New_York BEGIN:STANDARD DTSTART:19710101T020000 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:19710101T020000 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT CLASS:PUBLIC DTEND;TZID=America/New_York:20100421T120000 DTSTAMP:20100525T141214Z DTSTART;TZID=America/New_York:20100421T113000 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,TH,FR SEQUENCE:1 STATUS:CONFIRMED SUMMARY:Scrum TRANSP:OPAQUE UID:8814e3f9-7482-408f-996c-3bfe486a1262 END:VEVENT BEGIN:VEVENT CLASS:PUBLIC DTSTAMP:20100525T141214Z DTSTART;VALUE=DATE:20100422 DTEND;VALUE=DATE:20100423 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH SEQUENCE:1 SUMMARY:Tues + Thurs thinking TRANSP:OPAQUE UID:8814e3f9-7482-408f-996c-3bfe486a1263 END:VEVENT END:VCALENDAR ==========z.ics========== Using icalendar-import-file on this .ics file will create diary entries that only repeat once a week, not the multiple days per week that are indicated. To fix this, I'm submitting a patch to icalendar.el which will parse multiple days from the BYDAY property and use it to create a diary entry based on the calendar-day-of-week value. Please note that this also changes the icalendar--split-value function so that it doesn't stop at the first comma in VALUE-STRING. diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el index a07402a..f7ae466 100644 --- a/lisp/calendar/icalendar.el +++ b/lisp/calendar/icalendar.el @@ -427,7 +427,7 @@ children." (goto-char (point-min)) (while (re-search-forward - "\\([A-Za-z0-9-]+\\)=\\(\\([^;,:]+\\)\\|\"\\([^\"]+\\)\"\\);?" + "\\([A-Za-z0-9-]+\\)=\\(\\([^;:]+\\)\\|\"\\([^\"]+\\)\"\\);?" nil t) (setq param-name (intern (match-string 1))) (setq param-value (match-string 2)) @@ -744,6 +744,19 @@ Note that this silently ignores seconds." ;; Error: -1)) +(defun icalendar--get-weekday-numbers (abbrevweekdays) + "Return the list of numbers for the comma-separated ABBREVWEEKDAYS." + (let* ((num -1) + (weekday-alist (mapcar (lambda (day) + (progn + (setq num (1+ num)) + (cons (downcase day) num))) + icalendar--weekday-array))) + (delq nil + (mapcar (lambda (abbrevday) + (cdr (assoc abbrevday weekday-alist))) + (split-string (downcase abbrevweekdays) ","))))) + (defun icalendar--get-weekday-abbrev (weekday) "Return the abbreviated WEEKDAY." (catch 'found @@ -2057,39 +2070,47 @@ END-T is the event's end time in diary format." )) ) (cond ((string-equal frequency "WEEKLY") - (if (not start-t) - (progn - ;; weekly and all-day - (icalendar--dmsg "weekly all-day") - (if until - (setq result - (format - (concat "%%%%(and " - "(diary-cyclic %d %s) " - "(diary-block %s %s))") - (* interval 7) - dtstart-conv - dtstart-conv - (if count until-1-conv until-conv) - )) - (setq result - (format "%%%%(and (diary-cyclic %d %s))" - (* interval 7) - dtstart-conv)))) - ;; weekly and not all-day - (let* ((byday (cadr (assoc 'BYDAY rrule-props))) - (weekday - (icalendar--get-weekday-number byday))) + (let* ((byday (cadr (assoc 'BYDAY rrule-props))) + (weekdays + (icalendar--get-weekday-numbers byday)) + (weekday-clause + (when (> (length weekdays) 1) + (format "(memq (calendar-day-of-week date) '%s) " + weekdays)))) + (if (not start-t) + (progn + ;; weekly and all-day + (icalendar--dmsg "weekly all-day") + (if until + (setq result + (format + (concat "%%%%(and " + "%s" + "(diary-block %s %s))") + (or weekday-clause + (format "(diary-cyclic %d %s) " + (* interval 7) + dtstart-conv)) + (if count until-1-conv until-conv) + )) + (setq result + (format "%%%%(and %s(diary-cyclic %d %s))" + (or weekday-clause "") + (if weekday-clause 1 (* interval 7)) + dtstart-conv)))) + ;; weekly and not all-day (icalendar--dmsg "weekly not-all-day") (if until (setq result (format (concat "%%%%(and " - "(diary-cyclic %d %s) " + "%s" "(diary-block %s %s)) " "%s%s%s") - (* interval 7) - dtstart-conv + (or weekday-clause + (format "(diary-cyclic %d %s) " + (* interval 7) + dtstart-conv)) dtstart-conv until-conv (or start-t "") @@ -2100,10 +2121,11 @@ END-T is the event's end time in diary format." ;; DTEND;VALUE=DATE-TIME:20030919T113000 (setq result (format - "%%%%(and (diary-cyclic %s %s)) %s%s%s" - (* interval 7) - dtstart-conv - (or start-t "") + "%%%%(and %s(diary-cyclic %d %s)) %s%s%s" + (or weekday-clause "") + (if weekday-clause 1 (* interval 7)) + dtstart-conv + (or start-t "") (if end-t "-" "") (or end-t ""))))))) ;; yearly ((string-equal frequency "YEARLY") From unknown Tue Sep 09 18:21:46 2025 X-Loop: help-debbugs@gnu.org Subject: bug#6766: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. References: <20100729191310.AFCA45D038C@leng-speters> In-Reply-To: <20100729191310.AFCA45D038C@leng-speters> Resent-From: Ulf Jasper Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 08 Aug 2010 18:01:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 6766 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: speters@itasoftware.com (Stephen Peters) Cc: 6766@debbugs.gnu.org Received: via spool by 6766-submit@debbugs.gnu.org id=B6766.128129045512310 (code B ref 6766); Sun, 08 Aug 2010 18:01:01 +0000 Received: (at 6766) by debbugs.gnu.org; 8 Aug 2010 18:00:55 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiAB1-0003CV-Up for submit@debbugs.gnu.org; Sun, 08 Aug 2010 14:00:55 -0400 Received: from mo-p05-ob.rzone.de ([81.169.146.180]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiAB0-0003CP-8V for 6766@debbugs.gnu.org; Sun, 08 Aug 2010 14:00:51 -0400 X-RZG-AUTH: :OWACVUW4a/MW23Dy3JvWYzB9ib5hHLJRJ2XqtRyYWgVkgkqLLeiGkYcRTCZ8+n4= X-RZG-CLASS-ID: mo05 Received: from ubuntulf (p54B0B957.dip.t-dialin.net [84.176.185.87]) by post.strato.de (mrclete mo60) (RZmta 23.4) with ESMTP id x00335m78FIrJr ; Sun, 8 Aug 2010 20:01:24 +0200 (MEST) From: Ulf Jasper Date: Sun, 08 Aug 2010 20:01:23 +0200 Message-ID: <84k4o19e6k.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1.96 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -1.6 (-) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -1.5 (-) Applied your patch and added unit test using your ics data. Thanks! Ulf From unknown Tue Sep 09 18:21:46 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.427 (Entity 5.427) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: speters@itasoftware.com (Stephen Peters) Subject: bug#6766: closed (please close bug#6766) Message-ID: References: <84r5i7d54h.fsf@web.de> <20100729191310.AFCA45D038C@leng-speters> X-Gnu-PR-Message: they-closed 6766 X-Gnu-PR-Package: emacs X-Gnu-PR-Keywords: patch Reply-To: 6766@debbugs.gnu.org Date: Mon, 09 Aug 2010 18:16:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1281377762-2626-1" This is a multi-part message in MIME format... ------------=_1281377762-2626-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #6766: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 6766@debbugs.gnu.org. --=20 6766: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D6766 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1281377762-2626-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 6766-done) by debbugs.gnu.org; 9 Aug 2010 18:15:05 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiWsL-0000g1-4A for submit@debbugs.gnu.org; Mon, 09 Aug 2010 14:15:05 -0400 Received: from mo-p05-ob.rzone.de ([81.169.146.182]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OiWsJ-0000fO-3k for 6766-done@debbugs.gnu.org; Mon, 09 Aug 2010 14:15:04 -0400 X-RZG-AUTH: :OWACVUW4a/MW23Dy3JvWYzB9ib5hHLJRJ2XqtRyYWgVkgkqLLeiGkYQYTSZ1/hLy X-RZG-CLASS-ID: mo05 Received: from ubuntulf (p54B0D683.dip.t-dialin.net [84.176.214.131]) by post.strato.de (mrclete mo35) (RZmta 23.4) with ESMTP id a002aem79HQDyr ; Mon, 9 Aug 2010 20:15:43 +0200 (MEST) From: Ulf Jasper To: 6766-done@debbugs.gnu.org Subject: please close bug#6766 References: <84k4o19e6k.fsf@web.de> Date: Mon, 09 Aug 2010 20:15:42 +0200 In-Reply-To: <84k4o19e6k.fsf@web.de> (Ulf Jasper's message of "Sun, 08 Aug 2010 20:01:23 +0200") Message-ID: <84r5i7d54h.fsf@web.de> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -2.5 (--) X-Debbugs-Envelope-To: 6766-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.5 (--) thanks ------------=_1281377762-2626-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 30 Jul 2010 20:40:25 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OewNT-00010g-S2 for submit@debbugs.gnu.org; Fri, 30 Jul 2010 16:40:24 -0400 Received: from mail.gnu.org ([199.232.76.166] helo=mx10.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OerRQ-0007IK-OX for submit@debbugs.gnu.org; Fri, 30 Jul 2010 11:24:10 -0400 Received: from lists.gnu.org ([199.232.76.165]:51395) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1OerRg-000555-C1 for submit@debbugs.gnu.org; Fri, 30 Jul 2010 11:24:24 -0400 Received: from [140.186.70.92] (port=37329 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OerRJ-0007b4-Ir for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:24:24 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00, DATE_IN_PAST_12_24, T_RP_MATCHES_RCVD autolearn=no version=3.3.1 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OerR0-0003Zb-9K for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:23:56 -0400 Received: from ita4fw1.itasoftware.com ([63.107.91.99]:10494 helo=ita4mta2.internal.itasoftware.com) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OerR0-0003Yw-4I for bug-gnu-emacs@gnu.org; Fri, 30 Jul 2010 11:23:42 -0400 Received: from leng-speters (lb1.dc4nat177.dc4.internal.itasoftware.com [10.4.199.177]) by ita4mta2.internal.itasoftware.com (Postfix) with ESMTP id E0B2519D805F for ; Fri, 30 Jul 2010 11:23:40 -0400 (EDT) Received: by leng-speters (Postfix, from userid 1000) id AFCA45D038C; Thu, 29 Jul 2010 15:13:10 -0400 (EDT) To: bug-gnu-emacs@gnu.org Sent-via: bug-gnu-emacs@gnu.org Subject: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. Message-Id: <20100729191310.AFCA45D038C@leng-speters> Date: Thu, 29 Jul 2010 15:13:10 -0400 (EDT) From: speters@itasoftware.com (Stephen Peters) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-Spam-Score: -2.4 (--) X-Debbugs-Envelope-To: submit X-Mailman-Approved-At: Fri, 30 Jul 2010 16:40:22 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.7 (---) When trying to use icalendar-import-file to create a diary file from my work calendar, I noticed that recurring events for multiple days in a week were not properly handled. Here's an example .ics file, including both timed and all-day events: ----------z.ics---------- BEGIN:VCALENDAR VERSION:2.0 BEGIN:VTIMEZONE TZID:America/New_York BEGIN:STANDARD DTSTART:19710101T020000 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU TZNAME:EST TZOFFSETFROM:-0400 TZOFFSETTO:-0500 END:STANDARD BEGIN:DAYLIGHT DTSTART:19710101T020000 RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU TZNAME:EDT TZOFFSETFROM:-0500 TZOFFSETTO:-0400 END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT CLASS:PUBLIC DTEND;TZID=America/New_York:20100421T120000 DTSTAMP:20100525T141214Z DTSTART;TZID=America/New_York:20100421T113000 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,TH,FR SEQUENCE:1 STATUS:CONFIRMED SUMMARY:Scrum TRANSP:OPAQUE UID:8814e3f9-7482-408f-996c-3bfe486a1262 END:VEVENT BEGIN:VEVENT CLASS:PUBLIC DTSTAMP:20100525T141214Z DTSTART;VALUE=DATE:20100422 DTEND;VALUE=DATE:20100423 RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=TU,TH SEQUENCE:1 SUMMARY:Tues + Thurs thinking TRANSP:OPAQUE UID:8814e3f9-7482-408f-996c-3bfe486a1263 END:VEVENT END:VCALENDAR ==========z.ics========== Using icalendar-import-file on this .ics file will create diary entries that only repeat once a week, not the multiple days per week that are indicated. To fix this, I'm submitting a patch to icalendar.el which will parse multiple days from the BYDAY property and use it to create a diary entry based on the calendar-day-of-week value. Please note that this also changes the icalendar--split-value function so that it doesn't stop at the first comma in VALUE-STRING. diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el index a07402a..f7ae466 100644 --- a/lisp/calendar/icalendar.el +++ b/lisp/calendar/icalendar.el @@ -427,7 +427,7 @@ children." (goto-char (point-min)) (while (re-search-forward - "\\([A-Za-z0-9-]+\\)=\\(\\([^;,:]+\\)\\|\"\\([^\"]+\\)\"\\);?" + "\\([A-Za-z0-9-]+\\)=\\(\\([^;:]+\\)\\|\"\\([^\"]+\\)\"\\);?" nil t) (setq param-name (intern (match-string 1))) (setq param-value (match-string 2)) @@ -744,6 +744,19 @@ Note that this silently ignores seconds." ;; Error: -1)) +(defun icalendar--get-weekday-numbers (abbrevweekdays) + "Return the list of numbers for the comma-separated ABBREVWEEKDAYS." + (let* ((num -1) + (weekday-alist (mapcar (lambda (day) + (progn + (setq num (1+ num)) + (cons (downcase day) num))) + icalendar--weekday-array))) + (delq nil + (mapcar (lambda (abbrevday) + (cdr (assoc abbrevday weekday-alist))) + (split-string (downcase abbrevweekdays) ","))))) + (defun icalendar--get-weekday-abbrev (weekday) "Return the abbreviated WEEKDAY." (catch 'found @@ -2057,39 +2070,47 @@ END-T is the event's end time in diary format." )) ) (cond ((string-equal frequency "WEEKLY") - (if (not start-t) - (progn - ;; weekly and all-day - (icalendar--dmsg "weekly all-day") - (if until - (setq result - (format - (concat "%%%%(and " - "(diary-cyclic %d %s) " - "(diary-block %s %s))") - (* interval 7) - dtstart-conv - dtstart-conv - (if count until-1-conv until-conv) - )) - (setq result - (format "%%%%(and (diary-cyclic %d %s))" - (* interval 7) - dtstart-conv)))) - ;; weekly and not all-day - (let* ((byday (cadr (assoc 'BYDAY rrule-props))) - (weekday - (icalendar--get-weekday-number byday))) + (let* ((byday (cadr (assoc 'BYDAY rrule-props))) + (weekdays + (icalendar--get-weekday-numbers byday)) + (weekday-clause + (when (> (length weekdays) 1) + (format "(memq (calendar-day-of-week date) '%s) " + weekdays)))) + (if (not start-t) + (progn + ;; weekly and all-day + (icalendar--dmsg "weekly all-day") + (if until + (setq result + (format + (concat "%%%%(and " + "%s" + "(diary-block %s %s))") + (or weekday-clause + (format "(diary-cyclic %d %s) " + (* interval 7) + dtstart-conv)) + (if count until-1-conv until-conv) + )) + (setq result + (format "%%%%(and %s(diary-cyclic %d %s))" + (or weekday-clause "") + (if weekday-clause 1 (* interval 7)) + dtstart-conv)))) + ;; weekly and not all-day (icalendar--dmsg "weekly not-all-day") (if until (setq result (format (concat "%%%%(and " - "(diary-cyclic %d %s) " + "%s" "(diary-block %s %s)) " "%s%s%s") - (* interval 7) - dtstart-conv + (or weekday-clause + (format "(diary-cyclic %d %s) " + (* interval 7) + dtstart-conv)) dtstart-conv until-conv (or start-t "") @@ -2100,10 +2121,11 @@ END-T is the event's end time in diary format." ;; DTEND;VALUE=DATE-TIME:20030919T113000 (setq result (format - "%%%%(and (diary-cyclic %s %s)) %s%s%s" - (* interval 7) - dtstart-conv - (or start-t "") + "%%%%(and %s(diary-cyclic %d %s)) %s%s%s" + (or weekday-clause "") + (if weekday-clause 1 (* interval 7)) + dtstart-conv + (or start-t "") (if end-t "-" "") (or end-t ""))))))) ;; yearly ((string-equal frequency "YEARLY") ------------=_1281377762-2626-1-- From unknown Tue Sep 09 18:21:46 2025 X-Loop: help-debbugs@gnu.org Subject: bug#6766: [PATCH] icalendar.el: Handle multiple BYDAY values in a WEEKLY RRULE. In-Reply-To: <20100729191310.AFCA45D038C@leng-speters> Resent-From: Glenn Morris Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 10 Aug 2010 00:05:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 6766 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Ulf Jasper Cc: 6766@debbugs.gnu.org, Stephen Peters Received: via spool by 6766-submit@debbugs.gnu.org id=B6766.128139866213059 (code B ref 6766); Tue, 10 Aug 2010 00:05:02 +0000 Received: (at 6766) by debbugs.gnu.org; 10 Aug 2010 00:04:22 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OicKL-0003Oa-Rj for submit@debbugs.gnu.org; Mon, 09 Aug 2010 20:04:22 -0400 Received: from fencepost.gnu.org ([140.186.70.10]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OicKK-0003OV-GX for 6766@debbugs.gnu.org; Mon, 09 Aug 2010 20:04:20 -0400 Received: from rgm by fencepost.gnu.org with local (Exim 4.69) (envelope-from ) id 1OicL0-0005Of-RY; Mon, 09 Aug 2010 20:05:02 -0400 References: <20100729191310.AFCA45D038C@leng-speters> <84k4o19e6k.fsf@web.de> From: Glenn Morris X-Spook: Dateline Chobetsu Aldergrove Plame ICE KGB Defcon InfoSec X-Ran: .eA[[~39w(?&,a6K4q7Q;)Kc X-Hue: green X-Attribution: GM Date: Mon, 09 Aug 2010 20:05:02 -0400 Message-ID: User-Agent: Gnus (www.gnus.org), GNU Emacs (www.gnu.org/software/emacs/) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Score: -6.2 (------) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -6.2 (------) Ulf Jasper wrote: > Applied your patch and added unit test using your ics data. When applying changes written by other people, please make the ChangeLog entry in their name, not yours. Also, at first glance this is not a tiny change and so would need some copyright paperwork.