marked 4.2.12 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/marked.umd.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * marked v4.2.12 - a markdown parser
2
+ * marked v5.0.0 - a markdown parser
3
3
  * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)
4
4
  * https://github.com/markedjs/marked
5
5
  */
@@ -32,6 +32,20 @@
32
32
  });
33
33
  return Constructor;
34
34
  }
35
+ function _extends() {
36
+ _extends = Object.assign ? Object.assign.bind() : function (target) {
37
+ for (var i = 1; i < arguments.length; i++) {
38
+ var source = arguments[i];
39
+ for (var key in source) {
40
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
41
+ target[key] = source[key];
42
+ }
43
+ }
44
+ }
45
+ return target;
46
+ };
47
+ return _extends.apply(this, arguments);
48
+ }
35
49
  function _unsupportedIterableToArray(o, minLen) {
36
50
  if (!o) return;
37
51
  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
@@ -88,6 +102,7 @@
88
102
  headerIds: true,
89
103
  headerPrefix: '',
90
104
  highlight: null,
105
+ hooks: null,
91
106
  langPrefix: 'language-',
92
107
  mangle: true,
93
108
  pedantic: false,
@@ -242,29 +257,13 @@
242
257
  var noopTest = {
243
258
  exec: function noopTest() {}
244
259
  };
245
- function merge(obj) {
246
- var i = 1,
247
- target,
248
- key;
249
- for (; i < arguments.length; i++) {
250
- target = arguments[i];
251
- for (key in target) {
252
- if (Object.prototype.hasOwnProperty.call(target, key)) {
253
- obj[key] = target[key];
254
- }
255
- }
256
- }
257
- return obj;
258
- }
259
260
  function splitCells(tableRow, count) {
260
261
  // ensure that every cell-delimiting pipe has a space
261
262
  // before it to distinguish it from an escaped pipe
262
263
  var row = tableRow.replace(/\|/g, function (match, offset, str) {
263
264
  var escaped = false,
264
265
  curr = offset;
265
- while (--curr >= 0 && str[curr] === '\\') {
266
- escaped = !escaped;
267
- }
266
+ while (--curr >= 0 && str[curr] === '\\') escaped = !escaped;
268
267
  if (escaped) {
269
268
  // odd number of slashes means | is escaped
270
269
  // so we leave it alone
@@ -287,9 +286,7 @@
287
286
  if (cells.length > count) {
288
287
  cells.splice(count);
289
288
  } else {
290
- while (cells.length < count) {
291
- cells.push('');
292
- }
289
+ while (cells.length < count) cells.push('');
293
290
  }
294
291
  for (; i < cells.length; i++) {
295
292
  // leading or trailing whitespace is ignored per the gfm spec
@@ -349,10 +346,34 @@
349
346
  }
350
347
  return -1;
351
348
  }
352
- function checkSanitizeDeprecation(opt) {
353
- if (opt && opt.sanitize && !opt.silent) {
349
+ function checkDeprecations(opt, callback) {
350
+ if (!opt || opt.silent) {
351
+ return;
352
+ }
353
+ if (callback) {
354
+ console.warn('marked(): callback is deprecated since version 5.0.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/using_pro#async');
355
+ }
356
+ if (opt.sanitize || opt.sanitizer) {
354
357
  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');
355
358
  }
359
+ if (opt.highlight || opt.langPrefix) {
360
+ console.warn('marked(): highlight and langPrefix parameters are deprecated since version 5.0.0, should not be used and will be removed in the future. Instead use https://www.npmjs.com/package/marked-highlight.');
361
+ }
362
+ if (opt.mangle) {
363
+ console.warn('marked(): mangle parameter is deprecated since version 5.0.0, should not be used and will be removed in the future. Instead use https://www.npmjs.com/package/marked-mangle.');
364
+ }
365
+ if (opt.baseUrl) {
366
+ console.warn('marked(): baseUrl parameter is deprecated since version 5.0.0, should not be used and will be removed in the future. Instead use https://www.npmjs.com/package/marked-base-url.');
367
+ }
368
+ if (opt.smartypants) {
369
+ console.warn('marked(): smartypants parameter is deprecated since version 5.0.0, should not be used and will be removed in the future. Instead use https://www.npmjs.com/package/marked-smartypants.');
370
+ }
371
+ if (opt.xhtml) {
372
+ console.warn('marked(): xhtml parameter is deprecated since version 5.0.0, should not be used and will be removed in the future. Instead use https://www.npmjs.com/package/marked-xhtml.');
373
+ }
374
+ if (opt.headerIds || opt.headerPrefix) {
375
+ console.warn('marked(): headerIds and headerPrefix parameters are deprecated since version 5.0.0, should not be used and will be removed in the future. Instead use https://www.npmjs.com/package/marked-gfm-heading-id.');
376
+ }
356
377
  }
357
378
 
358
379
  // copied from https://stackoverflow.com/a/5450113/806777
@@ -697,6 +718,7 @@
697
718
  if (cap) {
698
719
  var token = {
699
720
  type: 'html',
721
+ block: true,
700
722
  raw: cap[0],
701
723
  pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
702
724
  text: cap[0]
@@ -845,6 +867,7 @@
845
867
  raw: cap[0],
846
868
  inLink: this.lexer.state.inLink,
847
869
  inRawBlock: this.lexer.state.inRawBlock,
870
+ block: false,
848
871
  text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]
849
872
  };
850
873
  }
@@ -926,7 +949,7 @@
926
949
  if (!match) return;
927
950
 
928
951
  // _ can't be between two alphanumerics. \p{L}\p{N} includes non-english alphabet/numbers as well
929
- 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;
952
+ 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\uDE3F\uDE40\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\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDF50-\uDF59\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\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\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\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEC0-\uDED3\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\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDCD0-\uDCEB\uDCF0-\uDCF9\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-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/)) return;
930
953
  var nextChar = match[1] || match[2] || '';
931
954
  if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {
932
955
  var lLength = match[0].length - 1;
@@ -1105,7 +1128,7 @@
1105
1128
  var block = {
1106
1129
  newline: /^(?: *(?:\n|$))+/,
1107
1130
  code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
1108
- fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
1131
+ fences: /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
1109
1132
  hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,
1110
1133
  heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
1111
1134
  blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
@@ -1147,13 +1170,13 @@
1147
1170
  * Normal Block Grammar
1148
1171
  */
1149
1172
 
1150
- block.normal = merge({}, block);
1173
+ block.normal = _extends({}, block);
1151
1174
 
1152
1175
  /**
1153
1176
  * GFM Block Grammar
1154
1177
  */
1155
1178
 
1156
- block.gfm = merge({}, block.normal, {
1179
+ block.gfm = _extends({}, block.normal, {
1157
1180
  table: '^ *([^\\n ].*\\|.*)\\n' // Header
1158
1181
  + ' {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?' // Align
1159
1182
  + '(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)' // Cells
@@ -1171,7 +1194,7 @@
1171
1194
  * Pedantic grammar (original John Gruber's loose markdown specification)
1172
1195
  */
1173
1196
 
1174
- block.pedantic = merge({}, block.normal, {
1197
+ block.pedantic = _extends({}, block.normal, {
1175
1198
  html: edit('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
1176
1199
  + '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),
1177
1200
  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
@@ -1246,13 +1269,13 @@
1246
1269
  * Normal Inline Grammar
1247
1270
  */
1248
1271
 
1249
- inline.normal = merge({}, inline);
1272
+ inline.normal = _extends({}, inline);
1250
1273
 
1251
1274
  /**
1252
1275
  * Pedantic Inline Grammar
1253
1276
  */
1254
1277
 
1255
- inline.pedantic = merge({}, inline.normal, {
1278
+ inline.pedantic = _extends({}, inline.normal, {
1256
1279
  strong: {
1257
1280
  start: /^__|\*\*/,
1258
1281
  middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
@@ -1273,7 +1296,7 @@
1273
1296
  * GFM Inline Grammar
1274
1297
  */
1275
1298
 
1276
- inline.gfm = merge({}, inline.normal, {
1299
+ inline.gfm = _extends({}, inline.normal, {
1277
1300
  escape: edit(inline.escape).replace('])', '~|])').getRegex(),
1278
1301
  _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
1279
1302
  url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
@@ -1286,7 +1309,7 @@
1286
1309
  * GFM + Line Breaks Inline Grammar
1287
1310
  */
1288
1311
 
1289
- inline.breaks = merge({}, inline.gfm, {
1312
+ inline.breaks = _extends({}, inline.gfm, {
1290
1313
  br: edit(inline.br).replace('{2,}', '*').getRegex(),
1291
1314
  text: edit(inline.gfm.text).replace('\\b_', '\\b_| {2,}\\n').replace(/\{2,\}/g, '*').getRegex()
1292
1315
  });
@@ -1417,8 +1440,8 @@
1417
1440
  });
1418
1441
  }
1419
1442
  var token, lastToken, cutSrc, lastParagraphClipped;
1420
- while (src) {
1421
- if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {
1443
+ var _loop = function _loop() {
1444
+ if (_this.options.extensions && _this.options.extensions.block && _this.options.extensions.block.some(function (extTokenizer) {
1422
1445
  if (token = extTokenizer.call({
1423
1446
  lexer: _this
1424
1447
  }, src, tokens)) {
@@ -1428,11 +1451,11 @@
1428
1451
  }
1429
1452
  return false;
1430
1453
  })) {
1431
- continue;
1454
+ return "continue";
1432
1455
  }
1433
1456
 
1434
1457
  // newline
1435
- if (token = this.tokenizer.space(src)) {
1458
+ if (token = _this.tokenizer.space(src)) {
1436
1459
  src = src.substring(token.raw.length);
1437
1460
  if (token.raw.length === 1 && tokens.length > 0) {
1438
1461
  // if there's a single \n as a spacer, it's terminating the last line,
@@ -1441,156 +1464,159 @@
1441
1464
  } else {
1442
1465
  tokens.push(token);
1443
1466
  }
1444
- continue;
1467
+ return "continue";
1445
1468
  }
1446
1469
 
1447
1470
  // code
1448
- if (token = this.tokenizer.code(src)) {
1471
+ if (token = _this.tokenizer.code(src)) {
1449
1472
  src = src.substring(token.raw.length);
1450
1473
  lastToken = tokens[tokens.length - 1];
1451
1474
  // An indented code block cannot interrupt a paragraph.
1452
1475
  if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
1453
1476
  lastToken.raw += '\n' + token.raw;
1454
1477
  lastToken.text += '\n' + token.text;
1455
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1478
+ _this.inlineQueue[_this.inlineQueue.length - 1].src = lastToken.text;
1456
1479
  } else {
1457
1480
  tokens.push(token);
1458
1481
  }
1459
- continue;
1482
+ return "continue";
1460
1483
  }
1461
1484
 
1462
1485
  // fences
1463
- if (token = this.tokenizer.fences(src)) {
1486
+ if (token = _this.tokenizer.fences(src)) {
1464
1487
  src = src.substring(token.raw.length);
1465
1488
  tokens.push(token);
1466
- continue;
1489
+ return "continue";
1467
1490
  }
1468
1491
 
1469
1492
  // heading
1470
- if (token = this.tokenizer.heading(src)) {
1493
+ if (token = _this.tokenizer.heading(src)) {
1471
1494
  src = src.substring(token.raw.length);
1472
1495
  tokens.push(token);
1473
- continue;
1496
+ return "continue";
1474
1497
  }
1475
1498
 
1476
1499
  // hr
1477
- if (token = this.tokenizer.hr(src)) {
1500
+ if (token = _this.tokenizer.hr(src)) {
1478
1501
  src = src.substring(token.raw.length);
1479
1502
  tokens.push(token);
1480
- continue;
1503
+ return "continue";
1481
1504
  }
1482
1505
 
1483
1506
  // blockquote
1484
- if (token = this.tokenizer.blockquote(src)) {
1507
+ if (token = _this.tokenizer.blockquote(src)) {
1485
1508
  src = src.substring(token.raw.length);
1486
1509
  tokens.push(token);
1487
- continue;
1510
+ return "continue";
1488
1511
  }
1489
1512
 
1490
1513
  // list
1491
- if (token = this.tokenizer.list(src)) {
1514
+ if (token = _this.tokenizer.list(src)) {
1492
1515
  src = src.substring(token.raw.length);
1493
1516
  tokens.push(token);
1494
- continue;
1517
+ return "continue";
1495
1518
  }
1496
1519
 
1497
1520
  // html
1498
- if (token = this.tokenizer.html(src)) {
1521
+ if (token = _this.tokenizer.html(src)) {
1499
1522
  src = src.substring(token.raw.length);
1500
1523
  tokens.push(token);
1501
- continue;
1524
+ return "continue";
1502
1525
  }
1503
1526
 
1504
1527
  // def
1505
- if (token = this.tokenizer.def(src)) {
1528
+ if (token = _this.tokenizer.def(src)) {
1506
1529
  src = src.substring(token.raw.length);
1507
1530
  lastToken = tokens[tokens.length - 1];
1508
1531
  if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {
1509
1532
  lastToken.raw += '\n' + token.raw;
1510
1533
  lastToken.text += '\n' + token.raw;
1511
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1512
- } else if (!this.tokens.links[token.tag]) {
1513
- this.tokens.links[token.tag] = {
1534
+ _this.inlineQueue[_this.inlineQueue.length - 1].src = lastToken.text;
1535
+ } else if (!_this.tokens.links[token.tag]) {
1536
+ _this.tokens.links[token.tag] = {
1514
1537
  href: token.href,
1515
1538
  title: token.title
1516
1539
  };
1517
1540
  }
1518
- continue;
1541
+ return "continue";
1519
1542
  }
1520
1543
 
1521
1544
  // table (gfm)
1522
- if (token = this.tokenizer.table(src)) {
1545
+ if (token = _this.tokenizer.table(src)) {
1523
1546
  src = src.substring(token.raw.length);
1524
1547
  tokens.push(token);
1525
- continue;
1548
+ return "continue";
1526
1549
  }
1527
1550
 
1528
1551
  // lheading
1529
- if (token = this.tokenizer.lheading(src)) {
1552
+ if (token = _this.tokenizer.lheading(src)) {
1530
1553
  src = src.substring(token.raw.length);
1531
1554
  tokens.push(token);
1532
- continue;
1555
+ return "continue";
1533
1556
  }
1534
1557
 
1535
1558
  // top-level paragraph
1536
1559
  // prevent paragraph consuming extensions by clipping 'src' to extension start
1537
1560
  cutSrc = src;
1538
- if (this.options.extensions && this.options.extensions.startBlock) {
1539
- (function () {
1540
- var startIndex = Infinity;
1541
- var tempSrc = src.slice(1);
1542
- var tempStart = void 0;
1543
- _this.options.extensions.startBlock.forEach(function (getStartIndex) {
1544
- tempStart = getStartIndex.call({
1545
- lexer: this
1546
- }, tempSrc);
1547
- if (typeof tempStart === 'number' && tempStart >= 0) {
1548
- startIndex = Math.min(startIndex, tempStart);
1549
- }
1550
- });
1551
- if (startIndex < Infinity && startIndex >= 0) {
1552
- cutSrc = src.substring(0, startIndex + 1);
1561
+ if (_this.options.extensions && _this.options.extensions.startBlock) {
1562
+ var startIndex = Infinity;
1563
+ var tempSrc = src.slice(1);
1564
+ var tempStart;
1565
+ _this.options.extensions.startBlock.forEach(function (getStartIndex) {
1566
+ tempStart = getStartIndex.call({
1567
+ lexer: this
1568
+ }, tempSrc);
1569
+ if (typeof tempStart === 'number' && tempStart >= 0) {
1570
+ startIndex = Math.min(startIndex, tempStart);
1553
1571
  }
1554
- })();
1572
+ });
1573
+ if (startIndex < Infinity && startIndex >= 0) {
1574
+ cutSrc = src.substring(0, startIndex + 1);
1575
+ }
1555
1576
  }
1556
- if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
1577
+ if (_this.state.top && (token = _this.tokenizer.paragraph(cutSrc))) {
1557
1578
  lastToken = tokens[tokens.length - 1];
1558
1579
  if (lastParagraphClipped && lastToken.type === 'paragraph') {
1559
1580
  lastToken.raw += '\n' + token.raw;
1560
1581
  lastToken.text += '\n' + token.text;
1561
- this.inlineQueue.pop();
1562
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1582
+ _this.inlineQueue.pop();
1583
+ _this.inlineQueue[_this.inlineQueue.length - 1].src = lastToken.text;
1563
1584
  } else {
1564
1585
  tokens.push(token);
1565
1586
  }
1566
1587
  lastParagraphClipped = cutSrc.length !== src.length;
1567
1588
  src = src.substring(token.raw.length);
1568
- continue;
1589
+ return "continue";
1569
1590
  }
1570
1591
 
1571
1592
  // text
1572
- if (token = this.tokenizer.text(src)) {
1593
+ if (token = _this.tokenizer.text(src)) {
1573
1594
  src = src.substring(token.raw.length);
1574
1595
  lastToken = tokens[tokens.length - 1];
1575
1596
  if (lastToken && lastToken.type === 'text') {
1576
1597
  lastToken.raw += '\n' + token.raw;
1577
1598
  lastToken.text += '\n' + token.text;
1578
- this.inlineQueue.pop();
1579
- this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
1599
+ _this.inlineQueue.pop();
1600
+ _this.inlineQueue[_this.inlineQueue.length - 1].src = lastToken.text;
1580
1601
  } else {
1581
1602
  tokens.push(token);
1582
1603
  }
1583
- continue;
1604
+ return "continue";
1584
1605
  }
1585
1606
  if (src) {
1586
1607
  var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
1587
- if (this.options.silent) {
1608
+ if (_this.options.silent) {
1588
1609
  console.error(errMsg);
1589
- break;
1610
+ return "break";
1590
1611
  } else {
1591
1612
  throw new Error(errMsg);
1592
1613
  }
1593
1614
  }
1615
+ };
1616
+ while (src) {
1617
+ var _ret = _loop();
1618
+ if (_ret === "continue") continue;
1619
+ if (_ret === "break") break;
1594
1620
  }
1595
1621
  this.state.top = true;
1596
1622
  return tokens;
@@ -1642,14 +1668,14 @@
1642
1668
  maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);
1643
1669
  this.tokenizer.rules.inline.escapedEmSt.lastIndex--;
1644
1670
  }
1645
- while (src) {
1671
+ var _loop2 = function _loop2() {
1646
1672
  if (!keepPrevChar) {
1647
1673
  prevChar = '';
1648
1674
  }
1649
1675
  keepPrevChar = false;
1650
1676
 
1651
1677
  // extensions
1652
- if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {
1678
+ if (_this2.options.extensions && _this2.options.extensions.inline && _this2.options.extensions.inline.some(function (extTokenizer) {
1653
1679
  if (token = extTokenizer.call({
1654
1680
  lexer: _this2
1655
1681
  }, src, tokens)) {
@@ -1659,18 +1685,18 @@
1659
1685
  }
1660
1686
  return false;
1661
1687
  })) {
1662
- continue;
1688
+ return "continue";
1663
1689
  }
1664
1690
 
1665
1691
  // escape
1666
- if (token = this.tokenizer.escape(src)) {
1692
+ if (token = _this2.tokenizer.escape(src)) {
1667
1693
  src = src.substring(token.raw.length);
1668
1694
  tokens.push(token);
1669
- continue;
1695
+ return "continue";
1670
1696
  }
1671
1697
 
1672
1698
  // tag
1673
- if (token = this.tokenizer.tag(src)) {
1699
+ if (token = _this2.tokenizer.tag(src)) {
1674
1700
  src = src.substring(token.raw.length);
1675
1701
  lastToken = tokens[tokens.length - 1];
1676
1702
  if (lastToken && token.type === 'text' && lastToken.type === 'text') {
@@ -1679,18 +1705,18 @@
1679
1705
  } else {
1680
1706
  tokens.push(token);
1681
1707
  }
1682
- continue;
1708
+ return "continue";
1683
1709
  }
1684
1710
 
1685
1711
  // link
1686
- if (token = this.tokenizer.link(src)) {
1712
+ if (token = _this2.tokenizer.link(src)) {
1687
1713
  src = src.substring(token.raw.length);
1688
1714
  tokens.push(token);
1689
- continue;
1715
+ return "continue";
1690
1716
  }
1691
1717
 
1692
1718
  // reflink, nolink
1693
- if (token = this.tokenizer.reflink(src, this.tokens.links)) {
1719
+ if (token = _this2.tokenizer.reflink(src, _this2.tokens.links)) {
1694
1720
  src = src.substring(token.raw.length);
1695
1721
  lastToken = tokens[tokens.length - 1];
1696
1722
  if (lastToken && token.type === 'text' && lastToken.type === 'text') {
@@ -1699,73 +1725,71 @@
1699
1725
  } else {
1700
1726
  tokens.push(token);
1701
1727
  }
1702
- continue;
1728
+ return "continue";
1703
1729
  }
1704
1730
 
1705
1731
  // em & strong
1706
- if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
1732
+ if (token = _this2.tokenizer.emStrong(src, maskedSrc, prevChar)) {
1707
1733
  src = src.substring(token.raw.length);
1708
1734
  tokens.push(token);
1709
- continue;
1735
+ return "continue";
1710
1736
  }
1711
1737
 
1712
1738
  // code
1713
- if (token = this.tokenizer.codespan(src)) {
1739
+ if (token = _this2.tokenizer.codespan(src)) {
1714
1740
  src = src.substring(token.raw.length);
1715
1741
  tokens.push(token);
1716
- continue;
1742
+ return "continue";
1717
1743
  }
1718
1744
 
1719
1745
  // br
1720
- if (token = this.tokenizer.br(src)) {
1746
+ if (token = _this2.tokenizer.br(src)) {
1721
1747
  src = src.substring(token.raw.length);
1722
1748
  tokens.push(token);
1723
- continue;
1749
+ return "continue";
1724
1750
  }
1725
1751
 
1726
1752
  // del (gfm)
1727
- if (token = this.tokenizer.del(src)) {
1753
+ if (token = _this2.tokenizer.del(src)) {
1728
1754
  src = src.substring(token.raw.length);
1729
1755
  tokens.push(token);
1730
- continue;
1756
+ return "continue";
1731
1757
  }
1732
1758
 
1733
1759
  // autolink
1734
- if (token = this.tokenizer.autolink(src, mangle)) {
1760
+ if (token = _this2.tokenizer.autolink(src, mangle)) {
1735
1761
  src = src.substring(token.raw.length);
1736
1762
  tokens.push(token);
1737
- continue;
1763
+ return "continue";
1738
1764
  }
1739
1765
 
1740
1766
  // url (gfm)
1741
- if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {
1767
+ if (!_this2.state.inLink && (token = _this2.tokenizer.url(src, mangle))) {
1742
1768
  src = src.substring(token.raw.length);
1743
1769
  tokens.push(token);
1744
- continue;
1770
+ return "continue";
1745
1771
  }
1746
1772
 
1747
1773
  // text
1748
1774
  // prevent inlineText consuming extensions by clipping 'src' to extension start
1749
1775
  cutSrc = src;
1750
- if (this.options.extensions && this.options.extensions.startInline) {
1751
- (function () {
1752
- var startIndex = Infinity;
1753
- var tempSrc = src.slice(1);
1754
- var tempStart = void 0;
1755
- _this2.options.extensions.startInline.forEach(function (getStartIndex) {
1756
- tempStart = getStartIndex.call({
1757
- lexer: this
1758
- }, tempSrc);
1759
- if (typeof tempStart === 'number' && tempStart >= 0) {
1760
- startIndex = Math.min(startIndex, tempStart);
1761
- }
1762
- });
1763
- if (startIndex < Infinity && startIndex >= 0) {
1764
- cutSrc = src.substring(0, startIndex + 1);
1776
+ if (_this2.options.extensions && _this2.options.extensions.startInline) {
1777
+ var startIndex = Infinity;
1778
+ var tempSrc = src.slice(1);
1779
+ var tempStart;
1780
+ _this2.options.extensions.startInline.forEach(function (getStartIndex) {
1781
+ tempStart = getStartIndex.call({
1782
+ lexer: this
1783
+ }, tempSrc);
1784
+ if (typeof tempStart === 'number' && tempStart >= 0) {
1785
+ startIndex = Math.min(startIndex, tempStart);
1765
1786
  }
1766
- })();
1787
+ });
1788
+ if (startIndex < Infinity && startIndex >= 0) {
1789
+ cutSrc = src.substring(0, startIndex + 1);
1790
+ }
1767
1791
  }
1768
- if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {
1792
+ if (token = _this2.tokenizer.inlineText(cutSrc, smartypants)) {
1769
1793
  src = src.substring(token.raw.length);
1770
1794
  if (token.raw.slice(-1) !== '_') {
1771
1795
  // Track prevChar before string of ____ started
@@ -1779,17 +1803,22 @@
1779
1803
  } else {
1780
1804
  tokens.push(token);
1781
1805
  }
1782
- continue;
1806
+ return "continue";
1783
1807
  }
1784
1808
  if (src) {
1785
1809
  var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);
1786
- if (this.options.silent) {
1810
+ if (_this2.options.silent) {
1787
1811
  console.error(errMsg);
1788
- break;
1812
+ return "break";
1789
1813
  } else {
1790
1814
  throw new Error(errMsg);
1791
1815
  }
1792
1816
  }
1817
+ };
1818
+ while (src) {
1819
+ var _ret2 = _loop2();
1820
+ if (_ret2 === "continue") continue;
1821
+ if (_ret2 === "break") break;
1793
1822
  }
1794
1823
  return tokens;
1795
1824
  };
@@ -1835,7 +1864,7 @@
1835
1864
  _proto.blockquote = function blockquote(quote) {
1836
1865
  return "<blockquote>\n" + quote + "</blockquote>\n";
1837
1866
  };
1838
- _proto.html = function html(_html) {
1867
+ _proto.html = function html(_html, block) {
1839
1868
  return _html;
1840
1869
  }
1841
1870
 
@@ -2236,8 +2265,7 @@
2236
2265
  }
2237
2266
  case 'html':
2238
2267
  {
2239
- // TODO parse inline content if parameter markdown=1
2240
- out += this.renderer.html(token.text);
2268
+ out += this.renderer.html(token.text, token.block);
2241
2269
  continue;
2242
2270
  }
2243
2271
  case 'paragraph':
@@ -2361,98 +2389,170 @@
2361
2389
  return Parser;
2362
2390
  }();
2363
2391
 
2364
- /**
2365
- * Marked
2366
- */
2367
- function marked(src, opt, callback) {
2368
- // throw error in case of non string input
2369
- if (typeof src === 'undefined' || src === null) {
2370
- throw new Error('marked(): input parameter is undefined or null');
2371
- }
2372
- if (typeof src !== 'string') {
2373
- throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
2392
+ var Hooks = /*#__PURE__*/function () {
2393
+ function Hooks(options) {
2394
+ this.options = options || exports.defaults;
2374
2395
  }
2375
- if (typeof opt === 'function') {
2376
- callback = opt;
2377
- opt = null;
2396
+ var _proto = Hooks.prototype;
2397
+ /**
2398
+ * Process markdown before marked
2399
+ */
2400
+ _proto.preprocess = function preprocess(markdown) {
2401
+ return markdown;
2378
2402
  }
2379
- opt = merge({}, marked.defaults, opt || {});
2380
- checkSanitizeDeprecation(opt);
2381
- if (callback) {
2382
- var highlight = opt.highlight;
2383
- var tokens;
2384
- try {
2385
- tokens = Lexer.lex(src, opt);
2386
- } catch (e) {
2387
- return callback(e);
2388
- }
2389
- var done = function done(err) {
2390
- var out;
2391
- if (!err) {
2392
- try {
2393
- if (opt.walkTokens) {
2394
- marked.walkTokens(tokens, opt.walkTokens);
2395
- }
2396
- out = Parser.parse(tokens, opt);
2397
- } catch (e) {
2398
- err = e;
2403
+
2404
+ /**
2405
+ * Process HTML after marked is finished
2406
+ */;
2407
+ _proto.postprocess = function postprocess(html) {
2408
+ return html;
2409
+ };
2410
+ return Hooks;
2411
+ }();
2412
+ Hooks.passThroughHooks = new Set(['preprocess', 'postprocess']);
2413
+
2414
+ function onError(silent, async, callback) {
2415
+ return function (e) {
2416
+ e.message += '\nPlease report this to https://github.com/markedjs/marked.';
2417
+ if (silent) {
2418
+ var msg = '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
2419
+ if (async) {
2420
+ return Promise.resolve(msg);
2421
+ }
2422
+ if (callback) {
2423
+ callback(null, msg);
2424
+ return;
2425
+ }
2426
+ return msg;
2427
+ }
2428
+ if (async) {
2429
+ return Promise.reject(e);
2430
+ }
2431
+ if (callback) {
2432
+ callback(e);
2433
+ return;
2434
+ }
2435
+ throw e;
2436
+ };
2437
+ }
2438
+ function parseMarkdown(lexer, parser) {
2439
+ return function (src, opt, callback) {
2440
+ if (typeof opt === 'function') {
2441
+ callback = opt;
2442
+ opt = null;
2443
+ }
2444
+ var origOpt = _extends({}, opt);
2445
+ opt = _extends({}, marked.defaults, origOpt);
2446
+ var throwError = onError(opt.silent, opt.async, callback);
2447
+
2448
+ // throw error in case of non string input
2449
+ if (typeof src === 'undefined' || src === null) {
2450
+ return throwError(new Error('marked(): input parameter is undefined or null'));
2451
+ }
2452
+ if (typeof src !== 'string') {
2453
+ return throwError(new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected'));
2454
+ }
2455
+ checkDeprecations(opt, callback);
2456
+ if (opt.hooks) {
2457
+ opt.hooks.options = opt;
2458
+ }
2459
+ if (callback) {
2460
+ var highlight = opt.highlight;
2461
+ var tokens;
2462
+ try {
2463
+ if (opt.hooks) {
2464
+ src = opt.hooks.preprocess(src);
2399
2465
  }
2466
+ tokens = lexer(src, opt);
2467
+ } catch (e) {
2468
+ return throwError(e);
2400
2469
  }
2401
- opt.highlight = highlight;
2402
- return err ? callback(err) : callback(null, out);
2403
- };
2404
- if (!highlight || highlight.length < 3) {
2405
- return done();
2406
- }
2407
- delete opt.highlight;
2408
- if (!tokens.length) return done();
2409
- var pending = 0;
2410
- marked.walkTokens(tokens, function (token) {
2411
- if (token.type === 'code') {
2412
- pending++;
2413
- setTimeout(function () {
2414
- highlight(token.text, token.lang, function (err, code) {
2415
- if (err) {
2416
- return done(err);
2470
+ var done = function done(err) {
2471
+ var out;
2472
+ if (!err) {
2473
+ try {
2474
+ if (opt.walkTokens) {
2475
+ marked.walkTokens(tokens, opt.walkTokens);
2417
2476
  }
2418
- if (code != null && code !== token.text) {
2419
- token.text = code;
2420
- token.escaped = true;
2477
+ out = parser(tokens, opt);
2478
+ if (opt.hooks) {
2479
+ out = opt.hooks.postprocess(out);
2421
2480
  }
2422
- pending--;
2423
- if (pending === 0) {
2424
- done();
2425
- }
2426
- });
2427
- }, 0);
2481
+ } catch (e) {
2482
+ err = e;
2483
+ }
2484
+ }
2485
+ opt.highlight = highlight;
2486
+ return err ? throwError(err) : callback(null, out);
2487
+ };
2488
+ if (!highlight || highlight.length < 3) {
2489
+ return done();
2428
2490
  }
2429
- });
2430
- if (pending === 0) {
2431
- done();
2432
- }
2433
- return;
2434
- }
2435
- function onError(e) {
2436
- e.message += '\nPlease report this to https://github.com/markedjs/marked.';
2437
- if (opt.silent) {
2438
- return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
2491
+ delete opt.highlight;
2492
+ if (!tokens.length) return done();
2493
+ var pending = 0;
2494
+ marked.walkTokens(tokens, function (token) {
2495
+ if (token.type === 'code') {
2496
+ pending++;
2497
+ setTimeout(function () {
2498
+ highlight(token.text, token.lang, function (err, code) {
2499
+ if (err) {
2500
+ return done(err);
2501
+ }
2502
+ if (code != null && code !== token.text) {
2503
+ token.text = code;
2504
+ token.escaped = true;
2505
+ }
2506
+ pending--;
2507
+ if (pending === 0) {
2508
+ done();
2509
+ }
2510
+ });
2511
+ }, 0);
2512
+ }
2513
+ });
2514
+ if (pending === 0) {
2515
+ done();
2516
+ }
2517
+ return;
2518
+ }
2519
+ if (opt.async) {
2520
+ return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then(function (src) {
2521
+ return lexer(src, opt);
2522
+ }).then(function (tokens) {
2523
+ return opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(function () {
2524
+ return tokens;
2525
+ }) : tokens;
2526
+ }).then(function (tokens) {
2527
+ return parser(tokens, opt);
2528
+ }).then(function (html) {
2529
+ return opt.hooks ? opt.hooks.postprocess(html) : html;
2530
+ })["catch"](throwError);
2439
2531
  }
2440
- throw e;
2441
- }
2442
- try {
2443
- var _tokens = Lexer.lex(src, opt);
2444
- if (opt.walkTokens) {
2445
- if (opt.async) {
2446
- return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {
2447
- return Parser.parse(_tokens, opt);
2448
- })["catch"](onError);
2532
+ try {
2533
+ if (opt.hooks) {
2534
+ src = opt.hooks.preprocess(src);
2449
2535
  }
2450
- marked.walkTokens(_tokens, opt.walkTokens);
2536
+ var _tokens = lexer(src, opt);
2537
+ if (opt.walkTokens) {
2538
+ marked.walkTokens(_tokens, opt.walkTokens);
2539
+ }
2540
+ var html = parser(_tokens, opt);
2541
+ if (opt.hooks) {
2542
+ html = opt.hooks.postprocess(html);
2543
+ }
2544
+ return html;
2545
+ } catch (e) {
2546
+ return throwError(e);
2451
2547
  }
2452
- return Parser.parse(_tokens, opt);
2453
- } catch (e) {
2454
- onError(e);
2455
- }
2548
+ };
2549
+ }
2550
+
2551
+ /**
2552
+ * Marked
2553
+ */
2554
+ function marked(src, opt, callback) {
2555
+ return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);
2456
2556
  }
2457
2557
 
2458
2558
  /**
@@ -2460,7 +2560,7 @@
2460
2560
  */
2461
2561
 
2462
2562
  marked.options = marked.setOptions = function (opt) {
2463
- merge(marked.defaults, opt);
2563
+ marked.defaults = _extends({}, marked.defaults, opt);
2464
2564
  changeDefaults(marked.defaults);
2465
2565
  return marked;
2466
2566
  };
@@ -2481,10 +2581,10 @@
2481
2581
  }
2482
2582
  args.forEach(function (pack) {
2483
2583
  // copy options to new object
2484
- var opts = merge({}, pack);
2584
+ var opts = _extends({}, pack);
2485
2585
 
2486
2586
  // set async to true if it was set to true before
2487
- opts.async = marked.defaults.async || opts.async;
2587
+ opts.async = marked.defaults.async || opts.async || false;
2488
2588
 
2489
2589
  // ==-- Parse "addon" extensions --== //
2490
2590
  if (pack.extensions) {
@@ -2548,50 +2648,80 @@
2548
2648
 
2549
2649
  // ==-- Parse "overwrite" extensions --== //
2550
2650
  if (pack.renderer) {
2551
- (function () {
2552
- var renderer = marked.defaults.renderer || new Renderer();
2553
- var _loop = function _loop(prop) {
2554
- var prevRenderer = renderer[prop];
2555
- // Replace renderer with func to run extension, but fall back if false
2556
- renderer[prop] = function () {
2557
- for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
2558
- args[_key3] = arguments[_key3];
2559
- }
2560
- var ret = pack.renderer[prop].apply(renderer, args);
2561
- if (ret === false) {
2562
- ret = prevRenderer.apply(renderer, args);
2563
- }
2564
- return ret;
2565
- };
2651
+ var renderer = marked.defaults.renderer || new Renderer();
2652
+ var _loop = function _loop(prop) {
2653
+ var prevRenderer = renderer[prop];
2654
+ // Replace renderer with func to run extension, but fall back if false
2655
+ renderer[prop] = function () {
2656
+ for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
2657
+ args[_key3] = arguments[_key3];
2658
+ }
2659
+ var ret = pack.renderer[prop].apply(renderer, args);
2660
+ if (ret === false) {
2661
+ ret = prevRenderer.apply(renderer, args);
2662
+ }
2663
+ return ret;
2566
2664
  };
2567
- for (var prop in pack.renderer) {
2568
- _loop(prop);
2569
- }
2570
- opts.renderer = renderer;
2571
- })();
2665
+ };
2666
+ for (var prop in pack.renderer) {
2667
+ _loop(prop);
2668
+ }
2669
+ opts.renderer = renderer;
2572
2670
  }
2573
2671
  if (pack.tokenizer) {
2574
- (function () {
2575
- var tokenizer = marked.defaults.tokenizer || new Tokenizer();
2576
- var _loop2 = function _loop2(prop) {
2577
- var prevTokenizer = tokenizer[prop];
2578
- // Replace tokenizer with func to run extension, but fall back if false
2579
- tokenizer[prop] = function () {
2580
- for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
2581
- args[_key4] = arguments[_key4];
2672
+ var tokenizer = marked.defaults.tokenizer || new Tokenizer();
2673
+ var _loop2 = function _loop2(_prop) {
2674
+ var prevTokenizer = tokenizer[_prop];
2675
+ // Replace tokenizer with func to run extension, but fall back if false
2676
+ tokenizer[_prop] = function () {
2677
+ for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
2678
+ args[_key4] = arguments[_key4];
2679
+ }
2680
+ var ret = pack.tokenizer[_prop].apply(tokenizer, args);
2681
+ if (ret === false) {
2682
+ ret = prevTokenizer.apply(tokenizer, args);
2683
+ }
2684
+ return ret;
2685
+ };
2686
+ };
2687
+ for (var _prop in pack.tokenizer) {
2688
+ _loop2(_prop);
2689
+ }
2690
+ opts.tokenizer = tokenizer;
2691
+ }
2692
+
2693
+ // ==-- Parse Hooks extensions --== //
2694
+ if (pack.hooks) {
2695
+ var hooks = marked.defaults.hooks || new Hooks();
2696
+ var _loop3 = function _loop3(_prop2) {
2697
+ var prevHook = hooks[_prop2];
2698
+ if (Hooks.passThroughHooks.has(_prop2)) {
2699
+ hooks[_prop2] = function (arg) {
2700
+ if (marked.defaults.async) {
2701
+ return Promise.resolve(pack.hooks[_prop2].call(hooks, arg)).then(function (ret) {
2702
+ return prevHook.call(hooks, ret);
2703
+ });
2582
2704
  }
2583
- var ret = pack.tokenizer[prop].apply(tokenizer, args);
2705
+ var ret = pack.hooks[_prop2].call(hooks, arg);
2706
+ return prevHook.call(hooks, ret);
2707
+ };
2708
+ } else {
2709
+ hooks[_prop2] = function () {
2710
+ for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
2711
+ args[_key5] = arguments[_key5];
2712
+ }
2713
+ var ret = pack.hooks[_prop2].apply(hooks, args);
2584
2714
  if (ret === false) {
2585
- ret = prevTokenizer.apply(tokenizer, args);
2715
+ ret = prevHook.apply(hooks, args);
2586
2716
  }
2587
2717
  return ret;
2588
2718
  };
2589
- };
2590
- for (var prop in pack.tokenizer) {
2591
- _loop2(prop);
2592
2719
  }
2593
- opts.tokenizer = tokenizer;
2594
- })();
2720
+ };
2721
+ for (var _prop2 in pack.hooks) {
2722
+ _loop3(_prop2);
2723
+ }
2724
+ opts.hooks = hooks;
2595
2725
  }
2596
2726
 
2597
2727
  // ==-- Parse WalkTokens extensions --== //
@@ -2616,7 +2746,7 @@
2616
2746
 
2617
2747
  marked.walkTokens = function (tokens, callback) {
2618
2748
  var values = [];
2619
- var _loop3 = function _loop3() {
2749
+ var _loop4 = function _loop4() {
2620
2750
  var token = _step.value;
2621
2751
  values = values.concat(callback.call(marked, token));
2622
2752
  switch (token.type) {
@@ -2654,7 +2784,7 @@
2654
2784
  }
2655
2785
  };
2656
2786
  for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {
2657
- _loop3();
2787
+ _loop4();
2658
2788
  }
2659
2789
  return values;
2660
2790
  };
@@ -2663,30 +2793,7 @@
2663
2793
  * Parse Inline
2664
2794
  * @param {string} src
2665
2795
  */
2666
- marked.parseInline = function (src, opt) {
2667
- // throw error in case of non string input
2668
- if (typeof src === 'undefined' || src === null) {
2669
- throw new Error('marked.parseInline(): input parameter is undefined or null');
2670
- }
2671
- if (typeof src !== 'string') {
2672
- throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');
2673
- }
2674
- opt = merge({}, marked.defaults, opt || {});
2675
- checkSanitizeDeprecation(opt);
2676
- try {
2677
- var tokens = Lexer.lexInline(src, opt);
2678
- if (opt.walkTokens) {
2679
- marked.walkTokens(tokens, opt.walkTokens);
2680
- }
2681
- return Parser.parseInline(tokens, opt);
2682
- } catch (e) {
2683
- e.message += '\nPlease report this to https://github.com/markedjs/marked.';
2684
- if (opt.silent) {
2685
- return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';
2686
- }
2687
- throw e;
2688
- }
2689
- };
2796
+ marked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);
2690
2797
 
2691
2798
  /**
2692
2799
  * Expose
@@ -2699,6 +2806,7 @@
2699
2806
  marked.lexer = Lexer.lex;
2700
2807
  marked.Tokenizer = Tokenizer;
2701
2808
  marked.Slugger = Slugger;
2809
+ marked.Hooks = Hooks;
2702
2810
  marked.parse = marked;
2703
2811
  var options = marked.options;
2704
2812
  var setOptions = marked.setOptions;
@@ -2709,6 +2817,7 @@
2709
2817
  var parser = Parser.parse;
2710
2818
  var lexer = Lexer.lex;
2711
2819
 
2820
+ exports.Hooks = Hooks;
2712
2821
  exports.Lexer = Lexer;
2713
2822
  exports.Parser = Parser;
2714
2823
  exports.Renderer = Renderer;