]> git.wh0rd.org Git - nano.git/commitdiff
Replacing a fake 'while', and deleting a redundant 'if' -- we searched
authorBenno Schulenberg <bensberg@justemail.net>
Thu, 31 Mar 2016 11:14:25 +0000 (11:14 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Thu, 31 Mar 2016 11:14:25 +0000 (11:14 +0000)
for whole words only, so it will be a whole word.

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5781 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/text.c

index 55e72e9c3f86ebad1e7d01d5f2ff1558f41e885f..ec4f7a677cc46ba551b424808cd6304b799babeb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-03-31  Benno Schulenberg  <bensberg@justemail.net>
+       * src/text.c (do_int_spell_fix): Replace a fake 'while' and delete
+       a redundant 'if' -- we searched for whole words only, so it will be.
+
 2016-03-30  Benno Schulenberg  <bensberg@justemail.net>
        * src/search.c (do_replace_loop, go_looking, findnextstr): Report
        "Cancelled" instead of "Not found" when the user aborts a replace
index e28836788cec13246071610f81fea355e7b38981..42c33bf86b3a355d1abe6368ad9f7ac37d405265 100644 (file)
@@ -2353,14 +2353,16 @@ void do_full_justify(void)
  * return FALSE if the user cancels. */
 bool do_int_spell_fix(const char *word)
 {
-    char *save_search;
+    char *save_search, *exp_word;
     size_t match_len, current_x_save = openfile->current_x;
     size_t pww_save = openfile->placewewant;
     filestruct *edittop_save = openfile->edittop;
     filestruct *current_save = openfile->current;
        /* Save where we are. */
     bool canceled = FALSE;
-       /* The return value. */
+       /* The inverse of this function's return value. */
+    bool result;
+       /* The return value of searching for a misspelled word. */
     unsigned stash[sizeof(flags) / sizeof(flags[0])];
        /* A storage place for the current flag settings. */
 #ifndef NANO_TINY
@@ -2417,21 +2419,24 @@ bool do_int_spell_fix(const char *word)
     openfile->current_x = (size_t)-1;
     openfile->placewewant = 0;
 
-    /* Find the first whole occurrence of word. */
     findnextstr_wrap_reset();
-    while (findnextstr(TRUE, openfile->fileage, 0, word, &match_len) == 1) {
-       if (is_whole_word(openfile->current_x, openfile->current->data,
-               word)) {
-           size_t xpt = xplustabs();
-           char *exp_word = display_string(openfile->current->data,
-               xpt, strnlenpt(openfile->current->data,
-               openfile->current_x + match_len) - xpt, FALSE);
+
+    /* Find the first whole occurrence of word. */
+    result = findnextstr(TRUE, openfile->fileage, 0, word, &match_len);
+
+    /* The word must exist; if not, something is wrong. */
+    if (result == 0)
+       statusbar("Internal error: speller listed unfindable word");
+    else if (result == 1) {
+       exp_word = display_string(openfile->current->data, xplustabs(),
+                       strnlenpt(openfile->current->data,
+                       openfile->current_x + match_len) - xplustabs(), FALSE);
 
            edit_refresh();
 
            spotlight(TRUE, exp_word);
 
-           /* Allow all instances of the word to be corrected. */
+       /* Let the user supply a correctly spelled alternative. */
            canceled = (do_prompt(FALSE,
 #ifndef DISABLE_TABCOMP
                TRUE,
@@ -2446,14 +2451,12 @@ bool do_int_spell_fix(const char *word)
 
            free(exp_word);
 
+       /* If a replacement was given, go through all occurrences. */
            if (!canceled && strcmp(word, answer) != 0) {
                openfile->current_x--;
                do_replace_loop(TRUE, openfile->current,
                        &openfile->current_x, word);
            }
-
-           break;
-       }
     }
 
 #ifndef NANO_TINY