menu))))
;*---------------------------------------------------------------------*/
-;* Some example functions for real autocrrecting xb */
+;* Some example functions for real autocrrecting */
;*---------------------------------------------------------------------*/
(defun flyspell-maybe-correct-transposition (beg end poss)
"Apply 'transpose-chars' to all points in the region BEG to END.
in POSS. Otherwise the change is undone.
This function is meant to be added to 'flyspell-incorrect-hook'."
- (when (consp poss)
+ (when (consp poss)
(catch 'done
- (let ((str (buffer-substring beg end))
- (i 0) (len (- end beg)) tmp)
- (while (< (1+ i) len)
- (setq tmp (aref str i))
- (aset str i (aref str (1+ i)))
- (aset str (1+ i) tmp)
- (when (member str (nth 2 poss))
- (save-excursion
- (goto-char (+ beg i 1))
- (transpose-chars 1))
- (throw 'done t))
- (setq tmp (aref str i))
- (aset str i (aref str (1+ i)))
- (aset str (1+ i) tmp)
- (setq i (1+ i))))
- nil)))
+ (save-excursion
+ (goto-char (1+ beg))
+ (while (< (point) end)
+ (transpose-chars 1)
+ (when (member (buffer-substring beg end) (nth 2 poss))
+ (throw 'done t))
+ (transpose-chars -1)
+ (forward-char))
+ nil))))
(defun flyspell-maybe-correct-doubling (beg end poss)
"For each doubled charachter in the region BEG to END, remove one.
This function is meant to be added to 'flyspell-incorrect-hook'."
(when (consp poss)
(catch 'done
- (let ((str (buffer-substring beg end))
- (i 0) (len (- end beg)))
- (while (< (1+ i) len)
- (when (and (= (aref str i) (aref str (1+ i)))
- (member (concat (substring str 0 (1+ i))
- (substring str (+ i 2)))
- (nth 2 poss)))
- (goto-char (+ beg i))
- (delete-char 1)
- (throw 'done t))
- (setq i (1+ i))))
- nil)))
+ (save-excursion
+ (let ((last (char-after beg))
+ this)
+ (goto-char (1+ beg))
+ (while (< (point) end)
+ (setq this (char-after))
+ (if (not (char-equal this last))
+ (forward-char)
+ (delete-char 1)
+ (when (member (buffer-substring beg (1- end)) (nth 2 poss))
+ (throw 'done t))
+ ;; undo
+ (insert-char this 1))
+ (setq last this))
+ nil)))))
;*---------------------------------------------------------------------*/
;* flyspell-already-abbrevp ... */