static void findBadGrammars(TextCheckerClient& client, const UChar* text, int start, int length, Vector<TextCheckingResult>& results) { int checkLocation = start; int checkLength = length; while (0 < checkLength) { int badGrammarLocation = -1; int badGrammarLength = 0; Vector<GrammarDetail> badGrammarDetails; client.checkGrammarOfString(String(text + checkLocation, checkLength), badGrammarDetails, &badGrammarLocation, &badGrammarLength); if (!badGrammarLength) break; ASSERT(0 <= badGrammarLocation && badGrammarLocation <= checkLength); ASSERT(0 < badGrammarLength && badGrammarLocation + badGrammarLength <= checkLength); TextCheckingResult badGrammar; badGrammar.decoration = TextDecorationTypeGrammar; badGrammar.location = checkLocation + badGrammarLocation; badGrammar.length = badGrammarLength; badGrammar.details.swap(badGrammarDetails); results.append(badGrammar); checkLocation += (badGrammarLocation + badGrammarLength); checkLength -= (badGrammarLocation + badGrammarLength); } }
static void findGrammaticalErrors(TextCheckerClient& client, StringView text, Vector<TextCheckingResult>& results) { for (unsigned checkLocation = 0; checkLocation < text.length(); ) { int badGrammarLocation = -1; int badGrammarLength = 0; Vector<GrammarDetail> badGrammarDetails; client.checkGrammarOfString(text.substring(checkLocation), badGrammarDetails, &badGrammarLocation, &badGrammarLength); if (!badGrammarLength) break; ASSERT(badGrammarLocation >= 0); ASSERT(static_cast<unsigned>(badGrammarLocation) <= text.length() - checkLocation); ASSERT(badGrammarLength > 0); ASSERT(static_cast<unsigned>(badGrammarLength) <= text.length() - checkLocation - badGrammarLocation); TextCheckingResult badGrammar; badGrammar.type = TextCheckingTypeGrammar; badGrammar.location = checkLocation + badGrammarLocation; badGrammar.length = badGrammarLength; badGrammar.details = std::move(badGrammarDetails); results.append(badGrammar); checkLocation += badGrammarLocation + badGrammarLength; } }