/*************************************************************************** export a KEduVocDocument to a KVTML file ----------------------------------------------------------------------- copyright : (C) 1999-2001 Ewald Arnold (C) 2001 The KDE-EDU team (C) 2005 Eric Pignet email : eric at erixpage.com ***************************************************************************/ /*************************************************************************** * * * 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 "keduvockvtmlwriter.h" #include "keduvocdocument.h" KEduVocKvtmlWriter::KEduVocKvtmlWriter(TQFile *file) { // the file must be already open m_outputFile = file; } KEduVocKvtmlWriter::~KEduVocKvtmlWriter() { } bool KEduVocKvtmlWriter::saveTypeNameKvtMl (TQDomDocument &domDoc, TQDomElement &domElementParent) { if (m_doc->type_descr.size() == 0) return true; TQDomElement domElementType = domDoc.createElement(KV_TYPE_GRP); for (int lfn = 0; lfn < (int) m_doc->type_descr.size(); lfn++) { if (!(m_doc->type_descr[lfn].isNull()) ) { TQDomElement domElementDesc = domDoc.createElement(KV_TYPE_DESC); TQDomText domTextDesc = domDoc.createTextNode(m_doc->type_descr[lfn]); domElementDesc.setAttribute(KV_TYPE_NO, lfn+1); domElementDesc.appendChild(domTextDesc); domElementType.appendChild(domElementDesc); } } domElementParent.appendChild(domElementType); return true; } bool KEduVocKvtmlWriter::saveTenseNameKvtMl (TQDomDocument &domDoc, TQDomElement &domElementParent) { if (m_doc->tense_descr.size() == 0) return true; TQDomElement domElementTense = domDoc.createElement(KV_TENSE_GRP); for (int lfn = 0; lfn < (int) m_doc->tense_descr.size(); lfn++) { if (!(m_doc->tense_descr[lfn].isNull()) ) { TQDomElement domElementDesc = domDoc.createElement(KV_TENSE_DESC); TQDomText domTextDesc = domDoc.createTextNode(m_doc->tense_descr[lfn]); domElementDesc.setAttribute(KV_TENSE_NO, lfn+1); domElementDesc.appendChild(domTextDesc); domElementTense.appendChild(domElementDesc); } } domElementParent.appendChild(domElementTense); return true; } bool KEduVocKvtmlWriter::saveUsageNameKvtMl (TQDomDocument &domDoc, TQDomElement &domElementParent) { if (m_doc->usage_descr.size() == 0) return true; TQDomElement domElementUsage = domDoc.createElement(KV_USAGE_GRP); for (int lfn = 0; lfn < (int) m_doc->usage_descr.size(); lfn++) { if (!(m_doc->usage_descr[lfn].isNull()) ) { TQDomElement domElementDesc = domDoc.createElement(KV_USAGE_DESC); TQDomText domTextDesc = domDoc.createTextNode(m_doc->usage_descr[lfn]); domElementDesc.setAttribute(KV_USAGE_NO, lfn+1); domElementDesc.appendChild(domTextDesc); domElementUsage.appendChild(domElementDesc); } } domElementParent.appendChild(domElementUsage); return true; } bool KEduVocKvtmlWriter::saveLessonKvtMl (TQDomDocument &domDoc, TQDomElement &domElementParent) { if (m_doc->lesson_descr.size() == 0) return true; TQDomElement domElementLesson = domDoc.createElement(KV_LESS_GRP); domElementLesson.setAttribute(KV_SIZEHINT, m_doc->getSizeHint(-1)); for (int lfn = 0; lfn < (int) m_doc->lesson_descr.size(); lfn++) { if (!(m_doc->lesson_descr[lfn].isNull()) ) { TQDomElement domElementDesc = domDoc.createElement(KV_LESS_DESC); TQDomText domTextDesc = domDoc.createTextNode(m_doc->lesson_descr[lfn]); domElementDesc.setAttribute(KV_LESS_NO, lfn+1); if (m_doc->getCurrentLesson() == lfn+1) domElementDesc.setAttribute (KV_LESS_CURR, 1); if (lfn < (int) m_doc->lessons_in_query.size() && m_doc->lessons_in_query[lfn]) domElementDesc.setAttribute (KV_LESS_QUERY, 1); domElementDesc.appendChild(domTextDesc); domElementLesson.appendChild(domElementDesc); } } domElementParent.appendChild(domElementLesson); return true; } bool KEduVocKvtmlWriter::saveConjug(TQDomDocument &domDoc, TQDomElement &domElementParent, const Conjugation &curr_conjug, TQString type) { if (!curr_conjug.pers1Singular(type).isEmpty() ) { TQDomElement domElementP1s = domDoc.createElement(KV_CON_P1S); TQDomText domTextP1s = domDoc.createTextNode(curr_conjug.pers1Singular(type)); domElementP1s.appendChild(domTextP1s); domElementParent.appendChild(domElementP1s); } if (!curr_conjug.pers2Singular(type).isEmpty() ) { TQDomElement domElementP2s = domDoc.createElement(KV_CON_P2S); TQDomText domTextP2s = domDoc.createTextNode(curr_conjug.pers2Singular(type)); domElementP2s.appendChild(domTextP2s); domElementParent.appendChild(domElementP2s); } if (!curr_conjug.pers3FemaleSingular(type).isEmpty() || curr_conjug.pers3SingularCommon(type)) { TQDomElement domElementP3sf = domDoc.createElement(KV_CON_P3SF); TQDomText domTextP3sf = domDoc.createTextNode(curr_conjug.pers3FemaleSingular(type)); if (curr_conjug.pers3SingularCommon(type)) domElementP3sf.setAttribute(KV_CONJ_COMMON, 1); domElementP3sf.appendChild(domTextP3sf); domElementParent.appendChild(domElementP3sf); } if (!curr_conjug.pers3MaleSingular(type).isEmpty() ) { TQDomElement domElementP3sm = domDoc.createElement(KV_CON_P3SM); TQDomText domTextP3sm = domDoc.createTextNode(curr_conjug.pers3MaleSingular(type)); domElementP3sm.appendChild(domTextP3sm); domElementParent.appendChild(domElementP3sm); } if (!curr_conjug.pers3NaturalSingular(type).isEmpty() ) { TQDomElement domElementP3sn = domDoc.createElement(KV_CON_P3SN); TQDomText domTextP3sn = domDoc.createTextNode(curr_conjug.pers3NaturalSingular(type)); domElementP3sn.appendChild(domTextP3sn); domElementParent.appendChild(domElementP3sn); } if (!curr_conjug.pers1Plural(type).isEmpty() ) { TQDomElement domElementP1p = domDoc.createElement(KV_CON_P1P); TQDomText domTextP1p = domDoc.createTextNode(curr_conjug.pers1Plural(type)); domElementP1p.appendChild(domTextP1p); domElementParent.appendChild(domElementP1p); } if (!curr_conjug.pers2Plural(type).isEmpty() ) { TQDomElement domElementP2p = domDoc.createElement(KV_CON_P2P); TQDomText domTextP2p = domDoc.createTextNode(curr_conjug.pers2Plural(type)); domElementP2p.appendChild(domTextP2p); domElementParent.appendChild(domElementP2p); } if (!curr_conjug.pers3FemalePlural(type).isEmpty() || curr_conjug.pers3PluralCommon(type)) { TQDomElement domElementP3pf = domDoc.createElement(KV_CON_P3PF); TQDomText domTextP3pf = domDoc.createTextNode(curr_conjug.pers3FemalePlural(type)); if (curr_conjug.pers3PluralCommon(type)) domElementP3pf.setAttribute(KV_CONJ_COMMON, 1); domElementP3pf.appendChild(domTextP3pf); domElementParent.appendChild(domElementP3pf); } if (!curr_conjug.pers3MalePlural(type).isEmpty() ) { TQDomElement domElementP3pm = domDoc.createElement(KV_CON_P3PM); TQDomText domTextP3pm = domDoc.createTextNode(curr_conjug.pers3MalePlural(type)); domElementP3pm.appendChild(domTextP3pm); domElementParent.appendChild(domElementP3pm); } if (!curr_conjug.pers3NaturalPlural(type).isEmpty() ) { TQDomElement domElementP3pn = domDoc.createElement(KV_CON_P3PN); TQDomText domTextP3pn = domDoc.createTextNode(curr_conjug.pers3NaturalPlural(type)); domElementP3pn.appendChild(domTextP3pn); domElementParent.appendChild(domElementP3pn); } return true; } bool KEduVocKvtmlWriter::saveConjugHeader(TQDomDocument &domDoc, TQDomElement &domElementParent, vector &curr_conjug) { /* used in header for definiton of "prefix" lang determines also lang order in entries !! I which must NOT differ you<2> he she it we you they they they */ if (curr_conjug.size() == 0) return true; TQDomElement domElementConjug = domDoc.createElement(KV_CONJUG_GRP); TQString s; for (int ent = 0; ent < TQMIN((int) curr_conjug.size(), m_doc->numLangs()); ent++) { TQDomElement domElementEntry = domDoc.createElement(KV_CON_ENTRY); if (ent == 0) { s = m_doc->getOriginalIdent().stripWhiteSpace(); //EPT le Ident doit �re superflu if (s.isEmpty() ) s = "original"; } else { s = m_doc->getIdent(ent).stripWhiteSpace(); if (s.isEmpty() ) { s.setNum(ent); s.insert(0, "translation "); } } domElementEntry.setAttribute(KV_LANG, s); if (!saveConjug (domDoc, domElementEntry, curr_conjug[ent], CONJ_PREFIX)) return false; domElementConjug.appendChild(domElementEntry); } domElementParent.appendChild(domElementConjug); return true; } bool KEduVocKvtmlWriter::saveComparison(TQDomDocument &domDoc, TQDomElement &domElementParent, const Comparison &comp) /* good better best */ { if (comp.isEmpty()) return true; TQDomElement domElementComparison = domDoc.createElement(KV_COMPARISON_GRP); if (!comp.l1().isEmpty() ) { TQDomElement domElementL1 = domDoc.createElement(KV_COMP_L1); TQDomText domTextL1 = domDoc.createTextNode(comp.l1()); domElementL1.appendChild(domTextL1); domElementComparison.appendChild(domElementL1); } if (!comp.l2().isEmpty() ) { TQDomElement domElementL2 = domDoc.createElement(KV_COMP_L2); TQDomText domTextL2 = domDoc.createTextNode(comp.l2()); domElementL2.appendChild(domTextL2); domElementComparison.appendChild(domElementL2); } if (!comp.l3().isEmpty() ) { TQDomElement domElementL3 = domDoc.createElement(KV_COMP_L3); TQDomText domTextL3 = domDoc.createTextNode(comp.l3()); domElementL3.appendChild(domTextL3); domElementComparison.appendChild(domElementL3); } domElementParent.appendChild(domElementComparison); return true; } bool KEduVocKvtmlWriter::saveMultipleChoice(TQDomDocument &domDoc, TQDomElement &domElementParent, const MultipleChoice &mc) /* good better best best 2 best 3 */ { if (mc.isEmpty()) return true; TQDomElement domElementMC = domDoc.createElement(KV_MULTIPLECHOICE_GRP); if (!mc.mc1().isEmpty() ) { TQDomElement domElementMC1 = domDoc.createElement(KV_MC_1); TQDomText domTextMC1 = domDoc.createTextNode(mc.mc1()); domElementMC1.appendChild(domTextMC1); domElementMC.appendChild(domElementMC1); } if (!mc.mc2().isEmpty() ) { TQDomElement domElementMC2 = domDoc.createElement(KV_MC_2); TQDomText domTextMC2 = domDoc.createTextNode(mc.mc2()); domElementMC2.appendChild(domTextMC2); domElementMC.appendChild(domElementMC2); } if (!mc.mc3().isEmpty() ) { TQDomElement domElementMC3 = domDoc.createElement(KV_MC_3); TQDomText domTextMC3 = domDoc.createTextNode(mc.mc3()); domElementMC3.appendChild(domTextMC3); domElementMC.appendChild(domElementMC3); } if (!mc.mc4().isEmpty() ) { TQDomElement domElementMC4 = domDoc.createElement(KV_MC_4); TQDomText domTextMC4 = domDoc.createTextNode(mc.mc4()); domElementMC4.appendChild(domTextMC4); domElementMC.appendChild(domElementMC4); } if (!mc.mc5().isEmpty() ) { TQDomElement domElementMC5 = domDoc.createElement(KV_MC_5); TQDomText domTextMC5 = domDoc.createTextNode(mc.mc5()); domElementMC5.appendChild(domTextMC5); domElementMC.appendChild(domElementMC5); } domElementParent.appendChild(domElementMC); return true; } bool KEduVocKvtmlWriter::saveConjugEntry( TQDomDocument &domDoc, TQDomElement &domElementParent, Conjugation &curr_conjug) /* in entry for definition of tenses of (irreg.) verbs go go goes goes goes go go go go go */ { curr_conjug.cleanUp(); if (curr_conjug.numEntries() == 0 ) return true; TQDomElement domElementConjug = domDoc.createElement(KV_CONJUG_GRP); TQString type; for (int lfn = 0; lfn < (int) curr_conjug.numEntries(); lfn++) { TQDomElement domElementType = domDoc.createElement(KV_CON_TYPE); type = curr_conjug.getType(lfn); domElementType.setAttribute(KV_CON_NAME, type); if (!saveConjug (domDoc, domElementType, curr_conjug, curr_conjug.getType(lfn)) ) return false; domElementConjug.appendChild(domElementType); } domElementParent.appendChild(domElementConjug); return true; } bool KEduVocKvtmlWriter::saveArticleKvtMl(TQDomDocument &domDoc, TQDomElement &domElementParent) /*
lang determines also lang order in entries !! eine which must NOT differ die ein der ein das
*/ { if (m_doc->articles.size() == 0) return true; TQDomElement domElementArticle = domDoc.createElement(KV_ARTICLE_GRP); TQString def, indef, s; for (int lfn = 0; lfn < TQMIN((int) m_doc->articles.size(), m_doc->numLangs()); lfn++) { TQDomElement domElementEntry = domDoc.createElement(KV_ART_ENTRY); if (lfn == 0) { s = m_doc->getOriginalIdent().stripWhiteSpace(); if (s.isEmpty() ) s = "original"; } else { s = m_doc->getIdent(lfn).stripWhiteSpace(); if (s.isEmpty() ) { s.setNum(lfn); s.insert(0, "translation "); } } domElementEntry.setAttribute(KV_LANG, s); m_doc->articles[lfn].female(def, indef); if (!def.isEmpty() ) { TQDomElement domElementFD = domDoc.createElement(KV_ART_FD); TQDomText domTextFD = domDoc.createTextNode(def); domElementFD.appendChild(domTextFD); domElementEntry.appendChild(domElementFD); } if (!indef.isEmpty() ) { TQDomElement domElementFI = domDoc.createElement(KV_ART_FI); TQDomText domTextFI = domDoc.createTextNode(indef); domElementFI.appendChild(domTextFI); domElementEntry.appendChild(domElementFI); } m_doc->articles[lfn].male(def, indef); if (!def.isEmpty() ) { TQDomElement domElementMD = domDoc.createElement(KV_ART_MD); TQDomText domTextMD = domDoc.createTextNode(def); domElementMD.appendChild(domTextMD); domElementEntry.appendChild(domElementMD); } if (!indef.isEmpty() ) { TQDomElement domElementMI = domDoc.createElement(KV_ART_MI); TQDomText domTextMI = domDoc.createTextNode(indef); domElementMI.appendChild(domTextMI); domElementEntry.appendChild(domElementMI); } m_doc->articles[lfn].natural(def, indef); if (!def.isEmpty() ) { TQDomElement domElementND = domDoc.createElement(KV_ART_ND); TQDomText domTextND = domDoc.createTextNode(def); domElementND.appendChild(domTextND); domElementEntry.appendChild(domElementND); } if (!indef.isEmpty() ) { TQDomElement domElementNI = domDoc.createElement(KV_ART_NI); TQDomText domTextNI = domDoc.createTextNode(indef); domElementNI.appendChild(domTextNI); domElementEntry.appendChild(domElementNI); } domElementArticle.appendChild(domElementEntry); } domElementParent.appendChild(domElementArticle); return true; } bool KEduVocKvtmlWriter::saveOptionsKvtMl(TQDomDocument &domDoc, TQDomElement &domElementParent) { TQDomElement domElementOption = domDoc.createElement(KV_OPTION_GRP); TQDomElement domElementSort = domDoc.createElement(KV_OPT_SORT); domElementSort.setAttribute(KV_BOOL_FLAG, (m_doc->sort_allowed?1:0)); domElementOption.appendChild(domElementSort); domElementParent.appendChild(domElementOption); return true; } bool KEduVocKvtmlWriter::writeDoc(KEduVocDocument *doc, const TQString &generator) { bool first_expr = true; m_doc = doc; TQDomDocument domDoc( "KEduVocDocument" ); TQDomElement domElementKvtml = domDoc.createElement( "kvtml" ); TQString head( "" ); domDoc.setContent( head ); TQDomComment domComment = domDoc.createComment(TQString( "\nThis is a machine generated file.\n" "Be careful when editing here.\n" "\n" "Short definition:\n" "\n" "lesson lesson group\n" " desc name\n" " %no its index\n" " %query is in query selection\n" " %current is current lesson\n" "type type group\n" " desc name\n" " %no its index\n" "e entry of dictionary\n" " %s is selected\n" " %m lesson member\n" " %t common expression type\n" " o original\n" " %q in query (\"o\" is given, \"t\" is wanted)\n" " %l language code\n" " %r remark\n" " %p pronunciation\n" " %width column width\n" " %t expression type (see QueryManager.h)\n" " %tf false friend from\n" " %ff false friend to\n" " %a antonym\n" " %y synonym\n" " %x example\n" " %u usage label\n" " %h paraphrase\n" " t translation ..\n" " %q in query (\"t\" is given, \"o\" is wanted)\n" " %l language code\n" " %r remark\n" " %p pronunciation\n" " %width column width\n" " %t expression type\n" " %tf false friend from\n" " %ff false friend to\n" " %a antonym\n" " %y synonym\n" " %x example\n" " %u usage label\n" " %h paraphrase\n" "\n" " %d last query date (from;to)\n" " %w dito, compressed and deprecated\n" " %g grade (from;to)\n" " %c count (from;to)\n" " %b bad count (from;to)\n" "\n" "\nValid xml means:\n" " - Close all tags\n" " - Keep proper hierarchy\n" " - All attributes are quoted\n")); domDoc.appendChild(domComment); domElementKvtml.setAttribute(KV_ENCODING, (TQString)"UTF-8"); domElementKvtml.setAttribute(KV_GENERATOR, generator); domElementKvtml.setAttribute(KV_COLS, m_doc->numLangs() ); domElementKvtml.setAttribute(KV_LINES, m_doc->numEntries() ); if (!m_doc->doctitle.isEmpty()) domElementKvtml.setAttribute(KV_TITLE, m_doc->doctitle); if (!m_doc->author.isEmpty()) domElementKvtml.setAttribute(KV_AUTHOR, m_doc->getAuthor() ); if (!m_doc->license.isEmpty()) domElementKvtml.setAttribute(KV_LICENSE, m_doc->getLicense() ); if (!m_doc->doc_remark.isEmpty()) domElementKvtml.setAttribute(KV_DOC_REM, m_doc->getDocRemark() ); if (!saveLessonKvtMl(domDoc, domElementKvtml)) return false; if (!saveArticleKvtMl(domDoc, domElementKvtml)) return false; if (!saveConjugHeader(domDoc, domElementKvtml, m_doc->conjugations)) return false; if (!saveOptionsKvtMl(domDoc, domElementKvtml)) return false; if (!saveTypeNameKvtMl(domDoc, domElementKvtml)) return false; if (!saveTenseNameKvtMl(domDoc, domElementKvtml)) return false; if (!saveUsageNameKvtMl(domDoc, domElementKvtml)) return false; TQString q_org, q_trans; vector::const_iterator first = m_doc->vocabulary.begin (); m_doc->getQueryLang(q_org, q_trans); int ent_no = 0; int ent_percent = (int) m_doc->vocabulary.size () / 100; float f_ent_percent = (int) m_doc->vocabulary.size () / 100.0; //TODO emit progressChanged(this, 0); while (first != m_doc->vocabulary.end ()) { TQDomElement domElementExpression = domDoc.createElement(KV_EXPR); ent_no++; if (ent_percent != 0 && (ent_no % ent_percent) == 0 ) //TODO emit progressChanged(this, ent_no / (int) f_ent_percent); if ((*first).getLesson() != 0) { // entry belongs to lesson x TQString ls; int lm = (*first).getLesson(); if (lm > (int) m_doc->lesson_descr.size() ) { // should not be kdError() << "index of lesson member too high: " << lm << endl; lm = 0; } ls.setNum (lm); domElementExpression.setAttribute (KV_LESS_MEMBER, ls); } if ((*first).isInQuery()) { // entry was selected for query domElementExpression.setAttribute (KV_SELECTED, (TQString) "1"); } if (!(*first).isActive()) { // entry was inactive domElementExpression.setAttribute (KV_INACTIVE, (TQString) "1"); } if ((*first).uniqueType() && !(*first).getType(0).isEmpty()) { domElementExpression.setAttribute (KV_EXPRTYPE, (*first).getType(0)); } TQDomElement domElementOriginal = domDoc.createElement(KV_ORG); if (first_expr) { // save space, only tell language in first entry TQString s; s.setNum (m_doc->getSizeHint (0)); domElementOriginal.setAttribute(KV_SIZEHINT, s); s = m_doc->getOriginalIdent().stripWhiteSpace(); if (s.isEmpty() ) s = "original"; domElementOriginal.setAttribute (KV_LANG, s); if (s == q_org) domElementOriginal.setAttribute(KV_QUERY, (TQString) KV_O); else if (s == q_trans) domElementOriginal.setAttribute(KV_QUERY, (TQString) KV_T); } if (!(*first).getRemark(0).isEmpty() ) domElementOriginal.setAttribute(KV_REMARK, (*first).getRemark(0)); if (!(*first).getSynonym(0).isEmpty() ) domElementOriginal.setAttribute(KV_SYNONYM, (*first).getSynonym(0)); if (!(*first).getExample(0).isEmpty() ) domElementOriginal.setAttribute(KV_EXAMPLE, (*first).getExample(0)); if (!(*first).getUsageLabel(0).isEmpty() ) domElementOriginal.setAttribute(KV_USAGE, (*first).getUsageLabel(0)); if (!(*first).getParaphrase(0).isEmpty() ) domElementOriginal.setAttribute(KV_PARAPHRASE, (*first).getParaphrase(0)); if (!(*first).getAntonym(0).isEmpty() ) domElementOriginal.setAttribute(KV_ANTONYM, (*first).getAntonym(0)); if (!(*first).getPronunce(0).isEmpty() ) domElementOriginal.setAttribute(KV_PRONUNCE, (*first).getPronunce(0)); if (!(*first).uniqueType() && !(*first).getType(0).isEmpty()) domElementOriginal.setAttribute(KV_EXPRTYPE, (*first).getType(0)); if (!saveMultipleChoice(domDoc, domElementOriginal, (*first).getMultipleChoice(0))) return false; TQString s; TQString entype = s = (*first).getType(0); int pos = s.find (TQM_TYPE_DIV); if (pos >= 0) entype = s.left (pos); else entype = s; if (entype == TQM_VERB && (*first).getConjugation(0).numEntries() > 0) { Conjugation conj = (*first).getConjugation(0); if (!saveConjugEntry(domDoc, domElementOriginal, conj)) return false; } else if (entype == TQM_ADJ && !(*first).getComparison(0).isEmpty()) { Comparison comp = (*first).getComparison(0); if (!saveComparison(domDoc, domElementOriginal, comp)) return false; } TQDomText domTextOriginal = domDoc.createTextNode((*first).getOriginal()); domElementOriginal.appendChild(domTextOriginal); domElementExpression.appendChild(domElementOriginal); int trans = 1; while (trans < (int)m_doc->langs.size()) { TQDomElement domElementTranslation = domDoc.createElement(KV_TRANS); if (first_expr) { // save space, only tell language in first entry TQString s; s.setNum (m_doc->getSizeHint (trans)); domElementTranslation.setAttribute(KV_SIZEHINT, s); s = m_doc->getIdent(trans).stripWhiteSpace(); if (s.isEmpty() ) { s.setNum (trans); s.insert (0, "translation "); } domElementTranslation.setAttribute(KV_LANG, s); if (s == q_org) domElementTranslation.setAttribute(KV_QUERY, (TQString) KV_O); else if (s == q_trans) domElementTranslation.setAttribute(KV_QUERY, (TQString) KV_T); } TQString s1, s2; if ((*first).getGrade(trans, false) != 0 ||(*first).getGrade(trans, true) != 0) { domElementTranslation.setAttribute(KV_GRADE, (*first).gradeStr(trans, false) +';' +(*first).gradeStr(trans, true)); } if ((*first).getQueryCount(trans, false) != 0 ||(*first).getQueryCount(trans, true) != 0) { s1.setNum((*first).getQueryCount(trans, false)); s2.setNum((*first).getQueryCount(trans, true)); domElementTranslation.setAttribute(KV_COUNT, s1 +';' +s2); } if ((*first).getBadCount(trans, false) != 0 ||(*first).getBadCount(trans, true) != 0) { s1.setNum((*first).getBadCount(trans, false)); s2.setNum((*first).getBadCount(trans, true)); domElementTranslation.setAttribute(KV_BAD, s1 +';' +s2); } if ((*first).getQueryDate(trans, false) != 0 ||(*first).getQueryDate(trans, true) != 0) { s1.setNum((*first).getQueryDate(trans, false)); s2.setNum((*first).getQueryDate(trans, true)); domElementTranslation.setAttribute(KV_DATE, s1 +';' +s2); } if (!(*first).getRemark(trans).isEmpty() ) domElementTranslation.setAttribute(KV_REMARK, (*first).getRemark(trans)); if (!(*first).getFauxAmi(trans, false).isEmpty() ) domElementTranslation.setAttribute(KV_FAUX_AMI_F, (*first).getFauxAmi(trans, false)); if (!(*first).getFauxAmi(trans, true).isEmpty() ) domElementTranslation.setAttribute(KV_FAUX_AMI_T, (*first).getFauxAmi(trans, true)); if (!(*first).getSynonym(trans).isEmpty() ) domElementTranslation.setAttribute(KV_SYNONYM, (*first).getSynonym(trans)); if (!(*first).getExample(trans).isEmpty() ) domElementTranslation.setAttribute(KV_EXAMPLE, (*first).getExample(trans)); if (!(*first).getUsageLabel(trans).isEmpty() ) domElementTranslation.setAttribute(KV_USAGE, (*first).getUsageLabel(trans)); if (!(*first).getParaphrase(trans).isEmpty() ) domElementTranslation.setAttribute(KV_PARAPHRASE, (*first).getParaphrase(trans)); if (!(*first).getAntonym(trans).isEmpty() ) domElementTranslation.setAttribute(KV_ANTONYM, (*first).getAntonym(trans)); if (!(*first).getPronunce(trans).isEmpty() ) domElementTranslation.setAttribute(KV_PRONUNCE, (*first).getPronunce(trans)); if (!(*first).uniqueType() && !(*first).getType(trans).isEmpty()) domElementTranslation.setAttribute(KV_EXPRTYPE, (*first).getType(trans)); // only save conjugations when type == verb if (!saveMultipleChoice(domDoc, domElementTranslation, (*first).getMultipleChoice(trans))) return false; TQString s; TQString entype = s = (*first).getType(0); int pos = s.find (TQM_TYPE_DIV); if (pos >= 0) entype = s.left (pos); else entype = s; if (entype == TQM_VERB && (*first).getConjugation(trans).numEntries() > 0) { Conjugation conj = (*first).getConjugation(trans); if (!saveConjugEntry(domDoc, domElementTranslation, conj)) return false; } if (entype == TQM_ADJ && !(*first).getComparison(trans).isEmpty()) { Comparison comp = (*first).getComparison(trans); if (!saveComparison(domDoc, domElementTranslation, comp)) return false; } TQDomText domTextTranslation = domDoc.createTextNode((*first).getTranslation(trans)); domElementTranslation.appendChild(domTextTranslation); domElementExpression.appendChild(domElementTranslation); trans++; } domElementKvtml.appendChild(domElementExpression); first++; first_expr = false; } domDoc.appendChild(domElementKvtml); TQTextStream ts( m_outputFile ); ts.setEncoding( TQTextStream::UnicodeUTF8 ); ts << domDoc.toString(); // TODO setModified (false); return true; }