Title: [150879] trunk/Source/WebCore
Revision
150879
Author
[email protected]
Date
2013-05-29 01:57:42 -0700 (Wed, 29 May 2013)

Log Message

Move leaf Node traversal helpers to htmlediting.cpp
<http://webkit.org/b/116940>

Reviewed by Antti Koivisto.

Move Node::previousLeafNode() and Node::nextLeafNode() to htmlediting.cpp along with their helpers.
Fixes an 8-year old FIXME. \o/

* dom/Node.h:
* dom/Node.cpp:
* dom/Position.cpp:
(WebCore::nextRenderedEditable):
(WebCore::previousRenderedEditable):
* editing/VisibleUnits.cpp:
(WebCore::previousLeafWithSameEditability):
(WebCore::nextLeafWithSameEditability):
* editing/htmlediting.h:
* editing/htmlediting.cpp:
(WebCore::previousNodeConsideringAtomicNodes):
(WebCore::nextNodeConsideringAtomicNodes):
(WebCore::previousLeafNode):
(WebCore::nextLeafNode):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (150878 => 150879)


--- trunk/Source/WebCore/ChangeLog	2013-05-29 08:56:07 UTC (rev 150878)
+++ trunk/Source/WebCore/ChangeLog	2013-05-29 08:57:42 UTC (rev 150879)
@@ -1,3 +1,28 @@
+2013-05-29  Andreas Kling  <[email protected]>
+
+        Move leaf Node traversal helpers to htmlediting.cpp
+        <http://webkit.org/b/116940>
+
+        Reviewed by Antti Koivisto.
+
+        Move Node::previousLeafNode() and Node::nextLeafNode() to htmlediting.cpp along with their helpers.
+        Fixes an 8-year old FIXME. \o/
+
+        * dom/Node.h:
+        * dom/Node.cpp:
+        * dom/Position.cpp:
+        (WebCore::nextRenderedEditable):
+        (WebCore::previousRenderedEditable):
+        * editing/VisibleUnits.cpp:
+        (WebCore::previousLeafWithSameEditability):
+        (WebCore::nextLeafWithSameEditability):
+        * editing/htmlediting.h:
+        * editing/htmlediting.cpp:
+        (WebCore::previousNodeConsideringAtomicNodes):
+        (WebCore::nextNodeConsideringAtomicNodes):
+        (WebCore::previousLeafNode):
+        (WebCore::nextLeafNode):
+
 2013-05-29  Peter Gal  <[email protected]>
 
         [Qt] Missing files from build after r150853

Modified: trunk/Source/WebCore/dom/Node.cpp (150878 => 150879)


--- trunk/Source/WebCore/dom/Node.cpp	2013-05-29 08:56:07 UTC (rev 150878)
+++ trunk/Source/WebCore/dom/Node.cpp	2013-05-29 08:57:42 UTC (rev 150879)
@@ -1090,59 +1090,6 @@
     return lastChild();
 }
 
