Tizen 2.1 base
[external/enchant.git] / src / myspell / suggestmgr.hxx
1 #ifndef _SUGGESTMGR_HXX_
2 #define _SUGGESTMGR_HXX_
3
4 #define MAXSWL 100
5 #define MAXSWUTF8L (MAXSWL * 4)
6 #define MAX_ROOTS 100
7 #define MAX_WORDS 100
8 #define MAX_GUESS 200
9 #define MAXNGRAMSUGS 4
10 #define MAXPHONSUGS 2
11 #define MAXCOMPOUNDSUGS 3
12
13 // timelimit: max ~1/4 sec (process time on Linux) for a time consuming function
14 #define TIMELIMIT (CLOCKS_PER_SEC >> 2)
15 #define MINTIMER 100
16 #define MAXPLUSTIMER 100
17
18 #define NGRAM_LONGER_WORSE  (1 << 0)
19 #define NGRAM_ANY_MISMATCH  (1 << 1)
20 #define NGRAM_LOWERING      (1 << 2)
21 #define NGRAM_WEIGHTED      (1 << 3)
22
23 #include "hunvisapi.h"
24
25 #include "atypes.hxx"
26 #include "affixmgr.hxx"
27 #include "hashmgr.hxx"
28 #include "langnum.hxx"
29 #include <time.h>
30
31 enum { LCS_UP, LCS_LEFT, LCS_UPLEFT };
32
33 class LIBHUNSPELL_DLL_EXPORTED SuggestMgr
34 {
35   char *          ckey;
36   int             ckeyl;
37   w_char *        ckey_utf;
38
39   char *          ctry;
40   int             ctryl;
41   w_char *        ctry_utf;
42
43   AffixMgr*       pAMgr;
44   int             maxSug;
45   struct cs_info * csconv;
46   int             utf8;
47   int             langnum;
48   int             nosplitsugs;
49   int             maxngramsugs;
50   int             maxcpdsugs;
51   int             complexprefixes;
52
53
54 public:
55   SuggestMgr(const char * tryme, int maxn, AffixMgr *aptr);
56   ~SuggestMgr();
57
58   int suggest(char*** slst, const char * word, int nsug, int * onlycmpdsug);
59   int ngsuggest(char ** wlst, char * word, int ns, HashMgr** pHMgr, int md);
60   int suggest_auto(char*** slst, const char * word, int nsug);
61   int suggest_stems(char*** slst, const char * word, int nsug);
62   int suggest_pos_stems(char*** slst, const char * word, int nsug);
63
64   char * suggest_morph(const char * word);
65   char * suggest_gen(char ** pl, int pln, char * pattern);
66   char * suggest_morph_for_spelling_error(const char * word);
67
68 private:
69    int testsug(char** wlst, const char * candidate, int wl, int ns, int cpdsuggest,
70      int * timer, clock_t * timelimit);
71    int checkword(const char *, int, int, int *, clock_t *);
72    int check_forbidden(const char *, int);
73
74    int capchars(char **, const char *, int, int);
75    int replchars(char**, const char *, int, int);
76    int doubletwochars(char**, const char *, int, int);
77    int forgotchar(char **, const char *, int, int);
78    int swapchar(char **, const char *, int, int);
79    int longswapchar(char **, const char *, int, int);
80    int movechar(char **, const char *, int, int);
81    int extrachar(char **, const char *, int, int);
82    int badcharkey(char **, const char *, int, int);
83    int badchar(char **, const char *, int, int);
84    int twowords(char **, const char *, int, int);
85    int fixstems(char **, const char *, int);
86
87    int capchars_utf(char **, const w_char *, int wl, int, int);
88    int doubletwochars_utf(char**, const w_char *, int wl, int, int);
89    int forgotchar_utf(char**, const w_char *, int wl, int, int);
90    int extrachar_utf(char**, const w_char *, int wl, int, int);
91    int badcharkey_utf(char **, const w_char *, int wl, int, int);
92    int badchar_utf(char **, const w_char *, int wl, int, int);
93    int swapchar_utf(char **, const w_char *, int wl, int, int);
94    int longswapchar_utf(char **, const w_char *, int, int, int);
95    int movechar_utf(char **, const w_char *, int, int, int);
96
97    int mapchars(char**, const char *, int, int);
98    int map_related(const char *, char *, int, int, char ** wlst, int, int, const mapentry*, int, int *, clock_t *);
99    int ngram(int n, char * s1, const char * s2, int opt);
100    int mystrlen(const char * word);
101    int leftcommonsubstring(char * s1, const char * s2);
102    int commoncharacterpositions(char * s1, const char * s2, int * is_swap);
103    void bubblesort( char ** rwd, char ** rwd2, int * rsc, int n);
104    void lcs(const char * s, const char * s2, int * l1, int * l2, char ** result);
105    int lcslen(const char * s, const char* s2);
106    char * suggest_hentry_gen(hentry * rv, char * pattern);
107
108 };
109
110 #endif
111