| Index: Source/core/editing/SurroundingText.cpp
|
| diff --git a/Source/core/editing/SurroundingText.cpp b/Source/core/editing/SurroundingText.cpp
|
| index e005ce0f96d7285eb19f3e7a9cfd45a2876f3436..01fd7bb8121d6ba841cbeda155d66d72588a54f7 100644
|
| --- a/Source/core/editing/SurroundingText.cpp
|
| +++ b/Source/core/editing/SurroundingText.cpp
|
| @@ -39,26 +39,41 @@
|
|
|
| namespace WebCore {
|
|
|
| +SurroundingText::SurroundingText(const Position& startPosition, const Position& endPosition, unsigned maxLength)
|
| + : m_startOffsetInContent(0)
|
| + , m_endOffsetInContent(0)
|
| +{
|
| + process(startPosition, endPosition, maxLength);
|
| +}
|
| +
|
| SurroundingText::SurroundingText(const Position& position, unsigned maxLength)
|
| - : m_positionOffsetInContent(0)
|
| + : m_startOffsetInContent(0)
|
| + , m_endOffsetInContent(0)
|
| {
|
| - const unsigned halfMaxLength = maxLength / 2;
|
| + process(position, position, maxLength);
|
| +}
|
|
|
| - Document* document = position.document();
|
| - // The |position| will have no document if it is null (as in no position).
|
| - if (!document)
|
| +void SurroundingText::process(const Position& startPosition, const Position& endPosition, unsigned maxLength)
|
| +{
|
| + if (startPosition.isNull() || endPosition.isNull())
|
| return;
|
|
|
| + const unsigned halfMaxLength = maxLength / 2;
|
| +
|
| + Document* document = startPosition.document();
|
| + ASSERT(document && startPosition.document() == endPosition.document());
|
| +
|
| // 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 = makeRange(position, lastPositionInNode(document->documentElement()));
|
| + RefPtrWillBeRawPtr<Range> forwardRange = makeRange(endPosition, lastPositionInNode(document->documentElement()));
|
| 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 +81,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 = makeRange(firstPositionInNode(document->documentElement()), position);
|
| + RefPtrWillBeRawPtr<Range> backwardsRange = makeRange(firstPositionInNode(document->documentElement()), startPosition);
|
| BackwardsCharacterIterator backwardsIterator(backwardsRange.get(), TextIteratorStopsOnFormControls);
|
| if (!backwardsIterator.atEnd())
|
| backwardsIterator.advance(halfMaxLength);
|
| @@ -77,7 +92,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 +128,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
|
|
|