From 7c7b91b9fe156b6af4643ca4aa8f4a5c4aeb915f Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Thu, 30 Jan 2020 02:11:09 +0100 Subject: [PATCH] Make iso8601.el understand two obsolete forms * lisp/calendar/iso8601.el (iso8601-parse-date): Understand some obsolete formats to provide compatibility with the vCard RFC (bug#39347). --- lisp/calendar/iso8601.el | 6 ++++++ test/lisp/calendar/iso8601-tests.el | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/lisp/calendar/iso8601.el b/lisp/calendar/iso8601.el index e42fe0fa21f..858d561f188 100644 --- a/lisp/calendar/iso8601.el +++ b/lisp/calendar/iso8601.el @@ -202,6 +202,12 @@ See `decode-time' for the meaning of FORM." (iso8601--decoded-time :year year :month (decoded-time-month month-day) :day (decoded-time-day month-day)))) + ;; Obsolete format with implied year: --MM + ((iso8601--match "--\\([0-9][0-9]\\)" string) + (iso8601--decoded-time :month (string-to-number (match-string 1 string)))) + ;; Obsolete format with implied year and month: ---DD + ((iso8601--match "---\\([0-9][0-9]\\)" string) + (iso8601--decoded-time :day (string-to-number (match-string 1 string)))) (t (signal 'wrong-type-argument string)))) diff --git a/test/lisp/calendar/iso8601-tests.el b/test/lisp/calendar/iso8601-tests.el index 6e7a4724a6b..c2994ef8b4d 100644 --- a/test/lisp/calendar/iso8601-tests.el +++ b/test/lisp/calendar/iso8601-tests.el @@ -44,6 +44,14 @@ (should (equal (iso8601-parse-date "--0201") '(nil nil nil 1 2 nil nil -1 nil)))) +(ert-deftest test-iso8601-date-obsolete-2000 () + ;; These are forms in 5.2.1.3 of the 2000 version of the standard, + ;; e) and f). + (should (equal (iso8601-parse-date "--02") + '(nil nil nil nil 2 nil nil -1 nil))) + (should (equal (iso8601-parse-date "---12") + '(nil nil nil 12 nil nil nil -1 nil)))) + (ert-deftest test-iso8601-date-weeks () (should (equal (iso8601-parse-date "2008W39-6") '(nil nil nil 27 9 2008 nil -1 nil))) -- 2.39.2