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