]> Git trees. - libqmvoc.git/commitdiff
Port of the Vokabeln import filter.
authorPeter Hedlund <peter@peterandlinda.com>
Tue, 20 Feb 2007 23:30:42 +0000 (23:30 +0000)
committerPeter Hedlund <peter@peterandlinda.com>
Tue, 20 Feb 2007 23:30:42 +0000 (23:30 +0000)
svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=635807

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

index 77fe3f1cc310f78467fec8b77bb19895bff6f883..56ab42848f6e82cd4406f652d1eb192fb1901919 100644 (file)
@@ -9,6 +9,7 @@ set(kdeeducore_LIB_SRCS
    keduvockvtmlwriter.cpp
    keduvocmultiplechoice.cpp
    keduvocpaukerreader.cpp
+   keduvocvokabelnreader.cpp
    keduvocwqlreader.cpp
    keduvocwqlwriter.cpp
    leitnerbox.cpp
@@ -41,6 +42,7 @@ install(FILES
    keduvockvtmlwriter.h
    keduvocmultiplechoice.h
    keduvocpaukerreader.h
+   keduvocvokabelnreader.h
    keduvocwqlreader.h
    keduvocwqlwriter.h
    leitnerbox.h
index 6dbb0999d5ffc07f9ac65dccda5511405068ff7a..8c13b7ef071011557a2504bf7cfa2b460ed8759b 100644 (file)
@@ -36,6 +36,7 @@
 #include "keduvocwqlwriter.h"
 #include "keduvocwqlreader.h"
 #include "keduvocpaukerreader.h"
+#include "keduvocvokabelnreader.h"
 #include "leitnersystem.h"
 
 /**@todo possibly implement
@@ -164,6 +165,9 @@ KEduVocDocument::FileType KEduVocDocument::detectFileType(const QString &fileNam
   if (line == WQL_IDENT)
     return wql;
 
+  if (c1 == '"' && (line.contains('"') == 1 || line.contains(QRegExp("\",[0-9]"))))
+    return vokabeln;
+
   if (line.indexOf(VCB_SEPARATOR) >= 0)
     return vt_vcb;
 
@@ -224,6 +228,16 @@ bool KEduVocDocument::open(const KUrl& url, bool /*append*/)
           if (!read)
             errorMessage = paukerReader.errorMessage();
         }
