change in interpret function in starDict Plugin
[mdictionary] / src / plugins / stardict / StarDictPlugin.h
1 /*******************************************************************************
2
3     This file is part of mDictionary.
4
5     mDictionary is free software: you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation, either version 3 of the License, or
8     (at your option) any later version.
9
10     mDictionary is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with mDictionary.  If not, see <http://www.gnu.org/licenses/>.
17
18     Copyright 2010 Comarch S.A.
19
20 *******************************************************************************/
21
22
23 /*! \file xdxfplugin.h
24 */
25 #ifndef STARDICTPLUGIN_H
26 #define STARDICTPLUGIN_H
27
28
29 #include <QObject>
30 #include <QDialog>
31 #include <QRegExp>
32 #include <QTime>
33 #include <QSqlQuery>
34 #include <QSqlDatabase>
35 #include <QSqlError>
36 #include <QFile>
37 #include <QXmlStreamReader>
38 #include <QtPlugin>
39 #include <QHash>
40 #include <QIcon>
41 #include <QtEndian>
42
43 #include "../../include/CommonDictInterface.h"
44 #include "../../include/settings.h"
45 #include "StarDictDialog.h"
46 #include "TranslationStarDict.h"
47
48 class TranslationXdxf;
49
50 class StarDictPlugin : public CommonDictInterface
51 {
52     Q_OBJECT
53     Q_INTERFACES(CommonDictInterface)
54 public:
55     StarDictPlugin(QObject *parent=0);
56
57     ~StarDictPlugin();
58
59     //! \returns source language code iso 639-2
60     QString langFrom() const;
61
62     //! \returns destination language code iso 639-2
63     QString langTo() const;
64
65     //! \returns dictionary name (like "old English" or so)
66     QString name() const;
67
68     //! \returns dictionary type (xdxf, google translate, etc)
69     QString type() const;
70
71     //! returns information about dictionary in xml (name, authors, etc)
72     QString infoNote() const;
73
74     /*! \returns DictDialog object that creates dialogs
75         for adding a new dictionary and changing plugin settings
76       */
77     DictDialog* dictDialog();
78
79     //! \returns new, clean copy of plugin with settings set as in Settings*
80     CommonDictInterface* getNew(const Settings*) const;
81
82     //! \returns whether plugin can start searching
83     bool isAvailable() const;
84
85     //! \returns a description of a word given by a QString
86     QString search(QString key) {
87         return search(key, 0, 0);
88     }
89
90     /*! \return a description of a word given by a QString
91         \param offset offset of translation to be cut out
92         \param len lenght of translation to be cut out
93         */
94     QString search(QString key, qint64 offset, qint32 len);
95
96     //! \returns current plugin settings
97     Settings* settings();
98
99     //! \returns words count in a dictionary
100     long wordsCount();
101
102     //! Sets new settings
103     bool setSettings(const Settings*);
104
105     //! \returns plugin icon
106     QIcon* icon();
107
108     /*! plugin should delete any files (eg. cache) that have been created and are ready
109         to be deleted
110         */
111     void clean();
112
113
114
115 public Q_SLOTS:
116     /*! performs search in a dictionary
117       \param  word word to search for in a dictionary
118       \param limit limit on number of results
119
120       After finishing search it has to emit
121       \see CommonDictInterface:finalTranslation  finalTranslation
122     */
123     QList<Translation*> searchWordList(QString word, int limit=0);
124
125     //! stops current operation
126     void stop();
127
128     //! loads translations for each plugin only once
129     void retranslate();
130
131
132 private:
133
134     /*! \returns true or false depending on whether the dictionary is cached
135         or not
136      */
137     bool isCached();
138     /*! searches for a list of words similar to a word in a database file
139     \param word key compared with keys in a database
140     \param limit limits the number of translations in returned list,
141            0 means unlimited
142     \returns list of translations
143     */
144     QList<Translation*> searchWordListCache(QString word, int limit=0);
145
146     /*! searches for a list of words similar to a word in a xdxf file
147     \param word key compared with keys in a xdxf file
148     \param limit limits the number of translations in returned list,
149            0 means unlimited
150     \returns list of translations
151     */
152     QList<Translation*> searchWordListFile(QString word, int limit=0);
153
154     /*! searches for a translation of a word which is exactly like a key
155         in a xdxf file */
156     QString searchFile(QString key);
157
158     //! scans dictionary file to get information about it
159     bool getDictionaryInfo();
160
161     //! counts the keys in a xdxf file
162     int countWords();
163
164
165     //! language from which we translate
166     QString _langFrom;
167     //! language to which we translate
168     QString _langTo;
169     //! name of a dictionary
170     QString _name;
171     //! information about dictionary
172     QString _infoNote;
173
174     QString _dictionaryInfo;
175
176     //! icon displayed during translations and when a dictionary is chosen
177     QIcon _icon;
178
179     //! number of words in a dictionary
180     long _wordsCount;
181     //! indicates if search is stopped
182     volatile bool stopped;
183     Settings *_settings;
184     StarDictDialog* _dictDialog;
185     Settings* _ifoFileSettings;
186     StarDictReader * dictReader;
187
188     /*! Reads and process (converting to qstring) data from StarDict dictionary
189         file (*.dict[.dz])
190         \return converted translation
191         \param QByteArray raw data to process
192         \param mode StarDict parametr "sametypesequence" */
193     QString format(QByteArray, QString mode,QString key);
194
195     /*! Reads bytes bytes of data or reads until \0
196         \param it iterator to given data
197         \param end end of data
198         \param bytes to read
199         \return readed data chunk*/
200     QByteArray read(QByteArray::iterator it, QByteArray::iterator end,
201            int bytes = 0);
202
203     /*! Interpret data basis on mode (StarDict dict data type)
204         \param it iterator on given data set
205         \param end iterator pointing to the data end
206         \param mode stardict dict data type
207         \param last used to interpret sametypesequence field last letter (see
208                 StarDict format description)
209         \return QSting containing interpreted data chunk */
210     QString interpret(QByteArray::iterator it, QByteArray::iterator end,
211             QChar mode,QString key, bool last = false);
212 };
213
214 #endif // XDXFPLUGIN_H
215
216