emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/ebdb e78dd19 10/17: Provide an ebdb-parse method for ad


From: Eric Abrahamsen
Subject: [elpa] externals/ebdb e78dd19 10/17: Provide an ebdb-parse method for addresses
Date: Tue, 26 Sep 2017 17:15:34 -0400 (EDT)

branch: externals/ebdb
commit e78dd19203c39980516a3188844722e25348141b
Author: Eric Abrahamsen <address@hidden>
Commit: Eric Abrahamsen <address@hidden>

    Provide an ebdb-parse method for addresses
    
    * ebdb-i18n.el (ebdb-parse): This is a base ebdb-parse method, but
      lives here because address parsing is only supported for
      internationalized EBDB.
    * ebdb-i18n-basic.el (ebdb-parse-i18n): Provide a base parsing method
      for US addresses.
---
 ebdb-i18n.el | 51 ++++++++++++++++++++++++---------------------------
 1 file changed, 24 insertions(+), 27 deletions(-)

diff --git a/ebdb-i18n.el b/ebdb-i18n.el
index 5dc26a3..c33800f 100644
--- a/ebdb-i18n.el
+++ b/ebdb-i18n.el
@@ -705,33 +705,30 @@ for their symbol representations."
               (cl-no-method nil)))
        (cl-call-next-method))))
 
-;; This method can be used later.  Probably there will never be a
-;; non-i18n `ebdb-parse' method for addresses, because it's just too
-;; hard to guess if you don't know the country.  At some point there
-;; should be an option called `ebdb-read-address-articulate': if that
-;; is nil, then we should require the user to have loaded `ebdb-i18n',
-;; and only international parse methods will be considered.
-
-;; (cl-defmethod ebdb-parse :extra "i18n" ((class (subclass 
ebdb-field-address))
-;;                                     (str string)
-;;                                     &optional slots)
-;;   "Internationally-aware version of `ebdb-parse' for addresses."
-;;   (let ((cc (or (plist-get slots :country)
-;;             (when (string-match (regexp-opt
-;;                                  (mapcar
-;;                                   (lambda (elt) (car elt))
-;;                                   (ebdb-i18n-countries)))
-;;                                 str)
-;;               (cdr-safe (assoc-string
-;;                          (match-string 0 str)
-;;                          (ebdb-i18n-countries)
-;;                                  ))))))
-;;     (or (and cc
-;;          (symbolp cc)
-;;          (condition-case nil
-;;              (ebdb-parse-i18n class str cc slots)
-;;            (cl-no-method nil)))
-;;     (cl-call-next-method))))
+;; This is not an :extra method, because there will never be a
+;; non-i18n `ebdb-parse' method for addresses.  It's just too hard to
+;; guess if you don't know the country.  This is only used in
+;; snarfing.
+
+(cl-defmethod ebdb-parse ((class (subclass ebdb-field-address))
+                         (str string)
+                         &optional slots)
+  "Internationally-aware version of `ebdb-parse' for addresses."
+  (let ((cc (or (plist-get slots :country)
+               (when (string-match (regexp-opt
+                                    (mapcar
+                                     (lambda (elt) (car elt))
+                                     (ebdb-i18n-countries)))
+                                   str)
+                 (cdr-safe (assoc-string
+                            (match-string 0 str)
+                            (ebdb-i18n-countries)))))))
+    (or (and cc
+            (symbolp cc)
+            (condition-case nil
+                (ebdb-parse-i18n class str cc slots)
+              (cl-no-method nil)))
+       (signal 'ebdb-unparseable (list str)))))
 
 (cl-defmethod ebdb-read :extra "i18n" ((class (subclass ebdb-field-phone))
                                       &optional slots obj)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]