/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Hunspell, based on MySpell. * * The Initial Developers of the Original Code are * Kevin Hendricks (MySpell) and Németh László (Hunspell). * Portions created by the Initial Developers are Copyright (C) 2002-2005 * the Initial Developers. All Rights Reserved. * * Contributor(s): David Einstein, Davide Prina, Giuseppe Modugno, * Gianluca Turconi, Simon Brouwer, Noll János, Bíró Árpád, * Goldman Eleonóra, Sarlós Tamás, Bencsáth Boldizsár, Halácsy Péter, * Dvornik László, Gefferth András, Nagy Viktor, Varga Dániel, Chris Halls, * Rene Engelhard, Bram Moolenaar, Dafydd Jones, Harri Pitkänen * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ /* * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada * And Contributors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. All modifications to the source code must be clearly marked as * such. Binary redistributions based on modified source code * must be clearly marked as modified versions in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include <stdlib.h> #include <string.h> #include <stdio.h> #include <ctype.h> #include <limits> #include <sstream> #include "hashmgr.hxx" #include "csutil.hxx" #include "atypes.hxx" // build a hash table from a munched word list #ifdef HUNSPELL_CHROME_CLIENT HashMgr::HashMgr(hunspell::BDictReader* reader) : … { … } HashMgr::~HashMgr() { … } #ifdef HUNSPELL_CHROME_CLIENT void HashMgr::EmptyHentryCache() { … } #endif // lookup a root word in the hashtable struct hentry* HashMgr::lookup(const char* word) const { … } // add a word to the hash table (private) int HashMgr::add_word(const std::string& in_word, int wcl, unsigned short* aff, int al, const std::string* in_desc, bool onlyupcase) { … } int HashMgr::add_hidden_capitalized_word(const std::string& word, int wcl, unsigned short* flags, int flagslen, const std::string* dp, int captype) { … } // detect captype and modify word length for UTF-8 encoding int HashMgr::get_clen_and_captype(const std::string& word, int* captype) { … } // remove word (personal dictionary function for standalone applications) int HashMgr::remove(const std::string& word) { … } /* remove forbidden flag to add a personal word to the hash */ int HashMgr::remove_forbidden_flag(const std::string& word) { … } // add a custom dic. word to the hash table (public) int HashMgr::add(const std::string& word) { … } int HashMgr::add_with_affix(const std::string& word, const std::string& example) { … } // walk the hash table entry by entry - null at end // initialize: col=-1; hp = NULL; hp = walk_hashtable(&col, hp); struct hentry* HashMgr::walk_hashtable(int& col, struct hentry* hp) const { … } // load a munched word list and build a hash table on the fly int HashMgr::load_tables(const char* tpath, const char* key) { … } // the hash function is a simple load and rotate // algorithm borrowed int HashMgr::hash(const char* word) const { … } int HashMgr::decode_flags(unsigned short** result, const std::string& flags, FileMgr* af) const { … } bool HashMgr::decode_flags(std::vector<unsigned short>& result, const std::string& flags, FileMgr* af) const { … } unsigned short HashMgr::decode_flag(const char* f) const { … } char* HashMgr::encode_flag(unsigned short f) const { … } // read in aff file and set flag mode int HashMgr::load_config(const char* affpath, const char* key) { … } /* parse in the ALIAS table */ bool HashMgr::parse_aliasf(const std::string& line, FileMgr* af) { … } #ifdef HUNSPELL_CHROME_CLIENT int HashMgr::LoadAFLines() { … } hentry* HashMgr::InitHashEntry(hentry* entry, size_t item_size, const char* word, int word_length, int affix_index) const { … } hentry* HashMgr::CreateHashEntry(const char* word, int word_length, int affix_index) const { … } void HashMgr::DeleteHashEntry(hentry* entry) const { … } hentry* HashMgr::AffixIDsToHentry(char* word, int* affix_ids, int affix_count) const { … } hentry* HashMgr::GetHentryFromHEntryCache(char* word) { … } #endif int HashMgr::is_aliasf() const { … } int HashMgr::get_aliasf(int index, unsigned short** fvec, FileMgr* af) const { … } /* parse morph alias definitions */ bool HashMgr::parse_aliasm(const std::string& line, FileMgr* af) { … } int HashMgr::is_aliasm() const { … } char* HashMgr::get_aliasm(int index) const { … }