Index: _source/plugins/enterkey/plugin.js
===================================================================
--- _source/plugins/enterkey/plugin.js (revision 6682)
+++ _source/plugins/enterkey/plugin.js (revision )
@@ -272,8 +272,11 @@
isPre = ( startBlockTag == 'pre' );
+ // Old IEs prefer text node as line breaks.
+ var useTextBreak = isPre && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat );
+
// Gecko prefers
as line-break inside
(#4711). - if ( isPre && !CKEDITOR.env.gecko ) + if ( useTextBreak ) lineBreak = doc.createText( CKEDITOR.env.ie ? '\r' : '\n' ); else lineBreak = doc.createElement( 'br' ); @@ -281,8 +284,8 @@ range.deleteContents(); range.insertNode( lineBreak ); - // IE has different behavior regarding position. - if ( CKEDITOR.env.ie ) + // Text line-breaks has different behavior regarding position. + if ( useTextBreak ) range.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END ); else { @@ -292,7 +295,7 @@ doc.createText( '\ufeff' ).insertAfter( lineBreak ); // If we are at the end of a block, we must be sure the bogus node is available in that block. - if ( isEndOfBlock ) + if ( isEndOfBlock && !isPre ) lineBreak.getParent().appendBogus(); // Now we can remove the text node contents, so the caret doesn't Index: _source/core/htmlparser/fragment.js =================================================================== --- _source/core/htmlparser/fragment.js (revision 6660) +++ _source/core/htmlparser/fragment.js (revision ) @@ -383,7 +383,16 @@ // text contents. if ( !inPre ) text = text.replace( /[\t\r\n ]{2,}|[\t\r\n]/g, ' ' ); + // Use
instead of text line-breaks in pre-formatted block when possible. + else if ( !( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) + { + // The first line-break following open tag is considered as formatter in. + if ( !currentNode._.hasInlineStarted ) + text = text.replace( /^(\r\n|\n)/g, '' ); + text = text.replace( /\r\n|\n/g, '
' ); + } + currentNode.add( new CKEDITOR.htmlParser.text( text ) ); };