@vectojs/markdown 0.18.2 → 0.20.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/dist/Markdown.d.ts +48 -3
- package/dist/MarkdownWorkerSource.d.ts +1 -1
- package/dist/blockAffordances.d.ts +89 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +579 -62
- package/dist/index.mjs +577 -62
- package/dist/markdown-code.d.ts +136 -5
- package/dist/theme.d.ts +28 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -44,6 +44,7 @@ __export(index_exports, {
|
|
|
44
44
|
extensionForLanguage: () => extensionForLanguage,
|
|
45
45
|
footnoteMarker: () => footnoteMarker,
|
|
46
46
|
hasFencedBlockRenderer: () => hasFencedBlockRenderer,
|
|
47
|
+
highlightedLanguages: () => highlightedLanguages,
|
|
47
48
|
isFencedBlockRendererReady: () => isFencedBlockRendererReady,
|
|
48
49
|
isMathJaxReady: () => isMathJaxReady,
|
|
49
50
|
isPresetName: () => isPresetName,
|
|
@@ -52,6 +53,7 @@ __export(index_exports, {
|
|
|
52
53
|
preloadMathJax: () => preloadMathJax,
|
|
53
54
|
registerFencedBlockRenderer: () => registerFencedBlockRenderer,
|
|
54
55
|
renderFencedBlock: () => renderFencedBlock,
|
|
56
|
+
resolveBlockAffordanceConfig: () => resolveBlockAffordanceConfig,
|
|
55
57
|
resolvePresetTheme: () => resolvePresetTheme,
|
|
56
58
|
scanFrontMatter: () => scanFrontMatter,
|
|
57
59
|
tableContentOf: () => tableContentOf,
|
|
@@ -583,6 +585,7 @@ var DEFAULT_THEME = {
|
|
|
583
585
|
headingColor: "#f8fafc",
|
|
584
586
|
codeColor: "#a5f3fc",
|
|
585
587
|
codeBgColor: "rgba(30, 41, 59, 0.85)",
|
|
588
|
+
codeBorderColor: "transparent",
|
|
586
589
|
quoteBorderColor: "#6366f1",
|
|
587
590
|
quoteTextColor: "#e2e8f0",
|
|
588
591
|
hrColor: "rgba(148, 163, 184, 0.3)",
|
|
@@ -606,11 +609,13 @@ var DEFAULT_THEME = {
|
|
|
606
609
|
syntaxStringColor: "#86efac",
|
|
607
610
|
syntaxCommentColor: "#64748b",
|
|
608
611
|
syntaxNumberColor: "#fbbf24",
|
|
612
|
+
codeLangColor: "#64748b",
|
|
609
613
|
bodyFont: "Inter, system-ui, sans-serif",
|
|
610
614
|
codeFont: 'ui-monospace, "JetBrains Mono", "Fira Code", monospace',
|
|
611
615
|
fontSize: 16,
|
|
612
616
|
headingSizes: [32, 28, 24, 20, 18, 16],
|
|
613
617
|
codeFontSize: 15,
|
|
618
|
+
codeLangFontSize: 12,
|
|
614
619
|
tableFontSize: 14,
|
|
615
620
|
footnoteMarkerScale: 0.75,
|
|
616
621
|
subscriptScale: 0.75,
|
|
@@ -645,6 +650,12 @@ function resolveTheme(theme) {
|
|
|
645
650
|
if (theme?.footnoteColor === void 0) {
|
|
646
651
|
merged.footnoteColor = merged.linkColor;
|
|
647
652
|
}
|
|
653
|
+
if (theme?.codeLangColor === void 0) {
|
|
654
|
+
merged.codeLangColor = merged.syntaxCommentColor;
|
|
655
|
+
}
|
|
656
|
+
if (theme?.codeLangFontSize === void 0) {
|
|
657
|
+
merged.codeLangFontSize = Math.max(1, merged.codeFontSize - 3);
|
|
658
|
+
}
|
|
648
659
|
return merged;
|
|
649
660
|
}
|
|
650
661
|
function headingSize(theme, depth) {
|
|
@@ -984,14 +995,215 @@ var KEYWORD_SETS = {
|
|
|
984
995
|
"static"
|
|
985
996
|
])
|
|
986
997
|
};
|
|
998
|
+
KEYWORD_SETS["bash"] = /* @__PURE__ */ new Set([
|
|
999
|
+
// Shell builtins and control words. Deliberately not the whole of coreutils:
|
|
1000
|
+
// a keyword table that includes every command name colors an entire script
|
|
1001
|
+
// uniformly, which reads worse than coloring only the control flow.
|
|
1002
|
+
"if",
|
|
1003
|
+
"then",
|
|
1004
|
+
"else",
|
|
1005
|
+
"elif",
|
|
1006
|
+
"fi",
|
|
1007
|
+
"for",
|
|
1008
|
+
"while",
|
|
1009
|
+
"until",
|
|
1010
|
+
"do",
|
|
1011
|
+
"done",
|
|
1012
|
+
"case",
|
|
1013
|
+
"esac",
|
|
1014
|
+
"in",
|
|
1015
|
+
"function",
|
|
1016
|
+
"return",
|
|
1017
|
+
"exit",
|
|
1018
|
+
"break",
|
|
1019
|
+
"continue",
|
|
1020
|
+
"local",
|
|
1021
|
+
"export",
|
|
1022
|
+
"readonly",
|
|
1023
|
+
"declare",
|
|
1024
|
+
"unset",
|
|
1025
|
+
"shift",
|
|
1026
|
+
"source",
|
|
1027
|
+
"alias",
|
|
1028
|
+
"set",
|
|
1029
|
+
"trap",
|
|
1030
|
+
"echo",
|
|
1031
|
+
"cd",
|
|
1032
|
+
"sudo",
|
|
1033
|
+
"true",
|
|
1034
|
+
"false"
|
|
1035
|
+
]);
|
|
1036
|
+
KEYWORD_SETS["json"] = /* @__PURE__ */ new Set(["true", "false", "null"]);
|
|
1037
|
+
KEYWORD_SETS["css"] = /* @__PURE__ */ new Set([
|
|
1038
|
+
"important",
|
|
1039
|
+
"inherit",
|
|
1040
|
+
"initial",
|
|
1041
|
+
"unset",
|
|
1042
|
+
"revert",
|
|
1043
|
+
"auto",
|
|
1044
|
+
"none",
|
|
1045
|
+
"var",
|
|
1046
|
+
"calc"
|
|
1047
|
+
]);
|
|
1048
|
+
KEYWORD_SETS["html"] = /* @__PURE__ */ new Set([
|
|
1049
|
+
// Tag names are the meaningful tokens a reader scans for. The tokenizer is
|
|
1050
|
+
// word-based, so `<div>` yields the word `div`.
|
|
1051
|
+
"html",
|
|
1052
|
+
"head",
|
|
1053
|
+
"body",
|
|
1054
|
+
"title",
|
|
1055
|
+
"meta",
|
|
1056
|
+
"link",
|
|
1057
|
+
"script",
|
|
1058
|
+
"style",
|
|
1059
|
+
"div",
|
|
1060
|
+
"span",
|
|
1061
|
+
"p",
|
|
1062
|
+
"a",
|
|
1063
|
+
"img",
|
|
1064
|
+
"ul",
|
|
1065
|
+
"ol",
|
|
1066
|
+
"li",
|
|
1067
|
+
"table",
|
|
1068
|
+
"tr",
|
|
1069
|
+
"td",
|
|
1070
|
+
"th",
|
|
1071
|
+
"form",
|
|
1072
|
+
"input",
|
|
1073
|
+
"button",
|
|
1074
|
+
"label",
|
|
1075
|
+
"select",
|
|
1076
|
+
"option",
|
|
1077
|
+
"textarea",
|
|
1078
|
+
"header",
|
|
1079
|
+
"footer",
|
|
1080
|
+
"nav",
|
|
1081
|
+
"main",
|
|
1082
|
+
"section",
|
|
1083
|
+
"article",
|
|
1084
|
+
"aside",
|
|
1085
|
+
"canvas",
|
|
1086
|
+
"svg",
|
|
1087
|
+
"template",
|
|
1088
|
+
"slot"
|
|
1089
|
+
]);
|
|
987
1090
|
KEYWORD_SETS["javascript"] = KEYWORD_SETS["js"];
|
|
988
1091
|
KEYWORD_SETS["typescript"] = KEYWORD_SETS["ts"];
|
|
989
1092
|
KEYWORD_SETS["python"] = KEYWORD_SETS["py"];
|
|
990
1093
|
KEYWORD_SETS["rs"] = KEYWORD_SETS["rust"];
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
1094
|
+
KEYWORD_SETS["jsx"] = KEYWORD_SETS["js"];
|
|
1095
|
+
KEYWORD_SETS["mjs"] = KEYWORD_SETS["js"];
|
|
1096
|
+
KEYWORD_SETS["cjs"] = KEYWORD_SETS["js"];
|
|
1097
|
+
KEYWORD_SETS["tsx"] = KEYWORD_SETS["ts"];
|
|
1098
|
+
KEYWORD_SETS["mts"] = KEYWORD_SETS["ts"];
|
|
1099
|
+
KEYWORD_SETS["cts"] = KEYWORD_SETS["ts"];
|
|
1100
|
+
KEYWORD_SETS["sh"] = KEYWORD_SETS["bash"];
|
|
1101
|
+
KEYWORD_SETS["zsh"] = KEYWORD_SETS["bash"];
|
|
1102
|
+
KEYWORD_SETS["shell"] = KEYWORD_SETS["bash"];
|
|
1103
|
+
KEYWORD_SETS["console"] = KEYWORD_SETS["bash"];
|
|
1104
|
+
KEYWORD_SETS["jsonc"] = KEYWORD_SETS["json"];
|
|
1105
|
+
KEYWORD_SETS["json5"] = KEYWORD_SETS["json"];
|
|
1106
|
+
KEYWORD_SETS["scss"] = KEYWORD_SETS["css"];
|
|
1107
|
+
KEYWORD_SETS["sass"] = KEYWORD_SETS["css"];
|
|
1108
|
+
KEYWORD_SETS["less"] = KEYWORD_SETS["css"];
|
|
1109
|
+
KEYWORD_SETS["vue"] = KEYWORD_SETS["html"];
|
|
1110
|
+
KEYWORD_SETS["svelte"] = KEYWORD_SETS["html"];
|
|
1111
|
+
KEYWORD_SETS["xml"] = KEYWORD_SETS["html"];
|
|
1112
|
+
KEYWORD_SETS["svg"] = KEYWORD_SETS["html"];
|
|
1113
|
+
var C_LIKE = {
|
|
1114
|
+
lineComments: ["//"],
|
|
1115
|
+
quotes: ['"', "'", "`"],
|
|
1116
|
+
numbers: true,
|
|
1117
|
+
blockComments: [["/*", "*/"]],
|
|
1118
|
+
// A JS/TS template literal spans lines. Listed here as well as in `quotes`:
|
|
1119
|
+
// `quotes` handles the common single-line case, and this carries the rest.
|
|
1120
|
+
multilineStrings: ["`"]
|
|
1121
|
+
};
|
|
1122
|
+
var HASH_COMMENT = {
|
|
1123
|
+
lineComments: ["#"],
|
|
1124
|
+
quotes: ['"', "'"],
|
|
1125
|
+
numbers: true
|
|
1126
|
+
};
|
|
1127
|
+
var LANGUAGE_SYNTAX = {
|
|
1128
|
+
js: C_LIKE,
|
|
1129
|
+
ts: C_LIKE,
|
|
1130
|
+
// A Python docstring is the language's block comment in practice, and it is
|
|
1131
|
+
// lexically a string, so it is carried as one rather than invented as a third
|
|
1132
|
+
// kind. Triple delimiters are listed before the single ones so the longest
|
|
1133
|
+
// match wins.
|
|
1134
|
+
py: { ...HASH_COMMENT, multilineStrings: ['"""', "'''"] },
|
|
1135
|
+
// Rust has `//` line comments AND `'` lifetimes. The unterminated-quote
|
|
1136
|
+
// fallback already keeps a lifetime from swallowing the line, so `'` stays
|
|
1137
|
+
// listed: `'a'` is a valid char literal and should color as a string.
|
|
1138
|
+
rust: C_LIKE,
|
|
1139
|
+
bash: HASH_COMMENT,
|
|
1140
|
+
// JSON has no comments and no single-quoted strings. JSONC does have `//`,
|
|
1141
|
+
// and is aliased separately below rather than sharing this entry.
|
|
1142
|
+
json: { lineComments: [], quotes: ['"'], numbers: true },
|
|
1143
|
+
// CSS has only block comments — which now span lines, so this entry claims
|
|
1144
|
+
// them. Numbers are everywhere in CSS and coloring them is most of the visible
|
|
1145
|
+
// benefit.
|
|
1146
|
+
css: {
|
|
1147
|
+
lineComments: [],
|
|
1148
|
+
quotes: ['"', "'"],
|
|
1149
|
+
numbers: true,
|
|
1150
|
+
blockComments: [["/*", "*/"]]
|
|
1151
|
+
},
|
|
1152
|
+
// Markup: no line comments, and numbers inside attribute values are noise
|
|
1153
|
+
// rather than signal. An SGML comment spans lines like any other block form.
|
|
1154
|
+
html: {
|
|
1155
|
+
lineComments: [],
|
|
1156
|
+
quotes: ['"', "'"],
|
|
1157
|
+
numbers: false,
|
|
1158
|
+
blockComments: [["<!--", "-->"]]
|
|
1159
|
+
}
|
|
1160
|
+
};
|
|
1161
|
+
LANGUAGE_SYNTAX["javascript"] = LANGUAGE_SYNTAX["js"];
|
|
1162
|
+
LANGUAGE_SYNTAX["typescript"] = LANGUAGE_SYNTAX["ts"];
|
|
1163
|
+
LANGUAGE_SYNTAX["python"] = LANGUAGE_SYNTAX["py"];
|
|
1164
|
+
LANGUAGE_SYNTAX["rs"] = LANGUAGE_SYNTAX["rust"];
|
|
1165
|
+
LANGUAGE_SYNTAX["jsx"] = LANGUAGE_SYNTAX["js"];
|
|
1166
|
+
LANGUAGE_SYNTAX["mjs"] = LANGUAGE_SYNTAX["js"];
|
|
1167
|
+
LANGUAGE_SYNTAX["cjs"] = LANGUAGE_SYNTAX["js"];
|
|
1168
|
+
LANGUAGE_SYNTAX["tsx"] = LANGUAGE_SYNTAX["ts"];
|
|
1169
|
+
LANGUAGE_SYNTAX["mts"] = LANGUAGE_SYNTAX["ts"];
|
|
1170
|
+
LANGUAGE_SYNTAX["cts"] = LANGUAGE_SYNTAX["ts"];
|
|
1171
|
+
LANGUAGE_SYNTAX["sh"] = LANGUAGE_SYNTAX["bash"];
|
|
1172
|
+
LANGUAGE_SYNTAX["zsh"] = LANGUAGE_SYNTAX["bash"];
|
|
1173
|
+
LANGUAGE_SYNTAX["shell"] = LANGUAGE_SYNTAX["bash"];
|
|
1174
|
+
LANGUAGE_SYNTAX["console"] = LANGUAGE_SYNTAX["bash"];
|
|
1175
|
+
LANGUAGE_SYNTAX["yaml"] = HASH_COMMENT;
|
|
1176
|
+
LANGUAGE_SYNTAX["yml"] = HASH_COMMENT;
|
|
1177
|
+
LANGUAGE_SYNTAX["toml"] = HASH_COMMENT;
|
|
1178
|
+
LANGUAGE_SYNTAX["ini"] = HASH_COMMENT;
|
|
1179
|
+
LANGUAGE_SYNTAX["dockerfile"] = HASH_COMMENT;
|
|
1180
|
+
LANGUAGE_SYNTAX["makefile"] = HASH_COMMENT;
|
|
1181
|
+
LANGUAGE_SYNTAX["make"] = HASH_COMMENT;
|
|
1182
|
+
LANGUAGE_SYNTAX["jsonc"] = { lineComments: ["//"], quotes: ['"'], numbers: true };
|
|
1183
|
+
LANGUAGE_SYNTAX["json5"] = { lineComments: ["//"], quotes: ['"', "'"], numbers: true };
|
|
1184
|
+
LANGUAGE_SYNTAX["scss"] = C_LIKE;
|
|
1185
|
+
LANGUAGE_SYNTAX["sass"] = C_LIKE;
|
|
1186
|
+
LANGUAGE_SYNTAX["less"] = C_LIKE;
|
|
1187
|
+
LANGUAGE_SYNTAX["glsl"] = C_LIKE;
|
|
1188
|
+
LANGUAGE_SYNTAX["c"] = C_LIKE;
|
|
1189
|
+
LANGUAGE_SYNTAX["cpp"] = C_LIKE;
|
|
1190
|
+
LANGUAGE_SYNTAX["go"] = C_LIKE;
|
|
1191
|
+
LANGUAGE_SYNTAX["java"] = C_LIKE;
|
|
1192
|
+
LANGUAGE_SYNTAX["kotlin"] = C_LIKE;
|
|
1193
|
+
LANGUAGE_SYNTAX["swift"] = C_LIKE;
|
|
1194
|
+
LANGUAGE_SYNTAX["vue"] = LANGUAGE_SYNTAX["html"];
|
|
1195
|
+
LANGUAGE_SYNTAX["svelte"] = LANGUAGE_SYNTAX["html"];
|
|
1196
|
+
LANGUAGE_SYNTAX["xml"] = LANGUAGE_SYNTAX["html"];
|
|
1197
|
+
LANGUAGE_SYNTAX["svg"] = LANGUAGE_SYNTAX["html"];
|
|
1198
|
+
function highlightedLanguages() {
|
|
1199
|
+
return [.../* @__PURE__ */ new Set([...Object.keys(LANGUAGE_SYNTAX), ...Object.keys(KEYWORD_SETS)])].sort();
|
|
1200
|
+
}
|
|
1201
|
+
function highlightLine(line, lang, theme, carry = null) {
|
|
1202
|
+
const key = lang.trim().toLowerCase().split(/[\s:,{]/)[0] ?? "";
|
|
1203
|
+
const keywords = KEYWORD_SETS[key];
|
|
1204
|
+
const syntax = LANGUAGE_SYNTAX[key];
|
|
1205
|
+
if (!keywords && !syntax) {
|
|
1206
|
+
return { segments: [{ text: line, color: theme.codeColor }], carry: null };
|
|
995
1207
|
}
|
|
996
1208
|
const segments = [];
|
|
997
1209
|
const KEYWORD_COLOR = theme.syntaxKeywordColor;
|
|
@@ -1006,19 +1218,63 @@ function highlightLine(line, lang, theme) {
|
|
|
1006
1218
|
buf = "";
|
|
1007
1219
|
}
|
|
1008
1220
|
};
|
|
1221
|
+
const lexical = syntax ?? C_LIKE;
|
|
1222
|
+
const findClose = (from, close, isString) => {
|
|
1223
|
+
let j = from;
|
|
1224
|
+
while (j < line.length) {
|
|
1225
|
+
if (isString && line[j] === "\\") {
|
|
1226
|
+
j += 2;
|
|
1227
|
+
continue;
|
|
1228
|
+
}
|
|
1229
|
+
if (line.startsWith(close, j)) return j + close.length;
|
|
1230
|
+
j++;
|
|
1231
|
+
}
|
|
1232
|
+
return -1;
|
|
1233
|
+
};
|
|
1234
|
+
if (carry) {
|
|
1235
|
+
const color = carry.kind === "comment" ? COMMENT_COLOR : STRING_COLOR;
|
|
1236
|
+
const end = findClose(0, carry.close, carry.kind === "string");
|
|
1237
|
+
if (end === -1) {
|
|
1238
|
+
if (line.length > 0) segments.push({ text: line, color });
|
|
1239
|
+
return { segments, carry };
|
|
1240
|
+
}
|
|
1241
|
+
segments.push({ text: line.slice(0, end), color });
|
|
1242
|
+
i = end;
|
|
1243
|
+
}
|
|
1009
1244
|
while (i < line.length) {
|
|
1010
1245
|
const ch = line[i];
|
|
1011
|
-
|
|
1246
|
+
const block = lexical.blockComments?.find(([open]) => line.startsWith(open, i));
|
|
1247
|
+
if (block) {
|
|
1248
|
+
const [open, close] = block;
|
|
1012
1249
|
flush(theme.codeColor);
|
|
1013
|
-
|
|
1014
|
-
|
|
1250
|
+
const end = findClose(i + open.length, close, false);
|
|
1251
|
+
if (end === -1) {
|
|
1252
|
+
segments.push({ text: line.slice(i), color: COMMENT_COLOR });
|
|
1253
|
+
return { segments, carry: { kind: "comment", close } };
|
|
1254
|
+
}
|
|
1255
|
+
segments.push({ text: line.slice(i, end), color: COMMENT_COLOR });
|
|
1256
|
+
i = end;
|
|
1257
|
+
continue;
|
|
1015
1258
|
}
|
|
1016
|
-
|
|
1259
|
+
const comment = lexical.lineComments.find((prefix) => line.startsWith(prefix, i));
|
|
1260
|
+
if (comment !== void 0) {
|
|
1017
1261
|
flush(theme.codeColor);
|
|
1018
1262
|
segments.push({ text: line.slice(i), color: COMMENT_COLOR });
|
|
1019
|
-
return segments;
|
|
1263
|
+
return { segments, carry: null };
|
|
1264
|
+
}
|
|
1265
|
+
const multi = lexical.multilineStrings?.find((delim) => line.startsWith(delim, i));
|
|
1266
|
+
if (multi !== void 0) {
|
|
1267
|
+
flush(theme.codeColor);
|
|
1268
|
+
const end = findClose(i + multi.length, multi, true);
|
|
1269
|
+
if (end === -1) {
|
|
1270
|
+
segments.push({ text: line.slice(i), color: STRING_COLOR });
|
|
1271
|
+
return { segments, carry: { kind: "string", close: multi } };
|
|
1272
|
+
}
|
|
1273
|
+
segments.push({ text: line.slice(i, end), color: STRING_COLOR });
|
|
1274
|
+
i = end;
|
|
1275
|
+
continue;
|
|
1020
1276
|
}
|
|
1021
|
-
if (ch
|
|
1277
|
+
if (lexical.quotes.includes(ch)) {
|
|
1022
1278
|
const quote = ch;
|
|
1023
1279
|
let j = i + 1;
|
|
1024
1280
|
let closed = false;
|
|
@@ -1043,7 +1299,7 @@ function highlightLine(line, lang, theme) {
|
|
|
1043
1299
|
i++;
|
|
1044
1300
|
continue;
|
|
1045
1301
|
}
|
|
1046
|
-
if (/\d/.test(ch) && (i === 0 || /[\s(,=+\-*/<>[\]{}:;]/.test(line[i - 1]))) {
|
|
1302
|
+
if (lexical.numbers && /\d/.test(ch) && (i === 0 || /[\s(,=+\-*/<>[\]{}:;]/.test(line[i - 1]))) {
|
|
1047
1303
|
flush(theme.codeColor);
|
|
1048
1304
|
let j = i;
|
|
1049
1305
|
while (j < line.length && /[\d._xXa-fA-F]/.test(line[j])) j++;
|
|
@@ -1058,7 +1314,9 @@ function highlightLine(line, lang, theme) {
|
|
|
1058
1314
|
const word = line.slice(i, j);
|
|
1059
1315
|
segments.push({
|
|
1060
1316
|
text: word,
|
|
1061
|
-
|
|
1317
|
+
// A language may have lexical syntax but no keywords (plain YAML, TOML,
|
|
1318
|
+
// a Dockerfile). Those still get comments, strings and numbers.
|
|
1319
|
+
color: keywords?.has(word) ? KEYWORD_COLOR : theme.codeColor
|
|
1062
1320
|
});
|
|
1063
1321
|
i = j;
|
|
1064
1322
|
continue;
|
|
@@ -1067,10 +1325,18 @@ function highlightLine(line, lang, theme) {
|
|
|
1067
1325
|
i++;
|
|
1068
1326
|
}
|
|
1069
1327
|
flush(theme.codeColor);
|
|
1070
|
-
return segments;
|
|
1328
|
+
return { segments, carry: null };
|
|
1071
1329
|
}
|
|
1072
1330
|
var CodeBlock = class extends import_ui.UIComponent {
|
|
1073
1331
|
lines;
|
|
1332
|
+
/**
|
|
1333
|
+
* Lexical state ENTERING each line, index-aligned with {@link lines}.
|
|
1334
|
+
*
|
|
1335
|
+
* Entering rather than leaving, so a streamed append can resume tokenizing at
|
|
1336
|
+
* the prefix-reuse boundary by reading one entry instead of re-scanning the
|
|
1337
|
+
* document for an unclosed block comment.
|
|
1338
|
+
*/
|
|
1339
|
+
lineCarry = [];
|
|
1074
1340
|
grid = null;
|
|
1075
1341
|
/** Raw (unhighlighted) lines of the last build, for prefix reuse in buildLines. */
|
|
1076
1342
|
rawLines = null;
|
|
@@ -1078,6 +1344,19 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1078
1344
|
source;
|
|
1079
1345
|
/** Bumped by {@link buildLines} and {@link setSelectable}; read by `Scene`. */
|
|
1080
1346
|
contentEpoch = 0;
|
|
1347
|
+
/**
|
|
1348
|
+
* Horizontal scroll offset in local px, always in `[0, maxScrollX]`.
|
|
1349
|
+
*
|
|
1350
|
+
* Code does not wrap, so a line wider than the box would otherwise have an
|
|
1351
|
+
* unreachable tail. This offset is subtracted from BOTH the painted cell x and
|
|
1352
|
+
* the projected line x in the same frame — never one without the other, or the
|
|
1353
|
+
* DOM selection carriers detach from the glyphs they are supposed to cover
|
|
1354
|
+
* (the defect class `5cf7119` and `ee1de6f` fixed on the vertical axis).
|
|
1355
|
+
*/
|
|
1356
|
+
scrollXValue = 0;
|
|
1357
|
+
/** Memoized widest prepared line, keyed by the grid identity it came from. */
|
|
1358
|
+
contentWidthGrid = null;
|
|
1359
|
+
contentWidthValue = 0;
|
|
1081
1360
|
lang;
|
|
1082
1361
|
theme;
|
|
1083
1362
|
/**
|
|
@@ -1089,6 +1368,10 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1089
1368
|
pad;
|
|
1090
1369
|
codeFont;
|
|
1091
1370
|
selectable;
|
|
1371
|
+
/** Whether the language header band is drawn. See {@link CodeBlockOptions.showLanguage}. */
|
|
1372
|
+
showLanguage;
|
|
1373
|
+
/** Font of the header label, resolved once from the theme. */
|
|
1374
|
+
langFont;
|
|
1092
1375
|
/**
|
|
1093
1376
|
* @param theme Any subset of {@link MarkdownTheme}, or the name of a built-in
|
|
1094
1377
|
* preset (see {@link MarkdownThemePresetName}). Accepting a partial theme
|
|
@@ -1100,7 +1383,7 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1100
1383
|
* be constructed directly with a preset name without going through
|
|
1101
1384
|
* `Markdown`.
|
|
1102
1385
|
*/
|
|
1103
|
-
constructor(code, lang, maxWidth, theme, selectable = true) {
|
|
1386
|
+
constructor(code, lang, maxWidth, theme, selectable = true, options = {}) {
|
|
1104
1387
|
super();
|
|
1105
1388
|
const resolved = resolvePresetTheme(theme);
|
|
1106
1389
|
this.source = code;
|
|
@@ -1110,15 +1393,129 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1110
1393
|
this.pad = resolved.codePadding;
|
|
1111
1394
|
this.codeFont = `${resolved.codeFontSize}px ${resolved.codeFont}`;
|
|
1112
1395
|
this.selectable = selectable;
|
|
1396
|
+
this.langFont = `${resolved.codeLangFontSize}px ${resolved.codeFont}`;
|
|
1397
|
+
this.showLanguage = options.showLanguage === true && this.languageLabel() !== "";
|
|
1113
1398
|
this.lines = [];
|
|
1114
1399
|
this.width = maxWidth;
|
|
1115
1400
|
this.buildLines(code);
|
|
1401
|
+
this.on("wheel", (e) => {
|
|
1402
|
+
const max = this.maxScrollX;
|
|
1403
|
+
if (max <= 0) return;
|
|
1404
|
+
if (e.ctrlKey === true) return;
|
|
1405
|
+
const deltaMode = e.deltaMode ?? 0;
|
|
1406
|
+
let deltaX = e.deltaX ?? 0;
|
|
1407
|
+
let deltaY = e.deltaY ?? 0;
|
|
1408
|
+
if (deltaMode === 1) {
|
|
1409
|
+
deltaX *= 16;
|
|
1410
|
+
deltaY *= 16;
|
|
1411
|
+
} else if (deltaMode === 2) {
|
|
1412
|
+
deltaX *= this.width;
|
|
1413
|
+
deltaY *= this.height;
|
|
1414
|
+
}
|
|
1415
|
+
const horizontal = e.shiftKey === true ? deltaY || deltaX : deltaX;
|
|
1416
|
+
if (horizontal === 0) return;
|
|
1417
|
+
const before = this.scrollX;
|
|
1418
|
+
this.setScrollX(before + horizontal);
|
|
1419
|
+
if (this.scrollX !== before) e.nativeEvent?.preventDefault?.();
|
|
1420
|
+
});
|
|
1421
|
+
}
|
|
1422
|
+
/**
|
|
1423
|
+
* The language name shown in the header, or `''` when there is nothing to show.
|
|
1424
|
+
*
|
|
1425
|
+
* Normalized exactly as the highlighter normalizes its lookup key, so the label
|
|
1426
|
+
* and the colouring can never disagree about which language this is: a fence
|
|
1427
|
+
* may be written ` ```Bash ` or carry attributes (` ```ts title="a.ts" `), and
|
|
1428
|
+
* the label has to be the language, not the raw info string.
|
|
1429
|
+
*
|
|
1430
|
+
* Lowercased for the same reason `streamdown` lowercases its own
|
|
1431
|
+
* (`lib/code-block/header.tsx:15`): the fence's capitalization is incidental,
|
|
1432
|
+
* and a document mixing ` ```JS ` with ` ```js ` should not render two
|
|
1433
|
+
* different-looking labels for one language.
|
|
1434
|
+
*/
|
|
1435
|
+
languageLabel() {
|
|
1436
|
+
return this.lang.trim().toLowerCase().split(/[\s:,{]/)[0] ?? "";
|
|
1437
|
+
}
|
|
1438
|
+
/**
|
|
1439
|
+
* Height in px of the header band, or `0` when it is off.
|
|
1440
|
+
*
|
|
1441
|
+
* The label sits in a band of its own rather than floating over the code,
|
|
1442
|
+
* because a translucent overlay above real glyphs is unreadable at small sizes
|
|
1443
|
+
* and would fight the horizontal scroll: the code slides under it, so any text
|
|
1444
|
+
* drawn on top would collide with a different token every frame.
|
|
1445
|
+
*/
|
|
1446
|
+
headerHeight() {
|
|
1447
|
+
if (!this.showLanguage) return 0;
|
|
1448
|
+
return this.theme.codeLangFontSize + Math.round(this.pad * 0.75);
|
|
1449
|
+
}
|
|
1450
|
+
/**
|
|
1451
|
+
* Local y of the first line of code.
|
|
1452
|
+
*
|
|
1453
|
+
* Everything that positions a row — the painter, the projection, the grid's
|
|
1454
|
+
* own origin — goes through this, so the header offset cannot be applied to
|
|
1455
|
+
* one and forgotten on another. That class of mismatch is exactly what
|
|
1456
|
+
* detaches selection carriers from the glyphs they cover.
|
|
1457
|
+
*/
|
|
1458
|
+
contentTop() {
|
|
1459
|
+
return this.headerHeight() + this.pad;
|
|
1460
|
+
}
|
|
1461
|
+
/**
|
|
1462
|
+
* Current horizontal scroll offset in local px, clamped to what the content
|
|
1463
|
+
* currently allows.
|
|
1464
|
+
*
|
|
1465
|
+
* Clamped on READ, not only on write, because `setWidth()` may shrink the box
|
|
1466
|
+
* after a scroll and is contractually forbidden from rebuilding anything. Both
|
|
1467
|
+
* the painter and the projection read through here, which is what keeps the
|
|
1468
|
+
* glyphs and the selection carriers on the same offset within a frame.
|
|
1469
|
+
*/
|
|
1470
|
+
get scrollX() {
|
|
1471
|
+
return Math.min(this.scrollXValue, this.maxScrollX);
|
|
1472
|
+
}
|
|
1473
|
+
/**
|
|
1474
|
+
* Widest line's overflow past the padded box, i.e. the maximum useful
|
|
1475
|
+
* {@link scrollX}. `0` when every line already fits.
|
|
1476
|
+
*/
|
|
1477
|
+
get maxScrollX() {
|
|
1478
|
+
return Math.max(0, this.contentWidth() - (this.width - this.pad * 2));
|
|
1479
|
+
}
|
|
1480
|
+
/**
|
|
1481
|
+
* Widest prepared line, memoized against the grid that produced it.
|
|
1482
|
+
*
|
|
1483
|
+
* Read by {@link scrollX}, which both `render()` and `getContentProjection()`
|
|
1484
|
+
* call every synced frame, so an O(lines) scan here would be an O(document) cost
|
|
1485
|
+
* per frame on a long block — the exact shape the per-line projection window
|
|
1486
|
+
* exists to avoid. The grid is rebuilt only when the content changes, so the
|
|
1487
|
+
* cache key is identity of the grid object.
|
|
1488
|
+
*/
|
|
1489
|
+
contentWidth() {
|
|
1490
|
+
const grid = this.ensureGrid();
|
|
1491
|
+
if (this.contentWidthGrid === grid) return this.contentWidthValue;
|
|
1492
|
+
let widest = 0;
|
|
1493
|
+
for (const line of grid.lines) {
|
|
1494
|
+
if (line.width > widest) widest = line.width;
|
|
1495
|
+
}
|
|
1496
|
+
this.contentWidthGrid = grid;
|
|
1497
|
+
this.contentWidthValue = widest;
|
|
1498
|
+
return widest;
|
|
1499
|
+
}
|
|
1500
|
+
/**
|
|
1501
|
+
* Scroll horizontally to `x`, clamped to `[0, maxScrollX]`.
|
|
1502
|
+
*
|
|
1503
|
+
* @returns `this` for chaining.
|
|
1504
|
+
*/
|
|
1505
|
+
setScrollX(x) {
|
|
1506
|
+
const next = Math.max(0, Math.min(this.maxScrollX, x));
|
|
1507
|
+
if (next === this.scrollXValue) return this;
|
|
1508
|
+
this.scrollXValue = next;
|
|
1509
|
+
this.contentEpoch++;
|
|
1510
|
+
this.scene?.markDirty();
|
|
1511
|
+
return this;
|
|
1116
1512
|
}
|
|
1117
1513
|
/** Re-parse code content (e.g. for live editing). */
|
|
1118
1514
|
setCode(code, lang) {
|
|
1119
1515
|
if (lang !== void 0) this.lang = lang;
|
|
1120
1516
|
this.source = code;
|
|
1121
1517
|
this.buildLines(code);
|
|
1518
|
+
this.scrollXValue = Math.min(this.scrollXValue, this.maxScrollX);
|
|
1122
1519
|
this.scene?.markDirty();
|
|
1123
1520
|
return this;
|
|
1124
1521
|
}
|
|
@@ -1138,9 +1535,13 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1138
1535
|
* Deliberately does **not** rebuild the grid or the highlight, because code does
|
|
1139
1536
|
* not reflow: lines are placed on a fixed monospace grid at `col × cellWidth` and
|
|
1140
1537
|
* a long line overflows rather than wrapping, so `height` is a function of line
|
|
1141
|
-
* *count* alone. The width
|
|
1142
|
-
* change the glyph geometry — the source, the language, the font —
|
|
1143
|
-
* {@link setCode} and invalidates the grid there.
|
|
1538
|
+
* *count* alone. The width sizes the rounded background and the clip. Anything
|
|
1539
|
+
* that would change the glyph geometry — the source, the language, the font —
|
|
1540
|
+
* goes through {@link setCode} and invalidates the grid there.
|
|
1541
|
+
*
|
|
1542
|
+
* A narrower box can leave {@link scrollX} past the new end of travel. That is
|
|
1543
|
+
* resolved by clamping on read rather than by adjusting anything here, so this
|
|
1544
|
+
* method keeps costing nothing.
|
|
1144
1545
|
*
|
|
1145
1546
|
* @returns `this` for chaining.
|
|
1146
1547
|
*/
|
|
@@ -1154,16 +1555,21 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1154
1555
|
getContentProjection(hint) {
|
|
1155
1556
|
if (!this.source) return null;
|
|
1156
1557
|
const grid = this.ensureGrid();
|
|
1558
|
+
const scrollX = this.scrollX;
|
|
1157
1559
|
const rows = [];
|
|
1158
1560
|
rows.length = grid.lines.length;
|
|
1159
1561
|
for (let row = 0; row < grid.lines.length; row++) {
|
|
1160
1562
|
const line = grid.lines[row];
|
|
1161
|
-
const y = this.
|
|
1563
|
+
const y = this.contentTop() + row * this.lineH;
|
|
1162
1564
|
if (!(0, import_core2.contentLineInHint)(hint, y, this.lineH)) continue;
|
|
1163
1565
|
rows[row] = {
|
|
1164
1566
|
text: this.source.slice(line.sourceStart, line.sourceEnd),
|
|
1165
1567
|
separatorAfter: this.source.slice(line.sourceEnd, line.nextSourceStart) || void 0,
|
|
1166
|
-
|
|
1568
|
+
// The SAME offset `render()` subtracts, read through the same clamping
|
|
1569
|
+
// accessor. Cell carriers are `position: relative` inside this `absolute`
|
|
1570
|
+
// line box, so shifting the line's x translates every cell of the line
|
|
1571
|
+
// rigidly and selection stays over the glyphs.
|
|
1572
|
+
x: this.pad - scrollX,
|
|
1167
1573
|
y,
|
|
1168
1574
|
baseline: this.lineH * 0.75,
|
|
1169
1575
|
font: this.codeFont,
|
|
@@ -1183,6 +1589,12 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1183
1589
|
// render() draws cell-by-cell (no ligatures can form); the DOM copy
|
|
1184
1590
|
// must not ligate either or Firefox selection geometry drifts.
|
|
1185
1591
|
ligatures: "none",
|
|
1592
|
+
// `render()` clips the glyph pass to this box, so the DOM copy must too.
|
|
1593
|
+
// A line wider than the box otherwise projects carriers past the entity,
|
|
1594
|
+
// and the browser paints their selection highlight over whatever is drawn
|
|
1595
|
+
// beside the block — measured 1580px of carrier against a 1566px viewport
|
|
1596
|
+
// on a real page, the highlight running through the prose to its right.
|
|
1597
|
+
clipToBounds: true,
|
|
1186
1598
|
grid
|
|
1187
1599
|
};
|
|
1188
1600
|
}
|
|
@@ -1197,6 +1609,11 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1197
1609
|
*
|
|
1198
1610
|
* The last previously-seen line is deliberately NOT reused: a chunk usually
|
|
1199
1611
|
* lands mid-line, so that line's text (and therefore its tokenization) changes.
|
|
1612
|
+
*
|
|
1613
|
+
* Prefix reuse survives multi-line constructs because {@link lineCarry} records
|
|
1614
|
+
* the state ENTERING each line, so resuming at the reuse boundary needs no
|
|
1615
|
+
* rescan: a carried state is a pure function of the preceding text, and that
|
|
1616
|
+
* text is byte-identical over the reused prefix by construction.
|
|
1200
1617
|
*/
|
|
1201
1618
|
buildLines(code) {
|
|
1202
1619
|
this.contentEpoch++;
|
|
@@ -1207,18 +1624,20 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1207
1624
|
const limit = Math.min(previous.length - 1, rawLines.length);
|
|
1208
1625
|
while (reusable < limit && previous[reusable] === rawLines[reusable]) reusable++;
|
|
1209
1626
|
}
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
this.
|
|
1216
|
-
|
|
1217
|
-
|
|
1627
|
+
const lines = reusable > 0 ? this.lines.slice(0, reusable) : [];
|
|
1628
|
+
const carries = reusable > 0 ? this.lineCarry.slice(0, reusable) : [];
|
|
1629
|
+
let carry = reusable > 0 ? this.lineCarry[reusable] ?? null : null;
|
|
1630
|
+
for (let i = reusable; i < rawLines.length; i++) {
|
|
1631
|
+
carries.push(carry);
|
|
1632
|
+
const result = highlightLine(rawLines[i], this.lang, this.theme, carry);
|
|
1633
|
+
lines.push(result.segments);
|
|
1634
|
+
carry = result.carry;
|
|
1218
1635
|
}
|
|
1636
|
+
this.lines = lines;
|
|
1637
|
+
this.lineCarry = carries;
|
|
1219
1638
|
this.rawLines = rawLines;
|
|
1220
1639
|
this.grid = null;
|
|
1221
|
-
this.height = this.
|
|
1640
|
+
this.height = this.contentTop() + this.pad + rawLines.length * this.lineH;
|
|
1222
1641
|
}
|
|
1223
1642
|
ensureGrid() {
|
|
1224
1643
|
const cellWidth = this.cellWidth || Math.max(1, (0, import_ui.measureText)("M", this.codeFont));
|
|
@@ -1232,7 +1651,15 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1232
1651
|
}
|
|
1233
1652
|
return this.grid;
|
|
1234
1653
|
}
|
|
1235
|
-
/**
|
|
1654
|
+
/**
|
|
1655
|
+
* Not hit-testable, and deliberately still not `interactive`, even though the
|
|
1656
|
+
* block now consumes wheel events to scroll.
|
|
1657
|
+
*
|
|
1658
|
+
* The wheel arrives from the content-projection div rather than from canvas
|
|
1659
|
+
* hit-testing, so no a11y shadow node is needed. Creating one would place a
|
|
1660
|
+
* `pointer-events: auto` element above the transparent text mirror and swallow
|
|
1661
|
+
* the mousedown that starts a native drag-selection.
|
|
1662
|
+
*/
|
|
1236
1663
|
isPointInside() {
|
|
1237
1664
|
return false;
|
|
1238
1665
|
}
|
|
@@ -1240,12 +1667,34 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1240
1667
|
r.beginPath();
|
|
1241
1668
|
r.roundRect(0, 0, this.width, this.height, this.theme.codeRadius);
|
|
1242
1669
|
r.fill(this.theme.codeBgColor);
|
|
1670
|
+
if (this.theme.codeBorderColor && this.theme.codeBorderColor !== "transparent") {
|
|
1671
|
+
r.beginPath();
|
|
1672
|
+
r.roundRect(0.5, 0.5, this.width - 1, this.height - 1, this.theme.codeRadius);
|
|
1673
|
+
r.stroke(this.theme.codeBorderColor, 1);
|
|
1674
|
+
}
|
|
1243
1675
|
const grid = this.ensureGrid();
|
|
1244
1676
|
const atlas = codeGlyphAtlas(r);
|
|
1245
1677
|
const atlasSource = atlas?.source ?? null;
|
|
1246
1678
|
const blit = atlas ? r.drawImageRect : void 0;
|
|
1679
|
+
const header = this.headerHeight();
|
|
1680
|
+
if (header > 0) {
|
|
1681
|
+
r.fillText(
|
|
1682
|
+
this.languageLabel(),
|
|
1683
|
+
this.pad,
|
|
1684
|
+
// Vertically centred in the band by its own cap height rather than by
|
|
1685
|
+
// font size: `fillText` takes a baseline, so centring the em box would
|
|
1686
|
+
// sit the visible letterforms low. 0.7 of the label size below the band's
|
|
1687
|
+
// centre line is where a lowercase-plus-cap run reads as centred.
|
|
1688
|
+
(header + this.theme.codeLangFontSize * 0.7) / 2,
|
|
1689
|
+
this.langFont,
|
|
1690
|
+
this.theme.codeLangColor
|
|
1691
|
+
);
|
|
1692
|
+
}
|
|
1693
|
+
r.save();
|
|
1694
|
+
r.clip(0, header, this.width, this.height - header);
|
|
1695
|
+
const scrollX = this.scrollX;
|
|
1247
1696
|
for (let row = 0; row < grid.lines.length; row++) {
|
|
1248
|
-
const yBaseline = this.
|
|
1697
|
+
const yBaseline = this.contentTop() + row * this.lineH + this.lineH * 0.75;
|
|
1249
1698
|
const segments = this.lines[row];
|
|
1250
1699
|
let segmentIndex = 0;
|
|
1251
1700
|
let segmentEnd = segments[0]?.text.length ?? 0;
|
|
@@ -1259,7 +1708,8 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1259
1708
|
const sourceText = this.source.slice(cell.sourceStart, cell.sourceEnd);
|
|
1260
1709
|
if (cell.advance <= 0 || sourceText === " " || sourceText === " ") continue;
|
|
1261
1710
|
const color = segments[segmentIndex]?.color ?? this.theme.codeColor;
|
|
1262
|
-
const x = this.pad + cell.x;
|
|
1711
|
+
const x = this.pad + cell.x - scrollX;
|
|
1712
|
+
if (x + cell.advance < 0 || x > this.width) continue;
|
|
1263
1713
|
if (blit && atlas) {
|
|
1264
1714
|
const slot = atlas.get(this.codeFont, color, cell.glyph);
|
|
1265
1715
|
const src = atlasSource ?? atlas.source;
|
|
@@ -1282,6 +1732,7 @@ var CodeBlock = class extends import_ui.UIComponent {
|
|
|
1282
1732
|
r.fillText(cell.glyph, x, yBaseline, this.codeFont, color);
|
|
1283
1733
|
}
|
|
1284
1734
|
}
|
|
1735
|
+
r.restore();
|
|
1285
1736
|
}
|
|
1286
1737
|
};
|
|
1287
1738
|
var codeAtlases = /* @__PURE__ */ new Map();
|
|
@@ -2533,6 +2984,30 @@ function defaultSaveFile(filename, content, mimeType) {
|
|
|
2533
2984
|
doc.body.removeChild(anchor);
|
|
2534
2985
|
URL.revokeObjectURL(url);
|
|
2535
2986
|
}
|
|
2987
|
+
function resolveBlockAffordanceConfig(config = {}) {
|
|
2988
|
+
const copy = config.copy ?? true;
|
|
2989
|
+
const download = config.download ?? true;
|
|
2990
|
+
return {
|
|
2991
|
+
copy,
|
|
2992
|
+
download,
|
|
2993
|
+
code: {
|
|
2994
|
+
copy: config.code?.copy ?? copy,
|
|
2995
|
+
download: config.code?.download ?? download
|
|
2996
|
+
},
|
|
2997
|
+
table: {
|
|
2998
|
+
copy: config.table?.copy ?? copy,
|
|
2999
|
+
download: config.table?.download ?? download
|
|
3000
|
+
},
|
|
3001
|
+
labels: {
|
|
3002
|
+
copyCode: config.labels?.copyCode ?? "Copy code",
|
|
3003
|
+
downloadCode: config.labels?.downloadCode ?? "Download code",
|
|
3004
|
+
copyTable: config.labels?.copyTable ?? "Copy table",
|
|
3005
|
+
downloadTable: config.labels?.downloadTable ?? "Download table",
|
|
3006
|
+
copied: config.labels?.copied ?? "Copied",
|
|
3007
|
+
saved: config.labels?.saved ?? "Saved"
|
|
3008
|
+
}
|
|
3009
|
+
};
|
|
3010
|
+
}
|
|
2536
3011
|
var BlockAffordanceButton = class _BlockAffordanceButton extends import_ui3.Button {
|
|
2537
3012
|
constructor(label, successLabel, act, opts = {}) {
|
|
2538
3013
|
super(label, { ...opts, onClick: () => this.run() });
|
|
@@ -2710,7 +3185,7 @@ function unquote(value) {
|
|
|
2710
3185
|
}
|
|
2711
3186
|
|
|
2712
3187
|
// src/MarkdownWorkerSource.ts
|
|
2713
|
-
var WORKER_SOURCE_STRING = '"use strict";(()=>{function J(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var I=J();function ke(t){I=t}var A={exec:()=>null};function C(t){let e=[];return n=>{let s=Math.max(0,Math.min(3,n-1)),r=e[s];return r||(r=t(s),e[s]=r),r}}function g(t,e=""){let n=typeof t=="string"?t:t.source,s={replace:(r,i)=>{let a=typeof i=="string"?i:i.source;return a=a.replace(x.caret,"$1"),n=n.replace(r,a),s},getRegex:()=>new RegExp(n,e)};return s}var Xe=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),x={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^\'"]*[^\\s])\\s+([\'"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>"\']/,escapeReplace:/[&<>"\']/g,escapeTestNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:C(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ ][^\\\\n]*)?(?:\\\\n|$))`)),hrRegex:C(t=>new RegExp(`^ {0,${t}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),fencesBeginRegex:C(t=>new RegExp(`^ {0,${t}}(?:\\`\\`\\`|~~~)`)),headingBeginRegex:C(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:C(t=>new RegExp(`^ {0,${t}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:C(t=>new RegExp(`^ {0,${t}}>`))},Qe=/^(?:[ \\t]*(?:\\n|$))+/,He=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,We=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,v=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Ge=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,K=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,xe=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,be=g(xe).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,"").getRegex(),Ue=g(xe).replace(/bull/g,K).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),V=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \\t]+\\n)[^\\n]+)*)/,Je=/^[^\\n]+/,Y=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Ke=g(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace("label",Y).replace("title",/(?:"(?:\\\\"?|[^"\\\\])*"|\'[^\'\\n]*(?:\\n[^\'\\n]+)*\\n?\'|\\([^()]*\\))/).getRegex(),Ve=g(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/).replace(/bull/g,K).getRegex(),X="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Ye=g("^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n*|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>[^\\\\n]*\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>[^\\\\n]*\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>[^\\\\n]*\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$))","i").replace("comment",ee).replace("tag",X).replace("attribute",/ +[a-zA-Z:_][\\w.:-]*(?: *= *"[^"\\n]*"| *= *\'[^\'\\n]*\'| *= *[^\\s"\'=<>`]+)?/).getRegex(),me=t=>g(V).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list",t).replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",X).getRegex(),et=me(/ {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]/),tt=me(/ {0,3}(?:[*+-]|\\d{1,9}[.)])(?:[ \\t]|\\n|$)/),nt=g(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace("paragraph",tt).getRegex(),te={blockquote:nt,code:He,def:Ke,fences:We,heading:Ge,hr:v,html:Ye,lheading:be,list:Ve,newline:Qe,paragraph:et,table:A,text:Je},ce=g("^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)").replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",X).getRegex(),rt={...te,lheading:Ue,table:ce,paragraph:g(V).replace("hr",v).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("table",ce).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",X).getRegex()},st={...te,html:g(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:"[^"]*"|\'[^\']*\'|\\\\s[^\'"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace("comment",ee).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(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +(["(][^\\n]+[")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:A,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:g(V).replace("hr",v).replace("heading",` *#{1,6} *[^\n]`).replace("lheading",be).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},it=/^\\\\([!"#$%&\'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,lt=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,we=/^( {2,}|\\\\)\\n(?!\\s*$)/,at=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,P=/[\\p{P}\\p{S}]/u,Q=/[\\s\\p{P}\\p{S}]/u,ne=/[^\\s\\p{P}\\p{S}]/u,ot=g(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Q).getRegex(),ye=/(?!~)[\\p{P}\\p{S}]/u,ct=/(?!~)[\\s\\p{P}\\p{S}]/u,ut=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ht=g(/link|precode-code|html/,"g").replace("link",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace("precode-",Xe?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Re=/^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/,pt=g(Re,"u").replace(/punct/g,P).getRegex(),ft=g(Re,"u").replace(/punct/g,ye).getRegex(),Te="^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)",gt=g(Te,"gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),dt=g(Te,"gu").replace(/notPunctSpace/g,ut).replace(/punctSpace/g,ct).replace(/punct/g,ye).getRegex(),kt=g("^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),xt=g(/^~~?(?:((?!~)punct)|[^\\s~])/,"u").replace(/punct/g,P).getRegex(),bt="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",mt=g(bt,"gu").replace(/notPunctSpace/g,ne).replace(/punctSpace/g,Q).replace(/punct/g,P).getRegex(),wt=g(/\\\\(punct)/,"gu").replace(/punct/g,P).getRegex(),yt=g(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Rt=g(ee).replace("(?:-->|$)","-->").getRegex(),Tt=g("^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>").replace("comment",Rt).replace("attribute",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*"[^"]*"|\\s*=\\s*\'[^\']*\'|\\s*=\\s*[^\\s"\'=<>`]+)?/).getRegex(),Z=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/,St=g(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace("label",Z).replace("href",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]+|(?=\\))/).replace("title",/"(?:\\\\"?|[^"\\\\])*"|\'(?:\\\\\'?|[^\'\\\\])*\'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),Se=g(/^!?\\[(label)\\]\\[(ref)\\]/).replace("label",Z).replace("ref",Y).getRegex(),_e=g(/^!?\\[(ref)\\](?:\\[\\])?/).replace("ref",Y).getRegex(),_t=g("reflink|nolink(?!\\\\()","g").replace("reflink",Se).replace("nolink",_e).getRegex(),ue=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,re={_backpedal:A,anyPunctuation:wt,autolink:yt,blockSkip:ht,br:we,code:lt,del:A,delLDelim:A,delRDelim:A,emStrongLDelim:pt,emStrongRDelimAst:gt,emStrongRDelimUnd:kt,escape:it,link:St,nolink:_e,punctuation:ot,reflink:Se,reflinkSearch:_t,tag:Tt,text:at,url:A},$t={...re,link:g(/^!?\\[(label)\\]\\((.*?)\\)/).replace("label",Z).getRegex(),reflink:g(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace("label",Z).getRegex()},W={...re,emStrongRDelimAst:dt,emStrongLDelim:ft,delLDelim:xt,delRDelim:mt,url:g(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace("protocol",ue).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_\'"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_\'"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:g(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)))/).replace("protocol",ue).getRegex()},Et={...W,br:g(we).replace("{2,}","*").getRegex(),text:g(W.text).replace("\\\\b_","\\\\b_| {2,}\\\\n").replace(/\\{2,\\}/g,"*").getRegex()},q={normal:te,gfm:rt,pedantic:st},O={normal:re,gfm:W,breaks:Et,pedantic:$t},zt={"&":"&","<":"<",">":">",\'"\':""","\'":"'"},he=t=>zt[t];function _(t,e){if(e){if(x.escapeTest.test(t))return t.replace(x.escapeReplace,he)}else if(x.escapeTestNoEncode.test(t))return t.replace(x.escapeReplaceNoEncode,he);return t}function pe(t){try{t=encodeURI(t).replace(x.percentDecode,"%")}catch{return null}return t}function fe(t,e){let n=t.replace(x.findPipe,(i,a,l)=>{let o=!1,c=a;for(;--c>=0&&l[c]==="\\\\";)o=!o;return o?"|":" |"}),s=n.split(x.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),e)if(s.length>e)s.splice(e);else for(;s.length<e;)s.push("");for(;r<s.length;r++)s[r]=s[r].trim().replace(x.slashPipe,"|");return s}function E(t,e,n){let s=t.length;if(s===0)return"";let r=0;for(;r<s;){let i=t.charAt(s-r-1);if(i===e&&!n)r++;else if(i!==e&&n)r++;else break}return t.slice(0,s-r)}function ge(t){let e=t.split(`\n`),n=e.length-1;for(;n>=0&&x.blankLine.test(e[n]);)n--;return e.length-n<=2?t:e.slice(0,n+1).join(`\n`)}function At(t,e){if(t.indexOf(e[1])===-1)return-1;let n=0;for(let s=0;s<t.length;s++)if(t[s]==="\\\\")s++;else if(t[s]===e[0])n++;else if(t[s]===e[1]&&(n--,n<0))return s;return n>0?-2:-1}function Lt(t,e=0){let n=e,s="";for(let r of t)if(r===" "){let i=4-n%4;s+=" ".repeat(i),n+=i}else s+=r,n++;return s}function de(t,e,n,s,r){let i=e.href,a=e.title||null,l=t[1].replace(r.other.outputLinkReplace,"$1");s.state.inLink=!0;let o={type:t[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:a,text:l,tokens:s.inlineTokens(l)};return s.state.inLink=!1,o}function It(t,e,n){let s=t.match(n.other.indentCodeCompensation);if(s===null)return e;let r=s[1];return e.split(`\n`).map(i=>{let a=i.match(n.other.beginningSpace);if(a===null)return i;let[l]=a;return l.length>=r.length?i.slice(r.length):i}).join(`\n`)}var j=class{options;rules;lexer;constructor(t){this.options=t||I}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let n=this.options.pedantic?e[0]:ge(e[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],s=It(n,e[3]||"",this.rules);return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:s}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(this.rules.other.endingHash.test(n)){let s=E(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:E(e[0],`\n`),depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:E(e[0],`\n`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=E(e[0],`\n`).split(`\n`),s="",r="",i=[];for(;n.length>0;){let a=!1,l=[],o;for(o=0;o<n.length;o++)if(this.rules.other.blockquoteStart.test(n[o]))l.push(n[o]),a=!0;else if(!a)l.push(n[o]);else break;n=n.slice(o);let c=l.join(`\n`),h=c.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}\n${c}`:c,r=r?`${r}\n${h}`:h;let u=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(h,i,!0),this.lexer.state.top=u,n.length===0)break;let p=i.at(-1);if(p?.type==="code")break;if(p?.type==="blockquote"){let k=p,d=k.raw+`\n`+n.join(`\n`),m=this.blockquote(d);i[i.length-1]=m,s=s.substring(0,s.length-k.raw.length)+m.raw,r=r.substring(0,r.length-k.text.length)+m.text;break}else if(p?.type==="list"){let k=p,d=k.raw+`\n`+n.join(`\n`),m=this.list(d);i[i.length-1]=m,s=s.substring(0,s.length-p.raw.length)+m.raw,r=r.substring(0,r.length-k.raw.length)+m.raw,n=d.substring(i.at(-1).raw.length).split(`\n`);continue}}return{type:"blockquote",raw:s,tokens:i,text:r}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n=e[1].trim(),s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let i=this.rules.other.listItemRegex(n),a=!1;for(;t;){let o=!1,c="",h="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;c=e[0],t=t.substring(c.length);let u=Lt(e[2].split(`\n`,1)[0],e[1].length),p=t.split(`\n`,1)[0],k=!u.trim(),d=0;if(this.options.pedantic?(d=2,h=u.trimStart()):k?d=e[1].length+1:(d=u.search(this.rules.other.nonSpaceChar),d=d>4?1:d,h=u.slice(d),d+=e[1].length),k&&this.rules.other.blankLine.test(p)&&(c+=p+`\n`,t=t.substring(p.length+1),o=!0),!o){let m=this.rules.other.nextBulletRegex(d),w=this.rules.other.hrRegex(d),y=this.rules.other.fencesBeginRegex(d),$=this.rules.other.headingBeginRegex(d),H=this.rules.other.htmlBeginRegex(d),z=this.rules.other.blockquoteBeginRegex(d);for(;t;){let b=t.split(`\n`,1)[0],S;if(p=b,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),S=p):S=p.replace(this.rules.other.tabCharGlobal," "),y.test(p)||$.test(p)||H.test(p)||z.test(p)||m.test(p)||w.test(p))break;if(S.search(this.rules.other.nonSpaceChar)>=d||!p.trim())h+=`\n`+S.slice(d);else{if(k||u.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(u)||$.test(u)||w.test(u))break;h+=`\n`+p}k=!p.trim(),c+=b+`\n`,t=t.substring(b.length+1),u=S.slice(d)}}r.loose||(a?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(a=!0)),r.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(h),loose:!1,text:h,tokens:[]}),r.raw+=c}let l=r.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let o of r.items){this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]);let c=o.tokens[0];if(o.task&&(c?.type==="text"||c?.type==="paragraph")){o.text=o.text.replace(this.rules.other.listReplaceTask,""),c.raw=c.raw.replace(this.rules.other.listReplaceTask,""),c.text=c.text.replace(this.rules.other.listReplaceTask,"");for(let u=this.lexer.inlineQueue.length-1;u>=0;u--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[u].src)){this.lexer.inlineQueue[u].src=this.lexer.inlineQueue[u].src.replace(this.rules.other.listReplaceTask,"");break}let h=this.rules.other.listTaskCheckbox.exec(o.raw);if(h){let u={type:"checkbox",raw:h[0]+" ",checked:h[0]!=="[ ]"};o.checked=u.checked,r.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=u.raw+o.tokens[0].raw,o.tokens[0].text=u.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(u)):o.tokens.unshift({type:"paragraph",raw:u.raw,text:u.raw,tokens:[u]}):o.tokens.unshift(u)}}else o.task&&(o.task=!1);if(!r.loose){let h=o.tokens.filter(p=>p.type==="space"),u=h.length>0&&h.some(p=>this.rules.other.anyLine.test(p.raw));r.loose=u}}if(r.loose)for(let o of r.items){o.loose=!0;for(let c of o.tokens)c.type==="text"&&(c.type="paragraph")}return r}}html(t){let e=this.rules.block.html.exec(t);if(e){let n=ge(e[0]);return{type:"html",block:!0,raw:n,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:n}}}def(t){let e=this.rules.block.def.exec(t);if(e){let n=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:n,raw:E(e[0],`\n`),href:s,title:r}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let n=fe(e[1]),s=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`\n`):[],i={type:"table",raw:E(e[0],`\n`),header:[],align:[],rows:[]};if(n.length===s.length){for(let a of s)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<n.length;a++)i.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:i.align[a]});for(let a of r)i.rows.push(fe(a,i.header.length).map((l,o)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[o]})));return i}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let n=e[1].trim();return{type:"heading",raw:E(e[0],`\n`),depth:e[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].charAt(e[1].length-1)===`\n`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:n,tokens:this.lexer.inline(n)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let n=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=E(n.slice(0,-1),"\\\\");if((n.length-i.length)%2===0)return}else{let i=At(e[2],"()");if(i===-2)return;if(i>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let s=e[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=e[3]?e[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),de(e,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=e[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return de(n,r,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let s=this.rules.inline.emStrongLDelim.exec(t);if(!(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=0,c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,e=e.slice(-1*t.length+r);(s=c.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(a=[...i].length,s[3]||s[4]){l+=a;continue}else if((s[5]||s[6])&&r%3&&!((r+a)%3)){o+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l+o);let h=[...s[0]][0].length,u=t.slice(0,r+s.index+h+a);if(Math.min(r,a)%2){let k=u.slice(1,-1);return{type:"em",raw:u,text:k,tokens:this.lexer.inlineTokens(k)}}let p=u.slice(2,-2);return{type:"strong",raw:u,text:p,tokens:this.lexer.inlineTokens(p)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:e[0],text:n}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,n=""){let s=this.rules.inline.delLDelim.exec(t);if(s&&(!s[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=this.rules.inline.delRDelim;for(o.lastIndex=0,e=e.slice(-1*t.length+r);(s=o.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i||(a=[...i].length,a!==r))continue;if(s[3]||s[4]){l+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l);let c=[...s[0]][0].length,h=t.slice(0,r+s.index+c+a),u=h.slice(r,-r);return{type:"del",raw:h,text:u,tokens:this.lexer.inlineTokens(u)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,s;return e[2]==="@"?(n=e[1],s="mailto:"+n):(n=e[1],s=n),{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,s;if(e[2]==="@")n=e[0],s="mailto:"+n;else{let r;do r=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(r!==e[0]);n=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:n}}}},R=class G{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||I,this.options.tokenizer=this.options.tokenizer||new j,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:x,block:q.normal,inline:O.normal};this.options.pedantic?(n.block=q.pedantic,n.inline=O.pedantic):this.options.gfm&&(n.block=q.gfm,this.options.breaks?n.inline=O.breaks:n.inline=O.gfm),this.tokenizer.rules=n}static get rules(){return{block:q,inline:O}}static lex(e,n){return new G(n).lex(e)}static lexInline(e,n){return new G(n).inlineTokens(e)}lex(e){e=e.replace(x.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let s=this.inlineQueue[n];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[],s=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(x.tabCharGlobal," ").replace(x.spaceLine,""));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(l=>(i=l.call({lexer:this},e,n))?(e=e.substring(i.raw.length),n.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let l=n.at(-1);i.raw.length===1&&l!==void 0?l.raw+=`\n`:n.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},n.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),n.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let l=1/0,o=e.slice(1),c;this.options.extensions.startBlock.forEach(h=>{c=h.call({lexer:this},o),typeof c=="number"&&c>=0&&(l=Math.min(l,c))}),l<1/0&&l>=0&&(a=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let l=n.at(-1);s&&l?.type==="paragraph"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i),s=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){this.tokenizer.lexer=this;let s=e;if(this.tokens.links){let l=Object.keys(this.tokens.links);l.length>0&&(s=s.replace(this.tokenizer.rules.inline.reflinkSearch,o=>l.includes(o.slice(o.lastIndexOf("[")+1,-1))?"["+"a".repeat(o.length-2)+"]":o))}s=s.replace(this.tokenizer.rules.inline.anyPunctuation,"++"),s=s.replace(this.tokenizer.rules.inline.blockSkip,(l,o,c)=>{let h=c?c.length:0;return l.slice(0,h)+"["+"a".repeat(l.length-h-2)+"]"}),s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let r=!1,i="",a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(i=""),r=!1;let l;if(this.options.extensions?.inline?.some(c=>(l=c.call({lexer:this},e,n))?(e=e.substring(l.raw.length),n.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let c=n.at(-1);l.type==="text"&&c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(l=this.tokenizer.emStrong(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.del(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),n.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),n.push(l);continue}let o=e;if(this.options.extensions?.startInline){let c=1/0,h=e.slice(1),u;this.options.extensions.startInline.forEach(p=>{u=p.call({lexer:this},h),typeof u=="number"&&u>=0&&(c=Math.min(c,u))}),c<1/0&&c>=0&&(o=e.substring(0,c+1))}if(l=this.tokenizer.inlineText(o)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(i=l.raw.slice(-1)),r=!0;let c=n.at(-1);c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return n}infiniteLoopError(e){let n="Infinite loop on byte: "+e;if(this.options.silent)console.error(n);else throw new Error(n)}},F=class{options;parser;constructor(t){this.options=t||I}space(t){return""}code({text:t,lang:e,escaped:n}){let s=(e||"").match(x.notSpaceStart)?.[0],r=t.replace(x.endingNewline,"")+`\n`;return s?\'<pre><code class="language-\'+_(s)+\'">\'+(n?r:_(r,!0))+`</code></pre>\n`:"<pre><code>"+(n?r:_(r,!0))+`</code></pre>\n`}blockquote({tokens:t}){return`<blockquote>\n${this.parser.parse(t)}</blockquote>\n`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>\n`}hr(t){return`<hr>\n`}list(t){let e=t.ordered,n=t.start,s="";for(let a=0;a<t.items.length;a++){let l=t.items[a];s+=this.listitem(l)}let r=e?"ol":"ul",i=e&&n!==1?\' start="\'+n+\'"\':"";return"<"+r+i+`>\n`+s+"</"+r+`>\n`}listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>\n`}checkbox({checked:t}){return"<input "+(t?\'checked="" \':"")+\'disabled="" type="checkbox"> \'}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>\n`}table(t){let e="",n="";for(let r=0;r<t.header.length;r++)n+=this.tablecell(t.header[r]);e+=this.tablerow({text:n});let s="";for(let r=0;r<t.rows.length;r++){let i=t.rows[r];n="";for(let a=0;a<i.length;a++)n+=this.tablecell(i[a]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>\n<thead>\n`+e+`</thead>\n`+s+`</table>\n`}tablerow({text:t}){return`<tr>\n${t}</tr>\n`}tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`</${n}>\n`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${_(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:n}){let s=this.parser.parseInline(n),r=pe(t);if(r===null)return s;t=r;let i=\'<a href="\'+t+\'"\';return e&&(i+=\' title="\'+_(e)+\'"\'),i+=">"+s+"</a>",i}image({href:t,title:e,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=pe(t);if(r===null)return _(n);t=r;let i=`<img src="${t}" alt="${_(n)}"`;return e&&(i+=` title="${_(e)}"`),i+=">",i}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:_(t.text)}},se=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}},T=class U{options;renderer;textRenderer;constructor(e){this.options=e||I,this.options.renderer=this.options.renderer||new F,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new se}static parse(e,n){return new U(n).parse(e)}static parseInline(e,n){return new U(n).parseInline(e)}parse(e){this.renderer.parser=this;let n="";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let a=r,l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(a.type)){n+=l||"";continue}}let i=r;switch(i.type){case"space":{n+=this.renderer.space(i);break}case"hr":{n+=this.renderer.hr(i);break}case"heading":{n+=this.renderer.heading(i);break}case"code":{n+=this.renderer.code(i);break}case"table":{n+=this.renderer.table(i);break}case"blockquote":{n+=this.renderer.blockquote(i);break}case"list":{n+=this.renderer.list(i);break}case"checkbox":{n+=this.renderer.checkbox(i);break}case"html":{n+=this.renderer.html(i);break}case"def":{n+=this.renderer.def(i);break}case"paragraph":{n+=this.renderer.paragraph(i);break}case"text":{n+=this.renderer.text(i);break}default:{let a=\'Token with "\'+i.type+\'" type was not found.\';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}parseInline(e,n=this.renderer){this.renderer.parser=this;let s="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let l=this.options.extensions.renderers[i.type].call({parser:this},i);if(l!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){s+=l||"";continue}}let a=i;switch(a.type){case"escape":{s+=n.text(a);break}case"html":{s+=n.html(a);break}case"link":{s+=n.link(a);break}case"image":{s+=n.image(a);break}case"checkbox":{s+=n.checkbox(a);break}case"strong":{s+=n.strong(a);break}case"em":{s+=n.em(a);break}case"codespan":{s+=n.codespan(a);break}case"br":{s+=n.br(a);break}case"del":{s+=n.del(a);break}case"text":{s+=n.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 s}},N=class{options;block;constructor(t){this.options=t||I}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(t=this.block){return t?R.lex:R.lexInline}provideParser(t=this.block){return t?T.parse:T.parseInline}},Ct=class{defaults=J();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=T;Renderer=F;TextRenderer=se;Lexer=R;Tokenizer=j;Hooks=N;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 i of r.header)n=n.concat(this.walkTokens(i.tokens,e));for(let i of r.rows)for(let a of i)n=n.concat(this.walkTokens(a.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(i=>{let a=r[i].flat(1/0);n=n.concat(this.walkTokens(a,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 i=e.renderers[r.name];i?e.renderers[r.name]=function(...a){let l=r.renderer.apply(this,a);return l===!1&&(l=i.apply(this,a)),l}: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 i=e[r.level];i?i.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 F(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer \'${i}\' does not exist`);if(["options","parser"].includes(i))continue;let a=i,l=n.renderer[a],o=r[a];r[a]=(...c)=>{let h=l.apply(r,c);return h===!1&&(h=o.apply(r,c)),h||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new j(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer \'${i}\' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,l=n.tokenizer[a],o=r[a];r[a]=(...c)=>{let h=l.apply(r,c);return h===!1&&(h=o.apply(r,c)),h}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new N;for(let i in n.hooks){if(!(i in r))throw new Error(`hook \'${i}\' does not exist`);if(["options","block"].includes(i))continue;let a=i,l=n.hooks[a],o=r[a];N.passThroughHooks.has(i)?r[a]=c=>{if(this.defaults.async&&N.passThroughHooksRespectAsync.has(i))return(async()=>{let u=await l.call(r,c);return o.call(r,u)})();let h=l.call(r,c);return o.call(r,h)}:r[a]=(...c)=>{if(this.defaults.async)return(async()=>{let u=await l.apply(r,c);return u===!1&&(u=await o.apply(r,c)),u})();let h=l.apply(r,c);return h===!1&&(h=o.apply(r,c)),h}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(a){let l=[];return l.push(i.call(this,a)),r&&(l=l.concat(r.call(this,a))),l}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return R.lex(t,e??this.defaults)}parser(t,e){return T.parse(t,e??this.defaults)}parseMarkdown(t){return(e,n)=>{let s={...n},r={...this.defaults,...s},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return i(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 i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(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 a=r.hooks?await r.hooks.preprocess(e):e,l=await(r.hooks?await r.hooks.provideLexer(t):t?R.lex:R.lexInline)(a,r),o=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(o,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(t):t?T.parse:T.parseInline)(o,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(i);try{r.hooks&&(e=r.hooks.preprocess(e));let a=(r.hooks?r.hooks.provideLexer(t):t?R.lex:R.lexInline)(e,r);r.hooks&&(a=r.hooks.processAllTokens(a)),r.walkTokens&&this.walkTokens(a,r.walkTokens);let l=(r.hooks?r.hooks.provideParser(t):t?T.parse:T.parseInline)(a,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(a){return i(a)}}}onError(t,e){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,t){let s="<p>An error occurred:</p><pre>"+_(n.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(n);throw n}}},L=new Ct;function f(t,e){return L.parse(t,e)}f.options=f.setOptions=function(t){return L.setOptions(t),f.defaults=L.defaults,ke(f.defaults),f};f.getDefaults=J;f.defaults=I;f.use=function(...t){return L.use(...t),f.defaults=L.defaults,ke(f.defaults),f};f.walkTokens=function(t,e){return L.walkTokens(t,e)};f.parseInline=L.parseInline;f.Parser=T;f.parser=T.parse;f.Renderer=F;f.TextRenderer=se;f.Lexer=R;f.lexer=R.lex;f.Tokenizer=j;f.Hooks=N;f.parse=f;var Ut=f.options,Jt=f.setOptions,Kt=f.use,Vt=f.walkTokens,Yt=f.parseInline;var en=T.parse,tn=R.lex;var $e=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*(?:\\n|$)/,Pt=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*$/;function Mt(t){let e=1,n=0;for(;n<t.length;){let s=t.indexOf(`\n`,n),r=s===-1?t.slice(n):t.slice(n,s),i=Pt.exec(r);if(i){if(i[1]!==void 0)e++;else if(e--,e===0)return n}if(s===-1)break;n=s+1}return-1}var Ee=[{name:"container",level:"block",tokenizer(t){let e=$e.exec(t);if(!e)return;let n=t.slice(e[0].length),s=Mt(n);if(s<0)return;let r=n.slice(0,s),i=n.indexOf(`\n`,s),a=i===-1?n.length:i+1,l=e[0]+n.slice(0,a),o=this.lexer.blockTokens(r,[]);return{type:"container",raw:l,kind:e[1],tokens:o}},renderer(t){return t.raw}}];function ie(t){return t.includes(":::")===!1?!1:new RegExp($e.source,"m").test(t)}var Le="([^\\\\]\\\\s]+)",Ot=new RegExp(`^\\\\[\\\\^${Le}\\\\]`),Ie=new RegExp(`^ {0,3}\\\\[\\\\^${Le}\\\\]:[ \\\\t]*([^\\\\n]*)\\\\n?`);function ze(t){return/^[ \\t]*$/.test(t)}var Ae=/^(?: {4}| {0,3}\\t)/;function Nt(t){let e=0;for(;;){let s=e;for(;;){let l=t.indexOf(`\n`,s);if(l===-1)return n(e,!0);let o=t.slice(s,l);if(!ze(o))break;s=l+1}let r=t.indexOf(`\n`,s),i=r===-1?t.slice(s):t.slice(s,r+1),a=r===-1?t.slice(s):t.slice(s,r);if(!Ae.test(a))return n(e,!1);if(e=s+i.length,r===-1)return n(e,!0)}function n(s,r){let i=t.slice(0,s),a=i.split(`\n`).map(l=>ze(l)?"":l.replace(Ae,"")).join(`\n`);return{raw:i,body:a,open:r}}}function le(t){return t.includes("[^")===!1?!1:new RegExp(Ie.source,"m").test(t)}var Ce=[{name:"footnoteRef",level:"inline",tokenizer(t){let e=Ot.exec(t);if(e)return{type:"footnoteRef",raw:e[0],label:e[1]}},renderer(t){return t.raw}},{name:"footnoteDef",level:"block",tokenizer(t){let e=Ie.exec(t);if(!e)return;let n=t.slice(e[0].length),s=Nt(n),r=s.body.trim()?this.lexer.blockTokens(s.body,[]):[];return{type:"footnoteDef",raw:e[0]+s.raw,label:e[1],body:e[2],tokens:r}},renderer(t){return t.raw}}];function Me(t,e,n){let s=0;for(let r=e;r<n;r++)s+=t[r].raw.length;return s}function vt(t,e){let n=t;return n.links=e,n}function Oe(t,e){for(let n=e;n+1<t.length;n++)if(t[n].type==="paragraph"&&t[n+1].type==="paragraph")return n;return t.length}function Dt(t,e){return t[e-2]?.type!=="list"?!0:e+1<t.length}function Ne(t,e,n){let s=Math.min(t.length-2,n-1);for(let r=s;r>=e;r--)if(t[r].type==="space"&&Dt(t,r+1)!==!1)return r+1;return-1}function ve(t){let e=t.links;if(!e)return!1;for(let n in e)return!0;return!1}function De(t,e,n,s,r){let i=r;for(let a=e;a<n;a++){let l=t[a].raw;if(s.startsWith(l,i)===!1)return!1;i+=l.length}return!0}function B(t,e,n){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!0,degradedReason:n}}function Pe(t,e){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!1,degradedReason:null}}function Bt(t,e){if(ve(e))return B(t,e,"link-definition");if(t.includes("\\r"))return B(t,e,"carriage-return");if(ie(t))return B(t,e,"container");if(le(t))return B(t,e,"footnote-def");let n=Oe(e,0),s=Ne(e,1,n);if(s<0||De(e,0,s,t,0)===!1)return Pe(t,e);let r=Me(e,0,s);return{source:t,tail:t.slice(r),tokens:e,stableCount:s,stableOffset:r,degraded:!1,degradedReason:null}}function ae(t){let e=f.lexer(t);return{tokens:e,cache:Bt(t,e),charsLexed:t.length,reusedTokens:0}}function D(t,e){let n=f.lexer(t);return{tokens:n,cache:B(t,n,e),charsLexed:t.length,reusedTokens:0}}function Be(t,e){let n=t.source+e;if(t.degraded)return D(n,t.degradedReason??"link-definition");if(e.includes("\\r"))return D(n,"carriage-return");if(t.stableCount===0)return ae(n);let s=t.tail+e;if(ie(s))return D(n,"container");if(le(s))return D(n,"footnote-def");let r=f.lexer(s);if(ve(r))return D(n,"link-definition");let i=t.tokens.slice(0,t.stableCount),a=vt([...i,...r],r.links),l=t.stableCount,o=t.stableOffset,c=s,h=Ne(a,t.stableCount+1,Oe(a,t.stableCount));if(h>t.stableCount&&De(a,t.stableCount,h,s,0)){let u=Me(a,t.stableCount,h);l=h,o=t.stableOffset+u,c=s.slice(u)}return{tokens:a,cache:{source:n,tail:c,tokens:a,stableCount:l,stableOffset:o,degraded:!1,degradedReason:null},charsLexed:s.length,reusedTokens:t.stableCount}}var qt=/^ {0,3}\\*\\[([^\\]\\n]+)\\]:[ \\t]*([^\\n]*)(?:\\n|$)/,qe=[{name:"abbrDef",level:"block",tokenizer(t){let e=qt.exec(t);if(e)return{type:"abbrDef",raw:e[0],term:e[1],definition:e[2]}},renderer(t){return t.raw}}];var Zt=Object.freeze({grinning:"\\u{1F600}",smiley:"\\u{1F603}",smile:"\\u{1F604}",grin:"\\u{1F601}",laughing:"\\u{1F606}",satisfied:"\\u{1F606}",sweat_smile:"\\u{1F605}",rofl:"\\u{1F923}",joy:"\\u{1F602}",slightly_smiling_face:"\\u{1F642}",upside_down_face:"\\u{1F643}",wink:"\\u{1F609}",blush:"\\u{1F60A}",innocent:"\\u{1F607}",heart_eyes:"\\u{1F60D}",star_struck:"\\u{1F929}",kissing_heart:"\\u{1F618}",yum:"\\u{1F60B}",stuck_out_tongue:"\\u{1F61B}",stuck_out_tongue_winking_eye:"\\u{1F61C}",stuck_out_tongue_closed_eyes:"\\u{1F61D}",hugs:"\\u{1F917}",thinking:"\\u{1F914}",neutral_face:"\\u{1F610}",expressionless:"\\u{1F611}",no_mouth:"\\u{1F636}",smirk:"\\u{1F60F}",unamused:"\\u{1F612}",roll_eyes:"\\u{1F644}",grimacing:"\\u{1F62C}",relieved:"\\u{1F60C}",pensive:"\\u{1F614}",sleepy:"\\u{1F62A}",sleeping:"\\u{1F634}",mask:"\\u{1F637}",dizzy_face:"\\u{1F635}",sunglasses:"\\u{1F60E}",nerd_face:"\\u{1F913}",confused:"\\u{1F615}",worried:"\\u{1F61F}",open_mouth:"\\u{1F62E}",hushed:"\\u{1F62F}",astonished:"\\u{1F632}",flushed:"\\u{1F633}",pleading_face:"\\u{1F97A}",fearful:"\\u{1F628}",cold_sweat:"\\u{1F630}",cry:"\\u{1F622}",sob:"\\u{1F62D}",scream:"\\u{1F631}",disappointed:"\\u{1F61E}",sweat:"\\u{1F613}",weary:"\\u{1F629}",tired_face:"\\u{1F62B}",triumph:"\\u{1F624}",rage:"\\u{1F621}",angry:"\\u{1F620}",smiling_imp:"\\u{1F608}",imp:"\\u{1F47F}",skull:"\\u{1F480}",clown_face:"\\u{1F921}",poop:"\\u{1F4A9}",ghost:"\\u{1F47B}",alien:"\\u{1F47D}",robot:"\\u{1F916}",thumbsup:"\\u{1F44D}","+1":"\\u{1F44D}",thumbsdown:"\\u{1F44E}","-1":"\\u{1F44E}",punch:"\\u{1F44A}",fist:"\\u270A",clap:"\\u{1F44F}",raised_hands:"\\u{1F64C}",open_hands:"\\u{1F450}",handshake:"\\u{1F91D}",pray:"\\u{1F64F}",muscle:"\\u{1F4AA}",eyes:"\\u{1F440}",wave:"\\u{1F44B}",point_up:"\\u261D\\uFE0F",point_down:"\\u{1F447}",point_left:"\\u{1F448}",point_right:"\\u{1F449}",ok_hand:"\\u{1F44C}",v:"\\u270C\\uFE0F",crossed_fingers:"\\u{1F91E}",heart:"\\u2764\\uFE0F",broken_heart:"\\u{1F494}",two_hearts:"\\u{1F495}",sparkling_heart:"\\u{1F496}",heartpulse:"\\u{1F497}",blue_heart:"\\u{1F499}",green_heart:"\\u{1F49A}",yellow_heart:"\\u{1F49B}",orange_heart:"\\u{1F9E1}",purple_heart:"\\u{1F49C}",black_heart:"\\u{1F5A4}",white_heart:"\\u{1F90D}",100:"\\u{1F4AF}",boom:"\\u{1F4A5}",collision:"\\u{1F4A5}",dizzy:"\\u{1F4AB}",sweat_drops:"\\u{1F4A6}",dash:"\\u{1F4A8}",zzz:"\\u{1F4A4}",fire:"\\u{1F525}",sparkles:"\\u2728",star:"\\u2B50",star2:"\\u{1F31F}",tada:"\\u{1F389}",confetti_ball:"\\u{1F38A}",balloon:"\\u{1F388}",gift:"\\u{1F381}",rocket:"\\u{1F680}",dart:"\\u{1F3AF}",trophy:"\\u{1F3C6}",warning:"\\u26A0\\uFE0F",no_entry_sign:"\\u{1F6AB}",white_check_mark:"\\u2705",x:"\\u274C",heavy_check_mark:"\\u2714\\uFE0F",question:"\\u2753",exclamation:"\\u2757",bulb:"\\u{1F4A1}",bell:"\\u{1F514}",computer:"\\u{1F4BB}",iphone:"\\u{1F4F1}",link:"\\u{1F517}",lock:"\\u{1F512}",unlock:"\\u{1F513}",key:"\\u{1F511}",mag:"\\u{1F50D}",bug:"\\u{1F41B}",package:"\\u{1F4E6}",memo:"\\u{1F4DD}",pencil2:"\\u270F\\uFE0F",book:"\\u{1F4D6}",books:"\\u{1F4DA}",pushpin:"\\u{1F4CC}",paperclip:"\\u{1F4CE}",calendar:"\\u{1F4C5}",file_folder:"\\u{1F4C1}",hammer:"\\u{1F528}",wrench:"\\u{1F527}",gear:"\\u2699\\uFE0F",chart_with_upwards_trend:"\\u{1F4C8}",chart_with_downwards_trend:"\\u{1F4C9}",bar_chart:"\\u{1F4CA}",construction:"\\u{1F6A7}",hourglass:"\\u23F3",stopwatch:"\\u23F1\\uFE0F",pizza:"\\u{1F355}",coffee:"\\u2615",beer:"\\u{1F37A}",cake:"\\u{1F382}",birthday:"\\u{1F382}",apple:"\\u{1F34E}",rainbow:"\\u{1F308}",sun_with_face:"\\u{1F31E}",crescent_moon:"\\u{1F319}",earth_americas:"\\u{1F30E}",dog:"\\u{1F436}",cat:"\\u{1F431}",fox_face:"\\u{1F98A}",bear:"\\u{1F43B}",panda_face:"\\u{1F43C}",monkey_face:"\\u{1F435}",see_no_evil:"\\u{1F648}",hear_no_evil:"\\u{1F649}",speak_no_evil:"\\u{1F64A}"}),jt=/^:([A-Za-z0-9_+-]+):/,Ze=[{name:"emoji",level:"inline",start(t){return t.match(/:/)?.index},tokenizer(t){let e=jt.exec(t);if(!e)return;let n=Zt[e[1]];if(n!==void 0)return{type:"emoji",raw:e[0],text:n}},renderer(t){return t.raw}}];var Ft=/^\\+\\+(?!\\s)((?:\\\\[\\s\\S]|(?!\\+\\+)[\\s\\S])+?)(?<!\\s)\\+\\+/,Xt=/^==(?!\\s)((?:\\\\[\\s\\S]|(?!==)[\\s\\S])+?)(?<!\\s)==/,je=[{name:"ins",level:"inline",start(t){return t.match(/(?<!\\\\)\\+\\+(?!\\s)/)?.index},tokenizer(t){let e=Ft.exec(t);if(e)return{type:"ins",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}},{name:"mark",level:"inline",start(t){return t.match(/(?<!\\\\)==(?!\\s)/)?.index},tokenizer(t){let e=Xt.exec(t);if(e)return{type:"mark",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var Qt=/^\\^((?:\\\\[\\s\\S]|[^\\s^\\\\])+)\\^/,Fe=[{name:"sup",level:"inline",start(t){return t.match(/(?<!\\\\)\\^(?!\\s)/)?.index},tokenizer(t){let e=Qt.exec(t);if(e)return{type:"sup",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var Ht=0;function Wt(t){if(typeof t!="string"||typeof performance.mark!="function"||typeof performance.measure!="function")return null;let e=Ht++,n={name:t,startMark:`${t}:start:${e}`,endMark:`${t}:end:${e}`};try{return performance.mark(n.startMark),n}catch{return null}}function Gt(t){if(t)try{performance.mark(t.endMark),performance.measure(t.name,t.startMark,t.endMark)}catch{}finally{try{performance.clearMarks?.(t.startMark),performance.clearMarks?.(t.endMark)}catch{}}}f.use({extensions:[...Ce,...Fe,...je,...Ze,...Ee,...qe,{name:"blockMath",level:"block",start(t){return t.match(/^ {0,3}\\$\\$/m)?.index},tokenizer(t){let e=/^ {0,3}\\$\\$((?:(?!\\n[ \\t]*\\n)[\\s\\S])+?)\\$\\$[ \\t]*(?:\\n|$)/.exec(t);if(e)return{type:"blockMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}},{name:"inlineMath",level:"inline",start(t){return t.match(/(?<![\\\\$])\\$(?![$\\s])/)?.index},tokenizer(t){let e=/^\\$(?![$\\s\\d])((?:\\\\\\$|[^$\\n])*?)(?<!\\s)\\$(?!\\d)/.exec(t);if(e)return{type:"inlineMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}}]});var M=new Map;self.onmessage=t=>{let e=t.data;if(typeof e!="object"||e===null)return;let{id:n,text:s,append:r,expectedLength:i,oldRaws:a,instance:l,baseVersion:o,dispose:c,userTimingName:h}=e;if(c===!0){typeof l=="string"&&M.delete(l);return}let u=typeof l=="string"?l:null,p=typeof o=="number"?o:null,k,d=null,m=null;if(typeof r=="string"){if(u===null||p===null){self.postMessage({id:n,needResync:!0});return}let w=M.get(u);if(!w||w.version!==p){self.postMessage({id:n,needResync:!0});return}if(typeof i=="number"&&w.lex.source.length+r.length!==i){M.delete(u),self.postMessage({id:n,needResync:!0});return}let y=w.lex;k=()=>Be(y,r),m=y.tokens}else if(typeof s=="string"){let w=s;if(k=()=>ae(w),Array.isArray(a))d=a;else if(u!==null&&p!==null){let y=M.get(u);if(y&&y.version===p)m=y.lex.tokens;else{self.postMessage({id:n,needResync:!0});return}}}else return;try{let w=typeof h=="string"?Wt(h):null,y=performance.now(),$;try{$=k()}finally{w&&Gt(w)}let H=performance.now()-y,z=$.tokens,b=0;if(d!==null){let S=Math.min(d.length,z.length);for(;b<S&&d[b]===z[b].raw;b++);}else if(m!==null){let S=m,oe=Math.min(S.length,z.length);for(b=Math.min($.reusedTokens,oe);b<oe&&S[b].raw===z[b].raw;b++);}u!==null&&p!==null&&M.set(u,{version:p+1,lex:$.cache}),self.postMessage({id:n,matchLen:b,tail:z.slice(b),lexerMs:H,sourceCharsLexed:$.charsLexed})}catch(w){u!==null&&M.delete(u),self.postMessage({id:n,error:String(w)})}};})();\n';
|
|
3188
|
+
var WORKER_SOURCE_STRING = '"use strict";(()=>{function K(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var C=K();function ke(t){C=t}var L={exec:()=>null};function P(t){let e=[];return n=>{let s=Math.max(0,Math.min(3,n-1)),r=e[s];return r||(r=t(s),e[s]=r),r}}function g(t,e=""){let n=typeof t=="string"?t:t.source,s={replace:(r,i)=>{let a=typeof i=="string"?i:i.source;return a=a.replace(b.caret,"$1"),n=n.replace(r,a),s},getRegex:()=>new RegExp(n,e)};return s}var Fe=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),b={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^\'"]*[^\\s])\\s+([\'"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>"\']/,escapeReplace:/[&<>"\']/g,escapeTestNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>"\']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:P(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ ][^\\\\n]*)?(?:\\\\n|$))`)),hrRegex:P(t=>new RegExp(`^ {0,${t}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`)),fencesBeginRegex:P(t=>new RegExp(`^ {0,${t}}(?:\\`\\`\\`|~~~)`)),headingBeginRegex:P(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:P(t=>new RegExp(`^ {0,${t}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:P(t=>new RegExp(`^ {0,${t}}>`))},Xe=/^(?:[ \\t]*(?:\\n|$))+/,He=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Ge=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,D=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Ue=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,V=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,xe=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,be=g(xe).replace(/bull/g,V).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,"").getRegex(),We=g(xe).replace(/bull/g,V).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\\s|$)/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),Y=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \\t]+\\n)[^\\n]+)*)/,Je=/^[^\\n]+/,ee=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,Ke=g(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace("label",ee).replace("title",/(?:"(?:\\\\"?|[^"\\\\])*"|\'[^\'\\n]*(?:\\n[^\'\\n]+)*\\n?\'|\\([^()]*\\))/).getRegex(),Ve=g(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/).replace(/bull/g,V).getRegex(),H="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",te=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Ye=g("^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n*|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>[^\\\\n]*\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>[^\\\\n]*\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>[^\\\\n]*\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ ]*)+\\\\n|$))","i").replace("comment",te).replace("tag",H).replace("attribute",/ +[a-zA-Z:_][\\w.:-]*(?: *= *"[^"\\n]*"| *= *\'[^\'\\n]*\'| *= *[^\\s"\'=<>`]+)?/).getRegex(),me=t=>g(Y).replace("hr",D).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list",t).replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",H).getRegex(),et=me(/ {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]/),tt=me(/ {0,3}(?:[*+-]|\\d{1,9}[.)])(?:[ \\t]|\\n|$)/),nt=g(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace("paragraph",tt).getRegex(),ne={blockquote:nt,code:He,def:Ke,fences:Ge,heading:Ue,hr:D,html:Ye,lheading:be,list:Ve,newline:Xe,paragraph:et,table:L,text:Je},ce=g("^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)").replace("hr",D).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",H).getRegex(),rt={...ne,lheading:We,table:ce,paragraph:g(Y).replace("hr",D).replace("heading"," {0,3}#{1,6}(?:\\\\s|$)").replace("|lheading","").replace("table",ce).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~~~)[^\\\\n]*\\\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]").replace("html","</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",H).getRegex()},st={...ne,html:g(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:"[^"]*"|\'[^\']*\'|\\\\s[^\'"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace("comment",te).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(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +(["(][^\\n]+[")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:L,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:g(Y).replace("hr",D).replace("heading",` *#{1,6} *[^\n]`).replace("lheading",be).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},it=/^\\\\([!"#$%&\'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,lt=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,we=/^( {2,}|\\\\)\\n(?!\\s*$)/,at=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,$=/[\\p{P}\\p{S}]/u,M=/[\\s\\p{P}\\p{S}]/u,B=/[^\\s\\p{P}\\p{S}]/u,ot=g(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,M).getRegex(),ct=/[\\p{Pi}\\p{Ps}"\']/u,ye=/(?!~)[\\p{P}\\p{S}]/u,pt=/(?!~)[\\s\\p{P}\\p{S}]/u,ut=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ht=g(/link|precode-code|html/,"g").replace("link",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace("precode-",Fe?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Re=/^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/,gt=g(Re,"u").replace(/punct/g,$).getRegex(),ft=g(Re,"u").replace(/punct/g,ye).getRegex(),dt=/^(?:\\*+(?:((?!\\*)(?!openQuote)punct)|([^\\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\\s_]))?/,kt=g(dt,"u").replace(/openQuote/g,ct).replace(/punct/g,$).getRegex(),Te="^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)",xt=g(Te,"gu").replace(/notPunctSpace/g,B).replace(/punctSpace/g,M).replace(/punct/g,$).getRegex(),bt=g(Te,"gu").replace(/notPunctSpace/g,ut).replace(/punctSpace/g,pt).replace(/punct/g,ye).getRegex(),mt="^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)[\\\\s](\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|(?:(?!\\\\*)punct|notPunctSpace)(\\\\*+)(?!\\\\*)(?=notPunctSpace)",wt=g(mt,"gu").replace(/notPunctSpace/g,B).replace(/punctSpace/g,M).replace(/punct/g,$).getRegex(),yt=g("^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,B).replace(/punctSpace/g,M).replace(/punct/g,$).getRegex(),Rt="^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\\\s](_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)",Tt=g(Rt,"gu").replace(/notPunctSpace/g,B).replace(/punctSpace/g,M).replace(/punct/g,$).getRegex(),_t=g(/^~~?(?:((?!~)punct)|[^\\s~])/,"u").replace(/punct/g,$).getRegex(),St="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",$t=g(St,"gu").replace(/notPunctSpace/g,B).replace(/punctSpace/g,M).replace(/punct/g,$).getRegex(),Et=g(/\\\\(punct)/,"gu").replace(/punct/g,$).getRegex(),zt=g(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&\'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),At=g(te).replace("(?:-->|$)","-->").getRegex(),Lt=g("^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>").replace("comment",At).replace("attribute",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*"[^"]*"|\\s*=\\s*\'[^\']*\'|\\s*=\\s*[^\\s"\'=<>`]+)?/).getRegex(),Q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/,It=g(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace("label",Q).replace("href",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]+|(?=\\))/).replace("title",/"(?:\\\\"?|[^"\\\\])*"|\'(?:\\\\\'?|[^\'\\\\])*\'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),_e=g(/^!?\\[(label)\\]\\[(ref)\\]/).replace("label",Q).replace("ref",ee).getRegex(),Se=g(/^!?\\[(ref)\\](?:\\[\\])?/).replace("ref",ee).getRegex(),Ct=g("reflink|nolink(?!\\\\()","g").replace("reflink",_e).replace("nolink",Se).getRegex(),pe=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,re={_backpedal:L,anyPunctuation:Et,autolink:zt,blockSkip:ht,br:we,code:lt,del:L,delLDelim:L,delRDelim:L,emStrongLDelim:gt,emStrongRDelimAst:xt,emStrongRDelimUnd:yt,escape:it,link:It,nolink:Se,punctuation:ot,reflink:_e,reflinkSearch:Ct,tag:Lt,text:at,url:L},Pt={...re,emStrongLDelim:kt,emStrongRDelimAst:wt,emStrongRDelimUnd:Tt,link:g(/^!?\\[(label)\\]\\((.*?)\\)/).replace("label",Q).getRegex(),reflink:g(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace("label",Q).getRegex()},U={...re,emStrongRDelimAst:bt,emStrongLDelim:ft,delLDelim:_t,delRDelim:$t,url:g(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace("protocol",pe).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_\'"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_\'"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:g(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&\'*+\\/=?_`{\\|}~-]+@)))/).replace("protocol",pe).getRegex()},Mt={...U,br:g(we).replace("{2,}","*").getRegex(),text:g(U.text).replace("\\\\b_","\\\\b_| {2,}\\\\n").replace(/\\{2,\\}/g,"*").getRegex()},j={normal:ne,gfm:rt,pedantic:st},N={normal:re,gfm:U,breaks:Mt,pedantic:Pt},Ot={"&":"&","<":"<",">":">",\'"\':""","\'":"'"},ue=t=>Ot[t];function S(t,e){if(e){if(b.escapeTest.test(t))return t.replace(b.escapeReplace,ue)}else if(b.escapeTestNoEncode.test(t))return t.replace(b.escapeReplaceNoEncode,ue);return t}function he(t){try{t=encodeURI(t).replace(b.percentDecode,"%")}catch{return null}return t}function ge(t,e){let n=t.replace(b.findPipe,(i,a,l)=>{let o=!1,c=a;for(;--c>=0&&l[c]==="\\\\";)o=!o;return o?"|":" |"}),s=n.split(b.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!s.at(-1)?.trim()&&s.pop(),e)if(s.length>e)s.splice(e);else for(;s.length<e;)s.push("");for(;r<s.length;r++)s[r]=s[r].trim().replace(b.slashPipe,"|");return s}function z(t,e,n){let s=t.length;if(s===0)return"";let r=0;for(;r<s;){let i=t.charAt(s-r-1);if(i===e&&!n)r++;else if(i!==e&&n)r++;else break}return t.slice(0,s-r)}function fe(t){let e=t.split(`\n`),n=e.length-1;for(;n>=0&&b.blankLine.test(e[n]);)n--;return e.length-n<=2?t:e.slice(0,n+1).join(`\n`)}function Nt(t,e){if(t.indexOf(e[1])===-1)return-1;let n=0;for(let s=0;s<t.length;s++)if(t[s]==="\\\\")s++;else if(t[s]===e[0])n++;else if(t[s]===e[1]&&(n--,n<0))return s;return n>0?-2:-1}function vt(t,e=0){let n=e,s="";for(let r of t)if(r===" "){let i=4-n%4;s+=" ".repeat(i),n+=i}else s+=r,n++;return s}function de(t,e,n,s,r){let i=e.href,a=e.title||null,l=t[1].replace(r.other.outputLinkReplace,"$1");s.state.inLink=!0;let o={type:t[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:a,text:l,tokens:s.inlineTokens(l)};return s.state.inLink=!1,o}function Dt(t,e,n){let s=t.match(n.other.indentCodeCompensation);if(s===null)return e;let r=s[1];return e.split(`\n`).map(i=>{let a=i.match(n.other.beginningSpace);if(a===null)return i;let[l]=a;return l.length>=r.length?i.slice(r.length):i}).join(`\n`)}var F=class{options;rules;lexer;constructor(t){this.options=t||C}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let n=this.options.pedantic?e[0]:fe(e[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],s=Dt(n,e[3]||"",this.rules);return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:s}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(this.rules.other.endingHash.test(n)){let s=z(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:z(e[0],`\n`),depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:z(e[0],`\n`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=z(e[0],`\n`).split(`\n`),s="",r="",i=[];for(;n.length>0;){let a=!1,l=[],o;for(o=0;o<n.length;o++)if(this.rules.other.blockquoteStart.test(n[o]))l.push(n[o]),a=!0;else if(!a)l.push(n[o]);else break;n=n.slice(o);let c=l.join(`\n`),u=c.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}\n${c}`:c,r=r?`${r}\n${u}`:u;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(u,i,!0),this.lexer.state.top=p,n.length===0)break;let h=i.at(-1);if(h?.type==="code")break;if(h?.type==="blockquote"){let k=h,d=n.join(`\n`),m=k.raw+`\n`+d.replace(this.rules.other.blockquoteSetextReplace2,""),x=this.blockquote(m);i[i.length-1]=x,s=`${s}\n${d}`,r=r.substring(0,r.length-k.text.length)+x.text;break}else if(h?.type==="list"){let k=h,d=k.raw+`\n`+n.join(`\n`),m=this.list(d);i[i.length-1]=m,s=s.substring(0,s.length-h.raw.length)+m.raw,r=r.substring(0,r.length-k.raw.length)+m.raw,n=d.substring(i.at(-1).raw.length).split(`\n`);continue}}return{type:"blockquote",raw:s,tokens:i,text:r}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n=e[1].trim(),s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let i=this.rules.other.listItemRegex(n),a=!1;for(;t;){let o=!1,c="",u="";if(!(e=i.exec(t))||this.rules.block.hr.test(t))break;c=e[0],t=t.substring(c.length);let p=vt(e[2].split(`\n`,1)[0],e[1].length),h=t.split(`\n`,1)[0],k=!p.trim(),d=0;if(this.options.pedantic?(d=2,u=p.trimStart()):k?d=e[1].length+1:(d=p.search(this.rules.other.nonSpaceChar),d=d>4?1:d,u=p.slice(d),d+=e[1].length),k&&this.rules.other.blankLine.test(h)&&(c+=h+`\n`,t=t.substring(h.length+1),o=!0),!o){let m=this.rules.other.nextBulletRegex(d),x=this.rules.other.hrRegex(d),y=this.rules.other.fencesBeginRegex(d),E=this.rules.other.headingBeginRegex(d),G=this.rules.other.htmlBeginRegex(d),A=this.rules.other.blockquoteBeginRegex(d);for(;t;){let w=t.split(`\n`,1)[0],_;if(h=w,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),_=h):_=h.replace(this.rules.other.tabCharGlobal," "),y.test(h)||E.test(h)||G.test(h)||A.test(h)||m.test(h)||x.test(h))break;if(_.search(this.rules.other.nonSpaceChar)>=d||!h.trim())u+=`\n`+_.slice(d);else{if(k||p.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(p)||E.test(p)||x.test(p))break;u+=`\n`+h}k=!h.trim(),c+=w+`\n`,t=t.substring(w.length+1),p=_.slice(d)}}r.loose||(a?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(a=!0)),r.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(u),loose:!1,text:u,tokens:[]}),r.raw+=c}let l=r.items.at(-1);if(l)l.raw=l.raw.trimEnd(),l.text=l.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let o of r.items){this.lexer.state.top=!1,o.tokens=this.lexer.blockTokens(o.text,[]);let c=o.tokens[0];if(o.task&&(c?.type==="text"||c?.type==="paragraph")){o.text=o.text.replace(this.rules.other.listReplaceTask,""),c.raw=c.raw.replace(this.rules.other.listReplaceTask,""),c.text=c.text.replace(this.rules.other.listReplaceTask,"");for(let p=this.lexer.inlineQueue.length-1;p>=0;p--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[p].src)){this.lexer.inlineQueue[p].src=this.lexer.inlineQueue[p].src.replace(this.rules.other.listReplaceTask,"");break}let u=this.rules.other.listTaskCheckbox.exec(o.raw);if(u){let p={type:"checkbox",raw:u[0]+" ",checked:u[0]!=="[ ]"};o.checked=p.checked,r.loose?o.tokens[0]&&["paragraph","text"].includes(o.tokens[0].type)&&"tokens"in o.tokens[0]&&o.tokens[0].tokens?(o.tokens[0].raw=p.raw+o.tokens[0].raw,o.tokens[0].text=p.raw+o.tokens[0].text,o.tokens[0].tokens.unshift(p)):o.tokens.unshift({type:"paragraph",raw:p.raw,text:p.raw,tokens:[p]}):o.tokens.unshift(p)}}else o.task&&(o.task=!1);if(!r.loose){let u=o.tokens.filter(h=>h.type==="space"),p=u.length>0&&u.some(h=>this.rules.other.anyLine.test(h.raw));r.loose=p}}if(r.loose)for(let o of r.items){o.loose=!0;for(let c of o.tokens)c.type==="text"&&(c.type="paragraph")}return r}}html(t){let e=this.rules.block.html.exec(t);if(e){let n=fe(e[0]);return{type:"html",block:!0,raw:n,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:n}}}def(t){let e=this.rules.block.def.exec(t);if(e){let n=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:n,raw:z(e[0],`\n`),href:s,title:r}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let n=ge(e[1]),s=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`\n`):[],i={type:"table",raw:z(e[0],`\n`),header:[],align:[],rows:[]};if(n.length===s.length){for(let a of s)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a<n.length;a++)i.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:i.align[a]});for(let a of r)i.rows.push(ge(a,i.header.length).map((l,o)=>({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[o]})));return i}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let n=e[1].trim();return{type:"heading",raw:z(e[0],`\n`),depth:e[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].charAt(e[1].length-1)===`\n`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:n,tokens:this.lexer.inline(n)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let n=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=z(n.slice(0,-1),"\\\\");if((n.length-i.length)%2===0)return}else{let i=Nt(e[2],"()");if(i===-2)return;if(i>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+i;e[2]=e[2].substring(0,i),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let s=e[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=e[3]?e[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),de(e,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=e[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return de(n,r,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let s=this.rules.inline.emStrongLDelim.exec(t);if(!(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=0,c=s[0][0],u=n===c,p=c==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(p.lastIndex=0,e=e.slice(-1*t.length+r);(s=p.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(a=[...i].length,s[3]||s[4]){l+=a;continue}else if(s[5]||s[6]){if(r%3&&!((r+a)%3)){o+=a;continue}if(u)break}if(l-=a,l>0)continue;a=Math.min(a,a+l+o);let h=[...s[0]][0].length,k=t.slice(0,r+s.index+h+a);if(Math.min(r,a)%2){let m=k.slice(1,-1);return{type:"em",raw:k,text:m,tokens:this.lexer.inlineTokens(m)}}let d=k.slice(2,-2);return{type:"strong",raw:k,text:d,tokens:this.lexer.inlineTokens(d)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:e[0],text:n}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,n=""){let s=this.rules.inline.delLDelim.exec(t);if(s&&(!s[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,a,l=r,o=this.rules.inline.delRDelim;for(o.lastIndex=0,e=e.slice(-1*t.length+r);(s=o.exec(e))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i||(a=[...i].length,a!==r))continue;if(s[3]||s[4]){l+=a;continue}if(l-=a,l>0)continue;a=Math.min(a,a+l);let c=[...s[0]][0].length,u=t.slice(0,r+s.index+c+a),p=u.slice(r,-r);return{type:"del",raw:u,text:p,tokens:this.lexer.inlineTokens(p)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,s;return e[2]==="@"?(n=e[1],s="mailto:"+n):(n=e[1],s=n),{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,s;if(e[2]==="@")n=e[0],s="mailto:"+n;else{let r;do r=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(r!==e[0]);n=e[0],e[1]==="www."?s="http://"+e[0]:s=e[0]}return{type:"link",raw:e[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:n}}}},R=class W{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||C,this.options.tokenizer=this.options.tokenizer||new F,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:b,block:j.normal,inline:N.normal};this.options.pedantic?(n.block=j.pedantic,n.inline=N.pedantic):this.options.gfm&&(n.block=j.gfm,this.options.breaks?n.inline=N.breaks:n.inline=N.gfm),this.tokenizer.rules=n}static get rules(){return{block:j,inline:N}}static lex(e,n){return new W(n).lex(e)}static lexInline(e,n){return new W(n).inlineTokens(e)}lex(e){e=e.replace(b.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let s=this.inlineQueue[n];this.inlineTokens(s.src,s.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[],s=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(b.tabCharGlobal," ").replace(b.spaceLine,""));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let i;if(this.options.extensions?.block?.some(l=>(i=l.call({lexer:this},e,n))?(e=e.substring(i.raw.length),n.push(i),!0):!1))continue;if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length);let l=n.at(-1);i.raw.length===1&&l!==void 0?l.raw+=`\n`:n.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="paragraph"||l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.raw,this.inlineQueue.at(-1).src=l.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title},n.push(i));continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),n.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),n.push(i);continue}let a=e;if(this.options.extensions?.startBlock){let l=1/0,o=e.slice(1),c;this.options.extensions.startBlock.forEach(u=>{c=u.call({lexer:this},o),typeof c=="number"&&c>=0&&(l=Math.min(l,c))}),l<1/0&&l>=0&&(a=e.substring(0,l+1))}if(this.state.top&&(i=this.tokenizer.paragraph(a))){let l=n.at(-1);s&&l?.type==="paragraph"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i),s=a.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length);let l=n.at(-1);l?.type==="text"?(l.raw+=(l.raw.endsWith(`\n`)?"":`\n`)+i.raw,l.text+=`\n`+i.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):n.push(i);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){this.tokenizer.lexer=this;let s=e;if(this.tokens.links){let l=Object.keys(this.tokens.links);l.length>0&&(s=s.replace(this.tokenizer.rules.inline.reflinkSearch,o=>l.includes(o.slice(o.lastIndexOf("[")+1,-1))?"["+"a".repeat(o.length-2)+"]":o))}s=s.replace(this.tokenizer.rules.inline.anyPunctuation,"++"),s=s.replace(this.tokenizer.rules.inline.blockSkip,(l,o,c)=>{let u=c?c.length:0;return l.slice(0,u)+"["+"a".repeat(l.length-u-2)+"]"}),s=this.options.hooks?.emStrongMask?.call({lexer:this},s)??s;let r=!1,i="",a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}r||(i=""),r=!1;let l;if(this.options.extensions?.inline?.some(c=>(l=c.call({lexer:this},e,n))?(e=e.substring(l.raw.length),n.push(l),!0):!1))continue;if(l=this.tokenizer.escape(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.tag(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.link(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(l.raw.length);let c=n.at(-1);l.type==="text"&&c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(l=this.tokenizer.emStrong(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.codespan(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.br(e)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.del(e,s,i)){e=e.substring(l.raw.length),n.push(l);continue}if(l=this.tokenizer.autolink(e)){e=e.substring(l.raw.length),n.push(l);continue}if(!this.state.inLink&&(l=this.tokenizer.url(e))){e=e.substring(l.raw.length),n.push(l);continue}let o=e;if(this.options.extensions?.startInline){let c=1/0,u=e.slice(1),p;this.options.extensions.startInline.forEach(h=>{p=h.call({lexer:this},u),typeof p=="number"&&p>=0&&(c=Math.min(c,p))}),c<1/0&&c>=0&&(o=e.substring(0,c+1))}if(l=this.tokenizer.inlineText(o)){e=e.substring(l.raw.length),l.raw.slice(-1)!=="_"&&(i=l.raw.slice(-1)),r=!0;let c=n.at(-1);c?.type==="text"?(c.raw+=l.raw,c.text+=l.text):n.push(l);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return n}infiniteLoopError(e){let n="Infinite loop on byte: "+e;if(this.options.silent)console.error(n);else throw new Error(n)}},X=class{options;parser;constructor(t){this.options=t||C}space(t){return""}code({text:t,lang:e,escaped:n}){let s=(e||"").match(b.notSpaceStart)?.[0],r=t.replace(b.endingNewline,"")+`\n`;return s?\'<pre><code class="language-\'+S(s)+\'">\'+(n?r:S(r,!0))+`</code></pre>\n`:"<pre><code>"+(n?r:S(r,!0))+`</code></pre>\n`}blockquote({tokens:t}){return`<blockquote>\n${this.parser.parse(t)}</blockquote>\n`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>\n`}hr(t){return`<hr>\n`}list(t){let e=t.ordered,n=t.start,s="";for(let a=0;a<t.items.length;a++){let l=t.items[a];s+=this.listitem(l)}let r=e?"ol":"ul",i=e&&n!==1?\' start="\'+n+\'"\':"";return"<"+r+i+`>\n`+s+"</"+r+`>\n`}listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>\n`}checkbox({checked:t}){return"<input "+(t?\'checked="" \':"")+\'disabled="" type="checkbox"> \'}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>\n`}table(t){let e="",n="";for(let r=0;r<t.header.length;r++)n+=this.tablecell(t.header[r]);e+=this.tablerow({text:n});let s="";for(let r=0;r<t.rows.length;r++){let i=t.rows[r];n="";for(let a=0;a<i.length;a++)n+=this.tablecell(i[a]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>\n<thead>\n`+e+`</thead>\n`+s+`</table>\n`}tablerow({text:t}){return`<tr>\n${t}</tr>\n`}tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`</${n}>\n`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${S(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:n}){let s=this.parser.parseInline(n),r=he(t);if(r===null)return s;t=r;let i=\'<a href="\'+t+\'"\';return e&&(i+=\' title="\'+S(e)+\'"\'),i+=">"+s+"</a>",i}image({href:t,title:e,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=he(t);if(r===null)return S(n);t=r;let i=`<img src="${t}" alt="${S(n)}"`;return e&&(i+=` title="${S(e)}"`),i+=">",i}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:S(t.text)}},se=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}},T=class J{options;renderer;textRenderer;constructor(e){this.options=e||C,this.options.renderer=this.options.renderer||new X,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new se}static parse(e,n){return new J(n).parse(e)}static parseInline(e,n){return new J(n).parseInline(e)}parse(e){this.renderer.parser=this;let n="";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let a=r,l=this.options.extensions.renderers[a.type].call({parser:this},a);if(l!==!1||!["space","hr","heading","code","table","blockquote","list","checkbox","html","def","paragraph","text"].includes(a.type)){n+=l||"";continue}}let i=r;switch(i.type){case"space":{n+=this.renderer.space(i);break}case"hr":{n+=this.renderer.hr(i);break}case"heading":{n+=this.renderer.heading(i);break}case"code":{n+=this.renderer.code(i);break}case"table":{n+=this.renderer.table(i);break}case"blockquote":{n+=this.renderer.blockquote(i);break}case"list":{n+=this.renderer.list(i);break}case"checkbox":{n+=this.renderer.checkbox(i);break}case"html":{n+=this.renderer.html(i);break}case"def":{n+=this.renderer.def(i);break}case"paragraph":{n+=this.renderer.paragraph(i);break}case"text":{n+=this.renderer.text(i);break}default:{let a=\'Token with "\'+i.type+\'" type was not found.\';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}parseInline(e,n=this.renderer){this.renderer.parser=this;let s="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let l=this.options.extensions.renderers[i.type].call({parser:this},i);if(l!==!1||!["escape","html","link","image","checkbox","strong","em","codespan","br","del","text"].includes(i.type)){s+=l||"";continue}}let a=i;switch(a.type){case"escape":{s+=n.text(a);break}case"html":{s+=n.html(a);break}case"link":{s+=n.link(a);break}case"image":{s+=n.image(a);break}case"checkbox":{s+=n.checkbox(a);break}case"strong":{s+=n.strong(a);break}case"em":{s+=n.em(a);break}case"codespan":{s+=n.codespan(a);break}case"br":{s+=n.br(a);break}case"del":{s+=n.del(a);break}case"text":{s+=n.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 s}},v=class{options;block;constructor(t){this.options=t||C}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(t=this.block){return t?R.lex:R.lexInline}provideParser(t=this.block){return t?T.parse:T.parseInline}},Bt=class{defaults=K();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=T;Renderer=X;TextRenderer=se;Lexer=R;Tokenizer=F;Hooks=v;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 i of r.header)n=n.concat(this.walkTokens(i.tokens,e));for(let i of r.rows)for(let a of i)n=n.concat(this.walkTokens(a.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(i=>{let a=r[i].flat(1/0);n=n.concat(this.walkTokens(a,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 i=e.renderers[r.name];i?e.renderers[r.name]=function(...a){let l=r.renderer.apply(this,a);return l===!1&&(l=i.apply(this,a)),l}: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 i=e[r.level];i?i.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 X(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer \'${i}\' does not exist`);if(["options","parser"].includes(i))continue;let a=i,l=n.renderer[a],o=r[a];r[a]=(...c)=>{let u=l.apply(r,c);return u===!1&&(u=o.apply(r,c)),u||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new F(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer \'${i}\' does not exist`);if(["options","rules","lexer"].includes(i))continue;let a=i,l=n.tokenizer[a],o=r[a];r[a]=(...c)=>{let u=l.apply(r,c);return u===!1&&(u=o.apply(r,c)),u}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new v;for(let i in n.hooks){if(!(i in r))throw new Error(`hook \'${i}\' does not exist`);if(["options","block"].includes(i))continue;let a=i,l=n.hooks[a],o=r[a];v.passThroughHooks.has(i)?r[a]=c=>{if(this.defaults.async&&v.passThroughHooksRespectAsync.has(i))return(async()=>{let p=await l.call(r,c);return o.call(r,p)})();let u=l.call(r,c);return o.call(r,u)}:r[a]=(...c)=>{if(this.defaults.async)return(async()=>{let p=await l.apply(r,c);return p===!1&&(p=await o.apply(r,c)),p})();let u=l.apply(r,c);return u===!1&&(u=o.apply(r,c)),u}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(a){let l=[];return l.push(i.call(this,a)),r&&(l=l.concat(r.call(this,a))),l}}this.defaults={...this.defaults,...s}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return R.lex(t,e??this.defaults)}parser(t,e){return T.parse(t,e??this.defaults)}parseMarkdown(t){return(e,n)=>{let s={...n},r={...this.defaults,...s},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return i(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 i(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return i(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 a=r.hooks?await r.hooks.preprocess(e):e,l=await(r.hooks?await r.hooks.provideLexer(t):t?R.lex:R.lexInline)(a,r),o=r.hooks?await r.hooks.processAllTokens(l):l;r.walkTokens&&await Promise.all(this.walkTokens(o,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(t):t?T.parse:T.parseInline)(o,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(i);try{r.hooks&&(e=r.hooks.preprocess(e));let a=(r.hooks?r.hooks.provideLexer(t):t?R.lex:R.lexInline)(e,r);r.hooks&&(a=r.hooks.processAllTokens(a)),r.walkTokens&&this.walkTokens(a,r.walkTokens);let l=(r.hooks?r.hooks.provideParser(t):t?T.parse:T.parseInline)(a,r);return r.hooks&&(l=r.hooks.postprocess(l)),l}catch(a){return i(a)}}}onError(t,e){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,t){let s="<p>An error occurred:</p><pre>"+S(n.message+"",!0)+"</pre>";return e?Promise.resolve(s):s}if(e)return Promise.reject(n);throw n}}},I=new Bt;function f(t,e){return I.parse(t,e)}f.options=f.setOptions=function(t){return I.setOptions(t),f.defaults=I.defaults,ke(f.defaults),f};f.getDefaults=K;f.defaults=C;function qt(...t){return I.use(...t),f.defaults=I.defaults,ke(f.defaults),f}f.use=qt;f.walkTokens=function(t,e){return I.walkTokens(t,e)};f.parseInline=I.parseInline;f.Parser=T;f.parser=T.parse;f.Renderer=X;f.TextRenderer=se;f.Lexer=R;f.lexer=R.lex;f.Tokenizer=F;f.Hooks=v;f.parse=f;var rn=f.options,sn=f.setOptions,ln=f.walkTokens,an=f.parseInline;var on=T.parse,cn=R.lex;var $e=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*(?:\\n|$)/,Zt=/^ {0,3}:::([A-Za-z][\\w-]*)?[ \\t]*$/;function jt(t){let e=1,n=0;for(;n<t.length;){let s=t.indexOf(`\n`,n),r=s===-1?t.slice(n):t.slice(n,s),i=Zt.exec(r);if(i){if(i[1]!==void 0)e++;else if(e--,e===0)return n}if(s===-1)break;n=s+1}return-1}var Ee=[{name:"container",level:"block",tokenizer(t){let e=$e.exec(t);if(!e)return;let n=t.slice(e[0].length),s=jt(n);if(s<0)return;let r=n.slice(0,s),i=n.indexOf(`\n`,s),a=i===-1?n.length:i+1,l=e[0]+n.slice(0,a),o=this.lexer.blockTokens(r,[]);return{type:"container",raw:l,kind:e[1],tokens:o}},renderer(t){return t.raw}}];function ie(t){return t.includes(":::")===!1?!1:new RegExp($e.source,"m").test(t)}var Le="([^\\\\]\\\\s]+)",Qt=new RegExp(`^\\\\[\\\\^${Le}\\\\]`),Ie=new RegExp(`^ {0,3}\\\\[\\\\^${Le}\\\\]:[ \\\\t]*([^\\\\n]*)\\\\n?`);function ze(t){return/^[ \\t]*$/.test(t)}var Ae=/^(?: {4}| {0,3}\\t)/;function Ft(t){let e=0;for(;;){let s=e;for(;;){let l=t.indexOf(`\n`,s);if(l===-1)return n(e,!0);let o=t.slice(s,l);if(!ze(o))break;s=l+1}let r=t.indexOf(`\n`,s),i=r===-1?t.slice(s):t.slice(s,r+1),a=r===-1?t.slice(s):t.slice(s,r);if(!Ae.test(a))return n(e,!1);if(e=s+i.length,r===-1)return n(e,!0)}function n(s,r){let i=t.slice(0,s),a=i.split(`\n`).map(l=>ze(l)?"":l.replace(Ae,"")).join(`\n`);return{raw:i,body:a,open:r}}}function le(t){return t.includes("[^")===!1?!1:new RegExp(Ie.source,"m").test(t)}var Ce=[{name:"footnoteRef",level:"inline",tokenizer(t){let e=Qt.exec(t);if(e)return{type:"footnoteRef",raw:e[0],label:e[1]}},renderer(t){return t.raw}},{name:"footnoteDef",level:"block",tokenizer(t){let e=Ie.exec(t);if(!e)return;let n=t.slice(e[0].length),s=Ft(n),r=s.body.trim()?this.lexer.blockTokens(s.body,[]):[];return{type:"footnoteDef",raw:e[0]+s.raw,label:e[1],body:e[2],tokens:r}},renderer(t){return t.raw}}];function Me(t,e,n){let s=0;for(let r=e;r<n;r++)s+=t[r].raw.length;return s}function Xt(t,e){let n=t;return n.links=e,n}function Oe(t,e){for(let n=e;n+1<t.length;n++)if(t[n].type==="paragraph"&&t[n+1].type==="paragraph")return n;return t.length}function Ht(t,e){return t[e-2]?.type!=="list"?!0:e+1<t.length}function Ne(t,e,n){let s=Math.min(t.length-2,n-1);for(let r=s;r>=e;r--)if(t[r].type==="space"&&Ht(t,r+1)!==!1)return r+1;return-1}function ve(t){let e=t.links;if(!e)return!1;for(let n in e)return!0;return!1}function De(t,e,n,s,r){let i=r;for(let a=e;a<n;a++){let l=t[a].raw;if(s.startsWith(l,i)===!1)return!1;i+=l.length}return!0}function Z(t,e,n){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!0,degradedReason:n}}function Pe(t,e){return{source:t,tail:t,tokens:e,stableCount:0,stableOffset:0,degraded:!1,degradedReason:null}}function Gt(t,e){if(ve(e))return Z(t,e,"link-definition");if(t.includes("\\r"))return Z(t,e,"carriage-return");if(ie(t))return Z(t,e,"container");if(le(t))return Z(t,e,"footnote-def");let n=Oe(e,0),s=Ne(e,1,n);if(s<0||De(e,0,s,t,0)===!1)return Pe(t,e);let r=Me(e,0,s);return{source:t,tail:t.slice(r),tokens:e,stableCount:s,stableOffset:r,degraded:!1,degradedReason:null}}function ae(t){let e=f.lexer(t);return{tokens:e,cache:Gt(t,e),charsLexed:t.length,reusedTokens:0}}function q(t,e){let n=f.lexer(t);return{tokens:n,cache:Z(t,n,e),charsLexed:t.length,reusedTokens:0}}function Be(t,e){let n=t.source+e;if(t.degraded)return q(n,t.degradedReason??"link-definition");if(e.includes("\\r"))return q(n,"carriage-return");if(t.stableCount===0)return ae(n);let s=t.tail+e;if(ie(s))return q(n,"container");if(le(s))return q(n,"footnote-def");let r=f.lexer(s);if(ve(r))return q(n,"link-definition");let i=t.tokens.slice(0,t.stableCount),a=Xt([...i,...r],r.links),l=t.stableCount,o=t.stableOffset,c=s,u=Ne(a,t.stableCount+1,Oe(a,t.stableCount));if(u>t.stableCount&&De(a,t.stableCount,u,s,0)){let p=Me(a,t.stableCount,u);l=u,o=t.stableOffset+p,c=s.slice(p)}return{tokens:a,cache:{source:n,tail:c,tokens:a,stableCount:l,stableOffset:o,degraded:!1,degradedReason:null},charsLexed:s.length,reusedTokens:t.stableCount}}var Ut=/^ {0,3}\\*\\[([^\\]\\n]+)\\]:[ \\t]*([^\\n]*)(?:\\n|$)/,qe=[{name:"abbrDef",level:"block",tokenizer(t){let e=Ut.exec(t);if(e)return{type:"abbrDef",raw:e[0],term:e[1],definition:e[2]}},renderer(t){return t.raw}}];var Wt=Object.freeze({grinning:"\\u{1F600}",smiley:"\\u{1F603}",smile:"\\u{1F604}",grin:"\\u{1F601}",laughing:"\\u{1F606}",satisfied:"\\u{1F606}",sweat_smile:"\\u{1F605}",rofl:"\\u{1F923}",joy:"\\u{1F602}",slightly_smiling_face:"\\u{1F642}",upside_down_face:"\\u{1F643}",wink:"\\u{1F609}",blush:"\\u{1F60A}",innocent:"\\u{1F607}",heart_eyes:"\\u{1F60D}",star_struck:"\\u{1F929}",kissing_heart:"\\u{1F618}",yum:"\\u{1F60B}",stuck_out_tongue:"\\u{1F61B}",stuck_out_tongue_winking_eye:"\\u{1F61C}",stuck_out_tongue_closed_eyes:"\\u{1F61D}",hugs:"\\u{1F917}",thinking:"\\u{1F914}",neutral_face:"\\u{1F610}",expressionless:"\\u{1F611}",no_mouth:"\\u{1F636}",smirk:"\\u{1F60F}",unamused:"\\u{1F612}",roll_eyes:"\\u{1F644}",grimacing:"\\u{1F62C}",relieved:"\\u{1F60C}",pensive:"\\u{1F614}",sleepy:"\\u{1F62A}",sleeping:"\\u{1F634}",mask:"\\u{1F637}",dizzy_face:"\\u{1F635}",sunglasses:"\\u{1F60E}",nerd_face:"\\u{1F913}",confused:"\\u{1F615}",worried:"\\u{1F61F}",open_mouth:"\\u{1F62E}",hushed:"\\u{1F62F}",astonished:"\\u{1F632}",flushed:"\\u{1F633}",pleading_face:"\\u{1F97A}",fearful:"\\u{1F628}",cold_sweat:"\\u{1F630}",cry:"\\u{1F622}",sob:"\\u{1F62D}",scream:"\\u{1F631}",disappointed:"\\u{1F61E}",sweat:"\\u{1F613}",weary:"\\u{1F629}",tired_face:"\\u{1F62B}",triumph:"\\u{1F624}",rage:"\\u{1F621}",angry:"\\u{1F620}",smiling_imp:"\\u{1F608}",imp:"\\u{1F47F}",skull:"\\u{1F480}",clown_face:"\\u{1F921}",poop:"\\u{1F4A9}",ghost:"\\u{1F47B}",alien:"\\u{1F47D}",robot:"\\u{1F916}",thumbsup:"\\u{1F44D}","+1":"\\u{1F44D}",thumbsdown:"\\u{1F44E}","-1":"\\u{1F44E}",punch:"\\u{1F44A}",fist:"\\u270A",clap:"\\u{1F44F}",raised_hands:"\\u{1F64C}",open_hands:"\\u{1F450}",handshake:"\\u{1F91D}",pray:"\\u{1F64F}",muscle:"\\u{1F4AA}",eyes:"\\u{1F440}",wave:"\\u{1F44B}",point_up:"\\u261D\\uFE0F",point_down:"\\u{1F447}",point_left:"\\u{1F448}",point_right:"\\u{1F449}",ok_hand:"\\u{1F44C}",v:"\\u270C\\uFE0F",crossed_fingers:"\\u{1F91E}",heart:"\\u2764\\uFE0F",broken_heart:"\\u{1F494}",two_hearts:"\\u{1F495}",sparkling_heart:"\\u{1F496}",heartpulse:"\\u{1F497}",blue_heart:"\\u{1F499}",green_heart:"\\u{1F49A}",yellow_heart:"\\u{1F49B}",orange_heart:"\\u{1F9E1}",purple_heart:"\\u{1F49C}",black_heart:"\\u{1F5A4}",white_heart:"\\u{1F90D}",100:"\\u{1F4AF}",boom:"\\u{1F4A5}",collision:"\\u{1F4A5}",dizzy:"\\u{1F4AB}",sweat_drops:"\\u{1F4A6}",dash:"\\u{1F4A8}",zzz:"\\u{1F4A4}",fire:"\\u{1F525}",sparkles:"\\u2728",star:"\\u2B50",star2:"\\u{1F31F}",tada:"\\u{1F389}",confetti_ball:"\\u{1F38A}",balloon:"\\u{1F388}",gift:"\\u{1F381}",rocket:"\\u{1F680}",dart:"\\u{1F3AF}",trophy:"\\u{1F3C6}",warning:"\\u26A0\\uFE0F",no_entry_sign:"\\u{1F6AB}",white_check_mark:"\\u2705",x:"\\u274C",heavy_check_mark:"\\u2714\\uFE0F",question:"\\u2753",exclamation:"\\u2757",bulb:"\\u{1F4A1}",bell:"\\u{1F514}",computer:"\\u{1F4BB}",iphone:"\\u{1F4F1}",link:"\\u{1F517}",lock:"\\u{1F512}",unlock:"\\u{1F513}",key:"\\u{1F511}",mag:"\\u{1F50D}",bug:"\\u{1F41B}",package:"\\u{1F4E6}",memo:"\\u{1F4DD}",pencil2:"\\u270F\\uFE0F",book:"\\u{1F4D6}",books:"\\u{1F4DA}",pushpin:"\\u{1F4CC}",paperclip:"\\u{1F4CE}",calendar:"\\u{1F4C5}",file_folder:"\\u{1F4C1}",hammer:"\\u{1F528}",wrench:"\\u{1F527}",gear:"\\u2699\\uFE0F",chart_with_upwards_trend:"\\u{1F4C8}",chart_with_downwards_trend:"\\u{1F4C9}",bar_chart:"\\u{1F4CA}",construction:"\\u{1F6A7}",hourglass:"\\u23F3",stopwatch:"\\u23F1\\uFE0F",pizza:"\\u{1F355}",coffee:"\\u2615",beer:"\\u{1F37A}",cake:"\\u{1F382}",birthday:"\\u{1F382}",apple:"\\u{1F34E}",rainbow:"\\u{1F308}",sun_with_face:"\\u{1F31E}",crescent_moon:"\\u{1F319}",earth_americas:"\\u{1F30E}",dog:"\\u{1F436}",cat:"\\u{1F431}",fox_face:"\\u{1F98A}",bear:"\\u{1F43B}",panda_face:"\\u{1F43C}",monkey_face:"\\u{1F435}",see_no_evil:"\\u{1F648}",hear_no_evil:"\\u{1F649}",speak_no_evil:"\\u{1F64A}"}),Jt=/^:([A-Za-z0-9_+-]+):/,Ze=[{name:"emoji",level:"inline",start(t){return t.match(/:/)?.index},tokenizer(t){let e=Jt.exec(t);if(!e)return;let n=Wt[e[1]];if(n!==void 0)return{type:"emoji",raw:e[0],text:n}},renderer(t){return t.raw}}];var Kt=/^\\+\\+(?!\\s)((?:\\\\[\\s\\S]|(?!\\+\\+)[\\s\\S])+?)(?<!\\s)\\+\\+/,Vt=/^==(?!\\s)((?:\\\\[\\s\\S]|(?!==)[\\s\\S])+?)(?<!\\s)==/,je=[{name:"ins",level:"inline",start(t){return t.match(/(?<!\\\\)\\+\\+(?!\\s)/)?.index},tokenizer(t){let e=Kt.exec(t);if(e)return{type:"ins",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}},{name:"mark",level:"inline",start(t){return t.match(/(?<!\\\\)==(?!\\s)/)?.index},tokenizer(t){let e=Vt.exec(t);if(e)return{type:"mark",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var Yt=/^\\^((?:\\\\[\\s\\S]|[^\\s^\\\\])+)\\^/,Qe=[{name:"sup",level:"inline",start(t){return t.match(/(?<!\\\\)\\^(?!\\s)/)?.index},tokenizer(t){let e=Yt.exec(t);if(e)return{type:"sup",raw:e[0],text:e[1].replace(/\\\\(.)/g,"$1")}},renderer(t){return t.raw}}];var en=0;function tn(t){if(typeof t!="string"||typeof performance.mark!="function"||typeof performance.measure!="function")return null;let e=en++,n={name:t,startMark:`${t}:start:${e}`,endMark:`${t}:end:${e}`};try{return performance.mark(n.startMark),n}catch{return null}}function nn(t){if(t)try{performance.mark(t.endMark),performance.measure(t.name,t.startMark,t.endMark)}catch{}finally{try{performance.clearMarks?.(t.startMark),performance.clearMarks?.(t.endMark)}catch{}}}f.use({extensions:[...Ce,...Qe,...je,...Ze,...Ee,...qe,{name:"blockMath",level:"block",start(t){return t.match(/^ {0,3}\\$\\$/m)?.index},tokenizer(t){let e=/^ {0,3}\\$\\$((?:(?!\\n[ \\t]*\\n)[\\s\\S])+?)\\$\\$[ \\t]*(?:\\n|$)/.exec(t);if(e)return{type:"blockMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}},{name:"inlineMath",level:"inline",start(t){return t.match(/(?<![\\\\$])\\$(?![$\\s])/)?.index},tokenizer(t){let e=/^\\$(?![$\\s\\d])((?:\\\\\\$|[^$\\n])*?)(?<!\\s)\\$(?!\\d)/.exec(t);if(e)return{type:"inlineMath",raw:e[0],text:e[1].trim()}},renderer(t){return t.raw}}]});var O=new Map;self.onmessage=t=>{let e=t.data;if(typeof e!="object"||e===null)return;let{id:n,text:s,append:r,expectedLength:i,oldRaws:a,instance:l,baseVersion:o,dispose:c,userTimingName:u}=e;if(c===!0){typeof l=="string"&&O.delete(l);return}let p=typeof l=="string"?l:null,h=typeof o=="number"?o:null,k,d=null,m=null;if(typeof r=="string"){if(p===null||h===null){self.postMessage({id:n,needResync:!0});return}let x=O.get(p);if(!x||x.version!==h){self.postMessage({id:n,needResync:!0});return}if(typeof i=="number"&&x.lex.source.length+r.length!==i){O.delete(p),self.postMessage({id:n,needResync:!0});return}let y=x.lex;k=()=>Be(y,r),m=y.tokens}else if(typeof s=="string"){let x=s;if(k=()=>ae(x),Array.isArray(a))d=a;else if(p!==null&&h!==null){let y=O.get(p);if(y&&y.version===h)m=y.lex.tokens;else{self.postMessage({id:n,needResync:!0});return}}}else return;try{let x=typeof u=="string"?tn(u):null,y=performance.now(),E;try{E=k()}finally{x&&nn(x)}let G=performance.now()-y,A=E.tokens,w=0;if(d!==null){let _=Math.min(d.length,A.length);for(;w<_&&d[w]===A[w].raw;w++);}else if(m!==null){let _=m,oe=Math.min(_.length,A.length);for(w=Math.min(E.reusedTokens,oe);w<oe&&_[w].raw===A[w].raw;w++);}p!==null&&h!==null&&O.set(p,{version:h+1,lex:E.cache}),self.postMessage({id:n,matchLen:w,tail:A.slice(w),lexerMs:G,sourceCharsLexed:E.charsLexed})}catch(x){p!==null&&O.delete(p),self.postMessage({id:n,error:String(x)})}};})();\n';
|
|
2714
3189
|
|
|
2715
3190
|
// src/Markdown.ts
|
|
2716
3191
|
var now = () => typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
|
|
@@ -2854,6 +3329,22 @@ var Markdown = class _Markdown extends import_ui4.UIComponent {
|
|
|
2854
3329
|
* affordance.
|
|
2855
3330
|
*/
|
|
2856
3331
|
blockAffordances;
|
|
3332
|
+
/**
|
|
3333
|
+
* Which controls a block carries and what they are called, with defaults
|
|
3334
|
+
* applied.
|
|
3335
|
+
*
|
|
3336
|
+
* Resolved once in the constructor rather than per block: the defaults are
|
|
3337
|
+
* fixed, and re-deriving them for every code fence in a long document would
|
|
3338
|
+
* repeat the same six `??` fallbacks for no benefit.
|
|
3339
|
+
*/
|
|
3340
|
+
affordanceConfig;
|
|
3341
|
+
/**
|
|
3342
|
+
* Whether code blocks show their language in a header band.
|
|
3343
|
+
*
|
|
3344
|
+
* Read when a block entity is built, exactly like {@link blockAffordances}, so
|
|
3345
|
+
* it affects blocks rendered from here on rather than retroactively.
|
|
3346
|
+
*/
|
|
3347
|
+
showCodeLanguage;
|
|
2857
3348
|
/** Clipboard writer used by the copy controls. */
|
|
2858
3349
|
writeClipboard;
|
|
2859
3350
|
/** File saver used by the download controls. */
|
|
@@ -3136,6 +3627,8 @@ var Markdown = class _Markdown extends import_ui4.UIComponent {
|
|
|
3136
3627
|
this.selectable = opts.selectable ?? true;
|
|
3137
3628
|
this._userTiming = opts.userTiming ?? false;
|
|
3138
3629
|
this.blockAffordances = opts.blockAffordances ?? false;
|
|
3630
|
+
this.affordanceConfig = resolveBlockAffordanceConfig(opts.affordances);
|
|
3631
|
+
this.showCodeLanguage = opts.showCodeLanguage ?? false;
|
|
3139
3632
|
this.writeClipboard = opts.writeClipboard ?? defaultWriteClipboard;
|
|
3140
3633
|
this.saveFile = opts.saveFile ?? defaultSaveFile;
|
|
3141
3634
|
this.content = new import_ui4.Stack({
|
|
@@ -4097,40 +4590,60 @@ var Markdown = class _Markdown extends import_ui4.UIComponent {
|
|
|
4097
4590
|
const controls = make();
|
|
4098
4591
|
return controls.length > 0 ? new BlockWithAffordances(block, controls) : block;
|
|
4099
4592
|
}
|
|
4100
|
-
/** Copy and download controls for one fenced code block. */
|
|
4593
|
+
/** Copy and download controls for one fenced code block, per {@link affordanceConfig}. */
|
|
4101
4594
|
codeBlockAffordances(source, lang) {
|
|
4102
4595
|
const opts = this.affordanceButtonOptions();
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
|
|
4107
|
-
|
|
4108
|
-
|
|
4109
|
-
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
|
|
4113
|
-
|
|
4596
|
+
const { code, labels } = this.affordanceConfig;
|
|
4597
|
+
const controls = [];
|
|
4598
|
+
if (code.copy) {
|
|
4599
|
+
controls.push(
|
|
4600
|
+
new BlockAffordanceButton(
|
|
4601
|
+
labels.copyCode,
|
|
4602
|
+
labels.copied,
|
|
4603
|
+
() => this.writeClipboard(source),
|
|
4604
|
+
opts
|
|
4605
|
+
)
|
|
4606
|
+
);
|
|
4607
|
+
}
|
|
4608
|
+
if (code.download) {
|
|
4609
|
+
controls.push(
|
|
4610
|
+
new BlockAffordanceButton(
|
|
4611
|
+
labels.downloadCode,
|
|
4612
|
+
labels.saved,
|
|
4613
|
+
() => this.saveFile(`code.${extensionForLanguage(lang)}`, source, mimeForLanguage(lang)),
|
|
4614
|
+
opts
|
|
4615
|
+
)
|
|
4616
|
+
);
|
|
4617
|
+
}
|
|
4618
|
+
return controls;
|
|
4619
|
+
}
|
|
4620
|
+
/** Copy (as Markdown) and download (as CSV) controls for one table, per {@link affordanceConfig}. */
|
|
4114
4621
|
tableAffordances(tblToken) {
|
|
4622
|
+
const { table, labels } = this.affordanceConfig;
|
|
4115
4623
|
const content = tableContentOf(tblToken);
|
|
4116
4624
|
const opts = this.affordanceButtonOptions();
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
-
)
|
|
4127
|
-
|
|
4128
|
-
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
|
|
4132
|
-
|
|
4133
|
-
|
|
4625
|
+
const controls = [];
|
|
4626
|
+
if (table.copy) {
|
|
4627
|
+
controls.push(
|
|
4628
|
+
new BlockAffordanceButton(
|
|
4629
|
+
labels.copyTable,
|
|
4630
|
+
labels.copied,
|
|
4631
|
+
() => this.writeClipboard(tableToMarkdown(content)),
|
|
4632
|
+
opts
|
|
4633
|
+
)
|
|
4634
|
+
);
|
|
4635
|
+
}
|
|
4636
|
+
if (table.download) {
|
|
4637
|
+
controls.push(
|
|
4638
|
+
new BlockAffordanceButton(
|
|
4639
|
+
labels.downloadTable,
|
|
4640
|
+
labels.saved,
|
|
4641
|
+
() => this.saveFile("table.csv", tableToCsv(content), "text/csv;charset=utf-8"),
|
|
4642
|
+
opts
|
|
4643
|
+
)
|
|
4644
|
+
);
|
|
4645
|
+
}
|
|
4646
|
+
return controls;
|
|
4134
4647
|
}
|
|
4135
4648
|
/**
|
|
4136
4649
|
* Button styling for the affordances, derived from the document theme.
|
|
@@ -5274,7 +5787,9 @@ var Markdown = class _Markdown extends import_ui4.UIComponent {
|
|
|
5274
5787
|
}
|
|
5275
5788
|
}
|
|
5276
5789
|
return this.withBlockAffordances(
|
|
5277
|
-
new CodeBlock(codeToken.text, lang, availableWidth, t, this.selectable
|
|
5790
|
+
new CodeBlock(codeToken.text, lang, availableWidth, t, this.selectable, {
|
|
5791
|
+
showLanguage: this.showCodeLanguage
|
|
5792
|
+
}),
|
|
5278
5793
|
() => this.codeBlockAffordances(codeToken.text, lang)
|
|
5279
5794
|
);
|
|
5280
5795
|
}
|
|
@@ -5506,6 +6021,7 @@ var Markdown = class _Markdown extends import_ui4.UIComponent {
|
|
|
5506
6021
|
extensionForLanguage,
|
|
5507
6022
|
footnoteMarker,
|
|
5508
6023
|
hasFencedBlockRenderer,
|
|
6024
|
+
highlightedLanguages,
|
|
5509
6025
|
isFencedBlockRendererReady,
|
|
5510
6026
|
isMathJaxReady,
|
|
5511
6027
|
isPresetName,
|
|
@@ -5514,6 +6030,7 @@ var Markdown = class _Markdown extends import_ui4.UIComponent {
|
|
|
5514
6030
|
preloadMathJax,
|
|
5515
6031
|
registerFencedBlockRenderer,
|
|
5516
6032
|
renderFencedBlock,
|
|
6033
|
+
resolveBlockAffordanceConfig,
|
|
5517
6034
|
resolvePresetTheme,
|
|
5518
6035
|
scanFrontMatter,
|
|
5519
6036
|
tableContentOf,
|