From 5a2ec43c8db3d26ffadd4e5ffd6ff1b76844bab6 Mon Sep 17 00:00:00 2001 From: "Shimeng (Simon) Wang" Date: Thu, 28 Oct 2010 17:14:27 -0700 Subject: [PATCH] Enhance auto hyphenation. 1. Bypass leading white spaces, since webkit does pass them down. 2. Return better hyphenation point, since previously it's more aggressive and causes display issue in Google books. issue: 2672163 Change-Id: I8ae47f7c553f533f752d6f7c697cf2fffd421e5b --- WebCore/platform/text/android/HyphenationAndroid.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/WebCore/platform/text/android/HyphenationAndroid.cpp b/WebCore/platform/text/android/HyphenationAndroid.cpp index e8ba5ef1e..cff0a66ef 100644 --- a/WebCore/platform/text/android/HyphenationAndroid.cpp +++ b/WebCore/platform/text/android/HyphenationAndroid.cpp @@ -75,6 +75,7 @@ size_t lastHyphenLocation(const UChar* characters, size_t length, size_t beforeI return 0; char word[maxWordLen]; + int wordLength = 0; for (size_t i = 0; i < length; ++i) { const UChar ch = characters[i]; // Only English for now. @@ -82,17 +83,24 @@ size_t lastHyphenLocation(const UChar* characters, size_t length, size_t beforeI // detection or rely on the langAttr in the html element. Though // seems right now the langAttr is not used or quite implemented in // webkit. - if (!isASCIIAlpha(ch)) + if (!isASCIIAlpha(ch)) { + // Bypass leading spaces. + if (isASCIISpace(ch) && !wordLength) + continue; return 0; - word[i] = ch; + } + word[wordLength++] = ch; } + if (wordLength < minWordLen) + return 0; static const int extraBuffer = 5; + const int leadingSpacesCount = length - wordLength; char hyphens[maxWordLen + extraBuffer]; - if (!hnj_hyphen_hyphenate(dict, word, length, hyphens)) { - for (size_t i = beforeIndex - 1; i > 0; --i) { + if (!hnj_hyphen_hyphenate(dict, word, wordLength, hyphens)) { + for (size_t i = beforeIndex - 2 - leadingSpacesCount; i > 0; --i) { if (hyphens[i] & 1) - return i + 1; + return i + 1 + leadingSpacesCount; } } -- 2.11.0