diff options
| author | Cary Clark <cary@android.com> | 2010-11-18 14:10:13 -0500 |
|---|---|---|
| committer | Cary Clark <cary@android.com> | 2010-11-18 14:10:13 -0500 |
| commit | e5a6dbead6bec691c53e326500d9aa3339fda872 (patch) | |
| tree | f107dc9a018a531e05fc44f535511b18bba5670d /WebKit/android | |
| parent | f9547834d9faf8b38b60a98d57b961b97065cdcd (diff) | |
| download | external_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.cpp | 23 | ||||
| -rw-r--r-- | WebKit/android/nav/FindCanvas.h | 2 |
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; |
