showdown.js 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. function e(e) {
  2. var r = {
  3. omitExtraWLInCodeBlocks: {
  4. defaultValue: !1,
  5. describe: "Omit the default extra whiteline added to code blocks",
  6. type: "boolean"
  7. },
  8. noHeaderId: {
  9. defaultValue: !1,
  10. describe: "Turn on/off generated header id",
  11. type: "boolean"
  12. },
  13. prefixHeaderId: {
  14. defaultValue: !1,
  15. describe: "Specify a prefix to generated header ids",
  16. type: "string"
  17. },
  18. headerLevelStart: {
  19. defaultValue: !1,
  20. describe: "The header blocks level start",
  21. type: "integer"
  22. },
  23. parseImgDimensions: {
  24. defaultValue: !1,
  25. describe: "Turn on/off image dimension parsing",
  26. type: "boolean"
  27. },
  28. simplifiedAutoLink: {
  29. defaultValue: !1,
  30. describe: "Turn on/off GFM autolink style",
  31. type: "boolean"
  32. },
  33. literalMidWordUnderscores: {
  34. defaultValue: !1,
  35. describe: "Parse midword underscores as literal underscores",
  36. type: "boolean"
  37. },
  38. strikethrough: {
  39. defaultValue: !1,
  40. describe: "Turn on/off strikethrough support",
  41. type: "boolean"
  42. },
  43. tables: {
  44. defaultValue: !1,
  45. describe: "Turn on/off tables support",
  46. type: "boolean"
  47. },
  48. tablesHeaderId: {
  49. defaultValue: !1,
  50. describe: "Add an id to table headers",
  51. type: "boolean"
  52. },
  53. ghCodeBlocks: {
  54. defaultValue: !0,
  55. describe: "Turn on/off GFM fenced code blocks support",
  56. type: "boolean"
  57. },
  58. tasklists: {
  59. defaultValue: !1,
  60. describe: "Turn on/off GFM tasklist support",
  61. type: "boolean"
  62. },
  63. smoothLivePreview: {
  64. defaultValue: !1,
  65. describe: "Prevents weird effects in live previews due to incomplete input",
  66. type: "boolean"
  67. },
  68. smartIndentationFix: {
  69. defaultValue: !1,
  70. description: "Tries to smartly fix identation in es6 strings",
  71. type: "boolean"
  72. }
  73. };
  74. if (!1 === e) return JSON.parse(JSON.stringify(r));
  75. var t = {};
  76. for (var n in r) r.hasOwnProperty(n) && (t[n] = r[n].defaultValue);
  77. return t;
  78. }
  79. function r(e, r) {
  80. var t = r ? "Error in " + r + " extension->" : "Error in unnamed extension", a = {
  81. valid: !0,
  82. error: ""
  83. };
  84. s.helper.isArray(e) || (e = [ e ]);
  85. for (var o = 0; o < e.length; ++o) {
  86. var i = t + " sub-extension " + o + ": ", l = e[o];
  87. if ("object" !== (void 0 === l ? "undefined" : n(l))) return a.valid = !1, a.error = i + "must be an object, but " + (void 0 === l ? "undefined" : n(l)) + " given",
  88. a;
  89. if (!s.helper.isString(l.type)) return a.valid = !1, a.error = i + 'property "type" must be a string, but ' + n(l.type) + " given",
  90. a;
  91. var c = l.type = l.type.toLowerCase();
  92. if ("language" === c && (c = l.type = "lang"), "html" === c && (c = l.type = "output"),
  93. "lang" !== c && "output" !== c && "listener" !== c) return a.valid = !1, a.error = i + "type " + c + ' is not recognized. Valid values: "lang/language", "output/html" or "listener"',
  94. a;
  95. if ("listener" === c) {
  96. if (s.helper.isUndefined(l.listeners)) return a.valid = !1, a.error = i + '. Extensions of type "listener" must have a property called "listeners"',
  97. a;
  98. } else if (s.helper.isUndefined(l.filter) && s.helper.isUndefined(l.regex)) return a.valid = !1,
  99. a.error = i + c + ' extensions must define either a "regex" property or a "filter" method',
  100. a;
  101. if (l.listeners) {
  102. if ("object" !== n(l.listeners)) return a.valid = !1, a.error = i + '"listeners" property must be an object but ' + n(l.listeners) + " given",
  103. a;
  104. for (var u in l.listeners) if (l.listeners.hasOwnProperty(u) && "function" != typeof l.listeners[u]) return a.valid = !1,
  105. a.error = i + '"listeners" property must be an hash of [event name]: [callback]. listeners.' + u + " must be a function but " + n(l.listeners[u]) + " given",
  106. a;
  107. }
  108. if (l.filter) {
  109. if ("function" != typeof l.filter) return a.valid = !1, a.error = i + '"filter" must be a function, but ' + n(l.filter) + " given",
  110. a;
  111. } else if (l.regex) {
  112. if (s.helper.isString(l.regex) && (l.regex = new RegExp(l.regex, "g")), !l.regex instanceof RegExp) return a.valid = !1,
  113. a.error = i + '"regex" property must either be a string or a RegExp object, but ' + n(l.regex) + " given",
  114. a;
  115. if (s.helper.isUndefined(l.replace)) return a.valid = !1, a.error = i + '"regex" extensions must implement a replace string or function',
  116. a;
  117. }
  118. }
  119. return a;
  120. }
  121. function t(e, r) {
  122. return "~E" + r.charCodeAt(0) + "E";
  123. }
  124. var n = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
  125. return typeof e;
  126. } : function(e) {
  127. return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
  128. }, s = {}, a = {}, o = {}, i = e(!0), l = {
  129. github: {
  130. omitExtraWLInCodeBlocks: !0,
  131. prefixHeaderId: "user-content-",
  132. simplifiedAutoLink: !0,
  133. literalMidWordUnderscores: !0,
  134. strikethrough: !0,
  135. tables: !0,
  136. tablesHeaderId: !0,
  137. ghCodeBlocks: !0,
  138. tasklists: !0
  139. },
  140. vanilla: e(!0)
  141. };
  142. s.helper = {}, s.extensions = {}, s.setOption = function(e, r) {
  143. return i[e] = r, this;
  144. }, s.getOption = function(e) {
  145. return i[e];
  146. }, s.getOptions = function() {
  147. return i;
  148. }, s.resetOptions = function() {
  149. i = e(!0);
  150. }, s.setFlavor = function(e) {
  151. if (l.hasOwnProperty(e)) {
  152. var r = l[e];
  153. for (var t in r) r.hasOwnProperty(t) && (i[t] = r[t]);
  154. }
  155. }, s.getDefaultOptions = function(r) {
  156. return e(r);
  157. }, s.subParser = function(e, r) {
  158. if (s.helper.isString(e)) {
  159. if (void 0 === r) {
  160. if (a.hasOwnProperty(e)) return a[e];
  161. throw Error("SubParser named " + e + " not registered!");
  162. }
  163. a[e] = r;
  164. }
  165. }, s.extension = function(e, t) {
  166. if (!s.helper.isString(e)) throw Error("Extension 'name' must be a string");
  167. if (e = s.helper.stdExtName(e), s.helper.isUndefined(t)) {
  168. if (!o.hasOwnProperty(e)) throw Error("Extension named " + e + " is not registered!");
  169. return o[e];
  170. }
  171. "function" == typeof t && (t = t()), s.helper.isArray(t) || (t = [ t ]);
  172. var n = r(t, e);
  173. if (!n.valid) throw Error(n.error);
  174. o[e] = t;
  175. }, s.getAllExtensions = function() {
  176. return o;
  177. }, s.removeExtension = function(e) {
  178. delete o[e];
  179. }, s.resetExtensions = function() {
  180. o = {};
  181. }, s.validateExtension = function(e) {
  182. var t = r(e, null);
  183. return !!t.valid || (console.warn(t.error), !1);
  184. }, s.hasOwnProperty("helper") || (s.helper = {}), s.helper.isString = function(e) {
  185. return "string" == typeof e || e instanceof String;
  186. }, s.helper.isFunction = function(e) {
  187. var r = {};
  188. return e && "[object Function]" === r.toString.call(e);
  189. }, s.helper.forEach = function(e, r) {
  190. if ("function" == typeof e.forEach) e.forEach(r); else for (var t = 0; t < e.length; t++) r(e[t], t, e);
  191. }, s.helper.isArray = function(e) {
  192. return e.constructor === Array;
  193. }, s.helper.isUndefined = function(e) {
  194. return void 0 === e;
  195. }, s.helper.stdExtName = function(e) {
  196. return e.replace(/[_-]||\s/g, "").toLowerCase();
  197. }, s.helper.escapeCharactersCallback = t, s.helper.escapeCharacters = function(e, r, n) {
  198. var s = "([" + r.replace(/([\[\]\\])/g, "\\$1") + "])";
  199. n && (s = "\\\\" + s);
  200. var a = new RegExp(s, "g");
  201. return e = e.replace(a, t);
  202. };
  203. var c = function(e, r, t, n) {
  204. var s, a, o, i, l, c = n || "", u = c.indexOf("g") > -1, p = new RegExp(r + "|" + t, "g" + c.replace(/g/g, "")), h = new RegExp(r, c.replace(/g/g, "")), d = [];
  205. do {
  206. for (s = 0; o = p.exec(e); ) if (h.test(o[0])) s++ || (i = (a = p.lastIndex) - o[0].length); else if (s && !--s) {
  207. l = o.index + o[0].length;
  208. var f = {
  209. left: {
  210. start: i,
  211. end: a
  212. },
  213. match: {
  214. start: a,
  215. end: o.index
  216. },
  217. right: {
  218. start: o.index,
  219. end: l
  220. },
  221. wholeMatch: {
  222. start: i,
  223. end: l
  224. }
  225. };
  226. if (d.push(f), !u) return d;
  227. }
  228. } while (s && (p.lastIndex = a));
  229. return d;
  230. };
  231. s.helper.matchRecursiveRegExp = function(e, r, t, n) {
  232. for (var s = c(e, r, t, n), a = [], o = 0; o < s.length; ++o) a.push([ e.slice(s[o].wholeMatch.start, s[o].wholeMatch.end), e.slice(s[o].match.start, s[o].match.end), e.slice(s[o].left.start, s[o].left.end), e.slice(s[o].right.start, s[o].right.end) ]);
  233. return a;
  234. }, s.helper.replaceRecursiveRegExp = function(e, r, t, n, a) {
  235. if (!s.helper.isFunction(r)) {
  236. var o = r;
  237. r = function() {
  238. return o;
  239. };
  240. }
  241. var i = c(e, t, n, a), l = e, u = i.length;
  242. if (u > 0) {
  243. var p = [];
  244. 0 !== i[0].wholeMatch.start && p.push(e.slice(0, i[0].wholeMatch.start));
  245. for (var h = 0; h < u; ++h) p.push(r(e.slice(i[h].wholeMatch.start, i[h].wholeMatch.end), e.slice(i[h].match.start, i[h].match.end), e.slice(i[h].left.start, i[h].left.end), e.slice(i[h].right.start, i[h].right.end))),
  246. h < u - 1 && p.push(e.slice(i[h].wholeMatch.end, i[h + 1].wholeMatch.start));
  247. i[u - 1].wholeMatch.end < e.length && p.push(e.slice(i[u - 1].wholeMatch.end)),
  248. l = p.join("");
  249. }
  250. return l;
  251. }, s.helper.isUndefined(console) && (console = {
  252. warn: function(e) {
  253. alert(e);
  254. },
  255. log: function(e) {
  256. alert(e);
  257. },
  258. error: function(e) {
  259. throw e;
  260. }
  261. }), s.Converter = function(e) {
  262. function t(e, t) {
  263. if (t = t || null, s.helper.isString(e)) {
  264. if (e = s.helper.stdExtName(e), t = e, s.extensions[e]) return console.warn("DEPRECATION WARNING: " + e + " is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!"),
  265. void a(s.extensions[e], e);
  266. if (s.helper.isUndefined(o[e])) throw Error('Extension "' + e + '" could not be loaded. It was either not found or is not a valid extension.');
  267. e = o[e];
  268. }
  269. "function" == typeof e && (e = e()), s.helper.isArray(e) || (e = [ e ]);
  270. var n = r(e, t);
  271. if (!n.valid) throw Error(n.error);
  272. for (var i = 0; i < e.length; ++i) {
  273. switch (e[i].type) {
  274. case "lang":
  275. h.push(e[i]);
  276. break;
  277. case "output":
  278. d.push(e[i]);
  279. }
  280. if (e[i].hasOwnProperty(f)) for (var l in e[i].listeners) e[i].listeners.hasOwnProperty(l) && c(l, e[i].listeners[l]);
  281. }
  282. }
  283. function a(e, t) {
  284. "function" == typeof e && (e = e(new s.Converter())), s.helper.isArray(e) || (e = [ e ]);
  285. var n = r(e, t);
  286. if (!n.valid) throw Error(n.error);
  287. for (var a = 0; a < e.length; ++a) switch (e[a].type) {
  288. case "lang":
  289. h.push(e[a]);
  290. break;
  291. case "output":
  292. d.push(e[a]);
  293. break;
  294. default:
  295. throw Error("Extension loader error: Type unrecognized!!!");
  296. }
  297. }
  298. function c(e, r) {
  299. if (!s.helper.isString(e)) throw Error("Invalid argument in converter.listen() method: name must be a string, but " + (void 0 === e ? "undefined" : n(e)) + " given");
  300. if ("function" != typeof r) throw Error("Invalid argument in converter.listen() method: callback must be a function, but " + (void 0 === r ? "undefined" : n(r)) + " given");
  301. f.hasOwnProperty(e) || (f[e] = []), f[e].push(r);
  302. }
  303. function u(e) {
  304. var r = e.match(/^\s*/)[0].length, t = new RegExp("^\\s{0," + r + "}", "gm");
  305. return e.replace(t, "");
  306. }
  307. var p = {}, h = [], d = [], f = {};
  308. !function() {
  309. e = e || {};
  310. for (var r in i) i.hasOwnProperty(r) && (p[r] = i[r]);
  311. if ("object" !== (void 0 === e ? "undefined" : n(e))) throw Error("Converter expects the passed parameter to be an object, but " + (void 0 === e ? "undefined" : n(e)) + " was passed instead.");
  312. for (var a in e) e.hasOwnProperty(a) && (p[a] = e[a]);
  313. p.extensions && s.helper.forEach(p.extensions, t);
  314. }(), this._dispatch = function(e, r, t, n) {
  315. if (f.hasOwnProperty(e)) for (var s = 0; s < f[e].length; ++s) {
  316. var a = f[e][s](e, r, this, t, n);
  317. a && void 0 !== a && (r = a);
  318. }
  319. return r;
  320. }, this.listen = function(e, r) {
  321. return c(e, r), this;
  322. }, this.makeHtml = function(e) {
  323. if (!e) return e;
  324. var r = {
  325. gHtmlBlocks: [],
  326. gHtmlMdBlocks: [],
  327. gHtmlSpans: [],
  328. gUrls: {},
  329. gTitles: {},
  330. gDimensions: {},
  331. gListLevel: 0,
  332. hashLinkCounts: {},
  333. langExtensions: h,
  334. outputModifiers: d,
  335. converter: this,
  336. ghCodeBlocks: []
  337. };
  338. return e = e.replace(/~/g, "~T"), e = e.replace(/\$/g, "~D"), e = e.replace(/\r\n/g, "\n"),
  339. e = e.replace(/\r/g, "\n"), p.smartIndentationFix && (e = u(e)), e = e, e = s.subParser("detab")(e, p, r),
  340. e = s.subParser("stripBlankLines")(e, p, r), s.helper.forEach(h, function(t) {
  341. e = s.subParser("runExtension")(t, e, p, r);
  342. }), e = s.subParser("hashPreCodeTags")(e, p, r), e = s.subParser("githubCodeBlocks")(e, p, r),
  343. e = s.subParser("hashHTMLBlocks")(e, p, r), e = s.subParser("hashHTMLSpans")(e, p, r),
  344. e = s.subParser("stripLinkDefinitions")(e, p, r), e = s.subParser("blockGamut")(e, p, r),
  345. e = s.subParser("unhashHTMLSpans")(e, p, r), e = s.subParser("unescapeSpecialChars")(e, p, r),
  346. e = e.replace(/~D/g, "$$"), e = e.replace(/~T/g, "~"), s.helper.forEach(d, function(t) {
  347. e = s.subParser("runExtension")(t, e, p, r);
  348. }), e;
  349. }, this.setOption = function(e, r) {
  350. p[e] = r;
  351. }, this.getOption = function(e) {
  352. return p[e];
  353. }, this.getOptions = function() {
  354. return p;
  355. }, this.addExtension = function(e, r) {
  356. t(e, r = r || null);
  357. }, this.useExtension = function(e) {
  358. t(e);
  359. }, this.setFlavor = function(e) {
  360. if (l.hasOwnProperty(e)) {
  361. var r = l[e];
  362. for (var t in r) r.hasOwnProperty(t) && (p[t] = r[t]);
  363. }
  364. }, this.removeExtension = function(e) {
  365. s.helper.isArray(e) || (e = [ e ]);
  366. for (var r = 0; r < e.length; ++r) {
  367. for (var t = e[r], n = 0; n < h.length; ++n) h[n] === t && h[n].splice(n, 1);
  368. for (;0 < d.length; ++n) d[0] === t && d[0].splice(n, 1);
  369. }
  370. }, this.getAllExtensions = function() {
  371. return {
  372. language: h,
  373. output: d
  374. };
  375. };
  376. }, s.subParser("anchors", function(e, r, t) {
  377. var n = function(e, r, n, a, o, i, l, c) {
  378. s.helper.isUndefined(c) && (c = ""), e = r;
  379. var u = n, p = a.toLowerCase(), h = o, d = c;
  380. if (!h) if (p || (p = u.toLowerCase().replace(/ ?\n/g, " ")), h = "#" + p, s.helper.isUndefined(t.gUrls[p])) {
  381. if (!(e.search(/\(\s*\)$/m) > -1)) return e;
  382. h = "";
  383. } else h = t.gUrls[p], s.helper.isUndefined(t.gTitles[p]) || (d = t.gTitles[p]);
  384. var f = '<a href="' + (h = s.helper.escapeCharacters(h, "*_", !1)) + '"';
  385. return "" !== d && null !== d && (d = d.replace(/"/g, "&quot;"), f += ' title="' + (d = s.helper.escapeCharacters(d, "*_", !1)) + '"'),
  386. f += ">" + u + "</a>";
  387. };
  388. return e = (e = t.converter._dispatch("anchors.before", e, r, t)).replace(/(\[((?:\[[^\]]*]|[^\[\]])*)][ ]?(?:\n[ ]*)?\[(.*?)])()()()()/g, n),
  389. e = e.replace(/(\[((?:\[[^\]]*]|[^\[\]])*)]\([ \t]*()<?(.*?(?:\(.*?\).*?)?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g, n),
  390. e = e.replace(/(\[([^\[\]]+)])()()()()()/g, n), e = t.converter._dispatch("anchors.after", e, r, t);
  391. }), s.subParser("autoLinks", function(e, r, t) {
  392. function n(e, r) {
  393. var t = r;
  394. return /^www\./i.test(r) && (r = r.replace(/^www\./i, "http://www.")), '<a href="' + r + '">' + t + "</a>";
  395. }
  396. function a(e, r) {
  397. var t = s.subParser("unescapeSpecialChars")(r);
  398. return s.subParser("encodeEmailAddress")(t);
  399. }
  400. var o = /\b(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+)(?=\s|$)(?!["<>])/gi, i = /<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)>/gi, l = /(?:^|[ \n\t])([A-Za-z0-9!#$%&'*+-/=?^_`\{|}~\.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?:$|[ \n\t])/gi, c = /<(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi;
  401. return e = (e = t.converter._dispatch("autoLinks.before", e, r, t)).replace(i, n),
  402. e = e.replace(c, a), r.simplifiedAutoLink && (e = (e = e.replace(o, n)).replace(l, a)),
  403. e = t.converter._dispatch("autoLinks.after", e, r, t);
  404. }), s.subParser("blockGamut", function(e, r, t) {
  405. e = t.converter._dispatch("blockGamut.before", e, r, t), e = s.subParser("blockQuotes")(e, r, t),
  406. e = s.subParser("headers")(e, r, t);
  407. var n = s.subParser("hashBlock")("<hr />", r, t);
  408. return e = e.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm, n), e = e.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm, n),
  409. e = e.replace(/^[ ]{0,2}([ ]?_[ ]?){3,}[ \t]*$/gm, n), e = s.subParser("lists")(e, r, t),
  410. e = s.subParser("codeBlocks")(e, r, t), e = s.subParser("tables")(e, r, t), e = s.subParser("hashHTMLBlocks")(e, r, t),
  411. e = s.subParser("paragraphs")(e, r, t), e = t.converter._dispatch("blockGamut.after", e, r, t);
  412. }), s.subParser("blockQuotes", function(e, r, t) {
  413. return e = t.converter._dispatch("blockQuotes.before", e, r, t), e = e.replace(/((^[ \t]{0,3}>[ \t]?.+\n(.+\n)*\n*)+)/gm, function(e, n) {
  414. var a = n;
  415. return a = a.replace(/^[ \t]*>[ \t]?/gm, "~0"), a = a.replace(/~0/g, ""), a = a.replace(/^[ \t]+$/gm, ""),
  416. a = s.subParser("githubCodeBlocks")(a, r, t), a = s.subParser("blockGamut")(a, r, t),
  417. a = a.replace(/(^|\n)/g, "$1 "), a = a.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm, function(e, r) {
  418. var t = r;
  419. return t = t.replace(/^ /gm, "~0"), t = t.replace(/~0/g, "");
  420. }), s.subParser("hashBlock")("<blockquote>\n" + a + "\n</blockquote>", r, t);
  421. }), e = t.converter._dispatch("blockQuotes.after", e, r, t);
  422. }), s.subParser("codeBlocks", function(e, r, t) {
  423. e = t.converter._dispatch("codeBlocks.before", e, r, t);
  424. var n = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g;
  425. return e = (e += "~0").replace(n, function(e, n, a) {
  426. var o = n, i = a, l = "\n";
  427. return o = s.subParser("outdent")(o), o = s.subParser("encodeCode")(o), o = s.subParser("detab")(o),
  428. o = o.replace(/^\n+/g, ""), o = o.replace(/\n+$/g, ""), r.omitExtraWLInCodeBlocks && (l = ""),
  429. o = "<pre><code>" + o + l + "</code></pre>", s.subParser("hashBlock")(o, r, t) + i;
  430. }), e = e.replace(/~0/, ""), e = t.converter._dispatch("codeBlocks.after", e, r, t);
  431. }), s.subParser("codeSpans", function(e, r, t) {
  432. return void 0 === (e = t.converter._dispatch("codeSpans.before", e, r, t)) && (e = ""),
  433. e = e.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, function(e, r, t, n) {
  434. var a = n;
  435. return a = a.replace(/^([ \t]*)/g, ""), a = a.replace(/[ \t]*$/g, ""), a = s.subParser("encodeCode")(a),
  436. r + "<code>" + a + "</code>";
  437. }), e = t.converter._dispatch("codeSpans.after", e, r, t);
  438. }), s.subParser("detab", function(e) {
  439. return e = e.replace(/\t(?=\t)/g, " "), e = e.replace(/\t/g, "~A~B"), e = e.replace(/~B(.+?)~A/g, function(e, r) {
  440. for (var t = r, n = 4 - t.length % 4, s = 0; s < n; s++) t += " ";
  441. return t;
  442. }), e = e.replace(/~A/g, " "), e = e.replace(/~B/g, "");
  443. }), s.subParser("encodeAmpsAndAngles", function(e) {
  444. return e = e.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, "&amp;"), e = e.replace(/<(?![a-z\/?\$!])/gi, "&lt;");
  445. }), s.subParser("encodeBackslashEscapes", function(e) {
  446. return e = e.replace(/\\(\\)/g, s.helper.escapeCharactersCallback), e = e.replace(/\\([`*_{}\[\]()>#+-.!])/g, s.helper.escapeCharactersCallback);
  447. }), s.subParser("encodeCode", function(e) {
  448. return e = e.replace(/&/g, "&amp;"), e = e.replace(/</g, "&lt;"), e = e.replace(/>/g, "&gt;"),
  449. e = s.helper.escapeCharacters(e, "*_{}[]\\", !1);
  450. }), s.subParser("encodeEmailAddress", function(e) {
  451. var r = [ function(e) {
  452. return "&#" + e.charCodeAt(0) + ";";
  453. }, function(e) {
  454. return "&#x" + e.charCodeAt(0).toString(16) + ";";
  455. }, function(e) {
  456. return e;
  457. } ];
  458. return e = "mailto:" + e, e = e.replace(/./g, function(e) {
  459. if ("@" === e) e = r[Math.floor(2 * Math.random())](e); else if (":" !== e) {
  460. var t = Math.random();
  461. e = t > .9 ? r[2](e) : t > .45 ? r[1](e) : r[0](e);
  462. }
  463. return e;
  464. }), e = '<a href="' + e + '">' + e + "</a>", e = e.replace(/">.+:/g, '">');
  465. }), s.subParser("escapeSpecialCharsWithinTagAttributes", function(e) {
  466. var r = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi;
  467. return e = e.replace(r, function(e) {
  468. var r = e.replace(/(.)<\/?code>(?=.)/g, "$1`");
  469. return r = s.helper.escapeCharacters(r, "\\`*_", !1);
  470. });
  471. }), s.subParser("githubCodeBlocks", function(e, r, t) {
  472. return r.ghCodeBlocks ? (e = t.converter._dispatch("githubCodeBlocks.before", e, r, t),
  473. e += "~0", e = e.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g, function(e, n, a) {
  474. var o = r.omitExtraWLInCodeBlocks ? "" : "\n";
  475. return a = s.subParser("encodeCode")(a), a = s.subParser("detab")(a), a = a.replace(/^\n+/g, ""),
  476. a = a.replace(/\n+$/g, ""), a = "<pre><code" + (n ? ' class="' + n + " language-" + n + '"' : "") + ">" + a + o + "</code></pre>",
  477. a = s.subParser("hashBlock")(a, r, t), "\n\n~G" + (t.ghCodeBlocks.push({
  478. text: e,
  479. codeblock: a
  480. }) - 1) + "G\n\n";
  481. }), e = e.replace(/~0/, ""), t.converter._dispatch("githubCodeBlocks.after", e, r, t)) : e;
  482. }), s.subParser("hashBlock", function(e, r, t) {
  483. return e = e.replace(/(^\n+|\n+$)/g, ""), "\n\n~K" + (t.gHtmlBlocks.push(e) - 1) + "K\n\n";
  484. }), s.subParser("hashElement", function(e, r, t) {
  485. return function(e, r) {
  486. var n = r;
  487. return n = n.replace(/\n\n/g, "\n"), n = n.replace(/^\n/, ""), n = n.replace(/\n+$/g, ""),
  488. n = "\n\n~K" + (t.gHtmlBlocks.push(n) - 1) + "K\n\n";
  489. };
  490. }), s.subParser("hashHTMLBlocks", function(e, r, t) {
  491. for (var n = [ "pre", "div", "h1", "h2", "h3", "h4", "h5", "h6", "blockquote", "table", "dl", "ol", "ul", "script", "noscript", "form", "fieldset", "iframe", "math", "style", "section", "header", "footer", "nav", "article", "aside", "address", "audio", "canvas", "figure", "hgroup", "output", "video", "p" ], a = 0; a < n.length; ++a) e = s.helper.replaceRecursiveRegExp(e, function(e, r, n, s) {
  492. var a = e;
  493. return -1 !== n.search(/\bmarkdown\b/) && (a = n + t.converter.makeHtml(r) + s),
  494. "\n\n~K" + (t.gHtmlBlocks.push(a) - 1) + "K\n\n";
  495. }, "^(?: |\\t){0,3}<" + n[a] + "\\b[^>]*>", "</" + n[a] + ">", "gim");
  496. return e = e.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g, s.subParser("hashElement")(e, r, t)),
  497. e = e.replace(/(<!--[\s\S]*?-->)/g, s.subParser("hashElement")(e, r, t)), e = e.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g, s.subParser("hashElement")(e, r, t));
  498. }), s.subParser("hashHTMLSpans", function(e, r, t) {
  499. for (var n = s.helper.matchRecursiveRegExp(e, "<code\\b[^>]*>", "</code>", "gi"), a = 0; a < n.length; ++a) e = e.replace(n[a][0], "~L" + (t.gHtmlSpans.push(n[a][0]) - 1) + "L");
  500. return e;
  501. }), s.subParser("unhashHTMLSpans", function(e, r, t) {
  502. for (var n = 0; n < t.gHtmlSpans.length; ++n) e = e.replace("~L" + n + "L", t.gHtmlSpans[n]);
  503. return e;
  504. }), s.subParser("hashPreCodeTags", function(e, r, t) {
  505. return e = s.helper.replaceRecursiveRegExp(e, function(e, r, n, a) {
  506. var o = n + s.subParser("encodeCode")(r) + a;
  507. return "\n\n~G" + (t.ghCodeBlocks.push({
  508. text: e,
  509. codeblock: o
  510. }) - 1) + "G\n\n";
  511. }, "^(?: |\\t){0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>", "^(?: |\\t){0,3}</code>\\s*</pre>", "gim");
  512. }), s.subParser("headers", function(e, r, t) {
  513. function n(e) {
  514. var r, n = e.replace(/[^\w]/g, "").toLowerCase();
  515. return t.hashLinkCounts[n] ? r = n + "-" + t.hashLinkCounts[n]++ : (r = n, t.hashLinkCounts[n] = 1),
  516. !0 === a && (a = "section"), s.helper.isString(a) ? a + r : r;
  517. }
  518. e = t.converter._dispatch("headers.before", e, r, t);
  519. var a = r.prefixHeaderId, o = isNaN(parseInt(r.headerLevelStart)) ? 1 : parseInt(r.headerLevelStart), i = r.smoothLivePreview ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm, l = r.smoothLivePreview ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
  520. return e = e.replace(i, function(e, a) {
  521. var i = s.subParser("spanGamut")(a, r, t), l = r.noHeaderId ? "" : ' id="' + n(a) + '"', c = o, u = "<h" + c + l + ">" + i + "</h" + c + ">";
  522. return s.subParser("hashBlock")(u, r, t);
  523. }), e = e.replace(l, function(e, a) {
  524. var i = s.subParser("spanGamut")(a, r, t), l = r.noHeaderId ? "" : ' id="' + n(a) + '"', c = o + 1, u = "<h" + c + l + ">" + i + "</h" + c + ">";
  525. return s.subParser("hashBlock")(u, r, t);
  526. }), e = e.replace(/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm, function(e, a, i) {
  527. var l = s.subParser("spanGamut")(i, r, t), c = r.noHeaderId ? "" : ' id="' + n(i) + '"', u = o - 1 + a.length, p = "<h" + u + c + ">" + l + "</h" + u + ">";
  528. return s.subParser("hashBlock")(p, r, t);
  529. }), e = t.converter._dispatch("headers.after", e, r, t);
  530. }), s.subParser("images", function(e, r, t) {
  531. function n(e, r, n, a, o, i, l, c) {
  532. var u = t.gUrls, p = t.gTitles, h = t.gDimensions;
  533. if (n = n.toLowerCase(), c || (c = ""), "" === a || null === a) {
  534. if ("" !== n && null !== n || (n = r.toLowerCase().replace(/ ?\n/g, " ")), a = "#" + n,
  535. s.helper.isUndefined(u[n])) return e;
  536. a = u[n], s.helper.isUndefined(p[n]) || (c = p[n]), s.helper.isUndefined(h[n]) || (o = h[n].width,
  537. i = h[n].height);
  538. }
  539. r = r.replace(/"/g, "&quot;"), r = s.helper.escapeCharacters(r, "*_", !1);
  540. var d = '<img.vue src="' + (a = s.helper.escapeCharacters(a, "*_", !1)) + '" alt="' + r + '"';
  541. return c && (c = c.replace(/"/g, "&quot;"), d += ' title="' + (c = s.helper.escapeCharacters(c, "*_", !1)) + '"'),
  542. o && i && (d += ' width="' + (o = "*" === o ? "auto" : o) + '"', d += ' height="' + (i = "*" === i ? "auto" : i) + '"'),
  543. d += " />";
  544. }
  545. var a = /!\[(.*?)]\s?\([ \t]*()<?(\S+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(['"])(.*?)\6[ \t]*)?\)/g, o = /!\[([^\]]*?)] ?(?:\n *)?\[(.*?)]()()()()()/g;
  546. return e = (e = t.converter._dispatch("images.before", e, r, t)).replace(o, n),
  547. e = e.replace(a, n), e = t.converter._dispatch("images.after", e, r, t);
  548. }), s.subParser("italicsAndBold", function(e, r, t) {
  549. return e = t.converter._dispatch("italicsAndBold.before", e, r, t), e = r.literalMidWordUnderscores ? (e = (e = (e = e.replace(/(^|\s|>|\b)__(?=\S)([\s\S]+?)__(?=\b|<|\s|$)/gm, "$1<strong>$2</strong>")).replace(/(^|\s|>|\b)_(?=\S)([\s\S]+?)_(?=\b|<|\s|$)/gm, "$1<em>$2</em>")).replace(/(\*\*)(?=\S)([^\r]*?\S[*]*)\1/g, "<strong>$2</strong>")).replace(/(\*)(?=\S)([^\r]*?\S)\1/g, "<em>$2</em>") : (e = e.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g, "<strong>$2</strong>")).replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g, "<em>$2</em>"),
  550. e = t.converter._dispatch("italicsAndBold.after", e, r, t);
  551. }), s.subParser("lists", function(e, r, t) {
  552. function n(e, n) {
  553. t.gListLevel++, e = e.replace(/\n{2,}$/, "\n"), e += "~0";
  554. var a = /(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm, o = /\n[ \t]*\n(?!~0)/.test(e);
  555. return e = e.replace(a, function(e, n, a, i, l, c, u) {
  556. u = u && "" !== u.trim();
  557. var p = s.subParser("outdent")(l, r, t), h = "";
  558. return c && r.tasklists && (h = ' class="task-list-item" style="list-style-type: none;"',
  559. p = p.replace(/^[ \t]*\[(x|X| )?]/m, function() {
  560. var e = '<input type="checkbox" disabled style="margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;"';
  561. return u && (e += " checked"), e += ">";
  562. })), n || p.search(/\n{2,}/) > -1 ? (p = s.subParser("githubCodeBlocks")(p, r, t),
  563. p = s.subParser("blockGamut")(p, r, t)) : (p = (p = s.subParser("lists")(p, r, t)).replace(/\n$/, ""),
  564. p = o ? s.subParser("paragraphs")(p, r, t) : s.subParser("spanGamut")(p, r, t)),
  565. p = "\n<li" + h + ">" + p + "</li>\n";
  566. }), e = e.replace(/~0/g, ""), t.gListLevel--, n && (e = e.replace(/\s+$/, "")),
  567. e;
  568. }
  569. function a(e, r, t) {
  570. var s = "ul" === r ? /^ {0,2}\d+\.[ \t]/gm : /^ {0,2}[*+-][ \t]/gm, a = [], o = "";
  571. if (-1 !== e.search(s)) {
  572. !function e(a) {
  573. var i = a.search(s);
  574. -1 !== i ? (o += "\n\n<" + r + ">" + n(a.slice(0, i), !!t) + "</" + r + ">\n\n",
  575. s = "ul" === (r = "ul" === r ? "ol" : "ul") ? /^ {0,2}\d+\.[ \t]/gm : /^ {0,2}[*+-][ \t]/gm,
  576. e(a.slice(i))) : o += "\n\n<" + r + ">" + n(a, !!t) + "</" + r + ">\n\n";
  577. }(e);
  578. for (var i = 0; i < a.length; ++i) ;
  579. } else o = "\n\n<" + r + ">" + n(e, !!t) + "</" + r + ">\n\n";
  580. return o;
  581. }
  582. e = t.converter._dispatch("lists.before", e, r, t), e += "~0";
  583. var o = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;
  584. return t.gListLevel ? e = e.replace(o, function(e, r, t) {
  585. return a(r, t.search(/[*+-]/g) > -1 ? "ul" : "ol", !0);
  586. }) : (o = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
  587. e = e.replace(o, function(e, r, t, n) {
  588. return a(t, n.search(/[*+-]/g) > -1 ? "ul" : "ol");
  589. })), e = e.replace(/~0/, ""), e = t.converter._dispatch("lists.after", e, r, t);
  590. }), s.subParser("outdent", function(e) {
  591. return e = e.replace(/^(\t|[ ]{1,4})/gm, "~0"), e = e.replace(/~0/g, "");
  592. }), s.subParser("paragraphs", function(e, r, t) {
  593. for (var n = (e = (e = (e = t.converter._dispatch("paragraphs.before", e, r, t)).replace(/^\n+/g, "")).replace(/\n+$/g, "")).split(/\n{2,}/g), a = [], o = n.length, i = 0; i < o; i++) {
  594. var l = n[i];
  595. l.search(/~(K|G)(\d+)\1/g) >= 0 ? a.push(l) : (l = (l = s.subParser("spanGamut")(l, r, t)).replace(/^([ \t]*)/g, "<p>"),
  596. l += "</p>", a.push(l));
  597. }
  598. for (o = a.length, i = 0; i < o; i++) {
  599. for (var c = "", u = a[i], p = !1; u.search(/~(K|G)(\d+)\1/) >= 0; ) {
  600. var h = RegExp.$1, d = RegExp.$2;
  601. c = (c = "K" === h ? t.gHtmlBlocks[d] : p ? s.subParser("encodeCode")(t.ghCodeBlocks[d].text) : t.ghCodeBlocks[d].codeblock).replace(/\$/g, "$$$$"),
  602. u = u.replace(/(\n\n)?~(K|G)\d+\2(\n\n)?/, c), /^<pre\b[^>]*>\s*<code\b[^>]*>/.test(u) && (p = !0);
  603. }
  604. a[i] = u;
  605. }
  606. return e = a.join("\n\n"), e = e.replace(/^\n+/g, ""), e = e.replace(/\n+$/g, ""),
  607. t.converter._dispatch("paragraphs.after", e, r, t);
  608. }), s.subParser("runExtension", function(e, r, t, n) {
  609. if (e.filter) r = e.filter(r, n.converter, t); else if (e.regex) {
  610. var s = e.regex;
  611. !s instanceof RegExp && (s = new RegExp(s, "g")), r = r.replace(s, e.replace);
  612. }
  613. return r;
  614. }), s.subParser("spanGamut", function(e, r, t) {
  615. return e = t.converter._dispatch("spanGamut.before", e, r, t), e = s.subParser("codeSpans")(e, r, t),
  616. e = s.subParser("escapeSpecialCharsWithinTagAttributes")(e, r, t), e = s.subParser("encodeBackslashEscapes")(e, r, t),
  617. e = s.subParser("images")(e, r, t), e = s.subParser("anchors")(e, r, t), e = s.subParser("autoLinks")(e, r, t),
  618. e = s.subParser("encodeAmpsAndAngles")(e, r, t), e = s.subParser("italicsAndBold")(e, r, t),
  619. e = s.subParser("strikethrough")(e, r, t), e = e.replace(/ +\n/g, " <br />\n"),
  620. e = t.converter._dispatch("spanGamut.after", e, r, t);
  621. }), s.subParser("strikethrough", function(e, r, t) {
  622. return r.strikethrough && (e = (e = t.converter._dispatch("strikethrough.before", e, r, t)).replace(/(?:~T){2}([\s\S]+?)(?:~T){2}/g, "<del>$1</del>"),
  623. e = t.converter._dispatch("strikethrough.after", e, r, t)), e;
  624. }), s.subParser("stripBlankLines", function(e) {
  625. return e.replace(/^[ \t]+$/gm, "");
  626. }), s.subParser("stripLinkDefinitions", function(e, r, t) {
  627. var n = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?(\S+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=~0))/gm;
  628. return e += "~0", e = e.replace(n, function(e, n, a, o, i, l, c) {
  629. return n = n.toLowerCase(), t.gUrls[n] = s.subParser("encodeAmpsAndAngles")(a),
  630. l ? l + c : (c && (t.gTitles[n] = c.replace(/"|'/g, "&quot;")), r.parseImgDimensions && o && i && (t.gDimensions[n] = {
  631. width: o,
  632. height: i
  633. }), "");
  634. }), e = e.replace(/~0/, "");
  635. }), s.subParser("tables", function(e, r, t) {
  636. function n(e) {
  637. return /^:[ \t]*--*$/.test(e) ? ' style="text-align:left;"' : /^--*[ \t]*:[ \t]*$/.test(e) ? ' style="text-align:right;"' : /^:[ \t]*--*[ \t]*:$/.test(e) ? ' style="text-align:center;"' : "";
  638. }
  639. function a(e, n) {
  640. var a = "";
  641. return e = e.trim(), r.tableHeaderId && (a = ' id="' + e.replace(/ /g, "_").toLowerCase() + '"'),
  642. e = s.subParser("spanGamut")(e, r, t), "<th" + a + n + ">" + e + "</th>\n";
  643. }
  644. function o(e, n) {
  645. return "<td" + n + ">" + s.subParser("spanGamut")(e, r, t) + "</td>\n";
  646. }
  647. function i(e, r) {
  648. for (var t = "<table>\n<thead>\n<tr>\n", n = e.length, s = 0; s < n; ++s) t += e[s];
  649. for (t += "</tr>\n</thead>\n<tbody>\n", s = 0; s < r.length; ++s) {
  650. t += "<tr>\n";
  651. for (var a = 0; a < n; ++a) t += r[s][a];
  652. t += "</tr>\n";
  653. }
  654. return t += "</tbody>\n</table>\n";
  655. }
  656. if (!r.tables) return e;
  657. var l = /^[ \t]{0,3}\|?.+\|.+\n[ \t]{0,3}\|?[ \t]*:?[ \t]*(?:-|=){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:-|=){2,}[\s\S]+?(?:\n\n|~0)/gm;
  658. return e = t.converter._dispatch("tables.before", e, r, t), e = e.replace(l, function(e) {
  659. var r, t = e.split("\n");
  660. for (r = 0; r < t.length; ++r) /^[ \t]{0,3}\|/.test(t[r]) && (t[r] = t[r].replace(/^[ \t]{0,3}\|/, "")),
  661. /\|[ \t]*$/.test(t[r]) && (t[r] = t[r].replace(/\|[ \t]*$/, ""));
  662. var l = t[0].split("|").map(function(e) {
  663. return e.trim();
  664. }), c = t[1].split("|").map(function(e) {
  665. return e.trim();
  666. }), u = [], p = [], h = [], d = [];
  667. for (t.shift(), t.shift(), r = 0; r < t.length; ++r) "" !== t[r].trim() && u.push(t[r].split("|").map(function(e) {
  668. return e.trim();
  669. }));
  670. if (l.length < c.length) return e;
  671. for (r = 0; r < c.length; ++r) h.push(n(c[r]));
  672. for (r = 0; r < l.length; ++r) s.helper.isUndefined(h[r]) && (h[r] = ""), p.push(a(l[r], h[r]));
  673. for (r = 0; r < u.length; ++r) {
  674. for (var f = [], g = 0; g < p.length; ++g) s.helper.isUndefined(u[r][g]), f.push(o(u[r][g], h[g]));
  675. d.push(f);
  676. }
  677. return i(p, d);
  678. }), e = t.converter._dispatch("tables.after", e, r, t);
  679. }), s.subParser("unescapeSpecialChars", function(e) {
  680. return e = e.replace(/~E(\d+)E/g, function(e, r) {
  681. var t = parseInt(r);
  682. return String.fromCharCode(t);
  683. });
  684. }), module.exports = s;