]> Git trees. - libqmvoc.git/commitdiff
An import filter for the XML Dictionary Exchange Format (http://xdxf.sf.net). Works...
authorPeter Hedlund <peter@peterandlinda.com>
Fri, 23 Mar 2007 19:01:03 +0000 (19:01 +0000)
committerPeter Hedlund <peter@peterandlinda.com>
Fri, 23 Mar 2007 19:01:03 +0000 (19:01 +0000)
svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=645864

kdeeducore/CMakeLists.txt
kdeeducore/keduvocdocument.cpp
kdeeducore/keduvocdocument.h
kdeeducore/keduvockvtmlreader.cpp
kdeeducore/keduvocxdxfreader.cpp [new file with mode: 0644]
kdeeducore/keduvocxdxfreader.h [new file with mode: 0644]

index 22e5e4bab435c48aa53f9be4fd9321e9785939ac..ff93e1fb5162d52b4afaf4e0bded6eeb3b40511d 100644 (file)
@@ -13,6 +13,7 @@ set(kdeeducore_LIB_SRCS
    keduvocpaukerreader.cpp
    keduvocvokabelnreader.cpp
    keduvocwqlreader.cpp
+   keduvocxdxfreader.cpp
    leitnerbox.cpp
    leitnersystem.cpp
    leitnersystemview.cpp
index a890ebe66a645c5c0a58f60d28fcfdc7d7f9ee59..3fa6b840b90f11c786ade4bb72a936fdca344f01 100644 (file)
@@ -38,6 +38,7 @@
 #include "keduvocwqlreader.h"
 #include "keduvocpaukerreader.h"
 #include "keduvocvokabelnreader.h"
+#include "keduvocxdxfreader.h"
 #include "leitnersystem.h"
 
 class KEduVocDocument::Private
@@ -217,6 +218,8 @@ KEduVocDocument::FileType KEduVocDocument::detectFileType(const QString &fileNam
   if (c1 == '<' && c2 == '?' && c3 == 'x' && c4 == 'm' && c5 == 'l') {
     if (line2.indexOf("pauker", 0) >  0)
       return pauker;
+    else if (line2.indexOf("xdxf", 0) >  0)
+      return xdxf;
     else
       return kvtml;
   }
@@ -302,6 +305,15 @@ bool KEduVocDocument::open(const KUrl& url)
         }
         break;
 
+        case xdxf:
+        {
+          KEduVocXdxfReader xdxfReader(f);
+          read = xdxfReader.readDoc(this);
+          if (!read)
+            errorMessage = xdxfReader.errorMessage();
+        }
+        break;
+
         default:
         {
           KEduVocKvtmlReader kvtmlReader(f);
@@ -1405,6 +1417,7 @@ QString KEduVocDocument::pattern(Mode mode)
     { true, false, "*.wql", I18N_NOOP("KWordQuiz Document") },
     { true, false, "*.xml.qz *.pau.gz", I18N_NOOP("Pauker Lesson") },
     { true, false, "*.voc", I18N_NOOP("Vokabeltrainer") },
+    { true, false, "*.xdxf", I18N_NOOP("XML Dictionary Exchange Format") },
     { true, true, "*.csv", I18N_NOOP("Text") },
     // last is marker for the end, do not remove it
     { false, false, 0, 0 }
index 117604c91b6f56b2bd22e2cc750700bd67eb32ef..db9d2bd21f3d896916372cb09a68d134ffe0fd41 100644 (file)
@@ -56,6 +56,7 @@ public:
                   wql,
                   pauker,
                   vokabeln,
+                  xdxf,
                   csv };
 
   /**
index b962a312fb965f20d22163224c05fcac280c10cf..c4fb888e59239ed7a90dc544bcb72b65eebaf863 100644 (file)
@@ -50,7 +50,7 @@ bool KEduVocKvtmlReader::readDoc(KEduVocDocument *doc)
   QDomElement domElementKvtml = domDoc.documentElement();
   if (domElementKvtml.tagName() != KV_DOCTYPE)
   {
-    m_errorMessage = i18n("Tag <%1> was expected but tag <%2> was found.", QString(KV_DOCTYPE), domElementKvtml.tagName());
+    m_errorMessage = i18n("This is not a KDE Vocabulary document.");
     return false;
   }
 
diff --git a/kdeeducore/keduvocxdxfreader.cpp b/kdeeducore/keduvocxdxfreader.cpp
new file mode 100644 (file)
index 0000000..7a1d8d7
--- /dev/null
@@ -0,0 +1,94 @@
+/***************************************************************************
+                     create a KEduVocDocument from a XDXF file
+    -----------------------------------------------------------------------
+    copyright     : (C) 2007 Peter Hedlund <peter.hedlund@kdemail.net>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#include <QIODevice>
+
+#include <klocale.h>
+
+#include "keduvocxdxfreader.h"
+#include "keduvocexpression.h"
+#include "keduvocdocument.h"
+
+KEduVocXdxfReader::KEduVocXdxfReader(QIODevice * file)
+{
+  // the file must be already open
+  m_inputFile = file;
+  m_errorMessage = "";
+}
+
+
+bool KEduVocXdxfReader::readDoc(KEduVocDocument * doc)
+{
+  m_doc = doc;
+  QString front;
+  QString back;
+
+  QDomDocument domDoc("XDXF");
+  if (!domDoc.setContent(m_inputFile, &m_errorMessage))
+    return false;
+
+  if (domDoc.doctype().name() != "xdxf") {
+    m_errorMessage = i18n("This is not a XDXF document");
+    return false;
+  }
+
+  QDomElement description = domDoc.documentElement().firstChildElement("description");
+  if(!description.isNull())
+    m_doc->setDocumentRemark(description.text());
+
+  QDomElement title = domDoc.documentElement().firstChildElement("full_name");
+  if(!title.isNull())
+    m_doc->setTitle(title.text());
+
+  ///The language attributes are required and should be ISO 639-2 codes, but you never know...
+  QDomAttr id1 = domDoc.documentElement().attributeNode("lang_from");
+  if(!id1.isNull())
+    m_doc->appendIdentifier(id1.value().toLower());
+  else
+    m_doc->appendIdentifier(i18n("Original"));
+
+  QDomAttr id2 = domDoc.documentElement().attributeNode("lang_to");
+  if(!id2.isNull())
+    m_doc->appendIdentifier(id2.value().toLower());
+  else
+    m_doc->appendIdentifier(i18n("Translation"));
+
+  QDomNodeList entries = domDoc.elementsByTagName("ar");
+
+  if (entries.count() <= 0) {
+    m_errorMessage = i18n("Error while reading file");
+    return false;
+  }
+
+  m_doc->setAuthor("http://xdxf.sf.net");
+
+  for (int i = 0; i < entries.count(); i++) {
+    QDomNode entry = entries.at(i);
+    if(!entry.isNull()) {
+      QDomElement from = entry.firstChildElement("k");
+      if(!from.isNull())
+        front = from.text();
+      else
+        front = QString(); 
+
+      back = entry.toElement().lastChild().toText().data();
+      KEduVocExpression expr = KEduVocExpression(front);
+      expr.setTranslation(1, back);
+      m_doc->appendEntry(&expr);
+    }
+  }
+  return true;
+}
diff --git a/kdeeducore/keduvocxdxfreader.h b/kdeeducore/keduvocxdxfreader.h
new file mode 100644 (file)
index 0000000..8ce45dd
--- /dev/null
@@ -0,0 +1,40 @@
+/***************************************************************************
+                  create a KEduVocDocument from a XDXF file
+    -----------------------------------------------------------------------
+    copyright     : (C) 2007 Peter Hedlund <peter.hedlund@kdemail.net>
+
+ ***************************************************************************/
+
+/***************************************************************************
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) any later version.                                   *
+ *                                                                         *
+ ***************************************************************************/
+
+#ifndef KEDUVOCXDXFREADER_H
+#define KEDUVOCXDXFREADER_H
+
+#include <QtXml>
+
+class QIODevice;
+class KEduVocDocument;
+
+class KEduVocXdxfReader : public QObject
+{
+public:
+  KEduVocXdxfReader(QIODevice *file);
+
+  bool readDoc(KEduVocDocument *doc);
+
+  QString errorMessage() const {return m_errorMessage;};
+
+private:
+  QIODevice *m_inputFile;
+  KEduVocDocument *m_doc;
+  QString m_errorMessage;
+};
+
+#endif