Changeset 56047 in webkit
- Timestamp:
- Mar 16, 2010 12:39:28 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r56046 r56047 1 2010-03-16 Shinichiro Hamaji <hamaji@chromium.org> 2 3 Reviewed by Darin Adler. 4 5 RenderText::m_text should be a String, not RefPtr<StringImpl> 6 https://bugs.webkit.org/show_bug.cgi?id=36010 7 8 Refactoring only, so no new tests. 9 10 * platform/text/PlatformString.h: 11 (WebCore::String::makeLower): 12 (WebCore::String::makeUpper): 13 (WebCore::String::makeSecure): 14 (WebCore::String::makeCapitalized): 15 (WebCore::String::containsOnlyASCII): 16 * rendering/RenderText.cpp: 17 (WebCore::RenderText::RenderText): 18 (WebCore::RenderText::widthFromCache): 19 (WebCore::RenderText::trimmedPrefWidths): 20 (WebCore::RenderText::containsOnlyWhitespace): 21 (WebCore::RenderText::setTextInternal): 22 (WebCore::RenderText::setText): 23 (WebCore::RenderText::previousOffset): 24 (WebCore::RenderText::previousOffsetForBackwardDeletion): 25 (WebCore::RenderText::nextOffset): 26 * rendering/RenderText.h: 27 (WebCore::RenderText::text): 28 (WebCore::RenderText::characters): 29 (WebCore::RenderText::textLength): 30 1 31 2010-03-16 Adam Barth <abarth@webkit.org> 2 32 -
trunk/WebCore/platform/text/PlatformString.h
r53418 r56047 64 64 struct StringHash; 65 65 66 // Declarations of string operations 67 68 bool charactersAreAllASCII(const UChar*, size_t); 69 int charactersToIntStrict(const UChar*, size_t, bool* ok = 0, int base = 10); 70 unsigned charactersToUIntStrict(const UChar*, size_t, bool* ok = 0, int base = 10); 71 int64_t charactersToInt64Strict(const UChar*, size_t, bool* ok = 0, int base = 10); 72 uint64_t charactersToUInt64Strict(const UChar*, size_t, bool* ok = 0, int base = 10); 73 intptr_t charactersToIntPtrStrict(const UChar*, size_t, bool* ok = 0, int base = 10); 74 75 int charactersToInt(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 76 unsigned charactersToUInt(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 77 int64_t charactersToInt64(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 78 uint64_t charactersToUInt64(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 79 intptr_t charactersToIntPtr(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 80 81 double charactersToDouble(const UChar*, size_t, bool* ok = 0); 82 float charactersToFloat(const UChar*, size_t, bool* ok = 0); 83 84 int find(const UChar*, size_t, UChar, int startPosition = 0); 85 int reverseFind(const UChar*, size_t, UChar, int startPosition = -1); 86 66 87 class String { 67 88 public: … … 133 154 String& replace(const String& a, const String& b) { if (m_impl) m_impl = m_impl->replace(a.impl(), b.impl()); return *this; } 134 155 String& replace(unsigned index, unsigned len, const String& b) { if (m_impl) m_impl = m_impl->replace(index, len, b.impl()); return *this; } 156 157 void makeLower() { if (m_impl) m_impl = m_impl->lower(); } 158 void makeUpper() { if (m_impl) m_impl = m_impl->upper(); } 159 void makeSecure(UChar aChar) { if (m_impl) m_impl = m_impl->secure(aChar); } 160 void makeCapitalized(UChar previousCharacter) { if (m_impl) m_impl = m_impl->capitalize(previousCharacter); } 135 161 136 162 void truncate(unsigned len); … … 257 283 unsigned numCharactersInGraphemeClusters(unsigned) const; 258 284 285 bool containsOnlyASCII() const { return charactersAreAllASCII(characters(), length()); } 286 259 287 private: 260 288 RefPtr<StringImpl> m_impl; … … 295 323 inline void swap(String& a, String& b) { a.swap(b); } 296 324 297 // String Operations 298 299 bool charactersAreAllASCII(const UChar*, size_t); 300 301 int charactersToIntStrict(const UChar*, size_t, bool* ok = 0, int base = 10); 302 unsigned charactersToUIntStrict(const UChar*, size_t, bool* ok = 0, int base = 10); 303 int64_t charactersToInt64Strict(const UChar*, size_t, bool* ok = 0, int base = 10); 304 uint64_t charactersToUInt64Strict(const UChar*, size_t, bool* ok = 0, int base = 10); 305 intptr_t charactersToIntPtrStrict(const UChar*, size_t, bool* ok = 0, int base = 10); 306 307 int charactersToInt(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 308 unsigned charactersToUInt(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 309 int64_t charactersToInt64(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 310 uint64_t charactersToUInt64(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 311 intptr_t charactersToIntPtr(const UChar*, size_t, bool* ok = 0); // ignores trailing garbage 312 313 double charactersToDouble(const UChar*, size_t, bool* ok = 0); 314 float charactersToFloat(const UChar*, size_t, bool* ok = 0); 315 316 int find(const UChar*, size_t, UChar, int startPosition = 0); 317 int reverseFind(const UChar*, size_t, UChar, int startPosition = -1); 325 // Definitions of string operations 318 326 319 327 #ifdef __OBJC__ -
trunk/WebCore/rendering/RenderText.cpp
r55928 r56047 49 49 namespace WebCore { 50 50 51 // FIXME: Move to StringImpl.h eventually.52 static inline bool charactersAreAllASCII(StringImpl* text)53 {54 return charactersAreAllASCII(text->characters(), text->length());55 }56 57 51 RenderText::RenderText(Node* node, PassRefPtr<StringImpl> str) 58 52 : RenderObject(node) … … 67 61 , m_linesDirty(false) 68 62 , m_containsReversedText(false) 69 , m_isAllASCII( charactersAreAllASCII(m_text.get()))63 , m_isAllASCII(m_text.containsOnlyASCII()) 70 64 , m_knownNotToUseFallbackFonts(false) 71 65 { … … 443 437 bool isSpace; 444 438 bool previousCharWasSpace = true; // FIXME: Preserves historical behavior, but seems wrong for start > 0. 439 ASSERT(m_text); 440 StringImpl& text = *m_text.impl(); 445 441 for (int i = start; i < start + len; i++) { 446 char c = (*m_text)[i];442 char c = text[i]; 447 443 if (c <= ' ') { 448 444 if (c == ' ' || c == '\n') { … … 487 483 int len = textLength(); 488 484 489 if (!len || (stripFrontSpaces && m_text->containsOnlyWhitespace())) {485 if (!len || (stripFrontSpaces && text()->containsOnlyWhitespace())) { 490 486 beginMinW = 0; 491 487 endMinW = 0; … … 507 503 hasBreak = m_hasBreak; 508 504 509 if ((*m_text)[0] == ' ' || ((*m_text)[0] == '\n' && !style()->preserveNewline()) || (*m_text)[0] == '\t') { 505 ASSERT(m_text); 506 StringImpl& text = *m_text.impl(); 507 if (text[0] == ' ' || (text[0] == '\n' && !style()->preserveNewline()) || text[0] == '\t') { 510 508 const Font& f = style()->font(); // FIXME: This ignores first-line. 511 509 if (stripFrontSpaces) { … … 530 528 for (int i = 0; i < len; i++) { 531 529 int linelen = 0; 532 while (i + linelen < len && (*m_text)[i + linelen] != '\n')530 while (i + linelen < len && text[i + linelen] != '\n') 533 531 linelen++; 534 532 … … 778 776 bool RenderText::containsOnlyWhitespace(unsigned from, unsigned len) const 779 777 { 778 ASSERT(m_text); 779 StringImpl& text = *m_text.impl(); 780 780 unsigned currPos; 781 781 for (currPos = from; 782 currPos < from + len && ( (*m_text)[currPos] == '\n' || (*m_text)[currPos] == ' ' || (*m_text)[currPos] == '\t');782 currPos < from + len && (text[currPos] == '\n' || text[currPos] == ' ' || text[currPos] == '\t'); 783 783 currPos++) { } 784 784 return currPos >= (from + len); … … 953 953 // leading, trailing and multiple contiguous space characters. 954 954 955 m_text = m_text->replace('\n', ' ');955 m_text.replace('\n', ' '); 956 956 957 957 // If xml:space="preserve" is set, white-space is set to "pre", which … … 964 964 // Then, all contiguous space characters will be consolidated. 965 965 966 m_text = m_text->replace('\n', StringImpl::empty());966 m_text.replace('\n', StringImpl::empty()); 967 967 968 968 // If xml:space="default" is set, white-space is set to "nowrap", which handles … … 970 970 } 971 971 972 m_text = m_text->replace('\t', ' ');972 m_text.replace('\t', ' '); 973 973 } 974 974 #endif … … 978 978 case TTNONE: 979 979 break; 980 case CAPITALIZE: {981 m_text = m_text->capitalize(previousCharacter());980 case CAPITALIZE: 981 m_text.makeCapitalized(previousCharacter()); 982 982 break; 983 }984 983 case UPPERCASE: 985 m_text = m_text->upper();984 m_text.makeUpper(); 986 985 break; 987 986 case LOWERCASE: 988 m_text = m_text->lower();987 m_text.makeLower(); 989 988 break; 990 989 } … … 996 995 break; 997 996 case TSCIRCLE: 998 m_text = m_text->secure(whiteBullet);997 m_text.makeSecure(whiteBullet); 999 998 break; 1000 999 case TSDISC: 1001 m_text = m_text->secure(bullet);1000 m_text.makeSecure(bullet); 1002 1001 break; 1003 1002 case TSSQUARE: 1004 m_text = m_text->secure(blackSquare);1003 m_text.makeSecure(blackSquare); 1005 1004 } 1006 1005 } 1007 1006 1008 1007 ASSERT(m_text); 1009 ASSERT(!isBR() || (textLength() == 1 && (*m_text)[0] == '\n'));1010 1011 m_isAllASCII = charactersAreAllASCII(m_text.get());1008 ASSERT(!isBR() || (textLength() == 1 && m_text[0] == '\n')); 1009 1010 m_isAllASCII = m_text.containsOnlyASCII(); 1012 1011 } 1013 1012 … … 1016 1015 ASSERT(text); 1017 1016 1018 if (!force && equal(m_text. get(), text.get()))1017 if (!force && equal(m_text.impl(), text.get())) 1019 1018 return; 1020 1019 … … 1246 1245 int RenderText::previousOffset(int current) const 1247 1246 { 1248 StringImpl* si = m_text. get();1247 StringImpl* si = m_text.impl(); 1249 1248 TextBreakIterator* iterator = cursorMovementIterator(si->characters(), si->length()); 1250 1249 if (!iterator) … … 1294 1293 { 1295 1294 #if PLATFORM(MAC) 1295 ASSERT(m_text); 1296 StringImpl& text = *m_text.impl(); 1296 1297 UChar32 character; 1297 1298 while (current > 0) { 1298 if (U16_IS_TRAIL( (*m_text)[--current]))1299 if (U16_IS_TRAIL(text[--current])) 1299 1300 --current; 1300 1301 if (current < 0) 1301 1302 break; 1302 1303 1303 UChar32 character = m_text->characterStartingAt(current);1304 UChar32 character = text.characterStartingAt(current); 1304 1305 1305 1306 // We don't combine characters in Armenian ... Limbu range for backward deletion. … … 1315 1316 1316 1317 // Hangul 1317 character = m_text->characterStartingAt(current);1318 character = text.characterStartingAt(current); 1318 1319 if (((character >= HANGUL_CHOSEONG_START) && (character <= HANGUL_JONGSEONG_END)) || ((character >= HANGUL_SYLLABLE_START) && (character <= HANGUL_SYLLABLE_END))) { 1319 1320 HangulState state; … … 1331 1332 initialState = state; 1332 1333 1333 while (current > 0 && ((character = m_text->characterStartingAt(current - 1)) >= HANGUL_CHOSEONG_START) && (character <= HANGUL_SYLLABLE_END) && ((character <= HANGUL_JONGSEONG_END) || (character >= HANGUL_SYLLABLE_START))) {1334 while (current > 0 && ((character = text.characterStartingAt(current - 1)) >= HANGUL_CHOSEONG_START) && (character <= HANGUL_SYLLABLE_END) && ((character <= HANGUL_JONGSEONG_END) || (character >= HANGUL_SYLLABLE_START))) { 1334 1335 switch (state) { 1335 1336 case HangulStateV: … … 1369 1370 int RenderText::nextOffset(int current) const 1370 1371 { 1371 StringImpl* si = m_text. get();1372 StringImpl* si = m_text.impl(); 1372 1373 TextBreakIterator* iterator = cursorMovementIterator(si->characters(), si->length()); 1373 1374 if (!iterator) -
trunk/WebCore/rendering/RenderText.h
r51522 r56047 51 51 virtual void destroy(); 52 52 53 StringImpl* text() const { return m_text. get(); }53 StringImpl* text() const { return m_text.impl(); } 54 54 55 55 InlineTextBox* createInlineTextBox(); … … 64 64 virtual VisiblePosition positionForPoint(const IntPoint&); 65 65 66 const UChar* characters() const { return m_text ->characters(); }67 unsigned textLength() const { return m_text ->length(); } // non virtual implementation of length()66 const UChar* characters() const { return m_text.characters(); } 67 unsigned textLength() const { return m_text.length(); } // non virtual implementation of length() 68 68 void positionLineBox(InlineBox*); 69 69 … … 152 152 int m_minWidth; // here to minimize padding in 64-bit. 153 153 154 RefPtr<StringImpl>m_text;154 String m_text; 155 155 156 156 InlineTextBox* m_firstTextBox;
Note: See TracChangeset
for help on using the changeset viewer.