Fix merge affixes for numeric ones
authorTeodor Sigaev <teodor@sigaev.ru>
Fri, 11 Mar 2016 16:47:50 +0000 (19:47 +0300)
committerTeodor Sigaev <teodor@sigaev.ru>
Fri, 11 Mar 2016 16:47:50 +0000 (19:47 +0300)
Some dictionaries have duplicated base words with different affix set, we
just merge that sets into one set. But previously merging of sets of affixes
was actually a concatenation of strings but it's wrong for numeric
representation of affixes because such representation uses comma to
separate affixes.

Author: Artur Zakirov

src/backend/tsearch/spell.c

index 20097275d0fd6f60f4de4b5db0117637a6ed2cc6..304504e7d0c4bea0fd33a75ad77d3e0941f778e0 100644 (file)
@@ -1465,6 +1465,12 @@ MergeAffix(IspellDict *Conf, int a1, int a2)
 {
    char      **ptr;
 
+   /* Do not merge affix flags if one of affix flags is empty */
+   if (*Conf->AffixData[a1] == '\0')
+       return a2;
+   else if (*Conf->AffixData[a2] == '\0')
+       return a1;
+
    while (Conf->nAffixData + 1 >= Conf->lenAffixData)
    {
        Conf->lenAffixData *= 2;
@@ -1473,10 +1479,20 @@ MergeAffix(IspellDict *Conf, int a1, int a2)
    }
 
    ptr = Conf->AffixData + Conf->nAffixData;
-   *ptr = cpalloc(strlen(Conf->AffixData[a1]) +
-                  strlen(Conf->AffixData[a2]) +
-                  1 /* space */ + 1 /* \0 */ );
-   sprintf(*ptr, "%s %s", Conf->AffixData[a1], Conf->AffixData[a2]);
+   if (Conf->flagMode == FM_NUM)
+   {
+       *ptr = cpalloc(strlen(Conf->AffixData[a1]) +
+                      strlen(Conf->AffixData[a2]) +
+                      1 /* comma */ + 1 /* \0 */ );
+       sprintf(*ptr, "%s,%s", Conf->AffixData[a1], Conf->AffixData[a2]);
+   }
+   else
+   {
+       *ptr = cpalloc(strlen(Conf->AffixData[a1]) +
+                      strlen(Conf->AffixData[a2]) +
+                      1 /* \0 */ );
+       sprintf(*ptr, "%s%s", Conf->AffixData[a1], Conf->AffixData[a2]);
+   }
    ptr++;
    *ptr = NULL;
    Conf->nAffixData++;