+        break;
+
+        case vokabeln:
+        {
+          KEduVocVokabelnReader vokabelnReader(f);
+          read = vokabelnReader.readDoc(this);
+          if (!read)
+            errorMessage = vokabelnReader.errorMessage();
+        }
+        break;
 
         case vt_lex:
         {
index ad2a683f032d531fbc29f26ab1a790a6da160b60..f9f2d5df2bddbf814cf58ce67a291408abc85ffd 100644 (file)
@@ -261,13 +261,16 @@ class KDEEDUCORE_EXPORT KEduVocDocument : public QObject
 
  public:
 
-  enum FileType { kvd_none, 
+  enum FileType { kvd_none,
                   automatic,
                   kvtml,
                   wql,
                   pauker,
+                  vokabeln,
                   kvtbin,
-                  vt_lex, vt_vcb, csv /*, kvoclearn, qvocab*/ };
+                  vt_lex,
+                  vt_vcb,
+                  csv };
 
   /**
    * Constructor for a KdeEdu vocabulary document
diff --git a/kdeeducore/keduvocvokabelnreader.cpp b/kdeeducore/keduvocvokabelnreader.cpp
new file mode 100644 (file)
index 0000000..9580a5b
--- /dev/null
@@ -0,0 +1,154 @@
+/***************************************************************************
+
+                   create a KEduVocDocument from a Vokabeln file
+
+    -----------------------------------------------------------------------
+
+    begin        : Wed Jun 15 19:32:00 PDT 2005
+
+    copyright    : (C) 2005, 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 <klocale.h>
+#include <kapplication.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+
+#include "keduvocdocument.h"
+
+#include "keduvocvokabelnreader.h"
+
+KEduVocVokabelnReader::KEduVocVokabelnReader(QIODevice *file)
+{
+  // the file must be already open
+  m_inputFile = file;
+  m_errorMessage = "";
+}
+
+
+bool KEduVocVokabelnReader::readDoc(KEduVocDocument *doc)
+{
+  m_doc = doc;
+
+  m_doc->setAuthor("http://www.vokabeln.de");
+
+  QTextStream inputStream(m_inputFile);
+  inputStream.setCodec("ISO-8851-1");
+  inputStream.setAutoDetectUnicode(false);
+  inputStream.seek(0);
+
+  QString title,
+          lang1,
+          lang2,
+          expression,
+          original,
+          translation,
+          lessonDescr,
+          temp;
+
+  int     i,
+          wordCount,
+          lesson;
+
+  int lines = 10000;
+
+  QStringList titles,
+              languages,
+              words,
+              lessonDescriptions;
+
+  bool keepGoing = true;
+
+  while (keepGoing)
+  {
+    temp = inputStream.readLine();
+    keepGoing = !(temp.indexOf("\",") > 0);
+    title.append(temp);
+    if (keepGoing)
+      title.append(" ");
+  }
+
+  titles = title.split("\",");
+  m_doc->setTitle(titles[0].mid(1));
+  wordCount = titles[1].section(',', 0, 0).toInt();
+
+  inputStream.readLine();
+  inputStream.readLine();
+
+  lang1 = inputStream.readLine();
+  languages = lang1.split("\",");
+
+  m_doc->appendIdentifier(languages[0].mid(1));
+  m_doc->appendIdentifier(languages[1].mid(1));
+
+  keepGoing = true;
+  while (keepGoing)
+    keepGoing = !(inputStream.readLine().indexOf("8. Lernhilfe") > 0); //DO NOT translate
+
+  for (i = 0; i <= 14; i++)
+    inputStream.readLine();
+
+  for (i = 0; i < wordCount - 1; i++)
+  {
+    int c = 0;
+    expression.resize(0);
+
+    while (c < 2)
+    {
+      temp = inputStream.readLine();
+      c+= temp.count("\",", Qt::CaseSensitive);
+      expression.append(temp);
+      if (c < 2)
+        expression.append(" ");
+    }
+
+    words = expression.split("\",");
+    original = words[0].mid(1);
+    translation = words[1].mid(1);
+    lesson = words[2].toInt();
+
+    KEduVocExpression kve;
+    kve.setOriginal(original);
+    kve.setGrade(1, 0, false);
+    kve.setGrade(1, 0, true);
+    kve.setLesson(lesson);
+    kve.addTranslation(translation);
+
+    m_doc->appendEntry(&kve);
+
+    inputStream.readLine();
+    inputStream.readLine();
+  }
+
+  inputStream.readLine();
+  inputStream.readLine();
+  inputStream.readLine();
+
+  for (int i = 0; !inputStream.atEnd() && i < lines; i++)
+  {
+    lessonDescr = inputStream.readLine();
+    lessonDescr = lessonDescr.mid(1, lessonDescr.length() - 2);
+    if (!lessonDescr.isEmpty())
+      lessonDescriptions.append(lessonDescr);
+    else
+      break;
+    inputStream.readLine();
+  }
+
+  if (lessonDescriptions.count() > 0)
+    m_doc->setLessonDescriptions(lessonDescriptions);
+
+  return true;
+}
diff --git a/kdeeducore/keduvocvokabelnreader.h b/kdeeducore/keduvocvokabelnreader.h
new file mode 100644 (file)
index 0000000..2744311
--- /dev/null
@@ -0,0 +1,42 @@
+/***************************************************************************
+                     create a KEduVocDocument from a Vokabeln 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 KEDUVOCVOKABELNREADER_H
+#define KEDUVOCVOKABELNREADER_H
+
+#include <libkdeedu_core_export.h>
+
+#include <QIODevice>
+
+class KEduVocDocument;
+
+class KDEEDUCORE_EXPORT KEduVocVokabelnReader : public QObject
+{
+public:
+  KEduVocVokabelnReader(QIODevice *file);
+
+  bool readDoc(KEduVocDocument *doc);
+
+  QString errorMessage() const {return m_errorMessage;};
+
+private:
+  QIODevice *m_inputFile;
+  KEduVocDocument *m_doc;
+  QString m_errorMessage;
+};
+
+#endif