JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.3
[ckeditor.git] / _source / core / htmlparser / fragment.js
index f69f7cd..a80fd1d 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -194,6 +194,13 @@ CKEDITOR.htmlParser.fragment = function()
 \r
                        target.add( element );\r
 \r
+                       if ( element.name == 'pre' )\r
+                               inPre = false;\r
+\r
+                       if ( element.name == 'textarea' )\r
+                               inTextarea = false;\r
+\r
+\r
                        if ( element.returnPoint )\r
                        {\r
                                currentNode = element.returnPoint;\r
@@ -360,12 +367,6 @@ CKEDITOR.htmlParser.fragment = function()
 \r
                                currentNode = candidate;\r
 \r
-                               if ( currentNode.name == 'pre' )\r
-                                       inPre = false;\r
-\r
-                               if ( currentNode.name == 'textarea' )\r
-                                       inTextarea = false;\r
-\r
                                if ( candidate._.isBlockLike )\r
                                        sendPendingBRs();\r
 \r
@@ -394,6 +395,24 @@ CKEDITOR.htmlParser.fragment = function()
                                        return;\r
                        }\r
 \r
+                       var currentName = currentNode.name,\r
+                       currentDtd = currentName ? ( CKEDITOR.dtd[ currentName ]\r
+                                                       || ( currentNode._.isBlockLike ?\r
+                                                                CKEDITOR.dtd.div : CKEDITOR.dtd.span ) ) : rootDtd;\r
+\r
+                       // Fix orphan text in list/table. (#8540) (#8870)\r
+                       if ( !inTextarea &&\r
+                                !currentDtd [ '#' ] &&\r
+                                currentName in nonBreakingBlocks )\r
+                       {\r
+                               parser.onTagOpen( currentName in listBlocks ? 'li' :\r
+                                                                 currentName == 'dl' ? 'dd' :\r
+                                                                 currentName == 'table' ? 'tr' :\r
+                                                                 currentName == 'tr' ? 'td' : '' );\r
+                               parser.onText( text );\r
+                               return;\r
+                       }\r
+\r
                        sendPendingBRs();\r
                        checkPending();\r
 \r