Mercurial > emacs
changeset 62861:0d5825b4e125
(looking-back): New argument GREEDY.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 29 May 2005 08:34:46 +0000 |
parents | 88e7e662d067 |
children | 8641f46cf18f |
files | lisp/subr.el |
diffstat | 1 files changed, 25 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/subr.el Sun May 29 08:34:07 2005 +0000 +++ b/lisp/subr.el Sun May 29 08:34:46 2005 +0000 @@ -1996,14 +1996,34 @@ (buffer-substring-no-properties (match-beginning num) (match-end num))))) -(defun looking-back (regexp &optional limit) +(defun looking-back (regexp &optional limit greedy) "Return non-nil if text before point matches regular expression REGEXP. Like `looking-at' except matches before point, and is slower. LIMIT if non-nil speeds up the search by specifying how far back the -match can start." - (not (null - (save-excursion - (re-search-backward (concat "\\(?:" regexp "\\)\\=") limit t))))) +match can start. + +If GREEDY is non-nil, extend the match backwards as far as possible, +stopping when a single additional previous character cannot be part +of a match for REGEXP." + (let ((start (point)) + (pos + (save-excursion + (and (re-search-backward (concat "\\(?:" regexp "\\)\\=") limit t) + (point))))) + (if (and greedy pos) + (save-restriction + (narrow-to-region (point-min) start) + (while (and (> pos (point-min)) + (save-excursion + (goto-char pos) + (backward-char 1) + (looking-at (concat "\\(?:" regexp "\\)\\'")))) + (setq pos (1- pos))) + (save-excursion + (goto-char pos) + (looking-at (concat "\\(?:" regexp "\\)\\'"))))) + (not (null pos)))) + (defconst split-string-default-separators "[ \f\t\n\r\v]+" "The default value of separators for `split-string'.