emacs-devel
[Top][All Lists]
Advanced

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

Re: address@hidden: flyspell bug]


From: martin rudalics
Subject: Re: address@hidden: flyspell bug]
Date: Sat, 21 Oct 2006 15:47:58 +0200
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

The recent incorporation into flyspell-large-region of checking for duplicated words has led to the following bug:

If a large region contains text of the form:

x$ $y

or of the form

x# #y

(where x and y may be any words and there may be multiple white spaces between the $'s or #'s), then flyspell-large-region makes Emacs hanging (i.e. I have to press Ctrl-g to make Emacs running again).


I regard the following as a flyspell bug, too: If duplicated words are separated by more than one white space, then they are not detected.

The attached patch tries to address these issues.  Please make sure that it
doesn't break anything else.

*** flyspell.el Sat Oct 21 11:36:32 2006
--- flyspell.el Sat Oct 21 15:44:44 2006
***************
*** 1011,1021 ****
                          (not (memq (char-after (1- start)) '(?\} ?\\)))))
                 flyspell-mark-duplications-flag
                 (save-excursion
!                  (goto-char (1- start))
!                  (let ((p (flyspell-word-search-backward
!                            word
!                            (- start (1+ (- end start))))))
!                    (and p (/= p (1- start))))))
            ;; yes, this is a doublon
            (flyspell-highlight-incorrect-region start end 'doublon)
            nil)
--- 1011,1022 ----
                          (not (memq (char-after (1- start)) '(?\} ?\\)))))
                 flyspell-mark-duplications-flag
                 (save-excursion
!                  (goto-char start)
!                  (let* ((bound
!                          (- start (- end start) (- (skip-chars-backward " 
\t\n\f"))))
!                         (p (when (>= bound (point-min))
!                              (flyspell-word-search-backward word bound))))
!                    (and p (/= p start)))))
            ;; yes, this is a doublon
            (flyspell-highlight-incorrect-region start end 'doublon)
            nil)
***************
*** 1472,1478 ****
      (flyspell-word)     ; Make sure current word is checked
      (backward-word 1)
      (while (and (< (point) end)
!               (re-search-forward "\\b\\([^ \n\t]+\\)[ \n\t]+\\1\\b"
                                   end 'move))
        (flyspell-word)
        (backward-word 1))
--- 1473,1479 ----
      (flyspell-word)     ; Make sure current word is checked
      (backward-word 1)
      (while (and (< (point) end)
!               (re-search-forward "\\(\\w+\\)\\s-+\\1\\>"
                                   end 'move))
        (flyspell-word)
        (backward-word 1))
***************
*** 1708,1714 ****
            ;; now we can use a new overlay
            (setq flyspell-overlay
                  (make-flyspell-overlay
!                  beg end 'flyspell-incorrect 'highlight)))))))

  ;;*---------------------------------------------------------------------*/
  ;;*    flyspell-highlight-duplicate-region ...                          */
--- 1709,1717 ----
            ;; now we can use a new overlay
            (setq flyspell-overlay
                  (make-flyspell-overlay
!                  beg end
!                  (if (eq poss 'doublon) 'flyspell-duplicate 
'flyspell-incorrect)
!                  'highlight)))))))

  ;;*---------------------------------------------------------------------*/
  ;;*    flyspell-highlight-duplicate-region ...                          */

reply via email to

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