]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.0956: spell test fails v8.2.0956
authorBram Moolenaar <Bram@vim.org>
Wed, 10 Jun 2020 20:17:58 +0000 (22:17 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 Jun 2020 20:17:58 +0000 (22:17 +0200)
Problem:    Spell test fails.
Solution:   Add missing change the spell checking.

src/spell.c
src/version.c

index 102355f7caf3071f6a420eaa683e4ce6d8afc735..8558d3908572df75dc9fefad87c4690f78b03d91 100644 (file)
@@ -173,6 +173,8 @@ spell_check(
     int                wrongcaplen = 0;
     int                lpi;
     int                count_word = docount;
+    int                use_camel_case = *wp->w_s->b_p_spo != NUL;
+    int                camel_case = 0;
 
     // A word never starts at a space or a control character.  Return quickly
     // then, skipping over the character.
@@ -204,9 +206,27 @@ spell_check(
     mi.mi_fend = ptr;
     if (spell_iswordp(mi.mi_fend, wp))
     {
+       int prev_upper;
+       int this_upper;
+
+       if (use_camel_case)
+       {
+           c = PTR2CHAR(mi.mi_fend);
+           this_upper = SPELL_ISUPPER(c);
+       }
+
        do
+       {
            MB_PTR_ADV(mi.mi_fend);
-       while (*mi.mi_fend != NUL && spell_iswordp(mi.mi_fend, wp));
+           if (use_camel_case)
+           {
+               prev_upper = this_upper;
+               c = PTR2CHAR(mi.mi_fend);
+               this_upper = SPELL_ISUPPER(c);
+               camel_case = !prev_upper && this_upper;
+           }
+       } while (*mi.mi_fend != NUL && spell_iswordp(mi.mi_fend, wp)
+                                                              && !camel_case);
 
        if (capcol != NULL && *capcol == 0 && wp->w_s->b_cap_prog != NULL)
        {
@@ -237,6 +257,10 @@ spell_check(
                                                             MAXWLEN + 1);
     mi.mi_fwordlen = (int)STRLEN(mi.mi_fword);
 
+    if (camel_case)
+       // Introduce a fake word end space into the folded word.
+       mi.mi_fword[mi.mi_fwordlen - 1] = ' ';
+
     // The word is bad unless we recognize it.
     mi.mi_result = SP_BAD;
     mi.mi_result2 = SP_BAD;
index 9600f65f8566181ef89faf95f2e5593fb8b01dac..66f01def3bc65c9ed9d5dd27a3457ec9daa46488 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    956,
 /**/
     955,
 /**/