| Index: Source/core/rendering/InlineIterator.h
|
| diff --git a/Source/core/rendering/InlineIterator.h b/Source/core/rendering/InlineIterator.h
|
| index 1246e3d0bc14202fea15e51f231aa7043aeca1e8..87c42c4e4a34ff007d0ce306ed1c47d416f8e689 100644
|
| --- a/Source/core/rendering/InlineIterator.h
|
| +++ b/Source/core/rendering/InlineIterator.h
|
| @@ -77,6 +77,7 @@ public:
|
| void setNextBreakablePosition(int position) { m_nextBreakablePosition = position; }
|
|
|
| unsigned offset() const { return m_pos; }
|
| + void setOffset(unsigned position) { m_pos = position; }
|
| RenderObject* root() const { return m_root; }
|
|
|
| void fastIncrementInTextNode();
|
| @@ -104,20 +105,17 @@ private:
|
| RenderObject* m_obj;
|
|
|
| int m_nextBreakablePosition;
|
| -
|
| -// FIXME: These should be private.
|
| -public:
|
| unsigned m_pos;
|
| };
|
|
|
| inline bool operator==(const InlineIterator& it1, const InlineIterator& it2)
|
| {
|
| - return it1.m_pos == it2.m_pos && it1.object() == it2.object();
|
| + return it1.offset() == it2.offset() && it1.object() == it2.object();
|
| }
|
|
|
| inline bool operator!=(const InlineIterator& it1, const InlineIterator& it2)
|
| {
|
| - return it1.m_pos != it2.m_pos || it1.object() != it2.object();
|
| + return it1.offset() != it2.offset() || it1.object() != it2.object();
|
| }
|
|
|
| static inline WTF::Unicode::Direction embedCharFromDirection(TextDirection dir, EUnicodeBidi unicodeBidi)
|
| @@ -446,7 +444,7 @@ inline bool InlineBidiResolver::isEndOfLine(const InlineIterator& end)
|
| {
|
| bool inEndOfLine = m_current == end || m_current.atEnd() || (inIsolate() && m_current.object() == end.object());
|
| if (inIsolate() && inEndOfLine) {
|
| - m_current.moveTo(m_current.object(), end.m_pos, m_current.nextBreakablePosition());
|
| + m_current.moveTo(m_current.object(), end.offset(), m_current.nextBreakablePosition());
|
| m_last = m_current;
|
| updateStatusLastFromCurrentDirection(WTF::Unicode::OtherNeutral);
|
| }
|
| @@ -583,7 +581,7 @@ static void adjustMidpointsAndAppendRunsForObjectIfNeeded(RenderObject* obj, uns
|
| // This is a new start point. Stop ignoring objects and
|
| // adjust our start.
|
| lineMidpointState.betweenMidpoints = false;
|
| - start = nextMidpoint.m_pos;
|
| + start = nextMidpoint.offset();
|
| lineMidpointState.currentMidpoint++;
|
| if (start < end)
|
| return adjustMidpointsAndAppendRunsForObjectIfNeeded(obj, start, end, resolver, behavior, tracker);
|
| @@ -595,13 +593,13 @@ static void adjustMidpointsAndAppendRunsForObjectIfNeeded(RenderObject* obj, uns
|
|
|
| // An end midpoint has been encountered within our object. We
|
| // need to go ahead and append a run with our endpoint.
|
| - if (nextMidpoint.m_pos + 1 <= end) {
|
| + if (nextMidpoint.offset() + 1 <= end) {
|
| lineMidpointState.betweenMidpoints = true;
|
| lineMidpointState.currentMidpoint++;
|
| - if (nextMidpoint.m_pos != UINT_MAX) { // UINT_MAX means stop at the object and don't nclude any of it.
|
| - if (nextMidpoint.m_pos + 1 > start)
|
| - appendRunObjectIfNecessary(obj, start, nextMidpoint.m_pos + 1, resolver, behavior, tracker);
|
| - return adjustMidpointsAndAppendRunsForObjectIfNeeded(obj, nextMidpoint.m_pos + 1, end, resolver, behavior, tracker);
|
| + if (nextMidpoint.offset() != UINT_MAX) { // UINT_MAX means stop at the object and don't nclude any of it.
|
| + if (nextMidpoint.offset() + 1 > start)
|
| + appendRunObjectIfNecessary(obj, start, nextMidpoint.offset() + 1, resolver, behavior, tracker);
|
| + return adjustMidpointsAndAppendRunsForObjectIfNeeded(obj, nextMidpoint.offset() + 1, end, resolver, behavior, tracker);
|
| }
|
| } else {
|
| appendRunObjectIfNecessary(obj, start, end, resolver, behavior, tracker);
|
| @@ -623,7 +621,7 @@ inline void InlineBidiResolver::appendRun()
|
| // Initialize our state depending on if we're starting in the middle of such an inline.
|
| // FIXME: Could this initialize from this->inIsolate() instead of walking up the render tree?
|
| IsolateTracker isolateTracker(numberOfIsolateAncestors(m_sor));
|
| - int start = m_sor.m_pos;
|
| + int start = m_sor.offset();
|
| RenderObject* obj = m_sor.object();
|
| while (obj && obj != m_eor.object() && obj != m_endOfRunAtEndOfLine.object()) {
|
| if (isolateTracker.inIsolate())
|
| @@ -634,12 +632,12 @@ inline void InlineBidiResolver::appendRun()
|
| start = 0;
|
| obj = bidiNextSkippingEmptyInlines(m_sor.root(), obj, &isolateTracker);
|
| }
|
| - bool isEndOfLine = obj == m_endOfLine.object() && !m_endOfLine.m_pos;
|
| + bool isEndOfLine = obj == m_endOfLine.object() && !m_endOfLine.offset();
|
| if (obj && !isEndOfLine) {
|
| - unsigned pos = obj == m_eor.object() ? m_eor.m_pos : INT_MAX;
|
| - if (obj == m_endOfRunAtEndOfLine.object() && m_endOfRunAtEndOfLine.m_pos <= pos) {
|
| + unsigned pos = obj == m_eor.object() ? m_eor.offset() : INT_MAX;
|
| + if (obj == m_endOfRunAtEndOfLine.object() && m_endOfRunAtEndOfLine.offset() <= pos) {
|
| m_reachedEndOfLine = true;
|
| - pos = m_endOfRunAtEndOfLine.m_pos;
|
| + pos = m_endOfRunAtEndOfLine.offset();
|
| }
|
| // It's OK to add runs for zero-length RenderObjects, just don't make the run larger than it should be
|
| int end = obj->length() ? pos + 1 : 0;
|
|
|