summaryrefslogtreecommitdiff
path: root/tools/aapt/pseudolocalize.cpp
diff options
context:
space:
mode:
authorIgor Viarheichyk <viarheichyk@google.com>2017-07-06 15:23:51 -0700
committerIgor Viarheichyk <viarheichyk@google.com>2017-07-06 15:41:47 -0700
commit4fb6516a55604bfbae2e8b1411e1bdd27df1866f (patch)
tree674a09589c4a845ca4bea340335e8eb683a3ee65 /tools/aapt/pseudolocalize.cpp
parentf02beb06daf49a2113881484579a36249f5a19a1 (diff)
Improved word break for BiDi pseudolocalizer.
Characted sequences \n and \t are now treated as word separators by BiDi pseudolocalizer. This solves issues when text rendering engine breaks a line in the middle of a text chunk marked with RLM+RLO and PDF+RLM sequences. Bug:34064580 Change-Id: I52e6018785fae25479fa167440f24c534b0e3253 Fixes:34064580 Test: make aapt2_tests Test: Run aapt2_tests binary
Diffstat (limited to 'tools/aapt/pseudolocalize.cpp')
-rw-r--r--tools/aapt/pseudolocalize.cpp12
1 files changed, 11 insertions, 1 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) {