aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/emacs-lisp/regexp-opt.el18
1 files changed, 12 insertions, 6 deletions
diff --git a/lisp/emacs-lisp/regexp-opt.el b/lisp/emacs-lisp/regexp-opt.el
index b938db6c82b..de36f1d5446 100644
--- a/lisp/emacs-lisp/regexp-opt.el
+++ b/lisp/emacs-lisp/regexp-opt.el
@@ -93,14 +93,20 @@ quoted or not. If optional PAREN is non-nil, ensure that the returned regexp
93is enclosed by at least one regexp grouping construct. 93is enclosed by at least one regexp grouping construct.
94The returned regexp is typically more efficient than the equivalent regexp: 94The returned regexp is typically more efficient than the equivalent regexp:
95 95
96 (let ((open-paren (if PAREN \"\\\\(\" \"\")) (close-paren (if PAREN \"\\\\)\" \"\"))) 96 (let ((open (if PAREN \"\\\\(\" \"\")) (close (if PAREN \"\\\\)\" \"\")))
97 (concat open-paren (mapconcat 'regexp-quote STRINGS \"\\\\|\") close-paren))" 97 (concat open (mapconcat 'regexp-quote STRINGS \"\\\\|\") close))
98
99If PAREN is `words', then the resulting regexp is additionally surrounded
100by \\=\\< and \\>."
98 (save-match-data 101 (save-match-data
99 ;; Recurse on the sorted list. 102 ;; Recurse on the sorted list.
100 (let ((max-lisp-eval-depth (* 1024 1024)) 103 (let* ((max-lisp-eval-depth (* 1024 1024))
101 (completion-ignore-case nil)) 104 (completion-ignore-case nil)
102 (setq paren (cond ((stringp paren) paren) (paren "\\("))) 105 (words (eq paren 'words))
103 (regexp-opt-group (sort (copy-sequence strings) 'string-lessp) paren)))) 106 (open (cond ((stringp paren) paren) (paren "\\(")))
107 (sorted-strings (sort (copy-sequence strings) 'string-lessp))
108 (re (regexp-opt-group sorted-strings open)))
109 (if words (concat "\\<" re "\\>") re))))
104 110
105;;;###autoload 111;;;###autoload
106(defun regexp-opt-depth (regexp) 112(defun regexp-opt-depth (regexp)