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
@@ -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
- };