Index: third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp |
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingHelper.cpp b/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp |
similarity index 53% |
rename from third_party/WebKit/Source/core/editing/spellcheck/TextCheckingHelper.cpp |
rename to third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp |
index 4af7115c45741184e3e8280495ed578377055952..90d380a501657f36a3c0788e4a6bfffb17206267 100644 |
--- a/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingHelper.cpp |
+++ b/third_party/WebKit/Source/core/editing/spellcheck/TextCheckingParagraph.cpp |
@@ -24,7 +24,7 @@ |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
-#include "core/editing/spellcheck/TextCheckingHelper.h" |
+#include "core/editing/spellcheck/TextCheckingParagraph.h" |
#include "core/dom/Document.h" |
#include "core/dom/Range.h" |
@@ -32,50 +32,9 @@ |
#include "core/editing/VisibleUnits.h" |
#include "core/editing/iterators/CharacterIterator.h" |
#include "core/editing/iterators/WordAwareIterator.h" |
-#include "core/editing/markers/DocumentMarkerController.h" |
-#include "core/frame/LocalFrame.h" |
-#include "core/frame/Settings.h" |
-#include "core/page/SpellCheckerClient.h" |
-#include "platform/text/TextBreakIterator.h" |
-#include "platform/text/TextCheckerClient.h" |
namespace blink { |
-static void findMisspellings(TextCheckerClient& client, const String& text, Vector<TextCheckingResult>& results) |
yosin_UTC9
2016/08/16 06:04:06
Let's move class here, then re-factor.
|
-{ |
- Vector<UChar> characters; |
- text.appendTo(characters); |
- unsigned length = text.length(); |
- |
- TextBreakIterator* iterator = wordBreakIterator(characters.data(), length); |
- if (!iterator) |
- return; |
- |
- int wordStart = iterator->current(); |
- while (0 <= wordStart) { |
- int wordEnd = iterator->next(); |
- if (wordEnd < 0) |
- break; |
- int wordLength = wordEnd - wordStart; |
- int misspellingLocation = -1; |
- int misspellingLength = 0; |
- client.checkSpellingOfString(String(characters.data() + wordStart, wordLength), &misspellingLocation, &misspellingLength); |
- if (0 < misspellingLength) { |
- DCHECK_LE(0, misspellingLocation); |
- DCHECK_LE(misspellingLocation, wordLength); |
- DCHECK_LT(0, misspellingLength); |
- DCHECK_LE(misspellingLocation + misspellingLength, wordLength); |
- TextCheckingResult misspelling; |
- misspelling.decoration = TextDecorationTypeSpelling; |
- misspelling.location = wordStart + misspellingLocation; |
- misspelling.length = misspellingLength; |
- results.append(misspelling); |
- } |
- |
- wordStart = wordEnd; |
- } |
-} |
- |
static EphemeralRange expandToParagraphBoundary(const EphemeralRange& range) |
{ |
const VisiblePosition& start = createVisiblePosition(range.startPosition()); |
@@ -221,88 +180,4 @@ int TextCheckingParagraph::checkingLength() const |
return m_checkingLength; |
} |
-TextCheckingHelper::TextCheckingHelper(SpellCheckerClient& client, const Position& start, const Position& end) |
- : m_client(&client) |
- , m_start(start) |
- , m_end(end) |
-{ |
-} |
- |
-TextCheckingHelper::~TextCheckingHelper() |
-{ |
-} |
- |
-String TextCheckingHelper::findFirstMisspellingOrBadGrammar(int& outFirstFoundOffset) |
-{ |
- String firstFoundItem; |
- String misspelledWord; |
- |
- // Initialize out parameter; it will be updated if we find something to return. |
- outFirstFoundOffset = 0; |
- |
- // Expand the search range to encompass entire paragraphs, since text checking needs that much context. |
- // Determine the character offset from the start of the paragraph to the start of the original search range, |
- // since we will want to ignore results in this area. |
- Position paragraphStart = startOfParagraph(createVisiblePosition(m_start)).toParentAnchoredPosition(); |
- Position paragraphEnd = m_end; |
- int totalRangeLength = TextIterator::rangeLength(paragraphStart, paragraphEnd); |
- paragraphEnd = endOfParagraph(createVisiblePosition(m_start)).toParentAnchoredPosition(); |
- |
- int rangeStartOffset = TextIterator::rangeLength(paragraphStart, m_start); |
- int totalLengthProcessed = 0; |
- |
- bool firstIteration = true; |
- bool lastIteration = false; |
- while (totalLengthProcessed < totalRangeLength) { |
- // Iterate through the search range by paragraphs, checking each one for spelling. |
- int currentLength = TextIterator::rangeLength(paragraphStart, paragraphEnd); |
- int currentStartOffset = firstIteration ? rangeStartOffset : 0; |
- int currentEndOffset = currentLength; |
- if (inSameParagraph(createVisiblePosition(paragraphStart), createVisiblePosition(m_end))) { |
- // Determine the character offset from the end of the original search range to the end of the paragraph, |
- // since we will want to ignore results in this area. |
- currentEndOffset = TextIterator::rangeLength(paragraphStart, m_end); |
- lastIteration = true; |
- } |
- if (currentStartOffset < currentEndOffset) { |
- String paragraphString = plainText(EphemeralRange(paragraphStart, paragraphEnd)); |
- if (paragraphString.length() > 0) { |
- int spellingLocation = 0; |
- |
- Vector<TextCheckingResult> results; |
- findMisspellings(m_client->textChecker(), paragraphString, results); |
- |
- for (unsigned i = 0; i < results.size(); i++) { |
- const TextCheckingResult* result = &results[i]; |
- if (result->decoration == TextDecorationTypeSpelling && result->location >= currentStartOffset && result->location + result->length <= currentEndOffset) { |
- DCHECK_GT(result->length, 0); |
- DCHECK_GE(result->location, 0); |
- spellingLocation = result->location; |
- misspelledWord = paragraphString.substring(result->location, result->length); |
- DCHECK(misspelledWord.length()); |
- break; |
- } |
- } |
- |
- if (!misspelledWord.isEmpty()) { |
- int spellingOffset = spellingLocation - currentStartOffset; |
- if (!firstIteration) |
- spellingOffset += TextIterator::rangeLength(m_start, paragraphStart); |
- outFirstFoundOffset = spellingOffset; |
- firstFoundItem = misspelledWord; |
- break; |
- } |
- } |
- } |
- if (lastIteration || totalLengthProcessed + currentLength >= totalRangeLength) |
- break; |
- VisiblePosition newParagraphStart = startOfNextParagraph(createVisiblePosition(paragraphEnd)); |
- paragraphStart = newParagraphStart.toParentAnchoredPosition(); |
- paragraphEnd = endOfParagraph(newParagraphStart).toParentAnchoredPosition(); |
- firstIteration = false; |
- totalLengthProcessed += currentLength; |
- } |
- return firstFoundItem; |
-} |
- |
} // namespace blink |