changeset 5488:1e544fd7be12

Import looking-back from GNU Emacs. -------------------- ChangeLog entries follow: -------------------- lisp/ChangeLog addition: 2011-04-30 Didier Verna <didier@xemacs.org> * subr.el (looking-back): New function.
author Didier Verna <didier@lrde.epita.fr>
date Sat, 30 Apr 2011 17:38:35 +0200
parents dc37764a105b
children 159face738c3
files lisp/ChangeLog lisp/subr.el
diffstat 2 files changed, 36 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Apr 30 17:29:47 2011 +0200
+++ b/lisp/ChangeLog	Sat Apr 30 17:38:35 2011 +0200
@@ -1,3 +1,7 @@
+2011-04-30  Didier Verna  <didier@xemacs.org>
+
+	* subr.el (looking-back): New function.
+
 2011-04-30  Didier Verna  <didier@xemacs.org>
 
 	* special-mode.el: New file.
--- a/lisp/subr.el	Sat Apr 30 17:29:47 2011 +0200
+++ b/lisp/subr.el	Sat Apr 30 17:38:35 2011 +0200
@@ -732,6 +732,38 @@
 	(buffer-substring-no-properties (match-beginning num)
 					(match-end num)))))
 
+;; Imported from GNU Emacs 23.3.1 -- dvl
+(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 a minimum
+starting position, to avoid checking matches that would start
+before LIMIT.
+
+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.  When the match is
+extended, its starting position is allowed to occur before
+LIMIT."
+  (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'.