diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-03-13 14:29:48 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-13 18:40:16 +0100 |
commit | 26c3bec09bccf9006f5ef4945a428d9ef56c1d12 (patch) | |
tree | 6aee60ec506c6389943b82f7cbdb9a3f2622a38f /src/tools | |
parent | 2c515ea42c3d2270b3c8f059bbdbe255cb5be77e (diff) |
uic: Avoid creating multiline QStringLiterals for MSVC.
The compiler complains about L"foo" "bar".
Change-Id: I94be0528b26fe65413db56d210a5c02fcdba13a3
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/uic/utils.h | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/tools/uic/utils.h b/src/tools/uic/utils.h index c6dbe548cb..b2214d9c38 100644 --- a/src/tools/uic/utils.h +++ b/src/tools/uic/utils.h @@ -55,21 +55,27 @@ inline bool toBool(const QString &str) inline QString toString(const DomString *str) { return str ? str->text() : QString(); } -inline QString fixString(const QString &str, const QString &indent, bool *isUtf8Ret=0) +enum StringFlags { + Utf8String = 0x1, + MultiLineString = 0x2 +}; + +inline QString fixString(const QString &str, const QString &indent, + unsigned *stringFlags = 0) { QString cursegment; QStringList result; const QByteArray utf8 = str.toUtf8(); const int utf8Length = utf8.length(); - bool isUtf8 = false; + unsigned flags = 0; for (int i = 0; i < utf8Length; ++i) { const uchar cbyte = utf8.at(i); if (cbyte >= 0x80) { cursegment += QLatin1Char('\\'); cursegment += QString::number(cbyte, 8); - isUtf8 = true; + flags |= Utf8String; } else { switch(cbyte) { case '\\': @@ -79,6 +85,7 @@ inline QString fixString(const QString &str, const QString &indent, bool *isUtf8 case '\r': break; case '\n': + flags |= MultiLineString; cursegment += QLatin1String("\\n\"\n\""); break; default: cursegment += QLatin1Char(cbyte); @@ -103,19 +110,27 @@ inline QString fixString(const QString &str, const QString &indent, bool *isUtf8 QString rc(QLatin1Char('"')); rc += result.join(joinstr); rc += QLatin1Char('"'); - if (isUtf8Ret) - *isUtf8Ret = isUtf8; + + if (result.size() > 1) + flags |= MultiLineString; + + if (stringFlags) + *stringFlags = flags; + return rc; } inline QString writeString(const QString &s, const QString &indent) { - bool isUtf8 = false; - const QString ret = fixString(s, indent, &isUtf8); - if (isUtf8) + unsigned flags = 0; + const QString ret = fixString(s, indent, &flags); + if (flags & Utf8String) return QLatin1String("QString::fromUtf8(") + ret + QLatin1Char(')'); - else - return QLatin1String("QStringLiteral(") + ret + QLatin1Char(')'); + // MSVC cannot concat L"foo" "bar" (C2308: concatenating mismatched strings), + // use QLatin1String instead (all platforms to avoid cross-compiling issues). + if (flags & MultiLineString) + return QLatin1String("QLatin1String(") + ret + QLatin1Char(')'); + return QLatin1String("QStringLiteral(") + ret + QLatin1Char(')'); } inline QHash<QString, DomProperty *> propertyMap(const QList<DomProperty *> &properties) |