`;
}
tablecell(t) {
let e = this.parser.parseInline(t.tokens), n = t.header ? "th" : "td";
return (t.align ? `<${n} align="${t.align}">` : `<${n}>`) + e + `${n}>
`;
}
strong({ tokens: t }) {
return `${this.parser.parseInline(t)}`;
}
em({ tokens: t }) {
return `${this.parser.parseInline(t)}`;
}
codespan({ text: t }) {
return `${z(t, !0)}`;
}
br(t) {
return " ";
}
del({ tokens: t }) {
return `${this.parser.parseInline(t)}`;
}
link({ href: t, title: e, tokens: n }) {
let s = this.parser.parseInline(n), r = ae(t);
if (r === null) return s;
t = r;
let a = '" + s + "", a;
}
image({ href: t, title: e, text: n, tokens: s }) {
s && (n = this.parser.parseInline(s, this.parser.textRenderer));
let r = ae(t);
if (r === null) return z(n);
t = r;
let a = `", a;
}
text(t) {
return "tokens" in t && t.tokens ? this.parser.parseInline(t.tokens) : "escaped" in t && t.escaped ? t.text : z(t.text);
}
}, re = class {
strong({ text: t }) {
return t;
}
em({ text: t }) {
return t;
}
codespan({ text: t }) {
return t;
}
del({ text: t }) {
return t;
}
html({ text: t }) {
return t;
}
text({ text: t }) {
return t;
}
link({ text: t }) {
return "" + t;
}
image({ text: t }) {
return "" + t;
}
br() {
return "";
}
checkbox({ raw: t }) {
return t;
}
}, _ = class G {
options;
renderer;
textRenderer;
constructor(e) {
this.options = e || I, this.options.renderer = this.options.renderer || new Z(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new re();
}
static parse(e, n) {
return new G(n).parse(e);
}
static parseInline(e, n) {
return new G(n).parseInline(e);
}
parse(e) {
let n = "";
for (let s = 0; s < e.length; s++) {
let r = e[s];
if (this.options.extensions?.renderers?.[r.type]) {
let l = r, c = this.options.extensions.renderers[l.type].call({ parser: this }, l);
if (c !== !1 || !["space", "hr", "heading", "code", "table", "blockquote", "list", "html", "def", "paragraph", "text"].includes(l.type)) {
n += c || "";
continue;
}
}
let a = r;
switch (a.type) {
case "space": {
n += this.renderer.space(a);
break;
}
case "hr": {
n += this.renderer.hr(a);
break;
}
case "heading": {
n += this.renderer.heading(a);
break;
}
case "code": {
n += this.renderer.code(a);
break;
}
case "table": {
n += this.renderer.table(a);
break;
}
case "blockquote": {
n += this.renderer.blockquote(a);
break;
}
case "list": {
n += this.renderer.list(a);
break;
}
case "checkbox": {
n += this.renderer.checkbox(a);
break;
}
case "html": {
n += this.renderer.html(a);
break;
}
case "def": {
n += this.renderer.def(a);
break;
}
case "paragraph": {
n += this.renderer.paragraph(a);
break;
}
case "text": {
n += this.renderer.text(a);
break;
}
default: {
let l = 'Token with "' + a.type + '" type was not found.';
if (this.options.silent) return console.error(l), "";
throw new Error(l);
}
}
}
return n;
}
parseInline(e, n = this.renderer) {
let s = "";
for (let r = 0; r < e.length; r++) {
let a = e[r];
if (this.options.extensions?.renderers?.[a.type]) {
let c = this.options.extensions.renderers[a.type].call({ parser: this }, a);
if (c !== !1 || !["escape", "html", "link", "image", "strong", "em", "codespan", "br", "del", "text"].includes(a.type)) {
s += c || "";
continue;
}
}
let l = a;
switch (l.type) {
case "escape": {
s += n.text(l);
break;
}
case "html": {
s += n.html(l);
break;
}
case "link": {
s += n.link(l);
break;
}
case "image": {
s += n.image(l);
break;
}
case "checkbox": {
s += n.checkbox(l);
break;
}
case "strong": {
s += n.strong(l);
break;
}
case "em": {
s += n.em(l);
break;
}
case "codespan": {
s += n.codespan(l);
break;
}
case "br": {
s += n.br(l);
break;
}
case "del": {
s += n.del(l);
break;
}
case "text": {
s += n.text(l);
break;
}
default: {
let c = 'Token with "' + l.type + '" type was not found.';
if (this.options.silent) return console.error(c), "";
throw new Error(c);
}
}
}
return s;
}
}, B = class {
options;
block;
constructor(t) {
this.options = t || I;
}
static passThroughHooks = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens", "emStrongMask"]);
static passThroughHooksRespectAsync = /* @__PURE__ */ new Set(["preprocess", "postprocess", "processAllTokens"]);
preprocess(t) {
return t;
}
postprocess(t) {
return t;
}
processAllTokens(t) {
return t;
}
emStrongMask(t) {
return t;
}
provideLexer() {
return this.block ? E.lex : E.lexInline;
}
provideParser() {
return this.block ? _.parse : _.parseInline;
}
}, Re = class {
defaults = X();
options = this.setOptions;
parse = this.parseMarkdown(!0);
parseInline = this.parseMarkdown(!1);
Parser = _;
Renderer = Z;
TextRenderer = re;
Lexer = E;
Tokenizer = H;
Hooks = B;
constructor(...t) {
this.use(...t);
}
walkTokens(t, e) {
let n = [];
for (let s of t) switch (n = n.concat(e.call(this, s)), s.type) {
case "table": {
let r = s;
for (let a of r.header) n = n.concat(this.walkTokens(a.tokens, e));
for (let a of r.rows) for (let l of a) n = n.concat(this.walkTokens(l.tokens, e));
break;
}
case "list": {
let r = s;
n = n.concat(this.walkTokens(r.items, e));
break;
}
default: {
let r = s;
this.defaults.extensions?.childTokens?.[r.type] ? this.defaults.extensions.childTokens[r.type].forEach((a) => {
let l = r[a].flat(1 / 0);
n = n.concat(this.walkTokens(l, e));
}) : r.tokens && (n = n.concat(this.walkTokens(r.tokens, e)));
}
}
return n;
}
use(...t) {
let e = this.defaults.extensions || { renderers: {}, childTokens: {} };
return t.forEach((n) => {
let s = { ...n };
if (s.async = this.defaults.async || s.async || !1, n.extensions && (n.extensions.forEach((r) => {
if (!r.name) throw new Error("extension name required");
if ("renderer" in r) {
let a = e.renderers[r.name];
a ? e.renderers[r.name] = function(...l) {
let c = r.renderer.apply(this, l);
return c === !1 && (c = a.apply(this, l)), c;
} : e.renderers[r.name] = r.renderer;
}
if ("tokenizer" in r) {
if (!r.level || r.level !== "block" && r.level !== "inline") throw new Error("extension level must be 'block' or 'inline'");
let a = e[r.level];
a ? a.unshift(r.tokenizer) : e[r.level] = [r.tokenizer], r.start && (r.level === "block" ? e.startBlock ? e.startBlock.push(r.start) : e.startBlock = [r.start] : r.level === "inline" && (e.startInline ? e.startInline.push(r.start) : e.startInline = [r.start]));
}
"childTokens" in r && r.childTokens && (e.childTokens[r.name] = r.childTokens);
}), s.extensions = e), n.renderer) {
let r = this.defaults.renderer || new Z(this.defaults);
for (let a in n.renderer) {
if (!(a in r)) throw new Error(`renderer '${a}' does not exist`);
if (["options", "parser"].includes(a)) continue;
let l = a, c = n.renderer[l], i = r[l];
r[l] = (...u) => {
let h = c.apply(r, u);
return h === !1 && (h = i.apply(r, u)), h || "";
};
}
s.renderer = r;
}
if (n.tokenizer) {
let r = this.defaults.tokenizer || new H(this.defaults);
for (let a in n.tokenizer) {
if (!(a in r)) throw new Error(`tokenizer '${a}' does not exist`);
if (["options", "rules", "lexer"].includes(a)) continue;
let l = a, c = n.tokenizer[l], i = r[l];
r[l] = (...u) => {
let h = c.apply(r, u);
return h === !1 && (h = i.apply(r, u)), h;
};
}
s.tokenizer = r;
}
if (n.hooks) {
let r = this.defaults.hooks || new B();
for (let a in n.hooks) {
if (!(a in r)) throw new Error(`hook '${a}' does not exist`);
if (["options", "block"].includes(a)) continue;
let l = a, c = n.hooks[l], i = r[l];
B.passThroughHooks.has(a) ? r[l] = (u) => {
if (this.defaults.async && B.passThroughHooksRespectAsync.has(a)) return (async () => {
let x = await c.call(r, u);
return i.call(r, x);
})();
let h = c.call(r, u);
return i.call(r, h);
} : r[l] = (...u) => {
if (this.defaults.async) return (async () => {
let x = await c.apply(r, u);
return x === !1 && (x = await i.apply(r, u)), x;
})();
let h = c.apply(r, u);
return h === !1 && (h = i.apply(r, u)), h;
};
}
s.hooks = r;
}
if (n.walkTokens) {
let r = this.defaults.walkTokens, a = n.walkTokens;
s.walkTokens = function(l) {
let c = [];
return c.push(a.call(this, l)), r && (c = c.concat(r.call(this, l))), c;
};
}
this.defaults = { ...this.defaults, ...s };
}), this;
}
setOptions(t) {
return this.defaults = { ...this.defaults, ...t }, this;
}
lexer(t, e) {
return E.lex(t, e ?? this.defaults);
}
parser(t, e) {
return _.parse(t, e ?? this.defaults);
}
parseMarkdown(t) {
return (e, n) => {
let s = { ...n }, r = { ...this.defaults, ...s }, a = this.onError(!!r.silent, !!r.async);
if (this.defaults.async === !0 && s.async === !1) return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
if (typeof e > "u" || e === null) return a(new Error("marked(): input parameter is undefined or null"));
if (typeof e != "string") return a(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(e) + ", string expected"));
if (r.hooks && (r.hooks.options = r, r.hooks.block = t), r.async) return (async () => {
let l = r.hooks ? await r.hooks.preprocess(e) : e, c = await (r.hooks ? await r.hooks.provideLexer() : t ? E.lex : E.lexInline)(l, r), i = r.hooks ? await r.hooks.processAllTokens(c) : c;
r.walkTokens && await Promise.all(this.walkTokens(i, r.walkTokens));
let u = await (r.hooks ? await r.hooks.provideParser() : t ? _.parse : _.parseInline)(i, r);
return r.hooks ? await r.hooks.postprocess(u) : u;
})().catch(a);
try {
r.hooks && (e = r.hooks.preprocess(e));
let l = (r.hooks ? r.hooks.provideLexer() : t ? E.lex : E.lexInline)(e, r);
r.hooks && (l = r.hooks.processAllTokens(l)), r.walkTokens && this.walkTokens(l, r.walkTokens);
let c = (r.hooks ? r.hooks.provideParser() : t ? _.parse : _.parseInline)(l, r);
return r.hooks && (c = r.hooks.postprocess(c)), c;
} catch (l) {
return a(l);
}
};
}
onError(t, e) {
return (n) => {
if (n.message += `
Please report this to https://github.com/markedjs/marked.`, t) {
let s = "
An error occurred:
" + z(n.message + "", !0) + "
";
return e ? Promise.resolve(s) : s;
}
if (e) return Promise.reject(n);
throw n;
};
}
}, L = new Re();
function S(t, e) {
return L.parse(t, e);
}
S.options = S.setOptions = function(t) {
return L.setOptions(t), S.defaults = L.defaults, pe(S.defaults), S;
};
S.getDefaults = X;
S.defaults = I;
S.use = function(...t) {
return L.use(...t), S.defaults = L.defaults, pe(S.defaults), S;
};
S.walkTokens = function(t, e) {
return L.walkTokens(t, e);
};
S.parseInline = L.parseInline;
S.Parser = _;
S.parser = _.parse;
S.Renderer = Z;
S.TextRenderer = re;
S.Lexer = E;
S.lexer = E.lex;
S.Tokenizer = H;
S.Hooks = B;
S.parse = S;
S.options;
S.setOptions;
S.use;
S.walkTokens;
S.parseInline;
_.parse;
E.lex;
const gt = /<(\/?)(?:pre|code|kbd|script|math)[^>]*>/i, dt = (t = "", e = "1") => {
var n, s, r, a, l, c = 0;
if (typeof e == "number" ? e = e.toString() : e = e.replace(/\s/g, ""), e === "0")
return t;
if (e === "1")
n = 1, s = 1, r = 1, a = 1;
else if (e === "2")
n = 1, s = 1, r = 2, a = 1;
else if (e === "3")
n = 1, s = 1, r = 3, a = 1;
else if (e === "-1")
l = 1;
else
for (let f = 0; f < e.length; f++) {
let p = e[f];
p === "q" && (n = 1), p === "b" && (s = 1), p === "B" && (s = 2), p === "d" && (r = 1), p === "D" && (r = 2), p === "i" && (r = 3), p === "e" && (a = 1), p === "w" && (c = 1);
}
var i = $t(t), u = "", h = 0, x = "";
for (let f = 0; f < i.length; f++) {
let p = i[f];
if (p[0] === "tag") {
u = u + p[1];
let o = gt.exec(p[1]);
o && (o[1] === "/" ? h = 0 : h = 1);
} else {
let o = p[1], g = o.substring(o.length - 1, o.length);
h || (o = yt(o), c && (o = o.replace(/$quot;/g, '"')), r && (r === 1 && (o = bt(o)), r === 2 && (o = mt(o)), r === 3 && (o = wt(o))), a && (o = St(o)), s && (o = kt(o), s === 2 && (o = xt(o))), n && (o === "'" ? /\S/.test(x) ? o = "’" : o = "‘" : o === '"' ? /\S/.test(x) ? o = "”" : o = "“" : o = ft(o)), l && (o = Rt(o))), x = g, u = u + o;
}
}
return u;
}, ft = (t) => {
var e = "[!\"#$%'()*+,-./:;<=>?@[\\]^_`{|}~]";
t = t.replace(new RegExp(`^'(?=${e}\\B)`), "’"), t = t.replace(new RegExp(`^"(?=${e}\\B)`), "”"), t = t.replace(/"'(?=\w)/, "“‘"), t = t.replace(/'"(?=\w)/, "‘“"), t = t.replace(/'(?=\d\d)/, "’");
var n = "[^\\ \\t\\r\\n\\[\\{\\(\\-]", s = "[\\ \\t\\r\\n\\[\\{\\(\\-]", r = "–|—";
return t = t.replace(new RegExp(`(\\s| |--|&[mn]dash;|${r}|ȁ[34])'(?=\\w)`, "g"), "$1‘"), t = t.replace(new RegExp(`(${n})'`, "g"), "$1’"), t = t.replace(new RegExp(`(${s}?)'(?=\\s|s\\b)`, "g"), "$1’"), t = t.replace(/'/g, "‘"), t = t.replace(new RegExp(`(\\s| |--|&[mn]dash;|${r}|ȁ[34])"(?=\\w)`, "g"), "$1“"), t = t.replace(new RegExp(`(${n})"`, "g"), "$1”"), t = t.replace(new RegExp(`(${s}?)"(?=\\s)`, "g"), "$1”"), t = t.replace(/"/g, "“"), t;
}, kt = (t) => (t = t.replace(/``/g, "“"), t = t.replace(/''/g, "”"), t), xt = (t) => (t = t.replace(/`/g, "‘"), t = t.replace(/'/g, "’"), t), bt = (t) => (t = t.replace(/--/g, "—"), t), mt = (t) => (t = t.replace(/---/g, "—"), t = t.replace(/--/g, "–"), t), wt = (t) => (t = t.replace(/---/g, "–"), t = t.replace(/--/g, "—"), t), St = (t) => (t = t.replace(/\.\.\./g, "…"), t = t.replace(/\. \. \./g, "…"), t), Rt = (t) => (t = t.replace(/–/g, "-"), t = t.replace(/—/g, "--"), t = t.replace(/‘/g, "'"), t = t.replace(/’/g, "'"), t = t.replace(/“/g, '"'), t = t.replace(/”/g, '"'), t = t.replace(/…/g, "..."), t), yt = (t) => (t = t.replace(/\\\\/g, "\"), t = t.replace(/\\"/g, """), t = t.replace(/\\'/g, "'"), t = t.replace(/\\\./g, "."), t = t.replace(/\\-/g, "-"), t = t.replace(/\\`/g, "`"), t), $t = (t) => {
for (var e = 0, n = t.length, s = [], r = /|<\?.*?\?>|<[^>]*>/g, a = null; a = r.exec(t); ) {
if (e < a.index) {
let c = ["text", t.substring(e, a.index)];
s.push(c);
}
let l = ["tag", a.toString()];
s.push(l), e = r.lastIndex;
}
if (e < n) {
let l = ["text", t.substring(e, n)];
s.push(l);
}
return s;
};
function Tt({
config: t = 2
} = {}) {
return {
tokenizer: {
inlineText(e) {
const n = this.rules.inline.text.exec(e);
if (n)
return {
type: "text",
raw: n[0],
text: n[0],
escaped: !0
};
}
},
hooks: {
postprocess(e) {
return dt(e, t);
}
}
};
}
const At = `\r?
---\r?
`, Et = null, _t = "^s*notes?:", zt = "\\.element\\s*?(.+?)$", vt = "\\.slide:\\s*?(\\S.+?)$", ce = "__SCRIPT_END__", N = /\[\s*((\d*):)?\s*([\s\d,|-]*)\]/, Pt = {
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'"
}, Lt = () => {
let t, e = null;
function n(p) {
let g = (p.querySelector("[data-template]") || p.querySelector("script") || p).textContent;
g = g.replace(new RegExp(ce, "g"), "<\/script>");
const d = g.match(/^\n?(\s*)/)[1].length, R = g.match(/^\n?(\t*)/)[1].length;
return R > 0 ? g = g.replace(new RegExp("\\n?\\t{" + R + "}(.*)", "g"), function(k, b) {
return `
` + b;
}) : d > 1 && (g = g.replace(new RegExp("\\n? {" + d + "}(.*)", "g"), function(k, b) {
return `
` + b;
})), g;
}
function s(p) {
const o = p.attributes, g = [];
for (let d = 0, R = o.length; d < R; d++) {
const k = o[d].name, b = o[d].value;
/data\-(markdown|separator|vertical|notes)/gi.test(k) || (b ? g.push(k + '="' + b + '"') : g.push(k));
}
return g.join(" ");
}
function r(p) {
const o = t?.getConfig?.().markdown;
return p = p || {}, p.separator = p.separator || o?.separator || At, p.verticalSeparator = p.verticalSeparator || o?.verticalSeparator || Et, p.notesSeparator = p.notesSeparator || o?.notesSeparator || _t, p.attributes = p.attributes || "", p;
}
function a(p, o) {
o = r(o);
const g = p.split(new RegExp(o.notesSeparator, "mgi"));
return g.length === 2 && e && (p = g[0] + '"), p = p.replace(/<\/script>/g, ce), '