parse5 3.0.3 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +14 -16
  2. package/lib/common/doctype.js +125 -108
  3. package/lib/common/error-codes.js +65 -0
  4. package/lib/common/foreign-content.js +265 -0
  5. package/lib/common/html.js +102 -102
  6. package/lib/common/unicode.js +81 -19
  7. package/lib/extensions/error-reporting/mixin-base.js +43 -0
  8. package/lib/extensions/error-reporting/parser-mixin.js +52 -0
  9. package/lib/extensions/error-reporting/preprocessor-mixin.js +24 -0
  10. package/lib/extensions/error-reporting/tokenizer-mixin.js +17 -0
  11. package/lib/extensions/location-info/open-element-stack-mixin.js +35 -0
  12. package/lib/extensions/location-info/parser-mixin.js +222 -0
  13. package/lib/extensions/location-info/tokenizer-mixin.js +146 -0
  14. package/lib/extensions/position-tracking/preprocessor-mixin.js +64 -0
  15. package/lib/index.js +6 -21
  16. package/lib/parser/formatting-element-list.js +181 -0
  17. package/lib/parser/index.js +1469 -1332
  18. package/lib/parser/open-element-stack.js +482 -0
  19. package/lib/serializer/index.js +136 -122
  20. package/lib/tokenizer/index.js +1856 -1804
  21. package/lib/tokenizer/{named_entity_data.js → named-entity-data.js} +1 -1
  22. package/lib/tokenizer/preprocessor.js +115 -103
  23. package/lib/tree-adapters/default.js +217 -0
  24. package/lib/utils/{merge_options.js → merge-options.js} +2 -2
  25. package/lib/utils/mixin.js +33 -12
  26. package/package.json +32 -61
  27. package/LICENSE +0 -19
  28. package/lib/common/foreign_content.js +0 -260
  29. package/lib/extensions/location_info/open_element_stack_mixin.js +0 -34
  30. package/lib/extensions/location_info/parser_mixin.js +0 -213
  31. package/lib/extensions/location_info/tokenizer_mixin.js +0 -117
  32. package/lib/extensions/position_tracking/preprocessor_mixin.js +0 -72
  33. package/lib/index.d.ts +0 -1077
  34. package/lib/parser/formatting_element_list.js +0 -167
  35. package/lib/parser/open_element_stack.js +0 -395
  36. package/lib/parser/parser_stream.js +0 -76
  37. package/lib/parser/plain_text_conversion_stream.js +0 -20
  38. package/lib/sax/dev_null_stream.js +0 -14
  39. package/lib/sax/index.js +0 -118
  40. package/lib/sax/parser_feedback_simulator.js +0 -153
  41. package/lib/serializer/serializer_stream.js +0 -28
  42. package/lib/tree_adapters/default.js +0 -209
  43. package/lib/tree_adapters/htmlparser2.js +0 -338
package/README.md CHANGED
@@ -4,31 +4,29 @@
4
4
  </a>
5
5
  </p>
6
6
 
7
- <p align="center">
8
- <i>HTML parsing/serialization toolset for Node.js. <a href="https://html.spec.whatwg.org/multipage/">WHATWG HTML Living Standard (aka HTML5)</a>-compliant.</i>
9
- </p>
7
+ <div align="center">
8
+ <h1>parse5</h1>
9
+ <i><b>HTML parser and serializer.</b></i>
10
+ </div>
11
+ <br>
10
12
 
11
- <p align="center">
12
- <a href="https://travis-ci.org/inikulin/parse5"><img alt="Build Status" src="https://api.travis-ci.org/inikulin/parse5.svg"></a>
13
- <a href="https://www.npmjs.com/package/parse5"><img alt="NPM Version" src="https://img.shields.io/npm/v/parse5.svg"></a>
14
- <a href="https://npmjs.org/package/parse5"><img alt="Downloads" src="http://img.shields.io/npm/dm/parse5.svg"></a>
15
- <a href="https://npmjs.org/package/parse5"><img alt="Downloads total" src="http://img.shields.io/npm/dt/parse5.svg"></a>
16
- </p>
13
+ <div align="center">
14
+ <code>npm install --save parse5</code>
15
+ </div>
16
+ <br>
17
17
 
18
18
  <p align="center">
