Mercurial > emacs
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)))