1 /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 #ifndef ISPELL_CHECKER_H 3 #define ISPELL_CHECKER_H 4 5 #include <glib.h> // give glib a chance to override MAXPATHLEN first before it is set in ispell.h 6 #include "ispell.h" 7 #include "enchant.h" 8 9 class ISpellChecker 10 { 11 public: 12 ISpellChecker(EnchantBroker * broker); 13 ~ISpellChecker(); 14 15 bool checkWord(const char * const word, size_t len); 16 char ** suggestWord(const char * const word, size_t len, size_t * out_n_suggs); 17 18 bool requestDictionary (const char * szLang); 19 20 private: 21 EnchantBroker* m_broker; 22 23 ISpellChecker(); 24 ISpellChecker(const ISpellChecker&); // no impl 25 void operator=(const ISpellChecker&); // no impl 26 27 char * loadDictionary (const char * szLang ); 28 bool loadDictionaryForLanguage ( const char * szLang ); 29 void setDictionaryEncoding ( const char * hashname, const char * enc ); 30 31 // 32 // The member functions after this point were formerly global functions 33 // passed a context structure pointer... 34 // 35 36 void try_autodetect_charset(const char * inEncoding); 37 38 // 39 // From ispell correct.c 40 // 41 42 int casecmp P ((char * a, char * b, int canonical)); 43 void makepossibilities P ((ichar_t * word)); 44 int insert P ((ichar_t * word)); 45 #ifndef NO_CAPITALIZATION_SUPPORT 46 void wrongcapital P ((ichar_t * word)); 47 #endif /* NO_CAPITALIZATION_SUPPORT */ 48 void wrongletter P ((ichar_t * word)); 49 void extraletter P ((ichar_t * word)); 50 void missingletter P ((ichar_t * word)); 51 void missingspace P ((ichar_t * word)); 52 int compoundgood P ((ichar_t * word, int pfxopts)); 53 void transposedletter P ((ichar_t * word)); 54 int ins_cap P ((ichar_t * word, ichar_t * pattern)); 55 int save_cap P ((ichar_t * word, ichar_t * pattern, 56 ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN])); 57 int ins_root_cap P ((ichar_t * word, ichar_t * pattern, 58 int prestrip, int preadd, int sufstrip, int sufadd, 59 struct dent * firstdent, struct flagent * pfxent, 60 struct flagent * sufent)); 61 void save_root_cap P ((ichar_t * word, ichar_t * pattern, 62 int prestrip, int preadd, int sufstrip, int sufadd, 63 struct dent * firstdent, struct flagent * pfxent, 64 struct flagent * sufent, 65 ichar_t savearea[MAX_CAPS][INPUTWORDLEN + MAXAFFIXLEN], 66 int * nsaved)); 67 68 // 69 // From ispell good.c 70 // 71 72 int good (ichar_t* w, int ignoreflagbits, int allhits, int pfxopts, int sfxopts); 73 void chk_aff (ichar_t* word, ichar_t* ucword, int len, int ignoreflagbits, int allhits, int pfxopts, int sfxopts); 74 int linit(char*); 75 struct dent * ispell_lookup (ichar_t* s, int dotree); 76 int strtoichar (ichar_t* out, char* in, int outlen, int canonical); 77 int ichartostr (char* out, ichar_t* in, int outlen, int canonical); 78 char * ichartosstr (ichar_t* in, int canonical); 79 int findfiletype (const char * name, int searchnames, int * deformatter); 80 long whatcap (ichar_t* word); 81 82 /* 83 HACK: macros replaced with function implementations 84 so we could do a side-effect-free check for unicode 85 characters which aren't in hashheader 86 */ 87 char myupper(ichar_t c); 88 char mylower(ichar_t c); 89 int myspace(ichar_t c); 90 char iswordch(ichar_t c); 91 char isboundarych(ichar_t c); 92 char isstringstart(ichar_t c); 93 ichar_t mytolower(ichar_t c); 94 ichar_t mytoupper(ichar_t c); 95 96 #ifndef ICHAR_IS_CHAR 97 int cap_ok (ichar_t* word, struct success* hit, int len); 98 99 int hash (ichar_t* s, int hashtblsize); 100 #endif 101 102 // 103 // From ispell lookup.c 104 // 105 106 void clearindex P ((struct flagptr * indexp)); 107 void initckch P ((char *)); 108 109 void alloc_ispell_struct(); 110 void free_ispell_struct(); 111 112 // 113 // From ispell makedent.c 114 // 115 116 int addvheader P ((struct dent * ent)); 117 void upcase P ((ichar_t * string)); 118 void lowcase P ((ichar_t * string)); 119 void chupcase P ((char * s)); 120 121 int stringcharlen P ((char * bufp, int canonical)); 122 ichar_t * strtosichar P ((char * in, int canonical)); 123 char * printichar P ((int in)); 124 125 // 126 // From ispell tgood.c 127 // 128 129 void pfx_list_chk P ((ichar_t * word, ichar_t * ucword, 130 int len, int optflags, int sfxopts, struct flagptr * ind, 131 int ignoreflagbits, int allhits)); 132 void chk_suf P ((ichar_t * word, ichar_t * ucword, int len, 133 int optflags, struct flagent * pfxent, int ignoreflagbits, 134 int allhits)); 135 void suf_list_chk P ((ichar_t * word, ichar_t * ucword, int len, 136 struct flagptr * ind, int optflags, struct flagent * pfxent, 137 int ignoreflagbits, int allhits)); 138 int expand_pre P ((char * croot, ichar_t * rootword, 139 MASKTYPE mask[], int option, char * extra)); 140 int pr_pre_expansion P ((char * croot, ichar_t * rootword, 141 struct flagent * flent, MASKTYPE mask[], int option, 142 char * extra)); 143 int expand_suf P ((char * croot, ichar_t * rootword, 144 MASKTYPE mask[], int optflags, int option, char * extra)); 145 int pr_suf_expansion P ((char * croot, ichar_t * rootword, 146 struct flagent * flent, int option, char * extra)); 147 void forcelc P ((ichar_t * dst, int len)); 148 149 /* this is used for converting form unsigned short to UCS-4 */ 150 151 int deftflag; /* NZ for TeX mode by default */ 152 int prefstringchar; /* Preferred string character type */ 153 bool m_bSuccessfulInit; 154 155 // 156 // The members after this point were formerly global variables 157 // in the original ispell code 158 // 159 160 char * m_BC; /* backspace if not ^H */ 161 char * m_cd; /* clear to end of display */ 162 char * m_cl; /* clear display */ 163 char * m_cm; /* cursor movement */ 164 char * m_ho; /* home */ 165 char * m_nd; /* non-destructive space */ 166 char * m_so; /* standout */ 167 char * m_se; /* standout end */ 168 int m_sg; /* space taken by so/se */ 169 char * m_ti; /* terminal initialization sequence */ 170 char * m_te; /* terminal termination sequence */ 171 int m_li; /* lines */ 172 int m_co; /* columns */ 173 174 char m_ctoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Current token as char */ 175 ichar_t m_itoken[INPUTWORDLEN + MAXAFFIXLEN]; /* Ctoken as ichar_t str */ 176 177 int m_numhits; /* number of hits in dictionary lookups */ 178 struct success 179 m_hits[MAX_HITS]; /* table of hits gotten in lookup */ 180 181 char * m_hashstrings; /* Strings in hash table */ 182 struct hashheader 183 m_hashheader; /* Header of hash table */ 184 struct dent * 185 m_hashtbl; /* Main hash table, for dictionary */ 186 int m_hashsize; /* Size of main hash table */ 187 188 char m_hashname[MAXPATHLEN]; /* Name of hash table file */ 189 190 int m_aflag; /* NZ if -a or -A option specified */ 191 int m_cflag; /* NZ if -c (crunch) option */ 192 int m_lflag; /* NZ if -l (list) option */ 193 int m_incfileflag; /* whether xgets() acts exactly like gets() */ 194 int m_nodictflag; /* NZ if dictionary not needed */ 195 196 int m_uerasechar; /* User's erase character, from stty */ 197 int m_ukillchar; /* User's kill character */ 198 199 unsigned int m_laststringch; /* Number of last string character */ 200 int m_defdupchar; /* Default duplicate string type */ 201 202 int m_numpflags; /* Number of prefix flags in table */ 203 int m_numsflags; /* Number of suffix flags in table */ 204 struct flagptr m_pflagindex[SET_SIZE + MAXSTRINGCHARS]; 205 /* Fast index to pflaglist */ 206 struct flagent * m_pflaglist; /* Prefix flag control list */ 207 struct flagptr m_sflagindex[SET_SIZE + MAXSTRINGCHARS]; 208 /* Fast index to sflaglist */ 209 struct flagent * m_sflaglist; /* Suffix flag control list */ 210 211 struct strchartype * /* String character type collection */ 212 m_chartypes; 213 214 FILE * m_infile; /* File being corrected */ 215 FILE * m_outfile; /* Corrected copy of infile */ 216 217 char * m_askfilename; /* File specified in -f option */ 218 219 int m_changes; /* NZ if changes made to cur. file */ 220 int m_readonly; /* NZ if current file is readonly */ 221 int m_quit; /* NZ if we're done with this file */ 222 223 #define MAXPOSSIBLE 100 /* Max no. of possibilities to generate */ 224 225 char m_possibilities[MAXPOSSIBLE][INPUTWORDLEN + MAXAFFIXLEN]; 226 /* Table of possible corrections */ 227 int m_pcount; /* Count of possibilities generated */ 228 int m_maxposslen; /* Length of longest possibility */ 229 int m_easypossibilities; /* Number of "easy" corrections found */ 230 /* ..(defined as those using legal affixes) */ 231 232 /* 233 * The following array contains a list of characters that should be tried 234 * in "missingletter." Note that lowercase characters are omitted. 235 */ 236 int m_Trynum; /* Size of "Try" array */ 237 ichar_t m_Try[SET_SIZE + MAXSTRINGCHARS]; 238 239 GIConv m_translate_in; /* Selected translation from/to Unicode */ 240 GIConv m_translate_out; 241 }; 242 243 #endif /* ISPELL_CHECKER_H */ 244