19
- <b><i>parse5</i></b> provides nearly everything you may need when dealing with HTML. It's the fastest spec-compliant HTML parser
20
- for Node to date. It parses HTML the way the latest version of your browser does. It has proven itself reliable in such projects
21
- as <a href="https://github.com/tmpvar/jsdom">jsdom</a>, <a href="https://github.com/angular/angular">Angular2</a>, <a href="https://www.polymer-project.org">Polymer</a> and many more.
19
+ 📖 <a href="https://github.com/inikulin/parse5/tree/master/packages/parse5/docs/index.md"><b>Documentation</b></a> 📖
22
20
  </p>
23
21
 
24
- ----
22
+ ---
25
23
 
26
24
  <p align="center">
27
- <a href="http://inikulin.github.io/parse5">Documentation</a>
25
+ <a href="https://github.com/inikulin/parse5/tree/master/docs/list-of-packages.md">List of parse5 toolset packages</a>
28
26
  </p>
29
27
 
30
28
  <p align="center">
31
- <a href="http://inikulin.github.io/parse5#version-history">Version history</a>
29
+ <a href="https://github.com/inikulin/parse5">GitHub</a>
32
30
  </p>
33
31
 
34
32
  <p align="center">
@@ -36,5 +34,5 @@ as <a href="https://github.com/tmpvar/jsdom">jsdom</a>, <a href="https://github.
36
34
  </p>
37
35
 
38
36
  <p align="center">
39
- <a href="https://github.com/inikulin/parse5/issues">Issue tracker</a>
37
+ <a href="https://github.com/inikulin/parse5/tree/master/docs/version-history.md">Version history</a>
40
38
  </p>
@@ -1,156 +1,173 @@
1
1
  'use strict';
2
2
 
3
- var DOCUMENT_MODE = require('./html').DOCUMENT_MODE;
3
+ const { DOCUMENT_MODE } = require('./html');
4
4
 
5
5
  //Const
