marked 2.1.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/marked.esm.js +250 -303
- package/lib/marked.js +284 -302
- package/marked.min.js +1 -1
- package/package.json +13 -12
- package/src/Lexer.js +40 -102
- package/src/Parser.js +7 -7
- package/src/Tokenizer.js +191 -169
- package/src/helpers.js +4 -0
- package/src/marked.js +4 -4
- package/src/rules.js +4 -24
package/lib/marked.esm.js
CHANGED
|
@@ -208,6 +208,10 @@ function splitCells$1(tableRow, count) {
|
|
|
208
208
|
cells = row.split(/ \|/);
|
|
209
209
|
let i = 0;
|
|
210
210
|
|
|
211
|
+
// First/last cell in a row cannot be empty if it has no leading/trailing pipe
|
|
212
|
+
if (!cells[0].trim()) { cells.shift(); }
|
|
213
|
+
if (!cells[cells.length - 1].trim()) { cells.pop(); }
|
|
214
|
+
|
|
211
215
|
if (cells.length > count) {
|
|
212
216
|
cells.splice(count);
|
|
213
217
|
} else {
|
|
@@ -315,18 +319,20 @@ const {
|
|
|
315
319
|
findClosingBracket
|
|
316
320
|
} = helpers;
|
|
317
321
|
|
|
318
|
-
function outputLink(cap, link, raw) {
|
|
322
|
+
function outputLink(cap, link, raw, lexer) {
|
|
319
323
|
const href = link.href;
|
|
320
324
|
const title = link.title ? escape$2(link.title) : null;
|
|
321
325
|
const text = cap[1].replace(/\\([\[\]])/g, '$1');
|
|
322
326
|
|
|
323
327
|
if (cap[0].charAt(0) !== '!') {
|
|
328
|
+
lexer.state.inLink = true;
|
|
324
329
|
return {
|
|
325
330
|
type: 'link',
|
|
326
331
|
raw,
|
|
327
332
|
href,
|
|
328
333
|
title,
|
|
329
|
-
text
|
|
334
|
+
text,
|
|
335
|
+
tokens: lexer.inlineTokens(text, [])
|
|
330
336
|
};
|
|
331
337
|
} else {
|
|
332
338
|
return {
|
|
@@ -434,48 +440,15 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
434
440
|
}
|
|
435
441
|
}
|
|
436
442
|
|
|
437
|
-
|
|
443
|
+
const token = {
|
|
438
444
|
type: 'heading',
|
|
439
445
|
raw: cap[0],
|
|
440
446
|
depth: cap[1].length,
|
|
441
|
-
text: text
|
|
447
|
+
text: text,
|
|
448
|
+
tokens: []
|
|
442
449
|
};
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
nptable(src) {
|
|
447
|
-
const cap = this.rules.block.nptable.exec(src);
|
|
448
|
-
if (cap) {
|
|
449
|
-
const item = {
|
|
450
|
-
type: 'table',
|
|
451
|
-
header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
|
|
452
|
-
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
|
453
|
-
cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [],
|
|
454
|
-
raw: cap[0]
|
|
455
|
-
};
|
|
456
|
-
|
|
457
|
-
if (item.header.length === item.align.length) {
|
|
458
|
-
let l = item.align.length;
|
|
459
|
-
let i;
|
|
460
|
-
for (i = 0; i < l; i++) {
|
|
461
|
-
if (/^ *-+: *$/.test(item.align[i])) {
|
|
462
|
-
item.align[i] = 'right';
|
|
463
|
-
} else if (/^ *:-+: *$/.test(item.align[i])) {
|
|
464
|
-
item.align[i] = 'center';
|
|
465
|
-
} else if (/^ *:-+ *$/.test(item.align[i])) {
|
|
466
|
-
item.align[i] = 'left';
|
|
467
|
-
} else {
|
|
468
|
-
item.align[i] = null;
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
l = item.cells.length;
|
|
473
|
-
for (i = 0; i < l; i++) {
|
|
474
|
-
item.cells[i] = splitCells(item.cells[i], item.header.length);
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
return item;
|
|
478
|
-
}
|
|
450
|
+
this.lexer.inline(token.text, token.tokens);
|
|
451
|
+
return token;
|
|
479
452
|
}
|
|
480
453
|
}
|
|
481
454
|
|
|
@@ -497,138 +470,155 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
497
470
|
return {
|
|
498
471
|
type: 'blockquote',
|
|
499
472
|
raw: cap[0],
|
|
473
|
+
tokens: this.lexer.blockTokens(text, []),
|
|
500
474
|
text
|
|
501
475
|
};
|
|
502
476
|
}
|
|
503
477
|
}
|
|
504
478
|
|
|
505
479
|
list(src) {
|
|
506
|
-
|
|
480
|
+
let cap = this.rules.block.list.exec(src);
|
|
507
481
|
if (cap) {
|
|
508
|
-
let raw
|
|
509
|
-
|
|
482
|
+
let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,
|
|
483
|
+
line, lines, itemContents;
|
|
484
|
+
|
|
485
|
+
let bull = cap[1].trim();
|
|
510
486
|
const isordered = bull.length > 1;
|
|
511
487
|
|
|
512
488
|
const list = {
|
|
513
489
|
type: 'list',
|
|
514
|
-
raw,
|
|
490
|
+
raw: '',
|
|
515
491
|
ordered: isordered,
|
|
516
492
|
start: isordered ? +bull.slice(0, -1) : '',
|
|
517
493
|
loose: false,
|
|
518
494
|
items: []
|
|
519
495
|
};
|
|
520
496
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
let l = itemMatch.length;
|
|
536
|
-
bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);
|
|
537
|
-
for (let i = 0; i < l; i++) {
|
|
538
|
-
item = itemMatch[i];
|
|
539
|
-
raw = item;
|
|
540
|
-
|
|
541
|
-
if (!this.options.pedantic) {
|
|
542
|
-
// Determine if current item contains the end of the list
|
|
543
|
-
endMatch = item.match(new RegExp('\\n\\s*\\n {0,' + (bcurr[0].length - 1) + '}\\S'));
|
|
544
|
-
if (endMatch) {
|
|
545
|
-
addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\n').length;
|
|
546
|
-
list.raw = list.raw.substring(0, list.raw.length - addBack);
|
|
547
|
-
|
|
548
|
-
item = item.substring(0, endMatch.index);
|
|
549
|
-
raw = item;
|
|
550
|
-
l = i + 1;
|
|
551
|
-
}
|
|
497
|
+
bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`;
|
|
498
|
+
|
|
499
|
+
if (this.options.pedantic) {
|
|
500
|
+
bull = isordered ? bull : '[*+-]';
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
// Get next list item
|
|
504
|
+
const itemRegex = new RegExp(`^( {0,3}${bull})((?: [^\\n]*| *)(?:\\n[^\\n]*)*(?:\\n|$))`);
|
|
505
|
+
|
|
506
|
+
// Get each top-level item
|
|
507
|
+
while (src) {
|
|
508
|
+
if (this.rules.block.hr.test(src)) { // End list if we encounter an HR (possibly move into itemRegex?)
|
|
509
|
+
break;
|
|
552
510
|
}
|
|
553
511
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
if (i !== l - 1) {
|
|
557
|
-
bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);
|
|
558
|
-
if (
|
|
559
|
-
!this.options.pedantic
|
|
560
|
-
? bnext[1].length >= bcurr[0].length || bnext[1].length > 3
|
|
561
|
-
: bnext[1].length > bcurr[1].length
|
|
562
|
-
) {
|
|
563
|
-
// nested list or continuation
|
|
564
|
-
itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\n$/) ? '' : '\n') + itemMatch[i + 1]);
|
|
565
|
-
i--;
|
|
566
|
-
l--;
|
|
567
|
-
continue;
|
|
568
|
-
} else if (
|
|
569
|
-
// different bullet style
|
|
570
|
-
!this.options.pedantic || this.options.smartLists
|
|
571
|
-
? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]
|
|
572
|
-
: isordered === (bnext[2].length === 1)
|
|
573
|
-
) {
|
|
574
|
-
addBack = itemMatch.slice(i + 1).join('\n').length;
|
|
575
|
-
list.raw = list.raw.substring(0, list.raw.length - addBack);
|
|
576
|
-
i = l - 1;
|
|
577
|
-
}
|
|
578
|
-
bcurr = bnext;
|
|
512
|
+
if (!(cap = itemRegex.exec(src))) {
|
|
513
|
+
break;
|
|
579
514
|
}
|
|
580
515
|
|
|
581
|
-
|
|
582
|
-
// so it is seen as the next token.
|
|
583
|
-
space = item.length;
|
|
584
|
-
item = item.replace(/^ *([*+-]|\d+[.)]) ?/, '');
|
|
516
|
+
lines = cap[2].split('\n');
|
|
585
517
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
518
|
+
if (this.options.pedantic) {
|
|
519
|
+
indent = 2;
|
|
520
|
+
itemContents = lines[0].trimLeft();
|
|
521
|
+
} else {
|
|
522
|
+
indent = cap[2].search(/[^ ]/); // Find first non-space char
|
|
523
|
+
indent = cap[1].length + (indent > 4 ? 1 : indent); // intented code blocks after 4 spaces; indent is always 1
|
|
524
|
+
itemContents = lines[0].slice(indent - cap[1].length);
|
|
593
525
|
}
|
|
594
526
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
527
|
+
blankLine = false;
|
|
528
|
+
raw = cap[0];
|
|
529
|
+
|
|
530
|
+
if (!lines[0] && /^ *$/.test(lines[1])) { // items begin with at most one blank line
|
|
531
|
+
raw = cap[1] + lines.slice(0, 2).join('\n') + '\n';
|
|
532
|
+
list.loose = true;
|
|
533
|
+
lines = [];
|
|
599
534
|
}
|
|
600
535
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
536
|
+
const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])`);
|
|
537
|
+
|
|
538
|
+
for (i = 1; i < lines.length; i++) {
|
|
539
|
+
line = lines[i];
|
|
540
|
+
|
|
541
|
+
if (this.options.pedantic) { // Re-align to follow commonmark nesting rules
|
|
542
|
+
line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// End list item if found start of new bullet
|
|
546
|
+
if (nextBulletRegex.test(line)) {
|
|
547
|
+
raw = cap[1] + lines.slice(0, i).join('\n') + '\n';
|
|
548
|
+
break;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// Until we encounter a blank line, item contents do not need indentation
|
|
552
|
+
if (!blankLine) {
|
|
553
|
+
if (!line.trim()) { // Check if current line is empty
|
|
554
|
+
blankLine = true;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
// Dedent if possible
|
|
558
|
+
if (line.search(/[^ ]/) >= indent) {
|
|
559
|
+
itemContents += '\n' + line.slice(indent);
|
|
560
|
+
} else {
|
|
561
|
+
itemContents += '\n' + line;
|
|
562
|
+
}
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
// Dedent this line
|
|
567
|
+
if (line.search(/[^ ]/) >= indent || !line.trim()) {
|
|
568
|
+
itemContents += '\n' + line.slice(indent);
|
|
569
|
+
continue;
|
|
570
|
+
} else { // Line was not properly indented; end of this item
|
|
571
|
+
raw = cap[1] + lines.slice(0, i).join('\n') + '\n';
|
|
572
|
+
break;
|
|
573
|
+
}
|
|
608
574
|
}
|
|
609
575
|
|
|
610
|
-
if (loose) {
|
|
611
|
-
list
|
|
576
|
+
if (!list.loose) {
|
|
577
|
+
// If the previous item ended with a blank line, the list is loose
|
|
578
|
+
if (endsWithBlankLine) {
|
|
579
|
+
list.loose = true;
|
|
580
|
+
} else if (/\n *\n *$/.test(raw)) {
|
|
581
|
+
endsWithBlankLine = true;
|
|
582
|
+
}
|
|
612
583
|
}
|
|
613
584
|
|
|
614
585
|
// Check for task list items
|
|
615
586
|
if (this.options.gfm) {
|
|
616
|
-
istask = /^\[[ xX]\] /.
|
|
617
|
-
ischecked = undefined;
|
|
587
|
+
istask = /^\[[ xX]\] /.exec(itemContents);
|
|
618
588
|
if (istask) {
|
|
619
|
-
ischecked =
|
|
620
|
-
|
|
589
|
+
ischecked = istask[0] !== '[ ] ';
|
|
590
|
+
itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
|
|
621
591
|
}
|
|
622
592
|
}
|
|
623
593
|
|
|
624
594
|
list.items.push({
|
|
625
595
|
type: 'list_item',
|
|
626
|
-
raw,
|
|
627
|
-
task: istask,
|
|
596
|
+
raw: raw,
|
|
597
|
+
task: !!istask,
|
|
628
598
|
checked: ischecked,
|
|
629
|
-
loose:
|
|
630
|
-
text:
|
|
599
|
+
loose: false,
|
|
600
|
+
text: itemContents
|
|
631
601
|
});
|
|
602
|
+
|
|
603
|
+
list.raw += raw;
|
|
604
|
+
src = src.slice(raw.length);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
// Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
|
|
608
|
+
list.items[list.items.length - 1].raw = raw.trimRight();
|
|
609
|
+
list.items[list.items.length - 1].text = itemContents.trimRight();
|
|
610
|
+
list.raw = list.raw.trimRight();
|
|
611
|
+
|
|
612
|
+
const l = list.items.length;
|
|
613
|
+
|
|
614
|
+
// Item child tokens handled here at end because we needed to have the final item to trim it first
|
|
615
|
+
for (i = 0; i < l; i++) {
|
|
616
|
+
this.lexer.state.top = false;
|
|
617
|
+
list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
|
|
618
|
+
if (list.items[i].tokens.some(t => t.type === 'space')) {
|
|
619
|
+
list.loose = true;
|
|
620
|
+
list.items[i].loose = true;
|
|
621
|
+
}
|
|
632
622
|
}
|
|
633
623
|
|
|
634
624
|
return list;
|
|
@@ -638,15 +628,20 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
638
628
|
html(src) {
|
|
639
629
|
const cap = this.rules.block.html.exec(src);
|
|
640
630
|
if (cap) {
|
|
641
|
-
|
|
642
|
-
type:
|
|
643
|
-
? 'paragraph'
|
|
644
|
-
: 'html',
|
|
631
|
+
const token = {
|
|
632
|
+
type: 'html',
|
|
645
633
|
raw: cap[0],
|
|
646
634
|
pre: !this.options.sanitizer
|
|
647
635
|
&& (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
|
|
648
|
-
text:
|
|
636
|
+
text: cap[0]
|
|
649
637
|
};
|
|
638
|
+
if (this.options.sanitize) {
|
|
639
|
+
token.type = 'paragraph';
|
|
640
|
+
token.text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$2(cap[0]);
|
|
641
|
+
token.tokens = [];
|
|
642
|
+
this.lexer.inline(token.text, token.tokens);
|
|
643
|
+
}
|
|
644
|
+
return token;
|
|
650
645
|
}
|
|
651
646
|
}
|
|
652
647
|
|
|
@@ -670,16 +665,16 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
670
665
|
if (cap) {
|
|
671
666
|
const item = {
|
|
672
667
|
type: 'table',
|
|
673
|
-
header: splitCells(cap[1].
|
|
668
|
+
header: splitCells(cap[1]).map(c => { return { text: c }; }),
|
|
674
669
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
|
675
|
-
|
|
670
|
+
rows: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
|
|
676
671
|
};
|
|
677
672
|
|
|
678
673
|
if (item.header.length === item.align.length) {
|
|
679
674
|
item.raw = cap[0];
|
|
680
675
|
|
|
681
676
|
let l = item.align.length;
|
|
682
|
-
let i;
|
|
677
|
+
let i, j, k, row;
|
|
683
678
|
for (i = 0; i < l; i++) {
|
|
684
679
|
if (/^ *-+: *$/.test(item.align[i])) {
|
|
685
680
|
item.align[i] = 'right';
|
|
@@ -692,11 +687,28 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
692
687
|
}
|
|
693
688
|
}
|
|
694
689
|
|
|
695
|
-
l = item.
|
|
690
|
+
l = item.rows.length;
|
|
696
691
|
for (i = 0; i < l; i++) {
|
|
697
|
-
item.
|
|
698
|
-
|
|
699
|
-
|
|
692
|
+
item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; });
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
// parse child tokens inside headers and cells
|
|
696
|
+
|
|
697
|
+
// header child tokens
|
|
698
|
+
l = item.header.length;
|
|
699
|
+
for (j = 0; j < l; j++) {
|
|
700
|
+
item.header[j].tokens = [];
|
|
701
|
+
this.lexer.inlineTokens(item.header[j].text, item.header[j].tokens);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
// cell child tokens
|
|
705
|
+
l = item.rows.length;
|
|
706
|
+
for (j = 0; j < l; j++) {
|
|
707
|
+
row = item.rows[j];
|
|
708
|
+
for (k = 0; k < row.length; k++) {
|
|
709
|
+
row[k].tokens = [];
|
|
710
|
+
this.lexer.inlineTokens(row[k].text, row[k].tokens);
|
|
711
|
+
}
|
|
700
712
|
}
|
|
701
713
|
|
|
702
714
|
return item;
|
|
@@ -707,36 +719,45 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
707
719
|
lheading(src) {
|
|
708
720
|
const cap = this.rules.block.lheading.exec(src);
|
|
709
721
|
if (cap) {
|
|
710
|
-
|
|
722
|
+
const token = {
|
|
711
723
|
type: 'heading',
|
|
712
724
|
raw: cap[0],
|
|
713
725
|
depth: cap[2].charAt(0) === '=' ? 1 : 2,
|
|
714
|
-
text: cap[1]
|
|
726
|
+
text: cap[1],
|
|
727
|
+
tokens: []
|
|
715
728
|
};
|
|
729
|
+
this.lexer.inline(token.text, token.tokens);
|
|
730
|
+
return token;
|
|
716
731
|
}
|
|
717
732
|
}
|
|
718
733
|
|
|
719
734
|
paragraph(src) {
|
|
720
735
|
const cap = this.rules.block.paragraph.exec(src);
|
|
721
736
|
if (cap) {
|
|
722
|
-
|
|
737
|
+
const token = {
|
|
723
738
|
type: 'paragraph',
|
|
724
739
|
raw: cap[0],
|
|
725
740
|
text: cap[1].charAt(cap[1].length - 1) === '\n'
|
|
726
741
|
? cap[1].slice(0, -1)
|
|
727
|
-
: cap[1]
|
|
742
|
+
: cap[1],
|
|
743
|
+
tokens: []
|
|
728
744
|
};
|
|
745
|
+
this.lexer.inline(token.text, token.tokens);
|
|
746
|
+
return token;
|
|
729
747
|
}
|
|
730
748
|
}
|
|
731
749
|
|
|
732
750
|
text(src) {
|
|
733
751
|
const cap = this.rules.block.text.exec(src);
|
|
734
752
|
if (cap) {
|
|
735
|
-
|
|
753
|
+
const token = {
|
|
736
754
|
type: 'text',
|
|
737
755
|
raw: cap[0],
|
|
738
|
-
text: cap[0]
|
|
756
|
+
text: cap[0],
|
|
757
|
+
tokens: []
|
|
739
758
|
};
|
|
759
|
+
this.lexer.inline(token.text, token.tokens);
|
|
760
|
+
return token;
|
|
740
761
|
}
|
|
741
762
|
}
|
|
742
763
|
|
|
@@ -751,18 +772,18 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
751
772
|
}
|
|
752
773
|
}
|
|
753
774
|
|
|
754
|
-
tag(src
|
|
775
|
+
tag(src) {
|
|
755
776
|
const cap = this.rules.inline.tag.exec(src);
|
|
756
777
|
if (cap) {
|
|
757
|
-
if (!inLink && /^<a /i.test(cap[0])) {
|
|
758
|
-
inLink = true;
|
|
759
|
-
} else if (inLink && /^<\/a>/i.test(cap[0])) {
|
|
760
|
-
inLink = false;
|
|
778
|
+
if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
|
|
779
|
+
this.lexer.state.inLink = true;
|
|
780
|
+
} else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
|
|
781
|
+
this.lexer.state.inLink = false;
|
|
761
782
|
}
|
|
762
|
-
if (!inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
763
|
-
inRawBlock = true;
|
|
764
|
-
} else if (inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
765
|
-
inRawBlock = false;
|
|
783
|
+
if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
784
|
+
this.lexer.state.inRawBlock = true;
|
|
785
|
+
} else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
786
|
+
this.lexer.state.inRawBlock = false;
|
|
766
787
|
}
|
|
767
788
|
|
|
768
789
|
return {
|
|
@@ -770,8 +791,8 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
770
791
|
? 'text'
|
|
771
792
|
: 'html',
|
|
772
793
|
raw: cap[0],
|
|
773
|
-
inLink,
|
|
774
|
-
inRawBlock,
|
|
794
|
+
inLink: this.lexer.state.inLink,
|
|
795
|
+
inRawBlock: this.lexer.state.inRawBlock,
|
|
775
796
|
text: this.options.sanitize
|
|
776
797
|
? (this.options.sanitizer
|
|
777
798
|
? this.options.sanitizer(cap[0])
|
|
@@ -833,7 +854,7 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
833
854
|
return outputLink(cap, {
|
|
834
855
|
href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
|
|
835
856
|
title: title ? title.replace(this.rules.inline._escapes, '$1') : title
|
|
836
|
-
}, cap[0]);
|
|
857
|
+
}, cap[0], this.lexer);
|
|
837
858
|
}
|
|
838
859
|
}
|
|
839
860
|
|
|
@@ -851,7 +872,7 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
851
872
|
text
|
|
852
873
|
};
|
|
853
874
|
}
|
|
854
|
-
return outputLink(cap, link, cap[0]);
|
|
875
|
+
return outputLink(cap, link, cap[0], this.lexer);
|
|
855
876
|
}
|
|
856
877
|
}
|
|
857
878
|
|
|
@@ -900,18 +921,22 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
900
921
|
|
|
901
922
|
// Create `em` if smallest delimiter has odd char count. *a***
|
|
902
923
|
if (Math.min(lLength, rLength) % 2) {
|
|
924
|
+
const text = src.slice(1, lLength + match.index + rLength);
|
|
903
925
|
return {
|
|
904
926
|
type: 'em',
|
|
905
927
|
raw: src.slice(0, lLength + match.index + rLength + 1),
|
|
906
|
-
text
|
|
928
|
+
text,
|
|
929
|
+
tokens: this.lexer.inlineTokens(text, [])
|
|
907
930
|
};
|
|
908
931
|
}
|
|
909
932
|
|
|
910
933
|
// Create 'strong' if smallest delimiter has even char count. **a***
|
|
934
|
+
const text = src.slice(2, lLength + match.index + rLength - 1);
|
|
911
935
|
return {
|
|
912
936
|
type: 'strong',
|
|
913
937
|
raw: src.slice(0, lLength + match.index + rLength + 1),
|
|
914
|
-
text
|
|
938
|
+
text,
|
|
939
|
+
tokens: this.lexer.inlineTokens(text, [])
|
|
915
940
|
};
|
|
916
941
|
}
|
|
917
942
|
}
|
|
@@ -951,7 +976,8 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
951
976
|
return {
|
|
952
977
|
type: 'del',
|
|
953
978
|
raw: cap[0],
|
|
954
|
-
text: cap[2]
|
|
979
|
+
text: cap[2],
|
|
980
|
+
tokens: this.lexer.inlineTokens(cap[2], [])
|
|
955
981
|
};
|
|
956
982
|
}
|
|
957
983
|
}
|
|
@@ -1021,11 +1047,11 @@ var Tokenizer_1 = class Tokenizer {
|
|
|
1021
1047
|
}
|
|
1022
1048
|
}
|
|
1023
1049
|
|
|
1024
|
-
inlineText(src,
|
|
1050
|
+
inlineText(src, smartypants) {
|
|
1025
1051
|
const cap = this.rules.inline.text.exec(src);
|
|
1026
1052
|
if (cap) {
|
|
1027
1053
|
let text;
|
|
1028
|
-
if (inRawBlock) {
|
|
1054
|
+
if (this.lexer.state.inRawBlock) {
|
|
1029
1055
|
text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$2(cap[0])) : cap[0];
|
|
1030
1056
|
} else {
|
|
1031
1057
|
text = escape$2(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
|
|
@@ -1051,11 +1077,11 @@ const {
|
|
|
1051
1077
|
const block$1 = {
|
|
1052
1078
|
newline: /^(?: *(?:\n|$))+/,
|
|
1053
1079
|
code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
|
|
1054
|
-
fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(
|
|
1080
|
+
fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
|
|
1055
1081
|
hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
|
|
1056
1082
|
heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
|
|
1057
1083
|
blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
|
|
1058
|
-
list: /^( {0,3})(
|
|
1084
|
+
list: /^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,
|
|
1059
1085
|
html: '^ {0,3}(?:' // optional indentation
|
|
1060
1086
|
+ '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)' // (1)
|
|
1061
1087
|
+ '|comment[^\\n]*(\\n+|$)' // (2)
|
|
@@ -1067,7 +1093,6 @@ const block$1 = {
|
|
|
1067
1093
|
+ '|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)' // (7) closing tag
|
|
1068
1094
|
+ ')',
|
|
1069
1095
|
def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
|
|
1070
|
-
nptable: noopTest,
|
|
1071
1096
|
table: noopTest,
|
|
1072
1097
|
lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
|
|
1073
1098
|
// regex template, placeholders will be replaced according to different paragraph
|
|
@@ -1084,11 +1109,6 @@ block$1.def = edit(block$1.def)
|
|
|
1084
1109
|
.getRegex();
|
|
1085
1110
|
|
|
1086
1111
|
block$1.bullet = /(?:[*+-]|\d{1,9}[.)])/;
|
|
1087
|
-
block$1.item = /^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/;
|
|
1088
|
-
block$1.item = edit(block$1.item, 'gm')
|
|
1089
|
-
.replace(/bull/g, block$1.bullet)
|
|
1090
|
-
.getRegex();
|
|
1091
|
-
|
|
1092
1112
|
block$1.listItemStart = edit(/^( *)(bull) */)
|
|
1093
1113
|
.replace('bull', block$1.bullet)
|
|
1094
1114
|
.getRegex();
|
|
@@ -1138,25 +1158,11 @@ block$1.normal = merge$1({}, block$1);
|
|
|
1138
1158
|
*/
|
|
1139
1159
|
|
|
1140
1160
|
block$1.gfm = merge$1({}, block$1.normal, {
|
|
1141
|
-
|
|
1142
|
-
+ ' {0,3}(
|
|
1143
|
-
+ '(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)', // Cells
|
|
1144
|
-
table: '^ *\\|(.+)\\n' // Header
|
|
1145
|
-
+ ' {0,3}\\|?( *[-:]+[-| :]*)' // Align
|
|
1161
|
+
table: '^ *([^\\n ].*\\|.*)\\n' // Header
|
|
1162
|
+
+ ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)\\|?' // Align
|
|
1146
1163
|
+ '(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
|
|
1147
1164
|
});
|
|
1148
1165
|
|
|
1149
|
-
block$1.gfm.nptable = edit(block$1.gfm.nptable)
|
|
1150
|
-
.replace('hr', block$1.hr)
|
|
1151
|
-
.replace('heading', ' {0,3}#{1,6} ')
|
|
1152
|
-
.replace('blockquote', ' {0,3}>')
|
|
1153
|
-
.replace('code', ' {4}[^\\n]')
|
|
1154
|
-
.replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
|
|
1155
|
-
.replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
|
|
1156
|
-
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
|
|
1157
|
-
.replace('tag', block$1._tag) // tables can be interrupted by type (6) html blocks
|
|
1158
|
-
.getRegex();
|
|
1159
|
-
|
|
1160
1166
|
block$1.gfm.table = edit(block$1.gfm.table)
|
|
1161
1167
|
.replace('hr', block$1.hr)
|
|
1162
1168
|
.replace('heading', ' {0,3}#{1,6} ')
|
|
@@ -1407,6 +1413,13 @@ var Lexer_1 = class Lexer {
|
|
|
1407
1413
|
this.options.tokenizer = this.options.tokenizer || new Tokenizer$1();
|
|
1408
1414
|
this.tokenizer = this.options.tokenizer;
|
|
1409
1415
|
this.tokenizer.options = this.options;
|
|
1416
|
+
this.tokenizer.lexer = this;
|
|
1417
|
+
this.inlineQueue = [];
|
|
1418
|
+
this.state = {
|
|
1419
|
+
inLink: false,
|
|
1420
|
+
inRawBlock: false,
|
|
1421
|
+
top: true
|
|
1422
|
+
};
|
|
1410
1423
|
|
|
1411
1424
|
const rules = {
|
|
1412
1425
|
block: block.normal,
|
|
@@ -1461,9 +1474,12 @@ var Lexer_1 = class Lexer {
|
|
|
1461
1474
|
.replace(/\r\n|\r/g, '\n')
|
|
1462
1475
|
.replace(/\t/g, ' ');
|
|
1463
1476
|
|
|
1464
|
-
this.blockTokens(src, this.tokens
|
|
1477
|
+
this.blockTokens(src, this.tokens);
|
|
1465
1478
|
|
|
1466
|
-
|
|
1479
|
+
let next;
|
|
1480
|
+
while (next = this.inlineQueue.shift()) {
|
|
1481
|
+
this.inlineTokens(next.src, next.tokens);
|
|
1482
|
+
}
|
|
1467
1483
|
|
|
1468
1484
|
return this.tokens;
|
|
1469
1485
|
}
|
|
@@ -1471,17 +1487,17 @@ var Lexer_1 = class Lexer {
|
|
|
1471
1487
|
/**
|
|
1472
1488
|
* Lexing
|
|
1473
1489
|
*/
|
|
1474
|
-
blockTokens(src, tokens = []
|
|
1490
|
+
blockTokens(src, tokens = []) {
|
|
1475
1491
|
if (this.options.pedantic) {
|
|
1476
1492
|
src = src.replace(/^ +$/gm, '');
|
|
1477
1493
|
}
|
|
1478
|
-
let token,
|
|
1494
|
+
let token, lastToken, cutSrc, lastParagraphClipped;
|
|
1479
1495
|
|
|
1480
1496
|
while (src) {
|
|
1481
1497
|
if (this.options.extensions
|
|
1482
1498
|
&& this.options.extensions.block
|
|
1483
1499
|
&& this.options.extensions.block.some((extTokenizer) => {
|
|
1484
|
-
if (token = extTokenizer.call(this, src, tokens)) {
|
|
1500
|
+
if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
|
|
1485
1501
|
src = src.substring(token.raw.length);
|
|
1486
1502
|
tokens.push(token);
|
|
1487
1503
|
return true;
|
|
@@ -1505,9 +1521,10 @@ var Lexer_1 = class Lexer {
|
|
|
1505
1521
|
src = src.substring(token.raw.length);
|
|
1506
1522
|
lastToken = tokens[tokens.length - 1];
|
|
1507
1523
|
// An indented code block cannot interrupt a paragraph.
|
|
1508
|
-
if (lastToken && lastToken.type === 'paragraph') {
|
|
1524
|
+
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1509
1525
|
lastToken.raw += '\n' + token.raw;
|
|
1510
1526
|
lastToken.text += '\n' + token.text;
|
|
1527
|
+
this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
|
|
1511
1528
|
} else {
|
|
1512
1529
|
tokens.push(token);
|
|
1513
1530
|
}
|
|
@@ -1528,13 +1545,6 @@ var Lexer_1 = class Lexer {
|
|
|
1528
1545
|
continue;
|
|
1529
1546
|
}
|
|
1530
1547
|
|
|
1531
|
-
// table no leading pipe (gfm)
|
|
1532
|
-
if (token = this.tokenizer.nptable(src)) {
|
|
1533
|
-
src = src.substring(token.raw.length);
|
|
1534
|
-
tokens.push(token);
|
|
1535
|
-
continue;
|
|
1536
|
-
}
|
|
1537
|
-
|
|
1538
1548
|
// hr
|
|
1539
1549
|
if (token = this.tokenizer.hr(src)) {
|
|
1540
1550
|
src = src.substring(token.raw.length);
|
|
@@ -1545,7 +1555,6 @@ var Lexer_1 = class Lexer {
|
|
|
1545
1555
|
// blockquote
|
|
1546
1556
|
if (token = this.tokenizer.blockquote(src)) {
|
|
1547
1557
|
src = src.substring(token.raw.length);
|
|
1548
|
-
token.tokens = this.blockTokens(token.text, [], top);
|
|
1549
1558
|
tokens.push(token);
|
|
1550
1559
|
continue;
|
|
1551
1560
|
}
|
|
@@ -1553,10 +1562,6 @@ var Lexer_1 = class Lexer {
|
|
|
1553
1562
|
// list
|
|
1554
1563
|
if (token = this.tokenizer.list(src)) {
|
|
1555
1564
|
src = src.substring(token.raw.length);
|
|
1556
|
-
l = token.items.length;
|
|
1557
|
-
for (i = 0; i < l; i++) {
|
|
1558
|
-
token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);
|
|
1559
|
-
}
|
|
1560
1565
|
tokens.push(token);
|
|
1561
1566
|
continue;
|
|
1562
1567
|
}
|
|
@@ -1569,9 +1574,14 @@ var Lexer_1 = class Lexer {
|
|
|
1569
1574
|
}
|
|
1570
1575
|
|
|
1571
1576
|
// def
|
|
1572
|
-
if (
|
|
1577
|
+
if (token = this.tokenizer.def(src)) {
|
|
1573
1578
|
src = src.substring(token.raw.length);
|
|
1574
|
-
|
|
1579
|
+
lastToken = tokens[tokens.length - 1];
|
|
1580
|
+
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1581
|
+
lastToken.raw += '\n' + token.raw;
|
|
1582
|
+
lastToken.text += '\n' + token.raw;
|
|
1583
|
+
this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
|
|
1584
|
+
} else if (!this.tokens.links[token.tag]) {
|
|
1575
1585
|
this.tokens.links[token.tag] = {
|
|
1576
1586
|
href: token.href,
|
|
1577
1587
|
title: token.title
|
|
@@ -1602,18 +1612,20 @@ var Lexer_1 = class Lexer {
|
|
|
1602
1612
|
const tempSrc = src.slice(1);
|
|
1603
1613
|
let tempStart;
|
|
1604
1614
|
this.options.extensions.startBlock.forEach(function(getStartIndex) {
|
|
1605
|
-
tempStart = getStartIndex.call(this, tempSrc);
|
|
1615
|
+
tempStart = getStartIndex.call({ lexer: this }, tempSrc);
|
|
1606
1616
|
if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
|
|
1607
1617
|
});
|
|
1608
1618
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1609
1619
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1610
1620
|
}
|
|
1611
1621
|
}
|
|
1612
|
-
if (top && (token = this.tokenizer.paragraph(cutSrc))) {
|
|
1622
|
+
if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
|
|
1613
1623
|
lastToken = tokens[tokens.length - 1];
|
|
1614
1624
|
if (lastParagraphClipped && lastToken.type === 'paragraph') {
|
|
1615
1625
|
lastToken.raw += '\n' + token.raw;
|
|
1616
1626
|
lastToken.text += '\n' + token.text;
|
|
1627
|
+
this.inlineQueue.pop();
|
|
1628
|
+
this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
|
|
1617
1629
|
} else {
|
|
1618
1630
|
tokens.push(token);
|
|
1619
1631
|
}
|
|
@@ -1629,6 +1641,8 @@ var Lexer_1 = class Lexer {
|
|
|
1629
1641
|
if (lastToken && lastToken.type === 'text') {
|
|
1630
1642
|
lastToken.raw += '\n' + token.raw;
|
|
1631
1643
|
lastToken.text += '\n' + token.text;
|
|
1644
|
+
this.inlineQueue.pop();
|
|
1645
|
+
this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
|
|
1632
1646
|
} else {
|
|
1633
1647
|
tokens.push(token);
|
|
1634
1648
|
}
|
|
@@ -1646,75 +1660,18 @@ var Lexer_1 = class Lexer {
|
|
|
1646
1660
|
}
|
|
1647
1661
|
}
|
|
1648
1662
|
|
|
1663
|
+
this.state.top = true;
|
|
1649
1664
|
return tokens;
|
|
1650
1665
|
}
|
|
1651
1666
|
|
|
1652
|
-
inline(tokens) {
|
|
1653
|
-
|
|
1654
|
-
j,
|
|
1655
|
-
k,
|
|
1656
|
-
l2,
|
|
1657
|
-
row,
|
|
1658
|
-
token;
|
|
1659
|
-
|
|
1660
|
-
const l = tokens.length;
|
|
1661
|
-
for (i = 0; i < l; i++) {
|
|
1662
|
-
token = tokens[i];
|
|
1663
|
-
switch (token.type) {
|
|
1664
|
-
case 'paragraph':
|
|
1665
|
-
case 'text':
|
|
1666
|
-
case 'heading': {
|
|
1667
|
-
token.tokens = [];
|
|
1668
|
-
this.inlineTokens(token.text, token.tokens);
|
|
1669
|
-
break;
|
|
1670
|
-
}
|
|
1671
|
-
case 'table': {
|
|
1672
|
-
token.tokens = {
|
|
1673
|
-
header: [],
|
|
1674
|
-
cells: []
|
|
1675
|
-
};
|
|
1676
|
-
|
|
1677
|
-
// header
|
|
1678
|
-
l2 = token.header.length;
|
|
1679
|
-
for (j = 0; j < l2; j++) {
|
|
1680
|
-
token.tokens.header[j] = [];
|
|
1681
|
-
this.inlineTokens(token.header[j], token.tokens.header[j]);
|
|
1682
|
-
}
|
|
1683
|
-
|
|
1684
|
-
// cells
|
|
1685
|
-
l2 = token.cells.length;
|
|
1686
|
-
for (j = 0; j < l2; j++) {
|
|
1687
|
-
row = token.cells[j];
|
|
1688
|
-
token.tokens.cells[j] = [];
|
|
1689
|
-
for (k = 0; k < row.length; k++) {
|
|
1690
|
-
token.tokens.cells[j][k] = [];
|
|
1691
|
-
this.inlineTokens(row[k], token.tokens.cells[j][k]);
|
|
1692
|
-
}
|
|
1693
|
-
}
|
|
1694
|
-
|
|
1695
|
-
break;
|
|
1696
|
-
}
|
|
1697
|
-
case 'blockquote': {
|
|
1698
|
-
this.inline(token.tokens);
|
|
1699
|
-
break;
|
|
1700
|
-
}
|
|
1701
|
-
case 'list': {
|
|
1702
|
-
l2 = token.items.length;
|
|
1703
|
-
for (j = 0; j < l2; j++) {
|
|
1704
|
-
this.inline(token.items[j].tokens);
|
|
1705
|
-
}
|
|
1706
|
-
break;
|
|
1707
|
-
}
|
|
1708
|
-
}
|
|
1709
|
-
}
|
|
1710
|
-
|
|
1711
|
-
return tokens;
|
|
1667
|
+
inline(src, tokens) {
|
|
1668
|
+
this.inlineQueue.push({ src, tokens });
|
|
1712
1669
|
}
|
|
1713
1670
|
|
|
1714
1671
|
/**
|
|
1715
1672
|
* Lexing/Compiling
|
|
1716
1673
|
*/
|
|
1717
|
-
inlineTokens(src, tokens = []
|
|
1674
|
+
inlineTokens(src, tokens = []) {
|
|
1718
1675
|
let token, lastToken, cutSrc;
|
|
1719
1676
|
|
|
1720
1677
|
// String with links masked to avoid interference with em and strong
|
|
@@ -1753,7 +1710,7 @@ var Lexer_1 = class Lexer {
|
|
|
1753
1710
|
if (this.options.extensions
|
|
1754
1711
|
&& this.options.extensions.inline
|
|
1755
1712
|
&& this.options.extensions.inline.some((extTokenizer) => {
|
|
1756
|
-
if (token = extTokenizer.call(this, src, tokens)) {
|
|
1713
|
+
if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
|
|
1757
1714
|
src = src.substring(token.raw.length);
|
|
1758
1715
|
tokens.push(token);
|
|
1759
1716
|
return true;
|
|
@@ -1771,10 +1728,8 @@ var Lexer_1 = class Lexer {
|
|
|
1771
1728
|
}
|
|
1772
1729
|
|
|
1773
1730
|
// tag
|
|
1774
|
-
if (token = this.tokenizer.tag(src
|
|
1731
|
+
if (token = this.tokenizer.tag(src)) {
|
|
1775
1732
|
src = src.substring(token.raw.length);
|
|
1776
|
-
inLink = token.inLink;
|
|
1777
|
-
inRawBlock = token.inRawBlock;
|
|
1778
1733
|
lastToken = tokens[tokens.length - 1];
|
|
1779
1734
|
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1780
1735
|
lastToken.raw += token.raw;
|
|
@@ -1788,9 +1743,6 @@ var Lexer_1 = class Lexer {
|
|
|
1788
1743
|
// link
|
|
1789
1744
|
if (token = this.tokenizer.link(src)) {
|
|
1790
1745
|
src = src.substring(token.raw.length);
|
|
1791
|
-
if (token.type === 'link') {
|
|
1792
|
-
token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);
|
|
1793
|
-
}
|
|
1794
1746
|
tokens.push(token);
|
|
1795
1747
|
continue;
|
|
1796
1748
|
}
|
|
@@ -1799,10 +1751,7 @@ var Lexer_1 = class Lexer {
|
|
|
1799
1751
|
if (token = this.tokenizer.reflink(src, this.tokens.links)) {
|
|
1800
1752
|
src = src.substring(token.raw.length);
|
|
1801
1753
|
lastToken = tokens[tokens.length - 1];
|
|
1802
|
-
if (token.type === '
|
|
1803
|
-
token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);
|
|
1804
|
-
tokens.push(token);
|
|
1805
|
-
} else if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1754
|
+
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1806
1755
|
lastToken.raw += token.raw;
|
|
1807
1756
|
lastToken.text += token.text;
|
|
1808
1757
|
} else {
|
|
@@ -1814,7 +1763,6 @@ var Lexer_1 = class Lexer {
|
|
|
1814
1763
|
// em & strong
|
|
1815
1764
|
if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
|
|
1816
1765
|
src = src.substring(token.raw.length);
|
|
1817
|
-
token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);
|
|
1818
1766
|
tokens.push(token);
|
|
1819
1767
|
continue;
|
|
1820
1768
|
}
|
|
@@ -1836,7 +1784,6 @@ var Lexer_1 = class Lexer {
|
|
|
1836
1784
|
// del (gfm)
|
|
1837
1785
|
if (token = this.tokenizer.del(src)) {
|
|
1838
1786
|
src = src.substring(token.raw.length);
|
|
1839
|
-
token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);
|
|
1840
1787
|
tokens.push(token);
|
|
1841
1788
|
continue;
|
|
1842
1789
|
}
|
|
@@ -1849,7 +1796,7 @@ var Lexer_1 = class Lexer {
|
|
|
1849
1796
|
}
|
|
1850
1797
|
|
|
1851
1798
|
// url (gfm)
|
|
1852
|
-
if (!inLink && (token = this.tokenizer.url(src, mangle))) {
|
|
1799
|
+
if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
|
|
1853
1800
|
src = src.substring(token.raw.length);
|
|
1854
1801
|
tokens.push(token);
|
|
1855
1802
|
continue;
|
|
@@ -1863,14 +1810,14 @@ var Lexer_1 = class Lexer {
|
|
|
1863
1810
|
const tempSrc = src.slice(1);
|
|
1864
1811
|
let tempStart;
|
|
1865
1812
|
this.options.extensions.startInline.forEach(function(getStartIndex) {
|
|
1866
|
-
tempStart = getStartIndex.call(this, tempSrc);
|
|
1813
|
+
tempStart = getStartIndex.call({ lexer: this }, tempSrc);
|
|
1867
1814
|
if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
|
|
1868
1815
|
});
|
|
1869
1816
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1870
1817
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1871
1818
|
}
|
|
1872
1819
|
}
|
|
1873
|
-
if (token = this.tokenizer.inlineText(cutSrc,
|
|
1820
|
+
if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
|
|
1874
1821
|
src = src.substring(token.raw.length);
|
|
1875
1822
|
if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started
|
|
1876
1823
|
prevChar = token.raw.slice(-1);
|
|
@@ -2231,7 +2178,7 @@ var Parser_1 = class Parser {
|
|
|
2231
2178
|
|
|
2232
2179
|
// Run any renderer extensions
|
|
2233
2180
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2234
|
-
ret = this.options.extensions.renderers[token.type].call(this, token);
|
|
2181
|
+
ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
|
|
2235
2182
|
if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
|
|
2236
2183
|
out += ret || '';
|
|
2237
2184
|
continue;
|
|
@@ -2268,22 +2215,22 @@ var Parser_1 = class Parser {
|
|
|
2268
2215
|
l2 = token.header.length;
|
|
2269
2216
|
for (j = 0; j < l2; j++) {
|
|
2270
2217
|
cell += this.renderer.tablecell(
|
|
2271
|
-
this.parseInline(token.
|
|
2218
|
+
this.parseInline(token.header[j].tokens),
|
|
2272
2219
|
{ header: true, align: token.align[j] }
|
|
2273
2220
|
);
|
|
2274
2221
|
}
|
|
2275
2222
|
header += this.renderer.tablerow(cell);
|
|
2276
2223
|
|
|
2277
2224
|
body = '';
|
|
2278
|
-
l2 = token.
|
|
2225
|
+
l2 = token.rows.length;
|
|
2279
2226
|
for (j = 0; j < l2; j++) {
|
|
2280
|
-
row = token.
|
|
2227
|
+
row = token.rows[j];
|
|
2281
2228
|
|
|
2282
2229
|
cell = '';
|
|
2283
2230
|
l3 = row.length;
|
|
2284
2231
|
for (k = 0; k < l3; k++) {
|
|
2285
2232
|
cell += this.renderer.tablecell(
|
|
2286
|
-
this.parseInline(row[k]),
|
|
2233
|
+
this.parseInline(row[k].tokens),
|
|
2287
2234
|
{ header: false, align: token.align[k] }
|
|
2288
2235
|
);
|
|
2289
2236
|
}
|
|
@@ -2314,7 +2261,7 @@ var Parser_1 = class Parser {
|
|
|
2314
2261
|
if (item.task) {
|
|
2315
2262
|
checkbox = this.renderer.checkbox(checked);
|
|
2316
2263
|
if (loose) {
|
|
2317
|
-
if (item.tokens.length > 0 && item.tokens[0].type === '
|
|
2264
|
+
if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
|
|
2318
2265
|
item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
|
|
2319
2266
|
if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
|
|
2320
2267
|
item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
|
|
@@ -2387,7 +2334,7 @@ var Parser_1 = class Parser {
|
|
|
2387
2334
|
|
|
2388
2335
|
// Run any renderer extensions
|
|
2389
2336
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2390
|
-
ret = this.options.extensions.renderers[token.type].call(this, token);
|
|
2337
|
+
ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
|
|
2391
2338
|
if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
|
|
2392
2339
|
out += ret || '';
|
|
2393
2340
|
continue;
|
|
@@ -2712,12 +2659,12 @@ marked.walkTokens = function(tokens, callback) {
|
|
|
2712
2659
|
callback(token);
|
|
2713
2660
|
switch (token.type) {
|
|
2714
2661
|
case 'table': {
|
|
2715
|
-
for (const cell of token.
|
|
2716
|
-
marked.walkTokens(cell, callback);
|
|
2662
|
+
for (const cell of token.header) {
|
|
2663
|
+
marked.walkTokens(cell.tokens, callback);
|
|
2717
2664
|
}
|
|
2718
|
-
for (const row of token.
|
|
2665
|
+
for (const row of token.rows) {
|
|
2719
2666
|
for (const cell of row) {
|
|
2720
|
-
marked.walkTokens(cell, callback);
|
|
2667
|
+
marked.walkTokens(cell.tokens, callback);
|
|
2721
2668
|
}
|
|
2722
2669
|
}
|
|
2723
2670
|
break;
|
|
@@ -2793,4 +2740,4 @@ marked.parse = marked;
|
|
|
2793
2740
|
|
|
2794
2741
|
var marked_1 = marked;
|
|
2795
2742
|
|
|
2796
|
-
export default
|
|
2743
|
+
export { marked_1 as default };
|