marked 4.1.1 → 4.2.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.
package/lib/marked.cjs CHANGED
@@ -22,7 +22,6 @@ function _defineProperties(target, props) {
22
22
  Object.defineProperty(target, descriptor.key, descriptor);
23
23
  }
24
24
  }
25
-
26
25
  function _createClass(Constructor, protoProps, staticProps) {
27
26
  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
28
27
  if (staticProps) _defineProperties(Constructor, staticProps);
@@ -31,7 +30,6 @@ function _createClass(Constructor, protoProps, staticProps) {
31
30
  });
32
31
  return Constructor;
33
32
  }
34
-
35
33
  function _unsupportedIterableToArray(o, minLen) {
36
34
  if (!o) return;
37
35
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
@@ -40,19 +38,14 @@ function _unsupportedIterableToArray(o, minLen) {
40
38
  if (n === "Map" || n === "Set") return Array.from(o);
41
39
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
42
40
  }
43
-
44
41
  function _arrayLikeToArray(arr, len) {
45
42
  if (len == null || len > arr.length) len = arr.length;
46
-
47
43
  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
48
-
49
44
  return arr2;
50
45
  }
51
-
52
46
  function _createForOfIteratorHelperLoose(o, allowArrayLike) {
53
47
  var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
54
48
  if (it) return (it = it.call(o)).next.bind(it);
55
-
56
49
  if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
57
50
  if (it) o = it;
58
51
  var i = 0;
@@ -66,7 +59,6 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
66
59
  };
67
60
  };
68
61
  }
69
-
70
62
  throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
71
63
  }
72
64
 
@@ -112,11 +104,9 @@ var escapeReplacements = {
112
104
  '"': '&quot;',
113
105
  "'": '&#39;'
114
106
  };
115
-
116
107
  var getEscapeReplacement = function getEscapeReplacement(ch) {
117
108
  return escapeReplacements[ch];
118
109
  };
119
-
120
110
  function escape(html, encode) {
121
111
  if (encode) {
122
112
  if (escapeTest.test(html)) {
@@ -127,33 +117,30 @@ function escape(html, encode) {
127
117
  return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
128
118
  }
129
119
  }
130
-
131
120
  return html;
132
121
  }
133
122
  var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
123
+
134
124
  /**
135
125
  * @param {string} html
136
126
  */
137
-
138
127
  function unescape(html) {
139
128
  // explicitly match decimal, hex, and named HTML entities
140
129
  return html.replace(unescapeTest, function (_, n) {
141
130
  n = n.toLowerCase();
142
131
  if (n === 'colon') return ':';
143
-
144
132
  if (n.charAt(0) === '#') {
145
133
  return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));
146
134
  }
147
-
148
135
  return '';
149
136
  });
150
137
  }
