@depup/markdown-it 14.3.0-depup.39 → 15.0.0-depup.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.
Files changed (72) hide show
  1. package/README.md +5 -9
  2. package/bin/markdown-it.mjs +2 -2
  3. package/changes.json +3 -19
  4. package/dist/browser/markdown-it.esm.min.mjs +2972 -0
  5. package/dist/browser/markdown-it.esm.min.mjs.map +1 -0
  6. package/dist/browser/markdown-it.umd.min.js +14 -0
  7. package/dist/browser/markdown-it.umd.min.js.map +1 -0
  8. package/dist/markdown-it.cjs.js +4412 -0
  9. package/dist/markdown-it.cjs.js.map +1 -0
  10. package/dist/markdown-it.d.cts +19 -0
  11. package/dist/markdown-it.d.mts +979 -0
  12. package/dist/{index.cjs.js → markdown-it.mjs} +1437 -1466
  13. package/dist/markdown-it.mjs.map +1 -0
  14. package/package.json +48 -46
  15. package/dist/index.cjs.js.map +0 -1
  16. package/dist/markdown-it.js +0 -3975
  17. package/dist/markdown-it.js.map +0 -1
  18. package/dist/markdown-it.min.js +0 -3
  19. package/dist/markdown-it.min.js.map +0 -1
  20. package/index.mjs +0 -1
  21. package/lib/common/html_blocks.mjs +0 -67
  22. package/lib/common/html_re.mjs +0 -25
  23. package/lib/common/utils.mjs +0 -324
  24. package/lib/helpers/index.mjs +0 -11
  25. package/lib/helpers/parse_link_destination.mjs +0 -77
  26. package/lib/helpers/parse_link_label.mjs +0 -49
  27. package/lib/helpers/parse_link_title.mjs +0 -66
  28. package/lib/index.mjs +0 -565
  29. package/lib/parser_block.mjs +0 -134
  30. package/lib/parser_core.mjs +0 -62
  31. package/lib/parser_inline.mjs +0 -197
  32. package/lib/presets/commonmark.mjs +0 -88
  33. package/lib/presets/default.mjs +0 -47
  34. package/lib/presets/zero.mjs +0 -70
  35. package/lib/renderer.mjs +0 -322
  36. package/lib/ruler.mjs +0 -340
  37. package/lib/rules_block/blockquote.mjs +0 -209
  38. package/lib/rules_block/code.mjs +0 -30
  39. package/lib/rules_block/fence.mjs +0 -94
  40. package/lib/rules_block/heading.mjs +0 -51
  41. package/lib/rules_block/hr.mjs +0 -40
  42. package/lib/rules_block/html_block.mjs +0 -80
  43. package/lib/rules_block/lheading.mjs +0 -85
  44. package/lib/rules_block/list.mjs +0 -331
  45. package/lib/rules_block/paragraph.mjs +0 -48
  46. package/lib/rules_block/reference.mjs +0 -212
  47. package/lib/rules_block/state_block.mjs +0 -220
  48. package/lib/rules_block/table.mjs +0 -228
  49. package/lib/rules_core/block.mjs +0 -13
  50. package/lib/rules_core/inline.mjs +0 -11
  51. package/lib/rules_core/linkify.mjs +0 -134
  52. package/lib/rules_core/normalize.mjs +0 -17
  53. package/lib/rules_core/replacements.mjs +0 -101
  54. package/lib/rules_core/smartquotes.mjs +0 -209
  55. package/lib/rules_core/state_core.mjs +0 -17
  56. package/lib/rules_core/text_join.mjs +0 -43
  57. package/lib/rules_inline/autolink.mjs +0 -72
  58. package/lib/rules_inline/backticks.mjs +0 -60
  59. package/lib/rules_inline/balance_pairs.mjs +0 -124
  60. package/lib/rules_inline/emphasis.mjs +0 -123
  61. package/lib/rules_inline/entity.mjs +0 -51
  62. package/lib/rules_inline/escape.mjs +0 -83
  63. package/lib/rules_inline/fragments_join.mjs +0 -38
  64. package/lib/rules_inline/html_inline.mjs +0 -50
  65. package/lib/rules_inline/image.mjs +0 -138
  66. package/lib/rules_inline/link.mjs +0 -139
  67. package/lib/rules_inline/linkify.mjs +0 -63
  68. package/lib/rules_inline/newline.mjs +0 -42
  69. package/lib/rules_inline/state_inline.mjs +0 -154
  70. package/lib/rules_inline/strikethrough.mjs +0 -127
  71. package/lib/rules_inline/text.mjs +0 -86
  72. package/lib/token.mjs +0 -191
