summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2017-03-06 11:20:25 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2017-03-09 18:25:05 +0000
commit5e3617bef5bc7e4c98fb63514471c49800feef03 (patch)
treebd181997e5885cfc1cda287bfcc5e7cda3db5fd2
parent4e104dc3cb6a26df071bc33fc75cd3edac12c3a7 (diff)
Fix lupdate to handle \u escapes
It treated \u as u, which isn't correct. Instead, read the number following and convert, via QChar, to UTF-8 encoding in the byte array (that'll later be .fromUtf8()ed). Added a simple test-case. Task-number: QTBUG-35164 Change-Id: Ib23cc5e5fb98e6cb8715b4018545e40a40e271d0 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
-rw-r--r--src/linguist/lupdate/cpp.cpp8
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp8
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result6
3 files changed, 20 insertions, 2 deletions
diff --git a/src/linguist/lupdate/cpp.cpp b/src/linguist/lupdate/cpp.cpp
index 31f1f7e91..a5654cc58 100644
--- a/src/linguist/lupdate/cpp.cpp
+++ b/src/linguist/lupdate/cpp.cpp
@@ -1493,13 +1493,17 @@ QString CppParser::transcode(const QString &str)
if (c == '\n')
continue;
- if (c == 'x') {
+ if (c == 'x' || c == 'u' || c == 'U') {
+ const bool unicode = (c != 'x');
QByteArray hex;
while (i < in.length() && isxdigit((c = in[i]))) {
hex += c;
i++;
}
- out += hex.toUInt(0, 16);
+ if (unicode)
+ out += QString(QChar(hex.toUInt(nullptr, 16))).toUtf8();
+ else
+ out += hex.toUInt(nullptr, 16);
} else if (c >= '0' && c < '8') {
QByteArray oct;
int n = 0;
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
index 3f3a99c48..1bc1dc2a2 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp
@@ -647,3 +647,11 @@ QObject::tr("message after system include without space");
#include"qobject.h"
QObject::tr("message after local include without space");
+
+
+
+// QTBUG-35164: handling of \uNNNN escapes
+QString unicodeEscape()
+{
+ return QApplication::tr("Context", "soft\u00ADhyphen");
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
index 683c2aef3..c344667cf 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result
@@ -295,6 +295,12 @@ backslashed \ stuff.</source>
<comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="main.cpp" line="656"/>
+ <source>Context</source>
+ <comment>soft­hyphen</comment>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QCoreApplication</name>