summaryrefslogtreecommitdiff
path: root/lisp/textmodes/flyspell.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2005-11-14 04:53:14 +0000
committerRichard M. Stallman <rms@gnu.org>2005-11-14 04:53:14 +0000
commitb8b7c66e1c6f76dd05ec99aa67e5584f2a3b0e1a (patch)
tree42c44a9783079009ec808d485af6f74bcbb82be9 /lisp/textmodes/flyspell.el
parent7e1b6c2c593081462d82d20f1b274482059822c8 (diff)
downloademacs-b8b7c66e1c6f76dd05ec99aa67e5584f2a3b0e1a.tar.gz
(flyspell-large-region): Call flyspell-accept-buffer-local-defs.
(flyspell-notify-misspell): Fix misspelling of "Misspelling". (flyspell-process-localwords): New function. (flyspell-large-region): Call flyspell-process-localwords and flyspell-delete-region-overlays. (flyspell-delete-region-overlays): New function. (flyspell-delete-all-overlays): Call that.
Diffstat (limited to 'lisp/textmodes/flyspell.el')
-rw-r--r--lisp/textmodes/flyspell.el62
1 files changed, 55 insertions, 7 deletions
diff --git a/lisp/textmodes/flyspell.el b/lisp/textmodes/flyspell.el
index a4d77213aec..0bfdadc28ab 100644
--- a/lisp/textmodes/flyspell.el
+++ b/lisp/textmodes/flyspell.el
@@ -947,7 +947,7 @@ Mostly we check word delimiters."
(sort (car (cdr (cdr poss))) 'string<)
(car (cdr (cdr poss)))))))
(if flyspell-issue-message-flag
- (message "mispelling `%s' %S" word replacements))))
+ (message "misspelling `%s' %S" word replacements))))
;*---------------------------------------------------------------------*/
;* flyspell-word-search-backward ... */
@@ -1375,6 +1375,44 @@ The buffer to mark them in is `flyspell-large-region-buffer'."
(setq flyspell-external-ispell-buffer nil))
;*---------------------------------------------------------------------*/
+;* flyspell-process-localwords ... */
+;* ------------------------------------------------------------- */
+;* This function is used to prevent marking of words explicitly */
+;* declared correct. */
+;*---------------------------------------------------------------------*/
+(defun flyspell-process-localwords (misspellings-buffer)
+ (let (localwords
+ (ispell-casechars (ispell-get-casechars)))
+ ;; Get localwords from the original buffer
+ (save-excursion
+ (goto-char (point-min))
+ ;; Localwords parsing copied from ispell.el.
+ (while (search-forward ispell-words-keyword nil t)
+ (let ((end (save-excursion (end-of-line) (point)))
+ string)
+ ;; buffer-local words separated by a space, and can contain
+ ;; any character other than a space. Not rigorous enough.
+ (while (re-search-forward " *\\([^ ]+\\)" end t)
+ (setq string (buffer-substring-no-properties (match-beginning 1)
+ (match-end 1)))
+ ;; This can fail when string contains a word with invalid chars.
+ ;; Error handling needs to be added between Ispell and Emacs.
+ (if (and (< 1 (length string))
+ (equal 0 (string-match ispell-casechars string)))
+ (push string localwords))))))
+ ;; Remove localwords matches from misspellings-buffer.
+ ;; The usual mechanism of communicating the local words to ispell
+ ;; does not affect the special ispell process used by
+ ;; flyspell-large-region.
+ (with-current-buffer misspellings-buffer
+ (save-excursion
+ (dolist (word localwords)
+ (goto-char (point-min))
+ (let ((regexp (concat "^" word "\n")))
+ (while (re-search-forward regexp nil t)
+ (delete-region (match-beginning 0) (match-end 0)))))))))
+
+;*---------------------------------------------------------------------*/
;* flyspell-large-region ... */
;*---------------------------------------------------------------------*/
(defun flyspell-large-region (beg end)
@@ -1384,6 +1422,7 @@ The buffer to mark them in is `flyspell-large-region-buffer'."
(setq flyspell-large-region-buffer curbuf)
(setq flyspell-large-region-beg beg)
(setq flyspell-large-region-end end)
+ (flyspell-accept-buffer-local-defs)
(set-buffer buffer)
(erase-buffer)
;; this is done, we can start checking...
@@ -1416,7 +1455,11 @@ The buffer to mark them in is `flyspell-large-region-buffer'."
(setq args (append args ispell-extra-args))
args))))
(if (eq c 0)
- (flyspell-external-point-words)
+ (progn
+ (flyspell-process-localwords buffer)
+ (with-current-buffer curbuf
+ (flyspell-delete-region-overlays beg end))
+ (flyspell-external-point-words))
(error "Can't check region...")))))
;*---------------------------------------------------------------------*/
@@ -1503,19 +1546,24 @@ FLYSPELL-BUFFER."
(and (overlayp o) (overlay-get o 'flyspell-overlay)))
;*---------------------------------------------------------------------*/
-;* flyspell-delete-all-overlays ... */
+;* flyspell-delete-region-overlays, flyspell-delete-all-overlays */
;* ------------------------------------------------------------- */
-;* Remove all the overlays introduced by flyspell. */
+;* Remove overlays introduced by flyspell. */
;*---------------------------------------------------------------------*/
-(defun flyspell-delete-all-overlays ()
- "Delete all the overlays used by flyspell."
- (let ((l (overlays-in (point-min) (point-max))))
+(defun flyspell-delete-region-overlays (beg end)
+ "Delete overlays used by flyspell in a given region."
+ (let ((l (overlays-in beg end)))
(while (consp l)
(progn
(if (flyspell-overlay-p (car l))
(delete-overlay (car l)))
(setq l (cdr l))))))
+
+(defun flyspell-delete-all-overlays ()
+ "Delete all the overlays used by flyspell."
+ (flyspell-delete-region-overlays (point-min) (point-max)))
+
;*---------------------------------------------------------------------*/
;* flyspell-unhighlight-at ... */
;*---------------------------------------------------------------------*/