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).
This commit is contained in:
Lars Ingebrigtsen 2020-01-30 02:11:09 +01:00
parent 5db3324a7e
commit 7c7b91b9fe
2 changed files with 14 additions and 0 deletions

View file

@ -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))))

View file

@ -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)))