fix bugs -'stop stardict when user click stop' and 'nacional char in words list'
[mdictionary] / src / plugins / stardict / UncompressedReader.cpp
1 #include "UncompressedReader.h"
2 #include "QDebug"
3
4 UncompressedReader::UncompressedReader(QObject *parent) :
5         StarDictReader(parent) {
6
7 }
8
9 UncompressedReader::UncompressedReader(QString filename, QObject *parent) :
10 StarDictReader(parent) {
11     open(filename);
12 }
13
14 UncompressedReader::~UncompressedReader() {
15     if(_file.isOpen())
16         _file.close();
17 }
18
19 bool UncompressedReader::open(QString file) {
20     _file.setFileName(file);
21     _stream.setDevice(&_file);
22     return _file.open(QFile::ReadOnly);
23 }
24
25 void UncompressedReader::close() {
26     _file.close();
27 }
28
29 QChar UncompressedReader::readChar() {
30     char c[2]={0};
31     _stream.readRawData(c,1);
32     QString cha(QString::fromUtf8(c));
33     if(!cha.at(0).isLetter() && c[0]!=0){
34         _stream.readRawData(c+1,1);
35         cha=QString::fromUtf8(c);
36     }
37     return cha.at(0);
38 }
39
40 QString UncompressedReader::readKeyword() {
41     QString result;
42     QChar c;
43     c = readChar();
44
45     while(c != '\0') {
46         result += c;
47         c = readChar();
48     }
49
50     return result;
51 }
52
53
54 QByteArray UncompressedReader::readString(qint64 offset, qint32 len) {
55     char* buf;
56     buf = new char[len];
57
58     _file.seek(offset);
59     _stream.readRawData(buf, len);
60
61     QByteArray result(buf, len);
62     delete [] buf;
63     return result;
64 }
65
66 qint32 UncompressedReader::readInt32BigEndian() {
67     _stream.setByteOrder(QDataStream::BigEndian);
68     qint32 value;
69     _stream>>value;
70     _stream.setByteOrder(QDataStream::LittleEndian);
71
72     return value;
73 }
74
75 qint64 UncompressedReader::readInt64BigEndian() {
76     _stream.setByteOrder(QDataStream::BigEndian);
77     qint64 value;
78     _stream>>value;
79     _stream.setByteOrder(QDataStream::LittleEndian);
80
81     return value;
82 }