marked 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/bin/marked +9 -1
- package/lib/marked.js +110 -70
- package/man/marked.1 +31 -11
- package/man/marked.1.txt +34 -34
- package/marked.min.js +1 -1
- package/package.json +16 -18
package/README.md
CHANGED
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
[](https://cdn.jsdelivr.net/npm/marked/marked.min.js)
|
|
9
9
|
[](https://packagephobia.now.sh/result?p=marked)
|
|
10
10
|
[](https://www.npmjs.com/package/marked)
|
|
11
|
-
[](https://david-dm.org/markedjs/marked)
|
|
12
|
-
[](https://david-dm.org/markedjs/marked?type=dev)
|
|
11
|
+
[](https://david-dm.org/markedjs/marked)
|
|
12
|
+
[](https://david-dm.org/markedjs/marked?type=dev)
|
|
13
13
|
[](https://travis-ci.org/markedjs/marked)
|
|
14
|
+
[](https://snyk.io/test/npm/marked)
|
|
14
15
|
|
|
15
16
|
- ⚡ built for speed
|
|
16
17
|
- ⬇️ low-level compiler for parsing markdown without caching or blocking for long periods of time
|
|
@@ -34,11 +35,11 @@ Also read about:
|
|
|
34
35
|
|
|
35
36
|
**CLI:** `npm install -g marked`
|
|
36
37
|
|
|
37
|
-
**In-browser:** `npm install marked
|
|
38
|
+
**In-browser:** `npm install marked`
|
|
38
39
|
|
|
39
40
|
## Usage
|
|
40
41
|
|
|
41
|
-
### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/#/USING_ADVANCED.md#options) the output HTML
|
|
42
|
+
### Warning: 🚨 Marked does not [sanitize](https://marked.js.org/#/USING_ADVANCED.md#options) the output HTML. Please use a sanitize library, like [DOMPurify](https://github.com/cure53/DOMPurify) (recommended), [sanitize-html](https://github.com/apostrophecms/sanitize-html) or [insane](https://github.com/bevacqua/insane) on the output HTML! 🚨
|
|
42
43
|
|
|
43
44
|
**CLI**
|
|
44
45
|
|
package/bin/marked
CHANGED
|
@@ -32,6 +32,11 @@ function help() {
|
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
function version() {
|
|
36
|
+
var pkg = require('../package.json');
|
|
37
|
+
console.log(pkg.version);
|
|
38
|
+
}
|
|
39
|
+
|
|
35
40
|
/**
|
|
36
41
|
* Main
|
|
37
42
|
*/
|
|
@@ -98,6 +103,9 @@ function main(argv, callback) {
|
|
|
98
103
|
case '-h':
|
|
99
104
|
case '--help':
|
|
100
105
|
return help();
|
|
106
|
+
case '-v':
|
|
107
|
+
case '--version':
|
|
108
|
+
return version();
|
|
101
109
|
default:
|
|
102
110
|
if (arg.indexOf('--') === 0) {
|
|
103
111
|
opt = camelize(arg.replace(/^--(no-)?/, ''));
|
|
@@ -186,7 +194,7 @@ function camelize(text) {
|
|
|
186
194
|
|
|
187
195
|
function handleError(err) {
|
|
188
196
|
if (err.code === 'ENOENT') {
|
|
189
|
-
console.error(
|
|
197
|
+
console.error('marked: output to ' + err.path + ': No such directory');
|
|
190
198
|
return process.exit(1);
|
|
191
199
|
}
|
|
192
200
|
throw err;
|
package/lib/marked.js
CHANGED
|
@@ -14,10 +14,9 @@
|
|
|
14
14
|
var block = {
|
|
15
15
|
newline: /^\n+/,
|
|
16
16
|
code: /^( {4}[^\n]+\n*)+/,
|
|
17
|
-
fences:
|
|
17
|
+
fences: /^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
|
|
18
18
|
hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
|
|
19
|
-
heading: /^
|
|
20
|
-
nptable: noop,
|
|
19
|
+
heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,
|
|
21
20
|
blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
|
|
22
21
|
list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
|
|
23
22
|
html: '^ {0,3}(?:' // optional indentation
|
|
@@ -27,13 +26,16 @@ var block = {
|
|
|
27
26
|
+ '|<![A-Z][\\s\\S]*?>\\n*' // (4)
|
|
28
27
|
+ '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*' // (5)
|
|
29
28
|
+ '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)' // (6)
|
|
30
|
-
+ '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(
|
|
31
|
-
+ '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(
|
|
29
|
+
+ '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag
|
|
30
|
+
+ '|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag
|
|
32
31
|
+ ')',
|
|
33
32
|
def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
|
|
33
|
+
nptable: noop,
|
|
34
34
|
table: noop,
|
|
35
|
-
lheading: /^([^\n]+)\n
|
|
36
|
-
|
|
35
|
+
lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
|
|
36
|
+
// regex template, placeholders will be replaced according to different paragraph
|
|
37
|
+
// interruption rules of commonmark and the original markdown spec:
|
|
38
|
+
_paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
|
|
37
39
|
text: /^[^\n]+/
|
|
38
40
|
};
|
|
39
41
|
|
|
@@ -69,10 +71,14 @@ block.html = edit(block.html, 'i')
|
|
|
69
71
|
.replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
|
|
70
72
|
.getRegex();
|
|
71
73
|
|
|
72
|
-
block.paragraph = edit(block.
|
|
74
|
+
block.paragraph = edit(block._paragraph)
|
|
73
75
|
.replace('hr', block.hr)
|
|
74
|
-
.replace('heading',
|
|
75
|
-
.replace('lheading',
|
|
76
|
+
.replace('heading', ' {0,3}#{1,6} +')
|
|
77
|
+
.replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs
|
|
78
|
+
.replace('blockquote', ' {0,3}>')
|
|
79
|
+
.replace('fences', ' {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n')
|
|
80
|
+
.replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
|
|
81
|
+
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)')
|
|
76
82
|
.replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
|
|
77
83
|
.getRegex();
|
|
78
84
|
|
|
@@ -91,28 +97,12 @@ block.normal = merge({}, block);
|
|
|
91
97
|
*/
|
|
92
98
|
|
|
93
99
|
block.gfm = merge({}, block.normal, {
|
|
94
|
-
fences: /^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
|
|
95
|
-
paragraph: /^/,
|
|
96
|
-
heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
block.gfm.paragraph = edit(block.paragraph)
|
|
100
|
-
.replace('(?!', '(?!'
|
|
101
|
-
+ block.gfm.fences.source.replace('\\1', '\\2') + '|'
|
|
102
|
-
+ block.list.source.replace('\\1', '\\3') + '|')
|
|
103
|
-
.getRegex();
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* GFM + Tables Block Grammar
|
|
107
|
-
*/
|
|
108
|
-
|
|
109
|
-
block.tables = merge({}, block.gfm, {
|
|
110
100
|
nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,
|
|
111
101
|
table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/
|
|
112
102
|
});
|
|
113
103
|
|
|
114
104
|
/**
|
|
115
|
-
* Pedantic grammar
|
|
105
|
+
* Pedantic grammar (original John Gruber's loose markdown specification)
|
|
116
106
|
*/
|
|
117
107
|
|
|
118
108
|
block.pedantic = merge({}, block.normal, {
|
|
@@ -126,7 +116,18 @@ block.pedantic = merge({}, block.normal, {
|
|
|
126
116
|
+ '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
|
|
127
117
|
+ '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
|
|
128
118
|
.getRegex(),
|
|
129
|
-
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)
|
|
119
|
+
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
|
|
120
|
+
heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
|
|
121
|
+
fences: noop, // fences not supported
|
|
122
|
+
paragraph: edit(block.normal._paragraph)
|
|
123
|
+
.replace('hr', block.hr)
|
|
124
|
+
.replace('heading', ' *#{1,6} *[^\n]')
|
|
125
|
+
.replace('lheading', block.lheading)
|
|
126
|
+
.replace('blockquote', ' {0,3}>')
|
|
127
|
+
.replace('|fences', '')
|
|
128
|
+
.replace('|list', '')
|
|
129
|
+
.replace('|html', '')
|
|
130
|
+
.getRegex()
|
|
130
131
|
});
|
|
131
132
|
|
|
132
133
|
/**
|
|
@@ -142,11 +143,7 @@ function Lexer(options) {
|
|
|
142
143
|
if (this.options.pedantic) {
|
|
143
144
|
this.rules = block.pedantic;
|
|
144
145
|
} else if (this.options.gfm) {
|
|
145
|
-
|
|
146
|
-
this.rules = block.tables;
|
|
147
|
-
} else {
|
|
148
|
-
this.rules = block.gfm;
|
|
149
|
-
}
|
|
146
|
+
this.rules = block.gfm;
|
|
150
147
|
}
|
|
151
148
|
}
|
|
152
149
|
|
|
@@ -215,18 +212,25 @@ Lexer.prototype.token = function(src, top) {
|
|
|
215
212
|
|
|
216
213
|
// code
|
|
217
214
|
if (cap = this.rules.code.exec(src)) {
|
|
215
|
+
var lastToken = this.tokens[this.tokens.length - 1];
|
|
218
216
|
src = src.substring(cap[0].length);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
217
|
+
// An indented code block cannot interrupt a paragraph.
|
|
218
|
+
if (lastToken && lastToken.type === 'paragraph') {
|
|
219
|
+
lastToken.text += '\n' + cap[0].trimRight();
|
|
220
|
+
} else {
|
|
221
|
+
cap = cap[0].replace(/^ {4}/gm, '');
|
|
222
|
+
this.tokens.push({
|
|
223
|
+
type: 'code',
|
|
224
|
+
codeBlockStyle: 'indented',
|
|
225
|
+
text: !this.options.pedantic
|
|
226
|
+
? rtrim(cap, '\n')
|
|
227
|
+
: cap
|
|
228
|
+
});
|
|
229
|
+
}
|
|
226
230
|
continue;
|
|
227
231
|
}
|
|
228
232
|
|
|
229
|
-
// fences
|
|
233
|
+
// fences
|
|
230
234
|
if (cap = this.rules.fences.exec(src)) {
|
|
231
235
|
src = src.substring(cap[0].length);
|
|
232
236
|
this.tokens.push({
|
|
@@ -249,7 +253,7 @@ Lexer.prototype.token = function(src, top) {
|
|
|
249
253
|
}
|
|
250
254
|
|
|
251
255
|
// table no leading pipe (gfm)
|
|
252
|
-
if (
|
|
256
|
+
if (cap = this.rules.nptable.exec(src)) {
|
|
253
257
|
item = {
|
|
254
258
|
type: 'table',
|
|
255
259
|
header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
|
|
@@ -427,7 +431,7 @@ Lexer.prototype.token = function(src, top) {
|
|
|
427
431
|
: 'html',
|
|
428
432
|
pre: !this.options.sanitizer
|
|
429
433
|
&& (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
|
|
430
|
-
text: cap[0]
|
|
434
|
+
text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]
|
|
431
435
|
});
|
|
432
436
|
continue;
|
|
433
437
|
}
|
|
@@ -447,12 +451,12 @@ Lexer.prototype.token = function(src, top) {
|
|
|
447
451
|
}
|
|
448
452
|
|
|
449
453
|
// table (gfm)
|
|
450
|
-
if (
|
|
454
|
+
if (cap = this.rules.table.exec(src)) {
|
|
451
455
|
item = {
|
|
452
456
|
type: 'table',
|
|
453
457
|
header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')),
|
|
454
458
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
|
455
|
-
cells: cap[3] ? cap[3].replace(
|
|
459
|
+
cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
|
|
456
460
|
};
|
|
457
461
|
|
|
458
462
|
if (item.header.length === item.align.length) {
|
|
@@ -487,7 +491,7 @@ Lexer.prototype.token = function(src, top) {
|
|
|
487
491
|
src = src.substring(cap[0].length);
|
|
488
492
|
this.tokens.push({
|
|
489
493
|
type: 'heading',
|
|
490
|
-
depth: cap[2] === '=' ? 1 : 2,
|
|
494
|
+
depth: cap[2].charAt(0) === '=' ? 1 : 2,
|
|
491
495
|
text: cap[1]
|
|
492
496
|
});
|
|
493
497
|
continue;
|
|
@@ -538,15 +542,15 @@ var inline = {
|
|
|
538
542
|
+ '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. <?php ?>
|
|
539
543
|
+ '|^<![a-zA-Z]+\\s[\\s\\S]*?>' // declaration, e.g. <!DOCTYPE html>
|
|
540
544
|
+ '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>', // CDATA section
|
|
541
|
-
link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,
|
|
545
|
+
link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
|
|
542
546
|
reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
|
|
543
547
|
nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
|
|
544
548
|
strong: /^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,
|
|
545
|
-
em: /^_([^\s_])_(?!_)|^\*([^\s
|
|
549
|
+
em: /^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,
|
|
546
550
|
code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
|
|
547
551
|
br: /^( {2,}|\\)\n(?!\s*$)/,
|
|
548
552
|
del: noop,
|
|
549
|
-
text: /^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n
|
|
553
|
+
text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/
|
|
550
554
|
};
|
|
551
555
|
|
|
552
556
|
// list of punctuation marks from common mark spec
|
|
@@ -570,8 +574,8 @@ inline.tag = edit(inline.tag)
|
|
|
570
574
|
.replace('attribute', inline._attribute)
|
|
571
575
|
.getRegex();
|
|
572
576
|
|
|
573
|
-
inline._label = /(?:\[[^\[\]]*\]
|
|
574
|
-
inline._href =
|
|
577
|
+
inline._label = /(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
|
|
578
|
+
inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/;
|
|
575
579
|
inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
|
|
576
580
|
|
|
577
581
|
inline.link = edit(inline.link)
|
|
@@ -615,10 +619,7 @@ inline.gfm = merge({}, inline.normal, {
|
|
|
615
619
|
url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
|
|
616
620
|
_backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
|
|
617
621
|
del: /^~+(?=\S)([\s\S]*?\S)~+/,
|
|
618
|
-
text:
|
|
619
|
-
.replace(']|', '~]|')
|
|
620
|
-
.replace('|$', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|$')
|
|
621
|
-
.getRegex()
|
|
622
|
+
text: /^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
|
|
622
623
|
});
|
|
623
624
|
|
|
624
625
|
inline.gfm.url = edit(inline.gfm.url, 'i')
|
|
@@ -630,7 +631,10 @@ inline.gfm.url = edit(inline.gfm.url, 'i')
|
|
|
630
631
|
|
|
631
632
|
inline.breaks = merge({}, inline.gfm, {
|
|
632
633
|
br: edit(inline.br).replace('{2,}', '*').getRegex(),
|
|
633
|
-
text: edit(inline.gfm.text)
|
|
634
|
+
text: edit(inline.gfm.text)
|
|
635
|
+
.replace('\\b_', '\\b_| {2,}\\n')
|
|
636
|
+
.replace(/\{2,\}/g, '*')
|
|
637
|
+
.getRegex()
|
|
634
638
|
});
|
|
635
639
|
|
|
636
640
|
/**
|
|
@@ -719,6 +723,13 @@ InlineLexer.prototype.output = function(src) {
|
|
|
719
723
|
|
|
720
724
|
// link
|
|
721
725
|
if (cap = this.rules.link.exec(src)) {
|
|
726
|
+
var lastParenIndex = findClosingBracket(cap[2], '()');
|
|
727
|
+
if (lastParenIndex > -1) {
|
|
728
|
+
var linkLen = 4 + cap[1].length + lastParenIndex;
|
|
729
|
+
cap[2] = cap[2].substring(0, lastParenIndex);
|
|
730
|
+
cap[0] = cap[0].substring(0, linkLen).trim();
|
|
731
|
+
cap[3] = '';
|
|
732
|
+
}
|
|
722
733
|
src = src.substring(cap[0].length);
|
|
723
734
|
this.inLink = true;
|
|
724
735
|
href = cap[2];
|
|
@@ -836,7 +847,7 @@ InlineLexer.prototype.output = function(src) {
|
|
|
836
847
|
if (cap = this.rules.text.exec(src)) {
|
|
837
848
|
src = src.substring(cap[0].length);
|
|
838
849
|
if (this.inRawBlock) {
|
|
839
|
-
out += this.renderer.text(cap[0]);
|
|
850
|
+
out += this.renderer.text(this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0]);
|
|
840
851
|
} else {
|
|
841
852
|
out += this.renderer.text(escape(this.smartypants(cap[0])));
|
|
842
853
|
}
|
|
@@ -1084,7 +1095,7 @@ TextRenderer.prototype.strong =
|
|
|
1084
1095
|
TextRenderer.prototype.em =
|
|
1085
1096
|
TextRenderer.prototype.codespan =
|
|
1086
1097
|
TextRenderer.prototype.del =
|
|
1087
|
-
TextRenderer.prototype.text = function
|
|
1098
|
+
TextRenderer.prototype.text = function(text) {
|
|
1088
1099
|
return text;
|
|
1089
1100
|
};
|
|
1090
1101
|
|
|
@@ -1129,7 +1140,7 @@ Parser.prototype.parse = function(src) {
|
|
|
1129
1140
|
// use an InlineLexer with a TextRenderer to extract pure text
|
|
1130
1141
|
this.inlineText = new InlineLexer(
|
|
1131
1142
|
src.links,
|
|
1132
|
-
merge({}, this.options, {renderer: new TextRenderer()})
|
|
1143
|
+
merge({}, this.options, { renderer: new TextRenderer() })
|
|
1133
1144
|
);
|
|
1134
1145
|
this.tokens = src.reverse();
|
|
1135
1146
|
|
|
@@ -1146,7 +1157,8 @@ Parser.prototype.parse = function(src) {
|
|
|
1146
1157
|
*/
|
|
1147
1158
|
|
|
1148
1159
|
Parser.prototype.next = function() {
|
|
1149
|
-
|
|
1160
|
+
this.token = this.tokens.pop();
|
|
1161
|
+
return this.token;
|
|
1150
1162
|
};
|
|
1151
1163
|
|
|
1152
1164
|
/**
|
|
@@ -1251,9 +1263,11 @@ Parser.prototype.tok = function() {
|
|
|
1251
1263
|
case 'list_item_start': {
|
|
1252
1264
|
body = '';
|
|
1253
1265
|
var loose = this.token.loose;
|
|
1266
|
+
var checked = this.token.checked;
|
|
1267
|
+
var task = this.token.task;
|
|
1254
1268
|
|
|
1255
1269
|
if (this.token.task) {
|
|
1256
|
-
body += this.renderer.checkbox(
|
|
1270
|
+
body += this.renderer.checkbox(checked);
|
|
1257
1271
|
}
|
|
1258
1272
|
|
|
1259
1273
|
while (this.next().type !== 'list_item_end') {
|
|
@@ -1261,8 +1275,7 @@ Parser.prototype.tok = function() {
|
|
|
1261
1275
|
? this.parseText()
|
|
1262
1276
|
: this.tok();
|
|
1263
1277
|
}
|
|
1264
|
-
|
|
1265
|
-
return this.renderer.listitem(body);
|
|
1278
|
+
return this.renderer.listitem(body, task, checked);
|
|
1266
1279
|
}
|
|
1267
1280
|
case 'html': {
|
|
1268
1281
|
// TODO parse inline content if parameter markdown=1
|
|
@@ -1289,7 +1302,7 @@ Parser.prototype.tok = function() {
|
|
|
1289
1302
|
* Slugger generates header id
|
|
1290
1303
|
*/
|
|
1291
1304
|
|
|
1292
|
-
function Slugger
|
|
1305
|
+
function Slugger() {
|
|
1293
1306
|
this.seen = {};
|
|
1294
1307
|
}
|
|
1295
1308
|
|
|
@@ -1297,7 +1310,7 @@ function Slugger () {
|
|
|
1297
1310
|
* Convert string to unique id
|
|
1298
1311
|
*/
|
|
1299
1312
|
|
|
1300
|
-
Slugger.prototype.slug = function
|
|
1313
|
+
Slugger.prototype.slug = function(value) {
|
|
1301
1314
|
var slug = value
|
|
1302
1315
|
.toLowerCase()
|
|
1303
1316
|
.trim()
|
|
@@ -1323,11 +1336,11 @@ Slugger.prototype.slug = function (value) {
|
|
|
1323
1336
|
function escape(html, encode) {
|
|
1324
1337
|
if (encode) {
|
|
1325
1338
|
if (escape.escapeTest.test(html)) {
|
|
1326
|
-
return html.replace(escape.escapeReplace, function
|
|
1339
|
+
return html.replace(escape.escapeReplace, function(ch) { return escape.replacements[ch]; });
|
|
1327
1340
|
}
|
|
1328
1341
|
} else {
|
|
1329
1342
|
if (escape.escapeTestNoEncode.test(html)) {
|
|
1330
|
-
return html.replace(escape.escapeReplaceNoEncode, function
|
|
1343
|
+
return html.replace(escape.escapeReplaceNoEncode, function(ch) { return escape.replacements[ch]; });
|
|
1331
1344
|
}
|
|
1332
1345
|
}
|
|
1333
1346
|
|
|
@@ -1448,7 +1461,7 @@ function merge(obj) {
|
|
|
1448
1461
|
function splitCells(tableRow, count) {
|
|
1449
1462
|
// ensure that every cell-delimiting pipe has a space
|
|
1450
1463
|
// before it to distinguish it from an escaped pipe
|
|
1451
|
-
var row = tableRow.replace(/\|/g, function
|
|
1464
|
+
var row = tableRow.replace(/\|/g, function(match, offset, str) {
|
|
1452
1465
|
var escaped = false,
|
|
1453
1466
|
curr = offset;
|
|
1454
1467
|
while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
|
|
@@ -1503,6 +1516,32 @@ function rtrim(str, c, invert) {
|
|
|
1503
1516
|
return str.substr(0, str.length - suffLen);
|
|
1504
1517
|
}
|
|
1505
1518
|
|
|
1519
|
+
function findClosingBracket(str, b) {
|
|
1520
|
+
if (str.indexOf(b[1]) === -1) {
|
|
1521
|
+
return -1;
|
|
1522
|
+
}
|
|
1523
|
+
var level = 0;
|
|
1524
|
+
for (var i = 0; i < str.length; i++) {
|
|
1525
|
+
if (str[i] === '\\') {
|
|
1526
|
+
i++;
|
|
1527
|
+
} else if (str[i] === b[0]) {
|
|
1528
|
+
level++;
|
|
1529
|
+
} else if (str[i] === b[1]) {
|
|
1530
|
+
level--;
|
|
1531
|
+
if (level < 0) {
|
|
1532
|
+
return i;
|
|
1533
|
+
}
|
|
1534
|
+
}
|
|
1535
|
+
}
|
|
1536
|
+
return -1;
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1539
|
+
function checkSanitizeDeprecation(opt) {
|
|
1540
|
+
if (opt && opt.sanitize && !opt.silent) {
|
|
1541
|
+
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');
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
|
|
1506
1545
|
/**
|
|
1507
1546
|
* Marked
|
|
1508
1547
|
*/
|
|
@@ -1524,6 +1563,7 @@ function marked(src, opt, callback) {
|
|
|
1524
1563
|
}
|
|
1525
1564
|
|
|
1526
1565
|
opt = merge({}, marked.defaults, opt || {});
|
|
1566
|
+
checkSanitizeDeprecation(opt);
|
|
1527
1567
|
|
|
1528
1568
|
var highlight = opt.highlight,
|
|
1529
1569
|
tokens,
|
|
@@ -1588,6 +1628,7 @@ function marked(src, opt, callback) {
|
|
|
1588
1628
|
}
|
|
1589
1629
|
try {
|
|
1590
1630
|
if (opt) opt = merge({}, marked.defaults, opt);
|
|
1631
|
+
checkSanitizeDeprecation(opt);
|
|
1591
1632
|
return Parser.parse(Lexer.lex(src, opt), opt);
|
|
1592
1633
|
} catch (e) {
|
|
1593
1634
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
@@ -1610,7 +1651,7 @@ marked.setOptions = function(opt) {
|
|
|
1610
1651
|
return marked;
|
|
1611
1652
|
};
|
|
1612
1653
|
|
|
1613
|
-
marked.getDefaults = function
|
|
1654
|
+
marked.getDefaults = function() {
|
|
1614
1655
|
return {
|
|
1615
1656
|
baseUrl: null,
|
|
1616
1657
|
breaks: false,
|
|
@@ -1627,7 +1668,6 @@ marked.getDefaults = function () {
|
|
|
1627
1668
|
silent: false,
|
|
1628
1669
|
smartLists: false,
|
|
1629
1670
|
smartypants: false,
|
|
1630
|
-
tables: true,
|
|
1631
1671
|
xhtml: false
|
|
1632
1672
|
};
|
|
1633
1673
|
};
|
package/man/marked.1
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
.ds q \N'34'
|
|
2
|
-
.TH marked 1
|
|
2
|
+
.TH marked 1
|
|
3
3
|
|
|
4
4
|
.SH NAME
|
|
5
5
|
marked \- a javascript markdown parser
|
|
@@ -8,14 +8,14 @@ marked \- a javascript markdown parser
|
|
|
8
8
|
.B marked
|
|
9
9
|
[\-o \fI<output>\fP] [\-i \fI<input>\fP] [\-\-help]
|
|
10
10
|
[\-\-tokens] [\-\-pedantic] [\-\-gfm]
|
|
11
|
-
[\-\-breaks] [\-\-
|
|
11
|
+
[\-\-breaks] [\-\-sanitize]
|
|
12
12
|
[\-\-smart\-lists] [\-\-lang\-prefix \fI<prefix>\fP]
|
|
13
13
|
[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP]
|
|
14
14
|
|
|
15
15
|
.SH DESCRIPTION
|
|
16
16
|
.B marked
|
|
17
|
-
is a full-featured javascript markdown parser, built for speed.
|
|
18
|
-
multiple GFM features.
|
|
17
|
+
is a full-featured javascript markdown parser, built for speed.
|
|
18
|
+
It also includes multiple GFM features.
|
|
19
19
|
|
|
20
20
|
.SH EXAMPLES
|
|
21
21
|
.TP
|
|
@@ -33,15 +33,38 @@ marked \-\-output="hello world.html" \-i in.md \-\-no-breaks
|
|
|
33
33
|
Specify file output. If none is specified, write to stdout.
|
|
34
34
|
.TP
|
|
35
35
|
.BI \-i,\ \-\-input\ [\fIinput\fP]
|
|
36
|
-
Specify file input, otherwise use last argument as input file.
|
|
37
|
-
is specified, read from stdin.
|
|
36
|
+
Specify file input, otherwise use last argument as input file.
|
|
37
|
+
If no input file is specified, read from stdin.
|
|
38
|
+
.TP
|
|
39
|
+
.BI \-\-test
|
|
40
|
+
Makes sure the test(s) pass.
|
|
41
|
+
.RS
|
|
42
|
+
.PP
|
|
43
|
+
.B \-\-glob [\fIfile\fP]
|
|
44
|
+
Specify which test to use.
|
|
45
|
+
.PP
|
|
46
|
+
.B \-\-fix
|
|
47
|
+
Fixes tests.
|
|
48
|
+
.PP
|
|
49
|
+
.B \-\-bench
|
|
50
|
+
Benchmarks the test(s).
|
|
51
|
+
.PP
|
|
52
|
+
.B \-\-time
|
|
53
|
+
Times The test(s).
|
|
54
|
+
.PP
|
|
55
|
+
.B \-\-minified
|
|
56
|
+
Runs test file(s) as minified.
|
|
57
|
+
.PP
|
|
58
|
+
.B \-\-stop
|
|
59
|
+
Stop process if a test fails.
|
|
60
|
+
.RE
|
|
38
61
|
.TP
|
|
39
62
|
.BI \-t,\ \-\-tokens
|
|
40
63
|
Output a token stream instead of html.
|
|
41
64
|
.TP
|
|
42
65
|
.BI \-\-pedantic
|
|
43
|
-
Conform to obscure parts of markdown.pl as much as possible.
|
|
44
|
-
markdown bugs.
|
|
66
|
+
Conform to obscure parts of markdown.pl as much as possible.
|
|
67
|
+
Don't fix original markdown bugs.
|
|
45
68
|
.TP
|
|
46
69
|
.BI \-\-gfm
|
|
47
70
|
Enable github flavored markdown.
|
|
@@ -49,9 +72,6 @@ Enable github flavored markdown.
|
|
|
49
72
|
.BI \-\-breaks
|
|
50
73
|
Enable GFM line breaks. Only works with the gfm option.
|
|
51
74
|
.TP
|
|
52
|
-
.BI \-\-tables
|
|
53
|
-
Enable GFM tables. Only works with the gfm option.
|
|
54
|
-
.TP
|
|
55
75
|
.BI \-\-sanitize
|
|
56
76
|
Sanitize output. Ignore any HTML input.
|
|
57
77
|
.TP
|
package/man/marked.1.txt
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
|
-
marked(1)
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
marked(1) General Commands Manual marked(1)
|
|
4
2
|
|
|
5
3
|
NAME
|
|
6
4
|
marked - a javascript markdown parser
|
|
7
5
|
|
|
8
|
-
|
|
9
6
|
SYNOPSIS
|
|
10
7
|
marked [-o <output>] [-i <input>] [--help] [--tokens] [--pedantic]
|
|
11
|
-
[--gfm] [--breaks] [--
|
|
12
|
-
fix
|
|
8
|
+
[--gfm] [--breaks] [--sanitize] [--smart-lists] [--lang-prefix <pre-
|
|
9
|
+
fix>] [--no-etc...] [--silent] [filename]
|
|
13
10
|
|
|
14
11
|
|
|
15
12
|
DESCRIPTION
|
|
16
|
-
marked
|
|
13
|
+
marked is a full-featured javascript markdown parser, built for speed.
|
|
17
14
|
It also includes multiple GFM features.
|
|
18
15
|
|
|
19
|
-
|
|
20
16
|
EXAMPLES
|
|
21
17
|
cat in.md | marked > out.html
|
|
22
18
|
|
|
@@ -26,71 +22,75 @@ EXAMPLES
|
|
|
26
22
|
|
|
27
23
|
marked --output="hello world.html" -i in.md --no-breaks
|
|
28
24
|
|
|
29
|
-
|
|
30
25
|
OPTIONS
|
|
31
26
|
-o, --output [output]
|
|
32
|
-
|
|
27
|
+
Specify file output. If none is specified, write to stdout.
|
|
33
28
|
|
|
34
29
|
-i, --input [input]
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
Specify file input, otherwise use last argument as input file.
|
|
31
|
+
If no input file is specified, read from stdin.
|
|
32
|
+
|
|
33
|
+
--test Makes sure the test(s) pass.
|
|
34
|
+
|
|
35
|
+
--glob [file] Specify which test to use.
|
|
36
|
+
|
|
37
|
+
--fix Fixes tests.
|
|
38
|
+
|
|
39
|
+
--bench Benchmarks the test(s).
|
|
40
|
+
|
|
41
|
+
--time Times The test(s).
|
|
42
|
+
|
|
43
|
+
--minified Runs test file(s) as minified.
|
|
44
|
+
|
|
45
|
+
--stop Stop process if a test fails.
|
|
37
46
|
|
|
38
47
|
-t, --tokens
|
|
39
|
-
|
|
48
|
+
Output a token stream instead of html.
|
|
40
49
|
|
|
41
50
|
--pedantic
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
Conform to obscure parts of markdown.pl as much as possible.
|
|
52
|
+
Don't fix original markdown bugs.
|
|
44
53
|
|
|
45
54
|
--gfm Enable github flavored markdown.
|
|
46
55
|
|
|
47
56
|
--breaks
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
--tables
|
|
51
|
-
Enable GFM tables. Only works with the gfm option.
|
|
57
|
+
Enable GFM line breaks. Only works with the gfm option.
|
|
52
58
|
|
|
53
59
|
--sanitize
|
|
54
|
-
|
|
60
|
+
Sanitize output. Ignore any HTML input.
|
|
55
61
|
|
|
56
62
|
--smart-lists
|
|
57
|
-
|
|
63
|
+
Use smarter list behavior than the original markdown.
|
|
58
64
|
|
|
59
65
|
--lang-prefix [prefix]
|
|
60
|
-
|
|
66
|
+
Set the prefix for code block classes.
|
|
61
67
|
|
|
62
68
|
--mangle
|
|
63
|
-
|
|
69
|
+
Mangle email addresses.
|
|
64
70
|
|
|
65
71
|
--no-sanitize, -no-etc...
|
|
66
|
-
|
|
72
|
+
The inverse of any of the marked options above.
|
|
67
73
|
|
|
68
74
|
--silent
|
|
69
|
-
|
|
75
|
+
Silence error output.
|
|
70
76
|
|
|
71
77
|
-h, --help
|
|
72
|
-
|
|
73
|
-
|
|
78
|
+
Display help information.
|
|
74
79
|
|
|
75
80
|
CONFIGURATION
|
|
76
81
|
For configuring and running programmatically.
|
|
77
82
|
|
|
78
83
|
Example
|
|
79
84
|
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
require('marked')('*foo*', { gfm: true });
|
|
82
86
|
|
|
83
87
|
BUGS
|
|
84
88
|
Please report any bugs to https://github.com/markedjs/marked.
|
|
85
89
|
|
|
86
|
-
|
|
87
90
|
LICENSE
|
|
88
91
|
Copyright (c) 2011-2014, Christopher Jeffrey (MIT License).
|
|
89
92
|
|
|
90
|
-
|
|
91
93
|
SEE ALSO
|
|
92
94
|
markdown(1), node.js(1)
|
|
93
95
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
v0.3.1 2014-01-31 marked(1)
|
|
96
|
+
marked(1)
|
package/marked.min.js
CHANGED
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
* Copyright (c) 2011-2018, Christopher Jeffrey. (MIT Licensed)
|
|
4
4
|
* https://github.com/markedjs/marked
|
|
5
5
|
*/
|
|
6
|
-
!function(e){"use strict";var k={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:f,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,nptable:f,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,table:f,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/,text:/^[^\n]+/};function a(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||m.defaults,this.rules=k.normal,this.options.pedantic?this.rules=k.pedantic:this.options.gfm&&(this.options.tables?this.rules=k.tables:this.rules=k.gfm)}k._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,k._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,k.def=i(k.def).replace("label",k._label).replace("title",k._title).getRegex(),k.bullet=/(?:[*+-]|\d{1,9}\.)/,k.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,k.item=i(k.item,"gm").replace(/bull/g,k.bullet).getRegex(),k.list=i(k.list).replace(/bull/g,k.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+k.def.source+")").getRegex(),k._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",k._comment=/<!--(?!-?>)[\s\S]*?-->/,k.html=i(k.html,"i").replace("comment",k._comment).replace("tag",k._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),k.paragraph=i(k.paragraph).replace("hr",k.hr).replace("heading",k.heading).replace("lheading",k.lheading).replace("tag",k._tag).getRegex(),k.blockquote=i(k.blockquote).replace("paragraph",k.paragraph).getRegex(),k.normal=d({},k),k.gfm=d({},k.normal,{fences:/^ {0,3}(`{3,}|~{3,})([^`\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),k.gfm.paragraph=i(k.paragraph).replace("(?!","(?!"+k.gfm.fences.source.replace("\\1","\\2")+"|"+k.list.source.replace("\\1","\\3")+"|").getRegex(),k.tables=d({},k.gfm,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),k.pedantic=d({},k.normal,{html:i("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",k._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(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/}),a.rules=k,a.lex=function(e,t){return new a(t).lex(e)},a.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},a.prototype.token=function(e,t){var n,r,s,i,l,o,a,h,p,u,c,g,f,d,m,b;for(e=e.replace(/^ +$/gm,"");e;)if((s=this.rules.newline.exec(e))&&(e=e.substring(s[0].length),1<s[0].length&&this.tokens.push({type:"space"})),s=this.rules.code.exec(e))e=e.substring(s[0].length),s=s[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?s:y(s,"\n")});else if(s=this.rules.fences.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"code",lang:s[2]?s[2].trim():s[2],text:s[3]||""});else if(s=this.rules.heading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:s[1].length,text:s[2]});else if(t&&(s=this.rules.nptable.exec(e))&&(o={type:"table",header:x(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/\n$/,"").split("\n"):[]}).header.length===o.align.length){for(e=e.substring(s[0].length),c=0;c<o.align.length;c++)/^ *-+: *$/.test(o.align[c])?o.align[c]="right":/^ *:-+: *$/.test(o.align[c])?o.align[c]="center":/^ *:-+ *$/.test(o.align[c])?o.align[c]="left":o.align[c]=null;for(c=0;c<o.cells.length;c++)o.cells[c]=x(o.cells[c],o.header.length);this.tokens.push(o)}else if(s=this.rules.hr.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"hr"});else if(s=this.rules.blockquote.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"blockquote_start"}),s=s[0].replace(/^ *> ?/gm,""),this.token(s,t),this.tokens.push({type:"blockquote_end"});else if(s=this.rules.list.exec(e)){for(e=e.substring(s[0].length),a={type:"list_start",ordered:d=1<(i=s[2]).length,start:d?+i:"",loose:!1},this.tokens.push(a),n=!(h=[]),f=(s=s[0].match(this.rules.item)).length,c=0;c<f;c++)u=(o=s[c]).length,~(o=o.replace(/^ *([*+-]|\d+\.) */,"")).indexOf("\n ")&&(u-=o.length,o=this.options.pedantic?o.replace(/^ {1,4}/gm,""):o.replace(new RegExp("^ {1,"+u+"}","gm"),"")),c!==f-1&&(l=k.bullet.exec(s[c+1])[0],(1<i.length?1===l.length:1<l.length||this.options.smartLists&&l!==i)&&(e=s.slice(c+1).join("\n")+e,c=f-1)),r=n||/\n\n(?!\s*$)/.test(o),c!==f-1&&(n="\n"===o.charAt(o.length-1),r||(r=n)),r&&(a.loose=!0),b=void 0,(m=/^\[[ xX]\] /.test(o))&&(b=" "!==o[1],o=o.replace(/^\[[ xX]\] +/,"")),p={type:"list_item_start",task:m,checked:b,loose:r},h.push(p),this.tokens.push(p),this.token(o,!1),this.tokens.push({type:"list_item_end"});if(a.loose)for(f=h.length,c=0;c<f;c++)h[c].loose=!0;this.tokens.push({type:"list_end"})}else if(s=this.rules.html.exec(e))e=e.substring(s[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===s[1]||"script"===s[1]||"style"===s[1]),text:s[0]});else if(t&&(s=this.rules.def.exec(e)))e=e.substring(s[0].length),s[3]&&(s[3]=s[3].substring(1,s[3].length-1)),g=s[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[g]||(this.tokens.links[g]={href:s[2],title:s[3]});else if(t&&(s=this.rules.table.exec(e))&&(o={type:"table",header:x(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/(?: *\| *)?\n$/,"").split("\n"):[]}).header.length===o.align.length){for(e=e.substring(s[0].length),c=0;c<o.align.length;c++)/^ *-+: *$/.test(o.align[c])?o.align[c]="right":/^ *:-+: *$/.test(o.align[c])?o.align[c]="center":/^ *:-+ *$/.test(o.align[c])?o.align[c]="left":o.align[c]=null;for(c=0;c<o.cells.length;c++)o.cells[c]=x(o.cells[c].replace(/^ *\| *| *\| *$/g,""),o.header.length);this.tokens.push(o)}else if(s=this.rules.lheading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:"="===s[2]?1:2,text:s[1]});else if(t&&(s=this.rules.paragraph.exec(e)))e=e.substring(s[0].length),this.tokens.push({type:"paragraph",text:"\n"===s[1].charAt(s[1].length-1)?s[1].slice(0,-1):s[1]});else if(s=this.rules.text.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"text",text:s[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var n={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:f,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(href(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:f,text:/^(`+|[^`])[\s\S]*?(?=[\\<!\[`*]|\b_| {2,}\n|$)/};function h(e,t){if(this.options=t||m.defaults,this.links=e,this.rules=n.normal,this.renderer=this.options.renderer||new r,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=n.pedantic:this.options.gfm&&(this.options.breaks?this.rules=n.breaks:this.rules=n.gfm)}function r(e){this.options=e||m.defaults}function s(){}function p(e){this.tokens=[],this.token=null,this.options=e||m.defaults,this.options.renderer=this.options.renderer||new r,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new t}function t(){this.seen={}}function u(e,t){if(t){if(u.escapeTest.test(e))return e.replace(u.escapeReplace,function(e){return u.replacements[e]})}else if(u.escapeTestNoEncode.test(e))return e.replace(u.escapeReplaceNoEncode,function(e){return u.replacements[e]});return e}function c(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function i(n,e){return n=n.source||n,e=e||"",{replace:function(e,t){return t=(t=t.source||t).replace(/(^|[^\[])\^/g,"$1"),n=n.replace(e,t),this},getRegex:function(){return new RegExp(n,e)}}}function l(e,t,n){if(e){try{var r=decodeURIComponent(c(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!g.test(n)&&(n=function(e,t){o[" "+e]||(/^[^:]+:\/*[^/]*$/.test(e)?o[" "+e]=e+"/":o[" "+e]=y(e,"/",!0));return e=o[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^/]*)[\s\S]*/,"$1")+t:e+t}(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}n._punctuation="!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~",n.em=i(n.em).replace(/punctuation/g,n._punctuation).getRegex(),n._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,n._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,n._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])?)+(?![-_])/,n.autolink=i(n.autolink).replace("scheme",n._scheme).replace("email",n._email).getRegex(),n._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,n.tag=i(n.tag).replace("comment",k._comment).replace("attribute",n._attribute).getRegex(),n._label=/(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/,n._href=/\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/,n._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,n.link=i(n.link).replace("label",n._label).replace("href",n._href).replace("title",n._title).getRegex(),n.reflink=i(n.reflink).replace("label",n._label).getRegex(),n.normal=d({},n),n.pedantic=d({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:i(/^!?\[(label)\]\((.*?)\)/).replace("label",n._label).getRegex(),reflink:i(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",n._label).getRegex()}),n.gfm=d({},n.normal,{escape:i(n.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:i(n.text).replace("]|","~]|").replace("|$","|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&'*+/=?^_`{\\|}~-]+@|$").getRegex()}),n.gfm.url=i(n.gfm.url,"i").replace("email",n.gfm._extended_email).getRegex(),n.breaks=d({},n.gfm,{br:i(n.br).replace("{2,}","*").getRegex(),text:i(n.gfm.text).replace("{2,}","*").getRegex()}),h.rules=n,h.output=function(e,t,n){return new h(t,n).output(e)},h.prototype.output=function(e){for(var t,n,r,s,i,l,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=u(i[1]);else if(i=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(i[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(i[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(i[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(i[0])&&(this.inRawBlock=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):u(i[0]):i[0];else if(i=this.rules.link.exec(e))e=e.substring(i[0].length),this.inLink=!0,r=i[2],this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],s=t[3]):s="":s=i[3]?i[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),o+=this.outputLink(i,{href:h.escapes(r),title:h.escapes(s)}),this.inLink=!1;else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[6]||i[5]||i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(u(i[2].trim(),!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),r="@"===i[2]?"mailto:"+(n=u(this.mangle(i[1]))):n=u(i[1]),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.inRawBlock?o+=this.renderer.text(i[0]):o+=this.renderer.text(u(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===i[2])r="mailto:"+(n=u(i[0]));else{for(;l=i[0],i[0]=this.rules._backpedal.exec(i[0])[0],l!==i[0];);n=u(i[0]),r="www."===i[1]?"http://"+n:n}e=e.substring(i[0].length),o+=this.renderer.link(r,null,n)}return o},h.escapes=function(e){return e?e.replace(h.rules._escapes,"$1"):e},h.prototype.outputLink=function(e,t){var n=t.href,r=t.title?u(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,u(e[1]))},h.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},h.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,s=0;s<r;s++)t=e.charCodeAt(s),.5<Math.random()&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},r.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var s=this.options.highlight(e,r);null!=s&&s!==e&&(n=!0,e=s)}return r?'<pre><code class="'+this.options.langPrefix+u(r,!0)+'">'+(n?e:u(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:u(e,!0))+"</code></pre>"},r.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},r.prototype.html=function(e){return e},r.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},r.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},r.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},r.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},r.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},r.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},r.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},r.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},r.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},r.prototype.strong=function(e){return"<strong>"+e+"</strong>"},r.prototype.em=function(e){return"<em>"+e+"</em>"},r.prototype.codespan=function(e){return"<code>"+e+"</code>"},r.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},r.prototype.del=function(e){return"<del>"+e+"</del>"},r.prototype.link=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href="'+u(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},r.prototype.image=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},r.prototype.text=function(e){return e},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(e){return e},s.prototype.link=s.prototype.image=function(e,t,n){return""+n},s.prototype.br=function(){return""},p.parse=function(e,t){return new p(t).parse(e)},p.prototype.parse=function(e){this.inline=new h(e.links,this.options),this.inlineText=new h(e.links,d({},this.options,{renderer:new s})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},p.prototype.next=function(){return this.token=this.tokens.pop()},p.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},p.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},p.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,c(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,s="",i="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(s+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});i+=this.renderer.tablerow(n)}return this.renderer.table(s,i);case"blockquote_start":for(i="";"blockquote_end"!==this.next().type;)i+=this.tok();return this.renderer.blockquote(i);case"list_start":i="";for(var l=this.token.ordered,o=this.token.start;"list_end"!==this.next().type;)i+=this.tok();return this.renderer.list(i,l,o);case"list_item_start":i="";var a=this.token.loose;for(this.token.task&&(i+=this.renderer.checkbox(this.token.checked));"list_item_end"!==this.next().type;)i+=a||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(i);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var h='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(h);console.log(h)}},t.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t))for(var n=t;this.seen[n]++,t=n+"-"+this.seen[n],this.seen.hasOwnProperty(t););return this.seen[t]=0,t},u.escapeTest=/[&<>"']/,u.escapeReplace=/[&<>"']/g,u.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},u.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,u.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var o={},g=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function f(){}function d(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}function x(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,s=t;0<=--s&&"\\"===n[s];)r=!r;return r?"|":" |"}).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n}function y(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var s=e.charAt(e.length-r-1);if(s!==t||n){if(s===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function m(e,n,r){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof n){r||(r=n,n=null);var s,i,l=(n=d({},m.defaults,n||{})).highlight,t=0;try{s=a.lex(e,n)}catch(e){return r(e)}i=s.length;var o=function(t){if(t)return n.highlight=l,r(t);var e;try{e=p.parse(s,n)}catch(e){t=e}return n.highlight=l,t?r(t):r(null,e)};if(!l||l.length<3)return o();if(delete n.highlight,!i)return o();for(;t<s.length;t++)!function(n){"code"!==n.type?--i||o():l(n.text,n.lang,function(e,t){return e?o(e):null==t||t===n.text?--i||o():(n.text=t,n.escaped=!0,void(--i||o()))})}(s[t])}else try{return n&&(n=d({},m.defaults,n)),p.parse(a.lex(e,n),n)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(n||m.defaults).silent)return"<p>An error occurred:</p><pre>"+u(e.message+"",!0)+"</pre>";throw e}}f.exec=f,m.options=m.setOptions=function(e){return d(m.defaults,e),m},m.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new r,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tables:!0,xhtml:!1}},m.defaults=m.getDefaults(),m.Parser=p,m.parser=p.parse,m.Renderer=r,m.TextRenderer=s,m.Lexer=a,m.lexer=a.lex,m.InlineLexer=h,m.inlineLexer=h.output,m.Slugger=t,m.parse=m,"undefined"!=typeof module&&"object"==typeof exports?module.exports=m:"function"==typeof define&&define.amd?define(function(){return m}):e.marked=m}(this||("undefined"!=typeof window?window:global));
|
|
6
|
+
!function(e){"use strict";var x={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:/^ {0,3}(`{3,}|~{3,})([^`~\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?\\?>\\n*|<![A-Z][\\s\\S]*?>\\n*|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>\\n*|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:g,table:g,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,text:/^[^\n]+/};function a(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||k.defaults,this.rules=x.normal,this.options.pedantic?this.rules=x.pedantic:this.options.gfm&&(this.rules=x.gfm)}x._label=/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,x._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/,x.def=i(x.def).replace("label",x._label).replace("title",x._title).getRegex(),x.bullet=/(?:[*+-]|\d{1,9}\.)/,x.item=/^( *)(bull) ?[^\n]*(?:\n(?!\1bull ?)[^\n]*)*/,x.item=i(x.item,"gm").replace(/bull/g,x.bullet).getRegex(),x.list=i(x.list).replace(/bull/g,x.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+x.def.source+")").getRegex(),x._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",x._comment=/<!--(?!-?>)[\s\S]*?-->/,x.html=i(x.html,"i").replace("comment",x._comment).replace("tag",x._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),x.paragraph=i(x._paragraph).replace("hr",x.hr).replace("heading"," {0,3}#{1,6} +").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}|~{3,})[^`\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",x._tag).getRegex(),x.blockquote=i(x.blockquote).replace("paragraph",x.paragraph).getRegex(),x.normal=f({},x),x.gfm=f({},x.normal,{nptable:/^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/,table:/^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/}),x.pedantic=f({},x.normal,{html:i("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",x._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(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,fences:g,paragraph:i(x.normal._paragraph).replace("hr",x.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",x.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()}),a.rules=x,a.lex=function(e,t){return new a(t).lex(e)},a.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},a.prototype.token=function(e,t){var n,r,s,i,l,o,a,h,p,u,c,g,f,d,m,k;for(e=e.replace(/^ +$/gm,"");e;)if((s=this.rules.newline.exec(e))&&(e=e.substring(s[0].length),1<s[0].length&&this.tokens.push({type:"space"})),s=this.rules.code.exec(e)){var b=this.tokens[this.tokens.length-1];e=e.substring(s[0].length),b&&"paragraph"===b.type?b.text+="\n"+s[0].trimRight():(s=s[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",codeBlockStyle:"indented",text:this.options.pedantic?s:w(s,"\n")}))}else if(s=this.rules.fences.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"code",lang:s[2]?s[2].trim():s[2],text:s[3]||""});else if(s=this.rules.heading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:s[1].length,text:s[2]});else if((s=this.rules.nptable.exec(e))&&(o={type:"table",header:y(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/\n$/,"").split("\n"):[]}).header.length===o.align.length){for(e=e.substring(s[0].length),c=0;c<o.align.length;c++)/^ *-+: *$/.test(o.align[c])?o.align[c]="right":/^ *:-+: *$/.test(o.align[c])?o.align[c]="center":/^ *:-+ *$/.test(o.align[c])?o.align[c]="left":o.align[c]=null;for(c=0;c<o.cells.length;c++)o.cells[c]=y(o.cells[c],o.header.length);this.tokens.push(o)}else if(s=this.rules.hr.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"hr"});else if(s=this.rules.blockquote.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"blockquote_start"}),s=s[0].replace(/^ *> ?/gm,""),this.token(s,t),this.tokens.push({type:"blockquote_end"});else if(s=this.rules.list.exec(e)){for(e=e.substring(s[0].length),a={type:"list_start",ordered:d=1<(i=s[2]).length,start:d?+i:"",loose:!1},this.tokens.push(a),n=!(h=[]),f=(s=s[0].match(this.rules.item)).length,c=0;c<f;c++)u=(o=s[c]).length,~(o=o.replace(/^ *([*+-]|\d+\.) */,"")).indexOf("\n ")&&(u-=o.length,o=this.options.pedantic?o.replace(/^ {1,4}/gm,""):o.replace(new RegExp("^ {1,"+u+"}","gm"),"")),c!==f-1&&(l=x.bullet.exec(s[c+1])[0],(1<i.length?1===l.length:1<l.length||this.options.smartLists&&l!==i)&&(e=s.slice(c+1).join("\n")+e,c=f-1)),r=n||/\n\n(?!\s*$)/.test(o),c!==f-1&&(n="\n"===o.charAt(o.length-1),r||(r=n)),r&&(a.loose=!0),k=void 0,(m=/^\[[ xX]\] /.test(o))&&(k=" "!==o[1],o=o.replace(/^\[[ xX]\] +/,"")),p={type:"list_item_start",task:m,checked:k,loose:r},h.push(p),this.tokens.push(p),this.token(o,!1),this.tokens.push({type:"list_item_end"});if(a.loose)for(f=h.length,c=0;c<f;c++)h[c].loose=!0;this.tokens.push({type:"list_end"})}else if(s=this.rules.html.exec(e))e=e.substring(s[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===s[1]||"script"===s[1]||"style"===s[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(s[0]):_(s[0]):s[0]});else if(t&&(s=this.rules.def.exec(e)))e=e.substring(s[0].length),s[3]&&(s[3]=s[3].substring(1,s[3].length-1)),g=s[1].toLowerCase().replace(/\s+/g," "),this.tokens.links[g]||(this.tokens.links[g]={href:s[2],title:s[3]});else if((s=this.rules.table.exec(e))&&(o={type:"table",header:y(s[1].replace(/^ *| *\| *$/g,"")),align:s[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:s[3]?s[3].replace(/\n$/,"").split("\n"):[]}).header.length===o.align.length){for(e=e.substring(s[0].length),c=0;c<o.align.length;c++)/^ *-+: *$/.test(o.align[c])?o.align[c]="right":/^ *:-+: *$/.test(o.align[c])?o.align[c]="center":/^ *:-+ *$/.test(o.align[c])?o.align[c]="left":o.align[c]=null;for(c=0;c<o.cells.length;c++)o.cells[c]=y(o.cells[c].replace(/^ *\| *| *\| *$/g,""),o.header.length);this.tokens.push(o)}else if(s=this.rules.lheading.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"heading",depth:"="===s[2].charAt(0)?1:2,text:s[1]});else if(t&&(s=this.rules.paragraph.exec(e)))e=e.substring(s[0].length),this.tokens.push({type:"paragraph",text:"\n"===s[1].charAt(s[1].length-1)?s[1].slice(0,-1):s[1]});else if(s=this.rules.text.exec(e))e=e.substring(s[0].length),this.tokens.push({type:"text",text:s[0]});else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0));return this.tokens};var n={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:g,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,strong:/^__([^\s_])__(?!_)|^\*\*([^\s*])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/,em:/^_([^\s_])_(?!_)|^\*([^\s*<\[])\*(?!\*)|^_([^\s<][\s\S]*?[^\s_])_(?!_|[^\spunctuation])|^_([^\s_<][\s\S]*?[^\s])_(?!_|[^\spunctuation])|^\*([^\s<"][\s\S]*?[^\s\*])\*(?!\*|[^\spunctuation])|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:g,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*]|\b_|$)|[^ ](?= {2,}\n))|(?= {2,}\n))/};function p(e,t){if(this.options=t||k.defaults,this.links=e,this.rules=n.normal,this.renderer=this.options.renderer||new r,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.pedantic?this.rules=n.pedantic:this.options.gfm&&(this.options.breaks?this.rules=n.breaks:this.rules=n.gfm)}function r(e){this.options=e||k.defaults}function s(){}function h(e){this.tokens=[],this.token=null,this.options=e||k.defaults,this.options.renderer=this.options.renderer||new r,this.renderer=this.options.renderer,this.renderer.options=this.options,this.slugger=new t}function t(){this.seen={}}function _(e,t){if(t){if(_.escapeTest.test(e))return e.replace(_.escapeReplace,function(e){return _.replacements[e]})}else if(_.escapeTestNoEncode.test(e))return e.replace(_.escapeReplaceNoEncode,function(e){return _.replacements[e]});return e}function c(e){return e.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function i(n,e){return n=n.source||n,e=e||"",{replace:function(e,t){return t=(t=t.source||t).replace(/(^|[^\[])\^/g,"$1"),n=n.replace(e,t),this},getRegex:function(){return new RegExp(n,e)}}}function l(e,t,n){if(e){try{var r=decodeURIComponent(c(n)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return null}if(0===r.indexOf("javascript:")||0===r.indexOf("vbscript:")||0===r.indexOf("data:"))return null}t&&!u.test(n)&&(n=function(e,t){o[" "+e]||(/^[^:]+:\/*[^/]*$/.test(e)?o[" "+e]=e+"/":o[" "+e]=w(e,"/",!0));return e=o[" "+e],"//"===t.slice(0,2)?e.replace(/:[\s\S]*/,":")+t:"/"===t.charAt(0)?e.replace(/(:\/*[^/]*)[\s\S]*/,"$1")+t:e+t}(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}n._punctuation="!\"#$%&'()*+,\\-./:;<=>?@\\[^_{|}~",n.em=i(n.em).replace(/punctuation/g,n._punctuation).getRegex(),n._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,n._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,n._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])?)+(?![-_])/,n.autolink=i(n.autolink).replace("scheme",n._scheme).replace("email",n._email).getRegex(),n._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,n.tag=i(n.tag).replace("comment",x._comment).replace("attribute",n._attribute).getRegex(),n._label=/(?:\[[^\[\]]*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,n._href=/<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/,n._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,n.link=i(n.link).replace("label",n._label).replace("href",n._href).replace("title",n._title).getRegex(),n.reflink=i(n.reflink).replace("label",n._label).getRegex(),n.normal=f({},n),n.pedantic=f({},n.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/,link:i(/^!?\[(label)\]\((.*?)\)/).replace("label",n._label).getRegex(),reflink:i(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",n._label).getRegex()}),n.gfm=f({},n.normal,{escape:i(n.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^~+(?=\S)([\s\S]*?\S)~+/,text:/^(`+|[^`])(?:[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?= {2,}\n|[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),n.gfm.url=i(n.gfm.url,"i").replace("email",n.gfm._extended_email).getRegex(),n.breaks=f({},n.gfm,{br:i(n.br).replace("{2,}","*").getRegex(),text:i(n.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()}),p.rules=n,p.output=function(e,t,n){return new p(t,n).output(e)},p.prototype.output=function(e){for(var t,n,r,s,i,l,o="";e;)if(i=this.rules.escape.exec(e))e=e.substring(i[0].length),o+=_(i[1]);else if(i=this.rules.tag.exec(e))!this.inLink&&/^<a /i.test(i[0])?this.inLink=!0:this.inLink&&/^<\/a>/i.test(i[0])&&(this.inLink=!1),!this.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(i[0])?this.inRawBlock=!0:this.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(i[0])&&(this.inRawBlock=!1),e=e.substring(i[0].length),o+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):_(i[0]):i[0];else if(i=this.rules.link.exec(e)){var a=d(i[2],"()");if(-1<a){var h=4+i[1].length+a;i[2]=i[2].substring(0,a),i[0]=i[0].substring(0,h).trim(),i[3]=""}e=e.substring(i[0].length),this.inLink=!0,r=i[2],s=this.options.pedantic?(t=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r))?(r=t[1],t[3]):"":i[3]?i[3].slice(1,-1):"",r=r.trim().replace(/^<([\s\S]*)>$/,"$1"),o+=this.outputLink(i,{href:p.escapes(r),title:p.escapes(s)}),this.inLink=!1}else if((i=this.rules.reflink.exec(e))||(i=this.rules.nolink.exec(e))){if(e=e.substring(i[0].length),t=(i[2]||i[1]).replace(/\s+/g," "),!(t=this.links[t.toLowerCase()])||!t.href){o+=i[0].charAt(0),e=i[0].substring(1)+e;continue}this.inLink=!0,o+=this.outputLink(i,t),this.inLink=!1}else if(i=this.rules.strong.exec(e))e=e.substring(i[0].length),o+=this.renderer.strong(this.output(i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.em.exec(e))e=e.substring(i[0].length),o+=this.renderer.em(this.output(i[6]||i[5]||i[4]||i[3]||i[2]||i[1]));else if(i=this.rules.code.exec(e))e=e.substring(i[0].length),o+=this.renderer.codespan(_(i[2].trim(),!0));else if(i=this.rules.br.exec(e))e=e.substring(i[0].length),o+=this.renderer.br();else if(i=this.rules.del.exec(e))e=e.substring(i[0].length),o+=this.renderer.del(this.output(i[1]));else if(i=this.rules.autolink.exec(e))e=e.substring(i[0].length),r="@"===i[2]?"mailto:"+(n=_(this.mangle(i[1]))):n=_(i[1]),o+=this.renderer.link(r,null,n);else if(this.inLink||!(i=this.rules.url.exec(e))){if(i=this.rules.text.exec(e))e=e.substring(i[0].length),this.inRawBlock?o+=this.renderer.text(this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):_(i[0]):i[0]):o+=this.renderer.text(_(this.smartypants(i[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else{if("@"===i[2])r="mailto:"+(n=_(i[0]));else{for(;l=i[0],i[0]=this.rules._backpedal.exec(i[0])[0],l!==i[0];);n=_(i[0]),r="www."===i[1]?"http://"+n:n}e=e.substring(i[0].length),o+=this.renderer.link(r,null,n)}return o},p.escapes=function(e){return e?e.replace(p.rules._escapes,"$1"):e},p.prototype.outputLink=function(e,t){var n=t.href,r=t.title?_(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,r,this.output(e[1])):this.renderer.image(n,r,_(e[1]))},p.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},p.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",r=e.length,s=0;s<r;s++)t=e.charCodeAt(s),.5<Math.random()&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},r.prototype.code=function(e,t,n){var r=(t||"").match(/\S*/)[0];if(this.options.highlight){var s=this.options.highlight(e,r);null!=s&&s!==e&&(n=!0,e=s)}return r?'<pre><code class="'+this.options.langPrefix+_(r,!0)+'">'+(n?e:_(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:_(e,!0))+"</code></pre>"},r.prototype.blockquote=function(e){return"<blockquote>\n"+e+"</blockquote>\n"},r.prototype.html=function(e){return e},r.prototype.heading=function(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"},r.prototype.hr=function(){return this.options.xhtml?"<hr/>\n":"<hr>\n"},r.prototype.list=function(e,t,n){var r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"},r.prototype.listitem=function(e){return"<li>"+e+"</li>\n"},r.prototype.checkbox=function(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "},r.prototype.paragraph=function(e){return"<p>"+e+"</p>\n"},r.prototype.table=function(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"},r.prototype.tablerow=function(e){return"<tr>\n"+e+"</tr>\n"},r.prototype.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"},r.prototype.strong=function(e){return"<strong>"+e+"</strong>"},r.prototype.em=function(e){return"<em>"+e+"</em>"},r.prototype.codespan=function(e){return"<code>"+e+"</code>"},r.prototype.br=function(){return this.options.xhtml?"<br/>":"<br>"},r.prototype.del=function(e){return"<del>"+e+"</del>"},r.prototype.link=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<a href="'+_(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>"},r.prototype.image=function(e,t,n){if(null===(e=l(this.options.sanitize,this.options.baseUrl,e)))return n;var r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">"},r.prototype.text=function(e){return e},s.prototype.strong=s.prototype.em=s.prototype.codespan=s.prototype.del=s.prototype.text=function(e){return e},s.prototype.link=s.prototype.image=function(e,t,n){return""+n},s.prototype.br=function(){return""},h.parse=function(e,t){return new h(t).parse(e)},h.prototype.parse=function(e){this.inline=new p(e.links,this.options),this.inlineText=new p(e.links,f({},this.options,{renderer:new s})),this.tokens=e.reverse();for(var t="";this.next();)t+=this.tok();return t},h.prototype.next=function(){return this.token=this.tokens.pop(),this.token},h.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},h.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},h.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,c(this.inlineText.output(this.token.text)),this.slugger);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,r,s="",i="";for(n="",e=0;e<this.token.header.length;e++)n+=this.renderer.tablecell(this.inline.output(this.token.header[e]),{header:!0,align:this.token.align[e]});for(s+=this.renderer.tablerow(n),e=0;e<this.token.cells.length;e++){for(t=this.token.cells[e],n="",r=0;r<t.length;r++)n+=this.renderer.tablecell(this.inline.output(t[r]),{header:!1,align:this.token.align[r]});i+=this.renderer.tablerow(n)}return this.renderer.table(s,i);case"blockquote_start":for(i="";"blockquote_end"!==this.next().type;)i+=this.tok();return this.renderer.blockquote(i);case"list_start":i="";for(var l=this.token.ordered,o=this.token.start;"list_end"!==this.next().type;)i+=this.tok();return this.renderer.list(i,l,o);case"list_item_start":i="";var a=this.token.loose,h=this.token.checked,p=this.token.task;for(this.token.task&&(i+=this.renderer.checkbox(h));"list_item_end"!==this.next().type;)i+=a||"text"!==this.token.type?this.tok():this.parseText();return this.renderer.listitem(i,p,h);case"html":return this.renderer.html(this.token.text);case"paragraph":return this.renderer.paragraph(this.inline.output(this.token.text));case"text":return this.renderer.paragraph(this.parseText());default:var u='Token with "'+this.token.type+'" type was not found.';if(!this.options.silent)throw new Error(u);console.log(u)}},t.prototype.slug=function(e){var t=e.toLowerCase().trim().replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-");if(this.seen.hasOwnProperty(t))for(var n=t;this.seen[n]++,t=n+"-"+this.seen[n],this.seen.hasOwnProperty(t););return this.seen[t]=0,t},_.escapeTest=/[&<>"']/,_.escapeReplace=/[&<>"']/g,_.replacements={"&":"&","<":"<",">":">",'"':""","'":"'"},_.escapeTestNoEncode=/[<>"']|&(?!#?\w+;)/,_.escapeReplaceNoEncode=/[<>"']|&(?!#?\w+;)/g;var o={},u=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function g(){}function f(e){for(var t,n,r=1;r<arguments.length;r++)for(n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}function y(e,t){var n=e.replace(/\|/g,function(e,t,n){for(var r=!1,s=t;0<=--s&&"\\"===n[s];)r=!r;return r?"|":" |"}).split(/ \|/),r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n}function w(e,t,n){if(0===e.length)return"";for(var r=0;r<e.length;){var s=e.charAt(e.length-r-1);if(s!==t||n){if(s===t||!n)break;r++}else r++}return e.substr(0,e.length-r)}function d(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=0,r=0;r<e.length;r++)if("\\"===e[r])r++;else if(e[r]===t[0])n++;else if(e[r]===t[1]&&--n<0)return r;return-1}function m(e){e&&e.sanitize&&!e.silent&&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")}function k(e,n,r){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if(r||"function"==typeof n){r||(r=n,n=null),m(n=f({},k.defaults,n||{}));var s,i,l=n.highlight,t=0;try{s=a.lex(e,n)}catch(e){return r(e)}i=s.length;var o=function(t){if(t)return n.highlight=l,r(t);var e;try{e=h.parse(s,n)}catch(e){t=e}return n.highlight=l,t?r(t):r(null,e)};if(!l||l.length<3)return o();if(delete n.highlight,!i)return o();for(;t<s.length;t++)!function(n){"code"!==n.type?--i||o():l(n.text,n.lang,function(e,t){return e?o(e):null==t||t===n.text?--i||o():(n.text=t,n.escaped=!0,void(--i||o()))})}(s[t])}else try{return n&&(n=f({},k.defaults,n)),m(n),h.parse(a.lex(e,n),n)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",(n||k.defaults).silent)return"<p>An error occurred:</p><pre>"+_(e.message+"",!0)+"</pre>";throw e}}g.exec=g,k.options=k.setOptions=function(e){return f(k.defaults,e),k},k.getDefaults=function(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:new r,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,xhtml:!1}},k.defaults=k.getDefaults(),k.Parser=h,k.parser=h.parse,k.Renderer=r,k.TextRenderer=s,k.Lexer=a,k.lexer=a.lex,k.InlineLexer=p,k.inlineLexer=p.output,k.Slugger=t,k.parse=k,"undefined"!=typeof module&&"object"==typeof exports?module.exports=k:"function"==typeof define&&define.amd?define(function(){return k}):e.marked=k}(this||("undefined"!=typeof window?window:global));
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "marked",
|
|
3
3
|
"description": "A markdown parser built for speed",
|
|
4
4
|
"author": "Christopher Jeffrey",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.7.0",
|
|
6
6
|
"main": "./lib/marked.js",
|
|
7
7
|
"bin": "./bin/marked",
|
|
8
8
|
"man": "./man/marked.1",
|
|
@@ -29,34 +29,32 @@
|
|
|
29
29
|
"html"
|
|
30
30
|
],
|
|
31
31
|
"devDependencies": {
|
|
32
|
+
"@markedjs/html-differ": "^2.0.1",
|
|
33
|
+
"cheerio": "^1.0.0-rc.3",
|
|
32
34
|
"commonmark": "0.x",
|
|
33
|
-
"eslint": "^
|
|
34
|
-
"eslint-config-standard": "^
|
|
35
|
-
"eslint-plugin-import": "^2.
|
|
36
|
-
"eslint-plugin-node": "^
|
|
37
|
-
"eslint-plugin-promise": "^
|
|
38
|
-
"eslint-plugin-standard": "^
|
|
35
|
+
"eslint": "^5.16.0",
|
|
36
|
+
"eslint-config-standard": "^12.0.0",
|
|
37
|
+
"eslint-plugin-import": "^2.17.2",
|
|
38
|
+
"eslint-plugin-node": "^8.0.1",
|
|
39
|
+
"eslint-plugin-promise": "^4.1.1",
|
|
40
|
+
"eslint-plugin-standard": "^4.0.0",
|
|
39
41
|
"eslint-plugin-vuln-regex-detector": "^1.0.4",
|
|
40
|
-
"front-matter": "^
|
|
41
|
-
"
|
|
42
|
-
"@markedjs/html-differ": "^2.0.0",
|
|
43
|
-
"jasmine": "^3.2.0",
|
|
44
|
-
"jasmine2-custom-message": "^0.9.3",
|
|
42
|
+
"front-matter": "^3.0.2",
|
|
43
|
+
"jasmine": "^3.4.0",
|
|
45
44
|
"markdown": "0.x",
|
|
46
45
|
"markdown-it": "8.x",
|
|
47
|
-
"
|
|
46
|
+
"node-fetch": "^2.3.0",
|
|
47
|
+
"uglify-js": "^3.5.8"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"test": "jasmine --config=jasmine.json",
|
|
51
51
|
"test:unit": "npm test -- test/unit/**/*-spec.js",
|
|
52
52
|
"test:specs": "npm test -- test/specs/**/*-spec.js",
|
|
53
|
-
"test:cm": "npm test -- test/specs/commonmark/**/*-spec.js",
|
|
54
|
-
"test:gfm": "npm test -- test/specs/gfm/**/*-spec.js",
|
|
55
|
-
"test:marked": "npm test -- test/specs/marked/**/*-spec.js",
|
|
56
|
-
"test:old": "node test",
|
|
57
53
|
"test:lint": "eslint bin/marked .",
|
|
58
54
|
"test:redos": "eslint --plugin vuln-regex-detector --rule '\"vuln-regex-detector/no-vuln-regex\": 2' lib/marked.js",
|
|
59
|
-
"
|
|
55
|
+
"test:node4": "npx node@4 ./node_modules/jasmine/bin/jasmine.js --config=jasmine.json",
|
|
56
|
+
"test:update": "node test/update-specs.js",
|
|
57
|
+
"bench": "node test/bench.js",
|
|
60
58
|
"lint": "eslint --fix bin/marked .",
|
|
61
59
|
"build": "uglifyjs lib/marked.js -cm --comments /Copyright/ -o marked.min.js",
|
|
62
60
|
"preversion": "npm run build && (git diff --quiet || git commit -am 'minify')"
|