Reviewed by Chris
[WebKit-https.git] / WebCore / khtml / editing / htmlediting.cpp
index 3e4b332544f880d6964bbba032a8443ce6863264..a18a607080109a97b49f18c1682e8af5d46bcffd 100644 (file)
@@ -2190,8 +2190,10 @@ void InsertParagraphSeparatorCommand::doApply()
         return;
 
     // Build up list of ancestors in between the start node and the start block.
         return;
 
     // Build up list of ancestors in between the start node and the start block.
-    for (NodeImpl *n = startNode->parentNode(); n && n != startBlock; n = n->parentNode())
-        ancestors.prepend(n);
+    if (startNode != startBlock) {
+        for (NodeImpl *n = startNode->parentNode(); n && n != startBlock; n = n->parentNode())
+            ancestors.prepend(n);
+    }
 
     // Make new block to represent the newline.
     // If the start block is the body, just make a P tag, otherwise, make a shallow clone
 
     // Make new block to represent the newline.
     // If the start block is the body, just make a P tag, otherwise, make a shallow clone
@@ -2244,16 +2246,18 @@ void InsertParagraphSeparatorCommand::doApply()
         }
 
         // Move the start node and the siblings of the start node.
         }
 
         // Move the start node and the siblings of the start node.
-        NodeImpl *n = startNode;
-        if (n->id() == ID_BR)
-            n = n->nextSibling();
-        while (n && n != addedBlock) {
-            NodeImpl *next = n->nextSibling();
-            removeNode(n);
-            appendNode(n, parent);
-            n = next;
-        }
-        
+        if (startNode != startBlock) {
+            NodeImpl *n = startNode;
+            if (n->id() == ID_BR)
+                n = n->nextSibling();
+            while (n && n != addedBlock) {
+                NodeImpl *next = n->nextSibling();
+                removeNode(n);
+                appendNode(n, parent);
+                n = next;
+            }
+        }            
+
         // Move everything after the start node.
         NodeImpl *leftParent = ancestors.last();
         while (leftParent && leftParent != startBlock) {
         // Move everything after the start node.
         NodeImpl *leftParent = ancestors.last();
         while (leftParent && leftParent != startBlock) {
@@ -2321,8 +2325,10 @@ void InsertParagraphSeparatorInQuotedContentCommand::doApply()
         return;
 
     // Build up list of ancestors in between the start node and the top blockquote.
         return;
 
     // Build up list of ancestors in between the start node and the top blockquote.
-    for (NodeImpl *n = startNode->parentNode(); n && n != topBlockquote; n = n->parentNode())
-        ancestors.prepend(n);
+    if (startNode != topBlockquote) {
+        for (NodeImpl *n = startNode->parentNode(); n && n != topBlockquote; n = n->parentNode())
+            ancestors.prepend(n);
+    }
 
     // Insert a break after the top blockquote.
     int exceptionCode = 0;
 
     // Insert a break after the top blockquote.
     int exceptionCode = 0;
@@ -2371,15 +2377,18 @@ void InsertParagraphSeparatorInQuotedContentCommand::doApply()
         }
 
         // Move the start node and the siblings of the start node.
         }
 
         // Move the start node and the siblings of the start node.
-        NodeImpl *n = startNode;
-        bool startIsBR = n->id() == ID_BR;
-        if (startIsBR)
-            n = n->nextSibling();
-        while (n) {
-            NodeImpl *next = n->nextSibling();
-            removeNode(n);
-            appendNode(n, parent);
-            n = next;
+        bool startIsBR = false;
+        if (startNode != topBlockquote) {
+            NodeImpl *n = startNode;
+            bool startIsBR = n->id() == ID_BR;
+            if (startIsBR)
+                n = n->nextSibling();
+            while (n) {
+                NodeImpl *next = n->nextSibling();
+                removeNode(n);
+                appendNode(n, parent);
+                n = next;
+            }
         }
         
         // Move everything after the start node.
         }
         
         // Move everything after the start node.