79 m_currentField = NoField; |
79 m_currentField = NoField; |
80 QString result; |
80 QString result; |
81 while (!atEnd()) { |
81 while (!atEnd()) { |
82 readNext(); |
82 readNext(); |
83 if (isStartElement()) { |
83 if (isStartElement()) { |
84 if (name() == QLatin1String("source")) |
84 if (name() == QLatin1String("source")) { |
85 m_currentField = SourceField; |
85 m_currentField = SourceField; |
86 else if (name() == QLatin1String("target")) |
86 } else if (name() == QLatin1String("target")) { |
87 m_currentField = TargetField; |
87 m_currentField = TargetField; |
88 else if (name() == QLatin1String("definition")) |
88 } else if (name() == QLatin1String("definition")) { |
89 m_currentField = DefinitionField; |
89 m_currentField = DefinitionField; |
90 else |
90 } else { |
91 m_currentField = NoField; |
91 m_currentField = NoField; |
|
92 if (name() == QLatin1String("QPH")) { |
|
93 QXmlStreamAttributes atts = attributes(); |
|
94 translator.setLanguageCode(atts.value(QLatin1String("language")).toString()); |
|
95 translator.setSourceLanguageCode(atts.value(QLatin1String("sourcelanguage")).toString()); |
|
96 } |
|
97 } |
92 } else if (isWhiteSpace()) { |
98 } else if (isWhiteSpace()) { |
93 // ignore these |
99 // ignore these |
94 } else if (isCharacters()) { |
100 } else if (isCharacters()) { |
95 if (m_currentField == SourceField) |
101 if (m_currentField == SourceField) |
96 m_currentSource += text(); |
102 m_currentSource += text(); |
102 m_currentTarget.replace(QChar(Translator::TextVariantSeparator), |
108 m_currentTarget.replace(QChar(Translator::TextVariantSeparator), |
103 QChar(Translator::BinaryVariantSeparator)); |
109 QChar(Translator::BinaryVariantSeparator)); |
104 TranslatorMessage msg; |
110 TranslatorMessage msg; |
105 msg.setSourceText(m_currentSource); |
111 msg.setSourceText(m_currentSource); |
106 msg.setTranslation(m_currentTarget); |
112 msg.setTranslation(m_currentTarget); |
107 msg.setTranslatorComment(m_currentDefinition); |
113 msg.setComment(m_currentDefinition); |
108 translator.append(msg); |
114 translator.append(msg); |
109 m_currentSource.clear(); |
115 m_currentSource.clear(); |
110 m_currentTarget.clear(); |
116 m_currentTarget.clear(); |
111 m_currentDefinition.clear(); |
117 m_currentDefinition.clear(); |
112 } |
118 } |
155 |
161 |
156 static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData &) |
162 static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData &) |
157 { |
163 { |
158 QTextStream t(&dev); |
164 QTextStream t(&dev); |
159 t.setCodec(QTextCodec::codecForName("UTF-8")); |
165 t.setCodec(QTextCodec::codecForName("UTF-8")); |
160 t << "<!DOCTYPE QPH>\n<QPH>\n"; |
166 t << "<!DOCTYPE QPH>\n<QPH"; |
|
167 QString languageCode = translator.languageCode(); |
|
168 if (!languageCode.isEmpty() && languageCode != QLatin1String("C")) |
|
169 t << " language=\"" << languageCode << "\""; |
|
170 languageCode = translator.sourceLanguageCode(); |
|
171 if (!languageCode.isEmpty() && languageCode != QLatin1String("C")) |
|
172 t << " sourcelanguage=\"" << languageCode << "\""; |
|
173 t << ">\n"; |
161 foreach (const TranslatorMessage &msg, translator.messages()) { |
174 foreach (const TranslatorMessage &msg, translator.messages()) { |
162 t << "<phrase>\n"; |
175 t << "<phrase>\n"; |
163 t << " <source>" << protect(msg.sourceText()) << "</source>\n"; |
176 t << " <source>" << protect(msg.sourceText()) << "</source>\n"; |
164 QString str = msg.translations().join(QLatin1String("@")); |
177 QString str = msg.translations().join(QLatin1String("@")); |
165 str.replace(QChar(Translator::BinaryVariantSeparator), |
178 str.replace(QChar(Translator::BinaryVariantSeparator), |
166 QChar(Translator::TextVariantSeparator)); |
179 QChar(Translator::TextVariantSeparator)); |
167 t << " <target>" << protect(str) |
180 t << " <target>" << protect(str) |
168 << "</target>\n"; |
181 << "</target>\n"; |
169 if (!msg.context().isEmpty() || !msg.comment().isEmpty()) |
182 if (!msg.comment().isEmpty()) |
170 t << " <definition>" << msg.context() << msg.comment() |
183 t << " <definition>" << protect(msg.comment()) << "</definition>\n"; |
171 << "</definition>\n"; |
|
172 t << "</phrase>\n"; |
184 t << "</phrase>\n"; |
173 } |
185 } |
174 t << "</QPH>\n"; |
186 t << "</QPH>\n"; |
175 return true; |
187 return true; |
176 } |
188 } |