151
138
  var caret = /(^|[^\[])\^/g;
139
+
152
140
  /**
153
141
  * @param {string | RegExp} regex
154
142
  * @param {string} opt
155
143
  */
156
-
157
144
  function edit(regex, opt) {
158
145
  regex = typeof regex === 'string' ? regex : regex.source;
159
146
  opt = opt || '';
@@ -172,48 +159,43 @@ function edit(regex, opt) {
172
159
  }
173
160
  var nonWordAndColonTest = /[^\w:]/g;
174
161
  var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
162
+
175
163
  /**
176
164
  * @param {boolean} sanitize
177
165
  * @param {string} base
178
166
  * @param {string} href
179
167
  */
180
-
181
168
  function cleanUrl(sanitize, base, href) {
182
169
  if (sanitize) {
183
170
  var prot;
184
-
185
171
  try {
186
172
  prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();
187
173
  } catch (e) {
188
174
  return null;
189
175
  }
190
-
191
176
  if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
192
177
  return null;
193
178
  }
194
179
  }
195
-
196
180
  if (base && !originIndependentUrl.test(href)) {
197
181
  href = resolveUrl(base, href);
198
182
  }
199
-
200
183
  try {
201
184
  href = encodeURI(href).replace(/%25/g, '%');
202
185
  } catch (e) {
203
186
  return null;
204
187
  }
205
-
206
188
  return href;
207
189
  }
208
190
  var baseUrls = {};
209
191
  var justDomain = /^[^:]+:\/*[^/]*$/;
210
192
  var protocol = /^([^:]+:)[\s\S]*$/;
211
193
  var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
194
+
212
195
  /**
213
196
  * @param {string} base
214
197
  * @param {string} href
215
198
  */
216
-
217
199
  function resolveUrl(base, href) {
218
200
  if (!baseUrls[' ' + base]) {
219
201
  // we can ignore everything in base after the last slash of its path component,
@@ -225,21 +207,17 @@ function resolveUrl(base, href) {
225
207
  baseUrls[' ' + base] = rtrim(base, '/', true);
226
208
  }
227
209
  }
228
-
229
210
  base = baseUrls[' ' + base];
230
211
  var relativeBase = base.indexOf(':') === -1;
231
-
232
212
  if (href.substring(0, 2) === '//') {
233
213
  if (relativeBase) {
234
214
  return href;
235
215
  }
236
-
237
216
  return base.replace(protocol, '$1') + href;
238
217
  } else if (href.charAt(0) === '/') {
239
218
  if (relativeBase) {
240
219
  return href;
241
220
  }
242
-
243
221
  return base.replace(domain, '$1') + href;
244
222
  } else {
245
223
  return base + href;
@@ -250,52 +228,46 @@ var noopTest = {
250
228
  };
251
229
  function merge(obj) {
252
230
  var i = 1,
253
- target,
254
- key;
255
-
231
+ target,
232
+ key;
256
233
  for (; i < arguments.length; i++) {
257
234
  target = arguments[i];
258
-
259
235
  for (key in target) {
260
236
  if (Object.prototype.hasOwnProperty.call(target, key)) {
261
237
  obj[key] = target[key];
262
238
  }
263
239
  }
264
240
  }
265
-
266
241
  return obj;
267
242
  }
268
243
  function splitCells(tableRow, count) {
269
244
  // ensure that every cell-delimiting pipe has a space
270
245
  // before it to distinguish it from an escaped pipe
271
246
  var row = tableRow.replace(/\|/g, function (match, offset, str) {
272
- var escaped = false,
247
+ var escaped = false,
273
248
  curr = offset;
249
+ while (--curr >= 0 && str[curr] === '\\') {
250
+ escaped = !escaped;
251
+ }
252
+ if (escaped) {
253
+ // odd number of slashes means | is escaped
254
+ // so we leave it alone
255
+ return '|';
256
+ } else {
257
+ // add space before unescaped |
258
+ return ' |';
259
+ }
260
+ }),
261
+ cells = row.split(/ \|/);
262
+ var i = 0;
274
263
 
275
- while (--curr >= 0 && str[curr] === '\\') {
276
- escaped = !escaped;
277
- }
278
-
279
- if (escaped) {
280
- // odd number of slashes means | is escaped
281
- // so we leave it alone
282
- return '|';
283
- } else {
284
- // add space before unescaped |
285
- return ' |';
286
- }
287
- }),
288
- cells = row.split(/ \|/);
289
- var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe
290
-
264
+ // First/last cell in a row cannot be empty if it has no leading/trailing pipe
291
265
  if (!cells[0].trim()) {
292
266
  cells.shift();
293
267
  }
294
-
295
268
  if (cells.length > 0 && !cells[cells.length - 1].trim()) {
296
269
  cells.pop();
297
270
  }
298
-
299
271
  if (cells.length > count) {
300
272
  cells.splice(count);
301
273
  } else {
@@ -303,14 +275,13 @@ function splitCells(tableRow, count) {
303
275
  cells.push('');
304
276
  }
305
277
  }
306
-
307
278
  for (; i < cells.length; i++) {
308
279
  // leading or trailing whitespace is ignored per the gfm spec
309
280
  cells[i] = cells[i].trim().replace(/\\\|/g, '|');
310
281
  }
311
-
312
282
  return cells;
313
283
  }
284
+
314
285
  /**
315
286
  * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
316
287
  * /c*$/ is vulnerable to REDOS.
@@ -319,20 +290,18 @@ function splitCells(tableRow, count) {
319
290
  * @param {string} c
320
291
  * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.
321
292
  */
322
-
323
293
  function rtrim(str, c, invert) {
324
294
  var l = str.length;
325
-
326
295
  if (l === 0) {
327
296
  return '';
328
- } // Length of suffix matching the invert condition.
329
-
297
+ }
330
298
 
331
- var suffLen = 0; // Step left until we fail to match the invert condition.
299
+ // Length of suffix matching the invert condition.
300
+ var suffLen = 0;
332
301
 
302
+ // Step left until we fail to match the invert condition.
333
303
  while (suffLen < l) {
334
304
  var currChar = str.charAt(l - suffLen - 1);
335
-
336
305
  if (currChar === c && !invert) {
337
306
  suffLen++;
338
307
  } else if (currChar !== c && invert) {
@@ -341,18 +310,15 @@ function rtrim(str, c, invert) {
341
310
  break;
342
311
  }
343
312
  }
344
-
345
313
  return str.slice(0, l - suffLen);
346
314
  }
347
315
  function findClosingBracket(str, b) {
348
316
  if (str.indexOf(b[1]) === -1) {
349
317
  return -1;
350
318
  }
351
-
352
319
  var l = str.length;
353
320
  var level = 0,
354
- i = 0;
355
-
321
+ i = 0;
356
322
  for (; i < l; i++) {
357
323
  if (str[i] === '\\') {
358
324
  i++;
@@ -360,42 +326,36 @@ function findClosingBracket(str, b) {
360
326
  level++;
361
327
  } else if (str[i] === b[1]) {
362
328
  level--;
363
-
364
329
  if (level < 0) {
365
330
  return i;
366
331
  }
367
332
  }
368
333
  }
369
-
370
334
  return -1;
371
335
  }
372
336
  function checkSanitizeDeprecation(opt) {
373
337
  if (opt && opt.sanitize && !opt.silent) {
374
338
  console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');
375
339
  }
376
- } // copied from https://stackoverflow.com/a/5450113/806777
340
+ }
377
341
 
342
+ // copied from https://stackoverflow.com/a/5450113/806777
378
343
  /**
379
344
  * @param {string} pattern
380
345
  * @param {number} count
381
346
  */
382
-
383
347
  function repeatString(pattern, count) {
384
348
  if (count < 1) {
385
349
  return '';
386
350
  }
387
-
388
351
  var result = '';
389
-
390
352
  while (count > 1) {
391
353
  if (count & 1) {
392
354
  result += pattern;
393
355
  }
394
-
395
356
  count >>= 1;
396
357
  pattern += pattern;
397
358
  }
398
-
399
359
  return result + pattern;
400
360
  }
401
361
 
@@ -403,7 +363,6 @@ function outputLink(cap, link, raw, lexer) {
403
363
  var href = link.href;
404
364
  var title = link.title ? escape(link.title) : null;
405
365
  var text = cap[1].replace(/\\([\[\]])/g, '$1');
406
-
407
366
  if (cap[0].charAt(0) !== '!') {
408
367
  lexer.state.inLink = true;
409
368
  var token = {
@@ -417,7 +376,6 @@ function outputLink(cap, link, raw, lexer) {
417
376
  lexer.state.inLink = false;
418
377
  return token;
419
378
  }
420
-
421
379
  return {
422
380
  type: 'image',
423
381
  raw: raw,
@@ -426,46 +384,35 @@ function outputLink(cap, link, raw, lexer) {
426
384
  text: escape(text)
427
385
  };
428
386
  }
429
-
430
387
  function indentCodeCompensation(raw, text) {
431
388
  var matchIndentToCode = raw.match(/^(\s+)(?:```)/);
432
-
433
389
  if (matchIndentToCode === null) {
434
390
  return text;
435
391
  }
436
-
437
392
  var indentToCode = matchIndentToCode[1];
438
393
  return text.split('\n').map(function (node) {
439
394
  var matchIndentInNode = node.match(/^\s+/);
440
-
441
395
  if (matchIndentInNode === null) {
442
396
  return node;
443
397
  }
444
-
445
398
  var indentInNode = matchIndentInNode[0];
446
-
447
399
  if (indentInNode.length >= indentToCode.length) {
448
400
  return node.slice(indentToCode.length);
449
401
  }
450
-
451
402
  return node;
452
403
  }).join('\n');
453
404
  }
405
+
454
406
  /**
455
407
  * Tokenizer
456
408
  */
457
-
458
-
459
409
  var Tokenizer = /*#__PURE__*/function () {
460
410
  function Tokenizer(options) {
461
411
  this.options = options || exports.defaults;
462
412
  }
463
-
464
413
  var _proto = Tokenizer.prototype;
465
-
466
414
  _proto.space = function space(src) {
467
415
  var cap = this.rules.block.newline.exec(src);
468
-
469
416
  if (cap && cap[0].length > 0) {
470
417
  return {
471
418
  type: 'space',
@@ -473,10 +420,8 @@ var Tokenizer = /*#__PURE__*/function () {
473
420
  };
474
421
  }
475
422
  };
476
-
477
423
  _proto.code = function code(src) {
478
424
  var cap = this.rules.block.code.exec(src);
479
-
480
425
  if (cap) {
481
426
  var text = cap[0].replace(/^ {1,4}/gm, '');
482
427
  return {
@@ -487,10 +432,8 @@ var Tokenizer = /*#__PURE__*/function () {
487
432
  };
488
433
  }
489
434
  };
490
-
491
435
  _proto.fences = function fences(src) {
492
436
  var cap = this.rules.block.fences.exec(src);
493
-
494
437
  if (cap) {
495
438
  var raw = cap[0];
496
439
  var text = indentCodeCompensation(raw, cap[3] || '');
@@ -502,16 +445,14 @@ var Tokenizer = /*#__PURE__*/function () {
502
445
  };
503
446
  }
504
447
  };
505
-
506
448
  _proto.heading = function heading(src) {
507
449
  var cap = this.rules.block.heading.exec(src);
508
-
509
450
  if (cap) {
510
- var text = cap[2].trim(); // remove trailing #s
451
+ var text = cap[2].trim();
511
452
 
453
+ // remove trailing #s
512
454
  if (/#$/.test(text)) {
513
455
  var trimmed = rtrim(text, '#');
514
-
515
456
  if (this.options.pedantic) {
516
457
  text = trimmed.trim();
517
458
  } else if (!trimmed || / $/.test(trimmed)) {
@@ -519,7 +460,6 @@ var Tokenizer = /*#__PURE__*/function () {
519
460
  text = trimmed.trim();
520
461
  }
521
462
  }
522
-
523
463
  return {
524
464
  type: 'heading',
525
465
  raw: cap[0],
@@ -529,10 +469,8 @@ var Tokenizer = /*#__PURE__*/function () {
529
469
  };
530
470
  }
531
471
  };
532
-
533
472
  _proto.hr = function hr(src) {
534
473
  var cap = this.rules.block.hr.exec(src);
535
-
536
474
  if (cap) {
537
475
  return {
538
476
  type: 'hr',
@@ -540,10 +478,8 @@ var Tokenizer = /*#__PURE__*/function () {
540
478
  };
541
479
  }
542
480
  };
543
-
544
481
  _proto.blockquote = function blockquote(src) {
545
482
  var cap = this.rules.block.blockquote.exec(src);
546
-
547
483
  if (cap) {
548
484
  var text = cap[0].replace(/^ *>[ \t]?/gm, '');
549
485
  return {
@@ -554,10 +490,8 @@ var Tokenizer = /*#__PURE__*/function () {
554
490
  };
555
491
  }
556
492
  };
557
-
558
493
  _proto.list = function list(src) {
559
494
  var cap = this.rules.block.list.exec(src);
560
-
561
495
  if (cap) {
562
496
  var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;
563
497
  var bull = cap[1].trim();
@@ -571,86 +505,78 @@ var Tokenizer = /*#__PURE__*/function () {
571
505
  items: []
572
506
  };
573
507
  bull = isordered ? "\\d{1,9}\\" + bull.slice(-1) : "\\" + bull;
574
-
575
508
  if (this.options.pedantic) {
576
509
  bull = isordered ? bull : '[*+-]';
577
- } // Get next list item
578
-
510
+ }
579
511
 
580
- var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))"); // Check if current bullet point can start a new List Item
512
+ // Get next list item
513
+ var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))");
581
514
 
515
+ // Check if current bullet point can start a new List Item
582
516
  while (src) {
583
517
  endEarly = false;
584
-
585
518
  if (!(cap = itemRegex.exec(src))) {
586
519
  break;
587
520
  }
588
-
589
521
  if (this.rules.block.hr.test(src)) {
590
522
  // End list if bullet was actually HR (possibly move into itemRegex?)
591
523
  break;
592
524
  }
593
-
594
525
  raw = cap[0];
595
526
  src = src.substring(raw.length);
596
527
  line = cap[2].split('\n', 1)[0];
597
528
  nextLine = src.split('\n', 1)[0];
598
-
599
529
  if (this.options.pedantic) {
600
530
  indent = 2;
601
531
  itemContents = line.trimLeft();
602
532
  } else {
603
533
  indent = cap[2].search(/[^ ]/); // Find first non-space char
604
-
605
534
  indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
606
-
607
535
  itemContents = line.slice(indent);
608
536
  indent += cap[1].length;
609
537
  }
610
-
611
538
  blankLine = false;
612
-
613
539
  if (!line && /^ *$/.test(nextLine)) {
614
540
  // Items begin with at most one blank line
615
541
  raw += nextLine + '\n';
616
542
  src = src.substring(nextLine.length + 1);
617
543
  endEarly = true;
618
544
  }
619
-
620
545
  if (!endEarly) {
621
546
  var nextBulletRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))");
622
547
  var hrRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)");
623
548
  var fencesBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:```|~~~)");
624
- var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#"); // Check if following lines should be included in List Item
549
+ var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#");
625
550
 
551
+ // Check if following lines should be included in List Item
626
552
  while (src) {
627
553
  rawLine = src.split('\n', 1)[0];
628
- line = rawLine; // Re-align to follow commonmark nesting rules
554
+ line = rawLine;
629
555
 
556
+ // Re-align to follow commonmark nesting rules
630
557
  if (this.options.pedantic) {
631
558
  line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');
632
- } // End list item if found code fences
633
-
559
+ }
634
560
 
561
+ // End list item if found code fences
635
562
  if (fencesBeginRegex.test(line)) {
636
563
  break;
637
- } // End list item if found start of new heading
638
-
564
+ }
639
565
 
566
+ // End list item if found start of new heading
640
567
  if (headingBeginRegex.test(line)) {
641
568
  break;
642
- } // End list item if found start of new bullet
643
-
569
+ }
644
570
 
571
+ // End list item if found start of new bullet
645
572
  if (nextBulletRegex.test(line)) {
646
573
  break;
647
- } // Horizontal rule found
648
-
574
+ }
649
575
 
576
+ // Horizontal rule found
650
577
  if (hrRegex.test(src)) {
651
578
  break;
652
579
  }
653
-
654
580
  if (line.search(/[^ ]/) >= indent || !line.trim()) {
655
581
  // Dedent if possible
656
582
  itemContents += '\n' + line.slice(indent);
@@ -661,17 +587,14 @@ var Tokenizer = /*#__PURE__*/function () {
661
587
  // Otherwise, improper indentation ends this item
662
588
  break;
663
589
  }
664
-
665
590
  if (!blankLine && !line.trim()) {
666
591
  // Check if current line is blank
667
592
  blankLine = true;
668
593
  }
669
-
670
594
  raw += rawLine + '\n';
671
595
  src = src.substring(rawLine.length + 1);
672
596
  }
673
597
  }
674
-
675
598
  if (!list.loose) {
676
599
  // If the previous item ended with a blank line, the list is loose
677
600
  if (endsWithBlankLine) {
@@ -679,18 +602,16 @@ var Tokenizer = /*#__PURE__*/function () {
679
602
  } else if (/\n *\n *$/.test(raw)) {
680
603
  endsWithBlankLine = true;
681
604
  }
682
- } // Check for task list items
683
-
605
+ }
684
606
 
607
+ // Check for task list items
685
608
  if (this.options.gfm) {
686
609
  istask = /^\[[ xX]\] /.exec(itemContents);
687
-
688
610
  if (istask) {
689
611
  ischecked = istask[0] !== '[ ] ';
690
612
  itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
691
613
  }
692
614
  }
693
-
694
615
  list.items.push({
695
616
  type: 'list_item',
696
617
  raw: raw,
@@ -700,14 +621,15 @@ var Tokenizer = /*#__PURE__*/function () {
700
621
  text: itemContents
701
622
  });
702
623
  list.raw += raw;
703
- } // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
704
-
624
+ }
705
625
 
626
+ // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
706
627
  list.items[list.items.length - 1].raw = raw.trimRight();
707
628
  list.items[list.items.length - 1].text = itemContents.trimRight();
708
629
  list.raw = list.raw.trimRight();
709
- var l = list.items.length; // Item child tokens handled here at end because we needed to have the final item to trim it first
630
+ var l = list.items.length;
710
631
 
632
+ // Item child tokens handled here at end because we needed to have the final item to trim it first
711
633
  for (i = 0; i < l; i++) {
712
634
  this.lexer.state.top = false;
713
635
  list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
@@ -717,36 +639,28 @@ var Tokenizer = /*#__PURE__*/function () {
717
639
  var hasMultipleLineBreaks = spacers.every(function (t) {
718
640
  var chars = t.raw.split('');
719
641
  var lineBreaks = 0;
720
-
721
642
  for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) {
722
643
  var _char = _step.value;
723
-
724
644
  if (_char === '\n') {
725
645
  lineBreaks += 1;
726
646
  }
727
-
728
647
  if (lineBreaks > 1) {
729
648
  return true;
730
649
  }
731
650
  }
732
-
733
651
  return false;
734
652
  });
735
-
736
653
  if (!list.loose && spacers.length && hasMultipleLineBreaks) {
737
654
  // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
738
655
  list.loose = true;
739
656
  list.items[i].loose = true;
740
657
  }
741
658
  }
742
-
743
659
  return list;
744
660
  }
745
661
  };
746
-
747
662
  _proto.html = function html(src) {
748
663
  var cap = this.rules.block.html.exec(src);
749
-
750
664
  if (cap) {
751
665
  var token = {
752
666
  type: 'html',
@@ -754,21 +668,17 @@ var Tokenizer = /*#__PURE__*/function () {
754
668
  pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
755
669
  text: cap[0]
756
670
  };
757
-
758
671
  if (this.options.sanitize) {
759
672
  var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);
760
673
  token.type = 'paragraph';
761
674
  token.text = text;
762
675
  token.tokens = this.lexer.inline(text);
763
676
  }
764
-
765
677
  return token;
766
678
  }
767
679
  };
768
-
769
680
  _proto.def = function def(src) {
770
681
  var cap = this.rules.block.def.exec(src);
771
-
772
682
  if (cap) {
773
683
  if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
774
684
  var tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
@@ -781,10 +691,8 @@ var Tokenizer = /*#__PURE__*/function () {
781
691
  };
782
692
  }
783
693
  };
784
-
785
694
  _proto.table = function table(src) {
786
695
  var cap = this.rules.block.table.exec(src);
787
-
788
696
  if (cap) {
789
697
  var item = {
790
698
  type: 'table',
@@ -796,12 +704,10 @@ var Tokenizer = /*#__PURE__*/function () {
796
704
  align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
797
705
  rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []
798
706
  };
799
-
800
707
  if (item.header.length === item.align.length) {
801
708
  item.raw = cap[0];
802
709
  var l = item.align.length;
803
710
  var i, j, k, row;
804
-
805
711
  for (i = 0; i < l; i++) {
806
712
  if (/^ *-+: *$/.test(item.align[i])) {
807
713
  item.align[i] = 'right';
@@ -813,44 +719,37 @@ var Tokenizer = /*#__PURE__*/function () {
813
719
  item.align[i] = null;
814
720
  }
815
721
  }
816
-
817
722
  l = item.rows.length;
818
-
819
723
  for (i = 0; i < l; i++) {
820
724
  item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {
821
725
  return {
822
726
  text: c
823
727
  };
824
728
  });
825
- } // parse child tokens inside headers and cells
826
- // header child tokens
729
+ }
827
730
 
731
+ // parse child tokens inside headers and cells
828
732
 
733
+ // header child tokens
829
734
  l = item.header.length;
830
-
831
735
  for (j = 0; j < l; j++) {
832
736
  item.header[j].tokens = this.lexer.inline(item.header[j].text);
833
- } // cell child tokens
834
-
737
+ }
835
738
 
739
+ // cell child tokens
836
740
  l = item.rows.length;
837
-
838
741
  for (j = 0; j < l; j++) {
839
742
  row = item.rows[j];
840
-
841
743
  for (k = 0; k < row.length; k++) {
842
744
  row[k].tokens = this.lexer.inline(row[k].text);
843
745
  }
844
746
  }
845
-
846
747
  return item;
847
748
  }
848
749
  }
