changeset 110801:37b955157790

(regexp-opt): Add `symbols' mode.
author Miles Bader <miles@gnu.org>
date Thu, 07 Oct 2010 16:24:21 +0900
parents 751b2ae689b5
children e544f6cc2447
files doc/lispref/searching.texi lisp/ChangeLog lisp/emacs-lisp/regexp-opt.el
diffstat 3 files changed, 17 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/doc/lispref/searching.texi	Thu Oct 07 06:47:37 2010 +0000
+++ b/doc/lispref/searching.texi	Thu Oct 07 16:24:21 2010 +0900
@@ -918,7 +918,11 @@
 If the optional argument @var{paren} is non-@code{nil}, then the
 returned regular expression is always enclosed by at least one
 parentheses-grouping construct.  If @var{paren} is @code{words}, then
-that construct is additionally surrounded by @samp{\<} and @samp{\>}.
+that construct is additionally surrounded by @samp{\<} and @samp{\>};
+alternatively, if @var{paren} is @code{symbols}, then that construct
+is additionally surrounded by @samp{\_<} and @samp{\_>}
+(@code{symbols} is often appropriate when matching
+programming-language keywords and the like).
 
 This simplified definition of @code{regexp-opt} produces a
 regular expression which is equivalent to the actual value
--- a/lisp/ChangeLog	Thu Oct 07 06:47:37 2010 +0000
+++ b/lisp/ChangeLog	Thu Oct 07 16:24:21 2010 +0900
@@ -1,3 +1,7 @@
+2010-10-07  Miles Bader  <Miles Bader <miles@gnu.org>>
+
+	* emacs-lisp/regexp-opt.el (regexp-opt): Add `symbols' mode.
+
 2010-10-07  Glenn Morris  <rgm@gnu.org>
 
 	* mail/rmail.el (mail-sendmail-delimit-header, mail-header-end)
--- a/lisp/emacs-lisp/regexp-opt.el	Thu Oct 07 06:47:37 2010 +0000
+++ b/lisp/emacs-lisp/regexp-opt.el	Thu Oct 07 16:24:21 2010 +0900
@@ -96,19 +96,24 @@
    (concat open (mapconcat 'regexp-quote STRINGS \"\\\\|\") close))
 
 If PAREN is `words', then the resulting regexp is additionally surrounded
-by \\=\\< and \\>."
+by \\=\\< and \\>.
+If PAREN is `symbols', then the resulting regexp is additionally surrounded
+by \\=\\_< and \\_>."
   (save-match-data
     ;; Recurse on the sorted list.
     (let* ((max-lisp-eval-depth 10000)
 	   (max-specpdl-size 10000)
 	   (completion-ignore-case nil)
 	   (completion-regexp-list nil)
-	   (words (eq paren 'words))
 	   (open (cond ((stringp paren) paren) (paren "\\(")))
 	   (sorted-strings (delete-dups
 			    (sort (copy-sequence strings) 'string-lessp)))
 	   (re (regexp-opt-group sorted-strings (or open t) (not open))))
-      (if words (concat "\\<" re "\\>") re))))
+      (cond ((eq paren 'words)
+	     (concat "\\<" re "\\>"))
+	    ((eq paren 'symbols)
+	     (concat "\\_<" re "\\_>"))
+	    (t re)))))
 
 ;;;###autoload
 (defun regexp-opt-depth (regexp)