Changeset 245275 in webkit


Ignore:
Timestamp:
May 14, 2019 6:20:54 AM (5 years ago)
Author:
jfernandez@igalia.com
Message:

Implement "line-break: anywhere"
https://bugs.webkit.org/show_bug.cgi?id=181169
<rdar://problem/48507088>

Reviewed by Myles C. Maxfield.

LayoutTests/imported/w3c:

New tests to verify the new line-break: anywhere feature and how
it behaves different to 'word-break: break-all'.

  • web-platform-tests/css/css-text/line-break/line-break-anywhere-001.html:
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-002.html:
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-003-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-003.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-004-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-005-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-006-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-007-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-008-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-009-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-010-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-011-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-012-expected.html: Added.
  • web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html: Added.
  • web-platform-tests/css/css-text/parsing/line-break-valid-expected.txt:
  • web-platform-tests/css/css-text/word-break/word-break-break-all-016-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-016.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-017-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-017.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-018-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-018.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-019-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-019.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-021-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-021.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-022-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-022.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-023-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-023.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-024-expected.html: Added.
  • web-platform-tests/css/css-text/word-break/word-break-break-all-024.html: Added.

Source/WebCore:

The CSS WG resolved [1] to add a new value 'anywhere' to the 'line-break'
CSS property in order to allow additional breaking opportunities not
considered in the definition of the 'word-break: break-all'.

[1] https://github.com/w3c/csswg-drafts/issues/1171

Tests: imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-003.html

imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-004.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-005.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-006.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-007.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-008.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-009.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-010.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-011.html
imported/w3c/web-platform-tests/css/css-text/line-break/line-break-anywhere-012.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-016.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-017.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-018.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-019.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-021.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-022.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-023.html
imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-024.html

  • css/CSSPrimitiveValueMappings.h:

(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator LineBreak const):

  • css/CSSProperties.json:
  • css/CSSValueKeywords.in:
  • css/parser/CSSParserFastPaths.cpp:

(WebCore::CSSParserFastPaths::isValidKeywordPropertyAndValue):

  • rendering/BreakLines.h:

(WebCore::nextBreakablePositionBreakCharacter):
(WebCore::isBreakable):

  • rendering/RenderText.cpp:

(WebCore::mapLineBreakToIteratorMode):
(WebCore::RenderText::computePreferredLogicalWidths):

  • rendering/line/BreakingContext.h:

(WebCore::BreakingContext::handleText):

  • rendering/style/RenderStyleConstants.h:

LayoutTests:

Some of the new tests added to verify the new 'line-break:
anywhere' feature and its different behavior to what 'word-break:
break-all' may provide, fail due to several bugs present in
current WebKit's trunk.

  • TestExpectations:
    • webkit.org/b/197409
    • webkit.org/b/197411
    • webkit.org/b/197411
    • webkit.org/b/197430
