Function: reftex-uniquify

reftex-uniquify is a byte-compiled function defined in reftex.el.gz.

Signature

(reftex-uniquify LIST &optional SORT)

Documentation

Return a list of all strings in LIST, but each only once.

Keep order unless SORT is set (faster!).

Source Code

;; Defined in /usr/src/emacs/lisp/textmodes/reftex.el.gz
(defun reftex-uniquify (list &optional sort)
  "Return a list of all strings in LIST, but each only once.
Keep order unless SORT is set (faster!)."
  (setq list (copy-sequence list))
  (if sort
      (progn
	(setq list (sort list #'string<))
	(let ((p list))
	  (while (cdr p)
	    (if (string= (car p) (car (cdr p)))
		(setcdr p (cdr (cdr p)))
	      (setq p (cdr p)))))
	list)
    (let ((p list) lst elt)
      ;; push all sublists into lst in reverse(!) order
      (while p
	(push p lst)
	(setq p (cdr p)))
      ;; sort all sublists
      (setq lst (sort lst (lambda (x1 x2) (string< (car x1) (car x2)))))
      (while (cdr lst)
	(setq elt (car (car lst)))
	;; for equal elements in the sorted sublist, replace the
	;; last(!) original list member with nil
	(when (string= elt (car (cadr lst)))
	  (setcar (pop lst) nil)
	  (while (and (cdr lst) (string= elt (car (cadr lst))))
	    (setcar (pop lst) nil)))
	(pop lst)))
    ;; weed out all nils and return.
    (delq nil list)))