6
- var VALID_DOCTYPE_NAME = 'html',
7
- QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd',
8
- QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
9
- '+//silmaril//dtd html pro v0r11 19970101//en',
10
- '-//advasoft ltd//dtd html 3.0 aswedit + extensions//en',
11
- '-//as//dtd html 3.0 aswedit + extensions//en',
12
- '-//ietf//dtd html 2.0 level 1//en',
13
- '-//ietf//dtd html 2.0 level 2//en',
14
- '-//ietf//dtd html 2.0 strict level 1//en',
15
- '-//ietf//dtd html 2.0 strict level 2//en',
16
- '-//ietf//dtd html 2.0 strict//en',
17
- '-//ietf//dtd html 2.0//en',
18
- '-//ietf//dtd html 2.1e//en',
19
- '-//ietf//dtd html 3.0//en',
20
- '-//ietf//dtd html 3.0//en//',
21
- '-//ietf//dtd html 3.2 final//en',
22
- '-//ietf//dtd html 3.2//en',
23
- '-//ietf//dtd html 3//en',
24
- '-//ietf//dtd html level 0//en',
25
- '-//ietf//dtd html level 0//en//2.0',
26
- '-//ietf//dtd html level 1//en',
27
- '-//ietf//dtd html level 1//en//2.0',
28
- '-//ietf//dtd html level 2//en',
29
- '-//ietf//dtd html level 2//en//2.0',
30
- '-//ietf//dtd html level 3//en',
31
- '-//ietf//dtd html level 3//en//3.0',
32
- '-//ietf//dtd html strict level 0//en',
33
- '-//ietf//dtd html strict level 0//en//2.0',
34
- '-//ietf//dtd html strict level 1//en',
35
- '-//ietf//dtd html strict level 1//en//2.0',
36
- '-//ietf//dtd html strict level 2//en',
37
- '-//ietf//dtd html strict level 2//en//2.0',
38
- '-//ietf//dtd html strict level 3//en',
39
- '-//ietf//dtd html strict level 3//en//3.0',
40
- '-//ietf//dtd html strict//en',
41
- '-//ietf//dtd html strict//en//2.0',
42
- '-//ietf//dtd html strict//en//3.0',
43
- '-//ietf//dtd html//en',
44
- '-//ietf//dtd html//en//2.0',
45
- '-//ietf//dtd html//en//3.0',
46
- '-//metrius//dtd metrius presentational//en',
47
- '-//microsoft//dtd internet explorer 2.0 html strict//en',
48
- '-//microsoft//dtd internet explorer 2.0 html//en',
49
- '-//microsoft//dtd internet explorer 2.0 tables//en',
50
- '-//microsoft//dtd internet explorer 3.0 html strict//en',
51
- '-//microsoft//dtd internet explorer 3.0 html//en',
52
- '-//microsoft//dtd internet explorer 3.0 tables//en',
53
- '-//netscape comm. corp.//dtd html//en',
54
- '-//netscape comm. corp.//dtd strict html//en',
55
- '-//o\'reilly and associates//dtd html 2.0//en',
56
- '-//o\'reilly and associates//dtd html extended 1.0//en',
57
- '-//spyglass//dtd html 2.0 extended//en',
58
- '-//sq//dtd html 2.0 hotmetal + extensions//en',
59
- '-//sun microsystems corp.//dtd hotjava html//en',
60
- '-//sun microsystems corp.//dtd hotjava strict html//en',
61
- '-//w3c//dtd html 3 1995-03-24//en',
62
- '-//w3c//dtd html 3.2 draft//en',
63
- '-//w3c//dtd html 3.2 final//en',
64
- '-//w3c//dtd html 3.2//en',
65
- '-//w3c//dtd html 3.2s draft//en',
66
- '-//w3c//dtd html 4.0 frameset//en',
67
- '-//w3c//dtd html 4.0 transitional//en',
68
- '-//w3c//dtd html experimental 19960712//en',
69
- '-//w3c//dtd html experimental 970421//en',
70
- '-//w3c//dtd w3 html//en',
71
- '-//w3o//dtd w3 html 3.0//en',
72
- '-//w3o//dtd w3 html 3.0//en//',
73
- '-//webtechs//dtd mozilla html 2.0//en',
74
- '-//webtechs//dtd mozilla html//en'
75
- ],
76
- QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = QUIRKS_MODE_PUBLIC_ID_PREFIXES.concat([
77
- '-//w3c//dtd html 4.01 frameset//',
78
- '-//w3c//dtd html 4.01 transitional//'
79
- ]),
80
- QUIRKS_MODE_PUBLIC_IDS = [
81
- '-//w3o//dtd w3 html strict 3.0//en//',
82
- '-/w3c/dtd html 4.0 transitional/en',
83
- 'html'
84
- ],
85
- LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = [
86
- '-//W3C//DTD XHTML 1.0 Frameset//',
87
- '-//W3C//DTD XHTML 1.0 Transitional//'
88
- ],
89
- LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = LIMITED_QUIRKS_PUBLIC_ID_PREFIXES.concat([
90
- '-//W3C//DTD HTML 4.01 Frameset//',
91
- '-//W3C//DTD HTML 4.01 Transitional//'
92
- ]);
93
-
6
+ const VALID_DOCTYPE_NAME = 'html';
7
+ const VALID_SYSTEM_ID = 'about:legacy-compat';
8
+ const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';
9
+
10
+ const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
11
+ '+//silmaril//dtd html pro v0r11 19970101//en',
12
+ '-//advasoft ltd//dtd html 3.0 aswedit + extensions//en',
13
+ '-//as//dtd html 3.0 aswedit + extensions//en',
14
+ '-//ietf//dtd html 2.0 level 1//en',
15
+ '-//ietf//dtd html 2.0 level 2//en',
16
+ '-//ietf//dtd html 2.0 strict level 1//en',
17
+ '-//ietf//dtd html 2.0 strict level 2//en',
18
+ '-//ietf//dtd html 2.0 strict//en',
19
+ '-//ietf//dtd html 2.0//en',
20
+ '-//ietf//dtd html 2.1e//en',
21
+ '-//ietf//dtd html 3.0//en',
22
+ '-//ietf//dtd html 3.0//en//',
23
+ '-//ietf//dtd html 3.2 final//en',
24
+ '-//ietf//dtd html 3.2//en',
25
+ '-//ietf//dtd html 3//en',
26
+ '-//ietf//dtd html level 0//en',
27
+ '-//ietf//dtd html level 0//en//2.0',
28
+ '-//ietf//dtd html level 1//en',
29
+ '-//ietf//dtd html level 1//en//2.0',
30
+ '-//ietf//dtd html level 2//en',
31
+ '-//ietf//dtd html level 2//en//2.0',
32
+ '-//ietf//dtd html level 3//en',
33
+ '-//ietf//dtd html level 3//en//3.0',
34
+ '-//ietf//dtd html strict level 0//en',
35
+ '-//ietf//dtd html strict level 0//en//2.0',
36
+ '-//ietf//dtd html strict level 1//en',
37
+ '-//ietf//dtd html strict level 1//en//2.0',
38
+ '-//ietf//dtd html strict level 2//en',
39
+ '-//ietf//dtd html strict level 2//en//2.0',
40
+ '-//ietf//dtd html strict level 3//en',
41
+ '-//ietf//dtd html strict level 3//en//3.0',
42
+ '-//ietf//dtd html strict//en',
43
+ '-//ietf//dtd html strict//en//2.0',
44
+ '-//ietf//dtd html strict//en//3.0',
45
+ '-//ietf//dtd html//en',
46
+ '-//ietf//dtd html//en//2.0',
47
+ '-//ietf//dtd html//en//3.0',
48
+ '-//metrius//dtd metrius presentational//en',
49
+ '-//microsoft//dtd internet explorer 2.0 html strict//en',
50
+ '-//microsoft//dtd internet explorer 2.0 html//en',
51
+ '-//microsoft//dtd internet explorer 2.0 tables//en',
52
+ '-//microsoft//dtd internet explorer 3.0 html strict//en',
53
+ '-//microsoft//dtd internet explorer 3.0 html//en',
54
+ '-//microsoft//dtd internet explorer 3.0 tables//en',
55
+ '-//netscape comm. corp.//dtd html//en',
56
+ '-//netscape comm. corp.//dtd strict html//en',
57
+ "-//o'reilly and associates//dtd html 2.0//en",
58
+ "-//o'reilly and associates//dtd html extended 1.0//en",
59
+ '-//spyglass//dtd html 2.0 extended//en',
60
+ '-//sq//dtd html 2.0 hotmetal + extensions//en',
61
+ '-//sun microsystems corp.//dtd hotjava html//en',
62
+ '-//sun microsystems corp.//dtd hotjava strict html//en',
63
+ '-//w3c//dtd html 3 1995-03-24//en',
64
+ '-//w3c//dtd html 3.2 draft//en',
65
+ '-//w3c//dtd html 3.2 final//en',
66
+ '-//w3c//dtd html 3.2//en',
67
+ '-//w3c//dtd html 3.2s draft//en',
68
+ '-//w3c//dtd html 4.0 frameset//en',
69
+ '-//w3c//dtd html 4.0 transitional//en',
70
+ '-//w3c//dtd html experimental 19960712//en',
71
+ '-//w3c//dtd html experimental 970421//en',
72
+ '-//w3c//dtd w3 html//en',
73
+ '-//w3o//dtd w3 html 3.0//en',
74
+ '-//w3o//dtd w3 html 3.0//en//',
75
+ '-//webtechs//dtd mozilla html 2.0//en',
76
+ '-//webtechs//dtd mozilla html//en'
77
+ ];
78
+
79
+ const QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = QUIRKS_MODE_PUBLIC_ID_PREFIXES.concat([
80
+ '-//w3c//dtd html 4.01 frameset//',
81
+ '-//w3c//dtd html 4.01 transitional//'
82
+ ]);
83
+
84
+ const QUIRKS_MODE_PUBLIC_IDS = ['-//w3o//dtd w3 html strict 3.0//en//', '-/w3c/dtd html 4.0 transitional/en', 'html'];
85
+ const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//W3C//DTD XHTML 1.0 Frameset//', '-//W3C//DTD XHTML 1.0 Transitional//'];
86
+
87
+ const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = LIMITED_QUIRKS_PUBLIC_ID_PREFIXES.concat([
88
+ '-//W3C//DTD HTML 4.01 Frameset//',
89
+ '-//W3C//DTD HTML 4.01 Transitional//'
90
+ ]);
94
91
 
