orz-markdown 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -0
  3. package/dist/index.d.ts +18 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +159 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/plugins/attrs.d.ts +3 -0
  8. package/dist/plugins/attrs.d.ts.map +1 -0
  9. package/dist/plugins/attrs.js +60 -0
  10. package/dist/plugins/attrs.js.map +1 -0
  11. package/dist/plugins/emoji.d.ts +2 -0
  12. package/dist/plugins/emoji.d.ts.map +1 -0
  13. package/dist/plugins/emoji.js +51 -0
  14. package/dist/plugins/emoji.js.map +1 -0
  15. package/dist/plugins/markdown-include.d.ts +3 -0
  16. package/dist/plugins/markdown-include.d.ts.map +1 -0
  17. package/dist/plugins/markdown-include.js +44 -0
  18. package/dist/plugins/markdown-include.js.map +1 -0
  19. package/dist/plugins/mermaid.d.ts +2 -0
  20. package/dist/plugins/mermaid.d.ts.map +1 -0
  21. package/dist/plugins/mermaid.js +18 -0
  22. package/dist/plugins/mermaid.js.map +1 -0
  23. package/dist/plugins/nyml.d.ts +2 -0
  24. package/dist/plugins/nyml.d.ts.map +1 -0
  25. package/dist/plugins/nyml.js +21 -0
  26. package/dist/plugins/nyml.js.map +1 -0
  27. package/dist/plugins/nyml_parser.d.ts +32 -0
  28. package/dist/plugins/nyml_parser.d.ts.map +1 -0
  29. package/dist/plugins/nyml_parser.js +236 -0
  30. package/dist/plugins/nyml_parser.js.map +1 -0
  31. package/dist/plugins/qrcode.d.ts +2 -0
  32. package/dist/plugins/qrcode.d.ts.map +1 -0
  33. package/dist/plugins/qrcode.js +21 -0
  34. package/dist/plugins/qrcode.js.map +1 -0
  35. package/dist/plugins/smiles.d.ts +2 -0
  36. package/dist/plugins/smiles.d.ts.map +1 -0
  37. package/dist/plugins/smiles.js +19 -0
  38. package/dist/plugins/smiles.js.map +1 -0
  39. package/dist/plugins/space.d.ts +2 -0
  40. package/dist/plugins/space.d.ts.map +1 -0
  41. package/dist/plugins/space.js +15 -0
  42. package/dist/plugins/space.js.map +1 -0
  43. package/dist/plugins/span.d.ts +3 -0
  44. package/dist/plugins/span.d.ts.map +1 -0
  45. package/dist/plugins/span.js +18 -0
  46. package/dist/plugins/span.js.map +1 -0
  47. package/dist/plugins/test.d.ts +2 -0
  48. package/dist/plugins/test.d.ts.map +1 -0
  49. package/dist/plugins/test.js +14 -0
  50. package/dist/plugins/test.js.map +1 -0
  51. package/dist/plugins/toc.d.ts +3 -0
  52. package/dist/plugins/toc.d.ts.map +1 -0
  53. package/dist/plugins/toc.js +62 -0
  54. package/dist/plugins/toc.js.map +1 -0
  55. package/dist/plugins/yaml.d.ts +2 -0
  56. package/dist/plugins/yaml.d.ts.map +1 -0
  57. package/dist/plugins/yaml.js +12 -0
  58. package/dist/plugins/yaml.js.map +1 -0
  59. package/dist/plugins/youtube.d.ts +2 -0
  60. package/dist/plugins/youtube.d.ts.map +1 -0
  61. package/dist/plugins/youtube.js +19 -0
  62. package/dist/plugins/youtube.js.map +1 -0
  63. package/dist/prepare-sources.d.ts +10 -0
  64. package/dist/prepare-sources.d.ts.map +1 -0
  65. package/dist/prepare-sources.js +31 -0
  66. package/dist/prepare-sources.js.map +1 -0
  67. package/dist/registry.d.ts +10 -0
  68. package/dist/registry.d.ts.map +1 -0
  69. package/dist/registry.js +24 -0
  70. package/dist/registry.js.map +1 -0
  71. package/dist/rules/block-dispatcher.d.ts +9 -0
  72. package/dist/rules/block-dispatcher.d.ts.map +1 -0
  73. package/dist/rules/block-dispatcher.js +108 -0
  74. package/dist/rules/block-dispatcher.js.map +1 -0
  75. package/dist/rules/inline-dispatcher.d.ts +9 -0
  76. package/dist/rules/inline-dispatcher.d.ts.map +1 -0
  77. package/dist/rules/inline-dispatcher.js +62 -0
  78. package/dist/rules/inline-dispatcher.js.map +1 -0
  79. package/dist/runtime.d.ts +3 -0
  80. package/dist/runtime.d.ts.map +1 -0
  81. package/dist/runtime.js +128 -0
  82. package/dist/runtime.js.map +1 -0
  83. package/package.json +70 -0
  84. package/themes/beige-decent-1.css +559 -0
  85. package/themes/beige-decent-2.css +578 -0
  86. package/themes/common.css +178 -0
  87. package/themes/dark-elegant-1.css +729 -0
  88. package/themes/dark-elegant-2.css +1376 -0
  89. package/themes/light-academic-1.css +541 -0
  90. package/themes/light-academic-2.css +462 -0
  91. package/themes/light-neat-1.css +1244 -0
  92. package/themes/light-neat-2.css +1185 -0
  93. package/themes/light-playful-1.css +493 -0
  94. package/themes/light-playful-2.css +494 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nyml_parser.d.ts","sourceRoot":"","sources":["../../src/plugins/nyml_parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAM,UAAW,SAAQ,KAAK;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,IAAW;CAOtF;AA+HD;;;;;GAKG;AACH,iBAAS,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,CAgExC;AAED;;;;;;GAMG;AACH,iBAAS,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAiChE;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ /**
3
+ * NYML V2 Parser implementation.
4
+ *
5
+ * V2 introduces list-based output where:
6
+ * - Root is always a list of entries
7
+ * - Multi-value fields create nested lists
8
+ * - Mixed content (strings + key/value pairs) is supported
9
+ * - No comments (# is allowed in values)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ParseError = void 0;
13
+ exports.parseNymlV2 = parseNymlV2;
14
+ exports.serializeNymlV2 = serializeNymlV2;
15
+ class ParseError extends Error {
16
+ constructor(code, message, line, column = null) {
17
+ super(`Line ${line}: ${message}`);
18
+ this.code = code;
19
+ this.line = line;
20
+ this.column = column;
21
+ this.name = "ParseError";
22
+ }
23
+ }
24
+ exports.ParseError = ParseError;
25
+ /**
26
+ * Count leading spaces in a string.
27
+ * @param {string} s
28
+ * @returns {number}
29
+ */
30
+ function leadingSpaces(s) {
31
+ let count = 0;
32
+ for (const ch of s) {
33
+ if (ch === " ") {
34
+ count++;
35
+ }
36
+ else {
37
+ break;
38
+ }
39
+ }
40
+ return count;
41
+ }
42
+ /**
43
+ * Parse a stripped line into [key, value] tuple.
44
+ *
45
+ * @param {string} stripped - Line with leading/trailing whitespace removed
46
+ * @returns {[string|null, string|null]} - [key, value] or [null, null] if no colon
47
+ */
48
+ function parseKeyValue(stripped) {
49
+ if (!stripped) {
50
+ return [null, null];
51
+ }
52
+ // Handle quoted keys
53
+ if (stripped.startsWith('"')) {
54
+ const end = stripped.indexOf('"', 1);
55
+ if (end === -1) {
56
+ // Unmatched quote - treat as plain string
57
+ return [null, null];
58
+ }
59
+ const key = stripped.slice(1, end);
60
+ const rest = stripped.slice(end + 1).trimStart();
61
+ if (!rest.startsWith(":")) {
62
+ // No colon after quoted key - treat as plain string
63
+ return [null, null];
64
+ }
65
+ const value = rest.slice(1).trim();
66
+ return [key, value];
67
+ }
68
+ // Regular key:value
69
+ const idx = stripped.indexOf(":");
70
+ if (idx === -1) {
71
+ return [null, null];
72
+ }
73
+ const key = stripped.slice(0, idx).trim();
74
+ const value = stripped.slice(idx + 1).trim();
75
+ return [key, value];
76
+ }
77
+ /**
78
+ * Collect multiline string content starting from startIdx + 1.
79
+ *
80
+ * @param {string[]} lines - All lines
81
+ * @param {number} startIdx - Index of the "key: |" line
82
+ * @param {number} baseIndent - Indent of the key line
83
+ * @returns {[string, number]} - [content, nextIndex]
84
+ */
85
+ function collectMultiline(lines, startIdx, baseIndent) {
86
+ const rawLines = [];
87
+ let i = startIdx + 1;
88
+ while (i < lines.length) {
89
+ const line = lines[i];
90
+ const indent = leadingSpaces(line);
91
+ // Empty lines are included in multiline content
92
+ if (line.trim() === "") {
93
+ rawLines.push("");
94
+ i++;
95
+ continue;
96
+ }
97
+ // Line with less or equal indent ends the block
98
+ if (indent <= baseIndent) {
99
+ break;
100
+ }
101
+ rawLines.push(line);
102
+ i++;
103
+ }
104
+ // Dedent: find minimum indent among non-blank lines
105
+ const nonblank = rawLines.filter((r) => r.trim() !== "");
106
+ let minIndent = 0;
107
+ if (nonblank.length > 0) {
108
+ minIndent = Math.min(...nonblank.map((r) => leadingSpaces(r)));
109
+ }
110
+ // Apply dedent
111
+ const pieces = [];
112
+ for (const r of rawLines) {
113
+ if (r.trim() === "") {
114
+ pieces.push("");
115
+ }
116
+ else {
117
+ pieces.push(r.slice(minIndent));
118
+ }
119
+ }
120
+ // Collapse multiple trailing blank lines
121
+ while (pieces.length >= 2 &&
122
+ pieces[pieces.length - 1] === "" &&
123
+ pieces[pieces.length - 2] === "") {
124
+ pieces.pop();
125
+ }
126
+ // Build content with trailing newline
127
+ let content;
128
+ if (pieces.length > 0 && pieces[pieces.length - 1] === "") {
129
+ content = pieces.join("\n");
130
+ }
131
+ else {
132
+ content = pieces.length > 0 ? pieces.join("\n") + "\n" : "";
133
+ }
134
+ return [content, i];
135
+ }
136
+ /**
137
+ * Parse NYML V2 text into a list structure.
138
+ *
139
+ * @param {string} text - The NYML V2 content to parse
140
+ * @returns {Array} - A list representing the parsed data
141
+ */
142
+ function parseNymlV2(text) {
143
+ const lines = text.split(/\r?\n/);
144
+ const result = [];
145
+ // Stack of [container, baseIndent]
146
+ const stack = [[result, -1]];
147
+ let i = 0;
148
+ while (i < lines.length) {
149
+ const line = lines[i];
150
+ const stripped = line.trim();
151
+ // Skip empty lines
152
+ if (!stripped) {
153
+ i++;
154
+ continue;
155
+ }
156
+ const indent = leadingSpaces(line);
157
+ // Pop stack to find correct parent based on indent
158
+ while (stack.length > 1 && indent <= stack[stack.length - 1][1]) {
159
+ stack.pop();
160
+ }
161
+ const [parent, parentIndent] = stack[stack.length - 1];
162
+ // Parse the line
163
+ const [key, value] = parseKeyValue(stripped);
164
+ if (key === null) {
165
+ // No colon found - plain string
166
+ if (stack.length > 1) {
167
+ // Inside a multi-value context: add as plain string
168
+ parent.push(stripped);
169
+ }
170
+ // At root level: ignore (Rule 9)
171
+ i++;
172
+ continue;
173
+ }
174
+ if (value === "|") {
175
+ // Multiline string
176
+ const [content, nextIdx] = collectMultiline(lines, i, indent);
177
+ parent.push({ [key]: content });
178
+ i = nextIdx;
179
+ continue;
180
+ }
181
+ if (value === "") {
182
+ // Multi-value field: create a list for children
183
+ const newList = [];
184
+ parent.push({ [key]: newList });
185
+ stack.push([newList, indent]);
186
+ i++;
187
+ continue;
188
+ }
189
+ // Single-line key:value
190
+ parent.push({ [key]: value });
191
+ i++;
192
+ }
193
+ return result;
194
+ }
195
+ /**
196
+ * Serialize a V2 data structure back to NYML format.
197
+ *
198
+ * @param {Array} data - List structure as returned by parseNymlV2()
199
+ * @param {number} indent - Current indentation level (spaces)
200
+ * @returns {string} - NYML formatted string
201
+ */
202
+ function serializeNymlV2(data, indent = 0) {
203
+ const lines = [];
204
+ const prefix = " ".repeat(indent);
205
+ for (const item of data) {
206
+ if (typeof item === "string") {
207
+ // Plain string in multi-value context
208
+ lines.push(`${prefix}${item}`);
209
+ }
210
+ else if (typeof item === "object" && item !== null) {
211
+ // Should have exactly one key
212
+ for (const [key, value] of Object.entries(item)) {
213
+ // Check if key needs quoting
214
+ const quotedKey = key.includes(":") ? `"${key}"` : key;
215
+ if (Array.isArray(value)) {
216
+ // Multi-value field
217
+ lines.push(`${prefix}${quotedKey}:`);
218
+ lines.push(serializeNymlV2(value, indent + 2));
219
+ }
220
+ else if (typeof value === "string" && value.includes("\n")) {
221
+ // Multiline string
222
+ lines.push(`${prefix}${quotedKey}: |`);
223
+ for (const vline of value.replace(/\n$/, "").split("\n")) {
224
+ lines.push(`${prefix} ${vline}`);
225
+ }
226
+ }
227
+ else {
228
+ // Single-line value
229
+ lines.push(`${prefix}${quotedKey}: ${value}`);
230
+ }
231
+ }
232
+ }
233
+ }
234
+ return lines.join("\n");
235
+ }
236
+ //# sourceMappingURL=nyml_parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nyml_parser.js","sourceRoot":"","sources":["../../src/plugins/nyml_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=qrcode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrcode.d.ts","sourceRoot":"","sources":["../../src/plugins/qrcode.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const qrcode_svg_1 = __importDefault(require("qrcode-svg"));
7
+ const registry_js_1 = require("../registry.js");
8
+ (0, registry_js_1.register)({
9
+ type: 'inline',
10
+ aliases: ['qr', 'qrcode'],
11
+ render(_args, body, _env) {
12
+ const content = body?.trim();
13
+ if (!content)
14
+ return '';
15
+ const size = 96;
16
+ const rawSvg = new qrcode_svg_1.default({ content, width: size, height: size, padding: 0, color: '#000000', background: '#ffffff' }).svg();
17
+ const svg = rawSvg.replace('<svg ', `<svg viewBox="0 0 ${size} ${size}" preserveAspectRatio="xMidYMid meet" `);
18
+ return `<span class="qrcode" role="button" tabindex="0" aria-label="Expand QR code" aria-expanded="false"><span class="qrcode__icon" aria-hidden="true">⤢</span>${svg}</span>`;
19
+ },
20
+ });
21
+ //# sourceMappingURL=qrcode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../src/plugins/qrcode.ts"],"names":[],"mappings":";;;;;AAAA,4DAAgC;AAChC,gDAA0C;AAE1C,IAAA,sBAAQ,EAAC;IACP,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI;QACtB,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,IAAI,oBAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7H,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CACxB,OAAO,EACP,qBAAqB,IAAI,IAAI,IAAI,wCAAwC,CAC1E,CAAC;QACF,OAAO,2JAA2J,GAAG,SAAS,CAAC;IACjL,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=smiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smiles.d.ts","sourceRoot":"","sources":["../../src/plugins/smiles.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const registry_js_1 = require("../registry.js");
4
+ function escapeAttr(str) {
5
+ return str
6
+ .replace(/&/g, '&amp;')
7
+ .replace(/"/g, '&quot;')
8
+ .replace(/</g, '&lt;')
9
+ .replace(/>/g, '&gt;');
10
+ }
11
+ (0, registry_js_1.register)({
12
+ type: 'block',
13
+ aliases: ['smiles', 'sm'],
14
+ render(_args, body, _env) {
15
+ const smiles = body?.trim() ?? '';
16
+ return `<div class="smiles-render">\n <canvas data-smiles="${escapeAttr(smiles)}" width="250" height="180"></canvas>\n</div>\n`;
17
+ },
18
+ });
19
+ //# sourceMappingURL=smiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smiles.js","sourceRoot":"","sources":["../../src/plugins/smiles.ts"],"names":[],"mappings":";;AAAA,gDAA0C;AAE1C,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,IAAA,sBAAQ,EAAC;IACP,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI;QACtB,MAAM,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAClC,OAAO,uDAAuD,UAAU,CAAC,MAAM,CAAC,gDAAgD,CAAC;IACnI,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space.d.ts","sourceRoot":"","sources":["../../src/plugins/space.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const registry_js_1 = require("../registry.js");
4
+ (0, registry_js_1.register)({
5
+ type: 'inline',
6
+ aliases: ['space'],
7
+ render(_args, body, _env) {
8
+ const n = parseFloat(body?.trim() ?? '');
9
+ if (!isFinite(n) || n <= 0) {
10
+ return '';
11
+ }
12
+ return `<span style="display:inline-block;width:${n}rem"></span>`;
13
+ },
14
+ });
15
+ //# sourceMappingURL=space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"space.js","sourceRoot":"","sources":["../../src/plugins/space.ts"],"names":[],"mappings":";;AAAA,gDAA0C;AAE1C,IAAA,sBAAQ,EAAC;IACP,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,OAAO,CAAC;IAClB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI;QACtB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,2CAA2C,CAAC,cAAc,CAAC;IACpE,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type MarkdownIt from 'markdown-it';
2
+ export declare function registerSpan(md: MarkdownIt): void;
3
+ //# sourceMappingURL=span.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span.d.ts","sourceRoot":"","sources":["../../src/plugins/span.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAG1C,wBAAgB,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAYjD"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSpan = registerSpan;
4
+ const registry_js_1 = require("../registry.js");
5
+ function registerSpan(md) {
6
+ (0, registry_js_1.register)({
7
+ type: 'inline',
8
+ aliases: ['span', 'sp'],
9
+ render(args, body, _env) {
10
+ const inner = md.renderInline(body ?? '');
11
+ if (!args) {
12
+ return `<span>${inner}</span>`;
13
+ }
14
+ return `<span class="${args}">${inner}</span>`;
15
+ },
16
+ });
17
+ }
18
+ //# sourceMappingURL=span.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span.js","sourceRoot":"","sources":["../../src/plugins/span.ts"],"names":[],"mappings":";;AAGA,oCAYC;AAdD,gDAA0C;AAE1C,SAAgB,YAAY,CAAC,EAAc;IACzC,IAAA,sBAAQ,EAAC;QACP,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;QACvB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;YACrB,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,SAAS,KAAK,SAAS,CAAC;YACjC,CAAC;YACD,OAAO,gBAAgB,IAAI,KAAK,KAAK,SAAS,CAAC;QACjD,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/plugins/test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const registry_js_1 = require("../registry.js");
4
+ (0, registry_js_1.register)({
5
+ type: 'block',
6
+ aliases: ['test-block'],
7
+ render: (_args, _body, _env) => '<div class="test-block">TestPluginBlock</div>\n',
8
+ });
9
+ (0, registry_js_1.register)({
10
+ type: 'inline',
11
+ aliases: ['test-inline'],
12
+ render: (_args, _body, _env) => '<span class="test-inline">TestPluginInline</span>',
13
+ });
14
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/plugins/test.ts"],"names":[],"mappings":";;AAAA,gDAA0C;AAE1C,IAAA,sBAAQ,EAAC;IACP,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,YAAY,CAAC;IACvB,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC7B,iDAAiD;CACpD,CAAC,CAAC;AAEH,IAAA,sBAAQ,EAAC;IACP,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,CAAC,aAAa,CAAC;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAC7B,mDAAmD;CACtD,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type MarkdownIt from 'markdown-it';
2
+ export declare function registerToc(md: MarkdownIt): void;
3
+ //# sourceMappingURL=toc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/plugins/toc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AA8B1C,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CA0ChD"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerToc = registerToc;
4
+ const registry_js_1 = require("../registry.js");
5
+ function parseRange(body) {
6
+ if (!body || !body.trim())
7
+ return [1, 3];
8
+ const parts = body.trim().split(',').map(s => parseInt(s.trim(), 10));
9
+ if (parts.length >= 2 && !isNaN(parts[0]) && !isNaN(parts[1])) {
10
+ return [parts[0], parts[1]];
11
+ }
12
+ return [1, 3];
13
+ }
14
+ function buildTocHTML(headings) {
15
+ if (!headings.length)
16
+ return '<ul class="toc-list"></ul>\n';
17
+ let html = '<ul class="toc-list">\n';
18
+ for (const h of headings) {
19
+ const href = h.anchor ? `#${h.anchor}` : '';
20
+ html += `<li style="padding-left:${(h.level - 1) * 1.25}em"><a href="${href}">${h.text}</a></li>\n`;
21
+ }
22
+ html += '</ul>\n';
23
+ return html;
24
+ }
25
+ function registerToc(md) {
26
+ // The render function just returns the pre-built HTML injected by the core rule
27
+ (0, registry_js_1.register)({
28
+ type: 'block',
29
+ aliases: ['toc'],
30
+ render(_args, body, _env) {
31
+ return body ?? '';
32
+ },
33
+ });
34
+ md.core.ruler.push('toc_resolve', (state) => {
35
+ const headings = [];
36
+ const tocTokenIndices = [];
37
+ for (let i = 0; i < state.tokens.length; i++) {
38
+ const token = state.tokens[i];
39
+ if (token.type === 'heading_open') {
40
+ const level = parseInt(token.tag.slice(1), 10);
41
+ const inlineToken = state.tokens[i + 1];
42
+ const text = (inlineToken?.children ?? [])
43
+ .filter((t) => t.type === 'text' || t.type === 'code_inline')
44
+ .map((t) => t.content)
45
+ .join('');
46
+ const anchor = token.attrGet('id') ?? '';
47
+ headings.push({ level, text, anchor });
48
+ }
49
+ if (token.type === 'plugin_block' && token.info === 'toc') {
50
+ tocTokenIndices.push(i);
51
+ }
52
+ }
53
+ state.env.tocHeadings = headings;
54
+ for (const idx of tocTokenIndices) {
55
+ const token = state.tokens[idx];
56
+ const [minLevel, maxLevel] = parseRange(token.content || null);
57
+ const filtered = headings.filter(h => h.level >= minLevel && h.level <= maxLevel);
58
+ token.content = buildTocHTML(filtered);
59
+ }
60
+ });
61
+ }
62
+ //# sourceMappingURL=toc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toc.js","sourceRoot":"","sources":["../../src/plugins/toc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=yaml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../../src/plugins/yaml.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const registry_js_1 = require("../registry.js");
4
+ (0, registry_js_1.register)({
5
+ type: 'block',
6
+ aliases: ['yaml', 'yml'],
7
+ render(_args, body, _env) {
8
+ const content = (body ?? '').replace(/<\/script>/gi, '<\\/script>');
9
+ return `<script type="application/yaml">\n${content}\n</script>\n`;
10
+ },
11
+ });
12
+ //# sourceMappingURL=yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml.js","sourceRoot":"","sources":["../../src/plugins/yaml.ts"],"names":[],"mappings":";;AAAA,gDAA0C;AAE1C,IAAA,sBAAQ,EAAC;IACP,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;IACxB,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI;QACtB,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QACpE,OAAO,qCAAqC,OAAO,eAAe,CAAC;IACrE,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=youtube.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube.d.ts","sourceRoot":"","sources":["../../src/plugins/youtube.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const registry_js_1 = require("../registry.js");
4
+ (0, registry_js_1.register)({
5
+ type: 'block',
6
+ aliases: ['youtube', 'yt'],
7
+ render(_args, body, _env) {
8
+ const id = body?.trim();
9
+ if (!id)
10
+ return '';
11
+ return (`<div class="youtube-embed">\n` +
12
+ ` <iframe src="https://www.youtube.com/embed/${id}"\n` +
13
+ ` allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"\n` +
14
+ ` referrerpolicy="strict-origin-when-cross-origin"\n` +
15
+ ` allowfullscreen></iframe>\n` +
16
+ `</div>\n`);
17
+ },
18
+ });
19
+ //# sourceMappingURL=youtube.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/plugins/youtube.ts"],"names":[],"mappings":";;AAAA,gDAA0C;AAE1C,IAAA,sBAAQ,EAAC;IACP,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;IAC1B,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI;QACtB,MAAM,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACnB,OAAO,CACL,+BAA+B;YAC/B,gDAAgD,EAAE,KAAK;YACvD,mHAAmH;YACnH,wDAAwD;YACxD,iCAAiC;YACjC,UAAU,CACX,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Pre-processes a markdown source string by fetching any URL-based markdown includes.
3
+ *
4
+ * Scans for `{{markdown https://...}}` or `{{md-include https://...}}` patterns,
5
+ * fetches each URL, and replaces the directive with the fetched markdown content.
6
+ *
7
+ * Call this before `md.render(src)` when URL includes may be present.
8
+ */
9
+ export declare function prepareSources(src: string): Promise<string>;
10
+ //# sourceMappingURL=prepare-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-sources.d.ts","sourceRoot":"","sources":["../src/prepare-sources.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBjE"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareSources = prepareSources;
4
+ /**
5
+ * Pre-processes a markdown source string by fetching any URL-based markdown includes.
6
+ *
7
+ * Scans for `{{markdown https://...}}` or `{{md-include https://...}}` patterns,
8
+ * fetches each URL, and replaces the directive with the fetched markdown content.
9
+ *
10
+ * Call this before `md.render(src)` when URL includes may be present.
11
+ */
12
+ async function prepareSources(src) {
13
+ const pattern = /\{\{(?:markdown|md-include)\s+(https?:\/\/[^\s}]+)\}\}/g;
14
+ const matches = [...src.matchAll(pattern)];
15
+ if (!matches.length)
16
+ return src;
17
+ let result = src;
18
+ for (const m of matches) {
19
+ const [fullMatch, url] = m;
20
+ try {
21
+ const res = await fetch(url);
22
+ const text = await res.text();
23
+ result = result.replace(fullMatch, text);
24
+ }
25
+ catch {
26
+ // If fetch fails, leave the directive in place (block dispatcher will ignore unknown URL)
27
+ }
28
+ }
29
+ return result;
30
+ }
31
+ //# sourceMappingURL=prepare-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-sources.js","sourceRoot":"","sources":["../src/prepare-sources.ts"],"names":[],"mappings":";;AAQA,wCAiBC;AAzBD;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAAC,GAAW;IAC9C,MAAM,OAAO,GAAG,yDAAyD,CAAC;IAC1E,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IAEhC,IAAI,MAAM,GAAG,GAAG,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,0FAA0F;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface PluginDefinition {
2
+ type: 'block' | 'inline';
3
+ aliases: string[];
4
+ render: (args: string | null, body: string | null, env: object) => string;
5
+ }
6
+ export declare function register(def: PluginDefinition): void;
7
+ export declare function hasBlock(name: string): boolean;
8
+ export declare function hasInline(name: string): boolean;
9
+ export declare function getDefinition(name: string): PluginDefinition | undefined;
10
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3E;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAIpD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG9C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAExE"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.register = register;
4
+ exports.hasBlock = hasBlock;
5
+ exports.hasInline = hasInline;
6
+ exports.getDefinition = getDefinition;
7
+ const registry = new Map();
8
+ function register(def) {
9
+ for (const alias of def.aliases) {
10
+ registry.set(alias, def);
11
+ }
12
+ }
13
+ function hasBlock(name) {
14
+ const def = registry.get(name);
15
+ return def !== undefined && def.type === 'block';
16
+ }
17
+ function hasInline(name) {
18
+ const def = registry.get(name);
19
+ return def !== undefined && def.type === 'inline';
20
+ }
21
+ function getDefinition(name) {
22
+ return registry.get(name);
23
+ }
24
+ //# sourceMappingURL=registry.js.map