Complete draft of xdxf plugin
authorPiotrek <ppilar11@gmail.com>
Wed, 4 Aug 2010 10:19:19 +0000 (12:19 +0200)
committerPiotrek <ppilar11@gmail.com>
Wed, 4 Aug 2010 10:19:19 +0000 (12:19 +0200)
trunk/src/includes/CommonDictInterface.h
trunk/src/includes/main.cpp [new file with mode: 0644]
trunk/src/includes/settings.h
trunk/src/includes/translation.h
trunk/src/plugins/xdxf/src/XdxfPlugin/TranslationXdxf.cpp [new file with mode: 0644]
trunk/src/plugins/xdxf/src/XdxfPlugin/TranslationXdxf.h [new file with mode: 0644]
trunk/src/plugins/xdxf/src/XdxfPlugin/XdxfPlugin.pro
trunk/src/plugins/xdxf/src/XdxfPlugin/xdxfplugin.cpp
trunk/src/plugins/xdxf/src/XdxfPlugin/xdxfplugin.h

index 6310ba7..5a0c466 100644 (file)
 *******************************************************************************/
 
 // Created by Bartosz Szatkowski
+
+#ifndef COMMONDICTINTERFACE_H
+#define COMMONDICTINTERFACE_H
+
 #include <QString>
 #include <QDialog>
 #include <QObject>
 #include "translation.h"
 #include "settings.h"
 
-
+Q_DECLARE_INTERFACE (CommonDictInterface, "xdxfInterface")
 
 //! Interface for dict engines plugins
 class CommonDictInterface : public QObject {
   Q_OBJECT
   public:
-    CommonDictInterface(const QObject *parent = 0) = 0;
+    CommonDictInterface(QObject *parent = 0):QObject(parent) {}
 
     //! returns source language code iso 639-2
-    virtual QString langFrom() const = 0; 
+    virtual QString langFrom() const = 0;
 
     //! returns destination language code iso 639-2
     virtual QString langTo() const = 0;
@@ -46,14 +50,14 @@ class CommonDictInterface : public QObject {
     virtual QString name() const = 0;
 
     //! returns dictionary type (xdxf, google translate, etc)
-    virtual QString type() const = 0;        
+    virtual QString type() const = 0;
 
     //! returns information about dictionary in html (name, authors, etc)
-    virtual QString infoNote() const = 0; 
+    virtual QString infoNote() const = 0;
 
     //! return dialog that creates new dictionary and fills necesary options
     //! QDialog should returns Setting* object after being showed
-    virtual QDialog* loadDialog() = 0;  
+    virtual QDialog* loadDialog() = 0;
 
     //! return dialog with dictionary settings
     virtual QDialog* settingsDialog() = 0;
@@ -61,27 +65,32 @@ class CommonDictInterface : public QObject {
     //! return new, clean copy of plugin with setting set as in Settings*
     virtual CommonDictInterface* getNew(const Settings*) const = 0;
 
-    //! returns whether plugin can start searching 
+    //! returns whether plugin can start searching
     virtual bool isAvailable() const = 0;
 
+    virtual QString search(QString key) = 0;
+
  public Q_SLOTS:
     /*! performes search in dictionary
         \param  word word to search in dictionary
         \param limit limit on number of results
 
-        After finishing search it have to emit 
+        After finishing search it have to emit
         \see CommonDictInterface:finalTranslation  finalTranslation
 
     */
-    virtual void search(QString word, int limit) = 0;                         
+    virtual void searchWordList(QString word, int limit) = 0;
 
     //! stop current operation
-    virtual void stop() = 0;                        
+    virtual void stop() = 0;
 
   Q_SIGNALS:
-    //! emit list of finded Translations
+    //! emit list of found Translations
     void finalTranslation(QList<Translation*>);
 
     //! emited after dictionary is ready to use afer being loaded
     void loaded(CommonDictInterface*);
-}
+};
+
+#endif // COMMONDICTINTERFACE_H
+
diff --git a/trunk/src/includes/main.cpp b/trunk/src/includes/main.cpp
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index 4313692..db2655f 100644 (file)
 *******************************************************************************/
 
 //Created by Bartosz Szatkowski
+
+
+#ifndef SETTINGS_H
+#define SETTINGS_H
+
 #include <QString>
 #include "CommonDictInterface.h"
 
-//! Plugin specific configuration 
+class CommonDictInterface;
+
+//! Plugin specific configuration
 class Settings {
   public:
-<<<<<<< HEAD
     //! \retrun value fo given key
     //! \param key
-    QString value(const QString key) const = 0;
+    virtual QString value(const QString key) const = 0;
 
     //! sets key to value
-    void setValue(const QString key, const QString value) = 0;
+    virtual void setValue(const QString key, const QString value) = 0;
 
     //! \return dict CommonDictInterface
-    CommonDictInterface type() const = 0;
+    virtual CommonDictInterface* type() const = 0;
 
     //! sets settings type to given dictionary
-    void setType(const CommonDictInterface) = 0;
-}
+    virtual void setType(const CommonDictInterface*) = 0;
+};
+
+
+#endif // SETTINGS_H
index a56fa11..bf0ce1a 100644 (file)
 *******************************************************************************/
 
 //Created by Bartosz Szatkowski
