branch: elpa/datetime
commit 082d2c7b0e38c26a8c46af9c9956a2e100d88e71
Author: Paul Pogonyshev <[email protected]>
Commit: Paul Pogonyshev <[email protected]>
Add :any-decimal-separator option to accept both decimal dot and decimal
comma, regardless of what pattern uses.
---
datetime.el | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/datetime.el b/datetime.el
index d1ac7dcd18..3d1bb34fca 100644
--- a/datetime.el
+++ b/datetime.el
@@ -81,7 +81,10 @@
;; millisecond (NUMBER)
;; second-fractional (NUMBER)
;; this is a generalization used internally: (second-fractional . 3)
-;; means millis, (second-fractional . 6) -- micros, and so on.
+;; means millis, (second-fractional . 6) -- micros, and so on;
+;;
+;; decimal-separator (PREFERRED)
+;; either dot or comma;
;;
;; timezone (?) -- currently not supported further than pattern parsing
@@ -196,7 +199,12 @@
(_
(error "Illegal pattern character `%c'" character))))
(t
- (datetime--extend-as-is-part parts (string character))))))
+ (if (and (or (= character ?.) (= character ?,))
+ (plist-get options :any-decimal-separator)
+ (eq (car-safe (car parts)) 'second)
+ (< scan length) (= (aref pattern scan) ?S))
+ (push (cons 'decimal-separator character) parts)
+ (datetime--extend-as-is-part parts (string character)))))))
(nreverse parts)))
(defun datetime--format-java-pattern (parts options)
@@ -245,6 +253,7 @@
(`hour-am/pm-1-12 (cons ?h details))
(`minute (cons ?m details))
(`second (cons ?s details))
+ (`decimal-separator details)
(`millisecond (cons ?S details))
(`second-fractional (if (plist-get options
:second-fractional-extension)
(cons ?S details)
@@ -380,6 +389,7 @@ specified otherwise.
(`hour-am/pm-1-12 12)
(`minute 59)
(`second 59)
+ (`decimal-separator (rx (or "." ",")))
((or `millisecond `second-fractional)
(apply #'concat (make-list details (rx (any
"0-9")))))
(`timezone
@@ -413,7 +423,7 @@ specified otherwise.
(defun datetime-recode-pattern (from to pattern &rest options)
"Recode PATTERN between two supported types.
-As a special case, either of FROM and TO can be set to 'parsed.
+As a special case, either of FROM and TO can be set to \\='parsed.
This is useful as a speed optimization in a few cases where you
perform several transformations on the same pattern.
@@ -423,7 +433,14 @@ Options can be a list of the following keyword arguments:
In Java patterns any number of \"S\" stand for milliseconds.
With this extension they are instead interpreted according to
- how many \"S\" there is, e.g. \"SSSSSS\" means microseconds."
+ how many \"S\" there is, e.g. \"SSSSSS\" means microseconds.
+
+ :any-decimal-separator
+
+ Treat a decimal dot or comma in pattern between seconds and
+ milli- or microseconds (etc.) as a placeholder for _any_
+ decimal separator and also accept commas in this place. This
+ only works if TO is \\='parsed."
(datetime--format-pattern to (datetime--parse-pattern from pattern options)
options))