95
92
  //Utils
96
93
  function enquoteDoctypeId(id) {
97
- var quote = id.indexOf('"') !== -1 ? '\'' : '"';
94
+ const quote = id.indexOf('"') !== -1 ? "'" : '"';
98
95
 
99
96
  return quote + id + quote;
100
97
  }
101
98
 
102
99
  function hasPrefix(publicId, prefixes) {
103
- for (var i = 0; i < prefixes.length; i++) {
104
- if (publicId.indexOf(prefixes[i]) === 0)
100
+ for (let i = 0; i < prefixes.length; i++) {
101
+ if (publicId.indexOf(prefixes[i]) === 0) {
105
102
  return true;
103
+ }
106
104
  }
107
105
 
108
106
  return false;
109
107
  }
110
108
 
111
-
112
109
  //API
113
- exports.getDocumentMode = function (name, publicId, systemId) {
114
- if (name !== VALID_DOCTYPE_NAME)
110
+ exports.isConforming = function(token) {
111
+ return (
112
+ token.name === VALID_DOCTYPE_NAME &&
113
+ token.publicId === null &&
114
+ (token.systemId === null || token.systemId === VALID_SYSTEM_ID)
115
+ );
116
+ };
117
+
118
+ exports.getDocumentMode = function(token) {
119
+ if (token.name !== VALID_DOCTYPE_NAME) {
115
120
  return DOCUMENT_MODE.QUIRKS;
121
+ }
122
+
123
+ const systemId = token.systemId;
116
124
 
117
- if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID)
125
+ if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
118
126
  return DOCUMENT_MODE.QUIRKS;
127
+ }
128
+
129
+ let publicId = token.publicId;
119
130
 
120
131
  if (publicId !== null) {
121
132
  publicId = publicId.toLowerCase();
122
133
 
123
- if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1)
134
+ if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1) {
124
135
  return DOCUMENT_MODE.QUIRKS;
136
+ }
125
137
 
