change in interpreter
[mdictionary] / src / plugins / stardict / StarDictPlugin.cpp
index 14691e7..2f19bcc 100644 (file)
@@ -144,9 +144,13 @@ QList<Translation*> StarDictPlugin::searchWordList(QString word, int limit) {
 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++);
@@ -157,16 +161,22 @@ QByteArray StarDictPlugin::read(QByteArray::iterator 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>");
@@ -176,18 +186,28 @@ QString StarDictPlugin::interpret(QByteArray::iterator it,
             result.remove(pos,4);
         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));
-
+    }
     else if(mode == 'W') {
+        result += "<key>" + key + "</key>";
         if(!last) {
             QByteArray tmp ;
             tmp.append(*(it++));
@@ -198,6 +218,7 @@ QString StarDictPlugin::interpret(QByteArray::iterator it,
         } else
             result += read(it++, end);
     } else if(mode == 'P') {
+        result += "<key>" + key + "</key>";
         if(!last) {
             QByteArray tmp ;
             tmp.append(*(it++));
@@ -211,7 +232,6 @@ QString StarDictPlugin::interpret(QByteArray::iterator it,
     return result;
 }
 
-
 QString StarDictPlugin::format(QByteArray raw, QString mode,QString key) {
     QString result;
     if(mode == "") {
@@ -231,11 +251,14 @@ QString StarDictPlugin::format(QByteArray raw, QString mode,QString key) {
 
 
 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;
 }
 
 
@@ -266,8 +289,6 @@ CommonDictInterface* StarDictPlugin::getNew(const Settings *settings) const {
         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 {
@@ -326,7 +347,6 @@ bool StarDictPlugin::getDictionaryInfo() {
     }
 
     _name = settings()->value("bookname");
-
     return true;
 }