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

Unified Diff: Source/core/editing/TextIterator.cpp

Issue 69543007: Have NodeTraversal::nextSkippingChildren() take a reference (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase on master Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/editing/ReplaceSelectionCommand.cpp ('k') | Source/core/editing/VisibleUnits.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/TextIterator.cpp
diff --git a/Source/core/editing/TextIterator.cpp b/Source/core/editing/TextIterator.cpp
index 50b33fa976b04c36a2a2898b48f20a43260b780a..3bc48567e803607cb8d768b174504e2387a65386 100644
--- a/Source/core/editing/TextIterator.cpp
+++ b/Source/core/editing/TextIterator.cpp
@@ -747,36 +747,36 @@ static bool shouldEmitNewlineForNode(Node* node, bool emitsOriginalText)
return emitsOriginalText || !(node->isInShadowTree() && node->shadowHost()->hasTagName(inputTag));
}
-static bool shouldEmitNewlinesBeforeAndAfterNode(Node* node)
+static bool shouldEmitNewlinesBeforeAndAfterNode(Node& node)
{
// Block flow (versus inline flow) is represented by having
// a newline both before and after the element.
- RenderObject* r = node->renderer();
+ RenderObject* r = node.renderer();
if (!r) {
- return (node->hasTagName(blockquoteTag)
- || node->hasTagName(ddTag)
- || node->hasTagName(divTag)
- || node->hasTagName(dlTag)
- || node->hasTagName(dtTag)
- || node->hasTagName(h1Tag)
- || node->hasTagName(h2Tag)
- || node->hasTagName(h3Tag)
- || node->hasTagName(h4Tag)
- || node->hasTagName(h5Tag)
- || node->hasTagName(h6Tag)
- || node->hasTagName(hrTag)
- || node->hasTagName(liTag)
- || node->hasTagName(listingTag)
- || node->hasTagName(olTag)
- || node->hasTagName(pTag)
- || node->hasTagName(preTag)
- || node->hasTagName(trTag)
- || node->hasTagName(ulTag));
+ return (node.hasTagName(blockquoteTag)
+ || node.hasTagName(ddTag)
+ || node.hasTagName(divTag)
+ || node.hasTagName(dlTag)
+ || node.hasTagName(dtTag)
+ || node.hasTagName(h1Tag)
+ || node.hasTagName(h2Tag)
+ || node.hasTagName(h3Tag)
+ || node.hasTagName(h4Tag)
+ || node.hasTagName(h5Tag)
+ || node.hasTagName(h6Tag)
+ || node.hasTagName(hrTag)
+ || node.hasTagName(liTag)
+ || node.hasTagName(listingTag)
+ || node.hasTagName(olTag)
+ || node.hasTagName(pTag)
+ || node.hasTagName(preTag)
+ || node.hasTagName(trTag)
+ || node.hasTagName(ulTag));
}
// Need to make an exception for table cells, because they are blocks, but we
// want them tab-delimited rather than having newlines before and after.
- if (isTableCell(node))
+ if (isTableCell(&node))
return false;
// Need to make an exception for table row elements, because they are neither
@@ -791,21 +791,22 @@ static bool shouldEmitNewlinesBeforeAndAfterNode(Node* node)
&& !r->isFloatingOrOutOfFlowPositioned() && !r->isBody() && !r->isRubyText();
}
-static bool shouldEmitNewlineAfterNode(Node* node)
+static bool shouldEmitNewlineAfterNode(Node& node)
{
// FIXME: It should be better but slower to create a VisiblePosition here.
if (!shouldEmitNewlinesBeforeAndAfterNode(node))
return false;
// Check if this is the very last renderer in the document.
// If so, then we should not emit a newline.
- while ((node = NodeTraversal::nextSkippingChildren(node))) {
- if (node->renderer())
+ Node* next = &node;
+ while ((next = NodeTraversal::nextSkippingChildren(*next))) {
+ if (next->renderer())
return true;
}
return false;
}
-static bool shouldEmitNewlineBeforeNode(Node* node)
+static bool shouldEmitNewlineBeforeNode(Node& node)
{
return shouldEmitNewlinesBeforeAndAfterNode(node);
}
@@ -936,7 +937,7 @@ void TextIterator::representNodeOffsetZero()
if (shouldEmitTabBeforeNode(m_node)) {
if (shouldRepresentNodeOffsetZero())
emitCharacter('\t', m_node->parentNode(), m_node, 0, 0);
- } else if (shouldEmitNewlineBeforeNode(m_node)) {
+ } else if (shouldEmitNewlineBeforeNode(*m_node)) {
if (shouldRepresentNodeOffsetZero())
emitCharacter('\n', m_node->parentNode(), m_node, 0, 0);
} else if (shouldEmitSpaceBeforeAndAfterNode(m_node)) {
@@ -974,7 +975,7 @@ void TextIterator::exitNode()
// the logic in _web_attributedStringFromRange match. We'll get that for free when we switch to use
// TextIterator in _web_attributedStringFromRange.
// See <rdar://problem/5428427> for an example of how this mismatch will cause problems.
- if (m_lastTextNode && shouldEmitNewlineAfterNode(m_node)) {
+ if (m_lastTextNode && shouldEmitNewlineAfterNode(*m_node)) {
// use extra newline to represent margin bottom, as needed
bool addNewline = shouldEmitExtraNewlineForNode(m_node);
@@ -1313,7 +1314,7 @@ bool SimplifiedBackwardsTextIterator::handleNonTextNode()
{
// We can use a linefeed in place of a tab because this simple iterator is only used to
// find boundaries, not actual content. A linefeed breaks words, sentences, and paragraphs.
- if (shouldEmitNewlineForNode(m_node, m_emitsOriginalText) || shouldEmitNewlineAfterNode(m_node) || shouldEmitTabBeforeNode(m_node)) {
+ if (shouldEmitNewlineForNode(m_node, m_emitsOriginalText) || shouldEmitNewlineAfterNode(*m_node) || shouldEmitTabBeforeNode(m_node)) {
unsigned index = m_node->nodeIndex();
// The start of this emitted range is wrong. Ensuring correctness would require
// VisiblePositions and so would be slow. previousBoundary expects this.
@@ -1324,7 +1325,7 @@ bool SimplifiedBackwardsTextIterator::handleNonTextNode()
void SimplifiedBackwardsTextIterator::exitNode()
{
- if (shouldEmitNewlineForNode(m_node, m_emitsOriginalText) || shouldEmitNewlineBeforeNode(m_node) || shouldEmitTabBeforeNode(m_node)) {
+ if (shouldEmitNewlineForNode(m_node, m_emitsOriginalText) || shouldEmitNewlineBeforeNode(*m_node) || shouldEmitTabBeforeNode(m_node)) {
// The start of this emitted range is wrong. Ensuring correctness would require
// VisiblePositions and so would be slow. previousBoundary expects this.
emitCharacter('\n', m_node, 0, 0);
« no previous file with comments | « Source/core/editing/ReplaceSelectionCommand.cpp ('k') | Source/core/editing/VisibleUnits.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698