void checkTextOfParagraph(TextCheckerClient* client, const UChar* text, int length, TextCheckingTypeMask checkingTypes, Vector<TextCheckingResult>& results) { #if USE(UNIFIED_TEXT_CHECKING) client->checkTextOfParagraph(text, length, checkingTypes, results); #else Vector<TextCheckingResult> spellingResult; if (checkingTypes & TextCheckingTypeSpelling) findMisspellings(client, text, 0, length, spellingResult); #if USE(GRAMMAR_CHECKING) Vector<TextCheckingResult> grammarResult; if (checkingTypes & TextCheckingTypeGrammar) { // Only checks grammartical error before the first misspellings int grammarCheckLength = length; for (size_t i = 0; i < spellingResult.size(); ++i) { if (spellingResult[i].location < grammarCheckLength) grammarCheckLength = spellingResult[i].location; } findBadGrammars(client, text, 0, grammarCheckLength, grammarResult); } if (grammarResult.size()) results.swap(grammarResult); #endif if (spellingResult.size()) { if (results.isEmpty()) results.swap(spellingResult); else results.appendVector(spellingResult); } #endif }
void checkTextOfParagraph(TextCheckerClient& client, const String& text, TextCheckingTypeMask checkingTypes, Vector<TextCheckingResult>& results) { Vector<UChar> characters; text.appendTo(characters); unsigned length = text.length(); Vector<TextCheckingResult> spellingResult; if (checkingTypes & TextCheckingTypeSpelling) findMisspellings(client, characters.data(), 0, length, spellingResult); Vector<TextCheckingResult> grammarResult; if (checkingTypes & TextCheckingTypeGrammar) { // Only checks grammartical error before the first misspellings int grammarCheckLength = length; for (const auto& spelling : spellingResult) { if (spelling.location < grammarCheckLength) grammarCheckLength = spelling.location; } findBadGrammars(client, characters.data(), 0, grammarCheckLength, grammarResult); } if (grammarResult.size()) results.swap(grammarResult); if (spellingResult.size()) { if (results.isEmpty()) results.swap(spellingResult); else results.appendVector(spellingResult); } }
void checkTextOfParagraph(TextCheckerClient& client, StringView text, TextCheckingTypeMask checkingTypes, Vector<TextCheckingResult>& results) { #if USE(UNIFIED_TEXT_CHECKING) results = client.checkTextOfParagraph(text, checkingTypes); #else Vector<TextCheckingResult> mispellings; if (checkingTypes & TextCheckingTypeSpelling) findMisspellings(client, text, mispellings); #if USE(GRAMMAR_CHECKING) // Look for grammatical errors that occur before the first misspelling. Vector<TextCheckingResult> grammaticalErrors; if (checkingTypes & TextCheckingTypeGrammar) { unsigned grammarCheckLength = text.length(); for (auto& mispelling : mispellings) grammarCheckLength = std::min<unsigned>(grammarCheckLength, mispelling.location); findGrammaticalErrors(client, text.substring(0, grammarCheckLength), grammaticalErrors); } results = std::move(grammaticalErrors); #endif if (results.isEmpty()) results = std::move(mispellings); else results.appendVector(mispellings); #endif // USE(UNIFIED_TEXT_CHECKING) }