849
750
  };
850
-
851
751
  _proto.lheading = function lheading(src) {
852
752
  var cap = this.rules.block.lheading.exec(src);
853
-
854
753
  if (cap) {
855
754
  return {
856
755
  type: 'heading',
@@ -861,10 +760,8 @@ var Tokenizer = /*#__PURE__*/function () {
861
760
  };
862
761
  }
863
762
  };
864
-
865
763
  _proto.paragraph = function paragraph(src) {
866
764
  var cap = this.rules.block.paragraph.exec(src);
867
-
868
765
  if (cap) {
869
766
  var text = cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1];
870
767
  return {
@@ -875,10 +772,8 @@ var Tokenizer = /*#__PURE__*/function () {
875
772
  };
876
773
  }
877
774
  };
878
-
879
775
  _proto.text = function text(src) {
880
776
  var cap = this.rules.block.text.exec(src);
881
-
882
777
  if (cap) {
883
778
  return {
884
779
  type: 'text',
@@ -888,10 +783,8 @@ var Tokenizer = /*#__PURE__*/function () {
888
783
  };
889
784
  }
890
785
  };
891
-
892
786
  _proto.escape = function escape$1(src) {
893
787
  var cap = this.rules.inline.escape.exec(src);
894
-
895
788
  if (cap) {
896
789
  return {
897
790
  type: 'escape',
@@ -900,23 +793,19 @@ var Tokenizer = /*#__PURE__*/function () {
900
793
  };
901
794
  }
902
795
  };
903
-
904
796
  _proto.tag = function tag(src) {
905
797
  var cap = this.rules.inline.tag.exec(src);
906
-
907
798
  if (cap) {
908
799
  if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
909
800
  this.lexer.state.inLink = true;
910
801
  } else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
911
802
  this.lexer.state.inLink = false;
912
803
  }
913
-
914
804
  if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
915
805
  this.lexer.state.inRawBlock = true;
916
806
  } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
917
807
  this.lexer.state.inRawBlock = false;
918
808
  }
919
-
920
809
  return {
921
810
  type: this.options.sanitize ? 'text' : 'html',
922
811
  raw: cap[0],
@@ -926,29 +815,24 @@ var Tokenizer = /*#__PURE__*/function () {
926
815
  };
927
816
  }
928
817
  };
929
-
930
818
  _proto.link = function link(src) {
931
819
  var cap = this.rules.inline.link.exec(src);
932
-
933
820
  if (cap) {
934
821
  var trimmedUrl = cap[2].trim();
935
-
936
822
  if (!this.options.pedantic && /^</.test(trimmedUrl)) {
937
823
  // commonmark requires matching angle brackets
938
824
  if (!/>$/.test(trimmedUrl)) {
939
825
  return;
940
- } // ending angle bracket cannot be escaped
941
-
826
+ }
942
827
 
828
+ // ending angle bracket cannot be escaped
943
829
  var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');
944
-
945
830
  if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
946
831
  return;
947
832
  }
948
833
  } else {
949
834
  // find closing parenthesis
950
835
  var lastParenIndex = findClosingBracket(cap[2], '()');
951
-
952
836
  if (lastParenIndex > -1) {
953
837
  var start = cap[0].indexOf('!') === 0 ? 5 : 4;
954
838
  var linkLen = start + cap[1].length + lastParenIndex;
@@ -957,14 +841,11 @@ var Tokenizer = /*#__PURE__*/function () {
957
841
  cap[3] = '';
958
842
  }
959
843
  }
960
-
961
844
  var href = cap[2];
962
845
  var title = '';
963
-
964
846
  if (this.options.pedantic) {
965
847
  // split pedantic href and title
966
848
  var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
967
-
968
849
  if (link) {
969
850
  href = link[1];
970
851
  title = link[3];
@@ -972,9 +853,7 @@ var Tokenizer = /*#__PURE__*/function () {
972
853
  } else {
973
854
  title = cap[3] ? cap[3].slice(1, -1) : '';
974
855
  }
975
-
976
856
  href = href.trim();
977
-
978
857
  if (/^</.test(href)) {
979
858
  if (this.options.pedantic && !/>$/.test(trimmedUrl)) {
980
859
  // pedantic allows starting angle bracket without ending angle bracket
@@ -983,21 +862,17 @@ var Tokenizer = /*#__PURE__*/function () {
983
862
  href = href.slice(1, -1);
984
863
  }
985
864
  }
986
-
987
865
  return outputLink(cap, {
988
866
  href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
989
867
  title: title ? title.replace(this.rules.inline._escapes, '$1') : title
990
868
  }, cap[0], this.lexer);
991
869
  }
992
870
  };
993
-
994
871
  _proto.reflink = function reflink(src, links) {
995
872
  var cap;
996
-
997
873
  if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {
998
874
  var link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
999
875
  link = links[link.toLowerCase()];
1000
-
1001
876
  if (!link || !link.href) {
1002
877
  var text = cap[0].charAt(0);
1003
878
  return {
@@ -1006,39 +881,35 @@ var Tokenizer = /*#__PURE__*/function () {
1006
881
  text: text
1007
882
  };
1008
883
  }
1009
-
1010
884
  return outputLink(cap, link, cap[0], this.lexer);
1011
885
  }
1012
886
  };
1013
-
1014
887
  _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {
1015
888
  if (prevChar === void 0) {
1016
889
  prevChar = '';
1017
890
  }
1018
-
1019
891
  var match = this.rules.inline.emStrong.lDelim.exec(src);
1020
- if (!match) return; // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
892
+ if (!match) return;
1021
893
 
894
+ // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
1022
895
  if (match[3] && prevChar.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/)) return;
1023
896
  var nextChar = match[1] || match[2] || '';
1024
-
1025
897
  if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {
1026
898
  var lLength = match[0].length - 1;
1027
899
  var rDelim,
1028
- rLength,
1029
- delimTotal = lLength,
1030
- midDelimTotal = 0;
900
+ rLength,
901
+ delimTotal = lLength,
902
+ midDelimTotal = 0;
1031
903
  var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
1032
- endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?)
904
+ endReg.lastIndex = 0;
1033
905
 
906
+ // Clip maskedSrc to same section of string as src (move to lexer?)
1034
907
  maskedSrc = maskedSrc.slice(-1 * src.length + lLength);
1035
-
1036
908
  while ((match = endReg.exec(maskedSrc)) != null) {
1037
909
  rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
1038
910
  if (!rDelim) continue; // skip single * in __abc*abc__
1039
911
 
1040
912
  rLength = rDelim.length;
1041
-
1042
913
  if (match[3] || match[4]) {
1043
914
  // found another Left Delim
1044
915
  delimTotal += rLength;
@@ -1053,45 +924,42 @@ var Tokenizer = /*#__PURE__*/function () {
1053
924
 
1054
925
  delimTotal -= rLength;
1055
926
  if (delimTotal > 0) continue; // Haven't found enough closing delimiters
1056
- // Remove extra characters. *a*** -> *a*
1057
927
 
1058
- rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); // Create `em` if smallest delimiter has odd char count. *a***
928
+ // Remove extra characters. *a*** -> *a*
929
+ rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);
930
+ var raw = src.slice(0, lLength + match.index + (match[0].length - rDelim.length) + rLength);
1059
931
 
932
+ // Create `em` if smallest delimiter has odd char count. *a***
1060
933
  if (Math.min(lLength, rLength) % 2) {
1061
- var _text = src.slice(1, lLength + match.index + rLength);
1062
-
934
+ var _text = raw.slice(1, -1);
1063
935
  return {
1064
936
  type: 'em',
1065
- raw: src.slice(0, lLength + match.index + rLength + 1),
937
+ raw: raw,
1066
938
  text: _text,
1067
939
  tokens: this.lexer.inlineTokens(_text)
1068
940
  };
1069
- } // Create 'strong' if smallest delimiter has even char count. **a***
1070
-
941
+ }
1071
942
 
1072
- var text = src.slice(2, lLength + match.index + rLength - 1);
943
+ // Create 'strong' if smallest delimiter has even char count. **a***
944
+ var text = raw.slice(2, -2);
1073
945
  return {
1074
946
  type: 'strong',
1075
- raw: src.slice(0, lLength + match.index + rLength + 1),
947
+ raw: raw,
1076
948
  text: text,
1077
949
  tokens: this.lexer.inlineTokens(text)
1078
950
  };
1079
951
  }
1080
952
  }
1081
953
  };
1082
-
1083
954
  _proto.codespan = function codespan(src) {
1084
955
  var cap = this.rules.inline.code.exec(src);
1085
-
1086
956
  if (cap) {
1087
957
  var text = cap[2].replace(/\n/g, ' ');
1088
958
  var hasNonSpaceChars = /[^ ]/.test(text);
1089
959
  var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
1090
-
1091
960
  if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
1092
961
  text = text.substring(1, text.length - 1);
1093
962
  }
1094
-
1095
963
  text = escape(text, true);
1096
964
  return {
1097
965
  type: 'codespan',
@@ -1100,10 +968,8 @@ var Tokenizer = /*#__PURE__*/function () {
1100
968
  };
1101
969
  }
1102
970
  };
