@codingame/monaco-vscode-chat-service-override 4.0.0 → 4.1.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.
Files changed (29) hide show
  1. package/chat.js +9 -9
  2. package/package.json +2 -2
  3. package/external/tslib/tslib.es6.js +0 -11
  4. package/external/vscode-marked/lib/marked.esm.js +0 -2200
  5. package/override/vs/platform/dialogs/common/dialogs.js +0 -10
  6. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClear.js +0 -17
  7. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatClearActions.js +0 -115
  8. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCodeblockActions.js +0 -503
  9. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatCopyActions.js +0 -82
  10. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatFileTreeActions.js +0 -77
  11. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatImportExport.js +0 -110
  12. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatMoveActions.js +0 -171
  13. package/vscode/src/vs/workbench/contrib/chat/browser/actions/chatTitleActions.js +0 -271
  14. package/vscode/src/vs/workbench/contrib/chat/browser/chat.contribution.js +0 -317
  15. package/vscode/src/vs/workbench/contrib/chat/browser/chatAccessibilityService.js +0 -60
  16. package/vscode/src/vs/workbench/contrib/chat/browser/chatContributionServiceImpl.js +0 -423
  17. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditor.js +0 -98
  18. package/vscode/src/vs/workbench/contrib/chat/browser/chatQuick.js +0 -285
  19. package/vscode/src/vs/workbench/contrib/chat/browser/chatVariables.js +0 -90
  20. package/vscode/src/vs/workbench/contrib/chat/browser/chatViewPane.js +0 -185
  21. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatHistoryVariables.js +0 -26
  22. package/vscode/src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.js +0 -618
  23. package/vscode/src/vs/workbench/contrib/chat/common/chatServiceImpl.js +0 -600
  24. package/vscode/src/vs/workbench/contrib/chat/common/voiceChat.js +0 -141
  25. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.js +0 -40
  26. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatAccessibleView.js +0 -41
  27. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatNotebook.js +0 -72
  28. package/vscode/src/vs/workbench/contrib/inlineChat/browser/inlineChatSavingServiceImpl.js +0 -236
  29. package/vscode/src/vs/workbench/contrib/inlineChat/common/inlineChatServiceImpl.js +0 -33
