1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-23 07:19:15 +00:00

(regexp-opt-group): Undo last change. Fix the docstring instead.

This commit is contained in:
Stefan Monnier 2003-01-20 21:37:02 +00:00
parent 945e6102fe
commit 94abe30b0c
2 changed files with 16 additions and 14 deletions

View File

@ -1,3 +1,8 @@
2003-01-20 Stefan Monnier <monnier@cs.yale.edu>
* emacs-lisp/regexp-opt.el (regexp-opt-group): Undo last change.
Fix the docstring instead.
2003-01-20 Glenn Morris <gmorris@ast.cam.ac.uk>
* calendar/calendar.el (calendar-only-one-frame-setup): Autoload it.

View File

@ -133,18 +133,18 @@ in REGEXP."
(require 'cl))
(defun regexp-opt-group (strings &optional paren lax)
"Return a regexp to match a string in STRINGS.
If PAREN non-nil, output regexp parentheses around returned regexp.
If LAX non-nil, don't output parentheses if it doesn't require them.
Merges keywords to avoid backtracking in Emacs' regexp matcher.
;; Return a regexp to match a string in the sorted list STRINGS.
;; If PAREN non-nil, output regexp parentheses around returned regexp.
;; If LAX non-nil, don't output parentheses if it doesn't require them.
;; Merges keywords to avoid backtracking in Emacs' regexp matcher.
The basic idea is to find the shortest common prefix or suffix, remove it
and recurse. If there is no prefix, we divide the list into two so that
\(at least) one half will have at least a one-character common prefix.
;; The basic idea is to find the shortest common prefix or suffix, remove it
;; and recurse. If there is no prefix, we divide the list into two so that
;; \(at least) one half will have at least a one-character common prefix.
Also we delay the addition of grouping parenthesis as long as possible
until we're sure we need them, and try to remove one-character sequences
so we can use character sets rather than grouping parenthesis."
;; Also we delay the addition of grouping parenthesis as long as possible
;; until we're sure we need them, and try to remove one-character sequences
;; so we can use character sets rather than grouping parenthesis.
(let* ((open-group (cond ((stringp paren) paren) (paren "\\(?:") (t "")))
(close-group (if paren "\\)" ""))
(open-charset (if lax "" open-group))
@ -223,10 +223,7 @@ so we can use character sets rather than grouping parenthesis."
;; particular letter and those that do not, and recurse on them.
(let* ((char (char-to-string (string-to-char (car strings))))
(half1 (all-completions char strings))
(half2 strings))
;; Remove from HALF2 whatever is in HALF1.
(dolist (elt half1)
(setq half2 (delq elt half2)))
(half2 (nthcdr (length half1) strings)))
(concat open-group
(regexp-opt-group half1)
"\\|" (regexp-opt-group half2)