aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Vigouroux <tomvig38@gmail.com>2020-09-21 16:34:42 +0200
committerThomas Vigouroux <tomvig38@gmail.com>2020-09-24 08:09:38 +0200
commit0b42e3fedb55bd6bfbc02515b31f9144518a8909 (patch)
tree032a7afc7577158e89ac5d1aa5fdbac81a67b950
parentcf4543a56411eaaaaec306924ec24aa3dadf0baa (diff)
downloadrneovim-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.c24
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;