sax 1.4.1 → 1.4.3

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 (5) hide show
  1. package/LICENSE.md +55 -0
  2. package/README.md +42 -43
  3. package/lib/sax.js +462 -362
  4. package/package.json +8 -9
  5. package/LICENSE +0 -41
package/lib/sax.js CHANGED
@@ -1,5 +1,8 @@
1
- ;(function (sax) { // wrapper for non-node envs
2
- sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
1
+ ;(function (sax) {
2
+ // wrapper for non-node envs
3
+ sax.parser = function (strict, opt) {
4
+ return new SAXParser(strict, opt)
5
+ }
3
6
  sax.SAXParser = SAXParser
4
7
  sax.SAXStream = SAXStream
5
8
  sax.createStream = createStream
@@ -16,9 +19,18 @@
16
19
  sax.MAX_BUFFER_LENGTH = 64 * 1024
17
20
 
18
21
  var buffers = [
19
- 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',
20
- 'procInstName', 'procInstBody', 'entity', 'attribName',
21
- 'attribValue', 'cdata', 'script'
22
+ 'comment',
23
+ 'sgmlDecl',
24
+ 'textNode',
25
+ 'tagName',
26
+ 'doctype',
27
+ 'procInstName',
28
+ 'procInstBody',
29
+ 'entity',
30
+ 'attribName',
31
+ 'attribValue',
32
+ 'cdata',
33
+ 'script',
22
34
  ]
23
35
 
24
36
  sax.EVENTS = [
@@ -39,10 +51,10 @@
39
51
  'ready',
40
52
  'script',
41
53
  'opennamespace',
42
- 'closenamespace'
54
+ 'closenamespace',
43
55
  ]
44
56
 
45
- function SAXParser (strict, opt) {
57
+ function SAXParser(strict, opt) {
46
58
  if (!(this instanceof SAXParser)) {
47
59
  return new SAXParser(strict, opt)
48
60
  }
@@ -61,7 +73,10 @@
61
73
  parser.noscript = !!(strict || parser.opt.noscript)
62
74
  parser.state = S.BEGIN
63
75
  parser.strictEntities = parser.opt.strictEntities
64
- parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)
76
+ parser.ENTITIES =
77
+ parser.strictEntities ?
78
+ Object.create(sax.XML_ENTITIES)
79
+ : Object.create(sax.ENTITIES)
65
80
  parser.attribList = []
66
81
 
67
82
  // namespaces form a prototype chain.
@@ -74,7 +89,7 @@
74
89
  // disallow unquoted attribute values if not otherwise configured
75
90
  // and strict mode is true
76
91
  if (parser.opt.unquotedAttributeValues === undefined) {
77
- parser.opt.unquotedAttributeValues = !strict;
92
+ parser.opt.unquotedAttributeValues = !strict
78
93
  }
79
94
 
80
95
  // mostly just for error reporting
@@ -87,7 +102,7 @@
87
102
 
88
103
  if (!Object.create) {
89
104
  Object.create = function (o) {
90
- function F () {}
105
+ function F() {}
91
106
  F.prototype = o
92
107
  var newf = new F()
93
108
  return newf
@@ -102,7 +117,7 @@
102
117
  }
103
118
  }
104
119
 
105
- function checkBufferLength (parser) {
120
+ function checkBufferLength(parser) {
106
121
  var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)
107
122
  var maxActual = 0
108
123
  for (var i = 0, l = buffers.length; i < l; i++) {
@@ -138,13 +153,13 @@
138
153
  parser.bufferCheckPosition = m + parser.position
139
154
  }
140
155
 
141
- function clearBuffers (parser) {
156
+ function clearBuffers(parser) {
142
157
  for (var i = 0, l = buffers.length; i < l; i++) {
143
158
  parser[buffers[i]] = ''
144
159
  }
145
160
  }
146
161
 
147
- function flushBuffers (parser) {
162
+ function flushBuffers(parser) {
148
163
  closeText(parser)
149
164
  if (parser.cdata !== '') {
150
165
  emitNode(parser, 'oncdata', parser.cdata)
@@ -157,11 +172,20 @@
157
172
  }
158
173
 
159
174
  SAXParser.prototype = {
160
- end: function () { end(this) },
175
+ end: function () {
176
+ end(this)
177
+ },
161
178
  write: write,
162
- resume: function () { this.error = null; return this },
163
- close: function () { return this.write(null) },
164
- flush: function () { flushBuffers(this) }
179
+ resume: function () {
180
+ this.error = null
181
+ return this
182
+ },
183
+ close: function () {
184
+ return this.write(null)
185
+ },
186
+ flush: function () {
187
+ flushBuffers(this)
188
+ },
165
189
  }
166
190
 
167
191
  var Stream
@@ -176,11 +200,11 @@
176
200
  return ev !== 'error' && ev !== 'end'
177
201
  })
178
202
 
179
- function createStream (strict, opt) {
203
+ function createStream(strict, opt) {
180
204
  return new SAXStream(strict, opt)
181
205
  }
182
206
 
183
- function SAXStream (strict, opt) {
207
+ function SAXStream(strict, opt) {
184
208
  if (!(this instanceof SAXStream)) {
185
209
  return new SAXStream(strict, opt)
186
210
  }
@@ -221,21 +245,23 @@
221
245
  me.on(ev, h)
222
246
  },
223
247
  enumerable: true,
224
- configurable: false
248
+ configurable: false,
225
249
  })
226
250
  })
227
251
  }
228
252
 
229
253
  SAXStream.prototype = Object.create(Stream.prototype, {
230
254
  constructor: {
231
- value: SAXStream
232
- }
255
+ value: SAXStream,
256
+ },
233
257
  })
234
258
 
235
259
  SAXStream.prototype.write = function (data) {
236
- if (typeof Buffer === 'function' &&
260
+ if (
261
+ typeof Buffer === 'function' &&
237
262
  typeof Buffer.isBuffer === 'function' &&
238
- Buffer.isBuffer(data)) {
263
+ Buffer.isBuffer(data)
264
+ ) {
239
265
  if (!this._decoder) {
240
266
  var SD = require('string_decoder').StringDecoder
241
267
  this._decoder = new SD('utf8')
@@ -260,7 +286,10 @@
260
286
  var me = this
261
287
  if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {
262
288
  me._parser['on' + ev] = function () {
263
- var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)
289
+ var args =
290
+ arguments.length === 1 ?
291
+ [arguments[0]]
292
+ : Array.apply(null, arguments)
264
293
  args.splice(0, 0, ev)
265
294
  me.emit.apply(me, args)
266
295
  }
@@ -283,30 +312,34 @@
283
312
  // without a significant breaking change to either this parser, or the
284
313
  // JavaScript language. Implementation of an emoji-capable xml parser
285
314
  // is left as an exercise for the reader.
286
- var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
315
+ var nameStart =
316
+ /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
287
317
 
288
- var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
318
+ var nameBody =
319
+ /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
289
320
 
290
- var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
291
- var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
321
+ var entityStart =
322
+ /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
323
+ var entityBody =
324
+ /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/
292
325
 
293
- function isWhitespace (c) {
326
+ function isWhitespace(c) {
294
327
  return c === ' ' || c === '\n' || c === '\r' || c === '\t'
295
328
  }
296
329
 
297
- function isQuote (c) {
298
- return c === '"' || c === '\''
330
+ function isQuote(c) {
331
+ return c === '"' || c === "'"
299
332
  }
300
333
 
301
- function isAttribEnd (c) {
334
+ function isAttribEnd(c) {
302
335
  return c === '>' || isWhitespace(c)
303
336
  }
304
337
 
305
- function isMatch (regex, c) {
338
+ function isMatch(regex, c) {
306
339
  return regex.test(c)
307
340
  }
308
341
 
309
- function notMatch (regex, c) {
342
+ function notMatch(regex, c) {
310
343
  return !isMatch(regex, c)
311
344
  }
312
345
 
@@ -347,271 +380,271 @@
347
380
  CLOSE_TAG: S++, // </a
348
381
  CLOSE_TAG_SAW_WHITE: S++, // </a >
349
382
  SCRIPT: S++, // <script> ...
350
- SCRIPT_ENDING: S++ // <script> ... <
383
+ SCRIPT_ENDING: S++, // <script> ... <
351
384
  }
352
385
 
353
386
  sax.XML_ENTITIES = {
354
- 'amp': '&',
355
- 'gt': '>',
356
- 'lt': '<',
357
- 'quot': '"',
358
- 'apos': "'"
387
+ amp: '&',
388
+ gt: '>',
389
+ lt: '<',
390
+ quot: '"',
391
+ apos: "'",
359
392
  }
360
393
 
361
394
  sax.ENTITIES = {
362
- 'amp': '&',
363
- 'gt': '>',
364
- 'lt': '<',
365
- 'quot': '"',
366
- 'apos': "'",
367
- 'AElig': 198,
368
- 'Aacute': 193,
369
- 'Acirc': 194,
370
- 'Agrave': 192,
371
- 'Aring': 197,
372
- 'Atilde': 195,
373
- 'Auml': 196,
374
- 'Ccedil': 199,
375
- 'ETH': 208,
376
- 'Eacute': 201,
377
- 'Ecirc': 202,
378
- 'Egrave': 200,
379
- 'Euml': 203,
380
- 'Iacute': 205,
381
- 'Icirc': 206,
382
- 'Igrave': 204,
383
- 'Iuml': 207,
384
- 'Ntilde': 209,
385
- 'Oacute': 211,
386
- 'Ocirc': 212,
387
- 'Ograve': 210,
388
- 'Oslash': 216,
389
- 'Otilde': 213,
390
- 'Ouml': 214,
391
- 'THORN': 222,
392
- 'Uacute': 218,
393
- 'Ucirc': 219,
394
- 'Ugrave': 217,
395
- 'Uuml': 220,
396
- 'Yacute': 221,
397
- 'aacute': 225,
398
- 'acirc': 226,
399
- 'aelig': 230,
400
- 'agrave': 224,
401
- 'aring': 229,
402
- 'atilde': 227,
403
- 'auml': 228,
404
- 'ccedil': 231,
405
- 'eacute': 233,
406
- 'ecirc': 234,
407
- 'egrave': 232,
408
- 'eth': 240,
409
- 'euml': 235,
410
- 'iacute': 237,
411
- 'icirc': 238,
412
- 'igrave': 236,
413
- 'iuml': 239,
414
- 'ntilde': 241,
415
- 'oacute': 243,
416
- 'ocirc': 244,
417
- 'ograve': 242,
418
- 'oslash': 248,
419
- 'otilde': 245,
420
- 'ouml': 246,
421
- 'szlig': 223,
422
- 'thorn': 254,
423
- 'uacute': 250,
424
- 'ucirc': 251,
425
- 'ugrave': 249,
426
- 'uuml': 252,
427
- 'yacute': 253,
428
- 'yuml': 255,
429
- 'copy': 169,
430
- 'reg': 174,
431
- 'nbsp': 160,
432
- 'iexcl': 161,
433
- 'cent': 162,
434
- 'pound': 163,
435
- 'curren': 164,
436
- 'yen': 165,
437
- 'brvbar': 166,
438
- 'sect': 167,
439
- 'uml': 168,
440
- 'ordf': 170,
441
- 'laquo': 171,
442
- 'not': 172,
443
- 'shy': 173,
444
- 'macr': 175,
445
- 'deg': 176,
446
- 'plusmn': 177,
447
- 'sup1': 185,
448
- 'sup2': 178,
449
- 'sup3': 179,
450
- 'acute': 180,
451
- 'micro': 181,
452
- 'para': 182,
453
- 'middot': 183,
454
- 'cedil': 184,
455
- 'ordm': 186,
456
- 'raquo': 187,
457
- 'frac14': 188,
458
- 'frac12': 189,
459
- 'frac34': 190,
460
- 'iquest': 191,
461
- 'times': 215,
462
- 'divide': 247,
463
- 'OElig': 338,
464
- 'oelig': 339,
465
- 'Scaron': 352,
466
- 'scaron': 353,
467
- 'Yuml': 376,
468
- 'fnof': 402,
469
- 'circ': 710,
470
- 'tilde': 732,
471
- 'Alpha': 913,
472
- 'Beta': 914,
473
- 'Gamma': 915,
474
- 'Delta': 916,
475
- 'Epsilon': 917,
476
- 'Zeta': 918,
477
- 'Eta': 919,
478
- 'Theta': 920,
479
- 'Iota': 921,
480
- 'Kappa': 922,
481
- 'Lambda': 923,
482
- 'Mu': 924,
483
- 'Nu': 925,
484
- 'Xi': 926,
485
- 'Omicron': 927,
486
- 'Pi': 928,
487
- 'Rho': 929,
488
- 'Sigma': 931,
489
- 'Tau': 932,
490
- 'Upsilon': 933,
491
- 'Phi': 934,
492
- 'Chi': 935,
493
- 'Psi': 936,
494
- 'Omega': 937,
495
- 'alpha': 945,
496
- 'beta': 946,
497
- 'gamma': 947,
498
- 'delta': 948,
499
- 'epsilon': 949,
500
- 'zeta': 950,
501
- 'eta': 951,
502
- 'theta': 952,
503
- 'iota': 953,
504
- 'kappa': 954,
505
- 'lambda': 955,
506
- 'mu': 956,
507
- 'nu': 957,
508
- 'xi': 958,
509
- 'omicron': 959,
510
- 'pi': 960,
511
- 'rho': 961,
512
- 'sigmaf': 962,
513
- 'sigma': 963,
514
- 'tau': 964,
515
- 'upsilon': 965,
516
- 'phi': 966,
517
- 'chi': 967,
518
- 'psi': 968,
519
- 'omega': 969,
520
- 'thetasym': 977,
521
- 'upsih': 978,
522
- 'piv': 982,
523
- 'ensp': 8194,
524
- 'emsp': 8195,
525
- 'thinsp': 8201,
526
- 'zwnj': 8204,
527
- 'zwj': 8205,
528
- 'lrm': 8206,
529
- 'rlm': 8207,
530
- 'ndash': 8211,
531
- 'mdash': 8212,
532
- 'lsquo': 8216,
533
- 'rsquo': 8217,
534
- 'sbquo': 8218,
535
- 'ldquo': 8220,
536
- 'rdquo': 8221,
537
- 'bdquo': 8222,
538
- 'dagger': 8224,
539
- 'Dagger': 8225,
540
- 'bull': 8226,
541
- 'hellip': 8230,
542
- 'permil': 8240,
543
- 'prime': 8242,
544
- 'Prime': 8243,
545
- 'lsaquo': 8249,
546
- 'rsaquo': 8250,
547
- 'oline': 8254,
548
- 'frasl': 8260,
549
- 'euro': 8364,
550
- 'image': 8465,
551
- 'weierp': 8472,
552
- 'real': 8476,
553
- 'trade': 8482,
554
- 'alefsym': 8501,
555
- 'larr': 8592,
556
- 'uarr': 8593,
557
- 'rarr': 8594,
558
- 'darr': 8595,
559
- 'harr': 8596,
560
- 'crarr': 8629,
561
- 'lArr': 8656,
562
- 'uArr': 8657,
563
- 'rArr': 8658,
564
- 'dArr': 8659,
565
- 'hArr': 8660,
566
- 'forall': 8704,
567
- 'part': 8706,
568
- 'exist': 8707,
569
- 'empty': 8709,
570
- 'nabla': 8711,
571
- 'isin': 8712,
572
- 'notin': 8713,
573
- 'ni': 8715,
574
- 'prod': 8719,
575
- 'sum': 8721,
576
- 'minus': 8722,
577
- 'lowast': 8727,
578
- 'radic': 8730,
579
- 'prop': 8733,
580
- 'infin': 8734,
581
- 'ang': 8736,
582
- 'and': 8743,
583
- 'or': 8744,
584
- 'cap': 8745,
585
- 'cup': 8746,
586
- 'int': 8747,
587
- 'there4': 8756,
588
- 'sim': 8764,
589
- 'cong': 8773,
590
- 'asymp': 8776,
591
- 'ne': 8800,
592
- 'equiv': 8801,
593
- 'le': 8804,
594
- 'ge': 8805,
595
- 'sub': 8834,
596
- 'sup': 8835,
597
- 'nsub': 8836,
598
- 'sube': 8838,
599
- 'supe': 8839,
600
- 'oplus': 8853,
601
- 'otimes': 8855,
602
- 'perp': 8869,
603
- 'sdot': 8901,
604
- 'lceil': 8968,
605
- 'rceil': 8969,
606
- 'lfloor': 8970,
607
- 'rfloor': 8971,
608
- 'lang': 9001,
609
- 'rang': 9002,
610
- 'loz': 9674,
611
- 'spades': 9824,
612
- 'clubs': 9827,
613
- 'hearts': 9829,
614
- 'diams': 9830
395
+ amp: '&',
396
+ gt: '>',
397
+ lt: '<',
398
+ quot: '"',
399
+ apos: "'",
400
+ AElig: 198,
401
+ Aacute: 193,
402
+ Acirc: 194,
403
+ Agrave: 192,
404
+ Aring: 197,
405
+ Atilde: 195,
406
+ Auml: 196,
407
+ Ccedil: 199,
408
+ ETH: 208,
409
+ Eacute: 201,
410
+ Ecirc: 202,
411
+ Egrave: 200,
412
+ Euml: 203,
413
+ Iacute: 205,
414
+ Icirc: 206,
415
+ Igrave: 204,
416
+ Iuml: 207,
417
+ Ntilde: 209,
418
+ Oacute: 211,
419
+ Ocirc: 212,
420
+ Ograve: 210,
421
+ Oslash: 216,
422
+ Otilde: 213,
423
+ Ouml: 214,
424
+ THORN: 222,
425
+ Uacute: 218,
426
+ Ucirc: 219,
427
+ Ugrave: 217,
428
+ Uuml: 220,
429
+ Yacute: 221,
430
+ aacute: 225,
431
+ acirc: 226,
432
+ aelig: 230,
433
+ agrave: 224,
434
+ aring: 229,
435
+ atilde: 227,
436
+ auml: 228,
437
+ ccedil: 231,
438
+ eacute: 233,
439
+ ecirc: 234,
440
+ egrave: 232,
441
+ eth: 240,
442
+ euml: 235,
443
+ iacute: 237,
444
+ icirc: 238,
445
+ igrave: 236,
446
+ iuml: 239,
447
+ ntilde: 241,
448
+ oacute: 243,
449
+ ocirc: 244,
450
+ ograve: 242,
451
+ oslash: 248,
452
+ otilde: 245,
453
+ ouml: 246,
454
+ szlig: 223,
455
+ thorn: 254,
456
+ uacute: 250,
457
+ ucirc: 251,
458
+ ugrave: 249,
459
+ uuml: 252,
460
+ yacute: 253,
461
+ yuml: 255,
462
+ copy: 169,
463
+ reg: 174,
464
+ nbsp: 160,
465
+ iexcl: 161,
466
+ cent: 162,
467
+ pound: 163,
468
+ curren: 164,
469
+ yen: 165,
470
+ brvbar: 166,
471
+ sect: 167,
472
+ uml: 168,
473
+ ordf: 170,
474
+ laquo: 171,
475
+ not: 172,
476
+ shy: 173,
477
+ macr: 175,
478
+ deg: 176,
479
+ plusmn: 177,
480
+ sup1: 185,
481
+ sup2: 178,
482
+ sup3: 179,
483
+ acute: 180,
484
+ micro: 181,
485
+ para: 182,
486
+ middot: 183,
487
+ cedil: 184,
488
+ ordm: 186,
489
+ raquo: 187,
490
+ frac14: 188,
491
+ frac12: 189,
492
+ frac34: 190,
493
+ iquest: 191,
494
+ times: 215,
495
+ divide: 247,
496
+ OElig: 338,
497
+ oelig: 339,
498
+ Scaron: 352,
499
+ scaron: 353,
500
+ Yuml: 376,
501
+ fnof: 402,
502
+ circ: 710,
503
+ tilde: 732,
504
+ Alpha: 913,
505
+ Beta: 914,
506
+ Gamma: 915,
507
+ Delta: 916,
508
+ Epsilon: 917,
509
+ Zeta: 918,
510
+ Eta: 919,
511
+ Theta: 920,
512
+ Iota: 921,
513
+ Kappa: 922,
514
+ Lambda: 923,
515
+ Mu: 924,
516
+ Nu: 925,
517
+ Xi: 926,
518
+ Omicron: 927,
519
+ Pi: 928,
520
+ Rho: 929,
521
+ Sigma: 931,
522
+ Tau: 932,
523
+ Upsilon: 933,
524
+ Phi: 934,
525
+ Chi: 935,
526
+ Psi: 936,
527
+ Omega: 937,
528
+ alpha: 945,
529
+ beta: 946,
530
+ gamma: 947,
531
+ delta: 948,
532
+ epsilon: 949,
533
+ zeta: 950,
534
+ eta: 951,
535
+ theta: 952,
536
+ iota: 953,
537
+ kappa: 954,
538
+ lambda: 955,
539
+ mu: 956,
540
+ nu: 957,
541
+ xi: 958,
542
+ omicron: 959,
543
+ pi: 960,
544
+ rho: 961,
545
+ sigmaf: 962,
546
+ sigma: 963,
547
+ tau: 964,
548
+ upsilon: 965,
549
+ phi: 966,
550
+ chi: 967,
551
+ psi: 968,
552
+ omega: 969,
553
+ thetasym: 977,
554
+ upsih: 978,
555
+ piv: 982,
556
+ ensp: 8194,
557
+ emsp: 8195,
558
+ thinsp: 8201,
559
+ zwnj: 8204,
560
+ zwj: 8205,
561
+ lrm: 8206,
562
+ rlm: 8207,
563
+ ndash: 8211,
564
+ mdash: 8212,
565
+ lsquo: 8216,
566
+ rsquo: 8217,
567
+ sbquo: 8218,
568
+ ldquo: 8220,
569
+ rdquo: 8221,
570
+ bdquo: 8222,
571
+ dagger: 8224,
572
+ Dagger: 8225,
573
+ bull: 8226,
574
+ hellip: 8230,
575
+ permil: 8240,
576
+ prime: 8242,
577
+ Prime: 8243,
578
+ lsaquo: 8249,
579
+ rsaquo: 8250,
580
+ oline: 8254,
581
+ frasl: 8260,
582
+ euro: 8364,
583
+ image: 8465,
584
+ weierp: 8472,
585
+ real: 8476,
586
+ trade: 8482,
587
+ alefsym: 8501,
588
+ larr: 8592,
589
+ uarr: 8593,
590
+ rarr: 8594,
591
+ darr: 8595,
592
+ harr: 8596,
593
+ crarr: 8629,
594
+ lArr: 8656,
595
+ uArr: 8657,
596
+ rArr: 8658,
597
+ dArr: 8659,
598
+ hArr: 8660,
599
+ forall: 8704,
600
+ part: 8706,
601
+ exist: 8707,
602
+ empty: 8709,
603
+ nabla: 8711,
604
+ isin: 8712,
605
+ notin: 8713,
606
+ ni: 8715,
607
+ prod: 8719,
608
+ sum: 8721,
609
+ minus: 8722,
610
+ lowast: 8727,
611
+ radic: 8730,
612
+ prop: 8733,
613
+ infin: 8734,
614
+ ang: 8736,
615
+ and: 8743,
616
+ or: 8744,
617
+ cap: 8745,
618
+ cup: 8746,
619
+ int: 8747,
620
+ there4: 8756,
621
+ sim: 8764,
622
+ cong: 8773,
623
+ asymp: 8776,
624
+ ne: 8800,
625
+ equiv: 8801,
626
+ le: 8804,
627
+ ge: 8805,
628
+ sub: 8834,
629
+ sup: 8835,
630
+ nsub: 8836,
631
+ sube: 8838,
632
+ supe: 8839,
633
+ oplus: 8853,
634
+ otimes: 8855,
635
+ perp: 8869,
636
+ sdot: 8901,
637
+ lceil: 8968,
638
+ rceil: 8969,
639
+ lfloor: 8970,
640
+ rfloor: 8971,
641
+ lang: 9001,
642
+ rang: 9002,
643
+ loz: 9674,
644
+ spades: 9824,
645
+ clubs: 9827,
646
+ hearts: 9829,
647
+ diams: 9830,
615
648
  }
616
649
 
617
650
  Object.keys(sax.ENTITIES).forEach(function (key) {
@@ -627,33 +660,37 @@
627
660
  // shorthand
628
661
  S = sax.STATE
629
662
 
630
- function emit (parser, event, data) {
663
+ function emit(parser, event, data) {
631
664
  parser[event] && parser[event](data)
632
665
  }
633
666
 
634
- function emitNode (parser, nodeType, data) {
667
+ function emitNode(parser, nodeType, data) {
635
668
  if (parser.textNode) closeText(parser)
636
669
  emit(parser, nodeType, data)
637
670
  }
638
671
 
639
- function closeText (parser) {
672
+ function closeText(parser) {
640
673
  parser.textNode = textopts(parser.opt, parser.textNode)
641
674
  if (parser.textNode) emit(parser, 'ontext', parser.textNode)
642
675
  parser.textNode = ''
643
676
  }
644
677
 
645
- function textopts (opt, text) {
678
+ function textopts(opt, text) {
646
679
  if (opt.trim) text = text.trim()
647
680
  if (opt.normalize) text = text.replace(/\s+/g, ' ')
648
681
  return text
649
682
  }
650
683
 
651
- function error (parser, er) {
684
+ function error(parser, er) {
652
685
  closeText(parser)
653
686
  if (parser.trackPosition) {
654
- er += '\nLine: ' + parser.line +
655
- '\nColumn: ' + parser.column +
656
- '\nChar: ' + parser.c
687
+ er +=
688
+ '\nLine: ' +
689
+ parser.line +
690
+ '\nColumn: ' +
691
+ parser.column +
692
+ '\nChar: ' +
693
+ parser.c
657
694
  }
658
695
  er = new Error(er)
659
696
  parser.error = er
@@ -661,11 +698,14 @@
661
698
  return parser
662
699
  }
663
700
 
664
- function end (parser) {
665
- if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')
666
- if ((parser.state !== S.BEGIN) &&
667
- (parser.state !== S.BEGIN_WHITESPACE) &&
668
- (parser.state !== S.TEXT)) {
701
+ function end(parser) {
702
+ if (parser.sawRoot && !parser.closedRoot)
703
+ strictFail(parser, 'Unclosed root tag')
704
+ if (
705
+ parser.state !== S.BEGIN &&
706
+ parser.state !== S.BEGIN_WHITESPACE &&
707
+ parser.state !== S.TEXT
708
+ ) {
669
709
  error(parser, 'Unexpected end')
670
710
  }
671
711
  closeText(parser)
@@ -676,7 +716,7 @@
676
716
  return parser
677
717
  }
678
718
 
679
- function strictFail (parser, message) {
719
+ function strictFail(parser, message) {
680
720
  if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {
681
721
  throw new Error('bad call to strictFail')
682
722
  }
@@ -685,10 +725,10 @@
685
725
  }
686
726
  }
687
727
 
688
- function newTag (parser) {
728
+ function newTag(parser) {
689
729
  if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()
690
730
  var parent = parser.tags[parser.tags.length - 1] || parser
691
- var tag = parser.tag = { name: parser.tagName, attributes: {} }
731
+ var tag = (parser.tag = { name: parser.tagName, attributes: {} })
692
732
 
693
733
  // will be overridden if tag contails an xmlns="foo" or xmlns:foo="bar"
694
734
  if (parser.opt.xmlns) {
@@ -698,9 +738,9 @@
698
738
  emitNode(parser, 'onopentagstart', tag)
699
739
  }
700
740
 
701
- function qname (name, attribute) {
741
+ function qname(name, attribute) {
702
742
  var i = name.indexOf(':')
703
- var qualName = i < 0 ? [ '', name ] : name.split(':')
743
+ var qualName = i < 0 ? ['', name] : name.split(':')
704
744
  var prefix = qualName[0]
705
745
  var local = qualName[1]
706
746
 
@@ -713,13 +753,15 @@
713
753
  return { prefix: prefix, local: local }
714
754
  }
715
755
 
716
- function attrib (parser) {
756
+ function attrib(parser) {
717
757
  if (!parser.strict) {
718
758
  parser.attribName = parser.attribName[parser.looseCase]()
719
759
  }
720
760
 
721
- if (parser.attribList.indexOf(parser.attribName) !== -1 ||
722
- parser.tag.attributes.hasOwnProperty(parser.attribName)) {
761
+ if (
762
+ parser.attribList.indexOf(parser.attribName) !== -1 ||
763
+ parser.tag.attributes.hasOwnProperty(parser.attribName)
764
+ ) {
723
765
  parser.attribName = parser.attribValue = ''
724
766
  return
725
767
  }
@@ -732,13 +774,26 @@
732
774
  if (prefix === 'xmlns') {
733
775
  // namespace binding attribute. push the binding into scope
734
776
  if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {
735
- strictFail(parser,
736
- 'xml: prefix must be bound to ' + XML_NAMESPACE + '\n' +
737
- 'Actual: ' + parser.attribValue)
738
- } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {
739
- strictFail(parser,
740
- 'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\n' +
741
- 'Actual: ' + parser.attribValue)
777
+ strictFail(
778
+ parser,
779
+ 'xml: prefix must be bound to ' +
780
+ XML_NAMESPACE +
781
+ '\n' +
782
+ 'Actual: ' +
783
+ parser.attribValue
784
+ )
785
+ } else if (
786
+ local === 'xmlns' &&
787
+ parser.attribValue !== XMLNS_NAMESPACE
788
+ ) {
789
+ strictFail(
790
+ parser,
791
+ 'xmlns: prefix must be bound to ' +
792
+ XMLNS_NAMESPACE +
793
+ '\n' +
794
+ 'Actual: ' +
795
+ parser.attribValue
796
+ )
742
797
  } else {
743
798
  var tag = parser.tag
744
799
  var parent = parser.tags[parser.tags.length - 1] || parser
@@ -758,14 +813,14 @@
758
813
  parser.tag.attributes[parser.attribName] = parser.attribValue
759
814
  emitNode(parser, 'onattribute', {
760
815
  name: parser.attribName,
761
- value: parser.attribValue
816
+ value: parser.attribValue,
762
817
  })
763
818
  }
764
819
 
765
820
  parser.attribName = parser.attribValue = ''
766
821
  }
767
822
 
768
- function openTag (parser, selfClosing) {
823
+ function openTag(parser, selfClosing) {
769
824
  if (parser.opt.xmlns) {
770
825
  // emit namespace binding events
771
826
  var tag = parser.tag
@@ -777,8 +832,10 @@
777
832
  tag.uri = tag.ns[qn.prefix] || ''
778
833
 
779
834
  if (tag.prefix && !tag.uri) {
780
- strictFail(parser, 'Unbound namespace prefix: ' +
781
- JSON.stringify(parser.tagName))
835
+ strictFail(
836
+ parser,
837
+ 'Unbound namespace prefix: ' + JSON.stringify(parser.tagName)
838
+ )
782
839
  tag.uri = qn.prefix
783
840
  }
784
841
 
@@ -787,7 +844,7 @@
787
844
  Object.keys(tag.ns).forEach(function (p) {
788
845
  emitNode(parser, 'onopennamespace', {
789
846
  prefix: p,
790
- uri: tag.ns[p]
847
+ uri: tag.ns[p],
791
848
  })
792
849
  })
793
850
  }
@@ -802,20 +859,22 @@
802
859
  var qualName = qname(name, true)
803
860
  var prefix = qualName.prefix
804
861
  var local = qualName.local
805
- var uri = prefix === '' ? '' : (tag.ns[prefix] || '')
862
+ var uri = prefix === '' ? '' : tag.ns[prefix] || ''
806
863
  var a = {
807
864
  name: name,
808
865
  value: value,
809
866
  prefix: prefix,
810
867
  local: local,
811
- uri: uri
868
+ uri: uri,
812
869
  }
813
870
 
814
871
  // if there's any attributes with an undefined namespace,
815
872
  // then fail on them now.
816
873
  if (prefix && prefix !== 'xmlns' && !uri) {
817
- strictFail(parser, 'Unbound namespace prefix: ' +
818
- JSON.stringify(prefix))
874
+ strictFail(
875
+ parser,
876
+ 'Unbound namespace prefix: ' + JSON.stringify(prefix)
877
+ )
819
878
  a.uri = prefix
820
879
  }
821
880
  parser.tag.attributes[name] = a
@@ -844,7 +903,7 @@
844
903
  parser.attribList.length = 0
845
904
  }
846
905
 
847
- function closeTag (parser) {
906
+ function closeTag(parser) {
848
907
  if (!parser.tagName) {
849
908
  strictFail(parser, 'Weird empty close tag.')
850
909
  parser.textNode += '</>'
@@ -891,7 +950,7 @@
891
950
  parser.tagName = tagName
892
951
  var s = parser.tags.length
893
952
  while (s-- > t) {
894
- var tag = parser.tag = parser.tags.pop()
953
+ var tag = (parser.tag = parser.tags.pop())
895
954
  parser.tagName = parser.tag.name
896
955
  emitNode(parser, 'onclosetag', parser.tagName)
897
956
 
@@ -915,7 +974,7 @@
915
974
  parser.state = S.TEXT
916
975
  }
917
976
 
918
- function parseEntity (parser) {
977
+ function parseEntity(parser) {
919
978
  var entity = parser.entity
920
979
  var entityLC = entity.toLowerCase()
921
980
  var num
@@ -940,7 +999,12 @@
940
999
  }
941
1000
  }
942
1001
  entity = entity.replace(/^0+/, '')
943
- if (isNaN(num) || numStr.toLowerCase() !== entity) {
1002
+ if (
1003
+ isNaN(num) ||
1004
+ numStr.toLowerCase() !== entity ||
1005
+ num < 0 ||
1006
+ num > 0x10ffff
1007
+ ) {
944
1008
  strictFail(parser, 'Invalid character entity')
945
1009
  return '&' + parser.entity + ';'
946
1010
  }
@@ -948,7 +1012,7 @@
948
1012
  return String.fromCodePoint(num)
949
1013
  }
950
1014
 
951
- function beginWhiteSpace (parser, c) {
1015
+ function beginWhiteSpace(parser, c) {
952
1016
  if (c === '<') {
953
1017
  parser.state = S.OPEN_WAKA
954
1018
  parser.startTagPosition = parser.position
@@ -961,7 +1025,7 @@
961
1025
  }
962
1026
  }
963
1027
 
964
- function charAt (chunk, i) {
1028
+ function charAt(chunk, i) {
965
1029
  var result = ''
966
1030
  if (i < chunk.length) {
967
1031
  result = chunk.charAt(i)
@@ -969,14 +1033,16 @@
969
1033
  return result
970
1034
  }
971
1035
 
972
- function write (chunk) {
1036
+ function write(chunk) {
973
1037
  var parser = this
974
1038
  if (this.error) {
975
1039
  throw this.error
976
1040
  }
977
1041
  if (parser.closed) {
978
- return error(parser,
979
- 'Cannot write after close. Assign an onready handler.')
1042
+ return error(
1043
+ parser,
1044
+ 'Cannot write after close. Assign an onready handler.'
1045
+ )
980
1046
  }
981
1047
  if (chunk === null) {
982
1048
  return end(parser)
@@ -1034,11 +1100,17 @@
1034
1100
  }
1035
1101
  parser.textNode += chunk.substring(starti, i - 1)
1036
1102
  }
1037
- if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {
1103
+ if (
1104
+ c === '<' &&
1105
+ !(parser.sawRoot && parser.closedRoot && !parser.strict)
1106
+ ) {
1038
1107
  parser.state = S.OPEN_WAKA
1039
1108
  parser.startTagPosition = parser.position
1040
1109
  } else {
1041
- if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {
1110
+ if (
1111
+ !isWhitespace(c) &&
1112
+ (!parser.sawRoot || parser.closedRoot)
1113
+ ) {
1042
1114
  strictFail(parser, 'Text data outside of root node.')
1043
1115
  }
1044
1116
  if (c === '&') {
@@ -1100,10 +1172,14 @@
1100
1172
  parser.state = S.COMMENT
1101
1173
  parser.comment = ''
1102
1174
  parser.sgmlDecl = ''
1103
- continue;
1175
+ continue
1104
1176
  }
1105
1177
 
1106
- if (parser.doctype && parser.doctype !== true && parser.sgmlDecl) {
1178
+ if (
1179
+ parser.doctype &&
1180
+ parser.doctype !== true &&
1181
+ parser.sgmlDecl
1182
+ ) {
1107
1183
  parser.state = S.DOCTYPE_DTD
1108
1184
  parser.doctype += '<!' + parser.sgmlDecl + c
1109
1185
  parser.sgmlDecl = ''
@@ -1115,8 +1191,10 @@
1115
1191
  } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {
1116
1192
  parser.state = S.DOCTYPE
1117
1193
  if (parser.doctype || parser.sawRoot) {
1118
- strictFail(parser,
1119
- 'Inappropriately located doctype declaration')
1194
+ strictFail(
1195
+ parser,
1196
+ 'Inappropriately located doctype declaration'
1197
+ )
1120
1198
  }
1121
1199
  parser.doctype = ''
1122
1200
  parser.sgmlDecl = ''
@@ -1225,10 +1303,22 @@
1225
1303
  continue
1226
1304
 
1227
1305
  case S.CDATA:
1306
+ var starti = i - 1
1307
+ while (c && c !== ']') {
1308
+ c = charAt(chunk, i++)
1309
+ if (c && parser.trackPosition) {
1310
+ parser.position++
1311
+ if (c === '\n') {
1312
+ parser.line++
1313
+ parser.column = 0
1314
+ } else {
1315
+ parser.column++
1316
+ }
1317
+ }
1318
+ }
1319
+ parser.cdata += chunk.substring(starti, i - 1)
1228
1320
  if (c === ']') {
1229
1321
  parser.state = S.CDATA_ENDING
1230
- } else {
1231
- parser.cdata += c
1232
1322
  }
1233
1323
  continue
1234
1324
 
@@ -1281,7 +1371,7 @@
1281
1371
  if (c === '>') {
1282
1372
  emitNode(parser, 'onprocessinginstruction', {
1283
1373
  name: parser.procInstName,
1284
- body: parser.procInstBody
1374
+ body: parser.procInstBody,
1285
1375
  })
1286
1376
  parser.procInstName = parser.procInstBody = ''
1287
1377
  parser.state = S.TEXT
@@ -1314,7 +1404,10 @@
1314
1404
  openTag(parser, true)
1315
1405
  closeTag(parser)
1316
1406
  } else {
1317
- strictFail(parser, 'Forward-slash in opening tag not followed by >')
1407
+ strictFail(
1408
+ parser,
1409
+ 'Forward-slash in opening tag not followed by >'
1410
+ )
1318
1411
  parser.state = S.ATTRIB
1319
1412
  }
1320
1413
  continue
@@ -1364,7 +1457,7 @@
1364
1457
  parser.attribValue = ''
1365
1458
  emitNode(parser, 'onattribute', {
1366
1459
  name: parser.attribName,
1367
- value: ''
1460
+ value: '',
1368
1461
  })
1369
1462
  parser.attribName = ''
1370
1463
  if (c === '>') {
@@ -1507,7 +1600,10 @@
1507
1600
 
1508
1601
  if (c === ';') {
1509
1602
  var parsedEntity = parseEntity(parser)
1510
- if (parser.opt.unparsedEntities && !Object.values(sax.XML_ENTITIES).includes(parsedEntity)) {
1603
+ if (
1604
+ parser.opt.unparsedEntities &&
1605
+ !Object.values(sax.XML_ENTITIES).includes(parsedEntity)
1606
+ ) {
1511
1607
  parser.entity = ''
1512
1608
  parser.state = returnState
1513
1609
  parser.write(parsedEntity)
@@ -1516,7 +1612,9 @@
1516
1612
  parser.entity = ''
1517
1613
  parser.state = returnState
1518
1614
  }
1519
- } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {
1615
+ } else if (
1616
+ isMatch(parser.entity.length ? entityBody : entityStart, c)
1617
+ ) {
1520
1618
  parser.entity += c
1521
1619
  } else {
1522
1620
  strictFail(parser, 'Invalid character in entity name')
@@ -1542,7 +1640,7 @@
1542
1640
  /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
1543
1641
  /* istanbul ignore next */
1544
1642
  if (!String.fromCodePoint) {
1545
- (function () {
1643
+ ;(function () {
1546
1644
  var stringFromCharCode = String.fromCharCode
1547
1645
  var floor = Math.floor
1548
1646
  var fromCodePoint = function () {
@@ -1561,18 +1659,20 @@
1561
1659
  if (
1562
1660
  !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
1563
1661
  codePoint < 0 || // not a valid Unicode code point
1564
- codePoint > 0x10FFFF || // not a valid Unicode code point
1662
+ codePoint > 0x10ffff || // not a valid Unicode code point
1565
1663
  floor(codePoint) !== codePoint // not an integer
1566
1664
  ) {
1567
1665
  throw RangeError('Invalid code point: ' + codePoint)
1568
1666
  }
1569
- if (codePoint <= 0xFFFF) { // BMP code point
1667
+ if (codePoint <= 0xffff) {
1668
+ // BMP code point
1570
1669
  codeUnits.push(codePoint)
1571
- } else { // Astral code point; split in surrogate halves
1670
+ } else {
1671
+ // Astral code point; split in surrogate halves
1572
1672
  // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
1573
1673
  codePoint -= 0x10000
1574
- highSurrogate = (codePoint >> 10) + 0xD800
1575
- lowSurrogate = (codePoint % 0x400) + 0xDC00
1674
+ highSurrogate = (codePoint >> 10) + 0xd800
1675
+ lowSurrogate = (codePoint % 0x400) + 0xdc00
1576
1676
  codeUnits.push(highSurrogate, lowSurrogate)
1577
1677
  }
1578
1678
  if (index + 1 === length || codeUnits.length > MAX_SIZE) {
@@ -1587,11 +1687,11 @@
1587
1687
  Object.defineProperty(String, 'fromCodePoint', {
1588
1688
  value: fromCodePoint,
1589
1689
  configurable: true,
1590
- writable: true
1690
+ writable: true,
1591
1691
  })
1592
1692
  } else {
1593
1693
  String.fromCodePoint = fromCodePoint
1594
1694
  }
1595
- }())
1695
+ })()
1596
1696
  }
1597
- })(typeof exports === 'undefined' ? this.sax = {} : exports)
1697
+ })(typeof exports === 'undefined' ? (this.sax = {}) : exports)