From 66b9ddbba32bbd80f34bc7a5715387f6e57c70a2 Mon Sep 17 00:00:00 2001 From: Peter Hedlund Date: Wed, 21 Feb 2007 23:46:37 +0000 Subject: [PATCH] Cleanup and work on the kvtml reader svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=636119 --- kdeeducore/keduvoccsvreader.cpp | 1 + kdeeducore/keduvocdocument.cpp | 11 +- kdeeducore/keduvocdocument.h | 29 +---- kdeeducore/keduvockvtmlreader.cpp | 194 ++++++++++++++---------------- kdeeducore/keduvockvtmlreader.h | 3 + 5 files changed, 101 insertions(+), 137 deletions(-) diff --git a/kdeeducore/keduvoccsvreader.cpp b/kdeeducore/keduvoccsvreader.cpp index 4c644a1..a7b2414 100644 --- a/kdeeducore/keduvoccsvreader.cpp +++ b/kdeeducore/keduvoccsvreader.cpp @@ -42,6 +42,7 @@ bool KEduVocCsvReader::readDoc(KEduVocDocument *doc) { m_doc = doc; + ///@todo handle more delimiters QString separator = QString(","); QTextStream inputStream(m_inputFile); diff --git a/kdeeducore/keduvocdocument.cpp b/kdeeducore/keduvocdocument.cpp index 90ff461..dd96fd4 100644 --- a/kdeeducore/keduvocdocument.cpp +++ b/kdeeducore/keduvocdocument.cpp @@ -106,8 +106,6 @@ void KEduVocDocument::Init () m_vocabulary.clear(); m_dirty = false; m_sortingEnabled = true; - m_unknownAttribute = false; - m_unknownElement = false; m_sortLesson = false; setCurrentLesson (0); m_queryorg = ""; @@ -117,6 +115,7 @@ void KEduVocDocument::Init () m_author = ""; m_remark = ""; m_version = ""; + m_generator = ""; m_font = NULL; m_activeLeitnerSystem = false; @@ -203,6 +202,8 @@ bool KEduVocDocument::open(const KUrl& url, bool /*append*/) { KEduVocKvtmlReader kvtmlReader(f); read = kvtmlReader.readDoc(this); + if (!read) + errorMessage = kvtmlReader.errorMessage(); } break; @@ -246,16 +247,14 @@ bool KEduVocDocument::open(const KUrl& url, bool /*append*/) { KEduVocKvtmlReader kvtmlReader(f); read = kvtmlReader.readDoc(this); + if (!read) + errorMessage = kvtmlReader.errorMessage(); } } QApplication::restoreOverrideCursor(); if (!read) { - if (m_unknownAttribute || m_unknownElement ) { - Init(); - return false; - } QString msg = i18n("Could not open \"%1\"\nDo you want to try again?\n(Error reported: %2)", url.path(), errorMessage); int result = KMessageBox::warningContinueCancel(0, msg, i18n("Error Opening File"), KGuiItem(i18n("&Retry"))); if (result == KMessageBox::Cancel) { diff --git a/kdeeducore/keduvocdocument.h b/kdeeducore/keduvocdocument.h index 9f45602..3e15fe9 100644 --- a/kdeeducore/keduvocdocument.h +++ b/kdeeducore/keduvocdocument.h @@ -250,7 +250,6 @@ class KDEEDUCORE_EXPORT KEduVocDocument : public QObject Q_OBJECT friend class KEduVocKvtmlWriter; friend class KEduVocKvtmlReader; - friend class KEduVocWqlReader; public: @@ -745,37 +744,11 @@ protected: */ void setVersion(const QString & ver); - /* TODO - bool saveToLex (QTextStream& os, QString &title); - bool loadFromLex (QTextStream& is); - bool loadLessonLex (QTextStream& is); - bool saveLessonLex (QTextStream& os); - bool saveTypeNameLex (QTextStream& os); - bool loadTypeNameLex (QTextStream& is); - - bool saveToCsv (QTextStream& os, QString &title); - bool loadFromCsv (QTextStream& is); - bool loadLessonCsv (QTextStream& is); - bool saveLessonCsv (QTextStream& os); - bool saveTypeNameCsv (QTextStream& os); - bool loadTypeNameCsv (QTextStream& is); - - bool saveTypeNameVcb (QTextStream &os); - bool loadTypeNameVcb (QTextStream &is); - bool saveLessonVcb (QTextStream &os); - bool loadLessonVcb (QTextStream &is); - bool saveToVcb (QTextStream& os, QString &title); - bool loadFromVcb (QTextStream& is); - void errorVcb (int line, const QString &text ); - */ - - private: +private: bool m_dirty; KUrl m_url; QList m_sortIdentifier; bool m_sortLesson; - bool m_unknownAttribute; - bool m_unknownElement; bool m_sortingEnabled; // save these to document diff --git a/kdeeducore/keduvockvtmlreader.cpp b/kdeeducore/keduvockvtmlreader.cpp index 4d306b5..e7a0180 100644 --- a/kdeeducore/keduvockvtmlreader.cpp +++ b/kdeeducore/keduvockvtmlreader.cpp @@ -31,6 +31,97 @@ KEduVocKvtmlReader::KEduVocKvtmlReader(QIODevice *file) { // the file must be already open m_inputFile = file; + m_errorMessage = ""; +} + + +bool KEduVocKvtmlReader::readDoc(KEduVocDocument *doc) +{ + m_doc = doc; + m_doc->m_cols = 0; + m_doc->m_lines = 0; + + QDomDocument domDoc("Kvtml"); + + if (!domDoc.setContent(m_inputFile, &m_errorMessage)) + return false; + + QDomElement domElementKvtml = domDoc.documentElement(); + if( domElementKvtml.tagName() != KV_DOCTYPE ) + { + domError(i18n("Tag <%1> was expected " + "but tag <%2> was read." , QString(KV_DOCTYPE), domElementKvtml.tagName())); + return false; + } + + //------------------------------------------------------------------------- + // Attributes + //------------------------------------------------------------------------- + + QDomAttr domAttrEncoding = domElementKvtml.attributeNode(KV_ENCODING); + if (!domAttrEncoding.isNull()) + { + // TODO handle old encodings + // Qt DOM API autodetects encoding, so is there anything to do ? + } + + QDomAttr domAttrTitle = domElementKvtml.attributeNode(KV_TITLE); + if (!domAttrTitle.isNull()) + { + m_doc->m_title = domAttrTitle.value(); + } + + QDomAttr domAttrAuthor = domElementKvtml.attributeNode(KV_AUTHOR); + if (!domAttrAuthor.isNull()) + { + m_doc->m_author = domAttrAuthor.value(); + } + + QDomAttr domAttrLicence = domElementKvtml.attributeNode(KV_LICENSE); + if (!domAttrLicence.isNull()) + { + m_doc->m_license = domAttrLicence.value(); + } + + QDomAttr domAttrRemark = domElementKvtml.attributeNode(KV_DOC_REM); + if (!domAttrRemark.isNull()) + { + m_doc->m_remark = domAttrRemark.value(); + } + + QDomAttr domAttrGenerator = domElementKvtml.attributeNode(KV_GENERATOR); + if (!domAttrGenerator.isNull()) + { + m_doc->m_generator = domAttrGenerator.value(); + int pos = m_doc->m_generator.lastIndexOf(KVD_VERS_PREFIX); + if (pos >= 0) + { + m_doc->m_version = m_doc->m_generator; + m_doc->m_version.remove (0, pos+2); + } + } + + QDomAttr domAttrCols = domElementKvtml.attributeNode(KV_COLS); + if (!domAttrCols.isNull()) + { + m_doc->m_cols = domAttrCols.value().toInt(); + } + + QDomAttr domAttrLines = domElementKvtml.attributeNode(KV_LINES); + if (!domAttrLines.isNull()) + { + m_doc->m_lines = domAttrLines.value().toInt(); + } + + + //------------------------------------------------------------------------- + // Children + //------------------------------------------------------------------------- + + bool result = readBody(domElementKvtml); // read vocabulary + + // TODO EPT setModified (false); + return result; } @@ -1550,109 +1641,6 @@ if (lines != 0) } -bool KEduVocKvtmlReader::readDoc(KEduVocDocument *doc) -{ - m_doc = doc; - - QDomDocument domDoc("Kvtml" ); - QString errorMsg; - if( !domDoc.setContent( m_inputFile, &errorMsg ) ) - { - domError(errorMsg); - return false; - } - - m_doc->m_identifiers.clear(); - m_doc->m_vocabulary.clear(); - - m_doc->m_generator = ""; - m_doc->m_cols = 0; - m_doc->m_lines = 0; - m_doc->m_title = ""; - m_doc->m_author = ""; - m_doc->m_license = ""; - m_doc->m_remark = ""; - - - QDomElement domElementKvtml = domDoc.documentElement(); - if( domElementKvtml.tagName() != KV_DOCTYPE ) - { - domError(i18n("Tag <%1> was expected " - "but tag <%2> was read." , QString(KV_DOCTYPE), domElementKvtml.tagName())); - return false; - } - - //------------------------------------------------------------------------- - // Attributes - //------------------------------------------------------------------------- - - QDomAttr domAttrEncoding = domElementKvtml.attributeNode(KV_ENCODING); - if (!domAttrEncoding.isNull()) - { - // TODO handle old encodings - // Qt DOM API autodetects encoding, so is there anything to do ? - } - - QDomAttr domAttrTitle = domElementKvtml.attributeNode(KV_TITLE); - if (!domAttrTitle.isNull()) - { - m_doc->m_title = domAttrTitle.value(); - } - - QDomAttr domAttrAuthor = domElementKvtml.attributeNode(KV_AUTHOR); - if (!domAttrAuthor.isNull()) - { - m_doc->m_author = domAttrAuthor.value(); - } - - QDomAttr domAttrLicence = domElementKvtml.attributeNode(KV_LICENSE); - if (!domAttrLicence.isNull()) - { - m_doc->m_license = domAttrLicence.value(); - } - - QDomAttr domAttrRemark = domElementKvtml.attributeNode(KV_DOC_REM); - if (!domAttrRemark.isNull()) - { - m_doc->m_remark = domAttrRemark.value(); - } - - QDomAttr domAttrGenerator = domElementKvtml.attributeNode(KV_GENERATOR); - if (!domAttrGenerator.isNull()) - { - m_doc->m_generator = domAttrGenerator.value(); - int pos = m_doc->m_generator.lastIndexOf(KVD_VERS_PREFIX); - if (pos >= 0) - { - m_doc->m_version = m_doc->m_generator; - m_doc->m_version.remove (0, pos+2); - } - } - - QDomAttr domAttrCols = domElementKvtml.attributeNode(KV_COLS); - if (!domAttrCols.isNull()) - { - m_doc->m_cols = domAttrCols.value().toInt(); - } - - QDomAttr domAttrLines = domElementKvtml.attributeNode(KV_LINES); - if (!domAttrLines.isNull()) - { - m_doc->m_lines = domAttrLines.value().toInt(); - } - - - //------------------------------------------------------------------------- - // Children - //------------------------------------------------------------------------- - - bool result = readBody(domElementKvtml); // read vocabulary - - // TODO EPT setModified (false); - return result; -} - - void KEduVocKvtmlReader::domErrorUnknownElement(const QString &elem) { QString ln = i18n("File:\t%1\n", m_doc->URL().path()); diff --git a/kdeeducore/keduvockvtmlreader.h b/kdeeducore/keduvockvtmlreader.h index 1ad5257..618968a 100644 --- a/kdeeducore/keduvockvtmlreader.h +++ b/kdeeducore/keduvockvtmlreader.h @@ -111,9 +111,12 @@ public: void domErrorUnknownElement(const QString &elem); void domError(const QString &text ); + QString errorMessage() const {return m_errorMessage;}; + private: QIODevice *m_inputFile; KEduVocDocument *m_doc; + QString m_errorMessage; }; #endif -- 2.47.3