From 2912389ccfcab253934b9c66263c620f2d8aca36 Mon Sep 17 00:00:00 2001 From: Bartosz Szatkowski Date: Wed, 6 Oct 2010 09:51:11 +0200 Subject: [PATCH] Fixed StarDictPlugin integration with other stardict classes --- src/plugins/stardict/StarDictPlugin.cpp | 64 ++++++++++++++++++++++---- src/plugins/stardict/StarDictPlugin.h | 3 +- src/plugins/stardict/TranslationStarDict.cpp | 15 ++++++ src/plugins/stardict/TranslationStarDict.h | 28 +++++++++++ src/plugins/stardict/stardict.pro | 2 - 5 files changed, 98 insertions(+), 14 deletions(-) diff --git a/src/plugins/stardict/StarDictPlugin.cpp b/src/plugins/stardict/StarDictPlugin.cpp index cc7ee06..87928cb 100644 --- a/src/plugins/stardict/StarDictPlugin.cpp +++ b/src/plugins/stardict/StarDictPlugin.cpp @@ -23,11 +23,10 @@ */ #include "StarDictPlugin.h" -#include -#include "../../include/Notify.h" -#include -#include -#include + +uint qHash(const TranslationStarDict &key) { + return qHash(key.key()); +} StarDictPlugin::StarDictPlugin(QObject *parent) : CommonDictInterface(parent), _langFrom(""), _langTo(""),_name(""), _infoNote("") { @@ -90,8 +89,53 @@ QString StarDictPlugin::infoNote() const { QList StarDictPlugin::searchWordList(QString word, int limit) { - QSet translations; - return translations.toList(); + QList translations; + bool is32b = false; + if(settings()->value("idxoffsetbits") == "32" || + settings()->value("idxoffsetbits") == "") + is32b = true; + + bool err = 0; + int wordcount = settings()->value("wordcount").toInt(&err); + if(err) + return QList(); + + QString idxPath = settings()->value("idxFileName"); + StarDictReader * reader = StarDictReaderFactory::createReader(idxPath); + + QString fkey; + qint64 offset = 0, len = 0; + QRegExp keyword(word, Qt::CaseInsensitive, QRegExp::Wildcard); + + int counter = 0; + while(counter < wordcount) { + counter++; + fkey = reader->readKeyword(); + if(is32b) + offset = reader->readInt32BigEndian(); + else + offset = reader->readInt64BigEndian(); + len = reader->readInt32BigEndian(); + + if(keyword.exactMatch(fkey)) { + TranslationStarDict tran(fkey, infoNote(), this); + int id = translations.indexOf(tran); + if(id == -1) { + tran.add(offset, len); + translations.push_front(tran); + } else + translations[id].add(offset, len); + } + + + } + QList ret; + QListIterator it(translations); + while(it.hasNext()) + ret.push_back(new TranslationStarDict(it.next())); + + + return ret; } @@ -103,9 +147,9 @@ QString StarDictPlugin::search(QString key) { void StarDictPlugin::parseIfoFile() { QFile file(settings()->value("path")); - if (!file.open(QIODevice::ReadOnly)) - { - return 0; + if (!file.open(QIODevice::ReadOnly)) { + // TODO notification + return ; } QTextStream in(&file); while (!in.atEnd()) { diff --git a/src/plugins/stardict/StarDictPlugin.h b/src/plugins/stardict/StarDictPlugin.h index ac5611a..c712fa0 100644 --- a/src/plugins/stardict/StarDictPlugin.h +++ b/src/plugins/stardict/StarDictPlugin.h @@ -43,7 +43,6 @@ #include "../../include/settings.h" #include "StarDictDialog.h" #include "TranslationStarDict.h" -#include "StarDictSettings.h" class TranslationXdxf; @@ -95,7 +94,7 @@ public: bool setSettings(const Settings*); //! \return object containing data parsed from .ifo file - StarDictSettings* parseIfoFile(); + void parseIfoFile(); //! \returns plugin icon QIcon* icon(); diff --git a/src/plugins/stardict/TranslationStarDict.cpp b/src/plugins/stardict/TranslationStarDict.cpp index 942b21e..74cc0cb 100644 --- a/src/plugins/stardict/TranslationStarDict.cpp +++ b/src/plugins/stardict/TranslationStarDict.cpp @@ -39,6 +39,21 @@ TranslationStarDict::TranslationStarDict(QString _key, QString _dictionaryInfo, } +TranslationStarDict::TranslationStarDict(const TranslationStarDict &base) { + _key = base.key(); + _dictHash = base._dictHash; + _dictionaryInfo = base._dictionaryInfo; + lengths = base.lengths; + offsets = base.offsets; +} + + +void TranslationStarDict::add(qint64 offset, qint32 len) { + offsets.append(offset); + lengths.append(len); +} + + QString TranslationStarDict::key() const { return _key; } diff --git a/src/plugins/stardict/TranslationStarDict.h b/src/plugins/stardict/TranslationStarDict.h index 6a18cf8..6582324 100644 --- a/src/plugins/stardict/TranslationStarDict.h +++ b/src/plugins/stardict/TranslationStarDict.h @@ -24,8 +24,18 @@ #define TRANSLATIONSTARDICT_H #include +#include +#include +#include +#include +#include +#include + +#include "StarDictReaderFactory.h" #include "../../include/translation.h" #include "StarDictPlugin.h" +#include "../../include/Notify.h" +#include "TranslationStarDict.h" class TranslationStarDict : public Translation { @@ -34,6 +44,7 @@ public: TranslationStarDict(QString _key, QString _dictionaryInfo, StarDictPlugin *starDictPlugin); + TranslationStarDict(const TranslationStarDict &base); //! \return word to be translated QString key() const; @@ -56,12 +67,29 @@ public: //! returns corresponding dict object uint dict() const {return _dictHash;} + /*! Add another hit in *.id(x) file + \param offset offset from begining of file to searched keyword + \param len lenght of searched keyword + */ + void add(qint64 offset, qint32 len); + + + + bool operator==(const TranslationStarDict &key) { + if (this->key() == key.key()) + return true; + return false; + } + private: QString _key; QString _dictionaryInfo; StarDictPlugin *starDictPlugin; int _dictHash; + QVector offsets; + QVector lengths; }; + #endif // TRANSLATIONSTARDICT_H diff --git a/src/plugins/stardict/stardict.pro b/src/plugins/stardict/stardict.pro index 1d683f1..7401341 100644 --- a/src/plugins/stardict/stardict.pro +++ b/src/plugins/stardict/stardict.pro @@ -16,7 +16,6 @@ SOURCES += \ TranslationStarDict.cpp \ StarDictDialog.cpp \ StarDialog.cpp \ - StarDictSettings.cpp \ CompressedReader.cpp \ UncompressedReader.cpp \ StarDictReaderFactory.cpp @@ -31,7 +30,6 @@ HEADERS += \ ../../include/settings.h \ ../../include/CommonDictInterface.h \ StarDialog.h \ - StarDictSettings.h \ CompressedReader.h \ UncompressedReader.h \ StarDictReaderFactory.h \ -- 1.7.9.5