summaryrefslogtreecommitdiffstats
path: root/WebKit/android
diff options
context:
space:
mode:
authorCary Clark <cary@android.com>2010-11-18 14:10:13 -0500
committerCary Clark <cary@android.com>2010-11-18 14:10:13 -0500
commite5a6dbead6bec691c53e326500d9aa3339fda872 (patch)
treef107dc9a018a531e05fc44f535511b18bba5670d /WebKit/android
parentf9547834d9faf8b38b60a98d57b961b97065cdcd (diff)
downloadexternal_webkit-e5a6dbead6bec691c53e326500d9aa3339fda872.zip
external_webkit-e5a6dbead6bec691c53e326500d9aa3339fda872.tar.gz
external_webkit-e5a6dbead6bec691c53e326500d9aa3339fda872.tar.bz2
call ReverseBidi as needed in FindCanvas
bug:3184921 Change-Id: I2f05db656ab467a361fd395d264be3281f69b78c
Diffstat (limited to 'WebKit/android')
-rw-r--r--WebKit/android/nav/FindCanvas.cpp23
-rw-r--r--WebKit/android/nav/FindCanvas.h2
2 files changed, 25 insertions, 0 deletions
diff --git a/WebKit/android/nav/FindCanvas.cpp b/WebKit/android/nav/FindCanvas.cpp
index d60fffd..9f59877 100644
--- a/WebKit/android/nav/FindCanvas.cpp
+++ b/WebKit/android/nav/FindCanvas.cpp
@@ -29,9 +29,11 @@
#include "FindCanvas.h"
#include "LayerAndroid.h"
#include "IntRect.h"
+#include "SelectText.h"
#include "SkBlurMaskFilter.h"
#include "SkCornerPathEffect.h"
#include "SkRect.h"
+#include "SkUtils.h"
#include <utils/Log.h>
@@ -125,6 +127,27 @@ FindCanvas::FindCanvas(int width, int height, const UChar* lower,
, mUpperText(upper)
, mLength(byteLength)
, mNumFound(0) {
+ // the text has been provided in read order. Reverse as needed so the
+ // result contains left-to-right characters.
+ const uint16_t* start = mLowerText;
+ size_t count = byteLength >> 1;
+ const uint16_t* end = mLowerText + count;
+ while (start < end) {
+ SkUnichar ch = SkUTF16_NextUnichar(&start);
+ WTF::Unicode::Direction charDirection = WTF::Unicode::direction(ch);
+ if (WTF::Unicode::RightToLeftArabic == charDirection
+ || WTF::Unicode::RightToLeft == charDirection) {
+ mLowerReversed.clear();
+ mLowerReversed.append(mLowerText, count);
+ WebCore::ReverseBidi(mLowerReversed.begin(), count);
+ mLowerText = mLowerReversed.begin();
+ mUpperReversed.clear();
+ mUpperReversed.append(mUpperText, count);
+ WebCore::ReverseBidi(mUpperReversed.begin(), count);
+ mUpperText = mUpperReversed.begin();
+ break;
+ }
+ }
setBounder(&mBounder);
mOutset = -SkIntToScalar(INTEGER_OUTSET);
diff --git a/WebKit/android/nav/FindCanvas.h b/WebKit/android/nav/FindCanvas.h
index 2aba8e0..cbebfae 100644
--- a/WebKit/android/nav/FindCanvas.h
+++ b/WebKit/android/nav/FindCanvas.h
@@ -198,6 +198,8 @@ private:
WTF::Vector<MatchInfo>* mMatches;
const UChar* mLowerText;
const UChar* mUpperText;
+ Vector<UChar> mLowerReversed;
+ Vector<UChar> mUpperReversed;
size_t mLength;
FindBounder mBounder;
int mNumFound;