LayoutTests:
authorjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Aug 2006 22:59:18 +0000 (22:59 +0000)
committerjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 22 Aug 2006 22:59:18 +0000 (22:59 +0000)
        Reviewed by harrison

        <rdar://problem/4052343&4052343&4426622> Mail hung on paste text

        Bugs exposed:
        * editing/pasteboard/paste-4039777-fix-expected.checksum:
        * editing/pasteboard/paste-4039777-fix-expected.png:
        * editing/pasteboard/paste-4039777-fix-expected.txt:
        * editing/deleting/delete-3857753-fix-expected.txt:
        * editing/pasteboard/styled-element-markup-expected.checksum:
        * editing/pasteboard/styled-element-markup-expected.png:
        * editing/pasteboard/styled-element-markup-expected.txt:
        * editing/execCommand/insertHTML-expected.checksum:
        * editing/execCommand/insertHTML-expected.png:
        * editing/execCommand/insertHTML-expected.txt:
        * editing/execCommand/insertHTML.html:

        Removed some empty style spans, font tags are replaced by style spans
        in a couple of cases:
        * editing/deleting/merge-different-styles-expected.txt:
        * editing/deleting/pruning-after-merge-1-expected.txt:
        * editing/deleting/pruning-after-merge-2-expected.txt:
        * editing/inserting/insert-3786362-fix-expected.txt:
        * editing/pasteboard/block-wrappers-necessary-expected.txt:
        * editing/pasteboard/display-block-on-spans-expected.txt:
        * editing/pasteboard/merge-end-table-expected.txt:
        * editing/pasteboard/paste-4035648-fix-expected.txt:
        * editing/pasteboard/paste-line-endings-001-expected.txt:
        * editing/pasteboard/paste-line-endings-006-expected.txt:
        * editing/pasteboard/paste-list-001-expected.txt:
        * editing/pasteboard/paste-pre-001-expected.txt:
        * editing/pasteboard/paste-pre-002-expected.txt:
        * editing/pasteboard/paste-table-001-expected.txt:
        * editing/pasteboard/paste-table-002-expected.txt:
        * editing/pasteboard/paste-text-001-expected.txt:
        * editing/pasteboard/paste-text-002-expected.txt:
        * editing/pasteboard/paste-text-003-expected.txt:
        * editing/pasteboard/paste-text-004-expected.txt:
        * editing/pasteboard/paste-text-005-expected.txt:
        * editing/pasteboard/paste-text-006-expected.txt:
        * editing/pasteboard/paste-text-011-expected.txt:
        * editing/pasteboard/paste-text-012-expected.txt:
        * editing/pasteboard/paste-text-013-expected.txt:
        * editing/pasteboard/paste-text-014-expected.txt:
        * editing/pasteboard/paste-text-015-expected.txt:
        * editing/pasteboard/paste-text-016-expected.txt:
        * editing/pasteboard/paste-text-017-expected.txt:
        * editing/pasteboard/paste-text-at-tabspan-001-expected.txt:
        * editing/pasteboard/paste-text-at-tabspan-002-expected.txt:
        * editing/pasteboard/paste-text-at-tabspan-003-expected.txt:
        * editing/pasteboard/styled-element-markup.html:
        * editing/pasteboard/testcase-9507-expected.txt:
        * editing/style/smoosh-styles-001-expected.txt:
        * editing/style/smoosh-styles-002-expected.txt:

WebCore:

        Reviewed by harrison

        <rdar://problem/4052343&4052343&4426622> Mail hung on paste text

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::isInterchangeNewlineNode):
        (WebCore::isInterchangeConvertedSpaceSpan):
        (WebCore::ReplacementFragment::ReplacementFragment):
        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Compute the redundant inheritable styles and
        remove them and remove style nodes and style spans which were only contributing redundant styles.
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/ReplaceSelectionCommand.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@15975 268f45cc-cd09-0410-ab3c-d52691b4dbfc

50 files changed:
LayoutTests/ChangeLog
LayoutTests/editing/deleting/delete-3857753-fix-expected.txt
LayoutTests/editing/deleting/merge-different-styles-expected.txt
LayoutTests/editing/deleting/pruning-after-merge-1-expected.txt
LayoutTests/editing/deleting/pruning-after-merge-2-expected.txt
LayoutTests/editing/execCommand/insertHTML-expected.checksum
LayoutTests/editing/execCommand/insertHTML-expected.png
LayoutTests/editing/execCommand/insertHTML-expected.txt
LayoutTests/editing/execCommand/insertHTML.html
LayoutTests/editing/inserting/insert-3786362-fix-expected.txt
LayoutTests/editing/pasteboard/block-wrappers-necessary-expected.txt
LayoutTests/editing/pasteboard/display-block-on-spans-expected.txt
LayoutTests/editing/pasteboard/merge-end-table-expected.txt
LayoutTests/editing/pasteboard/paste-4035648-fix-expected.txt
LayoutTests/editing/pasteboard/paste-4039777-fix-expected.checksum
LayoutTests/editing/pasteboard/paste-4039777-fix-expected.png
LayoutTests/editing/pasteboard/paste-4039777-fix-expected.txt
LayoutTests/editing/pasteboard/paste-line-endings-001-expected.txt
LayoutTests/editing/pasteboard/paste-line-endings-006-expected.txt
LayoutTests/editing/pasteboard/paste-list-001-expected.txt
LayoutTests/editing/pasteboard/paste-pre-001-expected.txt
LayoutTests/editing/pasteboard/paste-pre-002-expected.txt
LayoutTests/editing/pasteboard/paste-table-001-expected.txt
LayoutTests/editing/pasteboard/paste-table-002-expected.txt
LayoutTests/editing/pasteboard/paste-text-001-expected.txt
LayoutTests/editing/pasteboard/paste-text-002-expected.txt
LayoutTests/editing/pasteboard/paste-text-003-expected.txt
LayoutTests/editing/pasteboard/paste-text-004-expected.txt
LayoutTests/editing/pasteboard/paste-text-005-expected.txt
LayoutTests/editing/pasteboard/paste-text-006-expected.txt
LayoutTests/editing/pasteboard/paste-text-011-expected.txt
LayoutTests/editing/pasteboard/paste-text-012-expected.txt
LayoutTests/editing/pasteboard/paste-text-013-expected.txt
LayoutTests/editing/pasteboard/paste-text-014-expected.txt
LayoutTests/editing/pasteboard/paste-text-015-expected.txt
LayoutTests/editing/pasteboard/paste-text-016-expected.txt
LayoutTests/editing/pasteboard/paste-text-017-expected.txt
LayoutTests/editing/pasteboard/paste-text-at-tabspan-001-expected.txt
LayoutTests/editing/pasteboard/paste-text-at-tabspan-002-expected.txt
LayoutTests/editing/pasteboard/paste-text-at-tabspan-003-expected.txt
LayoutTests/editing/pasteboard/styled-element-markup-expected.checksum
LayoutTests/editing/pasteboard/styled-element-markup-expected.png
LayoutTests/editing/pasteboard/styled-element-markup-expected.txt
LayoutTests/editing/pasteboard/styled-element-markup.html
LayoutTests/editing/pasteboard/testcase-9507-expected.txt
LayoutTests/editing/style/smoosh-styles-001-expected.txt
LayoutTests/editing/style/smoosh-styles-002-expected.txt
WebCore/ChangeLog
WebCore/editing/ReplaceSelectionCommand.cpp
WebCore/editing/ReplaceSelectionCommand.h

index 7ffde02..3c044f4 100644 (file)
@@ -1,3 +1,60 @@
+2006-08-22  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by harrison
+
+        <rdar://problem/4052343&4052343&4426622> Mail hung on paste text
+        
+        Bugs exposed:
+        * editing/pasteboard/paste-4039777-fix-expected.checksum:
+        * editing/pasteboard/paste-4039777-fix-expected.png:
+        * editing/pasteboard/paste-4039777-fix-expected.txt:
+        * editing/deleting/delete-3857753-fix-expected.txt:
+        * editing/pasteboard/styled-element-markup-expected.checksum:
+        * editing/pasteboard/styled-element-markup-expected.png:
+        * editing/pasteboard/styled-element-markup-expected.txt:
+        * editing/execCommand/insertHTML-expected.checksum:
+        * editing/execCommand/insertHTML-expected.png:
+        * editing/execCommand/insertHTML-expected.txt:
+        * editing/execCommand/insertHTML.html:
+        
+        Removed some empty style spans, font tags are replaced by style spans
+        in a couple of cases:
+        * editing/deleting/merge-different-styles-expected.txt:
+        * editing/deleting/pruning-after-merge-1-expected.txt:
+        * editing/deleting/pruning-after-merge-2-expected.txt:
+        * editing/inserting/insert-3786362-fix-expected.txt:
+        * editing/pasteboard/block-wrappers-necessary-expected.txt:
+        * editing/pasteboard/display-block-on-spans-expected.txt:
+        * editing/pasteboard/merge-end-table-expected.txt:
+        * editing/pasteboard/paste-4035648-fix-expected.txt:
+        * editing/pasteboard/paste-line-endings-001-expected.txt:
+        * editing/pasteboard/paste-line-endings-006-expected.txt:
+        * editing/pasteboard/paste-list-001-expected.txt:
+        * editing/pasteboard/paste-pre-001-expected.txt:
+        * editing/pasteboard/paste-pre-002-expected.txt:
+        * editing/pasteboard/paste-table-001-expected.txt:
+        * editing/pasteboard/paste-table-002-expected.txt:
+        * editing/pasteboard/paste-text-001-expected.txt:
+        * editing/pasteboard/paste-text-002-expected.txt:
+        * editing/pasteboard/paste-text-003-expected.txt:
+        * editing/pasteboard/paste-text-004-expected.txt:
+        * editing/pasteboard/paste-text-005-expected.txt:
+        * editing/pasteboard/paste-text-006-expected.txt:
+        * editing/pasteboard/paste-text-011-expected.txt:
+        * editing/pasteboard/paste-text-012-expected.txt:
+        * editing/pasteboard/paste-text-013-expected.txt:
+        * editing/pasteboard/paste-text-014-expected.txt:
+        * editing/pasteboard/paste-text-015-expected.txt:
+        * editing/pasteboard/paste-text-016-expected.txt:
+        * editing/pasteboard/paste-text-017-expected.txt:
+        * editing/pasteboard/paste-text-at-tabspan-001-expected.txt:
+        * editing/pasteboard/paste-text-at-tabspan-002-expected.txt:
+        * editing/pasteboard/paste-text-at-tabspan-003-expected.txt:
+        * editing/pasteboard/styled-element-markup.html:
+        * editing/pasteboard/testcase-9507-expected.txt:
+        * editing/style/smoosh-styles-001-expected.txt:
+        * editing/style/smoosh-styles-002-expected.txt:
+
 2006-08-22  Trey Matteson  <trey@usa.net>
 
         Reviewed by ggaren.