+
+#ifndef TRANSLATION_H
+#define TRANSLATION_H
+
 #include <QString>
 
+
 //! Keeping raw form of translation to be parsed only when needed
 class Translation {
   public:
     //! \return word to be translated
-    QString key() const = 0;
+    virtual QString key() const = 0;
+
     //! \returns dictionary information (plugin name, languages, <logo> etc)\
-    //!     to be displayed in translation table header
-    QString dictionaryInfo() const = 0;
+    //!    to be displayed in translation table header
+    virtual QString dictionaryInfo() const = 0;
 
     //! \return parsed raw format into html
-    QString toHtml() const = 0;
-}
+    virtual QString toHtml() const = 0;
+};
+
+#endif // TRANSLATION_H
diff --git a/trunk/src/plugins/xdxf/src/XdxfPlugin/TranslationXdxf.cpp b/trunk/src/plugins/xdxf/src/XdxfPlugin/TranslationXdxf.cpp
new file mode 100644 (file)
index 0000000..52274ec
--- /dev/null
@@ -0,0 +1,29 @@
+#include "TranslationXdxf.h"
+
+TranslationXdxf::TranslationXdxf() {
+}
+
+TranslationXdxf::TranslationXdxf(QString _key, QString _dictionaryInfo, XdxfPlugin *xdxfPlugin): _key(_key),_dictionaryInfo(_dictionaryInfo) {
+    this->xdxfPlugin=xdxfPlugin;
+}
+
+QString TranslationXdxf::key() const {
+    return _key;
+}
+
+QString TranslationXdxf::dictionaryInfo() const {
+    return _dictionaryInfo;
+}
+
+QString TranslationXdxf::toHtml() const {
+    return xdxfPlugin->search(_key);
+}
+
+void TranslationXdxf::setKey(QString _key) {
+    this->_key=_key;
+}
+
+void TranslationXdxf::setDictionaryInfo(QString _dictionaryInfo) {
+    this->_dictionaryInfo=_dictionaryInfo;
+}
+
diff --git a/trunk/src/plugins/xdxf/src/XdxfPlugin/TranslationXdxf.h b/trunk/src/plugins/xdxf/src/XdxfPlugin/TranslationXdxf.h
new file mode 100644 (file)
index 0000000..2df2965
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef TRANSLATIONXDXF_H
+#define TRANSLATIONXDXF_H
+
+#include <QString>
+#include "../../../../includes/translation.h"
+#include "xdxfplugin.h"
+
+class XdxfPlugin;
+
+class TranslationXdxf : public Translation
+{
+public:
+    TranslationXdxf();
+    TranslationXdxf(QString _key,QString _dictionaryInfo, XdxfPlugin *xdxfPlugin);
+
+    //! \return word to be translated
+    QString key() const;
+
+    //! \returns dictionary information (plugin name, languages, <logo> etc)\
+    //!    to be displayed in translation table header
+    QString dictionaryInfo() const;
+
+    //! \return parsed raw format into html
+    QString toHtml() const;
+
+    void setKey(QString);
+    void setDictionaryInfo(QString);
+
+
+private:
+    QString _key;
+    QString _dictionaryInfo;
+    XdxfPlugin *xdxfPlugin;
+
+};
+
+#endif // TRANSLATIONXDXF_H
+
index d4e8d38..90d1a61 100644 (file)
@@ -4,17 +4,20 @@
 #
 #-------------------------------------------------
 
