Changeset 58040 in webkit
- Timestamp:
- Apr 21, 2010 7:17:19 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r58038 r58040 1 2010-04-21 Shinichiro Hamaji <hamaji@chromium.org> 2 3 Reviewed by Darin Adler. 4 5 Call sites of TextIterator constructor are difficult to read 6 https://bugs.webkit.org/show_bug.cgi?id=37909 7 8 Now we use enum parameters instead of boolean parameters and 9 boolean version of constructors are eliminated. 10 11 This change also changes the names of boolean members so they are 12 now third person singular. 13 14 No new tests because this is just a refactoring. 15 16 * WebCore.base.exp: 17 * editing/TextIterator.cpp: 18 (WebCore::TextIterator::TextIterator): 19 (WebCore::TextIterator::advance): 20 (WebCore::TextIterator::handleReplacedElement): 21 (WebCore::TextIterator::shouldRepresentNodeOffsetZero): 22 (WebCore::TextIterator::shouldEmitSpaceBeforeAndAfterNode): 23 (WebCore::TextIterator::handleNonTextNode): 24 (WebCore::TextIterator::exitNode): 25 (WebCore::TextIterator::emitCharacter): 26 (WebCore::TextIterator::emitText): 27 (WebCore::CharacterIterator::CharacterIterator): 28 (WebCore::TextIterator::rangeLength): 29 (WebCore::TextIterator::rangeFromLocationAndLength): 30 (WebCore::findPlainText): 31 * editing/TextIterator.h: 32 (WebCore::): 33 * editing/VisibleSelection.cpp: 34 (WebCore::VisibleSelection::appendTrailingWhitespace): 35 * editing/visible_units.cpp: 36 (WebCore::nextBoundary): 37 1 38 2010-04-21 Jesus Sanchez-Palencia <jesus@webkit.org> 2 39 -
trunk/WebCore/WebCore.base.exp
r58029 r58040 262 262 __ZN7WebCore12TextIterator26rangeFromLocationAndLengthEPNS_7ElementEiib 263 263 __ZN7WebCore12TextIterator7advanceEv 264 __ZN7WebCore12TextIteratorC1EPKNS_5RangeE bb264 __ZN7WebCore12TextIteratorC1EPKNS_5RangeENS_20TextIteratorBehaviorE 265 265 __ZN7WebCore12WorkerThread17workerThreadCountEv 266 266 __ZN7WebCore12applyCommandEN3WTF10PassRefPtrINS_11EditCommandEEE -
trunk/WebCore/editing/TextIterator.cpp
r57940 r58040 255 255 , m_textLength(0) 256 256 , m_lastCharacter(0) 257 , m_emit CharactersBetweenAllVisiblePositions(false)258 , m_enter TextControls(false)257 , m_emitsCharactersBetweenAllVisiblePositions(false) 258 , m_entersTextControls(false) 259 259 , m_emitsTextWithoutTranscoding(false) 260 260 { 261 }262 263 TextIterator::TextIterator(const Range* r, bool emitCharactersBetweenAllVisiblePositions, bool enterTextControls)264 : m_startContainer(0)265 , m_startOffset(0)266 , m_endContainer(0)267 , m_endOffset(0)268 , m_positionNode(0)269 , m_textCharacters(0)270 , m_textLength(0)271 , m_emitCharactersBetweenAllVisiblePositions(emitCharactersBetweenAllVisiblePositions)272 , m_enterTextControls(enterTextControls)273 , m_emitsTextWithoutTranscoding(false)274 {275 init(r);276 261 } 277 262 … … 284 269 , m_textCharacters(0) 285 270 , m_textLength(0) 286 , m_emitCharactersBetweenAllVisiblePositions(behavior & TextIteratorBehaviorEmitCharactersBetweenAllVisiblePositions) 287 , m_enterTextControls(behavior & TextIteratorBehaviorEnterTextControls) 288 , m_emitsTextWithoutTranscoding(behavior & TextIteratorBehaviorEmitsTextsWithoutTranscoding) 289 { 290 init(r); 291 } 292 293 void TextIterator::init(const Range* r) 271 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCharactersBetweenAllVisiblePositions) 272 , m_entersTextControls(behavior & TextIteratorEntersTextControls) 273 , m_emitsTextWithoutTranscoding(behavior & TextIteratorEmitsTextsWithoutTranscoding) 294 274 { 295 275 if (!r) … … 327 307 328 308 // initialize node processing state 329 m_need AnotherNewline = false;309 m_needsAnotherNewline = false; 330 310 m_textBox = 0; 331 311 332 312 // initialize record of previous node processing 333 m_ha veEmitted = false;313 m_hasEmitted = false; 334 314 m_lastTextNode = 0; 335 315 m_lastTextNodeEndedWithCollapsedSpace = false; … … 352 332 353 333 // handle remembered node that needed a newline after the text node's newline 354 if (m_need AnotherNewline) {334 if (m_needsAnotherNewline) { 355 335 // Emit the extra newline, and position it *inside* m_node, after m_node's 356 336 // contents, in case it's a block, in the same way that we position the first … … 358 338 // break begins. 359 339 // FIXME: It would be cleaner if we emitted two newlines during the last 360 // iteration, instead of using m_need AnotherNewline.340 // iteration, instead of using m_needsAnotherNewline. 361 341 Node* baseNode = m_node->lastChild() ? m_node->lastChild() : m_node; 362 342 emitCharacter('\n', baseNode->parentNode(), baseNode, 1, 1); 363 m_need AnotherNewline = false;343 m_needsAnotherNewline = false; 364 344 return; 365 345 } … … 586 566 } 587 567 588 if (m_enter TextControls && renderer->isTextControl()) {568 if (m_entersTextControls && renderer->isTextControl()) { 589 569 if (HTMLElement* innerTextElement = toRenderTextControl(renderer)->innerTextElement()) { 590 570 m_node = innerTextElement->shadowTreeRootNode(); … … 595 575 } 596 576 597 m_ha veEmitted = true;598 599 if (m_emit CharactersBetweenAllVisiblePositions) {577 m_hasEmitted = true; 578 579 if (m_emitsCharactersBetweenAllVisiblePositions) { 600 580 // We want replaced elements to behave like punctuation for boundary 601 581 // finding, and to simply take up space for the selection preservation … … 759 739 bool TextIterator::shouldRepresentNodeOffsetZero() 760 740 { 761 if (m_emit CharactersBetweenAllVisiblePositions && m_node->renderer() && m_node->renderer()->isTable())741 if (m_emitsCharactersBetweenAllVisiblePositions && m_node->renderer() && m_node->renderer()->isTable()) 762 742 return true; 763 743 … … 768 748 769 749 // Otherwise, show the position if we have emitted any characters 770 if (m_ha veEmitted)750 if (m_hasEmitted) 771 751 return true; 772 752 … … 790 770 // If we started as m_startContainer offset 0 and the current node is a descendant of 791 771 // the start container, we already had enough context to correctly decide whether to 792 // emit after a preceding block. We chose not to emit (m_ha veEmitted is false),772 // emit after a preceding block. We chose not to emit (m_hasEmitted is false), 793 773 // so don't second guess that now. 794 774 // NOTE: Is this really correct when m_node is not a leftmost descendant? Probably … … 814 794 bool TextIterator::shouldEmitSpaceBeforeAndAfterNode(Node* node) 815 795 { 816 return node->renderer() && node->renderer()->isTable() && (node->renderer()->isInline() || m_emit CharactersBetweenAllVisiblePositions);796 return node->renderer() && node->renderer()->isTable() && (node->renderer()->isInline() || m_emitsCharactersBetweenAllVisiblePositions); 817 797 } 818 798 … … 841 821 if (shouldEmitNewlineForNode(m_node)) 842 822 emitCharacter('\n', m_node->parentNode(), m_node, 0, 1); 843 else if (m_emit CharactersBetweenAllVisiblePositions && m_node->renderer() && m_node->renderer()->isHR())823 else if (m_emitsCharactersBetweenAllVisiblePositions && m_node->renderer() && m_node->renderer()->isHR()) 844 824 emitCharacter(' ', m_node->parentNode(), m_node, 0, 1); 845 825 else … … 852 832 { 853 833 // prevent emitting a newline when exiting a collapsed block at beginning of the range 854 // FIXME: !m_ha veEmitted does not necessarily mean there was a collapsed block... it could834 // FIXME: !m_hasEmitted does not necessarily mean there was a collapsed block... it could 855 835 // have been an hr (e.g.). Also, a collapsed block could have height (e.g. a table) and 856 836 // therefore look like a blank line. 857 if (!m_ha veEmitted)837 if (!m_hasEmitted) 858 838 return; 859 839 … … 876 856 emitCharacter('\n', baseNode->parentNode(), baseNode, 1, 1); 877 857 // remember whether to later add a newline for the current node 878 ASSERT(!m_need AnotherNewline);879 m_need AnotherNewline = addNewline;858 ASSERT(!m_needsAnotherNewline); 859 m_needsAnotherNewline = addNewline; 880 860 } else if (addNewline) 881 861 // insert a newline with a position following this block's contents. … … 890 870 void TextIterator::emitCharacter(UChar c, Node* textNode, Node* offsetBaseNode, int textStartOffset, int textEndOffset) 891 871 { 892 m_ha veEmitted = true;872 m_hasEmitted = true; 893 873 894 874 // remember information with which to construct the TextIterator::range() … … 924 904 925 905 m_lastTextNodeEndedWithCollapsedSpace = false; 926 m_ha veEmitted = true;906 m_hasEmitted = true; 927 907 } 928 908 … … 1175 1155 } 1176 1156 1177 CharacterIterator::CharacterIterator(const Range* r, bool emitCharactersBetweenAllVisiblePositions, bool enterTextControls)1157 CharacterIterator::CharacterIterator(const Range* r, TextIteratorBehavior behavior) 1178 1158 : m_offset(0) 1179 1159 , m_runOffset(0) 1180 1160 , m_atBreak(true) 1181 , m_textIterator(r, emitCharactersBetweenAllVisiblePositions, enterTextControls)1161 , m_textIterator(r, behavior) 1182 1162 { 1183 1163 while (!atEnd() && m_textIterator.length() == 0) … … 2014 1994 { 2015 1995 int length = 0; 2016 for (TextIterator it(r, forSelectionPreservation ); !it.atEnd(); it.advance())1996 for (TextIterator it(r, forSelectionPreservation ? TextIteratorEmitsCharactersBetweenAllVisiblePositions : TextIteratorDefaultBehavior); !it.atEnd(); it.advance()) 2017 1997 length += it.length(); 2018 1998 … … 2036 2016 RefPtr<Range> textRunRange; 2037 2017 2038 TextIterator it(rangeOfContents(scope).get(), forSelectionPreservation );2018 TextIterator it(rangeOfContents(scope).get(), forSelectionPreservation ? TextIteratorEmitsCharactersBetweenAllVisiblePositions : TextIteratorDefaultBehavior); 2039 2019 2040 2020 // FIXME: the atEnd() check shouldn't be necessary, workaround for <http://bugs.webkit.org/show_bug.cgi?id=6289>. … … 2139 2119 Vector<UChar> textBuffer; 2140 2120 textBuffer.reserveInitialCapacity(cMaxSegmentSize); 2141 for (TextIterator it(r, isDisplayString ? TextIterator BehaviorDefault : TextIteratorBehaviorEmitsTextsWithoutTranscoding); !it.atEnd(); it.advance()) {2121 for (TextIterator it(r, isDisplayString ? TextIteratorDefaultBehavior : TextIteratorEmitsTextsWithoutTranscoding); !it.atEnd(); it.advance()) { 2142 2122 if (textBuffer.size() && textBuffer.size() + it.length() > cMaxSegmentSize) { 2143 2123 UChar* newSegmentBuffer = static_cast<UChar*>(malloc(textBuffer.size() * sizeof(UChar))); … … 2259 2239 size_t matchLength; 2260 2240 { 2261 CharacterIterator findIterator(range, false, true);2241 CharacterIterator findIterator(range, TextIteratorEntersTextControls); 2262 2242 matchLength = findPlainText(findIterator, target, forward, caseSensitive, matchStart); 2263 2243 if (!matchLength) … … 2266 2246 2267 2247 // Then, find the document position of the start and the end of the text. 2268 CharacterIterator computeRangeIterator(range, false, true);2248 CharacterIterator computeRangeIterator(range, TextIteratorEntersTextControls); 2269 2249 return characterSubrange(computeRangeIterator, matchStart, matchLength); 2270 2250 } -
trunk/WebCore/editing/TextIterator.h
r57940 r58040 70 70 71 71 enum TextIteratorBehavior { 72 TextIterator BehaviorDefault= 0,73 TextIterator BehaviorEmitCharactersBetweenAllVisiblePositions = 1 << 0,74 TextIterator BehaviorEnterTextControls = 1 << 1,75 TextIterator BehaviorEmitsTextsWithoutTranscoding = 1 << 2,72 TextIteratorDefaultBehavior = 0, 73 TextIteratorEmitsCharactersBetweenAllVisiblePositions = 1 << 0, 74 TextIteratorEntersTextControls = 1 << 1, 75 TextIteratorEmitsTextsWithoutTranscoding = 1 << 2, 76 76 }; 77 77 … … 79 79 public: 80 80 TextIterator(); 81 explicit TextIterator(const Range*, bool emitCharactersBetweenAllVisiblePositions = false, bool enterTextControls = false); 82 TextIterator(const Range*, TextIteratorBehavior); 81 explicit TextIterator(const Range*, TextIteratorBehavior = TextIteratorDefaultBehavior); 83 82 84 83 bool atEnd() const { return !m_positionNode; } … … 96 95 97 96 private: 98 void init(const Range*);99 97 void exitNode(); 100 98 bool shouldRepresentNodeOffsetZero(); … … 133 131 // Used when there is still some pending text from the current node; when these 134 132 // are false and 0, we go back to normal iterating. 135 bool m_need AnotherNewline;133 bool m_needsAnotherNewline; 136 134 InlineTextBox* m_textBox; 137 135 … … 149 147 150 148 // Used when deciding whether to emit a "positioning" (e.g. newline) before any other content 151 bool m_ha veEmitted;149 bool m_hasEmitted; 152 150 153 151 // Used by selection preservation code. There should be one character emitted between every VisiblePosition … … 155 153 // FIXME <rdar://problem/6028818>: This functionality should eventually be phased out when we rewrite 156 154 // moveParagraphs to not clone/destroy moved content. 157 bool m_emit CharactersBetweenAllVisiblePositions;158 bool m_enter TextControls;155 bool m_emitsCharactersBetweenAllVisiblePositions; 156 bool m_entersTextControls; 159 157 160 158 // Used when we want texts for copying, pasting, and transposing. … … 223 221 public: 224 222 CharacterIterator(); 225 explicit CharacterIterator(const Range*, bool emitCharactersBetweenAllVisiblePositions = false, bool enterTextControls = false);223 explicit CharacterIterator(const Range*, TextIteratorBehavior = TextIteratorDefaultBehavior); 226 224 227 225 void advance(int numCharacters); -
trunk/WebCore/editing/VisibleSelection.cpp
r56825 r58040 227 227 return; 228 228 229 CharacterIterator charIt(searchRange.get(), true);229 CharacterIterator charIt(searchRange.get(), TextIteratorEmitsCharactersBetweenAllVisiblePositions); 230 230 231 231 for (; charIt.length(); charIt.advance(1)) { -
trunk/WebCore/editing/visible_units.cpp
r55613 r58040 208 208 searchRange->selectNodeContents(boundary, ec); 209 209 searchRange->setStart(start.node(), start.deprecatedEditingOffset(), ec); 210 TextIterator it(searchRange.get(), true);210 TextIterator it(searchRange.get(), TextIteratorEmitsCharactersBetweenAllVisiblePositions); 211 211 unsigned next = 0; 212 212 bool inTextSecurityMode = start.node() && start.node()->renderer() && start.node()->renderer()->style()->textSecurity() != TSNONE; … … 239 239 } else if (next != prefixLength) { 240 240 // Use the character iterator to translate the next value into a DOM position. 241 CharacterIterator charIt(searchRange.get(), true);241 CharacterIterator charIt(searchRange.get(), TextIteratorEmitsCharactersBetweenAllVisiblePositions); 242 242 charIt.advance(next - prefixLength - 1); 243 243 pos = charIt.range()->endPosition();
Note: See TracChangeset
for help on using the changeset viewer.