X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fcore%2Fhtmlparser%2Ffragment.js;h=a80fd1d57c0d042eeb08adc3b71121e39da0d977;hb=refs%2Ftags%2Fv3.6.3;hp=f69f7cdca5a42b1ea0b63a5b353e5ca20a81f35b;hpb=e73319a12b56100b29ef456fd74114fe5519e01c;p=ckeditor.git diff --git a/_source/core/htmlparser/fragment.js b/_source/core/htmlparser/fragment.js index f69f7cd..a80fd1d 100644 --- a/_source/core/htmlparser/fragment.js +++ b/_source/core/htmlparser/fragment.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ @@ -194,6 +194,13 @@ CKEDITOR.htmlParser.fragment = function() target.add( element ); + if ( element.name == 'pre' ) + inPre = false; + + if ( element.name == 'textarea' ) + inTextarea = false; + + if ( element.returnPoint ) { currentNode = element.returnPoint; @@ -360,12 +367,6 @@ CKEDITOR.htmlParser.fragment = function() currentNode = candidate; - if ( currentNode.name == 'pre' ) - inPre = false; - - if ( currentNode.name == 'textarea' ) - inTextarea = false; - if ( candidate._.isBlockLike ) sendPendingBRs(); @@ -394,6 +395,24 @@ CKEDITOR.htmlParser.fragment = function() return; } + var currentName = currentNode.name, + currentDtd = currentName ? ( CKEDITOR.dtd[ currentName ] + || ( currentNode._.isBlockLike ? + CKEDITOR.dtd.div : CKEDITOR.dtd.span ) ) : rootDtd; + + // Fix orphan text in list/table. (#8540) (#8870) + if ( !inTextarea && + !currentDtd [ '#' ] && + currentName in nonBreakingBlocks ) + { + parser.onTagOpen( currentName in listBlocks ? 'li' : + currentName == 'dl' ? 'dd' : + currentName == 'table' ? 'tr' : + currentName == 'tr' ? 'td' : '' ); + parser.onText( text ); + return; + } + sendPendingBRs(); checkPending();