added XdxfPlugin::hash() draft
[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 void 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         return; //blad otwarcia pliku
39     }
40     QXmlStreamReader dictionaryReader(&dictionaryFile);
41     dictionaryReader.readNextStartElement();
42     if(dictionaryReader.name()=="xdxf") {
43       if(dictionaryReader.attributes().hasAttribute("lang_from"))
44         _langFrom = dictionaryReader.attributes().value("lang_from").toString();
45       if(dictionaryReader.attributes().hasAttribute("lang_to"))
46         _langTo = dictionaryReader.attributes().value("lang_to").toString();
47     }
48     dictionaryReader.readNextStartElement();
49     if(dictionaryReader.name()=="full_name")
50         _name=dictionaryReader.readElementText();
51     dictionaryReader.readNextStartElement();
52     if(dictionaryReader.name()=="description")
53         _infoNote=dictionaryReader.readElementText();
54     QString a;
55     int i=0;
56     while(!dictionaryReader.atEnd() && !stopped){
57         dictionaryReader.readNextStartElement();
58         if(dictionaryReader.name()=="ar"){
59             while(dictionaryReader.name()!="k" && !dictionaryReader.atEnd())
60                 dictionaryReader.readNextStartElement();
61             a = dictionaryReader.readElementText();
62             if(regWord.exactMatch(a) && i<limit) {
63                 translations.append(new TranslationXdxf(a,_infoNote,this));
64                 i++;
65                 if(i>=limit)
66                     break;
67             }
68         }
69     }
70     stopped=false;
71     emit finalTranslation(translations);
72     dictionaryFile.close();
73 }
74
75 QString XdxfPlugin::search(QString key) {
76     QFile dictionaryFile(path);
77     if(!dictionaryFile.open(QFile::ReadOnly | QFile::Text)) {
78         return ""; //blad otwarcia pliku
79     }
80     QXmlStreamReader dictionaryReader(&dictionaryFile);
81
82     QString a;
83     bool match =false;
84     while (!dictionaryReader.atEnd()) {
85         dictionaryReader.readNext();
86         if(dictionaryReader.tokenType() == QXmlStreamReader::StartElement) {
87             if(dictionaryReader.name()=="k") {
88                 a = dictionaryReader.readElementText();
89                 if(a==key)
90                     match = true;
91             }
92         }
93         else if(dictionaryReader.tokenType() == QXmlStreamReader::Characters)
94             if(match) {
95                 dictionaryFile.close();
96                 return dictionaryReader.text().toString().replace("\n","");
97
98             }
99     }
100     return "";
101 }
102
103 void XdxfPlugin::stop() {
104     stopped=true;
105 }
106
107 QDialog* XdxfPlugin::loadDialog() {
108      path="dict.xdxf";
109 }
110
111 QDialog* XdxfPlugin::settingsDialog() {
112     ;
113 }
114
115 CommonDictInterface* XdxfPlugin::getNew(const Settings*) const {
116     ;
117 }
118
119 bool XdxfPlugin::isAvailable() const {
120     return true;
121 }
122
123 uint XdxfPlugin::hash() const
124 {
125     return 1;
126 }