fix bug's (translation color in stardict and kept settings after leave)
[mdictionary] / src / plugins / stardict / UncompressedReader.cpp
index d4370c5..5cc4b0e 100644 (file)
@@ -1,42 +1,67 @@
 #include "UncompressedReader.h"
 #include "QDebug"
 
+
 UncompressedReader::UncompressedReader(QObject *parent) :
         StarDictReader(parent) {
 
 }
 
+
 UncompressedReader::UncompressedReader(QString filename, QObject *parent) :
 StarDictReader(parent) {
     open(filename);
 }
 
+
 UncompressedReader::~UncompressedReader() {
     if(_file.isOpen())
         _file.close();
 }
 
+
 bool UncompressedReader::open(QString file) {
     _file.setFileName(file);
     _stream.setDevice(&_file);
     return _file.open(QFile::ReadOnly);
 }
 
+
 void UncompressedReader::close() {
     _file.close();
 }
 
+
 QChar UncompressedReader::readChar() {
-    char c[2]={0};
+    char c[4]={0};
+    QString cha;
+
     _stream.readRawData(c,1);
-    QString cha(QString::fromUtf8(c));
-    if(!cha.at(0).isLetter() && c[0]!=0){
+    if(((unsigned char)c[0])>240)
+        _stream.readRawData(c+1,3);
+    else if(((unsigned char)c[0])>224)
+        _stream.readRawData(c+1,2);
+    else if(((unsigned char)c[0])>192)
         _stream.readRawData(c+1,1);
-        cha=QString::fromUtf8(c);
+    else if(((unsigned char)c[0])>127)
+        qDebug()<<"error - starDict - read wordList from UTF-8";
+
+
+ /*   if(((unsigned char)c[0])>127){
+        _stream.readRawData(c+1,1);
+        if(((unsigned char)c[1])>127 && ((unsigned char)c[1])<192){
+            _stream.readRawData(c+2,1);
+            if(((unsigned char)c[2])>127 && ((unsigned char)c[2])<192)
+                _stream.readRawData(c+3,1);
+        }
     }
+ */
+    cha=QString::fromUtf8(c);
+
     return cha.at(0);
 }
 
+
 QString UncompressedReader::readKeyword() {
     QString result;
     QChar c;
@@ -46,7 +71,6 @@ QString UncompressedReader::readKeyword() {
         result += c;
         c = readChar();
     }
-
     return result;
 }
 
@@ -63,20 +87,20 @@ QByteArray UncompressedReader::readString(qint64 offset, qint32 len) {
     return result;
 }
 
+
 qint32 UncompressedReader::readInt32BigEndian() {
     _stream.setByteOrder(QDataStream::BigEndian);
     qint32 value;
     _stream>>value;
     _stream.setByteOrder(QDataStream::LittleEndian);
-
     return value;
 }
 
+
 qint64 UncompressedReader::readInt64BigEndian() {
     _stream.setByteOrder(QDataStream::BigEndian);
     qint64 value;
     _stream>>value;
     _stream.setByteOrder(QDataStream::LittleEndian);
-
     return value;
 }