static void writeExtras(QTextStream &t, const char *indent, const TranslatorMessage::ExtraData &extras, const QRegExp &drops) { for (Translator::ExtraData::ConstIterator it = extras.begin(); it != extras.end(); ++it) { if (!drops.exactMatch(it.key())) { t << indent << "<extra-" << it.key() << '>' << protect(it.value()) << "</extra-" << it.key() << ">\n"; } } }
static void writeExtras(QTextStream &ts, int indent, const TranslatorMessage::ExtraData &extras, const QRegExp &drops) { for (Translator::ExtraData::ConstIterator it = extras.begin(); it != extras.end(); ++it) { if (!drops.exactMatch(it.key())) { writeIndent(ts, indent); ts << "<trolltech:" << it.key() << '>' << protect(it.value()) << "</trolltech:" << it.key() << ">\n"; } } }
static void writeExtras(QTextStream &t, const char *indent, const TranslatorMessage::ExtraData &extras, QRegExp drops) { QStringList outs; for (Translator::ExtraData::ConstIterator it = extras.begin(); it != extras.end(); ++it) { if (!drops.exactMatch(it.key())) { outs << (QStringLiteral("<extra-") + it.key() + QLatin1Char('>') + protect(it.value()) + QStringLiteral("</extra-") + it.key() + QLatin1Char('>')); } } outs.sort(); foreach (const QString &out, outs) t << indent << out << endl; }
void FindTrCalls::consumeComment() { // keep the current `trcontext' extracomment.clear(); msgid.clear(); extra.clear(); sourcetext.clear(); }
bool XLIFFHandler::finalizeMessage(bool isPlural) { if (m_sources.isEmpty()) { m_cd.appendError(QLatin1String("XLIFF syntax error: Message without source string.")); return false; } if (!m_translate && m_refs.size() == 1 && m_refs.at(0).fileName() == QLatin1String(MAGIC_OBSOLETE_REFERENCE)) m_refs.clear(); TranslatorMessage::Type type = m_translate ? (m_approved ? TranslatorMessage::Finished : TranslatorMessage::Unfinished) : (m_approved ? TranslatorMessage::Vanished : TranslatorMessage::Obsolete); TranslatorMessage msg(m_context, m_sources[0], m_comment, QString(), QString(), -1, m_translations, type, isPlural); msg.setId(m_id); msg.setReferences(m_refs); msg.setOldComment(m_oldComment); msg.setExtraComment(m_extraComment); msg.setTranslatorComment(m_translatorComment); if (m_sources.count() > 1 && m_sources[1] != m_sources[0]) m_extra.insert(QLatin1String("po-msgid_plural"), m_sources[1]); if (!m_oldSources.isEmpty()) { if (!m_oldSources[0].isEmpty()) msg.setOldSourceText(m_oldSources[0]); if (m_oldSources.count() > 1 && m_oldSources[1] != m_oldSources[0]) m_extra.insert(QLatin1String("po-old_msgid_plural"), m_oldSources[1]); } msg.setExtras(m_extra); m_translator.append(msg); m_id.clear(); m_sources.clear(); m_oldSources.clear(); m_translations.clear(); m_comment.clear(); m_oldComment.clear(); m_extraComment.clear(); m_translatorComment.clear(); m_extra.clear(); m_refs.clear(); m_translate = true; m_approved = true; return true; }
void FindTrCalls::processComment(const AST::SourceLocation &loc) { if (!loc.length) return; const QStringRef commentStr = engine->midRef(loc.begin(), loc.length); const QChar *chars = commentStr.constData(); const int length = commentStr.length(); // Try to match the logic of the C++ parser. if (*chars == QLatin1Char(':') && chars[1].isSpace()) { if (!extracomment.isEmpty()) extracomment += QLatin1Char(' '); extracomment += QString(chars+2, length-2); } else if (*chars == QLatin1Char('=') && chars[1].isSpace()) { msgid = QString(chars+2, length-2).simplified(); } else if (*chars == QLatin1Char('~') && chars[1].isSpace()) { QString text = QString(chars+2, length-2).trimmed(); int k = text.indexOf(QLatin1Char(' ')); if (k > -1) extra.insert(text.left(k), text.mid(k + 1).trimmed()); } else if (*chars == QLatin1Char('%') && chars[1].isSpace()) { sourcetext.reserve(sourcetext.length() + length-2); ushort *ptr = (ushort *)sourcetext.data() + sourcetext.length(); int p = 2, c; forever { if (p >= length) break; c = chars[p++].unicode(); if (std::isspace(c)) continue; if (c != '"') { yyMsg(loc.startLine) << qPrintable(LU::tr("Unexpected character in meta string\n")); break; } forever { if (p >= length) { whoops: yyMsg(loc.startLine) << qPrintable(LU::tr("Unterminated meta string\n")); break; } c = chars[p++].unicode(); if (c == '"') break; if (c == '\\') { if (p >= length) goto whoops; c = chars[p++].unicode(); if (c == '\r' || c == '\n') goto whoops; *ptr++ = '\\'; } *ptr++ = c; } } sourcetext.resize(ptr - (ushort *)sourcetext.data()); } else {
void FindTrCalls::postVisit(AST::Node *node) { if (node->statementCast() != 0 || node->uiObjectMemberCast()) { processComments(node->lastSourceLocation().end()); if (!sourcetext.isEmpty() || !extracomment.isEmpty() || !msgid.isEmpty() || !extra.isEmpty()) { yyMsg(node->lastSourceLocation().startLine) << qPrintable(LU::tr("Discarding unconsumed meta data\n")); consumeComment(); } } }
bool isValid() const { return !extracomment.isEmpty() || !msgid.isEmpty() || !sourcetext.isEmpty() || !extra.isEmpty(); }