1103
-
1104
971
  _proto.br = function br(src) {
1105
972
  var cap = this.rules.inline.br.exec(src);
1106
-
1107
973
  if (cap) {
1108
974
  return {
1109
975
  type: 'br',
@@ -1111,10 +977,8 @@ var Tokenizer = /*#__PURE__*/function () {
1111
977
  };
1112
978
  }
1113
979
  };
1114
-
1115
980
  _proto.del = function del(src) {
1116
981
  var cap = this.rules.inline.del.exec(src);
1117
-
1118
982
  if (cap) {
1119
983
  return {
1120
984
  type: 'del',
@@ -1124,13 +988,10 @@ var Tokenizer = /*#__PURE__*/function () {
1124
988
  };
1125
989
  }
1126
990
  };
1127
-
1128
991
  _proto.autolink = function autolink(src, mangle) {
1129
992
  var cap = this.rules.inline.autolink.exec(src);
1130
-
1131
993
  if (cap) {
1132
994
  var text, href;
1133
-
1134
995
  if (cap[2] === '@') {
1135
996
  text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
1136
997
  href = 'mailto:' + text;
@@ -1138,7 +999,6 @@ var Tokenizer = /*#__PURE__*/function () {
1138
999
  text = escape(cap[1]);
1139
1000
  href = text;
1140
1001
  }
1141
-
1142
1002
  return {
1143
1003
  type: 'link',
1144
1004
  raw: cap[0],
@@ -1152,34 +1012,27 @@ var Tokenizer = /*#__PURE__*/function () {
1152
1012
  };
1153
1013
  }
1154
1014
  };
1155
-
1156
1015
  _proto.url = function url(src, mangle) {
1157
1016
  var cap;
1158
-
1159
1017
  if (cap = this.rules.inline.url.exec(src)) {
1160
1018
  var text, href;
1161
-
1162
1019
  if (cap[2] === '@') {
1163
1020
  text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
1164
1021
  href = 'mailto:' + text;
1165
1022
  } else {
1166
1023
  // do extended autolink path validation
1167
1024
  var prevCapZero;
1168
-
1169
1025
  do {
1170
1026
  prevCapZero = cap[0];
1171
1027
  cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
1172
1028
  } while (prevCapZero !== cap[0]);
1173
-
1174
1029
  text = escape(cap[0]);
1175
-
1176
1030
  if (cap[1] === 'www.') {
1177
1031
  href = 'http://' + text;
1178
1032
  } else {
1179
1033
  href = text;
1180
1034
  }
1181
1035
  }
1182
-
1183
1036
  return {
1184
1037
  type: 'link',
1185
1038
  raw: cap[0],
@@ -1193,19 +1046,15 @@ var Tokenizer = /*#__PURE__*/function () {
1193
1046
  };
1194
1047
  }
1195
1048
  };
1196
-
1197
1049
  _proto.inlineText = function inlineText(src, smartypants) {
1198
1050
  var cap = this.rules.inline.text.exec(src);
1199
-
1200
1051
  if (cap) {
1201
1052
  var text;
1202
-
1203
1053
  if (this.lexer.state.inRawBlock) {
1204
1054
  text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];
1205
1055
  } else {
1206
1056
  text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
1207
1057
  }
1208
-
1209
1058
  return {
1210
1059
  type: 'text',
1211
1060
  raw: cap[0],
@@ -1213,14 +1062,12 @@ var Tokenizer = /*#__PURE__*/function () {
1213
1062
  };
1214
1063
  }
1215
1064
  };
1216
-
1217
1065
  return Tokenizer;
1218
1066
  }();
1219
1067
 
1220
1068
  /**
1221
1069
  * Block-Level Grammar
1222
1070
  */
1223
-
1224
1071
  var block = {
1225
1072
  newline: /^(?: *(?:\n|$))+/,
1226
1073
  code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
@@ -1261,11 +1108,13 @@ block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('headin
1261
1108
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
1262
1109
  .getRegex();
1263
1110
  block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();
1111
+
1264
1112
  /**
1265
1113
  * Normal Block Grammar
1266
1114
  */
1267
1115
 
1268
1116
  block.normal = merge({}, block);
1117
+
1269
1118
  /**
1270
1119
  * GFM Block Grammar
1271
1120
  */
@@ -1274,8 +1123,8 @@ block.gfm = merge({}, block.normal, {
1274
1123
  table: '^ *([^\\n ].*\\|.*)\\n' // Header
1275
1124
  + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
1276
1125
  + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
1277
-
1278
1126
  });
1127
+
1279
1128
  block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
1280
1129
  .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
1281
1130
  .getRegex();
@@ -1297,10 +1146,10 @@ block.pedantic = merge({}, block.normal, {
1297
1146
  // fences not supported
1298
1147
  paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()
1299
1148
  });
1149
+
1300
1150
  /**
1301
1151
  * Inline-Level Grammar
1302
1152
  */
1303
-
1304
1153
  var inline = {
1305
1154
  escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
1306
1155
  autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
@@ -1318,24 +1167,28 @@ var inline = {
1318
1167
  emStrong: {
1319
1168
  lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
1320
1169
  // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.
1321
- // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a
1322
- rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
1323
- rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
1324
-
1170
+ // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a
1171
+ rDelimAst: /^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,
1172
+ rDelimUnd: /^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
1325
1173
  },
1174
+
1326
1175
  code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
1327
1176
  br: /^( {2,}|\\)\n(?!\s*$)/,
1328
1177
  del: noopTest,
1329
1178
  text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
1330
1179
  punctuation: /^([\spunctuation])/
1331
- }; // list of punctuation marks from CommonMark spec
1332
- // without * and _ to handle the different emphasis markers * and _
1180
+ };
1333
1181
 
1182
+ // list of punctuation marks from CommonMark spec
1183
+ // without * and _ to handle the different emphasis markers * and _
1334
1184
  inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
1335
- inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>
1185
+ inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();
1336
1186
 
1187
+ // sequences em should skip over [title](link), `code`, <html>
1337
1188
  inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
1338
- inline.escapedEmSt = /\\\*|\\_/g;
1189
+ // lookbehind is not available on Safari as of version 16
1190
+ // inline.escapedEmSt = /(?<=(?:^|[^\\)(?:\\[^])*)\\[*_]/g;
1191
+ inline.escapedEmSt = /(?:^|[^\\])(?:\\\\)*\\[*_]/g;
1339
1192
  inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();
1340
1193
  inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();
1341
1194
  inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();
@@ -1353,11 +1206,13 @@ inline.link = edit(inline.link).replace('label', inline._label).replace('href',
1353
1206
  inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();
1354
1207
  inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();
1355
1208
  inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();
1209
+
1356
1210
  /**
1357
1211
  * Normal Inline Grammar
1358
1212
  */
1359
1213
 
1360
1214
  inline.normal = merge({}, inline);
1215
+
1361
1216
  /**
1362
1217
  * Pedantic Inline Grammar
1363
1218
  */
@@ -1378,6 +1233,7 @@ inline.pedantic = merge({}, inline.normal, {
1378
1233
  link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(),
1379
1234
  reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex()
1380
1235
  });
1236
+
1381
1237
  /**
1382
1238
  * GFM Inline Grammar
1383
1239
  */
@@ -1404,46 +1260,46 @@ inline.breaks = merge({}, inline.gfm, {
1404
1260
  * smartypants text replacement
1405
1261
  * @param {string} text
1406
1262
  */
1407
-
1408
1263
  function smartypants(text) {
1409
- return text // em-dashes
1410
- .replace(/---/g, "\u2014") // en-dashes
1411
- .replace(/--/g, "\u2013") // opening singles
1412
- .replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018") // closing singles & apostrophes
1413
- .replace(/'/g, "\u2019") // opening doubles
1414
- .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201C") // closing doubles
1415
- .replace(/"/g, "\u201D") // ellipses
1264
+ return text
1265
+ // em-dashes
1266
+ .replace(/---/g, "\u2014")
1267
+ // en-dashes
1268
+ .replace(/--/g, "\u2013")
1269
+ // opening singles
1270
+ .replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018")
1271
+ // closing singles & apostrophes
1272
+ .replace(/'/g, "\u2019")
1273
+ // opening doubles
1274
+ .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201C")
1275
+ // closing doubles
1276
+ .replace(/"/g, "\u201D")
1277
+ // ellipses
1416
1278
  .replace(/\.{3}/g, "\u2026");
1417
1279
  }
1280
+
1418
1281
  /**
1419
1282
  * mangle email addresses
1420
1283
  * @param {string} text
1421
1284
  */
1422
-
1423
-
1424
1285
  function mangle(text) {
1425
1286
  var out = '',
1426
- i,
1427
- ch;
1287
+ i,
1288
+ ch;
1428
1289
  var l = text.length;
1429
-
1430
1290
  for (i = 0; i < l; i++) {
1431
1291
  ch = text.charCodeAt(i);
1432
-
1433
1292
  if (Math.random() > 0.5) {
1434
1293
  ch = 'x' + ch.toString(16);
1435
1294
  }
1436
-
1437
1295
  out += '&#' + ch + ';';
1438
1296
  }
1439
-
1440
1297
  return out;
1441
1298
  }
1299
+
1442
1300
  /**
1443
1301
  * Block Lexer
1444
1302
  */
1445
-
1446
-
1447
1303
  var Lexer = /*#__PURE__*/function () {
1448
1304
  function Lexer(options) {
1449
1305
  this.tokens = [];
@@ -1463,27 +1319,23 @@ var Lexer = /*#__PURE__*/function () {
1463
1319
  block: block.normal,
1464
1320
  inline: inline.normal
1465
1321
  };
1466
-
1467
1322
  if (this.options.pedantic) {
1468
1323
  rules.block = block.pedantic;
1469
1324
  rules.inline = inline.pedantic;
1470
1325
  } else if (this.options.gfm) {
1471
1326
  rules.block = block.gfm;
1472
-
1473
1327
  if (this.options.breaks) {
1474
1328
  rules.inline = inline.breaks;
1475
1329
  } else {
1476
1330
  rules.inline = inline.gfm;
1477
1331
  }
1478
1332
  }
1479
-
1480
1333
  this.tokenizer.rules = rules;
1481
1334
  }
1335
+
1482
1336
  /**
1483
1337
  * Expose Rules
1484
1338
  */
1485
-
1486
-
1487
1339
  /**
1488
1340
  * Static Lex Method
1489
1341
  */
@@ -1491,45 +1343,37 @@ var Lexer = /*#__PURE__*/function () {
1491
1343
  var lexer = new Lexer(options);
1492
1344
  return lexer.lex(src);
1493
1345
  }
1346
+
1494
1347
  /**
1495
1348
  * Static Lex Inline Method
1496
- */
1497
- ;
1498
-
1349
+ */;
1499
1350
  Lexer.lexInline = function lexInline(src, options) {
1500
1351
  var lexer = new Lexer(options);
1501
1352
  return lexer.inlineTokens(src);
1502
1353
  }
1354
+
1503
1355
  /**
1504
1356
  * Preprocessing
1505
- */
1506
- ;
1507
-
1357
+ */;
1508
1358
  var _proto = Lexer.prototype;
1509
-
1510
1359
  _proto.lex = function lex(src) {
1511
1360
  src = src.replace(/\r\n|\r/g, '\n');
1512
1361
  this.blockTokens(src, this.tokens);
1513
1362
  var next;
1514
-
1515
1363
  while (next = this.inlineQueue.shift()) {
1516
1364
  this.inlineTokens(next.src, next.tokens);
1517
1365
  }
1518
-
1519
1366
  return this.tokens;
1520
1367
  }
1368
+
1521
1369
  /**
1522
1370
  * Lexing
1523
- */
1524
- ;
1525
-
1371
+ */;
1526
1372
  _proto.blockTokens = function blockTokens(src, tokens) {
1527
1373
  var _this = this;
1528
-
1529
1374
  if (tokens === void 0) {
1530
1375
  tokens = [];
1531
1376
  }
1532
-
1533
1377
  if (this.options.pedantic) {
1534
1378
  src = src.replace(/\t/g, ' ').replace(/^ +$/gm, '');
1535
1379
  } else {
@@ -1537,9 +1381,7 @@ var Lexer = /*#__PURE__*/function () {
1537
1381
  return leading + ' '.repeat(tabs.length);
1538
1382
  });
1539
1383
  }
1540
-
1541
1384
  var token, lastToken, cutSrc, lastParagraphClipped;
1542
-
1543
1385
  while (src) {
1544
1386
  if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {
1545
1387
  if (token = extTokenizer.call({
@@ -1549,16 +1391,14 @@ var Lexer = /*#__PURE__*/function () {
1549
1391
  tokens.push(token);
1550
1392
  return true;
1551
1393
  }
1552
-
1553
1394
  return false;
1554
1395
  })) {
1555
1396
  continue;
1556
- } // newline
1557
-
1397
+ }
1558
1398
 
1399
+ // newline
1559
1400
  if (token = this.tokenizer.space(src)) {
1560
1401
  src = src.substring(token.raw.length);
1561
-
1562
1402
  if (token.raw.length === 1 && tokens.length > 0) {
1563
1403
  // if there's a single \n as a spacer, it's terminating the last line,
1564
1404
  // so move it there so that we don't get unecessary paragraph tags
@@ -1566,15 +1406,14 @@ var Lexer = /*#__PURE__*/function () {
1566
1406
  } else {
1567
1407
  tokens.push(token);
1568
1408
  }
1569
-
1570
1409
  continue;
1571
- } // code
1572
-
1410
+ }
1573
1411
 
1412
+ // code
1574
1413
  if (token = this.tokenizer.code(src)) {
1575
1414
  src = src.substring(token.raw.length);
1576
- lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.
1577
-
1415
+ lastToken = tokens[tokens.length - 1];
1416
+ // An indented code block cannot interrupt a paragraph.
1578
1417
  if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
1579
1418
  lastToken.raw += '\n' + token.raw;
1580
1419
  lastToken.text += '\n' + token.text;
@@ -1582,57 +1421,55 @@ var Lexer = /*#__PURE__*/function () {
1582
1421
  } else {
1583
1422
  tokens.push(token);
1584
1423
  }
1585
-
1586
1424
  continue;
1587
- } // fences
1588
-
1425
+ }
1589
1426
 
1427
+ // fences
1590
1428
  if (token = this.tokenizer.fences(src)) {
1591
1429
  src = src.substring(token.raw.length);
1592
1430
  tokens.push(token);
1593
1431
  continue;
1594
- } // heading
1595
-
1432
+ }
1596
1433
 
1434
+ // heading
1597
1435
  if (token = this.tokenizer.heading(src)) {
1598
1436
  src = src.substring(token.raw.length);
1599
1437
  tokens.push(token);
1600
1438
  continue;
1601
- } // hr
1602
-
1439
+ }
1603
1440
 
1441
+ // hr
1604
1442
  if (token = this.tokenizer.hr(src)) {
1605
1443
  src = src.substring(token.raw.length);
1606
1444
  tokens.push(token);
1607
1445
  continue;
1608
- } // blockquote
1609
-
1446
+ }
1610
1447
 
1448
+ // blockquote
1611
1449
  if (token = this.tokenizer.blockquote(src)) {
1612
1450
  src = src.substring(token.raw.length);
1613
1451
  tokens.push(token);
1614
1452
  continue;
1615
- } // list
1616
-
1453
+ }
1617
1454
 
1455
+ // list
1618
1456
  if (token = this.tokenizer.list(src)) {
1619
1457
  src = src.substring(token.raw.length);
1620
1458
  tokens.push(token);
1621
1459
  continue;
1622
- } // html
1623
-
1460
+ }
1624
1461
 
1462
+ // html
1625
1463
  if (token = this.tokenizer.html(src)) {
1626
1464
  src = src.substring(token.raw.length);
1627
1465
  tokens.push(token);
1628
1466
  continue;
1629
- } // def
1630
-
1467
+ }
1631
1468
 
1469
+ // def
1632
1470
  if (token = this.tokenizer.def(src)) {
1633
1471
  src = src.substring(token.raw.length);
1634
1472
  lastToken = tokens[tokens.length - 1];
1635
-
1636
1473
  if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
1637
1474
  lastToken.raw += '\n' + token.raw;
1638
1475
  lastToken.text += '\n' + token.raw;
@@ -1643,53 +1480,46 @@ var Lexer = /*#__PURE__*/function () {
1643
1480
  title: token.title
1644
1481
  };
1645
1482
  }
1646
-
1647
1483
  continue;
1648
- } // table (gfm)
1649
-
1484
+ }
1650
1485
 
1486
+ // table (gfm)
1651
1487
  if (token = this.tokenizer.table(src)) {
1652
1488
  src = src.substring(token.raw.length);
1653
1489
  tokens.push(token);
1654
1490
  continue;
1655
- } // lheading
1656
-
1491
+ }
1657
1492
 
1493
+ // lheading
1658
1494
  if (token = this.tokenizer.lheading(src)) {
1659
1495
  src = src.substring(token.raw.length);
1660
1496
  tokens.push(token);
1661
1497
  continue;
1662
- } // top-level paragraph
1663
- // prevent paragraph consuming extensions by clipping 'src' to extension start
1664
-
1498
+ }
1665
1499
 
1500
+ // top-level paragraph
1501
+ // prevent paragraph consuming extensions by clipping 'src' to extension start
1666
1502
  cutSrc = src;
1667
-
1668
1503
  if (this.options.extensions && this.options.extensions.startBlock) {
1669
1504
  (function () {
1670
1505
  var startIndex = Infinity;
1671
1506
  var tempSrc = src.slice(1);
1672
1507
  var tempStart = void 0;
1673
-
1674
1508
  _this.options.extensions.startBlock.forEach(function (getStartIndex) {
1675
1509
  tempStart = getStartIndex.call({
1676
1510
  lexer: this
1677
1511
  }, tempSrc);
1678
-
1679
1512
  if (typeof tempStart === 'number' && tempStart >= 0) {
1680
1513
  startIndex = Math.min(startIndex, tempStart);
1681
1514
  }
1682
1515
  });
1683
-
1684
1516
  if (startIndex < Infinity && startIndex >= 0) {
1685
1517
  cutSrc = src.substring(0, startIndex + 1);
1686
1518
  }
1687
1519
  })();
1688
1520
  }
1689
-
1690
1521
  if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
1691
1522
  lastToken = tokens[tokens.length - 1];
1692
-
1693
1523
  if (lastParagraphClipped && lastToken.type === 'paragraph') {
1694
1524
  lastToken.raw += '\n' + token.raw;
1695
1525
  lastToken.text += '\n' + token.text;
@@ -1698,17 +1528,15 @@ var Lexer = /*#__PURE__*/function () {
1698
1528
  } else {
1699
1529
  tokens.push(token);
1700
1530
  }
1701
-
1702
1531
  lastParagraphClipped = cutSrc.length !== src.length;
1703
1532
  src = src.substring(token.raw.length);
1704
1533
  continue;
1705
- } // text
1706
-
1534
+ }
1707
1535
 
1536
+ // text
1708
1537
  if (token = this.tokenizer.text(src)) {
1709
1538
  src = src.substring(token.raw.length);
1710
1539
  lastToken = tokens[tokens.length - 1];
1711
-
1712
1540
  if (lastToken && lastToken.type === 'text') {
1713
1541
  lastToken.raw += '\n' + token.raw;
1714
1542
  lastToken.text += '\n' + token.text;
@@ -1717,13 +1545,10 @@ var Lexer = /*#__PURE__*/function () {
1717
1545
  } else {
1718
1546
  tokens.push(token);
1719
1547
  }
1720
-
1721
1548
  continue;
1722
1549
  }
1723
-
1724
1550
  if (src) {
1725
1551
  var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
1726
-
1727
1552
  if (this.options.silent) {
1728
1553
  console.error(errMsg);
1729
1554
  break;
@@ -1732,43 +1557,38 @@ var Lexer = /*#__PURE__*/function () {
1732
1557
  }
1733
1558
  }
1734
1559
  }
1735
-
1736
1560
  this.state.top = true;
1737
1561
  return tokens;
1738
1562
  };
1739
-
1740
1563
  _proto.inline = function inline(src, tokens) {
1741
1564
  if (tokens === void 0) {
1742
1565
  tokens = [];
1743
1566
  }
1744
-
1745
1567
  this.inlineQueue.push({
1746
1568
  src: src,
1747
1569
  tokens: tokens
1748
1570
  });
1749
1571
  return tokens;
1750
1572
  }
1573
+
1751
1574
  /**
1752
1575
  * Lexing/Compiling
1753
- */
1754
- ;
1755
-
1576
+ */;
1756
1577
  _proto.inlineTokens = function inlineTokens(src, tokens) {
1757
1578
  var _this2 = this;
1758
-
1759
1579
  if (tokens === void 0) {
1760
1580
  tokens = [];
1761
1581
  }
1582
+ var token, lastToken, cutSrc;
1762
1583
 
1763
- var token, lastToken, cutSrc; // String with links masked to avoid interference with em and strong
1764
-
1584
+ // String with links masked to avoid interference with em and strong
1765
1585
  var maskedSrc = src;
1766
1586
  var match;
1767
- var keepPrevChar, prevChar; // Mask out reflinks
1587
+ var keepPrevChar, prevChar;
1768
1588
 
1589
+ // Mask out reflinks
1769
1590
  if (this.tokens.links) {
1770
1591
  var links = Object.keys(this.tokens.links);
1771
-
1772
1592
  if (links.length > 0) {
1773
1593
  while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
1774
1594
  if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
@@ -1776,25 +1596,24 @@ var Lexer = /*#__PURE__*/function () {
1776
1596
  }
1777
1597
  }
1778
1598
  }
1779
- } // Mask out other blocks
1780
-
1781
-
1599
+ }
1600
+ // Mask out other blocks
1782
1601
  while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
1783
1602
  maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
1784
- } // Mask out escaped em & strong delimiters
1785
-
1603
+ }
1786
1604
 
