summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/aapt/pseudolocalize.cpp12
-rw-r--r--tools/aapt/tests/Pseudolocales_test.cpp4
-rw-r--r--tools/aapt2/compile/Pseudolocalizer.cpp12
-rw-r--r--tools/aapt2/compile/Pseudolocalizer_test.cpp5
4 files changed, 31 insertions, 2 deletions
diff --git a/tools/aapt/pseudolocalize.cpp b/tools/aapt/pseudolocalize.cpp
index c7fee2c19342..5c47e0fa8a16 100644
--- a/tools/aapt/pseudolocalize.cpp
+++ b/tools/aapt/pseudolocalize.cpp
@@ -360,9 +360,15 @@ String16 PseudoMethodBidi::text(const String16& source)
String16 result;
bool lastspace = true;
bool space = true;
+ bool escape = false;
+ const char16_t ESCAPE_CHAR = '\\';
for (size_t i=0; i<source.size(); i++) {
char16_t c = s[i];
- space = is_space(c);
+ if (!escape && c == ESCAPE_CHAR) {
+ escape = true;
+ continue;
+ }
+ space = (!escape && is_space(c)) || (escape && (c == 'n' || c == 't'));
if (lastspace && !space) {
// Word start
result += k_rlm + k_rlo;
@@ -371,6 +377,10 @@ String16 PseudoMethodBidi::text(const String16& source)
result += k_pdf + k_rlm;
}
lastspace = space;
+ if (escape) {
+ result.append(&ESCAPE_CHAR, 1);
+ escape=false;
+ }
result.append(&c, 1);
}
if (!lastspace) {
diff --git a/tools/aapt/tests/Pseudolocales_test.cpp b/tools/aapt/tests/Pseudolocales_test.cpp
index 4670e9fd53ea..a6aed3abd7cf 100644
--- a/tools/aapt/tests/Pseudolocales_test.cpp
+++ b/tools/aapt/tests/Pseudolocales_test.cpp
@@ -87,6 +87,10 @@ TEST(Pseudolocales, PlaintextBidi) {
"\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\n" \
" \xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\n",
PSEUDO_BIDI);
+ simple_helper("hello\\nworld\\n",
+ "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\\n"
+ "\xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\\n",
+ PSEUDO_BIDI);
}
TEST(Pseudolocales, SimpleICU) {
diff --git a/tools/aapt2/compile/Pseudolocalizer.cpp b/tools/aapt2/compile/Pseudolocalizer.cpp
index 15a3d8c289e2..3a515fad3202 100644
--- a/tools/aapt2/compile/Pseudolocalizer.cpp
+++ b/tools/aapt2/compile/Pseudolocalizer.cpp
@@ -445,9 +445,15 @@ std::string PseudoMethodBidi::Text(const StringPiece& source) {
std::string result;
bool lastspace = true;
bool space = true;
+ bool escape = false;
+ const char ESCAPE_CHAR = '\\';
for (size_t i = 0; i < source.size(); i++) {
char c = s[i];
- space = isspace(c);
+ if (!escape && c == ESCAPE_CHAR) {
+ escape = true;
+ continue;
+ }
+ space = (!escape && isspace(c)) || (escape && (c == 'n' || c == 't'));
if (lastspace && !space) {
// Word start
result += kRlm + kRlo;
@@ -456,6 +462,10 @@ std::string PseudoMethodBidi::Text(const StringPiece& source) {
result += kPdf + kRlm;
}
lastspace = space;
+ if (escape) {
+ result.append(&ESCAPE_CHAR, 1);
+ escape=false;
+ }
result.append(&c, 1);
}
if (!lastspace) {
diff --git a/tools/aapt2/compile/Pseudolocalizer_test.cpp b/tools/aapt2/compile/Pseudolocalizer_test.cpp
index d3b7b02d1abb..65d2472ef2a9 100644
--- a/tools/aapt2/compile/Pseudolocalizer_test.cpp
+++ b/tools/aapt2/compile/Pseudolocalizer_test.cpp
@@ -97,6 +97,11 @@ TEST(PseudolocalizerTest, PlaintextBidi) {
"\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\n"
" \xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\n",
Pseudolocalizer::Method::kBidi));
+ EXPECT_TRUE(
+ SimpleHelper("hello\\nworld\\n",
+ "\xe2\x80\x8f\xE2\x80\xaehello\xE2\x80\xac\xe2\x80\x8f\\n"
+ "\xe2\x80\x8f\xE2\x80\xaeworld\xE2\x80\xac\xe2\x80\x8f\\n",
+ Pseudolocalizer::Method::kBidi));
}
TEST(PseudolocalizerTest, SimpleICU) {