-// FIXME: This code is used by editing.  Seems like it could move over there and not pollute Node.
-Node *Node::previousNodeConsideringAtomicNodes() const
-{
-    if (previousSibling()) {
-        Node *n = previousSibling();
-        while (!isAtomicNode(n) && n->lastChild())
-            n = n->lastChild();
-        return n;
-    }
-    else if (parentNode()) {
-        return parentNode();
-    }
-    else {
-        return 0;
-    }
-}
-
-Node *Node::nextNodeConsideringAtomicNodes() const
-{
-    if (!isAtomicNode(this) && firstChild())
-        return firstChild();
-    if (nextSibling())
-        return nextSibling();
-    const Node *n = this;
-    while (n && !n->nextSibling())
-        n = n->parentNode();
-    if (n)
-        return n->nextSibling();
-    return 0;
-}
-
-Node *Node::previousLeafNode() const
-{
-    Node *node = previousNodeConsideringAtomicNodes();
-    while (node) {
-        if (isAtomicNode(node))
-            return node;
-        node = node->previousNodeConsideringAtomicNodes();
-    }
-    return 0;
-}
-
-Node *Node::nextLeafNode() const
-{
-    Node *node = nextNodeConsideringAtomicNodes();
-    while (node) {
-        if (isAtomicNode(node))
-            return node;
-        node = node->nextNodeConsideringAtomicNodes();
-    }
-    return 0;
-}
-
 ContainerNode* Node::parentNodeForRenderingAndStyle()
 {
     return NodeRenderingContext(this).parentNodeForRenderingAndStyle();

Modified: trunk/Source/WebCore/dom/Node.h (150878 => 150879)


--- trunk/Source/WebCore/dom/Node.h	2013-05-29 08:56:07 UTC (rev 150878)
+++ trunk/Source/WebCore/dom/Node.h	2013-05-29 08:57:42 UTC (rev 150879)
@@ -309,22 +309,6 @@
 
     virtual bool canContainRangeEndPoint() const { return false; }
 
-    // FIXME: These two functions belong in editing -- "atomic node" is an editing concept.
-    Node* previousNodeConsideringAtomicNodes() const;
-    Node* nextNodeConsideringAtomicNodes() const;
-    
-    // Returns the next leaf node or 0 if there are no more.
-    // Delivers leaf nodes as if the whole DOM tree were a linear chain of its leaf nodes.
-    // Uses an editing-specific concept of what a leaf node is, and should probably be moved
-    // out of the Node class into an editing-specific source file.
-    Node* nextLeafNode() const;
-
-    // Returns the previous leaf node or 0 if there are no more.
-    // Delivers leaf nodes as if the whole DOM tree were a linear chain of its leaf nodes.
-    // Uses an editing-specific concept of what a leaf node is, and should probably be moved
-    // out of the Node class into an editing-specific source file.
-    Node* previousLeafNode() const;
-
     bool isRootEditableElement() const;
     Element* rootEditableElement() const;
     Element* rootEditableElement(EditableType) const;

Modified: trunk/Source/WebCore/dom/Position.cpp (150878 => 150879)


--- trunk/Source/WebCore/dom/Position.cpp	2013-05-29 08:56:07 UTC (rev 150878)
+++ trunk/Source/WebCore/dom/Position.cpp	2013-05-29 08:57:42 UTC (rev 150879)
@@ -51,7 +51,7 @@
 
 static Node* nextRenderedEditable(Node* node)
 {
-    while ((node = node->nextLeafNode())) {
+    while ((node = nextLeafNode(node))) {
         if (!node->rendererIsEditable())
             continue;
         RenderObject* renderer = node->renderer();
@@ -65,7 +65,7 @@
 
 static Node* previousRenderedEditable(Node* node)
 {
-    while ((node = node->previousLeafNode())) {
+    while ((node = previousLeafNode(node))) {
         if (!node->rendererIsEditable())
             continue;
         RenderObject* renderer = node->renderer();

Modified: trunk/Source/WebCore/editing/VisibleUnits.cpp (150878 => 150879)


--- trunk/Source/WebCore/editing/VisibleUnits.cpp	2013-05-29 08:56:07 UTC (rev 150878)
+++ trunk/Source/WebCore/editing/VisibleUnits.cpp	2013-05-29 08:57:42 UTC (rev 150879)
@@ -51,11 +51,11 @@
 static Node* previousLeafWithSameEditability(Node* node, EditableType editableType)
 {
     bool editable = node->rendererIsEditable(editableType);
-    node = node->previousLeafNode();
+    node = previousLeafNode(node);
     while (node) {
         if (editable == node->rendererIsEditable(editableType))
             return node;
-        node = node->previousLeafNode();
+        node = previousLeafNode(node);
     }
     return 0;
 }
@@ -66,11 +66,11 @@
         return 0;
     
     bool editable = node->rendererIsEditable(editableType);
-    node = node->nextLeafNode();
+    node = nextLeafNode(node);
     while (node) {
         if (editable == node->rendererIsEditable(editableType))
             return node;
-        node = node->nextLeafNode();
+        node = nextLeafNode(node);
     }
     return 0;
 }

Modified: trunk/Source/WebCore/editing/htmlediting.cpp (150878 => 150879)


--- trunk/Source/WebCore/editing/htmlediting.cpp	2013-05-29 08:56:07 UTC (rev 150878)
+++ trunk/Source/WebCore/editing/htmlediting.cpp	2013-05-29 08:57:42 UTC (rev 150879)
@@ -802,6 +802,55 @@
     return parent;
 }
 
+static Node* previousNodeConsideringAtomicNodes(const Node* node)
+{
+    if (node->previousSibling()) {
+        Node* n = node->previousSibling();
+        while (!isAtomicNode(n) && n->lastChild())
+            n = n->lastChild();
+        return n;
+    }
+    if (node->parentNode())
+        return node->parentNode();
+    return 0;
+}
+
+static Node* nextNodeConsideringAtomicNodes(const Node* node)
+{
+    if (!isAtomicNode(node) && node->firstChild())
+        return node->firstChild();
+    if (node->nextSibling())
+        return node->nextSibling();
+    const Node* n = node;
+    while (n && !n->nextSibling())
+        n = n->parentNode();
+    if (n)
+        return n->nextSibling();
+    return 0;
+}
+
+Node* previousLeafNode(const Node* node)
+{
+    Node* n = previousNodeConsideringAtomicNodes(node);
+    while (n) {
+        if (isAtomicNode(n))
+            return n;
+        n = previousNodeConsideringAtomicNodes(n);
+    }
+    return 0;
+}
+
+Node* nextLeafNode(const Node* node)
+{
+    Node* n = nextNodeConsideringAtomicNodes(node);
+    while (node) {
+        if (isAtomicNode(n))
+            return n;
+        n = nextNodeConsideringAtomicNodes(n);
+    }
+    return 0;
+}
+
 // FIXME: do not require renderer, so that this can be used within fragments, or rename to isRenderedTable()
 bool isTableElement(Node* n)
 {

Modified: trunk/Source/WebCore/editing/htmlediting.h (150878 => 150879)


--- trunk/Source/WebCore/editing/htmlediting.h	2013-05-29 08:56:07 UTC (rev 150878)
+++ trunk/Source/WebCore/editing/htmlediting.h	2013-05-29 08:57:42 UTC (rev 150879)
@@ -73,6 +73,10 @@
 Node* isLastPositionBeforeTable(const VisiblePosition&);
 Node* isFirstPositionAfterTable(const VisiblePosition&);
 
+// These two deliver leaf nodes as if the whole DOM tree were a linear chain of its leaf nodes.
+Node* nextLeafNode(const Node*);
+Node* previousLeafNode(const Node*);
+
 // offset functions on Node
 
 int lastOffsetForEditing(const Node*);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to