parse5 4.0.0-test → 5.1.1

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/LICENSE +1 -1
  2. package/README.md +14 -16
  3. package/lib/common/doctype.js +114 -108
  4. package/lib/common/error-codes.js +65 -0
  5. package/lib/common/foreign-content.js +265 -0
  6. package/lib/common/html.js +102 -102
  7. package/lib/common/unicode.js +81 -19
  8. package/lib/extensions/error-reporting/mixin-base.js +43 -0
  9. package/lib/extensions/error-reporting/parser-mixin.js +52 -0
  10. package/lib/extensions/error-reporting/preprocessor-mixin.js +24 -0
  11. package/lib/extensions/error-reporting/tokenizer-mixin.js +17 -0
  12. package/lib/extensions/location-info/open-element-stack-mixin.js +35 -0
  13. package/lib/extensions/location-info/parser-mixin.js +222 -0
  14. package/lib/extensions/location-info/tokenizer-mixin.js +146 -0
  15. package/lib/extensions/position-tracking/preprocessor-mixin.js +64 -0
  16. package/lib/index.js +6 -43
  17. package/lib/parser/formatting-element-list.js +181 -0
  18. package/lib/parser/index.js +1469 -1332
  19. package/lib/parser/open-element-stack.js +482 -0
  20. package/lib/serializer/index.js +136 -122
  21. package/lib/tokenizer/index.js +1856 -1804
  22. package/lib/tokenizer/{named_entity_data.js → named-entity-data.js} +1 -1
  23. package/lib/tokenizer/preprocessor.js +115 -103
  24. package/lib/tree-adapters/default.js +217 -0
  25. package/lib/utils/{merge_options.js → merge-options.js} +2 -2
  26. package/lib/utils/mixin.js +33 -12
  27. package/package.json +33 -58
  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
