]> git.eshelyaron.com Git - emacs.git/commitdiff
(ispell-process-line): Add local var line-offset to adjust for the change
authorRichard M. Stallman <rms@gnu.org>
Tue, 28 Dec 1999 05:37:52 +0000 (05:37 +0000)
committerRichard M. Stallman <rms@gnu.org>
Tue, 28 Dec 1999 05:37:52 +0000 (05:37 +0000)
in positions within the line, due to previous replacements.

lisp/ChangeLog
lisp/textmodes/ispell.el

index 848346086efe0b885da0cd689198d8be00b6fe5e..3b6c66175b4975ff6973a846c2b28ccecfb5982c 100644 (file)
@@ -1,3 +1,9 @@
+1999-12-28  Richard M. Stallman  <rms@caffeine.ai.mit.edu>
+
+       * textmodes/ispell.el (ispell-process-line):
+       Add local var line-offset to adjust for the change
+       in positions within the line, due to previous replacements.
+
 1999-12-27  Richard M. Stallman  <rms@caffeine.ai.mit.edu>
 
        * lpr.el (lpr-buffer, print-buffer, lpr-region, print-region):
index 4f7c7e1288e082f044bc2cca3a806b3c56367b76..691c29b5d18d0fd3f5ca706280d83518dc1f7a7f 100644 (file)
@@ -2252,7 +2252,12 @@ otherwise, the current line is skipped."
 
 (defun ispell-process-line (string)
   ;;(declare special start end)
-  (let (poss)
+  (let (poss
+       ;; line-offset is the change so far in the size of the line.
+       ;; The position values we get from ispell reflect the original
+       ;; text, and correction of previous words may have shifted the
+       ;; current word within the line.
+       (line-offset 0))
     ;; send string to spell process and get input.
     (process-send-string ispell-process string)
     (while (progn
@@ -2270,7 +2275,8 @@ otherwise, the current line is skipped."
          ;; Markers can move with highlighting!  This destroys
          ;; end of region markers line-end and ispell-region-end
          (let ((word-start
-                (copy-marker (+ start ispell-offset (car (cdr poss)))))
+                (copy-marker (+ start ispell-offset line-offset
+                                (car (cdr poss)))))
                (word-len (length (car poss)))
                (line-end (copy-marker end))
                (line-start (copy-marker start))
@@ -2323,6 +2329,7 @@ otherwise, the current line is skipped."
                    recheck-region t)
              (delete-region (point) (+ word-len (point)))
              (insert (car replace))
+             (setq line-offset (+ line-offset (- line-end end)))
              ;; Only typed-in replacements need to be re-checked.
              (if (not (eq 'query-replace (car (cdr replace))))
                  (backward-char (length (car replace))))
@@ -2355,6 +2362,8 @@ otherwise, the current line is skipped."
             (replace                   ; STRING REPLACEMENT for this word.
              (delete-region (point) (+ word-len (point)))
              (insert replace)
+             (setq line-offset (+ line-offset (- line-end end)))
+
              (set-marker line-start (+ line-start
                                        (- (length replace)
                                           (length (car poss)))))))