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

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

Issue 425223005: Move Node/ContainerNode's traverseToChildAt() to NodeTraversal (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
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 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 } 169 }
170 170
171 #endif 171 #endif
172 172
173 // This function is like Range::pastLastNode, except for the fact that it can cl imb up out of shadow trees. 173 // This function is like Range::pastLastNode, except for the fact that it can cl imb up out of shadow trees.
174 static Node* nextInPreOrderCrossingShadowBoundaries(Node* rangeEndContainer, int rangeEndOffset) 174 static Node* nextInPreOrderCrossingShadowBoundaries(Node* rangeEndContainer, int rangeEndOffset)
175 { 175 {
176 if (!rangeEndContainer) 176 if (!rangeEndContainer)
177 return 0; 177 return 0;
178 if (rangeEndOffset >= 0 && !rangeEndContainer->offsetInCharacters()) { 178 if (rangeEndOffset >= 0 && !rangeEndContainer->offsetInCharacters()) {
179 if (Node* next = rangeEndContainer->traverseToChildAt(rangeEndOffset)) 179 if (Node* next = NodeTraversal::childAt(*rangeEndContainer, rangeEndOffs et))
180 return next; 180 return next;
181 } 181 }
182 for (Node* node = rangeEndContainer; node; node = node->parentOrShadowHostNo de()) { 182 for (Node* node = rangeEndContainer; node; node = node->parentOrShadowHostNo de()) {
183 if (Node* next = node->nextSibling()) 183 if (Node* next = node->nextSibling())
184 return next; 184 return next;
185 } 185 }
186 return 0; 186 return 0;
187 } 187 }
188 188
189 // -------- 189 // --------
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 // the common ancestor tree scope. 325 // the common ancestor tree scope.
326 const TreeScope* commonAncestorTreeScope = startContainer->treeScope().commo nAncestorTreeScope(endContainer->treeScope()); 326 const TreeScope* commonAncestorTreeScope = startContainer->treeScope().commo nAncestorTreeScope(endContainer->treeScope());
327 ASSERT(commonAncestorTreeScope); 327 ASSERT(commonAncestorTreeScope);
328 m_shadowDepth = 0; 328 m_shadowDepth = 0;
329 for (const TreeScope* treeScope = &startContainer->treeScope(); treeScope != commonAncestorTreeScope; treeScope = treeScope->parentTreeScope()) 329 for (const TreeScope* treeScope = &startContainer->treeScope(); treeScope != commonAncestorTreeScope; treeScope = treeScope->parentTreeScope())
330 ++m_shadowDepth; 330 ++m_shadowDepth;
331 331
332 // Set up the current node for processing. 332 // Set up the current node for processing.
333 if (startContainer->offsetInCharacters()) 333 if (startContainer->offsetInCharacters())
334 m_node = startContainer; 334 m_node = startContainer;
335 else if (Node* child = startContainer->traverseToChildAt(startOffset)) 335 else if (Node* child = NodeTraversal::childAt(*startContainer, startOffset))
336 m_node = child; 336 m_node = child;
337 else if (!startOffset) 337 else if (!startOffset)
338 m_node = startContainer; 338 m_node = startContainer;
339 else 339 else
340 m_node = NodeTraversal::nextSkippingChildren(*startContainer); 340 m_node = NodeTraversal::nextSkippingChildren(*startContainer);
341 341
342 if (!m_node) 342 if (!m_node)
343 return; 343 return;
344 344
345 m_node->document().updateLayoutIgnorePendingStylesheets(); 345 m_node->document().updateLayoutIgnorePendingStylesheets();
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 RefPtrWillBeRawPtr<Range> textRange = range(); 1207 RefPtrWillBeRawPtr<Range> textRange = range();
1208 if (!textRange) 1208 if (!textRange)
1209 return 0; 1209 return 0;
1210 1210
1211 Node* node = textRange->startContainer(); 1211 Node* node = textRange->startContainer();
1212 if (!node) 1212 if (!node)
1213 return 0; 1213 return 0;
1214 if (node->offsetInCharacters()) 1214 if (node->offsetInCharacters())
1215 return node; 1215 return node;
1216 1216
1217 return node->traverseToChildAt(textRange->startOffset()); 1217 return NodeTraversal::childAt(*node, textRange->startOffset());
1218 } 1218 }
1219 1219
1220 // -------- 1220 // --------
1221 1221
1222 SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator(const Range* r, TextIteratorBehaviorFlags behavior) 1222 SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator(const Range* r, TextIteratorBehaviorFlags behavior)
1223 : m_node(nullptr) 1223 : m_node(nullptr)
1224 , m_offset(0) 1224 , m_offset(0)
1225 , m_handledNode(false) 1225 , m_handledNode(false)
1226 , m_handledChildren(false) 1226 , m_handledChildren(false)
1227 , m_startNode(nullptr) 1227 , m_startNode(nullptr)
(...skipping 20 matching lines...) Expand all
1248 return; 1248 return;
1249 1249
1250 Node* startNode = r->startContainer(); 1250 Node* startNode = r->startContainer();
1251 if (!startNode) 1251 if (!startNode)
1252 return; 1252 return;
1253 Node* endNode = r->endContainer(); 1253 Node* endNode = r->endContainer();
1254 int startOffset = r->startOffset(); 1254 int startOffset = r->startOffset();
1255 int endOffset = r->endOffset(); 1255 int endOffset = r->endOffset();
1256 1256
1257 if (!startNode->offsetInCharacters() && startOffset >= 0) { 1257 if (!startNode->offsetInCharacters() && startOffset >= 0) {
1258 // traverseToChildAt() will return 0 if the offset is out of range. We r ely on this behavior 1258 // NodeTraversal::childAt() will return 0 if the offset is out of range. We rely on this behavior
1259 // instead of calling countChildren() to avoid traversing the children t wice. 1259 // instead of calling countChildren() to avoid traversing the children t wice.
1260 if (Node* childAtOffset = startNode->traverseToChildAt(startOffset)) { 1260 if (Node* childAtOffset = NodeTraversal::childAt(*startNode, startOffset )) {
1261 startNode = childAtOffset; 1261 startNode = childAtOffset;
1262 startOffset = 0; 1262 startOffset = 0;
1263 } 1263 }
1264 } 1264 }
1265 if (!endNode->offsetInCharacters() && endOffset > 0) { 1265 if (!endNode->offsetInCharacters() && endOffset > 0) {
1266 // traverseToChildAt() will return 0 if the offset is out of range. We r ely on this behavior 1266 // NodeTraversal::childAt() will return 0 if the offset is out of range. We rely on this behavior
1267 // instead of calling countChildren() to avoid traversing the children t wice. 1267 // instead of calling countChildren() to avoid traversing the children t wice.
1268 if (Node* childAtOffset = endNode->traverseToChildAt(endOffset - 1)) { 1268 if (Node* childAtOffset = NodeTraversal::childAt(*endNode, endOffset - 1 )) {
1269 endNode = childAtOffset; 1269 endNode = childAtOffset;
1270 endOffset = lastOffsetInNode(endNode); 1270 endOffset = lastOffsetInNode(endNode);
1271 } 1271 }
1272 } 1272 }
1273 1273
1274 m_node = endNode; 1274 m_node = endNode;
1275 setUpFullyClippedStack(m_fullyClippedStack, m_node); 1275 setUpFullyClippedStack(m_fullyClippedStack, m_node);
1276 m_offset = endOffset; 1276 m_offset = endOffset;
1277 m_handledNode = false; 1277 m_handledNode = false;
1278 m_handledChildren = !endOffset; 1278 m_handledChildren = !endOffset;
(...skipping 941 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/InsertParagraphSeparatorCommand.cpp ('k') | Source/core/editing/VisibleUnits.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698