change in interpret function in starDict Plugin
authorJakub Jaszczynski <j.j.jaszczynski@gmail.com>
Thu, 7 Oct 2010 10:16:32 +0000 (12:16 +0200)
committerJakub Jaszczynski <j.j.jaszczynski@gmail.com>
Thu, 7 Oct 2010 10:16:32 +0000 (12:16 +0200)
src/plugins/stardict/StarDictPlugin.cpp
src/plugins/stardict/StarDictPlugin.h
src/plugins/stardict/TranslationStarDict.cpp

index 3709ca4..14691e7 100644 (file)
@@ -84,7 +84,7 @@ QString StarDictPlugin::type() const {
 
 
 QString StarDictPlugin::infoNote() const {
-    return _infoNote;
+    return _name;
 }
 
 
@@ -108,7 +108,8 @@ QList<Translation*> StarDictPlugin::searchWordList(QString word, int limit) {
     QRegExp keyword(word, Qt::CaseInsensitive, QRegExp::Wildcard);
 
     int counter = 0;
-    while(counter < wordcount && counter<limit) {
+    int counterLimit = 0;
+    while(counter < wordcount && (counterLimit<limit || limit==0)) {
         counter++;
         fkey = reader->readKeyword();
         if(is32b)
@@ -118,6 +119,7 @@ QList<Translation*> StarDictPlugin::searchWordList(QString word, int limit) {
         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);
@@ -126,9 +128,8 @@ QList<Translation*> StarDictPlugin::searchWordList(QString word, int limit) {
                 translations.push_front(tran);
             } else
                 translations[id].add(offset, len);
+            counterLimit++;
         }
-
-
     }
     QList<Translation*> ret;
     QListIterator<TranslationStarDict> it(translations);
@@ -154,70 +155,77 @@ QByteArray StarDictPlugin::read(QByteArray::iterator it,
 
 
 QString StarDictPlugin::interpret(QByteArray::iterator it,
-        QByteArray::iterator end, QChar mode, bool last) {
+        QByteArray::iterator end, QChar mode,QString key, bool last) {
     QString result;
-   if(mode == 'm')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 'l')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode ==  'g')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 't')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 'x')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 'y')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 'k')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 'w')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 'h')
-       result += QString::fromUtf8(read(it++, end));
-   else if(mode == 'r')
-       result += QString::fromUtf8(read(it++, end));
-
-   else if(mode == 'W') {
-       if(!last) {
-           QByteArray tmp ;
-           tmp.append(*(it++));
-           tmp.append(*(it++));
-           tmp.append(*(it++));
-           tmp.append(*(it));
-           result += read(it++, end, (qint32)qFromBigEndian(tmp.data()));
-       } else
-           result += read(it++, end);
-   } else if(mode == 'P') {
-       if(!last) {
-           QByteArray tmp ;
-           tmp.append(*(it++));
-           tmp.append(*(it++));
-           tmp.append(*(it++));
-           tmp.append(*(it));
-           result += read(it++, end, (qint32)qFromBigEndian(tmp.data()));
-       } else
-           result += read(it++, end);
-   }
-   return result;
+    if(mode == 'm')
+        result += QString::fromUtf8(read(it++, end));
+    else if(mode == 'l')
+        result += QString::fromUtf8(read(it++, end));
+    else if(mode ==  'g'){
+        result += "<key>" + key + "</key>";
+        result += QString::fromUtf8(read(it++, end));
+    }
+    else if(mode == 't')
+        result += QString::fromUtf8(read(it++, end));
+    else if(mode == 'x'){
+        result += QString::fromUtf8(read(it++, end));
+        result.replace("</k>","</key><t>");
+        result.replace("<k>","</t><key>");
+        int pos=result.indexOf("</t>");
+        if(pos!=-1)
+            result.remove(pos,4);
+        result+="</t>";
+    }
+    else if(mode == 'y')
+        result += QString::fromUtf8(read(it++, end));
+    else if(mode == 'k')
+        result += QString::fromUtf8(read(it++, end));
+    else if(mode == 'w')
+        result += QString::fromUtf8(read(it++, end));
+    else if(mode == 'h')
+        result += QString::fromUtf8(read(it++, end));
+    else if(mode == 'r')
+        result += QString::fromUtf8(read(it++, end));
+
+    else if(mode == 'W') {
+        if(!last) {
+            QByteArray tmp ;
+            tmp.append(*(it++));
+            tmp.append(*(it++));
+            tmp.append(*(it++));
+            tmp.append(*(it));
+            result += read(it++, end, (qint32)qFromBigEndian(tmp.data()));
+        } else
+            result += read(it++, end);
+    } else if(mode == 'P') {
+        if(!last) {
+            QByteArray tmp ;
+            tmp.append(*(it++));
+            tmp.append(*(it++));
+            tmp.append(*(it++));
+            tmp.append(*(it));
+            result += read(it++, end, (qint32)qFromBigEndian(tmp.data()));
+        } else
+            result += read(it++, end);
+    }
+    return result;
 }
 
 
