Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: Source/core/editing/TextIterator.cpp

Issue 425203002: Revert of Oilpan: Prepare to move RenderObject and RenderObjectChildList to Oilpan heap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/editing/TextIterator.h ('k') | Source/core/rendering/RenderBlock.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r ights reserved. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All r ights reserved.
3 * Copyright (C) 2005 Alexey Proskuryakov. 3 * Copyright (C) 2005 Alexey Proskuryakov.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 TextIterator::TextIterator(const Range* range, TextIteratorBehaviorFlags behavio r) 243 TextIterator::TextIterator(const Range* range, TextIteratorBehaviorFlags behavio r)
244 : m_startContainer(nullptr) 244 : m_startContainer(nullptr)
245 , m_startOffset(0) 245 , m_startOffset(0)
246 , m_endContainer(nullptr) 246 , m_endContainer(nullptr)
247 , m_endOffset(0) 247 , m_endOffset(0)
248 , m_positionNode(nullptr) 248 , m_positionNode(nullptr)
249 , m_textLength(0) 249 , m_textLength(0)
250 , m_needsAnotherNewline(false) 250 , m_needsAnotherNewline(false)
251 , m_textBox(0) 251 , m_textBox(0)
252 , m_remainingTextBox(0) 252 , m_remainingTextBox(0)
253 , m_firstLetterText(nullptr) 253 , m_firstLetterText(0)
254 , m_lastTextNode(nullptr) 254 , m_lastTextNode(nullptr)
255 , m_lastTextNodeEndedWithCollapsedSpace(false) 255 , m_lastTextNodeEndedWithCollapsedSpace(false)
256 , m_lastCharacter(0) 256 , m_lastCharacter(0)
257 , m_sortedTextBoxesPosition(0) 257 , m_sortedTextBoxesPosition(0)
258 , m_hasEmitted(false) 258 , m_hasEmitted(false)
259 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh aractersBetweenAllVisiblePositions) 259 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh aractersBetweenAllVisiblePositions)
260 , m_entersTextControls(behavior & TextIteratorEntersTextControls) 260 , m_entersTextControls(behavior & TextIteratorEntersTextControls)
261 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText) 261 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText)
262 , m_handledFirstLetter(false) 262 , m_handledFirstLetter(false)
263 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility) 263 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility)
(...skipping 10 matching lines...) Expand all
274 TextIterator::TextIterator(const Position& start, const Position& end, TextItera torBehaviorFlags behavior) 274 TextIterator::TextIterator(const Position& start, const Position& end, TextItera torBehaviorFlags behavior)
275 : m_startContainer(nullptr) 275 : m_startContainer(nullptr)
276 , m_startOffset(0) 276 , m_startOffset(0)
277 , m_endContainer(nullptr) 277 , m_endContainer(nullptr)
278 , m_endOffset(0) 278 , m_endOffset(0)
279 , m_positionNode(nullptr) 279 , m_positionNode(nullptr)
280 , m_textLength(0) 280 , m_textLength(0)
281 , m_needsAnotherNewline(false) 281 , m_needsAnotherNewline(false)
282 , m_textBox(0) 282 , m_textBox(0)
283 , m_remainingTextBox(0) 283 , m_remainingTextBox(0)
284 , m_firstLetterText(nullptr) 284 , m_firstLetterText(0)
285 , m_lastTextNode(nullptr) 285 , m_lastTextNode(nullptr)
286 , m_lastTextNodeEndedWithCollapsedSpace(false) 286 , m_lastTextNodeEndedWithCollapsedSpace(false)
287 , m_lastCharacter(0) 287 , m_lastCharacter(0)
288 , m_sortedTextBoxesPosition(0) 288 , m_sortedTextBoxesPosition(0)
289 , m_hasEmitted(false) 289 , m_hasEmitted(false)
290 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh aractersBetweenAllVisiblePositions) 290 , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCh aractersBetweenAllVisiblePositions)
291 , m_entersTextControls(behavior & TextIteratorEntersTextControls) 291 , m_entersTextControls(behavior & TextIteratorEntersTextControls)
292 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText) 292 , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText)
293 , m_handledFirstLetter(false) 293 , m_handledFirstLetter(false)
294 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility) 294 , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility)
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 // iteration, instead of using m_needsAnotherNewline. 389 // iteration, instead of using m_needsAnotherNewline.
390 Node* baseNode = m_node->lastChild() ? m_node->lastChild() : m_node.get( ); 390 Node* baseNode = m_node->lastChild() ? m_node->lastChild() : m_node.get( );
391 emitCharacter('\n', baseNode->parentNode(), baseNode, 1, 1); 391 emitCharacter('\n', baseNode->parentNode(), baseNode, 1, 1);
392 m_needsAnotherNewline = false; 392 m_needsAnotherNewline = false;
393 return; 393 return;
394 } 394 }
395 395
396 if (!m_textBox && m_remainingTextBox) { 396 if (!m_textBox && m_remainingTextBox) {
397 m_textBox = m_remainingTextBox; 397 m_textBox = m_remainingTextBox;
398 m_remainingTextBox = 0; 398 m_remainingTextBox = 0;
399 m_firstLetterText = nullptr; 399 m_firstLetterText = 0;
400 m_offset = 0; 400 m_offset = 0;
401 } 401 }
402 // handle remembered text box 402 // handle remembered text box
403 if (m_textBox) { 403 if (m_textBox) {
404 handleTextBox(); 404 handleTextBox();
405 if (m_positionNode) 405 if (m_positionNode)
406 return; 406 return;
407 } 407 }
408 408
409 while (m_node && (m_node != m_pastEndNode || m_shadowDepth > 0)) { 409 while (m_node && (m_node != m_pastEndNode || m_shadowDepth > 0)) {
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 } 530 }
531 } else { 531 } else {
532 // If we are in a user-agent shadow root, then go back t o the host. 532 // If we are in a user-agent shadow root, then go back t o the host.
533 ASSERT(shadowRoot->type() == ShadowRoot::UserAgentShadow Root); 533 ASSERT(shadowRoot->type() == ShadowRoot::UserAgentShadow Root);
534 m_node = shadowRoot->host(); 534 m_node = shadowRoot->host();
535 m_iterationProgress = HandledUserAgentShadowRoot; 535 m_iterationProgress = HandledUserAgentShadowRoot;
536 --m_shadowDepth; 536 --m_shadowDepth;
537 m_fullyClippedStack.pop(); 537 m_fullyClippedStack.pop();
538 } 538 }
539 m_handledFirstLetter = false; 539 m_handledFirstLetter = false;
540 m_firstLetterText = nullptr; 540 m_firstLetterText = 0;
541 continue; 541 continue;
542 } 542 }
543 } 543 }
544 m_fullyClippedStack.pop(); 544 m_fullyClippedStack.pop();
545 } 545 }
546 546
547 // set the new current node 547 // set the new current node
548 m_node = next; 548 m_node = next;
549 if (m_node) 549 if (m_node)
550 pushFullyClippedState(m_fullyClippedStack, m_node); 550 pushFullyClippedState(m_fullyClippedStack, m_node);
551 m_iterationProgress = HandledNone; 551 m_iterationProgress = HandledNone;
552 m_handledFirstLetter = false; 552 m_handledFirstLetter = false;
553 m_firstLetterText = nullptr; 553 m_firstLetterText = 0;
554 554
555 // how would this ever be? 555 // how would this ever be?
556 if (m_positionNode) 556 if (m_positionNode)
557 return; 557 return;
558 } 558 }
559 } 559 }
560 560
561 UChar TextIterator::characterAt(unsigned index) const 561 UChar TextIterator::characterAt(unsigned index) const
562 { 562 {
563 ASSERT_WITH_SECURITY_IMPLICATION(index < static_cast<unsigned>(length())); 563 ASSERT_WITH_SECURITY_IMPLICATION(index < static_cast<unsigned>(length()));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 int runStart = m_offset; 615 int runStart = m_offset;
616 if (m_lastTextNodeEndedWithCollapsedSpace && hasVisibleTextNode(renderer )) { 616 if (m_lastTextNodeEndedWithCollapsedSpace && hasVisibleTextNode(renderer )) {
617 emitCharacter(' ', m_node, 0, runStart, runStart); 617 emitCharacter(' ', m_node, 0, runStart, runStart);
618 return false; 618 return false;
619 } 619 }
620 if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset) { 620 if (!m_handledFirstLetter && renderer->isTextFragment() && !m_offset) {
621 handleTextNodeFirstLetter(toRenderTextFragment(renderer)); 621 handleTextNodeFirstLetter(toRenderTextFragment(renderer));
622 if (m_firstLetterText) { 622 if (m_firstLetterText) {
623 String firstLetter = m_firstLetterText->text(); 623 String firstLetter = m_firstLetterText->text();
624 emitText(m_node, m_firstLetterText, m_offset, m_offset + firstLe tter.length()); 624 emitText(m_node, m_firstLetterText, m_offset, m_offset + firstLe tter.length());
625 m_firstLetterText = nullptr; 625 m_firstLetterText = 0;
626 m_textBox = 0; 626 m_textBox = 0;
627 return false; 627 return false;
628 } 628 }
629 } 629 }
630 if (renderer->style()->visibility() != VISIBLE && !m_ignoresStyleVisibil ity) 630 if (renderer->style()->visibility() != VISIBLE && !m_ignoresStyleVisibil ity)
631 return false; 631 return false;
632 int strLength = str.length(); 632 int strLength = str.length();
633 int end = (m_node == m_endContainer) ? m_endOffset : INT_MAX; 633 int end = (m_node == m_endContainer) ? m_endOffset : INT_MAX;
634 int runEnd = std::min(strLength, end); 634 int runEnd = std::min(strLength, end);
635 635
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 m_sortedTextBoxesPosition = 0; 667 m_sortedTextBoxesPosition = 0;
668 m_textBox = m_sortedTextBoxes.isEmpty() ? 0 : m_sortedTextBoxes[0]; 668 m_textBox = m_sortedTextBoxes.isEmpty() ? 0 : m_sortedTextBoxes[0];
669 } 669 }
670 670
671 handleTextBox(); 671 handleTextBox();
672 return true; 672 return true;
673 } 673 }
674 674
675 void TextIterator::handleTextBox() 675 void TextIterator::handleTextBox()
676 { 676 {
677 RenderText* renderer = m_firstLetterText ? m_firstLetterText.get() : toRende rText(m_node->renderer()); 677 RenderText* renderer = m_firstLetterText ? m_firstLetterText : toRenderText( m_node->renderer());
678 if (renderer->style()->visibility() != VISIBLE && !m_ignoresStyleVisibility) { 678 if (renderer->style()->visibility() != VISIBLE && !m_ignoresStyleVisibility) {
679 m_textBox = 0; 679 m_textBox = 0;
680 return; 680 return;
681 } 681 }
682 String str = renderer->text(); 682 String str = renderer->text();
683 unsigned start = m_offset; 683 unsigned start = m_offset;
684 unsigned end = (m_node == m_endContainer) ? static_cast<unsigned>(m_endOffse t) : INT_MAX; 684 unsigned end = (m_node == m_endContainer) ? static_cast<unsigned>(m_endOffse t) : INT_MAX;
685 while (m_textBox) { 685 while (m_textBox) {
686 unsigned textBoxStart = m_textBox->start(); 686 unsigned textBoxStart = m_textBox->start();
687 unsigned runStart = std::max(textBoxStart, start); 687 unsigned runStart = std::max(textBoxStart, start);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 return; 745 return;
746 } 746 }
747 // Advance and continue 747 // Advance and continue
748 m_textBox = nextTextBox; 748 m_textBox = nextTextBox;
749 if (renderer->containsReversedText()) 749 if (renderer->containsReversedText())
750 ++m_sortedTextBoxesPosition; 750 ++m_sortedTextBoxesPosition;
751 } 751 }
752 if (!m_textBox && m_remainingTextBox) { 752 if (!m_textBox && m_remainingTextBox) {
753 m_textBox = m_remainingTextBox; 753 m_textBox = m_remainingTextBox;
754 m_remainingTextBox = 0; 754 m_remainingTextBox = 0;
755 m_firstLetterText = nullptr; 755 m_firstLetterText = 0;
756 m_offset = 0; 756 m_offset = 0;
757 handleTextBox(); 757 handleTextBox();
758 } 758 }
759 } 759 }
760 760
761 static inline RenderText* firstRenderTextInFirstLetter(RenderBoxModelObject* fir stLetter) 761 static inline RenderText* firstRenderTextInFirstLetter(RenderBoxModelObject* fir stLetter)
762 { 762 {
763 if (!firstLetter) 763 if (!firstLetter)
764 return 0; 764 return 0;
765 765
(...skipping 1454 matching lines...) Expand 10 before | Expand all | Expand 10 after
2220 resultEnd = collapseTo; 2220 resultEnd = collapseTo;
2221 return; 2221 return;
2222 } 2222 }
2223 } 2223 }
2224 2224
2225 CharacterIterator computeRangeIterator(inputStart, inputEnd, iteratorFlagsFo rFindPlainText); 2225 CharacterIterator computeRangeIterator(inputStart, inputEnd, iteratorFlagsFo rFindPlainText);
2226 calculateCharacterSubrange(computeRangeIterator, matchStart, matchLength, re sultStart, resultEnd); 2226 calculateCharacterSubrange(computeRangeIterator, matchStart, matchLength, re sultStart, resultEnd);
2227 } 2227 }
2228 2228
2229 } 2229 }
OLDNEW
« no previous file with comments | « Source/core/editing/TextIterator.h ('k') | Source/core/rendering/RenderBlock.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698