marked 4.1.1 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/marked.cjs +260 -637
- package/lib/marked.umd.js +260 -637
- package/marked.min.js +1 -1
- package/package.json +12 -11
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,22 +924,22 @@ 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);
|
|
1059
930
|
|
|
931
|
+
// Create `em` if smallest delimiter has odd char count. *a***
|
|
1060
932
|
if (Math.min(lLength, rLength) % 2) {
|
|
1061
933
|
var _text = src.slice(1, lLength + match.index + rLength);
|
|
1062
|
-
|
|
1063
934
|
return {
|
|
1064
935
|
type: 'em',
|
|
1065
936
|
raw: src.slice(0, lLength + match.index + rLength + 1),
|
|
1066
937
|
text: _text,
|
|
1067
938
|
tokens: this.lexer.inlineTokens(_text)
|
|
1068
939
|
};
|
|
1069
|
-
}
|
|
1070
|
-
|
|
940
|
+
}
|
|
1071
941
|
|
|
942
|
+
// Create 'strong' if smallest delimiter has even char count. **a***
|
|
1072
943
|
var text = src.slice(2, lLength + match.index + rLength - 1);
|
|
1073
944
|
return {
|
|
1074
945
|
type: 'strong',
|
|
@@ -1079,19 +950,15 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1079
950
|
}
|
|
1080
951
|
}
|
|
1081
952
|
};
|
|
1082
|
-
|
|
1083
953
|
_proto.codespan = function codespan(src) {
|
|
1084
954
|
var cap = this.rules.inline.code.exec(src);
|
|
1085
|
-
|
|
1086
955
|
if (cap) {
|
|
1087
956
|
var text = cap[2].replace(/\n/g, ' ');
|
|
1088
957
|
var hasNonSpaceChars = /[^ ]/.test(text);
|
|
1089
958
|
var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
|
|
1090
|
-
|
|
1091
959
|
if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
|
|
1092
960
|
text = text.substring(1, text.length - 1);
|
|
1093
961
|
}
|
|
1094
|
-
|
|
1095
962
|
text = escape(text, true);
|
|
1096
963
|
return {
|
|
1097
964
|
type: 'codespan',
|
|
@@ -1100,10 +967,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1100
967
|
};
|
|
1101
968
|
}
|
|
1102
969
|
};
|
|
1103
|
-
|
|
1104
970
|
_proto.br = function br(src) {
|
|
1105
971
|
var cap = this.rules.inline.br.exec(src);
|
|
1106
|
-
|
|
1107
972
|
if (cap) {
|
|
1108
973
|
return {
|
|
1109
974
|
type: 'br',
|
|
@@ -1111,10 +976,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1111
976
|
};
|
|
1112
977
|
}
|
|
1113
978
|
};
|
|
1114
|
-
|
|
1115
979
|
_proto.del = function del(src) {
|
|
1116
980
|
var cap = this.rules.inline.del.exec(src);
|
|
1117
|
-
|
|
1118
981
|
if (cap) {
|
|
1119
982
|
return {
|
|
1120
983
|
type: 'del',
|
|
@@ -1124,13 +987,10 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1124
987
|
};
|
|
1125
988
|
}
|
|
1126
989
|
};
|
|
1127
|
-
|
|
1128
990
|
_proto.autolink = function autolink(src, mangle) {
|
|
1129
991
|
var cap = this.rules.inline.autolink.exec(src);
|
|
1130
|
-
|
|
1131
992
|
if (cap) {
|
|
1132
993
|
var text, href;
|
|
1133
|
-
|
|
1134
994
|
if (cap[2] === '@') {
|
|
1135
995
|
text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
|
|
1136
996
|
href = 'mailto:' + text;
|
|
@@ -1138,7 +998,6 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1138
998
|
text = escape(cap[1]);
|
|
1139
999
|
href = text;
|
|
1140
1000
|
}
|
|
1141
|
-
|
|
1142
1001
|
return {
|
|
1143
1002
|
type: 'link',
|
|
1144
1003
|
raw: cap[0],
|
|
@@ -1152,34 +1011,27 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1152
1011
|
};
|
|
1153
1012
|
}
|
|
1154
1013
|
};
|
|
1155
|
-
|
|
1156
1014
|
_proto.url = function url(src, mangle) {
|
|
1157
1015
|
var cap;
|
|
1158
|
-
|
|
1159
1016
|
if (cap = this.rules.inline.url.exec(src)) {
|
|
1160
1017
|
var text, href;
|
|
1161
|
-
|
|
1162
1018
|
if (cap[2] === '@') {
|
|
1163
1019
|
text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
|
|
1164
1020
|
href = 'mailto:' + text;
|
|
1165
1021
|
} else {
|
|
1166
1022
|
// do extended autolink path validation
|
|
1167
1023
|
var prevCapZero;
|
|
1168
|
-
|
|
1169
1024
|
do {
|
|
1170
1025
|
prevCapZero = cap[0];
|
|
1171
1026
|
cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
|
|
1172
1027
|
} while (prevCapZero !== cap[0]);
|
|
1173
|
-
|
|
1174
1028
|
text = escape(cap[0]);
|
|
1175
|
-
|
|
1176
1029
|
if (cap[1] === 'www.') {
|
|
1177
1030
|
href = 'http://' + text;
|
|
1178
1031
|
} else {
|
|
1179
1032
|
href = text;
|
|
1180
1033
|
}
|
|
1181
1034
|
}
|
|
1182
|
-
|
|
1183
1035
|
return {
|
|
1184
1036
|
type: 'link',
|
|
1185
1037
|
raw: cap[0],
|
|
@@ -1193,19 +1045,15 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1193
1045
|
};
|
|
1194
1046
|
}
|
|
1195
1047
|
};
|
|
1196
|
-
|
|
1197
1048
|
_proto.inlineText = function inlineText(src, smartypants) {
|
|
1198
1049
|
var cap = this.rules.inline.text.exec(src);
|
|
1199
|
-
|
|
1200
1050
|
if (cap) {
|
|
1201
1051
|
var text;
|
|
1202
|
-
|
|
1203
1052
|
if (this.lexer.state.inRawBlock) {
|
|
1204
1053
|
text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];
|
|
1205
1054
|
} else {
|
|
1206
1055
|
text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
|
|
1207
1056
|
}
|
|
1208
|
-
|
|
1209
1057
|
return {
|
|
1210
1058
|
type: 'text',
|
|
1211
1059
|
raw: cap[0],
|
|
@@ -1213,14 +1061,12 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1213
1061
|
};
|
|
1214
1062
|
}
|
|
1215
1063
|
};
|
|
1216
|
-
|
|
1217
1064
|
return Tokenizer;
|
|
1218
1065
|
}();
|
|
1219
1066
|
|
|
1220
1067
|
/**
|
|
1221
1068
|
* Block-Level Grammar
|
|
1222
1069
|
*/
|
|
1223
|
-
|
|
1224
1070
|
var block = {
|
|
1225
1071
|
newline: /^(?: *(?:\n|$))+/,
|
|
1226
1072
|
code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
|
|
@@ -1261,11 +1107,13 @@ block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('headin
|
|
|
1261
1107
|
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
|
|
1262
1108
|
.getRegex();
|
|
1263
1109
|
block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();
|
|
1110
|
+
|
|
1264
1111
|
/**
|
|
1265
1112
|
* Normal Block Grammar
|
|
1266
1113
|
*/
|
|
1267
1114
|
|
|
1268
1115
|
block.normal = merge({}, block);
|
|
1116
|
+
|
|
1269
1117
|
/**
|
|
1270
1118
|
* GFM Block Grammar
|
|
1271
1119
|
*/
|
|
@@ -1274,8 +1122,8 @@ block.gfm = merge({}, block.normal, {
|
|
|
1274
1122
|
table: '^ *([^\\n ].*\\|.*)\\n' // Header
|
|
1275
1123
|
+ ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
|
|
1276
1124
|
+ '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
|
|
1277
|
-
|
|
1278
1125
|
});
|
|
1126
|
+
|
|
1279
1127
|
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
1128
|
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
|
|
1281
1129
|
.getRegex();
|
|
@@ -1297,10 +1145,10 @@ block.pedantic = merge({}, block.normal, {
|
|
|
1297
1145
|
// fences not supported
|
|
1298
1146
|
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
1147
|
});
|
|
1148
|
+
|
|
1300
1149
|
/**
|
|
1301
1150
|
* Inline-Level Grammar
|
|
1302
1151
|
*/
|
|
1303
|
-
|
|
1304
1152
|
var inline = {
|
|
1305
1153
|
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
|
|
1306
1154
|
autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
|
|
@@ -1321,19 +1169,21 @@ var inline = {
|
|
|
1321
1169
|
// () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a
|
|
1322
1170
|
rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
|
|
1323
1171
|
rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
|
|
1324
|
-
|
|
1325
1172
|
},
|
|
1173
|
+
|
|
1326
1174
|
code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
|
|
1327
1175
|
br: /^( {2,}|\\)\n(?!\s*$)/,
|
|
1328
1176
|
del: noopTest,
|
|
1329
1177
|
text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
|
|
1330
1178
|
punctuation: /^([\spunctuation])/
|
|
1331
|
-
};
|
|
1332
|
-
// without * and _ to handle the different emphasis markers * and _
|
|
1179
|
+
};
|
|
1333
1180
|
|
|
1181
|
+
// list of punctuation marks from CommonMark spec
|
|
1182
|
+
// without * and _ to handle the different emphasis markers * and _
|
|
1334
1183
|
inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
|
|
1335
|
-
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();
|
|
1184
|
+
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();
|
|
1336
1185
|
|
|
1186
|
+
// sequences em should skip over [title](link), `code`, <html>
|
|
1337
1187
|
inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
|
|
1338
1188
|
inline.escapedEmSt = /\\\*|\\_/g;
|
|
1339
1189
|
inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();
|
|
@@ -1353,11 +1203,13 @@ inline.link = edit(inline.link).replace('label', inline._label).replace('href',
|
|
|
1353
1203
|
inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();
|
|
1354
1204
|
inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();
|
|
1355
1205
|
inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();
|
|
1206
|
+
|
|
1356
1207
|
/**
|
|
1357
1208
|
* Normal Inline Grammar
|
|
1358
1209
|
*/
|
|
1359
1210
|
|
|
1360
1211
|
inline.normal = merge({}, inline);
|
|
1212
|
+
|
|
1361
1213
|
/**
|
|
1362
1214
|
* Pedantic Inline Grammar
|
|
1363
1215
|
*/
|
|
@@ -1378,6 +1230,7 @@ inline.pedantic = merge({}, inline.normal, {
|
|
|
1378
1230
|
link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(),
|
|
1379
1231
|
reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex()
|
|
1380
1232
|
});
|
|
1233
|
+
|
|
1381
1234
|
/**
|
|
1382
1235
|
* GFM Inline Grammar
|
|
1383
1236
|
*/
|
|
@@ -1404,46 +1257,46 @@ inline.breaks = merge({}, inline.gfm, {
|
|
|
1404
1257
|
* smartypants text replacement
|
|
1405
1258
|
* @param {string} text
|
|
1406
1259
|
*/
|
|
1407
|
-
|
|
1408
1260
|
function smartypants(text) {
|
|
1409
|
-
return text
|
|
1410
|
-
|
|
1411
|
-
.replace(
|
|
1412
|
-
|
|
1413
|
-
.replace(
|
|
1414
|
-
|
|
1415
|
-
.replace(/"/g, "\
|
|
1261
|
+
return text
|
|
1262
|
+
// em-dashes
|
|
1263
|
+
.replace(/---/g, "\u2014")
|
|
1264
|
+
// en-dashes
|
|
1265
|
+
.replace(/--/g, "\u2013")
|
|
1266
|
+
// opening singles
|
|
1267
|
+
.replace(/(^|[-\u2014/(\[{"\s])'/g, "$1\u2018")
|
|
1268
|
+
// closing singles & apostrophes
|
|
1269
|
+
.replace(/'/g, "\u2019")
|
|
1270
|
+
// opening doubles
|
|
1271
|
+
.replace(/(^|[-\u2014/(\[{\u2018\s])"/g, "$1\u201C")
|
|
1272
|
+
// closing doubles
|
|
1273
|
+
.replace(/"/g, "\u201D")
|
|
1274
|
+
// ellipses
|
|
1416
1275
|
.replace(/\.{3}/g, "\u2026");
|
|
1417
1276
|
}
|
|
1277
|
+
|
|
1418
1278
|
/**
|
|
1419
1279
|
* mangle email addresses
|
|
1420
1280
|
* @param {string} text
|
|
1421
1281
|
*/
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
1282
|
function mangle(text) {
|
|
1425
1283
|
var out = '',
|
|
1426
|
-
|
|
1427
|
-
|
|
1284
|
+
i,
|
|
1285
|
+
ch;
|
|
1428
1286
|
var l = text.length;
|
|
1429
|
-
|
|
1430
1287
|
for (i = 0; i < l; i++) {
|
|
1431
1288
|
ch = text.charCodeAt(i);
|
|
1432
|
-
|
|
1433
1289
|
if (Math.random() > 0.5) {
|
|
1434
1290
|
ch = 'x' + ch.toString(16);
|
|
1435
1291
|
}
|
|
1436
|
-
|
|
1437
1292
|
out += '&#' + ch + ';';
|
|
1438
1293
|
}
|
|
1439
|
-
|
|
1440
1294
|
return out;
|
|
1441
1295
|
}
|
|
1296
|
+
|
|
1442
1297
|
/**
|
|
1443
1298
|
* Block Lexer
|
|
1444
1299
|
*/
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
1300
|
var Lexer = /*#__PURE__*/function () {
|
|
1448
1301
|
function Lexer(options) {
|
|
1449
1302
|
this.tokens = [];
|
|
@@ -1463,27 +1316,23 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1463
1316
|
block: block.normal,
|
|
1464
1317
|
inline: inline.normal
|
|
1465
1318
|
};
|
|
1466
|
-
|
|
1467
1319
|
if (this.options.pedantic) {
|
|
1468
1320
|
rules.block = block.pedantic;
|
|
1469
1321
|
rules.inline = inline.pedantic;
|
|
1470
1322
|
} else if (this.options.gfm) {
|
|
1471
1323
|
rules.block = block.gfm;
|
|
1472
|
-
|
|
1473
1324
|
if (this.options.breaks) {
|
|
1474
1325
|
rules.inline = inline.breaks;
|
|
1475
1326
|
} else {
|
|
1476
1327
|
rules.inline = inline.gfm;
|
|
1477
1328
|
}
|
|
1478
1329
|
}
|
|
1479
|
-
|
|
1480
1330
|
this.tokenizer.rules = rules;
|
|
1481
1331
|
}
|
|
1332
|
+
|
|
1482
1333
|
/**
|
|
1483
1334
|
* Expose Rules
|
|
1484
1335
|
*/
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
1336
|
/**
|
|
1488
1337
|
* Static Lex Method
|
|
1489
1338
|
*/
|
|
@@ -1491,45 +1340,37 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1491
1340
|
var lexer = new Lexer(options);
|
|
1492
1341
|
return lexer.lex(src);
|
|
1493
1342
|
}
|
|
1343
|
+
|
|
1494
1344
|
/**
|
|
1495
1345
|
* Static Lex Inline Method
|
|
1496
|
-
|
|
1497
|
-
;
|
|
1498
|
-
|
|
1346
|
+
*/;
|
|
1499
1347
|
Lexer.lexInline = function lexInline(src, options) {
|
|
1500
1348
|
var lexer = new Lexer(options);
|
|
1501
1349
|
return lexer.inlineTokens(src);
|
|
1502
1350
|
}
|
|
1351
|
+
|
|
1503
1352
|
/**
|
|
1504
1353
|
* Preprocessing
|
|
1505
|
-
|
|
1506
|
-
;
|
|
1507
|
-
|
|
1354
|
+
*/;
|
|
1508
1355
|
var _proto = Lexer.prototype;
|
|
1509
|
-
|
|
1510
1356
|
_proto.lex = function lex(src) {
|
|
1511
1357
|
src = src.replace(/\r\n|\r/g, '\n');
|
|
1512
1358
|
this.blockTokens(src, this.tokens);
|
|
1513
1359
|
var next;
|
|
1514
|
-
|
|
1515
1360
|
while (next = this.inlineQueue.shift()) {
|
|
1516
1361
|
this.inlineTokens(next.src, next.tokens);
|
|
1517
1362
|
}
|
|
1518
|
-
|
|
1519
1363
|
return this.tokens;
|
|
1520
1364
|
}
|
|
1365
|
+
|
|
1521
1366
|
/**
|
|
1522
1367
|
* Lexing
|
|
1523
|
-
|
|
1524
|
-
;
|
|
1525
|
-
|
|
1368
|
+
*/;
|
|
1526
1369
|
_proto.blockTokens = function blockTokens(src, tokens) {
|
|
1527
1370
|
var _this = this;
|
|
1528
|
-
|
|
1529
1371
|
if (tokens === void 0) {
|
|
1530
1372
|
tokens = [];
|
|
1531
1373
|
}
|
|
1532
|
-
|
|
1533
1374
|
if (this.options.pedantic) {
|
|
1534
1375
|
src = src.replace(/\t/g, ' ').replace(/^ +$/gm, '');
|
|
1535
1376
|
} else {
|
|
@@ -1537,9 +1378,7 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1537
1378
|
return leading + ' '.repeat(tabs.length);
|
|
1538
1379
|
});
|
|
1539
1380
|
}
|
|
1540
|
-
|
|
1541
1381
|
var token, lastToken, cutSrc, lastParagraphClipped;
|
|
1542
|
-
|
|
1543
1382
|
while (src) {
|
|
1544
1383
|
if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {
|
|
1545
1384
|
if (token = extTokenizer.call({
|
|
@@ -1549,16 +1388,14 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1549
1388
|
tokens.push(token);
|
|
1550
1389
|
return true;
|
|
1551
1390
|
}
|
|
1552
|
-
|
|
1553
1391
|
return false;
|
|
1554
1392
|
})) {
|
|
1555
1393
|
continue;
|
|
1556
|
-
}
|
|
1557
|
-
|
|
1394
|
+
}
|
|
1558
1395
|
|
|
1396
|
+
// newline
|
|
1559
1397
|
if (token = this.tokenizer.space(src)) {
|
|
1560
1398
|
src = src.substring(token.raw.length);
|
|
1561
|
-
|
|
1562
1399
|
if (token.raw.length === 1 && tokens.length > 0) {
|
|
1563
1400
|
// if there's a single \n as a spacer, it's terminating the last line,
|
|
1564
1401
|
// so move it there so that we don't get unecessary paragraph tags
|
|
@@ -1566,15 +1403,14 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1566
1403
|
} else {
|
|
1567
1404
|
tokens.push(token);
|
|
1568
1405
|
}
|
|
1569
|
-
|
|
1570
1406
|
continue;
|
|
1571
|
-
}
|
|
1572
|
-
|
|
1407
|
+
}
|
|
1573
1408
|
|
|
1409
|
+
// code
|
|
1574
1410
|
if (token = this.tokenizer.code(src)) {
|
|
1575
1411
|
src = src.substring(token.raw.length);
|
|
1576
|
-
lastToken = tokens[tokens.length - 1];
|
|
1577
|
-
|
|
1412
|
+
lastToken = tokens[tokens.length - 1];
|
|
1413
|
+
// An indented code block cannot interrupt a paragraph.
|
|
1578
1414
|
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1579
1415
|
lastToken.raw += '\n' + token.raw;
|
|
1580
1416
|
lastToken.text += '\n' + token.text;
|
|
@@ -1582,57 +1418,55 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1582
1418
|
} else {
|
|
1583
1419
|
tokens.push(token);
|
|
1584
1420
|
}
|
|
1585
|
-
|
|
1586
1421
|
continue;
|
|
1587
|
-
}
|
|
1588
|
-
|
|
1422
|
+
}
|
|
1589
1423
|
|
|
1424
|
+
// fences
|
|
1590
1425
|
if (token = this.tokenizer.fences(src)) {
|
|
1591
1426
|
src = src.substring(token.raw.length);
|
|
1592
1427
|
tokens.push(token);
|
|
1593
1428
|
continue;
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1429
|
+
}
|
|
1596
1430
|
|
|
1431
|
+
// heading
|
|
1597
1432
|
if (token = this.tokenizer.heading(src)) {
|
|
1598
1433
|
src = src.substring(token.raw.length);
|
|
1599
1434
|
tokens.push(token);
|
|
1600
1435
|
continue;
|
|
1601
|
-
}
|
|
1602
|
-
|
|
1436
|
+
}
|
|
1603
1437
|
|
|
1438
|
+
// hr
|
|
1604
1439
|
if (token = this.tokenizer.hr(src)) {
|
|
1605
1440
|
src = src.substring(token.raw.length);
|
|
1606
1441
|
tokens.push(token);
|
|
1607
1442
|
continue;
|
|
1608
|
-
}
|
|
1609
|
-
|
|
1443
|
+
}
|
|
1610
1444
|
|
|
1445
|
+
// blockquote
|
|
1611
1446
|
if (token = this.tokenizer.blockquote(src)) {
|
|
1612
1447
|
src = src.substring(token.raw.length);
|
|
1613
1448
|
tokens.push(token);
|
|
1614
1449
|
continue;
|
|
1615
|
-
}
|
|
1616
|
-
|
|
1450
|
+
}
|
|
1617
1451
|
|
|
1452
|
+
// list
|
|
1618
1453
|
if (token = this.tokenizer.list(src)) {
|
|
1619
1454
|
src = src.substring(token.raw.length);
|
|
1620
1455
|
tokens.push(token);
|
|
1621
1456
|
continue;
|
|
1622
|
-
}
|
|
1623
|
-
|
|
1457
|
+
}
|
|
1624
1458
|
|
|
1459
|
+
// html
|
|
1625
1460
|
if (token = this.tokenizer.html(src)) {
|
|
1626
1461
|
src = src.substring(token.raw.length);
|
|
1627
1462
|
tokens.push(token);
|
|
1628
1463
|
continue;
|
|
1629
|
-
}
|
|
1630
|
-
|
|
1464
|
+
}
|
|
1631
1465
|
|
|
1466
|
+
// def
|
|
1632
1467
|
if (token = this.tokenizer.def(src)) {
|
|
1633
1468
|
src = src.substring(token.raw.length);
|
|
1634
1469
|
lastToken = tokens[tokens.length - 1];
|
|
1635
|
-
|
|
1636
1470
|
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1637
1471
|
lastToken.raw += '\n' + token.raw;
|
|
1638
1472
|
lastToken.text += '\n' + token.raw;
|
|
@@ -1643,53 +1477,46 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1643
1477
|
title: token.title
|
|
1644
1478
|
};
|
|
1645
1479
|
}
|
|
1646
|
-
|
|
1647
1480
|
continue;
|
|
1648
|
-
}
|
|
1649
|
-
|
|
1481
|
+
}
|
|
1650
1482
|
|
|
1483
|
+
// table (gfm)
|
|
1651
1484
|
if (token = this.tokenizer.table(src)) {
|
|
1652
1485
|
src = src.substring(token.raw.length);
|
|
1653
1486
|
tokens.push(token);
|
|
1654
1487
|
continue;
|
|
1655
|
-
}
|
|
1656
|
-
|
|
1488
|
+
}
|
|
1657
1489
|
|
|
1490
|
+
// lheading
|
|
1658
1491
|
if (token = this.tokenizer.lheading(src)) {
|
|
1659
1492
|
src = src.substring(token.raw.length);
|
|
1660
1493
|
tokens.push(token);
|
|
1661
1494
|
continue;
|
|
1662
|
-
}
|
|
1663
|
-
// prevent paragraph consuming extensions by clipping 'src' to extension start
|
|
1664
|
-
|
|
1495
|
+
}
|
|
1665
1496
|
|
|
1497
|
+
// top-level paragraph
|
|
1498
|
+
// prevent paragraph consuming extensions by clipping 'src' to extension start
|
|
1666
1499
|
cutSrc = src;
|
|
1667
|
-
|
|
1668
1500
|
if (this.options.extensions && this.options.extensions.startBlock) {
|
|
1669
1501
|
(function () {
|
|
1670
1502
|
var startIndex = Infinity;
|
|
1671
1503
|
var tempSrc = src.slice(1);
|
|
1672
1504
|
var tempStart = void 0;
|
|
1673
|
-
|
|
1674
1505
|
_this.options.extensions.startBlock.forEach(function (getStartIndex) {
|
|
1675
1506
|
tempStart = getStartIndex.call({
|
|
1676
1507
|
lexer: this
|
|
1677
1508
|
}, tempSrc);
|
|
1678
|
-
|
|
1679
1509
|
if (typeof tempStart === 'number' && tempStart >= 0) {
|
|
1680
1510
|
startIndex = Math.min(startIndex, tempStart);
|
|
1681
1511
|
}
|
|
1682
1512
|
});
|
|
1683
|
-
|
|
1684
1513
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1685
1514
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1686
1515
|
}
|
|
1687
1516
|
})();
|
|
1688
1517
|
}
|
|
1689
|
-
|
|
1690
1518
|
if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
|
|
1691
1519
|
lastToken = tokens[tokens.length - 1];
|
|
1692
|
-
|
|
1693
1520
|
if (lastParagraphClipped && lastToken.type === 'paragraph') {
|
|
1694
1521
|
lastToken.raw += '\n' + token.raw;
|
|
1695
1522
|
lastToken.text += '\n' + token.text;
|
|
@@ -1698,17 +1525,15 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1698
1525
|
} else {
|
|
1699
1526
|
tokens.push(token);
|
|
1700
1527
|
}
|
|
1701
|
-
|
|
1702
1528
|
lastParagraphClipped = cutSrc.length !== src.length;
|
|
1703
1529
|
src = src.substring(token.raw.length);
|
|
1704
1530
|
continue;
|
|
1705
|
-
}
|
|
1706
|
-
|
|
1531
|
+
}
|
|
1707
1532
|
|
|
1533
|
+
// text
|
|
1708
1534
|
if (token = this.tokenizer.text(src)) {
|
|
1709
1535
|
src = src.substring(token.raw.length);
|
|
1710
1536
|
lastToken = tokens[tokens.length - 1];
|
|
1711
|
-
|
|
1712
1537
|
if (lastToken && lastToken.type === 'text') {
|
|
1713
1538
|
lastToken.raw += '\n' + token.raw;
|
|
1714
1539
|
lastToken.text += '\n' + token.text;
|
|
@@ -1717,13 +1542,10 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1717
1542
|
} else {
|
|
1718
1543
|
tokens.push(token);
|
|
1719
1544
|
}
|
|
1720
|
-
|
|
1721
1545
|
continue;
|
|
1722
1546
|
}
|
|
1723
|
-
|
|
1724
1547
|
if (src) {
|
|
1725
1548
|
var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
|
|
1726
|
-
|
|
1727
1549
|
if (this.options.silent) {
|
|
1728
1550
|
console.error(errMsg);
|
|
1729
1551
|
break;
|
|
@@ -1732,43 +1554,38 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1732
1554
|
}
|
|
1733
1555
|
}
|
|
1734
1556
|
}
|
|
1735
|
-
|
|
1736
1557
|
this.state.top = true;
|
|
1737
1558
|
return tokens;
|
|
1738
1559
|
};
|
|
1739
|
-
|
|
1740
1560
|
_proto.inline = function inline(src, tokens) {
|
|
1741
1561
|
if (tokens === void 0) {
|
|
1742
1562
|
tokens = [];
|
|
1743
1563
|
}
|
|
1744
|
-
|
|
1745
1564
|
this.inlineQueue.push({
|
|
1746
1565
|
src: src,
|
|
1747
1566
|
tokens: tokens
|
|
1748
1567
|
});
|
|
1749
1568
|
return tokens;
|
|
1750
1569
|
}
|
|
1570
|
+
|
|
1751
1571
|
/**
|
|
1752
1572
|
* Lexing/Compiling
|
|
1753
|
-
|
|
1754
|
-
;
|
|
1755
|
-
|
|
1573
|
+
*/;
|
|
1756
1574
|
_proto.inlineTokens = function inlineTokens(src, tokens) {
|
|
1757
1575
|
var _this2 = this;
|
|
1758
|
-
|
|
1759
1576
|
if (tokens === void 0) {
|
|
1760
1577
|
tokens = [];
|
|
1761
1578
|
}
|
|
1579
|
+
var token, lastToken, cutSrc;
|
|
1762
1580
|
|
|
1763
|
-
|
|
1764
|
-
|
|
1581
|
+
// String with links masked to avoid interference with em and strong
|
|
1765
1582
|
var maskedSrc = src;
|
|
1766
1583
|
var match;
|
|
1767
|
-
var keepPrevChar, prevChar;
|
|
1584
|
+
var keepPrevChar, prevChar;
|
|
1768
1585
|
|
|
1586
|
+
// Mask out reflinks
|
|
1769
1587
|
if (this.tokens.links) {
|
|
1770
1588
|
var links = Object.keys(this.tokens.links);
|
|
1771
|
-
|
|
1772
1589
|
if (links.length > 0) {
|
|
1773
1590
|
while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
|
|
1774
1591
|
if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
|
|
@@ -1776,25 +1593,23 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1776
1593
|
}
|
|
1777
1594
|
}
|
|
1778
1595
|
}
|
|
1779
|
-
}
|
|
1780
|
-
|
|
1781
|
-
|
|
1596
|
+
}
|
|
1597
|
+
// Mask out other blocks
|
|
1782
1598
|
while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
|
|
1783
1599
|
maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
|
|
1784
|
-
}
|
|
1785
|
-
|
|
1600
|
+
}
|
|
1786
1601
|
|
|
1602
|
+
// Mask out escaped em & strong delimiters
|
|
1787
1603
|
while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
|
|
1788
1604
|
maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
|
|
1789
1605
|
}
|
|
1790
|
-
|
|
1791
1606
|
while (src) {
|
|
1792
1607
|
if (!keepPrevChar) {
|
|
1793
1608
|
prevChar = '';
|
|
1794
1609
|
}
|
|
1610
|
+
keepPrevChar = false;
|
|
1795
1611
|
|
|
1796
|
-
|
|
1797
|
-
|
|
1612
|
+
// extensions
|
|
1798
1613
|
if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {
|
|
1799
1614
|
if (token = extTokenizer.call({
|
|
1800
1615
|
lexer: _this2
|
|
@@ -1803,148 +1618,132 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1803
1618
|
tokens.push(token);
|
|
1804
1619
|
return true;
|
|
1805
1620
|
}
|
|
1806
|
-
|
|
1807
1621
|
return false;
|
|
1808
1622
|
})) {
|
|
1809
1623
|
continue;
|
|
1810
|
-
}
|
|
1811
|
-
|
|
1624
|
+
}
|
|
1812
1625
|
|
|
1626
|
+
// escape
|
|
1813
1627
|
if (token = this.tokenizer.escape(src)) {
|
|
1814
1628
|
src = src.substring(token.raw.length);
|
|
1815
1629
|
tokens.push(token);
|
|
1816
1630
|
continue;
|
|
1817
|
-
}
|
|
1818
|
-
|
|
1631
|
+
}
|
|
1819
1632
|
|
|
1633
|
+
// tag
|
|
1820
1634
|
if (token = this.tokenizer.tag(src)) {
|
|
1821
1635
|
src = src.substring(token.raw.length);
|
|
1822
1636
|
lastToken = tokens[tokens.length - 1];
|
|
1823
|
-
|
|
1824
1637
|
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1825
1638
|
lastToken.raw += token.raw;
|
|
1826
1639
|
lastToken.text += token.text;
|
|
1827
1640
|
} else {
|
|
1828
1641
|
tokens.push(token);
|
|
1829
1642
|
}
|
|
1830
|
-
|
|
1831
1643
|
continue;
|
|
1832
|
-
}
|
|
1833
|
-
|
|
1644
|
+
}
|
|
1834
1645
|
|
|
1646
|
+
// link
|
|
1835
1647
|
if (token = this.tokenizer.link(src)) {
|
|
1836
1648
|
src = src.substring(token.raw.length);
|
|
1837
1649
|
tokens.push(token);
|
|
1838
1650
|
continue;
|
|
1839
|
-
}
|
|
1840
|
-
|
|
1651
|
+
}
|
|
1841
1652
|
|
|
1653
|
+
// reflink, nolink
|
|
1842
1654
|
if (token = this.tokenizer.reflink(src, this.tokens.links)) {
|
|
1843
1655
|
src = src.substring(token.raw.length);
|
|
1844
1656
|
lastToken = tokens[tokens.length - 1];
|
|
1845
|
-
|
|
1846
1657
|
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1847
1658
|
lastToken.raw += token.raw;
|
|
1848
1659
|
lastToken.text += token.text;
|
|
1849
1660
|
} else {
|
|
1850
1661
|
tokens.push(token);
|
|
1851
1662
|
}
|
|
1852
|
-
|
|
1853
1663
|
continue;
|
|
1854
|
-
}
|
|
1855
|
-
|
|
1664
|
+
}
|
|
1856
1665
|
|
|
1666
|
+
// em & strong
|
|
1857
1667
|
if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
|
|
1858
1668
|
src = src.substring(token.raw.length);
|
|
1859
1669
|
tokens.push(token);
|
|
1860
1670
|
continue;
|
|
1861
|
-
}
|
|
1862
|
-
|
|
1671
|
+
}
|
|
1863
1672
|
|
|
1673
|
+
// code
|
|
1864
1674
|
if (token = this.tokenizer.codespan(src)) {
|
|
1865
1675
|
src = src.substring(token.raw.length);
|
|
1866
1676
|
tokens.push(token);
|
|
1867
1677
|
continue;
|
|
1868
|
-
}
|
|
1869
|
-
|
|
1678
|
+
}
|
|
1870
1679
|
|
|
1680
|
+
// br
|
|
1871
1681
|
if (token = this.tokenizer.br(src)) {
|
|
1872
1682
|
src = src.substring(token.raw.length);
|
|
1873
1683
|
tokens.push(token);
|
|
1874
1684
|
continue;
|
|
1875
|
-
}
|
|
1876
|
-
|
|
1685
|
+
}
|
|
1877
1686
|
|
|
1687
|
+
// del (gfm)
|
|
1878
1688
|
if (token = this.tokenizer.del(src)) {
|
|
1879
1689
|
src = src.substring(token.raw.length);
|
|
1880
1690
|
tokens.push(token);
|
|
1881
1691
|
continue;
|
|
1882
|
-
}
|
|
1883
|
-
|
|
1692
|
+
}
|
|
1884
1693
|
|
|
1694
|
+
// autolink
|
|
1885
1695
|
if (token = this.tokenizer.autolink(src, mangle)) {
|
|
1886
1696
|
src = src.substring(token.raw.length);
|
|
1887
1697
|
tokens.push(token);
|
|
1888
1698
|
continue;
|
|
1889
|
-
}
|
|
1890
|
-
|
|
1699
|
+
}
|
|
1891
1700
|
|
|
1701
|
+
// url (gfm)
|
|
1892
1702
|
if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
|
|
1893
1703
|
src = src.substring(token.raw.length);
|
|
1894
1704
|
tokens.push(token);
|
|
1895
1705
|
continue;
|
|
1896
|
-
}
|
|
1897
|
-
// prevent inlineText consuming extensions by clipping 'src' to extension start
|
|
1898
|
-
|
|
1706
|
+
}
|
|
1899
1707
|
|
|
1708
|
+
// text
|
|
1709
|
+
// prevent inlineText consuming extensions by clipping 'src' to extension start
|
|
1900
1710
|
cutSrc = src;
|
|
1901
|
-
|
|
1902
1711
|
if (this.options.extensions && this.options.extensions.startInline) {
|
|
1903
1712
|
(function () {
|
|
1904
1713
|
var startIndex = Infinity;
|
|
1905
1714
|
var tempSrc = src.slice(1);
|
|
1906
1715
|
var tempStart = void 0;
|
|
1907
|
-
|
|
1908
1716
|
_this2.options.extensions.startInline.forEach(function (getStartIndex) {
|
|
1909
1717
|
tempStart = getStartIndex.call({
|
|
1910
1718
|
lexer: this
|
|
1911
1719
|
}, tempSrc);
|
|
1912
|
-
|
|
1913
1720
|
if (typeof tempStart === 'number' && tempStart >= 0) {
|
|
1914
1721
|
startIndex = Math.min(startIndex, tempStart);
|
|
1915
1722
|
}
|
|
1916
1723
|
});
|
|
1917
|
-
|
|
1918
1724
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1919
1725
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1920
1726
|
}
|
|
1921
1727
|
})();
|
|
1922
1728
|
}
|
|
1923
|
-
|
|
1924
1729
|
if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
|
|
1925
1730
|
src = src.substring(token.raw.length);
|
|
1926
|
-
|
|
1927
1731
|
if (token.raw.slice(-1) !== '_') {
|
|
1928
1732
|
// Track prevChar before string of ____ started
|
|
1929
1733
|
prevChar = token.raw.slice(-1);
|
|
1930
1734
|
}
|
|
1931
|
-
|
|
1932
1735
|
keepPrevChar = true;
|
|
1933
1736
|
lastToken = tokens[tokens.length - 1];
|
|
1934
|
-
|
|
1935
1737
|
if (lastToken && lastToken.type === 'text') {
|
|
1936
1738
|
lastToken.raw += token.raw;
|
|
1937
1739
|
lastToken.text += token.text;
|
|
1938
1740
|
} else {
|
|
1939
1741
|
tokens.push(token);
|
|
1940
1742
|
}
|
|
1941
|
-
|
|
1942
1743
|
continue;
|
|
1943
1744
|
}
|
|
1944
|
-
|
|
1945
1745
|
if (src) {
|
|
1946
1746
|
var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
|
|
1947
|
-
|
|
1948
1747
|
if (this.options.silent) {
|
|
1949
1748
|
console.error(errMsg);
|
|
1950
1749
|
break;
|
|
@@ -1953,10 +1752,8 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1953
1752
|
}
|
|
1954
1753
|
}
|
|
1955
1754
|
}
|
|
1956
|
-
|
|
1957
1755
|
return tokens;
|
|
1958
1756
|
};
|
|
1959
|
-
|
|
1960
1757
|
_createClass(Lexer, null, [{
|
|
1961
1758
|
key: "rules",
|
|
1962
1759
|
get: function get() {
|
|
@@ -1966,212 +1763,175 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1966
1763
|
};
|
|
1967
1764
|
}
|
|
1968
1765
|
}]);
|
|
1969
|
-
|
|
1970
1766
|
return Lexer;
|
|
1971
1767
|
}();
|
|
1972
1768
|
|
|
1973
1769
|
/**
|
|
1974
1770
|
* Renderer
|
|
1975
1771
|
*/
|
|
1976
|
-
|
|
1977
1772
|
var Renderer = /*#__PURE__*/function () {
|
|
1978
1773
|
function Renderer(options) {
|
|
1979
1774
|
this.options = options || exports.defaults;
|
|
1980
1775
|
}
|
|
1981
|
-
|
|
1982
1776
|
var _proto = Renderer.prototype;
|
|
1983
|
-
|
|
1984
1777
|
_proto.code = function code(_code, infostring, escaped) {
|
|
1985
1778
|
var lang = (infostring || '').match(/\S*/)[0];
|
|
1986
|
-
|
|
1987
1779
|
if (this.options.highlight) {
|
|
1988
1780
|
var out = this.options.highlight(_code, lang);
|
|
1989
|
-
|
|
1990
1781
|
if (out != null && out !== _code) {
|
|
1991
1782
|
escaped = true;
|
|
1992
1783
|
_code = out;
|
|
1993
1784
|
}
|
|
1994
1785
|
}
|
|
1995
|
-
|
|
1996
1786
|
_code = _code.replace(/\n$/, '') + '\n';
|
|
1997
|
-
|
|
1998
1787
|
if (!lang) {
|
|
1999
1788
|
return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
|
|
2000
1789
|
}
|
|
2001
|
-
|
|
2002
1790
|
return '<pre><code class="' + this.options.langPrefix + escape(lang, true) + '">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
|
|
2003
1791
|
}
|
|
1792
|
+
|
|
2004
1793
|
/**
|
|
2005
1794
|
* @param {string} quote
|
|
2006
|
-
|
|
2007
|
-
;
|
|
2008
|
-
|
|
1795
|
+
*/;
|
|
2009
1796
|
_proto.blockquote = function blockquote(quote) {
|
|
2010
1797
|
return "<blockquote>\n" + quote + "</blockquote>\n";
|
|
2011
1798
|
};
|
|
2012
|
-
|
|
2013
1799
|
_proto.html = function html(_html) {
|
|
2014
1800
|
return _html;
|
|
2015
1801
|
}
|
|
1802
|
+
|
|
2016
1803
|
/**
|
|
2017
1804
|
* @param {string} text
|
|
2018
1805
|
* @param {string} level
|
|
2019
1806
|
* @param {string} raw
|
|
2020
1807
|
* @param {any} slugger
|
|
2021
|
-
|
|
2022
|
-
;
|
|
2023
|
-
|
|
1808
|
+
*/;
|
|
2024
1809
|
_proto.heading = function heading(text, level, raw, slugger) {
|
|
2025
1810
|
if (this.options.headerIds) {
|
|
2026
1811
|
var id = this.options.headerPrefix + slugger.slug(raw);
|
|
2027
1812
|
return "<h" + level + " id=\"" + id + "\">" + text + "</h" + level + ">\n";
|
|
2028
|
-
}
|
|
2029
|
-
|
|
1813
|
+
}
|
|
2030
1814
|
|
|
1815
|
+
// ignore IDs
|
|
2031
1816
|
return "<h" + level + ">" + text + "</h" + level + ">\n";
|
|
2032
1817
|
};
|
|
2033
|
-
|
|
2034
1818
|
_proto.hr = function hr() {
|
|
2035
1819
|
return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
|
|
2036
1820
|
};
|
|
2037
|
-
|
|
2038
1821
|
_proto.list = function list(body, ordered, start) {
|
|
2039
1822
|
var type = ordered ? 'ol' : 'ul',
|
|
2040
|
-
|
|
1823
|
+
startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
|
|
2041
1824
|
return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
|
|
2042
1825
|
}
|
|
1826
|
+
|
|
2043
1827
|
/**
|
|
2044
1828
|
* @param {string} text
|
|
2045
|
-
|
|
2046
|
-
;
|
|
2047
|
-
|
|
1829
|
+
*/;
|
|
2048
1830
|
_proto.listitem = function listitem(text) {
|
|
2049
1831
|
return "<li>" + text + "</li>\n";
|
|
2050
1832
|
};
|
|
2051
|
-
|
|
2052
1833
|
_proto.checkbox = function checkbox(checked) {
|
|
2053
1834
|
return '<input ' + (checked ? 'checked="" ' : '') + 'disabled="" type="checkbox"' + (this.options.xhtml ? ' /' : '') + '> ';
|
|
2054
1835
|
}
|
|
1836
|
+
|
|
2055
1837
|
/**
|
|
2056
1838
|
* @param {string} text
|
|
2057
|
-
|
|
2058
|
-
;
|
|
2059
|
-
|
|
1839
|
+
*/;
|
|
2060
1840
|
_proto.paragraph = function paragraph(text) {
|
|
2061
1841
|
return "<p>" + text + "</p>\n";
|
|
2062
1842
|
}
|
|
1843
|
+
|
|
2063
1844
|
/**
|
|
2064
1845
|
* @param {string} header
|
|
2065
1846
|
* @param {string} body
|
|
2066
|
-
|
|
2067
|
-
;
|
|
2068
|
-
|
|
1847
|
+
*/;
|
|
2069
1848
|
_proto.table = function table(header, body) {
|
|
2070
1849
|
if (body) body = "<tbody>" + body + "</tbody>";
|
|
2071
1850
|
return '<table>\n' + '<thead>\n' + header + '</thead>\n' + body + '</table>\n';
|
|
2072
1851
|
}
|
|
1852
|
+
|
|
2073
1853
|
/**
|
|
2074
1854
|
* @param {string} content
|
|
2075
|
-
|
|
2076
|
-
;
|
|
2077
|
-
|
|
1855
|
+
*/;
|
|
2078
1856
|
_proto.tablerow = function tablerow(content) {
|
|
2079
1857
|
return "<tr>\n" + content + "</tr>\n";
|
|
2080
1858
|
};
|
|
2081
|
-
|
|
2082
1859
|
_proto.tablecell = function tablecell(content, flags) {
|
|
2083
1860
|
var type = flags.header ? 'th' : 'td';
|
|
2084
1861
|
var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">";
|
|
2085
1862
|
return tag + content + ("</" + type + ">\n");
|
|
2086
1863
|
}
|
|
1864
|
+
|
|
2087
1865
|
/**
|
|
2088
1866
|
* span level renderer
|
|
2089
1867
|
* @param {string} text
|
|
2090
|
-
|
|
2091
|
-
;
|
|
2092
|
-
|
|
1868
|
+
*/;
|
|
2093
1869
|
_proto.strong = function strong(text) {
|
|
2094
1870
|
return "<strong>" + text + "</strong>";
|
|
2095
1871
|
}
|
|
1872
|
+
|
|
2096
1873
|
/**
|
|
2097
1874
|
* @param {string} text
|
|
2098
|
-
|
|
2099
|
-
;
|
|
2100
|
-
|
|
1875
|
+
*/;
|
|
2101
1876
|
_proto.em = function em(text) {
|
|
2102
1877
|
return "<em>" + text + "</em>";
|
|
2103
1878
|
}
|
|
1879
|
+
|
|
2104
1880
|
/**
|
|
2105
1881
|
* @param {string} text
|
|
2106
|
-
|
|
2107
|
-
;
|
|
2108
|
-
|
|
1882
|
+
*/;
|
|
2109
1883
|
_proto.codespan = function codespan(text) {
|
|
2110
1884
|
return "<code>" + text + "</code>";
|
|
2111
1885
|
};
|
|
2112
|
-
|
|
2113
1886
|
_proto.br = function br() {
|
|
2114
1887
|
return this.options.xhtml ? '<br/>' : '<br>';
|
|
2115
1888
|
}
|
|
1889
|
+
|
|
2116
1890
|
/**
|
|
2117
1891
|
* @param {string} text
|
|
2118
|
-
|
|
2119
|
-
;
|
|
2120
|
-
|
|
1892
|
+
*/;
|
|
2121
1893
|
_proto.del = function del(text) {
|
|
2122
1894
|
return "<del>" + text + "</del>";
|
|
2123
1895
|
}
|
|
1896
|
+
|
|
2124
1897
|
/**
|
|
2125
1898
|
* @param {string} href
|
|
2126
1899
|
* @param {string} title
|
|
2127
1900
|
* @param {string} text
|
|
2128
|
-
|
|
2129
|
-
;
|
|
2130
|
-
|
|
1901
|
+
*/;
|
|
2131
1902
|
_proto.link = function link(href, title, text) {
|
|
2132
1903
|
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
2133
|
-
|
|
2134
1904
|
if (href === null) {
|
|
2135
1905
|
return text;
|
|
2136
1906
|
}
|
|
2137
|
-
|
|
2138
1907
|
var out = '<a href="' + escape(href) + '"';
|
|
2139
|
-
|
|
2140
1908
|
if (title) {
|
|
2141
1909
|
out += ' title="' + title + '"';
|
|
2142
1910
|
}
|
|
2143
|
-
|
|
2144
1911
|
out += '>' + text + '</a>';
|
|
2145
1912
|
return out;
|
|
2146
1913
|
}
|
|
1914
|
+
|
|
2147
1915
|
/**
|
|
2148
1916
|
* @param {string} href
|
|
2149
1917
|
* @param {string} title
|
|
2150
1918
|
* @param {string} text
|
|
2151
|
-
|
|
2152
|
-
;
|
|
2153
|
-
|
|
1919
|
+
*/;
|
|
2154
1920
|
_proto.image = function image(href, title, text) {
|
|
2155
1921
|
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
2156
|
-
|
|
2157
1922
|
if (href === null) {
|
|
2158
1923
|
return text;
|
|
2159
1924
|
}
|
|
2160
|
-
|
|
2161
1925
|
var out = "<img src=\"" + href + "\" alt=\"" + text + "\"";
|
|
2162
|
-
|
|
2163
1926
|
if (title) {
|
|
2164
1927
|
out += " title=\"" + title + "\"";
|
|
2165
1928
|
}
|
|
2166
|
-
|
|
2167
1929
|
out += this.options.xhtml ? '/>' : '>';
|
|
2168
1930
|
return out;
|
|
2169
1931
|
};
|
|
2170
|
-
|
|
2171
1932
|
_proto.text = function text(_text) {
|
|
2172
1933
|
return _text;
|
|
2173
1934
|
};
|
|
2174
|
-
|
|
2175
1935
|
return Renderer;
|
|
2176
1936
|
}();
|
|
2177
1937
|
|
|
@@ -2181,46 +1941,35 @@ var Renderer = /*#__PURE__*/function () {
|
|
|
2181
1941
|
*/
|
|
2182
1942
|
var TextRenderer = /*#__PURE__*/function () {
|
|
2183
1943
|
function TextRenderer() {}
|
|
2184
|
-
|
|
2185
1944
|
var _proto = TextRenderer.prototype;
|
|
2186
|
-
|
|
2187
1945
|
// no need for block level renderers
|
|
2188
1946
|
_proto.strong = function strong(text) {
|
|
2189
1947
|
return text;
|
|
2190
1948
|
};
|
|
2191
|
-
|
|
2192
1949
|
_proto.em = function em(text) {
|
|
2193
1950
|
return text;
|
|
2194
1951
|
};
|
|
2195
|
-
|
|
2196
1952
|
_proto.codespan = function codespan(text) {
|
|
2197
1953
|
return text;
|
|
2198
1954
|
};
|
|
2199
|
-
|
|
2200
1955
|
_proto.del = function del(text) {
|
|
2201
1956
|
return text;
|
|
2202
1957
|
};
|
|
2203
|
-
|
|
2204
1958
|
_proto.html = function html(text) {
|
|
2205
1959
|
return text;
|
|
2206
1960
|
};
|
|
2207
|
-
|
|
2208
1961
|
_proto.text = function text(_text) {
|
|
2209
1962
|
return _text;
|
|
2210
1963
|
};
|
|
2211
|
-
|
|
2212
1964
|
_proto.link = function link(href, title, text) {
|
|
2213
1965
|
return '' + text;
|
|
2214
1966
|
};
|
|
2215
|
-
|
|
2216
1967
|
_proto.image = function image(href, title, text) {
|
|
2217
1968
|
return '' + text;
|
|
2218
1969
|
};
|
|
2219
|
-
|
|
2220
1970
|
_proto.br = function br() {
|
|
2221
1971
|
return '';
|
|
2222
1972
|
};
|
|
2223
|
-
|
|
2224
1973
|
return TextRenderer;
|
|
2225
1974
|
}();
|
|
2226
1975
|
|
|
@@ -2231,69 +1980,60 @@ var Slugger = /*#__PURE__*/function () {
|
|
|
2231
1980
|
function Slugger() {
|
|
2232
1981
|
this.seen = {};
|
|
2233
1982
|
}
|
|
1983
|
+
|
|
2234
1984
|
/**
|
|
2235
1985
|
* @param {string} value
|
|
2236
1986
|
*/
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
1987
|
var _proto = Slugger.prototype;
|
|
2240
|
-
|
|
2241
1988
|
_proto.serialize = function serialize(value) {
|
|
2242
|
-
return value.toLowerCase().trim()
|
|
2243
|
-
|
|
1989
|
+
return value.toLowerCase().trim()
|
|
1990
|
+
// remove html tags
|
|
1991
|
+
.replace(/<[!\/a-z].*?>/ig, '')
|
|
1992
|
+
// remove unwanted chars
|
|
2244
1993
|
.replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-');
|
|
2245
1994
|
}
|
|
1995
|
+
|
|
2246
1996
|
/**
|
|
2247
1997
|
* Finds the next safe (unique) slug to use
|
|
2248
1998
|
* @param {string} originalSlug
|
|
2249
1999
|
* @param {boolean} isDryRun
|
|
2250
|
-
|
|
2251
|
-
;
|
|
2252
|
-
|
|
2000
|
+
*/;
|
|
2253
2001
|
_proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {
|
|
2254
2002
|
var slug = originalSlug;
|
|
2255
2003
|
var occurenceAccumulator = 0;
|
|
2256
|
-
|
|
2257
2004
|
if (this.seen.hasOwnProperty(slug)) {
|
|
2258
2005
|
occurenceAccumulator = this.seen[originalSlug];
|
|
2259
|
-
|
|
2260
2006
|
do {
|
|
2261
2007
|
occurenceAccumulator++;
|
|
2262
2008
|
slug = originalSlug + '-' + occurenceAccumulator;
|
|
2263
2009
|
} while (this.seen.hasOwnProperty(slug));
|
|
2264
2010
|
}
|
|
2265
|
-
|
|
2266
2011
|
if (!isDryRun) {
|
|
2267
2012
|
this.seen[originalSlug] = occurenceAccumulator;
|
|
2268
2013
|
this.seen[slug] = 0;
|
|
2269
2014
|
}
|
|
2270
|
-
|
|
2271
2015
|
return slug;
|
|
2272
2016
|
}
|
|
2017
|
+
|
|
2273
2018
|
/**
|
|
2274
2019
|
* Convert string to unique id
|
|
2275
2020
|
* @param {object} [options]
|
|
2276
2021
|
* @param {boolean} [options.dryrun] Generates the next unique slug without
|
|
2277
2022
|
* updating the internal accumulator.
|
|
2278
|
-
|
|
2279
|
-
;
|
|
2280
|
-
|
|
2023
|
+
*/;
|
|
2281
2024
|
_proto.slug = function slug(value, options) {
|
|
2282
2025
|
if (options === void 0) {
|
|
2283
2026
|
options = {};
|
|
2284
2027
|
}
|
|
2285
|
-
|
|
2286
2028
|
var slug = this.serialize(value);
|
|
2287
2029
|
return this.getNextSafeSlug(slug, options.dryrun);
|
|
2288
2030
|
};
|
|
2289
|
-
|
|
2290
2031
|
return Slugger;
|
|
2291
2032
|
}();
|
|
2292
2033
|
|
|
2293
2034
|
/**
|
|
2294
2035
|
* Parsing & Compiling
|
|
2295
2036
|
*/
|
|
2296
|
-
|
|
2297
2037
|
var Parser = /*#__PURE__*/function () {
|
|
2298
2038
|
function Parser(options) {
|
|
2299
2039
|
this.options = options || exports.defaults;
|
|
@@ -2303,140 +2043,122 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2303
2043
|
this.textRenderer = new TextRenderer();
|
|
2304
2044
|
this.slugger = new Slugger();
|
|
2305
2045
|
}
|
|
2046
|
+
|
|
2306
2047
|
/**
|
|
2307
2048
|
* Static Parse Method
|
|
2308
2049
|
*/
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
2050
|
Parser.parse = function parse(tokens, options) {
|
|
2312
2051
|
var parser = new Parser(options);
|
|
2313
2052
|
return parser.parse(tokens);
|
|
2314
2053
|
}
|
|
2054
|
+
|
|
2315
2055
|
/**
|
|
2316
2056
|
* Static Parse Inline Method
|
|
2317
|
-
|
|
2318
|
-
;
|
|
2319
|
-
|
|
2057
|
+
*/;
|
|
2320
2058
|
Parser.parseInline = function parseInline(tokens, options) {
|
|
2321
2059
|
var parser = new Parser(options);
|
|
2322
2060
|
return parser.parseInline(tokens);
|
|
2323
2061
|
}
|
|
2062
|
+
|
|
2324
2063
|
/**
|
|
2325
2064
|
* Parse Loop
|
|
2326
|
-
|
|
2327
|
-
;
|
|
2328
|
-
|
|
2065
|
+
*/;
|
|
2329
2066
|
var _proto = Parser.prototype;
|
|
2330
|
-
|
|
2331
2067
|
_proto.parse = function parse(tokens, top) {
|
|
2332
2068
|
if (top === void 0) {
|
|
2333
2069
|
top = true;
|
|
2334
2070
|
}
|
|
2335
|
-
|
|
2336
2071
|
var out = '',
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2072
|
+
i,
|
|
2073
|
+
j,
|
|
2074
|
+
k,
|
|
2075
|
+
l2,
|
|
2076
|
+
l3,
|
|
2077
|
+
row,
|
|
2078
|
+
cell,
|
|
2079
|
+
header,
|
|
2080
|
+
body,
|
|
2081
|
+
token,
|
|
2082
|
+
ordered,
|
|
2083
|
+
start,
|
|
2084
|
+
loose,
|
|
2085
|
+
itemBody,
|
|
2086
|
+
item,
|
|
2087
|
+
checked,
|
|
2088
|
+
task,
|
|
2089
|
+
checkbox,
|
|
2090
|
+
ret;
|
|
2356
2091
|
var l = tokens.length;
|
|
2357
|
-
|
|
2358
2092
|
for (i = 0; i < l; i++) {
|
|
2359
|
-
token = tokens[i];
|
|
2093
|
+
token = tokens[i];
|
|
2360
2094
|
|
|
2095
|
+
// Run any renderer extensions
|
|
2361
2096
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2362
2097
|
ret = this.options.extensions.renderers[token.type].call({
|
|
2363
2098
|
parser: this
|
|
2364
2099
|
}, token);
|
|
2365
|
-
|
|
2366
2100
|
if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
|
|
2367
2101
|
out += ret || '';
|
|
2368
2102
|
continue;
|
|
2369
2103
|
}
|
|
2370
2104
|
}
|
|
2371
|
-
|
|
2372
2105
|
switch (token.type) {
|
|
2373
2106
|
case 'space':
|
|
2374
2107
|
{
|
|
2375
2108
|
continue;
|
|
2376
2109
|
}
|
|
2377
|
-
|
|
2378
2110
|
case 'hr':
|
|
2379
2111
|
{
|
|
2380
2112
|
out += this.renderer.hr();
|
|
2381
2113
|
continue;
|
|
2382
2114
|
}
|
|
2383
|
-
|
|
2384
2115
|
case 'heading':
|
|
2385
2116
|
{
|
|
2386
2117
|
out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);
|
|
2387
2118
|
continue;
|
|
2388
2119
|
}
|
|
2389
|
-
|
|
2390
2120
|
case 'code':
|
|
2391
2121
|
{
|
|
2392
2122
|
out += this.renderer.code(token.text, token.lang, token.escaped);
|
|
2393
2123
|
continue;
|
|
2394
2124
|
}
|
|
2395
|
-
|
|
2396
2125
|
case 'table':
|
|
2397
2126
|
{
|
|
2398
|
-
header = '';
|
|
2127
|
+
header = '';
|
|
2399
2128
|
|
|
2129
|
+
// header
|
|
2400
2130
|
cell = '';
|
|
2401
2131
|
l2 = token.header.length;
|
|
2402
|
-
|
|
2403
2132
|
for (j = 0; j < l2; j++) {
|
|
2404
2133
|
cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {
|
|
2405
2134
|
header: true,
|
|
2406
2135
|
align: token.align[j]
|
|
2407
2136
|
});
|
|
2408
2137
|
}
|
|
2409
|
-
|
|
2410
2138
|
header += this.renderer.tablerow(cell);
|
|
2411
2139
|
body = '';
|
|
2412
2140
|
l2 = token.rows.length;
|
|
2413
|
-
|
|
2414
2141
|
for (j = 0; j < l2; j++) {
|
|
2415
2142
|
row = token.rows[j];
|
|
2416
2143
|
cell = '';
|
|
2417
2144
|
l3 = row.length;
|
|
2418
|
-
|
|
2419
2145
|
for (k = 0; k < l3; k++) {
|
|
2420
2146
|
cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {
|
|
2421
2147
|
header: false,
|
|
2422
2148
|
align: token.align[k]
|
|
2423
2149
|
});
|
|
2424
2150
|
}
|
|
2425
|
-
|
|
2426
2151
|
body += this.renderer.tablerow(cell);
|
|
2427
2152
|
}
|
|
2428
|
-
|
|
2429
2153
|
out += this.renderer.table(header, body);
|
|
2430
2154
|
continue;
|
|
2431
2155
|
}
|
|
2432
|
-
|
|
2433
2156
|
case 'blockquote':
|
|
2434
2157
|
{
|
|
2435
2158
|
body = this.parse(token.tokens);
|
|
2436
2159
|
out += this.renderer.blockquote(body);
|
|
2437
2160
|
continue;
|
|
2438
2161
|
}
|
|
2439
|
-
|
|
2440
2162
|
case 'list':
|
|
2441
2163
|
{
|
|
2442
2164
|
ordered = token.ordered;
|
|
@@ -2444,20 +2166,16 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2444
2166
|
loose = token.loose;
|
|
2445
2167
|
l2 = token.items.length;
|
|
2446
2168
|
body = '';
|
|
2447
|
-
|
|
2448
2169
|
for (j = 0; j < l2; j++) {
|
|
2449
2170
|
item = token.items[j];
|
|
2450
2171
|
checked = item.checked;
|
|
2451
2172
|
task = item.task;
|
|
2452
2173
|
itemBody = '';
|
|
2453
|
-
|
|
2454
2174
|
if (item.task) {
|
|
2455
2175
|
checkbox = this.renderer.checkbox(checked);
|
|
2456
|
-
|
|
2457
2176
|
if (loose) {
|
|
2458
2177
|
if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
|
|
2459
2178
|
item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
|
|
2460
|
-
|
|
2461
2179
|
if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
|
|
2462
2180
|
item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
|
|
2463
2181
|
}
|
|
@@ -2471,45 +2189,36 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2471
2189
|
itemBody += checkbox;
|
|
2472
2190
|
}
|
|
2473
2191
|
}
|
|
2474
|
-
|
|
2475
2192
|
itemBody += this.parse(item.tokens, loose);
|
|
2476
2193
|
body += this.renderer.listitem(itemBody, task, checked);
|
|
2477
2194
|
}
|
|
2478
|
-
|
|
2479
2195
|
out += this.renderer.list(body, ordered, start);
|
|
2480
2196
|
continue;
|
|
2481
2197
|
}
|
|
2482
|
-
|
|
2483
2198
|
case 'html':
|
|
2484
2199
|
{
|
|
2485
2200
|
// TODO parse inline content if parameter markdown=1
|
|
2486
2201
|
out += this.renderer.html(token.text);
|
|
2487
2202
|
continue;
|
|
2488
2203
|
}
|
|
2489
|
-
|
|
2490
2204
|
case 'paragraph':
|
|
2491
2205
|
{
|
|
2492
2206
|
out += this.renderer.paragraph(this.parseInline(token.tokens));
|
|
2493
2207
|
continue;
|
|
2494
2208
|
}
|
|
2495
|
-
|
|
2496
2209
|
case 'text':
|
|
2497
2210
|
{
|
|
2498
2211
|
body = token.tokens ? this.parseInline(token.tokens) : token.text;
|
|
2499
|
-
|
|
2500
2212
|
while (i + 1 < l && tokens[i + 1].type === 'text') {
|
|
2501
2213
|
token = tokens[++i];
|
|
2502
2214
|
body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
|
|
2503
2215
|
}
|
|
2504
|
-
|
|
2505
2216
|
out += top ? this.renderer.paragraph(body) : body;
|
|
2506
2217
|
continue;
|
|
2507
2218
|
}
|
|
2508
|
-
|
|
2509
2219
|
default:
|
|
2510
2220
|
{
|
|
2511
2221
|
var errMsg = 'Token with "' + token.type + '" type was not found.';
|
|
2512
|
-
|
|
2513
2222
|
if (this.options.silent) {
|
|
2514
2223
|
console.error(errMsg);
|
|
2515
2224
|
return;
|
|
@@ -2519,101 +2228,86 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2519
2228
|
}
|
|
2520
2229
|
}
|
|
2521
2230
|
}
|
|
2522
|
-
|
|
2523
2231
|
return out;
|
|
2524
2232
|
}
|
|
2233
|
+
|
|
2525
2234
|
/**
|
|
2526
2235
|
* Parse Inline Tokens
|
|
2527
|
-
|
|
2528
|
-
;
|
|
2529
|
-
|
|
2236
|
+
*/;
|
|
2530
2237
|
_proto.parseInline = function parseInline(tokens, renderer) {
|
|
2531
2238
|
renderer = renderer || this.renderer;
|
|
2532
2239
|
var out = '',
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2240
|
+
i,
|
|
2241
|
+
token,
|
|
2242
|
+
ret;
|
|
2536
2243
|
var l = tokens.length;
|
|
2537
|
-
|
|
2538
2244
|
for (i = 0; i < l; i++) {
|
|
2539
|
-
token = tokens[i];
|
|
2245
|
+
token = tokens[i];
|
|
2540
2246
|
|
|
2247
|
+
// Run any renderer extensions
|
|
2541
2248
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2542
2249
|
ret = this.options.extensions.renderers[token.type].call({
|
|
2543
2250
|
parser: this
|
|
2544
2251
|
}, token);
|
|
2545
|
-
|
|
2546
2252
|
if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
|
|
2547
2253
|
out += ret || '';
|
|
2548
2254
|
continue;
|
|
2549
2255
|
}
|
|
2550
2256
|
}
|
|
2551
|
-
|
|
2552
2257
|
switch (token.type) {
|
|
2553
2258
|
case 'escape':
|
|
2554
2259
|
{
|
|
2555
2260
|
out += renderer.text(token.text);
|
|
2556
2261
|
break;
|
|
2557
2262
|
}
|
|
2558
|
-
|
|
2559
2263
|
case 'html':
|
|
2560
2264
|
{
|
|
2561
2265
|
out += renderer.html(token.text);
|
|
2562
2266
|
break;
|
|
2563
2267
|
}
|
|
2564
|
-
|
|
2565
2268
|
case 'link':
|
|
2566
2269
|
{
|
|
2567
2270
|
out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
|
|
2568
2271
|
break;
|
|
2569
2272
|
}
|
|
2570
|
-
|
|
2571
2273
|
case 'image':
|
|
2572
2274
|
{
|
|
2573
2275
|
out += renderer.image(token.href, token.title, token.text);
|
|
2574
2276
|
break;
|
|
2575
2277
|
}
|
|
2576
|
-
|
|
2577
2278
|
case 'strong':
|
|
2578
2279
|
{
|
|
2579
2280
|
out += renderer.strong(this.parseInline(token.tokens, renderer));
|
|
2580
2281
|
break;
|
|
2581
2282
|
}
|
|
2582
|
-
|
|
2583
2283
|
case 'em':
|
|
2584
2284
|
{
|
|
2585
2285
|
out += renderer.em(this.parseInline(token.tokens, renderer));
|
|
2586
2286
|
break;
|
|
2587
2287
|
}
|
|
2588
|
-
|
|
2589
2288
|
case 'codespan':
|
|
2590
2289
|
{
|
|
2591
2290
|
out += renderer.codespan(token.text);
|
|
2592
2291
|
break;
|
|
2593
2292
|
}
|
|
2594
|
-
|
|
2595
2293
|
case 'br':
|
|
2596
2294
|
{
|
|
2597
2295
|
out += renderer.br();
|
|
2598
2296
|
break;
|
|
2599
2297
|
}
|
|
2600
|
-
|
|
2601
2298
|
case 'del':
|
|
2602
2299
|
{
|
|
2603
2300
|
out += renderer.del(this.parseInline(token.tokens, renderer));
|
|
2604
2301
|
break;
|
|
2605
2302
|
}
|
|
2606
|
-
|
|
2607
2303
|
case 'text':
|
|
2608
2304
|
{
|
|
2609
2305
|
out += renderer.text(token.text);
|
|
2610
2306
|
break;
|
|
2611
2307
|
}
|
|
2612
|
-
|
|
2613
2308
|
default:
|
|
2614
2309
|
{
|
|
2615
2310
|
var errMsg = 'Token with "' + token.type + '" type was not found.';
|
|
2616
|
-
|
|
2617
2311
|
if (this.options.silent) {
|
|
2618
2312
|
console.error(errMsg);
|
|
2619
2313
|
return;
|
|
@@ -2623,68 +2317,54 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2623
2317
|
}
|
|
2624
2318
|
}
|
|
2625
2319
|
}
|
|
2626
|
-
|
|
2627
2320
|
return out;
|
|
2628
2321
|
};
|
|
2629
|
-
|
|
2630
2322
|
return Parser;
|
|
2631
2323
|
}();
|
|
2632
2324
|
|
|
2633
2325
|
/**
|
|
2634
2326
|
* Marked
|
|
2635
2327
|
*/
|
|
2636
|
-
|
|
2637
2328
|
function marked(src, opt, callback) {
|
|
2638
2329
|
// throw error in case of non string input
|
|
2639
2330
|
if (typeof src === 'undefined' || src === null) {
|
|
2640
2331
|
throw new Error('marked(): input parameter is undefined or null');
|
|
2641
2332
|
}
|
|
2642
|
-
|
|
2643
2333
|
if (typeof src !== 'string') {
|
|
2644
2334
|
throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
|
2645
2335
|
}
|
|
2646
|
-
|
|
2647
2336
|
if (typeof opt === 'function') {
|
|
2648
2337
|
callback = opt;
|
|
2649
2338
|
opt = null;
|
|
2650
2339
|
}
|
|
2651
|
-
|
|
2652
2340
|
opt = merge({}, marked.defaults, opt || {});
|
|
2653
2341
|
checkSanitizeDeprecation(opt);
|
|
2654
|
-
|
|
2655
2342
|
if (callback) {
|
|
2656
2343
|
var highlight = opt.highlight;
|
|
2657
2344
|
var tokens;
|
|
2658
|
-
|
|
2659
2345
|
try {
|
|
2660
2346
|
tokens = Lexer.lex(src, opt);
|
|
2661
2347
|
} catch (e) {
|
|
2662
2348
|
return callback(e);
|
|
2663
2349
|
}
|
|
2664
|
-
|
|
2665
2350
|
var done = function done(err) {
|
|
2666
2351
|
var out;
|
|
2667
|
-
|
|
2668
2352
|
if (!err) {
|
|
2669
2353
|
try {
|
|
2670
2354
|
if (opt.walkTokens) {
|
|
2671
2355
|
marked.walkTokens(tokens, opt.walkTokens);
|
|
2672
2356
|
}
|
|
2673
|
-
|
|
2674
2357
|
out = Parser.parse(tokens, opt);
|
|
2675
2358
|
} catch (e) {
|
|
2676
2359
|
err = e;
|
|
2677
2360
|
}
|
|
2678
2361
|
}
|
|
2679
|
-
|
|
2680
2362
|
opt.highlight = highlight;
|
|
2681
2363
|
return err ? callback(err) : callback(null, out);
|
|
2682
2364
|
};
|
|
2683
|
-
|
|
2684
2365
|
if (!highlight || highlight.length < 3) {
|
|
2685
2366
|
return done();
|
|
2686
2367
|
}
|
|
2687
|
-
|
|
2688
2368
|
delete opt.highlight;
|
|
2689
2369
|
if (!tokens.length) return done();
|
|
2690
2370
|
var pending = 0;
|
|
@@ -2696,14 +2376,11 @@ function marked(src, opt, callback) {
|
|
|
2696
2376
|
if (err) {
|
|
2697
2377
|
return done(err);
|
|
2698
2378
|
}
|
|
2699
|
-
|
|
2700
2379
|
if (code != null && code !== token.text) {
|
|
2701
2380
|
token.text = code;
|
|
2702
2381
|
token.escaped = true;
|
|
2703
2382
|
}
|
|
2704
|
-
|
|
2705
2383
|
pending--;
|
|
2706
|
-
|
|
2707
2384
|
if (pending === 0) {
|
|
2708
2385
|
done();
|
|
2709
2386
|
}
|
|
@@ -2711,42 +2388,34 @@ function marked(src, opt, callback) {
|
|
|
2711
2388
|
}, 0);
|
|
2712
2389
|
}
|
|
2713
2390
|
});
|
|
2714
|
-
|
|
2715
2391
|
if (pending === 0) {
|
|
2716
2392
|
done();
|
|
2717
2393
|
}
|
|
2718
|
-
|
|
2719
2394
|
return;
|
|
2720
2395
|
}
|
|
2721
|
-
|
|
2722
2396
|
function onError(e) {
|
|
2723
2397
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
2724
|
-
|
|
2725
2398
|
if (opt.silent) {
|
|
2726
2399
|
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
2727
2400
|
}
|
|
2728
|
-
|
|
2729
2401
|
throw e;
|
|
2730
2402
|
}
|
|
2731
|
-
|
|
2732
2403
|
try {
|
|
2733
2404
|
var _tokens = Lexer.lex(src, opt);
|
|
2734
|
-
|
|
2735
2405
|
if (opt.walkTokens) {
|
|
2736
2406
|
if (opt.async) {
|
|
2737
2407
|
return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
|
|
2738
2408
|
return Parser.parse(_tokens, opt);
|
|
2739
2409
|
})["catch"](onError);
|
|
2740
2410
|
}
|
|
2741
|
-
|
|
2742
2411
|
marked.walkTokens(_tokens, opt.walkTokens);
|
|
2743
2412
|
}
|
|
2744
|
-
|
|
2745
2413
|
return Parser.parse(_tokens, opt);
|
|
2746
2414
|
} catch (e) {
|
|
2747
2415
|
onError(e);
|
|
2748
2416
|
}
|
|
2749
2417
|
}
|
|
2418
|
+
|
|
2750
2419
|
/**
|
|
2751
2420
|
* Options
|
|
2752
2421
|
*/
|
|
@@ -2756,9 +2425,9 @@ marked.options = marked.setOptions = function (opt) {
|
|
|
2756
2425
|
changeDefaults(marked.defaults);
|
|
2757
2426
|
return marked;
|
|
2758
2427
|
};
|
|
2759
|
-
|
|
2760
2428
|
marked.getDefaults = getDefaults;
|
|
2761
2429
|
marked.defaults = exports.defaults;
|
|
2430
|
+
|
|
2762
2431
|
/**
|
|
2763
2432
|
* Use Extension
|
|
2764
2433
|
*/
|
|
@@ -2767,7 +2436,6 @@ marked.use = function () {
|
|
|
2767
2436
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2768
2437
|
args[_key] = arguments[_key];
|
|
2769
2438
|
}
|
|
2770
|
-
|
|
2771
2439
|
var opts = merge.apply(void 0, [{}].concat(args));
|
|
2772
2440
|
var extensions = marked.defaults.extensions || {
|
|
2773
2441
|
renderers: {},
|
|
@@ -2782,43 +2450,35 @@ marked.use = function () {
|
|
|
2782
2450
|
if (!ext.name) {
|
|
2783
2451
|
throw new Error('extension name required');
|
|
2784
2452
|
}
|
|
2785
|
-
|
|
2786
2453
|
if (ext.renderer) {
|
|
2787
2454
|
// Renderer extensions
|
|
2788
2455
|
var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;
|
|
2789
|
-
|
|
2790
2456
|
if (prevRenderer) {
|
|
2791
2457
|
// Replace extension with func to run new extension but fall back if false
|
|
2792
2458
|
extensions.renderers[ext.name] = function () {
|
|
2793
2459
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
2794
2460
|
args[_key2] = arguments[_key2];
|
|
2795
2461
|
}
|
|
2796
|
-
|
|
2797
2462
|
var ret = ext.renderer.apply(this, args);
|
|
2798
|
-
|
|
2799
2463
|
if (ret === false) {
|
|
2800
2464
|
ret = prevRenderer.apply(this, args);
|
|
2801
2465
|
}
|
|
2802
|
-
|
|
2803
2466
|
return ret;
|
|
2804
2467
|
};
|
|
2805
2468
|
} else {
|
|
2806
2469
|
extensions.renderers[ext.name] = ext.renderer;
|
|
2807
2470
|
}
|
|
2808
2471
|
}
|
|
2809
|
-
|
|
2810
2472
|
if (ext.tokenizer) {
|
|
2811
2473
|
// Tokenizer Extensions
|
|
2812
2474
|
if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {
|
|
2813
2475
|
throw new Error("extension level must be 'block' or 'inline'");
|
|
2814
2476
|
}
|
|
2815
|
-
|
|
2816
2477
|
if (extensions[ext.level]) {
|
|
2817
2478
|
extensions[ext.level].unshift(ext.tokenizer);
|
|
2818
2479
|
} else {
|
|
2819
2480
|
extensions[ext.level] = [ext.tokenizer];
|
|
2820
2481
|
}
|
|
2821
|
-
|
|
2822
2482
|
if (ext.start) {
|
|
2823
2483
|
// Function to check for start of token
|
|
2824
2484
|
if (ext.level === 'block') {
|
|
@@ -2836,110 +2496,89 @@ marked.use = function () {
|
|
|
2836
2496
|
}
|
|
2837
2497
|
}
|
|
2838
2498
|
}
|
|
2839
|
-
|
|
2840
2499
|
if (ext.childTokens) {
|
|
2841
2500
|
// Child tokens to be visited by walkTokens
|
|
2842
2501
|
extensions.childTokens[ext.name] = ext.childTokens;
|
|
2843
2502
|
}
|
|
2844
2503
|
});
|
|
2845
|
-
}
|
|
2846
|
-
|
|
2504
|
+
}
|
|
2847
2505
|
|
|
2506
|
+
// ==-- Parse "overwrite" extensions --== //
|
|
2848
2507
|
if (pack.renderer) {
|
|
2849
2508
|
(function () {
|
|
2850
2509
|
var renderer = marked.defaults.renderer || new Renderer();
|
|
2851
|
-
|
|
2852
2510
|
var _loop = function _loop(prop) {
|
|
2853
|
-
var prevRenderer = renderer[prop];
|
|
2854
|
-
|
|
2511
|
+
var prevRenderer = renderer[prop];
|
|
2512
|
+
// Replace renderer with func to run extension, but fall back if false
|
|
2855
2513
|
renderer[prop] = function () {
|
|
2856
2514
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
2857
2515
|
args[_key3] = arguments[_key3];
|
|
2858
2516
|
}
|
|
2859
|
-
|
|
2860
2517
|
var ret = pack.renderer[prop].apply(renderer, args);
|
|
2861
|
-
|
|
2862
2518
|
if (ret === false) {
|
|
2863
2519
|
ret = prevRenderer.apply(renderer, args);
|
|
2864
2520
|
}
|
|
2865
|
-
|
|
2866
2521
|
return ret;
|
|
2867
2522
|
};
|
|
2868
2523
|
};
|
|
2869
|
-
|
|
2870
2524
|
for (var prop in pack.renderer) {
|
|
2871
2525
|
_loop(prop);
|
|
2872
2526
|
}
|
|
2873
|
-
|
|
2874
2527
|
opts.renderer = renderer;
|
|
2875
2528
|
})();
|
|
2876
2529
|
}
|
|
2877
|
-
|
|
2878
2530
|
if (pack.tokenizer) {
|
|
2879
2531
|
(function () {
|
|
2880
2532
|
var tokenizer = marked.defaults.tokenizer || new Tokenizer();
|
|
2881
|
-
|
|
2882
2533
|
var _loop2 = function _loop2(prop) {
|
|
2883
|
-
var prevTokenizer = tokenizer[prop];
|
|
2884
|
-
|
|
2534
|
+
var prevTokenizer = tokenizer[prop];
|
|
2535
|
+
// Replace tokenizer with func to run extension, but fall back if false
|
|
2885
2536
|
tokenizer[prop] = function () {
|
|
2886
2537
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
2887
2538
|
args[_key4] = arguments[_key4];
|
|
2888
2539
|
}
|
|
2889
|
-
|
|
2890
2540
|
var ret = pack.tokenizer[prop].apply(tokenizer, args);
|
|
2891
|
-
|
|
2892
2541
|
if (ret === false) {
|
|
2893
2542
|
ret = prevTokenizer.apply(tokenizer, args);
|
|
2894
2543
|
}
|
|
2895
|
-
|
|
2896
2544
|
return ret;
|
|
2897
2545
|
};
|
|
2898
2546
|
};
|
|
2899
|
-
|
|
2900
2547
|
for (var prop in pack.tokenizer) {
|
|
2901
2548
|
_loop2(prop);
|
|
2902
2549
|
}
|
|
2903
|
-
|
|
2904
2550
|
opts.tokenizer = tokenizer;
|
|
2905
2551
|
})();
|
|
2906
|
-
}
|
|
2907
|
-
|
|
2552
|
+
}
|
|
2908
2553
|
|
|
2554
|
+
// ==-- Parse WalkTokens extensions --== //
|
|
2909
2555
|
if (pack.walkTokens) {
|
|
2910
2556
|
var _walkTokens = marked.defaults.walkTokens;
|
|
2911
|
-
|
|
2912
2557
|
opts.walkTokens = function (token) {
|
|
2913
2558
|
var values = [];
|
|
2914
2559
|
values.push(pack.walkTokens.call(this, token));
|
|
2915
|
-
|
|
2916
2560
|
if (_walkTokens) {
|
|
2917
2561
|
values = values.concat(_walkTokens.call(this, token));
|
|
2918
2562
|
}
|
|
2919
|
-
|
|
2920
2563
|
return values;
|
|
2921
2564
|
};
|
|
2922
2565
|
}
|
|
2923
|
-
|
|
2924
2566
|
if (hasExtensions) {
|
|
2925
2567
|
opts.extensions = extensions;
|
|
2926
2568
|
}
|
|
2927
|
-
|
|
2928
2569
|
marked.setOptions(opts);
|
|
2929
2570
|
});
|
|
2930
2571
|
};
|
|
2572
|
+
|
|
2931
2573
|
/**
|
|
2932
2574
|
* Run callback for every token
|
|
2933
2575
|
*/
|
|
2934
2576
|
|
|
2935
|
-
|
|
2936
2577
|
marked.walkTokens = function (tokens, callback) {
|
|
2937
2578
|
var values = [];
|
|
2938
|
-
|
|
2939
2579
|
var _loop3 = function _loop3() {
|
|
2940
2580
|
var token = _step.value;
|
|
2941
2581
|
values = values.concat(callback.call(marked, token));
|
|
2942
|
-
|
|
2943
2582
|
switch (token.type) {
|
|
2944
2583
|
case 'table':
|
|
2945
2584
|
{
|
|
@@ -2947,25 +2586,20 @@ marked.walkTokens = function (tokens, callback) {
|
|
|
2947
2586
|
var cell = _step2.value;
|
|
2948
2587
|
values = values.concat(marked.walkTokens(cell.tokens, callback));
|
|
2949
2588
|
}
|
|
2950
|
-
|
|
2951
2589
|
for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {
|
|
2952
2590
|
var row = _step3.value;
|
|
2953
|
-
|
|
2954
2591
|
for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {
|
|
2955
2592
|
var _cell = _step4.value;
|
|
2956
2593
|
values = values.concat(marked.walkTokens(_cell.tokens, callback));
|
|
2957
2594
|
}
|
|
2958
2595
|
}
|
|
2959
|
-
|
|
2960
2596
|
break;
|
|
2961
2597
|
}
|
|
2962
|
-
|
|
2963
2598
|
case 'list':
|
|
2964
2599
|
{
|
|
2965
2600
|
values = values.concat(marked.walkTokens(token.items, callback));
|
|
2966
2601
|
break;
|
|
2967
2602
|
}
|
|
2968
|
-
|
|
2969
2603
|
default:
|
|
2970
2604
|
{
|
|
2971
2605
|
if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {
|
|
@@ -2979,55 +2613,44 @@ marked.walkTokens = function (tokens, callback) {
|
|
|
2979
2613
|
}
|
|
2980
2614
|
}
|
|
2981
2615
|
};
|
|
2982
|
-
|
|
2983
2616
|
for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
|
|
2984
2617
|
_loop3();
|
|
2985
2618
|
}
|
|
2986
|
-
|
|
2987
2619
|
return values;
|
|
2988
2620
|
};
|
|
2621
|
+
|
|
2989
2622
|
/**
|
|
2990
2623
|
* Parse Inline
|
|
2991
2624
|
* @param {string} src
|
|
2992
2625
|
*/
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
2626
|
marked.parseInline = function (src, opt) {
|
|
2996
2627
|
// throw error in case of non string input
|
|
2997
2628
|
if (typeof src === 'undefined' || src === null) {
|
|
2998
2629
|
throw new Error('marked.parseInline(): input parameter is undefined or null');
|
|
2999
2630
|
}
|
|
3000
|
-
|
|
3001
2631
|
if (typeof src !== 'string') {
|
|
3002
2632
|
throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
|
3003
2633
|
}
|
|
3004
|
-
|
|
3005
2634
|
opt = merge({}, marked.defaults, opt || {});
|
|
3006
2635
|
checkSanitizeDeprecation(opt);
|
|
3007
|
-
|
|
3008
2636
|
try {
|
|
3009
2637
|
var tokens = Lexer.lexInline(src, opt);
|
|
3010
|
-
|
|
3011
2638
|
if (opt.walkTokens) {
|
|
3012
2639
|
marked.walkTokens(tokens, opt.walkTokens);
|
|
3013
2640
|
}
|
|
3014
|
-
|
|
3015
2641
|
return Parser.parseInline(tokens, opt);
|
|
3016
2642
|
} catch (e) {
|
|
3017
2643
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
3018
|
-
|
|
3019
2644
|
if (opt.silent) {
|
|
3020
2645
|
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
3021
2646
|
}
|
|
3022
|
-
|
|
3023
2647
|
throw e;
|
|
3024
2648
|
}
|
|
3025
2649
|
};
|
|
2650
|
+
|
|
3026
2651
|
/**
|
|
3027
2652
|
* Expose
|
|
3028
2653
|
*/
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
2654
|
marked.Parser = Parser;
|
|
3032
2655
|
marked.parser = Parser.parse;
|
|
3033
2656
|
marked.Renderer = Renderer;
|