marked 1.2.9 → 2.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/lib/marked.esm.js +325 -322
- package/lib/marked.js +288 -266
- package/marked.min.js +1 -1
- package/package.json +15 -15
- package/src/Lexer.js +44 -25
- package/src/Tokenizer.js +81 -64
- package/src/rules.js +20 -53
package/lib/marked.js
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
return fn(module, module.exports), module.exports;
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
var defaults = createCommonjsModule(function (module) {
|
|
81
|
+
var defaults$5 = createCommonjsModule(function (module) {
|
|
82
82
|
function getDefaults() {
|
|
83
83
|
return {
|
|
84
84
|
baseUrl: null,
|
|
@@ -132,7 +132,7 @@
|
|
|
132
132
|
return escapeReplacements[ch];
|
|
133
133
|
};
|
|
134
134
|
|
|
135
|
-
function escape(html, encode) {
|
|
135
|
+
function escape$2(html, encode) {
|
|
136
136
|
if (encode) {
|
|
137
137
|
if (escapeTest.test(html)) {
|
|
138
138
|
return html.replace(escapeReplace, getEscapeReplacement);
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
|
|
149
149
|
var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
|
|
150
150
|
|
|
151
|
-
function unescape(html) {
|
|
151
|
+
function unescape$1(html) {
|
|
152
152
|
// explicitly match decimal, hex, and named HTML entities
|
|
153
153
|
return html.replace(unescapeTest, function (_, n) {
|
|
154
154
|
n = n.toLowerCase();
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
|
|
165
165
|
var caret = /(^|[^\[])\^/g;
|
|
166
166
|
|
|
167
|
-
function edit(regex, opt) {
|
|
167
|
+
function edit$1(regex, opt) {
|
|
168
168
|
regex = regex.source || regex;
|
|
169
169
|
opt = opt || '';
|
|
170
170
|
var obj = {
|
|
@@ -184,12 +184,12 @@
|
|
|
184
184
|
var nonWordAndColonTest = /[^\w:]/g;
|
|
185
185
|
var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
|
|
186
186
|
|
|
187
|
-
function cleanUrl(sanitize, base, href) {
|
|
187
|
+
function cleanUrl$1(sanitize, base, href) {
|
|
188
188
|
if (sanitize) {
|
|
189
189
|
var prot;
|
|
190
190
|
|
|
191
191
|
try {
|
|
192
|
-
prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();
|
|
192
|
+
prot = decodeURIComponent(unescape$1(href)).replace(nonWordAndColonTest, '').toLowerCase();
|
|
193
193
|
} catch (e) {
|
|
194
194
|
return null;
|
|
195
195
|
}
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
if (justDomain.test(base)) {
|
|
226
226
|
baseUrls[' ' + base] = base + '/';
|
|
227
227
|
} else {
|
|
228
|
-
baseUrls[' ' + base] = rtrim(base, '/', true);
|
|
228
|
+
baseUrls[' ' + base] = rtrim$1(base, '/', true);
|
|
229
229
|
}
|
|
230
230
|
}
|
|
231
231
|
|
|
@@ -249,11 +249,11 @@
|
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
var noopTest = {
|
|
252
|
+
var noopTest$1 = {
|
|
253
253
|
exec: function noopTest() {}
|
|
254
254
|
};
|
|
255
255
|
|
|
256
|
-
function merge(obj) {
|
|
256
|
+
function merge$2(obj) {
|
|
257
257
|
var i = 1,
|
|
258
258
|
target,
|
|
259
259
|
key;
|
|
@@ -271,7 +271,7 @@
|
|
|
271
271
|
return obj;
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
function splitCells(tableRow, count) {
|
|
274
|
+
function splitCells$1(tableRow, count) {
|
|
275
275
|
// ensure that every cell-delimiting pipe has a space
|
|
276
276
|
// before it to distinguish it from an escaped pipe
|
|
277
277
|
var row = tableRow.replace(/\|/g, function (match, offset, str) {
|
|
@@ -313,7 +313,7 @@
|
|
|
313
313
|
// invert: Remove suffix of non-c chars instead. Default falsey.
|
|
314
314
|
|
|
315
315
|
|
|
316
|
-
function rtrim(str, c, invert) {
|
|
316
|
+
function rtrim$1(str, c, invert) {
|
|
317
317
|
var l = str.length;
|
|
318
318
|
|
|
319
319
|
if (l === 0) {
|
|
@@ -338,7 +338,7 @@
|
|
|
338
338
|
return str.substr(0, l - suffLen);
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
-
function findClosingBracket(str, b) {
|
|
341
|
+
function findClosingBracket$1(str, b) {
|
|
342
342
|
if (str.indexOf(b[1]) === -1) {
|
|
343
343
|
return -1;
|
|
344
344
|
}
|
|
@@ -364,14 +364,14 @@
|
|
|
364
364
|
return -1;
|
|
365
365
|
}
|
|
366
366
|
|
|
367
|
-
function checkSanitizeDeprecation(opt) {
|
|
367
|
+
function checkSanitizeDeprecation$1(opt) {
|
|
368
368
|
if (opt && opt.sanitize && !opt.silent) {
|
|
369
369
|
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');
|
|
370
370
|
}
|
|
371
371
|
} // copied from https://stackoverflow.com/a/5450113/806777
|
|
372
372
|
|
|
373
373
|
|
|
374
|
-
function repeatString(pattern, count) {
|
|
374
|
+
function repeatString$1(pattern, count) {
|
|
375
375
|
if (count < 1) {
|
|
376
376
|
return '';
|
|
377
377
|
}
|
|
@@ -391,25 +391,25 @@
|
|
|
391
391
|
}
|
|
392
392
|
|
|
393
393
|
var helpers = {
|
|
394
|
-
escape: escape,
|
|
395
|
-
unescape: unescape,
|
|
396
|
-
edit: edit,
|
|
397
|
-
cleanUrl: cleanUrl,
|
|
394
|
+
escape: escape$2,
|
|
395
|
+
unescape: unescape$1,
|
|
396
|
+
edit: edit$1,
|
|
397
|
+
cleanUrl: cleanUrl$1,
|
|
398
398
|
resolveUrl: resolveUrl,
|
|
399
|
-
noopTest: noopTest,
|
|
400
|
-
merge: merge,
|
|
401
|
-
splitCells: splitCells,
|
|
402
|
-
rtrim: rtrim,
|
|
403
|
-
findClosingBracket: findClosingBracket,
|
|
404
|
-
checkSanitizeDeprecation: checkSanitizeDeprecation,
|
|
405
|
-
repeatString: repeatString
|
|
399
|
+
noopTest: noopTest$1,
|
|
400
|
+
merge: merge$2,
|
|
401
|
+
splitCells: splitCells$1,
|
|
402
|
+
rtrim: rtrim$1,
|
|
403
|
+
findClosingBracket: findClosingBracket$1,
|
|
404
|
+
checkSanitizeDeprecation: checkSanitizeDeprecation$1,
|
|
405
|
+
repeatString: repeatString$1
|
|
406
406
|
};
|
|
407
407
|
|
|
408
|
-
var defaults$
|
|
409
|
-
var rtrim
|
|
410
|
-
splitCells
|
|
408
|
+
var defaults$4 = defaults$5.defaults;
|
|
409
|
+
var rtrim = helpers.rtrim,
|
|
410
|
+
splitCells = helpers.splitCells,
|
|
411
411
|
_escape = helpers.escape,
|
|
412
|
-
findClosingBracket
|
|
412
|
+
findClosingBracket = helpers.findClosingBracket;
|
|
413
413
|
|
|
414
414
|
function outputLink(cap, link, raw) {
|
|
415
415
|
var href = link.href;
|
|
@@ -466,7 +466,7 @@
|
|
|
466
466
|
|
|
467
467
|
var Tokenizer_1 = /*#__PURE__*/function () {
|
|
468
468
|
function Tokenizer(options) {
|
|
469
|
-
this.options = options || defaults$
|
|
469
|
+
this.options = options || defaults$4;
|
|
470
470
|
}
|
|
471
471
|
|
|
472
472
|
var _proto = Tokenizer.prototype;
|
|
@@ -488,25 +488,16 @@
|
|
|
488
488
|
}
|
|
489
489
|
};
|
|
490
490
|
|
|
491
|
-
_proto.code = function code(src
|
|
491
|
+
_proto.code = function code(src) {
|
|
492
492
|
var cap = this.rules.block.code.exec(src);
|
|
493
493
|
|
|
494
494
|
if (cap) {
|
|
495
|
-
var lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.
|
|
496
|
-
|
|
497
|
-
if (lastToken && lastToken.type === 'paragraph') {
|
|
498
|
-
return {
|
|
499
|
-
raw: cap[0],
|
|
500
|
-
text: cap[0].trimRight()
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
|
|
504
495
|
var text = cap[0].replace(/^ {1,4}/gm, '');
|
|
505
496
|
return {
|
|
506
497
|
type: 'code',
|
|
507
498
|
raw: cap[0],
|
|
508
499
|
codeBlockStyle: 'indented',
|
|
509
|
-
text: !this.options.pedantic ? rtrim
|
|
500
|
+
text: !this.options.pedantic ? rtrim(text, '\n') : text
|
|
510
501
|
};
|
|
511
502
|
}
|
|
512
503
|
};
|
|
@@ -533,7 +524,7 @@
|
|
|
533
524
|
var text = cap[2].trim(); // remove trailing #s
|
|
534
525
|
|
|
535
526
|
if (/#$/.test(text)) {
|
|
536
|
-
var trimmed = rtrim
|
|
527
|
+
var trimmed = rtrim(text, '#');
|
|
537
528
|
|
|
538
529
|
if (this.options.pedantic) {
|
|
539
530
|
text = trimmed.trim();
|
|
@@ -558,7 +549,7 @@
|
|
|
558
549
|
if (cap) {
|
|
559
550
|
var item = {
|
|
560
551
|
type: 'table',
|
|
561
|
-
header: splitCells
|
|
552
|
+
header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
|
|
562
553
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
|
563
554
|
cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [],
|
|
564
555
|
raw: cap[0]
|
|
@@ -583,7 +574,7 @@
|
|
|
583
574
|
l = item.cells.length;
|
|
584
575
|
|
|
585
576
|
for (i = 0; i < l; i++) {
|
|
586
|
-
item.cells[i] = splitCells
|
|
577
|
+
item.cells[i] = splitCells(item.cells[i], item.header.length);
|
|
587
578
|
}
|
|
588
579
|
|
|
589
580
|
return item;
|
|
@@ -640,31 +631,44 @@
|
|
|
640
631
|
addBack,
|
|
641
632
|
loose,
|
|
642
633
|
istask,
|
|
643
|
-
ischecked
|
|
634
|
+
ischecked,
|
|
635
|
+
endMatch;
|
|
644
636
|
var l = itemMatch.length;
|
|
645
637
|
bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);
|
|
646
638
|
|
|
647
639
|
for (var i = 0; i < l; i++) {
|
|
648
640
|
item = itemMatch[i];
|
|
649
|
-
raw = item;
|
|
641
|
+
raw = item;
|
|
642
|
+
|
|
643
|
+
if (!this.options.pedantic) {
|
|
644
|
+
// Determine if current item contains the end of the list
|
|
645
|
+
endMatch = item.match(new RegExp('\\n\\s*\\n {0,' + (bcurr[0].length - 1) + '}\\S'));
|
|
646
|
+
|
|
647
|
+
if (endMatch) {
|
|
648
|
+
addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\n').length;
|
|
649
|
+
list.raw = list.raw.substring(0, list.raw.length - addBack);
|
|
650
|
+
item = item.substring(0, endMatch.index);
|
|
651
|
+
raw = item;
|
|
652
|
+
l = i + 1;
|
|
653
|
+
}
|
|
654
|
+
} // Determine whether the next list item belongs here.
|
|
650
655
|
// Backpedal if it does not belong in this list.
|
|
651
656
|
|
|
657
|
+
|
|
652
658
|
if (i !== l - 1) {
|
|
653
659
|
bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);
|
|
654
660
|
|
|
655
|
-
if (!this.options.pedantic ? bnext[1].length
|
|
656
|
-
// nested list
|
|
657
|
-
itemMatch.splice(i, 2, itemMatch[i] + '\n' + itemMatch[i + 1]);
|
|
661
|
+
if (!this.options.pedantic ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3 : bnext[1].length > bcurr[1].length) {
|
|
662
|
+
// nested list or continuation
|
|
663
|
+
itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\n$/) ? '' : '\n') + itemMatch[i + 1]);
|
|
658
664
|
i--;
|
|
659
665
|
l--;
|
|
660
666
|
continue;
|
|
661
|
-
} else
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
i = l - 1;
|
|
667
|
-
}
|
|
667
|
+
} else if ( // different bullet style
|
|
668
|
+
!this.options.pedantic || this.options.smartLists ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1] : isordered === (bnext[2].length === 1)) {
|
|
669
|
+
addBack = itemMatch.slice(i + 1).join('\n').length;
|
|
670
|
+
list.raw = list.raw.substring(0, list.raw.length - addBack);
|
|
671
|
+
i = l - 1;
|
|
668
672
|
}
|
|
669
673
|
|
|
670
674
|
bcurr = bnext;
|
|
@@ -679,15 +683,22 @@
|
|
|
679
683
|
if (~item.indexOf('\n ')) {
|
|
680
684
|
space -= item.length;
|
|
681
685
|
item = !this.options.pedantic ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') : item.replace(/^ {1,4}/gm, '');
|
|
686
|
+
} // trim item newlines at end
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
item = rtrim(item, '\n');
|
|
690
|
+
|
|
691
|
+
if (i !== l - 1) {
|
|
692
|
+
raw = raw + '\n';
|
|
682
693
|
} // Determine whether item is loose or not.
|
|
683
694
|
// Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
|
|
684
695
|
// for discount behavior.
|
|
685
696
|
|
|
686
697
|
|
|
687
|
-
loose = next || /\n\n(?!\s*$)/.test(
|
|
698
|
+
loose = next || /\n\n(?!\s*$)/.test(raw);
|
|
688
699
|
|
|
689
700
|
if (i !== l - 1) {
|
|
690
|
-
next =
|
|
701
|
+
next = raw.slice(-2) === '\n\n';
|
|
691
702
|
if (!loose) loose = next;
|
|
692
703
|
}
|
|
693
704
|
|
|
@@ -740,6 +751,7 @@
|
|
|
740
751
|
if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
|
|
741
752
|
var tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
|
|
742
753
|
return {
|
|
754
|
+
type: 'def',
|
|
743
755
|
tag: tag,
|
|
744
756
|
raw: cap[0],
|
|
745
757
|
href: cap[2],
|
|
@@ -754,7 +766,7 @@
|
|
|
754
766
|
if (cap) {
|
|
755
767
|
var item = {
|
|
756
768
|
type: 'table',
|
|
757
|
-
header: splitCells
|
|
769
|
+
header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
|
|
758
770
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
|
759
771
|
cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
|
|
760
772
|
};
|
|
@@ -779,7 +791,7 @@
|
|
|
779
791
|
l = item.cells.length;
|
|
780
792
|
|
|
781
793
|
for (i = 0; i < l; i++) {
|
|
782
|
-
item.cells[i] = splitCells
|
|
794
|
+
item.cells[i] = splitCells(item.cells[i].replace(/^ *\| *| *\| *$/g, ''), item.header.length);
|
|
783
795
|
}
|
|
784
796
|
|
|
785
797
|
return item;
|
|
@@ -812,19 +824,10 @@
|
|
|
812
824
|
}
|
|
813
825
|
};
|
|
814
826
|
|
|
815
|
-
_proto.text = function text(src
|
|
827
|
+
_proto.text = function text(src) {
|
|
816
828
|
var cap = this.rules.block.text.exec(src);
|
|
817
829
|
|
|
818
830
|
if (cap) {
|
|
819
|
-
var lastToken = tokens[tokens.length - 1];
|
|
820
|
-
|
|
821
|
-
if (lastToken && lastToken.type === 'text') {
|
|
822
|
-
return {
|
|
823
|
-
raw: cap[0],
|
|
824
|
-
text: cap[0]
|
|
825
|
-
};
|
|
826
|
-
}
|
|
827
|
-
|
|
828
831
|
return {
|
|
829
832
|
type: 'text',
|
|
830
833
|
raw: cap[0],
|
|
@@ -884,14 +887,14 @@
|
|
|
884
887
|
} // ending angle bracket cannot be escaped
|
|
885
888
|
|
|
886
889
|
|
|
887
|
-
var rtrimSlash = rtrim
|
|
890
|
+
var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');
|
|
888
891
|
|
|
889
892
|
if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
|
|
890
893
|
return;
|
|
891
894
|
}
|
|
892
895
|
} else {
|
|
893
896
|
// find closing parenthesis
|
|
894
|
-
var lastParenIndex = findClosingBracket
|
|
897
|
+
var lastParenIndex = findClosingBracket(cap[2], '()');
|
|
895
898
|
|
|
896
899
|
if (lastParenIndex > -1) {
|
|
897
900
|
var start = cap[0].indexOf('!') === 0 ? 5 : 4;
|
|
@@ -955,54 +958,66 @@
|
|
|
955
958
|
}
|
|
956
959
|
};
|
|
957
960
|
|
|
958
|
-
_proto.
|
|
961
|
+
_proto.emStrong = function emStrong(src, maskedSrc, prevChar) {
|
|
959
962
|
if (prevChar === void 0) {
|
|
960
963
|
prevChar = '';
|
|
961
964
|
}
|
|
962
965
|
|
|
963
|
-
var match = this.rules.inline.
|
|
966
|
+
var match = this.rules.inline.emStrong.lDelim.exec(src);
|
|
967
|
+
if (!match) return;
|
|
968
|
+
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\u08A0-\u08B4\u08B6-\u08C7\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\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\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-\u170C\u170E-\u1711\u1720-\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-\u1B4B\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-\u2C2E\u2C30-\u2C5E\u2C60-\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-\u9FFC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7BF\uA7C2-\uA7CA\uA7F5-\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\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\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\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\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]|\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\uDEC0-\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]|[\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\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]|\uD82C[\uDC00-\uDD1E\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]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDEC0-\uDEEB\uDEF0-\uDEF9]|\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-\uDEDD\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/)) return; // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
|
|
969
|
+
|
|
970
|
+
var nextChar = match[1] || match[2] || '';
|
|
964
971
|
|
|
965
|
-
if (
|
|
966
|
-
|
|
967
|
-
var
|
|
972
|
+
if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {
|
|
973
|
+
var lLength = match[0].length - 1;
|
|
974
|
+
var rDelim,
|
|
975
|
+
rLength,
|
|
976
|
+
delimTotal = lLength,
|
|
977
|
+
midDelimTotal = 0;
|
|
978
|
+
var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
|
|
968
979
|
endReg.lastIndex = 0;
|
|
969
|
-
|
|
980
|
+
maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)
|
|
970
981
|
|
|
971
982
|
while ((match = endReg.exec(maskedSrc)) != null) {
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
983
|
+
rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
|
|
984
|
+
if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)
|
|
985
|
+
|
|
986
|
+
rLength = rDelim.length;
|
|
987
|
+
|
|
988
|
+
if (match[3] || match[4]) {
|
|
989
|
+
// found another Left Delim
|
|
990
|
+
delimTotal += rLength;
|
|
991
|
+
continue;
|
|
992
|
+
} else if (match[5] || match[6]) {
|
|
993
|
+
// either Left or Right Delim
|
|
994
|
+
if (lLength % 3 && !((lLength + rLength) % 3)) {
|
|
995
|
+
midDelimTotal += rLength;
|
|
996
|
+
continue; // CommonMark Emphasis Rules 9-10
|
|
997
|
+
}
|
|
980
998
|
}
|
|
981
|
-
}
|
|
982
|
-
}
|
|
983
|
-
};
|
|
984
|
-
|
|
985
|
-
_proto.em = function em(src, maskedSrc, prevChar) {
|
|
986
|
-
if (prevChar === void 0) {
|
|
987
|
-
prevChar = '';
|
|
988
|
-
}
|
|
989
|
-
|
|
990
|
-
var match = this.rules.inline.em.start.exec(src);
|
|
991
999
|
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
endReg.lastIndex = 0;
|
|
996
|
-
var cap;
|
|
1000
|
+
delimTotal -= rLength;
|
|
1001
|
+
if (delimTotal > 0) continue; // Haven't found enough closing delimiters
|
|
1002
|
+
// If this is the last rDelimiter, remove extra characters. *a*** -> *a*
|
|
997
1003
|
|
|
998
|
-
|
|
999
|
-
|
|
1004
|
+
if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {
|
|
1005
|
+
rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);
|
|
1006
|
+
}
|
|
1000
1007
|
|
|
1001
|
-
if (
|
|
1008
|
+
if (Math.min(lLength, rLength) % 2) {
|
|
1002
1009
|
return {
|
|
1003
1010
|
type: 'em',
|
|
1004
|
-
raw: src.slice(0,
|
|
1005
|
-
text: src.slice(1,
|
|
1011
|
+
raw: src.slice(0, lLength + match.index + rLength + 1),
|
|
1012
|
+
text: src.slice(1, lLength + match.index + rLength)
|
|
1013
|
+
};
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
if (Math.min(lLength, rLength) % 2 === 0) {
|
|
1017
|
+
return {
|
|
1018
|
+
type: 'strong',
|
|
1019
|
+
raw: src.slice(0, lLength + match.index + rLength + 1),
|
|
1020
|
+
text: src.slice(2, lLength + match.index + rLength - 1)
|
|
1006
1021
|
};
|
|
1007
1022
|
}
|
|
1008
1023
|
}
|
|
@@ -1145,14 +1160,14 @@
|
|
|
1145
1160
|
return Tokenizer;
|
|
1146
1161
|
}();
|
|
1147
1162
|
|
|
1148
|
-
var noopTest
|
|
1149
|
-
edit
|
|
1163
|
+
var noopTest = helpers.noopTest,
|
|
1164
|
+
edit = helpers.edit,
|
|
1150
1165
|
merge$1 = helpers.merge;
|
|
1151
1166
|
/**
|
|
1152
1167
|
* Block-Level Grammar
|
|
1153
1168
|
*/
|
|
1154
1169
|
|
|
1155
|
-
var block = {
|
|
1170
|
+
var block$1 = {
|
|
1156
1171
|
newline: /^(?: *(?:\n|$))+/,
|
|
1157
1172
|
code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
|
|
1158
1173
|
fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
|
|
@@ -1171,40 +1186,40 @@
|
|
|
1171
1186
|
+ '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
|
|
1172
1187
|
+ ')',
|
|
1173
1188
|
def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
|
|
1174
|
-
nptable: noopTest
|
|
1175
|
-
table: noopTest
|
|
1189
|
+
nptable: noopTest,
|
|
1190
|
+
table: noopTest,
|
|
1176
1191
|
lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
|
|
1177
1192
|
// regex template, placeholders will be replaced according to different paragraph
|
|
1178
1193
|
// interruption rules of commonmark and the original markdown spec:
|
|
1179
1194
|
_paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,
|
|
1180
1195
|
text: /^[^\n]+/
|
|
1181
1196
|
};
|
|
1182
|
-
block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
|
|
1183
|
-
block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
|
|
1184
|
-
block.def = edit$1
|
|
1185
|
-
block.bullet = /(?:[*+-]|\d{1,9}[.)])/;
|
|
1186
|
-
block.item = /^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/;
|
|
1187
|
-
block.item = edit$1
|
|
1188
|
-
block.listItemStart = edit
|
|
1189
|
-
block.list = edit$1
|
|
1190
|
-
block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';
|
|
1191
|
-
block._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
|
|
1192
|
-
block.html = edit$1
|
|
1193
|
-
block.paragraph = edit$1
|
|
1197
|
+
block$1._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
|
|
1198
|
+
block$1._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
|
|
1199
|
+
block$1.def = edit(block$1.def).replace('label', block$1._label).replace('title', block$1._title).getRegex();
|
|
1200
|
+
block$1.bullet = /(?:[*+-]|\d{1,9}[.)])/;
|
|
1201
|
+
block$1.item = /^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/;
|
|
1202
|
+
block$1.item = edit(block$1.item, 'gm').replace(/bull/g, block$1.bullet).getRegex();
|
|
1203
|
+
block$1.listItemStart = edit(/^( *)(bull) */).replace('bull', block$1.bullet).getRegex();
|
|
1204
|
+
block$1.list = edit(block$1.list).replace(/bull/g, block$1.bullet).replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))').replace('def', '\\n+(?=' + block$1.def.source + ')').getRegex();
|
|
1205
|
+
block$1._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';
|
|
1206
|
+
block$1._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
|
|
1207
|
+
block$1.html = edit(block$1.html, 'i').replace('comment', block$1._comment).replace('tag', block$1._tag).replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
|
|
1208
|
+
block$1.paragraph = edit(block$1._paragraph).replace('hr', block$1.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
|
|
1194
1209
|
.replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
|
|
1195
|
-
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
|
|
1210
|
+
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block$1._tag) // pars can be interrupted by type (6) html blocks
|
|
1196
1211
|
.getRegex();
|
|
1197
|
-
block.blockquote = edit$1
|
|
1212
|
+
block$1.blockquote = edit(block$1.blockquote).replace('paragraph', block$1.paragraph).getRegex();
|
|
1198
1213
|
/**
|
|
1199
1214
|
* Normal Block Grammar
|
|
1200
1215
|
*/
|
|
1201
1216
|
|
|
1202
|
-
block.normal = merge$1({}, block);
|
|
1217
|
+
block$1.normal = merge$1({}, block$1);
|
|
1203
1218
|
/**
|
|
1204
1219
|
* GFM Block Grammar
|
|
1205
1220
|
*/
|
|
1206
1221
|
|
|
1207
|
-
block.gfm = merge$1({}, block.normal, {
|
|
1222
|
+
block$1.gfm = merge$1({}, block$1.normal, {
|
|
1208
1223
|
nptable: '^ *([^|\\n ].*\\|.*)\\n' // Header
|
|
1209
1224
|
+ ' {0,3}([-:]+ *\\|[-| :]*)' // Align
|
|
1210
1225
|
+ '(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)',
|
|
@@ -1214,33 +1229,33 @@
|
|
|
1214
1229
|
+ '(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
|
|
1215
1230
|
|
|
1216
1231
|
});
|
|
1217
|
-
block.gfm.nptable = edit$1
|
|
1218
|
-
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
|
|
1232
|
+
block$1.gfm.nptable = edit(block$1.gfm.nptable).replace('hr', block$1.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
|
|
1233
|
+
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block$1._tag) // tables can be interrupted by type (6) html blocks
|
|
1219
1234
|
.getRegex();
|
|
1220
|
-
block.gfm.table = edit$1
|
|
1221
|
-
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
|
|
1235
|
+
block$1.gfm.table = edit(block$1.gfm.table).replace('hr', block$1.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
|
|
1236
|
+
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block$1._tag) // tables can be interrupted by type (6) html blocks
|
|
1222
1237
|
.getRegex();
|
|
1223
1238
|
/**
|
|
1224
1239
|
* Pedantic grammar (original John Gruber's loose markdown specification)
|
|
1225
1240
|
*/
|
|
1226
1241
|
|
|
1227
|
-
block.pedantic = merge$1({}, block.normal, {
|
|
1228
|
-
html: edit
|
|
1229
|
-
+ '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),
|
|
1242
|
+
block$1.pedantic = merge$1({}, block$1.normal, {
|
|
1243
|
+
html: edit('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
|
|
1244
|
+
+ '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block$1._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),
|
|
1230
1245
|
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
|
|
1231
1246
|
heading: /^(#{1,6})(.*)(?:\n+|$)/,
|
|
1232
|
-
fences: noopTest
|
|
1247
|
+
fences: noopTest,
|
|
1233
1248
|
// fences not supported
|
|
1234
|
-
paragraph: edit$1
|
|
1249
|
+
paragraph: edit(block$1.normal._paragraph).replace('hr', block$1.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block$1.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()
|
|
1235
1250
|
});
|
|
1236
1251
|
/**
|
|
1237
1252
|
* Inline-Level Grammar
|
|
1238
1253
|
*/
|
|
1239
1254
|
|
|
1240
|
-
var inline = {
|
|
1255
|
+
var inline$1 = {
|
|
1241
1256
|
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
|
|
1242
1257
|
autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
|
|
1243
|
-
url: noopTest
|
|
1258
|
+
url: noopTest,
|
|
1244
1259
|
tag: '^comment' + '|^</[a-zA-Z][\\w:-]*\\s*>' // self-closing tag
|
|
1245
1260
|
+ '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag
|
|
1246
1261
|
+ '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
|
|
@@ -1251,70 +1266,53 @@
|
|
|
1251
1266
|
reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
|
|
1252
1267
|
nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
|
|
1253
1268
|
reflinkSearch: 'reflink|nolink(?!\\()',
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
//
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
endUnd: /[^\s]__(?!_)(?:(?=[punctuation*\s])|$)/ // last char can't be a space, and final _ must preceed punct or \s (or endline)
|
|
1261
|
-
|
|
1262
|
-
},
|
|
1263
|
-
em: {
|
|
1264
|
-
start: /^(?:(\*(?=[punctuation]))|\*)(?![*\s])|_/,
|
|
1265
|
-
// (1) returns if starts w/ punctuation
|
|
1266
|
-
middle: /^\*(?:(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)|\*(?:(?!overlapSkip)(?:[^*]|\\\*)|overlapSkip)*?\*)+?\*$|^_(?![_\s])(?:(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\_)|overlapSkip)*?_)+?_$/,
|
|
1267
|
-
endAst: /[^punctuation\s]\*(?!\*)|[punctuation]\*(?!\*)(?:(?=[punctuation_\s]|$))/,
|
|
1268
|
-
// last char can't be punct, or final * must also be followed by punct (or endline)
|
|
1269
|
-
endUnd: /[^\s]_(?!_)(?:(?=[punctuation*\s])|$)/ // last char can't be a space, and final _ must preceed punct or \s (or endline)
|
|
1269
|
+
emStrong: {
|
|
1270
|
+
lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
|
|
1271
|
+
// (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.
|
|
1272
|
+
// () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a
|
|
1273
|
+
rDelimAst: /\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
|
|
1274
|
+
rDelimUnd: /\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
|
|
1270
1275
|
|
|
1271
1276
|
},
|
|
1272
1277
|
code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
|
|
1273
1278
|
br: /^( {2,}|\\)\n(?!\s*$)/,
|
|
1274
|
-
del: noopTest
|
|
1275
|
-
text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n)))/,
|
|
1276
|
-
punctuation: /^([\
|
|
1277
|
-
}; // list of punctuation marks from
|
|
1278
|
-
// without * and _ to
|
|
1279
|
-
|
|
1280
|
-
inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
|
|
1281
|
-
inline.punctuation = edit$1
|
|
1282
|
-
|
|
1283
|
-
inline.
|
|
1284
|
-
inline.
|
|
1285
|
-
inline._comment = edit$1
|
|
1286
|
-
inline.
|
|
1287
|
-
inline.
|
|
1288
|
-
inline.
|
|
1289
|
-
inline.
|
|
1290
|
-
inline.
|
|
1291
|
-
inline.
|
|
1292
|
-
inline.
|
|
1293
|
-
inline.
|
|
1294
|
-
inline.
|
|
1295
|
-
inline.
|
|
1296
|
-
inline.
|
|
1297
|
-
inline.
|
|
1298
|
-
inline.
|
|
1299
|
-
inline.
|
|
1300
|
-
inline.
|
|
1301
|
-
inline.tag = edit$1(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();
|
|
1302
|
-
inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
|
|
1303
|
-
inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
|
|
1304
|
-
inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
|
|
1305
|
-
inline.link = edit$1(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();
|
|
1306
|
-
inline.reflink = edit$1(inline.reflink).replace('label', inline._label).getRegex();
|
|
1307
|
-
inline.reflinkSearch = edit$1(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();
|
|
1279
|
+
del: noopTest,
|
|
1280
|
+
text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
|
|
1281
|
+
punctuation: /^([\spunctuation])/
|
|
1282
|
+
}; // list of punctuation marks from CommonMark spec
|
|
1283
|
+
// without * and _ to handle the different emphasis markers * and _
|
|
1284
|
+
|
|
1285
|
+
inline$1._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
|
|
1286
|
+
inline$1.punctuation = edit(inline$1.punctuation).replace(/punctuation/g, inline$1._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>
|
|
1287
|
+
|
|
1288
|
+
inline$1.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
|
|
1289
|
+
inline$1.escapedEmSt = /\\\*|\\_/g;
|
|
1290
|
+
inline$1._comment = edit(block$1._comment).replace('(?:-->|$)', '-->').getRegex();
|
|
1291
|
+
inline$1.emStrong.lDelim = edit(inline$1.emStrong.lDelim).replace(/punct/g, inline$1._punctuation).getRegex();
|
|
1292
|
+
inline$1.emStrong.rDelimAst = edit(inline$1.emStrong.rDelimAst, 'g').replace(/punct/g, inline$1._punctuation).getRegex();
|
|
1293
|
+
inline$1.emStrong.rDelimUnd = edit(inline$1.emStrong.rDelimUnd, 'g').replace(/punct/g, inline$1._punctuation).getRegex();
|
|
1294
|
+
inline$1._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
|
|
1295
|
+
inline$1._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
|
|
1296
|
+
inline$1._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
|
|
1297
|
+
inline$1.autolink = edit(inline$1.autolink).replace('scheme', inline$1._scheme).replace('email', inline$1._email).getRegex();
|
|
1298
|
+
inline$1._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
|
|
1299
|
+
inline$1.tag = edit(inline$1.tag).replace('comment', inline$1._comment).replace('attribute', inline$1._attribute).getRegex();
|
|
1300
|
+
inline$1._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
|
|
1301
|
+
inline$1._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
|
|
1302
|
+
inline$1._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
|
|
1303
|
+
inline$1.link = edit(inline$1.link).replace('label', inline$1._label).replace('href', inline$1._href).replace('title', inline$1._title).getRegex();
|
|
1304
|
+
inline$1.reflink = edit(inline$1.reflink).replace('label', inline$1._label).getRegex();
|
|
1305
|
+
inline$1.reflinkSearch = edit(inline$1.reflinkSearch, 'g').replace('reflink', inline$1.reflink).replace('nolink', inline$1.nolink).getRegex();
|
|
1308
1306
|
/**
|
|
1309
1307
|
* Normal Inline Grammar
|
|
1310
1308
|
*/
|
|
1311
1309
|
|
|
1312
|
-
inline.normal = merge$1({}, inline);
|
|
1310
|
+
inline$1.normal = merge$1({}, inline$1);
|
|
1313
1311
|
/**
|
|
1314
1312
|
* Pedantic Inline Grammar
|
|
1315
1313
|
*/
|
|
1316
1314
|
|
|
1317
|
-
inline.pedantic = merge$1({}, inline.normal, {
|
|
1315
|
+
inline$1.pedantic = merge$1({}, inline$1.normal, {
|
|
1318
1316
|
strong: {
|
|
1319
1317
|
start: /^__|\*\*/,
|
|
1320
1318
|
middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
|
|
@@ -1327,39 +1325,39 @@
|
|
|
1327
1325
|
endAst: /\*(?!\*)/g,
|
|
1328
1326
|
endUnd: /_(?!_)/g
|
|
1329
1327
|
},
|
|
1330
|
-
link: edit
|
|
1331
|
-
reflink: edit
|
|
1328
|
+
link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline$1._label).getRegex(),
|
|
1329
|
+
reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline$1._label).getRegex()
|
|
1332
1330
|
});
|
|
1333
1331
|
/**
|
|
1334
1332
|
* GFM Inline Grammar
|
|
1335
1333
|
*/
|
|
1336
1334
|
|
|
1337
|
-
inline.gfm = merge$1({}, inline.normal, {
|
|
1338
|
-
escape: edit$1
|
|
1335
|
+
inline$1.gfm = merge$1({}, inline$1.normal, {
|
|
1336
|
+
escape: edit(inline$1.escape).replace('])', '~|])').getRegex(),
|
|
1339
1337
|
_extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
|
|
1340
1338
|
url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
|
|
1341
1339
|
_backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
|
|
1342
1340
|
del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
|
|
1343
|
-
text: /^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
|
|
1341
|
+
text: /^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
|
|
1344
1342
|
});
|
|
1345
|
-
inline.gfm.url = edit$1
|
|
1343
|
+
inline$1.gfm.url = edit(inline$1.gfm.url, 'i').replace('email', inline$1.gfm._extended_email).getRegex();
|
|
1346
1344
|
/**
|
|
1347
1345
|
* GFM + Line Breaks Inline Grammar
|
|
1348
1346
|
*/
|
|
1349
1347
|
|
|
1350
|
-
inline.breaks = merge$1({}, inline.gfm, {
|
|
1351
|
-
br: edit$1
|
|
1352
|
-
text: edit$1
|
|
1348
|
+
inline$1.breaks = merge$1({}, inline$1.gfm, {
|
|
1349
|
+
br: edit(inline$1.br).replace('{2,}', '*').getRegex(),
|
|
1350
|
+
text: edit(inline$1.gfm.text).replace('\\b_', '\\b_| {2,}\\n').replace(/\{2,\}/g, '*').getRegex()
|
|
1353
1351
|
});
|
|
1354
1352
|
var rules = {
|
|
1355
|
-
block: block,
|
|
1356
|
-
inline: inline
|
|
1353
|
+
block: block$1,
|
|
1354
|
+
inline: inline$1
|
|
1357
1355
|
};
|
|
1358
1356
|
|
|
1359
|
-
var defaults$
|
|
1360
|
-
var block
|
|
1361
|
-
inline
|
|
1362
|
-
var repeatString
|
|
1357
|
+
var defaults$3 = defaults$5.defaults;
|
|
1358
|
+
var block = rules.block,
|
|
1359
|
+
inline = rules.inline;
|
|
1360
|
+
var repeatString = helpers.repeatString;
|
|
1363
1361
|
/**
|
|
1364
1362
|
* smartypants text replacement
|
|
1365
1363
|
*/
|
|
@@ -1406,25 +1404,25 @@
|
|
|
1406
1404
|
function Lexer(options) {
|
|
1407
1405
|
this.tokens = [];
|
|
1408
1406
|
this.tokens.links = Object.create(null);
|
|
1409
|
-
this.options = options || defaults$
|
|
1407
|
+
this.options = options || defaults$3;
|
|
1410
1408
|
this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();
|
|
1411
1409
|
this.tokenizer = this.options.tokenizer;
|
|
1412
1410
|
this.tokenizer.options = this.options;
|
|
1413
1411
|
var rules = {
|
|
1414
|
-
block: block
|
|
1415
|
-
inline: inline
|
|
1412
|
+
block: block.normal,
|
|
1413
|
+
inline: inline.normal
|
|
1416
1414
|
};
|
|
1417
1415
|
|
|
1418
1416
|
if (this.options.pedantic) {
|
|
1419
|
-
rules.block = block
|
|
1420
|
-
rules.inline = inline
|
|
1417
|
+
rules.block = block.pedantic;
|
|
1418
|
+
rules.inline = inline.pedantic;
|
|
1421
1419
|
} else if (this.options.gfm) {
|
|
1422
|
-
rules.block = block
|
|
1420
|
+
rules.block = block.gfm;
|
|
1423
1421
|
|
|
1424
1422
|
if (this.options.breaks) {
|
|
1425
|
-
rules.inline = inline
|
|
1423
|
+
rules.inline = inline.breaks;
|
|
1426
1424
|
} else {
|
|
1427
|
-
rules.inline = inline
|
|
1425
|
+
rules.inline = inline.gfm;
|
|
1428
1426
|
}
|
|
1429
1427
|
}
|
|
1430
1428
|
|
|
@@ -1497,15 +1495,15 @@
|
|
|
1497
1495
|
} // code
|
|
1498
1496
|
|
|
1499
1497
|
|
|
1500
|
-
if (token = this.tokenizer.code(src
|
|
1498
|
+
if (token = this.tokenizer.code(src)) {
|
|
1501
1499
|
src = src.substring(token.raw.length);
|
|
1500
|
+
lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.
|
|
1502
1501
|
|
|
1503
|
-
if (
|
|
1504
|
-
tokens.push(token);
|
|
1505
|
-
} else {
|
|
1506
|
-
lastToken = tokens[tokens.length - 1];
|
|
1502
|
+
if (lastToken && lastToken.type === 'paragraph') {
|
|
1507
1503
|
lastToken.raw += '\n' + token.raw;
|
|
1508
1504
|
lastToken.text += '\n' + token.text;
|
|
1505
|
+
} else {
|
|
1506
|
+
tokens.push(token);
|
|
1509
1507
|
}
|
|
1510
1508
|
|
|
1511
1509
|
continue;
|
|
@@ -1603,15 +1601,15 @@
|
|
|
1603
1601
|
} // text
|
|
1604
1602
|
|
|
1605
1603
|
|
|
1606
|
-
if (token = this.tokenizer.text(src
|
|
1604
|
+
if (token = this.tokenizer.text(src)) {
|
|
1607
1605
|
src = src.substring(token.raw.length);
|
|
1606
|
+
lastToken = tokens[tokens.length - 1];
|
|
1608
1607
|
|
|
1609
|
-
if (
|
|
1610
|
-
tokens.push(token);
|
|
1611
|
-
} else {
|
|
1612
|
-
lastToken = tokens[tokens.length - 1];
|
|
1608
|
+
if (lastToken && lastToken.type === 'text') {
|
|
1613
1609
|
lastToken.raw += '\n' + token.raw;
|
|
1614
1610
|
lastToken.text += '\n' + token.text;
|
|
1611
|
+
} else {
|
|
1612
|
+
tokens.push(token);
|
|
1615
1613
|
}
|
|
1616
1614
|
|
|
1617
1615
|
continue;
|
|
@@ -1718,7 +1716,7 @@
|
|
|
1718
1716
|
inRawBlock = false;
|
|
1719
1717
|
}
|
|
1720
1718
|
|
|
1721
|
-
var token; // String with links masked to avoid interference with em and strong
|
|
1719
|
+
var token, lastToken; // String with links masked to avoid interference with em and strong
|
|
1722
1720
|
|
|
1723
1721
|
var maskedSrc = src;
|
|
1724
1722
|
var match;
|
|
@@ -1730,7 +1728,7 @@
|
|
|
1730
1728
|
if (links.length > 0) {
|
|
1731
1729
|
while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
|
|
1732
1730
|
if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
|
|
1733
|
-
maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString
|
|
1731
|
+
maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);
|
|
1734
1732
|
}
|
|
1735
1733
|
}
|
|
1736
1734
|
}
|
|
@@ -1738,7 +1736,12 @@
|
|
|
1738
1736
|
|
|
1739
1737
|
|
|
1740
1738
|
while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
|
|
1741
|
-
maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString
|
|
1739
|
+
maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
|
|
1740
|
+
} // Mask out escaped em & strong delimiters
|
|
1741
|
+
|
|
1742
|
+
|
|
1743
|
+
while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
|
|
1744
|
+
maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
|
|
1742
1745
|
}
|
|
1743
1746
|
|
|
1744
1747
|
while (src) {
|
|
@@ -1759,7 +1762,15 @@
|
|
|
1759
1762
|
src = src.substring(token.raw.length);
|
|
1760
1763
|
inLink = token.inLink;
|
|
1761
1764
|
inRawBlock = token.inRawBlock;
|
|
1762
|
-
tokens.
|
|
1765
|
+
var _lastToken = tokens[tokens.length - 1];
|
|
1766
|
+
|
|
1767
|
+
if (_lastToken && token.type === 'text' && _lastToken.type === 'text') {
|
|
1768
|
+
_lastToken.raw += token.raw;
|
|
1769
|
+
_lastToken.text += token.text;
|
|
1770
|
+
} else {
|
|
1771
|
+
tokens.push(token);
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1763
1774
|
continue;
|
|
1764
1775
|
} // link
|
|
1765
1776
|
|
|
@@ -1778,25 +1789,23 @@
|
|
|
1778
1789
|
|
|
1779
1790
|
if (token = this.tokenizer.reflink(src, this.tokens.links)) {
|
|
1780
1791
|
src = src.substring(token.raw.length);
|
|
1792
|
+
var _lastToken2 = tokens[tokens.length - 1];
|
|
1781
1793
|
|
|
1782
1794
|
if (token.type === 'link') {
|
|
1783
1795
|
token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);
|
|
1796
|
+
tokens.push(token);
|
|
1797
|
+
} else if (_lastToken2 && token.type === 'text' && _lastToken2.type === 'text') {
|
|
1798
|
+
_lastToken2.raw += token.raw;
|
|
1799
|
+
_lastToken2.text += token.text;
|
|
1800
|
+
} else {
|
|
1801
|
+
tokens.push(token);
|
|
1784
1802
|
}
|
|
1785
1803
|
|
|
1786
|
-
tokens.push(token);
|
|
1787
1804
|
continue;
|
|
1788
|
-
} // strong
|
|
1805
|
+
} // em & strong
|
|
1789
1806
|
|
|
1790
1807
|
|
|
1791
|
-
if (token = this.tokenizer.
|
|
1792
|
-
src = src.substring(token.raw.length);
|
|
1793
|
-
token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);
|
|
1794
|
-
tokens.push(token);
|
|
1795
|
-
continue;
|
|
1796
|
-
} // em
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
if (token = this.tokenizer.em(src, maskedSrc, prevChar)) {
|
|
1808
|
+
if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
|
|
1800
1809
|
src = src.substring(token.raw.length);
|
|
1801
1810
|
token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);
|
|
1802
1811
|
tokens.push(token);
|
|
@@ -1842,9 +1851,22 @@
|
|
|
1842
1851
|
|
|
1843
1852
|
if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {
|
|
1844
1853
|
src = src.substring(token.raw.length);
|
|
1845
|
-
|
|
1854
|
+
|
|
1855
|
+
if (token.raw.slice(-1) !== '_') {
|
|
1856
|
+
// Track prevChar before string of ____ started
|
|
1857
|
+
prevChar = token.raw.slice(-1);
|
|
1858
|
+
}
|
|
1859
|
+
|
|
1846
1860
|
keepPrevChar = true;
|
|
1847
|
-
tokens.
|
|
1861
|
+
lastToken = tokens[tokens.length - 1];
|
|
1862
|
+
|
|
1863
|
+
if (lastToken && lastToken.type === 'text') {
|
|
1864
|
+
lastToken.raw += token.raw;
|
|
1865
|
+
lastToken.text += token.text;
|
|
1866
|
+
} else {
|
|
1867
|
+
tokens.push(token);
|
|
1868
|
+
}
|
|
1869
|
+
|
|
1848
1870
|
continue;
|
|
1849
1871
|
}
|
|
1850
1872
|
|
|
@@ -1867,8 +1889,8 @@
|
|
|
1867
1889
|
key: "rules",
|
|
1868
1890
|
get: function get() {
|
|
1869
1891
|
return {
|
|
1870
|
-
block: block
|
|
1871
|
-
inline: inline
|
|
1892
|
+
block: block,
|
|
1893
|
+
inline: inline
|
|
1872
1894
|
};
|
|
1873
1895
|
}
|
|
1874
1896
|
}]);
|
|
@@ -1876,8 +1898,8 @@
|
|
|
1876
1898
|
return Lexer;
|
|
1877
1899
|
}();
|
|
1878
1900
|
|
|
1879
|
-
var defaults$
|
|
1880
|
-
var cleanUrl
|
|
1901
|
+
var defaults$2 = defaults$5.defaults;
|
|
1902
|
+
var cleanUrl = helpers.cleanUrl,
|
|
1881
1903
|
escape$1 = helpers.escape;
|
|
1882
1904
|
/**
|
|
1883
1905
|
* Renderer
|
|
@@ -1885,7 +1907,7 @@
|
|
|
1885
1907
|
|
|
1886
1908
|
var Renderer_1 = /*#__PURE__*/function () {
|
|
1887
1909
|
function Renderer(options) {
|
|
1888
|
-
this.options = options || defaults$
|
|
1910
|
+
this.options = options || defaults$2;
|
|
1889
1911
|
}
|
|
1890
1912
|
|
|
1891
1913
|
var _proto = Renderer.prototype;
|
|
@@ -1987,7 +2009,7 @@
|
|
|
1987
2009
|
};
|
|
1988
2010
|
|
|
1989
2011
|
_proto.link = function link(href, title, text) {
|
|
1990
|
-
href = cleanUrl
|
|
2012
|
+
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
1991
2013
|
|
|
1992
2014
|
if (href === null) {
|
|
1993
2015
|
return text;
|
|
@@ -2004,7 +2026,7 @@
|
|
|
2004
2026
|
};
|
|
2005
2027
|
|
|
2006
2028
|
_proto.image = function image(href, title, text) {
|
|
2007
|
-
href = cleanUrl
|
|
2029
|
+
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
2008
2030
|
|
|
2009
2031
|
if (href === null) {
|
|
2010
2032
|
return text;
|
|
@@ -2135,15 +2157,15 @@
|
|
|
2135
2157
|
return Slugger;
|
|
2136
2158
|
}();
|
|
2137
2159
|
|
|
2138
|
-
var defaults$
|
|
2139
|
-
var unescape
|
|
2160
|
+
var defaults$1 = defaults$5.defaults;
|
|
2161
|
+
var unescape = helpers.unescape;
|
|
2140
2162
|
/**
|
|
2141
2163
|
* Parsing & Compiling
|
|
2142
2164
|
*/
|
|
2143
2165
|
|
|
2144
2166
|
var Parser_1 = /*#__PURE__*/function () {
|
|
2145
2167
|
function Parser(options) {
|
|
2146
|
-
this.options = options || defaults$
|
|
2168
|
+
this.options = options || defaults$1;
|
|
2147
2169
|
this.options.renderer = this.options.renderer || new Renderer_1();
|
|
2148
2170
|
this.renderer = this.options.renderer;
|
|
2149
2171
|
this.renderer.options = this.options;
|
|
@@ -2218,7 +2240,7 @@
|
|
|
2218
2240
|
|
|
2219
2241
|
case 'heading':
|
|
2220
2242
|
{
|
|
2221
|
-
out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape
|
|
2243
|
+
out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);
|
|
2222
2244
|
continue;
|
|
2223
2245
|
}
|
|
2224
2246
|
|
|
@@ -2453,12 +2475,12 @@
|
|
|
2453
2475
|
return Parser;
|
|
2454
2476
|
}();
|
|
2455
2477
|
|
|
2456
|
-
var merge
|
|
2457
|
-
checkSanitizeDeprecation
|
|
2458
|
-
escape
|
|
2459
|
-
var getDefaults = defaults.getDefaults,
|
|
2460
|
-
changeDefaults = defaults.changeDefaults,
|
|
2461
|
-
defaults
|
|
2478
|
+
var merge = helpers.merge,
|
|
2479
|
+
checkSanitizeDeprecation = helpers.checkSanitizeDeprecation,
|
|
2480
|
+
escape = helpers.escape;
|
|
2481
|
+
var getDefaults = defaults$5.getDefaults,
|
|
2482
|
+
changeDefaults = defaults$5.changeDefaults,
|
|
2483
|
+
defaults = defaults$5.defaults;
|
|
2462
2484
|
/**
|
|
2463
2485
|
* Marked
|
|
2464
2486
|
*/
|
|
@@ -2478,8 +2500,8 @@
|
|
|
2478
2500
|
opt = null;
|
|
2479
2501
|
}
|
|
2480
2502
|
|
|
2481
|
-
opt = merge
|
|
2482
|
-
checkSanitizeDeprecation
|
|
2503
|
+
opt = merge({}, marked.defaults, opt || {});
|
|
2504
|
+
checkSanitizeDeprecation(opt);
|
|
2483
2505
|
|
|
2484
2506
|
if (callback) {
|
|
2485
2507
|
var highlight = opt.highlight;
|
|
@@ -2556,7 +2578,7 @@
|
|
|
2556
2578
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
2557
2579
|
|
|
2558
2580
|
if (opt.silent) {
|
|
2559
|
-
return '<p>An error occurred:</p><pre>' + escape
|
|
2581
|
+
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
2560
2582
|
}
|
|
2561
2583
|
|
|
2562
2584
|
throw e;
|
|
@@ -2568,19 +2590,19 @@
|
|
|
2568
2590
|
|
|
2569
2591
|
|
|
2570
2592
|
marked.options = marked.setOptions = function (opt) {
|
|
2571
|
-
merge
|
|
2593
|
+
merge(marked.defaults, opt);
|
|
2572
2594
|
changeDefaults(marked.defaults);
|
|
2573
2595
|
return marked;
|
|
2574
2596
|
};
|
|
2575
2597
|
|
|
2576
2598
|
marked.getDefaults = getDefaults;
|
|
2577
|
-
marked.defaults = defaults
|
|
2599
|
+
marked.defaults = defaults;
|
|
2578
2600
|
/**
|
|
2579
2601
|
* Use Extension
|
|
2580
2602
|
*/
|
|
2581
2603
|
|
|
2582
2604
|
marked.use = function (extension) {
|
|
2583
|
-
var opts = merge
|
|
2605
|
+
var opts = merge({}, extension);
|
|
2584
2606
|
|
|
2585
2607
|
if (extension.renderer) {
|
|
2586
2608
|
(function () {
|
|
@@ -2716,8 +2738,8 @@
|
|
|
2716
2738
|
throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
|
2717
2739
|
}
|
|
2718
2740
|
|
|
2719
|
-
opt = merge
|
|
2720
|
-
checkSanitizeDeprecation
|
|
2741
|
+
opt = merge({}, marked.defaults, opt || {});
|
|
2742
|
+
checkSanitizeDeprecation(opt);
|
|
2721
2743
|
|
|
2722
2744
|
try {
|
|
2723
2745
|
var tokens = Lexer_1.lexInline(src, opt);
|
|
@@ -2731,7 +2753,7 @@
|
|
|
2731
2753
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
2732
2754
|
|
|
2733
2755
|
if (opt.silent) {
|
|
2734
|
-
return '<p>An error occurred:</p><pre>' + escape
|
|
2756
|
+
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
2735
2757
|
}
|
|
2736
2758
|
|
|
2737
2759
|
throw e;
|