fix bug's (translation color in stardict and kept settings after leave)
[mdictionary] / src / plugins / stardict / UncompressedReader.cpp
1 #include "UncompressedReader.h"
2 #include "QDebug"
3
4
5 UncompressedReader::UncompressedReader(QObject *parent) :
6         StarDictReader(parent) {
7
8 }
9
10
11 UncompressedReader::UncompressedReader(QString filename, QObject *parent) :
12 StarDictReader(parent) {
13     open(filename);
14 }
15
16
17 UncompressedReader::~UncompressedReader() {
18     if(_file.isOpen())
19         _file.close();
20 }
21
22
23 bool UncompressedReader::open(QString file) {
24     _file.setFileName(file);
25     _stream.setDevice(&_file);
26     return _file.open(QFile::ReadOnly);
27 }
28
29
30 void UncompressedReader::close() {
31     _file.close();
32 }
33
34
35 QChar UncompressedReader::readChar() {
36     char c[4]={0};
37     QString cha;
38
39     _stream.readRawData(c,1);
40     if(((unsigned char)c[0])>240)
41         _stream.readRawData(c+1,3);
42     else if(((unsigned char)c[0])>224)
43         _stream.readRawData(c+1,2);
44     else if(((unsigned char)c[0])>192)
45         _stream.readRawData(c+1,1);
46     else if(((unsigned char)c[0])>127)
47         qDebug()<<"error - starDict - read wordList from UTF-8";
48
49
50  /*   if(((unsigned char)c[0])>127){
51         _stream.readRawData(c+1,1);
52         if(((unsigned char)c[1])>127 && ((unsigned char)c[1])<192){
53             _stream.readRawData(c+2,1);
54             if(((unsigned char)c[2])>127 && ((unsigned char)c[2])<192)
55                 _stream.readRawData(c+3,1);
56         }
57     }
58  */
59     cha=QString::fromUtf8(c);
60
61     return cha.at(0);
62 }
63
64
65 QString UncompressedReader::readKeyword() {
66     QString result;
67     QChar c;
68     c = readChar();
69
70     while(c != '\0') {
71         result += c;
72         c = readChar();
73     }
74     return result;
75 }
76
77
78 QByteArray UncompressedReader::readString(qint64 offset, qint32 len) {
79     char* buf;
80     buf = new char[len];
81
82     _file.seek(offset);
83     _stream.readRawData(buf, len);
84
85     QByteArray result(buf, len);
86     delete [] buf;
87     return result;
88 }
89
90
91 qint32 UncompressedReader::readInt32BigEndian() {
92     _stream.setByteOrder(QDataStream::BigEndian);
93     qint32 value;
94     _stream>>value;
95     _stream.setByteOrder(QDataStream::LittleEndian);
96     return value;
97 }
98
99
100 qint64 UncompressedReader::readInt64BigEndian() {
101     _stream.setByteOrder(QDataStream::BigEndian);
102     qint64 value;
103     _stream>>value;
104     _stream.setByteOrder(QDataStream::LittleEndian);
105     return value;
106 }