Allow "'" symbol in affixes ("'s" affix in english): it was diallowed during
authorTeodor Sigaev <teodor@sigaev.ru>
Fri, 10 Feb 2006 12:56:14 +0000 (12:56 +0000)
committerTeodor Sigaev <teodor@sigaev.ru>
Fri, 10 Feb 2006 12:56:14 +0000 (12:56 +0000)
multibyte support work.
Add line number to error output during affix file parsing.

contrib/tsearch2/ispell/spell.c

index 49b9e9dfbfa9375002bc1285aff8ffc057b2c6b8..4ee75e680aedac75cca60cd79f9aea3d32a26af7 100644 (file)
@@ -306,7 +306,7 @@ NIAddAffix(IspellDict * Conf, int flag, char flagflags, const char *mask, const
 #define PAE_INREPL     5
 
 static bool
-parse_affentry( char *str, char *mask, char *find, char *repl ) {
+parse_affentry( char *str, char *mask, char *find, char *repl, int line ) {
    int state = PAE_WAIT_MASK;
    char    *pmask=mask, *pfind=find, *prepl=repl;
 
@@ -332,12 +332,12 @@ parse_affentry( char *str, char *mask, char *find, char *repl ) {
        } else if ( state == PAE_WAIT_FIND ) {
            if ( t_iseq(str,'-') ) {
                state = PAE_INFIND;
-           } else if (t_isalpha(str)) {
+           } else if (t_isalpha(str) || t_iseq(str,'\'') /* english 's */) {
                COPYCHAR(prepl,str);
                prepl += pg_mblen(str);
                state = PAE_INREPL;
            } else if (!t_isspace(str))
-               ts_error(ERROR, "Affix parse error");
+               ts_error(ERROR, "Affix parse error at %d line", line);
        } else if ( state == PAE_INFIND ) {
            if ( t_iseq(str,',') ) {
                *pfind='\0';
@@ -346,7 +346,7 @@ parse_affentry( char *str, char *mask, char *find, char *repl ) {
                COPYCHAR(pfind,str);
                pfind += pg_mblen(str);
            } else if (!t_isspace(str))
-               ts_error(ERROR, "Affix parse error");
+               ts_error(ERROR, "Affix parse error at %d line", line);
        } else if ( state == PAE_WAIT_REPL ) {
            if ( t_iseq(str,'-') ) {
                break; /* void repl */
@@ -355,7 +355,7 @@ parse_affentry( char *str, char *mask, char *find, char *repl ) {
                prepl += pg_mblen(str);
                state = PAE_INREPL;
            } else if (!t_isspace(str))
-               ts_error(ERROR, "Affix parse error");
+               ts_error(ERROR, "Affix parse error at %d line", line);
        } else if ( state == PAE_INREPL ) {
            if ( t_iseq(str,'#') ) {
                *prepl = '\0';
@@ -364,7 +364,7 @@ parse_affentry( char *str, char *mask, char *find, char *repl ) {
                COPYCHAR(prepl,str);
                prepl += pg_mblen(str);
            } else if (!t_isspace(str))
-               ts_error(ERROR, "Affix parse error");
+               ts_error(ERROR, "Affix parse error at %d line", line);
        } else
            ts_error(ERROR, "Unknown state in parse_affentry: %d", state);
 
@@ -390,6 +390,7 @@ NIImportAffixes(IspellDict * Conf, const char *filename)
    int         flag = 0;
    char        flagflags = 0;
    FILE       *affix;
+   int line=0;
 
    if (!(affix = fopen(filename, "r")))
        return (1);
@@ -397,6 +398,7 @@ NIImportAffixes(IspellDict * Conf, const char *filename)
 
    while (fgets(str, sizeof(str), affix))
    {
+       line++;
        pg_verifymbstr( str, strlen(str), false);
        memcpy(tmpstr, str, 32); /* compoundwords... */
        tmpstr[32]='\0';
@@ -463,7 +465,7 @@ NIImportAffixes(IspellDict * Conf, const char *filename)
            continue;
 
        lowerstr(str);
-       if ( !parse_affentry(str, mask, find, repl) )
+       if ( !parse_affentry(str, mask, find, repl, line) )
            continue;
 
        NIAddAffix(Conf, flag, flagflags, mask, find, repl, suffixes ? FF_SUFFIX : FF_PREFIX);