emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: re-builder highlighting incorrect for more than 3 groupings


From: martin rudalics
Subject: Re: re-builder highlighting incorrect for more than 3 groupings
Date: Thu, 27 Apr 2006 10:55:07 +0200
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

    You can add as many deffaces

    (defface reb-match-4 ...

    (defface reb-match-5 ...

Can we do something so that it cycles thru the provided faces
once it has used them all?



The attached patch tries to do that.

2006-04-27  Martin Rudalics  <address@hidden>

        * emacs-lisp/re-builder.el (reb-update-overlays):
        Cycle thru provided faces once they have been used all.

*** re-builder.el       Sat Nov  5 19:44:46 2005
--- re-builder.el       Thu Apr 27 10:35:20 2006
***************
*** 112,118 ****
  (if (not (fboundp 'make-overlay))
      (require 'overlay))

! ;; User costomizable variables
  (defgroup re-builder nil
    "Options for the RE Builder."
    :group 'lisp
--- 112,118 ----
  (if (not (fboundp 'make-overlay))
      (require 'overlay))

! ;; User customizable variables
  (defgroup re-builder nil
    "Options for the RE Builder."
    :group 'lisp
***************
*** 627,637 ****
            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)
--- 627,635 ----
***************
*** 645,668 ****
                  (or (not reb-auto-match-limit)
                      (< matches reb-auto-match-limit)))
        (if (= 0 (length (match-string 0)))
!         (error "Empty regular expression!"))
!       (let ((i 0))
          (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)))
                  (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 'priority i)))
            (setq i (1+ i))))))
      (let ((count (if subexp submatches matches)))
--- 643,677 ----
                  (or (not reb-auto-match-limit)
                      (< matches reb-auto-match-limit)))
        (if (= 0 (length (match-string 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)))
!                     ;; 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 face)
                  (overlay-put overlay 'priority i)))
            (setq i (1+ i))))))
      (let ((count (if subexp submatches matches)))

reply via email to

[Prev in Thread] Current Thread [Next in Thread]