extensions/spellcheck/hunspell/src/suggestmgr.hxx

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /******* BEGIN LICENSE BLOCK *******
     2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
     3  * 
     4  * The contents of this file are subject to the Mozilla Public License Version
     5  * 1.1 (the "License"); you may not use this file except in compliance with
     6  * the License. You may obtain a copy of the License at
     7  * http://www.mozilla.org/MPL/
     8  * 
     9  * Software distributed under the License is distributed on an "AS IS" basis,
    10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    11  * for the specific language governing rights and limitations under the
    12  * License.
    13  * 
    14  * The Initial Developers of the Original Code are Kevin Hendricks (MySpell)
    15  * and László Németh (Hunspell). Portions created by the Initial Developers
    16  * are Copyright (C) 2002-2005 the Initial Developers. All Rights Reserved.
    17  * 
    18  * Contributor(s): Kevin Hendricks (kevin.hendricks@sympatico.ca)
    19  *                 David Einstein (deinst@world.std.com)
    20  *                 László Németh (nemethl@gyorsposta.hu)
    21  *                 Caolan McNamara (caolanm@redhat.com)
    22  *                 Davide Prina
    23  *                 Giuseppe Modugno
    24  *                 Gianluca Turconi
    25  *                 Simon Brouwer
    26  *                 Noll Janos
    27  *                 Biro Arpad
    28  *                 Goldman Eleonora
    29  *                 Sarlos Tamas
    30  *                 Bencsath Boldizsar
    31  *                 Halacsy Peter
    32  *                 Dvornik Laszlo
    33  *                 Gefferth Andras
    34  *                 Nagy Viktor
    35  *                 Varga Daniel
    36  *                 Chris Halls
    37  *                 Rene Engelhard
    38  *                 Bram Moolenaar
    39  *                 Dafydd Jones
    40  *                 Harri Pitkanen
    41  *                 Andras Timar
    42  *                 Tor Lillqvist
    43  * 
    44  * Alternatively, the contents of this file may be used under the terms of
    45  * either the GNU General Public License Version 2 or later (the "GPL"), or
    46  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    47  * in which case the provisions of the GPL or the LGPL are applicable instead
    48  * of those above. If you wish to allow use of your version of this file only
    49  * under the terms of either the GPL or the LGPL, and not to allow others to
    50  * use your version of this file under the terms of the MPL, indicate your
    51  * decision by deleting the provisions above and replace them with the notice
    52  * and other provisions required by the GPL or the LGPL. If you do not delete
    53  * the provisions above, a recipient may use your version of this file under
    54  * the terms of any one of the MPL, the GPL or the LGPL.
    55  *
    56  ******* END LICENSE BLOCK *******/
    58 #ifndef _SUGGESTMGR_HXX_
    59 #define _SUGGESTMGR_HXX_
    61 #define MAXSWL 100
    62 #define MAXSWUTF8L (MAXSWL * 4)
    63 #define MAX_ROOTS 100
    64 #define MAX_WORDS 100
    65 #define MAX_GUESS 200
    66 #define MAXNGRAMSUGS 4
    67 #define MAXPHONSUGS 2
    68 #define MAXCOMPOUNDSUGS 3
    70 // timelimit: max ~1/4 sec (process time on Linux) for a time consuming function
    71 #define TIMELIMIT (CLOCKS_PER_SEC >> 2)
    72 #define MINTIMER 100
    73 #define MAXPLUSTIMER 100
    75 #define NGRAM_LONGER_WORSE  (1 << 0)
    76 #define NGRAM_ANY_MISMATCH  (1 << 1)
    77 #define NGRAM_LOWERING      (1 << 2)
    78 #define NGRAM_WEIGHTED      (1 << 3)
    80 #include "hunvisapi.h"
    82 #include "atypes.hxx"
    83 #include "affixmgr.hxx"
    84 #include "hashmgr.hxx"
    85 #include "langnum.hxx"
    86 #include <time.h>
    88 enum { LCS_UP, LCS_LEFT, LCS_UPLEFT };
    90 class LIBHUNSPELL_DLL_EXPORTED SuggestMgr
    91 {
    92   char *          ckey;
    93   int             ckeyl;
    94   w_char *        ckey_utf;
    96   char *          ctry;
    97   int             ctryl;
    98   w_char *        ctry_utf;
   100   AffixMgr*       pAMgr;
   101   int             maxSug;
   102   struct cs_info * csconv;
   103   int             utf8;
   104   int             langnum;
   105   int             nosplitsugs;
   106   int             maxngramsugs;
   107   int             maxcpdsugs;
   108   int             complexprefixes;
   111 public:
   112   SuggestMgr(const char * tryme, int maxn, AffixMgr *aptr);
   113   ~SuggestMgr();
   115   int suggest(char*** slst, const char * word, int nsug, int * onlycmpdsug);
   116   int ngsuggest(char ** wlst, char * word, int ns, HashMgr** pHMgr, int md);
   117   int suggest_auto(char*** slst, const char * word, int nsug);
   118   int suggest_stems(char*** slst, const char * word, int nsug);
   119   int suggest_pos_stems(char*** slst, const char * word, int nsug);
   121   char * suggest_morph(const char * word);
   122   char * suggest_gen(char ** pl, int pln, char * pattern);
   123   char * suggest_morph_for_spelling_error(const char * word);
   125 private:
   126    int testsug(char** wlst, const char * candidate, int wl, int ns, int cpdsuggest,
   127      int * timer, clock_t * timelimit);
   128    int checkword(const char *, int, int, int *, clock_t *);
   129    int check_forbidden(const char *, int);
   131    int capchars(char **, const char *, int, int);
   132    int replchars(char**, const char *, int, int);
   133    int doubletwochars(char**, const char *, int, int);
   134    int forgotchar(char **, const char *, int, int);
   135    int swapchar(char **, const char *, int, int);
   136    int longswapchar(char **, const char *, int, int);
   137    int movechar(char **, const char *, int, int);
   138    int extrachar(char **, const char *, int, int);
   139    int badcharkey(char **, const char *, int, int);
   140    int badchar(char **, const char *, int, int);
   141    int twowords(char **, const char *, int, int);
   142    int fixstems(char **, const char *, int);
   144    int capchars_utf(char **, const w_char *, int wl, int, int);
   145    int doubletwochars_utf(char**, const w_char *, int wl, int, int);
   146    int forgotchar_utf(char**, const w_char *, int wl, int, int);
   147    int extrachar_utf(char**, const w_char *, int wl, int, int);
   148    int badcharkey_utf(char **, const w_char *, int wl, int, int);
   149    int badchar_utf(char **, const w_char *, int wl, int, int);
   150    int swapchar_utf(char **, const w_char *, int wl, int, int);
   151    int longswapchar_utf(char **, const w_char *, int, int, int);
   152    int movechar_utf(char **, const w_char *, int, int, int);
   154    int mapchars(char**, const char *, int, int);
   155    int map_related(const char *, char *, int, int, char ** wlst, int, int, const mapentry*, int, int *, clock_t *);
   156    int ngram(int n, char * s1, const char * s2, int opt);
   157    int mystrlen(const char * word);
   158    int leftcommonsubstring(char * s1, const char * s2);
   159    int commoncharacterpositions(char * s1, const char * s2, int * is_swap);
   160    void bubblesort( char ** rwd, char ** rwd2, int * rsc, int n);
   161    void lcs(const char * s, const char * s2, int * l1, int * l2, char ** result);
   162    int lcslen(const char * s, const char* s2);
   163    char * suggest_hentry_gen(hentry * rv, char * pattern);
   165 };
   167 #endif

mercurial