void TextCheckingHelper::markAllBadGrammar() { // Use the "markAll" feature of findFirstBadGrammar. Ignore the return value and "out parameters"; all we need to // do is mark every instance. GrammarDetail ignoredGrammarDetail; int ignoredOffset; findFirstBadGrammar(ignoredGrammarDetail, ignoredOffset, true); }
void TextCheckingHelper::markAllBadGrammar() { #ifndef BUILDING_ON_TIGER // Use the "markAll" feature of findFirstBadGrammar. Ignore the return value and "out parameters"; all we need to // do is mark every instance. GrammarDetail ignoredGrammarDetail; int ignoredOffset; findFirstBadGrammar(ignoredGrammarDetail, ignoredOffset, true); #else ASSERT_NOT_REACHED(); #endif }
bool TextCheckingHelper::isUngrammatical() const { if (!m_client) return false; if (!m_range || m_range->collapsed(IGNORE_EXCEPTION)) return false; // Returns true only if the passed range exactly corresponds to a bad grammar detail range. This is analogous // to isSelectionMisspelled. It's not good enough for there to be some bad grammar somewhere in the range, // or overlapping the range; the ranges must exactly match. int grammarPhraseOffset; GrammarDetail grammarDetail; String badGrammarPhrase = findFirstBadGrammar(grammarDetail, grammarPhraseOffset, false); // No bad grammar in these parts at all. if (badGrammarPhrase.isEmpty()) return false; // Bad grammar, but phrase (e.g. sentence) starts beyond start of range. if (grammarPhraseOffset > 0) return false; ASSERT(grammarDetail.location >= 0); ASSERT(grammarDetail.length > 0); // Bad grammar, but start of detail (e.g. ungrammatical word) doesn't match start of range if (grammarDetail.location + grammarPhraseOffset) return false; // Bad grammar at start of range, but end of bad grammar is before or after end of range if (grammarDetail.length != TextIterator::rangeLength(m_range.get())) return false; // Update the spelling panel to be displaying this error (whether or not the spelling panel is on screen). // This is necessary to make a subsequent call to [NSSpellChecker ignoreWord:inSpellDocumentWithTag:] work // correctly; that call behaves differently based on whether the spelling panel is displaying a misspelling // or a grammar error. m_client->updateSpellingUIWithGrammarString(badGrammarPhrase, grammarDetail); return true; }