#include "StarDictPlugin.h"
+
uint qHash(const TranslationStarDict &key) {
return qHash(key.key());
}
+
StarDictPlugin::StarDictPlugin(QObject *parent) : CommonDictInterface(parent),
_langFrom(""), _langTo(""),_name(""), _infoNote("") {
_settings = new Settings();
connect(_dictDialog, SIGNAL(notify(Notify::NotifyType,QString)),
this, SIGNAL(notify(Notify::NotifyType,QString)));
-
_settings->setValue("type","stardict");
_icon = QIcon("/usr/share/mdictionary/stardict.png");
_wordsCount = -1;
initAccents();
}
+
void StarDictPlugin::retranslate() {
QString locale = QLocale::system().name();
-
QTranslator *translator = new QTranslator(this);
- if(!translator->load(":/xdxf/translations/" + locale)) {
- translator->load(":/xdxf/translations/en_US");
+ if(!translator->load(":/stardict/translations/" + locale)) {
+ translator->load(":/stardicts/translations/en_US");
}
QCoreApplication::installTranslator(translator);
}
QList<Translation*> StarDictPlugin::searchWordList(QString word, int limit) {
- qDebug() << "StarDict searachWordList" << word;
QList<TranslationStarDict> 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<Translation*>();
-
+ int counter = 0;
+ int counterLimit = 0;
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;
- int counterLimit = 0;
+ if( word.indexOf("*")==-1 && word.indexOf("?")==-1 &&
+ word.indexOf("_")==-1 && word.indexOf("%")==-1)
+ word+="*";
+
+
+ if((settings()->value("idxoffsetbits") == "32") ||
+ (settings()->value("idxoffsetbits") == ""))
+ is32b = true;
+ if(!err)
+ return QList<Translation*>();
+
stopped=false;
while(counter < wordcount && (counterLimit<limit || limit==0) && !stopped) {
counter++;
len = reader->readInt32BigEndian();
if(keyword.exactMatch(fkey)) {
- qDebug()<<"InfoNote"<<infoNote();
TranslationStarDict tran(fkey, infoNote(), this);
qDebug() << "off/len" << offset << len;
int id = translations.indexOf(tran);
QListIterator<TranslationStarDict> it(translations);
while(it.hasNext())
ret.push_back(new TranslationStarDict(it.next()));
-
-
return ret;
}
if(bytes == 0 && it != end){
while(*it != '\0' && it != end)
ret.append(*it++);
- if(it == end) qDebug()<<"end";
- else qDebug()<<"000";
+ if(it == end)
+ qDebug()<<"end";
+ else
+ qDebug()<<"000";
}
else
for(int i = 0; i < bytes && it != end; i++)
result += QString::fromUtf8(read(it++, end));
}
+
// Dont know whether mDictionary would ever handle binary stardict format
-// to be honest dont see any kind of adventages (can't find any binary dict)
+// to be honest dont see any kind of adventages (can't find any binary dict)
/*
}
else if(mode == 'W') {
return result;
}
+
QString StarDictPlugin::format(QByteArray raw, QString mode,QString key) {
QString result;
if(mode == "") {
QString StarDictPlugin::search(QString key, qint64 offset, qint32 len) {
QString dictPath = settings()->value("dictFileName");
StarDictReader *reader = StarDictReaderFactory::createReader(dictPath);
-
QByteArray raw = reader->readString(offset, len);
- qDebug()<<"mod"<<settings()->value("sametypesequence");
QString result= format(raw, settings()->value("sametypesequence"),key);
+
delete reader;
return result;
}
-
void StarDictPlugin::stop() {
- qDebug()<<"zatrzymanie programu";
stopped=true;
}
setLastDialogParent(_dictDialog->lastDialogParent());
if(settings && plugin->setSettings(settings)) {
- disconnect(plugin, SIGNAL(notify(Notify::NotifyType,QString)),
- this, SIGNAL(notify(Notify::NotifyType,QString)));
+ disconnect( plugin, SIGNAL(notify(Notify::NotifyType,QString)),
+ this, SIGNAL(notify(Notify::NotifyType,QString)));
plugin->getDictionaryInfo();
return plugin;
}
else {
- disconnect(plugin, SIGNAL(notify(Notify::NotifyType,QString)),
- this, SIGNAL(notify(Notify::NotifyType,QString)));
+ disconnect( plugin, SIGNAL(notify(Notify::NotifyType,QString)),
+ this, SIGNAL(notify(Notify::NotifyType,QString)));
delete plugin;
return 0;
}
QFile file(settings()->value("ifoFileName"));
if(!QFile::exists(_settings->value("ifoFileName"))
|| !file.open(QFile::ReadOnly | QFile::Text)) {
- Q_EMIT notify(Notify::Warning,
+ Q_EMIT notify(Notify::Warning,
QString(tr("StarDict dictionary cannot be read from file")));
qDebug()<<"Error: could not open the file";
return false;
}
-
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
settings()->setValue(list.at(0),list.at(1));
}
}
-
_name = settings()->value("bookname");
return true;
}