1605
+ // Mask out escaped em & strong delimiters
1787
1606
  while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
1788
- maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
1607
+ maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
1608
+ this.tokenizer.rules.inline.escapedEmSt.lastIndex--;
1789
1609
  }
1790
-
1791
1610
  while (src) {
1792
1611
  if (!keepPrevChar) {
1793
1612
  prevChar = '';
1794
1613
  }
1614
+ keepPrevChar = false;
1795
1615
 
1796
- keepPrevChar = false; // extensions
1797
-
1616
+ // extensions
1798
1617
  if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {
1799
1618
  if (token = extTokenizer.call({
1800
1619
  lexer: _this2
@@ -1803,148 +1622,132 @@ var Lexer = /*#__PURE__*/function () {
1803
1622
  tokens.push(token);
1804
1623
  return true;
1805
1624
  }
1806
-
1807
1625
  return false;
1808
1626
  })) {
1809
1627
  continue;
1810
- } // escape
1811
-
1628
+ }
1812
1629
 
1630
+ // escape
1813
1631
  if (token = this.tokenizer.escape(src)) {
1814
1632
  src = src.substring(token.raw.length);
1815
1633
  tokens.push(token);
1816
1634
  continue;
1817
- } // tag
1818
-
1635
+ }
1819
1636
 
1637
+ // tag
1820
1638
  if (token = this.tokenizer.tag(src)) {
1821
1639
  src = src.substring(token.raw.length);
1822
1640
  lastToken = tokens[tokens.length - 1];
1823
-
1824
1641
  if (lastToken && token.type === 'text' && lastToken.type === 'text') {
1825
1642
  lastToken.raw += token.raw;
1826
1643
  lastToken.text += token.text;
1827
1644
  } else {
1828
1645
  tokens.push(token);
1829
1646
  }
1830
-
1831
1647
  continue;
1832
- } // link
1833
-
1648
+ }
1834
1649
 
1650
+ // link
1835
1651
  if (token = this.tokenizer.link(src)) {
1836
1652
  src = src.substring(token.raw.length);
1837
1653
  tokens.push(token);
1838
1654
  continue;
1839
- } // reflink, nolink
1840
-
1655
+ }
1841
1656
 
1657
+ // reflink, nolink
1842
1658
  if (token = this.tokenizer.reflink(src, this.tokens.links)) {
1843
1659
  src = src.substring(token.raw.length);
1844
1660
  lastToken = tokens[tokens.length - 1];
1845
-
1846
1661
  if (lastToken && token.type === 'text' && lastToken.type === 'text') {
1847
1662
  lastToken.raw += token.raw;
1848
1663
  lastToken.text += token.text;
1849
1664
  } else {
1850
1665
  tokens.push(token);
1851
1666
  }
1852
-
1853
1667
  continue;
1854
- } // em & strong
1855
-
1668
+ }
1856
1669
 
1670
+ // em & strong
1857
1671
  if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
1858
1672
  src = src.substring(token.raw.length);
1859
1673
  tokens.push(token);
1860
1674
  continue;
1861
- } // code
1862
-
1675
+ }
1863
1676
 
1677
+ // code
1864
1678
  if (token = this.tokenizer.codespan(src)) {
1865
1679
  src = src.substring(token.raw.length);
1866
1680
  tokens.push(token);
1867
1681
  continue;
1868
- } // br
1869
-
1682
+ }
1870
1683
 
1684
+ // br
1871
1685
  if (token = this.tokenizer.br(src)) {
1872
1686
  src = src.substring(token.raw.length);
1873
1687
  tokens.push(token);
1874
1688
  continue;
1875
- } // del (gfm)
1876
-
1689
+ }
1877
1690
 
1691
+ // del (gfm)
1878
1692
  if (token = this.tokenizer.del(src)) {
1879
1693
  src = src.substring(token.raw.length);
1880
1694
  tokens.push(token);
1881
1695
  continue;
1882
- } // autolink
1883
-
1696
+ }
1884
1697
 
1698
+ // autolink
1885
1699
  if (token = this.tokenizer.autolink(src, mangle)) {
1886
1700
  src = src.substring(token.raw.length);
1887
1701
  tokens.push(token);
1888
1702
  continue;
1889
- } // url (gfm)
1890
-
1703
+ }
1891
1704
 
1705
+ // url (gfm)
1892
1706
  if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
1893
1707
  src = src.substring(token.raw.length);
1894
1708
  tokens.push(token);
1895
1709
  continue;
1896
- } // text
1897
- // prevent inlineText consuming extensions by clipping 'src' to extension start
1898
-
1710
+ }
1899
1711
 
1712
+ // text
1713
+ // prevent inlineText consuming extensions by clipping 'src' to extension start
1900
1714
  cutSrc = src;
1901
-
1902
1715
  if (this.options.extensions && this.options.extensions.startInline) {
1903
1716
  (function () {
1904
1717
  var startIndex = Infinity;
1905
1718
  var tempSrc = src.slice(1);
1906
1719
  var tempStart = void 0;
1907
-
1908
1720
  _this2.options.extensions.startInline.forEach(function (getStartIndex) {
1909
1721
  tempStart = getStartIndex.call({
1910
1722
  lexer: this
1911
1723
  }, tempSrc);
1912
-
1913
1724
  if (typeof tempStart === 'number' && tempStart >= 0) {
1914
1725
  startIndex = Math.min(startIndex, tempStart);
1915
1726
  }
1916
1727
  });
1917
-
1918
1728
  if (startIndex < Infinity && startIndex >= 0) {
1919
1729
  cutSrc = src.substring(0, startIndex + 1);
1920
1730
  }
1921
1731
  })();
1922
1732
  }
1923
-
1924
1733
  if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
1925
1734
  src = src.substring(token.raw.length);