-QT       += xml
+QT       += core xml gui
 
-QT       += gui
 
 TARGET = XdxfPlugin
-TEMPLATE = lib
+TEMPLATE = app
+
+SOURCES +=  \
+    xdxfplugin.cpp \
+    TranslationXdxf.cpp
 
-SOURCES += xdxfplugin.cpp
 
 HEADERS += \
     xdxfplugin.h \
     ../../../../includes/translation.h \
     ../../../../includes/settings.h \
-    ../../../../includes/CommonDictInterface.h
+    ../../../../includes/CommonDictInterface.h \
+    TranslationXdxf.h
index 82c3f63..d2f8a4b 100644 (file)
@@ -1,6 +1,121 @@
 #include "xdxfplugin.h"
+#include <QDebug>
+#include <QFile>
+#include <QXmlStreamReader>
 
+XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
+                    _langFrom(tr("")), _langTo(tr("")),_name(tr("")),
+                    _type(tr("xdxf")), _infoNote(tr("")) {
+}
+
+QString XdxfPlugin::langFrom() const {
+    return  _langFrom;
+}
+
+QString XdxfPlugin::langTo() const {
+    return  _langTo;
+}
+
+QString XdxfPlugin::name() const {
+    return  _name;
+}
+
+QString XdxfPlugin::type() const {
+    return _type;
+}
+
+QString XdxfPlugin::infoNote() const {
+    return  _infoNote;
+}
+
+void XdxfPlugin::searchWordList(QString word, int limit) {
+    QRegExp regWord(word);
+    QList<Translation*> translations;
+    regWord.setPatternSyntax(QRegExp::Wildcard);
+    QFile dictionaryFile(path);
+    if(!dictionaryFile.open(QFile::ReadOnly | QFile::Text)) {
+        return; //blad otwarcia pliku
+    }
+    QXmlStreamReader dictionaryReader(&dictionaryFile);
+    dictionaryReader.readNextStartElement();
+    if(dictionaryReader.name()=="xdxf") {
+      if(dictionaryReader.attributes().hasAttribute("lang_from"))
+        _langFrom = dictionaryReader.attributes().value("lang_from").toString();
+      if(dictionaryReader.attributes().hasAttribute("lang_to"))
+        _langTo = dictionaryReader.attributes().value("lang_to").toString();
+    }
+    dictionaryReader.readNextStartElement();
+    if(dictionaryReader.name()=="full_name")
+        _name=dictionaryReader.readElementText();
+    dictionaryReader.readNextStartElement();
+    if(dictionaryReader.name()=="description")
+        _infoNote=dictionaryReader.readElementText();
+    QString a;
+    int i=0;
+    while(!dictionaryReader.atEnd() && !stopped){
+        dictionaryReader.readNextStartElement();
+        if(dictionaryReader.name()=="ar"){
+            while(dictionaryReader.name()!="k" && !dictionaryReader.atEnd())
+                dictionaryReader.readNextStartElement();
+            a = dictionaryReader.readElementText();
+            if(regWord.exactMatch(a) && i<limit) {
+                translations.append(new TranslationXdxf(a,_infoNote,this));
+                i++;
+                if(i>=limit)
+                    break;
+            }
+        }
+    }
+    stopped=false;
+    emit finalTranslation(translations);
+    dictionaryFile.close();
+}
 
