Mercurial > emacs
changeset 6139:120970aa0d16
(ispell-message-text-end): New variable.
(ispell-message): Use ispell-message-text-end.
Spell check all of a multi-line subject.
Correct bug whereby internally generated messages were not recognized.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Wed, 02 Mar 1994 04:57:23 +0000 |
parents | 1642e3f231d0 |
children | 35fc497c9f4e |
files | lisp/textmodes/ispell.el |
diffstat | 1 files changed, 77 insertions(+), 42 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/textmodes/ispell.el Wed Mar 02 04:56:25 1994 +0000 +++ b/lisp/textmodes/ispell.el Wed Mar 02 04:57:23 1994 +0000 @@ -1706,8 +1706,26 @@ ;;; ********************************************************************** ;;; Ispell Message ;;; ********************************************************************** -;;; Original from Daniel Quinlan, Ethan Bradford, and Alon Albert +;;; Original from D. Quinlan, E. Bradford, A. Albert, and M. Ernst + +(defvar ispell-message-text-end + (mapconcat (function identity) + '( + ;; Matches postscript files. + "^%!PS-Adobe-2.0" + ;; Matches uuencoded text + "^begin [0-9][0-9][0-9] .*\nM.*\nM.*\nM" + ;; Matches shell files (esp. auto-decoding) + "^#! /bin/sh" + ;; Matches difference listing + "diff -c .*\n\\*\\*\\* .*\n--- " + ;; Matches "----------------- cut here" + "^[-=]+\\s cut here") + "\\|") + "*End of text which will be checked in ispell-message. +If it is a string, limit at first occurence of that regular expression. +Otherwise, it must be a function which is called to get the limit.") ;;;###autoload (defun ispell-message () @@ -1729,33 +1747,43 @@ news-reply-mode-hook or mail-mode-hook to the following lambda expression: (function (lambda () (local-set-key \"\\C-ci\" 'ispell-message)))" (interactive) - (let* ((internal-messagep (save-excursion - (search-forward mail-header-separator nil t))) - (cite-regexp ;Prefix of inserted text - (cond - ((featurep 'supercite) ; sc 3.0 - (concat "\\(" (sc-cite-regexp) "\\)" "\\|" - (ispell-non-empty-string sc-reference-tag-string))) - ((featurep 'sc) ; sc 2.3 - (concat "\\(" sc-cite-regexp "\\)" "\\|" - (ispell-non-empty-string sc-reference-tag-string))) - ((equal major-mode 'news-reply-mode) ;Gnus - (concat "In article <" "\\|" - (if mail-yank-prefix - (ispell-non-empty-string mail-yank-prefix) - "^ \\|^\t"))) - ((equal major-mode 'mh-letter-mode) ; mh mail message - (ispell-non-empty-string mh-ins-buf-prefix)) - ((not internal-messagep) ; Assume n sent us this message. - (concat "In [a-zA-Z.]+ you write:" "\\|" - "In <[^,;&+=]+> [^,;&+=]+ writes:" "\\|" - " *> *")) - ((boundp 'vm-included-text-prefix) ; VM mail message - (concat "[^,;&+=]+ writes:" "\\|" - (ispell-non-empty-string vm-included-text-prefix))) - (mail-yank-prefix ; vanilla mail message. - (ispell-non-empty-string mail-yank-prefix)) - (t "^ \\|^\t"))) + (save-excursion + (beginning-of-buffer) + (let* ((internal-messagep + (search-forward mail-header-separator nil t)) + (limit + (cond + ((not ispell-message-text-end) (point-max)) + ((char-or-string-p ispell-message-text-end) + (if (re-search-forward ispell-message-text-end nil t) + (match-beginning 0) + (point-max))) + (t (min (point-max) (funcall ispell-message-text-end))))) + (cite-regexp ;Prefix of inserted text + (cond + ((featurep 'supercite) ; sc 3.0 + (concat "\\(" (sc-cite-regexp) "\\)" "\\|" + (ispell-non-empty-string sc-reference-tag-string))) + ((featurep 'sc) ; sc 2.3 + (concat "\\(" sc-cite-regexp "\\)" "\\|" + (ispell-non-empty-string sc-reference-tag-string))) + ((equal major-mode 'news-reply-mode) ;Gnus + (concat "In article <" "\\|" + (if mail-yank-prefix + (ispell-non-empty-string mail-yank-prefix) + "^ \\|^\t"))) + ((equal major-mode 'mh-letter-mode) ; mh mail message + (ispell-non-empty-string mh-ins-buf-prefix)) + ((not internal-messagep) ; Assume nn sent us this message. + (concat "In [a-zA-Z.]+ you write:" "\\|" + "In <[^,;&+=]+> [^,;&+=]+ writes:" "\\|" + " *> *")) + ((boundp 'vm-included-text-prefix) ; VM mail message + (concat "[^,;&+=]+ writes:" "\\|" + (ispell-non-empty-string vm-included-text-prefix))) + (mail-yank-prefix ; vanilla mail message. + (ispell-non-empty-string mail-yank-prefix)) + (t "^ \\|^\t"))) (cite-regexp-start (concat "^[ \t]*$\\|" cite-regexp)) (cite-regexp-end (concat "^\\(" cite-regexp "\\)")) (old-case-fold-search case-fold-search) @@ -1769,31 +1797,38 @@ (< (point) internal-messagep) (and (looking-at "[a-zA-Z---]+:\\|\t\\| ") (not (eobp)))) - (if (and (not (looking-at "Subject: .*Re:")) - (not (looking-at "Subject: +\\[")) - (looking-at "Subject:")) ; last so (match-end 0) works right. - ;; spell check Subject: field without Re:'s. - (let ((case-fold-search old-case-fold-search)) - (end-of-line) - (ispell-region (match-end 0) (point)))) + + ;; spell check Subject: field without Re:'s. + (if (looking-at "Subject: *") + (progn + (goto-char (match-end 0)) + (if (and (not (looking-at ".*Re\\>")) + (not (looking-at "\\["))) + (let ((case-fold-search old-case-fold-search)) + (ispell-region (point) + (progn + (end-of-line) + (while (looking-at "\n[ \t]") + (end-of-line 2)) + (point))))))) (forward-line 1)) (setq case-fold-search nil) ;; Skip mail header, particularly for non-english languages. (if (looking-at mail-header-separator) (forward-line 1)) - (while (not (eobp)) + (while (< (point) limit) ;; Skip across text cited from other messages. (while (and (looking-at cite-regexp-start) - (not (eobp))) + (< (point) limit)) (forward-line 1)) - (if (not (eobp)) + (if (< (point) limit) ;; Check the next batch of lines that *aren't* cited. (let ((end (save-excursion - (if (re-search-forward cite-regexp-end nil 'end) - (beginning-of-line)) - (point)))) + (if (re-search-forward cite-regexp-end limit 'end) + (match-beginning 0) + limit)))) (ispell-region (point) end) - (goto-char end))))))) + (goto-char end)))))))) (defun ispell-non-empty-string (string) (if (or (not string) (string-equal string ""))