[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

kocienda kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:43:14 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 565ee004e62466199f8214f9eaccd375f8da5a96
Author: kocienda <kocienda at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jun 2 14:30:49 2004 +0000

            Reviewed by Darin
    
            Probable fix for this bug:
    
            <rdar://problem/3668619>: "REGRESSION: text placed on pasteboard by WebKit is offset by one character"
    
            I could not reproduce the bug myself, which is why I call the fix
            as probable.
    
            Darin and I did some code inspection and found some problems
            with the equivalentUpstreamPosition and
            equivalentDownstreamPosition functions on DOM::Position and how
            these functions dealt with changing from editable to
            non-editable content. As a result of these discoveries, I went
            over this code and the helpers and functions which support them,
            and made some corrections and simplifications. The big changes
            are as follows:
    
            1. Rename EditIterator class to PositionIterator. This class needs
            to run code for selections in non-editable content, so the name
            change is appropriate.
    
            2. Change containingEditableBlock to containingBlock. It turns out
            that none of the editing code relies on the distinction between
            editable blocks and non-editable blocks. The important distinction
            is the block boundary. The notion of rootEditableBlock remains.
    
            * khtml/editing/htmlediting_impl.cpp:
            (khtml::DeleteCollapsibleWhitespaceCommandImpl::deleteWhitespace): PositionIterator name change.
            (khtml::DeleteSelectionCommandImpl::joinTextNodesWithSameStyle): Ditto.
            (khtml::DeleteSelectionCommandImpl::containsOnlyWhitespace): Ditto.
            (khtml::DeleteSelectionCommandImpl::doApply): Ditto.
            (khtml::InputNewlineCommandImpl::doApply): Ditto.
            (khtml::RemoveNodeAndPruneCommandImpl::doApply): Ditto.
            * khtml/rendering/bidi.cpp:
            (khtml::RenderBlock::layoutInlineChildren): Ditto.
            * khtml/xml/dom_edititerator.cpp:
            (DOM::PositionIterator::peekPrevious): Call for previousLeafNode instead of previousEditable.
            Editable check is not appropriate as this class is used for non-editable content.
            (DOM::PositionIterator::peekNext): Call nextLeafNode instead of nextEditable, as above.
            (DOM::PositionIterator::atStart): Call for previousLeafNode instead of previousEditable, as above.
            (DOM::PositionIterator::atEnd): Call nextLeafNode instead of nextEditable, as above.
            * khtml/xml/dom_edititerator.h:
            (DOM::PositionIterator::PositionIterator): PositionIterator name change. Remove unused and unneeded constructors.
            * khtml/xml/dom_nodeimpl.cpp:
            (NodeImpl::previousEditable): Simplify. Rely on previousLeafNode as a helper.
            (NodeImpl::nextEditable): Ditto, but rely on nextLeafNode.
            (NodeImpl::previousLeafNode): Remove tree-walking code. Rely on traversePreviousNode as a helper.
            (NodeImpl::nextLeafNode): Ditto, but rely on traverseNextNode.
            (NodeImpl::containingBlock): Renamed replacement for containingEditableBlock.
            (NodeImpl::inSameContainingEditableBlock): Call renamed containingBlock.
            * khtml/xml/dom_nodeimpl.h:
            * khtml/xml/dom_position.cpp:
            (DOM::Position::previousCharacterPosition): Various name changes, as described above.
            (DOM::Position::nextCharacterPosition): Ditto.
            (DOM::Position::previousWordPosition): Ditto.
            (DOM::Position::nextWordPosition): Ditto.
            (DOM::Position::previousLinePosition): Ditto.
            (DOM::Position::nextLinePosition): Ditto.
            (DOM::Position::equivalentUpstreamPosition): Remove bogus check for editable node in loop. Perform
            improved block-crossing check at start of loop which works for editable and non-editable content.
            This is the crux of the fix for the bug.
            (DOM::Position::equivalentDownstreamPosition): Ditto.
            (DOM::Position::inRenderedContent): Various name changes, as described above.
            (DOM::Position::rendersOnSameLine): Ditto.
            (DOM::Position::rendersInDifferentPosition): Ditto.
            (DOM::Position::isFirstRenderedPositionOnLine): Ditto.
            (DOM::Position::isLastRenderedPositionOnLine): Ditto.
            (DOM::Position::isLastRenderedPositionInEditableBlock): Ditto.
            (DOM::Position::inFirstEditableInRootEditableBlock): Ditto.
            (DOM::Position::inLastEditableInRootEditableBlock): Ditto.
            (DOM::Position::inFirstEditableInContainingEditableBlock): Ditto.
            (DOM::Position::inLastEditableInContainingEditableBlock): Ditto.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6743 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index a76b658..1a2800a 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,79 @@
+2004-06-02  Ken Kocienda  <kocienda at apple.com>
+
+        Reviewed by Darin
+
+        Probable fix for this bug:
+        
+        <rdar://problem/3668619>: "REGRESSION: text placed on pasteboard by WebKit is offset by one character"
+        
+        I could not reproduce the bug myself, which is why I call the fix
+        as probable.
+        
+        Darin and I did some code inspection and found some problems
+        with the equivalentUpstreamPosition and
+        equivalentDownstreamPosition functions on DOM::Position and how
+        these functions dealt with changing from editable to
+        non-editable content. As a result of these discoveries, I went
+        over this code and the helpers and functions which support them,
+        and made some corrections and simplifications. The big changes
+        are as follows:
+        
+        1. Rename EditIterator class to PositionIterator. This class needs
+        to run code for selections in non-editable content, so the name
+        change is appropriate.
+        
+        2. Change containingEditableBlock to containingBlock. It turns out
+        that none of the editing code relies on the distinction between
+        editable blocks and non-editable blocks. The important distinction
+        is the block boundary. The notion of rootEditableBlock remains.
+         
+        * khtml/editing/htmlediting_impl.cpp:
+        (khtml::DeleteCollapsibleWhitespaceCommandImpl::deleteWhitespace): PositionIterator name change.
+        (khtml::DeleteSelectionCommandImpl::joinTextNodesWithSameStyle): Ditto.
+        (khtml::DeleteSelectionCommandImpl::containsOnlyWhitespace): Ditto.
+        (khtml::DeleteSelectionCommandImpl::doApply): Ditto.
+        (khtml::InputNewlineCommandImpl::doApply): Ditto.
+        (khtml::RemoveNodeAndPruneCommandImpl::doApply): Ditto.
+        * khtml/rendering/bidi.cpp:
+        (khtml::RenderBlock::layoutInlineChildren): Ditto.
+        * khtml/xml/dom_edititerator.cpp:
+        (DOM::PositionIterator::peekPrevious): Call for previousLeafNode instead of previousEditable.
+        Editable check is not appropriate as this class is used for non-editable content.
+        (DOM::PositionIterator::peekNext): Call nextLeafNode instead of nextEditable, as above.
+        (DOM::PositionIterator::atStart): Call for previousLeafNode instead of previousEditable, as above.
+        (DOM::PositionIterator::atEnd): Call nextLeafNode instead of nextEditable, as above.
+        * khtml/xml/dom_edititerator.h:
+        (DOM::PositionIterator::PositionIterator): PositionIterator name change. Remove unused and unneeded constructors.
+        * khtml/xml/dom_nodeimpl.cpp:
+        (NodeImpl::previousEditable): Simplify. Rely on previousLeafNode as a helper.
+        (NodeImpl::nextEditable): Ditto, but rely on nextLeafNode.
+        (NodeImpl::previousLeafNode): Remove tree-walking code. Rely on traversePreviousNode as a helper.
+        (NodeImpl::nextLeafNode): Ditto, but rely on traverseNextNode.
+        (NodeImpl::containingBlock): Renamed replacement for containingEditableBlock.
+        (NodeImpl::inSameContainingEditableBlock): Call renamed containingBlock.
+        * khtml/xml/dom_nodeimpl.h:
+        * khtml/xml/dom_position.cpp:
+        (DOM::Position::previousCharacterPosition): Various name changes, as described above.
+        (DOM::Position::nextCharacterPosition): Ditto.
+        (DOM::Position::previousWordPosition): Ditto.
+        (DOM::Position::nextWordPosition): Ditto.
+        (DOM::Position::previousLinePosition): Ditto.
+        (DOM::Position::nextLinePosition): Ditto.
+        (DOM::Position::equivalentUpstreamPosition): Remove bogus check for editable node in loop. Perform
+        improved block-crossing check at start of loop which works for editable and non-editable content.
+        This is the crux of the fix for the bug.
+        (DOM::Position::equivalentDownstreamPosition): Ditto.
+        (DOM::Position::inRenderedContent): Various name changes, as described above.
+        (DOM::Position::rendersOnSameLine): Ditto.
+        (DOM::Position::rendersInDifferentPosition): Ditto.
+        (DOM::Position::isFirstRenderedPositionOnLine): Ditto.
+        (DOM::Position::isLastRenderedPositionOnLine): Ditto.
+        (DOM::Position::isLastRenderedPositionInEditableBlock): Ditto.
+        (DOM::Position::inFirstEditableInRootEditableBlock): Ditto.
+        (DOM::Position::inLastEditableInRootEditableBlock): Ditto.
+        (DOM::Position::inFirstEditableInContainingEditableBlock): Ditto.
+        (DOM::Position::inLastEditableInContainingEditableBlock): Ditto.
+
 2004-06-01  Richard Williamson   <rjw at apple.com>
 
         Fixed deployment build warning.
diff --git a/WebCore/khtml/editing/htmlediting_impl.cpp b/WebCore/khtml/editing/htmlediting_impl.cpp
index b5dbb7e..1ebb1eb 100644
--- a/WebCore/khtml/editing/htmlediting_impl.cpp
+++ b/WebCore/khtml/editing/htmlediting_impl.cpp
@@ -65,7 +65,7 @@ using DOM::DocumentImpl;
 using DOM::DOMString;
 using DOM::DOMStringImpl;
 using DOM::EditingTextImpl;
-using DOM::EditIterator;
+using DOM::PositionIterator;
 using DOM::ElementImpl;
 using DOM::HTMLElementImpl;
 using DOM::HTMLImageElementImpl;
@@ -1159,7 +1159,7 @@ Position DeleteCollapsibleWhitespaceCommandImpl::deleteWhitespace(const Position
     }
     else {
         LOG(Editing, "upstream:   %s %s [%p:%d]\n", del ? "DELETE" : "SKIP", getTagName(upstream.node()->id()).string().latin1(), upstream.node(), upstream.offset());
-        EditIterator it(upstream);
+        PositionIterator it(upstream);
         for (it.next(); it.current() != downstream; it.next()) {
             if (it.current().node()->isTextNode() && (long)static_cast<TextImpl *>(it.current().node())->length() == it.current().offset())
                 LOG(Editing, "   node:    AT END %s [%p:%d]\n", getTagName(it.current().node()->id()).string().latin1(), it.current().node(), it.current().offset());
@@ -1172,7 +1172,7 @@ Position DeleteCollapsibleWhitespaceCommandImpl::deleteWhitespace(const Position
     if (upstream == downstream)
         return upstream;
         
-    EditIterator it(upstream);
+    PositionIterator it(upstream);
     Position deleteStart = upstream;
     if (!del) {
         deleteStart = it.peekNext();
@@ -1288,7 +1288,7 @@ void DeleteSelectionCommandImpl::joinTextNodesWithSameStyle()
     TextImpl *textNode = static_cast<TextImpl *>(pos.node());
     
     if (pos.offset() == 0) {
-        EditIterator it(pos);
+        PositionIterator it(pos);
         Position prev = it.previous();
         if (prev == pos)
             return;
@@ -1302,7 +1302,7 @@ void DeleteSelectionCommandImpl::joinTextNodesWithSameStyle()
         }
     }
     else if (pos.offset() == (long)textNode->length()) {
-        EditIterator it(pos);
+        PositionIterator it(pos);
         Position next = it.next();
         if (next == pos)
             return;
@@ -1321,7 +1321,7 @@ bool DeleteSelectionCommandImpl::containsOnlyWhitespace(const Position &start, c
 {
     // Returns whether the range contains only whitespace characters.
     // This is inclusive of the start, but not of the end.
-    EditIterator it(start);
+    PositionIterator it(start);
     while (!it.atEnd()) {
         if (!it.current().node()->isTextNode())
             return false;
@@ -1395,7 +1395,7 @@ void DeleteSelectionCommandImpl::doApply()
     // Start is not completely selected
     if (startAtStartOfBlock) {
         LOG(Editing,  "ending position case 1");
-        endingPosition = Position(downstreamStart.node()->containingEditableBlock(), 1);
+        endingPosition = Position(downstreamStart.node()->containingBlock(), 1);
         adjustEndingPositionDownstream = true;
     }
     else if (!startCompletelySelected) {
@@ -1602,7 +1602,7 @@ void InputNewlineCommandImpl::doApply()
     
     if (atEndOfBlock) {
         LOG(Editing, "input newline case 1");
-        NodeImpl *cb = pos.node()->containingEditableBlock();
+        NodeImpl *cb = pos.node()->containingBlock();
         appendNode(cb, breakNode);
         
         // Insert an "extra" BR at the end of the block. This makes the "real" BR we want
@@ -2271,12 +2271,12 @@ int RemoveNodeAndPruneCommandImpl::commandID() const
 
 void RemoveNodeAndPruneCommandImpl::doApply()
 {
-    NodeImpl *editableBlock = m_removeChild->containingEditableBlock();
+    NodeImpl *editableBlock = m_removeChild->containingBlock();
     NodeImpl *pruneNode = m_removeChild;
     NodeImpl *node = pruneNode->traversePreviousNode();
     removeNode(pruneNode);
     while (1) {
-        if (editableBlock != node->containingEditableBlock() || !shouldPruneNode(node))
+        if (editableBlock != node->containingBlock() || !shouldPruneNode(node))
             break;
         pruneNode = node;
         node = node->traversePreviousNode();
diff --git a/WebCore/khtml/rendering/bidi.cpp b/WebCore/khtml/rendering/bidi.cpp
index d5490cb..9cc4f6f 100644
--- a/WebCore/khtml/rendering/bidi.cpp
+++ b/WebCore/khtml/rendering/bidi.cpp
@@ -1554,7 +1554,7 @@ QRect RenderBlock::layoutInlineChildren(bool relayoutChildren)
     
     setLinesAppended(false);
     
-    if (!firstLineBox() && element() && element()->containingEditableBlock() == element()) {
+    if (!firstLineBox() && element() && element()->containingBlock() == element()) {
         m_height += lineHeight(true);
     }
     
diff --git a/WebCore/khtml/xml/dom_edititerator.cpp b/WebCore/khtml/xml/dom_edititerator.cpp
index 1caed18..87d4698 100644
--- a/WebCore/khtml/xml/dom_edititerator.cpp
+++ b/WebCore/khtml/xml/dom_edititerator.cpp
@@ -29,7 +29,7 @@
 
 namespace DOM {
 
-Position EditIterator::peekPrevious() const
+Position PositionIterator::peekPrevious() const
 {
     Position pos = m_current;
     
@@ -37,7 +37,7 @@ Position EditIterator::peekPrevious() const
         return pos;
     
     if (pos.offset() <= 0) {
-        NodeImpl *prevNode = pos.node()->previousEditable();
+        NodeImpl *prevNode = pos.node()->previousLeafNode();
         if (prevNode)
             pos = Position(prevNode, prevNode->maxOffset());
     }
@@ -48,7 +48,7 @@ Position EditIterator::peekPrevious() const
     return pos;
 }
 
-Position EditIterator::peekNext() const
+Position PositionIterator::peekNext() const
 {
     Position pos = m_current;
     
@@ -56,7 +56,7 @@ Position EditIterator::peekNext() const
         return pos;
     
     if (pos.offset() >= pos.node()->maxOffset()) {
-        NodeImpl *nextNode = pos.node()->nextEditable();
+        NodeImpl *nextNode = pos.node()->nextLeafNode();
         if (nextNode)
             pos = Position(nextNode, 0);
     }
@@ -67,22 +67,22 @@ Position EditIterator::peekNext() const
     return pos;
 }
 
-bool EditIterator::atStart() const
+bool PositionIterator::atStart() const
 {
     if (m_current.isEmpty())
         return true;
 
     return m_current.offset() == 0 && 
-        m_current.node()->previousEditable() == 0;
+        m_current.node()->previousLeafNode() == 0;
 }
 
-bool EditIterator::atEnd() const
+bool PositionIterator::atEnd() const
 {
     if (m_current.isEmpty())
         return true;
 
     return m_current.offset() == m_current.node()->maxOffset() && 
-        m_current.node()->nextEditable() == 0;
+        m_current.node()->nextLeafNode() == 0;
 }
 
 } // namespace DOM
diff --git a/WebCore/khtml/xml/dom_edititerator.h b/WebCore/khtml/xml/dom_edititerator.h
index 8e4aa0f..6650754 100644
--- a/WebCore/khtml/xml/dom_edititerator.h
+++ b/WebCore/khtml/xml/dom_edititerator.h
@@ -23,8 +23,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef _EditIterator_h_
-#define _EditIterator_h_
+#ifndef _PositionIterator_h_
+#define _PositionIterator_h_
 
 #include "dom_position.h"
 
@@ -33,12 +33,12 @@ namespace DOM {
 class NodeImpl;
 class Position;
 
-class EditIterator
+class PositionIterator
 {
 public:
-    EditIterator() : m_current() {}
-    EditIterator(NodeImpl *node, long offset) : m_current(node, offset) {}
-    EditIterator(const Position &o) : m_current(o) {}
+    PositionIterator() : m_current() {}
+    PositionIterator(NodeImpl *node, long offset) : m_current(node, offset) {}
+    PositionIterator(const Position &o) : m_current(o) {}
 
     Position current() const { return m_current; }
     Position previous() { return m_current = peekPrevious(); }
@@ -58,4 +58,4 @@ private:
 
 } // namespace DOM
 
-#endif // _EditIterator_h_
+#endif // _PositionIterator_h_
diff --git a/WebCore/khtml/xml/dom_nodeimpl.cpp b/WebCore/khtml/xml/dom_nodeimpl.cpp
index 1c81cf6..bfaee0a 100644
--- a/WebCore/khtml/xml/dom_nodeimpl.cpp
+++ b/WebCore/khtml/xml/dom_nodeimpl.cpp
@@ -1178,26 +1178,22 @@ bool NodeImpl::isReadOnly()
 
 NodeImpl *NodeImpl::previousEditable() const
 {
-    NodeImpl *node = traversePreviousNode();
+    NodeImpl *node = previousLeafNode();
     while (node) {
-        if (!node->isContentEditable())
-            return 0;
-        if (node->hasChildNodes() == false)
+        if (node->isContentEditable())
             return node;
-        node = node->traversePreviousNode();
+        node = node->previousLeafNode();
     }
     return 0;
 }
 
 NodeImpl *NodeImpl::nextEditable() const
 {
-    NodeImpl *node = traverseNextNode();
+    NodeImpl *node = nextLeafNode();
     while (node) {
-        if (!node->isContentEditable())
-            return 0;
-        if (node->hasChildNodes() == false)
+        if (node->isContentEditable())
             return node;
-        node = node->traverseNextNode();
+        node = node->nextLeafNode();
     }
     return 0;
 }
@@ -1222,82 +1218,29 @@ RenderObject * NodeImpl::nextRenderer()
 
 NodeImpl *NodeImpl::previousLeafNode() const
 {
-    const NodeImpl *r = this;
-    const NodeImpl *n = lastChild();
-    if (n) {
-        while (n) { 
-            r = n; 
-            n = n->lastChild(); 
-        }
-        return const_cast<NodeImpl *>(r);
-    }
-    n = r->previousSibling();
-    if (n) {
-        r = n;
-        while (n) { 
-            r = n; 
-            n = n->lastChild(); 
-        }
-        return const_cast<NodeImpl *>(r);
-    }    
-    n = r->parentNode();
-    while (n) {
-        r = n;
-        n = r->previousSibling();
-        if (n) {
-            r = n;
-            n = r->lastChild();
-            while (n) { 
-                r = n; 
-                n = n->lastChild(); 
-            }
-            return const_cast<NodeImpl *>(r);
-        }
-        n = r->parentNode();
+    NodeImpl *node = traversePreviousNode();
+    while (node) {
+        if (!node->hasChildNodes())
+            return node;
+        node = node->traversePreviousNode();
     }
     return 0;
 }
 
 NodeImpl *NodeImpl::nextLeafNode() const
 {
-    const NodeImpl *r = this;
-    const NodeImpl *n = firstChild();
-    if (n) {
-        while (n) { 
-            r = n; 
-            n = n->firstChild(); 
-        }
-        return const_cast<NodeImpl *>(r);
-    }
-    n = r->nextSibling();
-    if (n) {
-        r = n;
-        while (n) { 
-            r = n; 
-            n = n->firstChild(); 
-        }
-        return const_cast<NodeImpl *>(r);
-    }
-    n = r->parentNode();
-    while (n) {
-        r = n;
-        n = r->nextSibling();
-        if (n) {
-            r = n;
-            n = r->firstChild();
-            while (n) { 
-                r = n; 
-                n = n->firstChild(); 
-            }
-            return const_cast<NodeImpl *>(r);
-        }
-        n = r->parentNode();
+    NodeImpl *node = traverseNextNode();
+    while (node) {
+        if (!node->hasChildNodes())
+            return node;
+        node = node->traverseNextNode();
     }
     return 0;
 }
 
 void NodeImpl::createRendererIfNeeded()
 {
+
 #if APPLE_CHANGES
     if (!getDocument()->shouldCreateRenderers())
         return;
@@ -1378,18 +1321,15 @@ bool NodeImpl::isEditableBlock() const
     return isContentEditable() && isBlockFlow();
 }
 
-NodeImpl *NodeImpl::containingEditableBlock() const
+NodeImpl *NodeImpl::containingBlock() const
 {
-    if (!isContentEditable())
-        return 0;
-
     NodeImpl *n = const_cast<NodeImpl *>(this);
-    if (isEditableBlock())
+    if (isBlockFlow())
         return n;
 
     while (1) {
         n = n->parentNode();
-        if (!n || !n->isContentEditable())
+        if (!n)
             break;
         if (n->isBlockFlow() || n->id() == ID_BODY)
             return n;
@@ -1425,7 +1365,7 @@ bool NodeImpl::inSameRootEditableBlock(NodeImpl *n)
 
 bool NodeImpl::inSameContainingEditableBlock(NodeImpl *n)
 {
-    return n ? containingEditableBlock() == n->containingEditableBlock() : false;
+    return n ? containingBlock() == n->containingBlock() : false;
 }
 
 #if APPLE_CHANGES
diff --git a/WebCore/khtml/xml/dom_nodeimpl.h b/WebCore/khtml/xml/dom_nodeimpl.h
index 80c27d1..4e9fd45 100644
--- a/WebCore/khtml/xml/dom_nodeimpl.h
+++ b/WebCore/khtml/xml/dom_nodeimpl.h
@@ -162,7 +162,7 @@ public:
     NodeImpl *previousLeafNode() const;
 
     bool isEditableBlock() const;
-    NodeImpl *containingEditableBlock() const;
+    NodeImpl *containingBlock() const;
     NodeImpl *rootEditableBlock() const;
     
     bool inSameRootEditableBlock(NodeImpl *);
diff --git a/WebCore/khtml/xml/dom_position.cpp b/WebCore/khtml/xml/dom_position.cpp
index 4d1d083..059bd2b 100644
--- a/WebCore/khtml/xml/dom_position.cpp
+++ b/WebCore/khtml/xml/dom_position.cpp
@@ -234,7 +234,7 @@ Position Position::previousCharacterPosition() const
         return Position();
 
     NodeImpl *fromRootEditableBlock = node()->rootEditableBlock();
-    EditIterator it(*this);
+    PositionIterator it(*this);
 
     bool atStartOfLine = isFirstRenderedPositionOnLine();
     
@@ -261,7 +261,7 @@ Position Position::nextCharacterPosition() const
         return Position();
 
     NodeImpl *fromRootEditableBlock = node()->rootEditableBlock();
-    EditIterator it(*this);
+    PositionIterator it(*this);
 
     bool atEndOfLine = isLastRenderedPositionOnLine();
     
@@ -288,7 +288,7 @@ Position Position::previousWordPosition() const
         return Position();
 
     Position pos = *this;
-    for (EditIterator it(*this); !it.atStart(); it.previous()) {
+    for (PositionIterator it(*this); !it.atStart(); it.previous()) {
         if (it.current().node()->nodeType() == Node::TEXT_NODE || it.current().node()->nodeType() == Node::CDATA_SECTION_NODE) {
             DOMString t = it.current().node()->nodeValue();
             QChar *chars = t.unicode();
@@ -314,7 +314,7 @@ Position Position::nextWordPosition() const
         return Position();
 
     Position pos = *this;
-    for (EditIterator it(*this); !it.atEnd(); it.next()) {
+    for (PositionIterator it(*this); !it.atEnd(); it.next()) {
         if (it.current().node()->nodeType() == Node::TEXT_NODE || it.current().node()->nodeType() == Node::CDATA_SECTION_NODE) {
             DOMString t = it.current().node()->nodeValue();
             QChar *chars = t.unicode();
@@ -355,9 +355,9 @@ Position Position::previousLinePosition(int x) const
         // This containing editable block does not have a previous line.
         // Need to move back to previous containing editable block in this root editable
         // block and find the last root line box in that block.
-        NodeImpl *startBlock = node()->containingEditableBlock();
+        NodeImpl *startBlock = node()->containingBlock();
         NodeImpl *n = node()->previousEditable();
-        while (n && startBlock == n->containingEditableBlock())
+        while (n && startBlock == n->containingBlock())
             n = n->previousEditable();
         if (n) {
             while (n && !Position(n, n->caretMaxOffset()).inRenderedContent())
@@ -404,9 +404,9 @@ Position Position::nextLinePosition(int x) const
         // This containing editable block does not have a next line.
         // Need to move forward to next containing editable block in this root editable
         // block and find the first root line box in that block.
-        NodeImpl *startBlock = node()->containingEditableBlock();
+        NodeImpl *startBlock = node()->containingBlock();
         NodeImpl *n = node()->nextEditable();
-        while (n && startBlock == n->containingEditableBlock())
+        while (n && startBlock == n->containingBlock())
             n = n->nextEditable();
         if (n) {
             while (n && !Position(n, n->caretMinOffset()).inRenderedContent())
@@ -437,16 +437,14 @@ Position Position::equivalentUpstreamPosition() const
     if (!node())
         return Position();
 
-    NodeImpl *block = node()->containingEditableBlock();
+    NodeImpl *block = node()->containingBlock();
     
-    EditIterator it(*this);            
+    PositionIterator it(*this);            
     for (; !it.atStart(); it.previous()) {   
-        if (block != it.current().node()->containingEditableBlock())
+        NodeImpl *currentBlock = it.current().node()->containingBlock();
+        if (block != currentBlock)
             return it.next();
 
-        if (!node()->isContentEditable())
-            return it.next();
-            
         RenderObject *renderer = it.current().node()->renderer();
         if (!renderer)
             continue;
@@ -485,16 +483,14 @@ Position Position::equivalentDownstreamPosition() const
     if (!node())
         return Position();
 
-    NodeImpl *block = node()->containingEditableBlock();
+    NodeImpl *block = node()->containingBlock();
     
-    EditIterator it(*this);            
+    PositionIterator it(*this);            
     for (; !it.atEnd(); it.next()) {   
-        if (block != it.current().node()->containingEditableBlock())
+        NodeImpl *currentBlock = it.current().node()->containingBlock();
+        if (block != currentBlock)
             return it.previous();
 
-        if (!node()->isContentEditable())
-            return it.next();
-            
         RenderObject *renderer = it.current().node()->renderer();
         if (!renderer)
             continue;
@@ -603,7 +599,7 @@ bool Position::inRenderedContent() const
     }
     else if (offset() >= renderer->caretMinOffset() && offset() <= renderer->caretMaxOffset()) {
         // don't return containing editable blocks unless they are empty
-        if (node()->containingEditableBlock() == node() && node()->firstChild())
+        if (node()->containingBlock() == node() && node()->firstChild())
             return false;
         return true;
     }
@@ -643,7 +639,7 @@ bool Position::rendersOnSameLine(const Position &pos) const
     if (node() == pos.node() && offset() == pos.offset())
         return true;
 
-    if (node()->containingEditableBlock() != pos.node()->containingEditableBlock())
+    if (node()->containingBlock() != pos.node()->containingBlock())
         return false;
 
     RenderObject *renderer = node()->renderer();
@@ -697,7 +693,7 @@ bool Position::rendersInDifferentPosition(const Position &pos) const
     if (pos.node()->id() == ID_BR && inRenderedContent())
         return true;
                 
-    if (node()->containingEditableBlock() != pos.node()->containingEditableBlock())
+    if (node()->containingBlock() != pos.node()->containingBlock())
         return true;
 
     if (node()->isTextNode() && !inRenderedText())
@@ -758,7 +754,7 @@ bool Position::isFirstRenderedPositionOnLine() const
         return false;
     
     Position pos(node(), offset());
-    EditIterator it(pos);
+    PositionIterator it(pos);
     while (!it.atStart()) {
         it.previous();
         if (it.current().inRenderedContent())
@@ -784,7 +780,7 @@ bool Position::isLastRenderedPositionOnLine() const
         return true;
     
     Position pos(node(), offset());
-    EditIterator it(pos);
+    PositionIterator it(pos);
     while (!it.atEnd()) {
         it.next();
         if (it.current().inRenderedContent())
@@ -810,7 +806,7 @@ bool Position::isLastRenderedPositionInEditableBlock() const
         return false;
 
     Position pos(node(), offset());
-    EditIterator it(pos);
+    PositionIterator it(pos);
     while (!it.atEnd()) {
         it.next();
         if (!it.current().node()->inSameContainingEditableBlock(node()))
@@ -826,7 +822,7 @@ bool Position::inFirstEditableInRootEditableBlock() const
     if (isEmpty() || !inRenderedContent())
         return false;
 
-    EditIterator it(node(), offset());
+    PositionIterator it(*this);
     while (!it.atStart()) {
         if (it.previous().inRenderedContent())
             return false;
@@ -840,7 +836,7 @@ bool Position::inLastEditableInRootEditableBlock() const
     if (isEmpty() || !inRenderedContent())
         return false;
 
-    EditIterator it(node(), offset());
+    PositionIterator it(*this);
     while (!it.atEnd()) {
         if (it.next().inRenderedContent())
             return false;
@@ -854,14 +850,14 @@ bool Position::inFirstEditableInContainingEditableBlock() const
     if (isEmpty() || !inRenderedContent())
         return false;
     
-    NodeImpl *block = node()->containingEditableBlock();
+    NodeImpl *block = node()->containingBlock();
 
-    EditIterator it(node(), offset());
+    PositionIterator it(*this);
     while (!it.atStart()) {
         it.previous();
         if (!it.current().inRenderedContent())
             continue;
-        return block != it.current().node()->containingEditableBlock();
+        return block != it.current().node()->containingBlock();
     }
 
     return true;
@@ -872,14 +868,14 @@ bool Position::inLastEditableInContainingEditableBlock() const
     if (isEmpty() || !inRenderedContent())
         return false;
     
-    NodeImpl *block = node()->containingEditableBlock();
+    NodeImpl *block = node()->containingBlock();
 
-    EditIterator it(node(), offset());
+    PositionIterator it(*this);
     while (!it.atEnd()) {
         it.next();
         if (!it.current().inRenderedContent())
             continue;
-        return block != it.current().node()->containingEditableBlock();
+        return block != it.current().node()->containingBlock();
     }
 
     return true;
diff --git a/WebCore/khtml/xml/dom_positioniterator.cpp b/WebCore/khtml/xml/dom_positioniterator.cpp
index 1caed18..87d4698 100644
--- a/WebCore/khtml/xml/dom_positioniterator.cpp
+++ b/WebCore/khtml/xml/dom_positioniterator.cpp
@@ -29,7 +29,7 @@
 
 namespace DOM {
 
-Position EditIterator::peekPrevious() const
+Position PositionIterator::peekPrevious() const
 {
     Position pos = m_current;
     
@@ -37,7 +37,7 @@ Position EditIterator::peekPrevious() const
         return pos;
     
     if (pos.offset() <= 0) {
-        NodeImpl *prevNode = pos.node()->previousEditable();
+        NodeImpl *prevNode = pos.node()->previousLeafNode();
         if (prevNode)
             pos = Position(prevNode, prevNode->maxOffset());
     }
@@ -48,7 +48,7 @@ Position EditIterator::peekPrevious() const
     return pos;
 }
 
-Position EditIterator::peekNext() const
+Position PositionIterator::peekNext() const
 {
     Position pos = m_current;
     
@@ -56,7 +56,7 @@ Position EditIterator::peekNext() const
         return pos;
     
     if (pos.offset() >= pos.node()->maxOffset()) {
-        NodeImpl *nextNode = pos.node()->nextEditable();
+        NodeImpl *nextNode = pos.node()->nextLeafNode();
         if (nextNode)
             pos = Position(nextNode, 0);
     }
@@ -67,22 +67,22 @@ Position EditIterator::peekNext() const
     return pos;
 }
 
-bool EditIterator::atStart() const
+bool PositionIterator::atStart() const
 {
     if (m_current.isEmpty())
         return true;
 
     return m_current.offset() == 0 && 
-        m_current.node()->previousEditable() == 0;
+        m_current.node()->previousLeafNode() == 0;
 }
 
-bool EditIterator::atEnd() const
+bool PositionIterator::atEnd() const
 {
     if (m_current.isEmpty())
         return true;
 
     return m_current.offset() == m_current.node()->maxOffset() && 
-        m_current.node()->nextEditable() == 0;
+        m_current.node()->nextLeafNode() == 0;
 }
 
 } // namespace DOM
diff --git a/WebCore/khtml/xml/dom_positioniterator.h b/WebCore/khtml/xml/dom_positioniterator.h
index 8e4aa0f..6650754 100644
--- a/WebCore/khtml/xml/dom_positioniterator.h
+++ b/WebCore/khtml/xml/dom_positioniterator.h
@@ -23,8 +23,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef _EditIterator_h_
-#define _EditIterator_h_
+#ifndef _PositionIterator_h_
+#define _PositionIterator_h_
 
 #include "dom_position.h"
 
@@ -33,12 +33,12 @@ namespace DOM {
 class NodeImpl;
 class Position;
 
-class EditIterator
+class PositionIterator
 {
 public:
-    EditIterator() : m_current() {}
-    EditIterator(NodeImpl *node, long offset) : m_current(node, offset) {}
-    EditIterator(const Position &o) : m_current(o) {}
+    PositionIterator() : m_current() {}
+    PositionIterator(NodeImpl *node, long offset) : m_current(node, offset) {}
+    PositionIterator(const Position &o) : m_current(o) {}
 
     Position current() const { return m_current; }
     Position previous() { return m_current = peekPrevious(); }
@@ -58,4 +58,4 @@ private:
 
 } // namespace DOM
 
-#endif // _EditIterator_h_
+#endif // _PositionIterator_h_

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list