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

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

Issue 224113002: Oilpan: move Range object to the oilpan heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Use STACK_ALLOCATED() + incorporate ager's overview of macros in this area. Created 6 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 25 matching lines...) Expand all
36 #include "core/dom/Position.h" 36 #include "core/dom/Position.h"
37 #include "core/dom/Text.h" 37 #include "core/dom/Text.h"
38 #include "core/editing/RenderedPosition.h" 38 #include "core/editing/RenderedPosition.h"
39 #include "core/editing/TextIterator.h" 39 #include "core/editing/TextIterator.h"
40 #include "core/editing/VisiblePosition.h" 40 #include "core/editing/VisiblePosition.h"
41 #include "core/editing/htmlediting.h" 41 #include "core/editing/htmlediting.h"
42 #include "core/html/HTMLBRElement.h" 42 #include "core/html/HTMLBRElement.h"
43 #include "core/rendering/InlineTextBox.h" 43 #include "core/rendering/InlineTextBox.h"
44 #include "core/rendering/RenderBlockFlow.h" 44 #include "core/rendering/RenderBlockFlow.h"
45 #include "core/rendering/RenderObject.h" 45 #include "core/rendering/RenderObject.h"
46 #include "platform/heap/Handle.h"
46 #include "platform/text/TextBoundaries.h" 47 #include "platform/text/TextBoundaries.h"
47 48
48 namespace WebCore { 49 namespace WebCore {
49 50
50 using namespace HTMLNames; 51 using namespace HTMLNames;
51 using namespace WTF::Unicode; 52 using namespace WTF::Unicode;
52 53
53 static Node* previousLeafWithSameEditability(Node* node, EditableType editableTy pe) 54 static Node* previousLeafWithSameEditability(Node* node, EditableType editableTy pe)
54 { 55 {
55 bool editable = node->rendererIsEditable(editableType); 56 bool editable = node->rendererIsEditable(editableType);
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 static VisiblePosition previousBoundary(const VisiblePosition& c, BoundarySearch Function searchFunction) 450 static VisiblePosition previousBoundary(const VisiblePosition& c, BoundarySearch Function searchFunction)
450 { 451 {
451 Position pos = c.deepEquivalent(); 452 Position pos = c.deepEquivalent();
452 Node* boundary = pos.parentEditingBoundary(); 453 Node* boundary = pos.parentEditingBoundary();
453 if (!boundary) 454 if (!boundary)
454 return VisiblePosition(); 455 return VisiblePosition();
455 456
456 Document& d = boundary->document(); 457 Document& d = boundary->document();
457 Position start = createLegacyEditingPosition(boundary, 0).parentAnchoredEqui valent(); 458 Position start = createLegacyEditingPosition(boundary, 0).parentAnchoredEqui valent();
458 Position end = pos.parentAnchoredEquivalent(); 459 Position end = pos.parentAnchoredEquivalent();
459 RefPtr<Range> searchRange = Range::create(d); 460 RefPtrWillBeRawPtr<Range> searchRange = Range::create(d);
460 461
461 Vector<UChar, 1024> string; 462 Vector<UChar, 1024> string;
462 unsigned suffixLength = 0; 463 unsigned suffixLength = 0;
463 464
464 TrackExceptionState exceptionState; 465 TrackExceptionState exceptionState;
465 if (requiresContextForWordBoundary(c.characterBefore())) { 466 if (requiresContextForWordBoundary(c.characterBefore())) {
466 RefPtr<Range> forwardsScanRange(d.createRange()); 467 RefPtrWillBeRawPtr<Range> forwardsScanRange(d.createRange());
467 forwardsScanRange->setEndAfter(boundary, exceptionState); 468 forwardsScanRange->setEndAfter(boundary, exceptionState);
468 forwardsScanRange->setStart(end.deprecatedNode(), end.deprecatedEditingO ffset(), exceptionState); 469 forwardsScanRange->setStart(end.deprecatedNode(), end.deprecatedEditingO ffset(), exceptionState);
469 TextIterator forwardsIterator(forwardsScanRange.get()); 470 TextIterator forwardsIterator(forwardsScanRange.get());
470 while (!forwardsIterator.atEnd()) { 471 while (!forwardsIterator.atEnd()) {
471 Vector<UChar, 1024> characters; 472 Vector<UChar, 1024> characters;
472 forwardsIterator.appendTextTo(characters); 473 forwardsIterator.appendTextTo(characters);
473 int i = endOfFirstWordBoundaryContext(characters.data(), characters. size()); 474 int i = endOfFirstWordBoundaryContext(characters.data(), characters. size());
474 string.append(characters.data(), i); 475 string.append(characters.data(), i);
475 suffixLength += i; 476 suffixLength += i;
476 if (static_cast<unsigned>(i) < characters.size()) 477 if (static_cast<unsigned>(i) < characters.size())
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 } 529 }
529 530
530 static VisiblePosition nextBoundary(const VisiblePosition& c, BoundarySearchFunc tion searchFunction) 531 static VisiblePosition nextBoundary(const VisiblePosition& c, BoundarySearchFunc tion searchFunction)
531 { 532 {
532 Position pos = c.deepEquivalent(); 533 Position pos = c.deepEquivalent();
533 Node* boundary = pos.parentEditingBoundary(); 534 Node* boundary = pos.parentEditingBoundary();
534 if (!boundary) 535 if (!boundary)
535 return VisiblePosition(); 536 return VisiblePosition();
536 537
537 Document& d = boundary->document(); 538 Document& d = boundary->document();
538 RefPtr<Range> searchRange(d.createRange()); 539 RefPtrWillBeRawPtr<Range> searchRange(d.createRange());
539 Position start(pos.parentAnchoredEquivalent()); 540 Position start(pos.parentAnchoredEquivalent());
540 541
541 Vector<UChar, 1024> string; 542 Vector<UChar, 1024> string;
542 unsigned prefixLength = 0; 543 unsigned prefixLength = 0;
543 544
544 if (requiresContextForWordBoundary(c.characterAfter())) { 545 if (requiresContextForWordBoundary(c.characterAfter())) {
545 RefPtr<Range> backwardsScanRange(d.createRange()); 546 RefPtrWillBeRawPtr<Range> backwardsScanRange(d.createRange());
546 backwardsScanRange->setEnd(start.deprecatedNode(), start.deprecatedEditi ngOffset(), IGNORE_EXCEPTION); 547 backwardsScanRange->setEnd(start.deprecatedNode(), start.deprecatedEditi ngOffset(), IGNORE_EXCEPTION);
547 SimplifiedBackwardsTextIterator backwardsIterator(backwardsScanRange.get ()); 548 SimplifiedBackwardsTextIterator backwardsIterator(backwardsScanRange.get ());
548 while (!backwardsIterator.atEnd()) { 549 while (!backwardsIterator.atEnd()) {
549 Vector<UChar, 1024> characters; 550 Vector<UChar, 1024> characters;
550 backwardsIterator.prependTextTo(characters); 551 backwardsIterator.prependTextTo(characters);
551 int length = characters.size(); 552 int length = characters.size();
552 int i = startOfLastWordBoundaryContext(characters.data(), length); 553 int i = startOfLastWordBoundaryContext(characters.data(), length);
553 string.prepend(characters.data() + i, length - i); 554 string.prepend(characters.data() + i, length - i);
554 prefixLength += length - i; 555 prefixLength += length - i;
555 if (i > 0) 556 if (i > 0)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 next = searchFunction(string.data(), string.size(), prefixLength, DontHa veMoreContext, needMoreContext); 588 next = searchFunction(string.data(), string.size(), prefixLength, DontHa veMoreContext, needMoreContext);
588 ASSERT(!needMoreContext); 589 ASSERT(!needMoreContext);
589 } 590 }
590 591
591 if (it.atEnd() && next == string.size()) { 592 if (it.atEnd() && next == string.size()) {
592 pos = it.range()->startPosition(); 593 pos = it.range()->startPosition();
593 } else if (next != invalidOffset && next != prefixLength) { 594 } else if (next != invalidOffset && next != prefixLength) {
594 // Use the character iterator to translate the next value into a DOM pos ition. 595 // Use the character iterator to translate the next value into a DOM pos ition.
595 CharacterIterator charIt(searchRange.get(), TextIteratorEmitsCharactersB etweenAllVisiblePositions); 596 CharacterIterator charIt(searchRange.get(), TextIteratorEmitsCharactersB etweenAllVisiblePositions);
596 charIt.advance(next - prefixLength - 1); 597 charIt.advance(next - prefixLength - 1);
597 RefPtr<Range> characterRange = charIt.range(); 598 RefPtrWillBeRawPtr<Range> characterRange = charIt.range();
598 pos = characterRange->endPosition(); 599 pos = characterRange->endPosition();
599 600
600 if (charIt.characterAt(0) == '\n') { 601 if (charIt.characterAt(0) == '\n') {
601 // FIXME: workaround for collapsed range (where only start position is correct) emitted for some emitted newlines (see rdar://5192593) 602 // FIXME: workaround for collapsed range (where only start position is correct) emitted for some emitted newlines (see rdar://5192593)
602 VisiblePosition visPos = VisiblePosition(pos); 603 VisiblePosition visPos = VisiblePosition(pos);
603 if (visPos == VisiblePosition(characterRange->startPosition())) { 604 if (visPos == VisiblePosition(characterRange->startPosition())) {
604 charIt.advance(1); 605 charIt.advance(1);
605 pos = charIt.range()->startPosition(); 606 pos = charIt.range()->startPosition();
606 } 607 }
607 } 608 }
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 { 1386 {
1386 return direction == LTR ? logicalStartOfLine(c) : logicalEndOfLine(c); 1387 return direction == LTR ? logicalStartOfLine(c) : logicalEndOfLine(c);
1387 } 1388 }
1388 1389
1389 VisiblePosition rightBoundaryOfLine(const VisiblePosition& c, TextDirection dire ction) 1390 VisiblePosition rightBoundaryOfLine(const VisiblePosition& c, TextDirection dire ction)
1390 { 1391 {
1391 return direction == LTR ? logicalEndOfLine(c) : logicalStartOfLine(c); 1392 return direction == LTR ? logicalEndOfLine(c) : logicalStartOfLine(c);
1392 } 1393 }
1393 1394
1394 } 1395 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698