Location:
trunk
Files:
36 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r245268 r245275  
     12019-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 
    1202019-05-13  Wenson Hsieh  <wenson_hsieh@apple.com>
    221
  • trunk/LayoutTests/TestExpectations

    r245215 r245275  
    19901990webkit.org/b/197277 imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-004.html [ ImageOnlyFailure ]
    19911991webkit.org/b/197277 imported/w3c/web-platform-tests/css/css-text/white-space/break-spaces-before-first-char-005.html [ ImageOnlyFailure ]
     1992
     1993webkit.org/b/197409 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-016.html [ ImageOnlyFailure ]
     1994webkit.org/b/197409 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-019.html [ ImageOnlyFailure ]
     1995webkit.org/b/197411 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-018.html [ ImageOnlyFailure ]
     1996webkit.org/b/197411 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-021.html [ ImageOnlyFailure ]
     1997webkit.org/b/197411 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-022.html [ ImageOnlyFailure ]
     1998webkit.org/b/197430 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-023.html [ ImageOnlyFailure ]
     1999webkit.org/b/197430 imported/w3c/web-platform-tests/css/css-text/word-break/word-break-break-all-024.html [ ImageOnlyFailure ]
    19922000
    19932001########################################
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r245020 r245275  
     12019-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
    1522019-05-07  Antoine Quint  <graouts@apple.com>
    253
  • 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>
    22<html lang=en>
    33<meta charset="utf-8">
    44<title>CSS Text Test: line-break: anywhere</title>
    55<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">
    67<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
    78<link rel="match" href="reference/line-break-anywhere-001-ref.html">
     
    2930<p>Test passes if there is a green rectangle below and no red.</p>
    3031<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 -->
    3233<div id=test>aa-a.a)a,a)a&nbsp;a&#xfeff;a&#x2060;a&#x200d;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>
    22<html lang=en>
    33<meta charset="utf-8">
    44<title>CSS Text Test: line-break: anywhere</title>
    55<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">
    67<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-line-break-anywhere">
    78<link rel="match" href="reference/line-break-anywhere-001-ref.html">
     
    2223  font-family: monospace;
    2324  line-break: anywhere;
    24   -webkit-hyphens: auto;
     25  hyphens: auto;
    2526}
    2627</style>
     
    2829<p>Test passes if there is a green rectangle below and no red.</p>
    2930<div id=green></div>
    30 <!--  Hyphenation, if it occurs, will produce a hyphen that sticks out from under the green rectangle.
    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 -->
    3233<div id=test>no hyphenation</div>
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/parsing/line-break-valid-expected.txt

    r242550 r245275  
    44PASS e.style['line-break'] = "normal" should set the property value
    55PASS 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 ""
     6PASS e.style['line-break'] = "anywhere" should set the property value
    77
  • trunk/Source/WebCore/ChangeLog

    r245265 r245275  
     12019-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
    1512019-05-13  Yusuke Suzuki  <ysuzuki@apple.com>
    252
  • trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h

    r244353 r245275  
    16451645        m_value.valueID = CSSValueAfterWhiteSpace;
    16461646        break;
     1647    case LineBreak::Anywhere:
     1648        m_value.valueID = CSSValueAnywhere;
     1649        break;
    16471650    }
    16481651}
     
    16861689    case CSSValueAfterWhiteSpace:
    16871690        return LineBreak::AfterWhiteSpace;
     1691    case CSSValueAnywhere:
     1692        return LineBreak::Anywhere;
    16881693    default:
    16891694        break;
  • trunk/Source/WebCore/css/CSSProperties.json

    r244408 r245275  
    55485548                    "status": "non-standard",
    55495549                    "comment": "Added in https://trac.webkit.org/changeset/7763"
    5550                 }
     5550                },
     5551                "anywhere"
    55515552            ],
    55525553            "specification": {
  • trunk/Source/WebCore/css/CSSValueKeywords.in

    r244731 r245275  
    790790strict
    791791after-white-space
     792anywhere
    792793
    793794// -webkit-appearance
  • trunk/Source/WebCore/css/parser/CSSParserFastPaths.cpp

    r244353 r245275  
    732732    case CSSPropertyWebkitLineAlign:
    733733        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;
    736736    case CSSPropertyWebkitLineSnap:
    737737        return valueID == CSSValueNone || valueID == CSSValueBaseline || valueID == CSSValueContain;
  • trunk/Source/WebCore/rendering/BreakLines.h

    r239427 r245275  
    188188}
    189189
    190 inline bool isBreakable(LazyLineBreakIterator& lazyBreakIterator, unsigned startPosition, Optional<unsigned>& nextBreakable, bool breakNBSP, bool canUseShortcut, bool keepAllWords)
     190inline 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
     201inline bool isBreakable(LazyLineBreakIterator& lazyBreakIterator, unsigned startPosition, Optional<unsigned>& nextBreakable, bool breakNBSP, bool canUseShortcut, bool keepAllWords, bool breakAnywhere)
    191202{
    192203    if (nextBreakable && nextBreakable.value() >= startPosition)
    193204        return startPosition == nextBreakable;
    194205
    195     if (keepAllWords) {
     206    if (breakAnywhere)
     207        nextBreakable = nextBreakablePositionBreakCharacter(lazyBreakIterator, startPosition);
     208    else if (keepAllWords) {
    196209        if (breakNBSP)
    197210            nextBreakable = nextBreakablePositionKeepingAllWords(lazyBreakIterator, startPosition);
  • trunk/Source/WebCore/rendering/RenderText.cpp

    r243118 r245275  
    705705    case LineBreak::Auto:
    706706    case LineBreak::AfterWhiteSpace:
     707    case LineBreak::Anywhere:
    707708        return LineBreakIteratorMode::Default;
    708709    case LineBreak::Loose:
     
    829830    // do not affect minimum preferred sizes. Note that break-word is a non-standard value for
    830831    // word-break, but we support it as though it means break-all.
     832    bool breakAnywhere = style.lineBreak() == LineBreak::Anywhere && style.autoWrap();
    831833    bool breakAll = (style.wordBreak() == WordBreak::BreakAll || style.wordBreak() == WordBreak::BreakWord) && style.autoWrap();
    832834    bool keepAllWords = style.wordBreak() == WordBreak::KeepAll;
     
    877879        }
    878880
    879         bool hasBreak = breakAll || isBreakable(breakIterator, i, nextBreakable, breakNBSP, canUseLineBreakShortcut, keepAllWords);
     881        bool hasBreak = breakAll || isBreakable(breakIterator, i, nextBreakable, breakNBSP, canUseLineBreakShortcut, keepAllWords, breakAnywhere);
    880882        bool betweenWords = true;
    881883        unsigned j = i;
     
    885887                break;
    886888            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)
    888890                break;
    889891            if (breakAll) {
  • trunk/Source/WebCore/rendering/line/BreakingContext.h

    r244748 r245275  
    714714    bool breakWords = m_currentStyle->breakWords() && ((m_autoWrap && (!m_width.committedWidth() && !m_width.hasCommittedReplaced())) || m_currWS == WhiteSpace::Pre);
    715715    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;
    717718    bool keepAllWords = m_currentStyle->wordBreak() == WordBreak::KeepAll;
    718719    float hyphenWidth = 0;
     
    756757        // soft-breaking opportunty so we may want to avoid breaking in the middle of the word.
    757758        if (m_atStart && m_currentCharacterIsSpace && !previousCharacterIsSpace) {
    758             m_hasFormerOpportunity = true;
     759            m_hasFormerOpportunity = !breakAnywhere;
    759760            breakWords = false;
    760761            canBreakMidWord = breakAll;
     
    791792
    792793        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)
    794795            && (style.hyphens() != Hyphens::None || (m_current.previousInSameNode() != softHyphen)));
    795796        m_current.setNextBreakablePosition(nextBreakablePosition);
     
    954955                // Auto-wrapping text should not wrap in the middle of a word once it has had an
    955956                // opportunity to break after a word.
    956                 m_hasFormerOpportunity = true;
     957                m_hasFormerOpportunity = !breakAnywhere;
    957958                breakWords = false;
    958959                canBreakMidWord = breakAll;
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r244408 r245275  
    534534    Normal,
    535535    Strict,
    536     AfterWhiteSpace
     536    AfterWhiteSpace,
     537    Anywhere
    537538};
    538539
Note: See TracChangeset for help on using the changeset viewer.