diff options
author | Thomas Vigouroux <tomvig38@gmail.com> | 2020-09-21 16:34:42 +0200 |
---|---|---|
committer | Thomas Vigouroux <tomvig38@gmail.com> | 2020-09-24 08:09:38 +0200 |
commit | 0b42e3fedb55bd6bfbc02515b31f9144518a8909 (patch) | |
tree | 032a7afc7577158e89ac5d1aa5fdbac81a67b950 | |
parent | cf4543a56411eaaaaec306924ec24aa3dadf0baa (diff) | |
download | rneovim-0b42e3fedb55bd6bfbc02515b31f9144518a8909.tar.gz rneovim-0b42e3fedb55bd6bfbc02515b31f9144518a8909.tar.bz2 rneovim-0b42e3fedb55bd6bfbc02515b31f9144518a8909.zip |
vim-patch:8.2.0956: spell test fails
Problem: Spell test fails.
Solution: Add missing change the spell checking.
https://github.com/vim/vim/commit/e0ebeda4d8219a8955001b43ef7a9268452ef7f5
-rw-r--r-- | src/nvim/spell.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/nvim/spell.c b/src/nvim/spell.c index dc1bfe25b4..f036d7fe04 100644 --- a/src/nvim/spell.c +++ b/src/nvim/spell.c @@ -362,6 +362,8 @@ size_t spell_check( size_t wrongcaplen = 0; int lpi; bool count_word = docount; + bool use_camel_case = *wp->w_s->b_p_spo != NUL; + bool camel_case = false; // A word never starts at a space or a control character. Return quickly // then, skipping over the character. @@ -394,9 +396,24 @@ size_t spell_check( mi.mi_word = ptr; 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) { // Check word starting with capital letter. @@ -428,6 +445,11 @@ size_t spell_check( (void)spell_casefold(ptr, (int)(mi.mi_fend - ptr), mi.mi_fword, 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; |