index 682ced0..0d45622 100644 (file)
@@ -20,7 +20,7 @@ layer at (0,0) size 800x600
         RenderInline {B} at (0,0) size 37x28
           RenderText {#text} at (0,0) size 25x28
             text run at (0,0) width 25: "on"
-          RenderInline {SPAN} at (0,0) size 12x28
+          RenderInline {SPAN} at (0,0) size 12x18
             RenderInline {I} at (0,0) size 12x28
               RenderText {#text} at (25,0) size 12x28
                 text run at (25,0) width 12: "o"
index 8c8c156..234257f 100644 (file)
@@ -19,7 +19,7 @@ layer at (0,0) size 800x600
         RenderBlock {DIV} at (0,0) size 784x18
           RenderText {#text} at (0,0) size 21x18
             text run at (0,0) width 21: "foo"
-          RenderInline {B} at (0,0) size 24x18
+          RenderInline {SPAN} at (0,0) size 24x18
             RenderText {#text} at (21,0) size 24x18
               text run at (21,0) width 24: "bar"
 caret: position 3 of child 0 {#text} of child 1 {DIV} of child 2 {DIV} of child 0 {BODY} of child 0 {HTML} of document
index bd89fb7..80ed936 100644 (file)
@@ -31,7 +31,7 @@ layer at (0,0) size 800x600
         RenderBlock (anonymous) at (0,0) size 784x18
           RenderText {#text} at (0,0) size 5x18
             text run at (0,0) width 5: "f"
-          RenderInline {B} at (0,0) size 15x18
+          RenderInline {SPAN} at (0,0) size 15x18
             RenderText {#text} at (5,0) size 15x18
               text run at (5,0) width 15: "ar"
           RenderInline {B} at (0,0) size 0x18
index be7cabf..2274fa8 100644 (file)
@@ -25,7 +25,7 @@ layer at (0,0) size 800x600
         RenderBlock {DIV} at (0,0) size 784x18
           RenderText {#text} at (0,0) size 21x18
             text run at (0,0) width 21: "foo"
-          RenderInline {B} at (0,0) size 24x18
+          RenderInline {SPAN} at (0,0) size 24x18
             RenderText {#text} at (21,0) size 24x18
               text run at (21,0) width 24: "bar"
 caret: position 3 of child 0 {#text} of child 0 {DIV} of child 2 {DIV} of child 0 {BODY} of child 0 {HTML} of document
index b17f383..5effb78 100644 (file)
@@ -1 +1 @@
-b2863aa2921e4a94798516c0dbb926a4
\ No newline at end of file
+95484e90582a1119d025a5800bb66d5c
\ No newline at end of file
index 590b4cb..c1872af 100644 (file)
Binary files a/LayoutTests/editing/execCommand/insertHTML-expected.png and b/LayoutTests/editing/execCommand/insertHTML-expected.png differ
index fe348d7..6fa3033 100644 (file)
@@ -16,11 +16,10 @@ layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x576
       RenderBlock {P} at (0,0) size 784x36
-        RenderText {#text} at (0,0) size 704x36
+        RenderText {#text} at (0,0) size 780x36
           text run at (0,0) width 312: "This is a test of execCommand(insertHTML, ...). "
-          text run at (312,0) width 392: "It selects the contents of an editable div, d, deletes it, then calls"
-          text run at (0,18) width 291: "execCommand(insertHTML, d.innerHTML). "
-          text run at (291,18) width 364: "d.innerHTML should be what it was when the test began."
+          text run at (312,0) width 468: "The contents of the editable div below should be the same before and after"
+          text run at (0,18) width 48: "the test."
       RenderBlock {DIV} at (0,52) size 784x32
         RenderText {#text} at (0,14) size 31x18
           text run at (0,14) width 31: "hello"
@@ -38,9 +37,5 @@ layer at (0,0) size 800x600
             text run at (63,14) width 40: "world"
         RenderText {#text} at (103,14) size 5x18
           text run at (103,14) width 5: "!"
-      RenderBlock {UL} at (0,100) size 784x18
-        RenderListItem {LI} at (40,0) size 744x18
-          RenderListMarker at (-17,0) size 7x18
-          RenderText {#text} at (0,0) size 50x18
-            text run at (0,0) width 50: "Success"
+      RenderBlock {UL} at (0,100) size 784x0
 caret: position 1 of child 3 {#text} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 40c02fa..1ea6bdf 100644 (file)
@@ -17,19 +17,12 @@ function editingTest() {
     selectAllCommand();
     deleteCommand();
     insertHTMLCommand(html);
-
-    var results = d.innerHTML.toLowerCase();
-
-    if (html == results)
-        log("Success");
-    else
-        log("Failure.  Called execCommand(innerHTML, " + html + ") and the results of calling innerHTML afterword were: " + results);
 }
 </script>
 </head>
 
 <body>
-<p>This is a test of execCommand(insertHTML, ...).  It selects the contents of an editable div, d, deletes it, then calls execCommand(insertHTML, d.innerHTML).  d.innerHTML should be what it was when the test began.</p>
+<p>This is a test of execCommand(insertHTML, ...).  The contents of the editable div below should be the same before and after the test.</p>
 <div id="test" contenteditable="true">hello<table style="display:inline" border=1><tr><td>1</td><td>2</td></tr></table><b>world</b>!</div>
 <ul id="console"></ul>
 <script>
index df2df35..4e10642 100644 (file)
@@ -6,7 +6,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document toDOMRange:range from 2 of DIV > DIV > BODY > HTML > #document to 2 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document toDOMRange:range from 1 of SPAN > DIV > DIV > BODY > HTML > #document to 1 of SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -33,6 +33,8 @@ layer at (0,0) size 800x600
         RenderBlock {DIV} at (0,88) size 784x60 [border: (2px solid #FF0000)]
           RenderText {#text} at (2,2) size 11x28
             text run at (2,2) width 11: "a"
-          RenderBR {BR} at (13,24) size 0x0
-          RenderBR {BR} at (2,30) size 0x28
-caret: position 0 of child 2 {BR} of child 3 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+          RenderInline {SPAN} at (0,0) size 0x18
+            RenderBR {BR} at (13,24) size 0x0
+          RenderInline {SPAN} at (0,0) size 0x18
+            RenderBR {BR} at (2,30) size 0x28
+caret: position 0 of child 0 {BR} of child 2 {SPAN} of child 3 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index e069b54..187ec4e 100644 (file)
@@ -12,7 +12,7 @@ EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of P > CENTER > DIV > DIV > BODY > HTML > #document to 0 of P > CENTER > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 85 of #text > P > P > CENTER > DIV > DIV > BODY > HTML > #document to 85 of #text > P > P > CENTER > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 85 of #text > P > SPAN > P > CENTER > DIV > DIV > BODY > HTML > #document to 85 of #text > P > SPAN > P > CENTER > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -41,44 +41,52 @@ layer at (0,0) size 800x600
         RenderBlock {DIV} at (0,0) size 784x190 [border: (2px solid #FF0000)]
           RenderBlock {CENTER} at (2,20) size 780x150
             RenderBlock {P} at (0,0) size 780x150
-              RenderBlock {P} at (0,0) size 780x110
-                RenderText {#text} at (0,0) size 76x22
-                  text run at (0,0) width 76: "This is an "
-                RenderInline {B} at (0,0) size 82x22
-                  RenderText {#text} at (76,0) size 82x22
-                    text run at (76,0) width 82: "interactive"
-                RenderText {#text} at (158,0) size 622x44
-                  text run at (158,0) width 622: " documentation site, so please help out by posting any useful information that you've "
-                  text run at (325,22) width 129: "had to search out."
-                RenderBR {BR} at (454,39) size 0x0
-                RenderText {#text} at (20,44) size 115x22
-                  text run at (20,44) width 115: "(Adding to this "
-                RenderInline {A} at (0,0) size 107x22 [color=#0000EE]
-                  RenderText {#text} at (135,44) size 107x22
-                    text run at (135,44) width 107: "wiki is so easy"
-                RenderText {#text} at (242,44) size 207x22
-                  text run at (242,44) width 207: ", you can't screw it up). See "
-                RenderInline {A} at (0,0) size 114x22 [color=#0000EE]
-                  RenderText {#text} at (449,44) size 114x22
-                    text run at (449,44) width 114: "Wiki Reference"
-                RenderText {#text} at (563,44) size 196x22
-                  text run at (563,44) width 196: " for text formatting syntax."
-                RenderBR {BR} at (759,61) size 0x0
-                RenderText {#text} at (161,66) size 283x22
-                  text run at (161,66) width 283: "Info for setting up your own wiki is at "
-                RenderInline {A} at (0,0) size 170x22 [color=#0000EE]
-                  RenderText {#text} at (444,66) size 170x22
-                    text run at (444,66) width 170: "about howto.apple.com"
-                RenderText {#text} at (614,66) size 5x22
-                  text run at (614,66) width 5: "."
-                RenderBR {BR} at (619,83) size 0x0
-                RenderText {#text} at (96,88) size 514x22
-                  text run at (96,88) width 514: "Check out a cool wiki editor application that helps in wiki generation: "
-                RenderInline {A} at (0,0) size 73x22 [color=#0000EE]
-                  RenderText {#text} at (610,88) size 73x22
-                    text run at (610,88) width 73: "Wikinator"
-              RenderBlock {P} at (0,128) size 780x22
-                RenderText {#text} at (85,0) size 610x22
-                  text run at (85,0) width 610: "Start browsing the topics below, or use the search field at the bottom of every page."
+              RenderBlock (anonymous) at (0,0) size 780x0
+                RenderInline {SPAN} at (0,0) size 0x0
+              RenderBlock (anonymous) at (0,0) size 780x110
+                RenderBlock {P} at (0,0) size 780x110
+                  RenderText {#text} at (0,0) size 76x22
+                    text run at (0,0) width 76: "This is an "
+                  RenderInline {B} at (0,0) size 82x22
+                    RenderText {#text} at (76,0) size 82x22
+                      text run at (76,0) width 82: "interactive"
+                  RenderText {#text} at (158,0) size 622x44
+                    text run at (158,0) width 622: " documentation site, so please help out by posting any useful information that you've "
+                    text run at (325,22) width 129: "had to search out."
+                  RenderBR {BR} at (454,39) size 0x0
+                  RenderText {#text} at (20,44) size 115x22
+                    text run at (20,44) width 115: "(Adding to this "
+                  RenderInline {A} at (0,0) size 107x22 [color=#0000EE]
+                    RenderText {#text} at (135,44) size 107x22
+                      text run at (135,44) width 107: "wiki is so easy"
+                  RenderText {#text} at (242,44) size 207x22
+                    text run at (242,44) width 207: ", you can't screw it up). See "
+                  RenderInline {A} at (0,0) size 114x22 [color=#0000EE]
+                    RenderText {#text} at (449,44) size 114x22
+                      text run at (449,44) width 114: "Wiki Reference"
+                  RenderText {#text} at (563,44) size 196x22
+                    text run at (563,44) width 196: " for text formatting syntax."
+                  RenderBR {BR} at (759,61) size 0x0
+                  RenderText {#text} at (161,66) size 283x22
+                    text run at (161,66) width 283: "Info for setting up your own wiki is at "
+                  RenderInline {A} at (0,0) size 170x22 [color=#0000EE]
+                    RenderText {#text} at (444,66) size 170x22
+                      text run at (444,66) width 170: "about howto.apple.com"
+                  RenderText {#text} at (614,66) size 5x22
+                    text run at (614,66) width 5: "."
+                  RenderBR {BR} at (619,83) size 0x0
+                  RenderText {#text} at (96,88) size 514x22
+                    text run at (96,88) width 514: "Check out a cool wiki editor application that helps in wiki generation: "
+                  RenderInline {A} at (0,0) size 73x22 [color=#0000EE]
+                    RenderText {#text} at (610,88) size 73x22
+                      text run at (610,88) width 73: "Wikinator"
+              RenderBlock (anonymous) at (0,128) size 780x0
+                RenderInline {SPAN} at (0,0) size 0x0
+                RenderInline {SPAN} at (0,0) size 0x0
+              RenderBlock (anonymous) at (0,128) size 780x22
+                RenderBlock {P} at (0,0) size 780x22
+                  RenderText {#text} at (85,0) size 610x22
+                    text run at (85,0) width 610: "Start browsing the topics below, or use the search field at the bottom of every page."
               RenderBlock (anonymous) at (0,168) size 780x0
-caret: position 85 of child 0 {#text} of child 1 {P} of child 1 {P} of child 1 {CENTER} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+                RenderInline {SPAN} at (0,0) size 0x0
+caret: position 85 of child 0 {#text} of child 0 {P} of child 1 {SPAN} of child 1 {P} of child 1 {CENTER} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index f9b5cc3..a9f1876 100644 (file)
@@ -4,7 +4,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of #text > B > SPAN > DIV > BODY > HTML > #document to 4 of #text > B > SPAN > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > B > SPAN > DIV > BODY > HTML > #document to 4 of #text > B > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > B > SPAN > B > SPAN > DIV > BODY > HTML > #document to 4 of #text > B > SPAN > B > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -31,10 +31,13 @@ layer at (0,0) size 800x600
           RenderInline {B} at (0,0) size 137x18
             RenderText {#text} at (0,0) size 137x18
               text run at (0,0) width 137: "This is a paragraph."
+        RenderBlock (anonymous) at (0,18) size 784x0
         RenderBlock {SPAN} at (0,18) size 784x18
           RenderInline {B} at (0,0) size 182x18
-            RenderText {#text} at (0,0) size 30x18
-              text run at (0,0) width 30: "This"
+            RenderInline {SPAN} at (0,0) size 30x18
+              RenderInline {B} at (0,0) size 30x18
+                RenderText {#text} at (0,0) size 30x18
+                  text run at (0,0) width 30: "This"
             RenderText {#text} at (30,0) size 152x18
               text run at (30,0) width 152: " is another paragraph."
-caret: position 4 of child 0 {#text} of child 0 {B} of child 2 {SPAN} of child 5 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 4 of child 0 {#text} of child 0 {B} of child 0 {SPAN} of child 0 {B} of child 2 {SPAN} of child 5 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 18ba6bd..0a7f28b 100644 (file)
@@ -11,7 +11,7 @@ EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML
 EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > SPAN > DIV > TD > TR > TBODY > TABLE > DIV > BODY > HTML > #document to 3 of #text > SPAN > DIV > TD > TR > TBODY > TABLE > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > TD > TR > TBODY > TABLE > DIV > BODY > HTML > #document to 3 of #text > DIV > TD > TR > TBODY > TABLE > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -51,16 +51,14 @@ layer at (0,0) size 800x600
                 RenderBlock {DIV} at (2,2) size 49x18
                   RenderText {#text} at (0,0) size 28x18
                     text run at (0,0) width 28: "Item"
-                  RenderInline {SPAN} at (0,0) size 21x18
-                    RenderText {#text} at (28,0) size 21x18
-                      text run at (28,0) width 21: "foo"
+                  RenderText {#text} at (28,0) size 21x18
+                    text run at (28,0) width 21: "foo"
                 RenderBlock {DIV} at (2,20) size 49x18
-                  RenderInline {SPAN} at (0,0) size 20x18
-                    RenderText {#text} at (0,0) size 20x18
-                      text run at (0,0) width 20: "bar"
+                  RenderText {#text} at (0,0) size 20x18
+                    text run at (0,0) width 20: "bar"
                   RenderText {#text} at (20,0) size 12x18
                     text run at (20,0) width 12: " 1"
               RenderTableCell {TD} at (57,11) size 44x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
                 RenderText {#text} at (2,2) size 40x18
                   text run at (2,2) width 40: "Item 2"
-caret: position 3 of child 0 {#text} of child 0 {SPAN} of child 1 {DIV} of child 0 {TD} of child 0 {TR} of child 0 {TBODY} of child 0 {TABLE} of child 10 {DIV} of child 0 {BODY} of child 0 {HTML} of document
+caret: position 3 of child 0 {#text} of child 1 {DIV} of child 0 {TD} of child 0 {TR} of child 0 {TBODY} of child 0 {TABLE} of child 10 {DIV} of child 0 {BODY} of child 0 {HTML} of document
index 74956bb..c48a39d 100644 (file)
@@ -45,12 +45,13 @@ layer at (0,0) size 800x600
             text run at (0,84) width 49: "plain"
       RenderBlock {DIV} at (0,264) size 784x88
         RenderBlock {DIV} at (0,0) size 784x88 [border: (2px solid #FF0000)]
-          RenderBR {BR} at (2,2) size 0x28
-          RenderInline {B} at (0,0) size 45x28
-            RenderText {#text} at (2,30) size 45x28
-              text run at (2,30) width 45: "bold"
-          RenderInline {B} at (0,0) size 0x28
-            RenderBR {BR} at (47,52) size 0x0
+          RenderInline {SPAN} at (0,0) size 0x18
+            RenderBR {BR} at (2,2) size 0x28
+          RenderInline {SPAN} at (0,0) size 45x18
+            RenderInline {B} at (0,0) size 45x28
+              RenderText {#text} at (2,30) size 45x28
+                text run at (2,30) width 45: "bold"
+              RenderBR {BR} at (47,52) size 0x0
           RenderText {#text} at (2,58) size 49x28
             text run at (2,58) width 49: "plain"
-caret: position 5 of child 3 {#text} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 5 of child 2 {#text} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 76c6233..aea0b5d 100644 (file)
@@ -1 +1 @@
-2c39d2c3c57c1a86cb18421b87f0ac2b
\ No newline at end of file
+f94306167d8e3068b81b2af65a411453
\ No newline at end of file
index a9e4992..daf3078 100644 (file)
Binary files a/LayoutTests/editing/pasteboard/paste-4039777-fix-expected.png and b/LayoutTests/editing/pasteboard/paste-4039777-fix-expected.png differ
index d65a37d..ec4bdac 100644 (file)
@@ -4,7 +4,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of #text > LI > UL > DIV > DIV > BODY > HTML > #document to 5 of #text > LI > UL > DIV > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > LI > UL > DIV > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > LI > UL > DIV > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > LI > UL > DIV > SPAN > DIV > DIV > BODY > HTML > #document to 1 of #text > LI > UL > DIV > SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -50,18 +50,23 @@ layer at (0,0) size 800x600
                 RenderBR {BR} at (0,0) size 0x0
                 RenderText {#text} at (0,28) size 16x28
                   text run at (0,28) width 16: "C"
-      RenderBlock {DIV} at (0,364) size 784x160
-        RenderBlock {DIV} at (0,0) size 784x160 [border: (2px solid #FF0000)]
-          RenderBlock {UL} at (2,26) size 780x28
-            RenderListItem {LI} at (40,0) size 740x28
-              RenderListMarker at (-22,0) size 9x28
-              RenderText {#text} at (723,0) size 17x28
-                text run at (723,0) width 17: "A"
-          RenderBlock {DIV} at (2,78) size 780x56
-            RenderBlock {UL} at (0,0) size 780x56
-              RenderListItem {LI} at (40,0) size 740x56
-                RenderBlock (anonymous) at (0,0) size 740x0
-                RenderBlock {DIV} at (0,0) size 740x28
+      RenderBlock {DIV} at (0,364) size 784x188
+        RenderBlock {DIV} at (0,0) size 784x188 [border: (2px solid #FF0000)]
+          RenderBlock (anonymous) at (2,2) size 780x0
+            RenderInline {SPAN} at (0,0) size 0x0
+          RenderBlock (anonymous) at (2,26) size 780x28
+            RenderBlock {UL} at (0,0) size 780x28
+              RenderListItem {LI} at (40,0) size 740x28
+                RenderListMarker at (-22,0) size 9x28
+                RenderText {#text} at (723,0) size 17x28
+                  text run at (723,0) width 17: "A"
+          RenderBlock (anonymous) at (2,78) size 780x0
+            RenderInline {SPAN} at (0,0) size 0x0
+            RenderInline {SPAN} at (0,0) size 0x0
+          RenderBlock (anonymous) at (2,78) size 780x56
+            RenderBlock {DIV} at (0,0) size 780x56
+              RenderBlock {UL} at (0,0) size 780x56
+                RenderListItem {LI} at (40,0) size 740x56
                   RenderListMarker at (-22,0) size 9x28
                   RenderInline {A} at (0,0) size 16x28 [color=#0000EE]
                     RenderText {#text} at (718,0) size 16x28
@@ -69,11 +74,10 @@ layer at (0,0) size 800x600
                   RenderText {#text} at (734,0) size 6x28
                     text run at (734,0) width 6: " "
                   RenderBR {BR} at (740,22) size 0x0
-                RenderBlock {DIV} at (0,28) size 740x28
-                  RenderText {#text} at (724,0) size 16x28
-                    text run at (724,0) width 16: "C"
-                  RenderBR {BR} at (740,22) size 0x0
-                RenderBlock (anonymous) at (0,56) size 740x0
-          RenderBlock (anonymous) at (2,158) size 780x0
-          RenderBlock {DIV} at (2,158) size 780x0
-caret: position 1 of child 0 {#text} of child 1 {DIV} of child 0 {LI} of child 0 {UL} of child 1 {DIV} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+                  RenderText {#text} at (724,28) size 16x28
+                    text run at (724,28) width 16: "C"
+          RenderBlock (anonymous) at (2,158) size 780x28
+            RenderInline {SPAN} at (0,0) size 0x0
+            RenderBR {BR} at (780,0) size 0x28
+          RenderBlock {DIV} at (2,186) size 780x0
+caret: position 1 of child 3 {#text} of child 0 {LI} of child 0 {UL} of child 0 {DIV} of child 1 {SPAN} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 1fe684f..263ba67 100644 (file)
@@ -11,7 +11,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 1 of DIV > DIV > BODY > HTML > #document to 2 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of DIV > DIV > BODY > HTML > #document to 2 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of SPAN > DIV > DIV > BODY > HTML > #document to 1 of SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -43,7 +43,8 @@ layer at (0,0) size 800x600
         RenderBlock {DIV} at (0,0) size 784x60 [border: (2px solid #FF0000)]
           RenderText {#text} at (2,2) size 78x28
             text run at (2,2) width 78: "line one"
-          RenderBR {BR} at (80,24) size 0x0
+          RenderInline {SPAN} at (0,0) size 0x18
+            RenderBR {BR} at (80,24) size 0x0
           RenderText {#text} at (2,30) size 79x28
             text run at (2,30) width 79: "line two"
 caret: position 0 of child 2 {#text} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 67a90d6..d0e8e4e 100644 (file)
@@ -45,7 +45,8 @@ layer at (0,0) size 800x600
         RenderBlock {DIV} at (0,0) size 784x60 [border: (2px solid #FF0000)]
           RenderText {#text} at (2,2) size 78x28
             text run at (2,2) width 78: "line one"
-          RenderBR {BR} at (80,24) size 0x0
+          RenderInline {SPAN} at (0,0) size 0x18
+            RenderBR {BR} at (80,24) size 0x0
           RenderText {#text} at (2,30) size 7x28
             text run at (2,30) width 7: "l"
           RenderText {#text} at (9,30) size 72x28
index c110f04..23277a5 100644 (file)
@@ -7,7 +7,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 21 of #text > LI > OL > DIV > BODY > HTML > #document to 21 of #text > LI > OL > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 21 of #text > LI > OL > DIV > BODY > HTML > #document to 21 of #text > LI > OL > DIV > BODY > HTML > #document toDOMRange:range from 21 of #text > LI > OL > OL > DIV > BODY > HTML > #document to 21 of #text > LI > OL > OL > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 21 of #text > LI > OL > DIV > BODY > HTML > #document to 21 of #text > LI > OL > DIV > BODY > HTML > #document toDOMRange:range from 21 of #text > LI > OL > SPAN > OL > DIV > BODY > HTML > #document to 21 of #text > LI > OL > SPAN > OL > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -33,15 +33,20 @@ layer at (0,0) size 800x600
             RenderListMarker at (-31,0) size 24x28
             RenderText {#text} at (0,0) size 211x28
               text run at (0,0) width 211: "I should be number 3."
-          RenderBlock {OL} at (40,84) size 716x84
-            RenderListItem {LI} at (40,0) size 676x28
-              RenderListMarker at (-31,0) size 24x28
-              RenderText {#text} at (0,0) size 211x28
-                text run at (0,0) width 211: "I should be number 1."
-            RenderListItem {LI} at (40,28) size 676x28
-              RenderListMarker at (-31,0) size 24x28
-            RenderListItem {LI} at (40,56) size 676x28
-              RenderListMarker at (-31,0) size 24x28
-              RenderText {#text} at (0,0) size 211x28
-                text run at (0,0) width 211: "I should be number 3."
-caret: position 21 of child 0 {#text} of child 2 {LI} of child 6 {OL} of child 4 {OL} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+          RenderBlock (anonymous) at (40,84) size 716x0
+            RenderInline {SPAN} at (0,0) size 0x0
+          RenderBlock (anonymous) at (40,84) size 716x84
+            RenderBlock {OL} at (0,0) size 716x84
+              RenderListItem {LI} at (40,0) size 676x28
+                RenderListMarker at (-31,0) size 24x28
+                RenderText {#text} at (0,0) size 211x28
+                  text run at (0,0) width 211: "I should be number 1."
+              RenderListItem {LI} at (40,28) size 676x28
+                RenderListMarker at (-31,0) size 24x28
+              RenderListItem {LI} at (40,56) size 676x28
+                RenderListMarker at (-31,0) size 24x28
+                RenderText {#text} at (0,0) size 211x28
+                  text run at (0,0) width 211: "I should be number 3."
+          RenderBlock (anonymous) at (40,168) size 716x0
+            RenderInline {SPAN} at (0,0) size 0x0
+caret: position 21 of child 0 {#text} of child 2 {LI} of child 0 {OL} of child 6 {SPAN} of child 4 {OL} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 36f699a..ab7cd90 100644 (file)
@@ -8,7 +8,7 @@ EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of PRE > DIV > DIV > BODY > HTML > #document to 0 of PRE > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > PRE > PRE > DIV > DIV > BODY > HTML > #document to 7 of #text > PRE > PRE > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > PRE > SPAN > PRE > DIV > DIV > BODY > HTML > #document to 7 of #text > PRE > SPAN > PRE > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -45,10 +45,14 @@ layer at (0,0) size 800x600
       RenderBlock {DIV} at (0,340) size 784x108
         RenderBlock {DIV} at (0,0) size 784x108 [border: (2px solid #FF0000)]
           RenderBlock {PRE} at (2,26) size 780x56
-            RenderBlock {PRE} at (0,0) size 780x56
-              RenderText {#text} at (0,0) size 42x56
-                text run at (0,0) width 42: "foo"
-                text run at (42,0) width 0: " "
-                text run at (0,28) width 42: "bar"
+            RenderBlock (anonymous) at (0,0) size 780x0
+              RenderInline {SPAN} at (0,0) size 0x0
+            RenderBlock (anonymous) at (0,0) size 780x56
+              RenderBlock {PRE} at (0,0) size 780x56
+                RenderText {#text} at (0,0) size 42x56
+                  text run at (0,0) width 42: "foo"
+                  text run at (42,0) width 0: " "
+                  text run at (0,28) width 42: "bar"
             RenderBlock (anonymous) at (0,80) size 780x0
-caret: position 7 of child 0 {#text} of child 0 {PRE} of child 1 {PRE} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+              RenderInline {SPAN} at (0,0) size 0x0
+caret: position 7 of child 0 {#text} of child 0 {PRE} of child 0 {SPAN} of child 1 {PRE} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index a6a6549..fe5d973 100644 (file)
@@ -4,7 +4,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of PRE > DIV > DIV > BODY > HTML > #document to 0 of PRE > DIV > DIV > BODY > HTML > #document toDOMRange:range from 0 of #text > PRE > DIV > DIV > BODY > HTML > #document to 7 of #text > PRE > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of #text > PRE > DIV > DIV > BODY > HTML > #document to 7 of #text > PRE > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > PRE > PRE > DIV > DIV > BODY > HTML > #document to 7 of #text > PRE > PRE > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > PRE > SPAN > PRE > DIV > DIV > BODY > HTML > #document to 7 of #text > PRE > SPAN > PRE > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -26,10 +26,14 @@ layer at (0,0) size 800x600
       RenderBlock {DIV} at (0,49) size 784x30
         RenderBlock {DIV} at (0,0) size 784x30
           RenderBlock {PRE} at (0,0) size 784x30
-            RenderBlock {PRE} at (0,0) size 784x30
-              RenderText {#text} at (0,0) size 24x30
-                text run at (0,0) width 24: "foo"
-                text run at (24,0) width 0: " "
-                text run at (0,15) width 24: "bar"
+            RenderBlock (anonymous) at (0,0) size 784x0
+              RenderInline {SPAN} at (0,0) size 0x0
+            RenderBlock (anonymous) at (0,0) size 784x30
+              RenderBlock {PRE} at (0,0) size 784x30
+                RenderText {#text} at (0,0) size 24x30
+                  text run at (0,0) width 24: "foo"
+                  text run at (24,0) width 0: " "
+                  text run at (0,15) width 24: "bar"
             RenderBlock (anonymous) at (0,43) size 784x0
-caret: position 7 of child 0 {#text} of child 0 {PRE} of child 1 {PRE} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+              RenderInline {SPAN} at (0,0) size 0x0
+caret: position 7 of child 0 {#text} of child 0 {PRE} of child 0 {SPAN} of child 1 {PRE} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 1d52449..3792407 100644 (file)
@@ -39,7 +39,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 2 of TABLE > P > DIV > BODY > HTML > #document to 2 of TABLE > P > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 2 of TABLE > P > DIV > BODY > HTML > #document to 2 of TABLE > P > DIV > BODY > HTML > #document toDOMRange:range from 32 of #text > TD > TR > TBODY > TABLE > P > DIV > BODY > HTML > #document to 32 of #text > TD > TR > TBODY > TABLE > P > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 2 of TABLE > P > DIV > BODY > HTML > #document to 2 of TABLE > P > DIV > BODY > HTML > #document toDOMRange:range from 32 of #text > TD > TR > TBODY > TABLE > SPAN > P > DIV > BODY > HTML > #document to 32 of #text > TD > TR > TBODY > TABLE > SPAN > P > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -68,18 +68,23 @@ layer at (0,0) size 800x600
                 RenderTableCell {TD} at (85,26) size 201x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1]
                   RenderText {#text} at (2,2) size 197x18
                     text run at (2,2) width 197: "I should be in the right column."
-          RenderTable {TABLE} at (0,54) size 292x54 [border: (2px outset #808080)]
-            RenderTableSection {TBODY} at (2,2) size 288x50
-              RenderTableRow {TR} at (0,2) size 288x22
-                RenderTableCell {TD} at (2,2) size 81x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
-                  RenderText {#text} at (2,2) size 77x18
-                    text run at (2,2) width 77: "Left column"
-                RenderTableCell {TD} at (85,2) size 201x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
-                  RenderText {#text} at (2,2) size 86x18
-                    text run at (2,2) width 86: "Right column"
-              RenderTableRow {TR} at (0,26) size 288x22
-                RenderTableCell {TD} at (2,35) size 81x4 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1]
-                RenderTableCell {TD} at (85,26) size 201x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1]
-                  RenderText {#text} at (2,2) size 197x18
-                    text run at (2,2) width 197: "I should be in the right column."
-caret: position 32 of child 0 {#text} of child 1 {TD} of child 1 {TR} of child 0 {TBODY} of child 2 {TABLE} of child 3 {P} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+          RenderBlock (anonymous) at (0,54) size 756x0
+            RenderInline {SPAN} at (0,0) size 0x0
+          RenderBlock (anonymous) at (0,54) size 756x54
+            RenderTable {TABLE} at (0,0) size 292x54 [border: (2px outset #808080)]
+              RenderTableSection {TBODY} at (2,2) size 288x50
+                RenderTableRow {TR} at (0,2) size 288x22
+                  RenderTableCell {TD} at (2,2) size 81x22 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+                    RenderText {#text} at (2,2) size 77x18
+                      text run at (2,2) width 77: "Left column"
+                  RenderTableCell {TD} at (85,2) size 201x22 [border: (1px inset #808080)] [r=0 c=1 rs=1 cs=1]
+                    RenderText {#text} at (2,2) size 86x18
+                      text run at (2,2) width 86: "Right column"
+                RenderTableRow {TR} at (0,26) size 288x22
+                  RenderTableCell {TD} at (2,35) size 81x4 [border: (1px inset #808080)] [r=1 c=0 rs=1 cs=1]
+                  RenderTableCell {TD} at (85,26) size 201x22 [border: (1px inset #808080)] [r=1 c=1 rs=1 cs=1]
+                    RenderText {#text} at (2,2) size 197x18
+                      text run at (2,2) width 197: "I should be in the right column."
+          RenderBlock (anonymous) at (0,108) size 756x0
+            RenderInline {SPAN} at (0,0) size 0x0
+caret: position 32 of child 0 {#text} of child 1 {TD} of child 1 {TR} of child 0 {TBODY} of child 0 {TABLE} of child 2 {SPAN} of child 3 {P} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 21b310a..6a30d8e 100644 (file)
@@ -8,12 +8,12 @@ EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of DIV > DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > SPAN > DIV > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > SPAN > DIV > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 Problem: copy/pasting some HTML including tables can give rise to a <div> element as the first child of the table element. This is invalid.
 abcdef
 foo    bar
 ghijk
-<div id="test" class="editing"> <div>abcdef<div style="text-align: center;"><table style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><tbody style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><tr style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><td style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">foo</td><td style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">bar</td></tr></tbody></table>ghijk</div> </div> </div>
+<div id="test" class="editing"> <div>abcdef<span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: 16px; "><div style="font-size: 24px; text-align: center; "><table style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-size: 16px; text-align: auto; "><tbody style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><tr style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; "><td style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">foo</td><td style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">bar</td></tr></tbody></table>ghijk</div></span> </div> </div>
 
index 23b4c50..8126a73 100644 (file)
@@ -10,7 +10,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 7 of #text > SPAN > DIV > BODY > HTML > #document to 7 of #text > SPAN > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 4 of #text > SPAN > DIV > BODY > HTML > #document to 4 of #text > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 4 of #text > SPAN > DIV > BODY > HTML > #document to 4 of #text > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 3 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 3 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -22,10 +22,11 @@ layer at (0,0) size 800x600
         RenderInline {SPAN} at (0,0) size 140x28
           RenderText {#text} at (14,14) size 69x28
             text run at (14,14) width 69: "foo bar"
-          RenderInline {SPAN} at (0,0) size 31x28
-            RenderText {#text} at (83,14) size 31x28
-              text run at (83,14) width 31: "bar"
+          RenderInline {SPAN} at (0,0) size 31x18
+            RenderInline {SPAN} at (0,0) size 31x28
+              RenderText {#text} at (83,14) size 31x28
+                text run at (83,14) width 31: "bar"
           RenderText {#text} at (114,14) size 40x28
             text run at (114,14) width 40: " baz"
         RenderText {#text} at (0,0) size 0x0
-caret: position 3 of child 0 {#text} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 3 of child 0 {#text} of child 0 {SPAN} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 0a1e245..b8cf1ef 100644 (file)
@@ -69,11 +69,13 @@ layer at (0,0) size 800x600
           text run at (14,14) width 63: "There "
         RenderText {#text} at (77,14) size 285x28
           text run at (77,14) width 285: "is a tide in the affairs of men,"
+      RenderBlock (anonymous) at (0,56) size 784x0
       RenderBlock {DIV} at (0,56) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 124x28
           text run at (14,14) width 124: "Which taken"
         RenderText {#text} at (138,14) size 285x28
           text run at (138,14) width 285: "is a tide in the affairs of men,"
+      RenderBlock (anonymous) at (0,112) size 784x0
       RenderBlock {DIV} at (0,112) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 124x28
           text run at (14,14) width 124: "Which taken"
index 40b921c..8ed152b 100644 (file)
@@ -112,9 +112,13 @@ layer at (0,0) size 800x600
             text run at (0,0) width 63: "There "
           RenderText {#text} at (63,0) size 285x28
             text run at (63,0) width 285: "is a tide in the affairs of men,"
-        RenderBlock {DIV} at (14,42) size 756x56 [border: (2px solid #FF0000)]
-          RenderText {#text} at (14,14) size 434x28
-            text run at (14,14) width 434: "Which taken at the flood leads on to fortune."
+          RenderInline {SPAN} at (0,0) size 0x18
+        RenderBlock (anonymous) at (14,42) size 756x56
+          RenderBlock {DIV} at (0,0) size 756x56 [border: (2px solid #FF0000)]
+            RenderText {#text} at (14,14) size 434x28
+              text run at (14,14) width 434: "Which taken at the flood leads on to fortune."
+        RenderBlock (anonymous) at (14,98) size 756x0
+          RenderInline {SPAN} at (0,0) size 0x0
         RenderBlock {DIV} at (14,98) size 756x252 [border: (2px solid #FF0000)]
           RenderBlock (anonymous) at (14,14) size 728x0
           RenderBlock {DIV} at (14,14) size 728x56 [border: (2px solid #FF0000)]
@@ -123,9 +127,13 @@ layer at (0,0) size 800x600
             RenderText {#text} at (94,14) size 285x28
               text run at (94,14) width 285: "is a tide in the affairs of men,"
           RenderBlock (anonymous) at (14,70) size 728x0
-          RenderBlock {DIV} at (14,70) size 728x56 [border: (2px solid #FF0000)]
-            RenderText {#text} at (14,14) size 434x28
-              text run at (14,14) width 434: "Which taken at the flood leads on to fortune."
+            RenderInline {SPAN} at (0,0) size 0x0
+          RenderBlock (anonymous) at (14,70) size 728x56
+            RenderBlock {DIV} at (0,0) size 728x56 [border: (2px solid #FF0000)]
+              RenderText {#text} at (14,14) size 434x28
+                text run at (14,14) width 434: "Which taken at the flood leads on to fortune."
+          RenderBlock (anonymous) at (14,126) size 728x0
+            RenderInline {SPAN} at (0,0) size 0x0
           RenderBlock {DIV} at (14,126) size 728x112 [border: (2px solid #FF0000)]
             RenderBlock (anonymous) at (14,14) size 700x28
               RenderText {#text} at (0,0) size 80x28
index 5f39f8e..3d85aec 100644 (file)
@@ -54,6 +54,7 @@ layer at (0,0) size 800x600
           text run at (14,14) width 63: "There "
         RenderText {#text} at (77,14) size 285x28
           text run at (77,14) width 285: "is a tide in the affairs of men,"
+      RenderBlock (anonymous) at (0,56) size 784x0
       RenderBlock {DIV} at (0,56) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 434x28
           text run at (14,14) width 434: "Which taken at the flood leads on to fortune."
index 9429278..cb578dc 100644 (file)
@@ -60,6 +60,7 @@ layer at (0,0) size 800x600
       RenderBlock {DIV} at (0,56) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 285x28
           text run at (14,14) width 285: "is a tide in the affairs of men,"
+      RenderBlock (anonymous) at (0,112) size 784x0
       RenderBlock {DIV} at (0,112) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 434x28
           text run at (14,14) width 434: "Which taken at the flood leads on to fortune."
index 24a35fc..202b700 100644 (file)
@@ -58,6 +58,7 @@ layer at (0,0) size 800x600
       RenderBlock {DIV} at (0,56) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 348x28
           text run at (14,14) width 348: "There is a tide in the affairs of men,"
+      RenderBlock (anonymous) at (0,112) size 784x0
       RenderBlock {DIV} at (0,112) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 434x28
           text run at (14,14) width 434: "Which taken at the flood leads on to fortune."
index 10964c8..c5059a3 100644 (file)
@@ -8,7 +8,7 @@ EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 5 of #text > B > FONT
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of P > BODY > HTML > #document to 0 of P > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > P > B > FONT > P > BODY > HTML > #document to 5 of #text > P > B > FONT > P > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > B > FONT > P > SPAN > B > FONT > P > BODY > HTML > #document to 5 of #text > B > FONT > P > SPAN > B > FONT > P > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -30,14 +30,32 @@ layer at (0,0) size 800x600
         RenderBlock (anonymous) at (0,0) size 784x0
           RenderInline {FONT} at (0,0) size 0x0
             RenderInline {B} at (0,0) size 0x0
-        RenderBlock (anonymous) at (0,0) size 784x58
+              RenderInline {SPAN} at (0,0) size 0x0
+        RenderBlock (anonymous) at (0,0) size 784x21
           RenderBlock {P} at (0,0) size 784x21
-            RenderText {#text} at (0,0) size 55x20
-              text run at (0,0) width 55: "hello"
-          RenderBlock {P} at (0,37) size 784x21
-            RenderText {#text} at (0,0) size 55x20
-              text run at (0,0) width 55: "there"
+            RenderInline {FONT} at (0,0) size 55x20
+              RenderInline {B} at (0,0) size 55x20
+                RenderText {#text} at (0,0) size 55x20
+                  text run at (0,0) width 55: "hello"
+        RenderBlock (anonymous) at (0,37) size 784x0
+          RenderInline {FONT} at (0,0) size 0x0
+            RenderInline {B} at (0,0) size 0x0
+              RenderInline {SPAN} at (0,0) size 0x0
+              RenderInline {SPAN} at (0,0) size 0x0
+        RenderBlock (anonymous) at (0,37) size 784x21
+          RenderBlock {P} at (0,0) size 784x21
+            RenderInline {FONT} at (0,0) size 55x20
+              RenderInline {B} at (0,0) size 55x20
+                RenderText {#text} at (0,0) size 55x20
+                  text run at (0,0) width 55: "there"
         RenderBlock (anonymous) at (0,74) size 784x0
           RenderInline {FONT} at (0,0) size 0x0
             RenderInline {B} at (0,0) size 0x0
-caret: position 5 of child 0 {#text} of child 1 {P} of child 0 {B} of child 0 {FONT} of child 4 {P} of child 1 {BODY} of child 0 {HTML} of document
+              RenderInline {SPAN} at (0,0) size 0x0
+          RenderInline {FONT} at (0,0) size 0x0
+            RenderInline {B} at (0,0) size 0x0
+          RenderInline {FONT} at (0,0) size 0x0
+            RenderInline {B} at (0,0) size 0x0
+          RenderInline {FONT} at (0,0) size 0x0
+            RenderInline {B} at (0,0) size 0x0
+caret: position 5 of child 0 {#text} of child 0 {B} of child 0 {FONT} of child 0 {P} of child 1 {SPAN} of child 0 {B} of child 0 {FONT} of child 4 {P} of child 1 {BODY} of child 0 {HTML} of document
index af93c3e..2aa4378 100644 (file)
@@ -7,7 +7,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 0 of BLOCKQUOTE > DIV > DIV > DIV > BODY > HTML > #document to 0 of BLOCKQUOTE > DIV > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 0 of BLOCKQUOTE > DIV > DIV > SPAN > DIV > BODY > HTML > #document to 0 of BLOCKQUOTE > DIV > DIV > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -31,11 +31,16 @@ layer at (0,0) size 800x600
             RenderText {#text} at (0,0) size 32x28
               text run at (0,0) width 32: "foo"
       RenderBlock {DIV} at (0,140) size 784x184 [border: (2px solid #FF0000)]
-        RenderBlock {DIV} at (14,14) size 756x156 [border: (2px solid #FF0000)]
-          RenderBlock {DIV} at (14,38) size 728x80
-            RenderBlock {BLOCKQUOTE} at (40,0) size 648x28
-              RenderText {#text} at (0,0) size 32x28
-                text run at (0,0) width 32: "foo"
-            RenderBlock {BLOCKQUOTE} at (40,52) size 648x28
-              RenderBR {BR} at (0,0) size 0x28
-caret: position 0 of child 0 {BR} of child 1 {BLOCKQUOTE} of child 0 {DIV} of child 0 {DIV} of child 7 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+        RenderBlock (anonymous) at (14,14) size 756x0
+          RenderInline {SPAN} at (0,0) size 0x0
+        RenderBlock (anonymous) at (14,14) size 756x156
+          RenderBlock {DIV} at (0,0) size 756x156 [border: (2px solid #FF0000)]
+            RenderBlock {DIV} at (14,38) size 728x80
+              RenderBlock {BLOCKQUOTE} at (40,0) size 648x28
+                RenderText {#text} at (0,0) size 32x28
+                  text run at (0,0) width 32: "foo"
+              RenderBlock {BLOCKQUOTE} at (40,52) size 648x28
+                RenderBR {BR} at (0,0) size 0x28
+        RenderBlock (anonymous) at (14,170) size 756x0
+          RenderInline {SPAN} at (0,0) size 0x0
+caret: position 0 of child 0 {BR} of child 1 {BLOCKQUOTE} of child 0 {DIV} of child 0 {DIV} of child 0 {SPAN} of child 7 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 10161c4..3f078ba 100644 (file)
@@ -44,4 +44,5 @@ layer at (0,0) size 800x600
               text run at (0,0) width 32: "foo"
           RenderBlock {BLOCKQUOTE} at (40,52) size 676x28
             RenderBR {BR} at (0,0) size 0x28
+      RenderBlock (anonymous) at (0,394) size 784x0
 caret: position 0 of child 0 {BR} of child 1 {BLOCKQUOTE} of child 0 {DIV} of child 8 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index b204d74..a289d05 100644 (file)
@@ -38,6 +38,7 @@ layer at (0,0) size 800x600
           RenderBlock {BLOCKQUOTE} at (40,0) size 676x28
             RenderText {#text} at (0,0) size 32x28
               text run at (0,0) width 32: "foo"
+      RenderBlock (anonymous) at (0,268) size 784x0
       RenderBlock {DIV} at (0,268) size 784x56 [border: (2px solid #FF0000)]
         RenderText {#text} at (14,14) size 12x28
           text run at (14,14) width 12: "x"
index 134b9c4..7348087 100644 (file)
@@ -14,14 +14,14 @@ EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of P > DIV > DIV > BODY > HTML > #document to 0 of P > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > P > P > DIV > DIV > BODY > HTML > #document to 3 of #text > P > P > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > P > SPAN > P > DIV > DIV > BODY > HTML > #document to 3 of #text > P > SPAN > P > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 3 of #text > P > P > DIV > DIV > BODY > HTML > #document to 3 of #text > P > P > DIV > DIV > BODY > HTML > #document toDOMRange:range from 0 of P > P > DIV > DIV > BODY > HTML > #document to 0 of P > P > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 3 of #text > P > SPAN > P > DIV > DIV > BODY > HTML > #document to 3 of #text > P > SPAN > P > DIV > DIV > BODY > HTML > #document toDOMRange:range from 0 of P > SPAN > P > DIV > DIV > BODY > HTML > #document to 0 of P > SPAN > P > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
-EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of P > P > DIV > DIV > BODY > HTML > #document to 0 of P > P > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > P > P > P > DIV > DIV > BODY > HTML > #document to 3 of #text > P > P > P > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of P > SPAN > P > DIV > DIV > BODY > HTML > #document to 0 of P > SPAN > P > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > P > SPAN > P > SPAN > P > DIV > DIV > BODY > HTML > #document to 3 of #text > P > SPAN > P > SPAN > P > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -32,19 +32,35 @@ layer at (0,0) size 800x600
       RenderBlock {DIV} at (0,0) size 784x140
         RenderBlock {DIV} at (0,0) size 784x140 [border: (2px solid #FF0000)]
           RenderBlock {P} at (14,14) size 756x112
-            RenderBlock {P} at (0,0) size 756x28
-              RenderText {#text} at (0,0) size 32x28
-                text run at (0,0) width 32: "foo"
-            RenderBlock {P} at (0,28) size 756x28
-              RenderText {#text} at (0,0) size 31x28
-                text run at (0,0) width 31: "bar"
-            RenderBlock (anonymous) at (0,56) size 756x0
-            RenderBlock {P} at (0,56) size 756x56
+            RenderBlock (anonymous) at (0,0) size 756x0
+              RenderInline {SPAN} at (0,0) size 0x0
+            RenderBlock (anonymous) at (0,0) size 756x28
               RenderBlock {P} at (0,0) size 756x28
                 RenderText {#text} at (0,0) size 32x28
                   text run at (0,0) width 32: "foo"
-              RenderBlock {P} at (0,28) size 756x28
+            RenderBlock (anonymous) at (0,28) size 756x0
+              RenderInline {SPAN} at (0,0) size 0x0
+              RenderInline {SPAN} at (0,0) size 0x0
+            RenderBlock (anonymous) at (0,28) size 756x84
+              RenderBlock {P} at (0,0) size 756x28
                 RenderText {#text} at (0,0) size 31x28
                   text run at (0,0) width 31: "bar"
-              RenderBlock (anonymous) at (0,56) size 756x0
-caret: position 3 of child 0 {#text} of child 1 {P} of child 2 {P} of child 0 {P} of child 1 {DIV} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+              RenderBlock {P} at (0,28) size 756x56
+                RenderBlock (anonymous) at (0,0) size 756x0
+                  RenderInline {SPAN} at (0,0) size 0x0
+                RenderBlock (anonymous) at (0,0) size 756x28
+                  RenderBlock {P} at (0,0) size 756x28
+                    RenderText {#text} at (0,0) size 32x28
+                      text run at (0,0) width 32: "foo"
+                RenderBlock (anonymous) at (0,28) size 756x0
+                  RenderInline {SPAN} at (0,0) size 0x0
+                  RenderInline {SPAN} at (0,0) size 0x0
+                RenderBlock (anonymous) at (0,28) size 756x28
+                  RenderBlock {P} at (0,0) size 756x28
+                    RenderText {#text} at (0,0) size 31x28
+                      text run at (0,0) width 31: "bar"
+                RenderBlock (anonymous) at (0,56) size 756x0
+                  RenderInline {SPAN} at (0,0) size 0x0
+            RenderBlock (anonymous) at (0,112) size 756x0
+              RenderInline {SPAN} at (0,0) size 0x0
+caret: position 3 of child 0 {#text} of child 0 {P} of child 1 {SPAN} of child 1 {P} of child 1 {SPAN} of child 0 {P} of child 1 {DIV} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 928d6c0..052a4a9 100644 (file)
@@ -44,10 +44,13 @@ layer at (0,0) size 800x600
               RenderText {#text} at (0,0) size 319x28
                 text run at (0,0) width 319: "Should be first line of document."
               RenderBR {BR} at (319,22) size 0x0
-            RenderBlock {P} at (0,28) size 756x28
-              RenderText {#text} at (0,0) size 130x28
-                text run at (0,0) width 130: "***TEST***"
+              RenderInline {SPAN} at (0,0) size 0x0
+            RenderBlock (anonymous) at (0,28) size 756x28
+              RenderBlock {P} at (0,0) size 756x28
+                RenderText {#text} at (0,0) size 130x28
+                  text run at (0,0) width 130: "***TEST***"
             RenderBlock (anonymous) at (0,56) size 756x56
+              RenderInline {SPAN} at (0,0) size 0x0
               RenderBR {BR} at (0,0) size 0x28
               RenderText {#text} at (0,28) size 128x28
                 text run at (0,28) width 128: "Another line."
index 236dd50..26680f8 100644 (file)
@@ -40,10 +40,14 @@ layer at (0,0) size 800x600
           RenderBlock {DIV} at (2,30) size 780x28
             RenderBR {BR} at (0,0) size 0x28
           RenderBlock {DIV} at (2,58) size 780x56
-            RenderBlock {DIV} at (0,0) size 780x28
-              RenderText {#text} at (0,0) size 36x28
-                text run at (0,0) width 36: "two"
+            RenderBlock (anonymous) at (0,0) size 780x0
+              RenderInline {SPAN} at (0,0) size 0x0
+            RenderBlock (anonymous) at (0,0) size 780x28
+              RenderBlock {DIV} at (0,0) size 780x28
+                RenderText {#text} at (0,0) size 36x28
+                  text run at (0,0) width 36: "two"
             RenderBlock (anonymous) at (0,28) size 780x28
+              RenderInline {SPAN} at (0,0) size 0x0
               RenderBR {BR} at (0,0) size 0x28
           RenderBlock {DIV} at (2,114) size 780x28
             RenderText {#text} at (0,0) size 49x28
index 611d436..f71d23e 100644 (file)
@@ -4,10 +4,10 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 1 of #text > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 2 of #text > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 2 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -19,13 +19,14 @@ layer at (0,0) size 800x600
         RenderInline {SPAN} at (0,0) size 155x28
           RenderText {#text} at (14,14) size 11x28
             text run at (14,14) width 11: "a"
-          RenderInline {SPAN} at (0,0) size 23x28
-            RenderText {#text} at (25,14) size 23x28
-              text run at (25,14) width 23: "ax"
+          RenderInline {SPAN} at (0,0) size 23x18
+            RenderInline {SPAN} at (0,0) size 23x28
+              RenderText {#text} at (25,14) size 23x28
+                text run at (25,14) width 23: "ax"
           RenderInline {SPAN} at (0,0) size 110x28
             RenderText {#text} at (48,14) size 110x28
               text run at (48,14) width 110: "\x{9}\x{9}\x{9}"
           RenderText {#text} at (158,14) size 11x28
             text run at (158,14) width 11: "z"
         RenderText {#text} at (0,0) size 0x0
-caret: position 2 of child 0 {#text} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 2 of child 0 {#text} of child 0 {SPAN} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index dc054a0..0a8b680 100644 (file)
@@ -5,10 +5,10 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 2 of #text > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 2 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -23,13 +23,14 @@ layer at (0,0) size 800x600
           RenderInline {SPAN} at (0,0) size 37x28
             RenderText {#text} at (25,14) size 37x28
               text run at (25,14) width 37: "\x{9}"
-          RenderInline {SPAN} at (0,0) size 23x28
-            RenderText {#text} at (62,14) size 23x28
-              text run at (62,14) width 23: "ax"
+          RenderInline {SPAN} at (0,0) size 23x18
+            RenderInline {SPAN} at (0,0) size 23x28
+              RenderText {#text} at (62,14) size 23x28
+                text run at (62,14) width 23: "ax"
           RenderInline {SPAN} at (0,0) size 73x28
             RenderText {#text} at (85,14) size 73x28
               text run at (85,14) width 73: "\x{9}\x{9}"
           RenderText {#text} at (158,14) size 11x28
             text run at (158,14) width 11: "z"
         RenderText {#text} at (0,0) size 0x0
-caret: position 2 of child 0 {#text} of child 2 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 2 of child 0 {#text} of child 0 {SPAN} of child 2 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 59f60f3..c93272e 100644 (file)
@@ -7,10 +7,10 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 3 of #text > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > SPAN > SPAN > DIV > BODY > HTML > #document to 2 of #text > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 1 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document toDOMRange:range from 2 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document to 2 of #text > SPAN > SPAN > SPAN > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -25,10 +25,11 @@ layer at (0,0) size 800x600
           RenderInline {SPAN} at (0,0) size 133x28
             RenderText {#text} at (25,14) size 133x28
               text run at (25,14) width 133: "\x{9}\x{9}\x{9}"
-          RenderInline {SPAN} at (0,0) size 23x28
-            RenderText {#text} at (158,14) size 23x28
-              text run at (158,14) width 23: "ax"
+          RenderInline {SPAN} at (0,0) size 23x18
+            RenderInline {SPAN} at (0,0) size 23x28
+              RenderText {#text} at (158,14) size 23x28
+                text run at (158,14) width 23: "ax"
           RenderText {#text} at (181,14) size 11x28
             text run at (181,14) width 11: "z"
         RenderText {#text} at (0,0) size 0x0
-caret: position 2 of child 0 {#text} of child 2 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 2 of child 0 {#text} of child 0 {SPAN} of child 2 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 1428d1b..dfad349 100644 (file)
Binary files a/LayoutTests/editing/pasteboard/styled-element-markup-expected.png and b/LayoutTests/editing/pasteboard/styled-element-markup-expected.png differ
index eb4b2e7..8486d17 100644 (file)
@@ -22,9 +22,14 @@ layer at (0,0) size 800x600
           text run at (0,0) width 334: "This tests copy/paste of styled elements, like images. "
           text run at (334,0) width 438: "The image in the region below should be centered after its copied and"
           text run at (0,18) width 44: "pasted."
-      RenderBlock {DIV} at (0,52) size 784x103
+      RenderBlock {P} at (0,52) size 784x36
+        RenderInline {B} at (0,0) size 778x36
+          RenderText {#text} at (0,0) size 778x36
+            text run at (0,0) width 778: "This demonstrates a bug: createMarkup puts the text-align property on the image, which doesn't center it, so its left"
+            text run at (0,18) width 113: "aligned on paste."
+      RenderBlock {DIV} at (0,104) size 784x103
         RenderBlock {CENTER} at (0,0) size 784x103
           RenderImage {IMG} at (354,0) size 76x103
-      RenderBlock {DIV} at (0,155) size 784x103
-        RenderImage {IMG} at (354,0) size 76x103
-caret: position 1 of child 0 {IMG} of child 4 {DIV} of child 0 {BODY} of child 0 {HTML} of document
+      RenderBlock {DIV} at (0,207) size 784x103
+        RenderImage {IMG} at (0,0) size 76x103
+caret: position 1 of child 0 {IMG} of child 6 {DIV} of child 0 {BODY} of child 0 {HTML} of document
index 101714b..06b12e8 100644 (file)
@@ -1,4 +1,5 @@
 <p>This tests copy/paste of styled elements, like images.  The image in the region below should be centered after its copied and pasted.</p>
+<p><b>This demonstrates a bug: createMarkup puts the text-align property on the image, which doesn't center it, so its left aligned on paste.</b></p>
 <div contenteditable="true" id="copy"><center><img src="../resources/abe.jpg"></center></div>
 <div contenteditable="true" id="paste"></div>
 
index aedadd9..89b19f8 100644 (file)
@@ -2,7 +2,7 @@ EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML
 EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > FONT > DIV > DIV > DIV > DIV > BODY > HTML > #document to 3 of #text > FONT > DIV > DIV > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > SPAN > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -19,11 +19,13 @@ layer at (0,0) size 800x600
           RenderBlock (anonymous) at (2,2) size 780x28
             RenderText {#text} at (0,0) size 32x28
               text run at (0,0) width 32: "foo"
-          RenderBlock {DIV} at (2,30) size 780x28
-            RenderBlock {DIV} at (0,0) size 780x28
-              RenderInline {FONT} at (0,0) size 31x28 [color=#FF0000]
+            RenderInline {SPAN} at (0,0) size 0x18
+          RenderBlock (anonymous) at (2,30) size 780x28
+            RenderBlock {DIV} at (0,0) size 780x28 [color=#FF0000]
+              RenderBlock {DIV} at (0,0) size 780x28
                 RenderText {#text} at (0,0) size 31x28
                   text run at (0,0) width 31: "bar"
           RenderBlock (anonymous) at (2,58) size 780x0
+            RenderInline {SPAN} at (0,0) size 0x0
           RenderBlock {DIV} at (2,58) size 780x0 [color=#FF0000]
-caret: position 3 of child 0 {#text} of child 0 {FONT} of child 0 {DIV} of child 1 {DIV} of child 1 {DIV} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 3 of child 0 {#text} of child 0 {DIV} of child 0 {DIV} of child 1 {SPAN} of child 1 {DIV} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 7c5e0c6..910f5b3 100644 (file)
@@ -15,7 +15,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 2 of #text > SPAN > DIV > DIV > BODY > HTML > #document to 2 of #text > SPAN > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > FONT > SPAN > DIV > DIV > BODY > HTML > #document to 3 of #text > FONT > SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > SPAN > SPAN > DIV > DIV > BODY > HTML > #document to 3 of #text > SPAN > SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -51,12 +51,12 @@ layer at (0,0) size 800x600
           RenderInline {SPAN} at (0,0) size 77x28 [color=#FF0000]
             RenderText {#text} at (2,2) size 23x28
               text run at (2,2) width 23: "ab"
-            RenderInline {FONT} at (0,0) size 54x28 [color=#000000]
+            RenderInline {SPAN} at (0,0) size 54x28 [color=#000000]
               RenderText {#text} at (25,2) size 34x28
                 text run at (25,2) width 34: "cde"
-              RenderInline {SPAN} at (0,0) size 20x28
-                RenderInline {FONT} at (0,0) size 20x28 [color=#FF0000]
+              RenderInline {SPAN} at (0,0) size 20x18
+                RenderInline {SPAN} at (0,0) size 20x28 [color=#FF0000]
                   RenderText {#text} at (59,2) size 20x28
                     text run at (59,2) width 20: "fg"
         RenderBlock (anonymous) at (0,32) size 784x0
-caret: position 3 of child 0 {#text} of child 1 {FONT} of child 1 {SPAN} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 3 of child 0 {#text} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index d131677..3b35d60 100644 (file)
@@ -15,7 +15,7 @@ EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotificatio
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 2 of #text > SPAN > DIV > DIV > BODY > HTML > #document to 2 of #text > SPAN > DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
-EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > B > SPAN > FONT > SPAN > DIV > DIV > BODY > HTML > #document to 3 of #text > B > SPAN > FONT > SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > SPAN > SPAN > DIV > DIV > BODY > HTML > #document to 3 of #text > SPAN > SPAN > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -50,15 +50,12 @@ layer at (0,0) size 800x600
           RenderInline {SPAN} at (0,0) size 99x28 [color=#FF0000]
             RenderText {#text} at (2,8) size 29x28
               text run at (2,8) width 29: "ab"
-            RenderInline {FONT} at (0,0) size 70x37 [color=#000000]
-              RenderInline {SPAN} at (0,0) size 70x37
-                RenderInline {B} at (0,0) size 70x37
-                  RenderText {#text} at (31,2) size 46x37
-                    text run at (31,2) width 46: "cde"
-                  RenderInline {SPAN} at (0,0) size 24x37
-                    RenderInline {FONT} at (0,0) size 24x37 [color=#FF0000]
-                      RenderInline {SPAN} at (0,0) size 24x28
-                        RenderText {#text} at (77,8) size 24x28
-                          text run at (77,8) width 24: "fg"
+            RenderInline {SPAN} at (0,0) size 70x37 [color=#000000]
+              RenderText {#text} at (31,2) size 46x37
+                text run at (31,2) width 46: "cde"
+              RenderInline {SPAN} at (0,0) size 24x18
+                RenderInline {SPAN} at (0,0) size 24x28 [color=#FF0000]
+                  RenderText {#text} at (77,8) size 24x28
+                    text run at (77,8) width 24: "fg"
         RenderBlock (anonymous) at (0,41) size 784x0
-caret: position 3 of child 0 {#text} of child 0 {B} of child 0 {SPAN} of child 1 {FONT} of child 1 {SPAN} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 3 of child 0 {#text} of child 1 {SPAN} of child 1 {SPAN} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index 5a1972f..17f03b5 100644 (file)
@@ -1,3 +1,18 @@
+2006-08-22  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by harrison
+
+        <rdar://problem/4052343&4052343&4426622> Mail hung on paste text
+        
+        * editing/ReplaceSelectionCommand.cpp:
+        (WebCore::isInterchangeNewlineNode):
+        (WebCore::isInterchangeConvertedSpaceSpan):
+        (WebCore::ReplacementFragment::ReplacementFragment):
+        (WebCore::ReplaceSelectionCommand::removeRedundantStyles): Compute the redundant inheritable styles and
+        remove them and remove style nodes and style spans which were only contributing redundant styles.
+        (WebCore::ReplaceSelectionCommand::doApply):
+        * editing/ReplaceSelectionCommand.h:
+
 2006-08-22  David Harrison  <harrison@apple.com>
 
         Reviewed by Darin.
index ce67708..e236e64 100644 (file)
@@ -48,6 +48,20 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+static bool isInterchangeNewlineNode(const Node *node)
+{
+    static String interchangeNewlineClassString(AppleInterchangeNewline);
+    return node && node->hasTagName(brTag) && 
+           static_cast<const Element *>(node)->getAttribute(classAttr) == interchangeNewlineClassString;
+}
+
+static bool isInterchangeConvertedSpaceSpan(const Node *node)
+{
+    static String convertedSpaceSpanClassString(AppleConvertedSpace);
+    return node->isHTMLElement() && 
+           static_cast<const HTMLElement *>(node)->getAttribute(classAttr) == convertedSpaceSpanClassString;
+}
+
 ReplacementFragment::ReplacementFragment(Document* document, DocumentFragment* fragment, bool matchStyle, const Selection& selection)
     : m_document(document),
       m_fragment(fragment),
@@ -122,11 +136,9 @@ ReplacementFragment::ReplacementFragment(Document* document, DocumentFragment* f
     if (newlineAtEndNode)
         removeNode(newlineAtEndNode);
     
-    saveRenderingInfo(holder.get());
     removeUnrenderedNodes(holder.get());
     restoreTestRenderingNodesToFragment(holder.get());
     removeNode(holder);
-    removeStyleNodes();
 }
 
 bool ReplacementFragment::isEmpty() const
@@ -144,20 +156,6 @@ Node *ReplacementFragment::lastChild() const
     return m_fragment->lastChild(); 
 }
 
-bool ReplacementFragment::isInterchangeNewlineNode(const Node *node)
-{
-    static String interchangeNewlineClassString(AppleInterchangeNewline);
-    return node && node->hasTagName(brTag) && 
-           static_cast<const Element *>(node)->getAttribute(classAttr) == interchangeNewlineClassString;
-}
-
-bool ReplacementFragment::isInterchangeConvertedSpaceSpan(const Node *node)
-{
-    static String convertedSpaceSpanClassString(AppleConvertedSpace);
-    return node->isHTMLElement() && 
-           static_cast<const HTMLElement *>(node)->getAttribute(classAttr) == convertedSpaceSpanClassString;
-}
-
 void ReplacementFragment::removeNodePreservingChildren(Node *node)
 {
     if (!node)
@@ -244,109 +242,6 @@ void ReplacementFragment::restoreTestRenderingNodesToFragment(Node *holder)
     }
 }
 
-static String &matchNearestBlockquoteColorString()
-{
-    static String matchNearestBlockquoteColorString = "match";
-    return matchNearestBlockquoteColorString;
-}
-
-void ReplaceSelectionCommand::fixupNodeStyles(const NodeVector& nodes, const RenderingInfoMap& renderingInfo)
-{
-    // This function uses the mapped "desired style" to apply the additional style needed, if any,
-    // to make the node have the desired style.
-
-    updateLayout();
-    
-    NodeVector::const_iterator e = nodes.end();
-    for (NodeVector::const_iterator it = nodes.begin(); it != e; ++it) {
-        Node *node = (*it).get();
-        RefPtr<RenderingInfo> info = renderingInfo.get(node);
-        ASSERT(info);
-        if (!info)
-            continue;
-        CSSMutableStyleDeclaration *desiredStyle = info->style();
-        ASSERT(desiredStyle);
-
-        if (!node->inDocument())
-            continue;
-
-        // The desiredStyle declaration tells what style this node wants to be.
-        // Compare that to the style that it is right now in the document.
-        Position pos(node, 0);
-        RefPtr<CSSComputedStyleDeclaration> currentStyle = pos.computedStyle();
-
-        // Check for the special "match nearest blockquote color" property and resolve to the correct
-        // color if necessary.
-        String matchColorCheck = desiredStyle->getPropertyValue(CSS_PROP__WEBKIT_MATCH_NEAREST_MAIL_BLOCKQUOTE_COLOR);
-        if (matchColorCheck == matchNearestBlockquoteColorString()) {
-            Node *blockquote = nearestMailBlockquote(node);
-            Position pos(blockquote ? blockquote : node->document()->documentElement(), 0);
-            RefPtr<CSSComputedStyleDeclaration> style = pos.computedStyle();
-            String desiredColor = desiredStyle->getPropertyValue(CSS_PROP_COLOR);
-            String nearestColor = style->getPropertyValue(CSS_PROP_COLOR);
-            if (desiredColor != nearestColor)
-                desiredStyle->setProperty(CSS_PROP_COLOR, nearestColor);
-        }
-        desiredStyle->removeProperty(CSS_PROP__WEBKIT_MATCH_NEAREST_MAIL_BLOCKQUOTE_COLOR);
-
-        currentStyle->diff(desiredStyle);
-        
-        // Only add in block properties if the node is at the start of a 
-        // paragraph. This matches AppKit.
-        if (!isStartOfParagraph(VisiblePosition(pos, DOWNSTREAM)))
-            desiredStyle->removeBlockProperties();
-        
-        // If the desiredStyle is non-zero length, that means the current style differs
-        // from the desired by the styles remaining in the desiredStyle declaration.
-        if (desiredStyle->length() > 0)
-            applyStyle(desiredStyle, Position(node, 0), Position(node, maxDeepOffset(node)));
-    }
-}
-
-static PassRefPtr<CSSMutableStyleDeclaration> styleForNode(Node *node)
-{
-    if (!node || !node->inDocument())
-        return 0;
-        
-    RefPtr<CSSComputedStyleDeclaration> computedStyle = Position(node, 0).computedStyle();
-    RefPtr<CSSMutableStyleDeclaration> style = computedStyle->copyInheritableProperties();
-
-    // In either of the color-matching tests below, set the color to a pseudo-color that will
-    // make the content take on the color of the nearest-enclosing blockquote (if any) after
-    // being pasted in.
-    if (Node *blockquote = nearestMailBlockquote(node)) {
-        RefPtr<CSSComputedStyleDeclaration> blockquoteStyle = Position(blockquote, 0).computedStyle();
-        bool match = (blockquoteStyle->getPropertyValue(CSS_PROP_COLOR) == style->getPropertyValue(CSS_PROP_COLOR));
-        if (match) {
-            style->setProperty(CSS_PROP__WEBKIT_MATCH_NEAREST_MAIL_BLOCKQUOTE_COLOR, matchNearestBlockquoteColorString());
-            return style.release();
-        }
-    }
-    Node *documentElement = node->document()->documentElement();
-    RefPtr<CSSComputedStyleDeclaration> documentStyle = Position(documentElement, 0).computedStyle();
-    bool match = (documentStyle->getPropertyValue(CSS_PROP_COLOR) == style->getPropertyValue(CSS_PROP_COLOR));
-    if (match)
-        style->setProperty(CSS_PROP__WEBKIT_MATCH_NEAREST_MAIL_BLOCKQUOTE_COLOR, matchNearestBlockquoteColorString());
-        
-    return style.release();
-}
-
-void ReplacementFragment::saveRenderingInfo(Node *holder)
-{
-    m_document->updateLayoutIgnorePendingStylesheets();
-    
-    if (m_matchStyle) {
-        // No style restoration will be done, so we don't need to save styles or keep a node vector.
-        for (Node *node = holder->firstChild(); node; node = node->traverseNextNode(holder))
-            m_renderingInfo.add(node, new RenderingInfo(0));
-    } else {
-        for (Node *node = holder->firstChild(); node; node = node->traverseNextNode(holder)) {
-            m_renderingInfo.add(node, new RenderingInfo(styleForNode(node)));
-            m_nodes.append(node);
-        }
-    }
-}
-
 void ReplacementFragment::removeUnrenderedNodes(Node *holder)
 {
     DeprecatedPtrList<Node> unrendered;
@@ -360,51 +255,6 @@ void ReplacementFragment::removeUnrenderedNodes(Node *holder)
         removeNode(it.current());
 }
 
-void ReplacementFragment::removeStyleNodes()
-{
-    // Since style information has been computed and cached away in
-    // computeStylesUsingTestRendering(), these style nodes can be removed, since
-    // the correct styles will be added back in fixupNodeStyles().
-    Node *node = m_fragment->firstChild();
-    while (node) {
-        Node *next = node->traverseNextNode();
-        // This list of tags change the appearance of content
-        // in ways we can add back on later with CSS, if necessary.
-        //  FIXME: This list is incomplete
-        if (node->hasTagName(bTag) || 
-            node->hasTagName(bigTag) || 
-            node->hasTagName(centerTag) || 
-            node->hasTagName(fontTag) || 
-            node->hasTagName(iTag) || 
-            node->hasTagName(sTag) || 
-            node->hasTagName(smallTag) || 
-            node->hasTagName(strikeTag) || 
-            node->hasTagName(subTag) || 
-            node->hasTagName(supTag) || 
-            node->hasTagName(ttTag) || 
-            node->hasTagName(uTag) || 
-            isStyleSpan(node)) {
-            removeNodePreservingChildren(node);
-        }
-        // need to skip tab span because fixupNodeStyles() is not called
-        // when replace is matching style
-        else if (node->isHTMLElement() && !isTabSpanNode(node)) {
-            HTMLElement *elem = static_cast<HTMLElement *>(node);
-            CSSMutableStyleDeclaration *inlineStyleDecl = elem->inlineStyleDecl();
-            if (inlineStyleDecl) {
-                inlineStyleDecl->removeBlockProperties();
-                inlineStyleDecl->removeInheritableProperties();
-            }
-        }
-        node = next;
-    }
-}
-
-RenderingInfo::RenderingInfo(PassRefPtr<CSSMutableStyleDeclaration> style)
-    : m_style(style)
-{
-}
-
 ReplaceSelectionCommand::ReplaceSelectionCommand(Document* document, DocumentFragment* fragment, bool selectReplacement, bool smartReplace, bool matchStyle, bool preventNesting, EditAction editAction) 
     : CompositeEditCommand(document),
       m_selectReplacement(selectReplacement), 
@@ -460,6 +310,105 @@ bool ReplaceSelectionCommand::shouldMerge(const VisiblePosition& from, const Vis
            !fromNode->hasTagName(hrTag) && !toNode->hasTagName(hrTag);
 }
 
+void ReplaceSelectionCommand::removeRedundantStyles()
+{
+    typedef HashMap<Node*, RefPtr<CSSMutableStyleDeclaration> > NodeStyleMap;
+
+    Node* node = m_firstNodeInserted.get();
+    
+    // There's usually a top level style span that holds the document's default style, push it down.
+    if (isStyleSpan(node)) {
+        
+        RefPtr<CSSMutableStyleDeclaration> parentStyle = Position(node, 0).computedStyle()->copyInheritableProperties();
+        
+        RefPtr<Node> child = node->firstChild();
+        while (child) {
+            Node* next = child->nextSibling();
+            if (isStyleSpan(child.get())) {
+                HTMLElement* elem = static_cast<HTMLElement*>(child.get());
+                CSSMutableStyleDeclaration* inlineStyleDecl = elem->inlineStyleDecl();
+                inlineStyleDecl->merge(parentStyle.get(), false);
+                setNodeAttribute(elem, styleAttr, inlineStyleDecl->cssText());
+            } else if (node->isElementNode()) {
+                RefPtr<Node> clone = node->cloneNode(false);
+                int index = child->nodeIndex();
+                removeNode(child.get());
+                insertNodeAt(clone.get(), node, index);
+                appendNode(child.get(), clone.get());
+            }
+            child = next;
+        }
+        
+        if (m_firstNodeInserted == node)
+            m_firstNodeInserted = node->firstChild();
+        if (m_lastNodeInserted == node)
+            m_lastNodeInserted = node->lastChild();
+        removeNodePreservingChildren(node);
+    }
+    
+    node = m_firstNodeInserted.get();
+    
+    // Compute and save the non-redundant styles for all Elements.  Don't do any mutation here, because
+    // that would cause the diffs to trigger layouts.
+    NodeStyleMap map;
+    while (node) {
+        Node* next = node->traverseNextNode();
+        
+        if (!node->isHTMLElement()) {
+            node = next;
+            continue;
+        }
+        
+        RefPtr<CSSMutableStyleDeclaration> style = Position(node, 0).computedStyle()->copyInheritableProperties();
+        RefPtr<CSSMutableStyleDeclaration> parentStyle = Position(node->parentNode(), 0).computedStyle()->copyInheritableProperties();
+        
+        parentStyle->diff(style.get());
+        map.add(node, style);
+        
+        if (node == m_lastNodeInserted.get())
+            break;
+            
+        node = next;
+    }
+    
+    NodeStyleMap::const_iterator e = map.end();
+    for (NodeStyleMap::const_iterator it = map.begin(); it != e; ++it) {
+        Node *node = it->first;
+        
+        // Remove empty style spans.
+        if (isStyleSpan(node) && !node->firstChild()) {
+            removeNodeAndPruneAncestors(node);
+            continue;
+        }
+        
+        RefPtr<CSSMutableStyleDeclaration> style = it->second;
+        if (style->length() == 0) {
+            // Remove redundant style tags and style spans.
+            if (isStyleSpan(node) ||
+                node->hasTagName(bTag) ||
+                node->hasTagName(fontTag) ||
+                node->hasTagName(iTag) ||
+                node->hasTagName(uTag)) {
+                if (node == m_firstNodeInserted.get())
+                    m_firstNodeInserted = node->traverseNextNode();
+                if (node == m_lastNodeInserted.get())
+                    m_lastNodeInserted = node->traverseNextNode();
+                removeNodePreservingChildren(node);
+                continue;
+            }
+        }
+        
+        // Clear redundant styles from elements.
+        HTMLElement* elem = static_cast<HTMLElement*>(node);
+        CSSMutableStyleDeclaration* inlineStyleDecl = elem->inlineStyleDecl();
+        if (inlineStyleDecl) {
+            inlineStyleDecl->removeInheritableProperties();
+            inlineStyleDecl->merge(style.get(), true);
+            setNodeAttribute(elem, styleAttr, inlineStyleDecl->cssText());
+        }
+    }
+}
+
 void ReplaceSelectionCommand::doApply()
 {
     Selection selection = endingSelection();
@@ -589,6 +538,8 @@ void ReplaceSelectionCommand::doApply()
         node = next;
     }
     
+    removeRedundantStyles();
+    
     endOfInsertedContent = VisiblePosition(Position(m_lastNodeInserted.get(), maxDeepOffset(m_lastNodeInserted.get())));
     startOfInsertedContent = VisiblePosition(Position(m_firstNodeInserted.get(), 0));
     
@@ -609,10 +560,6 @@ void ReplaceSelectionCommand::doApply()
         } else
             removeNodeAndPruneAncestors(endBR);
     }
-    
-    // Styles were removed during the test insertion.  Restore them.
-    if (!m_matchStyle)
-        fixupNodeStyles(fragment.nodes(), fragment.renderingInfo());
         
     if (shouldMergeStart(selectionStartWasStartOfParagraph, fragment.hasInterchangeNewlineAtStart())) {
         VisiblePosition destination = startOfInsertedContent.previous();
@@ -622,7 +569,6 @@ void ReplaceSelectionCommand::doApply()
         m_firstNodeInserted = endingSelection().visibleStart().deepEquivalent().downstream().node();
         if (!m_lastNodeInserted->inDocument())
             m_lastNodeInserted = endingSelection().visibleEnd().deepEquivalent().downstream().node();
-    
     }
             
     endOfInsertedContent = VisiblePosition(Position(m_lastNodeInserted.get(), maxDeepOffset(m_lastNodeInserted.get())));
index 54d8049..b5fa7a4 100644 (file)
@@ -36,18 +36,6 @@ class DocumentFragment;
 
 enum EFragmentType { EmptyFragment, SingleTextNodeFragment, TreeFragment };
 
-class RenderingInfo : public Shared<RenderingInfo> {
-public:
-    RenderingInfo(PassRefPtr<CSSMutableStyleDeclaration>);
-    
-    CSSMutableStyleDeclaration* style() const { return m_style.get(); }
-private:
-    RefPtr<CSSMutableStyleDeclaration> m_style;
-};
-
-typedef Vector<RefPtr<Node> > NodeVector;
-typedef HashMap<Node*, RefPtr<RenderingInfo> > RenderingInfoMap;
-
 // --- ReplacementFragment helper class
 
 class ReplacementFragment : Noncopyable
@@ -58,11 +46,6 @@ public:
     Node* firstChild() const;
     Node* lastChild() const;
 
-    Node* mergeStartNode() const;
-
-    const RenderingInfoMap& renderingInfo() const { return m_renderingInfo; }
-    const NodeVector& nodes() const { return m_nodes; }
-
     bool isEmpty() const;
     
     bool hasInterchangeNewlineAtStart() const { return m_hasInterchangeNewlineAtStart; }
@@ -70,24 +53,16 @@ public:
     
     void removeNode(PassRefPtr<Node>);
 
-private:    
-    static bool isInterchangeNewlineNode(const Node*);
-    static bool isInterchangeConvertedSpaceSpan(const Node*);
-    
+private:
     PassRefPtr<Node> insertFragmentForTestRendering(Node* context);
-    void saveRenderingInfo(Node*);
-    void computeStylesUsingTestRendering(Node*);
     void removeUnrenderedNodes(Node*);
     void restoreTestRenderingNodesToFragment(Node*);
-    void removeStyleNodes();
     
     void removeNodePreservingChildren(Node*);
     void insertNodeBefore(Node* node, Node* refNode);
 
     RefPtr<Document> m_document;
     RefPtr<DocumentFragment> m_fragment;
-    RenderingInfoMap m_renderingInfo;
-    NodeVector m_nodes;
     bool m_matchStyle;
     bool m_hasInterchangeNewlineAtStart;
     bool m_hasInterchangeNewlineAtEnd;
@@ -109,12 +84,13 @@ private:
     void insertNodeBeforeAndUpdateNodesInserted(Node *insertChild, Node *refChild);
 
     void updateNodesInserted(Node*);
-    void fixupNodeStyles(const NodeVector&, const RenderingInfoMap&);
     bool shouldRemoveEndBR(Node*);
     
     bool shouldMergeStart(bool, bool);
     bool shouldMergeEnd(bool);
     bool shouldMerge(const VisiblePosition&, const VisiblePosition&);
+    
+    void removeRedundantStyles();
 
     RefPtr<Node> m_firstNodeInserted;
     RefPtr<Node> m_lastNodeInserted;