]> git.wh0rd.org Git - nano.git/commitdiff
Actually apply Rocco's spell check fix to the 1.0 tree :-)
authorChris Allegretta <chrisa@asty.org>
Fri, 11 Jan 2002 13:42:49 +0000 (13:42 +0000)
committerChris Allegretta <chrisa@asty.org>
Fri, 11 Jan 2002 13:42:49 +0000 (13:42 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/branches/nano_1_0_branch/nano@996 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

nano.c
proto.h
search.c

diff --git a/nano.c b/nano.c
index 8715d76be2ea51718aaf40d68d3c775b518689e5..bb2e0f11692ca7091a3e5d48806f9ebccdc4c04b 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -1297,27 +1297,36 @@ int do_int_spell_fix(char *word)
 
     edit_update(fileage, TOP);
 
-    /* make sure word is still mis-spelt (i.e. when multi-errors) */
-    if (findnextstr(TRUE, fileage, beginx_top, prevanswer) != NULL)
-    {
-       do_replace_highlight(TRUE, prevanswer);
+    while (1) {
+
+       /* make sure word is still mis-spelt (i.e. when multi-errors) */
+       if (findnextstr(TRUE, fileage, beginx_top, prevanswer) != NULL) {
+
+           /* find wholewords only */
+           if (!is_whole_word(current_x, current, prevanswer))
+               continue;
+
+           do_replace_highlight(TRUE, prevanswer);
 
-       /* allow replace word to be corrected */
-       i = statusq(0, spell_list, SPELL_LIST_LEN, last_replace, 
+           /* allow replace word to be corrected */
+           i = statusq(0, spell_list, SPELL_LIST_LEN, last_replace,
                _("Edit a replacement"));
 
-       do_replace_highlight(FALSE, prevanswer);
+           do_replace_highlight(FALSE, prevanswer);
 
-       /* start from the start of this line again */
-       current = fileage;
-       current_x = beginx_top;
+           /* start from the start of this line again */
+           current = fileage;
+           current_x = beginx_top;
 
-       search_last_line = FALSE;
+           search_last_line = FALSE;
 
-       if (strcmp(prevanswer,answer) != 0) {
-          j = i;
-          do_replace_loop(prevanswer, fileage, &beginx_top, TRUE, &j);
+           if (strcmp(prevanswer,answer) != 0) {
+               j = i;
+               do_replace_loop(prevanswer, fileage, &beginx_top, TRUE, &j);
+           }
        }
+
+       break;
     }
 
     /* restore the search/replace strings */
diff --git a/proto.h b/proto.h
index 2dc443129e6351ca32fd674828c82260ffd7dd4d..24e749d22ca1c307632819a3c138a5c86dc68033 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -83,6 +83,7 @@ int renumber_all(void);
 int open_file(char *filename, int insert, int quiet);
 int do_writeout(char *path, int exiting);
 int do_gotoline(long defline);
+int is_whole_word(int curr_pos, filestruct *fileptr, char *searchword);
 int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
                        int wholewords, int *i);
 /* Now in move.c */
index 3e6a18c63c2b33802389d63bbb5e06cecd9c3760..e86a9d4739ccc4524e510d6299b0df561137343e 100644 (file)
--- a/search.c
+++ b/search.c
@@ -212,6 +212,20 @@ void not_found_msg(char *str)
     }
 }
 
+int is_whole_word(int curr_pos, filestruct *fileptr, char *searchword)
+{
+    /* start of line or previous character not a letter */
+    if ((curr_pos < 1) || (!isalpha((int) fileptr->data[curr_pos-1])))
+
+       /* end of line or next character not a letter */
+       if (((curr_pos + strlen(searchword)) == strlen(fileptr->data))
+           || (!isalpha((int) fileptr->data[curr_pos + strlen(searchword)])))
+
+           return TRUE;
+
+    return FALSE;
+}
+
 filestruct *findnextstr(int quiet, filestruct * begin, int beginx,
                        char *needle)
 {
@@ -523,21 +537,8 @@ int do_replace_loop(char *prevanswer, filestruct *begin, int *beginx,
            break;
 
        /* Make sure only whole words are found */
-       if (wholewords)
-       {
-           /* start of line or previous character not a letter */
-           if ((current_x == 0) || (!isalpha((int) fileptr->data[current_x-1])))
-           {
-               /* end of line or next character not a letter */
-               if (((current_x + strlen(prevanswer)) == strlen(fileptr->data))
-                       || (!isalpha((int) fileptr->data[current_x + strlen(prevanswer)])))
-                   ;
-               else
-                   continue;
-           }
-           else
-               continue;
-       }
+       if ((wholewords) && (!is_whole_word(current_x, fileptr, prevanswer)))
+           continue;
 
        /* If we're here, we've found the search string */
        if (!replaceall) {