michael@0: /******* BEGIN LICENSE BLOCK ******* michael@0: * Version: MPL 1.1/GPL 2.0/LGPL 2.1 michael@0: * michael@0: * The contents of this file are subject to the Mozilla Public License Version michael@0: * 1.1 (the "License"); you may not use this file except in compliance with michael@0: * the License. You may obtain a copy of the License at michael@0: * http://www.mozilla.org/MPL/ michael@0: * michael@0: * Software distributed under the License is distributed on an "AS IS" basis, michael@0: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License michael@0: * for the specific language governing rights and limitations under the michael@0: * License. michael@0: * michael@0: * The Initial Developers of the Original Code are Kevin Hendricks (MySpell) michael@0: * and László Németh (Hunspell). Portions created by the Initial Developers michael@0: * are Copyright (C) 2002-2005 the Initial Developers. All Rights Reserved. michael@0: * michael@0: * Contributor(s): Kevin Hendricks (kevin.hendricks@sympatico.ca) michael@0: * David Einstein (deinst@world.std.com) michael@0: * László Németh (nemethl@gyorsposta.hu) michael@0: * Caolan McNamara (caolanm@redhat.com) michael@0: * Davide Prina michael@0: * Giuseppe Modugno michael@0: * Gianluca Turconi michael@0: * Simon Brouwer michael@0: * Noll Janos michael@0: * Biro Arpad michael@0: * Goldman Eleonora michael@0: * Sarlos Tamas michael@0: * Bencsath Boldizsar michael@0: * Halacsy Peter michael@0: * Dvornik Laszlo michael@0: * Gefferth Andras michael@0: * Nagy Viktor michael@0: * Varga Daniel michael@0: * Chris Halls michael@0: * Rene Engelhard michael@0: * Bram Moolenaar michael@0: * Dafydd Jones michael@0: * Harri Pitkanen michael@0: * Andras Timar michael@0: * Tor Lillqvist michael@0: * michael@0: * Alternatively, the contents of this file may be used under the terms of michael@0: * either the GNU General Public License Version 2 or later (the "GPL"), or michael@0: * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), michael@0: * in which case the provisions of the GPL or the LGPL are applicable instead michael@0: * of those above. If you wish to allow use of your version of this file only michael@0: * under the terms of either the GPL or the LGPL, and not to allow others to michael@0: * use your version of this file under the terms of the MPL, indicate your michael@0: * decision by deleting the provisions above and replace them with the notice michael@0: * and other provisions required by the GPL or the LGPL. If you do not delete michael@0: * the provisions above, a recipient may use your version of this file under michael@0: * the terms of any one of the MPL, the GPL or the LGPL. michael@0: * michael@0: ******* END LICENSE BLOCK *******/ michael@0: michael@0: #ifndef _HASHMGR_HXX_ michael@0: #define _HASHMGR_HXX_ michael@0: michael@0: #include "hunvisapi.h" michael@0: michael@0: #include michael@0: michael@0: #include "htypes.hxx" michael@0: #include "filemgr.hxx" michael@0: michael@0: enum flag { FLAG_CHAR, FLAG_LONG, FLAG_NUM, FLAG_UNI }; michael@0: michael@0: class LIBHUNSPELL_DLL_EXPORTED HashMgr michael@0: { michael@0: int tablesize; michael@0: struct hentry ** tableptr; michael@0: int userword; michael@0: flag flag_mode; michael@0: int complexprefixes; michael@0: int utf8; michael@0: unsigned short forbiddenword; michael@0: int langnum; michael@0: char * enc; michael@0: char * lang; michael@0: struct cs_info * csconv; michael@0: char * ignorechars; michael@0: unsigned short * ignorechars_utf16; michael@0: int ignorechars_utf16_len; michael@0: int numaliasf; // flag vector `compression' with aliases michael@0: unsigned short ** aliasf; michael@0: unsigned short * aliasflen; michael@0: int numaliasm; // morphological desciption `compression' with aliases michael@0: char ** aliasm; michael@0: michael@0: michael@0: public: michael@0: HashMgr(const char * tpath, const char * apath, const char * key = NULL); michael@0: ~HashMgr(); michael@0: michael@0: struct hentry * lookup(const char *) const; michael@0: int hash(const char *) const; michael@0: struct hentry * walk_hashtable(int & col, struct hentry * hp) const; michael@0: michael@0: int add(const char * word); michael@0: int add_with_affix(const char * word, const char * pattern); michael@0: int remove(const char * word); michael@0: int decode_flags(unsigned short ** result, char * flags, FileMgr * af); michael@0: unsigned short decode_flag(const char * flag); michael@0: char * encode_flag(unsigned short flag); michael@0: int is_aliasf(); michael@0: int get_aliasf(int index, unsigned short ** fvec, FileMgr * af); michael@0: int is_aliasm(); michael@0: char * get_aliasm(int index); michael@0: michael@0: private: michael@0: int get_clen_and_captype(const char * word, int wbl, int * captype); michael@0: int load_tables(const char * tpath, const char * key); michael@0: int add_word(const char * word, int wbl, int wcl, unsigned short * ap, michael@0: int al, const char * desc, bool onlyupcase); michael@0: int load_config(const char * affpath, const char * key); michael@0: int parse_aliasf(char * line, FileMgr * af); michael@0: int add_hidden_capitalized_word(char * word, int wbl, int wcl, michael@0: unsigned short * flags, int al, char * dp, int captype); michael@0: int parse_aliasm(char * line, FileMgr * af); michael@0: int remove_forbidden_flag(const char * word); michael@0: michael@0: }; michael@0: michael@0: #endif