tools/linguist/shared/qph.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    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 }