keduvockvtmlreader.cpp
keduvockvtmlwriter.cpp
keduvocmultiplechoice.cpp
+ keduvocpaukerreader.cpp
keduvocwqlreader.cpp
keduvocwqlwriter.cpp
leitnerbox.cpp
keduvockvtmlreader.h
keduvockvtmlwriter.h
keduvocmultiplechoice.h
+ keduvocpaukerreader.h
keduvocwqlreader.h
keduvocwqlwriter.h
leitnerbox.h
#include <QList>
#include <QTextStream>
#include <QtAlgorithms>
+#include <QIODevice>
#include <klocale.h>
#include <kdebug.h>
#include <kmessagebox.h>
#include <kio/netaccess.h>
#include <krandomsequence.h>
+#include <kfilterdev.h>
#include "keduvockvtmlwriter.h"
#include "keduvockvtmlreader.h"
#include "keduvocwqlwriter.h"
#include "keduvocwqlreader.h"
+#include "keduvocpaukerreader.h"
#include "leitnersystem.h"
/**@todo possibly implement
KEduVocDocument::FileType KEduVocDocument::detectFileType(const QString &fileName)
{
- QFile f(fileName);
- if (!f.open(QIODevice::ReadOnly))
+ QIODevice * f = KFilterDev::deviceForFile(fileName);
+ //QFile f(fileName);
+ if (!f->open(QIODevice::ReadOnly))
return csv;
- QDataStream is(&f);
+ QDataStream is(f);
qint8 c1, c2, c3, c4, c5;
is >> c1
>> c4
>> c5; // guess filetype by first x bytes
- QTextStream ts(&f);
+ QTextStream ts(f);
QString line;
+ QString line2;
+
line = ts.readLine();
+ if (!ts.atEnd())
+ line2 = ts.readLine();
line.prepend(c5);
line.prepend(c4);
line.prepend(c3);
if (!is.device()->isOpen())
return kvd_none;
- f.close();
- if (c1 == '<' && c2 == '?' && c3 == 'x' && c4 == 'm' && c5 == 'l')
- return kvtml;
-
+ f->close();
+ if (c1 == '<' && c2 == '?' && c3 == 'x' && c4 == 'm' && c5 == 'l') {
+ if (line2.indexOf("pauker", 0) > 0)
+ return pauker;
+ else
+ return kvtml;
+ }
if (line == WQL_IDENT)
return wql;
QString temporaryFile;
if (KIO::NetAccess::download(url, temporaryFile, 0))
{
+ ///@todo We need to work with the QIODevice directly for the compressed Pauker files
+ //QIODevice * fDev = KFilterDev::deviceForFile(temporaryFile);
QFile f(temporaryFile);
if (!f.open(QIODevice::ReadOnly))
{
}
break;
+ case pauker:
+ {
+ KEduVocPaukerReader paukerReader(&f);
+ read = paukerReader.readDoc(this);
+ if (!read)
+ errorMessage = paukerReader.errorMessage();
+ }
+
case vt_lex:
{
QTextStream is (&f);
public:
- enum FileType { kvd_none, automatic,
+ enum FileType { kvd_none,
+ automatic,
kvtml,
wql,
+ pauker,
kvtbin,
vt_lex, vt_vcb, csv /*, kvoclearn, qvocab*/ };
--- /dev/null
+/***************************************************************************
+ create a KEduVocDocument from a Pauker file
+ -----------------------------------------------------------------------
+ copyright : (C) 2004, 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 "keduvocpaukerreader.h"
+#include "keduvocexpression.h"
+#include "keduvocdocument.h"
+
+/*
+PaukerDataItem::PaukerDataItem()
+{
+}
+
+PaukerDataItem::PaukerDataItem(QDomElement &entry)
+{
+ domElement = entry;
+}
+
+PaukerDataItem::~PaukerDataItem()
+{
+}
+
+QString PaukerDataItem::frontSide() const
+{
+ return getText("FrontSide");
+}
+
+QString PaukerDataItem::backSide() const
+{
+ return getText("BackSide");
+}
+
+QString PaukerDataItem::getText(const QString &tagName) const
+{
+ if(!domElement.isNull()) {
+
+ QDomNodeList list = domElement.elementsByTagName(tagName);
+
+ if(list.count() > 0) {
+
+ QDomElement element = list.item(0).toElement();
+
+ if(!element.isNull()) {
+ return element.text();
+ }
+ else
+ return QString::null;
+ }
+ else
+ return QString::null;
+ }
+ else
+ return QString::null;
+}
+
+PaukerData::PaukerData()
+{
+ document = new QDomDocument();
+}
+
+PaukerDataItemList PaukerData::parse(const QString &fileName)
+{
+ PaukerDataItemList list;
+
+ QIODevice * file = KFilterDev::deviceForFile(fileName);
+ document->setContent(file);
+
+ QDomNodeList entries = document->elementsByTagName("Card");
+
+ // loop through the "Card" tags looking for data
+ for(uint i = 0 ; i < entries.count() ; i++) {
+
+ // get an entry to operate on
+ QDomElement entry = entries.item(i).toElement();
+
+ // if the "node" is in fact an element -- i.e. not null
+ if(!entry.isNull()) {
+ PaukerDataItem item(entry);
+ list.append(item);
+ }
+ }
+ delete file;
+ return list;
+}
+*/
+KEduVocPaukerReader::KEduVocPaukerReader(QFile * file)
+{
+ // the file must be already open
+ m_inputFile = file;
+ m_errorMessage = "";
+}
+
+
+bool KEduVocPaukerReader::readDoc(KEduVocDocument * doc)
+{
+ m_doc = doc;
+ QString front;
+ QString back;
+
+ QDomDocument domDoc("Pauker");
+ if (!domDoc.setContent(m_inputFile, &m_errorMessage))
+ return false;
+
+ QDomNodeList entries = domDoc.elementsByTagName("Card");
+
+ if (entries.count() <= 0) {
+ m_errorMessage = i18n("Error while reading file");
+ return false;
+ }
+
+ for (int i = 0; entries.count() - 1; i++) {
+ QDomElement entry = entries.at(i).toElement();
+ if(!entry.isNull()) {
+ front = cardText(entry, "FrontSide");
+ back = cardText(entry, "BackSide");
+ KEduVocExpression expr = KEduVocExpression(front);
+ expr.setTranslation(1, back);
+ m_doc->appendEntry(&expr);
+ }
+ }
+}
+
+
+QString KEduVocPaukerReader::cardText(const QDomElement & entry, const QString & tagName) const
+{
+ QDomNodeList list = entry.elementsByTagName(tagName);
+
+ if(list.count() > 0) {
+ QDomElement element = list.item(0).toElement();
+
+ if(!element.isNull()) {
+ return element.text();
+ }
+ else
+ return QString::null;
+ }
+ else
+ return QString::null;
+
+}
+
+
--- /dev/null
+/***************************************************************************
+ create a KEduVocDocument from a Pauker file
+ -----------------------------------------------------------------------
+ copyright : (C) 2004, 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 KEDUVOCPAUKERREADER_H
+#define KEDUVOCPAUKERREADER_H
+
+#include <libkdeedu_core_export.h>
+
+#include <QtXml>
+#include <QFile>
+
+class KEduVocDocument;
+
+class KDEEDUCORE_EXPORT KEduVocPaukerReader : public QObject
+{
+public:
+ KEduVocPaukerReader(QFile *file);
+
+ bool readDoc(KEduVocDocument *doc);
+
+ QString errorMessage() const {return m_errorMessage;};
+private:
+ QString cardText(const QDomElement &entry, const QString &tagName) const;
+
+ QFile *m_inputFile;
+ KEduVocDocument *m_doc;
+ QString m_errorMessage;
+};
+/*
+class PaukerDataItem
+{
+public:
+ PaukerDataItem();
+ PaukerDataItem(QDomElement &entry);
+ virtual ~PaukerDataItem();
+
+ QString frontSide() const;
+ QString backSide() const;
+
+protected:
+ QString getText(const QString &tagName) const;
+
+private:
+ QDomElement domElement;
+};
+
+typedef QValueList<PaukerDataItem> PaukerDataItemList;
+
+class PaukerData
+{
+public:
+ PaukerData();
+ PaukerDataItemList parse(const QString &fileName);
+ int colWidth(int col);
+ int numRows();
+ QString language(int col);
+
+private:
+ QDomDocument* document;
+};
+*/
+#endif