[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/ebdb 5d9c9b0 6/9: Add a method for parsing US phone num
From: |
Eric Abrahamsen |
Subject: |
[elpa] externals/ebdb 5d9c9b0 6/9: Add a method for parsing US phone numbers, fix phone parsing |
Date: |
Tue, 13 Aug 2019 21:46:51 -0400 (EDT) |
branch: externals/ebdb
commit 5d9c9b0b0201648d76791e8efa1b3e6e7cda2b00
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>
Add a method for parsing US phone numbers, fix phone parsing
Fixes #81
* ebdb-i18n-basic.el (ebdb-parse-i18n): New method for pasing US phone
numbers.
* ebdb.el (ebdb-parse): Turn any object creation error into an
ebdb-unparseable error.
(ebdb-parse): Base method for phones should do nothing if the slots
are completely filled out, same as other parsing methods.
---
ebdb-i18n-basic.el | 25 +++++++++++++++++++++++++
ebdb.el | 28 ++++++++++++++++------------
2 files changed, 41 insertions(+), 12 deletions(-)
diff --git a/ebdb-i18n-basic.el b/ebdb-i18n-basic.el
index 351d11b..24a3856 100644
--- a/ebdb-i18n-basic.el
+++ b/ebdb-i18n-basic.el
@@ -89,6 +89,31 @@
("Wyoming" . "WY"))
"All the states in the US, for use with completion.")
+(cl-defmethod ebdb-parse-i18n ((_class (subclass ebdb-field-phone))
+ (str string)
+ (_cc (eql 1))
+ &optional slots)
+ "Parse a US phone number.
+Uses first three digits as the area code, next seven as the
+number, and any remaining as an extension."
+ (let ((numstr (replace-regexp-in-string "[^[:digit:]]+" "" str))
+ ext)
+ (setq slots
+ (plist-put
+ (plist-put
+ slots :area-code
+ (string-to-number (substring numstr 0 3)))
+ :number (substring numstr 3 10)))
+ (condition-case nil
+ (setq slots (plist-put
+ slots
+ :extension
+ (when (and (setq ext (substring numstr 10))
+ (null (string-empty-p ext)))
+ (string-to-number ext))))
+ (args-out-of-range nil))
+ slots))
+
(cl-defmethod ebdb-string-i18n ((phone ebdb-field-phone)
(_cc (eql 1)))
(with-slots (area-code number extension) phone
diff --git a/ebdb.el b/ebdb.el
index ac63a12..f7d03e7 100644
--- a/ebdb.el
+++ b/ebdb.el
@@ -870,9 +870,11 @@ Then call `cl-call-next-method' with the new values.")
(save-match-data
(cl-call-next-method)))
-(cl-defmethod ebdb-parse ((field-class (subclass ebdb-field)) _str &optional
slots)
+(cl-defmethod ebdb-parse ((field-class (subclass ebdb-field)) str &optional
slots)
"Create the actual field instance."
- (apply 'make-instance field-class slots))
+ (condition-case nil
+ (apply 'make-instance field-class slots)
+ (error (signal 'ebdb-unparseable (list str)))))
(cl-defmethod ebdb-parse :before ((_field-class (subclass ebdb-field)) str
&optional _slots)
(when (string-empty-p str)
@@ -1828,17 +1830,19 @@ The result looks like this:
;; "number" is saved as a string, partially for ease in
;; formatting, partially because if it's too long Emacs turns it
;; into a float, which is a pain in the ass.
- (while (and (< (point) (point-max))
- (null (looking-at-p ext-regexp))
- (looking-at "[ \t]?\\([0-9]+\\)[- .]?"))
- (setq acc (concat acc (match-string-no-properties 1)))
- (goto-char (match-end 0)))
- (when (looking-at ext-regexp)
+ (unless (plist-member slots :number)
+ (while (and (< (point) (point-max))
+ (null (looking-at-p ext-regexp))
+ (looking-at "[ \t]?\\([0-9]+\\)[- .]?"))
+ (setq acc (concat acc (match-string-no-properties 1)))
+ (goto-char (match-end 0)))
(setq slots
- (plist-put slots :extension (string-to-number
- (match-string 1))))))
- (setq slots
- (plist-put slots :number acc))
+ (plist-put slots :number acc)))
+ (unless (plist-member slots :number)
+ (when (looking-at ext-regexp)
+ (setq slots
+ (plist-put slots :extension (string-to-number
+ (match-string 1)))))))
(cl-call-next-method class string slots)))
(cl-defmethod cl-print-object ((phone ebdb-field-phone) stream)
- [elpa] externals/ebdb updated (3bf66d6 -> 03fcfae), Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb 4a78f58 2/9: Fix redisplay in ebdb-with-record-edits, Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb 2a87f5e 3/9: Fix one-primary-mail-per-record constraint, Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb bb0340e 1/9: Stick ebdb-vm.el in its own branch until it's usable, Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb 5d9c9b0 6/9: Add a method for parsing US phone numbers, fix phone parsing,
Eric Abrahamsen <=
- [elpa] externals/ebdb e1efb02 8/9: Add before-save-hook and after-save-hook, Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb 31fb567 5/9: Merge remote-tracking branch 'github/VM-mua', Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb b9ebce9 4/9: Provide MUA-specific versions of ebdb-mua-auto-update-p, Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb 365b9fb 7/9: Fix mua-auto-update customization values, Eric Abrahamsen, 2019/08/13
- [elpa] externals/ebdb 03fcfae 9/9: Allow permanent ignoring of mail addresses, Eric Abrahamsen, 2019/08/13