@dogsbay/format-mkdocs 0.2.0-beta.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 (145) hide show
  1. package/dist/autodoc/markdown-generator.d.ts +6 -0
  2. package/dist/autodoc/markdown-generator.d.ts.map +1 -0
  3. package/dist/autodoc/markdown-generator.js +242 -0
  4. package/dist/autodoc/markdown-generator.js.map +1 -0
  5. package/dist/autodoc/module-resolver.d.ts +8 -0
  6. package/dist/autodoc/module-resolver.d.ts.map +1 -0
  7. package/dist/autodoc/module-resolver.js +218 -0
  8. package/dist/autodoc/module-resolver.js.map +1 -0
  9. package/dist/autodoc/python-docstring.d.ts +7 -0
  10. package/dist/autodoc/python-docstring.d.ts.map +1 -0
  11. package/dist/autodoc/python-docstring.js +324 -0
  12. package/dist/autodoc/python-docstring.js.map +1 -0
  13. package/dist/autodoc/python-parser.d.ts +10 -0
  14. package/dist/autodoc/python-parser.d.ts.map +1 -0
  15. package/dist/autodoc/python-parser.js +541 -0
  16. package/dist/autodoc/python-parser.js.map +1 -0
  17. package/dist/autodoc/tree-builder.d.ts +9 -0
  18. package/dist/autodoc/tree-builder.d.ts.map +1 -0
  19. package/dist/autodoc/tree-builder.js +279 -0
  20. package/dist/autodoc/tree-builder.js.map +1 -0
  21. package/dist/autodoc/types.d.ts +128 -0
  22. package/dist/autodoc/types.d.ts.map +1 -0
  23. package/dist/autodoc/types.js +2 -0
  24. package/dist/autodoc/types.js.map +1 -0
  25. package/dist/cli.d.ts +3 -0
  26. package/dist/cli.d.ts.map +1 -0
  27. package/dist/cli.js +32 -0
  28. package/dist/cli.js.map +1 -0
  29. package/dist/export/to-astro.d.ts +26 -0
  30. package/dist/export/to-astro.d.ts.map +1 -0
  31. package/dist/export/to-astro.js +551 -0
  32. package/dist/export/to-astro.js.map +1 -0
  33. package/dist/export/to-mkdocs-project.d.ts +27 -0
  34. package/dist/export/to-mkdocs-project.d.ts.map +1 -0
  35. package/dist/export/to-mkdocs-project.js +192 -0
  36. package/dist/export/to-mkdocs-project.js.map +1 -0
  37. package/dist/export/to-mkdocs.d.ts +6 -0
  38. package/dist/export/to-mkdocs.d.ts.map +1 -0
  39. package/dist/export/to-mkdocs.js +178 -0
  40. package/dist/export/to-mkdocs.js.map +1 -0
  41. package/dist/importer.d.ts +30 -0
  42. package/dist/importer.d.ts.map +1 -0
  43. package/dist/importer.js +376 -0
  44. package/dist/importer.js.map +1 -0
  45. package/dist/index.d.ts +57 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +170 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/inline-walker.d.ts +17 -0
  50. package/dist/inline-walker.d.ts.map +1 -0
  51. package/dist/inline-walker.js +167 -0
  52. package/dist/inline-walker.js.map +1 -0
  53. package/dist/loader.d.ts +42 -0
  54. package/dist/loader.d.ts.map +1 -0
  55. package/dist/loader.js +765 -0
  56. package/dist/loader.js.map +1 -0
  57. package/dist/parse.d.ts +12 -0
  58. package/dist/parse.d.ts.map +1 -0
  59. package/dist/parse.js +46 -0
  60. package/dist/parse.js.map +1 -0
  61. package/dist/renderers/mermaid.d.ts +9 -0
  62. package/dist/renderers/mermaid.d.ts.map +1 -0
  63. package/dist/renderers/mermaid.js +117 -0
  64. package/dist/renderers/mermaid.js.map +1 -0
  65. package/dist/rules/admonition.d.ts +6 -0
  66. package/dist/rules/admonition.d.ts.map +1 -0
  67. package/dist/rules/admonition.js +73 -0
  68. package/dist/rules/admonition.js.map +1 -0
  69. package/dist/rules/annotations.d.ts +6 -0
  70. package/dist/rules/annotations.d.ts.map +1 -0
  71. package/dist/rules/annotations.js +57 -0
  72. package/dist/rules/annotations.js.map +1 -0
  73. package/dist/rules/autodoc.d.ts +7 -0
  74. package/dist/rules/autodoc.d.ts.map +1 -0
  75. package/dist/rules/autodoc.js +102 -0
  76. package/dist/rules/autodoc.js.map +1 -0
  77. package/dist/rules/blocks.d.ts +6 -0
  78. package/dist/rules/blocks.d.ts.map +1 -0
  79. package/dist/rules/blocks.js +172 -0
  80. package/dist/rules/blocks.js.map +1 -0
  81. package/dist/rules/content-tabs.d.ts +6 -0
  82. package/dist/rules/content-tabs.d.ts.map +1 -0
  83. package/dist/rules/content-tabs.js +67 -0
  84. package/dist/rules/content-tabs.js.map +1 -0
  85. package/dist/rules/docusaurus-admonitions.d.ts +7 -0
  86. package/dist/rules/docusaurus-admonitions.d.ts.map +1 -0
  87. package/dist/rules/docusaurus-admonitions.js +101 -0
  88. package/dist/rules/docusaurus-admonitions.js.map +1 -0
  89. package/dist/rules/file-include.d.ts +28 -0
  90. package/dist/rules/file-include.d.ts.map +1 -0
  91. package/dist/rules/file-include.js +198 -0
  92. package/dist/rules/file-include.js.map +1 -0
  93. package/dist/rules/footnotes.d.ts +6 -0
  94. package/dist/rules/footnotes.d.ts.map +1 -0
  95. package/dist/rules/footnotes.js +161 -0
  96. package/dist/rules/footnotes.js.map +1 -0
  97. package/dist/rules/icon-shortcode.d.ts +30 -0
  98. package/dist/rules/icon-shortcode.d.ts.map +1 -0
  99. package/dist/rules/icon-shortcode.js +169 -0
  100. package/dist/rules/icon-shortcode.js.map +1 -0
  101. package/dist/rules/keys.d.ts +6 -0
  102. package/dist/rules/keys.d.ts.map +1 -0
  103. package/dist/rules/keys.js +30 -0
  104. package/dist/rules/keys.js.map +1 -0
  105. package/dist/rules/link-rewrite.d.ts +7 -0
  106. package/dist/rules/link-rewrite.d.ts.map +1 -0
  107. package/dist/rules/link-rewrite.js +93 -0
  108. package/dist/rules/link-rewrite.js.map +1 -0
  109. package/dist/rules/math.d.ts +14 -0
  110. package/dist/rules/math.d.ts.map +1 -0
  111. package/dist/rules/math.js +114 -0
  112. package/dist/rules/math.js.map +1 -0
  113. package/dist/rules/md-in-html.d.ts +6 -0
  114. package/dist/rules/md-in-html.d.ts.map +1 -0
  115. package/dist/rules/md-in-html.js +135 -0
  116. package/dist/rules/md-in-html.js.map +1 -0
  117. package/dist/rules/snippets.d.ts +10 -0
  118. package/dist/rules/snippets.d.ts.map +1 -0
  119. package/dist/rules/snippets.js +109 -0
  120. package/dist/rules/snippets.js.map +1 -0
  121. package/dist/rules/templates.d.ts +15 -0
  122. package/dist/rules/templates.d.ts.map +1 -0
  123. package/dist/rules/templates.js +105 -0
  124. package/dist/rules/templates.js.map +1 -0
  125. package/dist/rules/variants.d.ts +12 -0
  126. package/dist/rules/variants.d.ts.map +1 -0
  127. package/dist/rules/variants.js +148 -0
  128. package/dist/rules/variants.js.map +1 -0
  129. package/dist/tree.d.ts +2 -0
  130. package/dist/tree.d.ts.map +1 -0
  131. package/dist/tree.js +2 -0
  132. package/dist/tree.js.map +1 -0
  133. package/dist/utils/indent.d.ts +18 -0
  134. package/dist/utils/indent.d.ts.map +1 -0
  135. package/dist/utils/indent.js +56 -0
  136. package/dist/utils/indent.js.map +1 -0
  137. package/dist/utils/types.d.ts +19 -0
  138. package/dist/utils/types.d.ts.map +1 -0
  139. package/dist/utils/types.js +63 -0
  140. package/dist/utils/types.js.map +1 -0
  141. package/dist/walker.d.ts +8 -0
  142. package/dist/walker.d.ts.map +1 -0
  143. package/dist/walker.js +193 -0
  144. package/dist/walker.js.map +1 -0
  145. package/package.json +71 -0