-XdxfPlugin::XdxfPlugin()
-{
+QString XdxfPlugin::search(QString key) {
+    QFile dictionaryFile(path);
+    if(!dictionaryFile.open(QFile::ReadOnly | QFile::Text)) {
+        return ""; //blad otwarcia pliku
+    }
+    QXmlStreamReader dictionaryReader(&dictionaryFile);
+
+    QString a;
+    bool match =false;
+    while (!dictionaryReader.atEnd()) {
+        dictionaryReader.readNext();
+        if(dictionaryReader.tokenType() == QXmlStreamReader::StartElement) {
+            if(dictionaryReader.name()=="k") {
+                a = dictionaryReader.readElementText();
+                if(a==key)
+                    match = true;
+            }
+        }
+        else if(dictionaryReader.tokenType() == QXmlStreamReader::Characters)
+            if(match) {
+                dictionaryFile.close();
+                return dictionaryReader.text().toString().replace("\n","");
+
+            }
+    }
+    return "";
+}
+
+void XdxfPlugin::stop() {
+    stopped=true;
 }
+
+QDialog* XdxfPlugin::loadDialog() {
+     path="dict.xdxf";
+}
+
+QDialog* XdxfPlugin::settingsDialog() {
+    ;
+}
+
+CommonDictInterface* XdxfPlugin::getNew(const Settings*) const {
+    ;
+}
+
+bool XdxfPlugin::isAvailable() const {
+    return true;
+}
+
index 665ce5a..74fe7f2 100644 (file)
@@ -1,11 +1,76 @@
 #ifndef XDXFPLUGIN_H
 #define XDXFPLUGIN_H
 
-//#include "XdxfPlugin_global.h"
+#include "../../../../includes/CommonDictInterface.h"
+#include <QObject>
+#include <QDialog>
+#include <QRegExp>
+#include "TranslationXdxf.h"
 
-class XdxfPlugin {
+class XdxfPlugin : public CommonDictInterface
+{
+    Q_OBJECT
+    Q_INTERFACES(CommonDictInterface)
 public:
-    XdxfPlugin();
+    XdxfPlugin(QObject *parent=0);
+
+    //! returns source language code iso 639-2
+    QString langFrom() const;
+
+    //! returns destination language code iso 639-2
+    QString langTo() const;
+
+    //! returns dictionary name (like "old english" or so
+    QString name() const;
+
+    //! returns dictionary type (xdxf, google translate, etc)
+    QString type() const;
+
+    //! returns information about dictionary in html (name, authors, etc)
+    QString infoNote() const;
+
+    //! return dialog that creates new dictionary and fills necesary options
+    //! QDialog should returns Setting* object after being showed
+    QDialog* loadDialog();
+
+    //! return dialog with dictionary settings
+    QDialog* settingsDialog();
+
+    //! return new, clean copy of plugin with setting set as in Settings*
+    CommonDictInterface* getNew(const Settings*) const;
+
+    //! returns whether plugin can start searching
+    bool isAvailable() const;
+
+    QString search(QString key);
+
+public Q_SLOTS:
+    /*! performs search in dictionary
+      \param  word word to search in dictionary
+      \param limit limit on number of results
+
+      After finishing search it have to emit
+      \see CommonDictInterface:finalTranslation  finalTranslation
+    */
+
+    void searchWordList(QString word, int limit);
+
+    //! stop current operation
+    void stop();
+
+private:
+    bool isCached();
+    QString _langFrom;
+    QString _langTo;
+    QString _name;
+    QString _type;
+    QString _infoNote;
+    QDialog *_loadDialog;
+    QDialog *_settingsDialog;
+    QString path;
+    bool stopped;   /*volatile*/
 };
 
 #endif // XDXFPLUGIN_H
+
+