| Index: Source/core/rendering/line/BreakingContextInlineHeaders.h
|
| diff --git a/Source/core/rendering/line/BreakingContextInlineHeaders.h b/Source/core/rendering/line/BreakingContextInlineHeaders.h
|
| index 40d22de554690255f8a964b16dd3c3c87ba11eea..74eba9d2ab63a4d4e5abb0a2780ff954cd94be73 100644
|
| --- a/Source/core/rendering/line/BreakingContextInlineHeaders.h
|
| +++ b/Source/core/rendering/line/BreakingContextInlineHeaders.h
|
| @@ -114,9 +114,9 @@ inline void ensureLineBoxInsideIgnoredSpaces(LineMidpointState& lineMidpointStat
|
| // Adding a pair of midpoints before a character will split it out into a new line box.
|
| inline void ensureCharacterGetsLineBox(LineMidpointState& lineMidpointState, InlineIterator& textParagraphSeparator)
|
| {
|
| - InlineIterator midpoint(0, textParagraphSeparator.object(), textParagraphSeparator.m_pos);
|
| - startIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSeparator.object(), textParagraphSeparator.m_pos - 1));
|
| - stopIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSeparator.object(), textParagraphSeparator.m_pos));
|
| + InlineIterator midpoint(0, textParagraphSeparator.object(), textParagraphSeparator.offset());
|
| + startIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSeparator.object(), textParagraphSeparator.offset() - 1));
|
| + stopIgnoringSpaces(lineMidpointState, InlineIterator(0, textParagraphSeparator.object(), textParagraphSeparator.offset()));
|
| }
|
|
|
| class TrailingObjects {
|
| @@ -174,7 +174,7 @@ void TrailingObjects::updateMidpointsForTrailingBoxes(LineMidpointState& lineMid
|
| for ( ; trailingSpaceMidpoint > 0 && lineMidpointState.midpoints[trailingSpaceMidpoint].object() != m_whitespace; --trailingSpaceMidpoint) { }
|
| ASSERT(trailingSpaceMidpoint >= 0);
|
| if (collapseFirstSpace == CollapseFirstSpace)
|
| - lineMidpointState.midpoints[trailingSpaceMidpoint].m_pos--;
|
| + lineMidpointState.midpoints[trailingSpaceMidpoint].setOffset(lineMidpointState.midpoints[trailingSpaceMidpoint].offset() -1);
|
|
|
| // Now make sure every single trailingPositionedBox following the trailingSpaceMidpoint properly stops and starts
|
| // ignoring spaces.
|
| @@ -527,7 +527,7 @@ inline void BreakingContext::handleFloat()
|
| if (m_floatsFitOnLine && m_width.fitsOnLine(m_block->logicalWidthForFloat(floatingObject))) {
|
| m_block->positionNewFloatOnLine(floatingObject, m_lastFloatFromPreviousLine, m_lineInfo, m_width);
|
| if (m_lineBreak.object() == m_current.object()) {
|
| - ASSERT(!m_lineBreak.m_pos);
|
| + ASSERT(!m_lineBreak.offset());
|
| m_lineBreak.increment();
|
| }
|
| } else {
|
| @@ -633,7 +633,7 @@ inline void BreakingContext::handleReplaced()
|
|
|
| inline bool iteratorIsBeyondEndOfRenderCombineText(const InlineIterator& iter, RenderCombineText* renderer)
|
| {
|
| - return iter.object() == renderer && iter.m_pos >= renderer->textLength();
|
| + return iter.object() == renderer && iter.offset() >= renderer->textLength();
|
| }
|
|
|
| inline void nextCharacter(UChar& currentCharacter, UChar& lastCharacter, UChar& secondToLastCharacter)
|
| @@ -719,7 +719,7 @@ ALWAYS_INLINE float textWidth(RenderText* text, unsigned from, unsigned len, con
|
|
|
| inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool& hyphenated)
|
| {
|
| - if (!m_current.m_pos)
|
| + if (!m_current.offset())
|
| m_appliedStartWidth = false;
|
|
|
| RenderText* renderText = toRenderText(m_current.object());
|
| @@ -741,7 +741,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| const Font& font = style->font();
|
| bool isFixedPitch = font.isFixedPitch();
|
|
|
| - unsigned lastSpace = m_current.m_pos;
|
| + unsigned lastSpace = m_current.offset();
|
| float wordSpacing = m_currentStyle->wordSpacing();
|
| float lastSpaceWordSpacing = 0;
|
| float wordSpacingForWordMeasurement = 0;
|
| @@ -763,7 +763,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| if (renderText->isWordBreak()) {
|
| m_width.commit();
|
| m_lineBreak.moveToStartOf(m_current.object());
|
| - ASSERT(m_current.m_pos == renderText->textLength());
|
| + ASSERT(m_current.offset() == renderText->textLength());
|
| }
|
|
|
| if (m_renderTextInfo.m_text != renderText) {
|
| @@ -784,7 +784,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
|
|
| UChar lastCharacter = m_renderTextInfo.m_lineBreakIterator.lastCharacter();
|
| UChar secondToLastCharacter = m_renderTextInfo.m_lineBreakIterator.secondToLastCharacter();
|
| - for (; m_current.m_pos < renderText->textLength(); m_current.fastIncrementInTextNode()) {
|
| + for (; m_current.offset() < renderText->textLength(); m_current.fastIncrementInTextNode()) {
|
| bool previousCharacterIsSpace = m_currentCharacterIsSpace;
|
| bool previousCharacterShouldCollapseIfPreWap = m_currentCharacterShouldCollapseIfPreWap;
|
| UChar c = m_current.current();
|
| @@ -802,13 +802,13 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
|
|
| if ((breakAll || breakWords) && !midWordBreak) {
|
| wrapW += charWidth;
|
| - bool midWordBreakIsBeforeSurrogatePair = U16_IS_LEAD(c) && m_current.m_pos + 1 < renderText->textLength() && U16_IS_TRAIL((*renderText)[m_current.m_pos + 1]);
|
| - charWidth = textWidth(renderText, m_current.m_pos, midWordBreakIsBeforeSurrogatePair ? 2 : 1, font, m_width.committedWidth() + wrapW, isFixedPitch, m_collapseWhiteSpace, 0, textLayout);
|
| + bool midWordBreakIsBeforeSurrogatePair = U16_IS_LEAD(c) && m_current.offset() + 1 < renderText->textLength() && U16_IS_TRAIL((*renderText)[m_current.offset() + 1]);
|
| + charWidth = textWidth(renderText, m_current.offset(), midWordBreakIsBeforeSurrogatePair ? 2 : 1, font, m_width.committedWidth() + wrapW, isFixedPitch, m_collapseWhiteSpace, 0, textLayout);
|
| midWordBreak = m_width.committedWidth() + wrapW + charWidth > m_width.availableWidth();
|
| }
|
|
|
| int nextBreakablePosition = m_current.nextBreakablePosition();
|
| - bool betweenWords = c == '\n' || (m_currWS != PRE && !m_atStart && isBreakable(m_renderTextInfo.m_lineBreakIterator, m_current.m_pos, nextBreakablePosition));
|
| + bool betweenWords = c == '\n' || (m_currWS != PRE && !m_atStart && isBreakable(m_renderTextInfo.m_lineBreakIterator, m_current.offset(), nextBreakablePosition));
|
| m_current.setNextBreakablePosition(nextBreakablePosition);
|
|
|
| if (betweenWords || midWordBreak) {
|
| @@ -820,8 +820,8 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| // new point.
|
| m_ignoringSpaces = false;
|
| wordSpacingForWordMeasurement = 0;
|
| - lastSpace = m_current.m_pos; // e.g., "Foo goo", don't add in any of the ignored spaces.
|
| - stopIgnoringSpaces(m_lineMidpointState, InlineIterator(0, m_current.object(), m_current.m_pos));
|
| + lastSpace = m_current.offset(); // e.g., "Foo goo", don't add in any of the ignored spaces.
|
| + stopIgnoringSpaces(m_lineMidpointState, InlineIterator(0, m_current.object(), m_current.offset()));
|
| stoppedIgnoringSpaces = true;
|
| } else {
|
| // Just keep ignoring these spaces.
|
| @@ -834,14 +834,14 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| WordMeasurement& wordMeasurement = wordMeasurements.last();
|
|
|
| wordMeasurement.renderer = renderText;
|
| - wordMeasurement.endOffset = m_current.m_pos;
|
| + wordMeasurement.endOffset = m_current.offset();
|
| wordMeasurement.startOffset = lastSpace;
|
|
|
| float additionalTmpW;
|
| if (wordTrailingSpaceWidth && c == ' ')
|
| - additionalTmpW = textWidth(renderText, lastSpace, m_current.m_pos + 1 - lastSpace, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout) - wordTrailingSpaceWidth;
|
| + additionalTmpW = textWidth(renderText, lastSpace, m_current.offset() + 1 - lastSpace, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout) - wordTrailingSpaceWidth;
|
| else
|
| - additionalTmpW = textWidth(renderText, lastSpace, m_current.m_pos - lastSpace, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout);
|
| + additionalTmpW = textWidth(renderText, lastSpace, m_current.offset() - lastSpace, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout);
|
|
|
| wordMeasurement.width = additionalTmpW + wordSpacingForWordMeasurement;
|
| additionalTmpW += lastSpaceWordSpacing;
|
| @@ -864,7 +864,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| // as candidate width for this line.
|
| bool lineWasTooWide = false;
|
| if (m_width.fitsOnLine() && m_currentCharacterIsSpace && m_currentStyle->breakOnlyAfterWhiteSpace() && !midWordBreak) {
|
| - float charWidth = textWidth(renderText, m_current.m_pos, 1, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout) + (applyWordSpacing ? wordSpacing : 0);
|
| + float charWidth = textWidth(renderText, m_current.offset(), 1, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout) + (applyWordSpacing ? wordSpacing : 0);
|
| // Check if line is too big even without the extra space
|
| // at the end of the line. If it is not, do nothing.
|
| // If the line needs the extra whitespace to be too long,
|
| @@ -872,23 +872,23 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| // additional whitespace.
|
| if (!m_width.fitsOnLine(charWidth)) {
|
| lineWasTooWide = true;
|
| - m_lineBreak.moveTo(m_current.object(), m_current.m_pos, m_current.nextBreakablePosition());
|
| + m_lineBreak.moveTo(m_current.object(), m_current.offset(), m_current.nextBreakablePosition());
|
| skipTrailingWhitespace(m_lineBreak, m_lineInfo);
|
| }
|
| }
|
| if (lineWasTooWide || !m_width.fitsOnLine()) {
|
| if (m_lineBreak.atTextParagraphSeparator()) {
|
| - if (!stoppedIgnoringSpaces && m_current.m_pos > 0)
|
| + if (!stoppedIgnoringSpaces && m_current.offset() > 0)
|
| ensureCharacterGetsLineBox(m_lineMidpointState, m_current);
|
| m_lineBreak.increment();
|
| m_lineInfo.setPreviousLineBrokeCleanly(true);
|
| - wordMeasurement.endOffset = m_lineBreak.m_pos;
|
| + wordMeasurement.endOffset = m_lineBreak.offset();
|
| }
|
| - if (m_lineBreak.object() && m_lineBreak.m_pos && m_lineBreak.object()->isText() && toRenderText(m_lineBreak.object())->textLength() && toRenderText(m_lineBreak.object())->characterAt(m_lineBreak.m_pos - 1) == softHyphen)
|
| + if (m_lineBreak.object() && m_lineBreak.offset() && m_lineBreak.object()->isText() && toRenderText(m_lineBreak.object())->textLength() && toRenderText(m_lineBreak.object())->characterAt(m_lineBreak.offset() - 1) == softHyphen)
|
| hyphenated = true;
|
| - if (m_lineBreak.m_pos && m_lineBreak.m_pos != (unsigned)wordMeasurement.endOffset && !wordMeasurement.width) {
|
| + if (m_lineBreak.offset() && m_lineBreak.offset() != (unsigned)wordMeasurement.endOffset && !wordMeasurement.width) {
|
| if (charWidth) {
|
| - wordMeasurement.endOffset = m_lineBreak.m_pos;
|
| + wordMeasurement.endOffset = m_lineBreak.offset();
|
| wordMeasurement.width = charWidth;
|
| }
|
| }
|
| @@ -909,9 +909,9 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| }
|
|
|
| if (c == '\n' && m_preservesNewline) {
|
| - if (!stoppedIgnoringSpaces && m_current.m_pos > 0)
|
| + if (!stoppedIgnoringSpaces && m_current.offset())
|
| ensureCharacterGetsLineBox(m_lineMidpointState, m_current);
|
| - m_lineBreak.moveTo(m_current.object(), m_current.m_pos, m_current.nextBreakablePosition());
|
| + m_lineBreak.moveTo(m_current.object(), m_current.offset(), m_current.nextBreakablePosition());
|
| m_lineBreak.increment();
|
| m_lineInfo.setPreviousLineBrokeCleanly(true);
|
| return true;
|
| @@ -920,7 +920,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| if (m_autoWrap && betweenWords) {
|
| m_width.commit();
|
| wrapW = 0;
|
| - m_lineBreak.moveTo(m_current.object(), m_current.m_pos, m_current.nextBreakablePosition());
|
| + m_lineBreak.moveTo(m_current.object(), m_current.offset(), m_current.nextBreakablePosition());
|
| // Auto-wrapping text should not wrap in the middle of a word once it has had an
|
| // opportunity to break after a word.
|
| breakWords = false;
|
| @@ -929,14 +929,14 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| if (midWordBreak && !U16_IS_TRAIL(c) && !(category(c) & (Mark_NonSpacing | Mark_Enclosing | Mark_SpacingCombining))) {
|
| // Remember this as a breakable position in case
|
| // adding the end width forces a break.
|
| - m_lineBreak.moveTo(m_current.object(), m_current.m_pos, m_current.nextBreakablePosition());
|
| + m_lineBreak.moveTo(m_current.object(), m_current.offset(), m_current.nextBreakablePosition());
|
| midWordBreak &= (breakWords || breakAll);
|
| }
|
|
|
| if (betweenWords) {
|
| lastSpaceWordSpacing = applyWordSpacing ? wordSpacing : 0;
|
| wordSpacingForWordMeasurement = (applyWordSpacing && wordMeasurement.width) ? wordSpacing : 0;
|
| - lastSpace = m_current.m_pos;
|
| + lastSpace = m_current.offset();
|
| }
|
|
|
| if (!m_ignoringSpaces && m_currentStyle->collapseWhiteSpace()) {
|
| @@ -959,24 +959,24 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| m_ignoringSpaces = false;
|
| lastSpaceWordSpacing = applyWordSpacing ? wordSpacing : 0;
|
| wordSpacingForWordMeasurement = (applyWordSpacing && wordMeasurements.last().width) ? wordSpacing : 0;
|
| - lastSpace = m_current.m_pos; // e.g., "Foo goo", don't add in any of the ignored spaces.
|
| - stopIgnoringSpaces(m_lineMidpointState, InlineIterator(0, m_current.object(), m_current.m_pos));
|
| + lastSpace = m_current.offset(); // e.g., "Foo goo", don't add in any of the ignored spaces.
|
| + stopIgnoringSpaces(m_lineMidpointState, InlineIterator(0, m_current.object(), m_current.offset()));
|
| }
|
|
|
| - if (isSVGText && m_current.m_pos > 0) {
|
| + if (isSVGText && m_current.offset()) {
|
| // Force creation of new InlineBoxes for each absolute positioned character (those that start new text chunks).
|
| - if (toRenderSVGInlineText(renderText)->characterStartsNewTextChunk(m_current.m_pos))
|
| + if (toRenderSVGInlineText(renderText)->characterStartsNewTextChunk(m_current.offset()))
|
| ensureCharacterGetsLineBox(m_lineMidpointState, m_current);
|
| }
|
|
|
| if (m_currentCharacterIsSpace && !previousCharacterIsSpace) {
|
| m_startOfIgnoredSpaces.setObject(m_current.object());
|
| - m_startOfIgnoredSpaces.m_pos = m_current.m_pos;
|
| + m_startOfIgnoredSpaces.setOffset(m_current.offset());
|
| }
|
|
|
| if (!m_currentCharacterIsSpace && previousCharacterShouldCollapseIfPreWap) {
|
| if (m_autoWrap && m_currentStyle->breakOnlyAfterWhiteSpace())
|
| - m_lineBreak.moveTo(m_current.object(), m_current.m_pos, m_current.nextBreakablePosition());
|
| + m_lineBreak.moveTo(m_current.object(), m_current.offset(), m_current.nextBreakablePosition());
|
| }
|
|
|
| if (m_collapseWhiteSpace && m_currentCharacterIsSpace && !m_ignoringSpaces)
|
| @@ -995,9 +995,9 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
|
| wordMeasurement.renderer = renderText;
|
|
|
| // IMPORTANT: current.m_pos is > length here!
|
| - float additionalTmpW = m_ignoringSpaces ? 0 : textWidth(renderText, lastSpace, m_current.m_pos - lastSpace, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout);
|
| + float additionalTmpW = m_ignoringSpaces ? 0 : textWidth(renderText, lastSpace, m_current.offset() - lastSpace, font, m_width.currentWidth(), isFixedPitch, m_collapseWhiteSpace, &wordMeasurement.fallbackFonts, textLayout);
|
| wordMeasurement.startOffset = lastSpace;
|
| - wordMeasurement.endOffset = m_current.m_pos;
|
| + wordMeasurement.endOffset = m_current.offset();
|
| wordMeasurement.width = m_ignoringSpaces ? 0 : additionalTmpW + wordSpacingForWordMeasurement;
|
| additionalTmpW += lastSpaceWordSpacing;
|
| m_width.addUncommittedWidth(additionalTmpW + inlineLogicalWidth(m_current.object(), !m_appliedStartWidth, m_includeEndWidth));
|
| @@ -1093,7 +1093,7 @@ inline void checkMidpoints(LineMidpointState& lineMidpointState, InlineIterator&
|
| // We hit the line break before the start point. Shave off the start point.
|
| lineMidpointState.numMidpoints--;
|
| if (endpoint.object()->style()->collapseWhiteSpace() && endpoint.object()->isText())
|
| - endpoint.m_pos--;
|
| + endpoint.setOffset(endpoint.offset() - 1);
|
| }
|
| }
|
| }
|
| @@ -1105,13 +1105,13 @@ InlineIterator BreakingContext::handleEndOfLine()
|
|
|
| if (m_lineBreak == m_resolver.position() && (!m_lineBreak.object() || !m_lineBreak.object()->isBR()) && segmentAllowsOverflow) {
|
| // we just add as much as possible
|
| - if (m_blockStyle->whiteSpace() == PRE && !m_current.m_pos) {
|
| + if (m_blockStyle->whiteSpace() == PRE && !m_current.offset()) {
|
| m_lineBreak.moveTo(m_lastObject, m_lastObject->isText() ? m_lastObject->length() : 0);
|
| } else if (m_lineBreak.object()) {
|
| // Don't ever break in the middle of a word if we can help it.
|
| // There's no room at all. We just have to be on this line,
|
| // even though we'll spill out.
|
| - m_lineBreak.moveTo(m_current.object(), m_current.m_pos);
|
| + m_lineBreak.moveTo(m_current.object(), m_current.offset());
|
| }
|
| }
|
|
|
| @@ -1130,11 +1130,11 @@ InlineIterator BreakingContext::handleEndOfLine()
|
| // of the object. Do this adjustment to make it point to the start
|
| // of the next object instead to avoid confusing the rest of the
|
| // code.
|
| - if (m_lineBreak.m_pos > 0) {
|
| + if (m_lineBreak.offset()) {
|
| // This loop enforces the invariant that line breaks should never point
|
| // at an empty inline. See http://crbug.com/305904.
|
| do {
|
| - m_lineBreak.m_pos--;
|
| + m_lineBreak.setOffset(m_lineBreak.offset() - 1);
|
| m_lineBreak.increment();
|
| } while (!m_lineBreak.atEnd() && isEmptyInline(m_lineBreak.object()));
|
| }
|
|
|