/*\r
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
\r
/**\r
- * HTML text parser.\r
- * @constructor\r
+ * Creates a {@link CKEDITOR.htmlParser} class instance.\r
+ * @class Provides an "event like" system to parse strings of HTML data.\r
* @example\r
+ * var parser = new CKEDITOR.htmlParser();\r
+ * parser.onTagOpen = function( tagName, attributes, selfClosing )\r
+ * {\r
+ * alert( tagName );\r
+ * };\r
+ * parser.parse( '<p>Some <b>text</b>.</p>' );\r
*/\r
CKEDITOR.htmlParser = function()\r
{\r
\r
(function()\r
{\r
- var attribsRegex = /([\w:]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,\r
+ var attribsRegex = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,\r
emptyAttribs = {checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};\r
\r
CKEDITOR.htmlParser.prototype =\r
* @param {String} comment The comment text.\r
* @example\r
* var parser = new CKEDITOR.htmlParser();\r
- * parser.onText = function( comment )\r
+ * parser.onComment = function( comment )\r
* {\r
* alert( comment ); // e.g. " Example "\r
* });\r
if ( ( tagName = parts[ 3 ] ) )\r
{\r
tagName = tagName.toLowerCase();\r
+\r
+ // There are some tag names that can break things, so let's\r
+ // simply ignore them when parsing. (#5224)\r
+ if ( /="/.test( tagName ) )\r
+ continue;\r
+\r
var attribs = {},\r
attribMatch,\r
attribsPart = parts[ 4 ],\r
}\r
\r
// Comment\r
- if( ( tagName = parts[ 2 ] ) )\r
+ if ( ( tagName = parts[ 2 ] ) )\r
this.onComment( tagName );\r
}\r
\r