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.
- package/README.md +14 -16
- package/lib/common/doctype.js +125 -108
- package/lib/common/error-codes.js +65 -0
- package/lib/common/foreign-content.js +265 -0
- package/lib/common/html.js +102 -102
- package/lib/common/unicode.js +81 -19
- package/lib/extensions/error-reporting/mixin-base.js +43 -0
- package/lib/extensions/error-reporting/parser-mixin.js +52 -0
- package/lib/extensions/error-reporting/preprocessor-mixin.js +24 -0
- package/lib/extensions/error-reporting/tokenizer-mixin.js +17 -0
- package/lib/extensions/location-info/open-element-stack-mixin.js +35 -0
- package/lib/extensions/location-info/parser-mixin.js +222 -0
- package/lib/extensions/location-info/tokenizer-mixin.js +146 -0
- package/lib/extensions/position-tracking/preprocessor-mixin.js +64 -0
- package/lib/index.js +6 -21
- package/lib/parser/formatting-element-list.js +181 -0
- package/lib/parser/index.js +1469 -1332
- package/lib/parser/open-element-stack.js +482 -0
- package/lib/serializer/index.js +136 -122
- package/lib/tokenizer/index.js +1856 -1804
- package/lib/tokenizer/{named_entity_data.js → named-entity-data.js} +1 -1
- package/lib/tokenizer/preprocessor.js +115 -103
- package/lib/tree-adapters/default.js +217 -0
- package/lib/utils/{merge_options.js → merge-options.js} +2 -2
- package/lib/utils/mixin.js +33 -12
- package/package.json +32 -61
- package/LICENSE +0 -19
- package/lib/common/foreign_content.js +0 -260
- package/lib/extensions/location_info/open_element_stack_mixin.js +0 -34
- package/lib/extensions/location_info/parser_mixin.js +0 -213
- package/lib/extensions/location_info/tokenizer_mixin.js +0 -117
- package/lib/extensions/position_tracking/preprocessor_mixin.js +0 -72
- package/lib/index.d.ts +0 -1077
- package/lib/parser/formatting_element_list.js +0 -167
- package/lib/parser/open_element_stack.js +0 -395
- package/lib/parser/parser_stream.js +0 -76
- package/lib/parser/plain_text_conversion_stream.js +0 -20
- package/lib/sax/dev_null_stream.js +0 -14
- package/lib/sax/index.js +0 -118
- package/lib/sax/parser_feedback_simulator.js +0 -153
- package/lib/serializer/serializer_stream.js +0 -28
- package/lib/tree_adapters/default.js +0 -209
- 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
|
-
<
|
|
8
|
-
<
|
|
9
|
-
|
|
7
|
+
<div align="center">
|
|
8
|
+
<h1>parse5</h1>
|
|
9
|
+
<i><b>HTML parser and serializer.</b></i>
|
|
10
|
+
</div>
|
|
11
|
+
<br>
|
|
10
12
|
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
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="
|
|
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
|
-
|
|
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
|
-
|
|
37
|
+
<a href="https://github.com/inikulin/parse5/tree/master/docs/version-history.md">Version history</a>
|
|
40
38
|
</p>
|
package/lib/common/doctype.js
CHANGED
|
@@ -1,156 +1,173 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const { DOCUMENT_MODE } = require('./html');
|
|
4
4
|
|
|
5
5
|
//Const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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 (
|
|
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.
|
|
114
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
|
141
|
-
|
|
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
|
|
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
|
+
};
|