Index: Source/core/editing/SurroundingText.cpp |
diff --git a/Source/core/editing/SurroundingText.cpp b/Source/core/editing/SurroundingText.cpp |
index 33a54e989901fbcaceb539591a58037d8417c4e9..ca1a5ed17d8cf64e6d6ace9761756880b7faea45 100644 |
--- a/Source/core/editing/SurroundingText.cpp |
+++ b/Source/core/editing/SurroundingText.cpp |
@@ -39,26 +39,42 @@ |
namespace WebCore { |
+SurroundingText::SurroundingText(const Range& range, unsigned maxLength) |
+ : m_startOffsetInContent(0) |
+ , m_endOffsetInContent(0) |
+{ |
+ initialize(range.startPosition(), range.endPosition(), maxLength); |
+} |
+ |
SurroundingText::SurroundingText(const Position& position, unsigned maxLength) |
- : m_positionOffsetInContent(0) |
+ : m_startOffsetInContent(0) |
+ , m_endOffsetInContent(0) |
+{ |
+ initialize(position, position, maxLength); |
+} |
+ |
+void SurroundingText::initialize(const Position& startPosition, const Position& endPosition, unsigned maxLength) |
{ |
+ ASSERT(startPosition.document() == endPosition.document()); |
+ |
const unsigned halfMaxLength = maxLength / 2; |
- Document* document = position.document(); |
- // The |position| will have no document if it is null (as in no position). |
+ Document* document = startPosition.document(); |
+ // The position will have no document if it is null (as in no position). |
if (!document) |
return; |
// The forward range starts at the selection end and ends at the document's |
// end. It will then be updated to only contain the text in the text in the |
// right range around the selection. |
- RefPtrWillBeRawPtr<Range> forwardRange = Range::create(*document, position, lastPositionInNode(document->documentElement()).parentAnchoredEquivalent()); |
+ RefPtrWillBeRawPtr<Range> forwardRange = Range::create(*document, endPosition, lastPositionInNode(document->documentElement()).parentAnchoredEquivalent()); |
CharacterIterator forwardIterator(forwardRange.get(), TextIteratorStopsOnFormControls); |
+ // FIXME: why do we stop going trough the text if we were not able to select something on the right? |
if (!forwardIterator.atEnd()) |
forwardIterator.advance(maxLength - halfMaxLength); |
forwardRange = forwardIterator.range(); |
- if (!forwardRange || !Range::create(*document, position, forwardRange->startPosition())->text().length()) { |
+ if (!forwardRange || !Range::create(*document, endPosition, forwardRange->startPosition())->text().length()) { |
ASSERT(forwardRange); |
return; |
} |
@@ -66,7 +82,7 @@ SurroundingText::SurroundingText(const Position& position, unsigned maxLength) |
// Same as with the forward range but with the backward range. The range |
// starts at the document's start and ends at the selection start and will |
// be updated. |
- RefPtrWillBeRawPtr<Range> backwardsRange = Range::create(*document, firstPositionInNode(document->documentElement()).parentAnchoredEquivalent(), position); |
+ RefPtrWillBeRawPtr<Range> backwardsRange = Range::create(*document, firstPositionInNode(document->documentElement()).parentAnchoredEquivalent(), startPosition); |
BackwardsCharacterIterator backwardsIterator(backwardsRange.get(), TextIteratorStopsOnFormControls); |
if (!backwardsIterator.atEnd()) |
backwardsIterator.advance(halfMaxLength); |
@@ -77,7 +93,8 @@ SurroundingText::SurroundingText(const Position& position, unsigned maxLength) |
return; |
} |
- m_positionOffsetInContent = Range::create(*document, backwardsRange->endPosition(), position)->text().length(); |
+ m_startOffsetInContent = Range::create(*document, backwardsRange->endPosition(), startPosition)->text().length(); |
+ m_endOffsetInContent = Range::create(*document, backwardsRange->endPosition(), endPosition)->text().length(); |
m_contentRange = Range::create(*document, backwardsRange->endPosition(), forwardRange->startPosition()); |
ASSERT(m_contentRange); |
} |
@@ -112,9 +129,14 @@ String SurroundingText::content() const |
return String(); |
} |
-unsigned SurroundingText::positionOffsetInContent() const |
+unsigned SurroundingText::startOffsetInContent() const |
+{ |
+ return m_startOffsetInContent; |
+} |
+ |
+unsigned SurroundingText::endOffsetInContent() const |
{ |
- return m_positionOffsetInContent; |
+ return m_endOffsetInContent; |
} |
} // namespace WebCore |