Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7698)

Unified Diff: chrome/renderer/spellchecker/spellcheck_worditerator.cc

Issue 1269343005: Updates SpellcheckWordIterator::GetNextWord to return an enum. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@break-iter
Patch Set: Addressed comments. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/spellchecker/spellcheck_worditerator.cc
diff --git a/chrome/renderer/spellchecker/spellcheck_worditerator.cc b/chrome/renderer/spellchecker/spellcheck_worditerator.cc
index cf5249c4a75ebd2c3d50e7697953b525d7cb87d4..4b653507505e11cab06f8df7cd1865ac8c28cbcb 100644
--- a/chrome/renderer/spellchecker/spellcheck_worditerator.cc
+++ b/chrome/renderer/spellchecker/spellcheck_worditerator.cc
@@ -20,6 +20,8 @@
#include "third_party/icu/source/common/unicode/uscript.h"
#include "third_party/icu/source/i18n/unicode/ulocdata.h"
+using base::i18n::BreakIterator;
+
// SpellcheckCharAttribute implementation:
SpellcheckCharAttribute::SpellcheckCharAttribute()
@@ -324,8 +326,7 @@ bool SpellcheckWordIterator::Initialize(
if (rule.empty())
return false;
- scoped_ptr<base::i18n::BreakIterator> iterator(
- new base::i18n::BreakIterator(base::string16(), rule));
+ scoped_ptr<BreakIterator> iterator(new BreakIterator(base::string16(), rule));
if (!iterator->Init()) {
// Since we're not passing in any text, the only reason this could fail
// is if we fail to parse the rules. Since the rules are hardcoded,
@@ -359,9 +360,10 @@ bool SpellcheckWordIterator::SetText(const base::char16* text, size_t length) {
return true;
}
-bool SpellcheckWordIterator::GetNextWord(base::string16* word_string,
- int* word_start,
- int* word_length) {
+SpellcheckWordIterator::WordIteratorStatus SpellcheckWordIterator::GetNextWord(
+ base::string16* word_string,
+ int* word_start,
+ int* word_length) {
DCHECK(!!text_);
word_string->clear();
@@ -369,28 +371,41 @@ bool SpellcheckWordIterator::GetNextWord(base::string16* word_string,
*word_length = 0;
if (!text_) {
- return false;
+ return IS_END_OF_TEXT;
}
- // Find a word that can be checked for spelling. Our rule sets filter out
- // invalid words (e.g. numbers and characters not supported by the
- // spellchecker language) so this ubrk_getRuleStatus() call returns
- // UBRK_WORD_NONE when this iterator finds an invalid word. So, we skip such
- // words until we can find a valid word or reach the end of the input string.
+ // Find a word that can be checked for spelling or a character that can be
+ // skipped over. Rather than moving past a skippable character this returns
+ // IS_SKIPPABLE and defers handling the character to the calling function.
while (iterator_->Advance()) {
const size_t start = iterator_->prev();
const size_t length = iterator_->pos() - start;
- if (iterator_->IsWord()) {
- if (Normalize(start, length, word_string)) {
+ switch (iterator_->GetWordBreakStatus()) {
+ case BreakIterator::IS_WORD_BREAK: {
+ if (Normalize(start, length, word_string)) {
+ *word_start = start;
+ *word_length = length;
+ return IS_WORD;
+ }
+ break;
+ }
+ case BreakIterator::IS_SKIPPABLE_WORD: {
+ *word_string = iterator_->GetString();
*word_start = start;
*word_length = length;
- return true;
+ return IS_SKIPPABLE;
+ }
+ // |iterator_| is RULE_BASED so the break status should never be
+ // IS_LINE_OR_CHAR_BREAK.
+ case BreakIterator::IS_LINE_OR_CHAR_BREAK: {
+ NOTREACHED();
+ break;
}
}
}
// There aren't any more words in the given text.
- return false;
+ return IS_END_OF_TEXT;
}
void SpellcheckWordIterator::Reset() {

Powered by Google App Engine
This is Rietveld 408576698