/*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
\r
*/\r
this.lineBreakChars = '\n';\r
\r
- this.forceSimpleAmpersand = false;\r
+ this.forceSimpleAmpersand = 0;\r
\r
- this.sortAttributes = true;\r
+ this.sortAttributes = 1;\r
\r
- this._.indent = false;\r
+ this._.indent = 0;\r
this._.indentation = '';\r
+ // Indicate preformatted block context status. (#5789)\r
+ this._.inPre = 0;\r
this._.rules = {};\r
\r
var dtd = CKEDITOR.dtd;\r
{\r
this.setRules( e,\r
{\r
- indent : true,\r
- breakBeforeOpen : true,\r
- breakAfterOpen : true,\r
+ indent : 1,\r
+ breakBeforeOpen : 1,\r
+ breakAfterOpen : 1,\r
breakBeforeClose : !dtd[ e ][ '#' ],\r
- breakAfterClose : true\r
+ breakAfterClose : 1\r
});\r
}\r
\r
this.setRules( 'br',\r
{\r
- breakAfterOpen : true\r
+ breakAfterOpen : 1\r
});\r
\r
this.setRules( 'title',\r
{\r
- indent : false,\r
- breakAfterOpen : false\r
+ indent : 0,\r
+ breakAfterOpen : 0\r
});\r
\r
this.setRules( 'style',\r
{\r
- indent : false,\r
- breakBeforeClose : true\r
+ indent : 0,\r
+ breakBeforeClose : 1\r
});\r
\r
// Disable indentation on <pre>.\r
this.setRules( 'pre',\r
{\r
- indent: false\r
+ indent : 0\r
});\r
},\r
\r
\r
if ( rules && rules.breakAfterOpen )\r
this.lineBreak();\r
+ tagName == 'pre' && ( this._.inPre = 1 );\r
},\r
\r
/**\r
if ( typeof attValue == 'string' )\r
{\r
this.forceSimpleAmpersand && ( attValue = attValue.replace( /&/g, '&' ) );\r
- // Browsers don't always escape quote in attribute values. (#4683)\r
- attValue = attValue.replace( /"/g, '"' );\r
+ // Browsers don't always escape special character in attribute values. (#4683, #4719).\r
+ attValue = CKEDITOR.tools.htmlEncodeAttr( attValue );\r
}\r
\r
this._.output.push( ' ', attName, '="', attValue, '"' );\r
}\r
\r
this._.output.push( '</', tagName, '>' );\r
+ tagName == 'pre' && ( this._.inPre = 0 );\r
\r
if ( rules && rules.breakAfterClose )\r
this.lineBreak();\r
if ( this._.indent )\r
{\r
this.indentation();\r
- text = CKEDITOR.tools.ltrim( text );\r
+ !this._.inPre && ( text = CKEDITOR.tools.ltrim( text ) );\r
}\r
\r
this._.output.push( text );\r
*/\r
lineBreak : function()\r
{\r
- if ( this._.output.length > 0 )\r
+ if ( !this._.inPre && this._.output.length > 0 )\r
this._.output.push( this.lineBreakChars );\r
- this._.indent = true;\r
+ this._.indent = 1;\r
},\r
\r
/**\r
*/\r
indentation : function()\r
{\r
- this._.output.push( this._.indentation );\r
- this._.indent = false;\r
+ if( !this._.inPre )\r
+ this._.output.push( this._.indentation );\r
+ this._.indent = 0;\r
},\r
\r
/**\r