Function: eudc-filter-duplicate-attributes

eudc-filter-duplicate-attributes is a byte-compiled function defined in eudc.el.gz.

Signature

(eudc-filter-duplicate-attributes RECORD)

Documentation

Filter RECORD according to eudc-duplicate-attribute-handling-method.

Source Code

;; Defined in /usr/src/emacs/lisp/net/eudc.el.gz
(defun eudc-filter-duplicate-attributes (record)
  "Filter RECORD according to `eudc-duplicate-attribute-handling-method'."
  (let ((rec record)
	unique
	duplicates
	result)

    ;; Search for multiple records
    (while (and rec
		(not (listp (cdar rec))))
      (setq rec (cdr rec)))

    (if (null (cdar rec))
	(list record)			; No duplicate attrs in this record
      (mapc (lambda (field)
              (if (listp (cdr field))
                  (setq duplicates (cons field duplicates))
                (setq unique (cons field unique))))
	    record)
      (setq result (list unique))
      ;; Map over the record fields that have multiple values
      (mapc
       (lambda (field)
         (let ((method (if (consp eudc-duplicate-attribute-handling-method)
                           (cdr
                            (assq
                             (or
                              (car
                               (rassq
                                (car field)
                                (symbol-value
                                 eudc-protocol-attributes-translation-alist)))
                              (car field))
                             eudc-duplicate-attribute-handling-method))
                         eudc-duplicate-attribute-handling-method)))
           (cond
            ((or (null method) (eq 'list method))
             (setq result
                   (eudc-add-field-to-records field result)))
            ((eq 'first method)
             (setq result
                   (eudc-add-field-to-records (cons (car field)
                                                (cadr field))
                                          result)))
            ((eq 'concat method)
             (setq result
                   (eudc-add-field-to-records (cons (car field)
                                                (mapconcat
                                                 #'identity
                                                 (cdr field)
                                                 "\n"))
                                          result)))
            ((eq 'duplicate method)
             (setq result
                   (eudc-distribute-field-on-records field result))))))
       duplicates)
      result)))