updated for version 7.0150
diff --git a/src/spell.c b/src/spell.c
index 2562e4b..53447af 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -511,15 +511,15 @@
#define SCORE_RARE 180 /* rare word */
#define SCORE_SWAP 90 /* swap two characters */
#define SCORE_SWAP3 110 /* swap two characters in three */
-#define SCORE_REP 87 /* REP replacement */
+#define SCORE_REP 65 /* REP replacement */
#define SCORE_SUBST 93 /* substitute a character */
#define SCORE_SIMILAR 33 /* substitute a similar character */
#define SCORE_SUBCOMP 33 /* substitute a composing character */
#define SCORE_DEL 94 /* delete a character */
-#define SCORE_DELDUP 64 /* delete a duplicated character */
+#define SCORE_DELDUP 66 /* delete a duplicated character */
#define SCORE_DELCOMP 28 /* delete a composing character */
#define SCORE_INS 96 /* insert a character */
-#define SCORE_INSDUP 66 /* insert a duplicate character */
+#define SCORE_INSDUP 67 /* insert a duplicate character */
#define SCORE_INSCOMP 30 /* insert a composing character */
#define SCORE_NONWORD 103 /* change non-word to word char */
@@ -5049,7 +5049,17 @@
if (itemcnt > 3 && items[3][0] != '#')
smsg((char_u *)_(e_afftrailing), fname, lnum, items[3]);
if (do_rep)
+ {
+ /* Replace underscore with space (can't include a space
+ * directly). */
+ for (p = items[1]; *p != NUL; mb_ptr_adv(p))
+ if (*p == '_')
+ *p = ' ';
+ for (p = items[2]; *p != NUL; mb_ptr_adv(p))
+ if (*p == '_')
+ *p = ' ';
add_fromto(spin, &spin->si_rep, items[1], items[2]);
+ }
}
else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
{
@@ -11081,13 +11091,21 @@
int had_bonus; /* value for st_had_bonus */
slang_T *slang; /* language for sound folding */
{
+ int goodlen = STRLEN(goodword);
suggest_T *stp;
int i;
char_u *p = NULL;
int c = 0;
+ int attr = 0;
+ char_u longword[MAXWLEN + 1];
- /* Check that the word wasn't banned. */
- if (was_banned(su, goodword))
+ /* Check that the word really is valid. Esp. for banned words and for
+ * split words, such as "the the". Need to append what follows to check
+ * for that. */
+ STRCPY(longword, goodword);
+ vim_strncpy(longword + goodlen, su->su_badptr + badlen, MAXWLEN - goodlen);
+ (void)spell_check(curwin, longword, &attr, NULL);
+ if (attr != 0)
return;
/* If past "su_badlen" and the rest is identical stop at "su_badlen".
@@ -11097,7 +11115,7 @@
{
/* This assumes there was no case folding or it didn't change the
* length... */
- p = goodword + STRLEN(goodword) - i;
+ p = goodword + goodlen - i;
if (p > goodword && STRNICMP(su->su_badptr + su->su_badlen, p, i) == 0)
{
badlen = su->su_badlen;
@@ -11112,7 +11130,7 @@
/* When replacing part of the word check that we actually change
* something. For "the the" a suggestion can be replacing the first
* "the" with itself, since "the" wasn't banned. */
- if (badlen == (int)STRLEN(goodword)
+ if (badlen == (int)goodlen
&& STRNCMP(su->su_badword, goodword, badlen) == 0)
return;
}