From be7713797319accda3a9e26a2dc285ca6aca77b9 Mon Sep 17 00:00:00 2001 From: Peter Hedlund Date: Tue, 20 Feb 2007 23:30:42 +0000 Subject: [PATCH] Port of the Vokabeln import filter. svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=635807 --- kdeeducore/CMakeLists.txt | 2 + kdeeducore/keduvocdocument.cpp | 14 +++ kdeeducore/keduvocdocument.h | 7 +- kdeeducore/keduvocvokabelnreader.cpp | 154 +++++++++++++++++++++++++++ kdeeducore/keduvocvokabelnreader.h | 42 ++++++++ 5 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 kdeeducore/keduvocvokabelnreader.cpp create mode 100644 kdeeducore/keduvocvokabelnreader.h diff --git a/kdeeducore/CMakeLists.txt b/kdeeducore/CMakeLists.txt index 77fe3f1..56ab428 100644 --- a/kdeeducore/CMakeLists.txt +++ b/kdeeducore/CMakeLists.txt @@ -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 diff --git a/kdeeducore/keduvocdocument.cpp b/kdeeducore/keduvocdocument.cpp index 6dbb099..8c13b7e 100644 --- a/kdeeducore/keduvocdocument.cpp +++ b/kdeeducore/keduvocdocument.cpp @@ -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: { diff --git a/kdeeducore/keduvocdocument.h b/kdeeducore/keduvocdocument.h index ad2a683..f9f2d5d 100644 --- a/kdeeducore/keduvocdocument.h +++ b/kdeeducore/keduvocdocument.h @@ -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 index 0000000..9580a5b --- /dev/null +++ b/kdeeducore/keduvocvokabelnreader.cpp @@ -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 + + ----------------------------------------------------------------------- + + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 +#include +#include +#include + +#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 index 0000000..2744311 --- /dev/null +++ b/kdeeducore/keduvocvokabelnreader.h @@ -0,0 +1,42 @@ +/*************************************************************************** + create a KEduVocDocument from a Vokabeln file + ----------------------------------------------------------------------- + copyright : (C) 2007 Peter Hedlund + + + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 + +#include + +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 -- 2.47.3