aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/tsearch/spell.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c
index 7c24c474957..20097275d0f 100644
--- a/src/backend/tsearch/spell.c
+++ b/src/backend/tsearch/spell.c
@@ -219,6 +219,19 @@ findchar(char *str, int c)
return NULL;
}
+static char *
+findchar2(char *str, int c1, int c2)
+{
+ while (*str)
+ {
+ if (t_iseq(str, c1) || t_iseq(str, c2))
+ return str;
+ str += pg_mblen(str);
+ }
+
+ return NULL;
+}
+
/* backward string compare for suffix tree operations */
static int
@@ -1262,18 +1275,13 @@ NIImportOOAffixes(IspellDict *Conf, const char *filename)
if (flag == 0)
goto nextline;
+ /* Get flags after '/' (flags are case sensitive) */
+ if ((ptr = strchr(repl, '/')) != NULL)
+ aflg |= getFlagValues(Conf, getFlags(Conf, ptr + 1));
+ /* Get lowercased version of string before '/' */
prepl = lowerstr_ctx(Conf, repl);
- /* Find position of '/' in lowercased string "prepl" */
if ((ptr = strchr(prepl, '/')) != NULL)
- {
- /*
- * Here we use non-lowercased string "repl". We need position
- * of '/' in "repl".
- */
*ptr = '\0';
- ptr = repl + (ptr - prepl) + 1;
- aflg |= getFlagValues(Conf, getFlags(Conf, ptr));
- }
pfind = lowerstr_ctx(Conf, find);
pmask = lowerstr_ctx(Conf, mask);
if (t_iseq(find, '0'))
@@ -1343,12 +1351,10 @@ NIImportAffixes(IspellDict *Conf, const char *filename)
if (STRNCMP(pstr, "compoundwords") == 0)
{
- /* Find position in lowercased string "pstr" */
- s = findchar(pstr, 'l');
+ /* Find case-insensitive L flag in non-lowercased string */
+ s = findchar2(recoded, 'l', 'L');
if (s)
{
- /* Here we use non-lowercased string "recoded" */
- s = recoded + (s - pstr);
while (*s && !t_isspace(s))
s += pg_mblen(s);
while (*s && t_isspace(s))