-QString StarDictPlugin::format(QByteArray raw, QString mode) {
+QString StarDictPlugin::format(QByteArray raw, QString mode,QString key) {
     QString result;
     if(mode == "") {
         for(QByteArray::iterator it = raw.begin(); it != raw.end(); it++) {
             char tmp = *(++it);
-            result += interpret(--it, raw.end(), tmp);
+            result += interpret(--it, raw.end(), tmp, key);
         }
     } else {
         QByteArray::iterator it = raw.begin();
         foreach(QChar tmp, mode) {
-            result += interpret(it, raw.end(), tmp);
+            result += interpret(it, raw.end(), tmp, key);
         }
     }
-
     return result;
-
 }
 
 
@@ -225,9 +233,9 @@ QString StarDictPlugin::format(QByteArray raw, QString mode) {
 QString StarDictPlugin::search(QString key, qint64 offset, qint32 len) {
     if(!dictReader)
         return "";
-
     QByteArray raw = dictReader->readString(offset, len);
-    return format(raw, settings()->value("sametypesequence"));
+    qDebug()<<"mod"<<settings()->value("sametypesequence");
+    return format(raw, settings()->value("sametypesequence"),key);
 }
 
 
index 632ecdc..c8efbae 100644 (file)
@@ -190,7 +190,7 @@ private:
         \return converted translation
         \param QByteArray raw data to process
         \param mode StarDict parametr "sametypesequence" */
-    QString format(QByteArray, QString mode);
+    QString format(QByteArray, QString mode,QString key);
 
     /*! Reads bytes bytes of data or reads until \0
         \param it iterator to given data
@@ -208,7 +208,7 @@ private:
                 StarDict format description)
         \return QSting containing interpreted data chunk */
     QString interpret(QByteArray::iterator it, QByteArray::iterator end,
-            QChar mode, bool last = false);
+            QChar mode,QString key, bool last = false);
 };
 
 #endif // XDXFPLUGIN_H
index 65c60a0..8ffd51e 100644 (file)
@@ -77,16 +77,9 @@ QString TranslationStarDict::toXml() const {
                 result+= _dictionaryInfo +"</info>";
 
             /*przeformatowanie zwracanego stringu na oczekiwany format*/
-            QString text =starDictPlugin->search(_key, offsets.at(i), lengths.at(i));
-            text.replace("</k>","</key><t>");
-            text.replace("<k>","</t><key>");
-            int pos=text.indexOf("</t>");
-            if(pos!=-1)
-                text.remove(pos,4);
-
-            result+= text;
-            result+= "</t> </dict>";
-            qDebug()<<"trans"<<result;
+            result+=starDictPlugin->search(_key, offsets.at(i), lengths.at(i));
+            result+= "</dict>";
+            //qDebug()<<"trans"<<result;
    }
    return result;
 }