41 m_currentField = NoField;
44 if (isStartElement()) {
45 if (name() ==
"source"_L1) {
46 m_currentField = SourceField;
47 }
else if (name() ==
"target"_L1) {
48 m_currentField = TargetField;
49 }
else if (name() ==
"definition"_L1) {
50 m_currentField = DefinitionField;
52 m_currentField = NoField;
53 if (name() ==
"QPH"_L1) {
54 QXmlStreamAttributes atts = attributes();
55 translator.setLanguageCode(atts.value(
"language"_L1).toString());
56 translator.setSourceLanguageCode(atts.value(
"sourcelanguage"_L1).toString());
59 }
else if (isWhiteSpace()) {
61 }
else if (isCharacters()) {
62 if (m_currentField == SourceField)
63 m_currentSource += text();
64 else if (m_currentField == TargetField)
65 m_currentTarget += text();
66 else if (m_currentField == DefinitionField)
67 m_currentDefinition += text();
68 }
else if (isEndElement() && name() ==
"phrase"_L1) {
69 m_currentTarget.replace(Translator::TextVariantSeparator, Translator::BinaryVariantSeparator);
71 msg.setSourceText(m_currentSource);
72 msg.setTranslation(m_currentTarget);
73 msg.setComment(m_currentDefinition);
75 m_currentSource.clear();
76 m_currentTarget.clear();
77 m_currentDefinition.clear();
125 t <<
"<!DOCTYPE QPH>\n<QPH";
126 QString languageCode = translator.languageCode();
127 if (!languageCode.isEmpty() && languageCode !=
"C"_L1)
128 t <<
" language=\"" << languageCode <<
"\"";
129 languageCode = translator.sourceLanguageCode();
130 if (!languageCode.isEmpty() && languageCode !=
"C"_L1)
131 t <<
" sourcelanguage=\"" << languageCode <<
"\"";
133 for (
const TranslatorMessage &msg : translator.messages()) {
135 t <<
" <source>" << qphProtect(msg.sourceText()) <<
"</source>\n";
136 QString str = msg.translations().join(u'@');
137 str.replace(QChar(Translator::BinaryVariantSeparator),
138 QChar(Translator::TextVariantSeparator));
139 t <<
" <target>" << qphProtect(str)
141 if (!msg.comment().isEmpty())
142 t <<
" <definition>" << qphProtect(msg.comment()) <<
"</definition>\n";