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