Changeset 185729 in webkit
- Timestamp:
- Jun 18, 2015, 4:59:19 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r185718 r185729 1 2015-06-18 KyungTae Kim <ktf.kim@samsung.com> and Myles C. Maxfield <mmaxfield@apple.com> 2 3 [CSS3] Add support for the word-break:keep-all CSS property 4 https://bugs.webkit.org/show_bug.cgi?id=123782 5 6 Reviewed by Darin Adler. 7 8 * fast/text/word-break-keep-all.html: Added. 9 * platform/mac/fast/text/word-break-keep-all-expected.png: Added. 10 * platform/mac/fast/text/word-break-keep-all-expected.txt: Added. 11 1 12 2015-06-18 Conrad Shultz <conrad_shultz@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r185727 r185729 1 2015-06-18 KyungTae Kim <ktf.kim@samsung.com> and Myles C. Maxfield <mmaxfield@apple.com> 2 3 [CSS3] Add support for the word-break:keep-all CSS property 4 https://bugs.webkit.org/show_bug.cgi?id=123782 5 6 Reviewed by Darin Adler. 7 8 Add support for word-break:keep-all CSS property by CSS3 spec: 9 http://www.w3.org/TR/2013/WD-css-text-3-20131010/#word-break-property 10 11 Test: fast/text/word-break-keep-all.html 12 13 * css/CSSParser.cpp: 14 (WebCore::isValidKeywordPropertyAndValue): 15 * css/CSSPrimitiveValueMappings.h: 16 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): 17 (WebCore::CSSPrimitiveValue::operator EWordBreak): 18 * css/CSSValueKeywords.in: 19 * rendering/RenderText.cpp: 20 (WebCore::RenderText::computePreferredLogicalWidths): 21 * rendering/break_lines.h: 22 (WebCore::nextBreakablePositionKeepingAllWords): 23 (WebCore::nextBreakablePositionKeepingAllWordsIgnoringNBSP): 24 (WebCore::isBreakable): 25 * rendering/line/BreakingContext.h: 26 (WebCore::BreakingContext::handleText): 27 (WebCore::BreakingContext::optimalLineBreakLocationForTrailingWord): 28 * rendering/style/RenderStyleConstants.h: 29 1 30 2015-06-18 Jon Lee <jonlee@apple.com> 2 31 -
trunk/Source/WebCore/css/CSSParser.cpp
r185595 r185729 1030 1030 return true; 1031 1031 break; 1032 case CSSPropertyWordBreak: // normal | break-all | break-word (this is a custom extension)1033 if (valueID == CSSValueNormal || valueID == CSSValueBreakAll || valueID == CSSValue BreakWord)1032 case CSSPropertyWordBreak: // normal | break-all | keep-all | break-word (this is a custom extension) 1033 if (valueID == CSSValueNormal || valueID == CSSValueBreakAll || valueID == CSSValueKeepAll || valueID == CSSValueBreakWord) 1034 1034 return true; 1035 1035 break; -
trunk/Source/WebCore/css/CSSPrimitiveValueMappings.h
r185481 r185729 3011 3011 m_value.valueID = CSSValueBreakAll; 3012 3012 break; 3013 case KeepAllWordBreak: 3014 m_value.valueID = CSSValueKeepAll; 3015 break; 3013 3016 case BreakWordBreak: 3014 3017 m_value.valueID = CSSValueBreakWord; … … 3024 3027 case CSSValueBreakAll: 3025 3028 return BreakAllWordBreak; 3029 case CSSValueKeepAll: 3030 return KeepAllWordBreak; 3026 3031 case CSSValueBreakWord: 3027 3032 return BreakWordBreak; -
trunk/Source/WebCore/css/CSSValueKeywords.in
r185481 r185729 681 681 // 682 682 break-all 683 keep-all 683 684 684 685 // -
trunk/Source/WebCore/rendering/RenderText.cpp
r185393 r185729 739 739 bool breakNBSP = style.autoWrap() && style.nbspMode() == SPACE; 740 740 bool breakAll = (style.wordBreak() == BreakAllWordBreak || style.wordBreak() == BreakWordBreak) && style.autoWrap(); 741 bool keepAllWords = style.wordBreak() == KeepAllWordBreak; 741 742 bool isLooseCJKMode = breakIterator.isLooseCJKMode(); 742 743 … … 784 785 } 785 786 786 bool hasBreak = breakAll || isBreakable(breakIterator, i, nextBreakable, breakNBSP, isLooseCJKMode );787 bool hasBreak = breakAll || isBreakable(breakIterator, i, nextBreakable, breakNBSP, isLooseCJKMode, keepAllWords); 787 788 bool betweenWords = true; 788 789 int j = i; … … 792 793 break; 793 794 c = uncheckedCharacterAt(j); 794 if (isBreakable(breakIterator, j, nextBreakable, breakNBSP, isLooseCJKMode ) && characterAt(j - 1) != softHyphen)795 if (isBreakable(breakIterator, j, nextBreakable, breakNBSP, isLooseCJKMode, keepAllWords) && characterAt(j - 1) != softHyphen) 795 796 break; 796 797 if (breakAll) { -
trunk/Source/WebCore/rendering/break_lines.h
r180301 r185729 162 162 } 163 163 164 inline int nextBreakablePosition(LazyLineBreakIterator& lazyBreakIterator, int pos) 165 { 166 String string = lazyBreakIterator.string(); 167 if (string.is8Bit()) 168 return nextBreakablePositionNonLoosely<LChar, NBSPBehavior::TreatNBSPAsBreak>(lazyBreakIterator, string.characters8(), string.length(), pos); 169 return nextBreakablePositionNonLoosely<UChar, NBSPBehavior::TreatNBSPAsBreak>(lazyBreakIterator, string.characters16(), string.length(), pos); 164 template<typename CharacterType, NBSPBehavior nbspBehavior> 165 inline unsigned nextBreakablePositionKeepingAllWords(const CharacterType* string, unsigned length, unsigned startPosition) 166 { 167 for (unsigned i = startPosition; i < length; i++) { 168 if (isBreakableSpace<nbspBehavior>(string[i])) 169 return i; 170 } 171 return length; 172 } 173 174 inline unsigned nextBreakablePositionKeepingAllWords(LazyLineBreakIterator& lazyBreakIterator, int startPosition) 175 { 176 String string = lazyBreakIterator.string(); 177 if (string.is8Bit()) 178 return nextBreakablePositionKeepingAllWords<LChar, NBSPBehavior::TreatNBSPAsBreak>(string.characters8(), string.length(), startPosition); 179 return nextBreakablePositionKeepingAllWords<UChar, NBSPBehavior::TreatNBSPAsBreak>(string.characters16(), string.length(), startPosition); 180 } 181 182 inline unsigned nextBreakablePositionKeepingAllWordsIgnoringNBSP(LazyLineBreakIterator& iterator, int startPosition) 183 { 184 String string = iterator.string(); 185 if (string.is8Bit()) 186 return nextBreakablePositionKeepingAllWords<LChar, NBSPBehavior::IgnoreNBSP>(string.characters8(), string.length(), startPosition); 187 return nextBreakablePositionKeepingAllWords<UChar, NBSPBehavior::IgnoreNBSP>(string.characters16(), string.length(), startPosition); 188 } 189 190 inline int nextBreakablePosition(LazyLineBreakIterator& iterator, int pos) 191 { 192 String string = iterator.string(); 193 if (string.is8Bit()) 194 return nextBreakablePositionNonLoosely<LChar, NBSPBehavior::TreatNBSPAsBreak>(iterator, string.characters8(), string.length(), pos); 195 return nextBreakablePositionNonLoosely<UChar, NBSPBehavior::TreatNBSPAsBreak>(iterator, string.characters16(), string.length(), pos); 170 196 } 171 197 … … 194 220 } 195 221 196 inline bool isBreakable(LazyLineBreakIterator& lazyBreakIterator, int pos, int& nextBreakable, bool breakNBSP, bool isLooseMode )222 inline bool isBreakable(LazyLineBreakIterator& lazyBreakIterator, int pos, int& nextBreakable, bool breakNBSP, bool isLooseMode, bool keepAllWords) 197 223 { 198 224 if (pos <= nextBreakable) 199 225 return pos == nextBreakable; 200 226 201 if (isLooseMode) { 227 if (keepAllWords) { 228 if (breakNBSP) 229 nextBreakable = static_cast<int>(nextBreakablePositionKeepingAllWords(lazyBreakIterator, pos)); 230 else 231 nextBreakable = static_cast<int>(nextBreakablePositionKeepingAllWordsIgnoringNBSP(lazyBreakIterator, pos)); 232 } else if (isLooseMode) { 202 233 if (breakNBSP) 203 234 nextBreakable = nextBreakablePositionLoose(lazyBreakIterator, pos); -
trunk/Source/WebCore/rendering/line/BreakingContext.h
r184653 r185729 745 745 bool midWordBreak = false; 746 746 bool breakAll = m_currentStyle->wordBreak() == BreakAllWordBreak && m_autoWrap; 747 bool keepAllWords = m_currentStyle->wordBreak() == KeepAllWordBreak; 747 748 float hyphenWidth = 0; 748 749 bool isLooseCJKMode = false; … … 799 800 800 801 int nextBreakablePosition = m_current.nextBreakablePosition(); 801 bool betweenWords = c == '\n' || (m_currWS != PRE && !m_atStart && isBreakable(m_renderTextInfo.lineBreakIterator, m_current.offset(), nextBreakablePosition, breakNBSP, isLooseCJKMode )802 bool betweenWords = c == '\n' || (m_currWS != PRE && !m_atStart && isBreakable(m_renderTextInfo.lineBreakIterator, m_current.offset(), nextBreakablePosition, breakNBSP, isLooseCJKMode, keepAllWords) 802 803 && (style.hyphens() != HyphensNone || (m_current.previousInSameNode() != softHyphen))); 803 804 m_current.setNextBreakablePosition(nextBreakablePosition); … … 1220 1221 bool breakNBSP = m_autoWrap && m_currentStyle->nbspMode() == SPACE; 1221 1222 int nextBreakablePosition = lineBreak.nextBreakablePosition(); 1222 isBreakable(m_renderTextInfo.lineBreakIterator, lineBreak.offset() + 1, nextBreakablePosition, breakNBSP, isLooseCJKMode );1223 isBreakable(m_renderTextInfo.lineBreakIterator, lineBreak.offset() + 1, nextBreakablePosition, breakNBSP, isLooseCJKMode, m_currentStyle->wordBreak() == KeepAllWordBreak); 1223 1224 if (nextBreakablePosition < 0 || static_cast<unsigned>(nextBreakablePosition) != renderText.textLength()) 1224 1225 return lineBreak; -
trunk/Source/WebCore/rendering/style/RenderStyleConstants.h
r183748 r185729 286 286 }; 287 287 288 // Word Break Values. Matches WinIE, rather than CSS3289 290 288 enum EWordBreak { 291 NormalWordBreak, BreakAllWordBreak, BreakWordBreak289 NormalWordBreak, BreakAllWordBreak, KeepAllWordBreak, BreakWordBreak 292 290 }; 293 291
Note:
See TracChangeset
for help on using the changeset viewer.