Function: erc-unique-substrings
erc-unique-substrings is a byte-compiled function defined in
erc-track.el.gz.
Signature
(erc-unique-substrings STRINGS &optional PREDICATE START)
Documentation
Return a list of unique substrings of STRINGS.
Source Code
;; Defined in /usr/src/emacs/lisp/erc/erc-track.el.gz
(defun erc-unique-substrings (strings &optional predicate start)
"Return a list of unique substrings of STRINGS."
(if (or (not (numberp start))
(< start 0))
(setq start 2))
(mapcar
(lambda (str)
(let* ((others (delete str (copy-sequence strings)))
(maxlen (length str))
(i (min start
(length str)))
candidate
done)
(if (and (functionp predicate) (not (funcall predicate str)))
;; do not shorten if a predicate exists and it returns nil
str
;; Start with smallest substring candidate, ie. length 1.
;; Then check all the others and see whether any of them starts
;; with the same substring. While there is such another
;; element in the list, increase the length of the candidate.
(while (not done)
(if (> i maxlen)
(setq done t)
(setq candidate (substring str 0 i)
done (not (erc-unique-substring-1 candidate others))))
(setq i (1+ i)))
(if (and (= (length candidate) (1- maxlen))
(not erc-track-shorten-aggressively))
str
candidate))))
strings))