marked 4.1.0 → 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/README.md +1 -0
- package/lib/marked.cjs +260 -638
- package/lib/marked.esm.js +0 -1
- package/lib/marked.umd.js +260 -638
- package/marked.min.js +1 -1
- package/package.json +13 -12
- package/src/defaults.js +0 -1
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
|
|
|
@@ -87,7 +79,6 @@ function getDefaults() {
|
|
|
87
79
|
sanitize: false,
|
|
88
80
|
sanitizer: null,
|
|
89
81
|
silent: false,
|
|
90
|
-
smartLists: false,
|
|
91
82
|
smartypants: false,
|
|
92
83
|
tokenizer: null,
|
|
93
84
|
walkTokens: null,
|
|
@@ -113,11 +104,9 @@ var escapeReplacements = {
|
|
|
113
104
|
'"': '"',
|
|
114
105
|
"'": '''
|
|
115
106
|
};
|
|
116
|
-
|
|
117
107
|
var getEscapeReplacement = function getEscapeReplacement(ch) {
|
|
118
108
|
return escapeReplacements[ch];
|
|
119
109
|
};
|
|
120
|
-
|
|
121
110
|
function escape(html, encode) {
|
|
122
111
|
if (encode) {
|
|
123
112
|
if (escapeTest.test(html)) {
|
|
@@ -128,33 +117,30 @@ function escape(html, encode) {
|
|
|
128
117
|
return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
|
|
129
118
|
}
|
|
130
119
|
}
|
|
131
|
-
|
|
132
120
|
return html;
|
|
133
121
|
}
|
|
134
122
|
var unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;
|
|
123
|
+
|
|
135
124
|
/**
|
|
136
125
|
* @param {string} html
|
|
137
126
|
*/
|
|
138
|
-
|
|
139
127
|
function unescape(html) {
|
|
140
128
|
// explicitly match decimal, hex, and named HTML entities
|
|
141
129
|
return html.replace(unescapeTest, function (_, n) {
|
|
142
130
|
n = n.toLowerCase();
|
|
143
131
|
if (n === 'colon') return ':';
|
|
144
|
-
|
|
145
132
|
if (n.charAt(0) === '#') {
|
|
146
133
|
return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));
|
|
147
134
|
}
|
|
148
|
-
|
|
149
135
|
return '';
|
|
150
136
|
});
|
|
151
137
|
}
|
|
152
138
|
var caret = /(^|[^\[])\^/g;
|
|
139
|
+
|
|
153
140
|
/**
|
|
154
141
|
* @param {string | RegExp} regex
|
|
155
142
|
* @param {string} opt
|
|
156
143
|
*/
|
|
157
|
-
|
|
158
144
|
function edit(regex, opt) {
|
|
159
145
|
regex = typeof regex === 'string' ? regex : regex.source;
|
|
160
146
|
opt = opt || '';
|
|
@@ -173,48 +159,43 @@ function edit(regex, opt) {
|
|
|
173
159
|
}
|
|
174
160
|
var nonWordAndColonTest = /[^\w:]/g;
|
|
175
161
|
var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;
|
|
162
|
+
|
|
176
163
|
/**
|
|
177
164
|
* @param {boolean} sanitize
|
|
178
165
|
* @param {string} base
|
|
179
166
|
* @param {string} href
|
|
180
167
|
*/
|
|
181
|
-
|
|
182
168
|
function cleanUrl(sanitize, base, href) {
|
|
183
169
|
if (sanitize) {
|
|
184
170
|
var prot;
|
|
185
|
-
|
|
186
171
|
try {
|
|
187
172
|
prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();
|
|
188
173
|
} catch (e) {
|
|
189
174
|
return null;
|
|
190
175
|
}
|
|
191
|
-
|
|
192
176
|
if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {
|
|
193
177
|
return null;
|
|
194
178
|
}
|
|
195
179
|
}
|
|
196
|
-
|
|
197
180
|
if (base && !originIndependentUrl.test(href)) {
|
|
198
181
|
href = resolveUrl(base, href);
|
|
199
182
|
}
|
|
200
|
-
|
|
201
183
|
try {
|
|
202
184
|
href = encodeURI(href).replace(/%25/g, '%');
|
|
203
185
|
} catch (e) {
|
|
204
186
|
return null;
|
|
205
187
|
}
|
|
206
|
-
|
|
207
188
|
return href;
|
|
208
189
|
}
|
|
209
190
|
var baseUrls = {};
|
|
210
191
|
var justDomain = /^[^:]+:\/*[^/]*$/;
|
|
211
192
|
var protocol = /^([^:]+:)[\s\S]*$/;
|
|
212
193
|
var domain = /^([^:]+:\/*[^/]*)[\s\S]*$/;
|
|
194
|
+
|
|
213
195
|
/**
|
|
214
196
|
* @param {string} base
|
|
215
197
|
* @param {string} href
|
|
216
198
|
*/
|
|
217
|
-
|
|
218
199
|
function resolveUrl(base, href) {
|
|
219
200
|
if (!baseUrls[' ' + base]) {
|
|
220
201
|
// we can ignore everything in base after the last slash of its path component,
|
|
@@ -226,21 +207,17 @@ function resolveUrl(base, href) {
|
|
|
226
207
|
baseUrls[' ' + base] = rtrim(base, '/', true);
|
|
227
208
|
}
|
|
228
209
|
}
|
|
229
|
-
|
|
230
210
|
base = baseUrls[' ' + base];
|
|
231
211
|
var relativeBase = base.indexOf(':') === -1;
|
|
232
|
-
|
|
233
212
|
if (href.substring(0, 2) === '//') {
|
|
234
213
|
if (relativeBase) {
|
|
235
214
|
return href;
|
|
236
215
|
}
|
|
237
|
-
|
|
238
216
|
return base.replace(protocol, '$1') + href;
|
|
239
217
|
} else if (href.charAt(0) === '/') {
|
|
240
218
|
if (relativeBase) {
|
|
241
219
|
return href;
|
|
242
220
|
}
|
|
243
|
-
|
|
244
221
|
return base.replace(domain, '$1') + href;
|
|
245
222
|
} else {
|
|
246
223
|
return base + href;
|
|
@@ -251,52 +228,46 @@ var noopTest = {
|
|
|
251
228
|
};
|
|
252
229
|
function merge(obj) {
|
|
253
230
|
var i = 1,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
231
|
+
target,
|
|
232
|
+
key;
|
|
257
233
|
for (; i < arguments.length; i++) {
|
|
258
234
|
target = arguments[i];
|
|
259
|
-
|
|
260
235
|
for (key in target) {
|
|
261
236
|
if (Object.prototype.hasOwnProperty.call(target, key)) {
|
|
262
237
|
obj[key] = target[key];
|
|
263
238
|
}
|
|
264
239
|
}
|
|
265
240
|
}
|
|
266
|
-
|
|
267
241
|
return obj;
|
|
268
242
|
}
|
|
269
243
|
function splitCells(tableRow, count) {
|
|
270
244
|
// ensure that every cell-delimiting pipe has a space
|
|
271
245
|
// before it to distinguish it from an escaped pipe
|
|
272
246
|
var row = tableRow.replace(/\|/g, function (match, offset, str) {
|
|
273
|
-
|
|
247
|
+
var escaped = false,
|
|
274
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;
|
|
275
263
|
|
|
276
|
-
|
|
277
|
-
escaped = !escaped;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
if (escaped) {
|
|
281
|
-
// odd number of slashes means | is escaped
|
|
282
|
-
// so we leave it alone
|
|
283
|
-
return '|';
|
|
284
|
-
} else {
|
|
285
|
-
// add space before unescaped |
|
|
286
|
-
return ' |';
|
|
287
|
-
}
|
|
288
|
-
}),
|
|
289
|
-
cells = row.split(/ \|/);
|
|
290
|
-
var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe
|
|
291
|
-
|
|
264
|
+
// First/last cell in a row cannot be empty if it has no leading/trailing pipe
|
|
292
265
|
if (!cells[0].trim()) {
|
|
293
266
|
cells.shift();
|
|
294
267
|
}
|
|
295
|
-
|
|
296
268
|
if (cells.length > 0 && !cells[cells.length - 1].trim()) {
|
|
297
269
|
cells.pop();
|
|
298
270
|
}
|
|
299
|
-
|
|
300
271
|
if (cells.length > count) {
|
|
301
272
|
cells.splice(count);
|
|
302
273
|
} else {
|
|
@@ -304,14 +275,13 @@ function splitCells(tableRow, count) {
|
|
|
304
275
|
cells.push('');
|
|
305
276
|
}
|
|
306
277
|
}
|
|
307
|
-
|
|
308
278
|
for (; i < cells.length; i++) {
|
|
309
279
|
// leading or trailing whitespace is ignored per the gfm spec
|
|
310
280
|
cells[i] = cells[i].trim().replace(/\\\|/g, '|');
|
|
311
281
|
}
|
|
312
|
-
|
|
313
282
|
return cells;
|
|
314
283
|
}
|
|
284
|
+
|
|
315
285
|
/**
|
|
316
286
|
* Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
|
|
317
287
|
* /c*$/ is vulnerable to REDOS.
|
|
@@ -320,20 +290,18 @@ function splitCells(tableRow, count) {
|
|
|
320
290
|
* @param {string} c
|
|
321
291
|
* @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.
|
|
322
292
|
*/
|
|
323
|
-
|
|
324
293
|
function rtrim(str, c, invert) {
|
|
325
294
|
var l = str.length;
|
|
326
|
-
|
|
327
295
|
if (l === 0) {
|
|
328
296
|
return '';
|
|
329
|
-
}
|
|
330
|
-
|
|
297
|
+
}
|
|
331
298
|
|
|
332
|
-
|
|
299
|
+
// Length of suffix matching the invert condition.
|
|
300
|
+
var suffLen = 0;
|
|
333
301
|
|
|
302
|
+
// Step left until we fail to match the invert condition.
|
|
334
303
|
while (suffLen < l) {
|
|
335
304
|
var currChar = str.charAt(l - suffLen - 1);
|
|
336
|
-
|
|
337
305
|
if (currChar === c && !invert) {
|
|
338
306
|
suffLen++;
|
|
339
307
|
} else if (currChar !== c && invert) {
|
|
@@ -342,18 +310,15 @@ function rtrim(str, c, invert) {
|
|
|
342
310
|
break;
|
|
343
311
|
}
|
|
344
312
|
}
|
|
345
|
-
|
|
346
313
|
return str.slice(0, l - suffLen);
|
|
347
314
|
}
|
|
348
315
|
function findClosingBracket(str, b) {
|
|
349
316
|
if (str.indexOf(b[1]) === -1) {
|
|
350
317
|
return -1;
|
|
351
318
|
}
|
|
352
|
-
|
|
353
319
|
var l = str.length;
|
|
354
320
|
var level = 0,
|
|
355
|
-
|
|
356
|
-
|
|
321
|
+
i = 0;
|
|
357
322
|
for (; i < l; i++) {
|
|
358
323
|
if (str[i] === '\\') {
|
|
359
324
|
i++;
|
|
@@ -361,42 +326,36 @@ function findClosingBracket(str, b) {
|
|
|
361
326
|
level++;
|
|
362
327
|
} else if (str[i] === b[1]) {
|
|
363
328
|
level--;
|
|
364
|
-
|
|
365
329
|
if (level < 0) {
|
|
366
330
|
return i;
|
|
367
331
|
}
|
|
368
332
|
}
|
|
369
333
|
}
|
|
370
|
-
|
|
371
334
|
return -1;
|
|
372
335
|
}
|
|
373
336
|
function checkSanitizeDeprecation(opt) {
|
|
374
337
|
if (opt && opt.sanitize && !opt.silent) {
|
|
375
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');
|
|
376
339
|
}
|
|
377
|
-
}
|
|
340
|
+
}
|
|
378
341
|
|
|
342
|
+
// copied from https://stackoverflow.com/a/5450113/806777
|
|
379
343
|
/**
|
|
380
344
|
* @param {string} pattern
|
|
381
345
|
* @param {number} count
|
|
382
346
|
*/
|
|
383
|
-
|
|
384
347
|
function repeatString(pattern, count) {
|
|
385
348
|
if (count < 1) {
|
|
386
349
|
return '';
|
|
387
350
|
}
|
|
388
|
-
|
|
389
351
|
var result = '';
|
|
390
|
-
|
|
391
352
|
while (count > 1) {
|
|
392
353
|
if (count & 1) {
|
|
393
354
|
result += pattern;
|
|
394
355
|
}
|
|
395
|
-
|
|
396
356
|
count >>= 1;
|
|
397
357
|
pattern += pattern;
|
|
398
358
|
}
|
|
399
|
-
|
|
400
359
|
return result + pattern;
|
|
401
360
|
}
|
|
402
361
|
|
|
@@ -404,7 +363,6 @@ function outputLink(cap, link, raw, lexer) {
|
|
|
404
363
|
var href = link.href;
|
|
405
364
|
var title = link.title ? escape(link.title) : null;
|
|
406
365
|
var text = cap[1].replace(/\\([\[\]])/g, '$1');
|
|
407
|
-
|
|
408
366
|
if (cap[0].charAt(0) !== '!') {
|
|
409
367
|
lexer.state.inLink = true;
|
|
410
368
|
var token = {
|
|
@@ -418,7 +376,6 @@ function outputLink(cap, link, raw, lexer) {
|
|
|
418
376
|
lexer.state.inLink = false;
|
|
419
377
|
return token;
|
|
420
378
|
}
|
|
421
|
-
|
|
422
379
|
return {
|
|
423
380
|
type: 'image',
|
|
424
381
|
raw: raw,
|
|
@@ -427,46 +384,35 @@ function outputLink(cap, link, raw, lexer) {
|
|
|
427
384
|
text: escape(text)
|
|
428
385
|
};
|
|
429
386
|
}
|
|
430
|
-
|
|
431
387
|
function indentCodeCompensation(raw, text) {
|
|
432
388
|
var matchIndentToCode = raw.match(/^(\s+)(?:```)/);
|
|
433
|
-
|
|
434
389
|
if (matchIndentToCode === null) {
|
|
435
390
|
return text;
|
|
436
391
|
}
|
|
437
|
-
|
|
438
392
|
var indentToCode = matchIndentToCode[1];
|
|
439
393
|
return text.split('\n').map(function (node) {
|
|
440
394
|
var matchIndentInNode = node.match(/^\s+/);
|
|
441
|
-
|
|
442
395
|
if (matchIndentInNode === null) {
|
|
443
396
|
return node;
|
|
444
397
|
}
|
|
445
|
-
|
|
446
398
|
var indentInNode = matchIndentInNode[0];
|
|
447
|
-
|
|
448
399
|
if (indentInNode.length >= indentToCode.length) {
|
|
449
400
|
return node.slice(indentToCode.length);
|
|
450
401
|
}
|
|
451
|
-
|
|
452
402
|
return node;
|
|
453
403
|
}).join('\n');
|
|
454
404
|
}
|
|
405
|
+
|
|
455
406
|
/**
|
|
456
407
|
* Tokenizer
|
|
457
408
|
*/
|
|
458
|
-
|
|
459
|
-
|
|
460
409
|
var Tokenizer = /*#__PURE__*/function () {
|
|
461
410
|
function Tokenizer(options) {
|
|
462
411
|
this.options = options || exports.defaults;
|
|
463
412
|
}
|
|
464
|
-
|
|
465
413
|
var _proto = Tokenizer.prototype;
|
|
466
|
-
|
|
467
414
|
_proto.space = function space(src) {
|
|
468
415
|
var cap = this.rules.block.newline.exec(src);
|
|
469
|
-
|
|
470
416
|
if (cap && cap[0].length > 0) {
|
|
471
417
|
return {
|
|
472
418
|
type: 'space',
|
|
@@ -474,10 +420,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
474
420
|
};
|
|
475
421
|
}
|
|
476
422
|
};
|
|
477
|
-
|
|
478
423
|
_proto.code = function code(src) {
|
|
479
424
|
var cap = this.rules.block.code.exec(src);
|
|
480
|
-
|
|
481
425
|
if (cap) {
|
|
482
426
|
var text = cap[0].replace(/^ {1,4}/gm, '');
|
|
483
427
|
return {
|
|
@@ -488,10 +432,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
488
432
|
};
|
|
489
433
|
}
|
|
490
434
|
};
|
|
491
|
-
|
|
492
435
|
_proto.fences = function fences(src) {
|
|
493
436
|
var cap = this.rules.block.fences.exec(src);
|
|
494
|
-
|
|
495
437
|
if (cap) {
|
|
496
438
|
var raw = cap[0];
|
|
497
439
|
var text = indentCodeCompensation(raw, cap[3] || '');
|
|
@@ -503,16 +445,14 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
503
445
|
};
|
|
504
446
|
}
|
|
505
447
|
};
|
|
506
|
-
|
|
507
448
|
_proto.heading = function heading(src) {
|
|
508
449
|
var cap = this.rules.block.heading.exec(src);
|
|
509
|
-
|
|
510
450
|
if (cap) {
|
|
511
|
-
var text = cap[2].trim();
|
|
451
|
+
var text = cap[2].trim();
|
|
512
452
|
|
|
453
|
+
// remove trailing #s
|
|
513
454
|
if (/#$/.test(text)) {
|
|
514
455
|
var trimmed = rtrim(text, '#');
|
|
515
|
-
|
|
516
456
|
if (this.options.pedantic) {
|
|
517
457
|
text = trimmed.trim();
|
|
518
458
|
} else if (!trimmed || / $/.test(trimmed)) {
|
|
@@ -520,7 +460,6 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
520
460
|
text = trimmed.trim();
|
|
521
461
|
}
|
|
522
462
|
}
|
|
523
|
-
|
|
524
463
|
return {
|
|
525
464
|
type: 'heading',
|
|
526
465
|
raw: cap[0],
|
|
@@ -530,10 +469,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
530
469
|
};
|
|
531
470
|
}
|
|
532
471
|
};
|
|
533
|
-
|
|
534
472
|
_proto.hr = function hr(src) {
|
|
535
473
|
var cap = this.rules.block.hr.exec(src);
|
|
536
|
-
|
|
537
474
|
if (cap) {
|
|
538
475
|
return {
|
|
539
476
|
type: 'hr',
|
|
@@ -541,10 +478,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
541
478
|
};
|
|
542
479
|
}
|
|
543
480
|
};
|
|
544
|
-
|
|
545
481
|
_proto.blockquote = function blockquote(src) {
|
|
546
482
|
var cap = this.rules.block.blockquote.exec(src);
|
|
547
|
-
|
|
548
483
|
if (cap) {
|
|
549
484
|
var text = cap[0].replace(/^ *>[ \t]?/gm, '');
|
|
550
485
|
return {
|
|
@@ -555,10 +490,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
555
490
|
};
|
|
556
491
|
}
|
|
557
492
|
};
|
|
558
|
-
|
|
559
493
|
_proto.list = function list(src) {
|
|
560
494
|
var cap = this.rules.block.list.exec(src);
|
|
561
|
-
|
|
562
495
|
if (cap) {
|
|
563
496
|
var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;
|
|
564
497
|
var bull = cap[1].trim();
|
|
@@ -572,86 +505,78 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
572
505
|
items: []
|
|
573
506
|
};
|
|
574
507
|
bull = isordered ? "\\d{1,9}\\" + bull.slice(-1) : "\\" + bull;
|
|
575
|
-
|
|
576
508
|
if (this.options.pedantic) {
|
|
577
509
|
bull = isordered ? bull : '[*+-]';
|
|
578
|
-
}
|
|
579
|
-
|
|
510
|
+
}
|
|
580
511
|
|
|
581
|
-
|
|
512
|
+
// Get next list item
|
|
513
|
+
var itemRegex = new RegExp("^( {0,3}" + bull + ")((?:[\t ][^\\n]*)?(?:\\n|$))");
|
|
582
514
|
|
|
515
|
+
// Check if current bullet point can start a new List Item
|
|
583
516
|
while (src) {
|
|
584
517
|
endEarly = false;
|
|
585
|
-
|
|
586
518
|
if (!(cap = itemRegex.exec(src))) {
|
|
587
519
|
break;
|
|
588
520
|
}
|
|
589
|
-
|
|
590
521
|
if (this.rules.block.hr.test(src)) {
|
|
591
522
|
// End list if bullet was actually HR (possibly move into itemRegex?)
|
|
592
523
|
break;
|
|
593
524
|
}
|
|
594
|
-
|
|
595
525
|
raw = cap[0];
|
|
596
526
|
src = src.substring(raw.length);
|
|
597
527
|
line = cap[2].split('\n', 1)[0];
|
|
598
528
|
nextLine = src.split('\n', 1)[0];
|
|
599
|
-
|
|
600
529
|
if (this.options.pedantic) {
|
|
601
530
|
indent = 2;
|
|
602
531
|
itemContents = line.trimLeft();
|
|
603
532
|
} else {
|
|
604
533
|
indent = cap[2].search(/[^ ]/); // Find first non-space char
|
|
605
|
-
|
|
606
534
|
indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent
|
|
607
|
-
|
|
608
535
|
itemContents = line.slice(indent);
|
|
609
536
|
indent += cap[1].length;
|
|
610
537
|
}
|
|
611
|
-
|
|
612
538
|
blankLine = false;
|
|
613
|
-
|
|
614
539
|
if (!line && /^ *$/.test(nextLine)) {
|
|
615
540
|
// Items begin with at most one blank line
|
|
616
541
|
raw += nextLine + '\n';
|
|
617
542
|
src = src.substring(nextLine.length + 1);
|
|
618
543
|
endEarly = true;
|
|
619
544
|
}
|
|
620
|
-
|
|
621
545
|
if (!endEarly) {
|
|
622
546
|
var nextBulletRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))");
|
|
623
547
|
var hrRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)");
|
|
624
548
|
var fencesBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}(?:```|~~~)");
|
|
625
|
-
var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#");
|
|
549
|
+
var headingBeginRegex = new RegExp("^ {0," + Math.min(3, indent - 1) + "}#");
|
|
626
550
|
|
|
551
|
+
// Check if following lines should be included in List Item
|
|
627
552
|
while (src) {
|
|
628
553
|
rawLine = src.split('\n', 1)[0];
|
|
629
|
-
line = rawLine;
|
|
554
|
+
line = rawLine;
|
|
630
555
|
|
|
556
|
+
// Re-align to follow commonmark nesting rules
|
|
631
557
|
if (this.options.pedantic) {
|
|
632
558
|
line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');
|
|
633
|
-
}
|
|
634
|
-
|
|
559
|
+
}
|
|
635
560
|
|
|
561
|
+
// End list item if found code fences
|
|
636
562
|
if (fencesBeginRegex.test(line)) {
|
|
637
563
|
break;
|
|
638
|
-
}
|
|
639
|
-
|
|
564
|
+
}
|
|
640
565
|
|
|
566
|
+
// End list item if found start of new heading
|
|
641
567
|
if (headingBeginRegex.test(line)) {
|
|
642
568
|
break;
|
|
643
|
-
}
|
|
644
|
-
|
|
569
|
+
}
|
|
645
570
|
|
|
571
|
+
// End list item if found start of new bullet
|
|
646
572
|
if (nextBulletRegex.test(line)) {
|
|
647
573
|
break;
|
|
648
|
-
}
|
|
649
|
-
|
|
574
|
+
}
|
|
650
575
|
|
|
576
|
+
// Horizontal rule found
|
|
651
577
|
if (hrRegex.test(src)) {
|
|
652
578
|
break;
|
|
653
579
|
}
|
|
654
|
-
|
|
655
580
|
if (line.search(/[^ ]/) >= indent || !line.trim()) {
|
|
656
581
|
// Dedent if possible
|
|
657
582
|
itemContents += '\n' + line.slice(indent);
|
|
@@ -662,17 +587,14 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
662
587
|
// Otherwise, improper indentation ends this item
|
|
663
588
|
break;
|
|
664
589
|
}
|
|
665
|
-
|
|
666
590
|
if (!blankLine && !line.trim()) {
|
|
667
591
|
// Check if current line is blank
|
|
668
592
|
blankLine = true;
|
|
669
593
|
}
|
|
670
|
-
|
|
671
594
|
raw += rawLine + '\n';
|
|
672
595
|
src = src.substring(rawLine.length + 1);
|
|
673
596
|
}
|
|
674
597
|
}
|
|
675
|
-
|
|
676
598
|
if (!list.loose) {
|
|
677
599
|
// If the previous item ended with a blank line, the list is loose
|
|
678
600
|
if (endsWithBlankLine) {
|
|
@@ -680,18 +602,16 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
680
602
|
} else if (/\n *\n *$/.test(raw)) {
|
|
681
603
|
endsWithBlankLine = true;
|
|
682
604
|
}
|
|
683
|
-
}
|
|
684
|
-
|
|
605
|
+
}
|
|
685
606
|
|
|
607
|
+
// Check for task list items
|
|
686
608
|
if (this.options.gfm) {
|
|
687
609
|
istask = /^\[[ xX]\] /.exec(itemContents);
|
|
688
|
-
|
|
689
610
|
if (istask) {
|
|
690
611
|
ischecked = istask[0] !== '[ ] ';
|
|
691
612
|
itemContents = itemContents.replace(/^\[[ xX]\] +/, '');
|
|
692
613
|
}
|
|
693
614
|
}
|
|
694
|
-
|
|
695
615
|
list.items.push({
|
|
696
616
|
type: 'list_item',
|
|
697
617
|
raw: raw,
|
|
@@ -701,14 +621,15 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
701
621
|
text: itemContents
|
|
702
622
|
});
|
|
703
623
|
list.raw += raw;
|
|
704
|
-
}
|
|
705
|
-
|
|
624
|
+
}
|
|
706
625
|
|
|
626
|
+
// Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic
|
|
707
627
|
list.items[list.items.length - 1].raw = raw.trimRight();
|
|
708
628
|
list.items[list.items.length - 1].text = itemContents.trimRight();
|
|
709
629
|
list.raw = list.raw.trimRight();
|
|
710
|
-
var l = list.items.length;
|
|
630
|
+
var l = list.items.length;
|
|
711
631
|
|
|
632
|
+
// Item child tokens handled here at end because we needed to have the final item to trim it first
|
|
712
633
|
for (i = 0; i < l; i++) {
|
|
713
634
|
this.lexer.state.top = false;
|
|
714
635
|
list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
|
|
@@ -718,36 +639,28 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
718
639
|
var hasMultipleLineBreaks = spacers.every(function (t) {
|
|
719
640
|
var chars = t.raw.split('');
|
|
720
641
|
var lineBreaks = 0;
|
|
721
|
-
|
|
722
642
|
for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) {
|
|
723
643
|
var _char = _step.value;
|
|
724
|
-
|
|
725
644
|
if (_char === '\n') {
|
|
726
645
|
lineBreaks += 1;
|
|
727
646
|
}
|
|
728
|
-
|
|
729
647
|
if (lineBreaks > 1) {
|
|
730
648
|
return true;
|
|
731
649
|
}
|
|
732
650
|
}
|
|
733
|
-
|
|
734
651
|
return false;
|
|
735
652
|
});
|
|
736
|
-
|
|
737
653
|
if (!list.loose && spacers.length && hasMultipleLineBreaks) {
|
|
738
654
|
// Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item
|
|
739
655
|
list.loose = true;
|
|
740
656
|
list.items[i].loose = true;
|
|
741
657
|
}
|
|
742
658
|
}
|
|
743
|
-
|
|
744
659
|
return list;
|
|
745
660
|
}
|
|
746
661
|
};
|
|
747
|
-
|
|
748
662
|
_proto.html = function html(src) {
|
|
749
663
|
var cap = this.rules.block.html.exec(src);
|
|
750
|
-
|
|
751
664
|
if (cap) {
|
|
752
665
|
var token = {
|
|
753
666
|
type: 'html',
|
|
@@ -755,21 +668,17 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
755
668
|
pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
|
|
756
669
|
text: cap[0]
|
|
757
670
|
};
|
|
758
|
-
|
|
759
671
|
if (this.options.sanitize) {
|
|
760
672
|
var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);
|
|
761
673
|
token.type = 'paragraph';
|
|
762
674
|
token.text = text;
|
|
763
675
|
token.tokens = this.lexer.inline(text);
|
|
764
676
|
}
|
|
765
|
-
|
|
766
677
|
return token;
|
|
767
678
|
}
|
|
768
679
|
};
|
|
769
|
-
|
|
770
680
|
_proto.def = function def(src) {
|
|
771
681
|
var cap = this.rules.block.def.exec(src);
|
|
772
|
-
|
|
773
682
|
if (cap) {
|
|
774
683
|
if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);
|
|
775
684
|
var tag = cap[1].toLowerCase().replace(/\s+/g, ' ');
|
|
@@ -782,10 +691,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
782
691
|
};
|
|
783
692
|
}
|
|
784
693
|
};
|
|
785
|
-
|
|
786
694
|
_proto.table = function table(src) {
|
|
787
695
|
var cap = this.rules.block.table.exec(src);
|
|
788
|
-
|
|
789
696
|
if (cap) {
|
|
790
697
|
var item = {
|
|
791
698
|
type: 'table',
|
|
@@ -797,12 +704,10 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
797
704
|
align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
|
|
798
705
|
rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, '').split('\n') : []
|
|
799
706
|
};
|
|
800
|
-
|
|
801
707
|
if (item.header.length === item.align.length) {
|
|
802
708
|
item.raw = cap[0];
|
|
803
709
|
var l = item.align.length;
|
|
804
710
|
var i, j, k, row;
|
|
805
|
-
|
|
806
711
|
for (i = 0; i < l; i++) {
|
|
807
712
|
if (/^ *-+: *$/.test(item.align[i])) {
|
|
808
713
|
item.align[i] = 'right';
|
|
@@ -814,44 +719,37 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
814
719
|
item.align[i] = null;
|
|
815
720
|
}
|
|
816
721
|
}
|
|
817
|
-
|
|
818
722
|
l = item.rows.length;
|
|
819
|
-
|
|
820
723
|
for (i = 0; i < l; i++) {
|
|
821
724
|
item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {
|
|
822
725
|
return {
|
|
823
726
|
text: c
|
|
824
727
|
};
|
|
825
728
|
});
|
|
826
|
-
}
|
|
827
|
-
// header child tokens
|
|
729
|
+
}
|
|
828
730
|
|
|
731
|
+
// parse child tokens inside headers and cells
|
|
829
732
|
|
|
733
|
+
// header child tokens
|
|
830
734
|
l = item.header.length;
|
|
831
|
-
|
|
832
735
|
for (j = 0; j < l; j++) {
|
|
833
736
|
item.header[j].tokens = this.lexer.inline(item.header[j].text);
|
|
834
|
-
}
|
|
835
|
-
|
|
737
|
+
}
|
|
836
738
|
|
|
739
|
+
// cell child tokens
|
|
837
740
|
l = item.rows.length;
|
|
838
|
-
|
|
839
741
|
for (j = 0; j < l; j++) {
|
|
840
742
|
row = item.rows[j];
|
|
841
|
-
|
|
842
743
|
for (k = 0; k < row.length; k++) {
|
|
843
744
|
row[k].tokens = this.lexer.inline(row[k].text);
|
|
844
745
|
}
|
|
845
746
|
}
|
|
846
|
-
|
|
847
747
|
return item;
|
|
848
748
|
}
|
|
849
749
|
}
|
|
850
750
|
};
|
|
851
|
-
|
|
852
751
|
_proto.lheading = function lheading(src) {
|
|
853
752
|
var cap = this.rules.block.lheading.exec(src);
|
|
854
|
-
|
|
855
753
|
if (cap) {
|
|
856
754
|
return {
|
|
857
755
|
type: 'heading',
|
|
@@ -862,10 +760,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
862
760
|
};
|
|
863
761
|
}
|
|
864
762
|
};
|
|
865
|
-
|
|
866
763
|
_proto.paragraph = function paragraph(src) {
|
|
867
764
|
var cap = this.rules.block.paragraph.exec(src);
|
|
868
|
-
|
|
869
765
|
if (cap) {
|
|
870
766
|
var text = cap[1].charAt(cap[1].length - 1) === '\n' ? cap[1].slice(0, -1) : cap[1];
|
|
871
767
|
return {
|
|
@@ -876,10 +772,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
876
772
|
};
|
|
877
773
|
}
|
|
878
774
|
};
|
|
879
|
-
|
|
880
775
|
_proto.text = function text(src) {
|
|
881
776
|
var cap = this.rules.block.text.exec(src);
|
|
882
|
-
|
|
883
777
|
if (cap) {
|
|
884
778
|
return {
|
|
885
779
|
type: 'text',
|
|
@@ -889,10 +783,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
889
783
|
};
|
|
890
784
|
}
|
|
891
785
|
};
|
|
892
|
-
|
|
893
786
|
_proto.escape = function escape$1(src) {
|
|
894
787
|
var cap = this.rules.inline.escape.exec(src);
|
|
895
|
-
|
|
896
788
|
if (cap) {
|
|
897
789
|
return {
|
|
898
790
|
type: 'escape',
|
|
@@ -901,23 +793,19 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
901
793
|
};
|
|
902
794
|
}
|
|
903
795
|
};
|
|
904
|
-
|
|
905
796
|
_proto.tag = function tag(src) {
|
|
906
797
|
var cap = this.rules.inline.tag.exec(src);
|
|
907
|
-
|
|
908
798
|
if (cap) {
|
|
909
799
|
if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {
|
|
910
800
|
this.lexer.state.inLink = true;
|
|
911
801
|
} else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) {
|
|
912
802
|
this.lexer.state.inLink = false;
|
|
913
803
|
}
|
|
914
|
-
|
|
915
804
|
if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
916
805
|
this.lexer.state.inRawBlock = true;
|
|
917
806
|
} else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) {
|
|
918
807
|
this.lexer.state.inRawBlock = false;
|
|
919
808
|
}
|
|
920
|
-
|
|
921
809
|
return {
|
|
922
810
|
type: this.options.sanitize ? 'text' : 'html',
|
|
923
811
|
raw: cap[0],
|
|
@@ -927,29 +815,24 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
927
815
|
};
|
|
928
816
|
}
|
|
929
817
|
};
|
|
930
|
-
|
|
931
818
|
_proto.link = function link(src) {
|
|
932
819
|
var cap = this.rules.inline.link.exec(src);
|
|
933
|
-
|
|
934
820
|
if (cap) {
|
|
935
821
|
var trimmedUrl = cap[2].trim();
|
|
936
|
-
|
|
937
822
|
if (!this.options.pedantic && /^</.test(trimmedUrl)) {
|
|
938
823
|
// commonmark requires matching angle brackets
|
|
939
824
|
if (!/>$/.test(trimmedUrl)) {
|
|
940
825
|
return;
|
|
941
|
-
}
|
|
942
|
-
|
|
826
|
+
}
|
|
943
827
|
|
|
828
|
+
// ending angle bracket cannot be escaped
|
|
944
829
|
var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\');
|
|
945
|
-
|
|
946
830
|
if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
|
|
947
831
|
return;
|
|
948
832
|
}
|
|
949
833
|
} else {
|
|
950
834
|
// find closing parenthesis
|
|
951
835
|
var lastParenIndex = findClosingBracket(cap[2], '()');
|
|
952
|
-
|
|
953
836
|
if (lastParenIndex > -1) {
|
|
954
837
|
var start = cap[0].indexOf('!') === 0 ? 5 : 4;
|
|
955
838
|
var linkLen = start + cap[1].length + lastParenIndex;
|
|
@@ -958,14 +841,11 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
958
841
|
cap[3] = '';
|
|
959
842
|
}
|
|
960
843
|
}
|
|
961
|
-
|
|
962
844
|
var href = cap[2];
|
|
963
845
|
var title = '';
|
|
964
|
-
|
|
965
846
|
if (this.options.pedantic) {
|
|
966
847
|
// split pedantic href and title
|
|
967
848
|
var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
|
|
968
|
-
|
|
969
849
|
if (link) {
|
|
970
850
|
href = link[1];
|
|
971
851
|
title = link[3];
|
|
@@ -973,9 +853,7 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
973
853
|
} else {
|
|
974
854
|
title = cap[3] ? cap[3].slice(1, -1) : '';
|
|
975
855
|
}
|
|
976
|
-
|
|
977
856
|
href = href.trim();
|
|
978
|
-
|
|
979
857
|
if (/^</.test(href)) {
|
|
980
858
|
if (this.options.pedantic && !/>$/.test(trimmedUrl)) {
|
|
981
859
|
// pedantic allows starting angle bracket without ending angle bracket
|
|
@@ -984,21 +862,17 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
984
862
|
href = href.slice(1, -1);
|
|
985
863
|
}
|
|
986
864
|
}
|
|
987
|
-
|
|
988
865
|
return outputLink(cap, {
|
|
989
866
|
href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
|
|
990
867
|
title: title ? title.replace(this.rules.inline._escapes, '$1') : title
|
|
991
868
|
}, cap[0], this.lexer);
|
|
992
869
|
}
|
|
993
870
|
};
|
|
994
|
-
|
|
995
871
|
_proto.reflink = function reflink(src, links) {
|
|
996
872
|
var cap;
|
|
997
|
-
|
|
998
873
|
if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {
|
|
999
874
|
var link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
|
|
1000
875
|
link = links[link.toLowerCase()];
|
|
1001
|
-
|
|
1002
876
|
if (!link || !link.href) {
|
|
1003
877
|
var text = cap[0].charAt(0);
|
|
1004
878
|
return {
|
|
@@ -1007,39 +881,35 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1007
881
|
text: text
|
|
1008
882
|
};
|
|
1009
883
|
}
|
|
1010
|
-
|
|
1011
884
|
return outputLink(cap, link, cap[0], this.lexer);
|
|
1012
885
|
}
|
|
1013
886
|
};
|
|
1014
|
-
|
|
1015
887
|
_proto.emStrong = function emStrong(src, maskedSrc, prevChar) {
|
|
1016
888
|
if (prevChar === void 0) {
|
|
1017
889
|
prevChar = '';
|
|
1018
890
|
}
|
|
1019
|
-
|
|
1020
891
|
var match = this.rules.inline.emStrong.lDelim.exec(src);
|
|
1021
|
-
if (!match) return;
|
|
892
|
+
if (!match) return;
|
|
1022
893
|
|
|
894
|
+
// _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
|
|
1023
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;
|
|
1024
896
|
var nextChar = match[1] || match[2] || '';
|
|
1025
|
-
|
|
1026
897
|
if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {
|
|
1027
898
|
var lLength = match[0].length - 1;
|
|
1028
899
|
var rDelim,
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
900
|
+
rLength,
|
|
901
|
+
delimTotal = lLength,
|
|
902
|
+
midDelimTotal = 0;
|
|
1032
903
|
var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
|
|
1033
|
-
endReg.lastIndex = 0;
|
|
904
|
+
endReg.lastIndex = 0;
|
|
1034
905
|
|
|
906
|
+
// Clip maskedSrc to same section of string as src (move to lexer?)
|
|
1035
907
|
maskedSrc = maskedSrc.slice(-1 * src.length + lLength);
|
|
1036
|
-
|
|
1037
908
|
while ((match = endReg.exec(maskedSrc)) != null) {
|
|
1038
909
|
rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
|
|
1039
910
|
if (!rDelim) continue; // skip single * in __abc*abc__
|
|
1040
911
|
|
|
1041
912
|
rLength = rDelim.length;
|
|
1042
|
-
|
|
1043
913
|
if (match[3] || match[4]) {
|
|
1044
914
|
// found another Left Delim
|
|
1045
915
|
delimTotal += rLength;
|
|
@@ -1054,22 +924,22 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1054
924
|
|
|
1055
925
|
delimTotal -= rLength;
|
|
1056
926
|
if (delimTotal > 0) continue; // Haven't found enough closing delimiters
|
|
1057
|
-
// Remove extra characters. *a*** -> *a*
|
|
1058
927
|
|
|
1059
|
-
|
|
928
|
+
// Remove extra characters. *a*** -> *a*
|
|
929
|
+
rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);
|
|
1060
930
|
|
|
931
|
+
// Create `em` if smallest delimiter has odd char count. *a***
|
|
1061
932
|
if (Math.min(lLength, rLength) % 2) {
|
|
1062
933
|
var _text = src.slice(1, lLength + match.index + rLength);
|
|
1063
|
-
|
|
1064
934
|
return {
|
|
1065
935
|
type: 'em',
|
|
1066
936
|
raw: src.slice(0, lLength + match.index + rLength + 1),
|
|
1067
937
|
text: _text,
|
|
1068
938
|
tokens: this.lexer.inlineTokens(_text)
|
|
1069
939
|
};
|
|
1070
|
-
}
|
|
1071
|
-
|
|
940
|
+
}
|
|
1072
941
|
|
|
942
|
+
// Create 'strong' if smallest delimiter has even char count. **a***
|
|
1073
943
|
var text = src.slice(2, lLength + match.index + rLength - 1);
|
|
1074
944
|
return {
|
|
1075
945
|
type: 'strong',
|
|
@@ -1080,19 +950,15 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1080
950
|
}
|
|
1081
951
|
}
|
|
1082
952
|
};
|
|
1083
|
-
|
|
1084
953
|
_proto.codespan = function codespan(src) {
|
|
1085
954
|
var cap = this.rules.inline.code.exec(src);
|
|
1086
|
-
|
|
1087
955
|
if (cap) {
|
|
1088
956
|
var text = cap[2].replace(/\n/g, ' ');
|
|
1089
957
|
var hasNonSpaceChars = /[^ ]/.test(text);
|
|
1090
958
|
var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
|
|
1091
|
-
|
|
1092
959
|
if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
|
|
1093
960
|
text = text.substring(1, text.length - 1);
|
|
1094
961
|
}
|
|
1095
|
-
|
|
1096
962
|
text = escape(text, true);
|
|
1097
963
|
return {
|
|
1098
964
|
type: 'codespan',
|
|
@@ -1101,10 +967,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1101
967
|
};
|
|
1102
968
|
}
|
|
1103
969
|
};
|
|
1104
|
-
|
|
1105
970
|
_proto.br = function br(src) {
|
|
1106
971
|
var cap = this.rules.inline.br.exec(src);
|
|
1107
|
-
|
|
1108
972
|
if (cap) {
|
|
1109
973
|
return {
|
|
1110
974
|
type: 'br',
|
|
@@ -1112,10 +976,8 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1112
976
|
};
|
|
1113
977
|
}
|
|
1114
978
|
};
|
|
1115
|
-
|
|
1116
979
|
_proto.del = function del(src) {
|
|
1117
980
|
var cap = this.rules.inline.del.exec(src);
|
|
1118
|
-
|
|
1119
981
|
if (cap) {
|
|
1120
982
|
return {
|
|
1121
983
|
type: 'del',
|
|
@@ -1125,13 +987,10 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1125
987
|
};
|
|
1126
988
|
}
|
|
1127
989
|
};
|
|
1128
|
-
|
|
1129
990
|
_proto.autolink = function autolink(src, mangle) {
|
|
1130
991
|
var cap = this.rules.inline.autolink.exec(src);
|
|
1131
|
-
|
|
1132
992
|
if (cap) {
|
|
1133
993
|
var text, href;
|
|
1134
|
-
|
|
1135
994
|
if (cap[2] === '@') {
|
|
1136
995
|
text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);
|
|
1137
996
|
href = 'mailto:' + text;
|
|
@@ -1139,7 +998,6 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1139
998
|
text = escape(cap[1]);
|
|
1140
999
|
href = text;
|
|
1141
1000
|
}
|
|
1142
|
-
|
|
1143
1001
|
return {
|
|
1144
1002
|
type: 'link',
|
|
1145
1003
|
raw: cap[0],
|
|
@@ -1153,34 +1011,27 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1153
1011
|
};
|
|
1154
1012
|
}
|
|
1155
1013
|
};
|
|
1156
|
-
|
|
1157
1014
|
_proto.url = function url(src, mangle) {
|
|
1158
1015
|
var cap;
|
|
1159
|
-
|
|
1160
1016
|
if (cap = this.rules.inline.url.exec(src)) {
|
|
1161
1017
|
var text, href;
|
|
1162
|
-
|
|
1163
1018
|
if (cap[2] === '@') {
|
|
1164
1019
|
text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);
|
|
1165
1020
|
href = 'mailto:' + text;
|
|
1166
1021
|
} else {
|
|
1167
1022
|
// do extended autolink path validation
|
|
1168
1023
|
var prevCapZero;
|
|
1169
|
-
|
|
1170
1024
|
do {
|
|
1171
1025
|
prevCapZero = cap[0];
|
|
1172
1026
|
cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
|
|
1173
1027
|
} while (prevCapZero !== cap[0]);
|
|
1174
|
-
|
|
1175
1028
|
text = escape(cap[0]);
|
|
1176
|
-
|
|
1177
1029
|
if (cap[1] === 'www.') {
|
|
1178
1030
|
href = 'http://' + text;
|
|
1179
1031
|
} else {
|
|
1180
1032
|
href = text;
|
|
1181
1033
|
}
|
|
1182
1034
|
}
|
|
1183
|
-
|
|
1184
1035
|
return {
|
|
1185
1036
|
type: 'link',
|
|
1186
1037
|
raw: cap[0],
|
|
@@ -1194,19 +1045,15 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1194
1045
|
};
|
|
1195
1046
|
}
|
|
1196
1047
|
};
|
|
1197
|
-
|
|
1198
1048
|
_proto.inlineText = function inlineText(src, smartypants) {
|
|
1199
1049
|
var cap = this.rules.inline.text.exec(src);
|
|
1200
|
-
|
|
1201
1050
|
if (cap) {
|
|
1202
1051
|
var text;
|
|
1203
|
-
|
|
1204
1052
|
if (this.lexer.state.inRawBlock) {
|
|
1205
1053
|
text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];
|
|
1206
1054
|
} else {
|
|
1207
1055
|
text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);
|
|
1208
1056
|
}
|
|
1209
|
-
|
|
1210
1057
|
return {
|
|
1211
1058
|
type: 'text',
|
|
1212
1059
|
raw: cap[0],
|
|
@@ -1214,14 +1061,12 @@ var Tokenizer = /*#__PURE__*/function () {
|
|
|
1214
1061
|
};
|
|
1215
1062
|
}
|
|
1216
1063
|
};
|
|
1217
|
-
|
|
1218
1064
|
return Tokenizer;
|
|
1219
1065
|
}();
|
|
1220
1066
|
|
|
1221
1067
|
/**
|
|
1222
1068
|
* Block-Level Grammar
|
|
1223
1069
|
*/
|
|
1224
|
-
|
|
1225
1070
|
var block = {
|
|
1226
1071
|
newline: /^(?: *(?:\n|$))+/,
|
|
1227
1072
|
code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
|
|
@@ -1262,11 +1107,13 @@ block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('headin
|
|
|
1262
1107
|
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks
|
|
1263
1108
|
.getRegex();
|
|
1264
1109
|
block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();
|
|
1110
|
+
|
|
1265
1111
|
/**
|
|
1266
1112
|
* Normal Block Grammar
|
|
1267
1113
|
*/
|
|
1268
1114
|
|
|
1269
1115
|
block.normal = merge({}, block);
|
|
1116
|
+
|
|
1270
1117
|
/**
|
|
1271
1118
|
* GFM Block Grammar
|
|
1272
1119
|
*/
|
|
@@ -1275,8 +1122,8 @@ block.gfm = merge({}, block.normal, {
|
|
|
1275
1122
|
table: '^ *([^\\n ].*\\|.*)\\n' // Header
|
|
1276
1123
|
+ ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
|
|
1277
1124
|
+ '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
|
|
1278
|
-
|
|
1279
1125
|
});
|
|
1126
|
+
|
|
1280
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
|
|
1281
1128
|
.replace('html', '</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks
|
|
1282
1129
|
.getRegex();
|
|
@@ -1298,10 +1145,10 @@ block.pedantic = merge({}, block.normal, {
|
|
|
1298
1145
|
// fences not supported
|
|
1299
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()
|
|
1300
1147
|
});
|
|
1148
|
+
|
|
1301
1149
|
/**
|
|
1302
1150
|
* Inline-Level Grammar
|
|
1303
1151
|
*/
|
|
1304
|
-
|
|
1305
1152
|
var inline = {
|
|
1306
1153
|
escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
|
|
1307
1154
|
autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
|
|
@@ -1322,19 +1169,21 @@ var inline = {
|
|
|
1322
1169
|
// () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a
|
|
1323
1170
|
rDelimAst: /^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,
|
|
1324
1171
|
rDelimUnd: /^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/ // ^- Not allowed for _
|
|
1325
|
-
|
|
1326
1172
|
},
|
|
1173
|
+
|
|
1327
1174
|
code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
|
|
1328
1175
|
br: /^( {2,}|\\)\n(?!\s*$)/,
|
|
1329
1176
|
del: noopTest,
|
|
1330
1177
|
text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
|
|
1331
1178
|
punctuation: /^([\spunctuation])/
|
|
1332
|
-
};
|
|
1333
|
-
// without * and _ to handle the different emphasis markers * and _
|
|
1179
|
+
};
|
|
1334
1180
|
|
|
1181
|
+
// list of punctuation marks from CommonMark spec
|
|
1182
|
+
// without * and _ to handle the different emphasis markers * and _
|
|
1335
1183
|
inline._punctuation = '!"#$%&\'()+\\-.,/:;<=>?@\\[\\]`^{|}~';
|
|
1336
|
-
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();
|
|
1184
|
+
inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();
|
|
1337
1185
|
|
|
1186
|
+
// sequences em should skip over [title](link), `code`, <html>
|
|
1338
1187
|
inline.blockSkip = /\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;
|
|
1339
1188
|
inline.escapedEmSt = /\\\*|\\_/g;
|
|
1340
1189
|
inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();
|
|
@@ -1354,11 +1203,13 @@ inline.link = edit(inline.link).replace('label', inline._label).replace('href',
|
|
|
1354
1203
|
inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();
|
|
1355
1204
|
inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();
|
|
1356
1205
|
inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();
|
|
1206
|
+
|
|
1357
1207
|
/**
|
|
1358
1208
|
* Normal Inline Grammar
|
|
1359
1209
|
*/
|
|
1360
1210
|
|
|
1361
1211
|
inline.normal = merge({}, inline);
|
|
1212
|
+
|
|
1362
1213
|
/**
|
|
1363
1214
|
* Pedantic Inline Grammar
|
|
1364
1215
|
*/
|
|
@@ -1379,6 +1230,7 @@ inline.pedantic = merge({}, inline.normal, {
|
|
|
1379
1230
|
link: edit(/^!?\[(label)\]\((.*?)\)/).replace('label', inline._label).getRegex(),
|
|
1380
1231
|
reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace('label', inline._label).getRegex()
|
|
1381
1232
|
});
|
|
1233
|
+
|
|
1382
1234
|
/**
|
|
1383
1235
|
* GFM Inline Grammar
|
|
1384
1236
|
*/
|
|
@@ -1405,46 +1257,46 @@ inline.breaks = merge({}, inline.gfm, {
|
|
|
1405
1257
|
* smartypants text replacement
|
|
1406
1258
|
* @param {string} text
|
|
1407
1259
|
*/
|
|
1408
|
-
|
|
1409
1260
|
function smartypants(text) {
|
|
1410
|
-
return text
|
|
1411
|
-
|
|
1412
|
-
.replace(
|
|
1413
|
-
|
|
1414
|
-
.replace(
|
|
1415
|
-
|
|
1416
|
-
.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
|
|
1417
1275
|
.replace(/\.{3}/g, "\u2026");
|
|
1418
1276
|
}
|
|
1277
|
+
|
|
1419
1278
|
/**
|
|
1420
1279
|
* mangle email addresses
|
|
1421
1280
|
* @param {string} text
|
|
1422
1281
|
*/
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
1282
|
function mangle(text) {
|
|
1426
1283
|
var out = '',
|
|
1427
|
-
|
|
1428
|
-
|
|
1284
|
+
i,
|
|
1285
|
+
ch;
|
|
1429
1286
|
var l = text.length;
|
|
1430
|
-
|
|
1431
1287
|
for (i = 0; i < l; i++) {
|
|
1432
1288
|
ch = text.charCodeAt(i);
|
|
1433
|
-
|
|
1434
1289
|
if (Math.random() > 0.5) {
|
|
1435
1290
|
ch = 'x' + ch.toString(16);
|
|
1436
1291
|
}
|
|
1437
|
-
|
|
1438
1292
|
out += '&#' + ch + ';';
|
|
1439
1293
|
}
|
|
1440
|
-
|
|
1441
1294
|
return out;
|
|
1442
1295
|
}
|
|
1296
|
+
|
|
1443
1297
|
/**
|
|
1444
1298
|
* Block Lexer
|
|
1445
1299
|
*/
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
1300
|
var Lexer = /*#__PURE__*/function () {
|
|
1449
1301
|
function Lexer(options) {
|
|
1450
1302
|
this.tokens = [];
|
|
@@ -1464,27 +1316,23 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1464
1316
|
block: block.normal,
|
|
1465
1317
|
inline: inline.normal
|
|
1466
1318
|
};
|
|
1467
|
-
|
|
1468
1319
|
if (this.options.pedantic) {
|
|
1469
1320
|
rules.block = block.pedantic;
|
|
1470
1321
|
rules.inline = inline.pedantic;
|
|
1471
1322
|
} else if (this.options.gfm) {
|
|
1472
1323
|
rules.block = block.gfm;
|
|
1473
|
-
|
|
1474
1324
|
if (this.options.breaks) {
|
|
1475
1325
|
rules.inline = inline.breaks;
|
|
1476
1326
|
} else {
|
|
1477
1327
|
rules.inline = inline.gfm;
|
|
1478
1328
|
}
|
|
1479
1329
|
}
|
|
1480
|
-
|
|
1481
1330
|
this.tokenizer.rules = rules;
|
|
1482
1331
|
}
|
|
1332
|
+
|
|
1483
1333
|
/**
|
|
1484
1334
|
* Expose Rules
|
|
1485
1335
|
*/
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
1336
|
/**
|
|
1489
1337
|
* Static Lex Method
|
|
1490
1338
|
*/
|
|
@@ -1492,45 +1340,37 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1492
1340
|
var lexer = new Lexer(options);
|
|
1493
1341
|
return lexer.lex(src);
|
|
1494
1342
|
}
|
|
1343
|
+
|
|
1495
1344
|
/**
|
|
1496
1345
|
* Static Lex Inline Method
|
|
1497
|
-
|
|
1498
|
-
;
|
|
1499
|
-
|
|
1346
|
+
*/;
|
|
1500
1347
|
Lexer.lexInline = function lexInline(src, options) {
|
|
1501
1348
|
var lexer = new Lexer(options);
|
|
1502
1349
|
return lexer.inlineTokens(src);
|
|
1503
1350
|
}
|
|
1351
|
+
|
|
1504
1352
|
/**
|
|
1505
1353
|
* Preprocessing
|
|
1506
|
-
|
|
1507
|
-
;
|
|
1508
|
-
|
|
1354
|
+
*/;
|
|
1509
1355
|
var _proto = Lexer.prototype;
|
|
1510
|
-
|
|
1511
1356
|
_proto.lex = function lex(src) {
|
|
1512
1357
|
src = src.replace(/\r\n|\r/g, '\n');
|
|
1513
1358
|
this.blockTokens(src, this.tokens);
|
|
1514
1359
|
var next;
|
|
1515
|
-
|
|
1516
1360
|
while (next = this.inlineQueue.shift()) {
|
|
1517
1361
|
this.inlineTokens(next.src, next.tokens);
|
|
1518
1362
|
}
|
|
1519
|
-
|
|
1520
1363
|
return this.tokens;
|
|
1521
1364
|
}
|
|
1365
|
+
|
|
1522
1366
|
/**
|
|
1523
1367
|
* Lexing
|
|
1524
|
-
|
|
1525
|
-
;
|
|
1526
|
-
|
|
1368
|
+
*/;
|
|
1527
1369
|
_proto.blockTokens = function blockTokens(src, tokens) {
|
|
1528
1370
|
var _this = this;
|
|
1529
|
-
|
|
1530
1371
|
if (tokens === void 0) {
|
|
1531
1372
|
tokens = [];
|
|
1532
1373
|
}
|
|
1533
|
-
|
|
1534
1374
|
if (this.options.pedantic) {
|
|
1535
1375
|
src = src.replace(/\t/g, ' ').replace(/^ +$/gm, '');
|
|
1536
1376
|
} else {
|
|
@@ -1538,9 +1378,7 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1538
1378
|
return leading + ' '.repeat(tabs.length);
|
|
1539
1379
|
});
|
|
1540
1380
|
}
|
|
1541
|
-
|
|
1542
1381
|
var token, lastToken, cutSrc, lastParagraphClipped;
|
|
1543
|
-
|
|
1544
1382
|
while (src) {
|
|
1545
1383
|
if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {
|
|
1546
1384
|
if (token = extTokenizer.call({
|
|
@@ -1550,16 +1388,14 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1550
1388
|
tokens.push(token);
|
|
1551
1389
|
return true;
|
|
1552
1390
|
}
|
|
1553
|
-
|
|
1554
1391
|
return false;
|
|
1555
1392
|
})) {
|
|
1556
1393
|
continue;
|
|
1557
|
-
}
|
|
1558
|
-
|
|
1394
|
+
}
|
|
1559
1395
|
|
|
1396
|
+
// newline
|
|
1560
1397
|
if (token = this.tokenizer.space(src)) {
|
|
1561
1398
|
src = src.substring(token.raw.length);
|
|
1562
|
-
|
|
1563
1399
|
if (token.raw.length === 1 && tokens.length > 0) {
|
|
1564
1400
|
// if there's a single \n as a spacer, it's terminating the last line,
|
|
1565
1401
|
// so move it there so that we don't get unecessary paragraph tags
|
|
@@ -1567,15 +1403,14 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1567
1403
|
} else {
|
|
1568
1404
|
tokens.push(token);
|
|
1569
1405
|
}
|
|
1570
|
-
|
|
1571
1406
|
continue;
|
|
1572
|
-
}
|
|
1573
|
-
|
|
1407
|
+
}
|
|
1574
1408
|
|
|
1409
|
+
// code
|
|
1575
1410
|
if (token = this.tokenizer.code(src)) {
|
|
1576
1411
|
src = src.substring(token.raw.length);
|
|
1577
|
-
lastToken = tokens[tokens.length - 1];
|
|
1578
|
-
|
|
1412
|
+
lastToken = tokens[tokens.length - 1];
|
|
1413
|
+
// An indented code block cannot interrupt a paragraph.
|
|
1579
1414
|
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1580
1415
|
lastToken.raw += '\n' + token.raw;
|
|
1581
1416
|
lastToken.text += '\n' + token.text;
|
|
@@ -1583,57 +1418,55 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1583
1418
|
} else {
|
|
1584
1419
|
tokens.push(token);
|
|
1585
1420
|
}
|
|
1586
|
-
|
|
1587
1421
|
continue;
|
|
1588
|
-
}
|
|
1589
|
-
|
|
1422
|
+
}
|
|
1590
1423
|
|
|
1424
|
+
// fences
|
|
1591
1425
|
if (token = this.tokenizer.fences(src)) {
|
|
1592
1426
|
src = src.substring(token.raw.length);
|
|
1593
1427
|
tokens.push(token);
|
|
1594
1428
|
continue;
|
|
1595
|
-
}
|
|
1596
|
-
|
|
1429
|
+
}
|
|
1597
1430
|
|
|
1431
|
+
// heading
|
|
1598
1432
|
if (token = this.tokenizer.heading(src)) {
|
|
1599
1433
|
src = src.substring(token.raw.length);
|
|
1600
1434
|
tokens.push(token);
|
|
1601
1435
|
continue;
|
|
1602
|
-
}
|
|
1603
|
-
|
|
1436
|
+
}
|
|
1604
1437
|
|
|
1438
|
+
// hr
|
|
1605
1439
|
if (token = this.tokenizer.hr(src)) {
|
|
1606
1440
|
src = src.substring(token.raw.length);
|
|
1607
1441
|
tokens.push(token);
|
|
1608
1442
|
continue;
|
|
1609
|
-
}
|
|
1610
|
-
|
|
1443
|
+
}
|
|
1611
1444
|
|
|
1445
|
+
// blockquote
|
|
1612
1446
|
if (token = this.tokenizer.blockquote(src)) {
|
|
1613
1447
|
src = src.substring(token.raw.length);
|
|
1614
1448
|
tokens.push(token);
|
|
1615
1449
|
continue;
|
|
1616
|
-
}
|
|
1617
|
-
|
|
1450
|
+
}
|
|
1618
1451
|
|
|
1452
|
+
// list
|
|
1619
1453
|
if (token = this.tokenizer.list(src)) {
|
|
1620
1454
|
src = src.substring(token.raw.length);
|
|
1621
1455
|
tokens.push(token);
|
|
1622
1456
|
continue;
|
|
1623
|
-
}
|
|
1624
|
-
|
|
1457
|
+
}
|
|
1625
1458
|
|
|
1459
|
+
// html
|
|
1626
1460
|
if (token = this.tokenizer.html(src)) {
|
|
1627
1461
|
src = src.substring(token.raw.length);
|
|
1628
1462
|
tokens.push(token);
|
|
1629
1463
|
continue;
|
|
1630
|
-
}
|
|
1631
|
-
|
|
1464
|
+
}
|
|
1632
1465
|
|
|
1466
|
+
// def
|
|
1633
1467
|
if (token = this.tokenizer.def(src)) {
|
|
1634
1468
|
src = src.substring(token.raw.length);
|
|
1635
1469
|
lastToken = tokens[tokens.length - 1];
|
|
1636
|
-
|
|
1637
1470
|
if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
|
|
1638
1471
|
lastToken.raw += '\n' + token.raw;
|
|
1639
1472
|
lastToken.text += '\n' + token.raw;
|
|
@@ -1644,53 +1477,46 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1644
1477
|
title: token.title
|
|
1645
1478
|
};
|
|
1646
1479
|
}
|
|
1647
|
-
|
|
1648
1480
|
continue;
|
|
1649
|
-
}
|
|
1650
|
-
|
|
1481
|
+
}
|
|
1651
1482
|
|
|
1483
|
+
// table (gfm)
|
|
1652
1484
|
if (token = this.tokenizer.table(src)) {
|
|
1653
1485
|
src = src.substring(token.raw.length);
|
|
1654
1486
|
tokens.push(token);
|
|
1655
1487
|
continue;
|
|
1656
|
-
}
|
|
1657
|
-
|
|
1488
|
+
}
|
|
1658
1489
|
|
|
1490
|
+
// lheading
|
|
1659
1491
|
if (token = this.tokenizer.lheading(src)) {
|
|
1660
1492
|
src = src.substring(token.raw.length);
|
|
1661
1493
|
tokens.push(token);
|
|
1662
1494
|
continue;
|
|
1663
|
-
}
|
|
1664
|
-
// prevent paragraph consuming extensions by clipping 'src' to extension start
|
|
1665
|
-
|
|
1495
|
+
}
|
|
1666
1496
|
|
|
1497
|
+
// top-level paragraph
|
|
1498
|
+
// prevent paragraph consuming extensions by clipping 'src' to extension start
|
|
1667
1499
|
cutSrc = src;
|
|
1668
|
-
|
|
1669
1500
|
if (this.options.extensions && this.options.extensions.startBlock) {
|
|
1670
1501
|
(function () {
|
|
1671
1502
|
var startIndex = Infinity;
|
|
1672
1503
|
var tempSrc = src.slice(1);
|
|
1673
1504
|
var tempStart = void 0;
|
|
1674
|
-
|
|
1675
1505
|
_this.options.extensions.startBlock.forEach(function (getStartIndex) {
|
|
1676
1506
|
tempStart = getStartIndex.call({
|
|
1677
1507
|
lexer: this
|
|
1678
1508
|
}, tempSrc);
|
|
1679
|
-
|
|
1680
1509
|
if (typeof tempStart === 'number' && tempStart >= 0) {
|
|
1681
1510
|
startIndex = Math.min(startIndex, tempStart);
|
|
1682
1511
|
}
|
|
1683
1512
|
});
|
|
1684
|
-
|
|
1685
1513
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1686
1514
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1687
1515
|
}
|
|
1688
1516
|
})();
|
|
1689
1517
|
}
|
|
1690
|
-
|
|
1691
1518
|
if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
|
|
1692
1519
|
lastToken = tokens[tokens.length - 1];
|
|
1693
|
-
|
|
1694
1520
|
if (lastParagraphClipped && lastToken.type === 'paragraph') {
|
|
1695
1521
|
lastToken.raw += '\n' + token.raw;
|
|
1696
1522
|
lastToken.text += '\n' + token.text;
|
|
@@ -1699,17 +1525,15 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1699
1525
|
} else {
|
|
1700
1526
|
tokens.push(token);
|
|
1701
1527
|
}
|
|
1702
|
-
|
|
1703
1528
|
lastParagraphClipped = cutSrc.length !== src.length;
|
|
1704
1529
|
src = src.substring(token.raw.length);
|
|
1705
1530
|
continue;
|
|
1706
|
-
}
|
|
1707
|
-
|
|
1531
|
+
}
|
|
1708
1532
|
|
|
1533
|
+
// text
|
|
1709
1534
|
if (token = this.tokenizer.text(src)) {
|
|
1710
1535
|
src = src.substring(token.raw.length);
|
|
1711
1536
|
lastToken = tokens[tokens.length - 1];
|
|
1712
|
-
|
|
1713
1537
|
if (lastToken && lastToken.type === 'text') {
|
|
1714
1538
|
lastToken.raw += '\n' + token.raw;
|
|
1715
1539
|
lastToken.text += '\n' + token.text;
|
|
@@ -1718,13 +1542,10 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1718
1542
|
} else {
|
|
1719
1543
|
tokens.push(token);
|
|
1720
1544
|
}
|
|
1721
|
-
|
|
1722
1545
|
continue;
|
|
1723
1546
|
}
|
|
1724
|
-
|
|
1725
1547
|
if (src) {
|
|
1726
1548
|
var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
|
|
1727
|
-
|
|
1728
1549
|
if (this.options.silent) {
|
|
1729
1550
|
console.error(errMsg);
|
|
1730
1551
|
break;
|
|
@@ -1733,43 +1554,38 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1733
1554
|
}
|
|
1734
1555
|
}
|
|
1735
1556
|
}
|
|
1736
|
-
|
|
1737
1557
|
this.state.top = true;
|
|
1738
1558
|
return tokens;
|
|
1739
1559
|
};
|
|
1740
|
-
|
|
1741
1560
|
_proto.inline = function inline(src, tokens) {
|
|
1742
1561
|
if (tokens === void 0) {
|
|
1743
1562
|
tokens = [];
|
|
1744
1563
|
}
|
|
1745
|
-
|
|
1746
1564
|
this.inlineQueue.push({
|
|
1747
1565
|
src: src,
|
|
1748
1566
|
tokens: tokens
|
|
1749
1567
|
});
|
|
1750
1568
|
return tokens;
|
|
1751
1569
|
}
|
|
1570
|
+
|
|
1752
1571
|
/**
|
|
1753
1572
|
* Lexing/Compiling
|
|
1754
|
-
|
|
1755
|
-
;
|
|
1756
|
-
|
|
1573
|
+
*/;
|
|
1757
1574
|
_proto.inlineTokens = function inlineTokens(src, tokens) {
|
|
1758
1575
|
var _this2 = this;
|
|
1759
|
-
|
|
1760
1576
|
if (tokens === void 0) {
|
|
1761
1577
|
tokens = [];
|
|
1762
1578
|
}
|
|
1579
|
+
var token, lastToken, cutSrc;
|
|
1763
1580
|
|
|
1764
|
-
|
|
1765
|
-
|
|
1581
|
+
// String with links masked to avoid interference with em and strong
|
|
1766
1582
|
var maskedSrc = src;
|
|
1767
1583
|
var match;
|
|
1768
|
-
var keepPrevChar, prevChar;
|
|
1584
|
+
var keepPrevChar, prevChar;
|
|
1769
1585
|
|
|
1586
|
+
// Mask out reflinks
|
|
1770
1587
|
if (this.tokens.links) {
|
|
1771
1588
|
var links = Object.keys(this.tokens.links);
|
|
1772
|
-
|
|
1773
1589
|
if (links.length > 0) {
|
|
1774
1590
|
while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {
|
|
1775
1591
|
if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {
|
|
@@ -1777,25 +1593,23 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1777
1593
|
}
|
|
1778
1594
|
}
|
|
1779
1595
|
}
|
|
1780
|
-
}
|
|
1781
|
-
|
|
1782
|
-
|
|
1596
|
+
}
|
|
1597
|
+
// Mask out other blocks
|
|
1783
1598
|
while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {
|
|
1784
1599
|
maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
|
|
1785
|
-
}
|
|
1786
|
-
|
|
1600
|
+
}
|
|
1787
1601
|
|
|
1602
|
+
// Mask out escaped em & strong delimiters
|
|
1788
1603
|
while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {
|
|
1789
1604
|
maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
|
|
1790
1605
|
}
|
|
1791
|
-
|
|
1792
1606
|
while (src) {
|
|
1793
1607
|
if (!keepPrevChar) {
|
|
1794
1608
|
prevChar = '';
|
|
1795
1609
|
}
|
|
1610
|
+
keepPrevChar = false;
|
|
1796
1611
|
|
|
1797
|
-
|
|
1798
|
-
|
|
1612
|
+
// extensions
|
|
1799
1613
|
if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {
|
|
1800
1614
|
if (token = extTokenizer.call({
|
|
1801
1615
|
lexer: _this2
|
|
@@ -1804,148 +1618,132 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1804
1618
|
tokens.push(token);
|
|
1805
1619
|
return true;
|
|
1806
1620
|
}
|
|
1807
|
-
|
|
1808
1621
|
return false;
|
|
1809
1622
|
})) {
|
|
1810
1623
|
continue;
|
|
1811
|
-
}
|
|
1812
|
-
|
|
1624
|
+
}
|
|
1813
1625
|
|
|
1626
|
+
// escape
|
|
1814
1627
|
if (token = this.tokenizer.escape(src)) {
|
|
1815
1628
|
src = src.substring(token.raw.length);
|
|
1816
1629
|
tokens.push(token);
|
|
1817
1630
|
continue;
|
|
1818
|
-
}
|
|
1819
|
-
|
|
1631
|
+
}
|
|
1820
1632
|
|
|
1633
|
+
// tag
|
|
1821
1634
|
if (token = this.tokenizer.tag(src)) {
|
|
1822
1635
|
src = src.substring(token.raw.length);
|
|
1823
1636
|
lastToken = tokens[tokens.length - 1];
|
|
1824
|
-
|
|
1825
1637
|
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1826
1638
|
lastToken.raw += token.raw;
|
|
1827
1639
|
lastToken.text += token.text;
|
|
1828
1640
|
} else {
|
|
1829
1641
|
tokens.push(token);
|
|
1830
1642
|
}
|
|
1831
|
-
|
|
1832
1643
|
continue;
|
|
1833
|
-
}
|
|
1834
|
-
|
|
1644
|
+
}
|
|
1835
1645
|
|
|
1646
|
+
// link
|
|
1836
1647
|
if (token = this.tokenizer.link(src)) {
|
|
1837
1648
|
src = src.substring(token.raw.length);
|
|
1838
1649
|
tokens.push(token);
|
|
1839
1650
|
continue;
|
|
1840
|
-
}
|
|
1841
|
-
|
|
1651
|
+
}
|
|
1842
1652
|
|
|
1653
|
+
// reflink, nolink
|
|
1843
1654
|
if (token = this.tokenizer.reflink(src, this.tokens.links)) {
|
|
1844
1655
|
src = src.substring(token.raw.length);
|
|
1845
1656
|
lastToken = tokens[tokens.length - 1];
|
|
1846
|
-
|
|
1847
1657
|
if (lastToken && token.type === 'text' && lastToken.type === 'text') {
|
|
1848
1658
|
lastToken.raw += token.raw;
|
|
1849
1659
|
lastToken.text += token.text;
|
|
1850
1660
|
} else {
|
|
1851
1661
|
tokens.push(token);
|
|
1852
1662
|
}
|
|
1853
|
-
|
|
1854
1663
|
continue;
|
|
1855
|
-
}
|
|
1856
|
-
|
|
1664
|
+
}
|
|
1857
1665
|
|
|
1666
|
+
// em & strong
|
|
1858
1667
|
if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
|
|
1859
1668
|
src = src.substring(token.raw.length);
|
|
1860
1669
|
tokens.push(token);
|
|
1861
1670
|
continue;
|
|
1862
|
-
}
|
|
1863
|
-
|
|
1671
|
+
}
|
|
1864
1672
|
|
|
1673
|
+
// code
|
|
1865
1674
|
if (token = this.tokenizer.codespan(src)) {
|
|
1866
1675
|
src = src.substring(token.raw.length);
|
|
1867
1676
|
tokens.push(token);
|
|
1868
1677
|
continue;
|
|
1869
|
-
}
|
|
1870
|
-
|
|
1678
|
+
}
|
|
1871
1679
|
|
|
1680
|
+
// br
|
|
1872
1681
|
if (token = this.tokenizer.br(src)) {
|
|
1873
1682
|
src = src.substring(token.raw.length);
|
|
1874
1683
|
tokens.push(token);
|
|
1875
1684
|
continue;
|
|
1876
|
-
}
|
|
1877
|
-
|
|
1685
|
+
}
|
|
1878
1686
|
|
|
1687
|
+
// del (gfm)
|
|
1879
1688
|
if (token = this.tokenizer.del(src)) {
|
|
1880
1689
|
src = src.substring(token.raw.length);
|
|
1881
1690
|
tokens.push(token);
|
|
1882
1691
|
continue;
|
|
1883
|
-
}
|
|
1884
|
-
|
|
1692
|
+
}
|
|
1885
1693
|
|
|
1694
|
+
// autolink
|
|
1886
1695
|
if (token = this.tokenizer.autolink(src, mangle)) {
|
|
1887
1696
|
src = src.substring(token.raw.length);
|
|
1888
1697
|
tokens.push(token);
|
|
1889
1698
|
continue;
|
|
1890
|
-
}
|
|
1891
|
-
|
|
1699
|
+
}
|
|
1892
1700
|
|
|
1701
|
+
// url (gfm)
|
|
1893
1702
|
if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
|
|
1894
1703
|
src = src.substring(token.raw.length);
|
|
1895
1704
|
tokens.push(token);
|
|
1896
1705
|
continue;
|
|
1897
|
-
}
|
|
1898
|
-
// prevent inlineText consuming extensions by clipping 'src' to extension start
|
|
1899
|
-
|
|
1706
|
+
}
|
|
1900
1707
|
|
|
1708
|
+
// text
|
|
1709
|
+
// prevent inlineText consuming extensions by clipping 'src' to extension start
|
|
1901
1710
|
cutSrc = src;
|
|
1902
|
-
|
|
1903
1711
|
if (this.options.extensions && this.options.extensions.startInline) {
|
|
1904
1712
|
(function () {
|
|
1905
1713
|
var startIndex = Infinity;
|
|
1906
1714
|
var tempSrc = src.slice(1);
|
|
1907
1715
|
var tempStart = void 0;
|
|
1908
|
-
|
|
1909
1716
|
_this2.options.extensions.startInline.forEach(function (getStartIndex) {
|
|
1910
1717
|
tempStart = getStartIndex.call({
|
|
1911
1718
|
lexer: this
|
|
1912
1719
|
}, tempSrc);
|
|
1913
|
-
|
|
1914
1720
|
if (typeof tempStart === 'number' && tempStart >= 0) {
|
|
1915
1721
|
startIndex = Math.min(startIndex, tempStart);
|
|
1916
1722
|
}
|
|
1917
1723
|
});
|
|
1918
|
-
|
|
1919
1724
|
if (startIndex < Infinity && startIndex >= 0) {
|
|
1920
1725
|
cutSrc = src.substring(0, startIndex + 1);
|
|
1921
1726
|
}
|
|
1922
1727
|
})();
|
|
1923
1728
|
}
|
|
1924
|
-
|
|
1925
1729
|
if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
|
|
1926
1730
|
src = src.substring(token.raw.length);
|
|
1927
|
-
|
|
1928
1731
|
if (token.raw.slice(-1) !== '_') {
|
|
1929
1732
|
// Track prevChar before string of ____ started
|
|
1930
1733
|
prevChar = token.raw.slice(-1);
|
|
1931
1734
|
}
|
|
1932
|
-
|
|
1933
1735
|
keepPrevChar = true;
|
|
1934
1736
|
lastToken = tokens[tokens.length - 1];
|
|
1935
|
-
|
|
1936
1737
|
if (lastToken && lastToken.type === 'text') {
|
|
1937
1738
|
lastToken.raw += token.raw;
|
|
1938
1739
|
lastToken.text += token.text;
|
|
1939
1740
|
} else {
|
|
1940
1741
|
tokens.push(token);
|
|
1941
1742
|
}
|
|
1942
|
-
|
|
1943
1743
|
continue;
|
|
1944
1744
|
}
|
|
1945
|
-
|
|
1946
1745
|
if (src) {
|
|
1947
1746
|
var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
|
|
1948
|
-
|
|
1949
1747
|
if (this.options.silent) {
|
|
1950
1748
|
console.error(errMsg);
|
|
1951
1749
|
break;
|
|
@@ -1954,10 +1752,8 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1954
1752
|
}
|
|
1955
1753
|
}
|
|
1956
1754
|
}
|
|
1957
|
-
|
|
1958
1755
|
return tokens;
|
|
1959
1756
|
};
|
|
1960
|
-
|
|
1961
1757
|
_createClass(Lexer, null, [{
|
|
1962
1758
|
key: "rules",
|
|
1963
1759
|
get: function get() {
|
|
@@ -1967,212 +1763,175 @@ var Lexer = /*#__PURE__*/function () {
|
|
|
1967
1763
|
};
|
|
1968
1764
|
}
|
|
1969
1765
|
}]);
|
|
1970
|
-
|
|
1971
1766
|
return Lexer;
|
|
1972
1767
|
}();
|
|
1973
1768
|
|
|
1974
1769
|
/**
|
|
1975
1770
|
* Renderer
|
|
1976
1771
|
*/
|
|
1977
|
-
|
|
1978
1772
|
var Renderer = /*#__PURE__*/function () {
|
|
1979
1773
|
function Renderer(options) {
|
|
1980
1774
|
this.options = options || exports.defaults;
|
|
1981
1775
|
}
|
|
1982
|
-
|
|
1983
1776
|
var _proto = Renderer.prototype;
|
|
1984
|
-
|
|
1985
1777
|
_proto.code = function code(_code, infostring, escaped) {
|
|
1986
1778
|
var lang = (infostring || '').match(/\S*/)[0];
|
|
1987
|
-
|
|
1988
1779
|
if (this.options.highlight) {
|
|
1989
1780
|
var out = this.options.highlight(_code, lang);
|
|
1990
|
-
|
|
1991
1781
|
if (out != null && out !== _code) {
|
|
1992
1782
|
escaped = true;
|
|
1993
1783
|
_code = out;
|
|
1994
1784
|
}
|
|
1995
1785
|
}
|
|
1996
|
-
|
|
1997
1786
|
_code = _code.replace(/\n$/, '') + '\n';
|
|
1998
|
-
|
|
1999
1787
|
if (!lang) {
|
|
2000
1788
|
return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
|
|
2001
1789
|
}
|
|
2002
|
-
|
|
2003
1790
|
return '<pre><code class="' + this.options.langPrefix + escape(lang, true) + '">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\n';
|
|
2004
1791
|
}
|
|
1792
|
+
|
|
2005
1793
|
/**
|
|
2006
1794
|
* @param {string} quote
|
|
2007
|
-
|
|
2008
|
-
;
|
|
2009
|
-
|
|
1795
|
+
*/;
|
|
2010
1796
|
_proto.blockquote = function blockquote(quote) {
|
|
2011
1797
|
return "<blockquote>\n" + quote + "</blockquote>\n";
|
|
2012
1798
|
};
|
|
2013
|
-
|
|
2014
1799
|
_proto.html = function html(_html) {
|
|
2015
1800
|
return _html;
|
|
2016
1801
|
}
|
|
1802
|
+
|
|
2017
1803
|
/**
|
|
2018
1804
|
* @param {string} text
|
|
2019
1805
|
* @param {string} level
|
|
2020
1806
|
* @param {string} raw
|
|
2021
1807
|
* @param {any} slugger
|
|
2022
|
-
|
|
2023
|
-
;
|
|
2024
|
-
|
|
1808
|
+
*/;
|
|
2025
1809
|
_proto.heading = function heading(text, level, raw, slugger) {
|
|
2026
1810
|
if (this.options.headerIds) {
|
|
2027
1811
|
var id = this.options.headerPrefix + slugger.slug(raw);
|
|
2028
1812
|
return "<h" + level + " id=\"" + id + "\">" + text + "</h" + level + ">\n";
|
|
2029
|
-
}
|
|
2030
|
-
|
|
1813
|
+
}
|
|
2031
1814
|
|
|
1815
|
+
// ignore IDs
|
|
2032
1816
|
return "<h" + level + ">" + text + "</h" + level + ">\n";
|
|
2033
1817
|
};
|
|
2034
|
-
|
|
2035
1818
|
_proto.hr = function hr() {
|
|
2036
1819
|
return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
|
|
2037
1820
|
};
|
|
2038
|
-
|
|
2039
1821
|
_proto.list = function list(body, ordered, start) {
|
|
2040
1822
|
var type = ordered ? 'ol' : 'ul',
|
|
2041
|
-
|
|
1823
|
+
startatt = ordered && start !== 1 ? ' start="' + start + '"' : '';
|
|
2042
1824
|
return '<' + type + startatt + '>\n' + body + '</' + type + '>\n';
|
|
2043
1825
|
}
|
|
1826
|
+
|
|
2044
1827
|
/**
|
|
2045
1828
|
* @param {string} text
|
|
2046
|
-
|
|
2047
|
-
;
|
|
2048
|
-
|
|
1829
|
+
*/;
|
|
2049
1830
|
_proto.listitem = function listitem(text) {
|
|
2050
1831
|
return "<li>" + text + "</li>\n";
|
|
2051
1832
|
};
|
|
2052
|
-
|
|
2053
1833
|
_proto.checkbox = function checkbox(checked) {
|
|
2054
1834
|
return '<input ' + (checked ? 'checked="" ' : '') + 'disabled="" type="checkbox"' + (this.options.xhtml ? ' /' : '') + '> ';
|
|
2055
1835
|
}
|
|
1836
|
+
|
|
2056
1837
|
/**
|
|
2057
1838
|
* @param {string} text
|
|
2058
|
-
|
|
2059
|
-
;
|
|
2060
|
-
|
|
1839
|
+
*/;
|
|
2061
1840
|
_proto.paragraph = function paragraph(text) {
|
|
2062
1841
|
return "<p>" + text + "</p>\n";
|
|
2063
1842
|
}
|
|
1843
|
+
|
|
2064
1844
|
/**
|
|
2065
1845
|
* @param {string} header
|
|
2066
1846
|
* @param {string} body
|
|
2067
|
-
|
|
2068
|
-
;
|
|
2069
|
-
|
|
1847
|
+
*/;
|
|
2070
1848
|
_proto.table = function table(header, body) {
|
|
2071
1849
|
if (body) body = "<tbody>" + body + "</tbody>";
|
|
2072
1850
|
return '<table>\n' + '<thead>\n' + header + '</thead>\n' + body + '</table>\n';
|
|
2073
1851
|
}
|
|
1852
|
+
|
|
2074
1853
|
/**
|
|
2075
1854
|
* @param {string} content
|
|
2076
|
-
|
|
2077
|
-
;
|
|
2078
|
-
|
|
1855
|
+
*/;
|
|
2079
1856
|
_proto.tablerow = function tablerow(content) {
|
|
2080
1857
|
return "<tr>\n" + content + "</tr>\n";
|
|
2081
1858
|
};
|
|
2082
|
-
|
|
2083
1859
|
_proto.tablecell = function tablecell(content, flags) {
|
|
2084
1860
|
var type = flags.header ? 'th' : 'td';
|
|
2085
1861
|
var tag = flags.align ? "<" + type + " align=\"" + flags.align + "\">" : "<" + type + ">";
|
|
2086
1862
|
return tag + content + ("</" + type + ">\n");
|
|
2087
1863
|
}
|
|
1864
|
+
|
|
2088
1865
|
/**
|
|
2089
1866
|
* span level renderer
|
|
2090
1867
|
* @param {string} text
|
|
2091
|
-
|
|
2092
|
-
;
|
|
2093
|
-
|
|
1868
|
+
*/;
|
|
2094
1869
|
_proto.strong = function strong(text) {
|
|
2095
1870
|
return "<strong>" + text + "</strong>";
|
|
2096
1871
|
}
|
|
1872
|
+
|
|
2097
1873
|
/**
|
|
2098
1874
|
* @param {string} text
|
|
2099
|
-
|
|
2100
|
-
;
|
|
2101
|
-
|
|
1875
|
+
*/;
|
|
2102
1876
|
_proto.em = function em(text) {
|
|
2103
1877
|
return "<em>" + text + "</em>";
|
|
2104
1878
|
}
|
|
1879
|
+
|
|
2105
1880
|
/**
|
|
2106
1881
|
* @param {string} text
|
|
2107
|
-
|
|
2108
|
-
;
|
|
2109
|
-
|
|
1882
|
+
*/;
|
|
2110
1883
|
_proto.codespan = function codespan(text) {
|
|
2111
1884
|
return "<code>" + text + "</code>";
|
|
2112
1885
|
};
|
|
2113
|
-
|
|
2114
1886
|
_proto.br = function br() {
|
|
2115
1887
|
return this.options.xhtml ? '<br/>' : '<br>';
|
|
2116
1888
|
}
|
|
1889
|
+
|
|
2117
1890
|
/**
|
|
2118
1891
|
* @param {string} text
|
|
2119
|
-
|
|
2120
|
-
;
|
|
2121
|
-
|
|
1892
|
+
*/;
|
|
2122
1893
|
_proto.del = function del(text) {
|
|
2123
1894
|
return "<del>" + text + "</del>";
|
|
2124
1895
|
}
|
|
1896
|
+
|
|
2125
1897
|
/**
|
|
2126
1898
|
* @param {string} href
|
|
2127
1899
|
* @param {string} title
|
|
2128
1900
|
* @param {string} text
|
|
2129
|
-
|
|
2130
|
-
;
|
|
2131
|
-
|
|
1901
|
+
*/;
|
|
2132
1902
|
_proto.link = function link(href, title, text) {
|
|
2133
1903
|
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
2134
|
-
|
|
2135
1904
|
if (href === null) {
|
|
2136
1905
|
return text;
|
|
2137
1906
|
}
|
|
2138
|
-
|
|
2139
1907
|
var out = '<a href="' + escape(href) + '"';
|
|
2140
|
-
|
|
2141
1908
|
if (title) {
|
|
2142
1909
|
out += ' title="' + title + '"';
|
|
2143
1910
|
}
|
|
2144
|
-
|
|
2145
1911
|
out += '>' + text + '</a>';
|
|
2146
1912
|
return out;
|
|
2147
1913
|
}
|
|
1914
|
+
|
|
2148
1915
|
/**
|
|
2149
1916
|
* @param {string} href
|
|
2150
1917
|
* @param {string} title
|
|
2151
1918
|
* @param {string} text
|
|
2152
|
-
|
|
2153
|
-
;
|
|
2154
|
-
|
|
1919
|
+
*/;
|
|
2155
1920
|
_proto.image = function image(href, title, text) {
|
|
2156
1921
|
href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);
|
|
2157
|
-
|
|
2158
1922
|
if (href === null) {
|
|
2159
1923
|
return text;
|
|
2160
1924
|
}
|
|
2161
|
-
|
|
2162
1925
|
var out = "<img src=\"" + href + "\" alt=\"" + text + "\"";
|
|
2163
|
-
|
|
2164
1926
|
if (title) {
|
|
2165
1927
|
out += " title=\"" + title + "\"";
|
|
2166
1928
|
}
|
|
2167
|
-
|
|
2168
1929
|
out += this.options.xhtml ? '/>' : '>';
|
|
2169
1930
|
return out;
|
|
2170
1931
|
};
|
|
2171
|
-
|
|
2172
1932
|
_proto.text = function text(_text) {
|
|
2173
1933
|
return _text;
|
|
2174
1934
|
};
|
|
2175
|
-
|
|
2176
1935
|
return Renderer;
|
|
2177
1936
|
}();
|
|
2178
1937
|
|
|
@@ -2182,46 +1941,35 @@ var Renderer = /*#__PURE__*/function () {
|
|
|
2182
1941
|
*/
|
|
2183
1942
|
var TextRenderer = /*#__PURE__*/function () {
|
|
2184
1943
|
function TextRenderer() {}
|
|
2185
|
-
|
|
2186
1944
|
var _proto = TextRenderer.prototype;
|
|
2187
|
-
|
|
2188
1945
|
// no need for block level renderers
|
|
2189
1946
|
_proto.strong = function strong(text) {
|
|
2190
1947
|
return text;
|
|
2191
1948
|
};
|
|
2192
|
-
|
|
2193
1949
|
_proto.em = function em(text) {
|
|
2194
1950
|
return text;
|
|
2195
1951
|
};
|
|
2196
|
-
|
|
2197
1952
|
_proto.codespan = function codespan(text) {
|
|
2198
1953
|
return text;
|
|
2199
1954
|
};
|
|
2200
|
-
|
|
2201
1955
|
_proto.del = function del(text) {
|
|
2202
1956
|
return text;
|
|
2203
1957
|
};
|
|
2204
|
-
|
|
2205
1958
|
_proto.html = function html(text) {
|
|
2206
1959
|
return text;
|
|
2207
1960
|
};
|
|
2208
|
-
|
|
2209
1961
|
_proto.text = function text(_text) {
|
|
2210
1962
|
return _text;
|
|
2211
1963
|
};
|
|
2212
|
-
|
|
2213
1964
|
_proto.link = function link(href, title, text) {
|
|
2214
1965
|
return '' + text;
|
|
2215
1966
|
};
|
|
2216
|
-
|
|
2217
1967
|
_proto.image = function image(href, title, text) {
|
|
2218
1968
|
return '' + text;
|
|
2219
1969
|
};
|
|
2220
|
-
|
|
2221
1970
|
_proto.br = function br() {
|
|
2222
1971
|
return '';
|
|
2223
1972
|
};
|
|
2224
|
-
|
|
2225
1973
|
return TextRenderer;
|
|
2226
1974
|
}();
|
|
2227
1975
|
|
|
@@ -2232,69 +1980,60 @@ var Slugger = /*#__PURE__*/function () {
|
|
|
2232
1980
|
function Slugger() {
|
|
2233
1981
|
this.seen = {};
|
|
2234
1982
|
}
|
|
1983
|
+
|
|
2235
1984
|
/**
|
|
2236
1985
|
* @param {string} value
|
|
2237
1986
|
*/
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
1987
|
var _proto = Slugger.prototype;
|
|
2241
|
-
|
|
2242
1988
|
_proto.serialize = function serialize(value) {
|
|
2243
|
-
return value.toLowerCase().trim()
|
|
2244
|
-
|
|
1989
|
+
return value.toLowerCase().trim()
|
|
1990
|
+
// remove html tags
|
|
1991
|
+
.replace(/<[!\/a-z].*?>/ig, '')
|
|
1992
|
+
// remove unwanted chars
|
|
2245
1993
|
.replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g, '').replace(/\s/g, '-');
|
|
2246
1994
|
}
|
|
1995
|
+
|
|
2247
1996
|
/**
|
|
2248
1997
|
* Finds the next safe (unique) slug to use
|
|
2249
1998
|
* @param {string} originalSlug
|
|
2250
1999
|
* @param {boolean} isDryRun
|
|
2251
|
-
|
|
2252
|
-
;
|
|
2253
|
-
|
|
2000
|
+
*/;
|
|
2254
2001
|
_proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {
|
|
2255
2002
|
var slug = originalSlug;
|
|
2256
2003
|
var occurenceAccumulator = 0;
|
|
2257
|
-
|
|
2258
2004
|
if (this.seen.hasOwnProperty(slug)) {
|
|
2259
2005
|
occurenceAccumulator = this.seen[originalSlug];
|
|
2260
|
-
|
|
2261
2006
|
do {
|
|
2262
2007
|
occurenceAccumulator++;
|
|
2263
2008
|
slug = originalSlug + '-' + occurenceAccumulator;
|
|
2264
2009
|
} while (this.seen.hasOwnProperty(slug));
|
|
2265
2010
|
}
|
|
2266
|
-
|
|
2267
2011
|
if (!isDryRun) {
|
|
2268
2012
|
this.seen[originalSlug] = occurenceAccumulator;
|
|
2269
2013
|
this.seen[slug] = 0;
|
|
2270
2014
|
}
|
|
2271
|
-
|
|
2272
2015
|
return slug;
|
|
2273
2016
|
}
|
|
2017
|
+
|
|
2274
2018
|
/**
|
|
2275
2019
|
* Convert string to unique id
|
|
2276
2020
|
* @param {object} [options]
|
|
2277
2021
|
* @param {boolean} [options.dryrun] Generates the next unique slug without
|
|
2278
2022
|
* updating the internal accumulator.
|
|
2279
|
-
|
|
2280
|
-
;
|
|
2281
|
-
|
|
2023
|
+
*/;
|
|
2282
2024
|
_proto.slug = function slug(value, options) {
|
|
2283
2025
|
if (options === void 0) {
|
|
2284
2026
|
options = {};
|
|
2285
2027
|
}
|
|
2286
|
-
|
|
2287
2028
|
var slug = this.serialize(value);
|
|
2288
2029
|
return this.getNextSafeSlug(slug, options.dryrun);
|
|
2289
2030
|
};
|
|
2290
|
-
|
|
2291
2031
|
return Slugger;
|
|
2292
2032
|
}();
|
|
2293
2033
|
|
|
2294
2034
|
/**
|
|
2295
2035
|
* Parsing & Compiling
|
|
2296
2036
|
*/
|
|
2297
|
-
|
|
2298
2037
|
var Parser = /*#__PURE__*/function () {
|
|
2299
2038
|
function Parser(options) {
|
|
2300
2039
|
this.options = options || exports.defaults;
|
|
@@ -2304,140 +2043,122 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2304
2043
|
this.textRenderer = new TextRenderer();
|
|
2305
2044
|
this.slugger = new Slugger();
|
|
2306
2045
|
}
|
|
2046
|
+
|
|
2307
2047
|
/**
|
|
2308
2048
|
* Static Parse Method
|
|
2309
2049
|
*/
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
2050
|
Parser.parse = function parse(tokens, options) {
|
|
2313
2051
|
var parser = new Parser(options);
|
|
2314
2052
|
return parser.parse(tokens);
|
|
2315
2053
|
}
|
|
2054
|
+
|
|
2316
2055
|
/**
|
|
2317
2056
|
* Static Parse Inline Method
|
|
2318
|
-
|
|
2319
|
-
;
|
|
2320
|
-
|
|
2057
|
+
*/;
|
|
2321
2058
|
Parser.parseInline = function parseInline(tokens, options) {
|
|
2322
2059
|
var parser = new Parser(options);
|
|
2323
2060
|
return parser.parseInline(tokens);
|
|
2324
2061
|
}
|
|
2062
|
+
|
|
2325
2063
|
/**
|
|
2326
2064
|
* Parse Loop
|
|
2327
|
-
|
|
2328
|
-
;
|
|
2329
|
-
|
|
2065
|
+
*/;
|
|
2330
2066
|
var _proto = Parser.prototype;
|
|
2331
|
-
|
|
2332
2067
|
_proto.parse = function parse(tokens, top) {
|
|
2333
2068
|
if (top === void 0) {
|
|
2334
2069
|
top = true;
|
|
2335
2070
|
}
|
|
2336
|
-
|
|
2337
2071
|
var out = '',
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
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;
|
|
2357
2091
|
var l = tokens.length;
|
|
2358
|
-
|
|
2359
2092
|
for (i = 0; i < l; i++) {
|
|
2360
|
-
token = tokens[i];
|
|
2093
|
+
token = tokens[i];
|
|
2361
2094
|
|
|
2095
|
+
// Run any renderer extensions
|
|
2362
2096
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2363
2097
|
ret = this.options.extensions.renderers[token.type].call({
|
|
2364
2098
|
parser: this
|
|
2365
2099
|
}, token);
|
|
2366
|
-
|
|
2367
2100
|
if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {
|
|
2368
2101
|
out += ret || '';
|
|
2369
2102
|
continue;
|
|
2370
2103
|
}
|
|
2371
2104
|
}
|
|
2372
|
-
|
|
2373
2105
|
switch (token.type) {
|
|
2374
2106
|
case 'space':
|
|
2375
2107
|
{
|
|
2376
2108
|
continue;
|
|
2377
2109
|
}
|
|
2378
|
-
|
|
2379
2110
|
case 'hr':
|
|
2380
2111
|
{
|
|
2381
2112
|
out += this.renderer.hr();
|
|
2382
2113
|
continue;
|
|
2383
2114
|
}
|
|
2384
|
-
|
|
2385
2115
|
case 'heading':
|
|
2386
2116
|
{
|
|
2387
2117
|
out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);
|
|
2388
2118
|
continue;
|
|
2389
2119
|
}
|
|
2390
|
-
|
|
2391
2120
|
case 'code':
|
|
2392
2121
|
{
|
|
2393
2122
|
out += this.renderer.code(token.text, token.lang, token.escaped);
|
|
2394
2123
|
continue;
|
|
2395
2124
|
}
|
|
2396
|
-
|
|
2397
2125
|
case 'table':
|
|
2398
2126
|
{
|
|
2399
|
-
header = '';
|
|
2127
|
+
header = '';
|
|
2400
2128
|
|
|
2129
|
+
// header
|
|
2401
2130
|
cell = '';
|
|
2402
2131
|
l2 = token.header.length;
|
|
2403
|
-
|
|
2404
2132
|
for (j = 0; j < l2; j++) {
|
|
2405
2133
|
cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {
|
|
2406
2134
|
header: true,
|
|
2407
2135
|
align: token.align[j]
|
|
2408
2136
|
});
|
|
2409
2137
|
}
|
|
2410
|
-
|
|
2411
2138
|
header += this.renderer.tablerow(cell);
|
|
2412
2139
|
body = '';
|
|
2413
2140
|
l2 = token.rows.length;
|
|
2414
|
-
|
|
2415
2141
|
for (j = 0; j < l2; j++) {
|
|
2416
2142
|
row = token.rows[j];
|
|
2417
2143
|
cell = '';
|
|
2418
2144
|
l3 = row.length;
|
|
2419
|
-
|
|
2420
2145
|
for (k = 0; k < l3; k++) {
|
|
2421
2146
|
cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {
|
|
2422
2147
|
header: false,
|
|
2423
2148
|
align: token.align[k]
|
|
2424
2149
|
});
|
|
2425
2150
|
}
|
|
2426
|
-
|
|
2427
2151
|
body += this.renderer.tablerow(cell);
|
|
2428
2152
|
}
|
|
2429
|
-
|
|
2430
2153
|
out += this.renderer.table(header, body);
|
|
2431
2154
|
continue;
|
|
2432
2155
|
}
|
|
2433
|
-
|
|
2434
2156
|
case 'blockquote':
|
|
2435
2157
|
{
|
|
2436
2158
|
body = this.parse(token.tokens);
|
|
2437
2159
|
out += this.renderer.blockquote(body);
|
|
2438
2160
|
continue;
|
|
2439
2161
|
}
|
|
2440
|
-
|
|
2441
2162
|
case 'list':
|
|
2442
2163
|
{
|
|
2443
2164
|
ordered = token.ordered;
|
|
@@ -2445,20 +2166,16 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2445
2166
|
loose = token.loose;
|
|
2446
2167
|
l2 = token.items.length;
|
|
2447
2168
|
body = '';
|
|
2448
|
-
|
|
2449
2169
|
for (j = 0; j < l2; j++) {
|
|
2450
2170
|
item = token.items[j];
|
|
2451
2171
|
checked = item.checked;
|
|
2452
2172
|
task = item.task;
|
|
2453
2173
|
itemBody = '';
|
|
2454
|
-
|
|
2455
2174
|
if (item.task) {
|
|
2456
2175
|
checkbox = this.renderer.checkbox(checked);
|
|
2457
|
-
|
|
2458
2176
|
if (loose) {
|
|
2459
2177
|
if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {
|
|
2460
2178
|
item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;
|
|
2461
|
-
|
|
2462
2179
|
if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {
|
|
2463
2180
|
item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;
|
|
2464
2181
|
}
|
|
@@ -2472,45 +2189,36 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2472
2189
|
itemBody += checkbox;
|
|
2473
2190
|
}
|
|
2474
2191
|
}
|
|
2475
|
-
|
|
2476
2192
|
itemBody += this.parse(item.tokens, loose);
|
|
2477
2193
|
body += this.renderer.listitem(itemBody, task, checked);
|
|
2478
2194
|
}
|
|
2479
|
-
|
|
2480
2195
|
out += this.renderer.list(body, ordered, start);
|
|
2481
2196
|
continue;
|
|
2482
2197
|
}
|
|
2483
|
-
|
|
2484
2198
|
case 'html':
|
|
2485
2199
|
{
|
|
2486
2200
|
// TODO parse inline content if parameter markdown=1
|
|
2487
2201
|
out += this.renderer.html(token.text);
|
|
2488
2202
|
continue;
|
|
2489
2203
|
}
|
|
2490
|
-
|
|
2491
2204
|
case 'paragraph':
|
|
2492
2205
|
{
|
|
2493
2206
|
out += this.renderer.paragraph(this.parseInline(token.tokens));
|
|
2494
2207
|
continue;
|
|
2495
2208
|
}
|
|
2496
|
-
|
|
2497
2209
|
case 'text':
|
|
2498
2210
|
{
|
|
2499
2211
|
body = token.tokens ? this.parseInline(token.tokens) : token.text;
|
|
2500
|
-
|
|
2501
2212
|
while (i + 1 < l && tokens[i + 1].type === 'text') {
|
|
2502
2213
|
token = tokens[++i];
|
|
2503
2214
|
body += '\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);
|
|
2504
2215
|
}
|
|
2505
|
-
|
|
2506
2216
|
out += top ? this.renderer.paragraph(body) : body;
|
|
2507
2217
|
continue;
|
|
2508
2218
|
}
|
|
2509
|
-
|
|
2510
2219
|
default:
|
|
2511
2220
|
{
|
|
2512
2221
|
var errMsg = 'Token with "' + token.type + '" type was not found.';
|
|
2513
|
-
|
|
2514
2222
|
if (this.options.silent) {
|
|
2515
2223
|
console.error(errMsg);
|
|
2516
2224
|
return;
|
|
@@ -2520,101 +2228,86 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2520
2228
|
}
|
|
2521
2229
|
}
|
|
2522
2230
|
}
|
|
2523
|
-
|
|
2524
2231
|
return out;
|
|
2525
2232
|
}
|
|
2233
|
+
|
|
2526
2234
|
/**
|
|
2527
2235
|
* Parse Inline Tokens
|
|
2528
|
-
|
|
2529
|
-
;
|
|
2530
|
-
|
|
2236
|
+
*/;
|
|
2531
2237
|
_proto.parseInline = function parseInline(tokens, renderer) {
|
|
2532
2238
|
renderer = renderer || this.renderer;
|
|
2533
2239
|
var out = '',
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2240
|
+
i,
|
|
2241
|
+
token,
|
|
2242
|
+
ret;
|
|
2537
2243
|
var l = tokens.length;
|
|
2538
|
-
|
|
2539
2244
|
for (i = 0; i < l; i++) {
|
|
2540
|
-
token = tokens[i];
|
|
2245
|
+
token = tokens[i];
|
|
2541
2246
|
|
|
2247
|
+
// Run any renderer extensions
|
|
2542
2248
|
if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
|
|
2543
2249
|
ret = this.options.extensions.renderers[token.type].call({
|
|
2544
2250
|
parser: this
|
|
2545
2251
|
}, token);
|
|
2546
|
-
|
|
2547
2252
|
if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {
|
|
2548
2253
|
out += ret || '';
|
|
2549
2254
|
continue;
|
|
2550
2255
|
}
|
|
2551
2256
|
}
|
|
2552
|
-
|
|
2553
2257
|
switch (token.type) {
|
|
2554
2258
|
case 'escape':
|
|
2555
2259
|
{
|
|
2556
2260
|
out += renderer.text(token.text);
|
|
2557
2261
|
break;
|
|
2558
2262
|
}
|
|
2559
|
-
|
|
2560
2263
|
case 'html':
|
|
2561
2264
|
{
|
|
2562
2265
|
out += renderer.html(token.text);
|
|
2563
2266
|
break;
|
|
2564
2267
|
}
|
|
2565
|
-
|
|
2566
2268
|
case 'link':
|
|
2567
2269
|
{
|
|
2568
2270
|
out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));
|
|
2569
2271
|
break;
|
|
2570
2272
|
}
|
|
2571
|
-
|
|
2572
2273
|
case 'image':
|
|
2573
2274
|
{
|
|
2574
2275
|
out += renderer.image(token.href, token.title, token.text);
|
|
2575
2276
|
break;
|
|
2576
2277
|
}
|
|
2577
|
-
|
|
2578
2278
|
case 'strong':
|
|
2579
2279
|
{
|
|
2580
2280
|
out += renderer.strong(this.parseInline(token.tokens, renderer));
|
|
2581
2281
|
break;
|
|
2582
2282
|
}
|
|
2583
|
-
|
|
2584
2283
|
case 'em':
|
|
2585
2284
|
{
|
|
2586
2285
|
out += renderer.em(this.parseInline(token.tokens, renderer));
|
|
2587
2286
|
break;
|
|
2588
2287
|
}
|
|
2589
|
-
|
|
2590
2288
|
case 'codespan':
|
|
2591
2289
|
{
|
|
2592
2290
|
out += renderer.codespan(token.text);
|
|
2593
2291
|
break;
|
|
2594
2292
|
}
|
|
2595
|
-
|
|
2596
2293
|
case 'br':
|
|
2597
2294
|
{
|
|
2598
2295
|
out += renderer.br();
|
|
2599
2296
|
break;
|
|
2600
2297
|
}
|
|
2601
|
-
|
|
2602
2298
|
case 'del':
|
|
2603
2299
|
{
|
|
2604
2300
|
out += renderer.del(this.parseInline(token.tokens, renderer));
|
|
2605
2301
|
break;
|
|
2606
2302
|
}
|
|
2607
|
-
|
|
2608
2303
|
case 'text':
|
|
2609
2304
|
{
|
|
2610
2305
|
out += renderer.text(token.text);
|
|
2611
2306
|
break;
|
|
2612
2307
|
}
|
|
2613
|
-
|
|
2614
2308
|
default:
|
|
2615
2309
|
{
|
|
2616
2310
|
var errMsg = 'Token with "' + token.type + '" type was not found.';
|
|
2617
|
-
|
|
2618
2311
|
if (this.options.silent) {
|
|
2619
2312
|
console.error(errMsg);
|
|
2620
2313
|
return;
|
|
@@ -2624,68 +2317,54 @@ var Parser = /*#__PURE__*/function () {
|
|
|
2624
2317
|
}
|
|
2625
2318
|
}
|
|
2626
2319
|
}
|
|
2627
|
-
|
|
2628
2320
|
return out;
|
|
2629
2321
|
};
|
|
2630
|
-
|
|
2631
2322
|
return Parser;
|
|
2632
2323
|
}();
|
|
2633
2324
|
|
|
2634
2325
|
/**
|
|
2635
2326
|
* Marked
|
|
2636
2327
|
*/
|
|
2637
|
-
|
|
2638
2328
|
function marked(src, opt, callback) {
|
|
2639
2329
|
// throw error in case of non string input
|
|
2640
2330
|
if (typeof src === 'undefined' || src === null) {
|
|
2641
2331
|
throw new Error('marked(): input parameter is undefined or null');
|
|
2642
2332
|
}
|
|
2643
|
-
|
|
2644
2333
|
if (typeof src !== 'string') {
|
|
2645
2334
|
throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
|
2646
2335
|
}
|
|
2647
|
-
|
|
2648
2336
|
if (typeof opt === 'function') {
|
|
2649
2337
|
callback = opt;
|
|
2650
2338
|
opt = null;
|
|
2651
2339
|
}
|
|
2652
|
-
|
|
2653
2340
|
opt = merge({}, marked.defaults, opt || {});
|
|
2654
2341
|
checkSanitizeDeprecation(opt);
|
|
2655
|
-
|
|
2656
2342
|
if (callback) {
|
|
2657
2343
|
var highlight = opt.highlight;
|
|
2658
2344
|
var tokens;
|
|
2659
|
-
|
|
2660
2345
|
try {
|
|
2661
2346
|
tokens = Lexer.lex(src, opt);
|
|
2662
2347
|
} catch (e) {
|
|
2663
2348
|
return callback(e);
|
|
2664
2349
|
}
|
|
2665
|
-
|
|
2666
2350
|
var done = function done(err) {
|
|
2667
2351
|
var out;
|
|
2668
|
-
|
|
2669
2352
|
if (!err) {
|
|
2670
2353
|
try {
|
|
2671
2354
|
if (opt.walkTokens) {
|
|
2672
2355
|
marked.walkTokens(tokens, opt.walkTokens);
|
|
2673
2356
|
}
|
|
2674
|
-
|
|
2675
2357
|
out = Parser.parse(tokens, opt);
|
|
2676
2358
|
} catch (e) {
|
|
2677
2359
|
err = e;
|
|
2678
2360
|
}
|
|
2679
2361
|
}
|
|
2680
|
-
|
|
2681
2362
|
opt.highlight = highlight;
|
|
2682
2363
|
return err ? callback(err) : callback(null, out);
|
|
2683
2364
|
};
|
|
2684
|
-
|
|
2685
2365
|
if (!highlight || highlight.length < 3) {
|
|
2686
2366
|
return done();
|
|
2687
2367
|
}
|
|
2688
|
-
|
|
2689
2368
|
delete opt.highlight;
|
|
2690
2369
|
if (!tokens.length) return done();
|
|
2691
2370
|
var pending = 0;
|
|
@@ -2697,14 +2376,11 @@ function marked(src, opt, callback) {
|
|
|
2697
2376
|
if (err) {
|
|
2698
2377
|
return done(err);
|
|
2699
2378
|
}
|
|
2700
|
-
|
|
2701
2379
|
if (code != null && code !== token.text) {
|
|
2702
2380
|
token.text = code;
|
|
2703
2381
|
token.escaped = true;
|
|
2704
2382
|
}
|
|
2705
|
-
|
|
2706
2383
|
pending--;
|
|
2707
|
-
|
|
2708
2384
|
if (pending === 0) {
|
|
2709
2385
|
done();
|
|
2710
2386
|
}
|
|
@@ -2712,42 +2388,34 @@ function marked(src, opt, callback) {
|
|
|
2712
2388
|
}, 0);
|
|
2713
2389
|
}
|
|
2714
2390
|
});
|
|
2715
|
-
|
|
2716
2391
|
if (pending === 0) {
|
|
2717
2392
|
done();
|
|
2718
2393
|
}
|
|
2719
|
-
|
|
2720
2394
|
return;
|
|
2721
2395
|
}
|
|
2722
|
-
|
|
2723
2396
|
function onError(e) {
|
|
2724
2397
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
2725
|
-
|
|
2726
2398
|
if (opt.silent) {
|
|
2727
2399
|
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
2728
2400
|
}
|
|
2729
|
-
|
|
2730
2401
|
throw e;
|
|
2731
2402
|
}
|
|
2732
|
-
|
|
2733
2403
|
try {
|
|
2734
2404
|
var _tokens = Lexer.lex(src, opt);
|
|
2735
|
-
|
|
2736
2405
|
if (opt.walkTokens) {
|
|
2737
2406
|
if (opt.async) {
|
|
2738
2407
|
return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
|
|
2739
2408
|
return Parser.parse(_tokens, opt);
|
|
2740
2409
|
})["catch"](onError);
|
|
2741
2410
|
}
|
|
2742
|
-
|
|
2743
2411
|
marked.walkTokens(_tokens, opt.walkTokens);
|
|
2744
2412
|
}
|
|
2745
|
-
|
|
2746
2413
|
return Parser.parse(_tokens, opt);
|
|
2747
2414
|
} catch (e) {
|
|
2748
2415
|
onError(e);
|
|
2749
2416
|
}
|
|
2750
2417
|
}
|
|
2418
|
+
|
|
2751
2419
|
/**
|
|
2752
2420
|
* Options
|
|
2753
2421
|
*/
|
|
@@ -2757,9 +2425,9 @@ marked.options = marked.setOptions = function (opt) {
|
|
|
2757
2425
|
changeDefaults(marked.defaults);
|
|
2758
2426
|
return marked;
|
|
2759
2427
|
};
|
|
2760
|
-
|
|
2761
2428
|
marked.getDefaults = getDefaults;
|
|
2762
2429
|
marked.defaults = exports.defaults;
|
|
2430
|
+
|
|
2763
2431
|
/**
|
|
2764
2432
|
* Use Extension
|
|
2765
2433
|
*/
|
|
@@ -2768,7 +2436,6 @@ marked.use = function () {
|
|
|
2768
2436
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
2769
2437
|
args[_key] = arguments[_key];
|
|
2770
2438
|
}
|
|
2771
|
-
|
|
2772
2439
|
var opts = merge.apply(void 0, [{}].concat(args));
|
|
2773
2440
|
var extensions = marked.defaults.extensions || {
|
|
2774
2441
|
renderers: {},
|
|
@@ -2783,43 +2450,35 @@ marked.use = function () {
|
|
|
2783
2450
|
if (!ext.name) {
|
|
2784
2451
|
throw new Error('extension name required');
|
|
2785
2452
|
}
|
|
2786
|
-
|
|
2787
2453
|
if (ext.renderer) {
|
|
2788
2454
|
// Renderer extensions
|
|
2789
2455
|
var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;
|
|
2790
|
-
|
|
2791
2456
|
if (prevRenderer) {
|
|
2792
2457
|
// Replace extension with func to run new extension but fall back if false
|
|
2793
2458
|
extensions.renderers[ext.name] = function () {
|
|
2794
2459
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
2795
2460
|
args[_key2] = arguments[_key2];
|
|
2796
2461
|
}
|
|
2797
|
-
|
|
2798
2462
|
var ret = ext.renderer.apply(this, args);
|
|
2799
|
-
|
|
2800
2463
|
if (ret === false) {
|
|
2801
2464
|
ret = prevRenderer.apply(this, args);
|
|
2802
2465
|
}
|
|
2803
|
-
|
|
2804
2466
|
return ret;
|
|
2805
2467
|
};
|
|
2806
2468
|
} else {
|
|
2807
2469
|
extensions.renderers[ext.name] = ext.renderer;
|
|
2808
2470
|
}
|
|
2809
2471
|
}
|
|
2810
|
-
|
|
2811
2472
|
if (ext.tokenizer) {
|
|
2812
2473
|
// Tokenizer Extensions
|
|
2813
2474
|
if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {
|
|
2814
2475
|
throw new Error("extension level must be 'block' or 'inline'");
|
|
2815
2476
|
}
|
|
2816
|
-
|
|
2817
2477
|
if (extensions[ext.level]) {
|
|
2818
2478
|
extensions[ext.level].unshift(ext.tokenizer);
|
|
2819
2479
|
} else {
|
|
2820
2480
|
extensions[ext.level] = [ext.tokenizer];
|
|
2821
2481
|
}
|
|
2822
|
-
|
|
2823
2482
|
if (ext.start) {
|
|
2824
2483
|
// Function to check for start of token
|
|
2825
2484
|
if (ext.level === 'block') {
|
|
@@ -2837,110 +2496,89 @@ marked.use = function () {
|
|
|
2837
2496
|
}
|
|
2838
2497
|
}
|
|
2839
2498
|
}
|
|
2840
|
-
|
|
2841
2499
|
if (ext.childTokens) {
|
|
2842
2500
|
// Child tokens to be visited by walkTokens
|
|
2843
2501
|
extensions.childTokens[ext.name] = ext.childTokens;
|
|
2844
2502
|
}
|
|
2845
2503
|
});
|
|
2846
|
-
}
|
|
2847
|
-
|
|
2504
|
+
}
|
|
2848
2505
|
|
|
2506
|
+
// ==-- Parse "overwrite" extensions --== //
|
|
2849
2507
|
if (pack.renderer) {
|
|
2850
2508
|
(function () {
|
|
2851
2509
|
var renderer = marked.defaults.renderer || new Renderer();
|
|
2852
|
-
|
|
2853
2510
|
var _loop = function _loop(prop) {
|
|
2854
|
-
var prevRenderer = renderer[prop];
|
|
2855
|
-
|
|
2511
|
+
var prevRenderer = renderer[prop];
|
|
2512
|
+
// Replace renderer with func to run extension, but fall back if false
|
|
2856
2513
|
renderer[prop] = function () {
|
|
2857
2514
|
for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
|
2858
2515
|
args[_key3] = arguments[_key3];
|
|
2859
2516
|
}
|
|
2860
|
-
|
|
2861
2517
|
var ret = pack.renderer[prop].apply(renderer, args);
|
|
2862
|
-
|
|
2863
2518
|
if (ret === false) {
|
|
2864
2519
|
ret = prevRenderer.apply(renderer, args);
|
|
2865
2520
|
}
|
|
2866
|
-
|
|
2867
2521
|
return ret;
|
|
2868
2522
|
};
|
|
2869
2523
|
};
|
|
2870
|
-
|
|
2871
2524
|
for (var prop in pack.renderer) {
|
|
2872
2525
|
_loop(prop);
|
|
2873
2526
|
}
|
|
2874
|
-
|
|
2875
2527
|
opts.renderer = renderer;
|
|
2876
2528
|
})();
|
|
2877
2529
|
}
|
|
2878
|
-
|
|
2879
2530
|
if (pack.tokenizer) {
|
|
2880
2531
|
(function () {
|
|
2881
2532
|
var tokenizer = marked.defaults.tokenizer || new Tokenizer();
|
|
2882
|
-
|
|
2883
2533
|
var _loop2 = function _loop2(prop) {
|
|
2884
|
-
var prevTokenizer = tokenizer[prop];
|
|
2885
|
-
|
|
2534
|
+
var prevTokenizer = tokenizer[prop];
|
|
2535
|
+
// Replace tokenizer with func to run extension, but fall back if false
|
|
2886
2536
|
tokenizer[prop] = function () {
|
|
2887
2537
|
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
|
|
2888
2538
|
args[_key4] = arguments[_key4];
|
|
2889
2539
|
}
|
|
2890
|
-
|
|
2891
2540
|
var ret = pack.tokenizer[prop].apply(tokenizer, args);
|
|
2892
|
-
|
|
2893
2541
|
if (ret === false) {
|
|
2894
2542
|
ret = prevTokenizer.apply(tokenizer, args);
|
|
2895
2543
|
}
|
|
2896
|
-
|
|
2897
2544
|
return ret;
|
|
2898
2545
|
};
|
|
2899
2546
|
};
|
|
2900
|
-
|
|
2901
2547
|
for (var prop in pack.tokenizer) {
|
|
2902
2548
|
_loop2(prop);
|
|
2903
2549
|
}
|
|
2904
|
-
|
|
2905
2550
|
opts.tokenizer = tokenizer;
|
|
2906
2551
|
})();
|
|
2907
|
-
}
|
|
2908
|
-
|
|
2552
|
+
}
|
|
2909
2553
|
|
|
2554
|
+
// ==-- Parse WalkTokens extensions --== //
|
|
2910
2555
|
if (pack.walkTokens) {
|
|
2911
2556
|
var _walkTokens = marked.defaults.walkTokens;
|
|
2912
|
-
|
|
2913
2557
|
opts.walkTokens = function (token) {
|
|
2914
2558
|
var values = [];
|
|
2915
2559
|
values.push(pack.walkTokens.call(this, token));
|
|
2916
|
-
|
|
2917
2560
|
if (_walkTokens) {
|
|
2918
2561
|
values = values.concat(_walkTokens.call(this, token));
|
|
2919
2562
|
}
|
|
2920
|
-
|
|
2921
2563
|
return values;
|
|
2922
2564
|
};
|
|
2923
2565
|
}
|
|
2924
|
-
|
|
2925
2566
|
if (hasExtensions) {
|
|
2926
2567
|
opts.extensions = extensions;
|
|
2927
2568
|
}
|
|
2928
|
-
|
|
2929
2569
|
marked.setOptions(opts);
|
|
2930
2570
|
});
|
|
2931
2571
|
};
|
|
2572
|
+
|
|
2932
2573
|
/**
|
|
2933
2574
|
* Run callback for every token
|
|
2934
2575
|
*/
|
|
2935
2576
|
|
|
2936
|
-
|
|
2937
2577
|
marked.walkTokens = function (tokens, callback) {
|
|
2938
2578
|
var values = [];
|
|
2939
|
-
|
|
2940
2579
|
var _loop3 = function _loop3() {
|
|
2941
2580
|
var token = _step.value;
|
|
2942
2581
|
values = values.concat(callback.call(marked, token));
|
|
2943
|
-
|
|
2944
2582
|
switch (token.type) {
|
|
2945
2583
|
case 'table':
|
|
2946
2584
|
{
|
|
@@ -2948,25 +2586,20 @@ marked.walkTokens = function (tokens, callback) {
|
|
|
2948
2586
|
var cell = _step2.value;
|
|
2949
2587
|
values = values.concat(marked.walkTokens(cell.tokens, callback));
|
|
2950
2588
|
}
|
|
2951
|
-
|
|
2952
2589
|
for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {
|
|
2953
2590
|
var row = _step3.value;
|
|
2954
|
-
|
|
2955
2591
|
for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {
|
|
2956
2592
|
var _cell = _step4.value;
|
|
2957
2593
|
values = values.concat(marked.walkTokens(_cell.tokens, callback));
|
|
2958
2594
|
}
|
|
2959
2595
|
}
|
|
2960
|
-
|
|
2961
2596
|
break;
|
|
2962
2597
|
}
|
|
2963
|
-
|
|
2964
2598
|
case 'list':
|
|
2965
2599
|
{
|
|
2966
2600
|
values = values.concat(marked.walkTokens(token.items, callback));
|
|
2967
2601
|
break;
|
|
2968
2602
|
}
|
|
2969
|
-
|
|
2970
2603
|
default:
|
|
2971
2604
|
{
|
|
2972
2605
|
if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {
|
|
@@ -2980,55 +2613,44 @@ marked.walkTokens = function (tokens, callback) {
|
|
|
2980
2613
|
}
|
|
2981
2614
|
}
|
|
2982
2615
|
};
|
|
2983
|
-
|
|
2984
2616
|
for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
|
|
2985
2617
|
_loop3();
|
|
2986
2618
|
}
|
|
2987
|
-
|
|
2988
2619
|
return values;
|
|
2989
2620
|
};
|
|
2621
|
+
|
|
2990
2622
|
/**
|
|
2991
2623
|
* Parse Inline
|
|
2992
2624
|
* @param {string} src
|
|
2993
2625
|
*/
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
2626
|
marked.parseInline = function (src, opt) {
|
|
2997
2627
|
// throw error in case of non string input
|
|
2998
2628
|
if (typeof src === 'undefined' || src === null) {
|
|
2999
2629
|
throw new Error('marked.parseInline(): input parameter is undefined or null');
|
|
3000
2630
|
}
|
|
3001
|
-
|
|
3002
2631
|
if (typeof src !== 'string') {
|
|
3003
2632
|
throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
|
|
3004
2633
|
}
|
|
3005
|
-
|
|
3006
2634
|
opt = merge({}, marked.defaults, opt || {});
|
|
3007
2635
|
checkSanitizeDeprecation(opt);
|
|
3008
|
-
|
|
3009
2636
|
try {
|
|
3010
2637
|
var tokens = Lexer.lexInline(src, opt);
|
|
3011
|
-
|
|
3012
2638
|
if (opt.walkTokens) {
|
|
3013
2639
|
marked.walkTokens(tokens, opt.walkTokens);
|
|
3014
2640
|
}
|
|
3015
|
-
|
|
3016
2641
|
return Parser.parseInline(tokens, opt);
|
|
3017
2642
|
} catch (e) {
|
|
3018
2643
|
e.message += '\nPlease report this to https://github.com/markedjs/marked.';
|
|
3019
|
-
|
|
3020
2644
|
if (opt.silent) {
|
|
3021
2645
|
return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
|
|
3022
2646
|
}
|
|
3023
|
-
|
|
3024
2647
|
throw e;
|
|
3025
2648
|
}
|
|
3026
2649
|
};
|
|
2650
|
+
|
|
3027
2651
|
/**
|
|
3028
2652
|
* Expose
|
|
3029
2653
|
*/
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
2654
|
marked.Parser = Parser;
|
|
3033
2655
|
marked.parser = Parser.parse;
|
|
3034
2656
|
marked.Renderer = Renderer;
|