QByteArray StarDictPlugin::read(QByteArray::iterator it,
QByteArray::iterator end, int bytes) {
QByteArray ret;
- if(bytes == 0 && it != end)
- while(*it != '\0')
+
+ if(bytes == 0 && it != end){
+ while(*it != '\0' && it != end)
ret.append(*it++);
+ if(it == end) qDebug()<<"end";
+ else qDebug()<<"000";
+ }
else
for(int i = 0; i < bytes && it != end; i++)
ret.append(*it++);
QString StarDictPlugin::interpret(QByteArray::iterator it,
QByteArray::iterator end, QChar mode,QString key, bool last) {
QString result;
- if(mode == 'm')
+ if(mode == 'm'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'l')
+ }
+ else if(mode == 'l'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
+ }
else if(mode == 'g'){
result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
}
- else if(mode == 't')
+ else if(mode == 't'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
+ }
else if(mode == 'x'){
result += QString::fromUtf8(read(it++, end));
result.replace("</k>","</key><t>");
if(result.contains("<t>"))
result+="</t>";
}
- else if(mode == 'y')
+ else if(mode == 'y') {
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'k')
+ }
+ else if(mode == 'k'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'w')
+ }
+ else if(mode == 'w'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'h')
+ }
+ else if(mode == 'h'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'r')
+ }
+ else if(mode == 'r'){
+ result += "<key>" + key + "</key>";
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)
/*
+ }
else if(mode == 'W') {
+ result += "<key>" + key + "</key>";
if(!last) {
QByteArray tmp ;
tmp.append(*(it++));
} else
result += read(it++, end);
} else if(mode == 'P') {
+ result += "<key>" + key + "</key>";
if(!last) {
QByteArray tmp ;
tmp.append(*(it++));
return result;
}
-
QString StarDictPlugin::format(QByteArray raw, QString mode,QString key) {
QString result;
if(mode == "") {
QString StarDictPlugin::search(QString key, qint64 offset, qint32 len) {
- if(!dictReader)
- return "";
- QByteArray raw = dictReader->readString(offset, len);
+ QString dictPath = settings()->value("dictFileName");
+ StarDictReader *reader = StarDictReaderFactory::createReader(dictPath);
+
+ QByteArray raw = reader->readString(offset, len);
qDebug()<<"mod"<<settings()->value("sametypesequence");
- return format(raw, settings()->value("sametypesequence"),key);
+ QString result= format(raw, settings()->value("sametypesequence"),key);
+ delete reader;
+ return result;
}
disconnect(plugin, SIGNAL(notify(Notify::NotifyType,QString)),
this, SIGNAL(notify(Notify::NotifyType,QString)));
plugin->getDictionaryInfo();
- plugin->dictReader = StarDictReaderFactory::
- createReader(settings->value("dictFileName"));
return plugin;
}
else {
}
_name = settings()->value("bookname");
-
return true;
}