@@ -1,338 +0,0 @@
1
- 'use strict';
2
-
3
- var doctype = require('../common/doctype'),
4
- DOCUMENT_MODE = require('../common/html').DOCUMENT_MODE;
5
-
6
-
7
- //Conversion tables for DOM Level1 structure emulation
8
- var nodeTypes = {
9
- element: 1,
10
- text: 3,
11
- cdata: 4,
12
- comment: 8
13
- };
14
-
15
- var nodePropertyShorthands = {
16
- tagName: 'name',
17
- childNodes: 'children',
18
- parentNode: 'parent',
19
- previousSibling: 'prev',
20
- nextSibling: 'next',
21
- nodeValue: 'data'
22
- };
23
-
24
- //Node
25
- var Node = function (props) {
26
- for (var key in props) {
27
- if (props.hasOwnProperty(key))
28
- this[key] = props[key];
29
- }
30
- };
31
-
32
- Node.prototype = {
33
- get firstChild() {
34
- var children = this.children;
35
-
36
- return children && children[0] || null;
37
- },
38
-
39
- get lastChild() {
40
- var children = this.children;
41
-
42
- return children && children[children.length - 1] || null;
43
- },
44
-
45
- get nodeType() {
46
- return nodeTypes[this.type] || nodeTypes.element;
47
- }
48
- };
49
-
50
- Object.keys(nodePropertyShorthands).forEach(function (key) {
51
- var shorthand = nodePropertyShorthands[key];
52
-
53
- Object.defineProperty(Node.prototype, key, {
54
- get: function () {
55
- return this[shorthand] || null;
56
- },
57
- set: function (val) {
58
- this[shorthand] = val;
59
- return val;
60
- }
61
- });
62
- });
63
-
64
-
65
- //Node construction
66
- exports.createDocument = function () {
67
- return new Node({
68
- type: 'root',
69
- name: 'root',
70
- parent: null,
71
- prev: null,
72
- next: null,
73
- children: [],
74
- 'x-mode': DOCUMENT_MODE.NO_QUIRKS
75
- });
76
- };
77
-
78
- exports.createDocumentFragment = function () {
79
- return new Node({
80
- type: 'root',
81
- name: 'root',
82
- parent: null,
83
- prev: null,
84
- next: null,
85
- children: []
86
- });
87
- };
88
-
89
- exports.createElement = function (tagName, namespaceURI, attrs) {
90
- var attribs = Object.create(null),
91
- attribsNamespace = Object.create(null),
92
- attribsPrefix = Object.create(null);
93
-
94
- for (var i = 0; i < attrs.length; i++) {
95
- var attrName = attrs[i].name;
96
-
97
- attribs[attrName] = attrs[i].value;
98
- attribsNamespace[attrName] = attrs[i].namespace;
99
- attribsPrefix[attrName] = attrs[i].prefix;
100
- }
101
-
102
- return new Node({
103
- type: tagName === 'script' || tagName === 'style' ? tagName : 'tag',
104
- name: tagName,
105
- namespace: namespaceURI,
106
- attribs: attribs,
107
- 'x-attribsNamespace': attribsNamespace,
108
- 'x-attribsPrefix': attribsPrefix,
109
- children: [],
110
- parent: null,
111
- prev: null,
112
- next: null
113
- });
114
- };
115
-
116
- exports.createCommentNode = function (data) {
117
- return new Node({
118
- type: 'comment',
119
- data: data,
120
- parent: null,
121
- prev: null,
122
- next: null
123
- });
124
- };
125
-
126
- var createTextNode = function (value) {
127
- return new Node({
128
- type: 'text',
129
- data: value,
130
- parent: null,
131
- prev: null,
132
- next: null
133
- });
134
- };
135
-
136
-
137
- //Tree mutation
138
- var appendChild = exports.appendChild = function (parentNode, newNode) {
139
- var prev = parentNode.children[parentNode.children.length - 1];
140
-
141
- if (prev) {
142
- prev.next = newNode;
143
- newNode.prev = prev;
144
- }
145
-
146
- parentNode.children.push(newNode);
147
- newNode.parent = parentNode;
148
- };
149
-
150
- var insertBefore = exports.insertBefore = function (parentNode, newNode, referenceNode) {
151
- var insertionIdx = parentNode.children.indexOf(referenceNode),
152
- prev = referenceNode.prev;
153
-
154
- if (prev) {
155
- prev.next = newNode;
156
- newNode.prev = prev;
157
- }
158
-
159
- referenceNode.prev = newNode;
160
- newNode.next = referenceNode;
161
-
162
- parentNode.children.splice(insertionIdx, 0, newNode);
163
- newNode.parent = parentNode;
164
- };
165
-
166
- exports.setTemplateContent = function (templateElement, contentElement) {
167
- appendChild(templateElement, contentElement);
168
- };
169
-
170
- exports.getTemplateContent = function (templateElement) {
171
- return templateElement.children[0];
172
- };
173
-
174
- exports.setDocumentType = function (document, name, publicId, systemId) {
175
- var data = doctype.serializeContent(name, publicId, systemId),
176
- doctypeNode = null;
177
-
178
- for (var i = 0; i < document.children.length; i++) {
179
- if (document.children[i].type === 'directive' && document.children[i].name === '!doctype') {
180
- doctypeNode = document.children[i];
181
- break;
182
- }
183
- }
184
-
185
- if (doctypeNode) {
186
- doctypeNode.data = data;
187
- doctypeNode['x-name'] = name;
188
- doctypeNode['x-publicId'] = publicId;
189
- doctypeNode['x-systemId'] = systemId;
190
- }
191
-
192
- else {
193
- appendChild(document, new Node({
194
- type: 'directive',
195
- name: '!doctype',
196
- data: data,
197
- 'x-name': name,
198
- 'x-publicId': publicId,
199
- 'x-systemId': systemId
200
- }));
201
- }
202
-
203
- };
204
-
205
- exports.setDocumentMode = function (document, mode) {
206
- document['x-mode'] = mode;
207
- };
208
-
209
- exports.getDocumentMode = function (document) {
210
- return document['x-mode'];
211
- };
212
-
213
- exports.detachNode = function (node) {
214
- if (node.parent) {
215
- var idx = node.parent.children.indexOf(node),
216
- prev = node.prev,
217
- next = node.next;
218
-
219
- node.prev = null;
220
- node.next = null;
221
-
222
- if (prev)
223
- prev.next = next;
224
-
225
- if (next)
226
- next.prev = prev;
227
-
228
- node.parent.children.splice(idx, 1);
229
- node.parent = null;
230
- }
231
- };
232
-
233
- exports.insertText = function (parentNode, text) {
234
- var lastChild = parentNode.children[parentNode.children.length - 1];
235
-
236
- if (lastChild && lastChild.type === 'text')
237
- lastChild.data += text;
238
- else
239
- appendChild(parentNode, createTextNode(text));
240
- };
241
-
242
- exports.insertTextBefore = function (parentNode, text, referenceNode) {
243
- var prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1];
244
-
245
- if (prevNode && prevNode.type === 'text')
246
- prevNode.data += text;
247
- else
248
- insertBefore(parentNode, createTextNode(text), referenceNode);
249
- };
250
-
251
- exports.adoptAttributes = function (recipient, attrs) {
252
- for (var i = 0; i < attrs.length; i++) {
253
- var attrName = attrs[i].name;
254
-
255
- if (typeof recipient.attribs[attrName] === 'undefined') {
256
- recipient.attribs[attrName] = attrs[i].value;
257
- recipient['x-attribsNamespace'][attrName] = attrs[i].namespace;
258
- recipient['x-attribsPrefix'][attrName] = attrs[i].prefix;
259
- }
260
- }
261
- };
262
-
263
-
264
- //Tree traversing
265
- exports.getFirstChild = function (node) {
266
- return node.children[0];
267
- };
268
-
269
- exports.getChildNodes = function (node) {
270
- return node.children;
271
- };
272
-
273
- exports.getParentNode = function (node) {
274
- return node.parent;
275
- };
276
-
277
- exports.getAttrList = function (element) {
278
- var attrList = [];
279
-
280
- for (var name in element.attribs) {
281
- attrList.push({
282
- name: name,
283
- value: element.attribs[name],
284
- namespace: element['x-attribsNamespace'][name],
285
- prefix: element['x-attribsPrefix'][name]
286
- });
287
- }
288
-
289
- return attrList;
290
- };
291
-
292
-
293
- //Node data
294
- exports.getTagName = function (element) {
295
- return element.name;
296
- };
297
-
298
- exports.getNamespaceURI = function (element) {
299
- return element.namespace;
300
- };
301
-
302
- exports.getTextNodeContent = function (textNode) {
303
- return textNode.data;
304
- };
305
-
306
- exports.getCommentNodeContent = function (commentNode) {
307
- return commentNode.data;
308
- };
309
-
310
- exports.getDocumentTypeNodeName = function (doctypeNode) {
311
- return doctypeNode['x-name'];
312
- };
313
-
314
- exports.getDocumentTypeNodePublicId = function (doctypeNode) {
315
- return doctypeNode['x-publicId'];
316
- };
317
-
318
- exports.getDocumentTypeNodeSystemId = function (doctypeNode) {
319
- return doctypeNode['x-systemId'];
320
- };
321
-
322
-
323
- //Node types
324
- exports.isTextNode = function (node) {
325
- return node.type === 'text';
326
- };
327
-
328
- exports.isCommentNode = function (node) {
329
- return node.type === 'comment';
330
- };
331
-
332
- exports.isDocumentTypeNode = function (node) {
333
- return node.type === 'directive' && node.name === '!doctype';
334
- };
335
-
336
- exports.isElementNode = function (node) {
337
- return !!node.attribs;
338
- };