neovim/neovim — pull request #1726 by fwalch (2014-12-23 14:20:18+00:00)
Title: [RFC] vim-patch:7.4.447

```
Problem: Spell files from Hunspell may generate a lot of errors.
Solution: Add the IGNOREEXTRA flag.

https://code.google.com/p/vim/source/detail?r=v7-4-447
```

Original patch:
```diff
diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt
--- a/runtime/doc/spell.txt
+++ b/runtime/doc/spell.txt
@@ -1058,6 +1058,9 @@ this text to start with a "#" so that mi
SFX F 0 in [^i]n # Spion > Spionin ~
SFX F 0 nen in	# Bauerin > Bauerinnen ~

+However, to avoid lots of errors in affix files written for Myspell, you can
+add the IGNOREEXTRA flag.
+
Apparently Myspell allows an affix name to appear more than once. Since this
might also be a mistake, Vim checks for an extra "S". The affix files for
Myspell that use this feature apparently have this flag. Example:
@@ -1111,6 +1114,14 @@ Specifically, the affix flags can be use
- CIRCUMFIX, as explained just below.

+IGNOREEXTRA	*spell-IGNOREEXTRA*
+
+Normally Vim gives an error for an extra field that does not start with '#'.
+This avoids errors going unnoticed. However, some files created for Myspell
+or Hunspell may contain many entries with an extra field. Use the IGNOREEXTRA
+flag to avoid lots of errors.
+
+
CIRCUMFIX	*spell-CIRCUMFIX*

The CIRCUMFIX flag means a prefix and suffix must be added at the same time.
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -4841,6 +4841,7 @@ typedef struct afffile_S
unsigned	af_nosuggest;	/* NOSUGGEST ID */
int	af_pfxpostpone;	/* postpone prefixes without chop string and
without flags */
+ int	af_ignoreextra;	/* IGNOREEXTRA present */
hashtab_T	af_pref;	/* hashtable for prefixes, affheader_T */
hashtab_T	af_suff;	/* hashtable for suffixes, affheader_T */
hashtab_T	af_comp;	/* hashtable for compound flags, compitem_T */
@@ -5605,6 +5606,10 @@ spell_read_aff(spin, fname)
{
aff->af_pfxpostpone = TRUE;
}
+	else if (is_aff_rule(items, itemcnt, "IGNOREEXTRA", 1))
+	{
+	aff->af_ignoreextra = TRUE;
+	}
else if ((STRCMP(items[0], "PFX") == 0
|| STRCMP(items[0], "SFX") == 0)
&& aff_todo == 0
@@ -5712,9 +5717,11 @@ spell_read_aff(spin, fname)
int	lasti = 5;

/* Myspell allows extra text after the item, but that might
-	* mean mistakes go unnoticed. Require a comment-starter.
-	* Hunspell uses a "-" item. */
-	if (itemcnt > lasti && *items[lasti] != '#'
+	* mean mistakes go unnoticed. Require a comment-starter,
+	* unless IGNOREEXTRA is used. Hunspell uses a "-" item. */
+	if (itemcnt > lasti
+	&& !aff->af_ignoreextra
+	&& *items[lasti] != '#'
&& (STRCMP(items[lasti], "-") != 0
|| itemcnt != lasti + 1))
smsg((char_u *)_(e_afftrailing), fname, lnum, items[lasti]);
diff --git a/src/nvim/version.c b/src/nvim/version.c
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 447,
+/**/
446,
/**/
445,
```