@@ -0,0 +1,172 @@
1
+ import { resolveType, autoTitle } from "../utils/types.js";
2
+ /**
3
+ * Opening line regex for PyMdownX blocks syntax.
4
+ *
5
+ * Group 1: Slash delimiter — `///`, `////`, etc.
6
+ * Group 2: Block type keyword — `note`, `details`, `tab`, etc.
7
+ * Group 3: Title (optional) — text after `|` separator
8
+ */
9
+ const BLOCKS_OPEN_RE = /^(\/{3,})\s+([\w-]+)(?:\s*\|\s*(.+?))?\s*$/;
10
+ function getLineText(state, line) {
11
+ const pos = state.bMarks[line] + state.tShift[line];
12
+ const max = state.eMarks[line];
13
+ return state.src.slice(pos, max);
14
+ }
15
+ /**
16
+ * Find the closing delimiter line that matches the given slash count.
17
+ * Returns the line number of the closing delimiter, or -1 if not found.
18
+ */
19
+ function findClosingDelimiter(state, startLine, endLine, slashCount) {
20
+ const closeRe = new RegExp(`^\\/{${slashCount}}\\s*$`);
21
+ for (let line = startLine; line < endLine; line++) {
22
+ const text = getLineText(state, line);
23
+ if (closeRe.test(text))
24
+ return line;
25
+ }
26
+ return -1;
27
+ }
28
+ /**
29
+ * Parse a single block (admonition or details) and emit tokens.
30
+ * Returns the line after the closing delimiter, or -1 if no closing found.
31
+ */
32
+ function parseSingleBlock(state, startLine, endLine, slashCount, blockType, titleRaw) {
33
+ const contentStart = startLine + 1;
34
+ const closeLine = findClosingDelimiter(state, contentStart, endLine, slashCount);
35
+ if (closeLine === -1)
36
+ return -1;
37
+ const isDetails = blockType === "details";
38
+ const tokenType = isDetails ? "details" : "admonition";
39
+ const variant = isDetails ? "note" : resolveType(blockType);
40
+ // Title resolution
41
+ let title;
42
+ if (titleRaw !== null) {
43
+ title = titleRaw.trim();
44
+ }
45
+ else if (isDetails) {
46
+ title = "Details";
47
+ }
48
+ else {
49
+ title = autoTitle(blockType);
50
+ }
51
+ // Emit opening token
52
+ const slashes = "/".repeat(slashCount);
53
+ const openToken = state.push(`${tokenType}_open`, "", 1);
54
+ openToken.info = variant;
55
+ openToken.meta = { title, inline: null, open: false };
56
+ openToken.markup = slashes;
57
+ openToken.map = [startLine, closeLine + 1];
58
+ openToken.block = true;
59
+ // Tokenize inner content (no dedent needed — content is at normal indent)
60
+ const contentEnd = closeLine;
61
+ if (contentEnd > contentStart) {
62
+ const oldParentType = state.parentType;
63
+ const oldLineMax = state.lineMax;
64
+ state.parentType = "admonition";
65
+ state.lineMax = contentEnd;
66
+ state.md.block.tokenize(state, contentStart, contentEnd);
67
+ state.parentType = oldParentType;
68
+ state.lineMax = oldLineMax;
69
+ }
70
+ // Emit closing token
71
+ const closeToken = state.push(`${tokenType}_close`, "", -1);
72
+ closeToken.markup = slashes;
73
+ closeToken.block = true;
74
+ return closeLine + 1;
75
+ }
76
+ /**
77
+ * Parse consecutive tab blocks and wrap in a tab set.
78
+ * Returns the line after the last tab's closing delimiter.
79
+ */
80
+ function parseTabBlocks(state, startLine, endLine, slashCount, firstTitle) {
81
+ // Open tab set
82
+ const setOpen = state.push("tab_set_open", "", 1);
83
+ setOpen.map = [startLine, startLine]; // updated at end
84
+ setOpen.block = true;
85
+ const slashes = "/".repeat(slashCount);
86
+ let line = startLine;
87
+ let title = firstTitle;
88
+ while (line < endLine) {
89
+ const contentStart = line + 1;
90
+ const closeLine = findClosingDelimiter(state, contentStart, endLine, slashCount);
91
+ if (closeLine === -1) {
92
+ // No closing delimiter — roll back tab set and fail
93
+ // Remove the tab_set_open token we already pushed
94
+ state.tokens.pop();
95
+ return -1;
96
+ }
97
+ // Open tab panel
98
+ const panelOpen = state.push("tab_panel_open", "", 1);
99
+ panelOpen.info = title;
100
+ panelOpen.markup = slashes;
101
+ panelOpen.map = [line, closeLine + 1];
102
+ panelOpen.block = true;
103
+ // Tokenize inner content
104
+ const contentEnd = closeLine;
105
+ if (contentEnd > contentStart) {
106
+ const oldParentType = state.parentType;
107
+ const oldLineMax = state.lineMax;
108
+ state.parentType = "tab";
109
+ state.lineMax = contentEnd;
110
+ state.md.block.tokenize(state, contentStart, contentEnd);
111
+ state.parentType = oldParentType;
112
+ state.lineMax = oldLineMax;
113
+ }
114
+ // Close tab panel
115
+ const panelClose = state.push("tab_panel_close", "", -1);
116
+ panelClose.markup = slashes;
117
+ panelClose.block = true;
118
+ line = closeLine + 1;
119
+ // Skip blank lines between tab panels
120
+ while (line < endLine && state.isEmpty(line))
121
+ line++;
122
+ // Check if next line opens another tab with the same slash count
123
+ if (line < endLine) {
124
+ const nextLine = getLineText(state, line);
125
+ const match = BLOCKS_OPEN_RE.exec(nextLine);
126
+ if (match && match[1].length === slashCount && match[2] === "tab") {
127
+ title = match[3]?.trim() ?? "Tab";
128
+ continue;
129
+ }
130
+ }
131
+ // No more consecutive tabs
132
+ break;
133
+ }
134
+ // Close tab set
135
+ const setClose = state.push("tab_set_close", "", -1);
136
+ setClose.block = true;
137
+ // Update map
138
+ setOpen.map[1] = line;
139
+ return line;
140
+ }
141
+ function blocksRule(state, startLine, endLine, silent) {
142
+ const lineText = getLineText(state, startLine);
143
+ const match = BLOCKS_OPEN_RE.exec(lineText);
144
+ if (!match)
145
+ return false;
146
+ if (silent)
147
+ return true;
148
+ const slashCount = match[1].length;
149
+ const blockType = match[2];
150
+ const titleRaw = match[3] ?? null;
151
+ let nextLine;
152
+ if (blockType === "tab") {
153
+ const title = titleRaw?.trim() ?? "Tab";
154
+ nextLine = parseTabBlocks(state, startLine, endLine, slashCount, title);
155
+ }
156
+ else {
157
+ nextLine = parseSingleBlock(state, startLine, endLine, slashCount, blockType, titleRaw);
158
+ }
159
+ if (nextLine === -1)
160
+ return false;
161
+ state.line = nextLine;
162
+ return true;
163
+ }
164
+ /**
165
+ * Register the blocks syntax rule with markdown-it.
166
+ */
167
+ export function blocksPlugin(md) {
168
+ md.block.ruler.before("fence", "blocks", blocksRule, {
169
+ alt: ["paragraph", "reference", "blockquote", "list"],
170
+ });
171
+ }
172
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/rules/blocks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type MarkdownIt from "markdown-it";
2
+ /**
3
+ * Register the content tabs block rule with markdown-it.
4
+ */
5
+ export declare function contentTabsPlugin(md: MarkdownIt): void;
6
+ //# sourceMappingURL=content-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-tabs.d.ts","sourceRoot":"","sources":["../../src/rules/content-tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAqF1C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAItD"}
@@ -0,0 +1,67 @@
1
+ import { findIndentedBlockEnd, dedentAndTokenize } from "../utils/indent.js";
2
+ /**
3
+ * Matches a content tab line: === "Title"
4
+ */
5
+ const TAB_RE = /^===\s+"([^"]+)"\s*$/;
6
+ function getLineText(state, line) {
7
+ const pos = state.bMarks[line] + state.tShift[line];
8
+ const max = state.eMarks[line];
9
+ return state.src.slice(pos, max);
10
+ }
11
+ function contentTabsRule(state, startLine, endLine, silent) {
12
+ const firstLine = getLineText(state, startLine);
13
+ const firstMatch = TAB_RE.exec(firstLine);
14
+ if (!firstMatch)
15
+ return false;
16
+ if (silent)
17
+ return true;
18
+ // Open tab set
19
+ const setOpen = state.push("tab_set_open", "", 1);
20
+ setOpen.map = [startLine, startLine]; // updated at end
21
+ setOpen.block = true;
22
+ let line = startLine;
23
+ while (line < endLine) {
24
+ const lineText = getLineText(state, line);
25
+ const match = TAB_RE.exec(lineText);
26
+ if (!match)
27
+ break;
28
+ const title = match[1];
29
+ // Open tab panel
30
+ const panelOpen = state.push("tab_panel_open", "", 1);
31
+ panelOpen.info = title;
32
+ panelOpen.markup = "===";
33
+ panelOpen.block = true;
34
+ // Find indented content for this panel
35
+ const contentStart = line + 1;
36
+ const contentEnd = findIndentedBlockEnd(state, contentStart, endLine, 4);
37
+ panelOpen.map = [line, contentEnd];
38
+ // Recursively tokenize inner content
39
+ if (contentEnd > contentStart) {
40
+ dedentAndTokenize(state, contentStart, contentEnd, 4);
41
+ }
42
+ // Close tab panel
43
+ const panelClose = state.push("tab_panel_close", "", -1);
44
+ panelClose.markup = "===";
45
+ panelClose.block = true;
46
+ line = contentEnd;
47
+ // Skip blank lines between tab panels
48
+ while (line < endLine && state.isEmpty(line))
49
+ line++;
50
+ }
51
+ // Close tab set
52
+ const setClose = state.push("tab_set_close", "", -1);
53
+ setClose.block = true;
54
+ // Update map
55
+ setOpen.map[1] = line;
56
+ state.line = line;
57
+ return true;
58
+ }
59
+ /**
60
+ * Register the content tabs block rule with markdown-it.
61
+ */
62
+ export function contentTabsPlugin(md) {
63
+ md.block.ruler.before("fence", "content_tabs", contentTabsRule, {
64
+ alt: ["paragraph", "reference", "blockquote", "list"],
65
+ });
66
+ }
67
+ //# sourceMappingURL=content-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-tabs.js","sourceRoot":"","sources":["../../src/rules/content-tabs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type MarkdownIt from "markdown-it";
2
+ /**
3
+ * Register the Docusaurus admonition rule with markdown-it.
4
+ * Opt-in only — conflicts with mkdocstrings ::: directive.
5
+ */
6
+ export declare function docusaurusAdmonitionsPlugin(md: MarkdownIt): void;
7
+ //# sourceMappingURL=docusaurus-admonitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docusaurus-admonitions.d.ts","sourceRoot":"","sources":["../../src/rules/docusaurus-admonitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAgH1C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAIhE"}
@@ -0,0 +1,101 @@
1
+ import { resolveType, autoTitle } from "../utils/types.js";
2
+ /**
3
+ * Opening line regex for Docusaurus-style admonitions.
4
+ *
5
+ * Group 1: Colon delimiter — `:::`, `::::`, etc.
6
+ * Group 2: Block type keyword — `note`, `info`, `tip`, `caution`, `danger`, etc.
7
+ * Group 3: Title (optional) — text after the type keyword
8
+ */
9
+ const DOCUSAURUS_OPEN_RE = /^(:{3,})\s*([\w-]+)(?:\s+(.+?))?\s*$/;
10
+ function getLineText(state, line) {
11
+ const pos = state.bMarks[line] + state.tShift[line];
12
+ const max = state.eMarks[line];
13
+ return state.src.slice(pos, max);
14
+ }
15
+ /**
16
+ * Find the closing delimiter line that matches the given colon count.
17
+ */
18
+ function findClosingDelimiter(state, startLine, endLine, colonCount) {
19
+ const closeRe = new RegExp(`^:{${colonCount}}\\s*$`);
20
+ for (let line = startLine; line < endLine; line++) {
21
+ const text = getLineText(state, line);
22
+ if (closeRe.test(text))
23
+ return line;
24
+ }
25
+ return -1;
26
+ }
27
+ function docusaurusAdmonitionRule(state, startLine, endLine, silent) {
28
+ const lineText = getLineText(state, startLine);
29
+ const match = DOCUSAURUS_OPEN_RE.exec(lineText);
30
+ if (!match)
31
+ return false;
32
+ // Don't match mkdocstrings-style `::: module.Class` (dotted identifiers)
33
+ const blockType = match[2];
34
+ if (blockType.includes("."))
35
+ return false;
36
+ if (silent)
37
+ return true;
38
+ const colonCount = match[1].length;
39
+ const titleRaw = match[3] ?? null;
40
+ const contentStart = startLine + 1;
41
+ const closeLine = findClosingDelimiter(state, contentStart, endLine, colonCount);
42
+ if (closeLine === -1)
43
+ return false;
44
+ // Map Docusaurus types to MkDocs types
45
+ const typeMap = {
46
+ caution: "warning",
47
+ danger: "danger",
48
+ info: "info",
49
+ note: "note",
50
+ tip: "tip",
51
+ warning: "warning",
52
+ example: "example",
53
+ important: "warning",
54
+ };
55
+ const isDetails = blockType === "details";
56
+ const tokenType = isDetails ? "details" : "admonition";
57
+ const variant = isDetails ? "note" : resolveType(typeMap[blockType] ?? blockType);
58
+ let title;
59
+ if (titleRaw !== null) {
60
+ title = titleRaw.trim();
61
+ }
62
+ else if (isDetails) {
63
+ title = "Details";
64
+ }
65
+ else {
66
+ title = autoTitle(typeMap[blockType] ?? blockType);
67
+ }
68
+ const colons = ":".repeat(colonCount);
69
+ const openToken = state.push(`${tokenType}_open`, "", 1);
70
+ openToken.info = variant;
71
+ openToken.meta = { title, inline: null, open: false };
72
+ openToken.markup = colons;
73
+ openToken.map = [startLine, closeLine + 1];
74
+ openToken.block = true;
75
+ // Tokenize inner content
76
+ const contentEnd = closeLine;
77
+ if (contentEnd > contentStart) {
78
+ const oldParentType = state.parentType;
79
+ const oldLineMax = state.lineMax;
80
+ state.parentType = "admonition";
81
+ state.lineMax = contentEnd;
82
+ state.md.block.tokenize(state, contentStart, contentEnd);
83
+ state.parentType = oldParentType;
84
+ state.lineMax = oldLineMax;
85
+ }
86
+ const closeToken = state.push(`${tokenType}_close`, "", -1);
87
+ closeToken.markup = colons;
88
+ closeToken.block = true;
89
+ state.line = closeLine + 1;
90
+ return true;
91
+ }
92
+ /**
93
+ * Register the Docusaurus admonition rule with markdown-it.
94
+ * Opt-in only — conflicts with mkdocstrings ::: directive.
95
+ */
96
+ export function docusaurusAdmonitionsPlugin(md) {
97
+ md.block.ruler.before("fence", "docusaurus_admonition", docusaurusAdmonitionRule, {
98
+ alt: ["paragraph", "reference", "blockquote", "list"],
99
+ });
100
+ }
101
+ //# sourceMappingURL=docusaurus-admonitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docusaurus-admonitions.js","sourceRoot":"","sources":["../../src/rules/docusaurus-admonitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type MarkdownIt from "markdown-it";
2
+ export interface FileIncludeOptions {
3
+ root: string;
4
+ docsDir?: string;
5
+ }
6
+ export declare function langFromExtension(filePath: string): string;
7
+ /**
8
+ * Parse a line/highlight spec like "2,6:11,13:19" into sorted unique line numbers.
9
+ */
10
+ export declare function parseLineSpec(spec: string): number[];
11
+ /**
12
+ * Extract specific lines from content (1-based line numbers).
13
+ */
14
+ export declare function extractLines(content: string, lineNums: number[]): string;
15
+ /**
16
+ * Remap highlight line numbers from original file positions to positions
17
+ * within the extracted subset.
18
+ *
19
+ * If ln=[30,31,32,33,34,35,36,37,38] and hl=[31,32,33],
20
+ * then hl becomes positions [2,3,4] in the extracted subset.
21
+ */
22
+ export declare function remapHighlights(hlNums: number[], lnNums: number[]): number[];
23
+ /**
24
+ * Register the file include core rule with markdown-it.
25
+ * Runs after snippets but before normalize.
26
+ */
27
+ export declare function fileIncludePlugin(md: MarkdownIt, options: FileIncludeOptions): void;
28
+ //# sourceMappingURL=file-include.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-include.d.ts","sourceRoot":"","sources":["../../src/rules/file-include.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAK1C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuDD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAMxE;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,MAAM,EAAE,GACf,MAAM,EAAE,CAIV;AA6GD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,UAAU,EACd,OAAO,EAAE,kBAAkB,GAC1B,IAAI,CAEN"}
@@ -0,0 +1,198 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { resolve, extname } from "node:path";
3
+ /**
4
+ * Top-level file include: {* path [ln[...]] [hl[...]] *}
5
+ * Annotations can appear in either order.
6
+ */
7
+ const FILE_INCLUDE_RE = /^\{\*\s+(\S+?)(?:\s+(?:ln\[([^\]]+)\]|hl\[([^\]]+)\]))(?:\s+(?:ln\[([^\]]+)\]|hl\[([^\]]+)\]))?\s*\*\}$|^\{\*\s+(\S+?)\s*\*\}$/;
8
+ /**
9
+ * Simpler approach: match the whole line and extract parts.
10
+ */
11
+ const INCLUDE_LINE_RE = /^\{\*\s+(.+?)\s*\*\}$/;
12
+ const LN_RE = /ln\[([^\]]+)\]/;
13
+ const HL_RE = /hl\[([^\]]+)\]/;
14
+ /**
15
+ * Inline file include inside fences: {!> path !} or {!> path!}
16
+ */
17
+ const INLINE_INCLUDE_RE = /\{!>\s*(\S+?)!?\}/;
18
+ const LANG_MAP = {
19
+ ".py": "python",
20
+ ".js": "javascript",
21
+ ".ts": "typescript",
22
+ ".jsx": "jsx",
23
+ ".tsx": "tsx",
24
+ ".json": "json",
25
+ ".yaml": "yaml",
26
+ ".yml": "yaml",
27
+ ".toml": "toml",
28
+ ".html": "html",
29
+ ".css": "css",
30
+ ".sql": "sql",
31
+ ".sh": "bash",
32
+ ".bash": "bash",
33
+ ".zsh": "bash",
34
+ ".rs": "rust",
35
+ ".go": "go",
36
+ ".java": "java",
37
+ ".rb": "ruby",
38
+ ".php": "php",
39
+ ".c": "c",
40
+ ".cpp": "cpp",
41
+ ".h": "c",
42
+ ".hpp": "cpp",
43
+ ".md": "markdown",
44
+ ".xml": "xml",
45
+ ".graphql": "graphql",
46
+ ".ini": "ini",
47
+ ".env": "bash",
48
+ ".txt": "text",
49
+ ".dockerfile": "dockerfile",
50
+ };
51
+ export function langFromExtension(filePath) {
52
+ const ext = extname(filePath).toLowerCase();
53
+ return LANG_MAP[ext] || "text";
54
+ }
55
+ /**
56
+ * Parse a line/highlight spec like "2,6:11,13:19" into sorted unique line numbers.
57
+ */
58
+ export function parseLineSpec(spec) {
59
+ const nums = [];
60
+ for (const part of spec.split(",")) {
61
+ const trimmed = part.trim();
62
+ if (trimmed.includes(":")) {
63
+ const [startStr, endStr] = trimmed.split(":");
64
+ const start = parseInt(startStr, 10);
65
+ const end = parseInt(endStr, 10);
66
+ if (!isNaN(start) && !isNaN(end)) {
67
+ for (let i = start; i <= end; i++)
68
+ nums.push(i);
69
+ }
70
+ }
71
+ else {
72
+ const n = parseInt(trimmed, 10);
73
+ if (!isNaN(n))
74
+ nums.push(n);
75
+ }
76
+ }
77
+ return [...new Set(nums)].sort((a, b) => a - b);
78
+ }
79
+ /**
80
+ * Extract specific lines from content (1-based line numbers).
81
+ */
82
+ export function extractLines(content, lineNums) {
83
+ const allLines = content.split("\n");
84
+ const extracted = lineNums
85
+ .filter((n) => n >= 1 && n <= allLines.length)
86
+ .map((n) => allLines[n - 1]);
87
+ return extracted.join("\n");
88
+ }
89
+ /**
90
+ * Remap highlight line numbers from original file positions to positions
91
+ * within the extracted subset.
92
+ *
93
+ * If ln=[30,31,32,33,34,35,36,37,38] and hl=[31,32,33],
94
+ * then hl becomes positions [2,3,4] in the extracted subset.
95
+ */
96
+ export function remapHighlights(hlNums, lnNums) {
97
+ return hlNums
98
+ .map((h) => lnNums.indexOf(h) + 1)
99
+ .filter((pos) => pos > 0);
100
+ }
101
+ function createFileIncludeRule(options) {
102
+ return function fileIncludeRule(state) {
103
+ if (state.inlineMode)
104
+ return;
105
+ const lines = state.src.split("\n");
106
+ let changed = false;
107
+ const includes = [];
108
+ // Determine the base directory for resolving relative paths.
109
+ // {* *} paths resolve relative to the docsDir (mkdocs.yml docs_dir),
110
+ // or the root if docsDir is not set.
111
+ const baseDir = options.docsDir || options.root;
112
+ for (let i = 0; i < lines.length; i++) {
113
+ const line = lines[i].trim();
114
+ // Top-level file include: {* path [annotations] *}
115
+ const includeMatch = INCLUDE_LINE_RE.exec(line);
116
+ if (includeMatch) {
117
+ const inner = includeMatch[1];
118
+ // Extract path (first token) and annotations
119
+ const lnMatch = LN_RE.exec(inner);
120
+ const hlMatch = HL_RE.exec(inner);
121
+ // Path is everything before the first annotation (or the whole thing)
122
+ let path = inner;
123
+ const firstAnnotation = Math.min(lnMatch ? inner.indexOf("ln[") : Infinity, hlMatch ? inner.indexOf("hl[") : Infinity);
124
+ if (firstAnnotation !== Infinity) {
125
+ path = inner.substring(0, firstAnnotation).trim();
126
+ }
127
+ const absPath = resolve(baseDir, path);
128
+ let content;
129
+ try {
130
+ content = readFileSync(absPath, "utf-8");
131
+ includes.push(absPath);
132
+ }
133
+ catch {
134
+ // Leave line as-is if file not found
135
+ continue;
136
+ }
137
+ const lang = langFromExtension(path);
138
+ let lnNums = null;
139
+ let hlNums = null;
140
+ // Parse ln[] — line extraction
141
+ if (lnMatch) {
142
+ lnNums = parseLineSpec(lnMatch[1]);
143
+ content = extractLines(content, lnNums);
144
+ }
145
+ // Parse hl[] — highlights
146
+ if (hlMatch) {
147
+ hlNums = parseLineSpec(hlMatch[1]);
148
+ // Remap if ln was used
149
+ if (lnNums) {
150
+ hlNums = remapHighlights(hlNums, lnNums);
151
+ }
152
+ }
153
+ // Build fence info string
154
+ let info = lang;
155
+ if (hlNums && hlNums.length > 0) {
156
+ info += ` hl_lines="${hlNums.join(" ")}"`;
157
+ }
158
+ // Trim trailing newline from content
159
+ content = content.replace(/\n$/, "");
160
+ lines[i] = "```" + info + "\n" + content + "\n```";
161
+ changed = true;
162
+ continue;
163
+ }
164
+ // Inline file include inside fences: {!> path !}
165
+ if (INLINE_INCLUDE_RE.test(line)) {
166
+ const inlineMatch = INLINE_INCLUDE_RE.exec(line);
167
+ const path = inlineMatch[1];
168
+ const absPath = resolve(baseDir, path);
169
+ try {
170
+ const content = readFileSync(absPath, "utf-8").replace(/\n$/, "");
171
+ lines[i] = lines[i].replace(INLINE_INCLUDE_RE, content);
172
+ includes.push(absPath);
173
+ changed = true;
174
+ }
175
+ catch {
176
+ // Leave as-is
177
+ }
178
+ }
179
+ }
180
+ if (changed) {
181
+ state.src = lines.join("\n");
182
+ }
183
+ if (includes.length > 0) {
184
+ if (!state.env.includes) {
185
+ state.env.includes = [];
186
+ }
187
+ state.env.includes.push(...includes);
188
+ }
189
+ };
190
+ }
191
+ /**
192
+ * Register the file include core rule with markdown-it.
193
+ * Runs after snippets but before normalize.
194
+ */
195
+ export function fileIncludePlugin(md, options) {
196
+ md.core.ruler.before("normalize", "file_include", createFileIncludeRule(options));
197
+ }
198
+ //# sourceMappingURL=file-include.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-include.js","sourceRoot":"","sources":["../../src/rules/file-include.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type MarkdownIt from "markdown-it";
2
+ /**
3
+ * Register footnote block + inline rules with markdown-it.
4
+ */
5
+ export declare function footnotesPlugin(md: MarkdownIt): void;
6
+ //# sourceMappingURL=footnotes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footnotes.d.ts","sourceRoot":"","sources":["../../src/rules/footnotes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,aAAa,CAAC;AAuK1C;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAYpD"}