diff options
author | Ben Murdoch <benm@google.com> | 2010-08-13 05:20:16 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-08-13 05:20:16 -0700 |
commit | f4958a7d95cd5fbc1c74905e229b02c95cd5ee78 (patch) | |
tree | 14a0f1b07a19948c2ed93d0d8547caa7fe10aa0e /WebCore/editing/visible_units.cpp | |
parent | d074a7997da8ce379434eb6e208b97cde8a0841c (diff) | |
parent | f964bc1fd59a545a80a0cc2529ad8830be514871 (diff) | |
download | external_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.zip external_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.tar.gz external_webkit-f4958a7d95cd5fbc1c74905e229b02c95cd5ee78.tar.bz2 |
Merge changes I60a96064,I6929172f,Idefd9bec,I8cf448f2,I8791737a,I992c56b0,Ibb4b089d,I779a8ec0,Ife412e30,I2da1ae98,Ibcf41849
* changes:
Merge WebKit at r65072 : Update WebKit revision number.
Merge WebKit at r65072 : Update test_expectations.
Merge WebKit at r65072 : Complete cherry-pick of WebKit change 43848 to add EmptyDeviceMotionClient
Merge WebKit at r65072 : Implement DeviceMotionClientAndroid
Merge WebKit at r65072: JSC build fix in InspectorController.h
Merge WebKit at r65072: Fix V8 code generator.
Merge WebKit at r65072 : Build fix for JSC, update ambiguous usage of JSLock.
Merge WebKit at r65072: String class has moved to the WTF namespace.
Merge Webkit at r65072 : Fix conflicts.
Merge Webkit at r65072 : Fix Makefiles.
Merge WebKit at r65072 : Initial merge by git.
Diffstat (limited to 'WebCore/editing/visible_units.cpp')
-rw-r--r-- | WebCore/editing/visible_units.cpp | 32 |
1 files changed, 7 insertions, 25 deletions
diff --git a/WebCore/editing/visible_units.cpp b/WebCore/editing/visible_units.cpp index dd48406..f84fec0 100644 --- a/WebCore/editing/visible_units.cpp +++ b/WebCore/editing/visible_units.cpp @@ -75,20 +75,11 @@ typedef unsigned (*BoundarySearchFunction)(const UChar*, unsigned length, unsign static VisiblePosition previousBoundary(const VisiblePosition& c, BoundarySearchFunction searchFunction) { Position pos = c.deepEquivalent(); - Node *n = pos.node(); - if (!n) - return VisiblePosition(); - Document *d = n->document(); - Node *de = d->documentElement(); - if (!de) - return VisiblePosition(); - Node *boundary = n->enclosingBlockFlowElement(); + Node* boundary = pos.parentEditingBoundary(); if (!boundary) return VisiblePosition(); - bool isContentEditable = boundary->isContentEditable(); - while (boundary && boundary != de && boundary->parentNode() && isContentEditable == boundary->parentNode()->isContentEditable()) - boundary = boundary->parentNode(); + Document* d = boundary->document(); Position start = rangeCompliantEquivalent(Position(boundary, 0)); Position end = rangeCompliantEquivalent(pos); RefPtr<Range> searchRange = Range::create(d); @@ -121,7 +112,7 @@ static VisiblePosition previousBoundary(const VisiblePosition& c, BoundarySearch if (ec) return VisiblePosition(); - SimplifiedBackwardsTextIterator it(searchRange.get()); + SimplifiedBackwardsTextIterator it(searchRange.get(), TextIteratorEndsAtEditingBoundary); unsigned next = 0; bool inTextSecurityMode = start.node() && start.node()->renderer() && start.node()->renderer()->style()->textSecurity() != TSNONE; bool needMoreContext = false; @@ -156,7 +147,7 @@ static VisiblePosition previousBoundary(const VisiblePosition& c, BoundarySearch pos = Position(node, next); else { // Use the character iterator to translate the next value into a DOM position. - BackwardsCharacterIterator charIt(searchRange.get()); + BackwardsCharacterIterator charIt(searchRange.get(), TextIteratorEndsAtEditingBoundary); charIt.advance(string.size() - suffixLength - next); pos = charIt.range()->endPosition(); } @@ -168,20 +159,11 @@ static VisiblePosition previousBoundary(const VisiblePosition& c, BoundarySearch static VisiblePosition nextBoundary(const VisiblePosition& c, BoundarySearchFunction searchFunction) { Position pos = c.deepEquivalent(); - Node *n = pos.node(); - if (!n) - return VisiblePosition(); - Document *d = n->document(); - Node *de = d->documentElement(); - if (!de) - return VisiblePosition(); - Node *boundary = n->enclosingBlockFlowElement(); + Node* boundary = pos.parentEditingBoundary(); if (!boundary) return VisiblePosition(); - bool isContentEditable = boundary->isContentEditable(); - while (boundary && boundary != de && boundary->parentNode() && isContentEditable == boundary->parentNode()->isContentEditable()) - boundary = boundary->parentNode(); + Document* d = boundary->document(); RefPtr<Range> searchRange(d->createRange()); Position start(rangeCompliantEquivalent(pos)); @@ -1019,7 +1001,7 @@ VisiblePosition startOfDocument(const VisiblePosition &c) VisiblePosition endOfDocument(const Node* node) { - if (!node || !node->document()) + if (!node || !node->document() || !node->document()->documentElement()) return VisiblePosition(); Element* doc = node->document()->documentElement(); |