void SpellCheckClient::finishLastTextCheck() { Vector<WebTextCheckingResult> results; int offset = 0; String text(m_lastRequestedTextCheckString.data(), m_lastRequestedTextCheckString.length()); while (text.length()) { int misspelledPosition = 0; int misspelledLength = 0; m_spellcheck.spellCheckWord(WebString(text.characters(), text.length()), &misspelledPosition, &misspelledLength); if (!misspelledLength) break; WebVector<WebString> suggestions; m_spellcheck.fillSuggestionList(WebString(text.characters() + misspelledPosition, misspelledLength), &suggestions); results.append(WebTextCheckingResult(WebTextCheckingTypeSpelling, offset + misspelledPosition, misspelledLength, suggestions.isEmpty() ? WebString() : suggestions[0])); text = text.substring(misspelledPosition + misspelledLength); offset += misspelledPosition + misspelledLength; } MockGrammarCheck::checkGrammarOfString(m_lastRequestedTextCheckString, &results); m_lastRequestedTextCheckingCompletion->didFinishCheckingText(results); m_lastRequestedTextCheckingCompletion = 0; }
bool MockGrammarCheck::checkGrammarOfString(const WebString& text, vector<WebTextCheckingResult>* results) { WEBKIT_ASSERT(results); string16 stringText = text; if (find_if(stringText.begin(), stringText.end(), isASCIIAlpha) == stringText.end()) return true; // Find matching grammatical errors from known ones. This function has to // check all errors because the given text may consist of two or more // sentences that have grammatical errors. static const struct { const char* text; int location; int length; } grammarErrors[] = { {"I have a issue.", 7, 1}, {"I have an grape.", 7, 2}, {"I have an kiwi.", 7, 2}, {"I have an muscat.", 7, 2}, {"You has the right.", 4, 3}, {"apple orange zz.", 0, 16}, {"apple zz orange.", 0, 16}, {"apple,zz,orange.", 0, 16}, {"orange,zz,apple.", 0, 16}, {"the the adlj adaasj sdklj. there there", 0, 38}, {"zz apple orange.", 0, 16}, }; for (size_t i = 0; i < ARRAYSIZE_UNSAFE(grammarErrors); ++i) { size_t offset = 0; string16 error(grammarErrors[i].text, grammarErrors[i].text + strlen(grammarErrors[i].text)); while ((offset = stringText.find(error, offset)) != string16::npos) { results->push_back(WebTextCheckingResult(WebTextCheckingTypeGrammar, offset + grammarErrors[i].location, grammarErrors[i].length)); offset += grammarErrors[i].length; } } return false; }