summaryrefslogtreecommitdiff
path: root/lisp/net/eudc.el
diff options
context:
space:
mode:
authorAlexander Adolf <alexander.adolf@condition-alpha.com>2022-07-02 17:27:55 +0200
committerThomas Fitzsimmons <fitzsim@fitzsim.org>2022-07-04 22:05:04 -0400
commitf1ae277e0bbb5e03bb24ff79b4544e5b12f2d361 (patch)
treefc76796c95d143af7565b571221e6cb29c9752c7 /lisp/net/eudc.el
parentedaa7780fd88ca6f184b2594a676af32eb4ade10 (diff)
downloademacs-f1ae277e0bbb5e03bb24ff79b4544e5b12f2d361.tar.gz
Add reverse mapping for EUDC attribute names
* lisp/net/eudc.el (eudc-translate-query): new optional parameter to reverse the mapping direction (eudc-translate-attribute-list): new optional parameter to reverse the mapping direction
Diffstat (limited to 'lisp/net/eudc.el')
-rw-r--r--lisp/net/eudc.el43
1 files changed, 31 insertions, 12 deletions
diff --git a/lisp/net/eudc.el b/lisp/net/eudc.el
index ca4e4c9f377..eb1342e4385 100644
--- a/lisp/net/eudc.el
+++ b/lisp/net/eudc.el
@@ -383,32 +383,51 @@ accordingly. Otherwise it is set to its EUDC default binding."
(cons protocol eudc-known-protocols))))
-(defun eudc-translate-query (query)
+(defun eudc-translate-query (query &optional reverse)
"Translate attribute names of QUERY.
The translation is done according to
-`eudc-protocol-attributes-translation-alist'."
+`eudc-protocol-attributes-translation-alist'.
+
+When REVERSE is nil or omitted, the attribute names are
+translated from EUDC generic names to protocol-specific
+names. When REVERSE is non-nil, the translation is from
+protocol-specific names back to EUDC generic names."
(if eudc-protocol-attributes-translation-alist
(mapcar (lambda (attribute)
- (let ((trans (assq (car attribute)
- (symbol-value eudc-protocol-attributes-translation-alist))))
+ (let ((trans
+ (if reverse
+ (rassq (car attribute)
+ (symbol-value eudc-protocol-attributes-translation-alist))
+ (assq (car attribute)
+ (symbol-value eudc-protocol-attributes-translation-alist)))))
(if trans
- (cons (cdr trans) (cdr attribute))
+ (cons (if reverse (car trans) (cdr trans))
+ (cdr attribute))
attribute)))
query)
query))
-(defun eudc-translate-attribute-list (list)
+(defun eudc-translate-attribute-list (list &optional reverse)
"Translate a list of attribute names LIST.
The translation is done according to
-`eudc-protocol-attributes-translation-alist'."
+`eudc-protocol-attributes-translation-alist'.
+
+When REVERSE is nil or omitted, the attribute names are
+translated from EUDC generic names to protocol-specific
+names. When REVERSE is non-nil, the translation is from
+protocol-specific names back to EUDC generic names."
(if eudc-protocol-attributes-translation-alist
(let (trans)
(mapcar (lambda (attribute)
- (setq trans (assq attribute
- (symbol-value eudc-protocol-attributes-translation-alist)))
- (if trans
- (cdr trans)
- attribute))
+ (setq trans
+ (if reverse
+ (rassq attribute
+ (symbol-value eudc-protocol-attributes-translation-alist))
+ (assq attribute
+ (symbol-value eudc-protocol-attributes-translation-alist))))
+ (if trans
+ (if reverse (car trans) (cdr trans))
+ attribute))
list))
list))