File indexing completed on 2024-04-14 03:46:39
0001 /* 0002 * export a KEduVocDocument to a KVTML file 0003 * SPDX-FileCopyrightText: 2007 Jeremy Whiting <jpwhiting@kde.org> 0004 * SPDX-FileCopyrightText: 2007-2008 Frederik Gladhorn <frederik.gladhorn@kdemail.net> 0005 * SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 #ifndef KEDUVOCKVTML2WRITER_H 0008 #define KEDUVOCKVTML2WRITER_H 0009 0010 #include <QDomDocument> 0011 #include <QFile> 0012 #include <QList> 0013 0014 #include "keduvocarticle.h" 0015 #include "keduvocmultiplechoice.h" 0016 #include "keduvocpersonalpronoun.h" 0017 #include "keduvoctranslation.h" 0018 0019 class KEduVocDocument; 0020 class KEduVocExpression; 0021 class KEduVocLesson; 0022 class KEduVocLeitnerBox; 0023 0024 /** 0025 * @brief Class to write kvtml2 data files from KEduVocDocument 0026 * @author Jeremy Whiting 0027 */ 0028 class KEduVocKvtml2Writer 0029 { 0030 public: 0031 explicit KEduVocKvtml2Writer(QFile *file); 0032 0033 bool writeDoc(KEduVocDocument *doc, const QString &generator); 0034 0035 QByteArray toByteArray(KEduVocDocument *doc, const QString &generator); 0036 0037 /** 0038 * Helper function, appends a new element AND a text child to @p parent 0039 * Only appends if @p text is NOT empty. 0040 * @param parent 0041 * @param elementName 0042 * @param text 0043 */ 0044 static void appendTextElement(QDomElement &parent, const QString &elementName, const QString &text); 0045 0046 private: 0047 bool createXmlDocument(KEduVocDocument *doc, const QString &generator); 0048 0049 /** write information entries 0050 * @param informationElement QDomElement information to write to 0051 * @param generator text describing generator 0052 */ 0053 bool writeInformation(QDomElement &informationElement, const QString &generator); 0054 0055 /** write identifiers group 0056 * @param identifiersElement QDomElement identifiers to write to 0057 */ 0058 bool writeIdentifiers(QDomElement &identifiersElement); 0059 0060 /** write article 0061 * @param articleElement QDomElement article to write to 0062 * @param article the article number to write 0063 */ 0064 bool writeArticle(QDomElement &articleElement, int article); 0065 0066 bool writePersonalPronoun(QDomElement &pronounElement, const KEduVocPersonalPronoun &pronoun); 0067 /** write types 0068 * @param typesElement QDomElement types to write to 0069 */ 0070 bool writeWordTypes(QDomElement &typesElement, KEduVocWordType *parentContainer); 0071 0072 /** 0073 * write the leitner boxes @see KEduVocLeitnerBox 0074 * @param leitnerParentElement parent dom element 0075 * @param parentContainer parent of the KEduVocLeitnerBoxes to write 0076 * @return success 0077 */ 0078 bool writeLeitnerBoxes(QDomElement &leitnerParentElement, KEduVocLeitnerBox *parentContainer); 0079 0080 /** write entries 0081 * @param entriesElement QDomElement entries to write to 0082 */ 0083 bool writeEntries(QDomElement &entriesElement); 0084 0085 /** write a translation 0086 * @param translationElement QDomElement translation to write to, with id pre-set 0087 * @param translation object to write 0088 */ 0089 bool writeTranslation(QDomElement &translationElement, KEduVocTranslation *translation); 0090 0091 /** 0092 * Used to write synonym, antonym and false friend lists 0093 * @param typesElement 0094 * @param parentContainer 0095 * @return 0096 */ 0097 bool writeRelated(QDomElement &parentElement, QList<KEduVocTranslation *> relatedList); 0098 0099 /** write the lesson group 0100 * @param parentLesson the parent lesson of the current lesson 0101 * @param lessonsElement QDomElement lessons to write to 0102 */ 0103 bool writeLessons(KEduVocLesson *parentLesson, QDomElement &lessonsElement); 0104 0105 void writeSynonymAntonymFalseFriend(QDomElement &parentElement); 0106 0107 /** write multiple choice choices 0108 * @param multipleChoiceElement QDomElement multiplechoice to write to 0109 * @returns success 0110 */ 0111 bool writeMultipleChoice(QDomElement &multipleChoiceElement, KEduVocTranslation *translation); 0112 0113 QDomElement newTextElement(const QString &elementName, const QString &text); 0114 0115 QFile *m_outputFile; 0116 KEduVocDocument *m_doc; 0117 0118 QList<KEduVocExpression *> m_allEntries; 0119 QList<KEduVocTranslation *> m_synonyms; 0120 QList<KEduVocTranslation *> m_antonyms; 0121 QList<KEduVocTranslation *> m_falseFriends; 0122 0123 QDomDocument m_domDoc; 0124 }; 0125 0126 #endif