emdp 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 (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/dist/cjs/cli.js +36 -0
  4. package/dist/cjs/gfm.js +26 -0
  5. package/dist/cjs/index.js +26 -0
  6. package/dist/cjs/parser/block-parser.js +644 -0
  7. package/dist/cjs/parser/blocks/blockquote.js +28 -0
  8. package/dist/cjs/parser/blocks/code-block-fenced.js +58 -0
  9. package/dist/cjs/parser/blocks/code-block-indented.js +47 -0
  10. package/dist/cjs/parser/blocks/heading-atx.js +29 -0
  11. package/dist/cjs/parser/blocks/heading-setext.js +24 -0
  12. package/dist/cjs/parser/blocks/html-block.js +83 -0
  13. package/dist/cjs/parser/blocks/link-reference.js +109 -0
  14. package/dist/cjs/parser/blocks/list.js +155 -0
  15. package/dist/cjs/parser/blocks/paragraph.js +20 -0
  16. package/dist/cjs/parser/blocks/table.js +163 -0
  17. package/dist/cjs/parser/blocks/task-list.js +66 -0
  18. package/dist/cjs/parser/blocks/thematic-break.js +17 -0
  19. package/dist/cjs/parser/entities.js +2133 -0
  20. package/dist/cjs/parser/gfm/block-parser.js +773 -0
  21. package/dist/cjs/parser/gfm/index.js +125 -0
  22. package/dist/cjs/parser/gfm/inline-parser.js +813 -0
  23. package/dist/cjs/parser/gfm/renderer.js +513 -0
  24. package/dist/cjs/parser/index.js +104 -0
  25. package/dist/cjs/parser/inline-parser.js +564 -0
  26. package/dist/cjs/parser/inlines/autolink-extended.js +364 -0
  27. package/dist/cjs/parser/inlines/autolink.js +44 -0
  28. package/dist/cjs/parser/inlines/code-span.js +48 -0
  29. package/dist/cjs/parser/inlines/emphasis.js +64 -0
  30. package/dist/cjs/parser/inlines/entity.js +25 -0
  31. package/dist/cjs/parser/inlines/escape.js +25 -0
  32. package/dist/cjs/parser/inlines/footnote.js +41 -0
  33. package/dist/cjs/parser/inlines/hard-break.js +45 -0
  34. package/dist/cjs/parser/inlines/image.js +9 -0
  35. package/dist/cjs/parser/inlines/link.js +166 -0
  36. package/dist/cjs/parser/inlines/soft-break.js +18 -0
  37. package/dist/cjs/parser/inlines/strikethrough.js +48 -0
  38. package/dist/cjs/parser/inlines/text.js +20 -0
  39. package/dist/cjs/parser/renderer.js +345 -0
  40. package/dist/cjs/parser/types.js +5 -0
  41. package/dist/cjs/parser/utils.js +277 -0
  42. package/dist/cli.d.ts +6 -0
  43. package/dist/cli.js +36 -0
  44. package/dist/esm/cli.js +34 -0
  45. package/dist/esm/gfm.js +5 -0
  46. package/dist/esm/index.js +5 -0
  47. package/dist/esm/package.json +3 -0
  48. package/dist/esm/parser/block-parser.js +640 -0
  49. package/dist/esm/parser/blocks/blockquote.js +22 -0
  50. package/dist/esm/parser/blocks/code-block-fenced.js +52 -0
  51. package/dist/esm/parser/blocks/code-block-indented.js +42 -0
  52. package/dist/esm/parser/blocks/heading-atx.js +24 -0
  53. package/dist/esm/parser/blocks/heading-setext.js +19 -0
  54. package/dist/esm/parser/blocks/html-block.js +77 -0
  55. package/dist/esm/parser/blocks/link-reference.js +105 -0
  56. package/dist/esm/parser/blocks/list.js +145 -0
  57. package/dist/esm/parser/blocks/paragraph.js +15 -0
  58. package/dist/esm/parser/blocks/table.js +152 -0
  59. package/dist/esm/parser/blocks/task-list.js +61 -0
  60. package/dist/esm/parser/blocks/thematic-break.js +13 -0
  61. package/dist/esm/parser/entities.js +2130 -0
  62. package/dist/esm/parser/gfm/block-parser.js +769 -0
  63. package/dist/esm/parser/gfm/index.js +115 -0
  64. package/dist/esm/parser/gfm/inline-parser.js +809 -0
  65. package/dist/esm/parser/gfm/renderer.js +509 -0
  66. package/dist/esm/parser/index.js +80 -0
  67. package/dist/esm/parser/inline-parser.js +560 -0
  68. package/dist/esm/parser/inlines/autolink-extended.js +357 -0
  69. package/dist/esm/parser/inlines/autolink.js +40 -0
  70. package/dist/esm/parser/inlines/code-span.js +44 -0
  71. package/dist/esm/parser/inlines/emphasis.js +59 -0
  72. package/dist/esm/parser/inlines/entity.js +21 -0
  73. package/dist/esm/parser/inlines/escape.js +21 -0
  74. package/dist/esm/parser/inlines/footnote.js +38 -0
  75. package/dist/esm/parser/inlines/hard-break.js +41 -0
  76. package/dist/esm/parser/inlines/image.js +4 -0
  77. package/dist/esm/parser/inlines/link.js +156 -0
  78. package/dist/esm/parser/inlines/soft-break.js +14 -0
  79. package/dist/esm/parser/inlines/strikethrough.js +42 -0
  80. package/dist/esm/parser/inlines/text.js +16 -0
  81. package/dist/esm/parser/renderer.js +341 -0
  82. package/dist/esm/parser/types.js +4 -0
  83. package/dist/esm/parser/utils.js +254 -0
  84. package/dist/gfm.d.ts +6 -0
  85. package/dist/gfm.js +26 -0
  86. package/dist/index.d.ts +5 -0
  87. package/dist/index.js +26 -0
  88. package/dist/parser/block-parser.d.ts +25 -0
  89. package/dist/parser/block-parser.js +644 -0
  90. package/dist/parser/blocks/blockquote.d.ts +8 -0
  91. package/dist/parser/blocks/blockquote.js +28 -0
  92. package/dist/parser/blocks/code-block-fenced.d.ts +14 -0
  93. package/dist/parser/blocks/code-block-fenced.js +58 -0
  94. package/dist/parser/blocks/code-block-indented.d.ts +7 -0
  95. package/dist/parser/blocks/code-block-indented.js +47 -0
  96. package/dist/parser/blocks/heading-atx.d.ts +10 -0
  97. package/dist/parser/blocks/heading-atx.js +29 -0
  98. package/dist/parser/blocks/heading-setext.d.ts +8 -0
  99. package/dist/parser/blocks/heading-setext.js +24 -0
  100. package/dist/parser/blocks/html-block.d.ts +9 -0
  101. package/dist/parser/blocks/html-block.js +83 -0
  102. package/dist/parser/blocks/link-reference.d.ts +11 -0
  103. package/dist/parser/blocks/link-reference.js +109 -0
  104. package/dist/parser/blocks/list.d.ts +25 -0
  105. package/dist/parser/blocks/list.js +155 -0
  106. package/dist/parser/blocks/paragraph.d.ts +7 -0
  107. package/dist/parser/blocks/paragraph.js +20 -0
  108. package/dist/parser/blocks/table.d.ts +13 -0
  109. package/dist/parser/blocks/table.js +163 -0
  110. package/dist/parser/blocks/task-list.d.ts +10 -0
  111. package/dist/parser/blocks/task-list.js +66 -0
  112. package/dist/parser/blocks/thematic-break.d.ts +6 -0
  113. package/dist/parser/blocks/thematic-break.js +17 -0
  114. package/dist/parser/entities.d.ts +4 -0
  115. package/dist/parser/entities.js +2133 -0
  116. package/dist/parser/gfm/block-parser.d.ts +32 -0
  117. package/dist/parser/gfm/block-parser.js +773 -0
  118. package/dist/parser/gfm/index.d.ts +31 -0
  119. package/dist/parser/gfm/index.js +125 -0
  120. package/dist/parser/gfm/inline-parser.d.ts +25 -0
  121. package/dist/parser/gfm/inline-parser.js +813 -0
  122. package/dist/parser/gfm/renderer.d.ts +43 -0
  123. package/dist/parser/gfm/renderer.js +513 -0
  124. package/dist/parser/index.d.ts +33 -0
  125. package/dist/parser/index.js +104 -0
  126. package/dist/parser/inline-parser.d.ts +16 -0
  127. package/dist/parser/inline-parser.js +564 -0
  128. package/dist/parser/inlines/autolink-extended.d.ts +24 -0
  129. package/dist/parser/inlines/autolink-extended.js +364 -0
  130. package/dist/parser/inlines/autolink.d.ts +9 -0
  131. package/dist/parser/inlines/autolink.js +44 -0
  132. package/dist/parser/inlines/code-span.d.ts +9 -0
  133. package/dist/parser/inlines/code-span.js +48 -0
  134. package/dist/parser/inlines/emphasis.d.ts +14 -0
  135. package/dist/parser/inlines/emphasis.js +64 -0
  136. package/dist/parser/inlines/entity.d.ts +8 -0
  137. package/dist/parser/inlines/entity.js +25 -0
  138. package/dist/parser/inlines/escape.d.ts +8 -0
  139. package/dist/parser/inlines/escape.js +25 -0
  140. package/dist/parser/inlines/footnote.d.ts +9 -0
  141. package/dist/parser/inlines/footnote.js +41 -0
  142. package/dist/parser/inlines/hard-break.d.ts +9 -0
  143. package/dist/parser/inlines/hard-break.js +45 -0
  144. package/dist/parser/inlines/image.d.ts +4 -0
  145. package/dist/parser/inlines/image.js +9 -0
  146. package/dist/parser/inlines/link.d.ts +33 -0
  147. package/dist/parser/inlines/link.js +166 -0
  148. package/dist/parser/inlines/soft-break.d.ts +9 -0
  149. package/dist/parser/inlines/soft-break.js +18 -0
  150. package/dist/parser/inlines/strikethrough.d.ts +16 -0
  151. package/dist/parser/inlines/strikethrough.js +48 -0
  152. package/dist/parser/inlines/text.d.ts +6 -0
  153. package/dist/parser/inlines/text.js +20 -0
  154. package/dist/parser/renderer.d.ts +33 -0
  155. package/dist/parser/renderer.js +345 -0
  156. package/dist/parser/types.d.ts +152 -0
  157. package/dist/parser/types.js +5 -0
  158. package/dist/parser/utils.d.ts +32 -0
  159. package/dist/parser/utils.js +277 -0
  160. package/dist/types/cli.d.ts +6 -0
  161. package/dist/types/gfm.d.ts +6 -0
  162. package/dist/types/index.d.ts +5 -0
  163. package/dist/types/parser/block-parser.d.ts +25 -0
  164. package/dist/types/parser/blocks/blockquote.d.ts +8 -0
  165. package/dist/types/parser/blocks/code-block-fenced.d.ts +14 -0
  166. package/dist/types/parser/blocks/code-block-indented.d.ts +7 -0
  167. package/dist/types/parser/blocks/heading-atx.d.ts +10 -0
  168. package/dist/types/parser/blocks/heading-setext.d.ts +8 -0
  169. package/dist/types/parser/blocks/html-block.d.ts +9 -0
  170. package/dist/types/parser/blocks/link-reference.d.ts +11 -0
  171. package/dist/types/parser/blocks/list.d.ts +25 -0
  172. package/dist/types/parser/blocks/paragraph.d.ts +7 -0
  173. package/dist/types/parser/blocks/table.d.ts +13 -0
  174. package/dist/types/parser/blocks/task-list.d.ts +10 -0
  175. package/dist/types/parser/blocks/thematic-break.d.ts +6 -0
  176. package/dist/types/parser/entities.d.ts +4 -0
  177. package/dist/types/parser/gfm/block-parser.d.ts +32 -0
  178. package/dist/types/parser/gfm/index.d.ts +31 -0
  179. package/dist/types/parser/gfm/inline-parser.d.ts +25 -0
  180. package/dist/types/parser/gfm/renderer.d.ts +43 -0
  181. package/dist/types/parser/index.d.ts +33 -0
  182. package/dist/types/parser/inline-parser.d.ts +16 -0
  183. package/dist/types/parser/inlines/autolink-extended.d.ts +24 -0
  184. package/dist/types/parser/inlines/autolink.d.ts +9 -0
  185. package/dist/types/parser/inlines/code-span.d.ts +9 -0
  186. package/dist/types/parser/inlines/emphasis.d.ts +14 -0
  187. package/dist/types/parser/inlines/entity.d.ts +8 -0
  188. package/dist/types/parser/inlines/escape.d.ts +8 -0
  189. package/dist/types/parser/inlines/footnote.d.ts +9 -0
  190. package/dist/types/parser/inlines/hard-break.d.ts +9 -0
  191. package/dist/types/parser/inlines/image.d.ts +4 -0
  192. package/dist/types/parser/inlines/link.d.ts +33 -0
  193. package/dist/types/parser/inlines/soft-break.d.ts +9 -0
  194. package/dist/types/parser/inlines/strikethrough.d.ts +16 -0
  195. package/dist/types/parser/inlines/text.d.ts +6 -0
  196. package/dist/types/parser/renderer.d.ts +33 -0
  197. package/dist/types/parser/types.d.ts +152 -0
  198. package/dist/types/parser/utils.d.ts +32 -0
  199. package/package.json +54 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * GFM parser entry point that exposes the CommonMark superset with GFM extensions.
3
+ */
4
+ import type { DocumentNode, ParseOptions, RenderOptions } from '../types.js';
5
+ import { GFMBlockParser } from './block-parser.js';
6
+ import { GFMInlineParser } from './inline-parser.js';
7
+ import { GFMHtmlRenderer } from './renderer.js';
8
+ export { GFMBlockParser } from './block-parser.js';
9
+ export { GFMInlineParser } from './inline-parser.js';
10
+ export { GFMHtmlRenderer } from './renderer.js';
11
+ export declare class GFMParser {
12
+ private blockParser;
13
+ private inlineParser;
14
+ private options;
15
+ constructor(options?: ParseOptions);
16
+ parse(input: string): DocumentNode;
17
+ private processInlines;
18
+ }
19
+ export declare function parse(input: string, options?: ParseOptions): DocumentNode;
20
+ export declare function render(document: DocumentNode, options?: RenderOptions): string;
21
+ export declare function gfm(input: string, options?: ParseOptions & RenderOptions): string;
22
+ declare const _default: {
23
+ parse: typeof parse;
24
+ render: typeof render;
25
+ gfm: typeof gfm;
26
+ GFMParser: typeof GFMParser;
27
+ GFMBlockParser: typeof GFMBlockParser;
28
+ GFMInlineParser: typeof GFMInlineParser;
29
+ GFMHtmlRenderer: typeof GFMHtmlRenderer;
30
+ };
31
+ export default _default;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * GFM parser entry point that exposes the CommonMark superset with GFM extensions.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.GFMParser = exports.GFMHtmlRenderer = exports.GFMInlineParser = exports.GFMBlockParser = void 0;
7
+ exports.parse = parse;
8
+ exports.render = render;
9
+ exports.gfm = gfm;
10
+ const block_parser_js_1 = require("./block-parser.js");
11
+ const inline_parser_js_1 = require("./inline-parser.js");
12
+ const renderer_js_1 = require("./renderer.js");
13
+ var block_parser_js_2 = require("./block-parser.js");
14
+ Object.defineProperty(exports, "GFMBlockParser", { enumerable: true, get: function () { return block_parser_js_2.GFMBlockParser; } });
15
+ var inline_parser_js_2 = require("./inline-parser.js");
16
+ Object.defineProperty(exports, "GFMInlineParser", { enumerable: true, get: function () { return inline_parser_js_2.GFMInlineParser; } });
17
+ var renderer_js_2 = require("./renderer.js");
18
+ Object.defineProperty(exports, "GFMHtmlRenderer", { enumerable: true, get: function () { return renderer_js_2.GFMHtmlRenderer; } });
19
+ const DEFAULT_GFM_EXTENSIONS = new Set([
20
+ 'table',
21
+ 'strikethrough',
22
+ 'tasklist',
23
+ 'autolink',
24
+ 'tagfilter',
25
+ 'footnotes',
26
+ ]);
27
+ function normalizeExtensions(extensions) {
28
+ if (extensions === undefined) {
29
+ return new Set(DEFAULT_GFM_EXTENSIONS);
30
+ }
31
+ return new Set(extensions.map(ext => ext.trim()).filter(Boolean));
32
+ }
33
+ class GFMParser {
34
+ blockParser;
35
+ inlineParser;
36
+ options;
37
+ constructor(options = {}) {
38
+ this.options = options;
39
+ const extensions = normalizeExtensions(options.extensions);
40
+ this.blockParser = new block_parser_js_1.GFMBlockParser(extensions);
41
+ this.inlineParser = new inline_parser_js_1.GFMInlineParser(extensions);
42
+ }
43
+ parse(input) {
44
+ const { document, linkReferences, footnoteDefinitions } = this.blockParser.parse(input);
45
+ this.inlineParser.setLinkReferences(linkReferences);
46
+ this.inlineParser.setFootnoteDefinitions(footnoteDefinitions);
47
+ this.processInlines(document, linkReferences, footnoteDefinitions);
48
+ document.footnoteDefinitions = footnoteDefinitions;
49
+ return document;
50
+ }
51
+ processInlines(document, linkReferences, footnoteDefinitions) {
52
+ const processBlock = (block) => {
53
+ if (block.type === 'paragraph') {
54
+ const para = block;
55
+ const rawContent = para.rawContent;
56
+ if (rawContent) {
57
+ para.children = this.inlineParser.parse(rawContent);
58
+ delete para.rawContent;
59
+ }
60
+ }
61
+ else if (block.type === 'heading') {
62
+ const heading = block;
63
+ const rawContent = heading.rawContent;
64
+ if (rawContent) {
65
+ heading.children = this.inlineParser.parse(rawContent);
66
+ delete heading.rawContent;
67
+ }
68
+ }
69
+ else if (block.type === 'blockquote') {
70
+ block.children.forEach(processBlock);
71
+ }
72
+ else if (block.type === 'list') {
73
+ block.children.forEach(item => {
74
+ item.children.forEach(processBlock);
75
+ });
76
+ }
77
+ else if (block.type === 'list_item') {
78
+ block.children.forEach(processBlock);
79
+ }
80
+ else if (block.type === 'table') {
81
+ const table = block;
82
+ for (const row of table.children) {
83
+ for (const cell of row.children) {
84
+ const rawContent = cell.rawContent;
85
+ if (rawContent !== undefined) {
86
+ cell.children = this.inlineParser.parse(rawContent);
87
+ delete cell.rawContent;
88
+ }
89
+ }
90
+ }
91
+ }
92
+ };
93
+ document.children.forEach(processBlock);
94
+ footnoteDefinitions.forEach(def => {
95
+ def.blocks.forEach(processBlock);
96
+ });
97
+ }
98
+ }
99
+ exports.GFMParser = GFMParser;
100
+ function parse(input, options) {
101
+ const parser = new GFMParser(options);
102
+ return parser.parse(input);
103
+ }
104
+ function render(document, options) {
105
+ const renderer = new renderer_js_1.GFMHtmlRenderer(options);
106
+ return renderer.render(document);
107
+ }
108
+ function gfm(input, options) {
109
+ const extensions = normalizeExtensions(options?.extensions);
110
+ const document = parse(input, { ...options, extensions: Array.from(extensions) });
111
+ const renderOptions = {
112
+ ...options,
113
+ tagfilter: options?.tagfilter ?? extensions.has('tagfilter'),
114
+ };
115
+ return render(document, renderOptions);
116
+ }
117
+ exports.default = {
118
+ parse,
119
+ render,
120
+ gfm,
121
+ GFMParser,
122
+ GFMBlockParser: block_parser_js_1.GFMBlockParser,
123
+ GFMInlineParser: inline_parser_js_1.GFMInlineParser,
124
+ GFMHtmlRenderer: renderer_js_1.GFMHtmlRenderer,
125
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * GFM inline parser that extends CommonMark with strikethrough and extended autolinks.
3
+ */
4
+ import type { InlineNode, LinkReferenceDefinition, FootnoteDefinition } from '../types.js';
5
+ export declare class GFMInlineParser {
6
+ private linkReferences;
7
+ private footnoteDefinitions;
8
+ private enableAutolink;
9
+ private enableStrikethrough;
10
+ private enableFootnotes;
11
+ private enableTagfilter;
12
+ constructor(extensions?: Set<string>);
13
+ setLinkReferences(refs: Map<string, LinkReferenceDefinition>): void;
14
+ setFootnoteDefinitions(defs: Map<string, FootnoteDefinition>): void;
15
+ parse(text: string): InlineNode[];
16
+ private extractTextFromNodes;
17
+ private normalizeLabelForMatching;
18
+ private processEmphasisAndStrikethrough;
19
+ private processStrikethrough;
20
+ private processEmphasis;
21
+ private flattenNestedEmphasis;
22
+ private computeDelimiterRun;
23
+ private getFirstChar;
24
+ private getLastChar;
25
+ }