Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Unified Diff: Source/core/editing/TextCheckingHelper.cpp

Issue 576073003: Removal of more temporary Range objects. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix build; accidentally removed .get() call Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/editing/TextCheckingHelper.h ('k') | Source/core/editing/TextIterator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/TextCheckingHelper.cpp
diff --git a/Source/core/editing/TextCheckingHelper.cpp b/Source/core/editing/TextCheckingHelper.cpp
index d393c81792496a4079fd6059785ce91ba0d04c28..27b65eebadc66c5714d9ef845c2bc035615562a4 100644
--- a/Source/core/editing/TextCheckingHelper.cpp
+++ b/Source/core/editing/TextCheckingHelper.cpp
@@ -219,11 +219,11 @@ int TextCheckingParagraph::checkingLength() const
return m_checkingLength;
}
-TextCheckingHelper::TextCheckingHelper(SpellCheckerClient& client, PassRefPtrWillBeRawPtr<Range> range)
+TextCheckingHelper::TextCheckingHelper(SpellCheckerClient& client, const Position& start, const Position& end)
: m_client(&client)
- , m_range(range)
+ , m_start(start)
+ , m_end(end)
{
- ASSERT_ARG(m_range, m_range);
}
TextCheckingHelper::~TextCheckingHelper()
@@ -232,7 +232,7 @@ TextCheckingHelper::~TextCheckingHelper()
String TextCheckingHelper::findFirstMisspelling(int& firstMisspellingOffset, bool markAll, RefPtrWillBeRawPtr<Range>& firstMisspellingRange)
{
- WordAwareIterator it(m_range.get());
+ WordAwareIterator it(m_start, m_end);
firstMisspellingOffset = 0;
String firstMisspelling;
@@ -261,17 +261,19 @@ String TextCheckingHelper::findFirstMisspelling(int& firstMisspellingOffset, boo
if (misspellingLocation >= 0 && misspellingLength > 0 && misspellingLocation < length && misspellingLength <= length && misspellingLocation + misspellingLength <= length) {
// Compute range of misspelled word
- RefPtrWillBeRawPtr<Range> misspellingRange = TextIterator::subrange(m_range.get(), currentChunkOffset + misspellingLocation, misspellingLength);
+ Position misspellingStart = m_start;
+ Position misspellingEnd = m_end;
+ TextIterator::subrange(misspellingStart, misspellingEnd, currentChunkOffset + misspellingLocation, misspellingLength);
// Remember first-encountered misspelling and its offset.
if (!firstMisspelling) {
firstMisspellingOffset = currentChunkOffset + misspellingLocation;
firstMisspelling = it.substring(misspellingLocation, misspellingLength);
- firstMisspellingRange = misspellingRange;
+ firstMisspellingRange = Range::create(misspellingStart.containerNode()->document(), m_start, m_end);
}
// Store marker for misspelled word.
- misspellingRange->startContainer()->document().markers().addMarker(misspellingRange.get(), DocumentMarker::Spelling);
+ misspellingStart.containerNode()->document().markers().addMarker(misspellingStart, misspellingEnd, DocumentMarker::Spelling);
// Bail out if we're marking only the first misspelling, and not all instances.
if (!markAll)
@@ -306,31 +308,29 @@ String TextCheckingHelper::findFirstMisspellingOrBadGrammar(bool checkGrammar, b
// Expand the search range to encompass entire paragraphs, since text checking needs that much context.
// Determine the character offset from the start of the paragraph to the start of the original search range,
// since we will want to ignore results in this area.
- RefPtrWillBeRawPtr<Range> paragraphRange = m_range->cloneRange();
- setStart(paragraphRange.get(), startOfParagraph(VisiblePosition(m_range->startPosition())));
- int totalRangeLength = TextIterator::rangeLength(paragraphRange.get());
- setEnd(paragraphRange.get(), endOfParagraph(VisiblePosition(m_range->startPosition())));
+ Position paragraphStart = startOfParagraph(VisiblePosition(m_start)).toParentAnchoredPosition();
+ Position paragraphEnd = m_end;
+ int totalRangeLength = TextIterator::rangeLength(paragraphStart, paragraphEnd);
+ paragraphEnd = endOfParagraph(VisiblePosition(m_start)).toParentAnchoredPosition();
- RefPtrWillBeRawPtr<Range> offsetAsRange = Range::create(paragraphRange->startContainer()->document(), paragraphRange->startPosition(), m_range->startPosition());
- int rangeStartOffset = TextIterator::rangeLength(offsetAsRange.get());
+ int rangeStartOffset = TextIterator::rangeLength(paragraphStart, m_start);
int totalLengthProcessed = 0;
bool firstIteration = true;
bool lastIteration = false;
while (totalLengthProcessed < totalRangeLength) {
// Iterate through the search range by paragraphs, checking each one for spelling and grammar.
- int currentLength = TextIterator::rangeLength(paragraphRange.get());
+ int currentLength = TextIterator::rangeLength(paragraphStart, paragraphEnd);
int currentStartOffset = firstIteration ? rangeStartOffset : 0;
int currentEndOffset = currentLength;
- if (inSameParagraph(VisiblePosition(paragraphRange->startPosition()), VisiblePosition(m_range->endPosition()))) {
+ if (inSameParagraph(VisiblePosition(paragraphStart), VisiblePosition(m_end))) {
// Determine the character offset from the end of the original search range to the end of the paragraph,
// since we will want to ignore results in this area.
- RefPtrWillBeRawPtr<Range> endOffsetAsRange = Range::create(paragraphRange->startContainer()->document(), paragraphRange->startPosition(), m_range->endPosition());
- currentEndOffset = TextIterator::rangeLength(endOffsetAsRange.get());
+ currentEndOffset = TextIterator::rangeLength(paragraphStart, m_end);
lastIteration = true;
}
if (currentStartOffset < currentEndOffset) {
- String paragraphString = plainText(paragraphRange.get());
+ String paragraphString = plainText(paragraphStart, paragraphEnd);
if (paragraphString.length() > 0) {
bool foundGrammar = false;
int spellingLocation = 0;
@@ -377,10 +377,8 @@ String TextCheckingHelper::findFirstMisspellingOrBadGrammar(bool checkGrammar, b
if (!misspelledWord.isEmpty() && (!checkGrammar || badGrammarPhrase.isEmpty() || spellingLocation <= grammarDetailLocation)) {
int spellingOffset = spellingLocation - currentStartOffset;
- if (!firstIteration) {
- RefPtrWillBeRawPtr<Range> paragraphOffsetAsRange = Range::create(paragraphRange->startContainer()->document(), m_range->startPosition(), paragraphRange->startPosition());
- spellingOffset += TextIterator::rangeLength(paragraphOffsetAsRange.get());
- }
+ if (!firstIteration)
+ spellingOffset += TextIterator::rangeLength(m_start, paragraphStart);
outIsSpelling = true;
outFirstFoundOffset = spellingOffset;
firstFoundItem = misspelledWord;
@@ -388,10 +386,8 @@ String TextCheckingHelper::findFirstMisspellingOrBadGrammar(bool checkGrammar, b
}
if (checkGrammar && !badGrammarPhrase.isEmpty()) {
int grammarPhraseOffset = grammarPhraseLocation - currentStartOffset;
- if (!firstIteration) {
- RefPtrWillBeRawPtr<Range> paragraphOffsetAsRange = Range::create(paragraphRange->startContainer()->document(), m_range->startPosition(), paragraphRange->startPosition());
- grammarPhraseOffset += TextIterator::rangeLength(paragraphOffsetAsRange.get());
- }
+ if (!firstIteration)
+ grammarPhraseOffset += TextIterator::rangeLength(m_start, paragraphStart);
outIsSpelling = false;
outFirstFoundOffset = grammarPhraseOffset;
firstFoundItem = badGrammarPhrase;
@@ -401,9 +397,9 @@ String TextCheckingHelper::findFirstMisspellingOrBadGrammar(bool checkGrammar, b
}
if (lastIteration || totalLengthProcessed + currentLength >= totalRangeLength)
break;
- VisiblePosition newParagraphStart = startOfNextParagraph(VisiblePosition(paragraphRange->endPosition()));
- setStart(paragraphRange.get(), newParagraphStart);
- setEnd(paragraphRange.get(), endOfParagraph(newParagraphStart));
+ VisiblePosition newParagraphStart = startOfNextParagraph(VisiblePosition(paragraphEnd));
+ paragraphStart = newParagraphStart.toParentAnchoredPosition();
+ paragraphEnd = endOfParagraph(newParagraphStart).toParentAnchoredPosition();
firstIteration = false;
totalLengthProcessed += currentLength;
}
@@ -431,8 +427,10 @@ int TextCheckingHelper::findFirstGrammarDetail(const Vector<GrammarDetail>& gram
continue;
if (markAll) {
- RefPtrWillBeRawPtr<Range> badGrammarRange = TextIterator::subrange(m_range.get(), badGrammarPhraseLocation - startOffset + detail->location, detail->length);
- badGrammarRange->startContainer()->document().markers().addMarker(badGrammarRange.get(), DocumentMarker::Grammar, detail->userDescription);
+ Position badGrammarStart = m_start;
+ Position badGrammarEnd = m_end;
+ TextIterator::subrange(badGrammarStart, badGrammarEnd, badGrammarPhraseLocation - startOffset + detail->location, detail->length);
+ badGrammarStart.containerNode()->document().markers().addMarker(badGrammarStart, badGrammarEnd, DocumentMarker::Grammar, detail->userDescription);
}
// Remember this detail only if it's earlier than our current candidate (the details aren't in a guaranteed order)
@@ -459,7 +457,7 @@ String TextCheckingHelper::findFirstBadGrammar(GrammarDetail& outGrammarDetail,
// Expand the search range to encompass entire paragraphs, since grammar checking needs that much context.
// Determine the character offset from the start of the paragraph to the start of the original search range,
// since we will want to ignore results in this area.
- TextCheckingParagraph paragraph(m_range);
+ TextCheckingParagraph paragraph(Range::create(m_start.containerNode()->document(), m_start, m_end));
// Start checking from beginning of paragraph, but skip past results that occur before the start of the original search range.
int startOffset = 0;
@@ -523,10 +521,8 @@ void TextCheckingHelper::markAllBadGrammar()
bool TextCheckingHelper::unifiedTextCheckerEnabled() const
{
- if (!m_range)
- return false;
-
- Document& doc = m_range->ownerDocument();
+ ASSERT(m_start.isNotNull());
+ Document& doc = m_start.containerNode()->document();
return blink::unifiedTextCheckerEnabled(doc.frame());
}
« no previous file with comments | « Source/core/editing/TextCheckingHelper.h ('k') | Source/core/editing/TextIterator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698