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

Unified Diff: third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp

Issue 2243173003: Simplify SpellChecker::markAllMisspellingsAndBadGrammar() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@CleanupUnifiedTextChecker
Patch Set: Created 4 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
« no previous file with comments | « third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp
diff --git a/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp b/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp
index 931a12f679b2e71586a9b4ad451789373405eaff..9b74a06d64b43545d4f5c559b42e320916ed13c8 100644
--- a/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp
+++ b/third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp
@@ -72,6 +72,30 @@ bool isSelectionInTextFormControl(const VisibleSelection& selection)
return !!enclosingTextFormControl(selection.start());
}
+static EphemeralRange expandEndToSentenceBoundary(const EphemeralRange& range)
+{
+ DCHECK(range.isNotNull());
+ const VisiblePosition& visibleEnd = createVisiblePosition(range.endPosition());
+ DCHECK(visibleEnd.isNotNull());
+ const Position& sentenceEnd = endOfSentence(visibleEnd).deepEquivalent();
+ // TODO(xiaochengh): |sentenceEnd < range.startPosition()| seems possible,
+ // which would trigger a DCHECK in EphemeralRange's constructor. Need more
+ // investigation, and if that is really the case, fix it.
+ return EphemeralRange(range.startPosition(), sentenceEnd.isNotNull() ? sentenceEnd : range.endPosition());
+}
+
+static EphemeralRange expandRangeToSentenceBoundary(const EphemeralRange& range)
+{
+ DCHECK(range.isNotNull());
+ const VisiblePosition& visibleStart = createVisiblePosition(range.startPosition());
+ DCHECK(visibleStart.isNotNull());
+ const Position& sentenceStart = startOfSentence(visibleStart).deepEquivalent();
+ const VisiblePosition& visibleEnd = createVisiblePosition(range.endPosition());
+ DCHECK(visibleStart.isNotNull());
+ const Position& sentenceEnd = endOfSentence(visibleEnd).deepEquivalent();
+ return EphemeralRange(sentenceStart.isNull() ? range.startPosition() : sentenceStart, sentenceEnd.isNull() ? range.endPosition() : sentenceEnd);
+}
+
} // namespace
SpellChecker* SpellChecker::create(LocalFrame& frame)
@@ -266,9 +290,25 @@ void SpellChecker::clearMisspellingsAndBadGrammar(const VisibleSelection &moving
removeMarkers(movingSelection, DocumentMarker::MisspellingMarkers());
}
-void SpellChecker::markMisspellingsAndBadGrammar(const VisibleSelection &movingSelection)
+void SpellChecker::markMisspellingsAndBadGrammar(const VisibleSelection& selection)
{
- markAllMisspellingsAndBadGrammar(movingSelection, movingSelection);
+ if (!isContinuousSpellCheckingEnabled())
yosin_UTC9 2016/08/16 02:28:47 BTW, Could you rename |isContinuousSpellCheckingEn
+ return;
+
+ const EphemeralRange& range = selection.toNormalizedEphemeralRange();
+ if (range.isNull())
+ return;
+
+ // If we're not in an editable node, bail.
+ Node* editableNode = range.startPosition().computeContainerNode();
+ if (!editableNode || !hasEditableStyle(*editableNode))
+ return;
+
+ if (!isSpellCheckingEnabledFor(editableNode))
+ return;
+
+ TextCheckingParagraph fullParagraphToCheck(expandRangeToSentenceBoundary(range));
+ chunkAndMarkAllMisspellingsAndBadGrammar(fullParagraphToCheck);
}
void SpellChecker::markMisspellingsAfterLineBreak(const VisibleSelection& wordSelection)
@@ -278,11 +318,7 @@ void SpellChecker::markMisspellingsAfterLineBreak(const VisibleSelection& wordSe
TRACE_EVENT0("blink", "SpellChecker::markMisspellingsAfterLineBreak");
- VisibleSelection wholeParagraph(
- startOfParagraph(wordSelection.visibleStart()),
- endOfParagraph(wordSelection.visibleEnd()));
-
- markAllMisspellingsAndBadGrammar(wordSelection, wholeParagraph);
+ markMisspellingsAndBadGrammar(wordSelection);
}
void SpellChecker::markMisspellingsAfterTypingToWord(const VisiblePosition &wordStart, const VisibleSelection& selectionAfterTyping)
@@ -293,8 +329,7 @@ void SpellChecker::markMisspellingsAfterTypingToWord(const VisiblePosition &word
TRACE_EVENT0("blink", "SpellChecker::markMisspellingsAfterTypingToWord");
VisibleSelection adjacentWords = VisibleSelection(startOfWord(wordStart, LeftWordIfOnBoundary), endOfWord(wordStart, RightWordIfOnBoundary));
- VisibleSelection selectedSentence = VisibleSelection(startOfSentence(wordStart), endOfSentence(wordStart));
- markAllMisspellingsAndBadGrammar(adjacentWords, selectedSentence);
+ markMisspellingsAndBadGrammar(adjacentWords);
}
bool SpellChecker::isSpellCheckingEnabledFor(Node* node) const
@@ -329,50 +364,6 @@ bool SpellChecker::isSpellCheckingEnabledFor(const VisibleSelection& selection)
return false;
}
-void SpellChecker::markAllMisspellingsAndBadGrammar(const VisibleSelection& spellingSelection, const VisibleSelection& grammarSelection)
-{
- if (!isContinuousSpellCheckingEnabled())
- return;
-
- // This function is called with selections already expanded to word boundaries.
- // This function is triggered by selection change, in which case we check
- // spelling and grammar, but don't autocorrect misspellings.
-
- const EphemeralRange& spellingRange = spellingSelection.toNormalizedEphemeralRange();
- const EphemeralRange& grammarRange = grammarSelection.toNormalizedEphemeralRange();
- if (spellingRange.isNull() || grammarRange.isNull())
- return;
-
- // If we're not in an editable node, bail.
- Node* editableNode = spellingRange.startPosition().computeContainerNode();
- if (!editableNode || !hasEditableStyle(*editableNode))
- return;
-
- if (!isSpellCheckingEnabledFor(editableNode))
- return;
-
- TextCheckingParagraph fullParagraphToCheck(grammarRange);
- chunkAndMarkAllMisspellingsAndBadGrammar(fullParagraphToCheck);
-}
-
-static EphemeralRange expandEndToSentenceBoundary(const EphemeralRange& range)
-{
- DCHECK(range.isNotNull());
- const VisiblePosition& visibleEnd = createVisiblePosition(range.endPosition());
- DCHECK(visibleEnd.isNotNull());
- const Position& sentenceEnd = endOfSentence(visibleEnd).deepEquivalent();
- return EphemeralRange(range.startPosition(), sentenceEnd.isNotNull() ? sentenceEnd : range.endPosition());
-}
-
-static EphemeralRange expandRangeToSentenceBoundary(const EphemeralRange& range)
-{
- DCHECK(range.isNotNull());
- const VisiblePosition& visibleStart = createVisiblePosition(range.startPosition());
- DCHECK(visibleStart.isNotNull());
- const Position& sentenceStart = startOfSentence(visibleStart).deepEquivalent();
- return expandEndToSentenceBoundary(EphemeralRange(sentenceStart.isNull() ? range.startPosition() : sentenceStart, range.endPosition()));
-}
-
void SpellChecker::chunkAndMarkAllMisspellingsAndBadGrammar(Node* node, const EphemeralRange& insertedRange)
{
TRACE_EVENT0("blink", "SpellChecker::chunkAndMarkAllMisspellingsAndBadGrammar");
@@ -721,8 +712,7 @@ void SpellChecker::spellCheckOldSelection(const VisibleSelection& oldSelection,
VisibleSelection oldAdjacentWords = VisibleSelection(startOfWord(oldStart, LeftWordIfOnBoundary), endOfWord(oldStart, RightWordIfOnBoundary));
if (oldAdjacentWords == newAdjacentWords)
return;
- VisibleSelection selectedSentence = VisibleSelection(startOfSentence(oldStart), endOfSentence(oldStart));
- markAllMisspellingsAndBadGrammar(oldAdjacentWords, selectedSentence);
+ markMisspellingsAndBadGrammar(oldAdjacentWords);
}
static Node* findFirstMarkable(Node* node)
« no previous file with comments | « third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698