From 5945221c3ff04901941d536c211f6295df764a4b Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Sun, 23 Mar 2008 11:02:30 +0000 Subject: [PATCH] Parley now supports Synonyms, Antonyms and False Friends that are connections to other words. FEATURE: 151382 Write not always synonyms but also antonyms and false friends svn path=/trunk/KDE/kdeedu/libkdeedu/; revision=789134 --- keduvocdocument/keduvockvtml2writer.cpp | 113 +++++++++++++++--------- 1 file changed, 72 insertions(+), 41 deletions(-) diff --git a/keduvocdocument/keduvockvtml2writer.cpp b/keduvocdocument/keduvockvtml2writer.cpp index 88fa805..44357a3 100644 --- a/keduvocdocument/keduvockvtml2writer.cpp +++ b/keduvocdocument/keduvockvtml2writer.cpp @@ -201,60 +201,91 @@ bool KEduVocKvtml2Writer::writeLessons( KEduVocLesson *parentLesson, QDomElement void KEduVocKvtml2Writer::writeSynonymAntonymFalseFriend(QDomElement & parentElement) { + QList< KEduVocTranslation* > currentList; + QDomElement synonymElement; // synonym, antonym, false friend - QDomElement synonymElement = m_domDoc.createElement( KVTML_SYNONYM ); -kDebug() << "writing list of synonyms: " << m_synonyms.count(); - while (!m_synonyms.isEmpty()) { - // after writing a translation, remove it from the list - KEduVocTranslation* translation = m_synonyms.takeAt(0); - - // fill the entry element but only add later if it is valid - QDomElement entryElement = m_domDoc.createElement( KVTML_ENTRY ); - entryElement.setAttribute( KVTML_ID, QString::number(m_allEntries.indexOf(translation->entry())) ); - // find out which id that is... silly - foreach(int index, translation->entry()->translationIndices()) { - if (translation->entry()->translation(index) == translation) { - // create - QDomElement translationElement = m_domDoc.createElement( KVTML_TRANSLATION ); - translationElement.setAttribute( KVTML_ID, QString::number(index) ); - entryElement.appendChild(translationElement); + for(int type = KEduVocTranslation::Synonym; type <= KEduVocTranslation::FalseFriend; type++) { + switch (type) { + case KEduVocTranslation::Synonym: + synonymElement = m_domDoc.createElement( KVTML_SYNONYM ); + currentList = m_synonyms; + break; + case KEduVocTranslation::Antonym: + synonymElement = m_domDoc.createElement( KVTML_ANTONYM ); + currentList = m_antonyms; + break; + case KEduVocTranslation::FalseFriend: + synonymElement = m_domDoc.createElement( KVTML_FALSEFRIEND ); + currentList = m_falseFriends; break; - } } + while (!currentList.isEmpty()) { + // after writing a translation, remove it from the list + KEduVocTranslation* translation = currentList.takeAt(0); + + // fill the entry element but only add later if it is valid + QDomElement entryElement = m_domDoc.createElement( KVTML_ENTRY ); + entryElement.setAttribute( KVTML_ID, QString::number(m_allEntries.indexOf(translation->entry())) ); + // find out which id that is... silly + foreach(int index, translation->entry()->translationIndices()) { + if (translation->entry()->translation(index) == translation) { + // create + QDomElement translationElement = m_domDoc.createElement( KVTML_TRANSLATION ); + translationElement.setAttribute( KVTML_ID, QString::number(index) ); + entryElement.appendChild(translationElement); + break; + } + } - QDomElement relatedElement; - foreach (KEduVocTranslation* synonym, translation->synonyms()) { - // if it is not in the list it has already been written and we can move on - if (m_synonyms.contains(synonym)) { - relatedElement = m_domDoc.createElement( KVTML_PAIR ); - synonymElement.appendChild(relatedElement); - relatedElement.appendChild(entryElement); + QDomElement relatedElement; - QDomElement partnerElement = m_domDoc.createElement( KVTML_ENTRY ); - partnerElement.setAttribute( KVTML_ID, QString::number(m_allEntries.indexOf(synonym->entry())) ); + QList list; - // find out which id that is - foreach(int index, synonym->entry()->translationIndices()) { - if (synonym->entry()->translation(index) == synonym) { - // create - QDomElement translationElement = m_domDoc.createElement( KVTML_TRANSLATION ); - translationElement.setAttribute( KVTML_ID, QString::number(index) ); - partnerElement.appendChild(translationElement); - break; + switch (type) { + case KEduVocTranslation::Synonym: + list = translation->synonyms(); + break; + case KEduVocTranslation::Antonym: + list = translation->antonyms(); + break; + case KEduVocTranslation::FalseFriend: + list = translation->falseFriends(); + break; + } + foreach (KEduVocTranslation* synonym, list) { + // if it is not in the list it has already been written and we can move on + if (currentList.contains(synonym)) { + relatedElement = m_domDoc.createElement( KVTML_PAIR ); + synonymElement.appendChild(relatedElement); + relatedElement.appendChild(entryElement); + + + QDomElement partnerElement = m_domDoc.createElement( KVTML_ENTRY ); + partnerElement.setAttribute( KVTML_ID, QString::number(m_allEntries.indexOf(synonym->entry())) ); + + // find out which id that is + foreach(int index, synonym->entry()->translationIndices()) { + if (synonym->entry()->translation(index) == synonym) { + // create + QDomElement translationElement = m_domDoc.createElement( KVTML_TRANSLATION ); + translationElement.setAttribute( KVTML_ID, QString::number(index) ); + partnerElement.appendChild(translationElement); + break; + } } + relatedElement.appendChild( partnerElement ); } - relatedElement.appendChild( partnerElement ); + } + if (relatedElement.hasChildNodes()) { + synonymElement.appendChild( relatedElement ); } } - if (relatedElement.hasChildNodes()) { - synonymElement.appendChild( relatedElement ); + if (synonymElement.hasChildNodes()) { + parentElement.appendChild( synonymElement ); } - } - if (synonymElement.hasChildNodes()) { - parentElement.appendChild( synonymElement ); - } + } // iterate over types } /* bool KEduVocKvtml2Writer::writeRelated(QDomElement & parentElement, QList< KEduVocTranslation * > relatedList) -- 2.47.3