| File: | root/firefox-clang/extensions/spellcheck/hunspell/src/affixmgr.hxx |
| Warning: | line 92, column 7 Excessive padding in 'class AffixMgr' (42 padding bytes, where 2 is optimal). Optimal fields order: alldic, pHMgr, csconv, iconvtable, oconvtable, phone, pfxappnd, sfxappnd, derived, sfx, pfx, maptable, breaktable, checkcpdtable, defcpdtable, cpdvowels_utf16, wordchars_utf16, ignorechars_utf16, keystring, trystring, encoding, cpdvowels, cpdsyllablenum, wordchars, ignorechars, version, lang, pStart, sStart, pFlag, sFlag, utf8, complexprefixes, compoundmoresuffixes, checkcompounddup, checkcompoundrep, checkcompoundcase, checkcompoundtriple, simplifiedtriple, cpdmin, simplifiedcpd, maxngramsugs, maxcpdsugs, maxdiff, onlymaxdiff, nosplitsugs, sugswithdots, cpdwordmax, cpdmaxsyllable, sfxextra, checknum, langnum, forbidwarn, checksharps, fullstrip, havecontclass, compoundflag, compoundbegin, compoundmiddle, compoundend, compoundroot, compoundforbidflag, compoundpermitflag, forbiddenword, nosuggest, nongramsuggest, needaffix, sfxflag, lemma_present, circumfix, onlyincompound, keepcase, forceucase, warn, substandard, parsedmaptable, parsedbreaktable, parsedcheckcpd, parseddefcpd, contclasses, consider reordering the fields or adding explicit padding members |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* ***** BEGIN LICENSE BLOCK ***** |
| 2 | * Version: MPL 1.1/GPL 2.0/LGPL 2.1 |
| 3 | * |
| 4 | * Copyright (C) 2002-2022 Németh László |
| 5 | * |
| 6 | * The contents of this file are subject to the Mozilla Public License Version |
| 7 | * 1.1 (the "License"); you may not use this file except in compliance with |
| 8 | * the License. You may obtain a copy of the License at |
| 9 | * http://www.mozilla.org/MPL/ |
| 10 | * |
| 11 | * Software distributed under the License is distributed on an "AS IS" basis, |
| 12 | * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License |
| 13 | * for the specific language governing rights and limitations under the |
| 14 | * License. |
| 15 | * |
| 16 | * Hunspell is based on MySpell which is Copyright (C) 2002 Kevin Hendricks. |
| 17 | * |
| 18 | * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, |
| 19 | * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, |
| 20 | * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, |
| 21 | * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, |
| 22 | * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen |
| 23 | * |
| 24 | * Alternatively, the contents of this file may be used under the terms of |
| 25 | * either the GNU General Public License Version 2 or later (the "GPL"), or |
| 26 | * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), |
| 27 | * in which case the provisions of the GPL or the LGPL are applicable instead |
| 28 | * of those above. If you wish to allow use of your version of this file only |
| 29 | * under the terms of either the GPL or the LGPL, and not to allow others to |
| 30 | * use your version of this file under the terms of the MPL, indicate your |
| 31 | * decision by deleting the provisions above and replace them with the notice |
| 32 | * and other provisions required by the GPL or the LGPL. If you do not delete |
| 33 | * the provisions above, a recipient may use your version of this file under |
| 34 | * the terms of any one of the MPL, the GPL or the LGPL. |
| 35 | * |
| 36 | * ***** END LICENSE BLOCK ***** */ |
| 37 | /* |
| 38 | * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada |
| 39 | * And Contributors. All rights reserved. |
| 40 | * |
| 41 | * Redistribution and use in source and binary forms, with or without |
| 42 | * modification, are permitted provided that the following conditions |
| 43 | * are met: |
| 44 | * |
| 45 | * 1. Redistributions of source code must retain the above copyright |
| 46 | * notice, this list of conditions and the following disclaimer. |
| 47 | * |
| 48 | * 2. Redistributions in binary form must reproduce the above copyright |
| 49 | * notice, this list of conditions and the following disclaimer in the |
| 50 | * documentation and/or other materials provided with the distribution. |
| 51 | * |
| 52 | * 3. All modifications to the source code must be clearly marked as |
| 53 | * such. Binary redistributions based on modified source code |
| 54 | * must be clearly marked as modified versions in the documentation |
| 55 | * and/or other materials provided with the distribution. |
| 56 | * |
| 57 | * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS |
| 58 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 59 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 60 | * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL |
| 61 | * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
| 62 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
| 63 | * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| 64 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| 65 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| 66 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| 67 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| 68 | * SUCH DAMAGE. |
| 69 | */ |
| 70 | |
| 71 | #ifndef AFFIXMGR_HXX_ |
| 72 | #define AFFIXMGR_HXX_ |
| 73 | |
| 74 | #include <stdio.h> |
| 75 | |
| 76 | #include <string> |
| 77 | #include <vector> |
| 78 | |
| 79 | #include "atypes.hxx" |
| 80 | #include "baseaffix.hxx" |
| 81 | #include "hashmgr.hxx" |
| 82 | #include "phonet.hxx" |
| 83 | #include "replist.hxx" |
| 84 | |
| 85 | // check flag duplication |
| 86 | #define dupSFX(1 << 0) (1 << 0) |
| 87 | #define dupPFX(1 << 1) (1 << 1) |
| 88 | |
| 89 | class PfxEntry; |
| 90 | class SfxEntry; |
| 91 | |
| 92 | class AffixMgr { |
Excessive padding in 'class AffixMgr' (42 padding bytes, where 2 is optimal). Optimal fields order: alldic, pHMgr, csconv, iconvtable, oconvtable, phone, pfxappnd, sfxappnd, derived, sfx, pfx, maptable, breaktable, checkcpdtable, defcpdtable, cpdvowels_utf16, wordchars_utf16, ignorechars_utf16, keystring, trystring, encoding, cpdvowels, cpdsyllablenum, wordchars, ignorechars, version, lang, pStart, sStart, pFlag, sFlag, utf8, complexprefixes, compoundmoresuffixes, checkcompounddup, checkcompoundrep, checkcompoundcase, checkcompoundtriple, simplifiedtriple, cpdmin, simplifiedcpd, maxngramsugs, maxcpdsugs, maxdiff, onlymaxdiff, nosplitsugs, sugswithdots, cpdwordmax, cpdmaxsyllable, sfxextra, checknum, langnum, forbidwarn, checksharps, fullstrip, havecontclass, compoundflag, compoundbegin, compoundmiddle, compoundend, compoundroot, compoundforbidflag, compoundpermitflag, forbiddenword, nosuggest, nongramsuggest, needaffix, sfxflag, lemma_present, circumfix, onlyincompound, keepcase, forceucase, warn, substandard, parsedmaptable, parsedbreaktable, parsedcheckcpd, parseddefcpd, contclasses, consider reordering the fields or adding explicit padding members | |
| 93 | PfxEntry* pStart[SETSIZE256]; |
| 94 | SfxEntry* sStart[SETSIZE256]; |
| 95 | PfxEntry* pFlag[SETSIZE256]; |
| 96 | SfxEntry* sFlag[SETSIZE256]; |
| 97 | const std::vector<HashMgr*>& alldic; |
| 98 | const HashMgr* pHMgr; |
| 99 | std::string keystring; |
| 100 | std::string trystring; |
| 101 | std::string encoding; |
| 102 | struct cs_info* csconv; |
| 103 | int utf8; |
| 104 | int complexprefixes; |
| 105 | FLAGunsigned short compoundflag; |
| 106 | FLAGunsigned short compoundbegin; |
| 107 | FLAGunsigned short compoundmiddle; |
| 108 | FLAGunsigned short compoundend; |
| 109 | FLAGunsigned short compoundroot; |
| 110 | FLAGunsigned short compoundforbidflag; |
| 111 | FLAGunsigned short compoundpermitflag; |
| 112 | int compoundmoresuffixes; |
| 113 | int checkcompounddup; |
| 114 | int checkcompoundrep; |
| 115 | int checkcompoundcase; |
| 116 | int checkcompoundtriple; |
| 117 | int simplifiedtriple; |
| 118 | FLAGunsigned short forbiddenword; |
| 119 | FLAGunsigned short nosuggest; |
| 120 | FLAGunsigned short nongramsuggest; |
| 121 | FLAGunsigned short needaffix; |
| 122 | int cpdmin; |
| 123 | RepList* iconvtable; |
| 124 | RepList* oconvtable; |
| 125 | bool parsedmaptable; |
| 126 | std::vector<mapentry> maptable; |
| 127 | bool parsedbreaktable; |
| 128 | std::vector<std::string> breaktable; |
| 129 | bool parsedcheckcpd; |
| 130 | std::vector<patentry> checkcpdtable; |
| 131 | int simplifiedcpd; |
| 132 | bool parseddefcpd; |
| 133 | std::vector<flagentry> defcpdtable; |
| 134 | phonetable* phone; |
| 135 | int maxngramsugs; |
| 136 | int maxcpdsugs; |
| 137 | int maxdiff; |
| 138 | int onlymaxdiff; |
| 139 | int nosplitsugs; |
| 140 | int sugswithdots; |
| 141 | int cpdwordmax; |
| 142 | int cpdmaxsyllable; |
| 143 | std::string cpdvowels; // vowels (for calculating of Hungarian compounding limit, |
| 144 | std::vector<w_char> cpdvowels_utf16; //vowels for UTF-8 encoding |
| 145 | std::string cpdsyllablenum; // syllable count incrementing flag |
| 146 | const char* pfxappnd; // BUG: not stateless |
| 147 | const char* sfxappnd; // BUG: not stateless |
| 148 | int sfxextra; // BUG: not stateless |
| 149 | FLAGunsigned short sfxflag; // BUG: not stateless |
| 150 | char* derived; // BUG: not stateless |
| 151 | SfxEntry* sfx; // BUG: not stateless |
| 152 | PfxEntry* pfx; // BUG: not stateless |
| 153 | int checknum; |
| 154 | std::string wordchars; // letters + spec. word characters |
| 155 | std::vector<w_char> wordchars_utf16; |
| 156 | std::string ignorechars; // letters + spec. word characters |
| 157 | std::vector<w_char> ignorechars_utf16; |
| 158 | std::string version; // affix and dictionary file version string |
| 159 | std::string lang; // language |
| 160 | int langnum; |
| 161 | FLAGunsigned short lemma_present; |
| 162 | FLAGunsigned short circumfix; |
| 163 | FLAGunsigned short onlyincompound; |
| 164 | FLAGunsigned short keepcase; |
| 165 | FLAGunsigned short forceucase; |
| 166 | FLAGunsigned short warn; |
| 167 | int forbidwarn; |
| 168 | FLAGunsigned short substandard; |
| 169 | int checksharps; |
| 170 | int fullstrip; |
| 171 | |
| 172 | int havecontclass; // boolean variable |
| 173 | char contclasses[CONTSIZE65536]; // flags of possible continuing classes (twofold |
| 174 | // affix) |
| 175 | |
| 176 | public: |
| 177 | AffixMgr(const char* affpath, const std::vector<HashMgr*>& ptr, const char* key = NULL__null); |
| 178 | ~AffixMgr(); |
| 179 | struct hentry* affix_check(const char* word, |
| 180 | int len, |
| 181 | const unsigned short needflag = (unsigned short)0, |
| 182 | char in_compound = IN_CPD_NOT0); |
| 183 | struct hentry* prefix_check(const char* word, |
| 184 | int len, |
| 185 | char in_compound, |
| 186 | const FLAGunsigned short needflag = FLAG_NULL0x00); |
| 187 | inline int isSubset(const char* s1, const char* s2); |
| 188 | struct hentry* prefix_check_twosfx(const char* word, |
| 189 | int len, |
| 190 | char in_compound, |
| 191 | const FLAGunsigned short needflag = FLAG_NULL0x00); |
| 192 | inline int isRevSubset(const char* s1, const char* end_of_s2, int len); |
| 193 | struct hentry* suffix_check(const char* word, |
| 194 | int len, |
| 195 | int sfxopts, |
| 196 | PfxEntry* ppfx, |
| 197 | const FLAGunsigned short cclass = FLAG_NULL0x00, |
| 198 | const FLAGunsigned short needflag = FLAG_NULL0x00, |
| 199 | char in_compound = IN_CPD_NOT0); |
| 200 | struct hentry* suffix_check_twosfx(const char* word, |
| 201 | int len, |
| 202 | int sfxopts, |
| 203 | PfxEntry* ppfx, |
| 204 | const FLAGunsigned short needflag = FLAG_NULL0x00); |
| 205 | |
| 206 | std::string affix_check_morph(const char* word, |
| 207 | int len, |
| 208 | const FLAGunsigned short needflag = FLAG_NULL0x00, |
| 209 | char in_compound = IN_CPD_NOT0); |
| 210 | std::string prefix_check_morph(const char* word, |
| 211 | int len, |
| 212 | char in_compound, |
| 213 | const FLAGunsigned short needflag = FLAG_NULL0x00); |
| 214 | std::string suffix_check_morph(const char* word, |
| 215 | int len, |
| 216 | int sfxopts, |
| 217 | PfxEntry* ppfx, |
| 218 | const FLAGunsigned short cclass = FLAG_NULL0x00, |
| 219 | const FLAGunsigned short needflag = FLAG_NULL0x00, |
| 220 | char in_compound = IN_CPD_NOT0); |
| 221 | |
| 222 | std::string prefix_check_twosfx_morph(const char* word, |
| 223 | int len, |
| 224 | char in_compound, |
| 225 | const FLAGunsigned short needflag = FLAG_NULL0x00); |
| 226 | std::string suffix_check_twosfx_morph(const char* word, |
| 227 | int len, |
| 228 | int sfxopts, |
| 229 | PfxEntry* ppfx, |
| 230 | const FLAGunsigned short needflag = FLAG_NULL0x00); |
| 231 | |
| 232 | std::string morphgen(const char* ts, |
| 233 | int wl, |
| 234 | const unsigned short* ap, |
| 235 | unsigned short al, |
| 236 | const char* morph, |
| 237 | const char* targetmorph, |
| 238 | int level); |
| 239 | |
| 240 | int expand_rootword(struct guessword* wlst, |
| 241 | int maxn, |
| 242 | const char* ts, |
| 243 | int wl, |
| 244 | const unsigned short* ap, |
| 245 | unsigned short al, |
| 246 | const char* bad, |
| 247 | int, |
| 248 | const char*); |
| 249 | |
| 250 | short get_syllable(const std::string& word); |
| 251 | int cpdrep_check(const char* word, int len); |
| 252 | int cpdwordpair_check(const char * word, int len); |
| 253 | int cpdpat_check(const char* word, |
| 254 | int len, |
| 255 | hentry* r1, |
| 256 | hentry* r2, |
| 257 | const char affixed); |
| 258 | int defcpd_check(hentry*** words, |
| 259 | short wnum, |
| 260 | hentry* rv, |
| 261 | hentry** rwords, |
| 262 | char all); |
| 263 | int cpdcase_check(const char* word, int len); |
| 264 | inline int candidate_check(const char* word, int len); |
| 265 | void setcminmax(int* cmin, int* cmax, const char* word, int len); |
| 266 | struct hentry* compound_check(const std::string& word, |
| 267 | short wordnum, |
| 268 | short numsyllable, |
| 269 | short maxwordnum, |
| 270 | short wnum, |
| 271 | hentry** words, |
| 272 | hentry** rwords, |
| 273 | char hu_mov_rule, |
| 274 | char is_sug, |
| 275 | int* info); |
| 276 | |
| 277 | int compound_check_morph(const char* word, |
| 278 | int len, |
| 279 | short wordnum, |
| 280 | short numsyllable, |
| 281 | short maxwordnum, |
| 282 | short wnum, |
| 283 | hentry** words, |
| 284 | hentry** rwords, |
| 285 | char hu_mov_rule, |
| 286 | std::string& result, |
| 287 | const std::string* partresult); |
| 288 | |
| 289 | std::vector<std::string> get_suffix_words(short unsigned* suff, |
| 290 | int len, |
| 291 | const char* root_word); |
| 292 | |
| 293 | struct hentry* lookup(const char* word); |
| 294 | const std::vector<replentry>& get_reptable() const; |
| 295 | RepList* get_iconvtable() const; |
| 296 | RepList* get_oconvtable() const; |
| 297 | struct phonetable* get_phonetable() const; |
| 298 | const std::vector<mapentry>& get_maptable() const; |
| 299 | const std::vector<std::string>& get_breaktable() const; |
| 300 | const std::string& get_encoding(); |
| 301 | int get_langnum() const; |
| 302 | char* get_key_string(); |
| 303 | char* get_try_string() const; |
| 304 | const std::string& get_wordchars() const; |
| 305 | const std::vector<w_char>& get_wordchars_utf16() const; |
| 306 | const char* get_ignore() const; |
| 307 | const std::vector<w_char>& get_ignore_utf16() const; |
| 308 | int get_compound() const; |
| 309 | FLAGunsigned short get_compoundflag() const; |
| 310 | FLAGunsigned short get_forbiddenword() const; |
| 311 | FLAGunsigned short get_nosuggest() const; |
| 312 | FLAGunsigned short get_nongramsuggest() const; |
| 313 | FLAGunsigned short get_substandard() const; |
| 314 | FLAGunsigned short get_needaffix() const; |
| 315 | FLAGunsigned short get_onlyincompound() const; |
| 316 | const char* get_derived() const; |
| 317 | const std::string& get_version() const; |
| 318 | int have_contclass() const; |
| 319 | int get_utf8() const; |
| 320 | int get_complexprefixes() const; |
| 321 | char* get_suffixed(char) const; |
| 322 | int get_maxngramsugs() const; |
| 323 | int get_maxcpdsugs() const; |
| 324 | int get_maxdiff() const; |
| 325 | int get_onlymaxdiff() const; |
| 326 | int get_nosplitsugs() const; |
| 327 | int get_sugswithdots(void) const; |
| 328 | FLAGunsigned short get_keepcase(void) const; |
| 329 | FLAGunsigned short get_forceucase(void) const; |
| 330 | FLAGunsigned short get_warn(void) const; |
| 331 | int get_forbidwarn(void) const; |
| 332 | int get_checksharps(void) const; |
| 333 | char* encode_flag(unsigned short aflag) const; |
| 334 | int get_fullstrip() const; |
| 335 | |
| 336 | private: |
| 337 | int parse_file(const char* affpath, const char* key); |
| 338 | bool parse_flag(const std::string& line, unsigned short* out, FileMgr* af); |
| 339 | bool parse_num(const std::string& line, int* out, FileMgr* af); |
| 340 | bool parse_cpdsyllable(const std::string& line, FileMgr* af); |
| 341 | bool parse_convtable(const std::string& line, |
| 342 | FileMgr* af, |
| 343 | RepList** rl, |
| 344 | const std::string& keyword); |
| 345 | bool parse_phonetable(const std::string& line, FileMgr* af); |
| 346 | bool parse_maptable(const std::string& line, FileMgr* af); |
| 347 | bool parse_breaktable(const std::string& line, FileMgr* af); |
| 348 | bool parse_checkcpdtable(const std::string& line, FileMgr* af); |
| 349 | bool parse_defcpdtable(const std::string& line, FileMgr* af); |
| 350 | bool parse_affix(const std::string& line, const char at, FileMgr* af, char* dupflags); |
| 351 | |
| 352 | void reverse_condition(std::string&); |
| 353 | std::string& debugflag(std::string& result, unsigned short flag); |
| 354 | int condlen(const char*); |
| 355 | int encodeit(AffEntry& entry, const char* cs); |
| 356 | int build_pfxtree(PfxEntry* pfxptr); |
| 357 | int build_sfxtree(SfxEntry* sfxptr); |
| 358 | int process_pfx_order(); |
| 359 | int process_sfx_order(); |
| 360 | PfxEntry* process_pfx_in_order(PfxEntry* ptr, PfxEntry* nptr); |
| 361 | SfxEntry* process_sfx_in_order(SfxEntry* ptr, SfxEntry* nptr); |
| 362 | int process_pfx_tree_to_list(); |
| 363 | int process_sfx_tree_to_list(); |
| 364 | int redundant_condition(char, const char* strip, int stripl, const char* cond, int); |
| 365 | void finishFileMgr(FileMgr* afflst); |
| 366 | }; |
| 367 | |
| 368 | #endif |