WebKit Bugzilla
Attachment 340493 Details for
Bug 177327
: Implement white-space:break-spaces value
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-177327-20180516175840.patch (text/plain), 6.84 KB, created by
Javier Fernandez
on 2018-05-16 08:58:42 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Javier Fernandez
Created:
2018-05-16 08:58:42 PDT
Size:
6.84 KB
patch
obsolete
>Subversion Revision: 231845 >diff --git a/Source/WebCore/css/CSSPrimitiveValueMappings.h b/Source/WebCore/css/CSSPrimitiveValueMappings.h >index 15e1645c1bc82bd5c89b47500fdbeb452d67a74b..f45eeee6547ee0361af38e23b299a4b3c5c208a7 100644 >--- a/Source/WebCore/css/CSSPrimitiveValueMappings.h >+++ b/Source/WebCore/css/CSSPrimitiveValueMappings.h >@@ -3124,6 +3124,9 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EOverflowWrap e) > case BreakOverflowWrap: > m_value.valueID = CSSValueBreakWord; > break; >+ case BreakSpacesOverflowWrap: >+ m_value.valueID = CSSValueBreakSpaces; >+ break; > } > } > >@@ -3132,6 +3135,8 @@ template<> inline CSSPrimitiveValue::operator EOverflowWrap() const > ASSERT(isValueID()); > > switch (m_value.valueID) { >+ case CSSValueBreakSpaces: >+ return BreakSpacesOverflowWrap; > case CSSValueBreakWord: > return BreakOverflowWrap; > case CSSValueNormal: >diff --git a/Source/WebCore/css/CSSProperties.json b/Source/WebCore/css/CSSProperties.json >index ccd67d4691451944376a99e87aefc4c9aedf6140..83cb8662519ee323fa9f74bc7b9f1e89c10457fe 100644 >--- a/Source/WebCore/css/CSSProperties.json >+++ b/Source/WebCore/css/CSSProperties.json >@@ -2644,7 +2644,8 @@ > "overflow-wrap": { > "values": [ > "normal", >- "break-word" >+ "break-word", >+ "break-spaces" > ], > "specification": { > "category": "css-text", >diff --git a/Source/WebCore/css/CSSValueKeywords.in b/Source/WebCore/css/CSSValueKeywords.in >index 143344476db891c4643e64b52e3eb62cc2811762..f04bb6ed7bb94e6eb8ac9060edb41bcaf52ae12d 100644 >--- a/Source/WebCore/css/CSSValueKeywords.in >+++ b/Source/WebCore/css/CSSValueKeywords.in >@@ -740,6 +740,7 @@ keep-all > // CSS_PROP_WORD_WRAP > // > break-word >+break-spaces > > // > // CSS_PROP__KHTML_NBSP_MODE >diff --git a/Source/WebCore/css/parser/CSSParserFastPaths.cpp b/Source/WebCore/css/parser/CSSParserFastPaths.cpp >index 4dd83783f16494caa5ab0229c6643184b20cf2b5..148ea092ea54dd1bf65ec83de65dee6b2cf675ca 100644 >--- a/Source/WebCore/css/parser/CSSParserFastPaths.cpp >+++ b/Source/WebCore/css/parser/CSSParserFastPaths.cpp >@@ -601,9 +601,9 @@ bool CSSParserFastPaths::isValidKeywordPropertyAndValue(CSSPropertyID propertyId > // FIXME-NEWPARSER: Support? > // case CSSPropertyOverflowAnchor: > // return valueID == CSSValueVisible || valueID == CSSValueNone || valueID == CSSValueAuto; >- case CSSPropertyOverflowWrap: // normal | break-word >+ case CSSPropertyOverflowWrap: // normal | break-word | break-spacess > case CSSPropertyWordWrap: >- return valueID == CSSValueNormal || valueID == CSSValueBreakWord; >+ return valueID == CSSValueNormal || valueID == CSSValueBreakWord || valueID == CSSValueBreakSpaces; > case CSSPropertyOverflowX: // visible | hidden | scroll | auto | overlay > return valueID == CSSValueVisible || valueID == CSSValueHidden || valueID == CSSValueScroll || valueID == CSSValueAuto || valueID == CSSValueOverlay; > case CSSPropertyOverflowY: // visible | hidden | scroll | auto | overlay | -webkit-paged-x | -webkit-paged-y >diff --git a/Source/WebCore/rendering/line/BreakingContext.h b/Source/WebCore/rendering/line/BreakingContext.h >index 17da8ffb349e14232d971ab546c5753c47a71ed2..c1ccef2aeedf65758a5ad6d7b0f2ca82845c22da 100644 >--- a/Source/WebCore/rendering/line/BreakingContext.h >+++ b/Source/WebCore/rendering/line/BreakingContext.h >@@ -981,6 +981,8 @@ inline bool BreakingContext::handleText(WordMeasurements& wordMeasurements, bool > } > // Didn't fit. Jump to the end unless there's still an opportunity to collapse whitespace. > if (m_ignoringSpaces || !m_collapseWhiteSpace || !m_currentCharacterIsSpace || !previousCharacterIsSpace) { >+ if (m_currentCharacterIsSpace && !previousCharacterIsSpace && !m_currentStyle->canBreakBeforeFirstWhiteSpace()) >+ return false; > m_atEnd = true; > return false; > } >diff --git a/Source/WebCore/rendering/line/LineInlineHeaders.h b/Source/WebCore/rendering/line/LineInlineHeaders.h >index 0d0170a7bcbd99442b3b0bb97eed528407f84ad0..f3bcb7b247def5f11db24b9183c644b07c03cb0a 100644 >--- a/Source/WebCore/rendering/line/LineInlineHeaders.h >+++ b/Source/WebCore/rendering/line/LineInlineHeaders.h >@@ -68,7 +68,7 @@ inline bool shouldCollapseWhiteSpace(const RenderStyle* style, const LineInfo& l > // If a space (U+0020) at the end of a line has 'white-space' set to 'normal', 'nowrap', or 'pre-line', it is also removed. > // If spaces (U+0020) or tabs (U+0009) at the end of a line have 'white-space' set to 'pre-wrap', UAs may visually collapse them. > return style->collapseWhiteSpace() >- || (whitespacePosition == TrailingWhitespace && style->whiteSpace() == PRE_WRAP && (!lineInfo.isEmpty() || !lineInfo.previousLineBrokeCleanly())); >+ || (whitespacePosition == TrailingWhitespace && style->whiteSpace() == PRE_WRAP && style->overflowWrap() != BreakSpacesOverflowWrap && (!lineInfo.isEmpty() || !lineInfo.previousLineBrokeCleanly())); > } > > inline bool skipNonBreakingSpace(const InlineIterator& it, const LineInfo& lineInfo) >diff --git a/Source/WebCore/rendering/style/RenderStyle.h b/Source/WebCore/rendering/style/RenderStyle.h >index a32cdfc3a70add5e979c548222affa4b1e66702b..f7639b26e7d0a04e15504ea79d4c252c3ec6b8bd 100644 >--- a/Source/WebCore/rendering/style/RenderStyle.h >+++ b/Source/WebCore/rendering/style/RenderStyle.h >@@ -403,6 +403,7 @@ public: > bool collapseWhiteSpace() const { return collapseWhiteSpace(whiteSpace()); } > bool isCollapsibleWhiteSpace(UChar) const; > bool breakOnlyAfterWhiteSpace() const; >+ bool canBreakBeforeFirstWhiteSpace() const; > bool breakWords() const; > > EFillRepeat backgroundRepeatX() const { return static_cast<EFillRepeat>(m_backgroundData->background.repeatX()); } >@@ -2041,6 +2042,11 @@ inline bool RenderStyle::breakOnlyAfterWhiteSpace() const > return whiteSpace() == PRE_WRAP || lineBreak() == LineBreakAfterWhiteSpace; > } > >+inline bool RenderStyle::canBreakBeforeFirstWhiteSpace() const >+{ >+ return overflowWrap() != BreakSpacesOverflowWrap; >+} >+ > inline bool RenderStyle::breakWords() const > { > return wordBreak() == BreakWordBreak || overflowWrap() == BreakOverflowWrap; >diff --git a/Source/WebCore/rendering/style/RenderStyleConstants.h b/Source/WebCore/rendering/style/RenderStyleConstants.h >index 29fb7f251367fb46a9bb06e1cd4fd292154d1ddc..3a42fa0d8175bafd473fe510ef78295fa130981c 100644 >--- a/Source/WebCore/rendering/style/RenderStyleConstants.h >+++ b/Source/WebCore/rendering/style/RenderStyleConstants.h >@@ -308,7 +308,7 @@ enum EWordBreak { > }; > > enum EOverflowWrap { >- NormalOverflowWrap, BreakOverflowWrap >+ NormalOverflowWrap, BreakOverflowWrap, BreakSpacesOverflowWrap > }; > > enum ENBSPMode {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 177327
:
340493
|
344840
|
344844
|
344846
|
344847
|
344852
|
366339
|
366343
|
366344
|
366354
|
366355
|
366358
|
366425
|
366433
|
366434
|
366441
|
366444
|
366446
|
366484
|
366490
|
366495
|
366500
|
366596
|
366609
|
366925
|
366930
|
366931