1926
-
1927
1735
  if (token.raw.slice(-1) !== '_') {
1928
1736
  // Track prevChar before string of ____ started
1929
1737
  prevChar = token.raw.slice(-1);
1930
1738
  }
1931
-
1932
1739
  keepPrevChar = true;
1933
1740
  lastToken = tokens[tokens.length - 1];
1934
-
1935
1741
  if (lastToken && lastToken.type === 'text') {
1936
1742
  lastToken.raw += token.raw;
1937
1743
  lastToken.text += token.text;
1938
1744
  } else {
1939
1745
  tokens.push(token);
1940
1746
  }
1941
-
1942
1747
  continue;
1943
1748
  }
1944
-
1945
1749
  if (src) {
1946
1750
  var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
1947
-
1948
1751
  if (this.options.silent) {
1949
1752
  console.error(errMsg);
1950
1753
  break;
@@ -1953,10 +1756,8 @@ var Lexer = /*#__PURE__*/function () {
1953
1756
  }
1954
1757
  }
1955
1758
  }
1956
-
1957
1759
  return tokens;
1958
1760
  };
1959
-
1960
1761
  _createClass(Lexer, null, [{
1961
1762
  key: "rules",
1962
1763
  get: function get() {
@@ -1966,212 +1767,175 @@ var Lexer = /*#__PURE__*/function () {
1966
1767
  };
1967
1768
  }
1968
1769
  }]);
1969
-
1970
1770
  return Lexer;
1971
1771
  }();
1972
1772
 
1973
1773
  /**
1974
1774
  * Renderer
1975
1775
  */
1976
-
1977
1776
  var Renderer = /*#__PURE__*/function () {
1978
1777
  function Renderer(options) {
1979
1778
  this.options = options || exports.defaults;
1980
1779
  }
1981
-
1982
1780
  var _proto = Renderer.prototype;
1983
-
1984
1781
  _proto.code = function code(_code, infostring, escaped) {
1985
1782
  var lang = (infostring || '').match(/\S*/)[0];
1986
-
1987
1783
  if (this.options.highlight) {
1988
1784
  var out = this.options.highlight(_code, lang);
1989
-
1990
1785
  if (out != null && out !== _code) {
1991
1786
  escaped = true;
1992
1787
  _code = out;
1993
1788
  }
1994
1789
  }
1995
-
1996
1790
  _code = _code.replace(/\n$/, '') + '\n';
1997
-
1998
1791
  if (!lang) {
1999
1792
  return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
2000
1793
  }
2001
-
2002
1794
  return '<pre><code class="' + this.options.langPrefix + escape(lang, true) + '">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
2003
1795
  }
1796
+
2004
1797
  /**
2005
1798
  * @param {string} quote
2006
- */
2007
- ;
2008
-
1799
+ */;
2009
1800
  _proto.blockquote = function blockquote(quote) {
2010
1801
  return "<blockquote>\n" + quote + "</blockquote>\n";
2011
1802
  };
2012
-
2013
1803
  _proto.html = function html(_html) {
2014
1804
  return _html;
2015
1805
  }
1806
+
2016
1807
  /**
2017
1808
  * @param {string} text
2018
1809
  * @param {string} level
2019
1810
  * @param {string} raw
2020
1811
  * @param {any} slugger
2021
- */
2022
- ;
2023
-
1812
+ */;
2024
1813
  _proto.heading = function heading(text, level, raw, slugger) {
2025
1814
  if (this.options.headerIds) {
2026
1815
  var id = this.options.headerPrefix + slugger.slug(raw);
2027
1816
  return "<h" + level + " id=\"" + id + "\">" + text + "</h" + level + ">\n";
2028
- } // ignore IDs
2029
-
1817
+ }
2030
1818
 
1819
+ // ignore IDs
2031
1820
  return "<h" + level + ">" + text + "</h" + level + ">\n";
2032
1821
  };
2033
-
2034
1822
  _proto.hr = function hr() {
2035
1823
  return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
2036
1824
  };
2037
-
2038
1825
  _proto.list = function list(body, ordered, start) {
2039
1826
  var type = ordered ? 'ol' : 'ul',
2040
- startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
1827
+ startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
2041
1828
  return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
2042
1829
  }
1830
+
2043
1831
  /**
2044
1832
  * @param {string} text
2045
- */
2046
- ;
2047
-
1833
+ */;
2048
1834
  _proto.listitem = function listitem(text) {
2049
1835
  return "<li>" + text + "</li>\n";
2050
1836
  };
2051
-
2052
1837
  _proto.checkbox = function checkbox(checked) {
2053
1838
  return '<input ' + (checked ? 'checked="" ' : '') + 'disabled="" type="checkbox"' + (this.options.xhtml ? ' /' : '') + '> ';
2054
1839
  }
1840
+
2055
1841
  /**
2056
1842
  * @param {string} text
2057
- */
2058
- ;
2059
-
1843
+ */;
2060
1844
  _proto.paragraph = function paragraph(text) {
2061
1845
  return "<p>" + text + "</p>\n";
2062
1846
  }
1847
+
2063
1848
  /**
2064
1849
  * @param {string} header
2065
1850
  * @param {string} body
2066
- */
2067
- ;
2068
-
1851
+ */;
2069
1852
  _proto.table = function table(header, body) {
2070
1853
  if (body) body = "<tbody>" + body + "</tbody>";
2071
1854
  return '<table>\n' + '<thead>\n' + header + '</thead>\n' + body + '</table>\n';
2072
1855
  }
1856
+
2073
1857
  /**
2074
1858
  * @param {string} content
2075
- */
2076
- ;
2077
-
1859
+ */;
2078
1860
  _proto.tablerow = function tablerow(content) {
2079
1861
  return "<tr>\n" + content + "</tr>\n";
2080
1862
  };
2081
-
2082
1863
  _proto.tablecell = function tablecell(content, flags) {
2083
1864
  var type = flags.header ? 'th' : 'td';
2084
1865
  var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">";
2085
1866
  return tag + content + ("</" + type + ">\n");
2086
1867
  }
1868
+
2087
1869
  /**
2088
1870
  * span level renderer
2089
1871
  * @param {string} text
2090
- */
2091
- ;
2092
-
1872
+ */;
2093
1873
  _proto.strong = function strong(text) {
2094
1874
  return "<strong>" + text + "</strong>";
2095
1875
  }
1876
+
2096
1877
  /**
2097
1878
  * @param {string} text
2098
- */
2099
- ;
2100
-
1879
+ */;
2101
1880
  _proto.em = function em(text) {
2102
1881
  return "<em>" + text + "</em>";
2103
1882
  }
1883
+
2104
1884
  /**
2105
1885
  * @param {string} text
2106
- */
2107
- ;
2108
-
1886
+ */;
2109
1887
  _proto.codespan = function codespan(text) {
2110
1888
  return "<code>" + text + "</code>";
2111
1889
  };
2112
-
2113
1890
  _proto.br = function br() {
2114
1891
  return this.options.xhtml ? '<br/>' : '<br>';
2115
1892
  }
1893
+
2116
1894
  /**
2117
1895
  * @param {string} text
2118
- */
2119
- ;
2120
-
1896
+ */;
2121
1897
  _proto.del = function del(text) {
2122
1898
  return "<del>" + text + "</del>";
2123
1899
  }
1900
+
2124
1901
  /**
2125
1902
  * @param {string} href
2126
1903
  * @param {string} title
2127
1904
  * @param {string} text
2128
- */
2129
- ;
2130
-
1905
+ */;
2131
1906
  _proto.link = function link(href, title, text) {
2132
1907
  href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
2133
-
2134
1908
  if (href === null) {
2135
1909
  return text;
2136
1910
  }
2137
-
2138
1911
  var out = '<a href="' + escape(href) + '"';
2139
-
2140
1912
  if (title) {
2141
1913
  out += ' title="' + title + '"';
2142
1914
  }
2143
-
2144
1915
  out += '>' + text + '</a>';
2145
1916
  return out;
2146
1917
  }
1918
+
2147
1919
  /**
2148
1920
  * @param {string} href
2149
1921
  * @param {string} title
2150
1922
  * @param {string} text
2151
- */
2152
- ;
2153
-
1923
+ */;
2154
1924
  _proto.image = function image(href, title, text) {
2155
1925
  href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
2156
-
2157
1926
  if (href === null) {
2158
1927
  return text;
2159
1928
  }
2160
-
2161
1929
  var out = "<img src=\"" + href + "\" alt=\"" + text + "\"";
2162
-
2163
1930
  if (title) {
2164
1931
  out += " title=\"" + title + "\"";
2165
1932
  }
2166
-
2167
1933
  out += this.options.xhtml ? '/>' : '>';
2168
1934
  return out;
2169
1935
  };
2170
-
2171
1936
  _proto.text = function text(_text) {
2172
1937
  return _text;
2173
1938
  };
2174
-
2175
1939
  return Renderer;
2176
1940
  }();
2177
1941
 
