changeset 78842:675e2e2bd67c

(tex-validate-buffer): Use paragraph motion functions, rather than hard-coding "\n\n". (tex-validate-region): Check for eobp, to speed up. (tex-next-unmatched-end): Doc fix.
author Glenn Morris <rgm@gnu.org>
date Thu, 20 Sep 2007 03:06:38 +0000
parents 39ce41a319b4
children f203a95d7aa7
files lisp/textmodes/tex-mode.el
diffstat 1 files changed, 23 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/textmodes/tex-mode.el	Thu Sep 20 02:52:32 2007 +0000
+++ b/lisp/textmodes/tex-mode.el	Thu Sep 20 03:06:38 2007 +0000
@@ -1163,25 +1163,27 @@
 	(setq occur-revert-arguments (list nil 0 (list buffer))))
       (save-excursion
 	(goto-char (point-max))
-	(while (and (not (bobp)))
-	  (let ((end (point))
-		prev-end)
-	    ;; Scan the previous paragraph for invalidities.
-	    ;; FIXME this should be using something like backward-paragraph.
-	    (if (search-backward "\n\n" nil t)
-		(progn
-		  (setq prev-end (point))
-		  (forward-char 2))
-	      (goto-char (setq prev-end (point-min))))
-	    (or (tex-validate-region (point) end)
-		(let* ((end (line-beginning-position 2))
-		       start tem)
+	;; Do a little shimmy to place point at the end of the last
+	;; "real" paragraph. Need to avoid validating across an \end,
+	;; because that blows up latex-forward-sexp.
+	(backward-paragraph)
+	(forward-paragraph)
+	(while (not (bobp))
+	  ;; Scan the previous paragraph for invalidities.
+	  (backward-paragraph)
+	  (save-excursion
+	    (or (tex-validate-region (point) (save-excursion
+					       (forward-paragraph)
+					       (point)))
+		(let ((end (line-beginning-position 2))
+		      start tem)
 		  (beginning-of-line)
 		  (setq start (point))
 		  ;; Keep track of line number as we scan,
 		  ;; in a cumulative fashion.
 		  (if linenum
-		      (setq linenum (- linenum (count-lines prevpos (point))))
+		      (setq linenum (- linenum
+				       (count-lines prevpos (point))))
 		    (setq linenum (1+ (count-lines 1 start))))
 		  (setq prevpos (point))
 		  ;; Mention this mismatch in *Occur*.
@@ -1202,10 +1204,10 @@
 		      (add-text-properties
 		       text-beg (- text-end 1)
 		       '(mouse-face highlight
-			 help-echo "mouse-2: go to this invalidity"))
+				    help-echo
+				    "mouse-2: go to this invalidity"))
 		      (put-text-property text-beg (- text-end 1)
-					 'occur-target tem)))))
-	    (goto-char prev-end))))
+					 'occur-target tem))))))))
       (with-current-buffer standard-output
 	(let ((no-matches (zerop num-matches)))
 	  (if no-matches
@@ -1228,7 +1230,9 @@
 	    (narrow-to-region start end)
 	    ;; First check that the open and close parens balance in numbers.
 	    (goto-char start)
-	    (while (<= 0 (setq max-possible-sexps (1- max-possible-sexps)))
+	    (while (and (not (eobp))
+			(<= 0 (setq max-possible-sexps
+				    (1- max-possible-sexps))))
 	      (forward-sexp 1))
 	    ;; Now check that like matches like.
 	    (goto-char start)
@@ -1367,7 +1371,7 @@
     (search-failed (error "Couldn't find unended \\begin"))))
 
 (defun tex-next-unmatched-end ()
-  "Leave point at the end of the next `\\end' that is unended."
+  "Leave point at the end of the next `\\end' that is unmatched."
   (while (and (tex-search-noncomment
 	       (re-search-forward "\\\\\\(begin\\|end\\)\\s *{[^}]+}"))
 	      (save-excursion (goto-char (match-beginning 0))