summaryrefslogtreecommitdiff
path: root/src/include/tsearch/dicts/spell.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/tsearch/dicts/spell.h')
-rw-r--r--src/include/tsearch/dicts/spell.h153
1 files changed, 153 insertions, 0 deletions
diff --git a/src/include/tsearch/dicts/spell.h b/src/include/tsearch/dicts/spell.h
new file mode 100644
index 00000000000..6c15a672f33
--- /dev/null
+++ b/src/include/tsearch/dicts/spell.h
@@ -0,0 +1,153 @@
+/*-------------------------------------------------------------------------
+ *
+ * spell.h
+ *
+ * Declarations for ISpell dictionary
+ *
+ * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
+ *
+ * $PostgreSQL: pgsql/src/include/tsearch/dicts/spell.h,v 1.1 2007/08/21 01:11:29 tgl Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef __SPELL_H__
+#define __SPELL_H__
+
+#include "regex/regex.h"
+#include "tsearch/dicts/regis.h"
+#include "tsearch/ts_public.h"
+
+struct SPNode;
+
+typedef struct
+{
+ uint32
+ val:8,
+ isword:1,
+ compoundflag:4,
+ affix:19;
+ struct SPNode *node;
+} SPNodeData;
+
+/*
+ * Names of FF_ are correlated with Hunspell options in affix file
+ * http://sourceforge.net/docman/display_doc.php?docid=29374&group_id=143754
+ */
+#define FF_COMPOUNDONLY 0x01
+#define FF_COMPOUNDBEGIN 0x02
+#define FF_COMPOUNDMIDDLE 0x04
+#define FF_COMPOUNDLAST 0x08
+#define FF_COMPOUNDFLAG ( FF_COMPOUNDBEGIN | FF_COMPOUNDMIDDLE | FF_COMPOUNDLAST )
+#define FF_DICTFLAGMASK 0x0f
+
+typedef struct SPNode
+{
+ uint32 length;
+ SPNodeData data[1];
+} SPNode;
+
+#define SPNHRDSZ (sizeof(uint32))
+
+
+typedef struct spell_struct
+{
+ union
+ {
+ char flag[16];
+ struct
+ {
+ int affix;
+ int len;
+ } d;
+ } p;
+ char word[1];
+} SPELL;
+
+#define SPELLHDRSZ (offsetof(SPELL, word))
+
+typedef struct aff_struct
+{
+ uint32
+ flag:8,
+ type:1,
+ flagflags:7,
+ issimple:1,
+ isregis:1,
+ replen:14;
+ char *find;
+ char *repl;
+ union
+ {
+ regex_t regex;
+ Regis regis;
+ } reg;
+} AFFIX;
+
+/*
+ * affixes use deictinary flags too
+ */
+#define FF_COMPOUNDPERMITFLAG 0x10
+#define FF_COMPOUNDFORBIDFLAG 0x20
+#define FF_CROSSPRODUCT 0x40
+#define FF_SUFFIX 1
+#define FF_PREFIX 0
+
+struct AffixNode;
+
+typedef struct
+{
+ uint32
+ val:8,
+ naff:24;
+ AFFIX **aff;
+ struct AffixNode *node;
+} AffixNodeData;
+
+typedef struct AffixNode
+{
+ uint32 isvoid:1,
+ length:31;
+ AffixNodeData data[1];
+} AffixNode;
+
+#define ANHRDSZ (sizeof(uint32))
+
+typedef struct
+{
+ char *affix;
+ int len;
+ bool issuffix;
+} CMPDAffix;
+
+typedef struct
+{
+ int maffixes;
+ int naffixes;
+ AFFIX *Affix;
+
+ int nspell;
+ int mspell;
+ SPELL **Spell;
+
+ AffixNode *Suffix;
+ AffixNode *Prefix;
+
+ SPNode *Dictionary;
+ char **AffixData;
+ int lenAffixData;
+ int nAffixData;
+
+ CMPDAffix *CompoundAffix;
+
+ unsigned char flagval[256];
+ bool usecompound;
+} IspellDict;
+
+extern TSLexeme *NINormalizeWord(IspellDict * Conf, char *word);
+extern void NIImportAffixes(IspellDict * Conf, const char *filename);
+extern void NIImportDictionary(IspellDict * Conf, const char *filename);
+extern void NISortDictionary(IspellDict * Conf);
+extern void NISortAffixes(IspellDict * Conf);
+
+#endif