@@ -2181,46 +1945,35 @@ var Renderer = /*#__PURE__*/function () {
2181
1945
  */
2182
1946
  var TextRenderer = /*#__PURE__*/function () {
2183
1947
  function TextRenderer() {}
2184
-
2185
1948
  var _proto = TextRenderer.prototype;
2186
-
2187
1949
  // no need for block level renderers
2188
1950
  _proto.strong = function strong(text) {
2189
1951
  return text;
2190
1952
  };
2191
-
2192
1953
  _proto.em = function em(text) {
2193
1954
  return text;
2194
1955
  };
2195
-
2196
1956
  _proto.codespan = function codespan(text) {
2197
1957
  return text;
2198
1958
  };
2199
-
2200
1959
  _proto.del = function del(text) {
2201
1960
  return text;
2202
1961
  };
2203
-
2204
1962
  _proto.html = function html(text) {
2205
1963
  return text;
2206
1964
  };
2207
-
2208
1965
  _proto.text = function text(_text) {
2209
1966
  return _text;
2210
1967
  };
2211
-
2212
1968
  _proto.link = function link(href, title, text) {
2213
1969
  return '' + text;
2214
1970
  };
2215
-
2216
1971
  _proto.image = function image(href, title, text) {
2217
1972
  return '' + text;
2218
1973
  };
2219
-
2220
1974
  _proto.br = function br() {
2221
1975
  return '';
2222
1976
  };
2223
-
2224
1977
  return TextRenderer;
2225
1978
  }();
2226
1979
 
@@ -2231,69 +1984,60 @@ var Slugger = /*#__PURE__*/function () {
2231
1984
  function Slugger() {
2232
1985
  this.seen = {};
2233
1986
  }
1987
+
2234
1988
  /**
2235
1989
  * @param {string} value
2236
1990
  */
2237
-
2238
-
2239
1991
  var _proto = Slugger.prototype;
2240
-
2241
1992
  _proto.serialize = function serialize(value) {
2242
- return value.toLowerCase().trim() // remove html tags
2243
- .replace(/<[!\/a-z].*?>/ig, '') // remove unwanted chars
1993
+ return value.toLowerCase().trim()
1994
+ // remove html tags
1995
+ .replace(/<[!\/a-z].*?>/ig, '')
1996
+ // remove unwanted chars
2244
1997
  .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-');
2245
1998
  }
1999
+
2246
2000
  /**
2247
2001
  * Finds the next safe (unique) slug to use
2248
2002
  * @param {string} originalSlug
2249
2003
  * @param {boolean} isDryRun
2250
- */
2251
- ;
2252
-
2004
+ */;
2253
2005
  _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {
2254
2006
  var slug = originalSlug;
2255
2007
  var occurenceAccumulator = 0;
2256
-
2257
2008
  if (this.seen.hasOwnProperty(slug)) {
2258
2009
  occurenceAccumulator = this.seen[originalSlug];
2259
-
2260
2010
  do {
2261
2011
  occurenceAccumulator++;
2262
2012
  slug = originalSlug + '-' + occurenceAccumulator;
2263
2013
  } while (this.seen.hasOwnProperty(slug));
2264
2014
  }
2265
-
2266
2015
  if (!isDryRun) {
2267
2016
  this.seen[originalSlug] = occurenceAccumulator;
2268
2017
  this.seen[slug] = 0;
2269
2018
  }
2270
-
2271
2019
  return slug;
2272
2020
  }
2021
+
2273
2022
  /**
2274
2023
  * Convert string to unique id
2275
2024
  * @param {object} [options]
2276
2025
  * @param {boolean} [options.dryrun] Generates the next unique slug without
2277
2026
  * updating the internal accumulator.
2278
- */
2279
- ;
2280
-
2027
+ */;
2281
2028
  _proto.slug = function slug(value, options) {
2282
2029
  if (options === void 0) {
2283
2030
  options = {};
2284
2031
  }
2285
-
2286
2032
  var slug = this.serialize(value);
2287
2033
  return this.getNextSafeSlug(slug, options.dryrun);
2288
2034
  };
2289
-
2290
2035
  return Slugger;
2291
2036
  }();
2292
2037
 
2293
2038
  /**
2294
2039
  * Parsing & Compiling
2295
2040
  */
2296
-
2297
2041
  var Parser = /*#__PURE__*/function () {
2298
2042
  function Parser(options) {
2299
2043
  this.options = options || exports.defaults;
@@ -2303,140 +2047,122 @@ var Parser = /*#__PURE__*/function () {
2303
2047
  this.textRenderer = new TextRenderer();
2304
2048
  this.slugger = new Slugger();
2305
2049
  }
2050
+
2306
2051
  /**
2307
2052
  * Static Parse Method
2308
2053
  */
2309
-
2310
-
2311
2054
  Parser.parse = function parse(tokens, options) {
2312
2055
  var parser = new Parser(options);
2313
2056
  return parser.parse(tokens);
2314
2057
  }
2058
+
2315
2059
  /**
2316
2060
  * Static Parse Inline Method
2317
- */
2318
- ;
2319
-
2061
+ */;
2320
2062
  Parser.parseInline = function parseInline(tokens, options) {
2321
2063
  var parser = new Parser(options);
2322
2064
  return parser.parseInline(tokens);
2323
2065
  }
2066
+
2324
2067
  /**
2325
2068
  * Parse Loop
2326
- */
2327
- ;
2328
-
2069
+ */;
2329
2070
  var _proto = Parser.prototype;
2330
-
2331
2071
  _proto.parse = function parse(tokens, top) {
2332
2072
  if (top === void 0) {
2333
2073
  top = true;
2334
2074
  }
2335
-
2336
2075
  var out = '',
2337
- i,
2338
- j,
2339
- k,
2340
- l2,
2341
- l3,
2342
- row,
2343
- cell,
2344
- header,
2345
- body,
2346
- token,
2347
- ordered,
2348
- start,
2349
- loose,
2350
- itemBody,
2351
- item,
2352
- checked,
2353
- task,
2354
- checkbox,
2355
- ret;
2076
+ i,
2077
+ j,
2078
+ k,
2079
+ l2,
2080
+ l3,
2081
+ row,
2082
+ cell,
2083
+ header,
2084
+ body,
2085
+ token,
2086
+ ordered,
2087
+ start,
2088
+ loose,
2089
+ itemBody,
2090
+ item,
2091
+ checked,
2092
+ task,
2093
+ checkbox,
2094
+ ret;
2356
2095
  var l = tokens.length;
2357
-
2358
2096
  for (i = 0; i < l; i++) {
2359
- token = tokens[i]; // Run any renderer extensions
2097
+ token = tokens[i];
2360
2098
 
2099
+ // Run any renderer extensions
2361
2100
  if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
2362
2101
  ret = this.options.extensions.renderers[token.type].call({
2363
2102
  parser: this
2364
2103
  }, token);
2365
-
2366
2104
  if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
2367
2105
  out += ret || '';
2368
2106
  continue;
2369
2107
  }
2370
2108
  }
2371
-
2372
2109
  switch (token.type) {
2373
2110
  case 'space':
2374
2111
  {
2375
2112
  continue;
2376
2113
  }
2377
-
2378
2114
  case 'hr':
2379
2115
  {
2380
2116
  out += this.renderer.hr();
2381
2117
  continue;
2382
2118
  }
2383
-
2384
2119
  case 'heading':
2385
2120
  {
2386
2121
  out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);
2387
2122
  continue;
2388
2123
  }
2389
-
2390
2124
  case 'code':
2391
2125
  {
2392
2126
  out += this.renderer.code(token.text, token.lang, token.escaped);
2393
2127
  continue;
2394
2128
  }
2395
-
2396
2129
  case 'table':
2397
2130
  {
2398
- header = ''; // header
2131
+ header = '';
2399
2132
 
2133
+ // header
2400
2134
  cell = '';
2401
2135
  l2 = token.header.length;
2402
-
2403
2136
  for (j = 0; j < l2; j++) {
2404
2137
  cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {
2405
2138
  header: true,
2406
2139
  align: token.align[j]
2407
2140
  });
2408
2141
  }
2409
-
2410
2142
  header += this.renderer.tablerow(cell);
2411
2143
  body = '';
2412
2144
  l2 = token.rows.length;
2413
-
2414
2145
  for (j = 0; j < l2; j++) {
2415
2146
  row = token.rows[j];
2416
2147
  cell = '';
2417
2148
  l3 = row.length;
2418
-
2419
2149
  for (k = 0; k < l3; k++) {
2420
2150
  cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {
2421
2151
  header: false,
2422
2152
  align: token.align[k]
2423
2153
  });
2424
2154
  }
2425
-
2426
2155
  body += this.renderer.tablerow(cell);
2427
2156
  }
2428
-
2429
2157
  out += this.renderer.table(header, body);
2430
2158
  continue;
2431
2159
  }
2432
-
2433
2160
  case 'blockquote':
2434
2161
  {
2435
2162
  body = this.parse(token.tokens);
2436
2163
  out += this.renderer.blockquote(body);
2437
2164
  continue;
2438
2165
  }
2439
-
2440
2166
  case 'list':
2441
2167
  {
2442
2168
  ordered = token.ordered;
@@ -2444,20 +2170,16 @@ var Parser = /*#__PURE__*/function () {
2444
2170
  loose = token.loose;
2445
2171
  l2 = token.items.length;
2446
2172
  body = '';
2447
-
2448
2173
  for (j = 0; j < l2; j++) {
2449
2174
  item = token.items[j];
2450
2175
  checked = item.checked;
2451
2176
  task = item.task;
2452
2177
  itemBody = '';
2453
-
2454
2178
  if (item.task) {
2455
2179
  checkbox = this.renderer.checkbox(checked);
2456
-
2457
2180
  if (loose) {
2458
2181
  if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
2459
2182
  item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
2460
-
2461
2183
  if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
2462
2184
  item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
2463
2185
  }
@@ -2471,45 +2193,36 @@ var Parser = /*#__PURE__*/function () {
2471
2193
  itemBody += checkbox;
2472
2194
  }
2473
2195
  }
2474
-
2475
2196
  itemBody += this.parse(item.tokens, loose);
2476
2197
  body += this.renderer.listitem(itemBody, task, checked);
2477
2198
  }
2478
-
2479
2199
  out += this.renderer.list(body, ordered, start);
2480
2200
  continue;
2481
2201
  }
2482
-
2483
2202
  case 'html':
2484
2203
  {
2485
2204
  // TODO parse inline content if parameter markdown=1
2486
2205
  out += this.renderer.html(token.text);
2487
2206
  continue;
2488
2207
  }
2489
-
2490
2208
  case 'paragraph':
2491
2209
  {
2492
2210
  out += this.renderer.paragraph(this.parseInline(token.tokens));
2493
2211
  continue;
2494
2212
  }
2495
-
2496
2213
  case 'text':
2497
2214
  {
2498
2215
  body = token.tokens ? this.parseInline(token.tokens) : token.text;
2499
-
2500
2216
  while (i + 1 < l && tokens[i + 1].type === 'text') {
2501
2217
  token = tokens[++i];
2502
2218
  body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
2503
2219
  }
2504
-
2505
2220
  out += top ? this.renderer.paragraph(body) : body;
2506
2221
  continue;
2507
2222
  }
2508
-
2509
2223
  default:
2510
2224
  {
2511
2225
  var errMsg = 'Token with "' + token.type + '" type was not found.';
2512
-
2513
2226
  if (this.options.silent) {
2514
2227
  console.error(errMsg);
2515
2228
  return;
@@ -2519,101 +2232,86 @@ var Parser = /*#__PURE__*/function () {
2519
2232
  }
2520
2233
  }
2521
2234
  }
2522
-
2523
2235
  return out;
2524
2236
  }
2237
+
2525
2238
  /**
2526
2239
  * Parse Inline Tokens
2527
- */
2528
- ;
2529
-
2240
+ */;
2530
2241
  _proto.parseInline = function parseInline(tokens, renderer) {
2531
2242
  renderer = renderer || this.renderer;
2532
2243
  var out = '',
2533
- i,
2534
- token,
2535
- ret;
2244
+ i,
2245
+ token,
2246
+ ret;
2536
2247
  var l = tokens.length;
2537
-
2538
2248
  for (i = 0; i < l; i++) {
2539
- token = tokens[i]; // Run any renderer extensions
2249
+ token = tokens[i];
2540
2250
 
2251
+ // Run any renderer extensions
2541
2252
  if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
2542
2253
  ret = this.options.extensions.renderers[token.type].call({
2543
2254
  parser: this
2544
2255
  }, token);
2545
-
2546
2256
  if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
2547
2257
  out += ret || '';
2548
2258
  continue;
2549
2259
  }
2550
2260
  }
2551
-
2552
2261
  switch (token.type) {
2553
2262
  case 'escape':
2554
2263
  {
2555
2264
  out += renderer.text(token.text);
2556
2265
  break;
2557
2266
  }
2558
-
2559
2267
  case 'html':
2560
2268
  {
2561
2269
  out += renderer.html(token.text);
2562
2270
  break;
2563
2271
  }
2564
-
2565
2272
  case 'link':
2566
2273
  {
2567
2274
  out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
2568
2275
  break;
2569
2276
  }
2570
-
2571
2277
  case 'image':
2572
2278
  {
2573
2279
  out += renderer.image(token.href, token.title, token.text);
2574
2280
  break;
2575
2281
  }
2576
-
2577
2282
  case 'strong':
2578
2283
  {
2579
2284
  out += renderer.strong(this.parseInline(token.tokens, renderer));
2580
2285
  break;
2581
2286
  }
2582
-
2583
2287
  case 'em':
2584
2288
  {
2585
2289
  out += renderer.em(this.parseInline(token.tokens, renderer));
2586
2290
  break;
2587
2291
  }
2588
-
2589
2292
  case 'codespan':
2590
2293
  {
2591
2294
  out += renderer.codespan(token.text);
2592
2295
  break;
2593
2296
  }
2594
-
2595
2297
  case 'br':
2596
2298
  {
2597
2299
  out += renderer.br();
2598
2300
  break;
2599
2301
  }
2600
-
2601
2302
  case 'del':
2602
2303
  {
2603
2304
  out += renderer.del(this.parseInline(token.tokens, renderer));
2604
2305
  break;
2605
2306
  }
2606
-
2607
2307
  case 'text':
2608
2308
  {
2609
2309
  out += renderer.text(token.text);
2610
2310
  break;
2611
2311
  }
2612
-
2613
2312
  default:
2614
2313
  {
2615
2314
  var errMsg = 'Token with "' + token.type + '" type was not found.';
2616
-
2617
2315
  if (this.options.silent) {
2618
2316
  console.error(errMsg);
2619
2317
  return;
@@ -2623,68 +2321,54 @@ var Parser = /*#__PURE__*/function () {
2623
2321
  }
2624
2322
  }
2625
2323
  }
2626
-
2627
2324
  return out;
2628
2325
  };
2629
-
2630
2326
  return Parser;
2631
2327
  }();
2632
2328
 
2633
2329
  /**
2634
2330
  * Marked
2635
2331
  */
