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

Unified Diff: third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h

Issue 1527113004: Remove unnecessary state for tracking whitespace collapsing in pre's (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@567080-Part2-2
Patch Set: Updated Created 5 years 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 | « third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/tab-character-basics-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h
diff --git a/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h b/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h
index 973ee14dca12c22dec9ff0f08aad1f12a8890544..39477c3b83f83ab70c10a0669693a7f17a75d6c3 100644
--- a/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h
+++ b/third_party/WebKit/Source/core/layout/line/BreakingContextInlineHeaders.h
@@ -72,7 +72,6 @@ public:
, m_atStart(true)
, m_ignoringSpaces(false)
, m_currentCharacterIsSpace(false)
- , m_currentCharacterShouldCollapseIfPreWap(false)
, m_appliedStartWidth(appliedStartWidth)
, m_includeEndWidth(true)
, m_autoWrap(false)
@@ -101,7 +100,7 @@ public:
void handleEmptyInline();
void handleReplaced();
bool handleText(WordMeasurements&, bool& hyphenated);
- void prepareForNextCharacter(const LineLayoutText&, bool& prohibitBreakInside, bool previousCharacterIsSpace, bool previousCharacterShouldCollapseIfPreWap);
+ void prepareForNextCharacter(const LineLayoutText&, bool& prohibitBreakInside, bool previousCharacterIsSpace);
bool canBreakAtWhitespace(bool breakWords, WordMeasurement&, bool stoppedIgnoringSpaces, bool& hyphenated, float charWidth, float& hyphenWidth, bool betweenWords, bool midWordBreak, bool breakAll, bool previousCharacterIsSpace, float lastWidthMeasurement, const LineLayoutText&, const Font&, bool applyWordSpacing, float wordSpacing);
bool trailingSpaceExceedsAvailableWidth(bool midWordBreak, const LineLayoutText&, WordMeasurement&, bool applyWordSpacing, bool wordSpacing, const Font&);
WordMeasurement& calculateWordWidth(WordMeasurements&, LineLayoutText&, unsigned lastSpace, float& lastWidthMeasurement, float wordSpacingForWordMeasurement, const Font&, float wordTrailingSpaceWidth, UChar);
@@ -146,7 +145,6 @@ private:
bool m_atStart;
bool m_ignoringSpaces;
bool m_currentCharacterIsSpace;
- bool m_currentCharacterShouldCollapseIfPreWap;
bool m_appliedStartWidth;
bool m_includeEndWidth;
bool m_autoWrap;
@@ -273,15 +271,15 @@ inline void BreakingContext::initializeForCurrentObject()
m_preservesNewline = !isSVGText && ComputedStyle::preserveNewline(m_currWS);
m_collapseWhiteSpace = ComputedStyle::collapseWhiteSpace(m_currWS);
+
+ // Ensure the whitespace in constructions like '<span style="white-space: pre-wrap">text <span><span> text</span>'
+ // does not collapse.
+ if (m_collapseWhiteSpace && !ComputedStyle::collapseWhiteSpace(m_lastWS))
+ m_currentCharacterIsSpace = false;
}
inline void BreakingContext::increment()
{
- // Clear out our character space bool, since inline <pre>s don't collapse whitespace
- // with adjacent inline normal/nowrap spans.
- if (!m_collapseWhiteSpace)
- m_currentCharacterIsSpace = false;
-
m_current.moveToStartOf(m_nextObject);
// When the line box tree is created, this position in the line will be snapped to
@@ -454,7 +452,7 @@ inline void BreakingContext::handleEmptyInline()
&& shouldSkipWhitespaceAfterStartObject(m_block, m_current.object(), m_lineMidpointState)) {
// If this object is at the start of the line, we need to behave like list markers and
// start ignoring spaces.
- m_currentCharacterShouldCollapseIfPreWap = m_currentCharacterIsSpace = true;
+ m_currentCharacterIsSpace = true;
m_ignoringSpaces = true;
} else {
// If we are after a trailing space but aren't ignoring spaces yet then ensure we get a linebox
@@ -486,7 +484,7 @@ inline void BreakingContext::handleReplaced()
m_lineInfo.setEmpty(false, m_block, &m_width);
m_ignoringSpaces = false;
- m_currentCharacterShouldCollapseIfPreWap = m_currentCharacterIsSpace = false;
+ m_currentCharacterIsSpace = false;
m_trailingObjects.clear();
// Optimize for a common case. If we can't find whitespace after the list
@@ -496,7 +494,7 @@ inline void BreakingContext::handleReplaced()
if (m_blockStyle->collapseWhiteSpace() && shouldSkipWhitespaceAfterStartObject(m_block, m_current.object(), m_lineMidpointState)) {
// Like with inline flows, we start ignoring spaces to make sure that any
// additional spaces we see will be discarded.
- m_currentCharacterShouldCollapseIfPreWap = m_currentCharacterIsSpace = true;
+ m_currentCharacterIsSpace = true;
m_ignoringSpaces = true;
}
if (LineLayoutListMarker(m_current.object()).isInside())
@@ -613,9 +611,8 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
UChar secondToLastCharacter = m_layoutTextInfo.m_lineBreakIterator.secondToLastCharacter();
for (; m_current.offset() < layoutText.textLength(); m_current.fastIncrementInTextNode()) {
bool previousCharacterIsSpace = m_currentCharacterIsSpace;
- bool previousCharacterShouldCollapseIfPreWap = m_currentCharacterShouldCollapseIfPreWap;
UChar c = m_current.current();
- m_currentCharacterShouldCollapseIfPreWap = m_currentCharacterIsSpace = c == spaceCharacter || c == tabulationCharacter || (!m_preservesNewline && (c == newlineCharacter));
+ m_currentCharacterIsSpace = c == spaceCharacter || c == tabulationCharacter || (!m_preservesNewline && (c == newlineCharacter));
if (!m_collapseWhiteSpace || !m_currentCharacterIsSpace)
m_lineInfo.setEmpty(false, m_block, &m_width);
@@ -650,7 +647,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
stopIgnoringSpaces(lastSpace);
}
- prepareForNextCharacter(layoutText, prohibitBreakInside, previousCharacterIsSpace, previousCharacterShouldCollapseIfPreWap);
+ prepareForNextCharacter(layoutText, prohibitBreakInside, previousCharacterIsSpace);
m_atStart = false;
nextCharacter(c, lastCharacter, secondToLastCharacter);
continue;
@@ -750,7 +747,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
}
}
- prepareForNextCharacter(layoutText, prohibitBreakInside, previousCharacterIsSpace, previousCharacterShouldCollapseIfPreWap);
+ prepareForNextCharacter(layoutText, prohibitBreakInside, previousCharacterIsSpace);
m_atStart = false;
nextCharacter(c, lastCharacter, secondToLastCharacter);
}
@@ -794,7 +791,7 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool
return false;
}
-inline void BreakingContext::prepareForNextCharacter(const LineLayoutText& layoutText, bool& prohibitBreakInside, bool previousCharacterIsSpace, bool previousCharacterShouldCollapseIfPreWap)
+inline void BreakingContext::prepareForNextCharacter(const LineLayoutText& layoutText, bool& prohibitBreakInside, bool previousCharacterIsSpace)
{
if (layoutText.isSVGInlineText() && m_current.offset()) {
// Force creation of new InlineBoxes for each absolute positioned character (those that start new text chunks).
@@ -809,7 +806,7 @@ inline void BreakingContext::prepareForNextCharacter(const LineLayoutText& layou
m_startOfIgnoredSpaces.setObject(m_current.object());
m_startOfIgnoredSpaces.setOffset(m_current.offset());
}
- if (!m_currentCharacterIsSpace && previousCharacterShouldCollapseIfPreWap) {
+ if (!m_currentCharacterIsSpace && previousCharacterIsSpace) {
if (m_autoWrap && m_currentStyle->breakOnlyAfterWhiteSpace())
m_lineBreak.moveTo(m_current.object(), m_current.offset(), m_current.nextBreakablePosition());
}
« no previous file with comments | « third_party/WebKit/LayoutTests/platform/mac/fast/text/whitespace/tab-character-basics-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698