@@ -1,2200 +0,0 @@
1
- var defaults$5 = {exports: {}};
2
- function getDefaults$1() {
3
- return {
4
- baseUrl: null,
5
- breaks: false,
6
- extensions: null,
7
- gfm: true,
8
- headerIds: true,
9
- headerPrefix: '',
10
- highlight: null,
11
- langPrefix: 'language-',
12
- mangle: true,
13
- pedantic: false,
14
- renderer: null,
15
- sanitize: false,
16
- sanitizer: null,
17
- silent: false,
18
- smartLists: false,
19
- smartypants: false,
20
- tokenizer: null,
21
- walkTokens: null,
22
- xhtml: false
23
- };
24
- }
25
- function changeDefaults$1(newDefaults) {
26
- defaults$5.exports.defaults = newDefaults;
27
- }
28
- defaults$5.exports = {
29
- defaults: getDefaults$1(),
30
- getDefaults: getDefaults$1,
31
- changeDefaults: changeDefaults$1
32
- };
33
- const escapeTest = /[&<>"']/;
34
- const escapeReplace = /[&<>"']/g;
35
- const escapeTestNoEncode = /[<>"']|&(?!#?\w+;)/;
36
- const escapeReplaceNoEncode = /[<>"']|&(?!#?\w+;)/g;
37
- const escapeReplacements = {
38
- '&': '&amp;',
39
- '<': '&lt;',
40
- '>': '&gt;',
41
- '"': '&quot;',
42
- "'": '&#39;'
43
- };
44
- const getEscapeReplacement = (ch) => escapeReplacements[ch];
45
- function escape$3(html, encode) {
46
- if (encode) {
47
- if (escapeTest.test(html)) {
48
- return html.replace(escapeReplace, getEscapeReplacement);
49
- }
50
- } else {
51
- if (escapeTestNoEncode.test(html)) {
52
- return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
53
- }
54
- }
55
- return html;
56
- }
57
- const unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
58
- function unescape$1(html) {
59
- return html.replace(unescapeTest, (_, n) => {
60
- n = n.toLowerCase();
61
- if (n === 'colon') return ':';
62
- if (n.charAt(0) === '#') {
63
- return n.charAt(1) === 'x'
64
- ? String.fromCharCode(parseInt(n.substring(2), 16))
65
- : String.fromCharCode(+n.substring(1));
66
- }
67
- return '';
68
- });
69
- }
70
- const caret = /(^|[^\[])\^/g;
71
- function edit$1(regex, opt) {
72
- regex = regex.source || regex;
73
- opt = opt || '';
74
- const obj = {
75
- replace: (name, val) => {
76
- val = val.source || val;
77
- val = val.replace(caret, '$1');
78
- regex = regex.replace(name, val);
79
- return obj;
80
- },
81
- getRegex: () => {
82
- return new RegExp(regex, opt);
83
- }
84
- };
85
- return obj;
86
- }
87
- const nonWordAndColonTest = /[^\w:]/g;
88
- const originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
89
- function cleanUrl$1(sanitize, base, href) {
90
- if (sanitize) {
91
- let prot;
92
- try {
93
- prot = decodeURIComponent(unescape$1(href))
94
- .replace(nonWordAndColonTest, '')
95
- .toLowerCase();
96
- } catch (e) {
97
- return null;
98
- }
99
- if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
100
- return null;
101
- }
102
- }
103
- if (base && !originIndependentUrl.test(href)) {
104
- href = resolveUrl(base, href);
105
- }
106
- try {
107
- href = encodeURI(href).replace(/%25/g, '%');
108
- } catch (e) {
109
- return null;
110
- }
111
- return href;
112
- }
113
- const baseUrls = {};
114
- const justDomain = /^[^:]+:\/*[^/]*$/;
115
- const protocol = /^([^:]+:)[\s\S]*$/;
116
- const domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
117
- function resolveUrl(base, href) {
118
- if (!baseUrls[' ' + base]) {
119
- if (justDomain.test(base)) {
120
- baseUrls[' ' + base] = base + '/';
121
- } else {
122
- baseUrls[' ' + base] = rtrim$1(base, '/', true);
123
- }
124
- }
125
- base = baseUrls[' ' + base];
126
- const relativeBase = base.indexOf(':') === -1;
127
- if (href.substring(0, 2) === '//') {
128
- if (relativeBase) {
129
- return href;
130
- }
131
- return base.replace(protocol, '$1') + href;
132
- } else if (href.charAt(0) === '/') {
133
- if (relativeBase) {
134
- return href;
135
- }
136
- return base.replace(domain, '$1') + href;
137
- } else {
138
- return base + href;
139
- }
140
- }
141
- const noopTest$1 = { exec: function noopTest() {} };
142
- function merge$2(obj) {
143
- let i = 1,
144
- target,
145
- key;
146
- for (; i < arguments.length; i++) {
147
- target = arguments[i];
148
- for (key in target) {
149
- if (Object.prototype.hasOwnProperty.call(target, key)) {
150
- obj[key] = target[key];
151
- }
152
- }
153
- }
154
- return obj;
155
- }
156
- function splitCells$1(tableRow, count) {
157
- const row = tableRow.replace(/\|/g, (match, offset, str) => {
158
- let escaped = false,
159
- curr = offset;
160
- while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
161
- if (escaped) {
162
- return '|';
163
- } else {
164
- return ' |';
165
- }
166
- }),
167
- cells = row.split(/ \|/);
168
- let i = 0;
169
- if (!cells[0].trim()) { cells.shift(); }
170
- if (!cells[cells.length - 1].trim()) { cells.pop(); }
171
- if (cells.length > count) {
172
- cells.splice(count);
173
- } else {
174
- while (cells.length < count) cells.push('');
175
- }
176
- for (; i < cells.length; i++) {
177
- cells[i] = cells[i].trim().replace(/\\\|/g, '|');
178
- }
179
- return cells;
180
- }
181
- function rtrim$1(str, c, invert) {
182
- const l = str.length;
183
- if (l === 0) {
184
- return '';
185
- }
186
- let suffLen = 0;
187
- while (suffLen < l) {
188
- const currChar = str.charAt(l - suffLen - 1);
189
- if (currChar === c && !invert) {
190
- suffLen++;
191
- } else if (currChar !== c && invert) {
192
- suffLen++;
193
- } else {
194
- break;
195
- }
196
- }
197
- return str.substr(0, l - suffLen);
198
- }
199
- function findClosingBracket$1(str, b) {
200
- if (str.indexOf(b[1]) === -1) {
201
- return -1;
202
- }
203
- const l = str.length;
204
- let level = 0,
205
- i = 0;
206
- for (; i < l; i++) {
207
- if (str[i] === '\\') {
208
- i++;
209
- } else if (str[i] === b[0]) {
210
- level++;
211
- } else if (str[i] === b[1]) {
212
- level--;
213
- if (level < 0) {
214
- return i;
215
- }
216
- }
217
- }
218
- return -1;
219
- }
220
- function checkSanitizeDeprecation$1(opt) {
221
- if (opt && opt.sanitize && !opt.silent) {
222
- 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');
223
- }
224
- }
225
- function repeatString$1(pattern, count) {
226
- if (count < 1) {
227
- return '';
228
- }
229
- let result = '';
230
- while (count > 1) {
231
- if (count & 1) {
232
- result += pattern;
233
- }
234
- count >>= 1;
235
- pattern += pattern;
236
- }
237
- return result + pattern;
238
- }
239
- var helpers = {
240
- escape: escape$3,
241
- unescape: unescape$1,
242
- edit: edit$1,
243
- cleanUrl: cleanUrl$1,
244
- resolveUrl,
245
- noopTest: noopTest$1,
246
- merge: merge$2,
247
- splitCells: splitCells$1,
248
- rtrim: rtrim$1,
249
- findClosingBracket: findClosingBracket$1,
250
- checkSanitizeDeprecation: checkSanitizeDeprecation$1,
251
- repeatString: repeatString$1
252
- };
253
- const { defaults: defaults$4 } = defaults$5.exports;
254
- const {
255
- rtrim,
256
- splitCells,
257
- escape: escape$2,
258
- findClosingBracket
259
- } = helpers;
260
- function outputLink(cap, link, raw, lexer) {
261
- const href = link.href;
262
- const title = link.title ? escape$2(link.title) : null;
263
- const text = cap[1].replace(/\\([\[\]])/g, '$1');
264
- if (cap[0].charAt(0) !== '!') {
265
- lexer.state.inLink = true;
266
- const token = {
267
- type: 'link',
268
- raw,
269
- href,
270
- title,
271
- text,
272
- tokens: lexer.inlineTokens(text, [])
273
- };
274
- lexer.state.inLink = false;
275
- return token;
276
- } else {
277
- return {
278
- type: 'image',
279
- raw,
280
- href,
281
- title,
282
- text: escape$2(text)
283
- };
284
- }
285
- }
286
- function indentCodeCompensation(raw, text) {
287
- const matchIndentToCode = raw.match(/^(\s+)(?:```)/);
288
- if (matchIndentToCode === null) {
289
- return text;
290
- }
291
- const indentToCode = matchIndentToCode[1];
292
- return ( text
293
- .split('\n')
294
- .map(node => {
295
- const matchIndentInNode = node.match(/^\s+/);
296
- if (matchIndentInNode === null) {
297
- return node;
298
- }
299
- const [indentInNode] = matchIndentInNode;
300
- if (indentInNode.length >= indentToCode.length) {
301
- return node.slice(indentToCode.length);
302
- }
303
- return node;
304
- }))
305
- .join('\n');
306
- }
307
- var Tokenizer_1 = class Tokenizer {
308
- constructor(options) {
309
- this.options = options || defaults$4;
310
- }
311
- space(src) {
312
- const cap = this.rules.block.newline.exec(src);
313
- if (cap) {
314
- if (cap[0].length > 1) {
315
- return {
316
- type: 'space',
317
- raw: cap[0]
318
- };
319
- }
320
- return { raw: '\n' };
321
- }
322
- }
323
- code(src) {
324
- const cap = this.rules.block.code.exec(src);
325
- if (cap) {
326
- const text = cap[0].replace(/^ {1,4}/gm, '');
327
- return {
328
- type: 'code',
329
- raw: cap[0],
330
- codeBlockStyle: 'indented',
331
- text: !this.options.pedantic
332
- ? rtrim(text, '\n')
333
- : text
334
- };
335
- }
336
- }
337
- fences(src) {
338
- const cap = this.rules.block.fences.exec(src);
339
- if (cap) {
340
- const raw = cap[0];
341
- const text = indentCodeCompensation(raw, cap[3] || '');
342
- return {
343
- type: 'code',
344
- raw,
345
- lang: cap[2] ? cap[2].trim() : cap[2],
346
- text
347
- };
348
- }
349
- }
350
- heading(src) {
351
- const cap = this.rules.block.heading.exec(src);
352
- if (cap) {
353
- let text = cap[2].trim();
354
- if (/#$/.test(text)) {
355
- const trimmed = rtrim(text, '#');
356
- if (this.options.pedantic) {
357
- text = trimmed.trim();
358
- } else if (!trimmed || / $/.test(trimmed)) {
359
- text = trimmed.trim();
360
- }
361
- }
362
- const token = {
363
- type: 'heading',
364
- raw: cap[0],
365
- depth: cap[1].length,
366
- text: text,
367
- tokens: []
368
- };
369
- this.lexer.inline(token.text, token.tokens);
370
- return token;
371
- }
372
- }
373
- hr(src) {
374
- const cap = this.rules.block.hr.exec(src);
375
- if (cap) {
376
- return {
377
- type: 'hr',
378
- raw: cap[0]
379
- };
380
- }
381
- }
382
- blockquote(src) {
383
- const cap = this.rules.block.blockquote.exec(src);
384
- if (cap) {
385
- const text = cap[0].replace(/^ *> ?/gm, '');
386
- return {
387
- type: 'blockquote',
388
- raw: cap[0],
389
- tokens: this.lexer.blockTokens(text, []),
390
- text
391
- };
392
- }
393
- }
394
- list(src) {
395
- let cap = this.rules.block.list.exec(src);
396
- if (cap) {
397
- let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,
398
- line, lines, itemContents;
399
- let bull = cap[1].trim();
400
- const isordered = bull.length > 1;
401
- const list = {
402
- type: 'list',
403
- raw: '',
404
- ordered: isordered,
405
- start: isordered ? +bull.slice(0, -1) : '',
406
- loose: false,
407
- items: []
408
- };
409
- bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`;
410
- if (this.options.pedantic) {
411
- bull = isordered ? bull : '[*+-]';
412
- }
413
- const itemRegex = new RegExp(`^( {0,3}${bull})((?: [^\\n]*| *)(?:\\n[^\\n]*)*(?:\\n|$))`);
414
- while (src) {
415
- if (this.rules.block.hr.test(src)) {
416
- break;
417
- }
418
- if (!(cap = itemRegex.exec(src))) {
419
- break;
420
- }
421
- lines = cap[2].split('\n');
422
- if (this.options.pedantic) {
423
- indent = 2;
424
- itemContents = lines[0].trimLeft();
425
- } else {
426
- indent = cap[2].search(/[^ ]/);
427
- indent = cap[1].length + (indent > 4 ? 1 : indent);
428
- itemContents = lines[0].slice(indent - cap[1].length);
429
- }
430
- blankLine = false;
431
- raw = cap[0];
432
- if (!lines[0] && /^ *$/.test(lines[1])) {
433
- raw = cap[1] + lines.slice(0, 2).join('\n') + '\n';
434
- list.loose = true;
435
- lines = [];
436
- }
437
- const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])`);
438
- for (i = 1; i < lines.length; i++) {
439
- line = lines[i];
440
- if (this.options.pedantic) {
441
- line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');
442
- }
443
- if (nextBulletRegex.test(line)) {
444
- raw = cap[1] + lines.slice(0, i).join('\n') + '\n';
445
- break;
446
- }
447
- if (!blankLine) {
448
- if (!line.trim()) {
449
- blankLine = true;
450
- }
451
- if (line.search(/[^ ]/) >= indent) {
452
- itemContents += '\n' + line.slice(indent);
453
- } else {
454
- itemContents += '\n' + line;
455
- }
456
- continue;
457
- }
458
- if (line.search(/[^ ]/) >= indent || !line.trim()) {
459
- itemContents += '\n' + line.slice(indent);
460
- continue;
461
- } else {
462
- raw = cap[1] + lines.slice(0, i).join('\n') + '\n';
463
- break;
464
- }
465
- }
466
- if (!list.loose) {
467
- if (endsWithBlankLine) {
468
- list.loose = true;
469
- } else if (/\n *\n *$/.test(raw)) {
470
- endsWithBlankLine = true;
471
- }
472
- }
473
- if (this.options.gfm) {
474
- istask = /^\[[ xX]\] /.exec(itemContents);
475
- if (istask) {
476
- ischecked = istask[0] !== '[ ] ';
477
- itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
478
- }
479
- }
480
- list.items.push({
481
- type: 'list_item',
482
- raw: raw,
483
- task: !!istask,
484
- checked: ischecked,
485
- loose: false,
486
- text: itemContents
487
- });
488
- list.raw += raw;
489
- src = src.slice(raw.length);
490
- }
491
- list.items[list.items.length - 1].raw = raw.trimRight();
492
- list.items[list.items.length - 1].text = itemContents.trimRight();
493
- list.raw = list.raw.trimRight();
494
- const l = list.items.length;
495
- for (i = 0; i < l; i++) {
496
- this.lexer.state.top = false;
497
- list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
498
- if (( list.items[i].tokens.some(t => t.type === 'space'))) {
499
- list.loose = true;
500
- list.items[i].loose = true;
501
- }
502
- }
503
- return list;
504
- }
505
- }
506
- html(src) {
507
- const cap = this.rules.block.html.exec(src);
508
- if (cap) {
509
- const token = {
510
- type: 'html',
511
- raw: cap[0],
512
- pre: !this.options.sanitizer
513
- && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
514
- text: cap[0]
515
- };
516
- if (this.options.sanitize) {
517
- token.type = 'paragraph';
518
- token.text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$2(cap[0]);
519
- token.tokens = [];
520
- this.lexer.inline(token.text, token.tokens);
521
- }
522
- return token;
523
- }
524
- }
525
- def(src) {
526
- const cap = this.rules.block.def.exec(src);
527
- if (cap) {
528
- if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
529
- const tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
530
- return {
531
- type: 'def',
532
- tag,
533
- raw: cap[0],
534
- href: cap[2],
535
- title: cap[3]
536
- };
537
- }
538
- }
539
- table(src) {
540
- const cap = this.rules.block.table.exec(src);
541
- if (cap) {
542
- const item = {
543
- type: 'table',
544
- header: ( splitCells(cap[1]).map(c => { return { text: c }; })),
545
- align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
546
- rows: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : []
547
- };
548
- if (item.header.length === item.align.length) {
549
- item.raw = cap[0];
550
- let l = item.align.length;
551
- let i, j, k, row;
552
- for (i = 0; i < l; i++) {
553
- if (/^ *-+: *$/.test(item.align[i])) {
554
- item.align[i] = 'right';
555
- } else if (/^ *:-+: *$/.test(item.align[i])) {
556
- item.align[i] = 'center';
557
- } else if (/^ *:-+ *$/.test(item.align[i])) {
558
- item.align[i] = 'left';
559
- } else {
560
- item.align[i] = null;
561
- }
562
- }
563
- l = item.rows.length;
564
- for (i = 0; i < l; i++) {
565
- item.rows[i] = ( splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; }));
566
- }
567
- l = item.header.length;
568
- for (j = 0; j < l; j++) {
569
- item.header[j].tokens = [];
570
- this.lexer.inlineTokens(item.header[j].text, item.header[j].tokens);
571
- }
572
- l = item.rows.length;
573
- for (j = 0; j < l; j++) {
574
- row = item.rows[j];
575
- for (k = 0; k < row.length; k++) {
576
- row[k].tokens = [];
577
- this.lexer.inlineTokens(row[k].text, row[k].tokens);
578
- }
579
- }
580
- return item;
581
- }
582
- }
583
- }
584
- lheading(src) {
585
- const cap = this.rules.block.lheading.exec(src);
586
- if (cap) {
587
- const token = {
588
- type: 'heading',
589
- raw: cap[0],
590
- depth: cap[2].charAt(0) === '=' ? 1 : 2,
591
- text: cap[1],
592
- tokens: []
593
- };
594
- this.lexer.inline(token.text, token.tokens);
595
- return token;
596
- }
597
- }
598
- paragraph(src) {
599
- const cap = this.rules.block.paragraph.exec(src);
600
- if (cap) {
601
- const token = {
602
- type: 'paragraph',
603
- raw: cap[0],
604
- text: cap[1].charAt(cap[1].length - 1) === '\n'
605
- ? cap[1].slice(0, -1)
606
- : cap[1],
607
- tokens: []
608
- };
609
- this.lexer.inline(token.text, token.tokens);
610
- return token;
611
- }
612
- }
613
- text(src) {
614
- const cap = this.rules.block.text.exec(src);
615
- if (cap) {
616
- const token = {
617
- type: 'text',
618
- raw: cap[0],
619
- text: cap[0],
620
- tokens: []
621
- };
622
- this.lexer.inline(token.text, token.tokens);
623
- return token;
624
- }
625
- }
626
- escape(src) {
627
- const cap = this.rules.inline.escape.exec(src);
628
- if (cap) {
629
- return {
630
- type: 'escape',
631
- raw: cap[0],
632
- text: escape$2(cap[1])
633
- };
634
- }
635
- }
636
- tag(src) {
637
- const cap = this.rules.inline.tag.exec(src);
638
- if (cap) {
639
- if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
640
- this.lexer.state.inLink = true;
641
- } else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
642
- this.lexer.state.inLink = false;
643
- }
644
- if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
645
- this.lexer.state.inRawBlock = true;
646
- } else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
647
- this.lexer.state.inRawBlock = false;
648
- }
649
- return {
650
- type: this.options.sanitize
651
- ? 'text'
652
- : 'html',
653
- raw: cap[0],
654
- inLink: this.lexer.state.inLink,
655
- inRawBlock: this.lexer.state.inRawBlock,
656
- text: this.options.sanitize
657
- ? (this.options.sanitizer
658
- ? this.options.sanitizer(cap[0])
659
- : escape$2(cap[0]))
660
- : cap[0]
661
- };
662
- }
663
- }
664
- link(src) {
665
- const cap = this.rules.inline.link.exec(src);
666
- if (cap) {
667
- const trimmedUrl = cap[2].trim();
668
- if (!this.options.pedantic && /^</.test(trimmedUrl)) {
669
- if (!(/>$/.test(trimmedUrl))) {
670
- return;
671
- }
672
- const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');
673
- if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
674
- return;
675
- }
676
- } else {
677
- const lastParenIndex = findClosingBracket(cap[2], '()');
678
- if (lastParenIndex > -1) {
679
- const start = cap[0].indexOf('!') === 0 ? 5 : 4;
680
- const linkLen = start + cap[1].length + lastParenIndex;
681
- cap[2] = cap[2].substring(0, lastParenIndex);
682
- cap[0] = cap[0].substring(0, linkLen).trim();
683
- cap[3] = '';
684
- }
685
- }
686
- let href = cap[2];
687
- let title = '';
688
- if (this.options.pedantic) {
689
- const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
690
- if (link) {
691
- href = link[1];
692
- title = link[3];
693
- }
694
- } else {
695
- title = cap[3] ? cap[3].slice(1, -1) : '';
696
- }
697
- href = href.trim();
698
- if (/^</.test(href)) {
699
- if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {
700
- href = href.slice(1);
701
- } else {
702
- href = href.slice(1, -1);
703
- }
704
- }
705
- return outputLink(cap, {
706
- href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
707
- title: title ? title.replace(this.rules.inline._escapes, '$1') : title
708
- }, cap[0], this.lexer);
709
- }
710
- }
711
- reflink(src, links) {
712
- let cap;
713
- if ((cap = this.rules.inline.reflink.exec(src))
714
- || (cap = this.rules.inline.nolink.exec(src))) {
715
- let link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
716
- link = links[link.toLowerCase()];
717
- if (!link || !link.href) {
718
- const text = cap[0].charAt(0);
719
- return {
720
- type: 'text',
721
- raw: text,
722
- text
723
- };
724
- }
725
- return outputLink(cap, link, cap[0], this.lexer);
726
- }
727
- }
728
- emStrong(src, maskedSrc, prevChar = '') {
729
- let match = this.rules.inline.emStrong.lDelim.exec(src);
730
- if (!match) return;
731
- if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) return;
732
- const nextChar = match[1] || match[2] || '';
733
- if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {
734
- const lLength = match[0].length - 1;
735
- let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;
736
- const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
737
- endReg.lastIndex = 0;
738
- maskedSrc = maskedSrc.slice(-1 * src.length + lLength);
739
- while ((match = endReg.exec(maskedSrc)) != null) {
740
- rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
741
- if (!rDelim) continue;
742
- rLength = rDelim.length;
743
- if (match[3] || match[4]) {
744
- delimTotal += rLength;
745
- continue;
746
- } else if (match[5] || match[6]) {
747
- if (lLength % 3 && !((lLength + rLength) % 3)) {
748
- midDelimTotal += rLength;
749
- continue;
750
- }
751
- }
752
- delimTotal -= rLength;
753
- if (delimTotal > 0) continue;
754
- rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);
755
- if (Math.min(lLength, rLength) % 2) {
756
- const text = src.slice(1, lLength + match.index + rLength);
757
- return {
758
- type: 'em',
759
- raw: src.slice(0, lLength + match.index + rLength + 1),
760
- text,
761
- tokens: this.lexer.inlineTokens(text, [])
762
- };
763
- }
764
- const text = src.slice(2, lLength + match.index + rLength - 1);
765
- return {
766
- type: 'strong',
767
- raw: src.slice(0, lLength + match.index + rLength + 1),
768
- text,
769
- tokens: this.lexer.inlineTokens(text, [])
770
- };
771
- }
772
- }
773
- }
774
- codespan(src) {
775
- const cap = this.rules.inline.code.exec(src);
776
- if (cap) {
777
- let text = cap[2].replace(/\n/g, ' ');
778
- const hasNonSpaceChars = /[^ ]/.test(text);
779
- const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
780
- if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
781
- text = text.substring(1, text.length - 1);
782
- }
783
- text = escape$2(text, true);
784
- return {
785
- type: 'codespan',
786
- raw: cap[0],
787
- text
788
- };
789
- }
790
- }
791
- br(src) {
792
- const cap = this.rules.inline.br.exec(src);
793
- if (cap) {
794
- return {
795
- type: 'br',
796
- raw: cap[0]
797
- };
798
- }
799
- }
800
- del(src) {
801
- const cap = this.rules.inline.del.exec(src);
802
- if (cap) {
803
- return {
804
- type: 'del',
805
- raw: cap[0],
806
- text: cap[2],
807
- tokens: this.lexer.inlineTokens(cap[2], [])
808
- };
809
- }
810
- }
811
- autolink(src, mangle) {
812
- const cap = this.rules.inline.autolink.exec(src);
813
- if (cap) {
814
- let text, href;
815
- if (cap[2] === '@') {
816
- text = escape$2(this.options.mangle ? mangle(cap[1]) : cap[1]);
817
- href = 'mailto:' + text;
818
- } else {
819
- text = escape$2(cap[1]);
820
- href = text;
821
- }
822
- return {
823
- type: 'link',
824
- raw: cap[0],
825
- text,
826
- href,
827
- tokens: [
828
- {
829
- type: 'text',
830
- raw: text,
831
- text
832
- }
833
- ]
834
- };
835
- }
836
- }
837
- url(src, mangle) {
838
- let cap;
839
- if (cap = this.rules.inline.url.exec(src)) {
840
- let text, href;
841
- if (cap[2] === '@') {
842
- text = escape$2(this.options.mangle ? mangle(cap[0]) : cap[0]);
843
- href = 'mailto:' + text;
844
- } else {
845
- let prevCapZero;
846
- do {
847
- prevCapZero = cap[0];
848
- cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
849
- } while (prevCapZero !== cap[0]);
850
- text = escape$2(cap[0]);
851
- if (cap[1] === 'www.') {
852
- href = 'http://' + text;
853
- } else {
854
- href = text;
855
- }
856
- }
857
- return {
858
- type: 'link',
859
- raw: cap[0],
860
- text,
861
- href,
862
- tokens: [
863
- {
864
- type: 'text',
865
- raw: text,
866
- text
867
- }
868
- ]
869
- };
870
- }
871
- }
872
- inlineText(src, smartypants) {
873
- const cap = this.rules.inline.text.exec(src);
874
- if (cap) {
875
- let text;
876
- if (this.lexer.state.inRawBlock) {
877
- text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$2(cap[0])) : cap[0];
878
- } else {
879
- text = escape$2(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
880
- }
881
- return {
882
- type: 'text',
883
- raw: cap[0],
884
- text
885
- };
886
- }
887
- }
888
- };
889
- const {
890
- noopTest,
891
- edit,
892
- merge: merge$1
893
- } = helpers;
894
- const block$1 = {
895
- newline: /^(?: *(?:\n|$))+/,
896
- code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
897
- fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
898
- hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
899
- heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
900
- blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
901
- list: /^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,
902
- html: '^ {0,3}(?:'
903
- + '<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)'
904
- + '|comment[^\\n]*(\\n+|$)'
905
- + '|<\\?[\\s\\S]*?(?:\\?>\\n*|$)'
906
- + '|<![A-Z][\\s\\S]*?(?:>\\n*|$)'
907
- + '|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)'
908
- + '|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)'
909
- + '|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)'
910
- + '|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)'
911
- + ')',
912
- def: /^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,
913
- table: noopTest,
914
- lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
915
- _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,
916
- text: /^[^\n]+/
917
- };
918
- block$1._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
919
- block$1._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
920
- block$1.def = edit(block$1.def)
921
- .replace('label', block$1._label)
922
- .replace('title', block$1._title)
923
- .getRegex();
924
- block$1.bullet = /(?:[*+-]|\d{1,9}[.)])/;
925
- block$1.listItemStart = edit(/^( *)(bull) */)
926
- .replace('bull', block$1.bullet)
927
- .getRegex();
928
- block$1.list = edit(block$1.list)
929
- .replace(/bull/g, block$1.bullet)
930
- .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))')
931
- .replace('def', '\\n+(?=' + block$1.def.source + ')')
932
- .getRegex();
933
- block$1._tag = 'address|article|aside|base|basefont|blockquote|body|caption'
934
- + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'
935
- + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'
936
- + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'
937
- + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'
938
- + '|track|ul';
939
- block$1._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
940
- block$1.html = edit(block$1.html, 'i')
941
- .replace('comment', block$1._comment)
942
- .replace('tag', block$1._tag)
943
- .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/)
944
- .getRegex();
945
- block$1.paragraph = edit(block$1._paragraph)
946
- .replace('hr', block$1.hr)
947
- .replace('heading', ' {0,3}#{1,6} ')
948
- .replace('|lheading', '')
949
- .replace('blockquote', ' {0,3}>')
950
- .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
951
- .replace('list', ' {0,3}(?:[*+-]|1[.)]) ')
952
- .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
953
- .replace('tag', block$1._tag)
954
- .getRegex();
955
- block$1.blockquote = edit(block$1.blockquote)
956
- .replace('paragraph', block$1.paragraph)
957
- .getRegex();
958
- block$1.normal = merge$1({}, block$1);
959
- block$1.gfm = merge$1({}, block$1.normal, {
960
- table: '^ *([^\\n ].*\\|.*)\\n'
961
- + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)\\|?'
962
- + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)'
963
- });
964
- block$1.gfm.table = edit(block$1.gfm.table)
965
- .replace('hr', block$1.hr)
966
- .replace('heading', ' {0,3}#{1,6} ')
967
- .replace('blockquote', ' {0,3}>')
968
- .replace('code', ' {4}[^\\n]')
969
- .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n')
970
- .replace('list', ' {0,3}(?:[*+-]|1[.)]) ')
971
- .replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)')
972
- .replace('tag', block$1._tag)
973
- .getRegex();
974
- block$1.pedantic = merge$1({}, block$1.normal, {
975
- html: edit(
976
- '^ *(?:comment *(?:\\n|\\s*$)'
977
- + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)'
978
- + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))')
979
- .replace('comment', block$1._comment)
980
- .replace(/tag/g, '(?!(?:'
981
- + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'
982
- + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'
983
- + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b')
984
- .getRegex(),
985
- def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
986
- heading: /^(#{1,6})(.*)(?:\n+|$)/,
987
- fences: noopTest,
988
- paragraph: edit(block$1.normal._paragraph)
989
- .replace('hr', block$1.hr)
990
- .replace('heading', ' *#{1,6} *[^\n]')
991
- .replace('lheading', block$1.lheading)
992
- .replace('blockquote', ' {0,3}>')
993
- .replace('|fences', '')
994
- .replace('|list', '')
995
- .replace('|html', '')
996
- .getRegex()
997
- });
998
- const inline$1 = {
999
- escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
1000
- autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
1001
- url: noopTest,
1002
- tag: '^comment'
1003
- + '|^</[a-zA-Z][\\w:-]*\\s*>'
1004
- + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>'
1005
- + '|^<\\?[\\s\\S]*?\\?>'
1006
- + '|^<![a-zA-Z]+\\s[\\s\\S]*?>'
1007
- + '|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>',
1008
- link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
1009
- reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,
1010
- nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,
1011
- reflinkSearch: 'reflink|nolink(?!\\()',
1012
- emStrong: {
1013
- lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
1014
- rDelimAst: /\_\_[^_*]*?\*[^_*]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
1015
- rDelimUnd: /\*\*[^_*]*?\_[^_*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/
1016
- },
1017
- code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
1018
- br: /^( {2,}|\\)\n(?!\s*$)/,
1019
- del: noopTest,
1020
- text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
1021
- punctuation: /^([\spunctuation])/
1022
- };
1023
- inline$1._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
1024
- inline$1.punctuation = edit(inline$1.punctuation).replace(/punctuation/g, inline$1._punctuation).getRegex();
1025
- inline$1.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
1026
- inline$1.escapedEmSt = /\\\*|\\_/g;
1027
- inline$1._comment = edit(block$1._comment).replace('(?:-->|$)', '-->').getRegex();
1028
- inline$1.emStrong.lDelim = edit(inline$1.emStrong.lDelim)
1029
- .replace(/punct/g, inline$1._punctuation)
1030
- .getRegex();
1031
- inline$1.emStrong.rDelimAst = edit(inline$1.emStrong.rDelimAst, 'g')
1032
- .replace(/punct/g, inline$1._punctuation)
1033
- .getRegex();
1034
- inline$1.emStrong.rDelimUnd = edit(inline$1.emStrong.rDelimUnd, 'g')
1035
- .replace(/punct/g, inline$1._punctuation)
1036
- .getRegex();
1037
- inline$1._escapes = /\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;
1038
- inline$1._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
1039
- 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])?)+(?![-_])/;
1040
- inline$1.autolink = edit(inline$1.autolink)
1041
- .replace('scheme', inline$1._scheme)
1042
- .replace('email', inline$1._email)
1043
- .getRegex();
1044
- inline$1._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
1045
- inline$1.tag = edit(inline$1.tag)
1046
- .replace('comment', inline$1._comment)
1047
- .replace('attribute', inline$1._attribute)
1048
- .getRegex();
1049
- inline$1._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
1050
- inline$1._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
1051
- inline$1._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
1052
- inline$1.link = edit(inline$1.link)
1053
- .replace('label', inline$1._label)
1054
- .replace('href', inline$1._href)
1055
- .replace('title', inline$1._title)
1056
- .getRegex();
1057
- inline$1.reflink = edit(inline$1.reflink)
1058
- .replace('label', inline$1._label)
1059
- .getRegex();
1060
- inline$1.reflinkSearch = edit(inline$1.reflinkSearch, 'g')
1061
- .replace('reflink', inline$1.reflink)
1062
- .replace('nolink', inline$1.nolink)
1063
- .getRegex();
1064
- inline$1.normal = merge$1({}, inline$1);
1065
- inline$1.pedantic = merge$1({}, inline$1.normal, {
1066
- strong: {
1067
- start: /^__|\*\*/,
1068
- middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
1069
- endAst: /\*\*(?!\*)/g,
1070
- endUnd: /__(?!_)/g
1071
- },
1072
- em: {
1073
- start: /^_|\*/,
1074
- middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,
1075
- endAst: /\*(?!\*)/g,
1076
- endUnd: /_(?!_)/g
1077
- },
1078
- link: edit(/^!?\[(label)\]\((.*?)\)/)
1079
- .replace('label', inline$1._label)
1080
- .getRegex(),
1081
- reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/)
1082
- .replace('label', inline$1._label)
1083
- .getRegex()
1084
- });
1085
- inline$1.gfm = merge$1({}, inline$1.normal, {
1086
- escape: edit(inline$1.escape).replace('])', '~|])').getRegex(),
1087
- _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
1088
- url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
1089
- _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
1090
- del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
1091
- text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
1092
- });
1093
- inline$1.gfm.url = edit(inline$1.gfm.url, 'i')
1094
- .replace('email', inline$1.gfm._extended_email)
1095
- .getRegex();
1096
- inline$1.breaks = merge$1({}, inline$1.gfm, {
1097
- br: edit(inline$1.br).replace('{2,}', '*').getRegex(),
1098
- text: edit(inline$1.gfm.text)
1099
- .replace('\\b_', '\\b_| {2,}\\n')
1100
- .replace(/\{2,\}/g, '*')
1101
- .getRegex()
1102
- });
1103
- var rules = {
1104
- block: block$1,
1105
- inline: inline$1
1106
- };
1107
- const Tokenizer$1 = Tokenizer_1;
1108
- const { defaults: defaults$3 } = defaults$5.exports;
1109
- const { block, inline } = rules;
1110
- const { repeatString } = helpers;
1111
- function smartypants(text) {
1112
- return text
1113
- .replace(/---/g, '\u2014')
1114
- .replace(/--/g, '\u2013')
1115
- .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
1116
- .replace(/'/g, '\u2019')
1117
- .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
1118
- .replace(/"/g, '\u201d')
1119
- .replace(/\.{3}/g, '\u2026');
1120
- }
1121
- function mangle(text) {
1122
- let out = '',
1123
- i,
1124
- ch;
1125
- const l = text.length;
1126
- for (i = 0; i < l; i++) {
1127
- ch = text.charCodeAt(i);
1128
- if (Math.random() > 0.5) {
1129
- ch = 'x' + ( ch.toString(16));
1130
- }
1131
- out += '&#' + ch + ';';
1132
- }
1133
- return out;
1134
- }
1135
- var Lexer_1 = class Lexer {
1136
- constructor(options) {
1137
- this.tokens = [];
1138
- this.tokens.links = Object.create(null);
1139
- this.options = options || defaults$3;
1140
- this.options.tokenizer = this.options.tokenizer || new Tokenizer$1();
1141
- this.tokenizer = this.options.tokenizer;
1142
- this.tokenizer.options = this.options;
1143
- this.tokenizer.lexer = this;
1144
- this.inlineQueue = [];
1145
- this.state = {
1146
- inLink: false,
1147
- inRawBlock: false,
1148
- top: true
1149
- };
1150
- const rules = {
1151
- block: block.normal,
1152
- inline: inline.normal
1153
- };
1154
- if (this.options.pedantic) {
1155
- rules.block = block.pedantic;
1156
- rules.inline = inline.pedantic;
1157
- } else if (this.options.gfm) {
1158
- rules.block = block.gfm;
1159
- if (this.options.breaks) {
1160
- rules.inline = inline.breaks;
1161
- } else {
1162
- rules.inline = inline.gfm;
1163
- }
1164
- }
1165
- this.tokenizer.rules = rules;
1166
- }
1167
- static get rules() {
1168
- return {
1169
- block,
1170
- inline
1171
- };
1172
- }
1173
- static lex(src, options) {
1174
- const lexer = new Lexer(options);
1175
- return lexer.lex(src);
1176
- }
1177
- static lexInline(src, options) {
1178
- const lexer = new Lexer(options);
1179
- return lexer.inlineTokens(src);
1180
- }
1181
- lex(src) {
1182
- src = src
1183
- .replace(/\r\n|\r/g, '\n')
1184
- .replace(/\t/g, ' ');
1185
- this.blockTokens(src, this.tokens);
1186
- let next;
1187
- while (next = this.inlineQueue.shift()) {
1188
- this.inlineTokens(next.src, next.tokens);
1189
- }
1190
- return this.tokens;
1191
- }
1192
- blockTokens(src, tokens = []) {
1193
- if (this.options.pedantic) {
1194
- src = src.replace(/^ +$/gm, '');
1195
- }
1196
- let token, lastToken, cutSrc, lastParagraphClipped;
1197
- while (src) {
1198
- if (this.options.extensions
1199
- && this.options.extensions.block
1200
- && ( this.options.extensions.block.some((extTokenizer) => {
1201
- if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
1202
- src = src.substring(token.raw.length);
1203
- tokens.push(token);
1204
- return true;
1205
- }
1206
- return false;
1207
- }))) {
1208
- continue;
1209
- }
1210
- if (token = this.tokenizer.space(src)) {
1211
- src = src.substring(token.raw.length);
1212
- if (token.type) {
1213
- tokens.push(token);
1214
- }
1215
- continue;
1216
- }
1217
- if (token = this.tokenizer.code(src)) {
1218
- src = src.substring(token.raw.length);
1219
- lastToken = tokens[tokens.length - 1];
1220
- if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
1221
- lastToken.raw += '\n' + token.raw;
1222
- lastToken.text += '\n' + token.text;
1223
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1224
- } else {
1225
- tokens.push(token);
1226
- }
1227
- continue;
1228
- }
1229
- if (token = this.tokenizer.fences(src)) {
1230
- src = src.substring(token.raw.length);
1231
- tokens.push(token);
1232
- continue;
1233
- }
1234
- if (token = this.tokenizer.heading(src)) {
1235
- src = src.substring(token.raw.length);
1236
- tokens.push(token);
1237
- continue;
1238
- }
1239
- if (token = this.tokenizer.hr(src)) {
1240
- src = src.substring(token.raw.length);
1241
- tokens.push(token);
1242
- continue;
1243
- }
1244
- if (token = this.tokenizer.blockquote(src)) {
1245
- src = src.substring(token.raw.length);
1246
- tokens.push(token);
1247
- continue;
1248
- }
1249
- if (token = this.tokenizer.list(src)) {
1250
- src = src.substring(token.raw.length);
1251
- tokens.push(token);
1252
- continue;
1253
- }
1254
- if (token = this.tokenizer.html(src)) {
1255
- src = src.substring(token.raw.length);
1256
- tokens.push(token);
1257
- continue;
1258
- }
1259
- if (token = this.tokenizer.def(src)) {
1260
- src = src.substring(token.raw.length);
1261
- lastToken = tokens[tokens.length - 1];
1262
- if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
1263
- lastToken.raw += '\n' + token.raw;
1264
- lastToken.text += '\n' + token.raw;
1265
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1266
- } else if (!this.tokens.links[token.tag]) {
1267
- this.tokens.links[token.tag] = {
1268
- href: token.href,
1269
- title: token.title
1270
- };
1271
- }
1272
- continue;
1273
- }
1274
- if (token = this.tokenizer.table(src)) {
1275
- src = src.substring(token.raw.length);
1276
- tokens.push(token);
1277
- continue;
1278
- }
1279
- if (token = this.tokenizer.lheading(src)) {
1280
- src = src.substring(token.raw.length);
1281
- tokens.push(token);
1282
- continue;
1283
- }
1284
- cutSrc = src;
1285
- if (this.options.extensions && this.options.extensions.startBlock) {
1286
- let startIndex = Infinity;
1287
- const tempSrc = src.slice(1);
1288
- let tempStart;
1289
- this.options.extensions.startBlock.forEach(function(getStartIndex) {
1290
- tempStart = getStartIndex.call({ lexer: this }, tempSrc);
1291
- if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
1292
- });
1293
- if (startIndex < Infinity && startIndex >= 0) {
1294
- cutSrc = src.substring(0, startIndex + 1);
1295
- }
1296
- }
1297
- if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
1298
- lastToken = tokens[tokens.length - 1];
1299
- if (lastParagraphClipped && lastToken.type === 'paragraph') {
1300
- lastToken.raw += '\n' + token.raw;
1301
- lastToken.text += '\n' + token.text;
1302
- this.inlineQueue.pop();
1303
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1304
- } else {
1305
- tokens.push(token);
1306
- }
1307
- lastParagraphClipped = (cutSrc.length !== src.length);
1308
- src = src.substring(token.raw.length);
1309
- continue;
1310
- }
1311
- if (token = this.tokenizer.text(src)) {
1312
- src = src.substring(token.raw.length);
1313
- lastToken = tokens[tokens.length - 1];
1314
- if (lastToken && lastToken.type === 'text') {
1315
- lastToken.raw += '\n' + token.raw;
1316
- lastToken.text += '\n' + token.text;
1317
- this.inlineQueue.pop();
1318
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1319
- } else {
1320
- tokens.push(token);
1321
- }
1322
- continue;
1323
- }
1324
- if (src) {
1325
- const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
1326
- if (this.options.silent) {
1327
- console.error(errMsg);
1328
- break;
1329
- } else {
1330
- throw new Error(errMsg);
1331
- }
1332
- }
1333
- }
1334
- this.state.top = true;
1335
- return tokens;
1336
- }
1337
- inline(src, tokens) {
1338
- this.inlineQueue.push({ src, tokens });
1339
- }
1340
- inlineTokens(src, tokens = []) {
1341
- let token, lastToken, cutSrc;
1342
- let maskedSrc = src;
1343
- let match;
1344
- let keepPrevChar, prevChar;
1345
- if (this.tokens.links) {
1346
- const links = ( Object.keys(this.tokens.links));
1347
- if (links.length > 0) {
1348
- while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
1349
- if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
1350
- maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);
1351
- }
1352
- }
1353
- }
1354
- }
1355
- while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
1356
- maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
1357
- }
1358
- while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
1359
- maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
1360
- }
1361
- while (src) {
1362
- if (!keepPrevChar) {
1363
- prevChar = '';
1364
- }
1365
- keepPrevChar = false;
1366
- if (this.options.extensions
1367
- && this.options.extensions.inline
1368
- && ( this.options.extensions.inline.some((extTokenizer) => {
1369
- if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
1370
- src = src.substring(token.raw.length);
1371
- tokens.push(token);
1372
- return true;
1373
- }
1374
- return false;
1375
- }))) {
1376
- continue;
1377
- }
1378
- if (token = this.tokenizer.escape(src)) {
1379
- src = src.substring(token.raw.length);
1380
- tokens.push(token);
1381
- continue;
1382
- }
1383
- if (token = this.tokenizer.tag(src)) {
1384
- src = src.substring(token.raw.length);
1385
- lastToken = tokens[tokens.length - 1];
1386
- if (lastToken && token.type === 'text' && lastToken.type === 'text') {
1387
- lastToken.raw += token.raw;
1388
- lastToken.text += token.text;
1389
- } else {
1390
- tokens.push(token);
1391
- }
1392
- continue;
1393
- }
1394
- if (token = this.tokenizer.link(src)) {
1395
- src = src.substring(token.raw.length);
1396
- tokens.push(token);
1397
- continue;
1398
- }
1399
- if (token = this.tokenizer.reflink(src, this.tokens.links)) {
1400
- src = src.substring(token.raw.length);
1401
- lastToken = tokens[tokens.length - 1];
1402
- if (lastToken && token.type === 'text' && lastToken.type === 'text') {
1403
- lastToken.raw += token.raw;
1404
- lastToken.text += token.text;
1405
- } else {
1406
- tokens.push(token);
1407
- }
1408
- continue;
1409
- }
1410
- if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
1411
- src = src.substring(token.raw.length);
1412
- tokens.push(token);
1413
- continue;
1414
- }
1415
- if (token = this.tokenizer.codespan(src)) {
1416
- src = src.substring(token.raw.length);
1417
- tokens.push(token);
1418
- continue;
1419
- }
1420
- if (token = this.tokenizer.br(src)) {
1421
- src = src.substring(token.raw.length);
1422
- tokens.push(token);
1423
- continue;
1424
- }
1425
- if (token = this.tokenizer.del(src)) {
1426
- src = src.substring(token.raw.length);
1427
- tokens.push(token);
1428
- continue;
1429
- }
1430
- if (token = this.tokenizer.autolink(src, mangle)) {
1431
- src = src.substring(token.raw.length);
1432
- tokens.push(token);
1433
- continue;
1434
- }
1435
- if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
1436
- src = src.substring(token.raw.length);
1437
- tokens.push(token);
1438
- continue;
1439
- }
1440
- cutSrc = src;
1441
- if (this.options.extensions && this.options.extensions.startInline) {
1442
- let startIndex = Infinity;
1443
- const tempSrc = src.slice(1);
1444
- let tempStart;
1445
- this.options.extensions.startInline.forEach(function(getStartIndex) {
1446
- tempStart = getStartIndex.call({ lexer: this }, tempSrc);
1447
- if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }
1448
- });
1449
- if (startIndex < Infinity && startIndex >= 0) {
1450
- cutSrc = src.substring(0, startIndex + 1);
1451
- }
1452
- }
1453
- if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
1454
- src = src.substring(token.raw.length);
1455
- if (token.raw.slice(-1) !== '_') {
1456
- prevChar = token.raw.slice(-1);
1457
- }
1458
- keepPrevChar = true;
1459
- lastToken = tokens[tokens.length - 1];
1460
- if (lastToken && lastToken.type === 'text') {
1461
- lastToken.raw += token.raw;
1462
- lastToken.text += token.text;
1463
- } else {
1464
- tokens.push(token);
1465
- }
1466
- continue;
1467
- }
1468
- if (src) {
1469
- const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
1470
- if (this.options.silent) {
1471
- console.error(errMsg);
1472
- break;
1473
- } else {
1474
- throw new Error(errMsg);
1475
- }
1476
- }
1477
- }
1478
- return tokens;
1479
- }
1480
- };
1481
- const { defaults: defaults$2 } = defaults$5.exports;
1482
- const {
1483
- cleanUrl,
1484
- escape: escape$1
1485
- } = helpers;
1486
- var Renderer_1 = class Renderer {
1487
- constructor(options) {
1488
- this.options = options || defaults$2;
1489
- }
1490
- code(code, infostring, escaped) {
1491
- const lang = (infostring || '').match(/\S*/)[0];
1492
- if (this.options.highlight) {
1493
- const out = this.options.highlight(code, lang);
1494
- if (out != null && out !== code) {
1495
- escaped = true;
1496
- code = out;
1497
- }
1498
- }
1499
- code = code.replace(/\n$/, '') + '\n';
1500
- if (!lang) {
1501
- return '<pre><code>'
1502
- + (escaped ? code : escape$1(code, true))
1503
- + '</code></pre>\n';
1504
- }
1505
- return '<pre><code class="'
1506
- + this.options.langPrefix
1507
- + escape$1(lang, true)
1508
- + '">'
1509
- + (escaped ? code : escape$1(code, true))
1510
- + '</code></pre>\n';
1511
- }
1512
- blockquote(quote) {
1513
- return '<blockquote>\n' + quote + '</blockquote>\n';
1514
- }
1515
- html(html) {
1516
- return html;
1517
- }
1518
- heading(text, level, raw, slugger) {
1519
- if (this.options.headerIds) {
1520
- return '<h'
1521
- + level
1522
- + ' id="'
1523
- + this.options.headerPrefix
1524
- + slugger.slug(raw)
1525
- + '">'
1526
- + text
1527
- + '</h'
1528
- + level
1529
- + '>\n';
1530
- }
1531
- return '<h' + level + '>' + text + '</h' + level + '>\n';
1532
- }
1533
- hr() {
1534
- return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
1535
- }
1536
- list(body, ordered, start) {
1537
- const type = ordered ? 'ol' : 'ul',
1538
- startatt = (ordered && start !== 1) ? (' start="' + start + '"') : '';
1539
- return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
1540
- }
1541
- listitem(text) {
1542
- return '<li>' + text + '</li>\n';
1543
- }
1544
- checkbox(checked) {
1545
- return '<input '
1546
- + (checked ? 'checked="" ' : '')
1547
- + 'disabled="" type="checkbox"'
1548
- + (this.options.xhtml ? ' /' : '')
1549
- + '> ';
1550
- }
1551
- paragraph(text) {
1552
- return '<p>' + text + '</p>\n';
1553
- }
1554
- table(header, body) {
1555
- if (body) body = '<tbody>' + body + '</tbody>';
1556
- return '<table>\n'
1557
- + '<thead>\n'
1558
- + header
1559
- + '</thead>\n'
1560
- + body
1561
- + '</table>\n';
1562
- }
1563
- tablerow(content) {
1564
- return '<tr>\n' + content + '</tr>\n';
1565
- }
1566
- tablecell(content, flags) {
1567
- const type = flags.header ? 'th' : 'td';
1568
- const tag = flags.align
1569
- ? '<' + type + ' align="' + flags.align + '">'
1570
- : '<' + type + '>';
1571
- return tag + content + '</' + type + '>\n';
1572
- }
1573
- strong(text) {
1574
- return '<strong>' + text + '</strong>';
1575
- }
1576
- em(text) {
1577
- return '<em>' + text + '</em>';
1578
- }
1579
- codespan(text) {
1580
- return '<code>' + text + '</code>';
1581
- }
1582
- br() {
1583
- return this.options.xhtml ? '<br/>' : '<br>';
1584
- }
1585
- del(text) {
1586
- return '<del>' + text + '</del>';
1587
- }
1588
- link(href, title, text) {
1589
- href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
1590
- if (href === null) {
1591
- return text;
1592
- }
1593
- let out = '<a href="' + escape$1(href) + '"';
1594
- if (title) {
1595
- out += ' title="' + title + '"';
1596
- }
1597
- out += '>' + text + '</a>';
1598
- return out;
1599
- }
1600
- image(href, title, text) {
1601
- href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
1602
- if (href === null) {
1603
- return text;
1604
- }
1605
- let out = '<img src="' + href + '" alt="' + text + '"';
1606
- if (title) {
1607
- out += ' title="' + title + '"';
1608
- }
1609
- out += this.options.xhtml ? '/>' : '>';
1610
- return out;
1611
- }
1612
- text(text) {
1613
- return text;
1614
- }
1615
- };
1616
- var TextRenderer_1 = class TextRenderer {
1617
- strong(text) {
1618
- return text;
1619
- }
1620
- em(text) {
1621
- return text;
1622
- }
1623
- codespan(text) {
1624
- return text;
1625
- }
1626
- del(text) {
1627
- return text;
1628
- }
1629
- html(text) {
1630
- return text;
1631
- }
1632
- text(text) {
1633
- return text;
1634
- }
1635
- link(href, title, text) {
1636
- return '' + text;
1637
- }
1638
- image(href, title, text) {
1639
- return '' + text;
1640
- }
1641
- br() {
1642
- return '';
1643
- }
1644
- };
1645
- var Slugger_1 = class Slugger {
1646
- constructor() {
1647
- this.seen = {};
1648
- }
1649
- serialize(value) {
1650
- return value
1651
- .toLowerCase()
1652
- .trim()
1653
- .replace(/<[!\/a-z].*?>/ig, '')
1654
- .replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '')
1655
- .replace(/\s/g, '-');
1656
- }
1657
- getNextSafeSlug(originalSlug, isDryRun) {
1658
- let slug = originalSlug;
1659
- let occurenceAccumulator = 0;
1660
- if (this.seen.hasOwnProperty(slug)) {
1661
- occurenceAccumulator = this.seen[originalSlug];
1662
- do {
1663
- occurenceAccumulator++;
1664
- slug = originalSlug + '-' + occurenceAccumulator;
1665
- } while (this.seen.hasOwnProperty(slug));
1666
- }
1667
- if (!isDryRun) {
1668
- this.seen[originalSlug] = occurenceAccumulator;
1669
- this.seen[slug] = 0;
1670
- }
1671
- return slug;
1672
- }
1673
- slug(value, options = {}) {
1674
- const slug = this.serialize(value);
1675
- return this.getNextSafeSlug(slug, options.dryrun);
1676
- }
1677
- };
1678
- const Renderer$1 = Renderer_1;
1679
- const TextRenderer$1 = TextRenderer_1;
1680
- const Slugger$1 = Slugger_1;
1681
- const { defaults: defaults$1 } = defaults$5.exports;
1682
- const {
1683
- unescape
1684
- } = helpers;
1685
- var Parser_1 = class Parser {
1686
- constructor(options) {
1687
- this.options = options || defaults$1;
1688
- this.options.renderer = this.options.renderer || new Renderer$1();
1689
- this.renderer = this.options.renderer;
1690
- this.renderer.options = this.options;
1691
- this.textRenderer = new TextRenderer$1();
1692
- this.slugger = new Slugger$1();
1693
- }
1694
- static parse(tokens, options) {
1695
- const parser = new Parser(options);
1696
- return parser.parse(tokens);
1697
- }
1698
- static parseInline(tokens, options) {
1699
- const parser = new Parser(options);
1700
- return parser.parseInline(tokens);
1701
- }
1702
- parse(tokens, top = true) {
1703
- let out = '',
1704
- i,
1705
- j,
1706
- k,
1707
- l2,
1708
- l3,
1709
- row,
1710
- cell,
1711
- header,
1712
- body,
1713
- token,
1714
- ordered,
1715
- start,
1716
- loose,
1717
- itemBody,
1718
- item,
1719
- checked,
1720
- task,
1721
- checkbox,
1722
- ret;
1723
- const l = tokens.length;
1724
- for (i = 0; i < l; i++) {
1725
- token = tokens[i];
1726
- if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
1727
- ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
1728
- if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
1729
- out += ret || '';
1730
- continue;
1731
- }
1732
- }
1733
- switch (token.type) {
1734
- case 'space': {
1735
- continue;
1736
- }
1737
- case 'hr': {
1738
- out += this.renderer.hr();
1739
- continue;
1740
- }
1741
- case 'heading': {
1742
- out += this.renderer.heading(
1743
- this.parseInline(token.tokens),
1744
- token.depth,
1745
- unescape(this.parseInline(token.tokens, this.textRenderer)),
1746
- this.slugger);
1747
- continue;
1748
- }
1749
- case 'code': {
1750
- out += this.renderer.code(token.text,
1751
- token.lang,
1752
- token.escaped);
1753
- continue;
1754
- }
1755
- case 'table': {
1756
- header = '';
1757
- cell = '';
1758
- l2 = token.header.length;
1759
- for (j = 0; j < l2; j++) {
1760
- cell += this.renderer.tablecell(
1761
- this.parseInline(token.header[j].tokens),
1762
- { header: true, align: token.align[j] }
1763
- );
1764
- }
1765
- header += this.renderer.tablerow(cell);
1766
- body = '';
1767
- l2 = token.rows.length;
1768
- for (j = 0; j < l2; j++) {
1769
- row = token.rows[j];
1770
- cell = '';
1771
- l3 = row.length;
1772
- for (k = 0; k < l3; k++) {
1773
- cell += this.renderer.tablecell(
1774
- this.parseInline(row[k].tokens),
1775
- { header: false, align: token.align[k] }
1776
- );
1777
- }
1778
- body += this.renderer.tablerow(cell);
1779
- }
1780
- out += this.renderer.table(header, body);
1781
- continue;
1782
- }
1783
- case 'blockquote': {
1784
- body = this.parse(token.tokens);
1785
- out += this.renderer.blockquote(body);
1786
- continue;
1787
- }
1788
- case 'list': {
1789
- ordered = token.ordered;
1790
- start = token.start;
1791
- loose = token.loose;
1792
- l2 = token.items.length;
1793
- body = '';
1794
- for (j = 0; j < l2; j++) {
1795
- item = token.items[j];
1796
- checked = item.checked;
1797
- task = item.task;
1798
- itemBody = '';
1799
- if (item.task) {
1800
- checkbox = this.renderer.checkbox(checked);
1801
- if (loose) {
1802
- if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
1803
- item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
1804
- if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
1805
- item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
1806
- }
1807
- } else {
1808
- item.tokens.unshift({
1809
- type: 'text',
1810
- text: checkbox
1811
- });
1812
- }
1813
- } else {
1814
- itemBody += checkbox;
1815
- }
1816
- }
1817
- itemBody += this.parse(item.tokens, loose);
1818
- body += this.renderer.listitem(itemBody, task, checked);
1819
- }
1820
- out += this.renderer.list(body, ordered, start);
1821
- continue;
1822
- }
1823
- case 'html': {
1824
- out += this.renderer.html(token.text);
1825
- continue;
1826
- }
1827
- case 'paragraph': {
1828
- out += this.renderer.paragraph(this.parseInline(token.tokens));
1829
- continue;
1830
- }
1831
- case 'text': {
1832
- body = token.tokens ? this.parseInline(token.tokens) : token.text;
1833
- while (i + 1 < l && tokens[i + 1].type === 'text') {
1834
- token = tokens[++i];
1835
- body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
1836
- }
1837
- out += top ? this.renderer.paragraph(body) : body;
1838
- continue;
1839
- }
1840
- default: {
1841
- const errMsg = 'Token with "' + token.type + '" type was not found.';
1842
- if (this.options.silent) {
1843
- console.error(errMsg);
1844
- return;
1845
- } else {
1846
- throw new Error(errMsg);
1847
- }
1848
- }
1849
- }
1850
- }
1851
- return out;
1852
- }
1853
- parseInline(tokens, renderer) {
1854
- renderer = renderer || this.renderer;
1855
- let out = '',
1856
- i,
1857
- token,
1858
- ret;
1859
- const l = tokens.length;
1860
- for (i = 0; i < l; i++) {
1861
- token = tokens[i];
1862
- if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
1863
- ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
1864
- if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
1865
- out += ret || '';
1866
- continue;
1867
- }
1868
- }
1869
- switch (token.type) {
1870
- case 'escape': {
1871
- out += renderer.text(token.text);
1872
- break;
1873
- }
1874
- case 'html': {
1875
- out += renderer.html(token.text);
1876
- break;
1877
- }
1878
- case 'link': {
1879
- out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
1880
- break;
1881
- }
1882
- case 'image': {
1883
- out += renderer.image(token.href, token.title, token.text);
1884
- break;
1885
- }
1886
- case 'strong': {
1887
- out += renderer.strong(this.parseInline(token.tokens, renderer));
1888
- break;
1889
- }
1890
- case 'em': {
1891
- out += renderer.em(this.parseInline(token.tokens, renderer));
1892
- break;
1893
- }
1894
- case 'codespan': {
1895
- out += renderer.codespan(token.text);
1896
- break;
1897
- }
1898
- case 'br': {
1899
- out += renderer.br();
1900
- break;
1901
- }
1902
- case 'del': {
1903
- out += renderer.del(this.parseInline(token.tokens, renderer));
1904
- break;
1905
- }
1906
- case 'text': {
1907
- out += renderer.text(token.text);
1908
- break;
1909
- }
1910
- default: {
1911
- const errMsg = 'Token with "' + token.type + '" type was not found.';
1912
- if (this.options.silent) {
1913
- console.error(errMsg);
1914
- return;
1915
- } else {
1916
- throw new Error(errMsg);
1917
- }
1918
- }
1919
- }
1920
- }
1921
- return out;
1922
- }
1923
- };
1924
- const Lexer = Lexer_1;
1925
- const Parser = Parser_1;
1926
- const Tokenizer = Tokenizer_1;
1927
- const Renderer = Renderer_1;
1928
- const TextRenderer = TextRenderer_1;
1929
- const Slugger = Slugger_1;
1930
- const {
1931
- merge,
1932
- checkSanitizeDeprecation,
1933
- escape
1934
- } = helpers;
1935
- const {
1936
- getDefaults,
1937
- changeDefaults,
1938
- defaults
1939
- } = defaults$5.exports;
1940
- function marked(src, opt, callback) {
1941
- if (typeof src === 'undefined' || src === null) {
1942
- throw new Error('marked(): input parameter is undefined or null');
1943
- }
1944
- if (typeof src !== 'string') {
1945
- throw new Error('marked(): input parameter is of type '
1946
- + Object.prototype.toString.call(src) + ', string expected');
1947
- }
1948
- if (typeof opt === 'function') {
1949
- callback = opt;
1950
- opt = null;
1951
- }
1952
- opt = merge({}, marked.defaults, opt || {});
1953
- checkSanitizeDeprecation(opt);
1954
- if (callback) {
1955
- const highlight = opt.highlight;
1956
- let tokens;
1957
- try {
1958
- tokens = Lexer.lex(src, opt);
1959
- } catch (e) {
1960
- return callback(e);
1961
- }
1962
- const done = function(err) {
1963
- let out;
1964
- if (!err) {
1965
- try {
1966
- if (opt.walkTokens) {
1967
- marked.walkTokens(tokens, opt.walkTokens);
1968
- }
1969
- out = Parser.parse(tokens, opt);
1970
- } catch (e) {
1971
- err = e;
1972
- }
1973
- }
1974
- opt.highlight = highlight;
1975
- return err
1976
- ? callback(err)
1977
- : callback(null, out);
1978
- };
1979
- if (!highlight || highlight.length < 3) {
1980
- return done();
1981
- }
1982
- delete opt.highlight;
1983
- if (!tokens.length) return done();
1984
- let pending = 0;
1985
- marked.walkTokens(tokens, function(token) {
1986
- if (token.type === 'code') {
1987
- pending++;
1988
- setTimeout(() => {
1989
- highlight(token.text, token.lang, function(err, code) {
1990
- if (err) {
1991
- return done(err);
1992
- }
1993
- if (code != null && code !== token.text) {
1994
- token.text = code;
1995
- token.escaped = true;
1996
- }
1997
- pending--;
1998
- if (pending === 0) {
1999
- done();
2000
- }
2001
- });
2002
- }, 0);
2003
- }
2004
- });
2005
- if (pending === 0) {
2006
- done();
2007
- }
2008
- return;
2009
- }
2010
- try {
2011
- const tokens = Lexer.lex(src, opt);
2012
- if (opt.walkTokens) {
2013
- marked.walkTokens(tokens, opt.walkTokens);
2014
- }
2015
- return Parser.parse(tokens, opt);
2016
- } catch (e) {
2017
- e.message += '\nPlease report this to https://github.com/markedjs/marked.';
2018
- if (opt.silent) {
2019
- return '<p>An error occurred:</p><pre>'
2020
- + escape(e.message + '', true)
2021
- + '</pre>';
2022
- }
2023
- throw e;
2024
- }
2025
- }
2026
- marked.options =
2027
- marked.setOptions = function(opt) {
2028
- merge(marked.defaults, opt);
2029
- changeDefaults(marked.defaults);
2030
- return marked;
2031
- };
2032
- marked.getDefaults = getDefaults;
2033
- marked.defaults = defaults;
2034
- marked.use = function(...args) {
2035
- const opts = merge({}, ...args);
2036
- const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} };
2037
- let hasExtensions;
2038
- args.forEach((pack) => {
2039
- if (pack.extensions) {
2040
- hasExtensions = true;
2041
- pack.extensions.forEach((ext) => {
2042
- if (!ext.name) {
2043
- throw new Error('extension name required');
2044
- }
2045
- if (ext.renderer) {
2046
- const prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;
2047
- if (prevRenderer) {
2048
- extensions.renderers[ext.name] = function(...args) {
2049
- let ret = ext.renderer.apply(this, args);
2050
- if (ret === false) {
2051
- ret = prevRenderer.apply(this, args);
2052
- }
2053
- return ret;
2054
- };
2055
- } else {
2056
- extensions.renderers[ext.name] = ext.renderer;
2057
- }
2058
- }
2059
- if (ext.tokenizer) {
2060
- if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {
2061
- throw new Error("extension level must be 'block' or 'inline'");
2062
- }
2063
- if (extensions[ext.level]) {
2064
- extensions[ext.level].unshift(ext.tokenizer);
2065
- } else {
2066
- extensions[ext.level] = [ext.tokenizer];
2067
- }
2068
- if (ext.start) {
2069
- if (ext.level === 'block') {
2070
- if (extensions.startBlock) {
2071
- extensions.startBlock.push(ext.start);
2072
- } else {
2073
- extensions.startBlock = [ext.start];
2074
- }
2075
- } else if (ext.level === 'inline') {
2076
- if (extensions.startInline) {
2077
- extensions.startInline.push(ext.start);
2078
- } else {
2079
- extensions.startInline = [ext.start];
2080
- }
2081
- }
2082
- }
2083
- }
2084
- if (ext.childTokens) {
2085
- extensions.childTokens[ext.name] = ext.childTokens;
2086
- }
2087
- });
2088
- }
2089
- if (pack.renderer) {
2090
- const renderer = marked.defaults.renderer || new Renderer();
2091
- for (const prop in pack.renderer) {
2092
- const prevRenderer = renderer[prop];
2093
- renderer[prop] = (...args) => {
2094
- let ret = pack.renderer[prop].apply(renderer, args);
2095
- if (ret === false) {
2096
- ret = prevRenderer.apply(renderer, args);
2097
- }
2098
- return ret;
2099
- };
2100
- }
2101
- opts.renderer = renderer;
2102
- }
2103
- if (pack.tokenizer) {
2104
- const tokenizer = marked.defaults.tokenizer || new Tokenizer();
2105
- for (const prop in pack.tokenizer) {
2106
- const prevTokenizer = tokenizer[prop];
2107
- tokenizer[prop] = (...args) => {
2108
- let ret = pack.tokenizer[prop].apply(tokenizer, args);
2109
- if (ret === false) {
2110
- ret = prevTokenizer.apply(tokenizer, args);
2111
- }
2112
- return ret;
2113
- };
2114
- }
2115
- opts.tokenizer = tokenizer;
2116
- }
2117
- if (pack.walkTokens) {
2118
- const walkTokens = marked.defaults.walkTokens;
2119
- opts.walkTokens = (token) => {
2120
- pack.walkTokens.call(this, token);
2121
- if (walkTokens) {
2122
- walkTokens(token);
2123
- }
2124
- };
2125
- }
2126
- if (hasExtensions) {
2127
- opts.extensions = extensions;
2128
- }
2129
- marked.setOptions(opts);
2130
- });
2131
- };
2132
- marked.walkTokens = function(tokens, callback) {
2133
- for (const token of tokens) {
2134
- callback(token);
2135
- switch (token.type) {
2136
- case 'table': {
2137
- for (const cell of token.header) {
2138
- marked.walkTokens(cell.tokens, callback);
2139
- }
2140
- for (const row of token.rows) {
2141
- for (const cell of row) {
2142
- marked.walkTokens(cell.tokens, callback);
2143
- }
2144
- }
2145
- break;
2146
- }
2147
- case 'list': {
2148
- marked.walkTokens(token.items, callback);
2149
- break;
2150
- }
2151
- default: {
2152
- if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {
2153
- marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) {
2154
- marked.walkTokens(token[childTokens], callback);
2155
- });
2156
- } else if (token.tokens) {
2157
- marked.walkTokens(token.tokens, callback);
2158
- }
2159
- }
2160
- }
2161
- }
2162
- };
2163
- marked.parseInline = function(src, opt) {
2164
- if (typeof src === 'undefined' || src === null) {
2165
- throw new Error('marked.parseInline(): input parameter is undefined or null');
2166
- }
2167
- if (typeof src !== 'string') {
2168
- throw new Error('marked.parseInline(): input parameter is of type '
2169
- + Object.prototype.toString.call(src) + ', string expected');
2170
- }
2171
- opt = merge({}, marked.defaults, opt || {});
2172
- checkSanitizeDeprecation(opt);
2173
- try {
2174
- const tokens = Lexer.lexInline(src, opt);
2175
- if (opt.walkTokens) {
2176
- marked.walkTokens(tokens, opt.walkTokens);
2177
- }
2178
- return Parser.parseInline(tokens, opt);
2179
- } catch (e) {
2180
- e.message += '\nPlease report this to https://github.com/markedjs/marked.';
2181
- if (opt.silent) {
2182
- return '<p>An error occurred:</p><pre>'
2183
- + escape(e.message + '', true)
2184
- + '</pre>';
2185
- }
2186
- throw e;
2187
- }
2188
- };
2189
- marked.Parser = Parser;
2190
- marked.parser = Parser.parse;
2191
- marked.Renderer = Renderer;
2192
- marked.TextRenderer = TextRenderer;
2193
- marked.Lexer = Lexer;
2194
- marked.lexer = Lexer.lex;
2195
- marked.Tokenizer = Tokenizer;
2196
- marked.Slugger = Slugger;
2197
- marked.parse = marked;
2198
- var marked_1 = marked;
2199
-
2200
- export { marked_1 as default };