fix bug's (translation color in stardict and kept settings after leave)
[mdictionary] / src / plugins / stardict / CompressedReader.cpp
index 33a9744..dae4b2e 100644 (file)
@@ -29,16 +29,19 @@ CompressedReader::CompressedReader(QObject *parent) :
     StarDictReader(parent) {
 }
 
+
 CompressedReader::CompressedReader(QString filename, QObject *parent) :
     StarDictReader(parent) {
     open(filename);
 }
 
+
 CompressedReader::~CompressedReader() {
     if(_file != NULL)
         gzclose(_file);
 }
 
+
 bool CompressedReader::open(QString file) {
     _file = gzopen(file.toStdString().c_str(), "rb");
     if(_file == NULL)
@@ -46,6 +49,7 @@ bool CompressedReader::open(QString file) {
     return true;
 }
 
+
 void CompressedReader::close() {
     gzclose(_file);
     _file = NULL;
@@ -57,6 +61,19 @@ QChar CompressedReader::readChar() {
     QString cha;
 
     gzread(_file, c, 1);
+    if(((unsigned char)c[0])>240)
+        gzread(_file, c+1, 3);
+    else if(((unsigned char)c[0])>224)
+        gzread(_file, c+1, 2);
+    else if(((unsigned char)c[0])>192)
+        gzread(_file, c+1, 1);
+    else if(((unsigned char)c[0])>127){
+        qDebug()<<"error - starDict - read wordList from UTF-8";
+        c[0]=0;
+    }
+
+
+ /*   gzread(_file, c, 1);
     if(((unsigned char)c[0])>127){
         gzread(_file, c+1, 1);
         if(((unsigned char)c[1])>127 && ((unsigned char)c[1])<192){
@@ -65,23 +82,27 @@ QChar CompressedReader::readChar() {
                 gzread(_file, c+3, 1);
         }
     }
+*/
 
     cha=QString::fromUtf8(c);
     return cha.at(0);
 }
 
+
 qint32 CompressedReader::readInt32BigEndian() {
     qint32 value;
     gzread(_file, (void*)(&value), 4);
     return qFromBigEndian(value);
 }
 
+
 qint64 CompressedReader::readInt64BigEndian() {
     qint64 value;
     gzread(_file, (void*)(&value), 8);
     return value;
 }
 
+
 QString CompressedReader::readKeyword() {
     QString result;
     QChar c;
@@ -94,6 +115,7 @@ QString CompressedReader::readKeyword() {
     return result;
 }
 
+
 QByteArray CompressedReader::readString(qint64 offset, qint32 len) {
     char* buf;
     buf = new char[len];