Function: reftex-uniquify-by-car
reftex-uniquify-by-car is a byte-compiled function defined in
reftex.el.gz.
Signature
(reftex-uniquify-by-car ALIST &optional KEEP-LIST SORT)
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/reftex.el.gz
(defun reftex-uniquify-by-car (alist &optional keep-list sort)
;; Return a list of all elements in ALIST, but each car only once.
;; Elements of KEEP-LIST are not removed even if duplicate.
;; The order is kept unless SORT is set (faster!).
(setq keep-list (sort (copy-sequence keep-list) #'string<)
alist (copy-sequence alist))
(if sort
(let (lst elt)
(setq alist (sort alist (lambda(a b) (string< (car a) (car b)))))
(setq lst alist)
(while (cdr lst)
(setq elt (car (car lst)))
(when (string= elt (car (cadr lst)))
(while (and keep-list (string< (car keep-list) elt))
(pop keep-list))
(if (and keep-list (string= elt (car keep-list)))
(progn
(pop lst)
(while (and (cdr lst)
(string= elt (car (cadr lst))))
(pop lst)))
(setcdr lst (cdr (cdr lst)))
(while (and (cdr lst)
(string= elt (car (cadr lst))))
(setcdr lst (cdr (cdr lst))))))
(pop lst))
alist)
(let ((p alist) lst elt)
(while p
(push p lst)
(setq p (cdr p)))
(setq lst (sort lst (lambda(a b) (string< (car (car a))
(car (car b))))))
(while (cdr lst)
(setq elt (car (car (car lst))))
(when (string= elt (car (car (cadr lst))))
(while (and keep-list (string< (car keep-list) elt))
(pop keep-list))
(if (and keep-list (string= elt (car keep-list)))
(progn
(pop lst)
(while (and (cdr lst)
(string= elt (car (car (cadr lst)))))
(pop lst)))
(setcar (pop lst) nil)
(while (and (cdr lst)
(string= elt (car (car (cadr lst)))))
(setcar (pop lst) nil))))
(pop lst)))
(delq nil alist)))