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 _AFFIX_HXX_ michael@0: #define _AFFIX_HXX_ michael@0: michael@0: #include "hunvisapi.h" michael@0: michael@0: #include "atypes.hxx" michael@0: #include "baseaffix.hxx" michael@0: #include "affixmgr.hxx" michael@0: michael@0: /* A Prefix Entry */ michael@0: michael@0: class LIBHUNSPELL_DLL_EXPORTED PfxEntry : protected AffEntry michael@0: { michael@0: AffixMgr* pmyMgr; michael@0: michael@0: PfxEntry * next; michael@0: PfxEntry * nexteq; michael@0: PfxEntry * nextne; michael@0: PfxEntry * flgnxt; michael@0: michael@0: public: michael@0: michael@0: PfxEntry(AffixMgr* pmgr, affentry* dp ); michael@0: ~PfxEntry(); michael@0: michael@0: inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } michael@0: struct hentry * checkword(const char * word, int len, char in_compound, michael@0: const FLAG needflag = FLAG_NULL); michael@0: michael@0: struct hentry * check_twosfx(const char * word, int len, char in_compound, const FLAG needflag = FLAG_NULL); michael@0: michael@0: char * check_morph(const char * word, int len, char in_compound, michael@0: const FLAG needflag = FLAG_NULL); michael@0: michael@0: char * check_twosfx_morph(const char * word, int len, michael@0: char in_compound, const FLAG needflag = FLAG_NULL); michael@0: michael@0: inline FLAG getFlag() { return aflag; } michael@0: inline const char * getKey() { return appnd; } michael@0: char * add(const char * word, int len); michael@0: michael@0: inline short getKeyLen() { return appndl; } michael@0: michael@0: inline const char * getMorph() { return morphcode; } michael@0: michael@0: inline const unsigned short * getCont() { return contclass; } michael@0: inline short getContLen() { return contclasslen; } michael@0: michael@0: inline PfxEntry * getNext() { return next; } michael@0: inline PfxEntry * getNextNE() { return nextne; } michael@0: inline PfxEntry * getNextEQ() { return nexteq; } michael@0: inline PfxEntry * getFlgNxt() { return flgnxt; } michael@0: michael@0: inline void setNext(PfxEntry * ptr) { next = ptr; } michael@0: inline void setNextNE(PfxEntry * ptr) { nextne = ptr; } michael@0: inline void setNextEQ(PfxEntry * ptr) { nexteq = ptr; } michael@0: inline void setFlgNxt(PfxEntry * ptr) { flgnxt = ptr; } michael@0: michael@0: inline char * nextchar(char * p); michael@0: inline int test_condition(const char * st); michael@0: }; michael@0: michael@0: michael@0: michael@0: michael@0: /* A Suffix Entry */ michael@0: michael@0: class LIBHUNSPELL_DLL_EXPORTED SfxEntry : protected AffEntry michael@0: { michael@0: AffixMgr* pmyMgr; michael@0: char * rappnd; michael@0: michael@0: SfxEntry * next; michael@0: SfxEntry * nexteq; michael@0: SfxEntry * nextne; michael@0: SfxEntry * flgnxt; michael@0: michael@0: SfxEntry * l_morph; michael@0: SfxEntry * r_morph; michael@0: SfxEntry * eq_morph; michael@0: michael@0: public: michael@0: michael@0: SfxEntry(AffixMgr* pmgr, affentry* dp ); michael@0: ~SfxEntry(); michael@0: michael@0: inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); } michael@0: struct hentry * checkword(const char * word, int len, int optflags, michael@0: PfxEntry* ppfx, char ** wlst, int maxSug, int * ns, michael@0: // const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, char in_compound=IN_CPD_NOT); michael@0: const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, const FLAG badflag = 0); michael@0: michael@0: struct hentry * check_twosfx(const char * word, int len, int optflags, PfxEntry* ppfx, const FLAG needflag = FLAG_NULL); michael@0: michael@0: char * check_twosfx_morph(const char * word, int len, int optflags, michael@0: PfxEntry* ppfx, const FLAG needflag = FLAG_NULL); michael@0: struct hentry * get_next_homonym(struct hentry * he); michael@0: struct hentry * get_next_homonym(struct hentry * word, int optflags, PfxEntry* ppfx, michael@0: const FLAG cclass, const FLAG needflag); michael@0: michael@0: michael@0: inline FLAG getFlag() { return aflag; } michael@0: inline const char * getKey() { return rappnd; } michael@0: char * add(const char * word, int len); michael@0: michael@0: michael@0: inline const char * getMorph() { return morphcode; } michael@0: michael@0: inline const unsigned short * getCont() { return contclass; } michael@0: inline short getContLen() { return contclasslen; } michael@0: inline const char * getAffix() { return appnd; } michael@0: michael@0: inline short getKeyLen() { return appndl; } michael@0: michael@0: inline SfxEntry * getNext() { return next; } michael@0: inline SfxEntry * getNextNE() { return nextne; } michael@0: inline SfxEntry * getNextEQ() { return nexteq; } michael@0: michael@0: inline SfxEntry * getLM() { return l_morph; } michael@0: inline SfxEntry * getRM() { return r_morph; } michael@0: inline SfxEntry * getEQM() { return eq_morph; } michael@0: inline SfxEntry * getFlgNxt() { return flgnxt; } michael@0: michael@0: inline void setNext(SfxEntry * ptr) { next = ptr; } michael@0: inline void setNextNE(SfxEntry * ptr) { nextne = ptr; } michael@0: inline void setNextEQ(SfxEntry * ptr) { nexteq = ptr; } michael@0: inline void setFlgNxt(SfxEntry * ptr) { flgnxt = ptr; } michael@0: michael@0: inline char * nextchar(char * p); michael@0: inline int test_condition(const char * st, const char * begin); michael@0: michael@0: }; michael@0: michael@0: #endif michael@0: michael@0: