void SpellChecker::markMisspellingsOrBadGrammar(const VisibleSelection& selection, bool checkSpelling, RefPtr<Range>& firstMisspellingRange) { // This function is called with a selection already expanded to word boundaries. // Might be nice to assert that here. // This function is used only for as-you-type checking, so if that's off we do nothing. Note that // grammar checking can only be on if spell checking is also on. if (!isContinuousSpellCheckingEnabled()) return; RefPtr<Range> searchRange(selection.toNormalizedRange()); if (!searchRange) return; // If we're not in an editable node, bail. Node* editableNode = searchRange->startContainer(); if (!editableNode || !editableNode->hasEditableStyle()) return; if (!isSpellCheckingEnabledFor(editableNode)) return; TextCheckingHelper checker(spellCheckerClient(), searchRange); if (checkSpelling) checker.markAllMisspellings(firstMisspellingRange); else if (isGrammarCheckingEnabled()) checker.markAllBadGrammar(); }
void SpellChecker::markAllMisspellingsAndBadGrammarInRanges(TextCheckingTypeMask textCheckingOptions, Range* spellingRange, Range* grammarRange) { ASSERT(unifiedTextCheckerEnabled()); bool shouldMarkGrammar = textCheckingOptions & TextCheckingTypeGrammar; // This function is called with selections already expanded to word boundaries. if (!spellingRange || (shouldMarkGrammar && !grammarRange)) return; // If we're not in an editable node, bail. Node* editableNode = spellingRange->startContainer(); if (!editableNode || !editableNode->hasEditableStyle()) return; if (!isSpellCheckingEnabledFor(editableNode)) return; Range* rangeToCheck = shouldMarkGrammar ? grammarRange : spellingRange; TextCheckingParagraph fullParagraphToCheck(rangeToCheck); bool asynchronous = m_frame.settings() && m_frame.settings()->asynchronousSpellCheckingEnabled(); chunkAndMarkAllMisspellingsAndBadGrammar(textCheckingOptions, fullParagraphToCheck, asynchronous); }
bool SpellChecker::isSpellCheckingEnabledInFocusedNode() const { return isSpellCheckingEnabledFor(m_frame.selection().start().deprecatedNode()); }
static bool isSpellCheckingEnabledFor(const VisibleSelection& selection) { if (selection.isNone()) return false; return isSpellCheckingEnabledFor(selection.start()); }