2636
-
2637
2332
  function marked(src, opt, callback) {
2638
2333
  // throw error in case of non string input
2639
2334
  if (typeof src === 'undefined' || src === null) {
2640
2335
  throw new Error('marked(): input parameter is undefined or null');
2641
2336
  }
2642
-
2643
2337
  if (typeof src !== 'string') {
2644
2338
  throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
2645
2339
  }
2646
-
2647
2340
  if (typeof opt === 'function') {
2648
2341
  callback = opt;
2649
2342
  opt = null;
2650
2343
  }
2651
-
2652
2344
  opt = merge({}, marked.defaults, opt || {});
2653
2345
  checkSanitizeDeprecation(opt);
2654
-
2655
2346
  if (callback) {
2656
2347
  var highlight = opt.highlight;
2657
2348
  var tokens;
2658
-
2659
2349
  try {
2660
2350
  tokens = Lexer.lex(src, opt);
2661
2351
  } catch (e) {
2662
2352
  return callback(e);
2663
2353
  }
2664
-
2665
2354
  var done = function done(err) {
2666
2355
  var out;
2667
-
2668
2356
  if (!err) {
2669
2357
  try {
2670
2358
  if (opt.walkTokens) {
2671
2359
  marked.walkTokens(tokens, opt.walkTokens);
2672
2360
  }
2673
-
2674
2361
  out = Parser.parse(tokens, opt);
2675
2362
  } catch (e) {
2676
2363
  err = e;
2677
2364
  }
2678
2365
  }
2679
-
2680
2366
  opt.highlight = highlight;
2681
2367
  return err ? callback(err) : callback(null, out);
2682
2368
  };
2683
-
2684
2369
  if (!highlight || highlight.length < 3) {
2685
2370
  return done();
2686
2371
  }
2687
-
2688
2372
  delete opt.highlight;
2689
2373
  if (!tokens.length) return done();
2690
2374
  var pending = 0;
@@ -2696,14 +2380,11 @@ function marked(src, opt, callback) {
2696
2380
  if (err) {
2697
2381
  return done(err);
2698
2382
  }
2699
-
2700
2383
  if (code != null && code !== token.text) {
2701
2384
  token.text = code;
2702
2385
  token.escaped = true;
2703
2386
  }
2704
-
2705
2387
  pending--;
2706
-
2707
2388
  if (pending === 0) {
2708
2389
  done();
2709
2390
  }
@@ -2711,42 +2392,34 @@ function marked(src, opt, callback) {
2711
2392
  }, 0);
2712
2393
  }
2713
2394
  });
2714
-
2715
2395
  if (pending === 0) {
2716
2396
  done();
2717
2397
  }
2718
-
2719
2398
  return;
2720
2399
  }
2721
-
2722
2400
  function onError(e) {
2723
2401
  e.message += '\nPlease report this to https://github.com/markedjs/marked.';
2724
-
2725
2402
  if (opt.silent) {
2726
2403
  return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
2727
2404
  }
2728
-
2729
2405
  throw e;
2730
2406
  }
2731
-
2732
2407
  try {
2733
2408
  var _tokens = Lexer.lex(src, opt);
2734
-
2735
2409
  if (opt.walkTokens) {
2736
2410
  if (opt.async) {
2737
2411
  return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
2738
2412
  return Parser.parse(_tokens, opt);
2739
2413
  })["catch"](onError);
2740
2414
  }
2741
-
2742
2415
  marked.walkTokens(_tokens, opt.walkTokens);
2743
2416
  }
2744
-
2745
2417
  return Parser.parse(_tokens, opt);
2746
2418
  } catch (e) {
2747
2419
  onError(e);
2748
2420
  }
2749
2421
  }
2422
+
2750
2423
  /**
2751
2424
  * Options
2752
2425
  */
@@ -2756,9 +2429,9 @@ marked.options = marked.setOptions = function (opt) {
2756
2429
  changeDefaults(marked.defaults);
2757
2430
  return marked;
2758
2431
  };
2759
-
2760
2432
  marked.getDefaults = getDefaults;
2761
2433
  marked.defaults = exports.defaults;
2434
+
2762
2435
  /**
2763
2436
  * Use Extension
2764
2437
  */
@@ -2767,7 +2440,6 @@ marked.use = function () {
2767
2440
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
2768
2441
  args[_key] = arguments[_key];
2769
2442
  }
2770
-
2771
2443
  var opts = merge.apply(void 0, [{}].concat(args));
2772
2444
  var extensions = marked.defaults.extensions || {
2773
2445
  renderers: {},
@@ -2782,43 +2454,35 @@ marked.use = function () {
2782
2454
  if (!ext.name) {
2783
2455
  throw new Error('extension name required');
2784
2456
  }
2785
-
2786
2457
  if (ext.renderer) {
2787
2458
  // Renderer extensions
2788
2459
  var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;
2789
-
2790
2460
  if (prevRenderer) {
2791
2461
  // Replace extension with func to run new extension but fall back if false
2792
2462
  extensions.renderers[ext.name] = function () {
2793
2463
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
2794
2464
  args[_key2] = arguments[_key2];
2795
2465
  }
2796
-
2797
2466
  var ret = ext.renderer.apply(this, args);
2798
-
2799
2467
  if (ret === false) {
2800
2468
  ret = prevRenderer.apply(this, args);
2801
2469
  }
2802
-
2803
2470
  return ret;
2804
2471
  };
2805
2472
  } else {
2806
2473
  extensions.renderers[ext.name] = ext.renderer;
2807
2474
  }
2808
2475
  }
2809
-
2810
2476
  if (ext.tokenizer) {
2811
2477
  // Tokenizer Extensions
2812
2478
  if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {
2813
2479
  throw new Error("extension level must be 'block' or 'inline'");
2814
2480
  }
2815
-
2816
2481
  if (extensions[ext.level]) {
2817
2482
  extensions[ext.level].unshift(ext.tokenizer);
2818
2483
  } else {
2819
2484
  extensions[ext.level] = [ext.tokenizer];
2820
2485
  }
2821
-
2822
2486
  if (ext.start) {
2823
2487
  // Function to check for start of token
2824
2488
  if (ext.level === 'block') {
@@ -2836,110 +2500,89 @@ marked.use = function () {
2836
2500
  }
2837
2501
  }
2838
2502
  }
2839
-
2840
2503
  if (ext.childTokens) {
2841
2504
  // Child tokens to be visited by walkTokens
2842
2505
  extensions.childTokens[ext.name] = ext.childTokens;
2843
2506
  }
2844
2507
  });
2845
- } // ==-- Parse "overwrite" extensions --== //
2846
-
2508
+ }
2847
2509
 
2510
+ // ==-- Parse "overwrite" extensions --== //
2848
2511
  if (pack.renderer) {
2849
2512
  (function () {
2850
2513
  var renderer = marked.defaults.renderer || new Renderer();
2851
-
2852
2514
  var _loop = function _loop(prop) {
2853
- var prevRenderer = renderer[prop]; // Replace renderer with func to run extension, but fall back if false
2854
-
2515
+ var prevRenderer = renderer[prop];
2516
+ // Replace renderer with func to run extension, but fall back if false
2855
2517
  renderer[prop] = function () {
2856
2518
  for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
2857
2519
  args[_key3] = arguments[_key3];
2858
2520
  }
2859
-
2860
2521
  var ret = pack.renderer[prop].apply(renderer, args);
2861
-
2862
2522
  if (ret === false) {
2863
2523
  ret = prevRenderer.apply(renderer, args);
2864
2524
  }
2865
-
2866
2525
  return ret;
2867
2526
  };
2868
2527
  };
2869
-
2870
2528
  for (var prop in pack.renderer) {
2871
2529
  _loop(prop);
2872
2530
  }
2873
-
2874
2531
  opts.renderer = renderer;
2875
2532
  })();
2876
2533
  }
2877
-
2878
2534
  if (pack.tokenizer) {
2879
2535
  (function () {
2880
2536
  var tokenizer = marked.defaults.tokenizer || new Tokenizer();
2881
-
2882
2537
  var _loop2 = function _loop2(prop) {
2883
- var prevTokenizer = tokenizer[prop]; // Replace tokenizer with func to run extension, but fall back if false
2884
-
2538
+ var prevTokenizer = tokenizer[prop];
2539
+ // Replace tokenizer with func to run extension, but fall back if false
2885
2540
  tokenizer[prop] = function () {
2886
2541
  for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
2887
2542
  args[_key4] = arguments[_key4];
2888
2543
  }
2889
-
2890
2544
  var ret = pack.tokenizer[prop].apply(tokenizer, args);
2891
-
2892
2545
  if (ret === false) {
2893
2546
  ret = prevTokenizer.apply(tokenizer, args);
2894
2547
  }
2895
-
2896
2548
  return ret;
2897
2549
  };
2898
2550
  };
2899
-
2900
2551
  for (var prop in pack.tokenizer) {
2901
2552
  _loop2(prop);
2902
2553
  }
2903
-
2904
2554
  opts.tokenizer = tokenizer;
2905
2555
  })();
2906
- } // ==-- Parse WalkTokens extensions --== //
2907
-
2556
+ }
2908
2557
 
2558
+ // ==-- Parse WalkTokens extensions --== //
2909
2559
  if (pack.walkTokens) {
2910
2560
  var _walkTokens = marked.defaults.walkTokens;
2911
-
2912
2561
  opts.walkTokens = function (token) {
2913
2562
  var values = [];
2914
2563
  values.push(pack.walkTokens.call(this, token));
2915
-
2916
2564
  if (_walkTokens) {
2917
2565
  values = values.concat(_walkTokens.call(this, token));
2918
2566
  }
2919
-
2920
2567
  return values;
2921
2568
  };
2922
2569
  }
2923
-
2924
2570
  if (hasExtensions) {
2925
2571
  opts.extensions = extensions;
2926
2572
  }
2927
-
2928
2573
  marked.setOptions(opts);
2929
2574
  });
2930
2575
  };
2576
+
2931
2577
  /**
2932
2578
  * Run callback for every token
2933
2579
  */
2934
2580
 
2935
-
2936
2581
  marked.walkTokens = function (tokens, callback) {
2937
2582
  var values = [];
2938
-
2939
2583
  var _loop3 = function _loop3() {
2940
2584
  var token = _step.value;
2941
2585
  values = values.concat(callback.call(marked, token));
2942
-
2943
2586
  switch (token.type) {
2944
2587
  case 'table':
2945
2588
  {
@@ -2947,25 +2590,20 @@ marked.walkTokens = function (tokens, callback) {
2947
2590
  var cell = _step2.value;
2948
2591
  values = values.concat(marked.walkTokens(cell.tokens, callback));
2949
2592
  }
2950
-
2951
2593
  for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {
2952
2594
  var row = _step3.value;
2953
-
2954
2595
  for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {
2955
2596
  var _cell = _step4.value;
2956
2597
  values = values.concat(marked.walkTokens(_cell.tokens, callback));
2957
2598
  }
2958
2599
  }
2959
-
2960
2600
  break;
2961
2601
  }
2962
-
2963
2602
  case 'list':
2964
2603
  {
2965
2604
  values = values.concat(marked.walkTokens(token.items, callback));
2966
2605
  break;
2967
2606
  }
2968
-
2969
2607
  default:
2970
2608
  {
2971
2609
  if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {
@@ -2979,55 +2617,44 @@ marked.walkTokens = function (tokens, callback) {
2979
2617
  }
2980
2618
  }
2981
2619
  };
2982
-
2983
2620
  for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
2984
2621
  _loop3();
2985
2622
  }
2986
-
2987
2623
  return values;
2988
2624
  };
2625
+
2989
2626
  /**
2990
2627
  * Parse Inline
2991
2628
  * @param {string} src
2992
2629
  */
2993
-
2994
-
2995
2630
  marked.parseInline = function (src, opt) {
2996
2631
  // throw error in case of non string input
2997
2632
  if (typeof src === 'undefined' || src === null) {
2998
2633
  throw new Error('marked.parseInline(): input parameter is undefined or null');
2999
2634
  }
3000
-
3001
2635
  if (typeof src !== 'string') {
3002
2636
  throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
3003
2637
  }
3004
-
3005
2638
  opt = merge({}, marked.defaults, opt || {});
3006
2639
  checkSanitizeDeprecation(opt);
3007
-
3008
2640
  try {
3009
2641
  var tokens = Lexer.lexInline(src, opt);
3010
-
3011
2642
  if (opt.walkTokens) {
3012
2643
  marked.walkTokens(tokens, opt.walkTokens);
3013
2644
  }
3014
-
3015
2645
  return Parser.parseInline(tokens, opt);
3016
2646
  } catch (e) {
3017
2647
  e.message += '\nPlease report this to https://github.com/markedjs/marked.';
3018
-
3019
2648
  if (opt.silent) {
3020
2649
  return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
3021
2650
  }
3022
-
3023
2651
  throw e;
3024
2652
  }
3025
2653
  };
2654
+
3026
2655
  /**
3027
2656
  * Expose
3028
2657
  */
3029
-
3030
-
3031
2658
  marked.Parser = Parser;
3032
2659
  marked.parser = Parser.parse;
3033
2660
  marked.Renderer = Renderer;