293ad72ea721156d2d389f8c5d2a7e69872213f5
[mdictionary] / trunk / src / plugins / xdxf / src / XdxfPlugin / xdxfplugin.cpp
1 #include "xdxfplugin.h"
2 #include <QDebug>
3 #include <QFile>
4 #include <QXmlStreamReader>
5
6 XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
7                     _langFrom(tr("")), _langTo(tr("")),_name(tr("")),
8                     _type(tr("xdxf")), _infoNote(tr("")) {
9     path="dict.xdxf";
10 }
11
12 QString XdxfPlugin::langFrom() const {
13     return  _langFrom;
14 }
15
16 QString XdxfPlugin::langTo() const {
17     return  _langTo;
18 }
19
20 QString XdxfPlugin::name() const {
21     return  _name;
22 }
23
24 QString XdxfPlugin::type() const {
25     return _type;
26 }
27
28 QString XdxfPlugin::infoNote() const {
29     return  _infoNote;
30 }
31
32 QList<Translation*> XdxfPlugin::searchWordList(QString word, int limit) {
33     QRegExp regWord(word);
34     QList<Translation*> translations;
35     regWord.setPatternSyntax(QRegExp::Wildcard);
36     QFile dictionaryFile(path);
37     if(!dictionaryFile.open(QFile::ReadOnly | QFile::Text)) {
38         qDebug()<<"Error: could not open file";
39         return translations;
40     }
41     QXmlStreamReader dictionaryReader(&dictionaryFile);
42     dictionaryReader.readNextStartElement();
43     if(dictionaryReader.name()=="xdxf") {
44       if(dictionaryReader.attributes().hasAttribute("lang_from"))
45         _langFrom = dictionaryReader.attributes().value("lang_from").toString();
46       if(dictionaryReader.attributes().hasAttribute("lang_to"))
47         _langTo = dictionaryReader.attributes().value("lang_to").toString();
48     }
49     dictionaryReader.readNextStartElement();
50     if(dictionaryReader.name()=="full_name")
51         _name=dictionaryReader.readElementText();
52     dictionaryReader.readNextStartElement();
53     if(dictionaryReader.name()=="description")
54         _infoNote=dictionaryReader.readElementText();
55     QString a;
56     int i=0;
57     while(!dictionaryReader.atEnd() && !stopped){
58         dictionaryReader.readNextStartElement();
59         if(dictionaryReader.name()=="ar"){
60             while(dictionaryReader.name()!="k" && !dictionaryReader.atEnd())
61                 dictionaryReader.readNextStartElement();
62             a = dictionaryReader.readElementText();
63             if(regWord.exactMatch(a) && i<limit) {
64                 translations.append(new TranslationXdxf(a,_infoNote,this));
65                 qDebug()<<a;
66                 i++;
67                 if(i>=limit)
68                     break;
69             }
70         }
71     }
72     stopped=false;
73     dictionaryFile.close();
74     emit finalTranslation();
75     return translations;
76 }
77
78 QString XdxfPlugin::search(QString key) {
79     QFile dictionaryFile(path);
80     if(!dictionaryFile.open(QFile::ReadOnly | QFile::Text)) {
81         return ""; //blad otwarcia pliku
82     }
83     QXmlStreamReader dictionaryReader(&dictionaryFile);
84
85     QString a;
86     bool match =false;
87     while (!dictionaryReader.atEnd()) {
88         dictionaryReader.readNext();
89         if(dictionaryReader.tokenType() == QXmlStreamReader::StartElement) {
90             if(dictionaryReader.name()=="k") {
91                 a = dictionaryReader.readElementText();
92                 if(a==key)
93                     match = true;
94             }
95         }
96         else if(dictionaryReader.tokenType() == QXmlStreamReader::Characters)
97             if(match) {
98                 dictionaryFile.close();
99                 qDebug()<<dictionaryReader.text().toString().replace("\n","");
100                 return dictionaryReader.text().toString().replace("\n","");
101             }
102     }
103     return "";
104 }
105
106 void XdxfPlugin::stop() {
107     stopped=true;
108 }
109
110 QDialog* XdxfPlugin::loadDialog() {
111      path="dict.xdxf";
112 }
113
114 QDialog* XdxfPlugin::settingsDialog() {
115     ;
116 }
117
118 CommonDictInterface* XdxfPlugin::getNew(const Settings*) const {
119     ;
120 }
121
122 bool XdxfPlugin::isAvailable() const {
123     return true;
124 }
125
126 uint XdxfPlugin::hash() const
127 {
128     return 1;
129 }