changeset 70404:ce092da13632

(reb-update-overlays): Cycle through provided faces once they all have been used.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 05 May 2006 13:02:14 +0000
parents bbbbf819a488
children 2fc8fcad6727
files lisp/emacs-lisp/re-builder.el
diffstat 1 files changed, 22 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/re-builder.el	Fri May 05 12:58:42 2006 +0000
+++ b/lisp/emacs-lisp/re-builder.el	Fri May 05 13:02:14 2006 +0000
@@ -112,7 +112,7 @@
 (if (not (fboundp 'make-overlay))
     (require 'overlay))
 
-;; User costomizable variables
+;; User customizable variables
 (defgroup re-builder nil
   "Options for the RE Builder."
   :group 'lisp
@@ -627,11 +627,9 @@
 	    beg (match-end 0)))
     i))
 
-
 (defun reb-update-overlays (&optional subexp)
   "Switch to `reb-target-buffer' and mark all matches of `reb-regexp'.
 If SUBEXP is non-nil mark only the corresponding sub-expressions."
-
   (let* ((re (reb-target-binding reb-regexp))
 	 (subexps (reb-count-subexps re))
 	 (matches 0)
@@ -645,24 +643,35 @@
 		  (or (not reb-auto-match-limit)
 		      (< matches reb-auto-match-limit)))
 	(if (= 0 (length (match-string 0)))
-	  (error "Empty regular expression!"))
-	(let ((i 0))
+	    (error "Empty regular expression!"))
+	(let ((i 0)
+	      suffix max-suffix)
 	  (setq matches (1+ matches))
 	  (while (<= i subexps)
 	    (if (and (or (not subexp) (= subexp i))
 		     (match-beginning i))
 		(let ((overlay (make-overlay (match-beginning i)
 					     (match-end i)))
-		      (face-name (format "reb-match-%d" i)))
-		  (if (not firstmatch)
-		      (setq firstmatch (match-data)))
+		      ;; When we have exceeded the number of provided faces,
+		      ;; cycle thru them where `max-suffix' denotes the maximum
+		      ;; suffix for `reb-match-*' that has been defined and
+		      ;; `suffix' the suffix calculated for the current match.
+		      (face
+		       (cond
+			(max-suffix
+			 (if (= suffix max-suffix)
+			     (setq suffix 1)
+			   (setq suffix (1+ suffix)))
+			 (intern-soft (format "reb-match-%d" suffix)))
+			((intern-soft (format "reb-match-%d" i)))
+			((setq max-suffix (1- i))
+			 (setq suffix 1)
+			 ;; `reb-match-1' must exist.
+			 'reb-match-1))))
+		  (unless firstmatch (setq firstmatch (match-data)))
 		  (setq reb-overlays (cons overlay reb-overlays)
 			submatches (1+ submatches))
-		  (overlay-put
-		   overlay 'face
-		   (or (intern-soft face-name)
-		       (error "Too many subexpressions - face `%s' not defined"
-			      face-name )))
+		  (overlay-put overlay 'face face)
 		  (overlay-put overlay 'priority i)))
 	    (setq i (1+ i))))))
     (let ((count (if subexp submatches matches)))