marked 4.1.1 → 4.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/marked.cjs +273 -646
- package/lib/marked.esm.js +14 -9
- package/lib/marked.umd.js +273 -646
- package/marked.min.js +1 -1
- package/package.json +12 -11
- package/src/Lexer.js +2 -1
- package/src/Tokenizer.js +6 -4
- package/src/rules.js +6 -4
package/lib/marked.cjs
CHANGED
|
@@ -22,7 +22,6 @@ function _defineProperties(target, props) {
|
|
|
22
22
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
|
|
26
25
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
27
26
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
28
27
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
@@ -31,7 +30,6 @@ function _createClass(Constructor, protoProps, staticProps) {
|
|
|
31
30
|
});
|
|
32
31
|
return Constructor;
|
|
33
32
|
}
|
|
34
|
-
|
|
35
33
|
function _unsupportedIterableToArray(o, minLen) {
|
|
36
34
|
if (!o) return;
|
|
37
35
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
@@ -40,19 +38,14 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
40
38
|
if (n === "Map" || n === "Set") return Array.from(o);
|
|
41
39
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
42
40
|
}
|
|
43
|
-
|
|
44
41
|
function _arrayLikeToArray(arr, len) {
|
|
45
42
|
if (len == null || len > arr.length) len = arr.length;
|
|
46
|
-
|
|
47
43
|
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
|
|
48
|
-
|
|
49
44
|
return arr2;
|
|
50
45
|
}
|
|
51
|
-
|
|
52
46
|
function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
53
47
|
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
54
48
|
if (it) return (it = it.call(o)).next.bind(it);
|
|
55
|
-
|
|
56
49
|
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
|
|
57
50
|
if (it) o = it;
|
|
58
51
|
var i = 0;
|
|
@@ -66,7 +59,6 @@ function _createForOfIteratorHelperLoose(o, allowArrayLike) {
|
|
|
66
59
|
};
|
|
67
60
|
};
|
|
68
61
|
}
|
|
69
|
-
|
|
70
62
|
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
71
63
|
}
|
|
72
64
|
|
|
@@ -112,11 +104,9 @@ var escapeReplacements = {
|
|
|
112
104
|
'"': '"',
|
|
113
105
|
"'": '''
|
|
114
106
|
};
|
|
115
|
-
|
|
116
107
|
var getEscapeReplacement = function getEscapeReplacement(ch) {
|
|
117
108
|
return escapeReplacements[ch];
|
|
118
109
|
};
|
|
119
|
-
|
|
120
110
|
function escape(html, encode) {
|
|
121
111
|
if (encode) {
|
|
122
112
|
if (escapeTest.test(html)) {
|
|
@@ -127,33 +117,30 @@ function escape(html, encode) {
|
|
|
127
117
|
return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
|
|
128
118
|
}
|
|
129
119
|
}
|
|
130
|
-
|
|
131
120
|
return html;
|
|
132
121
|
}
|
|
133
122
|
var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
|
|
123
|
+
|
|
134
124
|
/**
|
|
135
125
|
* @param {string} html
|
|
136
126
|
*/
|
|
137
|
-
|
|
138
127
|
function unescape(html) {
|
|
139
128
|
// explicitly match decimal, hex, and named HTML entities
|
|
140
129
|
return html.replace(unescapeTest, function (_, n) {
|
|
141
130
|
n = n.toLowerCase();
|
|
142
131
|
if (n === 'colon') return ':';
|
|
143
|
-
|
|
144
132
|
if (n.charAt(0) === '#') {
|
|
145
133
|
return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));
|
|
146
134
|
}
|
|
147
|
-
|
|
148
135
|
return '';
|
|
149
136
|
});
|
|
150
137
|
}
|
|
151
138
|
var caret = /(^|[^\[])\^/g;
|
|
139
|
+
|
|
152
140
|
/**
|
|
153
141
|
* @param {string | RegExp} regex
|
|
154
142
|
* @param {string} opt
|
|
155
143
|
*/
|
|
156
|
-
|
|
157
144
|
function edit(regex, opt) {
|
|
158
145
|
regex = typeof regex === 'string' ? regex : regex.source;
|
|
159
146
|
opt = opt || '';
|
|
@@ -172,48 +159,43 @@ function edit(regex, opt) {
|
|
|
172
159
|
}
|
|
173
160
|
var nonWordAndColonTest = /[^\w:]/g;
|
|
174
161
|
var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
|
|
162
|
+
|
|
175
163
|
/**
|
|
176
164
|
* @param {boolean} sanitize
|
|
177
165
|
* @param {string} base
|
|
178
166
|
* @param {string} href
|
|
179
167
|
*/
|
|
180
|
-
|
|
181
168
|
function cleanUrl(sanitize, base, href) {
|
|
182
169
|
if (sanitize) {
|
|
183
170
|
var prot;
|
|
184
|
-
|
|
185
171
|
try {
|
|
186
172
|
prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();
|
|
187
173
|
} catch (e) {
|
|
188
174
|
return null;
|
|
189
175
|
}
|
|
190
|
-
|
|
191
176
|
if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
|
|
192
177
|
return null;
|
|
193
178
|
}
|
|
194
179
|
}
|
|
195
|
-
|
|
196
180
|
if (base && !originIndependentUrl.test(href)) {
|
|
197
181
|
href = resolveUrl(base, href);
|
|
198
182
|
}
|
|
199
|
-
|
|
200
183
|
try {
|
|
201
184
|
href = encodeURI(href).replace(/%25/g, '%');
|
|
202
185
|
} catch (e) {
|
|
203
186
|
return null;
|
|
204
187
|
}
|
|
205
|
-
|
|
206
188
|
return href;
|
|
207
189
|
}
|
|
208
190
|
var baseUrls = {};
|
|
209
191
|
var justDomain = /^[^:]+:\/*[^/]*$/;
|
|
210
192
|
var protocol = /^([^:]+:)[\s\S]*$/;
|
|
211
193
|
var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
|
|
194
|
+
|
|
212
195
|
/**
|
|
213
196
|
* @param {string} base
|
|
214
197
|
* @param {string} href
|
|
215
198
|
*/
|
|
216
|
-
|
|
217
199
|
function resolveUrl(base, href) {
|
|
218
200
|
if (!baseUrls[' ' + base]) {
|
|
219
201
|
// we can ignore everything in base after the last slash of its path component,
|
|
@@ -225,21 +207,17 @@ function resolveUrl(base, href) {
|
|
|
225
207
|
baseUrls[' ' + base] = rtrim(base, '/', true);
|
|
226
208
|
}
|
|
227
209
|
}
|
|
228
|
-
|
|
229
210
|
base = baseUrls[' ' + base];
|
|
230
211
|
var relativeBase = base.indexOf(':') === -1;
|
|
231
|
-
|
|
232
212
|
if (href.substring(0, 2) === '//') {
|
|
233
213
|
if (relativeBase) {
|
|
234
214
|
return href;
|
|
235
215
|
}
|
|
236
|
-
|
|
237
216
|
return base.replace(protocol, '$1') + href;
|
|
238
217
|
} else if (href.charAt(0) === '/') {
|
|
239
218
|
if (relativeBase) {
|
|
240
219
|
return href;
|
|
241
220
|
}
|
|
242
|
-
|
|
243
221
|
return base.replace(domain, '$1') + href;
|
|
244
222
|
} else {
|
|
245
223
|
return base + href;
|
|
@@ -250,52 +228,46 @@ var noopTest = {
|
|
|
250
228
|
};
|
|
251
229
|
function merge(obj) {
|
|
252
230
|
var i = 1,
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
231
|
+
target,
|
|
232
|
+
key;
|
|
256
233
|
for (; i < arguments.length; i++) {
|
|
257
234
|
target = arguments[i];
|
|
258
|
-
|
|
259
235
|
for (key in target) {
|
|
260
236
|
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
261
237
|
obj[key] = target[key];
|
|
262
238
|
}
|
|
263
239
|
}
|
|
264
240
|
}
|
|
265
|
-
|
|
266
241
|
return obj;
|
|
267
242
|
}
|
|
268
243
|
function splitCells(tableRow, count) {
|
|
269
244
|
// ensure that every cell-delimiting pipe has a space
|
|
270
245
|
// before it to distinguish it from an escaped pipe
|
|
271
246
|
var row = tableRow.replace(/\|/g, function (match, offset, str) {
|
|
272
|
-
|
|
247
|
+
var escaped = false,
|
|
273
248
|
curr = offset;
|
|
249
|
+
while (--curr >= 0 && str[curr] === '\\') {
|
|
250
|
+
escaped = !escaped;
|
|
251
|
+
}
|
|
252
|
+
if (escaped) {
|
|
253
|
+
// odd number of slashes means | is escaped
|
|
254
|
+
// so we leave it alone
|
|
255
|
+
return '|';
|
|
256
|
+
} else {
|
|
257
|
+
// add space before unescaped |
|
|
258
|
+
return ' |';
|
|
259
|
+
}
|
|
260
|
+
}),
|
|
261
|
+
cells = row.split(/ \|/);
|
|
262
|
+
var i = 0;
|
|
274
263
|
|
|
275
|
-
|
|
276
|
-
escaped = !escaped;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
if (escaped) {
|
|
280
|
-
// odd number of slashes means | is escaped
|
|
281
|
-
// so we leave it alone
|
|
282
|
-
return '|';
|
|
283
|
-
} else {
|
|
284
|
-
// add space before unescaped |
|
|
285
|
-
return ' |';
|
|
286
|
-
}
|
|
287
|
-
}),
|
|
288
|
-
cells = row.split(/ \|/);
|
|
289
|
-
var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe
|
|
290
|
-
|
|
264
|
+
// First/last cell in a row cannot be empty if it has no leading/trailing pipe
|
|
291
265
|
if (!cells[0].trim()) {
|
|
292
266
|
cells.shift();
|
|
293
267
|
}
|
|
294
|
-
|
|
295
268
|
if (cells.length > 0 && !cells[cells.length - 1].trim()) {
|
|
296
269
|
cells.pop();
|
|
297
270
|
}
|
|
298
|
-
|
|
299
271
|
if (cells.length > count) {
|
|
300
272
|
cells.splice(count);
|
|
301
273
|
} else {
|
|
@@ -303,14 +275,13 @@ function splitCells(tableRow, count) {
|
|
|
303
275
|
cells.push('');
|
|
304
276
|
}
|
|
305
277
|
}
|
|
306
|
-
|
|
307
278
|
for (; i < cells.length; i++) {
|
|
308
279
|
// leading or trailing whitespace is ignored per the gfm spec
|
|
309
280
|
cells[i] = cells[i].trim().replace(/\\\|/g, '|');
|
|
310
281
|
}
|
|
311
|
-
|
|
312
282
|
return cells;
|
|
313
283
|
}
|
|
284
|
+
|
|
314
285
|
/**
|
|
315
286
|
* Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
|
|
316
287
|
* /c*$/ is vulnerable to REDOS.
|
|
@@ -319,20 +290,18 @@ function splitCells(tableRow, count) {
|
|
|
319
290
|
* @param {string} c
|
|
320
291
|
* @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.
|
|
321
292
|
*/
|
|
322
|
-
|
|
323
293
|
function rtrim(str, c, invert) {
|
|
324
294
|
var l = str.length;
|
|
325
|
-
|
|
326
295
|
if (l === 0) {
|
|
327
296
|
return '';
|
|
328
|
-
}
|
|
329
|
-
|
|
297
|
+
}
|
|
330
298
|
|
|
331
|
-
|
|
299
|
+
// Length of suffix matching the invert condition.
|
|
300
|
+
var suffLen = 0;
|
|
332
301
|
|
|
302
|
+
// Step left until we fail to match the invert condition.
|
|
333
303
|
while (suffLen < l) {
|
|
334
304
|
var currChar = str.charAt(l - suffLen - 1);
|
|
335
|
-
|
|
336
305
|
if (currChar === c && !invert) {
|
|
337
306
|
suffLen++;
|
|
338
307
|
} else if (currChar !== c && invert) {
|
|
@@ -341,18 +310,15 @@ function rtrim(str, c, invert) {
|
|
|
341
310
|
break;
|
|
342
311
|
}
|
|
343
312
|
}
|
|
344
|
-
|
|
345
313
|
return str.slice(0, l - suffLen);
|
|
346
314
|
}
|
|
347
315
|
function findClosingBracket(str, b) {
|
|
348
316
|
if (str.indexOf(b[1]) === -1) {
|
|
349
317
|
return -1;
|
|
350
318
|
}
|
|
351
|
-
|
|
352
319
|
var l = str.length;
|
|
353
320
|
var level = 0,
|
|
354
|
-
|
|
355
|
-
|
|
321
|
+
i = 0;
|
|
356
322
|
for (; i < l; i++) {
|
|
357
323
|
if (str[i] === '\\') {
|
|
358
324
|
i++;
|
|
@@ -360,42 +326,36 @@ function findClosingBracket(str, b) {
|
|
|
360
326
|
level++;
|
|
361
327
|
} else if (str[i] === b[1]) {
|
|
362
328
|
level--;
|
|
363
|
-
|
|
364
329
|
if (level < 0) {
|
|
365
330
|
return i;
|
|
366
331
|
}
|
|
367
332
|
}
|
|
368
333
|
}
|
|
369
|
-
|
|
370
334
|
return -1;
|
|
371
335
|
}
|
|
372
336
|
function checkSanitizeDeprecation(opt) {
|
|
373
337
|
if (opt && opt.sanitize && !opt.silent) {
|
|
374
338
|
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');
|
|
375
339
|
}
|
|
376
|
-
}
|
|
340
|
+
}
|
|
377
341
|
|
|
342
|
+
// copied from https://stackoverflow.com/a/5450113/806777
|
|
378
343
|
/**
|
|
379
344
|
* @param {string} pattern
|
|
380
345
|
* @param {number} count
|
|
381
346
|
*/
|
|
382
|
-
|
|
383
347
|
function repeatString(pattern, count) {
|
|
384
348
|
if (count < 1) {
|
|
385
349
|
return '';
|
|
386
350
|
}
|
|
387
|
-
|
|
388
351
|
var result = '';
|
|
389
|
-
|
|
390
352
|
while (count > 1) {
|
|
391
353
|
if (count & 1) {
|
|
392
354
|
result += pattern;
|
|
393
355
|
}
|
|
394
|
-
|
|
395
356
|
count >>= 1;
|
|
396
357
|
pattern += pattern;
|
|
397
358
|
}
|
|
398
|
-
|
|
399
359
|
return result + pattern;
|
|
400
360
|
}
|
|
401
361
|
|
|
@@ -403,7 +363,6 @@ function outputLink(cap, link, raw, lexer) {
|
|
|
403
363
|
var href = link.href;
|
|
404
364
|
var title = link.title ? escape(link.title) : null;
|
|
405
365
|
var text = cap[1].replace(/\\([\[\]])/g, '$1');
|
|
406
|
-
|
|
407
366
|
if (cap[0].charAt(0) !== '!') {
|
|
408
367
|
lexer.state.inLink = true;
|
|
409
368
|
var token = {
|
|
@@ -417,7 +376,6 @@ function outputLink(cap, link, raw, lexer) {
|
|
|
417
376
|
lexer.state.inLink = false;
|
|
418
377
|
return token;
|
|
419
378
|
}
|
|
420
|
-
|
|
421
379
|
return {
|
|
422
380
|
type: 'image',
|
|
423
381
|
raw: raw,
|
|
@@ -426,46 +384,35 @@ function outputLink(cap, link, raw, lexer) {
|
|
|
426
384
|
text: escape(text)
|
|
427
385
|
};
|
|
428
386
|
}
|
|
429
|
-
|
|
430
387
|
function indentCodeCompensation(raw, text) {
|
|
431
388
|
var matchIndentToCode = raw.match(/^(\s+)(?:```)/);
|
|
432
|
-
|
|
433
389
|
if (matchIndentToCode === null) {
|
|
434
390
|
return text;
|
|
435
391
|
}
|
|
436
|
-
|
|
437
392
|
var indentToCode = matchIndentToCode[1];
|
|
438
393
|
return text.split('\n').map(function (node) {
|
|
439
394
|
var matchIndentInNode = node.match(/^\s+/);
|
|
440
|
-
|
|
441
395
|
if (matchIndentInNode === null) {
|
|
442
396
|
return node;
|
|
443
397
|
}
|
|
444
|
-
|
|
445
398
|
var indentInNode = matchIndentInNode[0];
|
|
446
|
-
|
|
447
399
|
if (indentInNode.length >= indentToCode.length) {
|
|
448
400
|
return node.slice(indentToCode.length);
|
|
449
401
|
}
|
|
450
|
-
|
|
451
402
|
return node;
|
|
452
403
|
}).join('\n');
|
|
453
404
|
}
|
|
405
|
+
|
|
454
406
|
/**
|
|
455
407
|
* Tokenizer
|
|
456
408
|
*/
|
|
457
|
-
|
|
458
|
-
|
|
459
409
|
var Tokenizer = /*#__PURE__*/function () {
|
|
460
410
|
function Tokenizer(options) {
|
|
461
411
|
this.options = options || exports.defaults;
|
|
462
412
|
}
|
|
463
|
-
|
|
464
413
|
var _proto = Tokenizer.prototype;
|
|
465
|
-
|
|
466
414
|
_proto.space = function space(src) {
|
|
467
415
|
var cap = this.rules.block.newline.exec(src);
|
|
468
|
-
|
|
469
416
|
if (cap && cap[0].length > 0) {
|
|
470
417
|
return {
|
|
471
418
|
type: 'space',
|
|
@@ -473,10 +420,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
473
420
|
};
|
|
474
421
|
}
|
|
475
422
|
};
|
|
476
|
-
|
|
477
423
|
_proto.code = function code(src) {
|
|
478
424
|
var cap = this.rules.block.code.exec(src);
|
|
479
|
-
|
|
480
425
|
if (cap) {
|
|
481
426
|
var text = cap[0].replace(/^ {1,4}/gm, '');
|
|
482
427
|
return {
|
|
@@ -487,10 +432,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
487
432
|
};
|
|
488
433
|
}
|
|
489
434
|
};
|
|
490
|
-
|
|
491
435
|
_proto.fences = function fences(src) {
|
|
492
436
|
var cap = this.rules.block.fences.exec(src);
|
|
493
|
-
|
|
494
437
|
if (cap) {
|
|
495
438
|
var raw = cap[0];
|
|
496
439
|
var text = indentCodeCompensation(raw, cap[3] || '');
|
|
@@ -502,16 +445,14 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
502
445
|
};
|
|
503
446
|
}
|
|
504
447
|
};
|
|
505
|
-
|
|
506
448
|
_proto.heading = function heading(src) {
|
|
507
449
|
var cap = this.rules.block.heading.exec(src);
|
|
508
|
-
|
|
509
450
|
if (cap) {
|
|
510
|
-
var text = cap[2].trim();
|
|
451
|
+
var text = cap[2].trim();
|
|
511
452
|
|
|
453
|
+
// remove trailing #s
|
|
512
454
|
if (/#$/.test(text)) {
|
|
513
455
|
var trimmed = rtrim(text, '#');
|
|
514
|
-
|
|
515
456
|
if (this.options.pedantic) {
|
|
516
457
|
text = trimmed.trim();
|
|
517
458
|
} else if (!trimmed || / $/.test(trimmed)) {
|
|
@@ -519,7 +460,6 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
519
460
|
text = trimmed.trim();
|
|
520
461
|
}
|
|
521
462
|
}
|
|
522
|
-
|
|
523
463
|
return {
|
|
524
464
|
type: 'heading',
|
|
525
465
|
raw: cap[0],
|
|
@@ -529,10 +469,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
529
469
|
};
|
|
530
470
|
}
|
|
531
471
|
};
|
|
532
|
-
|
|
533
472
|
_proto.hr = function hr(src) {
|
|
534
473
|
var cap = this.rules.block.hr.exec(src);
|
|
535
|
-
|
|
536
474
|
if (cap) {
|
|
537
475
|
return {
|
|
538
476
|
type: 'hr',
|
|
@@ -540,10 +478,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
540
478
|
};
|
|
541
479
|
}
|
|
542
480
|
};
|
|
543
|
-
|
|
544
481
|
_proto.blockquote = function blockquote(src) {
|
|
545
482
|
var cap = this.rules.block.blockquote.exec(src);
|
|
546
|
-
|
|
547
483
|
if (cap) {
|
|
548
484
|
var text = cap[0].replace(/^ *>[ \t]?/gm, '');
|
|
549
485
|
return {
|
|
@@ -554,10 +490,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
554
490
|
};
|
|
555
491
|
}
|
|
556
492
|
};
|
|
557
|
-
|
|
558
493
|
_proto.list = function list(src) {
|
|
559
494
|
var cap = this.rules.block.list.exec(src);
|
|
560
|
-
|
|
561
495
|
if (cap) {
|
|
562
496
|
var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;
|
|
563
497
|
var bull = cap[1].trim();
|
|
@@ -571,86 +505,78 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
571
505
|
items: []
|
|
572
506
|
};
|
|
573
507
|
bull = isordered ? "\\d{1,9}\\" + bull.slice(-1) : "\\" + bull;
|
|
574
|
-
|
|
575
508
|
if (this.options.pedantic) {
|
|
576
509
|
bull = isordered ? bull : '[*+-]';
|
|
577
|
-
}
|
|
578
|
-
|
|
510
|
+
}
|
|
579
511
|
|
|
580
|
-
|
|
512
|
+
// Get next list item
|
|
513
|
+
var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))");
|
|
581
514
|
|
|
515
|
+
// Check if current bullet point can start a new List Item
|
|
582
516
|
while (src) {
|
|
583
517
|
endEarly = false;
|
|
584
|
-
|
|
585
518
|
if (!(cap = itemRegex.exec(src))) {
|
|
586
519
|
break;
|
|
587
520
|
}
|
|
588
|
-
|
|
589
521
|
if (this.rules.block.hr.test(src)) {
|
|
590
522
|
// End list if bullet was actually HR (possibly move into itemRegex?)
|
|
591
523
|
break;
|
|
592
524
|
}
|
|
593
|
-
|
|
594
525
|
raw = cap[0];
|
|
595
526
|
src = src.substring(raw.length);
|
|
596
527
|
line = cap[2].split('\n', 1)[0];
|
|
597
528
|
nextLine = src.split('\n', 1)[0];
|
|
598
|
-
|
|
599
529
|
if (this.options.pedantic) {
|
|
600
530
|
indent = 2;
|
|
601
531
|
itemContents = line.trimLeft();
|
|
602
532
|
} else {
|
|
603
533
|
indent = cap[2].search(/[^ ]/); // Find first non-space char
|
|
604
|
-
|
|
605
534
|
indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
|
|
606
|
-
|
|
607
535
|
itemContents = line.slice(indent);
|
|
608
536
|
indent += cap[1].length;
|
|
609
537
|
}
|
|
610
|
-
|
|
611
538
|
blankLine = false;
|
|
612
|
-
|
|
613
539
|
if (!line && /^ *$/.test(nextLine)) {
|
|
614
540
|
// Items begin with at most one blank line
|
|
615
541
|
raw += nextLine + '\n';
|
|
616
542
|
src = src.substring(nextLine.length + 1);
|
|
617
543
|
endEarly = true;
|
|
618
544
|
}
|
|
619
|
-
|
|
620
545
|
if (!endEarly) {
|
|
621
546
|
var nextBulletRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))");
|
|
622
547
|
var hrRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)");
|
|
623
548
|
var fencesBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:```|~~~)");
|
|
624
|
-
var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#");
|
|
549
|
+
var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#");
|
|
625
550
|
|
|
551
|
+
// Check if following lines should be included in List Item
|
|
626
552
|
while (src) {
|
|
627
553
|
rawLine = src.split('\n', 1)[0];
|
|
628
|
-
line = rawLine;
|
|
554
|
+
line = rawLine;
|
|
629
555
|
|
|
556
|
+
// Re-align to follow commonmark nesting rules
|
|
630
557
|
if (this.options.pedantic) {
|
|
631
558
|
line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');
|
|
632
|
-
}
|
|
633
|
-
|
|
559
|
+
}
|
|
634
560
|
|
|
561
|
+
// End list item if found code fences
|
|
635
562
|
if (fencesBeginRegex.test(line)) {
|
|
636
563
|
break;
|
|
637
|
-
}
|
|
638
|
-
|
|
564
|
+
}
|
|
639
565
|
|
|
566
|
+
// End list item if found start of new heading
|
|
640
567
|
if (headingBeginRegex.test(line)) {
|
|
641
568
|
break;
|
|
642
|
-
}
|
|
643
|
-
|
|
569
|
+
}
|
|
644
570
|
|
|
571
|
+
// End list item if found start of new bullet
|
|
645
572
|
if (nextBulletRegex.test(line)) {
|
|
646
573
|
break;
|
|
647
|
-
}
|
|
648
|
-
|
|
574
|
+
}
|
|
649
575
|
|
|
576
|
+
// Horizontal rule found
|
|
650
577
|
if (hrRegex.test(src)) {
|
|
651
578
|
break;
|
|
652
579
|
}
|
|
653
|
-
|
|
654
580
|
if (line.search(/[^ ]/) >= indent || !line.trim()) {
|
|
655
581
|
// Dedent if possible
|
|
656
582
|
itemContents += '\n' + line.slice(indent);
|
|
@@ -661,17 +587,14 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
661
587
|
// Otherwise, improper indentation ends this item
|
|
662
588
|
break;
|
|
663
589
|
}
|
|
664
|
-
|
|
665
590
|
if (!blankLine && !line.trim()) {
|
|
666
591
|
// Check if current line is blank
|
|
667
592
|
blankLine = true;
|
|
668
593
|
}
|
|
669
|
-
|
|
670
594
|
raw += rawLine + '\n';
|
|
671
595
|
src = src.substring(rawLine.length + 1);
|
|
672
596
|
}
|
|
673
597
|
}
|
|
674
|
-
|
|
675
598
|
if (!list.loose) {
|
|
676
599
|
// If the previous item ended with a blank line, the list is loose
|
|
677
600
|
if (endsWithBlankLine) {
|
|
@@ -679,18 +602,16 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
679
602
|
} else if (/\n *\n *$/.test(raw)) {
|
|
680
603
|
endsWithBlankLine = true;
|
|
681
604
|
}
|
|
682
|
-
}
|
|
683
|
-
|
|
605
|
+
}
|
|
684
606
|
|
|
607
|
+
// Check for task list items
|
|
685
608
|
if (this.options.gfm) {
|
|
686
609
|
istask = /^\[[ xX]\] /.exec(itemContents);
|
|
687
|
-
|
|
688
610
|
if (istask) {
|
|
689
611
|
ischecked = istask[0] !== '[ ] ';
|
|
690
612
|
itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
|
|
691
613
|
}
|
|
692
614
|
}
|
|
693
|
-
|
|
694
615
|
list.items.push({
|
|
695
616
|
type: 'list_item',
|
|
696
617
|
raw: raw,
|
|
@@ -700,14 +621,15 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
700
621
|
text: itemContents
|
|
701
622
|
});
|
|
702
623
|
list.raw += raw;
|
|
703
|
-
}
|
|
704
|
-
|
|
624
|
+
}
|
|
705
625
|
|
|
626
|
+
// Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
|
|
706
627
|
list.items[list.items.length - 1].raw = raw.trimRight();
|
|
707
628
|
list.items[list.items.length - 1].text = itemContents.trimRight();
|
|
708
629
|
list.raw = list.raw.trimRight();
|
|
709
|
-
var l = list.items.length;
|
|
630
|
+
var l = list.items.length;
|
|
710
631
|
|
|
632
|
+
// Item child tokens handled here at end because we needed to have the final item to trim it first
|
|
711
633
|
for (i = 0; i < l; i++) {
|
|
712
634
|
this.lexer.state.top = false;
|
|
713
635
|
list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
|
|
@@ -717,36 +639,28 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
717
639
|
var hasMultipleLineBreaks = spacers.every(function (t) {
|
|
718
640
|
var chars = t.raw.split('');
|
|
719
641
|
var lineBreaks = 0;
|
|
720
|
-
|
|
721
642
|
for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) {
|
|
722
643
|
var _char = _step.value;
|
|
723
|
-
|
|
724
644
|
if (_char === '\n') {
|
|
725
645
|
lineBreaks += 1;
|
|
726
646
|
}
|
|
727
|
-
|
|
728
647
|
if (lineBreaks > 1) {
|
|
729
648
|
return true;
|
|
730
649
|
}
|
|
731
650
|
}
|
|
732
|
-
|
|
733
651
|
return false;
|
|
734
652
|
});
|
|
735
|
-
|
|
736
653
|
if (!list.loose && spacers.length && hasMultipleLineBreaks) {
|
|
737
654
|
// Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
|
|
738
655
|
list.loose = true;
|
|
739
656
|
list.items[i].loose = true;
|
|
740
657
|
}
|
|
741
658
|
}
|
|
742
|
-
|
|
743
659
|
return list;
|
|
744
660
|
}
|
|
745
661
|
};
|
|
746
|
-
|
|
747
662
|
_proto.html = function html(src) {
|
|
748
663
|
var cap = this.rules.block.html.exec(src);
|
|
749
|
-
|
|
750
664
|
if (cap) {
|
|
751
665
|
var token = {
|
|
752
666
|
type: 'html',
|
|
@@ -754,21 +668,17 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
754
668
|
pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
|
|
755
669
|
text: cap[0]
|
|
756
670
|
};
|
|
757
|
-
|
|
758
671
|
if (this.options.sanitize) {
|
|
759
672
|
var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);
|
|
760
673
|
token.type = 'paragraph';
|
|
761
674
|
token.text = text;
|
|
762
675
|
token.tokens = this.lexer.inline(text);
|
|
763
676
|
}
|
|
764
|
-
|
|
765
677
|
return token;
|
|
766
678
|
}
|
|
767
679
|
};
|
|
768
|
-
|
|
769
680
|
_proto.def = function def(src) {
|
|
770
681
|
var cap = this.rules.block.def.exec(src);
|
|
771
|
-
|
|
772
682
|
if (cap) {
|
|
773
683
|
if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
|
|
774
684
|
var tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
|
|
@@ -781,10 +691,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
781
691
|
};
|
|
782
692
|
}
|
|
783
693
|
};
|
|
784
|
-
|
|
785
694
|
_proto.table = function table(src) {
|
|
786
695
|
var cap = this.rules.block.table.exec(src);
|
|
787
|
-
|
|
788
696
|
if (cap) {
|
|
789
697
|
var item = {
|
|
790
698
|
type: 'table',
|
|
@@ -796,12 +704,10 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
796
704
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
|
797
705
|
rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []
|
|
798
706
|
};
|
|
799
|
-
|
|
800
707
|
if (item.header.length === item.align.length) {
|
|
801
708
|
item.raw = cap[0];
|
|
802
709
|
var l = item.align.length;
|
|
803
710
|
var i, j, k, row;
|
|
804
|
-
|
|
805
711
|
for (i = 0; i < l; i++) {
|
|
806
712
|
if (/^ *-+: *$/.test(item.align[i])) {
|
|
807
713
|
item.align[i] = 'right';
|
|
@@ -813,44 +719,37 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
813
719
|
item.align[i] = null;
|
|
814
720
|
}
|
|
815
721
|
}
|
|
816
|
-
|
|
817
722
|
l = item.rows.length;
|
|
818
|
-
|
|
819
723
|
for (i = 0; i < l; i++) {
|
|
820
724
|
item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {
|
|
821
725
|
return {
|
|
822
726
|
text: c
|
|
823
727
|
};
|
|
824
728
|
});
|
|
825
|
-
}
|
|
826
|
-
// header child tokens
|
|
729
|
+
}
|
|
827
730
|
|
|
731
|
+
// parse child tokens inside headers and cells
|
|
828
732
|
|
|
733
|
+
// header child tokens
|
|
829
734
|
l = item.header.length;
|
|
830
|
-
|
|
831
735
|
for (j = 0; j < l; j++) {
|
|
832
736
|
item.header[j].tokens = this.lexer.inline(item.header[j].text);
|
|
833
|
-
}
|
|
834
|
-
|
|
737
|
+
}
|
|
835
738
|
|
|
739
|
+
// cell child tokens
|
|
836
740
|
l = item.rows.length;
|
|
837
|
-
|
|
838
741
|
for (j = 0; j < l; j++) {
|
|
839
742
|
row = item.rows[j];
|
|
840
|
-
|
|
841
743
|
for (k = 0; k < row.length; k++) {
|
|
842
744
|
row[k].tokens = this.lexer.inline(row[k].text);
|
|
843
745
|
}
|
|
844
746
|
}
|
|
845
|
-
|
|
846
747
|
return item;
|
|
847
748
|
}
|
|
848
749
|
}
|
|
849
750
|
};
|
|
850
|
-
|
|
851
751
|
_proto.lheading = function lheading(src) {
|
|
852
752
|
var cap = this.rules.block.lheading.exec(src);
|
|
853
|
-
|
|
854
753
|
if (cap) {
|
|
855
754
|
return {
|
|
856
755
|
type: 'heading',
|
|
@@ -861,10 +760,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
861
760
|
};
|
|
862
761
|
}
|
|
863
762
|
};
|
|
864
|
-
|
|
865
763
|
_proto.paragraph = function paragraph(src) {
|
|
866
764
|
var cap = this.rules.block.paragraph.exec(src);
|
|
867
|
-
|
|
868
765
|
if (cap) {
|
|
869
766
|
var text = cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1];
|
|
870
767
|
return {
|
|
@@ -875,10 +772,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
875
772
|
};
|
|
876
773
|
}
|
|
877
774
|
};
|
|
878
|
-
|
|
879
775
|
_proto.text = function text(src) {
|
|
880
776
|
var cap = this.rules.block.text.exec(src);
|
|
881
|
-
|
|
882
777
|
if (cap) {
|
|
883
778
|
return {
|
|
884
779
|
type: 'text',
|
|
@@ -888,10 +783,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
888
783
|
};
|
|
889
784
|
}
|
|
890
785
|
};
|
|
891
|
-
|
|
892
786
|
_proto.escape = function escape$1(src) {
|
|
893
787
|
var cap = this.rules.inline.escape.exec(src);
|
|
894
|
-
|
|
895
788
|
if (cap) {
|
|
896
789
|
return {
|
|
897
790
|
type: 'escape',
|
|
@@ -900,23 +793,19 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
900
793
|
};
|
|
901
794
|
}
|
|
902
795
|
};
|
|
903
|
-
|
|
904
796
|
_proto.tag = function tag(src) {
|
|
905
797
|
var cap = this.rules.inline.tag.exec(src);
|
|
906
|
-
|
|
907
798
|
if (cap) {
|
|
908
799
|
if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
|
|
909
800
|
this.lexer.state.inLink = true;
|
|
910
801
|
} else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
|
|
911
802
|
this.lexer.state.inLink = false;
|
|
912
803
|
}
|
|
913
|
-
|
|
914
804
|
if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
915
805
|
this.lexer.state.inRawBlock = true;
|
|
916
806
|
} else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
917
807
|
this.lexer.state.inRawBlock = false;
|
|
918
808
|
}
|
|
919
|
-
|
|
920
809
|
return {
|
|
921
810
|
type: this.options.sanitize ? 'text' : 'html',
|
|
922
811
|
raw: cap[0],
|
|
@@ -926,29 +815,24 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
926
815
|
};
|
|
927
816
|
}
|
|
928
817
|
};
|
|
929
|
-
|
|
930
818
|
_proto.link = function link(src) {
|
|
931
819
|
var cap = this.rules.inline.link.exec(src);
|
|
932
|
-
|
|
933
820
|
if (cap) {
|
|
934
821
|
var trimmedUrl = cap[2].trim();
|
|
935
|
-
|
|
936
822
|
if (!this.options.pedantic && /^</.test(trimmedUrl)) {
|
|
937
823
|
// commonmark requires matching angle brackets
|
|
938
824
|
if (!/>$/.test(trimmedUrl)) {
|
|
939
825
|
return;
|
|
940
|
-
}
|
|
941
|
-
|
|
826
|
+
}
|
|
942
827
|
|
|
828
|
+
// ending angle bracket cannot be escaped
|
|
943
829
|
var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');
|
|
944
|
-
|
|
945
830
|
if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
|
|
946
831
|
return;
|
|
947
832
|
}
|
|
948
833
|
} else {
|
|
949
834
|
// find closing parenthesis
|
|
950
835
|
var lastParenIndex = findClosingBracket(cap[2], '()');
|
|
951
|
-
|
|
952
836
|
if (lastParenIndex > -1) {
|
|
953
837
|
var start = cap[0].indexOf('!') === 0 ? 5 : 4;
|
|
954
838
|
var linkLen = start + cap[1].length + lastParenIndex;
|
|
@@ -957,14 +841,11 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
957
841
|
cap[3] = '';
|
|
958
842
|
}
|
|
959
843
|
}
|
|
960
|
-
|
|
961
844
|
var href = cap[2];
|
|
962
845
|
var title = '';
|
|
963
|
-
|
|
964
846
|
if (this.options.pedantic) {
|
|
965
847
|
// split pedantic href and title
|
|
966
848
|
var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
|
|
967
|
-
|
|
968
849
|
if (link) {
|
|
969
850
|
href = link[1];
|
|
970
851
|
title = link[3];
|
|
@@ -972,9 +853,7 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
972
853
|
} else {
|
|
973
854
|
title = cap[3] ? cap[3].slice(1, -1) : '';
|
|
974
855
|
}
|
|
975
|
-
|
|
976
856
|
href = href.trim();
|
|
977
|
-
|
|
978
857
|
if (/^</.test(href)) {
|
|
979
858
|
if (this.options.pedantic && !/>$/.test(trimmedUrl)) {
|
|
980
859
|
// pedantic allows starting angle bracket without ending angle bracket
|
|
@@ -983,21 +862,17 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
983
862
|
href = href.slice(1, -1);
|
|
984
863
|
}
|
|
985
864
|
}
|
|
986
|
-
|
|
987
865
|
return outputLink(cap, {
|
|
988
866
|
href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
|
|
989
867
|
title: title ? title.replace(this.rules.inline._escapes, '$1') : title
|
|
990
868
|
}, cap[0], this.lexer);
|
|
991
869
|
}
|
|
992
870
|
};
|
|
993
|
-
|
|
994
871
|
_proto.reflink = function reflink(src, links) {
|
|
995
872
|
var cap;
|
|
996
|
-
|
|
997
873
|
if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {
|
|
998
874
|
var link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
|
|
999
875
|
link = links[link.toLowerCase()];
|
|
1000
|
-
|
|
1001
876
|
if (!link || !link.href) {
|
|
1002
877
|
var text = cap[0].charAt(0);
|
|
1003
878
|
return {
|
|
@@ -1006,39 +881,35 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1006
881
|
text: text
|
|
1007
882
|
};
|
|
1008
883
|
}
|
|
1009
|
-
|
|
1010
884
|
return outputLink(cap, link, cap[0], this.lexer);
|
|
1011
885
|
}
|
|
1012
886
|
};
|
|
1013
|
-
|
|
1014
887
|
_proto.emStrong = function emStrong(src, maskedSrc, prevChar) {
|
|
1015
888
|
if (prevChar === void 0) {
|
|
1016
889
|
prevChar = '';
|
|
1017
890
|
}
|
|
1018
|
-
|
|
1019
891
|
var match = this.rules.inline.emStrong.lDelim.exec(src);
|
|
1020
|
-
if (!match) return;
|
|
892
|
+
if (!match) return;
|
|
1021
893
|
|
|
894
|
+
// _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
|
|
1022
895
|
if (match[3] && prevChar.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/)) return;
|
|
1023
896
|
var nextChar = match[1] || match[2] || '';
|
|
1024
|
-
|
|
1025
897
|
if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {
|
|
1026
898
|
var lLength = match[0].length - 1;
|
|
1027
899
|
var rDelim,
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
900
|
+
rLength,
|
|
901
|
+
delimTotal = lLength,
|
|
902
|
+
midDelimTotal = 0;
|
|
1031
903
|
var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
|
|
1032
|
-
endReg.lastIndex = 0;
|
|
904
|
+
endReg.lastIndex = 0;
|
|
1033
905
|
|
|
906
|
+
// Clip maskedSrc to same section of string as src (move to lexer?)
|
|
1034
907
|
maskedSrc = maskedSrc.slice(-1 * src.length + lLength);
|
|
1035
|
-
|
|
1036
908
|
while ((match = endReg.exec(maskedSrc)) != null) {
|
|
1037
909
|
rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
|
|
1038
910
|
if (!rDelim) continue; // skip single * in __abc*abc__
|
|
1039
911
|
|
|
1040
912
|
rLength = rDelim.length;
|
|
1041
|
-
|
|
1042
913
|
if (match[3] || match[4]) {
|
|
1043
914
|
// found another Left Delim
|
|
1044
915
|
delimTotal += rLength;
|
|
@@ -1053,45 +924,42 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1053
924
|
|
|
1054
925
|
delimTotal -= rLength;
|
|
1055
926
|
if (delimTotal > 0) continue; // Haven't found enough closing delimiters
|
|
1056
|
-
// Remove extra characters. *a*** -> *a*
|
|
1057
927
|
|
|
1058
|
-
|
|
928
|
+
// Remove extra characters. *a*** -> *a*
|
|
929
|
+
rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);
|
|
930
|
+
var raw = src.slice(0, lLength + match.index + (match[0].length - rDelim.length) + rLength);
|
|
1059
931
|
|
|
932
|
+
// Create `em` if smallest delimiter has odd char count. *a***
|
|
1060
933
|
if (Math.min(lLength, rLength) % 2) {
|
|
1061
|
-
var _text =
|
|
1062
|
-
|
|
934
|
+
var _text = raw.slice(1, -1);
|
|
1063
935
|
return {
|
|
1064
936
|
type: 'em',
|
|
1065
|
-
raw:
|
|
937
|
+
raw: raw,
|
|
1066
938
|
text: _text,
|
|
1067
939
|
tokens: this.lexer.inlineTokens(_text)
|
|
1068
940
|
};
|
|
1069
|
-
}
|
|
1070
|
-
|
|
941
|
+
}
|
|
1071
942
|
|
|
1072
|
-
|
|
943
|
+
// Create 'strong' if smallest delimiter has even char count. **a***
|
|
944
|
+
var text = raw.slice(2, -2);
|
|
1073
945
|
return {
|
|
1074
946
|
type: 'strong',
|
|
1075
|
-
raw:
|
|
947
|
+
raw: raw,
|
|
1076
948
|
text: text,
|
|
1077
949
|
tokens: this.lexer.inlineTokens(text)
|
|
1078
950
|
};
|
|
1079
951
|
}
|
|
1080
952
|
}
|
|
1081
953
|
};
|
|
1082
|
-
|
|
1083
954
|
_proto.codespan = function codespan(src) {
|
|
1084
955
|
var cap = this.rules.inline.code.exec(src);
|
|
1085
|
-
|
|
1086
956
|
if (cap) {
|
|
1087
957
|
var text = cap[2].replace(/\n/g, ' ');
|
|
1088
958
|
var hasNonSpaceChars = /[^ ]/.test(text);
|
|
1089
959
|
var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
|
|
1090
|
-
|
|
1091
960
|
if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
|
|
1092
961
|
text = text.substring(1, text.length - 1);
|
|
1093
962
|
}
|
|
1094
|
-
|
|
1095
963
|
text = escape(text, true);
|
|
1096
964
|
return {
|
|
1097
965
|
type: 'codespan',
|
|
@@ -1100,10 +968,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1100
968
|
};
|
|
1101
969
|
}
|
|
1102
970
|
};
|
|
1103
|
-
|
|
1104
971
|
_proto.br = function br(src) {
|
|
1105
972
|
var cap = this.rules.inline.br.exec(src);
|
|
1106
|
-
|
|
1107
973
|
if (cap) {
|
|
1108
974
|
return {
|
|
1109
975
|
type: 'br',
|
|
@@ -1111,10 +977,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1111
977
|
};
|
|
1112
978
|
}
|
|
1113
979
|
};
|
|
1114
|
-
|
|
1115
980
|
_proto.del = function del(src) {
|
|
1116
981
|
var cap = this.rules.inline.del.exec(src);
|
|
1117
|
-
|
|
1118
982
|
if (cap) {
|
|
1119
983
|
return {
|
|
1120
984
|
type: 'del',
|
|
@@ -1124,13 +988,10 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1124
988
|
};
|
|
1125
989
|
}
|
|
1126
990
|
};
|
|
1127
|
-
|
|
1128
991
|
_proto.autolink = function autolink(src, mangle) {
|
|
1129
992
|
var cap = this.rules.inline.autolink.exec(src);
|
|
1130
|
-
|
|
1131
993
|
if (cap) {
|
|
1132
994
|
var text, href;
|
|
1133
|
-
|
|
1134
995
|
if (cap[2] === '@') {
|
|
1135
996
|
text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
|
|
1136
997
|
href = 'mailto:' + text;
|
|
@@ -1138,7 +999,6 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1138
999
|
text = escape(cap[1]);
|
|
1139
1000
|
href = text;
|
|
1140
1001
|
}
|
|
1141
|
-
|
|
1142
1002
|
return {
|
|
1143
1003
|
type: 'link',
|
|
1144
1004
|
raw: cap[0],
|
|
@@ -1152,34 +1012,27 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1152
1012
|
};
|
|
1153
1013
|
}
|
|
1154
1014
|
};
|
|
1155
|
-
|
|
1156
1015
|
_proto.url = function url(src, mangle) {
|
|
1157
1016
|
var cap;
|
|
1158
|
-
|
|
1159
1017
|
if (cap = this.rules.inline.url.exec(src)) {
|
|
1160
1018
|
var text, href;
|
|
1161
|
-
|
|
1162
1019
|
if (cap[2] === '@') {
|
|
1163
1020
|
text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
|
|
1164
1021
|
href = 'mailto:' + text;
|
|
1165
1022
|
} else {
|
|
1166
1023
|
// do extended autolink path validation
|
|
1167
1024
|
var prevCapZero;
|
|
1168
|
-
|
|
1169
1025
|
do {
|
|
1170
1026
|
prevCapZero = cap[0];
|
|
1171
1027
|
cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
|
|
1172
1028
|
} while (prevCapZero !== cap[0]);
|
|
1173
|
-
|
|
1174
1029
|
text = escape(cap[0]);
|
|
1175
|
-
|
|
1176
1030
|
if (cap[1] === 'www.') {
|
|
1177
1031
|
href = 'http://' + text;
|
|
1178
1032
|
} else {
|
|
1179
1033
|
href = text;
|
|
1180
1034
|
}
|
|
1181
1035
|
}
|
|
1182
|
-
|
|
1183
1036
|
return {
|
|
1184
1037
|
type: 'link',
|
|
1185
1038
|
raw: cap[0],
|
|
@@ -1193,19 +1046,15 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1193
1046
|
};
|
|
1194
1047
|
}
|
|
1195
1048
|
};
|
|
1196
|
-
|
|
1197
1049
|
_proto.inlineText = function inlineText(src, smartypants) {
|
|
1198
1050
|
var cap = this.rules.inline.text.exec(src);
|
|
1199
|
-
|
|
1200
1051
|
if (cap) {
|
|
1201
1052
|
var text;
|
|
1202
|
-
|
|
1203
1053
|
if (this.lexer.state.inRawBlock) {
|
|
1204
1054
|
text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];
|
|
1205
1055
|
} else {
|
|
1206
1056
|
text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
|
|
1207
1057
|
}
|
|
1208
|
-
|
|
1209
1058
|
return {
|
|
1210
1059
|
type: 'text',
|
|
1211
1060
|
raw: cap[0],
|
|
@@ -1213,14 +1062,12 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1213
1062
|
};
|
|
1214
1063
|
}
|
|
1215
1064
|
};
|
|
1216
|
-
|
|
1217
1065
|
return Tokenizer;
|
|
1218
1066
|
}();
|
|
1219
1067
|
|
|
1220
1068
|
/**
|
|
1221
1069
|
* Block-Level Grammar
|
|
1222
1070
|
*/
|
|
1223
|
-
|
|
1224
1071
|
var block = {
|
|
1225
1072
|
newline: /^(?: *(?:\n|$))+/,
|
|
1226
1073
|
code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
|
|
@@ -1261,11 +1108,13 @@ block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('headin
|
|
|
1261
1108
|
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
|
|
1262
1109
|
.getRegex();
|
|
1263
1110
|
block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();
|
|
1111
|
+
|
|
1264
1112
|
/**
|
|
1265
1113
|
* Normal Block Grammar
|
|
1266
1114
|
*/
|
|
1267
1115
|
|
|
1268
1116
|
block.normal = merge({}, block);
|
|
1117
|
+
|
|
1269
1118
|
/**
|
|
1270
1119
|
* GFM Block Grammar
|
|
1271
1120
|
*/
|
|
@@ -1274,8 +1123,8 @@ block.gfm = merge({}, block.normal, {
|
|
|
1274
1123
|
table: '^ *([^\\n ].*\\|.*)\\n' // Header
|
|
1275
1124
|
+ ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
|
|
1276
1125
|
+ '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
|
|
1277
|
-
|
|
1278
1126
|
});
|
|
1127
|
+
|
|
1279
1128
|
block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt
|
|
1280
1129
|
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
|
|
1281
1130
|
.getRegex();
|
|
@@ -1297,10 +1146,10 @@ block.pedantic = merge({}, block.normal, {
|
|
|
1297
1146
|
// fences not supported
|
|
1298
1147
|
paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()
|
|
1299
1148
|
});
|
|
1149
|
+
|
|
1300
1150
|
/**
|
|
1301
1151
|
* Inline-Level Grammar
|
|
1302
1152
|
*/
|
|
1303
|
-
|
|
1304
1153
|
var inline = {
|
|
1305
1154
|
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
|
|
1306
1155
|
autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
|
|
@@ -1318,24 +1167,28 @@ var inline = {
|
|
|
1318
1167
|
emStrong: {
|
|
1319
1168
|
lDelim: /^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,
|
|
1320
1169
|
// (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.
|
|
1321
|
-
// () Skip orphan inside strong
|
|
1322
|
-
rDelimAst: /^[^_
|
|
1323
|
-
rDelimUnd: /^[^_
|
|
1324
|
-
|
|
1170
|
+
// () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a
|
|
1171
|
+
rDelimAst: /^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,
|
|
1172
|
+
rDelimUnd: /^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
|
|
1325
1173
|
},
|
|
1174
|
+
|
|
1326
1175
|
code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
|
|
1327
1176
|
br: /^( {2,}|\\)\n(?!\s*$)/,
|
|
1328
1177
|
del: noopTest,
|
|
1329
1178
|
text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
|
|
1330
1179
|
punctuation: /^([\spunctuation])/
|
|
1331
|
-
};
|
|
1332
|
-
// without * and _ to handle the different emphasis markers * and _
|
|
1180
|
+
};
|
|
1333
1181
|
|
|
1182
|
+
// list of punctuation marks from CommonMark spec
|
|
1183
|
+
// without * and _ to handle the different emphasis markers * and _
|
|
1334
1184
|
inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
|
|
1335
|
-
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();
|
|
1185
|
+
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();
|
|
1336
1186
|
|
|
1187
|
+
// sequences em should skip over [title](link), `code`, <html>
|
|
1337
1188
|
inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
|
|
1338
|
-
|
|
1189
|
+
// lookbehind is not available on Safari as of version 16
|
|
1190
|
+
// inline.escapedEmSt = /(?<=(?:^|[^\\)(?:\\[^])*)\\[*_]/g;
|
|
1191
|
+
inline.escapedEmSt = /(?:^|[^\\])(?:\\\\)*\\[*_]/g;
|
|
1339
1192
|
inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();
|
|
1340
1193
|
inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();
|
|
1341
1194
|
inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();
|
|
@@ -1353,11 +1206,13 @@ inline.link = edit(inline.link).replace('label', inline._label).replace('href',
|
|
|
1353
1206
|
inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();
|
|
1354
1207
|
inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();
|
|
1355
1208
|
inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();
|
|
1209
|
+
|
|
1356
1210
|
/**
|
|
1357
1211
|
* Normal Inline Grammar
|
|
1358
1212
|
*/
|
|
1359
1213
|
|
|
1360
1214
|
inline.normal = merge({}, inline);
|
|
1215
|
+
|
|
1361
1216
|
/**
|
|
1362
1217
|
* Pedantic Inline Grammar
|
|
1363
1218
|
*/
|
|
@@ -1378,6 +1233,7 @@ inline.pedantic = merge({}, inline.normal, {
|
|
|
1378
1233
|
link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(),
|
|
1379
1234
|
reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex()
|
|
1380
1235
|
});
|
|
1236
|
+
|
|
1381
1237
|
/**
|
|
1382
1238
|
* GFM Inline Grammar
|
|
1383
1239
|
*/
|
|
@@ -1404,46 +1260,46 @@ inline.breaks = merge({}, inline.gfm, {
|
|
|
1404
1260
|
* smartypants text replacement
|
|
1405
1261
|
* @param {string} text
|
|
1406
1262
|
*/
|
|
1407
|
-
|
|
1408
1263
|
function smartypants(text) {
|
|
1409
|
-
return text
|
|
1410
|
-
|
|
1411
|
-
.replace(
|
|
1412
|
-
|
|
1413
|
-
.replace(
|
|
1414
|
-
|
|
1415
|
-
.replace(/"/g, "\
|
|
1264
|
+
return text
|
|
1265
|
+
// em-dashes
|
|
1266
|
+
.replace(/---/g, "\u2014")
|
|
1267
|
+
// en-dashes
|
|
1268
|
+
.replace(/--/g, "\u2013")
|
|
1269
|
+
// opening singles
|
|
1270
|
+
.replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018")
|
|
1271
|
+
// closing singles & apostrophes
|
|
1272
|
+
.replace(/'/g, "\u2019")
|
|
1273
|
+
// opening doubles
|
|
1274
|
+
.replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201C")
|
|
1275
|
+
// closing doubles
|
|
1276
|
+
.replace(/"/g, "\u201D")
|
|
1277
|
+
// ellipses
|
|
1416
1278
|
.replace(/\.{3}/g, "\u2026");
|
|
1417
1279
|
}
|
|
1280
|
+
|
|
1418
1281
|
/**
|
|
1419
1282
|
* mangle email addresses
|
|
1420
1283
|
* @param {string} text
|
|
1421
1284
|
*/
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
1285
|
function mangle(text) {
|
|
1425
1286
|
var out = '',
|
|
1426
|
-
|
|
1427
|
-
|
|
1287
|
+
i,
|
|
1288
|
+
ch;
|
|
1428
1289
|
var l = text.length;
|
|
1429
|
-
|
|
1430
1290
|
for (i = 0; i < l; i++) {
|
|
1431
1291
|
ch = text.charCodeAt(i);
|
|
1432
|
-
|
|
1433
1292
|
if (Math.random() > 0.5) {
|
|
1434
1293
|
ch = 'x' + ch.toString(16);
|
|
1435
1294
|
}
|
|
1436
|
-
|
|
1437
1295
|
out += '&#' + ch + ';';
|
|
1438
1296
|
}
|
|
1439
|
-
|
|
1440
1297
|
return out;
|
|
1441
1298
|
}
|
|
1299
|
+
|
|
1442
1300
|
/**
|
|
1443
1301
|
* Block Lexer
|
|
1444
1302
|
*/
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
1303
|
var Lexer = /*#__PURE__*/function () {
|
|
1448
1304
|
function Lexer(options) {
|
|
1449
1305
|
this.tokens = [];
|
|
@@ -1463,27 +1319,23 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1463
1319
|
block: block.normal,
|
|
1464
1320
|
inline: inline.normal
|
|
1465
1321
|
};
|
|
1466
|
-
|
|
1467
1322
|
if (this.options.pedantic) {
|
|
1468
1323
|
rules.block = block.pedantic;
|
|
1469
1324
|
rules.inline = inline.pedantic;
|
|
1470
1325
|
} else if (this.options.gfm) {
|
|
1471
1326
|
rules.block = block.gfm;
|
|
1472
|
-
|
|
1473
1327
|
if (this.options.breaks) {
|
|
1474
1328
|
rules.inline = inline.breaks;
|
|
1475
1329
|
} else {
|
|
1476
1330
|
rules.inline = inline.gfm;
|
|
1477
1331
|
}
|
|
1478
1332
|
}
|
|
1479
|
-
|
|
1480
1333
|
this.tokenizer.rules = rules;
|
|
1481
1334
|
}
|
|
1335
|
+
|
|
1482
1336
|
/**
|
|
1483
1337
|
* Expose Rules
|
|
1484
1338
|
*/
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
1339
|
/**
|
|
1488
1340
|
* Static Lex Method
|
|
1489
1341
|
*/
|
|
@@ -1491,45 +1343,37 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1491
1343
|
var lexer = new Lexer(options);
|
|
1492
1344
|
return lexer.lex(src);
|
|
1493
1345
|
}
|
|
1346
|
+
|
|
1494
1347
|
/**
|
|
1495
1348
|
* Static Lex Inline Method
|
|
1496
|
-
|
|
1497
|
-
;
|
|
1498
|
-
|
|
1349
|
+
*/;
|
|
1499
1350
|
Lexer.lexInline = function lexInline(src, options) {
|
|
1500
1351
|
var lexer = new Lexer(options);
|
|
1501
1352
|
return lexer.inlineTokens(src);
|
|
1502
1353
|
}
|
|
1354
|
+
|
|
1503
1355
|
/**
|
|
1504
1356
|
* Preprocessing
|
|
1505
|
-
|
|
1506
|
-
;
|
|
1507
|
-
|
|
1357
|
+
*/;
|
|
1508
1358
|
var _proto = Lexer.prototype;
|
|
1509
|
-
|
|
1510
1359
|
_proto.lex = function lex(src) {
|
|
1511
1360
|
src = src.replace(/\r\n|\r/g, '\n');
|
|
1512
1361
|
this.blockTokens(src, this.tokens);
|
|
1513
1362
|
var next;
|
|
1514
|
-
|
|
1515
1363
|
while (next = this.inlineQueue.shift()) {
|
|
1516
1364
|
this.inlineTokens(next.src, next.tokens);
|
|
1517
1365
|
}
|
|
1518
|
-
|
|
1519
1366
|
return this.tokens;
|
|
1520
1367
|
}
|
|
1368
|
+
|
|
1521
1369
|
/**
|
|
1522
1370
|
* Lexing
|
|
1523
|
-
|
|
1524
|
-
;
|
|
1525
|
-
|
|
1371
|
+
*/;
|
|
1526
1372
|
_proto.blockTokens = function blockTokens(src, tokens) {
|
|
1527
1373
|
var _this = this;
|
|
1528
|
-
|
|
1529
1374
|
if (tokens === void 0) {
|
|
1530
1375
|
tokens = [];
|
|
1531
1376
|
}
|
|
1532
|
-
|
|
1533
1377
|
if (this.options.pedantic) {
|
|
1534
1378
|
src = src.replace(/\t/g, ' ').replace(/^ +$/gm, '');
|
|
1535
1379
|
} else {
|
|
@@ -1537,9 +1381,7 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1537
1381
|
return leading + ' '.repeat(tabs.length);
|
|
1538
1382
|
});
|
|
1539
1383
|
}
|
|
1540
|
-
|
|
1541
1384
|
var token, lastToken, cutSrc, lastParagraphClipped;
|
|
1542
|
-
|
|
1543
1385
|
while (src) {
|
|
1544
1386
|
if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {
|
|
1545
1387
|
if (token = extTokenizer.call({
|
|
@@ -1549,16 +1391,14 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1549
1391
|
tokens.push(token);
|
|
1550
1392
|
return true;
|
|
1551
1393
|
}
|
|
1552
|
-
|
|
1553
1394
|
return false;
|
|
1554
1395
|
})) {
|
|
1555
1396
|
continue;
|
|
1556
|
-
}
|
|
1557
|
-
|
|
1397
|
+
}
|
|
1558
1398
|
|
|
1399
|
+
// newline
|
|
1559
1400
|
if (token = this.tokenizer.space(src)) {
|
|
1560
1401
|
src = src.substring(token.raw.length);
|
|
1561
|
-
|
|
1562
1402
|
if (token.raw.length === 1 && tokens.length > 0) {
|
|
1563
1403
|
// if there's a single \n as a spacer, it's terminating the last line,
|
|
1564
1404
|
// so move it there so that we don't get unecessary paragraph tags
|
|
@@ -1566,15 +1406,14 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1566
1406
|
} else {
|
|
1567
1407
|
tokens.push(token);
|
|
1568
1408
|
}
|
|
1569
|
-
|
|
1570
1409
|
continue;
|
|
1571
|
-
}
|
|
1572
|
-
|
|
1410
|
+
}
|
|
1573
1411
|
|
|
1412
|
+
// code
|
|
1574
1413
|
if (token = this.tokenizer.code(src)) {
|
|
1575
1414
|
src = src.substring(token.raw.length);
|
|
1576
|
-
lastToken = tokens[tokens.length - 1];
|
|
1577
|
-
|
|
1415
|
+
lastToken = tokens[tokens.length - 1];
|
|
1416
|
+
// An indented code block cannot interrupt a paragraph.
|
|
1578
1417
|
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1579
1418
|
lastToken.raw += '\n' + token.raw;
|
|
1580
1419
|
lastToken.text += '\n' + token.text;
|
|
@@ -1582,57 +1421,55 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1582
1421
|
} else {
|
|
1583
1422
|
tokens.push(token);
|
|
1584
1423
|
}
|
|
1585
|
-
|
|
1586
1424
|
continue;
|
|
1587
|
-
}
|
|
1588
|
-
|
|
1425
|
+
}
|
|
1589
1426
|
|
|
1427
|
+
// fences
|
|
1590
1428
|
if (token = this.tokenizer.fences(src)) {
|
|
1591
1429
|
src = src.substring(token.raw.length);
|
|
1592
1430
|
tokens.push(token);
|
|
1593
1431
|
continue;
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1432
|
+
}
|
|
1596
1433
|
|
|
1434
|
+
// heading
|
|
1597
1435
|
if (token = this.tokenizer.heading(src)) {
|
|
1598
1436
|
src = src.substring(token.raw.length);
|
|
1599
1437
|
tokens.push(token);
|
|
1600
1438
|
continue;
|
|
1601
|
-
}
|
|
1602
|
-
|
|
1439
|
+
}
|
|
1603
1440
|
|
|
1441
|
+
// hr
|
|
1604
1442
|
if (token = this.tokenizer.hr(src)) {
|
|
1605
1443
|
src = src.substring(token.raw.length);
|
|
1606
1444
|
tokens.push(token);
|
|
1607
1445
|
continue;
|
|
1608
|
-
}
|
|
1609
|
-
|
|
1446
|
+
}
|
|
1610
1447
|
|
|
1448
|
+
// blockquote
|
|
1611
1449
|
if (token = this.tokenizer.blockquote(src)) {
|
|
1612
1450
|
src = src.substring(token.raw.length);
|
|
1613
1451
|
tokens.push(token);
|
|
1614
1452
|
continue;
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1453
|
+
}
|
|
1617
1454
|
|
|
1455
|
+
// list
|
|
1618
1456
|
if (token = this.tokenizer.list(src)) {
|
|
1619
1457
|
src = src.substring(token.raw.length);
|
|
1620
1458
|
tokens.push(token);
|
|
1621
1459
|
continue;
|
|
1622
|
-
}
|
|
1623
|
-
|
|
1460
|
+
}
|
|
1624
1461
|
|
|
1462
|
+
// html
|
|
1625
1463
|
if (token = this.tokenizer.html(src)) {
|
|
1626
1464
|
src = src.substring(token.raw.length);
|
|
1627
1465
|
tokens.push(token);
|
|
1628
1466
|
continue;
|
|
1629
|
-
}
|
|
1630
|
-
|
|
1467
|
+
}
|
|
1631
1468
|
|
|
1469
|
+
// def
|
|
1632
1470
|
if (token = this.tokenizer.def(src)) {
|
|
1633
1471
|
src = src.substring(token.raw.length);
|
|
1634
1472
|
lastToken = tokens[tokens.length - 1];
|
|
1635
|
-
|
|
1636
1473
|
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1637
1474
|
lastToken.raw += '\n' + token.raw;
|
|
1638
1475
|
lastToken.text += '\n' + token.raw;
|
|
@@ -1643,53 +1480,46 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1643
1480
|
title: token.title
|
|
1644
1481
|
};
|
|
1645
1482
|
}
|
|
1646
|
-
|
|
1647
1483
|
continue;
|
|
1648
|
-
}
|
|
1649
|
-
|
|
1484
|
+
}
|
|
1650
1485
|
|
|
1486
|
+
// table (gfm)
|
|
1651
1487
|
if (token = this.tokenizer.table(src)) {
|
|
1652
1488
|
src = src.substring(token.raw.length);
|
|
1653
1489
|
tokens.push(token);
|
|
1654
1490
|
continue;
|
|
1655
|
-
}
|
|
1656
|
-
|
|
1491
|
+
}
|
|
1657
1492
|
|
|
1493
|
+
// lheading
|
|
1658
1494
|
if (token = this.tokenizer.lheading(src)) {
|
|
1659
1495
|
src = src.substring(token.raw.length);
|
|
1660
1496
|
tokens.push(token);
|
|
1661
1497
|
continue;
|
|
1662
|
-
}
|
|
1663
|
-
// prevent paragraph consuming extensions by clipping 'src' to extension start
|
|
1664
|
-
|
|
1498
|
+
}
|
|
1665
1499
|
|
|
1500
|
+
// top-level paragraph
|
|
1501
|
+
// prevent paragraph consuming extensions by clipping 'src' to extension start
|
|
1666
1502
|
cutSrc = src;
|
|
1667
|
-
|
|
1668
1503
|
if (this.options.extensions && this.options.extensions.startBlock) {
|
|
1669
1504
|
(function () {
|
|
1670
1505
|
var startIndex = Infinity;
|
|
1671
1506
|
var tempSrc = src.slice(1);
|
|
1672
1507
|
var tempStart = void 0;
|
|
1673
|
-
|
|
1674
1508
|
_this.options.extensions.startBlock.forEach(function (getStartIndex) {
|
|
1675
1509
|
tempStart = getStartIndex.call({
|
|
1676
1510
|
lexer: this
|
|
1677
1511
|
}, tempSrc);
|
|
1678
|
-
|
|
1679
1512
|
if (typeof tempStart === 'number' && tempStart >= 0) {
|
|
1680
1513
|
startIndex = Math.min(startIndex, tempStart);
|
|
1681
1514
|
}
|
|
1682
1515
|
});
|
|
1683
|
-
|
|
1684
1516
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1685
1517
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1686
1518
|
}
|
|
1687
1519
|
})();
|
|
1688
1520
|
}
|
|
1689
|
-
|
|
1690
1521
|
if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
|
|
1691
1522
|
lastToken = tokens[tokens.length - 1];
|
|
1692
|
-
|
|
1693
1523
|
if (lastParagraphClipped && lastToken.type === 'paragraph') {
|
|
1694
1524
|
lastToken.raw += '\n' + token.raw;
|
|
1695
1525
|
lastToken.text += '\n' + token.text;
|
|
@@ -1698,17 +1528,15 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1698
1528
|
} else {
|
|
1699
1529
|
tokens.push(token);
|
|
1700
1530
|
}
|
|
1701
|
-
|
|
1702
1531
|
lastParagraphClipped = cutSrc.length !== src.length;
|
|
1703
1532
|
src = src.substring(token.raw.length);
|
|
1704
1533
|
continue;
|
|
1705
|
-
}
|
|
1706
|
-
|
|
1534
|
+
}
|
|
1707
1535
|
|
|
1536
|
+
// text
|
|
1708
1537
|
if (token = this.tokenizer.text(src)) {
|
|
1709
1538
|
src = src.substring(token.raw.length);
|
|
1710
1539
|
lastToken = tokens[tokens.length - 1];
|
|
1711
|
-
|
|
1712
1540
|
if (lastToken && lastToken.type === 'text') {
|
|
1713
1541
|
lastToken.raw += '\n' + token.raw;
|
|
1714
1542
|
lastToken.text += '\n' + token.text;
|
|
@@ -1717,13 +1545,10 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1717
1545
|
} else {
|
|
1718
1546
|
tokens.push(token);
|
|
1719
1547
|
}
|
|
1720
|
-
|
|
1721
1548
|
continue;
|
|
1722
1549
|
}
|
|
1723
|
-
|
|
1724
1550
|
if (src) {
|
|
1725
1551
|
var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
|
|
1726
|
-
|
|
1727
1552
|
if (this.options.silent) {
|
|
1728
1553
|
console.error(errMsg);
|
|
1729
1554
|
break;
|
|
@@ -1732,43 +1557,38 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1732
1557
|
}
|
|
1733
1558
|
}
|
|
1734
1559
|
}
|
|
1735
|
-
|
|
1736
1560
|
this.state.top = true;
|
|
1737
1561
|
return tokens;
|
|
1738
1562
|
};
|
|
1739
|
-
|
|
1740
1563
|
_proto.inline = function inline(src, tokens) {
|
|
1741
1564
|
if (tokens === void 0) {
|
|
1742
1565
|
tokens = [];
|
|
1743
1566
|
}
|
|
1744
|
-
|
|
1745
1567
|
this.inlineQueue.push({
|
|
1746
1568
|
src: src,
|
|
1747
1569
|
tokens: tokens
|
|
1748
1570
|
});
|
|
1749
1571
|
return tokens;
|
|
1750
1572
|
}
|
|
1573
|
+
|
|
1751
1574
|
/**
|
|
1752
1575
|
* Lexing/Compiling
|
|
1753
|
-
|
|
1754
|
-
;
|
|
1755
|
-
|
|
1576
|
+
*/;
|
|
1756
1577
|
_proto.inlineTokens = function inlineTokens(src, tokens) {
|
|
1757
1578
|
var _this2 = this;
|
|
1758
|
-
|
|
1759
1579
|
if (tokens === void 0) {
|
|
1760
1580
|
tokens = [];
|
|
1761
1581
|
}
|
|
1582
|
+
var token, lastToken, cutSrc;
|
|
1762
1583
|
|
|
1763
|
-
|
|
1764
|
-
|
|
1584
|
+
// String with links masked to avoid interference with em and strong
|
|
1765
1585
|
var maskedSrc = src;
|
|
1766
1586
|
var match;
|
|
1767
|
-
var keepPrevChar, prevChar;
|
|
1587
|
+
var keepPrevChar, prevChar;
|
|
1768
1588
|
|
|
1589
|
+
// Mask out reflinks
|
|
1769
1590
|
if (this.tokens.links) {
|
|
1770
1591
|
var links = Object.keys(this.tokens.links);
|
|
1771
|
-
|
|
1772
1592
|
if (links.length > 0) {
|
|
1773
1593
|
while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
|
|
1774
1594
|
if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
|
|
@@ -1776,25 +1596,24 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1776
1596
|
}
|
|
1777
1597
|
}
|
|
1778
1598
|
}
|
|
1779
|
-
}
|
|
1780
|
-
|
|
1781
|
-
|
|
1599
|
+
}
|
|
1600
|
+
// Mask out other blocks
|
|
1782
1601
|
while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
|
|
1783
1602
|
maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
|
|
1784
|
-
}
|
|
1785
|
-
|
|
1603
|
+
}
|
|
1786
1604
|
|
|
1605
|
+
// Mask out escaped em & strong delimiters
|
|
1787
1606
|
while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
|
|
1788
|
-
maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
|
|
1607
|
+
maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
|
|
1608
|
+
this.tokenizer.rules.inline.escapedEmSt.lastIndex--;
|
|
1789
1609
|
}
|
|
1790
|
-
|
|
1791
1610
|
while (src) {
|
|
1792
1611
|
if (!keepPrevChar) {
|
|
1793
1612
|
prevChar = '';
|
|
1794
1613
|
}
|
|
1614
|
+
keepPrevChar = false;
|
|
1795
1615
|
|
|
1796
|
-
|
|
1797
|
-
|
|
1616
|
+
// extensions
|
|
1798
1617
|
if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {
|
|
1799
1618
|
if (token = extTokenizer.call({
|
|
1800
1619
|
lexer: _this2
|
|
@@ -1803,148 +1622,132 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1803
1622
|
tokens.push(token);
|
|
1804
1623
|
return true;
|
|
1805
1624
|
}
|
|
1806
|
-
|
|
1807
1625
|
return false;
|
|
1808
1626
|
})) {
|
|
1809
1627
|
continue;
|
|
1810
|
-
}
|
|
1811
|
-
|
|
1628
|
+
}
|
|
1812
1629
|
|
|
1630
|
+
// escape
|
|
1813
1631
|
if (token = this.tokenizer.escape(src)) {
|
|
1814
1632
|
src = src.substring(token.raw.length);
|
|
1815
1633
|
tokens.push(token);
|
|
1816
1634
|
continue;
|
|
1817
|
-
}
|
|
1818
|
-
|
|
1635
|
+
}
|
|
1819
1636
|
|
|
1637
|
+
// tag
|
|
1820
1638
|
if (token = this.tokenizer.tag(src)) {
|
|
1821
1639
|
src = src.substring(token.raw.length);
|
|
1822
1640
|
lastToken = tokens[tokens.length - 1];
|
|
1823
|
-
|
|
1824
1641
|
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1825
1642
|
lastToken.raw += token.raw;
|
|
1826
1643
|
lastToken.text += token.text;
|
|
1827
1644
|
} else {
|
|
1828
1645
|
tokens.push(token);
|
|
1829
1646
|
}
|
|
1830
|
-
|
|
1831
1647
|
continue;
|
|
1832
|
-
}
|
|
1833
|
-
|
|
1648
|
+
}
|
|
1834
1649
|
|
|
1650
|
+
// link
|
|
1835
1651
|
if (token = this.tokenizer.link(src)) {
|
|
1836
1652
|
src = src.substring(token.raw.length);
|
|
1837
1653
|
tokens.push(token);
|
|
1838
1654
|
continue;
|
|
1839
|
-
}
|
|
1840
|
-
|
|
1655
|
+
}
|
|
1841
1656
|
|
|
1657
|
+
// reflink, nolink
|
|
1842
1658
|
if (token = this.tokenizer.reflink(src, this.tokens.links)) {
|
|
1843
1659
|
src = src.substring(token.raw.length);
|
|
1844
1660
|
lastToken = tokens[tokens.length - 1];
|
|
1845
|
-
|
|
1846
1661
|
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1847
1662
|
lastToken.raw += token.raw;
|
|
1848
1663
|
lastToken.text += token.text;
|
|
1849
1664
|
} else {
|
|
1850
1665
|
tokens.push(token);
|
|
1851
1666
|
}
|
|
1852
|
-
|
|
1853
1667
|
continue;
|
|
1854
|
-
}
|
|
1855
|
-
|
|
1668
|
+
}
|
|
1856
1669
|
|
|
1670
|
+
// em & strong
|
|
1857
1671
|
if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
|
|
1858
1672
|
src = src.substring(token.raw.length);
|
|
1859
1673
|
tokens.push(token);
|
|
1860
1674
|
continue;
|
|
1861
|
-
}
|
|
1862
|
-
|
|
1675
|
+
}
|
|
1863
1676
|
|
|
1677
|
+
// code
|
|
1864
1678
|
if (token = this.tokenizer.codespan(src)) {
|
|
1865
1679
|
src = src.substring(token.raw.length);
|
|
1866
1680
|
tokens.push(token);
|
|
1867
1681
|
continue;
|
|
1868
|
-
}
|
|
1869
|
-
|
|
1682
|
+
}
|
|
1870
1683
|
|
|
1684
|
+
// br
|
|
1871
1685
|
if (token = this.tokenizer.br(src)) {
|
|
1872
1686
|
src = src.substring(token.raw.length);
|
|
1873
1687
|
tokens.push(token);
|
|
1874
1688
|
continue;
|
|
1875
|
-
}
|
|
1876
|
-
|
|
1689
|
+
}
|
|
1877
1690
|
|
|
1691
|
+
// del (gfm)
|
|
1878
1692
|
if (token = this.tokenizer.del(src)) {
|
|
1879
1693
|
src = src.substring(token.raw.length);
|
|
1880
1694
|
tokens.push(token);
|
|
1881
1695
|
continue;
|
|
1882
|
-
}
|
|
1883
|
-
|
|
1696
|
+
}
|
|
1884
1697
|
|
|
1698
|
+
// autolink
|
|
1885
1699
|
if (token = this.tokenizer.autolink(src, mangle)) {
|
|
1886
1700
|
src = src.substring(token.raw.length);
|
|
1887
1701
|
tokens.push(token);
|
|
1888
1702
|
continue;
|
|
1889
|
-
}
|
|
1890
|
-
|
|
1703
|
+
}
|
|
1891
1704
|
|
|
1705
|
+
// url (gfm)
|
|
1892
1706
|
if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
|
|
1893
1707
|
src = src.substring(token.raw.length);
|
|
1894
1708
|
tokens.push(token);
|
|
1895
1709
|
continue;
|
|
1896
|
-
}
|
|
1897
|
-
// prevent inlineText consuming extensions by clipping 'src' to extension start
|
|
1898
|
-
|
|
1710
|
+
}
|
|
1899
1711
|
|
|
1712
|
+
// text
|
|
1713
|
+
// prevent inlineText consuming extensions by clipping 'src' to extension start
|
|
1900
1714
|
cutSrc = src;
|
|
1901
|
-
|
|
1902
1715
|
if (this.options.extensions && this.options.extensions.startInline) {
|
|
1903
1716
|
(function () {
|
|
1904
1717
|
var startIndex = Infinity;
|
|
1905
1718
|
var tempSrc = src.slice(1);
|
|
1906
1719
|
var tempStart = void 0;
|
|
1907
|
-
|
|
1908
1720
|
_this2.options.extensions.startInline.forEach(function (getStartIndex) {
|
|
1909
1721
|
tempStart = getStartIndex.call({
|
|
1910
1722
|
lexer: this
|
|
1911
1723
|
}, tempSrc);
|
|
1912
|
-
|
|
1913
1724
|
if (typeof tempStart === 'number' && tempStart >= 0) {
|
|
1914
1725
|
startIndex = Math.min(startIndex, tempStart);
|
|
1915
1726
|
}
|
|
1916
1727
|
});
|
|
1917
|
-
|
|
1918
1728
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1919
1729
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1920
1730
|
}
|
|
1921
1731
|
})();
|
|
1922
1732
|
}
|
|
1923
|
-
|
|
1924
1733
|
if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
|
|
1925
1734
|
src = src.substring(token.raw.length);
|
|
1926
|
-
|
|
1927
1735
|
if (token.raw.slice(-1) !== '_') {
|
|
1928
1736
|
// Track prevChar before string of ____ started
|
|
1929
1737
|
prevChar = token.raw.slice(-1);
|
|
1930
1738
|
}
|
|
1931
|
-
|
|
1932
1739
|
keepPrevChar = true;
|
|
1933
1740
|
lastToken = tokens[tokens.length - 1];
|
|
1934
|
-
|
|
1935
1741
|
if (lastToken && lastToken.type === 'text') {
|
|
1936
1742
|
lastToken.raw += token.raw;
|
|
1937
1743
|
lastToken.text += token.text;
|
|
1938
1744
|
} else {
|
|
1939
1745
|
tokens.push(token);
|
|
1940
1746
|
}
|
|
1941
|
-
|
|
1942
1747
|
continue;
|
|
1943
1748
|
}
|
|
1944
|
-
|
|
1945
1749
|
if (src) {
|
|
1946
1750
|
var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
|
|
1947
|
-
|
|
1948
1751
|
if (this.options.silent) {
|
|
1949
1752
|
console.error(errMsg);
|
|
1950
1753
|
break;
|
|
@@ -1953,10 +1756,8 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1953
1756
|
}
|
|
1954
1757
|
}
|
|
1955
1758
|
}
|
|
1956
|
-
|
|
1957
1759
|
return tokens;
|
|
1958
1760
|
};
|
|
1959
|
-
|
|
1960
1761
|
_createClass(Lexer, null, [{
|
|
1961
1762
|
key: "rules",
|
|
1962
1763
|
get: function get() {
|
|
@@ -1966,212 +1767,175 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1966
1767
|
};
|
|
1967
1768
|
}
|
|
1968
1769
|
}]);
|
|
1969
|
-
|
|
1970
1770
|
return Lexer;
|
|
1971
1771
|
}();
|
|
1972
1772
|
|
|
1973
1773
|
/**
|
|
1974
1774
|
* Renderer
|
|
1975
1775
|
*/
|
|
1976
|
-
|
|
1977
1776
|
var Renderer = /*#__PURE__*/function () {
|
|
1978
1777
|
function Renderer(options) {
|
|
1979
1778
|
this.options = options || exports.defaults;
|
|
1980
1779
|
}
|
|
1981
|
-
|
|
1982
1780
|
var _proto = Renderer.prototype;
|
|
1983
|
-
|
|
1984
1781
|
_proto.code = function code(_code, infostring, escaped) {
|
|
1985
1782
|
var lang = (infostring || '').match(/\S*/)[0];
|
|
1986
|
-
|
|
1987
1783
|
if (this.options.highlight) {
|
|
1988
1784
|
var out = this.options.highlight(_code, lang);
|
|
1989
|
-
|
|
1990
1785
|
if (out != null && out !== _code) {
|
|
1991
1786
|
escaped = true;
|
|
1992
1787
|
_code = out;
|
|
1993
1788
|
}
|
|
1994
1789
|
}
|
|
1995
|
-
|
|
1996
1790
|
_code = _code.replace(/\n$/, '') + '\n';
|
|
1997
|
-
|
|
1998
1791
|
if (!lang) {
|
|
1999
1792
|
return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
|
|
2000
1793
|
}
|
|
2001
|
-
|
|
2002
1794
|
return '<pre><code class="' + this.options.langPrefix + escape(lang, true) + '">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
|
|
2003
1795
|
}
|
|
1796
|
+
|
|
2004
1797
|
/**
|
|
2005
1798
|
* @param {string} quote
|
|
2006
|
-
|
|
2007
|
-
;
|
|
2008
|
-
|
|
1799
|
+
*/;
|
|
2009
1800
|
_proto.blockquote = function blockquote(quote) {
|
|
2010
1801
|
return "<blockquote>\n" + quote + "</blockquote>\n";
|
|
2011
1802
|
};
|
|
2012
|
-
|
|
2013
1803
|
_proto.html = function html(_html) {
|
|
2014
1804
|
return _html;
|
|
2015
1805
|
}
|
|
1806
|
+
|
|
2016
1807
|
/**
|
|
2017
1808
|
* @param {string} text
|
|
2018
1809
|
* @param {string} level
|
|
2019
1810
|
* @param {string} raw
|
|
2020
1811
|
* @param {any} slugger
|
|
2021
|
-
|
|
2022
|
-
;
|
|
2023
|
-
|
|
1812
|
+
*/;
|
|
2024
1813
|
_proto.heading = function heading(text, level, raw, slugger) {
|
|
2025
1814
|
if (this.options.headerIds) {
|
|
2026
1815
|
var id = this.options.headerPrefix + slugger.slug(raw);
|
|
2027
1816
|
return "<h" + level + " id=\"" + id + "\">" + text + "</h" + level + ">\n";
|
|
2028
|
-
}
|
|
2029
|
-
|
|
1817
|
+
}
|
|
2030
1818
|
|
|
1819
|
+
// ignore IDs
|
|
2031
1820
|
return "<h" + level + ">" + text + "</h" + level + ">\n";
|
|
2032
1821
|
};
|
|
2033
|
-
|
|
2034
1822
|
_proto.hr = function hr() {
|
|
2035
1823
|
return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
|
|
2036
1824
|
};
|
|
2037
|
-
|
|
2038
1825
|
_proto.list = function list(body, ordered, start) {
|
|
2039
1826
|
var type = ordered ? 'ol' : 'ul',
|
|
2040
|
-
|
|
1827
|
+
startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
|
|
2041
1828
|
return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
|
|
2042
1829
|
}
|
|
1830
|
+
|
|
2043
1831
|
/**
|
|
2044
1832
|
* @param {string} text
|
|
2045
|
-
|
|
2046
|
-
;
|
|
2047
|
-
|
|
1833
|
+
*/;
|
|
2048
1834
|
_proto.listitem = function listitem(text) {
|
|
2049
1835
|
return "<li>" + text + "</li>\n";
|
|
2050
1836
|
};
|
|
2051
|
-
|
|
2052
1837
|
_proto.checkbox = function checkbox(checked) {
|
|
2053
1838
|
return '<input ' + (checked ? 'checked="" ' : '') + 'disabled="" type="checkbox"' + (this.options.xhtml ? ' /' : '') + '> ';
|
|
2054
1839
|
}
|
|
1840
|
+
|
|
2055
1841
|
/**
|
|
2056
1842
|
* @param {string} text
|
|
2057
|
-
|
|
2058
|
-
;
|
|
2059
|
-
|
|
1843
|
+
*/;
|
|
2060
1844
|
_proto.paragraph = function paragraph(text) {
|
|
2061
1845
|
return "<p>" + text + "</p>\n";
|
|
2062
1846
|
}
|
|
1847
|
+
|
|
2063
1848
|
/**
|
|
2064
1849
|
* @param {string} header
|
|
2065
1850
|
* @param {string} body
|
|
2066
|
-
|
|
2067
|
-
;
|
|
2068
|
-
|
|
1851
|
+
*/;
|
|
2069
1852
|
_proto.table = function table(header, body) {
|
|
2070
1853
|
if (body) body = "<tbody>" + body + "</tbody>";
|
|
2071
1854
|
return '<table>\n' + '<thead>\n' + header + '</thead>\n' + body + '</table>\n';
|
|
2072
1855
|
}
|
|
1856
|
+
|
|
2073
1857
|
/**
|
|
2074
1858
|
* @param {string} content
|
|
2075
|
-
|
|
2076
|
-
;
|
|
2077
|
-
|
|
1859
|
+
*/;
|
|
2078
1860
|
_proto.tablerow = function tablerow(content) {
|
|
2079
1861
|
return "<tr>\n" + content + "</tr>\n";
|
|
2080
1862
|
};
|
|
2081
|
-
|
|
2082
1863
|
_proto.tablecell = function tablecell(content, flags) {
|
|
2083
1864
|
var type = flags.header ? 'th' : 'td';
|
|
2084
1865
|
var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">";
|
|
2085
1866
|
return tag + content + ("</" + type + ">\n");
|
|
2086
1867
|
}
|
|
1868
|
+
|
|
2087
1869
|
/**
|
|
2088
1870
|
* span level renderer
|
|
2089
1871
|
* @param {string} text
|
|
2090
|
-
|
|
2091
|
-
;
|
|
2092
|
-
|
|
1872
|
+
*/;
|
|
2093
1873
|
_proto.strong = function strong(text) {
|
|
2094
1874
|
return "<strong>" + text + "</strong>";
|
|
2095
1875
|
}
|
|
1876
|
+
|
|
2096
1877
|
/**
|
|
2097
1878
|
* @param {string} text
|
|
2098
|
-
|
|
2099
|
-
;
|
|
2100
|
-
|
|
1879
|
+
*/;
|
|
2101
1880
|
_proto.em = function em(text) {
|
|
2102
1881
|
return "<em>" + text + "</em>";
|
|
2103
1882
|
}
|
|
1883
|
+
|
|
2104
1884
|
/**
|
|
2105
1885
|
* @param {string} text
|
|
2106
|
-
|
|
2107
|
-
;
|
|
2108
|
-
|
|
1886
|
+
*/;
|
|
2109
1887
|
_proto.codespan = function codespan(text) {
|
|
2110
1888
|
return "<code>" + text + "</code>";
|
|
2111
1889
|
};
|
|
2112
|
-
|
|
2113
1890
|
_proto.br = function br() {
|
|
2114
1891
|
return this.options.xhtml ? '<br/>' : '<br>';
|
|
2115
1892
|
}
|
|
1893
|
+
|
|
2116
1894
|
/**
|
|
2117
1895
|
* @param {string} text
|
|
2118
|
-
|
|
2119
|
-
;
|
|
2120
|
-
|
|
1896
|
+
*/;
|
|
2121
1897
|
_proto.del = function del(text) {
|
|
2122
1898
|
return "<del>" + text + "</del>";
|
|
2123
1899
|
}
|
|
1900
|
+
|
|
2124
1901
|
/**
|
|
2125
1902
|
* @param {string} href
|
|
2126
1903
|
* @param {string} title
|
|
2127
1904
|
* @param {string} text
|
|
2128
|
-
|
|
2129
|
-
;
|
|
2130
|
-
|
|
1905
|
+
*/;
|
|
2131
1906
|
_proto.link = function link(href, title, text) {
|
|
2132
1907
|
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
2133
|
-
|
|
2134
1908
|
if (href === null) {
|
|
2135
1909
|
return text;
|
|
2136
1910
|
}
|
|
2137
|
-
|
|
2138
1911
|
var out = '<a href="' + escape(href) + '"';
|
|
2139
|
-
|
|
2140
1912
|
if (title) {
|
|
2141
1913
|
out += ' title="' + title + '"';
|
|
2142
1914
|
}
|
|
2143
|
-
|
|
2144
1915
|
out += '>' + text + '</a>';
|
|
2145
1916
|
return out;
|
|
2146
1917
|
}
|
|
1918
|
+
|
|
2147
1919
|
/**
|
|
2148
1920
|
* @param {string} href
|
|
2149
1921
|
* @param {string} title
|
|
2150
1922
|
* @param {string} text
|
|
2151
|
-
|
|
2152
|
-
;
|
|
2153
|
-
|
|
1923
|
+
*/;
|
|
2154
1924
|
_proto.image = function image(href, title, text) {
|
|
2155
1925
|
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
2156
|
-
|
|
2157
1926
|
if (href === null) {
|
|
2158
1927
|
return text;
|
|
2159
1928
|
}
|
|
2160
|
-
|
|
2161
1929
|
var out = "<img src=\"" + href + "\" alt=\"" + text + "\"";
|
|
2162
|
-
|
|
2163
1930
|
if (title) {
|
|
2164
1931
|
out += " title=\"" + title + "\"";
|
|
2165
1932
|
}
|
|
2166
|
-
|
|
2167
1933
|
out += this.options.xhtml ? '/>' : '>';
|
|
2168
1934
|
return out;
|
|
2169
1935
|
};
|
|
2170
|
-
|
|
2171
1936
|
_proto.text = function text(_text) {
|
|
2172
1937
|
return _text;
|
|
2173
1938
|
};
|
|
2174
|
-
|
|
2175
1939
|
return Renderer;
|
|
2176
1940
|
}();
|
|
2177
1941
|
|
|
@@ -2181,46 +1945,35 @@ var Renderer = /*#__PURE__*/function () {
|
|
|
2181
1945
|
*/
|
|
2182
1946
|
var TextRenderer = /*#__PURE__*/function () {
|
|
2183
1947
|
function TextRenderer() {}
|
|
2184
|
-
|
|
2185
1948
|
var _proto = TextRenderer.prototype;
|
|
2186
|
-
|
|
2187
1949
|
// no need for block level renderers
|
|
2188
1950
|
_proto.strong = function strong(text) {
|
|
2189
1951
|
return text;
|
|
2190
1952
|
};
|
|
2191
|
-
|
|
2192
1953
|
_proto.em = function em(text) {
|
|
2193
1954
|
return text;
|
|
2194
1955
|
};
|
|
2195
|
-
|
|
2196
1956
|
_proto.codespan = function codespan(text) {
|
|
2197
1957
|
return text;
|
|
2198
1958
|
};
|
|
2199
|
-
|
|
2200
1959
|
_proto.del = function del(text) {
|
|
2201
1960
|
return text;
|
|
2202
1961
|
};
|
|
2203
|
-
|
|
2204
1962
|
_proto.html = function html(text) {
|
|
2205
1963
|
return text;
|
|
2206
1964
|
};
|
|
2207
|
-
|
|
2208
1965
|
_proto.text = function text(_text) {
|
|
2209
1966
|
return _text;
|
|
2210
1967
|
};
|
|
2211
|
-
|
|
2212
1968
|
_proto.link = function link(href, title, text) {
|
|
2213
1969
|
return '' + text;
|
|
2214
1970
|
};
|
|
2215
|
-
|
|
2216
1971
|
_proto.image = function image(href, title, text) {
|
|
2217
1972
|
return '' + text;
|
|
2218
1973
|
};
|
|
2219
|
-
|
|
2220
1974
|
_proto.br = function br() {
|
|
2221
1975
|
return '';
|
|
2222
1976
|
};
|
|
2223
|
-
|
|
2224
1977
|
return TextRenderer;
|
|
2225
1978
|
}();
|
|
2226
1979
|
|
|
@@ -2231,69 +1984,60 @@ var Slugger = /*#__PURE__*/function () {
|
|
|
2231
1984
|
function Slugger() {
|
|
2232
1985
|
this.seen = {};
|
|
2233
1986
|
}
|
|
1987
|
+
|
|
2234
1988
|
/**
|
|
2235
1989
|
* @param {string} value
|
|
2236
1990
|
*/
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
1991
|
var _proto = Slugger.prototype;
|
|
2240
|
-
|
|
2241
1992
|
_proto.serialize = function serialize(value) {
|
|
2242
|
-
return value.toLowerCase().trim()
|
|
2243
|
-
|
|
1993
|
+
return value.toLowerCase().trim()
|
|
1994
|
+
// remove html tags
|
|
1995
|
+
.replace(/<[!\/a-z].*?>/ig, '')
|
|
1996
|
+
// remove unwanted chars
|
|
2244
1997
|
.replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-');
|
|
2245
1998
|
}
|
|
1999
|
+
|
|
2246
2000
|
/**
|
|
2247
2001
|
* Finds the next safe (unique) slug to use
|
|
2248
2002
|
* @param {string} originalSlug
|
|
2249
2003
|
* @param {boolean} isDryRun
|
|
2250
|
-
|
|
2251
|
-
;
|
|
2252
|
-
|
|
2004
|
+
*/;
|
|
2253
2005
|
_proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {
|
|
2254
2006
|
var slug = originalSlug;
|
|
2255
2007
|
var occurenceAccumulator = 0;
|
|
2256
|
-
|
|
2257
2008
|
if (this.seen.hasOwnProperty(slug)) {
|
|
2258
2009
|
occurenceAccumulator = this.seen[originalSlug];
|
|
2259
|
-
|
|
2260
2010
|
do {
|
|
2261
2011
|
occurenceAccumulator++;
|
|
2262
2012
|
slug = originalSlug + '-' + occurenceAccumulator;
|
|
2263
2013
|
} while (this.seen.hasOwnProperty(slug));
|
|
2264
2014
|
}
|
|
2265
|
-
|
|
2266
2015
|
if (!isDryRun) {
|
|
2267
2016
|
this.seen[originalSlug] = occurenceAccumulator;
|
|
2268
2017
|
this.seen[slug] = 0;
|
|
2269
2018
|
}
|
|
2270
|
-
|
|
2271
2019
|
return slug;
|
|
2272
2020
|
}
|
|
2021
|
+
|
|
2273
2022
|
/**
|
|
2274
2023
|
* Convert string to unique id
|
|
2275
2024
|
* @param {object} [options]
|
|
2276
2025
|
* @param {boolean} [options.dryrun] Generates the next unique slug without
|
|
2277
2026
|
* updating the internal accumulator.
|
|
2278
|
-
|
|
2279
|
-
;
|
|
2280
|
-
|
|
2027
|
+
*/;
|
|
2281
2028
|
_proto.slug = function slug(value, options) {
|
|
2282
2029
|
if (options === void 0) {
|
|
2283
2030
|
options = {};
|
|
2284
2031
|
}
|
|
2285
|
-
|
|
2286
2032
|
var slug = this.serialize(value);
|
|
2287
2033
|
return this.getNextSafeSlug(slug, options.dryrun);
|
|
2288
2034
|
};
|
|
2289
|
-
|
|
2290
2035
|
return Slugger;
|
|
2291
2036
|
}();
|
|
2292
2037
|
|
|
2293
2038
|
/**
|
|
2294
2039
|
* Parsing & Compiling
|
|
2295
2040
|
*/
|
|
2296
|
-
|
|
2297
2041
|
var Parser = /*#__PURE__*/function () {
|
|
2298
2042
|
function Parser(options) {
|
|
2299
2043
|
this.options = options || exports.defaults;
|
|
@@ -2303,140 +2047,122 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2303
2047
|
this.textRenderer = new TextRenderer();
|
|
2304
2048
|
this.slugger = new Slugger();
|
|
2305
2049
|
}
|
|
2050
|
+
|
|
2306
2051
|
/**
|
|
2307
2052
|
* Static Parse Method
|
|
2308
2053
|
*/
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
2054
|
Parser.parse = function parse(tokens, options) {
|
|
2312
2055
|
var parser = new Parser(options);
|
|
2313
2056
|
return parser.parse(tokens);
|
|
2314
2057
|
}
|
|
2058
|
+
|
|
2315
2059
|
/**
|
|
2316
2060
|
* Static Parse Inline Method
|
|
2317
|
-
|
|
2318
|
-
;
|
|
2319
|
-
|
|
2061
|
+
*/;
|
|
2320
2062
|
Parser.parseInline = function parseInline(tokens, options) {
|
|
2321
2063
|
var parser = new Parser(options);
|
|
2322
2064
|
return parser.parseInline(tokens);
|
|
2323
2065
|
}
|
|
2066
|
+
|
|
2324
2067
|
/**
|
|
2325
2068
|
* Parse Loop
|
|
2326
|
-
|
|
2327
|
-
;
|
|
2328
|
-
|
|
2069
|
+
*/;
|
|
2329
2070
|
var _proto = Parser.prototype;
|
|
2330
|
-
|
|
2331
2071
|
_proto.parse = function parse(tokens, top) {
|
|
2332
2072
|
if (top === void 0) {
|
|
2333
2073
|
top = true;
|
|
2334
2074
|
}
|
|
2335
|
-
|
|
2336
2075
|
var out = '',
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2076
|
+
i,
|
|
2077
|
+
j,
|
|
2078
|
+
k,
|
|
2079
|
+
l2,
|
|
2080
|
+
l3,
|
|
2081
|
+
row,
|
|
2082
|
+
cell,
|
|
2083
|
+
header,
|
|
2084
|
+
body,
|
|
2085
|
+
token,
|
|
2086
|
+
ordered,
|
|
2087
|
+
start,
|
|
2088
|
+
loose,
|
|
2089
|
+
itemBody,
|
|
2090
|
+
item,
|
|
2091
|
+
checked,
|
|
2092
|
+
task,
|
|
2093
|
+
checkbox,
|
|
2094
|
+
ret;
|
|
2356
2095
|
var l = tokens.length;
|
|
2357
|
-
|
|
2358
2096
|
for (i = 0; i < l; i++) {
|
|
2359
|
-
token = tokens[i];
|
|
2097
|
+
token = tokens[i];
|
|
2360
2098
|
|
|
2099
|
+
// Run any renderer extensions
|
|
2361
2100
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2362
2101
|
ret = this.options.extensions.renderers[token.type].call({
|
|
2363
2102
|
parser: this
|
|
2364
2103
|
}, token);
|
|
2365
|
-
|
|
2366
2104
|
if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
|
|
2367
2105
|
out += ret || '';
|
|
2368
2106
|
continue;
|
|
2369
2107
|
}
|
|
2370
2108
|
}
|
|
2371
|
-
|
|
2372
2109
|
switch (token.type) {
|
|
2373
2110
|
case 'space':
|
|
2374
2111
|
{
|
|
2375
2112
|
continue;
|
|
2376
2113
|
}
|
|
2377
|
-
|
|
2378
2114
|
case 'hr':
|
|
2379
2115
|
{
|
|
2380
2116
|
out += this.renderer.hr();
|
|
2381
2117
|
continue;
|
|
2382
2118
|
}
|
|
2383
|
-
|
|
2384
2119
|
case 'heading':
|
|
2385
2120
|
{
|
|
2386
2121
|
out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);
|
|
2387
2122
|
continue;
|
|
2388
2123
|
}
|
|
2389
|
-
|
|
2390
2124
|
case 'code':
|
|
2391
2125
|
{
|
|
2392
2126
|
out += this.renderer.code(token.text, token.lang, token.escaped);
|
|
2393
2127
|
continue;
|
|
2394
2128
|
}
|
|
2395
|
-
|
|
2396
2129
|
case 'table':
|
|
2397
2130
|
{
|
|
2398
|
-
header = '';
|
|
2131
|
+
header = '';
|
|
2399
2132
|
|
|
2133
|
+
// header
|
|
2400
2134
|
cell = '';
|
|
2401
2135
|
l2 = token.header.length;
|
|
2402
|
-
|
|
2403
2136
|
for (j = 0; j < l2; j++) {
|
|
2404
2137
|
cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {
|
|
2405
2138
|
header: true,
|
|
2406
2139
|
align: token.align[j]
|
|
2407
2140
|
});
|
|
2408
2141
|
}
|
|
2409
|
-
|
|
2410
2142
|
header += this.renderer.tablerow(cell);
|
|
2411
2143
|
body = '';
|
|
2412
2144
|
l2 = token.rows.length;
|
|
2413
|
-
|
|
2414
2145
|
for (j = 0; j < l2; j++) {
|
|
2415
2146
|
row = token.rows[j];
|
|
2416
2147
|
cell = '';
|
|
2417
2148
|
l3 = row.length;
|
|
2418
|
-
|
|
2419
2149
|
for (k = 0; k < l3; k++) {
|
|
2420
2150
|
cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {
|
|
2421
2151
|
header: false,
|
|
2422
2152
|
align: token.align[k]
|
|
2423
2153
|
});
|
|
2424
2154
|
}
|
|
2425
|
-
|
|
2426
2155
|
body += this.renderer.tablerow(cell);
|
|
2427
2156
|
}
|
|
2428
|
-
|
|
2429
2157
|
out += this.renderer.table(header, body);
|
|
2430
2158
|
continue;
|
|
2431
2159
|
}
|
|
2432
|
-
|
|
2433
2160
|
case 'blockquote':
|
|
2434
2161
|
{
|
|
2435
2162
|
body = this.parse(token.tokens);
|
|
2436
2163
|
out += this.renderer.blockquote(body);
|
|
2437
2164
|
continue;
|
|
2438
2165
|
}
|
|
2439
|
-
|
|
2440
2166
|
case 'list':
|
|
2441
2167
|
{
|
|
2442
2168
|
ordered = token.ordered;
|
|
@@ -2444,20 +2170,16 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2444
2170
|
loose = token.loose;
|
|
2445
2171
|
l2 = token.items.length;
|
|
2446
2172
|
body = '';
|
|
2447
|
-
|
|
2448
2173
|
for (j = 0; j < l2; j++) {
|
|
2449
2174
|
item = token.items[j];
|
|
2450
2175
|
checked = item.checked;
|
|
2451
2176
|
task = item.task;
|
|
2452
2177
|
itemBody = '';
|
|
2453
|
-
|
|
2454
2178
|
if (item.task) {
|
|
2455
2179
|
checkbox = this.renderer.checkbox(checked);
|
|
2456
|
-
|
|
2457
2180
|
if (loose) {
|
|
2458
2181
|
if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
|
|
2459
2182
|
item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
|
|
2460
|
-
|
|
2461
2183
|
if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
|
|
2462
2184
|
item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
|
|
2463
2185
|
}
|
|
@@ -2471,45 +2193,36 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2471
2193
|
itemBody += checkbox;
|
|
2472
2194
|
}
|
|
2473
2195
|
}
|
|
2474
|
-
|
|
2475
2196
|
itemBody += this.parse(item.tokens, loose);
|
|
2476
2197
|
body += this.renderer.listitem(itemBody, task, checked);
|
|
2477
2198
|
}
|
|
2478
|
-
|
|
2479
2199
|
out += this.renderer.list(body, ordered, start);
|
|
2480
2200
|
continue;
|
|
2481
2201
|
}
|
|
2482
|
-
|
|
2483
2202
|
case 'html':
|
|
2484
2203
|
{
|
|
2485
2204
|
// TODO parse inline content if parameter markdown=1
|
|
2486
2205
|
out += this.renderer.html(token.text);
|
|
2487
2206
|
continue;
|
|
2488
2207
|
}
|
|
2489
|
-
|
|
2490
2208
|
case 'paragraph':
|
|
2491
2209
|
{
|
|
2492
2210
|
out += this.renderer.paragraph(this.parseInline(token.tokens));
|
|
2493
2211
|
continue;
|
|
2494
2212
|
}
|
|
2495
|
-
|
|
2496
2213
|
case 'text':
|
|
2497
2214
|
{
|
|
2498
2215
|
body = token.tokens ? this.parseInline(token.tokens) : token.text;
|
|
2499
|
-
|
|
2500
2216
|
while (i + 1 < l && tokens[i + 1].type === 'text') {
|
|
2501
2217
|
token = tokens[++i];
|
|
2502
2218
|
body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
|
|
2503
2219
|
}
|
|
2504
|
-
|
|
2505
2220
|
out += top ? this.renderer.paragraph(body) : body;
|
|
2506
2221
|
continue;
|
|
2507
2222
|
}
|
|
2508
|
-
|
|
2509
2223
|
default:
|
|
2510
2224
|
{
|
|
2511
2225
|
var errMsg = 'Token with "' + token.type + '" type was not found.';
|
|
2512
|
-
|
|
2513
2226
|
if (this.options.silent) {
|
|
2514
2227
|
console.error(errMsg);
|
|
2515
2228
|
return;
|
|
@@ -2519,101 +2232,86 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2519
2232
|
}
|
|
2520
2233
|
}
|
|
2521
2234
|
}
|
|
2522
|
-
|
|
2523
2235
|
return out;
|
|
2524
2236
|
}
|
|
2237
|
+
|
|
2525
2238
|
/**
|
|
2526
2239
|
* Parse Inline Tokens
|
|
2527
|
-
|
|
2528
|
-
;
|
|
2529
|
-
|
|
2240
|
+
*/;
|
|
2530
2241
|
_proto.parseInline = function parseInline(tokens, renderer) {
|
|
2531
2242
|
renderer = renderer || this.renderer;
|
|
2532
2243
|
var out = '',
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2244
|
+
i,
|
|
2245
|
+
token,
|
|
2246
|
+
ret;
|
|
2536
2247
|
var l = tokens.length;
|
|
2537
|
-
|
|
2538
2248
|
for (i = 0; i < l; i++) {
|
|
2539
|
-
token = tokens[i];
|
|
2249
|
+
token = tokens[i];
|
|
2540
2250
|
|
|
2251
|
+
// Run any renderer extensions
|
|
2541
2252
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2542
2253
|
ret = this.options.extensions.renderers[token.type].call({
|
|
2543
2254
|
parser: this
|
|
2544
2255
|
}, token);
|
|
2545
|
-
|
|
2546
2256
|
if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
|
|
2547
2257
|
out += ret || '';
|
|
2548
2258
|
continue;
|
|
2549
2259
|
}
|
|
2550
2260
|
}
|
|
2551
|
-
|
|
2552
2261
|
switch (token.type) {
|
|
2553
2262
|
case 'escape':
|
|
2554
2263
|
{
|
|
2555
2264
|
out += renderer.text(token.text);
|
|
2556
2265
|
break;
|
|
2557
2266
|
}
|
|
2558
|
-
|
|
2559
2267
|
case 'html':
|
|
2560
2268
|
{
|
|
2561
2269
|
out += renderer.html(token.text);
|
|
2562
2270
|
break;
|
|
2563
2271
|
}
|
|
2564
|
-
|
|
2565
2272
|
case 'link':
|
|
2566
2273
|
{
|
|
2567
2274
|
out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
|
|
2568
2275
|
break;
|
|
2569
2276
|
}
|
|
2570
|
-
|
|
2571
2277
|
case 'image':
|
|
2572
2278
|
{
|
|
2573
2279
|
out += renderer.image(token.href, token.title, token.text);
|
|
2574
2280
|
break;
|
|
2575
2281
|
}
|
|
2576
|
-
|
|
2577
2282
|
case 'strong':
|
|
2578
2283
|
{
|
|
2579
2284
|
out += renderer.strong(this.parseInline(token.tokens, renderer));
|
|
2580
2285
|
break;
|
|
2581
2286
|
}
|
|
2582
|
-
|
|
2583
2287
|
case 'em':
|
|
2584
2288
|
{
|
|
2585
2289
|
out += renderer.em(this.parseInline(token.tokens, renderer));
|
|
2586
2290
|
break;
|
|
2587
2291
|
}
|
|
2588
|
-
|
|
2589
2292
|
case 'codespan':
|
|
2590
2293
|
{
|
|
2591
2294
|
out += renderer.codespan(token.text);
|
|
2592
2295
|
break;
|
|
2593
2296
|
}
|
|
2594
|
-
|
|
2595
2297
|
case 'br':
|
|
2596
2298
|
{
|
|
2597
2299
|
out += renderer.br();
|
|
2598
2300
|
break;
|
|
2599
2301
|
}
|
|
2600
|
-
|
|
2601
2302
|
case 'del':
|
|
2602
2303
|
{
|
|
2603
2304
|
out += renderer.del(this.parseInline(token.tokens, renderer));
|
|
2604
2305
|
break;
|
|
2605
2306
|
}
|
|
2606
|
-
|
|
2607
2307
|
case 'text':
|
|
2608
2308
|
{
|
|
2609
2309
|
out += renderer.text(token.text);
|
|
2610
2310
|
break;
|
|
2611
2311
|
}
|
|
2612
|
-
|
|
2613
2312
|
default:
|
|
2614
2313
|
{
|
|
2615
2314
|
var errMsg = 'Token with "' + token.type + '" type was not found.';
|
|
2616
|
-
|
|
2617
2315
|
if (this.options.silent) {
|
|
2618
2316
|
console.error(errMsg);
|
|
2619
2317
|
return;
|
|
@@ -2623,68 +2321,54 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2623
2321
|
}
|
|
2624
2322
|
}
|
|
2625
2323
|
}
|
|
2626
|
-
|
|
2627
2324
|
return out;
|
|
2628
2325
|
};
|
|
2629
|
-
|
|
2630
2326
|
return Parser;
|
|
2631
2327
|
}();
|
|
2632
2328
|
|
|
2633
2329
|
/**
|
|
2634
2330
|
* Marked
|
|
2635
2331
|
*/
|
|
2636
|
-
|
|
2637
2332
|
function marked(src, opt, callback) {
|
|
2638
2333
|
// throw error in case of non string input
|
|
2639
2334
|
if (typeof src === 'undefined' || src === null) {
|
|
2640
2335
|
throw new Error('marked(): input parameter is undefined or null');
|
|
2641
2336
|
}
|
|
2642
|
-
|
|
2643
2337
|
if (typeof src !== 'string') {
|
|
2644
2338
|
throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
|
2645
2339
|
}
|
|
2646
|
-
|
|
2647
2340
|
if (typeof opt === 'function') {
|
|
2648
2341
|
callback = opt;
|
|
2649
2342
|
opt = null;
|
|
2650
2343
|
}
|
|
2651
|
-
|
|
2652
2344
|
opt = merge({}, marked.defaults, opt || {});
|
|
2653
2345
|
checkSanitizeDeprecation(opt);
|
|
2654
|
-
|
|
2655
2346
|
if (callback) {
|
|
2656
2347
|
var highlight = opt.highlight;
|
|
2657
2348
|
var tokens;
|
|
2658
|
-
|
|
2659
2349
|
try {
|
|
2660
2350
|
tokens = Lexer.lex(src, opt);
|
|
2661
2351
|
} catch (e) {
|
|
2662
2352
|
return callback(e);
|
|
2663
2353
|
}
|
|
2664
|
-
|
|
2665
2354
|
var done = function done(err) {
|
|
2666
2355
|
var out;
|
|
2667
|
-
|
|
2668
2356
|
if (!err) {
|
|
2669
2357
|
try {
|
|
2670
2358
|
if (opt.walkTokens) {
|
|
2671
2359
|
marked.walkTokens(tokens, opt.walkTokens);
|
|
2672
2360
|
}
|
|
2673
|
-
|
|
2674
2361
|
out = Parser.parse(tokens, opt);
|
|
2675
2362
|
} catch (e) {
|
|
2676
2363
|
err = e;
|
|
2677
2364
|
}
|
|
2678
2365
|
}
|
|
2679
|
-
|
|
2680
2366
|
opt.highlight = highlight;
|
|
2681
2367
|
return err ? callback(err) : callback(null, out);
|
|
2682
2368
|
};
|
|
2683
|
-
|
|
2684
2369
|
if (!highlight || highlight.length < 3) {
|
|
2685
2370
|
return done();
|
|
2686
2371
|
}
|
|
2687
|
-
|
|
2688
2372
|
delete opt.highlight;
|
|
2689
2373
|
if (!tokens.length) return done();
|
|
2690
2374
|
var pending = 0;
|
|
@@ -2696,14 +2380,11 @@ function marked(src, opt, callback) {
|
|
|
2696
2380
|
if (err) {
|
|
2697
2381
|
return done(err);
|
|
2698
2382
|
}
|
|
2699
|
-
|
|
2700
2383
|
if (code != null && code !== token.text) {
|
|
2701
2384
|
token.text = code;
|
|
2702
2385
|
token.escaped = true;
|
|
2703
2386
|
}
|
|
2704
|
-
|
|
2705
2387
|
pending--;
|
|
2706
|
-
|
|
2707
2388
|
if (pending === 0) {
|
|
2708
2389
|
done();
|
|
2709
2390
|
}
|
|
@@ -2711,42 +2392,34 @@ function marked(src, opt, callback) {
|
|
|
2711
2392
|
}, 0);
|
|
2712
2393
|
}
|
|
2713
2394
|
});
|
|
2714
|
-
|
|
2715
2395
|
if (pending === 0) {
|
|
2716
2396
|
done();
|
|
2717
2397
|
}
|
|
2718
|
-
|
|
2719
2398
|
return;
|
|
2720
2399
|
}
|
|
2721
|
-
|
|
2722
2400
|
function onError(e) {
|
|
2723
2401
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
2724
|
-
|
|
2725
2402
|
if (opt.silent) {
|
|
2726
2403
|
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
2727
2404
|
}
|
|
2728
|
-
|
|
2729
2405
|
throw e;
|
|
2730
2406
|
}
|
|
2731
|
-
|
|
2732
2407
|
try {
|
|
2733
2408
|
var _tokens = Lexer.lex(src, opt);
|
|
2734
|
-
|
|
2735
2409
|
if (opt.walkTokens) {
|
|
2736
2410
|
if (opt.async) {
|
|
2737
2411
|
return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
|
|
2738
2412
|
return Parser.parse(_tokens, opt);
|
|
2739
2413
|
})["catch"](onError);
|
|
2740
2414
|
}
|
|
2741
|
-
|
|
2742
2415
|
marked.walkTokens(_tokens, opt.walkTokens);
|
|
2743
2416
|
}
|
|
2744
|
-
|
|
2745
2417
|
return Parser.parse(_tokens, opt);
|
|
2746
2418
|
} catch (e) {
|
|
2747
2419
|
onError(e);
|
|
2748
2420
|
}
|
|
2749
2421
|
}
|
|
2422
|
+
|
|
2750
2423
|
/**
|
|
2751
2424
|
* Options
|
|
2752
2425
|
*/
|
|
@@ -2756,9 +2429,9 @@ marked.options = marked.setOptions = function (opt) {
|
|
|
2756
2429
|
changeDefaults(marked.defaults);
|
|
2757
2430
|
return marked;
|
|
2758
2431
|
};
|
|
2759
|
-
|
|
2760
2432
|
marked.getDefaults = getDefaults;
|
|
2761
2433
|
marked.defaults = exports.defaults;
|
|
2434
|
+
|
|
2762
2435
|
/**
|
|
2763
2436
|
* Use Extension
|
|
2764
2437
|
*/
|
|
@@ -2767,7 +2440,6 @@ marked.use = function () {
|
|
|
2767
2440
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2768
2441
|
args[_key] = arguments[_key];
|
|
2769
2442
|
}
|
|
2770
|
-
|
|
2771
2443
|
var opts = merge.apply(void 0, [{}].concat(args));
|
|
2772
2444
|
var extensions = marked.defaults.extensions || {
|
|
2773
2445
|
renderers: {},
|
|
@@ -2782,43 +2454,35 @@ marked.use = function () {
|
|
|
2782
2454
|
if (!ext.name) {
|
|
2783
2455
|
throw new Error('extension name required');
|
|
2784
2456
|
}
|
|
2785
|
-
|
|
2786
2457
|
if (ext.renderer) {
|
|
2787
2458
|
// Renderer extensions
|
|
2788
2459
|
var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;
|
|
2789
|
-
|
|
2790
2460
|
if (prevRenderer) {
|
|
2791
2461
|
// Replace extension with func to run new extension but fall back if false
|
|
2792
2462
|
extensions.renderers[ext.name] = function () {
|
|
2793
2463
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
2794
2464
|
args[_key2] = arguments[_key2];
|
|
2795
2465
|
}
|
|
2796
|
-
|
|
2797
2466
|
var ret = ext.renderer.apply(this, args);
|
|
2798
|
-
|
|
2799
2467
|
if (ret === false) {
|
|
2800
2468
|
ret = prevRenderer.apply(this, args);
|
|
2801
2469
|
}
|
|
2802
|
-
|
|
2803
2470
|
return ret;
|
|
2804
2471
|
};
|
|
2805
2472
|
} else {
|
|
2806
2473
|
extensions.renderers[ext.name] = ext.renderer;
|
|
2807
2474
|
}
|
|
2808
2475
|
}
|
|
2809
|
-
|
|
2810
2476
|
if (ext.tokenizer) {
|
|
2811
2477
|
// Tokenizer Extensions
|
|
2812
2478
|
if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {
|
|
2813
2479
|
throw new Error("extension level must be 'block' or 'inline'");
|
|
2814
2480
|
}
|
|
2815
|
-
|
|
2816
2481
|
if (extensions[ext.level]) {
|
|
2817
2482
|
extensions[ext.level].unshift(ext.tokenizer);
|
|
2818
2483
|
} else {
|
|
2819
2484
|
extensions[ext.level] = [ext.tokenizer];
|
|
2820
2485
|
}
|
|
2821
|
-
|
|
2822
2486
|
if (ext.start) {
|
|
2823
2487
|
// Function to check for start of token
|
|
2824
2488
|
if (ext.level === 'block') {
|
|
@@ -2836,110 +2500,89 @@ marked.use = function () {
|
|
|
2836
2500
|
}
|
|
2837
2501
|
}
|
|
2838
2502
|
}
|
|
2839
|
-
|
|
2840
2503
|
if (ext.childTokens) {
|
|
2841
2504
|
// Child tokens to be visited by walkTokens
|
|
2842
2505
|
extensions.childTokens[ext.name] = ext.childTokens;
|
|
2843
2506
|
}
|
|
2844
2507
|
});
|
|
2845
|
-
}
|
|
2846
|
-
|
|
2508
|
+
}
|
|
2847
2509
|
|
|
2510
|
+
// ==-- Parse "overwrite" extensions --== //
|
|
2848
2511
|
if (pack.renderer) {
|
|
2849
2512
|
(function () {
|
|
2850
2513
|
var renderer = marked.defaults.renderer || new Renderer();
|
|
2851
|
-
|
|
2852
2514
|
var _loop = function _loop(prop) {
|
|
2853
|
-
var prevRenderer = renderer[prop];
|
|
2854
|
-
|
|
2515
|
+
var prevRenderer = renderer[prop];
|
|
2516
|
+
// Replace renderer with func to run extension, but fall back if false
|
|
2855
2517
|
renderer[prop] = function () {
|
|
2856
2518
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
2857
2519
|
args[_key3] = arguments[_key3];
|
|
2858
2520
|
}
|
|
2859
|
-
|
|
2860
2521
|
var ret = pack.renderer[prop].apply(renderer, args);
|
|
2861
|
-
|
|
2862
2522
|
if (ret === false) {
|
|
2863
2523
|
ret = prevRenderer.apply(renderer, args);
|
|
2864
2524
|
}
|
|
2865
|
-
|
|
2866
2525
|
return ret;
|
|
2867
2526
|
};
|
|
2868
2527
|
};
|
|
2869
|
-
|
|
2870
2528
|
for (var prop in pack.renderer) {
|
|
2871
2529
|
_loop(prop);
|
|
2872
2530
|
}
|
|
2873
|
-
|
|
2874
2531
|
opts.renderer = renderer;
|
|
2875
2532
|
})();
|
|
2876
2533
|
}
|
|
2877
|
-
|
|
2878
2534
|
if (pack.tokenizer) {
|
|
2879
2535
|
(function () {
|
|
2880
2536
|
var tokenizer = marked.defaults.tokenizer || new Tokenizer();
|
|
2881
|
-
|
|
2882
2537
|
var _loop2 = function _loop2(prop) {
|
|
2883
|
-
var prevTokenizer = tokenizer[prop];
|
|
2884
|
-
|
|
2538
|
+
var prevTokenizer = tokenizer[prop];
|
|
2539
|
+
// Replace tokenizer with func to run extension, but fall back if false
|
|
2885
2540
|
tokenizer[prop] = function () {
|
|
2886
2541
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
2887
2542
|
args[_key4] = arguments[_key4];
|
|
2888
2543
|
}
|
|
2889
|
-
|
|
2890
2544
|
var ret = pack.tokenizer[prop].apply(tokenizer, args);
|
|
2891
|
-
|
|
2892
2545
|
if (ret === false) {
|
|
2893
2546
|
ret = prevTokenizer.apply(tokenizer, args);
|
|
2894
2547
|
}
|
|
2895
|
-
|
|
2896
2548
|
return ret;
|
|
2897
2549
|
};
|
|
2898
2550
|
};
|
|
2899
|
-
|
|
2900
2551
|
for (var prop in pack.tokenizer) {
|
|
2901
2552
|
_loop2(prop);
|
|
2902
2553
|
}
|
|
2903
|
-
|
|
2904
2554
|
opts.tokenizer = tokenizer;
|
|
2905
2555
|
})();
|
|
2906
|
-
}
|
|
2907
|
-
|
|
2556
|
+
}
|
|
2908
2557
|
|
|
2558
|
+
// ==-- Parse WalkTokens extensions --== //
|
|
2909
2559
|
if (pack.walkTokens) {
|
|
2910
2560
|
var _walkTokens = marked.defaults.walkTokens;
|
|
2911
|
-
|
|
2912
2561
|
opts.walkTokens = function (token) {
|
|
2913
2562
|
var values = [];
|
|
2914
2563
|
values.push(pack.walkTokens.call(this, token));
|
|
2915
|
-
|
|
2916
2564
|
if (_walkTokens) {
|
|
2917
2565
|
values = values.concat(_walkTokens.call(this, token));
|
|
2918
2566
|
}
|
|
2919
|
-
|
|
2920
2567
|
return values;
|
|
2921
2568
|
};
|
|
2922
2569
|
}
|
|
2923
|
-
|
|
2924
2570
|
if (hasExtensions) {
|
|
2925
2571
|
opts.extensions = extensions;
|
|
2926
2572
|
}
|
|
2927
|
-
|
|
2928
2573
|
marked.setOptions(opts);
|
|
2929
2574
|
});
|
|
2930
2575
|
};
|
|
2576
|
+
|
|
2931
2577
|
/**
|
|
2932
2578
|
* Run callback for every token
|
|
2933
2579
|
*/
|
|
2934
2580
|
|
|
2935
|
-
|
|
2936
2581
|
marked.walkTokens = function (tokens, callback) {
|
|
2937
2582
|
var values = [];
|
|
2938
|
-
|
|
2939
2583
|
var _loop3 = function _loop3() {
|
|
2940
2584
|
var token = _step.value;
|
|
2941
2585
|
values = values.concat(callback.call(marked, token));
|
|
2942
|
-
|
|
2943
2586
|
switch (token.type) {
|
|
2944
2587
|
case 'table':
|
|
2945
2588
|
{
|
|
@@ -2947,25 +2590,20 @@ marked.walkTokens = function (tokens, callback) {
|
|
|
2947
2590
|
var cell = _step2.value;
|
|
2948
2591
|
values = values.concat(marked.walkTokens(cell.tokens, callback));
|
|
2949
2592
|
}
|
|
2950
|
-
|
|
2951
2593
|
for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {
|
|
2952
2594
|
var row = _step3.value;
|
|
2953
|
-
|
|
2954
2595
|
for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {
|
|
2955
2596
|
var _cell = _step4.value;
|
|
2956
2597
|
values = values.concat(marked.walkTokens(_cell.tokens, callback));
|
|
2957
2598
|
}
|
|
2958
2599
|
}
|
|
2959
|
-
|
|
2960
2600
|
break;
|
|
2961
2601
|
}
|
|
2962
|
-
|
|
2963
2602
|
case 'list':
|
|
2964
2603
|
{
|
|
2965
2604
|
values = values.concat(marked.walkTokens(token.items, callback));
|
|
2966
2605
|
break;
|
|
2967
2606
|
}
|
|
2968
|
-
|
|
2969
2607
|
default:
|
|
2970
2608
|
{
|
|
2971
2609
|
if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {
|
|
@@ -2979,55 +2617,44 @@ marked.walkTokens = function (tokens, callback) {
|
|
|
2979
2617
|
}
|
|
2980
2618
|
}
|
|
2981
2619
|
};
|
|
2982
|
-
|
|
2983
2620
|
for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
|
|
2984
2621
|
_loop3();
|
|
2985
2622
|
}
|
|
2986
|
-
|
|
2987
2623
|
return values;
|
|
2988
2624
|
};
|
|
2625
|
+
|
|
2989
2626
|
/**
|
|
2990
2627
|
* Parse Inline
|
|
2991
2628
|
* @param {string} src
|
|
2992
2629
|
*/
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
2630
|
marked.parseInline = function (src, opt) {
|
|
2996
2631
|
// throw error in case of non string input
|
|
2997
2632
|
if (typeof src === 'undefined' || src === null) {
|
|
2998
2633
|
throw new Error('marked.parseInline(): input parameter is undefined or null');
|
|
2999
2634
|
}
|
|
3000
|
-
|
|
3001
2635
|
if (typeof src !== 'string') {
|
|
3002
2636
|
throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
|
3003
2637
|
}
|
|
3004
|
-
|
|
3005
2638
|
opt = merge({}, marked.defaults, opt || {});
|
|
3006
2639
|
checkSanitizeDeprecation(opt);
|
|
3007
|
-
|
|
3008
2640
|
try {
|
|
3009
2641
|
var tokens = Lexer.lexInline(src, opt);
|
|
3010
|
-
|
|
3011
2642
|
if (opt.walkTokens) {
|
|
3012
2643
|
marked.walkTokens(tokens, opt.walkTokens);
|
|
3013
2644
|
}
|
|
3014
|
-
|
|
3015
2645
|
return Parser.parseInline(tokens, opt);
|
|
3016
2646
|
} catch (e) {
|
|
3017
2647
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
3018
|
-
|
|
3019
2648
|
if (opt.silent) {
|
|
3020
2649
|
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
3021
2650
|
}
|
|
3022
|
-
|
|
3023
2651
|
throw e;
|
|
3024
2652
|
}
|
|
3025
2653
|
};
|
|
2654
|
+
|
|
3026
2655
|
/**
|
|
3027
2656
|
* Expose
|
|
3028
2657
|
*/
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
2658
|
marked.Parser = Parser;
|
|
3032
2659
|
marked.parser = Parser.parse;
|
|
3033
2660
|
marked.Renderer = Renderer;
|