126
- var prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
138
+ let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
127
139
 
128
- if (hasPrefix(publicId, prefixes))
140
+ if (hasPrefix(publicId, prefixes)) {
129
141
  return DOCUMENT_MODE.QUIRKS;
142
+ }
130
143
 
131
- prefixes = systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
144
+ prefixes =
145
+ systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
132
146
 
133
- if (hasPrefix(publicId, prefixes))
147
+ if (hasPrefix(publicId, prefixes)) {
134
148
  return DOCUMENT_MODE.LIMITED_QUIRKS;
149
+ }
135
150
  }
136
151
 
137
152
  return DOCUMENT_MODE.NO_QUIRKS;
138
153
  };
139
154
 
140
- exports.serializeContent = function (name, publicId, systemId) {
141
- var str = '!DOCTYPE ';
155
+ exports.serializeContent = function(name, publicId, systemId) {
156
+ let str = '!DOCTYPE ';
142
157
 
143
- if (name)
158
+ if (name) {
144
159
  str += name;
160
+ }
145
161
 
146
- if (publicId !== null)
162
+ if (publicId) {
147
163
  str += ' PUBLIC ' + enquoteDoctypeId(publicId);
148
-
149
- else if (systemId !== null)
164
+ } else if (systemId) {
150
165
  str += ' SYSTEM';
166
+ }
151
167
 
152
- if (systemId !== null)
168
+ if (systemId !== null) {
153
169
  str += ' ' + enquoteDoctypeId(systemId);
170
+ }
154
171
 
155
172
  return str;
156
173
  };
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ controlCharacterInInputStream: 'control-character-in-input-stream',
5
+ noncharacterInInputStream: 'noncharacter-in-input-stream',
6
+ surrogateInInputStream: 'surrogate-in-input-stream',
7
+ nonVoidHtmlElementStartTagWithTrailingSolidus: 'non-void-html-element-start-tag-with-trailing-solidus',
8
+ endTagWithAttributes: 'end-tag-with-attributes',
9
+ endTagWithTrailingSolidus: 'end-tag-with-trailing-solidus',
10
+ unexpectedSolidusInTag: 'unexpected-solidus-in-tag',
11
+ unexpectedNullCharacter: 'unexpected-null-character',
12
+ unexpectedQuestionMarkInsteadOfTagName: 'unexpected-question-mark-instead-of-tag-name',
13
+ invalidFirstCharacterOfTagName: 'invalid-first-character-of-tag-name',
14
+ unexpectedEqualsSignBeforeAttributeName: 'unexpected-equals-sign-before-attribute-name',
15
+ missingEndTagName: 'missing-end-tag-name',
16
+ unexpectedCharacterInAttributeName: 'unexpected-character-in-attribute-name',
17
+ unknownNamedCharacterReference: 'unknown-named-character-reference',
18
+ missingSemicolonAfterCharacterReference: 'missing-semicolon-after-character-reference',
19
+ unexpectedCharacterAfterDoctypeSystemIdentifier: 'unexpected-character-after-doctype-system-identifier',
20
+ unexpectedCharacterInUnquotedAttributeValue: 'unexpected-character-in-unquoted-attribute-value',
21
+ eofBeforeTagName: 'eof-before-tag-name',
22
+ eofInTag: 'eof-in-tag',
23
+ missingAttributeValue: 'missing-attribute-value',
24
+ missingWhitespaceBetweenAttributes: 'missing-whitespace-between-attributes',
25
+ missingWhitespaceAfterDoctypePublicKeyword: 'missing-whitespace-after-doctype-public-keyword',
26
+ missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers:
27
+ 'missing-whitespace-between-doctype-public-and-system-identifiers',
28
+ missingWhitespaceAfterDoctypeSystemKeyword: 'missing-whitespace-after-doctype-system-keyword',
29
+ missingQuoteBeforeDoctypePublicIdentifier: 'missing-quote-before-doctype-public-identifier',
30
+ missingQuoteBeforeDoctypeSystemIdentifier: 'missing-quote-before-doctype-system-identifier',
31
+ missingDoctypePublicIdentifier: 'missing-doctype-public-identifier',
32
+ missingDoctypeSystemIdentifier: 'missing-doctype-system-identifier',
33
+ abruptDoctypePublicIdentifier: 'abrupt-doctype-public-identifier',
34
+ abruptDoctypeSystemIdentifier: 'abrupt-doctype-system-identifier',
35
+ cdataInHtmlContent: 'cdata-in-html-content',
36
+ incorrectlyOpenedComment: 'incorrectly-opened-comment',
37
+ eofInScriptHtmlCommentLikeText: 'eof-in-script-html-comment-like-text',
38
+ eofInDoctype: 'eof-in-doctype',
39
+ nestedComment: 'nested-comment',
40
+ abruptClosingOfEmptyComment: 'abrupt-closing-of-empty-comment',
41
+ eofInComment: 'eof-in-comment',
42
+ incorrectlyClosedComment: 'incorrectly-closed-comment',
43
+ eofInCdata: 'eof-in-cdata',
44
+ absenceOfDigitsInNumericCharacterReference: 'absence-of-digits-in-numeric-character-reference',
45
+ nullCharacterReference: 'null-character-reference',
46
+ surrogateCharacterReference: 'surrogate-character-reference',
47
+ characterReferenceOutsideUnicodeRange: 'character-reference-outside-unicode-range',
48
+ controlCharacterReference: 'control-character-reference',
49
+ noncharacterCharacterReference: 'noncharacter-character-reference',
50
+ missingWhitespaceBeforeDoctypeName: 'missing-whitespace-before-doctype-name',
51
+ missingDoctypeName: 'missing-doctype-name',
52
+ invalidCharacterSequenceAfterDoctypeName: 'invalid-character-sequence-after-doctype-name',
53
+ duplicateAttribute: 'duplicate-attribute',
54
+ nonConformingDoctype: 'non-conforming-doctype',
55
+ missingDoctype: 'missing-doctype',
56
+ misplacedDoctype: 'misplaced-doctype',
57
+ endTagWithoutMatchingOpenElement: 'end-tag-without-matching-open-element',
58
+ closingOfElementWithOpenChildElements: 'closing-of-element-with-open-child-elements',
59
+ disallowedContentInNoscriptInHead: 'disallowed-content-in-noscript-in-head',
60
+ openElementsLeftAfterEof: 'open-elements-left-after-eof',
61
+ abandonedHeadElementChild: 'abandoned-head-element-child',
62
+ misplacedStartTagForHeadElement: 'misplaced-start-tag-for-head-element',
63
+ nestedNoscriptInHead: 'nested-noscript-in-head',
64
+ eofInElementThatCanContainOnlyText: 'eof-in-element-that-can-contain-only-text'
65
+ };