Changeset 245275 in webkit
- Timestamp:
- May 14, 2019 6:20:54 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 36 added
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r245268 r245275 1 2019-05-14 Javier Fernandez <jfernandez@igalia.com> 2 3 Implement "line-break: anywhere" 4 https://bugs.webkit.org/show_bug.cgi?id=181169 5 <rdar://problem/48507088> 6 7 Reviewed by Myles C. Maxfield. 8 9 Some of the new tests added to verify the new 'line-break: 10 anywhere' feature and its different behavior to what 'word-break: 11 break-all' may provide, fail due to several bugs present in 12 current WebKit's trunk. 13 14 * TestExpectations: 15 - webkit.org/b/197409 16 - webkit.org/b/197411 17 - webkit.org/b/197411 18 - webkit.org/b/197430 19 1 20 2019-05-13 Wenson Hsieh <wenson_hsieh@apple.com> 2 21 -
trunk/LayoutTests/TestExpectations
r245215 r245275 1990 1990 webkit.org/b/197277 imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-004.html [ ImageOnlyFailure ] 1991 1991 webkit.org/b/197277 imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-005.html [ ImageOnlyFailure ] 1992 1993 webkit.org/b/197409 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-016.html [ ImageOnlyFailure ] 1994 webkit.org/b/197409 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-019.html [ ImageOnlyFailure ] 1995 webkit.org/b/197411 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-018.html [ ImageOnlyFailure ] 1996 webkit.org/b/197411 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-021.html [ ImageOnlyFailure ] 1997 webkit.org/b/197411 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-022.html [ ImageOnlyFailure ] 1998 webkit.org/b/197430 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-023.html [ ImageOnlyFailure ] 1999 webkit.org/b/197430 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-024.html [ ImageOnlyFailure ] 1992 2000 1993 2001 ######################################## -
trunk/LayoutTests/imported/w3c/ChangeLog
r245020 r245275 1 2019-05-14 Javier Fernandez <jfernandez@igalia.com> 2 3 Implement "line-break: anywhere" 4 https://bugs.webkit.org/show_bug.cgi?id=181169 5 <rdar://problem/48507088> 6 7 Reviewed by Myles C. Maxfield. 8 9 New tests to verify the new line-break: anywhere feature and how 10 it behaves different to 'word-break: break-all'. 11 12 * web-platform-tests/css/css-text/line-break/line-break-anywhere-001.html: 13 * web-platform-tests/css/css-text/line-break/line-break-anywhere-002.html: 14 * web-platform-tests/css/css-text/line-break/line-break-anywhere-003-expected.html: Added. 15 * web-platform-tests/css/css-text/line-break/line-break-anywhere-003.html: Added. 16 * web-platform-tests/css/css-text/line-break/line-break-anywhere-004-expected.html: Added. 17 * web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html: Added. 18 * web-platform-tests/css/css-text/line-break/line-break-anywhere-005-expected.html: Added. 19 * web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html: Added. 20 * web-platform-tests/css/css-text/line-break/line-break-anywhere-006-expected.html: Added. 21 * web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html: Added. 22 * web-platform-tests/css/css-text/line-break/line-break-anywhere-007-expected.html: Added. 23 * web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html: Added. 24 * web-platform-tests/css/css-text/line-break/line-break-anywhere-008-expected.html: Added. 25 * web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html: Added. 26 * web-platform-tests/css/css-text/line-break/line-break-anywhere-009-expected.html: Added. 27 * web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html: Added. 28 * web-platform-tests/css/css-text/line-break/line-break-anywhere-010-expected.html: Added. 29 * web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html: Added. 30 * web-platform-tests/css/css-text/line-break/line-break-anywhere-011-expected.html: Added. 31 * web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html: Added. 32 * web-platform-tests/css/css-text/line-break/line-break-anywhere-012-expected.html: Added. 33 * web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html: Added. 34 * web-platform-tests/css/css-text/parsing/line-break-valid-expected.txt: 35 * web-platform-tests/css/css-text/word-break/word-break-break-all-016-expected.html: Added. 36 * web-platform-tests/css/css-text/word-break/word-break-break-all-016.html: Added. 37 * web-platform-tests/css/css-text/word-break/word-break-break-all-017-expected.html: Added. 38 * web-platform-tests/css/css-text/word-break/word-break-break-all-017.html: Added. 39 * web-platform-tests/css/css-text/word-break/word-break-break-all-018-expected.html: Added. 40 * web-platform-tests/css/css-text/word-break/word-break-break-all-018.html: Added. 41 * web-platform-tests/css/css-text/word-break/word-break-break-all-019-expected.html: Added. 42 * web-platform-tests/css/css-text/word-break/word-break-break-all-019.html: Added. 43 * web-platform-tests/css/css-text/word-break/word-break-break-all-021-expected.html: Added. 44 * web-platform-tests/css/css-text/word-break/word-break-break-all-021.html: Added. 45 * web-platform-tests/css/css-text/word-break/word-break-break-all-022-expected.html: Added. 46 * web-platform-tests/css/css-text/word-break/word-break-break-all-022.html: Added. 47 * web-platform-tests/css/css-text/word-break/word-break-break-all-023-expected.html: Added. 48 * web-platform-tests/css/css-text/word-break/word-break-break-all-023.html: Added. 49 * web-platform-tests/css/css-text/word-break/word-break-break-all-024-expected.html: Added. 50 * web-platform-tests/css/css-text/word-break/word-break-break-all-024.html: Added. 51 1 52 2019-05-07 Antoine Quint <graouts@apple.com> 2 53 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-001.html
r232057 r245275 1 <!DOCTYPE html>1 <!DOCTYPE html> 2 2 <html lang=en> 3 3 <meta charset="utf-8"> 4 4 <title>CSS Text Test: line-break: anywhere</title> 5 5 <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> 6 <link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> 6 7 <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> 7 8 <link rel="match" href="reference/line-break-anywhere-001-ref.html"> … … 29 30 <p>Test passes if there is a green rectangle below and no red.</p> 30 31 <div id=green></div> 31 <!-- with line breaks everywhere, none of the following characters should stick out from under the green div-->32 <!-- with line breaks everywhere, none of the following characters should stick out from under the green div --> 32 33 <div id=test>aa-a.a)a,a)a aa⁠a‍a・a</div> -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-002.html
r232057 r245275 1 <!DOCTYPE html>1 <!DOCTYPE html> 2 2 <html lang=en> 3 3 <meta charset="utf-8"> 4 4 <title>CSS Text Test: line-break: anywhere</title> 5 5 <link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/"> 6 <link rel="help" title="5.3. Line Breaking Strictness: the line-break property" href="https://www.w3.org/TR/css-text-3/#propdef-line-break"> 6 7 <link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere"> 7 8 <link rel="match" href="reference/line-break-anywhere-001-ref.html"> … … 22 23 font-family: monospace; 23 24 line-break: anywhere; 24 -webkit-hyphens: auto;25 hyphens: auto; 25 26 } 26 27 </style> … … 28 29 <p>Test passes if there is a green rectangle below and no red.</p> 29 30 <div id=green></div> 30 <!-- 31 Also, if the words fails to be wrapped between all letters, letters will also stick out from under the green rectangle 31 <!-- Hyphenation, if it occurs, will produce a hyphen that sticks out from under the green rectangle. 32 Also, if the words fails to be wrapped between all letters, letters will also stick out from under the green rectangle --> 32 33 <div id=test>no hyphenation</div> -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/parsing/line-break-valid-expected.txt
r242550 r245275 4 4 PASS e.style['line-break'] = "normal" should set the property value 5 5 PASS e.style['line-break'] = "strict" should set the property value 6 FAIL e.style['line-break'] = "anywhere" should set the property value assert_not_equals: property should be set got disallowed value "" 6 PASS e.style['line-break'] = "anywhere" should set the property value 7 7 -
trunk/Source/WebCore/ChangeLog
r245265 r245275 1 2019-05-14 Javier Fernandez <jfernandez@igalia.com> 2 3 Implement "line-break: anywhere" 4 https://bugs.webkit.org/show_bug.cgi?id=181169 5 <rdar://problem/48507088> 6 7 Reviewed by Myles C. Maxfield. 8 9 The CSS WG resolved [1] to add a new value 'anywhere' to the 'line-break' 10 CSS property in order to allow additional breaking opportunities not 11 considered in the definition of the 'word-break: break-all'. 12 13 [1] https://github.com/w3c/csswg-drafts/issues/1171 14 15 Tests: imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-003.html 16 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html 17 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html 18 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html 19 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html 20 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html 21 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html 22 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html 23 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html 24 imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html 25 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-016.html 26 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-017.html 27 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-018.html 28 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-019.html 29 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-021.html 30 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-022.html 31 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-023.html 32 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-024.html 33 34 * css/CSSPrimitiveValueMappings.h: 35 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): 36 (WebCore::CSSPrimitiveValue::operator LineBreak const): 37 * css/CSSProperties.json: 38 * css/CSSValueKeywords.in: 39 * css/parser/CSSParserFastPaths.cpp: 40 (WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue): 41 * rendering/BreakLines.h: 42 (WebCore::nextBreakablePositionBreakCharacter): 43 (WebCore::isBreakable): 44 * rendering/RenderText.cpp: 45 (WebCore::mapLineBreakToIteratorMode): 46 (WebCore::RenderText::computePreferredLogicalWidths): 47 * rendering/line/BreakingContext.h: 48 (WebCore::BreakingContext::handleText): 49 * rendering/style/RenderStyleConstants.h: 50 1 51 2019-05-13 Yusuke Suzuki <ysuzuki@apple.com> 2 52 -
trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h
r244353 r245275 1645 1645 m_value.valueID = CSSValueAfterWhiteSpace; 1646 1646 break; 1647 case LineBreak::Anywhere: 1648 m_value.valueID = CSSValueAnywhere; 1649 break; 1647 1650 } 1648 1651 } … … 1686 1689 case CSSValueAfterWhiteSpace: 1687 1690 return LineBreak::AfterWhiteSpace; 1691 case CSSValueAnywhere: 1692 return LineBreak::Anywhere; 1688 1693 default: 1689 1694 break; -
trunk/Source/WebCore/css/CSSProperties.json
r244408 r245275 5548 5548 "status": "non-standard", 5549 5549 "comment": "Added in https://trac.webkit.org/changeset/7763" 5550 } 5550 }, 5551 "anywhere" 5551 5552 ], 5552 5553 "specification": { -
trunk/Source/WebCore/css/CSSValueKeywords.in
r244731 r245275 790 790 strict 791 791 after-white-space 792 anywhere 792 793 793 794 // -webkit-appearance -
trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp
r244353 r245275 732 732 case CSSPropertyWebkitLineAlign: 733 733 return valueID == CSSValueNone || valueID == CSSValueEdges; 734 case CSSPropertyLineBreak: // auto | loose | normal | strict | after-white-space 735 return valueID == CSSValueAuto || valueID == CSSValueLoose || valueID == CSSValueNormal || valueID == CSSValueStrict || valueID == CSSValueAfterWhiteSpace ;734 case CSSPropertyLineBreak: // auto | loose | normal | strict | after-white-space | anywhere 735 return valueID == CSSValueAuto || valueID == CSSValueLoose || valueID == CSSValueNormal || valueID == CSSValueStrict || valueID == CSSValueAfterWhiteSpace || valueID == CSSValueAnywhere; 736 736 case CSSPropertyWebkitLineSnap: 737 737 return valueID == CSSValueNone || valueID == CSSValueBaseline || valueID == CSSValueContain; -
trunk/Source/WebCore/rendering/BreakLines.h
r239427 r245275 188 188 } 189 189 190 inline bool isBreakable(LazyLineBreakIterator& lazyBreakIterator, unsigned startPosition, Optional<unsigned>& nextBreakable, bool breakNBSP, bool canUseShortcut, bool keepAllWords) 190 inline unsigned nextBreakablePositionBreakCharacter(LazyLineBreakIterator& lazyBreakIterator, unsigned startPosition) 191 { 192 auto stringView = lazyBreakIterator.stringView(); 193 ASSERT(startPosition <= stringView.length()); 194 // FIXME: Can/Should we implement this using a Shared Iterator (performance issue) 195 // https://bugs.webkit.org/show_bug.cgi?id=197876 196 NonSharedCharacterBreakIterator iterator(stringView); 197 Optional<unsigned> next = ubrk_following(iterator, startPosition); 198 return next.valueOr(stringView.length()); 199 } 200 201 inline bool isBreakable(LazyLineBreakIterator& lazyBreakIterator, unsigned startPosition, Optional<unsigned>& nextBreakable, bool breakNBSP, bool canUseShortcut, bool keepAllWords, bool breakAnywhere) 191 202 { 192 203 if (nextBreakable && nextBreakable.value() >= startPosition) 193 204 return startPosition == nextBreakable; 194 205 195 if (keepAllWords) { 206 if (breakAnywhere) 207 nextBreakable = nextBreakablePositionBreakCharacter(lazyBreakIterator, startPosition); 208 else if (keepAllWords) { 196 209 if (breakNBSP) 197 210 nextBreakable = nextBreakablePositionKeepingAllWords(lazyBreakIterator, startPosition); -
trunk/Source/WebCore/rendering/RenderText.cpp
r243118 r245275 705 705 case LineBreak::Auto: 706 706 case LineBreak::AfterWhiteSpace: 707 case LineBreak::Anywhere: 707 708 return LineBreakIteratorMode::Default; 708 709 case LineBreak::Loose: … … 829 830 // do not affect minimum preferred sizes. Note that break-word is a non-standard value for 830 831 // word-break, but we support it as though it means break-all. 832 bool breakAnywhere = style.lineBreak() == LineBreak::Anywhere && style.autoWrap(); 831 833 bool breakAll = (style.wordBreak() == WordBreak::BreakAll || style.wordBreak() == WordBreak::BreakWord) && style.autoWrap(); 832 834 bool keepAllWords = style.wordBreak() == WordBreak::KeepAll; … … 877 879 } 878 880 879 bool hasBreak = breakAll || isBreakable(breakIterator, i, nextBreakable, breakNBSP, canUseLineBreakShortcut, keepAllWords );881 bool hasBreak = breakAll || isBreakable(breakIterator, i, nextBreakable, breakNBSP, canUseLineBreakShortcut, keepAllWords, breakAnywhere); 880 882 bool betweenWords = true; 881 883 unsigned j = i; … … 885 887 break; 886 888 c = string[j]; 887 if (isBreakable(breakIterator, j, nextBreakable, breakNBSP, canUseLineBreakShortcut, keepAllWords ) && characterAt(j - 1) != softHyphen)889 if (isBreakable(breakIterator, j, nextBreakable, breakNBSP, canUseLineBreakShortcut, keepAllWords, breakAnywhere) && characterAt(j - 1) != softHyphen) 888 890 break; 889 891 if (breakAll) { -
trunk/Source/WebCore/rendering/line/BreakingContext.h
r244748 r245275 714 714 bool breakWords = m_currentStyle->breakWords() && ((m_autoWrap && (!m_width.committedWidth() && !m_width.hasCommittedReplaced())) || m_currWS == WhiteSpace::Pre); 715 715 bool midWordBreak = false; 716 bool breakAll = m_currentStyle->wordBreak() == WordBreak::BreakAll && m_autoWrap; 716 bool breakAnywhere = m_currentStyle->lineBreak() == LineBreak::Anywhere && m_autoWrap; 717 bool breakAll = (m_currentStyle->wordBreak() == WordBreak::BreakAll || breakAnywhere) && m_autoWrap; 717 718 bool keepAllWords = m_currentStyle->wordBreak() == WordBreak::KeepAll; 718 719 float hyphenWidth = 0; … … 756 757 // soft-breaking opportunty so we may want to avoid breaking in the middle of the word. 757 758 if (m_atStart && m_currentCharacterIsSpace && !previousCharacterIsSpace) { 758 m_hasFormerOpportunity = true;759 m_hasFormerOpportunity = !breakAnywhere; 759 760 breakWords = false; 760 761 canBreakMidWord = breakAll; … … 791 792 792 793 Optional<unsigned> nextBreakablePosition = m_current.nextBreakablePosition(); 793 bool betweenWords = c == '\n' || (m_currWS != WhiteSpace::Pre && !m_atStart && isBreakable(m_renderTextInfo.lineBreakIterator, m_current.offset(), nextBreakablePosition, breakNBSP, canUseLineBreakShortcut, keepAllWords )794 bool betweenWords = c == '\n' || (m_currWS != WhiteSpace::Pre && !m_atStart && isBreakable(m_renderTextInfo.lineBreakIterator, m_current.offset(), nextBreakablePosition, breakNBSP, canUseLineBreakShortcut, keepAllWords, breakAnywhere) 794 795 && (style.hyphens() != Hyphens::None || (m_current.previousInSameNode() != softHyphen))); 795 796 m_current.setNextBreakablePosition(nextBreakablePosition); … … 954 955 // Auto-wrapping text should not wrap in the middle of a word once it has had an 955 956 // opportunity to break after a word. 956 m_hasFormerOpportunity = true;957 m_hasFormerOpportunity = !breakAnywhere; 957 958 breakWords = false; 958 959 canBreakMidWord = breakAll; -
trunk/Source/WebCore/rendering/style/RenderStyleConstants.h
r244408 r245275 534 534 Normal, 535 535 Strict, 536 AfterWhiteSpace 536 AfterWhiteSpace, 537 Anywhere 537 538 }; 538 539
Note: See TracChangeset
for help on using the changeset viewer.