/*************************************************************************** * Copyright (C) 2004-2007 by Georgy Yunaev, gyunaev@ulduzsoft.com * * Portions Copyright (C) 2000-2005 Trolltech AS. * * Please do not use email address above for bug reports; see * * the README file * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef TQASSISTANTINDEX_H #define TQASSISTANTINDEX_H #include #include #include #include namespace QtAs { struct Document { Document( int d, int f ) : docNumber( d ), frequency( f ) {} Document() : docNumber( -1 ), frequency( 0 ) {} bool operator==( const Document &doc ) const { return docNumber == doc.docNumber; } bool operator<( const Document &doc ) const { return frequency > doc.frequency; } bool operator<=( const Document &doc ) const { return frequency >= doc.frequency; } bool operator>( const Document &doc ) const { return frequency < doc.frequency; } TQ_INT16 docNumber; TQ_INT16 frequency; }; TQDataStream &operator>>( TQDataStream &s, Document &l ); TQDataStream &operator<<( TQDataStream &s, const Document &l ); class Index : public TQObject { Q_OBJECT public: struct Entry { Entry( int d ) { documents.append( Document( d, 1 ) ); } Entry( TQValueList l ) : documents( l ) {} TQValueList documents; }; struct PosEntry { PosEntry( int p ) { positions.append( p ); } TQValueList positions; }; Index( const TQString &dp, const TQString &hp ); Index( const TQStringList &dl, const TQString &hp ); void writeDict(); bool readDict(); bool makeIndex(); TQStringList query( const TQStringList&, const TQStringList&, const TQStringList& ); void setDictionaryFile( const TQString& ); void setDocListFile( const TQString& ); void setDocList( const TQStringList & ); TQString getCharsSplit() const { return m_charssplit; } TQString getCharsPartOfWord() const { return m_charsword; } signals: void indexingProgress( int ); public slots: void setLastWinClosed(); private: void setupDocumentList(); bool parseDocumentToStringlist( const TQString& filename, TQStringList& tokenlist ); void parseDocument( const TQString& filename, int docnum ); void insertInDict( const TQString&, int ); void writeDocumentList(); bool readDocumentList(); TQStringList getWildcardTerms( const TQString& ); TQStringList split( const TQString& ); TQValueList setupDummyTerm( const TQStringList& ); bool searchForPhrases( const TQStringList &phrases, const TQStringList &words, const TQString &filename ); TQStringList docList; TQDict dict; TQDict miniDict; TQString docPath; TQString dictFile; TQString docListFile; bool lastWindowClosed; // Those characters are splitters (i.e. split the word), but added themselves into dictionary too. // This makes the dictionary MUCH larger, but ensure that for the piece of "window->print" both // search for "print" and "->print" will find it. TQString m_charssplit; // Those characters are parts of word - for example, '_' is here, and search for _debug will find only _debug. TQString m_charsword; }; struct Term { Term( const TQString &t, int f, TQValueList l ) : term( t ), frequency( f ), documents( l ) {} TQString term; int frequency; TQValueList documents; }; class TermList : public TQPtrList { public: TermList() : TQPtrList() {} int compareItems( TQPtrCollection::Item i1, TQPtrCollection::Item i2 ); }; }; #endif /* TQASSISTANTINDEX_H */