You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesdk/kbabel/kbabeldict/modules/dbsearchengine/KDBSearchEngine.h

334 lines
8.5 KiB

/***************************************************************************
KDBSearchEngine.h - description
-------------------
begin : Fri Sep 8 2000
copyright : (C) 2000 by Andrea Rizzi
email : rizzi@kde.org
***************************************************************************/
/***************************************************************************
* *
* 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; version 2 of the License. *
* *
* In addition, as a special exception, the copyright holders give *
* permission to link the code of this program with any edition of *
* the Qt library by Trolltech AS, Norway (or with modified versions *
* of Qt that use the same license as Qt), and distribute linked *
* combinations including the two. You must obey the GNU General *
* Public License in all respects for all of the code used other than *
* Qt. If you modify this file, you may extend this exception to *
* your version of the file, but you are not obligated to do so. If *
* you do not wish to do so, delete this exception statement from *
* your version. *
***************************************************************************/
/*
Translation search engine
Copyright 2000
Andrea Rizzi rizzi@kde.org
*/
/*
* This is a database engine specific
* structure, I think I must found a way to
* make it more "standard"
*/
#ifndef _KDBSEARCH_ENGINE_
#define _KDBSEARCH_ENGINE_
#include <qobject.h>
#include <qptrlist.h>
#include <qstring.h>
#include <qmemarray.h>
#include <qvaluelist.h>
#include "database.h"
#include "searchengine.h"
#include "preferenceswidget.h"
//value of mode
#define MD_ALL_DB 1
#define MD_GOOD_KEYS 2
#define MD_ALL_GOOD_KEYS 3
#define MD_IN_TRANSLATION 4
class SearchEntry
{
public:
QString string;
int rules;
};
class KeyAndScore : public QString
{
public:
KeyAndScore();
KeyAndScore(const QString &a,int sc);
int score;
};
typedef QValueList<SearchEntry> SearchList;
/* USE searchengine.h structure
class CatalogDescription
{
public:
char language[6]; // How many character chinese language needs?
// QString is better ?
QString filename;
QString dateOfScan; //When you add this to database (last time)
QString authorOfScan;
QString fileHeader; //msgid ""
};
*/
class KDBSearchEngine : public SearchEngine
{
Q_OBJECT
public:
KDBSearchEngine(QObject *parent=0,const char *name=0);
~KDBSearchEngine();
enum Rules {Equal = 1, Contains = 2, Contained = 4, RegExp = 8};
enum FormatRules { Dots = 1, Ampersand = 2, FirstWordUpper = 4, //Not yet used
AllWordUpper = 8, AmpersanAlwaysFirst = 16 };
/*
Set the directory where db file are located
*/
void setDBName(QString filename);
/*
Set if the research have to consider multiple spaces as a single one.
*/
void setNormalizeSpace(bool normalize);
/*
Set if the research have to be Case Sensitive or not
*/
void setCaseSensitive(bool sensitive);
/*
ignore ":_ bla bla \n" in msgid
*/
void setRemoveInternalComment(bool internalcomment);
/*
Set the a string containing all char that must be ignored
during the search.
*/
void setRemoveCharString(QString chartoremove);
/*
Enable an output filter that format Uppercase/lowercase
method could be;
0 = Disabled;
1 = English pattern;
2 = Only first;
*/
void enableCapitalFilter(int method);
/*
Enable an output filter that format special characters
method could be;
0 = Disabled;
1 = Put ... at the end if needed (remove if present but no needed);
2 = Put an accelerator (or remove);
4 = Remove %* if not present in msgid.
8 = Change %d,%s etc with %1 %2 etc if needed.
*/
void enableCharFilter(int method);
/*
Sets the rules to decide when 2 string match (Uppercase and remove char
are not set here)
1 = EQUAL
2 = SEARCH STRING IS CONTAINED IN DATABASE STRING (use with care, if you search nothing
it will produce a dangerouse output)
4 = DATABASE STRING IS CONTAINED IN SEARCH STRING (it exclude msgid "")
8 = String is a regexp. (exclude 1 2 4)
*/
void setMatchingRules(int rules);
/*
Search Engine methods reimplemented
*/
virtual bool messagesForFilter(const SearchFilter* filter
, QValueList<SearchResult>& resultList, QString& error);
virtual void setLanguageCode(const QString& lang);
virtual void setLanguage(const QString& languageCode, const QString& languageName);
virtual void setEditedFile(const QString& file);
virtual bool isReady() const ;
virtual bool isSearching() const;
virtual void saveSettings(KConfigBase *config);
virtual void readSettings(KConfigBase *config);
virtual PrefWidget *preferencesWidget(QWidget *parent);
virtual const KAboutData *about() const;
virtual QString name() const;
virtual QString id() const;
virtual QString lastError();
virtual QString translate(const QString& text, uint pluralForm);
virtual void stringChanged( const QStringList& orig, const QString& translated
, const uint translationPluralForm, const QString& description);
public slots:
void scan();
void scanRecur();
void scanFile();
/*
Add a search string in the list of the string to search for.
Returns the ID of the string in the list.
Returns -1 if there is a problem (may be search in
progress)
*/
int addSearchString(QString searchString, int rule=Equal);
/*
Start the research in the database of all the string in the list
search mode -1 means use global mode;
*/
bool startSearchNow(int searchmode=-1);
/*
Start a search for a single string
If the number of word of your string is less than patternXlimit
the KDBSearchEngine will search for all string with X * substituted to
X word.
For example if pattern1limit is 4 and you search "My name is Andrea"
This string will also match with:
"Your name is Andrea", "My dog is Andrea", "My name was Andrea", "My name is Joe"
Do not set pattern2limit too high.
If a patternlimit is > 0 rules 8 (* means any word) is added.
*/
bool startSingleSearch(QString searchString,unsigned int pattern1Limit,unsigned int pattern2Limit,
bool inTranslation=false);
/*
Start a search for a list of string
*/
// bool startListSearch(QPtrList<QString> searchStrList);
/*
* Return a list of key in database that contains some
* words of the given string phrase.
* thresholdin is a number from 0 to 100 a key is good
* if at least the threshold% of words are found
* thresholdout a key is good if the found words represnt
* at least the thresholdorig% of the words in the key
* max is the maximum number of results
*/
QValueList<KeyAndScore> searchWords(QString phrase,int threshold,
int thresholdorig ,uint32 max);
/*
Stop the current search
*/
virtual void stopSearch();
virtual bool startSearch(const QString& text, uint pluralForm, const SearchFilter* filter);
virtual bool startSearchInTranslation(QString s);
void clearList();
signals:
void found(SearchResult *);
private slots:
void updateSettings(); //Use widget settings
void setSettings(); //Fill widget with actual settings
void prefDestr();
void setLastError(const QString&);
void repeat();
private:
/*
Reload database info (and keep the dbase opened).
*/
bool loadDatabase(QString database,bool);
bool openDb(bool);
PreferencesWidget *pw;
bool IAmReady;
int methodFilterChar;
int methodFilterCapital;
int defRule;
int defLimit1;
int defLimit2;
int thre;
int threorig;
int commonthre;
int listmax;
int mode;
bool retnot;
bool defSub1;
bool defSub2;
bool stopNow;
bool searching;
bool norm,sens,comm;
int numofresult;
char * filename;
QString remchar;
QString regaddchar;
QString dbname;
bool dbOpened;
// GDBM_FILE db;
DataBaseManager * dm;
// datum key, value;
// QMemArray<CatalogDescription *> catinfo;
SearchList searchStringList;
int totalRecord;
QString lasterror;
QString lang;
bool scanInProgress;
QString edited;
bool autoup;
QString autoauthor;
};
#endif