@@ -1,3975 +0,0 @@
1
- /*! markdown-it 14.3.0 https://github.com/markdown-it/markdown-it @license MIT */
2
- (function(global, factory) {
3
- typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define([], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self,
4
- global.markdownit = factory());
5
- })(this, function() {
6
- //#region \0rolldown/runtime.js
7
- var __defProp = Object.defineProperty;
8
- var __exportAll = (all, no_symbols) => {
9
- let target = {};
10
- for (var name in all) {
11
- __defProp(target, name, {
12
- get: all[name],
13
- enumerable: true
14
- });
15
- }
16
- if (!no_symbols) {
17
- __defProp(target, Symbol.toStringTag, {
18
- value: "Module"
19
- });
20
- }
21
- return target;
22
- };
23
- //#endregion
24
- //#region node_modules/mdurl/lib/decode.mjs
25
- var decodeCache = {};
26
- function getDecodeCache(exclude) {
27
- let cache = decodeCache[exclude];
28
- if (cache) return cache;
29
- cache = decodeCache[exclude] = [];
30
- for (let i = 0; i < 128; i++) {
31
- const ch = String.fromCharCode(i);
32
- cache.push(ch);
33
- }
34
- for (let i = 0; i < exclude.length; i++) {
35
- const ch = exclude.charCodeAt(i);
36
- cache[ch] = "%" + ("0" + ch.toString(16).toUpperCase()).slice(-2);
37
- }
38
- return cache;
39
- }
40
- function decode$1(string, exclude) {
41
- if (typeof exclude !== "string") exclude = decode$1.defaultChars;
42
- const cache = getDecodeCache(exclude);
43
- return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {
44
- let result = "";
45
- for (let i = 0, l = seq.length; i < l; i += 3) {
46
- const b1 = parseInt(seq.slice(i + 1, i + 3), 16);
47
- if (b1 < 128) {
48
- result += cache[b1];
49
- continue;
50
- }
51
- if ((b1 & 224) === 192 && i + 3 < l) {
52
- const b2 = parseInt(seq.slice(i + 4, i + 6), 16);
53
- if ((b2 & 192) === 128) {
54
- const chr = b1 << 6 & 1984 | b2 & 63;
55
- if (chr < 128) result += "\ufffd\ufffd"; else result += String.fromCharCode(chr);
56
- i += 3;
57
- continue;
58
- }
59
- }
60
- if ((b1 & 240) === 224 && i + 6 < l) {
61
- const b2 = parseInt(seq.slice(i + 4, i + 6), 16);
62
- const b3 = parseInt(seq.slice(i + 7, i + 9), 16);
63
- if ((b2 & 192) === 128 && (b3 & 192) === 128) {
64
- const chr = b1 << 12 & 61440 | b2 << 6 & 4032 | b3 & 63;
65
- if (chr < 2048 || chr >= 55296 && chr <= 57343) result += "\ufffd\ufffd\ufffd"; else result += String.fromCharCode(chr);
66
- i += 6;
67
- continue;
68
- }
69
- }
70
- if ((b1 & 248) === 240 && i + 9 < l) {
71
- const b2 = parseInt(seq.slice(i + 4, i + 6), 16);
72
- const b3 = parseInt(seq.slice(i + 7, i + 9), 16);
73
- const b4 = parseInt(seq.slice(i + 10, i + 12), 16);
74
- if ((b2 & 192) === 128 && (b3 & 192) === 128 && (b4 & 192) === 128) {
75
- let chr = b1 << 18 & 1835008 | b2 << 12 & 258048 | b3 << 6 & 4032 | b4 & 63;
76
- if (chr < 65536 || chr > 1114111) result += "\ufffd\ufffd\ufffd\ufffd"; else {
77
- chr -= 65536;
78
- result += String.fromCharCode(55296 + (chr >> 10), 56320 + (chr & 1023));
79
- }
80
- i += 9;
81
- continue;
82
- }
83
- }
84
- result += "\ufffd";
85
- }
86
- return result;
87
- });
88
- }
89
- decode$1.defaultChars = ";/?:@&=+$,#";
90
- decode$1.componentChars = "";
91
- //#endregion
92
- //#region node_modules/mdurl/lib/encode.mjs
93
- var encodeCache = {};
94
- function getEncodeCache(exclude) {
95
- let cache = encodeCache[exclude];
96
- if (cache) return cache;
97
- cache = encodeCache[exclude] = [];
98
- for (let i = 0; i < 128; i++) {
99
- const ch = String.fromCharCode(i);
100
- if (/^[0-9a-z]$/i.test(ch)) cache.push(ch); else cache.push("%" + ("0" + i.toString(16).toUpperCase()).slice(-2));
101
- }
102
- for (let i = 0; i < exclude.length; i++) cache[exclude.charCodeAt(i)] = exclude[i];
103
- return cache;
104
- }
105
- function encode$1(string, exclude, keepEscaped) {
106
- if (typeof exclude !== "string") {
107
- keepEscaped = exclude;
108
- exclude = encode$1.defaultChars;
109
- }
110
- if (typeof keepEscaped === "undefined") keepEscaped = true;
111
- const cache = getEncodeCache(exclude);
112
- let result = "";
113
- for (let i = 0, l = string.length; i < l; i++) {
114
- const code = string.charCodeAt(i);
115
- if (keepEscaped && code === 37 && i + 2 < l) {
116
- if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {
117
- result += string.slice(i, i + 3);
118
- i += 2;
119
- continue;
120
- }
121
- }
122
- if (code < 128) {
123
- result += cache[code];
124
- continue;
125
- }
126
- if (code >= 55296 && code <= 57343) {
127
- if (code >= 55296 && code <= 56319 && i + 1 < l) {
128
- const nextCode = string.charCodeAt(i + 1);
129
- if (nextCode >= 56320 && nextCode <= 57343) {
130
- result += encodeURIComponent(string[i] + string[i + 1]);
131
- i++;
132
- continue;
133
- }
134
- }
135
- result += "%EF%BF%BD";
136
- continue;
137
- }
138
- result += encodeURIComponent(string[i]);
139
- }
140
- return result;
141
- }
142
- encode$1.defaultChars = ";/?:@&=+$,-_.!~*'()#";
143
- encode$1.componentChars = "-_.!~*'()";
144
- //#endregion
145
- //#region node_modules/mdurl/lib/format.mjs
146
- function format(url) {
147
- let result = "";
148
- result += url.protocol || "";
149
- result += url.slashes ? "//" : "";
150
- result += url.auth ? url.auth + "@" : "";
151
- if (url.hostname && url.hostname.indexOf(":") !== -1) result += "[" + url.hostname + "]"; else result += url.hostname || "";
152
- result += url.port ? ":" + url.port : "";
153
- result += url.pathname || "";
154
- result += url.search || "";
155
- result += url.hash || "";
156
- return result;
157
- }
158
- //#endregion
159
- //#region node_modules/mdurl/lib/parse.mjs
160
- function Url() {
161
- this.protocol = null;
162
- this.slashes = null;
163
- this.auth = null;
164
- this.port = null;
165
- this.hostname = null;
166
- this.hash = null;
167
- this.search = null;
168
- this.pathname = null;
169
- }
170
- var protocolPattern = /^([a-z0-9.+-]+:)/i;
171
- var portPattern = /:[0-9]*$/;
172
- var simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/;
173
- var unwise = [ "{", "}", "|", "\\", "^", "`" ].concat([ "<", ">", '"', "`", " ", "\r", "\n", "\t" ]);
174
- var autoEscape = [ "'" ].concat(unwise);
175
- var nonHostChars = [ "%", "/", "?", ";", "#" ].concat(autoEscape);
176
- var hostEndingChars = [ "/", "?", "#" ];
177
- var hostnameMaxLen = 255;
178
- var hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/;
179
- var hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/;
180
- var hostlessProtocol = {
181
- javascript: true,
182
- "javascript:": true
183
- };
184
- var slashedProtocol = {
185
- http: true,
186
- https: true,
187
- ftp: true,
188
- gopher: true,
189
- file: true,
190
- "http:": true,
191
- "https:": true,
192
- "ftp:": true,
193
- "gopher:": true,
194
- "file:": true
195
- };
196
- function urlParse(url, slashesDenoteHost) {
197
- if (url && url instanceof Url) return url;
198
- const u = new Url;
199
- u.parse(url, slashesDenoteHost);
200
- return u;
201
- }
202
- Url.prototype.parse = function(url, slashesDenoteHost) {
203
- let lowerProto, hec, slashes;
204
- let rest = url;
205
- rest = rest.trim();
206
- if (!slashesDenoteHost && url.split("#").length === 1) {
207
- const simplePath = simplePathPattern.exec(rest);
208
- if (simplePath) {
209
- this.pathname = simplePath[1];
210
- if (simplePath[2]) this.search = simplePath[2];
211
- return this;
212
- }
213
- }
214
- let proto = protocolPattern.exec(rest);
215
- if (proto) {
216
- proto = proto[0];
217
- lowerProto = proto.toLowerCase();
218
- this.protocol = proto;
219
- rest = rest.substr(proto.length);
220
- }
221
- if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
222
- slashes = rest.substr(0, 2) === "//";
223
- if (slashes && !(proto && hostlessProtocol[proto])) {
224
- rest = rest.substr(2);
225
- this.slashes = true;
226
- }
227
- }
228
- if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {
229
- let hostEnd = -1;
230
- for (let i = 0; i < hostEndingChars.length; i++) {
231
- hec = rest.indexOf(hostEndingChars[i]);
232
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;
233
- }
234
- let auth, atSign;
235
- if (hostEnd === -1) atSign = rest.lastIndexOf("@"); else atSign = rest.lastIndexOf("@", hostEnd);
236
- if (atSign !== -1) {
237
- auth = rest.slice(0, atSign);
238
- rest = rest.slice(atSign + 1);
239
- this.auth = auth;
240
- }
241
- hostEnd = -1;
242
- for (let i = 0; i < nonHostChars.length; i++) {
243
- hec = rest.indexOf(nonHostChars[i]);
244
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;
245
- }
246
- if (hostEnd === -1) hostEnd = rest.length;
247
- if (rest[hostEnd - 1] === ":") hostEnd--;
248
- const host = rest.slice(0, hostEnd);
249
- rest = rest.slice(hostEnd);
250
- this.parseHost(host);
251
- this.hostname = this.hostname || "";
252
- const ipv6Hostname = this.hostname[0] === "[" && this.hostname[this.hostname.length - 1] === "]";
253
- if (!ipv6Hostname) {
254
- const hostparts = this.hostname.split(/\./);
255
- for (let i = 0, l = hostparts.length; i < l; i++) {
256
- const part = hostparts[i];
257
- if (!part) continue;
258
- if (!part.match(hostnamePartPattern)) {
259
- let newpart = "";
260
- for (let j = 0, k = part.length; j < k; j++) if (part.charCodeAt(j) > 127) newpart += "x"; else newpart += part[j];
261
- if (!newpart.match(hostnamePartPattern)) {
262
- const validParts = hostparts.slice(0, i);
263
- const notHost = hostparts.slice(i + 1);
264
- const bit = part.match(hostnamePartStart);
265
- if (bit) {
266
- validParts.push(bit[1]);
267
- notHost.unshift(bit[2]);
268
- }
269
- if (notHost.length) rest = notHost.join(".") + rest;
270
- this.hostname = validParts.join(".");
271
- break;
272
- }
273
- }
274
- }
275
- }
276
- if (this.hostname.length > hostnameMaxLen) this.hostname = "";
277
- if (ipv6Hostname) this.hostname = this.hostname.substr(1, this.hostname.length - 2);
278
- }
279
- const hash = rest.indexOf("#");
280
- if (hash !== -1) {
281
- this.hash = rest.substr(hash);
282
- rest = rest.slice(0, hash);
283
- }
284
- const qm = rest.indexOf("?");
285
- if (qm !== -1) {
286
- this.search = rest.substr(qm);
287
- rest = rest.slice(0, qm);
288
- }
289
- if (rest) this.pathname = rest;
290
- if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) this.pathname = "";
291
- return this;
292
- };
293
- Url.prototype.parseHost = function(host) {
294
- let port = portPattern.exec(host);
295
- if (port) {
296
- port = port[0];
297
- if (port !== ":") this.port = port.substr(1);
298
- host = host.substr(0, host.length - port.length);
299
- }
300
- if (host) this.hostname = host;
301
- };
302
- //#endregion
303
- //#region node_modules/mdurl/index.mjs
304
- var mdurl_exports = __exportAll({
305
- decode: () => decode$1,
306
- encode: () => encode$1,
307
- format: () => format,
308
- parse: () => urlParse
309
- });
310
- //#endregion
311
- //#region node_modules/uc.micro/properties/Any/regex.mjs
312
- var regex_default$5 = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
313
- //#endregion
314
- //#region node_modules/uc.micro/categories/Cc/regex.mjs
315
- var regex_default$4 = /[\0-\x1F\x7F-\x9F]/;
316
- //#endregion
317
- //#region node_modules/uc.micro/categories/Cf/regex.mjs
318
- var regex_default$3 = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/;
319
- //#endregion
320
- //#region node_modules/uc.micro/categories/P/regex.mjs
321
- var regex_default$2 = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/;
322
- //#endregion
323
- //#region node_modules/uc.micro/categories/S/regex.mjs
324
- var regex_default$1 = /[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/;
325
- //#endregion
326
- //#region node_modules/uc.micro/categories/Z/regex.mjs
327
- var regex_default = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;
328
- //#endregion
329
- //#region node_modules/uc.micro/index.mjs
330
- var uc_micro_exports = __exportAll({
331
- Any: () => regex_default$5,
332
- Cc: () => regex_default$4,
333
- Cf: () => regex_default$3,
334
- P: () => regex_default$2,
335
- S: () => regex_default$1,
336
- Z: () => regex_default
337
- });
338
- //#endregion
339
- //#region node_modules/entities/lib/esm/generated/decode-data-html.js
340
- var decode_data_html_default = new Uint16Array('\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c'.split("").map(c => c.charCodeAt(0)));
341
- //#endregion
342
- //#region node_modules/entities/lib/esm/generated/decode-data-xml.js
343
- var decode_data_xml_default = new Uint16Array("\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022".split("").map(c => c.charCodeAt(0)));
344
- //#endregion
345
- //#region node_modules/entities/lib/esm/decode_codepoint.js
346
- var _a;
347
- var decodeMap = new Map([ [ 0, 65533 ], [ 128, 8364 ], [ 130, 8218 ], [ 131, 402 ], [ 132, 8222 ], [ 133, 8230 ], [ 134, 8224 ], [ 135, 8225 ], [ 136, 710 ], [ 137, 8240 ], [ 138, 352 ], [ 139, 8249 ], [ 140, 338 ], [ 142, 381 ], [ 145, 8216 ], [ 146, 8217 ], [ 147, 8220 ], [ 148, 8221 ], [ 149, 8226 ], [ 150, 8211 ], [ 151, 8212 ], [ 152, 732 ], [ 153, 8482 ], [ 154, 353 ], [ 155, 8250 ], [ 156, 339 ], [ 158, 382 ], [ 159, 376 ] ]);
348
- var fromCodePoint$1 = (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) {
349
- let output = "";
350
- if (codePoint > 65535) {
351
- codePoint -= 65536;
352
- output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
353
- codePoint = 56320 | codePoint & 1023;
354
- }
355
- output += String.fromCharCode(codePoint);
356
- return output;
357
- };
358
- function replaceCodePoint(codePoint) {
359
- var _a;
360
- if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) return 65533;
361
- return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;
362
- }
363
- //#endregion
364
- //#region node_modules/entities/lib/esm/decode.js
365
- var CharCodes;
366
- (function(CharCodes) {
367
- CharCodes[CharCodes["NUM"] = 35] = "NUM";
368
- CharCodes[CharCodes["SEMI"] = 59] = "SEMI";
369
- CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS";
370
- CharCodes[CharCodes["ZERO"] = 48] = "ZERO";
371
- CharCodes[CharCodes["NINE"] = 57] = "NINE";
372
- CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A";
373
- CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F";
374
- CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X";
375
- CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z";
376
- CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A";
377
- CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F";
378
- CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z";
379
- })(CharCodes || (CharCodes = {}));
380
- var TO_LOWER_BIT = 32;
381
- var BinTrieFlags;
382
- (function(BinTrieFlags) {
383
- BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
384
- BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
385
- BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE";
386
- })(BinTrieFlags || (BinTrieFlags = {}));
387
- function isNumber(code) {
388
- return code >= CharCodes.ZERO && code <= CharCodes.NINE;
389
- }
390
- function isHexadecimalCharacter(code) {
391
- return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
392
- }
393
- function isAsciiAlphaNumeric(code) {
394
- return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
395
- }
396
- function isEntityInAttributeInvalidEnd(code) {
397
- return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
398
- }
399
- var EntityDecoderState;
400
- (function(EntityDecoderState) {
401
- EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart";
402
- EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart";
403
- EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal";
404
- EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
405
- EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
406
- })(EntityDecoderState || (EntityDecoderState = {}));
407
- var DecodingMode;
408
- (function(DecodingMode) {
409
- DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
410
- DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
411
- DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
412
- })(DecodingMode || (DecodingMode = {}));
413
- var EntityDecoder = class {
414
- constructor(decodeTree, emitCodePoint, errors) {
415
- this.decodeTree = decodeTree;
416
- this.emitCodePoint = emitCodePoint;
417
- this.errors = errors;
418
- this.state = EntityDecoderState.EntityStart;
419
- this.consumed = 1;
420
- this.result = 0;
421
- this.treeIndex = 0;
422
- this.excess = 1;
423
- this.decodeMode = DecodingMode.Strict;
424
- }
425
- startEntity(decodeMode) {
426
- this.decodeMode = decodeMode;
427
- this.state = EntityDecoderState.EntityStart;
428
- this.result = 0;
429
- this.treeIndex = 0;
430
- this.excess = 1;
431
- this.consumed = 1;
432
- }
433
- write(str, offset) {
434
- switch (this.state) {
435
- case EntityDecoderState.EntityStart:
436
- if (str.charCodeAt(offset) === CharCodes.NUM) {
437
- this.state = EntityDecoderState.NumericStart;
438
- this.consumed += 1;
439
- return this.stateNumericStart(str, offset + 1);
440
- }
441
- this.state = EntityDecoderState.NamedEntity;
442
- return this.stateNamedEntity(str, offset);
443
-
444
- case EntityDecoderState.NumericStart:
445
- return this.stateNumericStart(str, offset);
446
-
447
- case EntityDecoderState.NumericDecimal:
448
- return this.stateNumericDecimal(str, offset);
449
-
450
- case EntityDecoderState.NumericHex:
451
- return this.stateNumericHex(str, offset);
452
-
453
- case EntityDecoderState.NamedEntity:
454
- return this.stateNamedEntity(str, offset);
455
- }
456
- }
457
- stateNumericStart(str, offset) {
458
- if (offset >= str.length) return -1;
459
- if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
460
- this.state = EntityDecoderState.NumericHex;
461
- this.consumed += 1;
462
- return this.stateNumericHex(str, offset + 1);
463
- }
464
- this.state = EntityDecoderState.NumericDecimal;
465
- return this.stateNumericDecimal(str, offset);
466
- }
467
- addToNumericResult(str, start, end, base) {
468
- if (start !== end) {
469
- const digitCount = end - start;
470
- this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
471
- this.consumed += digitCount;
472
- }
473
- }
474
- stateNumericHex(str, offset) {
475
- const startIdx = offset;
476
- while (offset < str.length) {
477
- const char = str.charCodeAt(offset);
478
- if (isNumber(char) || isHexadecimalCharacter(char)) offset += 1; else {
479
- this.addToNumericResult(str, startIdx, offset, 16);
480
- return this.emitNumericEntity(char, 3);
481
- }
482
- }
483
- this.addToNumericResult(str, startIdx, offset, 16);
484
- return -1;
485
- }
486
- stateNumericDecimal(str, offset) {
487
- const startIdx = offset;
488
- while (offset < str.length) {
489
- const char = str.charCodeAt(offset);
490
- if (isNumber(char)) offset += 1; else {
491
- this.addToNumericResult(str, startIdx, offset, 10);
492
- return this.emitNumericEntity(char, 2);
493
- }
494
- }
495
- this.addToNumericResult(str, startIdx, offset, 10);
496
- return -1;
497
- }
498
- emitNumericEntity(lastCp, expectedLength) {
499
- var _a;
500
- if (this.consumed <= expectedLength) {
501
- (_a = this.errors) === null || _a === void 0 || _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
502
- return 0;
503
- }
504
- if (lastCp === CharCodes.SEMI) this.consumed += 1; else if (this.decodeMode === DecodingMode.Strict) return 0;
505
- this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
506
- if (this.errors) {
507
- if (lastCp !== CharCodes.SEMI) this.errors.missingSemicolonAfterCharacterReference();
508
- this.errors.validateNumericCharacterReference(this.result);
509
- }
510
- return this.consumed;
511
- }
512
- stateNamedEntity(str, offset) {
513
- const {decodeTree: decodeTree} = this;
514
- let current = decodeTree[this.treeIndex];
515
- let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
516
- for (;offset < str.length; offset++, this.excess++) {
517
- const char = str.charCodeAt(offset);
518
- this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
519
- if (this.treeIndex < 0) return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
520
- current = decodeTree[this.treeIndex];
521
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
522
- if (valueLength !== 0) {
523
- if (char === CharCodes.SEMI) return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
524
- if (this.decodeMode !== DecodingMode.Strict) {
525
- this.result = this.treeIndex;
526
- this.consumed += this.excess;
527
- this.excess = 0;
528
- }
529
- }
530
- }
531
- return -1;
532
- }
533
- emitNotTerminatedNamedEntity() {
534
- var _a;
535
- const {result: result, decodeTree: decodeTree} = this;
536
- const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
537
- this.emitNamedEntityData(result, valueLength, this.consumed);
538
- (_a = this.errors) === null || _a === void 0 || _a.missingSemicolonAfterCharacterReference();
539
- return this.consumed;
540
- }
541
- emitNamedEntityData(result, valueLength, consumed) {
542
- const {decodeTree: decodeTree} = this;
543
- this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);
544
- if (valueLength === 3) this.emitCodePoint(decodeTree[result + 2], consumed);
545
- return consumed;
546
- }
547
- end() {
548
- var _a;
549
- switch (this.state) {
550
- case EntityDecoderState.NamedEntity:
551
- return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
552
-
553
- case EntityDecoderState.NumericDecimal:
554
- return this.emitNumericEntity(0, 2);
555
-
556
- case EntityDecoderState.NumericHex:
557
- return this.emitNumericEntity(0, 3);
558
-
559
- case EntityDecoderState.NumericStart:
560
- (_a = this.errors) === null || _a === void 0 || _a.absenceOfDigitsInNumericCharacterReference(this.consumed);
561
- return 0;
562
-
563
- case EntityDecoderState.EntityStart:
564
- return 0;
565
- }
566
- }
567
- };
568
- function getDecoder(decodeTree) {
569
- let ret = "";
570
- const decoder = new EntityDecoder(decodeTree, str => ret += fromCodePoint$1(str));
571
- return function decodeWithTrie(str, decodeMode) {
572
- let lastIndex = 0;
573
- let offset = 0;
574
- while ((offset = str.indexOf("&", offset)) >= 0) {
575
- ret += str.slice(lastIndex, offset);
576
- decoder.startEntity(decodeMode);
577
- const len = decoder.write(str, offset + 1);
578
- if (len < 0) {
579
- lastIndex = offset + decoder.end();
580
- break;
581
- }
582
- lastIndex = offset + len;
583
- offset = len === 0 ? lastIndex + 1 : lastIndex;
584
- }
585
- const result = ret + str.slice(lastIndex);
586
- ret = "";
587
- return result;
588
- };
589
- }
590
- function determineBranch(decodeTree, current, nodeIdx, char) {
591
- const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
592
- const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
593
- if (branchCount === 0) return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
594
- if (jumpOffset) {
595
- const value = char - jumpOffset;
596
- return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
597
- }
598
- let lo = nodeIdx;
599
- let hi = lo + branchCount - 1;
600
- while (lo <= hi) {
601
- const mid = lo + hi >>> 1;
602
- const midVal = decodeTree[mid];
603
- if (midVal < char) lo = mid + 1; else if (midVal > char) hi = mid - 1; else return decodeTree[mid + branchCount];
604
- }
605
- return -1;
606
- }
607
- var htmlDecoder = getDecoder(decode_data_html_default);
608
- var xmlDecoder = getDecoder(decode_data_xml_default);
609
- function decodeHTML(str, mode = DecodingMode.Legacy) {
610
- return htmlDecoder(str, mode);
611
- }
612
- function decodeHTMLStrict(str) {
613
- return htmlDecoder(str, DecodingMode.Strict);
614
- }
615
- //#endregion
616
- //#region lib/common/utils.mjs
617
- var utils_exports = __exportAll({
618
- arrayReplaceAt: () => arrayReplaceAt,
619
- asciiTrim: () => asciiTrim,
620
- assign: () => assign$1,
621
- escapeHtml: () => escapeHtml,
622
- escapeRE: () => escapeRE$1,
623
- fromCodePoint: () => fromCodePoint,
624
- has: () => has,
625
- isMdAsciiPunct: () => isMdAsciiPunct,
626
- isPunctChar: () => isPunctChar,
627
- isPunctCharCode: () => isPunctCharCode,
628
- isSpace: () => isSpace,
629
- isString: () => isString$1,
630
- isValidEntityCode: () => isValidEntityCode,
631
- isWhiteSpace: () => isWhiteSpace,
632
- lib: () => lib,
633
- normalizeReference: () => normalizeReference,
634
- unescapeAll: () => unescapeAll,
635
- unescapeMd: () => unescapeMd
636
- });
637
- function _class$1(obj) {
638
- return Object.prototype.toString.call(obj);
639
- }
640
- function isString$1(obj) {
641
- return _class$1(obj) === "[object String]";
642
- }
643
- var _hasOwnProperty = Object.prototype.hasOwnProperty;
644
- function has(object, key) {
645
- return _hasOwnProperty.call(object, key);
646
- }
647
- function assign$1(obj) {
648
- Array.prototype.slice.call(arguments, 1).forEach(function(source) {
649
- if (!source) return;
650
- if (typeof source !== "object") throw new TypeError(source + "must be object");
651
- Object.keys(source).forEach(function(key) {
652
- obj[key] = source[key];
653
- });
654
- });
655
- return obj;
656
- }
657
- function arrayReplaceAt(src, pos, newElements) {
658
- return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));
659
- }
660
- function isValidEntityCode(c) {
661
- if (c >= 55296 && c <= 57343) return false;
662
- if (c >= 64976 && c <= 65007) return false;
663
- if ((c & 65535) === 65535 || (c & 65535) === 65534) return false;
664
- if (c >= 0 && c <= 8) return false;
665
- if (c === 11) return false;
666
- if (c >= 14 && c <= 31) return false;
667
- if (c >= 127 && c <= 159) return false;
668
- if (c > 1114111) return false;
669
- return true;
670
- }
671
- function fromCodePoint(c) {
672
- if (c > 65535) {
673
- c -= 65536;
674
- const surrogate1 = 55296 + (c >> 10);
675
- const surrogate2 = 56320 + (c & 1023);
676
- return String.fromCharCode(surrogate1, surrogate2);
677
- }
678
- return String.fromCharCode(c);
679
- }
680
- var UNESCAPE_MD_RE = /\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g;
681
- var UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + "|" + /&([a-z#][a-z0-9]{1,31});/gi.source, "gi");
682
- var DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;
683
- function replaceEntityPattern(match, name) {
684
- if (name.charCodeAt(0) === 35 && DIGITAL_ENTITY_TEST_RE.test(name)) {
685
- const code = name[1].toLowerCase() === "x" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);
686
- if (isValidEntityCode(code)) return fromCodePoint(code);
687
- return match;
688
- }
689
- const decoded = decodeHTML(match);
690
- if (decoded !== match) return decoded;
691
- return match;
692
- }
693
- function unescapeMd(str) {
694
- if (str.indexOf("\\") < 0) return str;
695
- return str.replace(UNESCAPE_MD_RE, "$1");
696
- }
697
- function unescapeAll(str) {
698
- if (str.indexOf("\\") < 0 && str.indexOf("&") < 0) return str;
699
- return str.replace(UNESCAPE_ALL_RE, function(match, escaped, entity) {
700
- if (escaped) return escaped;
701
- return replaceEntityPattern(match, entity);
702
- });
703
- }
704
- var HTML_ESCAPE_TEST_RE = /[&<>"]/;
705
- var HTML_ESCAPE_REPLACE_RE = /[&<>"]/g;
706
- var HTML_REPLACEMENTS = {
707
- "&": "&amp;",
708
- "<": "&lt;",
709
- ">": "&gt;",
710
- '"': "&quot;"
711
- };
712
- function replaceUnsafeChar(ch) {
713
- return HTML_REPLACEMENTS[ch];
714
- }
715
- function escapeHtml(str) {
716
- if (HTML_ESCAPE_TEST_RE.test(str)) return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);
717
- return str;
718
- }
719
- var REGEXP_ESCAPE_RE = /[.?*+^$[\]\\(){}|-]/g;
720
- function escapeRE$1(str) {
721
- return str.replace(REGEXP_ESCAPE_RE, "\\$&");
722
- }
723
- function isSpace(code) {
724
- switch (code) {
725
- case 9:
726
- case 32:
727
- return true;
728
- }
729
- return false;
730
- }
731
- function isWhiteSpace(code) {
732
- if (code >= 8192 && code <= 8202) return true;
733
- switch (code) {
734
- case 9:
735
- case 10:
736
- case 11:
737
- case 12:
738
- case 13:
739
- case 32:
740
- case 160:
741
- case 5760:
742
- case 8239:
743
- case 8287:
744
- case 12288:
745
- return true;
746
- }
747
- return false;
748
- }
749
- function isPunctChar(ch) {
750
- return regex_default$2.test(ch) || regex_default$1.test(ch);
751
- }
752
- function isPunctCharCode(code) {
753
- return isPunctChar(fromCodePoint(code));
754
- }
755
- function isMdAsciiPunct(ch) {
756
- switch (ch) {
757
- case 33:
758
- case 34:
759
- case 35:
760
- case 36:
761
- case 37:
762
- case 38:
763
- case 39:
764
- case 40:
765
- case 41:
766
- case 42:
767
- case 43:
768
- case 44:
769
- case 45:
770
- case 46:
771
- case 47:
772
- case 58:
773
- case 59:
774
- case 60:
775
- case 61:
776
- case 62:
777
- case 63:
778
- case 64:
779
- case 91:
780
- case 92:
781
- case 93:
782
- case 94:
783
- case 95:
784
- case 96:
785
- case 123:
786
- case 124:
787
- case 125:
788
- case 126:
789
- return true;
790
-
791
- default:
792
- return false;
793
- }
794
- }
795
- function normalizeReference(str) {
796
- str = str.trim().replace(/\s+/g, " ");
797
- if ("\u1e9e".toLowerCase() === "\u1e7e")
798
- /* c8 ignore next 2 */
799
- str = str.replace(/\u1e9e/g, "\xdf");
800
- return str.toLowerCase().toUpperCase();
801
- }
802
- function isAsciiTrimmable(c) {
803
- return c === 32 || c === 9 || c === 10 || c === 13;
804
- }
805
- function asciiTrim(str) {
806
- let start = 0;
807
- for (;start < str.length; start++) if (!isAsciiTrimmable(str.charCodeAt(start))) break;
808
- let end = str.length - 1;
809
- for (;end >= start; end--) if (!isAsciiTrimmable(str.charCodeAt(end))) break;
810
- return str.slice(start, end + 1);
811
- }
812
- var lib = {
813
- mdurl: mdurl_exports,
814
- ucmicro: uc_micro_exports
815
- };
816
- //#endregion
817
- //#region lib/helpers/parse_link_label.mjs
818
- function parseLinkLabel(state, start, disableNested) {
819
- let level, found, marker, prevPos;
820
- const max = state.posMax;
821
- const oldPos = state.pos;
822
- state.pos = start + 1;
823
- level = 1;
824
- while (state.pos < max) {
825
- marker = state.src.charCodeAt(state.pos);
826
- if (marker === 93) {
827
- level--;
828
- if (level === 0) {
829
- found = true;
830
- break;
831
- }
832
- }
833
- prevPos = state.pos;
834
- state.md.inline.skipToken(state);
835
- if (marker === 91) {
836
- if (prevPos === state.pos - 1) level++; else if (disableNested) {
837
- state.pos = oldPos;
838
- return -1;
839
- }
840
- }
841
- }
842
- let labelEnd = -1;
843
- if (found) labelEnd = state.pos;
844
- state.pos = oldPos;
845
- return labelEnd;
846
- }
847
- //#endregion
848
- //#region lib/helpers/parse_link_destination.mjs
849
- function parseLinkDestination(str, start, max) {
850
- let code;
851
- let pos = start;
852
- const result = {
853
- ok: false,
854
- pos: 0,
855
- str: ""
856
- };
857
- if (str.charCodeAt(pos) === 60) {
858
- pos++;
859
- while (pos < max) {
860
- code = str.charCodeAt(pos);
861
- if (code === 10) return result;
862
- if (code === 60) return result;
863
- if (code === 62) {
864
- result.pos = pos + 1;
865
- result.str = unescapeAll(str.slice(start + 1, pos));
866
- result.ok = true;
867
- return result;
868
- }
869
- if (code === 92 && pos + 1 < max) {
870
- pos += 2;
871
- continue;
872
- }
873
- pos++;
874
- }
875
- return result;
876
- }
877
- let level = 0;
878
- while (pos < max) {
879
- code = str.charCodeAt(pos);
880
- if (code === 32) break;
881
- if (code < 32 || code === 127) break;
882
- if (code === 92 && pos + 1 < max) {
883
- if (str.charCodeAt(pos + 1) === 32) break;
884
- pos += 2;
885
- continue;
886
- }
887
- if (code === 40) {
888
- level++;
889
- if (level > 32) return result;
890
- }
891
- if (code === 41) {
892
- if (level === 0) break;
893
- level--;
894
- }
895
- pos++;
896
- }
897
- if (start === pos) return result;
898
- if (level !== 0) return result;
899
- result.str = unescapeAll(str.slice(start, pos));
900
- result.pos = pos;
901
- result.ok = true;
902
- return result;
903
- }
904
- //#endregion
905
- //#region lib/helpers/parse_link_title.mjs
906
- function parseLinkTitle(str, start, max, prev_state) {
907
- let code;
908
- let pos = start;
909
- const state = {
910
- ok: false,
911
- can_continue: false,
912
- pos: 0,
913
- str: "",
914
- marker: 0
915
- };
916
- if (prev_state) {
917
- state.str = prev_state.str;
918
- state.marker = prev_state.marker;
919
- } else {
920
- if (pos >= max) return state;
921
- let marker = str.charCodeAt(pos);
922
- if (marker !== 34 && marker !== 39 && marker !== 40) return state;
923
- start++;
924
- pos++;
925
- if (marker === 40) marker = 41;
926
- state.marker = marker;
927
- }
928
- while (pos < max) {
929
- code = str.charCodeAt(pos);
930
- if (code === state.marker) {
931
- state.pos = pos + 1;
932
- state.str += unescapeAll(str.slice(start, pos));
933
- state.ok = true;
934
- return state;
935
- } else if (code === 40 && state.marker === 41) return state; else if (code === 92 && pos + 1 < max) pos++;
936
- pos++;
937
- }
938
- state.can_continue = true;
939
- state.str += unescapeAll(str.slice(start, pos));
940
- return state;
941
- }
942
- //#endregion
943
- //#region lib/helpers/index.mjs
944
- var helpers_exports = __exportAll({
945
- parseLinkDestination: () => parseLinkDestination,
946
- parseLinkLabel: () => parseLinkLabel,
947
- parseLinkTitle: () => parseLinkTitle
948
- });
949
- //#endregion
950
- //#region lib/renderer.mjs
951
- var default_rules = {};
952
- default_rules.code_inline = function(tokens, idx, options, env, slf) {
953
- const token = tokens[idx];
954
- return "<code" + slf.renderAttrs(token) + ">" + escapeHtml(token.content) + "</code>";
955
- };
956
- default_rules.code_block = function(tokens, idx, options, env, slf) {
957
- const token = tokens[idx];
958
- return "<pre" + slf.renderAttrs(token) + "><code>" + escapeHtml(tokens[idx].content) + "</code></pre>\n";
959
- };
960
- default_rules.fence = function(tokens, idx, options, env, slf) {
961
- const token = tokens[idx];
962
- const info = token.info ? unescapeAll(token.info).trim() : "";
963
- let langName = "";
964
- let langAttrs = "";
965
- if (info) {
966
- const arr = info.split(/(\s+)/g);
967
- langName = arr[0];
968
- langAttrs = arr.slice(2).join("");
969
- }
970
- let highlighted;
971
- if (options.highlight) highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content); else highlighted = escapeHtml(token.content);
972
- if (highlighted.indexOf("<pre") === 0) return highlighted + "\n";
973
- if (info) {
974
- const i = token.attrIndex("class");
975
- const tmpAttrs = token.attrs ? token.attrs.slice() : [];
976
- if (i < 0) tmpAttrs.push([ "class", options.langPrefix + langName ]); else {
977
- tmpAttrs[i] = tmpAttrs[i].slice();
978
- tmpAttrs[i][1] += " " + options.langPrefix + langName;
979
- }
980
- const tmpToken = {
981
- attrs: tmpAttrs
982
- };
983
- return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\n`;
984
- }
985
- return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\n`;
986
- };
987
- default_rules.image = function(tokens, idx, options, env, slf) {
988
- const token = tokens[idx];
989
- token.attrs[token.attrIndex("alt")][1] = slf.renderInlineAsText(token.children, options, env);
990
- return slf.renderToken(tokens, idx, options);
991
- };
992
- default_rules.hardbreak = function(tokens, idx, options) {
993
- return options.xhtmlOut ? "<br />\n" : "<br>\n";
994
- };
995
- default_rules.softbreak = function(tokens, idx, options) {
996
- return options.breaks ? options.xhtmlOut ? "<br />\n" : "<br>\n" : "\n";
997
- };
998
- default_rules.text = function(tokens, idx) {
999
- return escapeHtml(tokens[idx].content);
1000
- };
1001
- default_rules.html_block = function(tokens, idx) {
1002
- return tokens[idx].content;
1003
- };
1004
- default_rules.html_inline = function(tokens, idx) {
1005
- return tokens[idx].content;
1006
- };
1007
- function Renderer() {
1008
- this.rules = assign$1({}, default_rules);
1009
- }
1010
- Renderer.prototype.renderAttrs = function renderAttrs(token) {
1011
- let i, l, result;
1012
- if (!token.attrs) return "";
1013
- result = "";
1014
- for (i = 0, l = token.attrs.length; i < l; i++) result += " " + escapeHtml(token.attrs[i][0]) + '="' + escapeHtml(token.attrs[i][1]) + '"';
1015
- return result;
1016
- };
1017
- Renderer.prototype.renderToken = function renderToken(tokens, idx, options) {
1018
- const token = tokens[idx];
1019
- let result = "";
1020
- if (token.hidden) return "";
1021
- if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) result += "\n";
1022
- result += (token.nesting === -1 ? "</" : "<") + token.tag;
1023
- result += this.renderAttrs(token);
1024
- if (token.nesting === 0 && options.xhtmlOut) result += " /";
1025
- let needLf = false;
1026
- if (token.block) {
1027
- needLf = true;
1028
- if (token.nesting === 1) {
1029
- if (idx + 1 < tokens.length) {
1030
- const nextToken = tokens[idx + 1];
1031
- if (nextToken.type === "inline" || nextToken.hidden) needLf = false; else if (nextToken.nesting === -1 && nextToken.tag === token.tag) needLf = false;
1032
- }
1033
- }
1034
- }
1035
- result += needLf ? ">\n" : ">";
1036
- return result;
1037
- };
1038
- Renderer.prototype.renderInline = function(tokens, options, env) {
1039
- let result = "";
1040
- const rules = this.rules;
1041
- for (let i = 0, len = tokens.length; i < len; i++) {
1042
- const type = tokens[i].type;
1043
- if (typeof rules[type] !== "undefined") result += rules[type](tokens, i, options, env, this); else result += this.renderToken(tokens, i, options);
1044
- }
1045
- return result;
1046
- };
1047
- Renderer.prototype.renderInlineAsText = function(tokens, options, env) {
1048
- let result = "";
1049
- for (let i = 0, len = tokens.length; i < len; i++) switch (tokens[i].type) {
1050
- case "text":
1051
- result += tokens[i].content;
1052
- break;
1053
-
1054
- case "image":
1055
- result += this.renderInlineAsText(tokens[i].children, options, env);
1056
- break;
1057
-
1058
- case "html_inline":
1059
- case "html_block":
1060
- result += tokens[i].content;
1061
- break;
1062
-
1063
- case "softbreak":
1064
- case "hardbreak":
1065
- result += "\n";
1066
- break;
1067
-
1068
- default:
1069
- }
1070
- return result;
1071
- };
1072
- Renderer.prototype.render = function(tokens, options, env) {
1073
- let result = "";
1074
- const rules = this.rules;
1075
- for (let i = 0, len = tokens.length; i < len; i++) {
1076
- const type = tokens[i].type;
1077
- if (type === "inline") result += this.renderInline(tokens[i].children, options, env); else if (typeof rules[type] !== "undefined") result += rules[type](tokens, i, options, env, this); else result += this.renderToken(tokens, i, options, env);
1078
- }
1079
- return result;
1080
- };
1081
- //#endregion
1082
- //#region lib/ruler.mjs
1083
- function Ruler() {
1084
- this.__rules__ = [];
1085
- this.__cache__ = null;
1086
- }
1087
- Ruler.prototype.__find__ = function(name) {
1088
- for (let i = 0; i < this.__rules__.length; i++) if (this.__rules__[i].name === name) return i;
1089
- return -1;
1090
- };
1091
- Ruler.prototype.__compile__ = function() {
1092
- const self = this;
1093
- const chains = [ "" ];
1094
- self.__rules__.forEach(function(rule) {
1095
- if (!rule.enabled) return;
1096
- rule.alt.forEach(function(altName) {
1097
- if (chains.indexOf(altName) < 0) chains.push(altName);
1098
- });
1099
- });
1100
- self.__cache__ = {};
1101
- chains.forEach(function(chain) {
1102
- self.__cache__[chain] = [];
1103
- self.__rules__.forEach(function(rule) {
1104
- if (!rule.enabled) return;
1105
- if (chain && rule.alt.indexOf(chain) < 0) return;
1106
- self.__cache__[chain].push(rule.fn);
1107
- });
1108
- });
1109
- };
1110
- Ruler.prototype.at = function(name, fn, options) {
1111
- const index = this.__find__(name);
1112
- const opt = options || {};
1113
- if (index === -1) throw new Error("Parser rule not found: " + name);
1114
- this.__rules__[index].fn = fn;
1115
- this.__rules__[index].alt = opt.alt || [];
1116
- this.__cache__ = null;
1117
- };
1118
- Ruler.prototype.before = function(beforeName, ruleName, fn, options) {
1119
- const index = this.__find__(beforeName);
1120
- const opt = options || {};
1121
- if (index === -1) throw new Error("Parser rule not found: " + beforeName);
1122
- this.__rules__.splice(index, 0, {
1123
- name: ruleName,
1124
- enabled: true,
1125
- fn: fn,
1126
- alt: opt.alt || []
1127
- });
1128
- this.__cache__ = null;
1129
- };
1130
- Ruler.prototype.after = function(afterName, ruleName, fn, options) {
1131
- const index = this.__find__(afterName);
1132
- const opt = options || {};
1133
- if (index === -1) throw new Error("Parser rule not found: " + afterName);
1134
- this.__rules__.splice(index + 1, 0, {
1135
- name: ruleName,
1136
- enabled: true,
1137
- fn: fn,
1138
- alt: opt.alt || []
1139
- });
1140
- this.__cache__ = null;
1141
- };
1142
- Ruler.prototype.push = function(ruleName, fn, options) {
1143
- const opt = options || {};
1144
- this.__rules__.push({
1145
- name: ruleName,
1146
- enabled: true,
1147
- fn: fn,
1148
- alt: opt.alt || []
1149
- });
1150
- this.__cache__ = null;
1151
- };
1152
- Ruler.prototype.enable = function(list, ignoreInvalid) {
1153
- if (!Array.isArray(list)) list = [ list ];
1154
- const result = [];
1155
- list.forEach(function(name) {
1156
- const idx = this.__find__(name);
1157
- if (idx < 0) {
1158
- if (ignoreInvalid) return;
1159
- throw new Error("Rules manager: invalid rule name " + name);
1160
- }
1161
- this.__rules__[idx].enabled = true;
1162
- result.push(name);
1163
- }, this);
1164
- this.__cache__ = null;
1165
- return result;
1166
- };
1167
- Ruler.prototype.enableOnly = function(list, ignoreInvalid) {
1168
- if (!Array.isArray(list)) list = [ list ];
1169
- this.__rules__.forEach(function(rule) {
1170
- rule.enabled = false;
1171
- });
1172
- this.enable(list, ignoreInvalid);
1173
- };
1174
- Ruler.prototype.disable = function(list, ignoreInvalid) {
1175
- if (!Array.isArray(list)) list = [ list ];
1176
- const result = [];
1177
- list.forEach(function(name) {
1178
- const idx = this.__find__(name);
1179
- if (idx < 0) {
1180
- if (ignoreInvalid) return;
1181
- throw new Error("Rules manager: invalid rule name " + name);
1182
- }
1183
- this.__rules__[idx].enabled = false;
1184
- result.push(name);
1185
- }, this);
1186
- this.__cache__ = null;
1187
- return result;
1188
- };
1189
- Ruler.prototype.getRules = function(chainName) {
1190
- if (this.__cache__ === null) this.__compile__();
1191
- return this.__cache__[chainName] || [];
1192
- };
1193
- //#endregion
1194
- //#region lib/token.mjs
1195
- function Token(type, tag, nesting) {
1196
- this.type = type;
1197
- this.tag = tag;
1198
- this.attrs = null;
1199
- this.map = null;
1200
- this.nesting = nesting;
1201
- this.level = 0;
1202
- this.children = null;
1203
- this.content = "";
1204
- this.markup = "";
1205
- this.info = "";
1206
- this.meta = null;
1207
- this.block = false;
1208
- this.hidden = false;
1209
- }
1210
- Token.prototype.attrIndex = function attrIndex(name) {
1211
- if (!this.attrs) return -1;
1212
- const attrs = this.attrs;
1213
- for (let i = 0, len = attrs.length; i < len; i++) if (attrs[i][0] === name) return i;
1214
- return -1;
1215
- };
1216
- Token.prototype.attrPush = function attrPush(attrData) {
1217
- if (this.attrs) this.attrs.push(attrData); else this.attrs = [ attrData ];
1218
- };
1219
- Token.prototype.attrSet = function attrSet(name, value) {
1220
- const idx = this.attrIndex(name);
1221
- const attrData = [ name, value ];
1222
- if (idx < 0) this.attrPush(attrData); else this.attrs[idx] = attrData;
1223
- };
1224
- Token.prototype.attrGet = function attrGet(name) {
1225
- const idx = this.attrIndex(name);
1226
- let value = null;
1227
- if (idx >= 0) value = this.attrs[idx][1];
1228
- return value;
1229
- };
1230
- Token.prototype.attrJoin = function attrJoin(name, value) {
1231
- const idx = this.attrIndex(name);
1232
- if (idx < 0) this.attrPush([ name, value ]); else this.attrs[idx][1] = this.attrs[idx][1] + " " + value;
1233
- };
1234
- //#endregion
1235
- //#region lib/rules_core/state_core.mjs
1236
- function StateCore(src, md, env) {
1237
- this.src = src;
1238
- this.env = env;
1239
- this.tokens = [];
1240
- this.inlineMode = false;
1241
- this.md = md;
1242
- }
1243
- StateCore.prototype.Token = Token;
1244
- //#endregion
1245
- //#region lib/rules_core/normalize.mjs
1246
- var NEWLINES_RE = /\r\n?|\n/g;
1247
- var NULL_RE = /\0/g;
1248
- function normalize(state) {
1249
- let str;
1250
- str = state.src.replace(NEWLINES_RE, "\n");
1251
- str = str.replace(NULL_RE, "\ufffd");
1252
- state.src = str;
1253
- }
1254
- //#endregion
1255
- //#region lib/rules_core/block.mjs
1256
- function block(state) {
1257
- let token;
1258
- if (state.inlineMode) {
1259
- token = new state.Token("inline", "", 0);
1260
- token.content = state.src;
1261
- token.map = [ 0, 1 ];
1262
- token.children = [];
1263
- state.tokens.push(token);
1264
- } else state.md.block.parse(state.src, state.md, state.env, state.tokens);
1265
- }
1266
- //#endregion
1267
- //#region lib/rules_core/inline.mjs
1268
- function inline(state) {
1269
- const tokens = state.tokens;
1270
- for (let i = 0, l = tokens.length; i < l; i++) {
1271
- const tok = tokens[i];
1272
- if (tok.type === "inline") state.md.inline.parse(tok.content, state.md, state.env, tok.children);
1273
- }
1274
- }
1275
- //#endregion
1276
- //#region lib/rules_core/linkify.mjs
1277
- function isLinkOpen$1(str) {
1278
- return /^<a[>\s]/i.test(str);
1279
- }
1280
- function isLinkClose$1(str) {
1281
- return /^<\/a\s*>/i.test(str);
1282
- }
1283
- function linkify$1(state) {
1284
- const blockTokens = state.tokens;
1285
- if (!state.md.options.linkify) return;
1286
- for (let j = 0, l = blockTokens.length; j < l; j++) {
1287
- if (blockTokens[j].type !== "inline" || !state.md.linkify.pretest(blockTokens[j].content)) continue;
1288
- let tokens = blockTokens[j].children;
1289
- let htmlLinkLevel = 0;
1290
- for (let i = tokens.length - 1; i >= 0; i--) {
1291
- const currentToken = tokens[i];
1292
- if (currentToken.type === "link_close") {
1293
- i--;
1294
- while (tokens[i].level !== currentToken.level && tokens[i].type !== "link_open") i--;
1295
- continue;
1296
- }
1297
- if (currentToken.type === "html_inline") {
1298
- if (isLinkOpen$1(currentToken.content) && htmlLinkLevel > 0) htmlLinkLevel--;
1299
- if (isLinkClose$1(currentToken.content)) htmlLinkLevel++;
1300
- }
1301
- if (htmlLinkLevel > 0) continue;
1302
- if (currentToken.type === "text" && state.md.linkify.test(currentToken.content)) {
1303
- const text = currentToken.content;
1304
- let links = state.md.linkify.match(text);
1305
- const nodes = [];
1306
- let level = currentToken.level;
1307
- let lastPos = 0;
1308
- if (links.length > 0 && links[0].index === 0 && i > 0 && tokens[i - 1].type === "text_special") links = links.slice(1);
1309
- for (let ln = 0; ln < links.length; ln++) {
1310
- const url = links[ln].url;
1311
- const fullUrl = state.md.normalizeLink(url);
1312
- if (!state.md.validateLink(fullUrl)) continue;
1313
- let urlText = links[ln].text;
1314
- if (!links[ln].schema) urlText = state.md.normalizeLinkText("http://" + urlText).replace(/^http:\/\//, ""); else if (links[ln].schema === "mailto:" && !/^mailto:/i.test(urlText)) urlText = state.md.normalizeLinkText("mailto:" + urlText).replace(/^mailto:/, ""); else urlText = state.md.normalizeLinkText(urlText);
1315
- const pos = links[ln].index;
1316
- if (pos > lastPos) {
1317
- const token = new state.Token("text", "", 0);
1318
- token.content = text.slice(lastPos, pos);
1319
- token.level = level;
1320
- nodes.push(token);
1321
- }
1322
- const token_o = new state.Token("link_open", "a", 1);
1323
- token_o.attrs = [ [ "href", fullUrl ] ];
1324
- token_o.level = level++;
1325
- token_o.markup = "linkify";
1326
- token_o.info = "auto";
1327
- nodes.push(token_o);
1328
- const token_t = new state.Token("text", "", 0);
1329
- token_t.content = urlText;
1330
- token_t.level = level;
1331
- nodes.push(token_t);
1332
- const token_c = new state.Token("link_close", "a", -1);
1333
- token_c.level = --level;
1334
- token_c.markup = "linkify";
1335
- token_c.info = "auto";
1336
- nodes.push(token_c);
1337
- lastPos = links[ln].lastIndex;
1338
- }
1339
- if (lastPos < text.length) {
1340
- const token = new state.Token("text", "", 0);
1341
- token.content = text.slice(lastPos);
1342
- token.level = level;
1343
- nodes.push(token);
1344
- }
1345
- blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);
1346
- }
1347
- }
1348
- }
1349
- }
1350
- //#endregion
1351
- //#region lib/rules_core/replacements.mjs
1352
- var RARE_RE = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/;
1353
- var SCOPED_ABBR_TEST_RE = /\((c|tm|r)\)/i;
1354
- var SCOPED_ABBR_RE = /\((c|tm|r)\)/gi;
1355
- var SCOPED_ABBR = {
1356
- c: "\xa9",
1357
- r: "\xae",
1358
- tm: "\u2122"
1359
- };
1360
- function replaceFn(match, name) {
1361
- return SCOPED_ABBR[name.toLowerCase()];
1362
- }
1363
- function replace_scoped(inlineTokens) {
1364
- let inside_autolink = 0;
1365
- for (let i = inlineTokens.length - 1; i >= 0; i--) {
1366
- const token = inlineTokens[i];
1367
- if (token.type === "text" && !inside_autolink) token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);
1368
- if (token.type === "link_open" && token.info === "auto") inside_autolink--;
1369
- if (token.type === "link_close" && token.info === "auto") inside_autolink++;
1370
- }
1371
- }
1372
- function replace_rare(inlineTokens) {
1373
- let inside_autolink = 0;
1374
- for (let i = inlineTokens.length - 1; i >= 0; i--) {
1375
- const token = inlineTokens[i];
1376
- if (token.type === "text" && !inside_autolink) {
1377
- if (RARE_RE.test(token.content)) token.content = token.content.replace(/\+-/g, "\xb1").replace(/\.{2,}/g, "\u2026").replace(/([?!])\u2026/g, "$1..").replace(/([?!]){4,}/g, "$1$1$1").replace(/,{2,}/g, ",").replace(/(^|[^-])---(?=[^-]|$)/gm, "$1\u2014").replace(/(^|\s)--(?=\s|$)/gm, "$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm, "$1\u2013");
1378
- }
1379
- if (token.type === "link_open" && token.info === "auto") inside_autolink--;
1380
- if (token.type === "link_close" && token.info === "auto") inside_autolink++;
1381
- }
1382
- }
1383
- function replace(state) {
1384
- let blkIdx;
1385
- if (!state.md.options.typographer) return;
1386
- for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {
1387
- if (state.tokens[blkIdx].type !== "inline") continue;
1388
- if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) replace_scoped(state.tokens[blkIdx].children);
1389
- if (RARE_RE.test(state.tokens[blkIdx].content)) replace_rare(state.tokens[blkIdx].children);
1390
- }
1391
- }
1392
- //#endregion
1393
- //#region lib/rules_core/smartquotes.mjs
1394
- var QUOTE_TEST_RE = /['"]/;
1395
- var QUOTE_RE = /['"]/g;
1396
- var APOSTROPHE = "\u2019";
1397
- function addReplacement(replacements, tokenIdx, pos, ch) {
1398
- if (!replacements[tokenIdx]) replacements[tokenIdx] = [];
1399
- replacements[tokenIdx].push({
1400
- pos: pos,
1401
- ch: ch
1402
- });
1403
- }
1404
- function applyReplacements(str, replacements) {
1405
- let result = "";
1406
- let lastPos = 0;
1407
- replacements.sort((a, b) => a.pos - b.pos);
1408
- for (let i = 0; i < replacements.length; i++) {
1409
- const replacement = replacements[i];
1410
- result += str.slice(lastPos, replacement.pos) + replacement.ch;
1411
- lastPos = replacement.pos + 1;
1412
- }
1413
- return result + str.slice(lastPos);
1414
- }
1415
- function process_inlines(tokens, state) {
1416
- let j;
1417
- const stack = [];
1418
- const replacements = {};
1419
- for (let i = 0; i < tokens.length; i++) {
1420
- const token = tokens[i];
1421
- const thisLevel = tokens[i].level;
1422
- for (j = stack.length - 1; j >= 0; j--) if (stack[j].level <= thisLevel) break;
1423
- stack.length = j + 1;
1424
- if (token.type !== "text") continue;
1425
- const text = token.content;
1426
- let pos = 0;
1427
- const max = text.length;
1428
- OUTER: while (pos < max) {
1429
- QUOTE_RE.lastIndex = pos;
1430
- const t = QUOTE_RE.exec(text);
1431
- if (!t) break;
1432
- let canOpen = true;
1433
- let canClose = true;
1434
- pos = t.index + 1;
1435
- const isSingle = t[0] === "'";
1436
- let lastChar = 32;
1437
- if (t.index - 1 >= 0) lastChar = text.charCodeAt(t.index - 1); else for (j = i - 1; j >= 0; j--) {
1438
- if (tokens[j].type === "softbreak" || tokens[j].type === "hardbreak") break;
1439
- if (!tokens[j].content) continue;
1440
- lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);
1441
- break;
1442
- }
1443
- let nextChar = 32;
1444
- if (pos < max) nextChar = text.charCodeAt(pos); else for (j = i + 1; j < tokens.length; j++) {
1445
- if (tokens[j].type === "softbreak" || tokens[j].type === "hardbreak") break;
1446
- if (!tokens[j].content) continue;
1447
- nextChar = tokens[j].content.charCodeAt(0);
1448
- break;
1449
- }
1450
- const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);
1451
- const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);
1452
- const isLastWhiteSpace = isWhiteSpace(lastChar);
1453
- const isNextWhiteSpace = isWhiteSpace(nextChar);
1454
- if (isNextWhiteSpace) canOpen = false; else if (isNextPunctChar) {
1455
- if (!(isLastWhiteSpace || isLastPunctChar)) canOpen = false;
1456
- }
1457
- if (isLastWhiteSpace) canClose = false; else if (isLastPunctChar) {
1458
- if (!(isNextWhiteSpace || isNextPunctChar)) canClose = false;
1459
- }
1460
- if (nextChar === 34 && t[0] === '"') {
1461
- if (lastChar >= 48 && lastChar <= 57) canClose = canOpen = false;
1462
- }
1463
- if (canOpen && canClose) {
1464
- canOpen = isLastPunctChar;
1465
- canClose = isNextPunctChar;
1466
- }
1467
- if (!canOpen && !canClose) {
1468
- if (isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);
1469
- continue;
1470
- }
1471
- if (canClose) for (j = stack.length - 1; j >= 0; j--) {
1472
- let item = stack[j];
1473
- if (stack[j].level < thisLevel) break;
1474
- if (item.single === isSingle && stack[j].level === thisLevel) {
1475
- item = stack[j];
1476
- let openQuote;
1477
- let closeQuote;
1478
- if (isSingle) {
1479
- openQuote = state.md.options.quotes[2];
1480
- closeQuote = state.md.options.quotes[3];
1481
- } else {
1482
- openQuote = state.md.options.quotes[0];
1483
- closeQuote = state.md.options.quotes[1];
1484
- }
1485
- addReplacement(replacements, i, t.index, closeQuote);
1486
- addReplacement(replacements, item.token, item.pos, openQuote);
1487
- stack.length = j;
1488
- continue OUTER;
1489
- }
1490
- }
1491
- if (canOpen) stack.push({
1492
- token: i,
1493
- pos: t.index,
1494
- single: isSingle,
1495
- level: thisLevel
1496
- }); else if (canClose && isSingle) addReplacement(replacements, i, t.index, APOSTROPHE);
1497
- }
1498
- }
1499
- Object.keys(replacements).forEach(function(tokenIdx) {
1500
- tokens[tokenIdx].content = applyReplacements(tokens[tokenIdx].content, replacements[tokenIdx]);
1501
- });
1502
- }
1503
- function smartquotes(state) {
1504
- if (!state.md.options.typographer) return;
1505
- for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {
1506
- if (state.tokens[blkIdx].type !== "inline" || !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) continue;
1507
- process_inlines(state.tokens[blkIdx].children, state);
1508
- }
1509
- }
1510
- //#endregion
1511
- //#region lib/rules_core/text_join.mjs
1512
- function text_join(state) {
1513
- let curr, last;
1514
- const blockTokens = state.tokens;
1515
- const l = blockTokens.length;
1516
- for (let j = 0; j < l; j++) {
1517
- if (blockTokens[j].type !== "inline") continue;
1518
- const tokens = blockTokens[j].children;
1519
- const max = tokens.length;
1520
- for (curr = 0; curr < max; curr++) if (tokens[curr].type === "text_special") tokens[curr].type = "text";
1521
- for (curr = last = 0; curr < max; curr++) if (tokens[curr].type === "text" && curr + 1 < max && tokens[curr + 1].type === "text") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; else {
1522
- if (curr !== last) tokens[last] = tokens[curr];
1523
- last++;
1524
- }
1525
- if (curr !== last) tokens.length = last;
1526
- }
1527
- }
1528
- //#endregion
1529
- //#region lib/parser_core.mjs
1530
- var _rules$2 = [ [ "normalize", normalize ], [ "block", block ], [ "inline", inline ], [ "linkify", linkify$1 ], [ "replacements", replace ], [ "smartquotes", smartquotes ], [ "text_join", text_join ] ];
1531
- function Core() {
1532
- this.ruler = new Ruler;
1533
- for (let i = 0; i < _rules$2.length; i++) this.ruler.push(_rules$2[i][0], _rules$2[i][1]);
1534
- }
1535
- Core.prototype.process = function(state) {
1536
- const rules = this.ruler.getRules("");
1537
- for (let i = 0, l = rules.length; i < l; i++) rules[i](state);
1538
- };
1539
- Core.prototype.State = StateCore;
1540
- //#endregion
1541
- //#region lib/rules_block/state_block.mjs
1542
- function StateBlock(src, md, env, tokens) {
1543
- this.src = src;
1544
- this.md = md;
1545
- this.env = env;
1546
- this.tokens = tokens;
1547
- this.bMarks = [];
1548
- this.eMarks = [];
1549
- this.tShift = [];
1550
- this.sCount = [];
1551
- this.bsCount = [];
1552
- this.blkIndent = 0;
1553
- this.line = 0;
1554
- this.lineMax = 0;
1555
- this.tight = false;
1556
- this.ddIndent = -1;
1557
- this.listIndent = -1;
1558
- this.parentType = "root";
1559
- this.level = 0;
1560
- const s = this.src;
1561
- for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {
1562
- const ch = s.charCodeAt(pos);
1563
- if (!indent_found) if (isSpace(ch)) {
1564
- indent++;
1565
- if (ch === 9) offset += 4 - offset % 4; else offset++;
1566
- continue;
1567
- } else indent_found = true;
1568
- if (ch === 10 || pos === len - 1) {
1569
- if (ch !== 10) pos++;
1570
- this.bMarks.push(start);
1571
- this.eMarks.push(pos);
1572
- this.tShift.push(indent);
1573
- this.sCount.push(offset);
1574
- this.bsCount.push(0);
1575
- indent_found = false;
1576
- indent = 0;
1577
- offset = 0;
1578
- start = pos + 1;
1579
- }
1580
- }
1581
- this.bMarks.push(s.length);
1582
- this.eMarks.push(s.length);
1583
- this.tShift.push(0);
1584
- this.sCount.push(0);
1585
- this.bsCount.push(0);
1586
- this.lineMax = this.bMarks.length - 1;
1587
- }
1588
- StateBlock.prototype.push = function(type, tag, nesting) {
1589
- const token = new Token(type, tag, nesting);
1590
- token.block = true;
1591
- if (nesting < 0) this.level--;
1592
- token.level = this.level;
1593
- if (nesting > 0) this.level++;
1594
- this.tokens.push(token);
1595
- return token;
1596
- };
1597
- StateBlock.prototype.isEmpty = function isEmpty(line) {
1598
- return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];
1599
- };
1600
- StateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {
1601
- for (let max = this.lineMax; from < max; from++) if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) break;
1602
- return from;
1603
- };
1604
- StateBlock.prototype.skipSpaces = function skipSpaces(pos) {
1605
- for (let max = this.src.length; pos < max; pos++) if (!isSpace(this.src.charCodeAt(pos))) break;
1606
- return pos;
1607
- };
1608
- StateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {
1609
- if (pos <= min) return pos;
1610
- while (pos > min) if (!isSpace(this.src.charCodeAt(--pos))) return pos + 1;
1611
- return pos;
1612
- };
1613
- StateBlock.prototype.skipChars = function skipChars(pos, code) {
1614
- for (let max = this.src.length; pos < max; pos++) if (this.src.charCodeAt(pos) !== code) break;
1615
- return pos;
1616
- };
1617
- StateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {
1618
- if (pos <= min) return pos;
1619
- while (pos > min) if (code !== this.src.charCodeAt(--pos)) return pos + 1;
1620
- return pos;
1621
- };
1622
- StateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {
1623
- if (begin >= end) return "";
1624
- const queue = new Array(end - begin);
1625
- for (let i = 0, line = begin; line < end; line++, i++) {
1626
- let lineIndent = 0;
1627
- const lineStart = this.bMarks[line];
1628
- let first = lineStart;
1629
- let last;
1630
- if (line + 1 < end || keepLastLF) last = this.eMarks[line] + 1; else last = this.eMarks[line];
1631
- while (first < last && lineIndent < indent) {
1632
- const ch = this.src.charCodeAt(first);
1633
- if (isSpace(ch)) if (ch === 9) lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4; else lineIndent++; else if (first - lineStart < this.tShift[line]) lineIndent++; else break;
1634
- first++;
1635
- }
1636
- if (lineIndent > indent) queue[i] = new Array(lineIndent - indent + 1).join(" ") + this.src.slice(first, last); else queue[i] = this.src.slice(first, last);
1637
- }
1638
- return queue.join("");
1639
- };
1640
- StateBlock.prototype.Token = Token;
1641
- //#endregion
1642
- //#region lib/rules_block/table.mjs
1643
- var MAX_AUTOCOMPLETED_CELLS = 65536;
1644
- function getLine(state, line) {
1645
- const pos = state.bMarks[line] + state.tShift[line];
1646
- const max = state.eMarks[line];
1647
- return state.src.slice(pos, max);
1648
- }
1649
- function escapedSplit(str) {
1650
- const result = [];
1651
- const max = str.length;
1652
- let pos = 0;
1653
- let ch = str.charCodeAt(pos);
1654
- let isEscaped = false;
1655
- let lastPos = 0;
1656
- let current = "";
1657
- while (pos < max) {
1658
- if (ch === 124) if (!isEscaped) {
1659
- result.push(current + str.substring(lastPos, pos));
1660
- current = "";
1661
- lastPos = pos + 1;
1662
- } else {
1663
- current += str.substring(lastPos, pos - 1);
1664
- lastPos = pos;
1665
- }
1666
- isEscaped = ch === 92;
1667
- pos++;
1668
- ch = str.charCodeAt(pos);
1669
- }
1670
- result.push(current + str.substring(lastPos));
1671
- return result;
1672
- }
1673
- function table(state, startLine, endLine, silent) {
1674
- if (startLine + 2 > endLine) return false;
1675
- let nextLine = startLine + 1;
1676
- if (state.sCount[nextLine] < state.blkIndent) return false;
1677
- if (state.sCount[nextLine] - state.blkIndent >= 4) return false;
1678
- let pos = state.bMarks[nextLine] + state.tShift[nextLine];
1679
- if (pos >= state.eMarks[nextLine]) return false;
1680
- const firstCh = state.src.charCodeAt(pos++);
1681
- if (firstCh !== 124 && firstCh !== 45 && firstCh !== 58) return false;
1682
- if (pos >= state.eMarks[nextLine]) return false;
1683
- const secondCh = state.src.charCodeAt(pos++);
1684
- if (secondCh !== 124 && secondCh !== 45 && secondCh !== 58 && !isSpace(secondCh)) return false;
1685
- if (firstCh === 45 && isSpace(secondCh)) return false;
1686
- while (pos < state.eMarks[nextLine]) {
1687
- const ch = state.src.charCodeAt(pos);
1688
- if (ch !== 124 && ch !== 45 && ch !== 58 && !isSpace(ch)) return false;
1689
- pos++;
1690
- }
1691
- let lineText = getLine(state, startLine + 1);
1692
- let columns = lineText.split("|");
1693
- const aligns = [];
1694
- for (let i = 0; i < columns.length; i++) {
1695
- const t = columns[i].trim();
1696
- if (!t) if (i === 0 || i === columns.length - 1) continue; else return false;
1697
- if (!/^:?-+:?$/.test(t)) return false;
1698
- if (t.charCodeAt(t.length - 1) === 58) aligns.push(t.charCodeAt(0) === 58 ? "center" : "right"); else if (t.charCodeAt(0) === 58) aligns.push("left"); else aligns.push("");
1699
- }
1700
- lineText = getLine(state, startLine).trim();
1701
- if (lineText.indexOf("|") === -1) return false;
1702
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
1703
- columns = escapedSplit(lineText);
1704
- if (columns.length && columns[0] === "") columns.shift();
1705
- if (columns.length && columns[columns.length - 1] === "") columns.pop();
1706
- const columnCount = columns.length;
1707
- if (columnCount === 0 || columnCount !== aligns.length) return false;
1708
- if (silent) return true;
1709
- const oldParentType = state.parentType;
1710
- state.parentType = "table";
1711
- const terminatorRules = state.md.block.ruler.getRules("blockquote");
1712
- const token_to = state.push("table_open", "table", 1);
1713
- const tableLines = [ startLine, 0 ];
1714
- token_to.map = tableLines;
1715
- const token_tho = state.push("thead_open", "thead", 1);
1716
- token_tho.map = [ startLine, startLine + 1 ];
1717
- const token_htro = state.push("tr_open", "tr", 1);
1718
- token_htro.map = [ startLine, startLine + 1 ];
1719
- for (let i = 0; i < columns.length; i++) {
1720
- const token_ho = state.push("th_open", "th", 1);
1721
- if (aligns[i]) token_ho.attrs = [ [ "style", "text-align:" + aligns[i] ] ];
1722
- const token_il = state.push("inline", "", 0);
1723
- token_il.content = columns[i].trim();
1724
- token_il.children = [];
1725
- state.push("th_close", "th", -1);
1726
- }
1727
- state.push("tr_close", "tr", -1);
1728
- state.push("thead_close", "thead", -1);
1729
- let tbodyLines;
1730
- let autocompletedCells = 0;
1731
- for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {
1732
- if (state.sCount[nextLine] < state.blkIndent) break;
1733
- let terminate = false;
1734
- for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
1735
- terminate = true;
1736
- break;
1737
- }
1738
- if (terminate) break;
1739
- lineText = getLine(state, nextLine).trim();
1740
- if (!lineText) break;
1741
- if (state.sCount[nextLine] - state.blkIndent >= 4) break;
1742
- columns = escapedSplit(lineText);
1743
- if (columns.length && columns[0] === "") columns.shift();
1744
- if (columns.length && columns[columns.length - 1] === "") columns.pop();
1745
- autocompletedCells += columnCount - columns.length;
1746
- if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) break;
1747
- if (nextLine === startLine + 2) {
1748
- const token_tbo = state.push("tbody_open", "tbody", 1);
1749
- token_tbo.map = tbodyLines = [ startLine + 2, 0 ];
1750
- }
1751
- const token_tro = state.push("tr_open", "tr", 1);
1752
- token_tro.map = [ nextLine, nextLine + 1 ];
1753
- for (let i = 0; i < columnCount; i++) {
1754
- const token_tdo = state.push("td_open", "td", 1);
1755
- if (aligns[i]) token_tdo.attrs = [ [ "style", "text-align:" + aligns[i] ] ];
1756
- const token_il = state.push("inline", "", 0);
1757
- token_il.content = columns[i] ? columns[i].trim() : "";
1758
- token_il.children = [];
1759
- state.push("td_close", "td", -1);
1760
- }
1761
- state.push("tr_close", "tr", -1);
1762
- }
1763
- if (tbodyLines) {
1764
- state.push("tbody_close", "tbody", -1);
1765
- tbodyLines[1] = nextLine;
1766
- }
1767
- state.push("table_close", "table", -1);
1768
- tableLines[1] = nextLine;
1769
- state.parentType = oldParentType;
1770
- state.line = nextLine;
1771
- return true;
1772
- }
1773
- //#endregion
1774
- //#region lib/rules_block/code.mjs
1775
- function code(state, startLine, endLine) {
1776
- if (state.sCount[startLine] - state.blkIndent < 4) return false;
1777
- let nextLine = startLine + 1;
1778
- let last = nextLine;
1779
- while (nextLine < endLine) {
1780
- if (state.isEmpty(nextLine)) {
1781
- nextLine++;
1782
- continue;
1783
- }
1784
- if (state.sCount[nextLine] - state.blkIndent >= 4) {
1785
- nextLine++;
1786
- last = nextLine;
1787
- continue;
1788
- }
1789
- break;
1790
- }
1791
- state.line = last;
1792
- const token = state.push("code_block", "code", 0);
1793
- token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + "\n";
1794
- token.map = [ startLine, state.line ];
1795
- return true;
1796
- }
1797
- //#endregion
1798
- //#region lib/rules_block/fence.mjs
1799
- function fence(state, startLine, endLine, silent) {
1800
- let pos = state.bMarks[startLine] + state.tShift[startLine];
1801
- let max = state.eMarks[startLine];
1802
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
1803
- if (pos + 3 > max) return false;
1804
- const marker = state.src.charCodeAt(pos);
1805
- if (marker !== 126 && marker !== 96) return false;
1806
- let mem = pos;
1807
- pos = state.skipChars(pos, marker);
1808
- let len = pos - mem;
1809
- if (len < 3) return false;
1810
- const markup = state.src.slice(mem, pos);
1811
- const params = state.src.slice(pos, max);
1812
- if (marker === 96) {
1813
- if (params.indexOf(String.fromCharCode(marker)) >= 0) return false;
1814
- }
1815
- if (silent) return true;
1816
- let nextLine = startLine;
1817
- let haveEndMarker = false;
1818
- for (;;) {
1819
- nextLine++;
1820
- if (nextLine >= endLine) break;
1821
- pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];
1822
- max = state.eMarks[nextLine];
1823
- if (pos < max && state.sCount[nextLine] < state.blkIndent) break;
1824
- if (state.src.charCodeAt(pos) !== marker) continue;
1825
- if (state.sCount[nextLine] - state.blkIndent >= 4) continue;
1826
- pos = state.skipChars(pos, marker);
1827
- if (pos - mem < len) continue;
1828
- pos = state.skipSpaces(pos);
1829
- if (pos < max) continue;
1830
- haveEndMarker = true;
1831
- break;
1832
- }
1833
- len = state.sCount[startLine];
1834
- state.line = nextLine + (haveEndMarker ? 1 : 0);
1835
- const token = state.push("fence", "code", 0);
1836
- token.info = params;
1837
- token.content = state.getLines(startLine + 1, nextLine, len, true);
1838
- token.markup = markup;
1839
- token.map = [ startLine, state.line ];
1840
- return true;
1841
- }
1842
- //#endregion
1843
- //#region lib/rules_block/blockquote.mjs
1844
- function blockquote(state, startLine, endLine, silent) {
1845
- let pos = state.bMarks[startLine] + state.tShift[startLine];
1846
- let max = state.eMarks[startLine];
1847
- const oldLineMax = state.lineMax;
1848
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
1849
- if (state.src.charCodeAt(pos) !== 62) return false;
1850
- if (silent) return true;
1851
- const oldBMarks = [];
1852
- const oldBSCount = [];
1853
- const oldSCount = [];
1854
- const oldTShift = [];
1855
- const terminatorRules = state.md.block.ruler.getRules("blockquote");
1856
- const oldParentType = state.parentType;
1857
- state.parentType = "blockquote";
1858
- let lastLineEmpty = false;
1859
- let nextLine;
1860
- for (nextLine = startLine; nextLine < endLine; nextLine++) {
1861
- const isOutdented = state.sCount[nextLine] < state.blkIndent;
1862
- pos = state.bMarks[nextLine] + state.tShift[nextLine];
1863
- max = state.eMarks[nextLine];
1864
- if (pos >= max) break;
1865
- if (state.src.charCodeAt(pos++) === 62 && !isOutdented) {
1866
- let initial = state.sCount[nextLine] + 1;
1867
- let spaceAfterMarker;
1868
- let adjustTab;
1869
- if (state.src.charCodeAt(pos) === 32) {
1870
- pos++;
1871
- initial++;
1872
- adjustTab = false;
1873
- spaceAfterMarker = true;
1874
- } else if (state.src.charCodeAt(pos) === 9) {
1875
- spaceAfterMarker = true;
1876
- if ((state.bsCount[nextLine] + initial) % 4 === 3) {
1877
- pos++;
1878
- initial++;
1879
- adjustTab = false;
1880
- } else adjustTab = true;
1881
- } else spaceAfterMarker = false;
1882
- let offset = initial;
1883
- oldBMarks.push(state.bMarks[nextLine]);
1884
- state.bMarks[nextLine] = pos;
1885
- while (pos < max) {
1886
- const ch = state.src.charCodeAt(pos);
1887
- if (isSpace(ch)) if (ch === 9) offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4; else offset++; else break;
1888
- pos++;
1889
- }
1890
- lastLineEmpty = pos >= max;
1891
- oldBSCount.push(state.bsCount[nextLine]);
1892
- state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);
1893
- oldSCount.push(state.sCount[nextLine]);
1894
- state.sCount[nextLine] = offset - initial;
1895
- oldTShift.push(state.tShift[nextLine]);
1896
- state.tShift[nextLine] = pos - state.bMarks[nextLine];
1897
- continue;
1898
- }
1899
- if (lastLineEmpty) break;
1900
- let terminate = false;
1901
- for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
1902
- terminate = true;
1903
- break;
1904
- }
1905
- if (terminate) {
1906
- state.lineMax = nextLine;
1907
- if (state.blkIndent !== 0) {
1908
- oldBMarks.push(state.bMarks[nextLine]);
1909
- oldBSCount.push(state.bsCount[nextLine]);
1910
- oldTShift.push(state.tShift[nextLine]);
1911
- oldSCount.push(state.sCount[nextLine]);
1912
- state.sCount[nextLine] -= state.blkIndent;
1913
- }
1914
- break;
1915
- }
1916
- oldBMarks.push(state.bMarks[nextLine]);
1917
- oldBSCount.push(state.bsCount[nextLine]);
1918
- oldTShift.push(state.tShift[nextLine]);
1919
- oldSCount.push(state.sCount[nextLine]);
1920
- state.sCount[nextLine] = -1;
1921
- }
1922
- const oldIndent = state.blkIndent;
1923
- state.blkIndent = 0;
1924
- const token_o = state.push("blockquote_open", "blockquote", 1);
1925
- token_o.markup = ">";
1926
- const lines = [ startLine, 0 ];
1927
- token_o.map = lines;
1928
- state.md.block.tokenize(state, startLine, nextLine);
1929
- const token_c = state.push("blockquote_close", "blockquote", -1);
1930
- token_c.markup = ">";
1931
- state.lineMax = oldLineMax;
1932
- state.parentType = oldParentType;
1933
- lines[1] = state.line;
1934
- for (let i = 0; i < oldTShift.length; i++) {
1935
- state.bMarks[i + startLine] = oldBMarks[i];
1936
- state.tShift[i + startLine] = oldTShift[i];
1937
- state.sCount[i + startLine] = oldSCount[i];
1938
- state.bsCount[i + startLine] = oldBSCount[i];
1939
- }
1940
- state.blkIndent = oldIndent;
1941
- return true;
1942
- }
1943
- //#endregion
1944
- //#region lib/rules_block/hr.mjs
1945
- function hr(state, startLine, endLine, silent) {
1946
- const max = state.eMarks[startLine];
1947
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
1948
- let pos = state.bMarks[startLine] + state.tShift[startLine];
1949
- const marker = state.src.charCodeAt(pos++);
1950
- if (marker !== 42 && marker !== 45 && marker !== 95) return false;
1951
- let cnt = 1;
1952
- while (pos < max) {
1953
- const ch = state.src.charCodeAt(pos++);
1954
- if (ch !== marker && !isSpace(ch)) return false;
1955
- if (ch === marker) cnt++;
1956
- }
1957
- if (cnt < 3) return false;
1958
- if (silent) return true;
1959
- state.line = startLine + 1;
1960
- const token = state.push("hr", "hr", 0);
1961
- token.map = [ startLine, state.line ];
1962
- token.markup = Array(cnt + 1).join(String.fromCharCode(marker));
1963
- return true;
1964
- }
1965
- //#endregion
1966
- //#region lib/rules_block/list.mjs
1967
- function skipBulletListMarker(state, startLine) {
1968
- const max = state.eMarks[startLine];
1969
- let pos = state.bMarks[startLine] + state.tShift[startLine];
1970
- const marker = state.src.charCodeAt(pos++);
1971
- if (marker !== 42 && marker !== 45 && marker !== 43) return -1;
1972
- if (pos < max) {
1973
- if (!isSpace(state.src.charCodeAt(pos))) return -1;
1974
- }
1975
- return pos;
1976
- }
1977
- function skipOrderedListMarker(state, startLine) {
1978
- const start = state.bMarks[startLine] + state.tShift[startLine];
1979
- const max = state.eMarks[startLine];
1980
- let pos = start;
1981
- if (pos + 1 >= max) return -1;
1982
- let ch = state.src.charCodeAt(pos++);
1983
- if (ch < 48 || ch > 57) return -1;
1984
- for (;;) {
1985
- if (pos >= max) return -1;
1986
- ch = state.src.charCodeAt(pos++);
1987
- if (ch >= 48 && ch <= 57) {
1988
- if (pos - start >= 10) return -1;
1989
- continue;
1990
- }
1991
- if (ch === 41 || ch === 46) break;
1992
- return -1;
1993
- }
1994
- if (pos < max) {
1995
- ch = state.src.charCodeAt(pos);
1996
- if (!isSpace(ch)) return -1;
1997
- }
1998
- return pos;
1999
- }
2000
- function markTightParagraphs(state, idx) {
2001
- const level = state.level + 2;
2002
- for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) if (state.tokens[i].level === level && state.tokens[i].type === "paragraph_open") {
2003
- state.tokens[i + 2].hidden = true;
2004
- state.tokens[i].hidden = true;
2005
- i += 2;
2006
- }
2007
- }
2008
- function list(state, startLine, endLine, silent) {
2009
- let max, pos, start, token;
2010
- let nextLine = startLine;
2011
- let tight = true;
2012
- if (state.sCount[nextLine] - state.blkIndent >= 4) return false;
2013
- if (state.listIndent >= 0 && state.sCount[nextLine] - state.listIndent >= 4 && state.sCount[nextLine] < state.blkIndent) return false;
2014
- let isTerminatingParagraph = false;
2015
- if (silent && state.parentType === "paragraph") {
2016
- if (state.sCount[nextLine] >= state.blkIndent) isTerminatingParagraph = true;
2017
- }
2018
- let isOrdered;
2019
- let markerValue;
2020
- let posAfterMarker;
2021
- if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {
2022
- isOrdered = true;
2023
- start = state.bMarks[nextLine] + state.tShift[nextLine];
2024
- markerValue = Number(state.src.slice(start, posAfterMarker - 1));
2025
- if (isTerminatingParagraph && markerValue !== 1) return false;
2026
- } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) isOrdered = false; else return false;
2027
- if (isTerminatingParagraph) {
2028
- if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false;
2029
- }
2030
- if (silent) return true;
2031
- const markerCharCode = state.src.charCodeAt(posAfterMarker - 1);
2032
- const listTokIdx = state.tokens.length;
2033
- if (isOrdered) {
2034
- token = state.push("ordered_list_open", "ol", 1);
2035
- if (markerValue !== 1) token.attrs = [ [ "start", markerValue ] ];
2036
- } else token = state.push("bullet_list_open", "ul", 1);
2037
- const listLines = [ nextLine, 0 ];
2038
- token.map = listLines;
2039
- token.markup = String.fromCharCode(markerCharCode);
2040
- let prevEmptyEnd = false;
2041
- const terminatorRules = state.md.block.ruler.getRules("list");
2042
- const oldParentType = state.parentType;
2043
- state.parentType = "list";
2044
- while (nextLine < endLine) {
2045
- pos = posAfterMarker;
2046
- max = state.eMarks[nextLine];
2047
- const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine]);
2048
- let offset = initial;
2049
- while (pos < max) {
2050
- const ch = state.src.charCodeAt(pos);
2051
- if (ch === 9) offset += 4 - (offset + state.bsCount[nextLine]) % 4; else if (ch === 32) offset++; else break;
2052
- pos++;
2053
- }
2054
- const contentStart = pos;
2055
- let indentAfterMarker;
2056
- if (contentStart >= max) indentAfterMarker = 1; else indentAfterMarker = offset - initial;
2057
- if (indentAfterMarker > 4) indentAfterMarker = 1;
2058
- const indent = initial + indentAfterMarker;
2059
- token = state.push("list_item_open", "li", 1);
2060
- token.markup = String.fromCharCode(markerCharCode);
2061
- const itemLines = [ nextLine, 0 ];
2062
- token.map = itemLines;
2063
- if (isOrdered) token.info = state.src.slice(start, posAfterMarker - 1);
2064
- const oldTight = state.tight;
2065
- const oldTShift = state.tShift[nextLine];
2066
- const oldSCount = state.sCount[nextLine];
2067
- const oldListIndent = state.listIndent;
2068
- state.listIndent = state.blkIndent;
2069
- state.blkIndent = indent;
2070
- state.tight = true;
2071
- state.tShift[nextLine] = contentStart - state.bMarks[nextLine];
2072
- state.sCount[nextLine] = offset;
2073
- if (contentStart >= max && state.isEmpty(nextLine + 1)) state.line = Math.min(state.line + 2, endLine); else state.md.block.tokenize(state, nextLine, endLine, true);
2074
- if (!state.tight || prevEmptyEnd) tight = false;
2075
- prevEmptyEnd = state.line - nextLine > 1 && state.isEmpty(state.line - 1);
2076
- state.blkIndent = state.listIndent;
2077
- state.listIndent = oldListIndent;
2078
- state.tShift[nextLine] = oldTShift;
2079
- state.sCount[nextLine] = oldSCount;
2080
- state.tight = oldTight;
2081
- token = state.push("list_item_close", "li", -1);
2082
- token.markup = String.fromCharCode(markerCharCode);
2083
- nextLine = state.line;
2084
- itemLines[1] = nextLine;
2085
- if (nextLine >= endLine) break;
2086
- if (state.sCount[nextLine] < state.blkIndent) break;
2087
- if (state.sCount[nextLine] - state.blkIndent >= 4) break;
2088
- let terminate = false;
2089
- for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
2090
- terminate = true;
2091
- break;
2092
- }
2093
- if (terminate) break;
2094
- if (isOrdered) {
2095
- posAfterMarker = skipOrderedListMarker(state, nextLine);
2096
- if (posAfterMarker < 0) break;
2097
- start = state.bMarks[nextLine] + state.tShift[nextLine];
2098
- } else {
2099
- posAfterMarker = skipBulletListMarker(state, nextLine);
2100
- if (posAfterMarker < 0) break;
2101
- }
2102
- if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) break;
2103
- }
2104
- if (isOrdered) token = state.push("ordered_list_close", "ol", -1); else token = state.push("bullet_list_close", "ul", -1);
2105
- token.markup = String.fromCharCode(markerCharCode);
2106
- listLines[1] = nextLine;
2107
- state.line = nextLine;
2108
- state.parentType = oldParentType;
2109
- if (tight) markTightParagraphs(state, listTokIdx);
2110
- return true;
2111
- }
2112
- //#endregion
2113
- //#region lib/rules_block/reference.mjs
2114
- function reference(state, startLine, _endLine, silent) {
2115
- let pos = state.bMarks[startLine] + state.tShift[startLine];
2116
- let max = state.eMarks[startLine];
2117
- let nextLine = startLine + 1;
2118
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
2119
- if (state.src.charCodeAt(pos) !== 91) return false;
2120
- function getNextLine(nextLine) {
2121
- const endLine = state.lineMax;
2122
- if (nextLine >= endLine || state.isEmpty(nextLine)) return null;
2123
- let isContinuation = false;
2124
- if (state.sCount[nextLine] - state.blkIndent > 3) isContinuation = true;
2125
- if (state.sCount[nextLine] < 0) isContinuation = true;
2126
- if (!isContinuation) {
2127
- const terminatorRules = state.md.block.ruler.getRules("reference");
2128
- const oldParentType = state.parentType;
2129
- state.parentType = "reference";
2130
- let terminate = false;
2131
- for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
2132
- terminate = true;
2133
- break;
2134
- }
2135
- state.parentType = oldParentType;
2136
- if (terminate) return null;
2137
- }
2138
- const pos = state.bMarks[nextLine] + state.tShift[nextLine];
2139
- const max = state.eMarks[nextLine];
2140
- return state.src.slice(pos, max + 1);
2141
- }
2142
- let str = state.src.slice(pos, max + 1);
2143
- max = str.length;
2144
- let labelEnd = -1;
2145
- for (pos = 1; pos < max; pos++) {
2146
- const ch = str.charCodeAt(pos);
2147
- if (ch === 91) return false; else if (ch === 93) {
2148
- labelEnd = pos;
2149
- break;
2150
- } else if (ch === 10) {
2151
- const lineContent = getNextLine(nextLine);
2152
- if (lineContent !== null) {
2153
- str += lineContent;
2154
- max = str.length;
2155
- nextLine++;
2156
- }
2157
- } else if (ch === 92) {
2158
- pos++;
2159
- if (pos < max && str.charCodeAt(pos) === 10) {
2160
- const lineContent = getNextLine(nextLine);
2161
- if (lineContent !== null) {
2162
- str += lineContent;
2163
- max = str.length;
2164
- nextLine++;
2165
- }
2166
- }
2167
- }
2168
- }
2169
- if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 58) return false;
2170
- for (pos = labelEnd + 2; pos < max; pos++) {
2171
- const ch = str.charCodeAt(pos);
2172
- if (ch === 10) {
2173
- const lineContent = getNextLine(nextLine);
2174
- if (lineContent !== null) {
2175
- str += lineContent;
2176
- max = str.length;
2177
- nextLine++;
2178
- }
2179
- } else if (isSpace(ch)) {} else break;
2180
- }
2181
- const destRes = state.md.helpers.parseLinkDestination(str, pos, max);
2182
- if (!destRes.ok) return false;
2183
- const href = state.md.normalizeLink(destRes.str);
2184
- if (!state.md.validateLink(href)) return false;
2185
- pos = destRes.pos;
2186
- const destEndPos = pos;
2187
- const destEndLineNo = nextLine;
2188
- const start = pos;
2189
- for (;pos < max; pos++) {
2190
- const ch = str.charCodeAt(pos);
2191
- if (ch === 10) {
2192
- const lineContent = getNextLine(nextLine);
2193
- if (lineContent !== null) {
2194
- str += lineContent;
2195
- max = str.length;
2196
- nextLine++;
2197
- }
2198
- } else if (isSpace(ch)) {} else break;
2199
- }
2200
- let titleRes = state.md.helpers.parseLinkTitle(str, pos, max);
2201
- while (titleRes.can_continue) {
2202
- const lineContent = getNextLine(nextLine);
2203
- if (lineContent === null) break;
2204
- str += lineContent;
2205
- pos = max;
2206
- max = str.length;
2207
- nextLine++;
2208
- titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes);
2209
- }
2210
- let title;
2211
- if (pos < max && start !== pos && titleRes.ok) {
2212
- title = titleRes.str;
2213
- pos = titleRes.pos;
2214
- } else {
2215
- title = "";
2216
- pos = destEndPos;
2217
- nextLine = destEndLineNo;
2218
- }
2219
- while (pos < max) {
2220
- if (!isSpace(str.charCodeAt(pos))) break;
2221
- pos++;
2222
- }
2223
- if (pos < max && str.charCodeAt(pos) !== 10) {
2224
- if (title) {
2225
- title = "";
2226
- pos = destEndPos;
2227
- nextLine = destEndLineNo;
2228
- while (pos < max) {
2229
- if (!isSpace(str.charCodeAt(pos))) break;
2230
- pos++;
2231
- }
2232
- }
2233
- }
2234
- if (pos < max && str.charCodeAt(pos) !== 10) return false;
2235
- const label = normalizeReference(str.slice(1, labelEnd));
2236
- if (!label) return false;
2237
- /* istanbul ignore if */ if (silent) return true;
2238
- if (typeof state.env.references === "undefined") state.env.references = {};
2239
- if (typeof state.env.references[label] === "undefined") state.env.references[label] = {
2240
- title: title,
2241
- href: href
2242
- };
2243
- state.line = nextLine;
2244
- return true;
2245
- }
2246
- //#endregion
2247
- //#region lib/common/html_blocks.mjs
2248
- var html_blocks_default = [ "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", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr", "html", "iframe", "legend", "li", "link", "main", "menu", "menuitem", "nav", "noframes", "ol", "optgroup", "option", "p", "param", "search", "section", "summary", "table", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track", "ul" ];
2249
- //#endregion
2250
- //#region lib/common/html_re.mjs
2251
- var HTML_TAG_RE = new RegExp("^(?:<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>|<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>|\x3c!---?>|\x3c!--(?:[^-]|-[^-]|--[^>])*--\x3e|<[?][\\s\\S]*?[?]>|<![A-Za-z][^>]*>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>)");
2252
- var HTML_OPEN_CLOSE_TAG_RE = new RegExp("^(?:<[A-Za-z][A-Za-z0-9\\-]*(?:\\s+[a-zA-Z_:][a-zA-Z0-9:._-]*(?:\\s*=\\s*(?:[^\"'=<>`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>|<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>)");
2253
- //#endregion
2254
- //#region lib/rules_block/html_block.mjs
2255
- var HTML_SEQUENCES = [ [ /^<(script|pre|style|textarea)(?=(\s|>|$))/i, /<\/(script|pre|style|textarea)>/i, true ], [ /^<!--/, /-->/, true ], [ /^<\?/, /\?>/, true ], [ /^<![A-Z]/, />/, true ], [ /^<!\[CDATA\[/, /\]\]>/, true ], [ new RegExp("^</?(" + html_blocks_default.join("|") + ")(?=(\\s|/?>|$))", "i"), /^$/, true ], [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + "\\s*$"), /^$/, false ] ];
2256
- function html_block(state, startLine, endLine, silent) {
2257
- let pos = state.bMarks[startLine] + state.tShift[startLine];
2258
- let max = state.eMarks[startLine];
2259
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
2260
- if (!state.md.options.html) return false;
2261
- if (state.src.charCodeAt(pos) !== 60) return false;
2262
- let lineText = state.src.slice(pos, max);
2263
- let i = 0;
2264
- for (;i < HTML_SEQUENCES.length; i++) if (HTML_SEQUENCES[i][0].test(lineText)) break;
2265
- if (i === HTML_SEQUENCES.length) return false;
2266
- if (silent) return HTML_SEQUENCES[i][2];
2267
- let nextLine = startLine + 1;
2268
- const endsOnBlankLine = HTML_SEQUENCES[i][1].test("");
2269
- if (!HTML_SEQUENCES[i][1].test(lineText)) for (;nextLine < endLine; nextLine++) {
2270
- if (state.sCount[nextLine] < state.blkIndent) {
2271
- if (endsOnBlankLine || !state.isEmpty(nextLine)) break;
2272
- }
2273
- pos = state.bMarks[nextLine] + state.tShift[nextLine];
2274
- max = state.eMarks[nextLine];
2275
- lineText = state.src.slice(pos, max);
2276
- if (HTML_SEQUENCES[i][1].test(lineText)) {
2277
- if (lineText.length !== 0) nextLine++;
2278
- break;
2279
- }
2280
- }
2281
- state.line = nextLine;
2282
- const token = state.push("html_block", "", 0);
2283
- token.map = [ startLine, nextLine ];
2284
- token.content = state.getLines(startLine, nextLine, state.blkIndent, true);
2285
- return true;
2286
- }
2287
- //#endregion
2288
- //#region lib/rules_block/heading.mjs
2289
- function heading(state, startLine, endLine, silent) {
2290
- let pos = state.bMarks[startLine] + state.tShift[startLine];
2291
- let max = state.eMarks[startLine];
2292
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
2293
- let ch = state.src.charCodeAt(pos);
2294
- if (ch !== 35 || pos >= max) return false;
2295
- let level = 1;
2296
- ch = state.src.charCodeAt(++pos);
2297
- while (ch === 35 && pos < max && level <= 6) {
2298
- level++;
2299
- ch = state.src.charCodeAt(++pos);
2300
- }
2301
- if (level > 6 || pos < max && !isSpace(ch)) return false;
2302
- if (silent) return true;
2303
- max = state.skipSpacesBack(max, pos);
2304
- const tmp = state.skipCharsBack(max, 35, pos);
2305
- if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) max = tmp;
2306
- state.line = startLine + 1;
2307
- const token_o = state.push("heading_open", "h" + String(level), 1);
2308
- token_o.markup = "########".slice(0, level);
2309
- token_o.map = [ startLine, state.line ];
2310
- const token_i = state.push("inline", "", 0);
2311
- token_i.content = asciiTrim(state.src.slice(pos, max));
2312
- token_i.map = [ startLine, state.line ];
2313
- token_i.children = [];
2314
- const token_c = state.push("heading_close", "h" + String(level), -1);
2315
- token_c.markup = "########".slice(0, level);
2316
- return true;
2317
- }
2318
- //#endregion
2319
- //#region lib/rules_block/lheading.mjs
2320
- function lheading(state, startLine, endLine) {
2321
- const terminatorRules = state.md.block.ruler.getRules("paragraph");
2322
- if (state.sCount[startLine] - state.blkIndent >= 4) return false;
2323
- const oldParentType = state.parentType;
2324
- state.parentType = "paragraph";
2325
- let level = 0;
2326
- let marker;
2327
- let nextLine = startLine + 1;
2328
- for (;nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
2329
- if (state.sCount[nextLine] - state.blkIndent > 3) continue;
2330
- if (state.sCount[nextLine] >= state.blkIndent) {
2331
- let pos = state.bMarks[nextLine] + state.tShift[nextLine];
2332
- const max = state.eMarks[nextLine];
2333
- if (pos < max) {
2334
- marker = state.src.charCodeAt(pos);
2335
- if (marker === 45 || marker === 61) {
2336
- pos = state.skipChars(pos, marker);
2337
- pos = state.skipSpaces(pos);
2338
- if (pos >= max) {
2339
- level = marker === 61 ? 1 : 2;
2340
- break;
2341
- }
2342
- }
2343
- }
2344
- }
2345
- if (state.sCount[nextLine] < 0) continue;
2346
- let terminate = false;
2347
- for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
2348
- terminate = true;
2349
- break;
2350
- }
2351
- if (terminate) break;
2352
- }
2353
- if (!level) {
2354
- state.parentType = oldParentType;
2355
- return false;
2356
- }
2357
- const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));
2358
- state.line = nextLine + 1;
2359
- const token_o = state.push("heading_open", "h" + String(level), 1);
2360
- token_o.markup = String.fromCharCode(marker);
2361
- token_o.map = [ startLine, state.line ];
2362
- const token_i = state.push("inline", "", 0);
2363
- token_i.content = content;
2364
- token_i.map = [ startLine, state.line - 1 ];
2365
- token_i.children = [];
2366
- const token_c = state.push("heading_close", "h" + String(level), -1);
2367
- token_c.markup = String.fromCharCode(marker);
2368
- state.parentType = oldParentType;
2369
- return true;
2370
- }
2371
- //#endregion
2372
- //#region lib/rules_block/paragraph.mjs
2373
- function paragraph(state, startLine, endLine) {
2374
- const terminatorRules = state.md.block.ruler.getRules("paragraph");
2375
- const oldParentType = state.parentType;
2376
- let nextLine = startLine + 1;
2377
- state.parentType = "paragraph";
2378
- for (;nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {
2379
- if (state.sCount[nextLine] - state.blkIndent > 3) continue;
2380
- if (state.sCount[nextLine] < 0) continue;
2381
- let terminate = false;
2382
- for (let i = 0, l = terminatorRules.length; i < l; i++) if (terminatorRules[i](state, nextLine, endLine, true)) {
2383
- terminate = true;
2384
- break;
2385
- }
2386
- if (terminate) break;
2387
- }
2388
- const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false));
2389
- state.line = nextLine;
2390
- const token_o = state.push("paragraph_open", "p", 1);
2391
- token_o.map = [ startLine, state.line ];
2392
- const token_i = state.push("inline", "", 0);
2393
- token_i.content = content;
2394
- token_i.map = [ startLine, state.line ];
2395
- token_i.children = [];
2396
- state.push("paragraph_close", "p", -1);
2397
- state.parentType = oldParentType;
2398
- return true;
2399
- }
2400
- //#endregion
2401
- //#region lib/parser_block.mjs
2402
- var _rules$1 = [ [ "table", table, [ "paragraph", "reference" ] ], [ "code", code ], [ "fence", fence, [ "paragraph", "reference", "blockquote", "list" ] ], [ "blockquote", blockquote, [ "paragraph", "reference", "blockquote", "list" ] ], [ "hr", hr, [ "paragraph", "reference", "blockquote", "list" ] ], [ "list", list, [ "paragraph", "reference", "blockquote" ] ], [ "reference", reference ], [ "html_block", html_block, [ "paragraph", "reference", "blockquote" ] ], [ "heading", heading, [ "paragraph", "reference", "blockquote" ] ], [ "lheading", lheading ], [ "paragraph", paragraph ] ];
2403
- function ParserBlock() {
2404
- this.ruler = new Ruler;
2405
- for (let i = 0; i < _rules$1.length; i++) this.ruler.push(_rules$1[i][0], _rules$1[i][1], {
2406
- alt: (_rules$1[i][2] || []).slice()
2407
- });
2408
- }
2409
- ParserBlock.prototype.tokenize = function(state, startLine, endLine) {
2410
- const rules = this.ruler.getRules("");
2411
- const len = rules.length;
2412
- const maxNesting = state.md.options.maxNesting;
2413
- let line = startLine;
2414
- let hasEmptyLines = false;
2415
- while (line < endLine) {
2416
- state.line = line = state.skipEmptyLines(line);
2417
- if (line >= endLine) break;
2418
- if (state.sCount[line] < state.blkIndent) break;
2419
- if (state.level >= maxNesting) {
2420
- state.line = endLine;
2421
- break;
2422
- }
2423
- const prevLine = state.line;
2424
- let ok = false;
2425
- for (let i = 0; i < len; i++) {
2426
- ok = rules[i](state, line, endLine, false);
2427
- if (ok) {
2428
- if (prevLine >= state.line) throw new Error("block rule didn't increment state.line");
2429
- break;
2430
- }
2431
- }
2432
- if (!ok) throw new Error("none of the block rules matched");
2433
- state.tight = !hasEmptyLines;
2434
- if (state.isEmpty(state.line - 1)) hasEmptyLines = true;
2435
- line = state.line;
2436
- if (line < endLine && state.isEmpty(line)) {
2437
- hasEmptyLines = true;
2438
- line++;
2439
- state.line = line;
2440
- }
2441
- }
2442
- };
2443
- ParserBlock.prototype.parse = function(src, md, env, outTokens) {
2444
- if (!src) return;
2445
- const state = new this.State(src, md, env, outTokens);
2446
- this.tokenize(state, state.line, state.lineMax);
2447
- };
2448
- ParserBlock.prototype.State = StateBlock;
2449
- //#endregion
2450
- //#region lib/rules_inline/state_inline.mjs
2451
- function StateInline(src, md, env, outTokens) {
2452
- this.src = src;
2453
- this.env = env;
2454
- this.md = md;
2455
- this.tokens = outTokens;
2456
- this.tokens_meta = Array(outTokens.length);
2457
- this.pos = 0;
2458
- this.posMax = this.src.length;
2459
- this.level = 0;
2460
- this.pending = "";
2461
- this.pendingLevel = 0;
2462
- this.cache = {};
2463
- this.delimiters = [];
2464
- this._prev_delimiters = [];
2465
- this.backticks = {};
2466
- this.backticksScanned = false;
2467
- this.linkLevel = 0;
2468
- }
2469
- StateInline.prototype.pushPending = function() {
2470
- const token = new Token("text", "", 0);
2471
- token.content = this.pending;
2472
- token.level = this.pendingLevel;
2473
- this.tokens.push(token);
2474
- this.pending = "";
2475
- return token;
2476
- };
2477
- StateInline.prototype.push = function(type, tag, nesting) {
2478
- if (this.pending) this.pushPending();
2479
- const token = new Token(type, tag, nesting);
2480
- let token_meta = null;
2481
- if (nesting < 0) {
2482
- this.level--;
2483
- this.delimiters = this._prev_delimiters.pop();
2484
- }
2485
- token.level = this.level;
2486
- if (nesting > 0) {
2487
- this.level++;
2488
- this._prev_delimiters.push(this.delimiters);
2489
- this.delimiters = [];
2490
- token_meta = {
2491
- delimiters: this.delimiters
2492
- };
2493
- }
2494
- this.pendingLevel = this.level;
2495
- this.tokens.push(token);
2496
- this.tokens_meta.push(token_meta);
2497
- return token;
2498
- };
2499
- StateInline.prototype.scanDelims = function(start, canSplitWord) {
2500
- const max = this.posMax;
2501
- const marker = this.src.charCodeAt(start);
2502
- let lastChar;
2503
- if (start === 0) lastChar = 32; else if (start === 1) {
2504
- lastChar = this.src.charCodeAt(0);
2505
- if ((lastChar & 63488) === 55296) lastChar = 65533;
2506
- } else {
2507
- lastChar = this.src.charCodeAt(start - 1);
2508
- if ((lastChar & 64512) === 56320) {
2509
- const highSurr = this.src.charCodeAt(start - 2);
2510
- lastChar = (highSurr & 64512) === 55296 ? 65536 + (highSurr - 55296 << 10) + (lastChar - 56320) : 65533;
2511
- } else if ((lastChar & 64512) === 55296) lastChar = 65533;
2512
- }
2513
- let pos = start;
2514
- while (pos < max && this.src.charCodeAt(pos) === marker) pos++;
2515
- const count = pos - start;
2516
- let nextChar = pos < max ? this.src.charCodeAt(pos) : 32;
2517
- if ((nextChar & 64512) === 55296) {
2518
- const lowSurr = this.src.charCodeAt(pos + 1);
2519
- nextChar = (lowSurr & 64512) === 56320 ? 65536 + (nextChar - 55296 << 10) + (lowSurr - 56320) : 65533;
2520
- } else if ((nextChar & 64512) === 56320) nextChar = 65533;
2521
- const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar);
2522
- const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar);
2523
- const isLastWhiteSpace = isWhiteSpace(lastChar);
2524
- const isNextWhiteSpace = isWhiteSpace(nextChar);
2525
- const left_flanking = !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar);
2526
- const right_flanking = !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar);
2527
- return {
2528
- can_open: left_flanking && (canSplitWord || !right_flanking || isLastPunctChar),
2529
- can_close: right_flanking && (canSplitWord || !left_flanking || isNextPunctChar),
2530
- length: count
2531
- };
2532
- };
2533
- StateInline.prototype.Token = Token;
2534
- //#endregion
2535
- //#region lib/rules_inline/text.mjs
2536
- function isTerminatorChar(ch) {
2537
- switch (ch) {
2538
- case 10:
2539
- case 33:
2540
- case 35:
2541
- case 36:
2542
- case 37:
2543
- case 38:
2544
- case 42:
2545
- case 43:
2546
- case 45:
2547
- case 58:
2548
- case 60:
2549
- case 61:
2550
- case 62:
2551
- case 64:
2552
- case 91:
2553
- case 92:
2554
- case 93:
2555
- case 94:
2556
- case 95:
2557
- case 96:
2558
- case 123:
2559
- case 125:
2560
- case 126:
2561
- return true;
2562
-
2563
- default:
2564
- return false;
2565
- }
2566
- }
2567
- function text(state, silent) {
2568
- let pos = state.pos;
2569
- while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) pos++;
2570
- if (pos === state.pos) return false;
2571
- if (!silent) state.pending += state.src.slice(state.pos, pos);
2572
- state.pos = pos;
2573
- return true;
2574
- }
2575
- //#endregion
2576
- //#region lib/rules_inline/linkify.mjs
2577
- var SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i;
2578
- function linkify(state, silent) {
2579
- if (!state.md.options.linkify) return false;
2580
- if (state.linkLevel > 0) return false;
2581
- const pos = state.pos;
2582
- const max = state.posMax;
2583
- if (pos + 3 > max) return false;
2584
- if (state.src.charCodeAt(pos) !== 58) return false;
2585
- if (state.src.charCodeAt(pos + 1) !== 47) return false;
2586
- if (state.src.charCodeAt(pos + 2) !== 47) return false;
2587
- const match = state.pending.match(SCHEME_RE);
2588
- if (!match) return false;
2589
- const proto = match[1];
2590
- const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length));
2591
- if (!link) return false;
2592
- let url = link.url;
2593
- if (url.length <= proto.length) return false;
2594
- let urlEnd = url.length;
2595
- while (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 42) urlEnd--;
2596
- if (urlEnd !== url.length) url = url.slice(0, urlEnd);
2597
- const fullUrl = state.md.normalizeLink(url);
2598
- if (!state.md.validateLink(fullUrl)) return false;
2599
- if (!silent) {
2600
- state.pending = state.pending.slice(0, -proto.length);
2601
- const token_o = state.push("link_open", "a", 1);
2602
- token_o.attrs = [ [ "href", fullUrl ] ];
2603
- token_o.markup = "linkify";
2604
- token_o.info = "auto";
2605
- const token_t = state.push("text", "", 0);
2606
- token_t.content = state.md.normalizeLinkText(url);
2607
- const token_c = state.push("link_close", "a", -1);
2608
- token_c.markup = "linkify";
2609
- token_c.info = "auto";
2610
- }
2611
- state.pos += url.length - proto.length;
2612
- return true;
2613
- }
2614
- //#endregion
2615
- //#region lib/rules_inline/newline.mjs
2616
- function newline(state, silent) {
2617
- let pos = state.pos;
2618
- if (state.src.charCodeAt(pos) !== 10) return false;
2619
- const pmax = state.pending.length - 1;
2620
- const max = state.posMax;
2621
- if (!silent) if (pmax >= 0 && state.pending.charCodeAt(pmax) === 32) if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 32) {
2622
- let ws = pmax - 1;
2623
- while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 32) ws--;
2624
- state.pending = state.pending.slice(0, ws);
2625
- state.push("hardbreak", "br", 0);
2626
- } else {
2627
- state.pending = state.pending.slice(0, -1);
2628
- state.push("softbreak", "br", 0);
2629
- } else state.push("softbreak", "br", 0);
2630
- pos++;
2631
- while (pos < max && isSpace(state.src.charCodeAt(pos))) pos++;
2632
- state.pos = pos;
2633
- return true;
2634
- }
2635
- //#endregion
2636
- //#region lib/rules_inline/escape.mjs
2637
- var ESCAPED = [];
2638
- for (let i = 0; i < 256; i++) ESCAPED.push(0);
2639
- "\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(ch) {
2640
- ESCAPED[ch.charCodeAt(0)] = 1;
2641
- });
2642
- function escape(state, silent) {
2643
- let pos = state.pos;
2644
- const max = state.posMax;
2645
- if (state.src.charCodeAt(pos) !== 92) return false;
2646
- pos++;
2647
- if (pos >= max) return false;
2648
- let ch1 = state.src.charCodeAt(pos);
2649
- if (ch1 === 10) {
2650
- if (!silent) state.push("hardbreak", "br", 0);
2651
- pos++;
2652
- while (pos < max) {
2653
- ch1 = state.src.charCodeAt(pos);
2654
- if (!isSpace(ch1)) break;
2655
- pos++;
2656
- }
2657
- state.pos = pos;
2658
- return true;
2659
- }
2660
- if (ch1 === 32) {
2661
- if (!silent) {
2662
- const token = state.push("text_special", "", 0);
2663
- token.content = "\\";
2664
- token.markup = "\\";
2665
- token.info = "escape";
2666
- }
2667
- state.pos = pos;
2668
- return true;
2669
- }
2670
- let escapedStr = state.src[pos];
2671
- if (ch1 >= 55296 && ch1 <= 56319 && pos + 1 < max) {
2672
- const ch2 = state.src.charCodeAt(pos + 1);
2673
- if (ch2 >= 56320 && ch2 <= 57343) {
2674
- escapedStr += state.src[pos + 1];
2675
- pos++;
2676
- }
2677
- }
2678
- const origStr = "\\" + escapedStr;
2679
- if (!silent) {
2680
- const token = state.push("text_special", "", 0);
2681
- if (ch1 < 256 && ESCAPED[ch1] !== 0) token.content = escapedStr; else token.content = origStr;
2682
- token.markup = origStr;
2683
- token.info = "escape";
2684
- }
2685
- state.pos = pos + 1;
2686
- return true;
2687
- }
2688
- //#endregion
2689
- //#region lib/rules_inline/backticks.mjs
2690
- function backtick(state, silent) {
2691
- let pos = state.pos;
2692
- if (state.src.charCodeAt(pos) !== 96) return false;
2693
- const start = pos;
2694
- pos++;
2695
- const max = state.posMax;
2696
- while (pos < max && state.src.charCodeAt(pos) === 96) pos++;
2697
- const marker = state.src.slice(start, pos);
2698
- const openerLength = marker.length;
2699
- if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {
2700
- if (!silent) state.pending += marker;
2701
- state.pos += openerLength;
2702
- return true;
2703
- }
2704
- let matchEnd = pos;
2705
- let matchStart;
2706
- while ((matchStart = state.src.indexOf("`", matchEnd)) !== -1) {
2707
- matchEnd = matchStart + 1;
2708
- while (matchEnd < max && state.src.charCodeAt(matchEnd) === 96) matchEnd++;
2709
- const closerLength = matchEnd - matchStart;
2710
- if (closerLength === openerLength) {
2711
- if (!silent) {
2712
- const token = state.push("code_inline", "code", 0);
2713
- token.markup = marker;
2714
- token.content = state.src.slice(pos, matchStart).replace(/\n/g, " ").replace(/^ (.+) $/, "$1");
2715
- }
2716
- state.pos = matchEnd;
2717
- return true;
2718
- }
2719
- state.backticks[closerLength] = matchStart;
2720
- }
2721
- state.backticksScanned = true;
2722
- if (!silent) state.pending += marker;
2723
- state.pos += openerLength;
2724
- return true;
2725
- }
2726
- //#endregion
2727
- //#region lib/rules_inline/strikethrough.mjs
2728
- function strikethrough_tokenize(state, silent) {
2729
- const start = state.pos;
2730
- const marker = state.src.charCodeAt(start);
2731
- if (silent) return false;
2732
- if (marker !== 126) return false;
2733
- const scanned = state.scanDelims(state.pos, true);
2734
- let len = scanned.length;
2735
- const ch = String.fromCharCode(marker);
2736
- if (len < 2) return false;
2737
- let token;
2738
- if (len % 2) {
2739
- token = state.push("text", "", 0);
2740
- token.content = ch;
2741
- len--;
2742
- }
2743
- for (let i = 0; i < len; i += 2) {
2744
- token = state.push("text", "", 0);
2745
- token.content = ch + ch;
2746
- state.delimiters.push({
2747
- marker: marker,
2748
- length: 0,
2749
- token: state.tokens.length - 1,
2750
- end: -1,
2751
- open: scanned.can_open,
2752
- close: scanned.can_close
2753
- });
2754
- }
2755
- state.pos += scanned.length;
2756
- return true;
2757
- }
2758
- function postProcess$1(state, delimiters) {
2759
- let token;
2760
- const loneMarkers = [];
2761
- const max = delimiters.length;
2762
- for (let i = 0; i < max; i++) {
2763
- const startDelim = delimiters[i];
2764
- if (startDelim.marker !== 126) continue;
2765
- if (startDelim.end === -1) continue;
2766
- const endDelim = delimiters[startDelim.end];
2767
- token = state.tokens[startDelim.token];
2768
- token.type = "s_open";
2769
- token.tag = "s";
2770
- token.nesting = 1;
2771
- token.markup = "~~";
2772
- token.content = "";
2773
- token = state.tokens[endDelim.token];
2774
- token.type = "s_close";
2775
- token.tag = "s";
2776
- token.nesting = -1;
2777
- token.markup = "~~";
2778
- token.content = "";
2779
- if (state.tokens[endDelim.token - 1].type === "text" && state.tokens[endDelim.token - 1].content === "~") loneMarkers.push(endDelim.token - 1);
2780
- }
2781
- while (loneMarkers.length) {
2782
- const i = loneMarkers.pop();
2783
- let j = i + 1;
2784
- while (j < state.tokens.length && state.tokens[j].type === "s_close") j++;
2785
- j--;
2786
- if (i !== j) {
2787
- token = state.tokens[j];
2788
- state.tokens[j] = state.tokens[i];
2789
- state.tokens[i] = token;
2790
- }
2791
- }
2792
- }
2793
- function strikethrough_postProcess(state) {
2794
- const tokens_meta = state.tokens_meta;
2795
- const max = state.tokens_meta.length;
2796
- postProcess$1(state, state.delimiters);
2797
- for (let curr = 0; curr < max; curr++) if (tokens_meta[curr] && tokens_meta[curr].delimiters) postProcess$1(state, tokens_meta[curr].delimiters);
2798
- }
2799
- var strikethrough_default = {
2800
- tokenize: strikethrough_tokenize,
2801
- postProcess: strikethrough_postProcess
2802
- };
2803
- //#endregion
2804
- //#region lib/rules_inline/emphasis.mjs
2805
- function emphasis_tokenize(state, silent) {
2806
- const start = state.pos;
2807
- const marker = state.src.charCodeAt(start);
2808
- if (silent) return false;
2809
- if (marker !== 95 && marker !== 42) return false;
2810
- const scanned = state.scanDelims(state.pos, marker === 42);
2811
- for (let i = 0; i < scanned.length; i++) {
2812
- const token = state.push("text", "", 0);
2813
- token.content = String.fromCharCode(marker);
2814
- state.delimiters.push({
2815
- marker: marker,
2816
- length: scanned.length,
2817
- token: state.tokens.length - 1,
2818
- end: -1,
2819
- open: scanned.can_open,
2820
- close: scanned.can_close
2821
- });
2822
- }
2823
- state.pos += scanned.length;
2824
- return true;
2825
- }
2826
- function postProcess(state, delimiters) {
2827
- const max = delimiters.length;
2828
- for (let i = max - 1; i >= 0; i--) {
2829
- const startDelim = delimiters[i];
2830
- if (startDelim.marker !== 95 && startDelim.marker !== 42) continue;
2831
- if (startDelim.end === -1) continue;
2832
- const endDelim = delimiters[startDelim.end];
2833
- const isStrong = i > 0 && delimiters[i - 1].end === startDelim.end + 1 && delimiters[i - 1].marker === startDelim.marker && delimiters[i - 1].token === startDelim.token - 1 && delimiters[startDelim.end + 1].token === endDelim.token + 1;
2834
- const ch = String.fromCharCode(startDelim.marker);
2835
- const token_o = state.tokens[startDelim.token];
2836
- token_o.type = isStrong ? "strong_open" : "em_open";
2837
- token_o.tag = isStrong ? "strong" : "em";
2838
- token_o.nesting = 1;
2839
- token_o.markup = isStrong ? ch + ch : ch;
2840
- token_o.content = "";
2841
- const token_c = state.tokens[endDelim.token];
2842
- token_c.type = isStrong ? "strong_close" : "em_close";
2843
- token_c.tag = isStrong ? "strong" : "em";
2844
- token_c.nesting = -1;
2845
- token_c.markup = isStrong ? ch + ch : ch;
2846
- token_c.content = "";
2847
- if (isStrong) {
2848
- state.tokens[delimiters[i - 1].token].content = "";
2849
- state.tokens[delimiters[startDelim.end + 1].token].content = "";
2850
- i--;
2851
- }
2852
- }
2853
- }
2854
- function emphasis_post_process(state) {
2855
- const tokens_meta = state.tokens_meta;
2856
- const max = state.tokens_meta.length;
2857
- postProcess(state, state.delimiters);
2858
- for (let curr = 0; curr < max; curr++) if (tokens_meta[curr] && tokens_meta[curr].delimiters) postProcess(state, tokens_meta[curr].delimiters);
2859
- }
2860
- var emphasis_default = {
2861
- tokenize: emphasis_tokenize,
2862
- postProcess: emphasis_post_process
2863
- };
2864
- //#endregion
2865
- //#region lib/rules_inline/link.mjs
2866
- function link(state, silent) {
2867
- let code, label, res, ref;
2868
- let href = "";
2869
- let title = "";
2870
- let start = state.pos;
2871
- let parseReference = true;
2872
- if (state.src.charCodeAt(state.pos) !== 91) return false;
2873
- const oldPos = state.pos;
2874
- const max = state.posMax;
2875
- const labelStart = state.pos + 1;
2876
- const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);
2877
- if (labelEnd < 0) return false;
2878
- let pos = labelEnd + 1;
2879
- if (pos < max && state.src.charCodeAt(pos) === 40) {
2880
- parseReference = false;
2881
- pos++;
2882
- for (;pos < max; pos++) {
2883
- code = state.src.charCodeAt(pos);
2884
- if (!isSpace(code) && code !== 10) break;
2885
- }
2886
- if (pos >= max) return false;
2887
- start = pos;
2888
- res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);
2889
- if (res.ok) {
2890
- href = state.md.normalizeLink(res.str);
2891
- if (state.md.validateLink(href)) pos = res.pos; else href = "";
2892
- start = pos;
2893
- for (;pos < max; pos++) {
2894
- code = state.src.charCodeAt(pos);
2895
- if (!isSpace(code) && code !== 10) break;
2896
- }
2897
- res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);
2898
- if (pos < max && start !== pos && res.ok) {
2899
- title = res.str;
2900
- pos = res.pos;
2901
- for (;pos < max; pos++) {
2902
- code = state.src.charCodeAt(pos);
2903
- if (!isSpace(code) && code !== 10) break;
2904
- }
2905
- }
2906
- }
2907
- if (pos >= max || state.src.charCodeAt(pos) !== 41) parseReference = true;
2908
- pos++;
2909
- }
2910
- if (parseReference) {
2911
- if (typeof state.env.references === "undefined") return false;
2912
- if (pos < max && state.src.charCodeAt(pos) === 91) {
2913
- start = pos + 1;
2914
- pos = state.md.helpers.parseLinkLabel(state, pos);
2915
- if (pos >= 0) label = state.src.slice(start, pos++); else pos = labelEnd + 1;
2916
- } else pos = labelEnd + 1;
2917
- if (!label) label = state.src.slice(labelStart, labelEnd);
2918
- ref = state.env.references[normalizeReference(label)];
2919
- if (!ref) {
2920
- state.pos = oldPos;
2921
- return false;
2922
- }
2923
- href = ref.href;
2924
- title = ref.title;
2925
- }
2926
- if (!silent) {
2927
- state.pos = labelStart;
2928
- state.posMax = labelEnd;
2929
- const token_o = state.push("link_open", "a", 1);
2930
- const attrs = [ [ "href", href ] ];
2931
- token_o.attrs = attrs;
2932
- if (title) attrs.push([ "title", title ]);
2933
- state.linkLevel++;
2934
- state.md.inline.tokenize(state);
2935
- state.linkLevel--;
2936
- state.push("link_close", "a", -1);
2937
- }
2938
- state.pos = pos;
2939
- state.posMax = max;
2940
- return true;
2941
- }
2942
- //#endregion
2943
- //#region lib/rules_inline/image.mjs
2944
- function image(state, silent) {
2945
- let code, content, label, pos, ref, res, title, start;
2946
- let href = "";
2947
- const oldPos = state.pos;
2948
- const max = state.posMax;
2949
- if (state.src.charCodeAt(state.pos) !== 33) return false;
2950
- if (state.src.charCodeAt(state.pos + 1) !== 91) return false;
2951
- const labelStart = state.pos + 2;
2952
- const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);
2953
- if (labelEnd < 0) return false;
2954
- pos = labelEnd + 1;
2955
- if (pos < max && state.src.charCodeAt(pos) === 40) {
2956
- pos++;
2957
- for (;pos < max; pos++) {
2958
- code = state.src.charCodeAt(pos);
2959
- if (!isSpace(code) && code !== 10) break;
2960
- }
2961
- if (pos >= max) return false;
2962
- start = pos;
2963
- res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);
2964
- if (res.ok) {
2965
- href = state.md.normalizeLink(res.str);
2966
- if (state.md.validateLink(href)) pos = res.pos; else href = "";
2967
- }
2968
- start = pos;
2969
- for (;pos < max; pos++) {
2970
- code = state.src.charCodeAt(pos);
2971
- if (!isSpace(code) && code !== 10) break;
2972
- }
2973
- res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);
2974
- if (pos < max && start !== pos && res.ok) {
2975
- title = res.str;
2976
- pos = res.pos;
2977
- for (;pos < max; pos++) {
2978
- code = state.src.charCodeAt(pos);
2979
- if (!isSpace(code) && code !== 10) break;
2980
- }
2981
- } else title = "";
2982
- if (pos >= max || state.src.charCodeAt(pos) !== 41) {
2983
- state.pos = oldPos;
2984
- return false;
2985
- }
2986
- pos++;
2987
- } else {
2988
- if (typeof state.env.references === "undefined") return false;
2989
- if (pos < max && state.src.charCodeAt(pos) === 91) {
2990
- start = pos + 1;
2991
- pos = state.md.helpers.parseLinkLabel(state, pos);
2992
- if (pos >= 0) label = state.src.slice(start, pos++); else pos = labelEnd + 1;
2993
- } else pos = labelEnd + 1;
2994
- if (!label) label = state.src.slice(labelStart, labelEnd);
2995
- ref = state.env.references[normalizeReference(label)];
2996
- if (!ref) {
2997
- state.pos = oldPos;
2998
- return false;
2999
- }
3000
- href = ref.href;
3001
- title = ref.title;
3002
- }
3003
- if (!silent) {
3004
- content = state.src.slice(labelStart, labelEnd);
3005
- const tokens = [];
3006
- state.md.inline.parse(content, state.md, state.env, tokens);
3007
- const token = state.push("image", "img", 0);
3008
- const attrs = [ [ "src", href ], [ "alt", "" ] ];
3009
- token.attrs = attrs;
3010
- token.children = tokens;
3011
- token.content = content;
3012
- if (title) attrs.push([ "title", title ]);
3013
- }
3014
- state.pos = pos;
3015
- state.posMax = max;
3016
- return true;
3017
- }
3018
- //#endregion
3019
- //#region lib/rules_inline/autolink.mjs
3020
- var EMAIL_RE = /^([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])?)*)$/;
3021
- var AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\x00-\x20]*)$/;
3022
- function autolink(state, silent) {
3023
- let pos = state.pos;
3024
- if (state.src.charCodeAt(pos) !== 60) return false;
3025
- const start = state.pos;
3026
- const max = state.posMax;
3027
- for (;;) {
3028
- if (++pos >= max) return false;
3029
- const ch = state.src.charCodeAt(pos);
3030
- if (ch === 60) return false;
3031
- if (ch === 62) break;
3032
- }
3033
- const url = state.src.slice(start + 1, pos);
3034
- if (AUTOLINK_RE.test(url)) {
3035
- const fullUrl = state.md.normalizeLink(url);
3036
- if (!state.md.validateLink(fullUrl)) return false;
3037
- if (!silent) {
3038
- const token_o = state.push("link_open", "a", 1);
3039
- token_o.attrs = [ [ "href", fullUrl ] ];
3040
- token_o.markup = "autolink";
3041
- token_o.info = "auto";
3042
- const token_t = state.push("text", "", 0);
3043
- token_t.content = state.md.normalizeLinkText(url);
3044
- const token_c = state.push("link_close", "a", -1);
3045
- token_c.markup = "autolink";
3046
- token_c.info = "auto";
3047
- }
3048
- state.pos += url.length + 2;
3049
- return true;
3050
- }
3051
- if (EMAIL_RE.test(url)) {
3052
- const fullUrl = state.md.normalizeLink("mailto:" + url);
3053
- if (!state.md.validateLink(fullUrl)) return false;
3054
- if (!silent) {
3055
- const token_o = state.push("link_open", "a", 1);
3056
- token_o.attrs = [ [ "href", fullUrl ] ];
3057
- token_o.markup = "autolink";
3058
- token_o.info = "auto";
3059
- const token_t = state.push("text", "", 0);
3060
- token_t.content = state.md.normalizeLinkText(url);
3061
- const token_c = state.push("link_close", "a", -1);
3062
- token_c.markup = "autolink";
3063
- token_c.info = "auto";
3064
- }
3065
- state.pos += url.length + 2;
3066
- return true;
3067
- }
3068
- return false;
3069
- }
3070
- //#endregion
3071
- //#region lib/rules_inline/html_inline.mjs
3072
- function isLinkOpen(str) {
3073
- return /^<a[>\s]/i.test(str);
3074
- }
3075
- function isLinkClose(str) {
3076
- return /^<\/a\s*>/i.test(str);
3077
- }
3078
- function isLetter(ch) {
3079
- const lc = ch | 32;
3080
- return lc >= 97 && lc <= 122;
3081
- }
3082
- function html_inline(state, silent) {
3083
- if (!state.md.options.html) return false;
3084
- const max = state.posMax;
3085
- const pos = state.pos;
3086
- if (state.src.charCodeAt(pos) !== 60 || pos + 2 >= max) return false;
3087
- const ch = state.src.charCodeAt(pos + 1);
3088
- if (ch !== 33 && ch !== 63 && ch !== 47 && !isLetter(ch)) return false;
3089
- const match = state.src.slice(pos).match(HTML_TAG_RE);
3090
- if (!match) return false;
3091
- if (!silent) {
3092
- const token = state.push("html_inline", "", 0);
3093
- token.content = match[0];
3094
- if (isLinkOpen(token.content)) state.linkLevel++;
3095
- if (isLinkClose(token.content)) state.linkLevel--;
3096
- }
3097
- state.pos += match[0].length;
3098
- return true;
3099
- }
3100
- //#endregion
3101
- //#region lib/rules_inline/entity.mjs
3102
- var DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i;
3103
- var NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i;
3104
- function entity(state, silent) {
3105
- const pos = state.pos;
3106
- const max = state.posMax;
3107
- if (state.src.charCodeAt(pos) !== 38) return false;
3108
- if (pos + 1 >= max) return false;
3109
- if (state.src.charCodeAt(pos + 1) === 35) {
3110
- const match = state.src.slice(pos).match(DIGITAL_RE);
3111
- if (match) {
3112
- if (!silent) {
3113
- const code = match[1][0].toLowerCase() === "x" ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);
3114
- const token = state.push("text_special", "", 0);
3115
- token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(65533);
3116
- token.markup = match[0];
3117
- token.info = "entity";
3118
- }
3119
- state.pos += match[0].length;
3120
- return true;
3121
- }
3122
- } else {
3123
- const match = state.src.slice(pos).match(NAMED_RE);
3124
- if (match) {
3125
- const decoded = decodeHTMLStrict(match[0]);
3126
- if (decoded !== match[0]) {
3127
- if (!silent) {
3128
- const token = state.push("text_special", "", 0);
3129
- token.content = decoded;
3130
- token.markup = match[0];
3131
- token.info = "entity";
3132
- }
3133
- state.pos += match[0].length;
3134
- return true;
3135
- }
3136
- }
3137
- }
3138
- return false;
3139
- }
3140
- //#endregion
3141
- //#region lib/rules_inline/balance_pairs.mjs
3142
- function processDelimiters(delimiters) {
3143
- const openersBottom = {};
3144
- const max = delimiters.length;
3145
- if (!max) return;
3146
- let headerIdx = 0;
3147
- let lastTokenIdx = -2;
3148
- const jumps = [];
3149
- for (let closerIdx = 0; closerIdx < max; closerIdx++) {
3150
- const closer = delimiters[closerIdx];
3151
- jumps.push(0);
3152
- if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) headerIdx = closerIdx;
3153
- lastTokenIdx = closer.token;
3154
- closer.length = closer.length || 0;
3155
- if (!closer.close) continue;
3156
- if (!openersBottom.hasOwnProperty(closer.marker)) openersBottom[closer.marker] = [ -1, -1, -1, -1, -1, -1 ];
3157
- const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + closer.length % 3];
3158
- let openerIdx = headerIdx - jumps[headerIdx] - 1;
3159
- let newMinOpenerIdx = openerIdx;
3160
- for (;openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {
3161
- const opener = delimiters[openerIdx];
3162
- if (opener.marker !== closer.marker) continue;
3163
- if (opener.open && opener.end < 0) {
3164
- let isOddMatch = false;
3165
- if (opener.close || closer.open) {
3166
- if ((opener.length + closer.length) % 3 === 0) {
3167
- if (opener.length % 3 !== 0 || closer.length % 3 !== 0) isOddMatch = true;
3168
- }
3169
- }
3170
- if (!isOddMatch) {
3171
- const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open ? jumps[openerIdx - 1] + 1 : 0;
3172
- jumps[closerIdx] = closerIdx - openerIdx + lastJump;
3173
- jumps[openerIdx] = lastJump;
3174
- closer.open = false;
3175
- opener.end = closerIdx;
3176
- opener.close = false;
3177
- newMinOpenerIdx = -1;
3178
- lastTokenIdx = -2;
3179
- break;
3180
- }
3181
- }
3182
- }
3183
- if (newMinOpenerIdx !== -1) openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length || 0) % 3] = newMinOpenerIdx;
3184
- }
3185
- }
3186
- function link_pairs(state) {
3187
- const tokens_meta = state.tokens_meta;
3188
- const max = state.tokens_meta.length;
3189
- processDelimiters(state.delimiters);
3190
- for (let curr = 0; curr < max; curr++) if (tokens_meta[curr] && tokens_meta[curr].delimiters) processDelimiters(tokens_meta[curr].delimiters);
3191
- }
3192
- //#endregion
3193
- //#region lib/rules_inline/fragments_join.mjs
3194
- function fragments_join(state) {
3195
- let curr, last;
3196
- let level = 0;
3197
- const tokens = state.tokens;
3198
- const max = state.tokens.length;
3199
- for (curr = last = 0; curr < max; curr++) {
3200
- if (tokens[curr].nesting < 0) level--;
3201
- tokens[curr].level = level;
3202
- if (tokens[curr].nesting > 0) level++;
3203
- if (tokens[curr].type === "text" && curr + 1 < max && tokens[curr + 1].type === "text") tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content; else {
3204
- if (curr !== last) tokens[last] = tokens[curr];
3205
- last++;
3206
- }
3207
- }
3208
- if (curr !== last) tokens.length = last;
3209
- }
3210
- //#endregion
3211
- //#region lib/parser_inline.mjs
3212
- var _rules = [ [ "text", text ], [ "linkify", linkify ], [ "newline", newline ], [ "escape", escape ], [ "backticks", backtick ], [ "strikethrough", strikethrough_default.tokenize ], [ "emphasis", emphasis_default.tokenize ], [ "link", link ], [ "image", image ], [ "autolink", autolink ], [ "html_inline", html_inline ], [ "entity", entity ] ];
3213
- var _rules2 = [ [ "balance_pairs", link_pairs ], [ "strikethrough", strikethrough_default.postProcess ], [ "emphasis", emphasis_default.postProcess ], [ "fragments_join", fragments_join ] ];
3214
- function ParserInline() {
3215
- this.ruler = new Ruler;
3216
- for (let i = 0; i < _rules.length; i++) this.ruler.push(_rules[i][0], _rules[i][1]);
3217
- this.ruler2 = new Ruler;
3218
- for (let i = 0; i < _rules2.length; i++) this.ruler2.push(_rules2[i][0], _rules2[i][1]);
3219
- }
3220
- ParserInline.prototype.skipToken = function(state) {
3221
- const pos = state.pos;
3222
- const rules = this.ruler.getRules("");
3223
- const len = rules.length;
3224
- const maxNesting = state.md.options.maxNesting;
3225
- const cache = state.cache;
3226
- if (typeof cache[pos] !== "undefined") {
3227
- state.pos = cache[pos];
3228
- return;
3229
- }
3230
- let ok = false;
3231
- if (state.level < maxNesting) for (let i = 0; i < len; i++) {
3232
- state.level++;
3233
- ok = rules[i](state, true);
3234
- state.level--;
3235
- if (ok) {
3236
- if (pos >= state.pos) throw new Error("inline rule didn't increment state.pos");
3237
- break;
3238
- }
3239
- } else state.pos = state.posMax;
3240
- if (!ok) state.pos++;
3241
- cache[pos] = state.pos;
3242
- };
3243
- ParserInline.prototype.tokenize = function(state) {
3244
- const rules = this.ruler.getRules("");
3245
- const len = rules.length;
3246
- const end = state.posMax;
3247
- const maxNesting = state.md.options.maxNesting;
3248
- while (state.pos < end) {
3249
- const prevPos = state.pos;
3250
- let ok = false;
3251
- if (state.level < maxNesting) for (let i = 0; i < len; i++) {
3252
- ok = rules[i](state, false);
3253
- if (ok) {
3254
- if (prevPos >= state.pos) throw new Error("inline rule didn't increment state.pos");
3255
- break;
3256
- }
3257
- }
3258
- if (ok) {
3259
- if (state.pos >= end) break;
3260
- continue;
3261
- }
3262
- state.pending += state.src[state.pos++];
3263
- }
3264
- if (state.pending) state.pushPending();
3265
- };
3266
- ParserInline.prototype.parse = function(str, md, env, outTokens) {
3267
- const state = new this.State(str, md, env, outTokens);
3268
- this.tokenize(state);
3269
- const rules = this.ruler2.getRules("");
3270
- const len = rules.length;
3271
- for (let i = 0; i < len; i++) rules[i](state);
3272
- };
3273
- ParserInline.prototype.State = StateInline;
3274
- //#endregion
3275
- //#region node_modules/linkify-it/lib/re.mjs
3276
- function re_default(opts) {
3277
- const re = {};
3278
- opts = opts || {};
3279
- re.src_Any = regex_default$5.source;
3280
- re.src_Cc = regex_default$4.source;
3281
- re.src_Z = regex_default.source;
3282
- re.src_P = regex_default$2.source;
3283
- re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join("|");
3284
- re.src_ZCc = [ re.src_Z, re.src_Cc ].join("|");
3285
- const text_separators = "[><\uff5c]";
3286
- re.src_pseudo_letter = `(?:(?!${text_separators}|${re.src_ZPCc})${re.src_Any})`;
3287
- re.src_ip4 = "(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)";
3288
- re.src_auth = `(?:(?:(?!${re.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`;
3289
- re.src_port = "(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?";
3290
- re.src_host_terminator = `(?=$|${text_separators}|${re.src_ZPCc})(?!${opts["---"] ? "-(?!--)|" : "-|"}_|:\\d|\\.-|\\.(?!$|${re.src_ZPCc}))`;
3291
- re.src_path = `(?:[/?#](?:(?!${re.src_ZCc}|${text_separators}|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!${re.src_ZCc}|\\]).)*\\]|\\((?:(?!${re.src_ZCc}|[)]).)*\\)|\\{(?:(?!${re.src_ZCc}|[}]).)*\\}|\\"(?:(?!${re.src_ZCc}|["]).)+\\"|\\'(?:(?!${re.src_ZCc}|[']).)+\\'|\\'(?=${re.src_pseudo_letter}|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!${re.src_ZCc}|[.]|$)|` + (opts["---"] ? "\\-(?!--(?:[^-]|$))(?:-*)|" : "\\-+|") + `,(?!${re.src_ZCc}|$)|;(?!${re.src_ZCc}|$)|\\!+(?!${re.src_ZCc}|[!]|$)|\\?(?!${re.src_ZCc}|[?]|$))+|\\/)?`;
3292
- re.src_email_name = '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]{0,63}';
3293
- re.src_xn = "xn--[a-z0-9\\-]{1,59}";
3294
- re.src_domain_root = "(?:" + re.src_xn + `|${re.src_pseudo_letter}{1,63})`;
3295
- re.src_domain = "(?:" + re.src_xn + `|(?:${re.src_pseudo_letter})|(?:${re.src_pseudo_letter}(?:-|${re.src_pseudo_letter}){0,61}${re.src_pseudo_letter}))`;
3296
- re.src_host = `(?:(?:(?:(?:${re.src_domain})\\.)*${re.src_domain}))`;
3297
- re.tpl_host_fuzzy = "(?:" + re.src_ip4 + `|(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%)))`;
3298
- re.tpl_host_no_ip_fuzzy = `(?:(?:(?:${re.src_domain})\\.)+(?:%TLDS%))`;
3299
- re.src_host_strict = re.src_host + re.src_host_terminator;
3300
- re.tpl_host_fuzzy_strict = re.tpl_host_fuzzy + re.src_host_terminator;
3301
- re.src_host_port_strict = re.src_host + re.src_port + re.src_host_terminator;
3302
- re.tpl_host_port_fuzzy_strict = re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;
3303
- re.tpl_host_port_no_ip_fuzzy_strict = re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;
3304
- re.tpl_host_fuzzy_test = `localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:${re.src_ZPCc}|>|$))`;
3305
- re.tpl_email_fuzzy = `(^|${text_separators}|"|\\(|${re.src_ZCc})(${re.src_email_name}@${re.tpl_host_fuzzy_strict})`;
3306
- re.tpl_link_fuzzy = `(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uff5c]|${re.src_ZPCc}))((?![$+<=>^\`|\uff5c])${re.tpl_host_port_fuzzy_strict}${re.src_path})`;
3307
- re.tpl_link_no_ip_fuzzy = `(^|(?![.:/\\-_@])(?:[$+<=>^\`|\uff5c]|${re.src_ZPCc}))((?![$+<=>^\`|\uff5c])${re.tpl_host_port_no_ip_fuzzy_strict}${re.src_path})`;
3308
- return re;
3309
- }
3310
- //#endregion
3311
- //#region node_modules/linkify-it/index.mjs
3312
- function assign(obj) {
3313
- Array.prototype.slice.call(arguments, 1).forEach(function(source) {
3314
- if (!source) return;
3315
- Object.keys(source).forEach(function(key) {
3316
- obj[key] = source[key];
3317
- });
3318
- });
3319
- return obj;
3320
- }
3321
- function _class(obj) {
3322
- return Object.prototype.toString.call(obj);
3323
- }
3324
- function isString(obj) {
3325
- return _class(obj) === "[object String]";
3326
- }
3327
- function isObject(obj) {
3328
- return _class(obj) === "[object Object]";
3329
- }
3330
- function isRegExp(obj) {
3331
- return _class(obj) === "[object RegExp]";
3332
- }
3333
- function isFunction(obj) {
3334
- return _class(obj) === "[object Function]";
3335
- }
3336
- function escapeRE(str) {
3337
- return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&");
3338
- }
3339
- var defaultOptions = {
3340
- fuzzyLink: true,
3341
- fuzzyEmail: true,
3342
- fuzzyIP: false
3343
- };
3344
- function isOptionsObj(obj) {
3345
- return Object.keys(obj || {}).reduce(function(acc, k) {
3346
- return acc || defaultOptions.hasOwnProperty(k);
3347
- }, false);
3348
- }
3349
- var defaultSchemas = {
3350
- "http:": {
3351
- validate: function(text, pos, self) {
3352
- const tail = text.slice(pos);
3353
- if (!self.re.http) self.re.http = new RegExp(`^\\/\\/${self.re.src_auth}${self.re.src_host_port_strict}${self.re.src_path}`, "i");
3354
- if (self.re.http.test(tail)) return tail.match(self.re.http)[0].length;
3355
- return 0;
3356
- }
3357
- },
3358
- "https:": "http:",
3359
- "ftp:": "http:",
3360
- "//": {
3361
- validate: function(text, pos, self) {
3362
- const tail = text.slice(pos);
3363
- if (!self.re.no_http) self.re.no_http = new RegExp("^" + self.re.src_auth + `(?:localhost|(?:(?:${self.re.src_domain})\\.)+${self.re.src_domain_root})` + self.re.src_port + self.re.src_host_terminator + self.re.src_path, "i");
3364
- if (self.re.no_http.test(tail)) {
3365
- if (pos >= 3 && text[pos - 3] === ":") return 0;
3366
- if (pos >= 3 && text[pos - 3] === "/") return 0;
3367
- return tail.match(self.re.no_http)[0].length;
3368
- }
3369
- return 0;
3370
- }
3371
- },
3372
- "mailto:": {
3373
- validate: function(text, pos, self) {
3374
- const tail = text.slice(pos);
3375
- if (!self.re.mailto) self.re.mailto = new RegExp(`^${self.re.src_email_name}@${self.re.src_host_strict}`, "i");
3376
- if (self.re.mailto.test(tail)) return tail.match(self.re.mailto)[0].length;
3377
- return 0;
3378
- }
3379
- }
3380
- };
3381
- var tlds_2ch_src_re = "a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]";
3382
- var tlds_default = "biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");
3383
- function createValidator(re) {
3384
- return function(text, pos) {
3385
- const tail = text.slice(pos);
3386
- if (re.test(tail)) return tail.match(re)[0].length;
3387
- return 0;
3388
- };
3389
- }
3390
- function createNormalizer() {
3391
- return function(match, self) {
3392
- self.normalize(match);
3393
- };
3394
- }
3395
- function compile(self) {
3396
- const re = self.re = re_default(self.__opts__);
3397
- const tlds = self.__tlds__.slice();
3398
- self.onCompile();
3399
- if (!self.__tlds_replaced__) tlds.push(tlds_2ch_src_re);
3400
- tlds.push(re.src_xn);
3401
- re.src_tlds = tlds.join("|");
3402
- function untpl(tpl) {
3403
- return tpl.replace("%TLDS%", re.src_tlds);
3404
- }
3405
- re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), "i");
3406
- re.email_fuzzy_global = RegExp(untpl(re.tpl_email_fuzzy), "ig");
3407
- re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), "i");
3408
- re.link_fuzzy_global = RegExp(untpl(re.tpl_link_fuzzy), "ig");
3409
- re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), "i");
3410
- re.link_no_ip_fuzzy_global = RegExp(untpl(re.tpl_link_no_ip_fuzzy), "ig");
3411
- re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), "i");
3412
- const aliases = [];
3413
- self.__compiled__ = {};
3414
- function schemaError(name, val) {
3415
- throw new Error(`(LinkifyIt) Invalid schema "${name}": ${val}`);
3416
- }
3417
- Object.keys(self.__schemas__).forEach(function(name) {
3418
- const val = self.__schemas__[name];
3419
- if (val === null) return;
3420
- const compiled = {
3421
- validate: null,
3422
- link: null
3423
- };
3424
- self.__compiled__[name] = compiled;
3425
- if (isObject(val)) {
3426
- if (isRegExp(val.validate)) compiled.validate = createValidator(val.validate); else if (isFunction(val.validate)) compiled.validate = val.validate; else schemaError(name, val);
3427
- if (isFunction(val.normalize)) compiled.normalize = val.normalize; else if (!val.normalize) compiled.normalize = createNormalizer(); else schemaError(name, val);
3428
- return;
3429
- }
3430
- if (isString(val)) {
3431
- aliases.push(name);
3432
- return;
3433
- }
3434
- schemaError(name, val);
3435
- });
3436
- aliases.forEach(function(alias) {
3437
- if (!self.__compiled__[self.__schemas__[alias]]) return;
3438
- self.__compiled__[alias].validate = self.__compiled__[self.__schemas__[alias]].validate;
3439
- self.__compiled__[alias].normalize = self.__compiled__[self.__schemas__[alias]].normalize;
3440
- });
3441
- self.__compiled__[""] = {
3442
- validate: null,
3443
- normalize: createNormalizer()
3444
- };
3445
- const slist = Object.keys(self.__compiled__).filter(function(name) {
3446
- return name.length > 0 && self.__compiled__[name];
3447
- }).map(escapeRE).join("|");
3448
- self.re.schema_test = RegExp(`(^|(?!_)(?:[><\uff5c]|${re.src_ZPCc}))(${slist})`, "i");
3449
- self.re.schema_search = RegExp(`(^|(?!_)(?:[><\uff5c]|${re.src_ZPCc}))(${slist})`, "ig");
3450
- self.re.schema_at_start = RegExp(`^${self.re.schema_search.source}`, "i");
3451
- self.re.pretest = RegExp(`(${self.re.schema_test.source})|(${self.re.host_fuzzy_test.source})|@`, "i");
3452
- }
3453
- function Match(text, schema, index, lastIndex) {
3454
- const raw = text.slice(index, lastIndex);
3455
- this.schema = schema.toLowerCase();
3456
- this.index = index;
3457
- this.lastIndex = lastIndex;
3458
- this.raw = raw;
3459
- this.text = raw;
3460
- this.url = raw;
3461
- }
3462
- function LinkifyIt(schemas, options) {
3463
- if (!(this instanceof LinkifyIt)) return new LinkifyIt(schemas, options);
3464
- if (!options) {
3465
- if (isOptionsObj(schemas)) {
3466
- options = schemas;
3467
- schemas = {};
3468
- }
3469
- }
3470
- this.__opts__ = assign({}, defaultOptions, options);
3471
- this.__schemas__ = assign({}, defaultSchemas, schemas);
3472
- this.__compiled__ = {};
3473
- this.__tlds__ = tlds_default;
3474
- this.__tlds_replaced__ = false;
3475
- this.re = {};
3476
- compile(this);
3477
- }
3478
- LinkifyIt.prototype.add = function add(schema, definition) {
3479
- this.__schemas__[schema] = definition;
3480
- compile(this);
3481
- return this;
3482
- };
3483
- LinkifyIt.prototype.set = function set(options) {
3484
- this.__opts__ = assign(this.__opts__, options);
3485
- return this;
3486
- };
3487
- LinkifyIt.prototype.test = function test(text) {
3488
- if (!text.length) return false;
3489
- let m, re;
3490
- if (this.re.schema_test.test(text)) {
3491
- re = this.re.schema_search;
3492
- re.lastIndex = 0;
3493
- while ((m = re.exec(text)) !== null) if (this.testSchemaAt(text, m[2], re.lastIndex)) return true;
3494
- }
3495
- if (this.__opts__.fuzzyLink && this.__compiled__["http:"]) {
3496
- if (text.search(this.re.host_fuzzy_test) >= 0) {
3497
- if (text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy) !== null) return true;
3498
- }
3499
- }
3500
- if (this.__opts__.fuzzyEmail && this.__compiled__["mailto:"]) {
3501
- if (text.indexOf("@") >= 0) {
3502
- if (text.match(this.re.email_fuzzy) !== null) return true;
3503
- }
3504
- }
3505
- return false;
3506
- };
3507
- LinkifyIt.prototype.pretest = function pretest(text) {
3508
- return this.re.pretest.test(text);
3509
- };
3510
- LinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {
3511
- if (!this.__compiled__[schema.toLowerCase()]) return 0;
3512
- return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);
3513
- };
3514
- LinkifyIt.prototype.match = function match(text) {
3515
- const result = [];
3516
- const type_schemed = [];
3517
- const type_fuzzy_link = [];
3518
- const type_fuzzy_email = [];
3519
- let m, len, re;
3520
- function choose(a, b) {
3521
- if (!a) return b;
3522
- if (!b) return a;
3523
- if (a.index !== b.index) return a.index < b.index ? a : b;
3524
- return a.lastIndex >= b.lastIndex ? a : b;
3525
- }
3526
- if (!text.length) return null;
3527
- if (this.re.schema_test.test(text)) {
3528
- re = this.re.schema_search;
3529
- re.lastIndex = 0;
3530
- while ((m = re.exec(text)) !== null) {
3531
- len = this.testSchemaAt(text, m[2], re.lastIndex);
3532
- if (len) type_schemed.push({
3533
- schema: m[2],
3534
- index: m.index + m[1].length,
3535
- lastIndex: m.index + m[0].length + len
3536
- });
3537
- }
3538
- }
3539
- if (this.__opts__.fuzzyLink && this.__compiled__["http:"]) {
3540
- re = this.__opts__.fuzzyIP ? this.re.link_fuzzy_global : this.re.link_no_ip_fuzzy_global;
3541
- re.lastIndex = 0;
3542
- while ((m = re.exec(text)) !== null) type_fuzzy_link.push({
3543
- schema: "",
3544
- index: m.index + m[1].length,
3545
- lastIndex: m.index + m[0].length
3546
- });
3547
- }
3548
- if (this.__opts__.fuzzyEmail && this.__compiled__["mailto:"]) {
3549
- re = this.re.email_fuzzy_global;
3550
- re.lastIndex = 0;
3551
- while ((m = re.exec(text)) !== null) type_fuzzy_email.push({
3552
- schema: "mailto:",
3553
- index: m.index + m[1].length,
3554
- lastIndex: m.index + m[0].length
3555
- });
3556
- }
3557
- const indexes = [ 0, 0, 0 ];
3558
- let lastIndex = 0;
3559
- for (;;) {
3560
- const candidates = [ type_schemed[indexes[0]], type_fuzzy_email[indexes[1]], type_fuzzy_link[indexes[2]] ];
3561
- const candidate = choose(choose(candidates[0], candidates[1]), candidates[2]);
3562
- if (!candidate) break;
3563
- if (candidate === candidates[0]) indexes[0]++; else if (candidate === candidates[1]) indexes[1]++; else indexes[2]++;
3564
- if (candidate.index < lastIndex) continue;
3565
- const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex);
3566
- this.__compiled__[match.schema].normalize(match, this);
3567
- result.push(match);
3568
- lastIndex = candidate.lastIndex;
3569
- }
3570
- if (result.length) return result;
3571
- return null;
3572
- };
3573
- LinkifyIt.prototype.matchAtStart = function matchAtStart(text) {
3574
- if (!text.length) return null;
3575
- const m = this.re.schema_at_start.exec(text);
3576
- if (!m) return null;
3577
- const len = this.testSchemaAt(text, m[2], m[0].length);
3578
- if (!len) return null;
3579
- const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len);
3580
- this.__compiled__[match.schema].normalize(match, this);
3581
- return match;
3582
- };
3583
- LinkifyIt.prototype.tlds = function tlds(list, keepOld) {
3584
- list = Array.isArray(list) ? list : [ list ];
3585
- if (!keepOld) {
3586
- this.__tlds__ = list.slice();
3587
- this.__tlds_replaced__ = true;
3588
- compile(this);
3589
- return this;
3590
- }
3591
- this.__tlds__ = this.__tlds__.concat(list).sort().filter(function(el, idx, arr) {
3592
- return el !== arr[idx - 1];
3593
- }).reverse();
3594
- compile(this);
3595
- return this;
3596
- };
3597
- LinkifyIt.prototype.normalize = function normalize(match) {
3598
- if (!match.schema) match.url = `http://${match.url}`;
3599
- if (match.schema === "mailto:" && !/^mailto:/i.test(match.url)) match.url = `mailto:${match.url}`;
3600
- };
3601
- LinkifyIt.prototype.onCompile = function onCompile() {};
3602
- //#endregion
3603
- //#region node_modules/punycode.js/punycode.es6.js
3604
- var maxInt = 2147483647;
3605
- var base = 36;
3606
- var tMin = 1;
3607
- var tMax = 26;
3608
- var skew = 38;
3609
- var damp = 700;
3610
- var initialBias = 72;
3611
- var initialN = 128;
3612
- var delimiter = "-";
3613
- var regexPunycode = /^xn--/;
3614
- var regexNonASCII = /[^\0-\x7F]/;
3615
- var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g;
3616
- var errors = {
3617
- overflow: "Overflow: input needs wider integers to process",
3618
- "not-basic": "Illegal input >= 0x80 (not a basic code point)",
3619
- "invalid-input": "Invalid input"
3620
- };
3621
- var baseMinusTMin = base - tMin;
3622
- var floor = Math.floor;
3623
- var stringFromCharCode = String.fromCharCode;
3624
- function error(type) {
3625
- throw new RangeError(errors[type]);
3626
- }
3627
- function map(array, callback) {
3628
- const result = [];
3629
- let length = array.length;
3630
- while (length--) result[length] = callback(array[length]);
3631
- return result;
3632
- }
3633
- function mapDomain(domain, callback) {
3634
- const parts = domain.split("@");
3635
- let result = "";
3636
- if (parts.length > 1) {
3637
- result = parts[0] + "@";
3638
- domain = parts[1];
3639
- }
3640
- domain = domain.replace(regexSeparators, ".");
3641
- const encoded = map(domain.split("."), callback).join(".");
3642
- return result + encoded;
3643
- }
3644
- function ucs2decode(string) {
3645
- const output = [];
3646
- let counter = 0;
3647
- const length = string.length;
3648
- while (counter < length) {
3649
- const value = string.charCodeAt(counter++);
3650
- if (value >= 55296 && value <= 56319 && counter < length) {
3651
- const extra = string.charCodeAt(counter++);
3652
- if ((extra & 64512) == 56320) output.push(((value & 1023) << 10) + (extra & 1023) + 65536); else {
3653
- output.push(value);
3654
- counter--;
3655
- }
3656
- } else output.push(value);
3657
- }
3658
- return output;
3659
- }
3660
- var ucs2encode = codePoints => String.fromCodePoint(...codePoints);
3661
- var basicToDigit = function(codePoint) {
3662
- if (codePoint >= 48 && codePoint < 58) return 26 + (codePoint - 48);
3663
- if (codePoint >= 65 && codePoint < 91) return codePoint - 65;
3664
- if (codePoint >= 97 && codePoint < 123) return codePoint - 97;
3665
- return base;
3666
- };
3667
- var digitToBasic = function(digit, flag) {
3668
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
3669
- };
3670
- var adapt = function(delta, numPoints, firstTime) {
3671
- let k = 0;
3672
- delta = firstTime ? floor(delta / damp) : delta >> 1;
3673
- delta += floor(delta / numPoints);
3674
- for (;delta > 455; k += base) delta = floor(delta / baseMinusTMin);
3675
- return floor(k + 36 * delta / (delta + skew));
3676
- };
3677
- var decode = function(input) {
3678
- const output = [];
3679
- const inputLength = input.length;
3680
- let i = 0;
3681
- let n = initialN;
3682
- let bias = initialBias;
3683
- let basic = input.lastIndexOf(delimiter);
3684
- if (basic < 0) basic = 0;
3685
- for (let j = 0; j < basic; ++j) {
3686
- if (input.charCodeAt(j) >= 128) error("not-basic");
3687
- output.push(input.charCodeAt(j));
3688
- }
3689
- for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; ) {
3690
- const oldi = i;
3691
- for (let w = 1, k = base; ;k += base) {
3692
- if (index >= inputLength) error("invalid-input");
3693
- const digit = basicToDigit(input.charCodeAt(index++));
3694
- if (digit >= base) error("invalid-input");
3695
- if (digit > floor((maxInt - i) / w)) error("overflow");
3696
- i += digit * w;
3697
- const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
3698
- if (digit < t) break;
3699
- const baseMinusT = base - t;
3700
- if (w > floor(maxInt / baseMinusT)) error("overflow");
3701
- w *= baseMinusT;
3702
- }
3703
- const out = output.length + 1;
3704
- bias = adapt(i - oldi, out, oldi == 0);
3705
- if (floor(i / out) > maxInt - n) error("overflow");
3706
- n += floor(i / out);
3707
- i %= out;
3708
- output.splice(i++, 0, n);
3709
- }
3710
- return String.fromCodePoint(...output);
3711
- };
3712
- var encode = function(input) {
3713
- const output = [];
3714
- input = ucs2decode(input);
3715
- const inputLength = input.length;
3716
- let n = initialN;
3717
- let delta = 0;
3718
- let bias = initialBias;
3719
- for (const currentValue of input) if (currentValue < 128) output.push(stringFromCharCode(currentValue));
3720
- const basicLength = output.length;
3721
- let handledCPCount = basicLength;
3722
- if (basicLength) output.push(delimiter);
3723
- while (handledCPCount < inputLength) {
3724
- let m = maxInt;
3725
- for (const currentValue of input) if (currentValue >= n && currentValue < m) m = currentValue;
3726
- const handledCPCountPlusOne = handledCPCount + 1;
3727
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) error("overflow");
3728
- delta += (m - n) * handledCPCountPlusOne;
3729
- n = m;
3730
- for (const currentValue of input) {
3731
- if (currentValue < n && ++delta > maxInt) error("overflow");
3732
- if (currentValue === n) {
3733
- let q = delta;
3734
- for (let k = base; ;k += base) {
3735
- const t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
3736
- if (q < t) break;
3737
- const qMinusT = q - t;
3738
- const baseMinusT = base - t;
3739
- output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));
3740
- q = floor(qMinusT / baseMinusT);
3741
- }
3742
- output.push(stringFromCharCode(digitToBasic(q, 0)));
3743
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);
3744
- delta = 0;
3745
- ++handledCPCount;
3746
- }
3747
- }
3748
- ++delta;
3749
- ++n;
3750
- }
3751
- return output.join("");
3752
- };
3753
- var toUnicode = function(input) {
3754
- return mapDomain(input, function(string) {
3755
- return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;
3756
- });
3757
- };
3758
- var toASCII = function(input) {
3759
- return mapDomain(input, function(string) {
3760
- return regexNonASCII.test(string) ? "xn--" + encode(string) : string;
3761
- });
3762
- };
3763
- var punycode = {
3764
- version: "2.3.1",
3765
- ucs2: {
3766
- decode: ucs2decode,
3767
- encode: ucs2encode
3768
- },
3769
- decode: decode,
3770
- encode: encode,
3771
- toASCII: toASCII,
3772
- toUnicode: toUnicode
3773
- };
3774
- //#endregion
3775
- //#region lib/presets/default.mjs
3776
- var default_default = {
3777
- options: {
3778
- html: false,
3779
- xhtmlOut: false,
3780
- breaks: false,
3781
- langPrefix: "language-",
3782
- linkify: false,
3783
- typographer: false,
3784
- quotes: "\u201c\u201d\u2018\u2019",
3785
- highlight: null,
3786
- maxNesting: 100
3787
- },
3788
- components: {
3789
- core: {},
3790
- block: {},
3791
- inline: {}
3792
- }
3793
- };
3794
- //#endregion
3795
- //#region lib/presets/zero.mjs
3796
- var zero_default = {
3797
- options: {
3798
- html: false,
3799
- xhtmlOut: false,
3800
- breaks: false,
3801
- langPrefix: "language-",
3802
- linkify: false,
3803
- typographer: false,
3804
- quotes: "\u201c\u201d\u2018\u2019",
3805
- highlight: null,
3806
- maxNesting: 20
3807
- },
3808
- components: {
3809
- core: {
3810
- rules: [ "normalize", "block", "inline", "text_join" ]
3811
- },
3812
- block: {
3813
- rules: [ "paragraph" ]
3814
- },
3815
- inline: {
3816
- rules: [ "text" ],
3817
- rules2: [ "balance_pairs", "fragments_join" ]
3818
- }
3819
- }
3820
- };
3821
- //#endregion
3822
- //#region lib/presets/commonmark.mjs
3823
- var commonmark_default = {
3824
- options: {
3825
- html: true,
3826
- xhtmlOut: true,
3827
- breaks: false,
3828
- langPrefix: "language-",
3829
- linkify: false,
3830
- typographer: false,
3831
- quotes: "\u201c\u201d\u2018\u2019",
3832
- highlight: null,
3833
- maxNesting: 20
3834
- },
3835
- components: {
3836
- core: {
3837
- rules: [ "normalize", "block", "inline", "text_join" ]
3838
- },
3839
- block: {
3840
- rules: [ "blockquote", "code", "fence", "heading", "hr", "html_block", "lheading", "list", "reference", "paragraph" ]
3841
- },
3842
- inline: {
3843
- rules: [ "autolink", "backticks", "emphasis", "entity", "escape", "html_inline", "image", "link", "newline", "text" ],
3844
- rules2: [ "balance_pairs", "emphasis", "fragments_join" ]
3845
- }
3846
- }
3847
- };
3848
- //#endregion
3849
- //#region lib/index.mjs
3850
- var config = {
3851
- default: default_default,
3852
- zero: zero_default,
3853
- commonmark: commonmark_default
3854
- };
3855
- var BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;
3856
- var GOOD_DATA_RE = /^data:image\/(gif|png|jpeg|webp);/;
3857
- function validateLink(url) {
3858
- const str = url.trim().toLowerCase();
3859
- return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true;
3860
- }
3861
- var RECODE_HOSTNAME_FOR = [ "http:", "https:", "mailto:" ];
3862
- function normalizeLink(url) {
3863
- const parsed = urlParse(url, true);
3864
- if (parsed.hostname) {
3865
- if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {
3866
- parsed.hostname = punycode.toASCII(parsed.hostname);
3867
- } catch (er) {}
3868
- }
3869
- return encode$1(format(parsed));
3870
- }
3871
- function normalizeLinkText(url) {
3872
- const parsed = urlParse(url, true);
3873
- if (parsed.hostname) {
3874
- if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) try {
3875
- parsed.hostname = punycode.toUnicode(parsed.hostname);
3876
- } catch (er) {}
3877
- }
3878
- return decode$1(format(parsed), decode$1.defaultChars + "%");
3879
- }
3880
- function MarkdownIt(presetName, options) {
3881
- if (!(this instanceof MarkdownIt)) return new MarkdownIt(presetName, options);
3882
- if (!options) {
3883
- if (!isString$1(presetName)) {
3884
- options = presetName || {};
3885
- presetName = "default";
3886
- }
3887
- }
3888
- this.inline = new ParserInline;
3889
- this.block = new ParserBlock;
3890
- this.core = new Core;
3891
- this.renderer = new Renderer;
3892
- this.linkify = new LinkifyIt;
3893
- this.validateLink = validateLink;
3894
- this.normalizeLink = normalizeLink;
3895
- this.normalizeLinkText = normalizeLinkText;
3896
- this.utils = utils_exports;
3897
- this.helpers = assign$1({}, helpers_exports);
3898
- this.options = {};
3899
- this.configure(presetName);
3900
- if (options) this.set(options);
3901
- }
3902
- MarkdownIt.prototype.set = function(options) {
3903
- assign$1(this.options, options);
3904
- return this;
3905
- };
3906
- MarkdownIt.prototype.configure = function(presets) {
3907
- const self = this;
3908
- if (isString$1(presets)) {
3909
- const presetName = presets;
3910
- presets = config[presetName];
3911
- if (!presets) throw new Error('Wrong `markdown-it` preset "' + presetName + '", check name');
3912
- }
3913
- if (!presets) throw new Error("Wrong `markdown-it` preset, can't be empty");
3914
- if (presets.options) self.set(presets.options);
3915
- if (presets.components) Object.keys(presets.components).forEach(function(name) {
3916
- if (presets.components[name].rules) self[name].ruler.enableOnly(presets.components[name].rules);
3917
- if (presets.components[name].rules2) self[name].ruler2.enableOnly(presets.components[name].rules2);
3918
- });
3919
- return this;
3920
- };
3921
- MarkdownIt.prototype.enable = function(list, ignoreInvalid) {
3922
- let result = [];
3923
- if (!Array.isArray(list)) list = [ list ];
3924
- [ "core", "block", "inline" ].forEach(function(chain) {
3925
- result = result.concat(this[chain].ruler.enable(list, true));
3926
- }, this);
3927
- result = result.concat(this.inline.ruler2.enable(list, true));
3928
- const missed = list.filter(function(name) {
3929
- return result.indexOf(name) < 0;
3930
- });
3931
- if (missed.length && !ignoreInvalid) throw new Error("MarkdownIt. Failed to enable unknown rule(s): " + missed);
3932
- return this;
3933
- };
3934
- MarkdownIt.prototype.disable = function(list, ignoreInvalid) {
3935
- let result = [];
3936
- if (!Array.isArray(list)) list = [ list ];
3937
- [ "core", "block", "inline" ].forEach(function(chain) {
3938
- result = result.concat(this[chain].ruler.disable(list, true));
3939
- }, this);
3940
- result = result.concat(this.inline.ruler2.disable(list, true));
3941
- const missed = list.filter(function(name) {
3942
- return result.indexOf(name) < 0;
3943
- });
3944
- if (missed.length && !ignoreInvalid) throw new Error("MarkdownIt. Failed to disable unknown rule(s): " + missed);
3945
- return this;
3946
- };
3947
- MarkdownIt.prototype.use = function(plugin) {
3948
- const args = [ this ].concat(Array.prototype.slice.call(arguments, 1));
3949
- plugin.apply(plugin, args);
3950
- return this;
3951
- };
3952
- MarkdownIt.prototype.parse = function(src, env) {
3953
- if (typeof src !== "string") throw new Error("Input data should be a String");
3954
- const state = new this.core.State(src, this, env);
3955
- this.core.process(state);
3956
- return state.tokens;
3957
- };
3958
- MarkdownIt.prototype.render = function(src, env) {
3959
- env = env || {};
3960
- return this.renderer.render(this.parse(src, env), this.options, env);
3961
- };
3962
- MarkdownIt.prototype.parseInline = function(src, env) {
3963
- const state = new this.core.State(src, this, env);
3964
- state.inlineMode = true;
3965
- this.core.process(state);
3966
- return state.tokens;
3967
- };
3968
- MarkdownIt.prototype.renderInline = function(src, env) {
3969
- env = env || {};
3970
- return this.renderer.render(this.parseInline(src, env), this.options, env);
3971
- };
3972
- //#endregion
3973
- return MarkdownIt;
3974
- });
3975
- //# sourceMappingURL=markdown-it.js.map