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'.