aboutsummaryrefslogtreecommitdiff
path: root/contrib/tsearch2/dict_ispell.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tsearch2/dict_ispell.c')
-rw-r--r--contrib/tsearch2/dict_ispell.c196
1 files changed, 0 insertions, 196 deletions
diff --git a/contrib/tsearch2/dict_ispell.c b/contrib/tsearch2/dict_ispell.c
deleted file mode 100644
index 301b19d5928..00000000000
--- a/contrib/tsearch2/dict_ispell.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/tsearch2/dict_ispell.c,v 1.10 2006/03/11 04:38:30 momjian Exp $ */
-
-/*
- * ISpell interface
- * Teodor Sigaev <teodor@sigaev.ru>
- */
-#include "postgres.h"
-
-#include <ctype.h>
-
-#include "dict.h"
-#include "common.h"
-#include "ispell/spell.h"
-#include "ts_locale.h"
-
-typedef struct
-{
- StopList stoplist;
- IspellDict obj;
-} DictISpell;
-
-PG_FUNCTION_INFO_V1(spell_init);
-Datum spell_init(PG_FUNCTION_ARGS);
-
-PG_FUNCTION_INFO_V1(spell_lexize);
-Datum spell_lexize(PG_FUNCTION_ARGS);
-
-static void
-freeDictISpell(DictISpell * d)
-{
- NIFree(&(d->obj));
- freestoplist(&(d->stoplist));
- free(d);
-}
-
-Datum
-spell_init(PG_FUNCTION_ARGS)
-{
- DictISpell *d;
- Map *cfg,
- *pcfg;
- text *in;
- bool affloaded = false,
- dictloaded = false,
- stoploaded = false;
-
- if (PG_ARGISNULL(0) || PG_GETARG_POINTER(0) == NULL)
- ereport(ERROR,
- (errcode(ERRCODE_CONFIG_FILE_ERROR),
- errmsg("ISpell confguration error")));
-
- d = (DictISpell *) malloc(sizeof(DictISpell));
- if (!d)
- ereport(ERROR,
- (errcode(ERRCODE_OUT_OF_MEMORY),
- errmsg("out of memory")));
- memset(d, 0, sizeof(DictISpell));
- d->stoplist.wordop = lowerstr;
-
- in = PG_GETARG_TEXT_P(0);
- parse_cfgdict(in, &cfg);
- PG_FREE_IF_COPY(in, 0);
- pcfg = cfg;
- while (pcfg->key)
- {
- if (pg_strcasecmp("DictFile", pcfg->key) == 0)
- {
- if (dictloaded)
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("dictionary already loaded")));
- }
- if (NIImportDictionary(&(d->obj), pcfg->value))
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_CONFIG_FILE_ERROR),
- errmsg("could not load dictionary file \"%s\"",
- pcfg->value)));
- }
- dictloaded = true;
- }
- else if (pg_strcasecmp("AffFile", pcfg->key) == 0)
- {
- if (affloaded)
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("affixes already loaded")));
- }
- if (NIImportAffixes(&(d->obj), pcfg->value))
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_CONFIG_FILE_ERROR),
- errmsg("could not load affix file \"%s\"",
- pcfg->value)));
- }
- affloaded = true;
- }
- else if (pg_strcasecmp("StopFile", pcfg->key) == 0)
- {
- text *tmp = char2text(pcfg->value);
-
- if (stoploaded)
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("stop words already loaded")));
- }
- readstoplist(tmp, &(d->stoplist));
- sortstoplist(&(d->stoplist));
- pfree(tmp);
- stoploaded = true;
- }
- else
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_SYNTAX_ERROR),
- errmsg("unrecognized option: %s => %s",
- pcfg->key, pcfg->value)));
- }
- pfree(pcfg->key);
- pfree(pcfg->value);
- pcfg++;
- }
- pfree(cfg);
-
- if (affloaded && dictloaded)
- {
- NISortDictionary(&(d->obj));
- NISortAffixes(&(d->obj));
- }
- else if (!affloaded)
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("no affixes")));
- }
- else
- {
- freeDictISpell(d);
- ereport(ERROR,
- (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
- errmsg("no dictionary")));
- }
-
- PG_RETURN_POINTER(d);
-}
-
-Datum
-spell_lexize(PG_FUNCTION_ARGS)
-{
- DictISpell *d = (DictISpell *) PG_GETARG_POINTER(0);
- char *in = (char *) PG_GETARG_POINTER(1);
- char *txt;
- TSLexeme *res;
- TSLexeme *ptr,
- *cptr;
-
- if (!PG_GETARG_INT32(2))
- PG_RETURN_POINTER(NULL);
-
- txt = pnstrdup(in, PG_GETARG_INT32(2));
- res = NINormalizeWord(&(d->obj), txt);
- pfree(txt);
-
- if (res == NULL)
- PG_RETURN_POINTER(NULL);
-
- ptr = cptr = res;
- while (ptr->lexeme)
- {
- if (searchstoplist(&(d->stoplist), ptr->lexeme))
- {
- pfree(ptr->lexeme);
- ptr->lexeme = NULL;
- ptr++;
- }
- else
- {
- memcpy(cptr, ptr, sizeof(TSLexeme));
- cptr++;
- ptr++;
- }
- }
- cptr->lexeme = NULL;
-
- PG_RETURN_POINTER(res);
-}