@mulmocast/slide 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -0
- package/lib/actions/bundle.js +14 -20
- package/lib/actions/bundle.js.map +1 -1
- package/lib/actions/common.d.ts +1 -1
- package/lib/actions/common.d.ts.map +1 -1
- package/lib/actions/common.js +26 -66
- package/lib/actions/common.js.map +1 -1
- package/lib/actions/movie.js +14 -20
- package/lib/actions/movie.js.map +1 -1
- package/lib/actions/preview.d.ts.map +1 -1
- package/lib/actions/preview.js +20 -56
- package/lib/actions/preview.js.map +1 -1
- package/lib/actions/upload.d.ts.map +1 -1
- package/lib/actions/upload.js +5 -44
- package/lib/actions/upload.js.map +1 -1
- package/lib/cli.js +104 -71
- package/lib/cli.js.map +1 -1
- package/lib/convert/markdown-plugins/directive.d.ts +17 -0
- package/lib/convert/markdown-plugins/directive.d.ts.map +1 -0
- package/lib/convert/markdown-plugins/directive.js +27 -0
- package/lib/convert/markdown-plugins/directive.js.map +1 -0
- package/lib/convert/markdown-plugins/index.d.ts +51 -0
- package/lib/convert/markdown-plugins/index.d.ts.map +1 -0
- package/lib/convert/markdown-plugins/index.js +105 -0
- package/lib/convert/markdown-plugins/index.js.map +1 -0
- package/lib/convert/markdown-plugins/layout.d.ts +91 -0
- package/lib/convert/markdown-plugins/layout.d.ts.map +1 -0
- package/lib/convert/markdown-plugins/layout.js +251 -0
- package/lib/convert/markdown-plugins/layout.js.map +1 -0
- package/lib/convert/markdown-plugins/mermaid.d.ts +10 -0
- package/lib/convert/markdown-plugins/mermaid.d.ts.map +1 -0
- package/lib/convert/markdown-plugins/mermaid.js +100 -0
- package/lib/convert/markdown-plugins/mermaid.js.map +1 -0
- package/lib/convert/markdown-plugins/types.d.ts +45 -0
- package/lib/convert/markdown-plugins/types.d.ts.map +1 -0
- package/lib/convert/markdown-plugins/types.js +8 -0
- package/lib/convert/markdown-plugins/types.js.map +1 -0
- package/lib/convert/markdown-transform.d.ts +42 -0
- package/lib/convert/markdown-transform.d.ts.map +1 -0
- package/lib/convert/markdown-transform.js +58 -0
- package/lib/convert/markdown-transform.js.map +1 -0
- package/lib/convert/markdown-utils-common.d.ts +21 -0
- package/lib/convert/markdown-utils-common.d.ts.map +1 -0
- package/lib/convert/markdown-utils-common.js +51 -0
- package/lib/convert/markdown-utils-common.js.map +1 -0
- package/lib/convert/markdown-utils.d.ts +34 -0
- package/lib/convert/markdown-utils.d.ts.map +1 -0
- package/lib/convert/markdown-utils.js +55 -0
- package/lib/convert/markdown-utils.js.map +1 -0
- package/lib/convert/markdown.d.ts +15 -0
- package/lib/convert/markdown.d.ts.map +1 -0
- package/lib/convert/markdown.js +149 -0
- package/lib/convert/markdown.js.map +1 -0
- package/lib/convert/marp.d.ts +5 -5
- package/lib/convert/marp.d.ts.map +1 -1
- package/lib/convert/marp.js +24 -96
- package/lib/convert/marp.js.map +1 -1
- package/lib/convert/movie.d.ts +1 -1
- package/lib/convert/movie.d.ts.map +1 -1
- package/lib/convert/movie.js +33 -65
- package/lib/convert/movie.js.map +1 -1
- package/lib/convert/movie_bundle.d.ts.map +1 -1
- package/lib/convert/movie_bundle.js +5 -44
- package/lib/convert/movie_bundle.js.map +1 -1
- package/lib/convert/pdf.d.ts +1 -1
- package/lib/convert/pdf.d.ts.map +1 -1
- package/lib/convert/pdf.js +18 -56
- package/lib/convert/pdf.js.map +1 -1
- package/lib/convert/pptx.d.ts +1 -1
- package/lib/convert/pptx.d.ts.map +1 -1
- package/lib/convert/pptx.js +31 -68
- package/lib/convert/pptx.js.map +1 -1
- package/lib/index.browser.d.ts +13 -0
- package/lib/index.browser.d.ts.map +1 -0
- package/lib/index.browser.js +13 -0
- package/lib/index.browser.js.map +1 -0
- package/lib/index.common.d.ts +17 -0
- package/lib/index.common.d.ts.map +1 -0
- package/lib/index.common.js +18 -0
- package/lib/index.common.js.map +1 -0
- package/lib/index.node.d.ts +11 -0
- package/lib/index.node.d.ts.map +1 -0
- package/lib/index.node.js +13 -0
- package/lib/index.node.js.map +1 -0
- package/lib/utils/audio-save.d.ts +7 -6
- package/lib/utils/audio-save.d.ts.map +1 -1
- package/lib/utils/audio-save.js +20 -71
- package/lib/utils/audio-save.js.map +1 -1
- package/lib/utils/bundle-server.js +6 -45
- package/lib/utils/bundle-server.js.map +1 -1
- package/lib/utils/dependencies.js +6 -43
- package/lib/utils/dependencies.js.map +1 -1
- package/lib/utils/lang-common.d.ts +10 -0
- package/lib/utils/lang-common.d.ts.map +1 -0
- package/lib/utils/lang-common.js +11 -0
- package/lib/utils/lang-common.js.map +1 -0
- package/lib/utils/lang.d.ts +3 -4
- package/lib/utils/lang.d.ts.map +1 -1
- package/lib/utils/lang.js +11 -21
- package/lib/utils/lang.js.map +1 -1
- package/lib/utils/llm.d.ts +1 -1
- package/lib/utils/llm.d.ts.map +1 -1
- package/lib/utils/llm.js +6 -46
- package/lib/utils/llm.js.map +1 -1
- package/lib/utils/pdf.d.ts +1 -1
- package/lib/utils/pdf.d.ts.map +1 -1
- package/lib/utils/pdf.js +13 -52
- package/lib/utils/pdf.js.map +1 -1
- package/lib/vue/main.js +4 -9
- package/lib/vue/main.js.map +1 -1
- package/package.json +28 -14
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/convert/markdown-plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,SAAS,GACT,WAAW,GACX,WAAW,GACX,WAAW,GACX,aAAa,GACb,SAAS,GACT,YAAY,GACZ;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExB;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,MAAM,CAAC;IAClE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;CAClF;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/convert/markdown-plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown to MulmoScript Pure Transform
|
|
3
|
+
*
|
|
4
|
+
* Browser-safe pure functions for converting markdown strings to MulmoScript JSON.
|
|
5
|
+
* No Node.js dependencies (no fs, path, process, franc).
|
|
6
|
+
*/
|
|
7
|
+
import type { MulmoBeat } from "mulmocast";
|
|
8
|
+
import type { SupportedLang } from "../utils/lang-common.js";
|
|
9
|
+
import type { SeparatorMode } from "./markdown-plugins/types.js";
|
|
10
|
+
export interface MarkdownToMulmoScriptOptions {
|
|
11
|
+
lang?: SupportedLang;
|
|
12
|
+
separator?: SeparatorMode;
|
|
13
|
+
mermaid?: boolean;
|
|
14
|
+
directive?: boolean;
|
|
15
|
+
layout?: boolean;
|
|
16
|
+
style?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface MulmoScriptData {
|
|
19
|
+
$mulmocast: {
|
|
20
|
+
version: string;
|
|
21
|
+
credit: string;
|
|
22
|
+
};
|
|
23
|
+
lang: SupportedLang;
|
|
24
|
+
beats: Partial<MulmoBeat>[];
|
|
25
|
+
}
|
|
26
|
+
export declare function slideToBeat(markdown: string, note: string, beat: Partial<MulmoBeat> | null, style?: string): Partial<MulmoBeat>;
|
|
27
|
+
export declare function slidesToMulmoScript(slides: {
|
|
28
|
+
markdown: string;
|
|
29
|
+
note: string;
|
|
30
|
+
beat: Partial<MulmoBeat> | null;
|
|
31
|
+
}[], lang: SupportedLang, style?: string): MulmoScriptData;
|
|
32
|
+
/**
|
|
33
|
+
* Convert markdown string to MulmoScript JSON (pure function, browser-safe).
|
|
34
|
+
*
|
|
35
|
+
* Unlike `convertMarkdown()`, this function:
|
|
36
|
+
* - Takes a markdown string (not a file path)
|
|
37
|
+
* - Does not perform file I/O
|
|
38
|
+
* - Does not call LLM for narration generation
|
|
39
|
+
* - Does not auto-detect language (requires explicit `lang` option, defaults to "en")
|
|
40
|
+
*/
|
|
41
|
+
export declare function markdownToMulmoScript(content: string, options?: MarkdownToMulmoScriptOptions): MulmoScriptData;
|
|
42
|
+
//# sourceMappingURL=markdown-transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-transform.d.ts","sourceRoot":"","sources":["../../src/convert/markdown-transform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE,MAAM,WAAW,4BAA4B;IAC3C,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;CAC7B;AAMD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,EAC/B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,CAYpB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAA;CAAE,EAAE,EAC7E,IAAI,EAAE,aAAa,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,CAMjB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,4BAA4B,GACrC,eAAe,CAiBjB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown to MulmoScript Pure Transform
|
|
3
|
+
*
|
|
4
|
+
* Browser-safe pure functions for converting markdown strings to MulmoScript JSON.
|
|
5
|
+
* No Node.js dependencies (no fs, path, process, franc).
|
|
6
|
+
*/
|
|
7
|
+
import { splitIntoSlides, processMarkdown } from "./markdown-plugins/index.js";
|
|
8
|
+
import { extractNotesFromSlide, extractMarkdownFromSlide } from "./markdown-utils-common.js";
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Beat Generation
|
|
11
|
+
// ============================================================================
|
|
12
|
+
export function slideToBeat(markdown, note, beat, style) {
|
|
13
|
+
if (beat?.image) {
|
|
14
|
+
return { text: ("text" in beat ? beat.text : undefined) || note, image: beat.image };
|
|
15
|
+
}
|
|
16
|
+
const markdownLines = extractMarkdownFromSlide(markdown);
|
|
17
|
+
return {
|
|
18
|
+
text: note,
|
|
19
|
+
image: style
|
|
20
|
+
? { type: "markdown", markdown: markdownLines, style }
|
|
21
|
+
: { type: "markdown", markdown: markdownLines },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function slidesToMulmoScript(slides, lang, style) {
|
|
25
|
+
return {
|
|
26
|
+
$mulmocast: { version: "1.1", credit: "closing" },
|
|
27
|
+
lang,
|
|
28
|
+
beats: slides.map((slide) => slideToBeat(slide.markdown, slide.note, slide.beat, style)),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Main Pure Transform
|
|
33
|
+
// ============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Convert markdown string to MulmoScript JSON (pure function, browser-safe).
|
|
36
|
+
*
|
|
37
|
+
* Unlike `convertMarkdown()`, this function:
|
|
38
|
+
* - Takes a markdown string (not a file path)
|
|
39
|
+
* - Does not perform file I/O
|
|
40
|
+
* - Does not call LLM for narration generation
|
|
41
|
+
* - Does not auto-detect language (requires explicit `lang` option, defaults to "en")
|
|
42
|
+
*/
|
|
43
|
+
export function markdownToMulmoScript(content, options) {
|
|
44
|
+
const separator = options?.separator ?? "horizontal-rule";
|
|
45
|
+
const lang = options?.lang ?? "en";
|
|
46
|
+
const rawSlides = splitIntoSlides(content, separator);
|
|
47
|
+
const slides = processMarkdown(rawSlides, {
|
|
48
|
+
mermaid: options?.mermaid,
|
|
49
|
+
directive: options?.directive,
|
|
50
|
+
layout: options?.layout,
|
|
51
|
+
}).map(({ markdown, beat }) => ({
|
|
52
|
+
markdown,
|
|
53
|
+
beat,
|
|
54
|
+
note: extractNotesFromSlide(markdown),
|
|
55
|
+
}));
|
|
56
|
+
return slidesToMulmoScript(slides, lang, options?.style);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=markdown-transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-transform.js","sourceRoot":"","sources":["../../src/convert/markdown-transform.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAiB7F,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,IAAY,EACZ,IAA+B,EAC/B,KAAc;IAEd,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACvF,CAAC;IAED,MAAM,aAAa,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO;QACL,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,KAAK;YACV,CAAC,CAAC,EAAE,IAAI,EAAE,UAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE;YAC/D,CAAC,CAAC,EAAE,IAAI,EAAE,UAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA6E,EAC7E,IAAmB,EACnB,KAAc;IAEd,OAAO;QACL,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;QACjD,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,OAAsC;IAEtC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,iBAAiB,CAAC;IAC1D,MAAM,IAAI,GAAkB,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;IAElD,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,EAAE;QACxC,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;KACxB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9B,QAAQ;QACR,IAAI;QACJ,IAAI,EAAE,qBAAqB,CAAC,QAAQ,CAAC;KACtC,CAAC,CAAC,CAAC;IAEJ,OAAO,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Converter Utilities (browser-safe)
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for markdown processing with no Node.js dependencies.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Patterns to exclude from speaker notes
|
|
8
|
+
* Common code comments that should not be treated as narration
|
|
9
|
+
* Requires colon after keyword to avoid false positives (e.g., "Note 1" is OK)
|
|
10
|
+
*/
|
|
11
|
+
export declare const EXCLUDED_NOTE_PATTERNS: RegExp[];
|
|
12
|
+
/**
|
|
13
|
+
* Extract speaker notes from HTML comments in a slide
|
|
14
|
+
* Excludes directive-like comments and common code comments (TODO, FIXME, etc.)
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractNotesFromSlide(slideContent: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Extract markdown content from a slide (removes HTML comments)
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractMarkdownFromSlide(slideContent: string): string[];
|
|
21
|
+
//# sourceMappingURL=markdown-utils-common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-utils-common.d.ts","sourceRoot":"","sources":["../../src/convert/markdown-utils-common.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,UAUlC,CAAC;AASF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAMvE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Converter Utilities (browser-safe)
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for markdown processing with no Node.js dependencies.
|
|
5
|
+
*/
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Constants
|
|
8
|
+
// ============================================================================
|
|
9
|
+
/**
|
|
10
|
+
* Patterns to exclude from speaker notes
|
|
11
|
+
* Common code comments that should not be treated as narration
|
|
12
|
+
* Requires colon after keyword to avoid false positives (e.g., "Note 1" is OK)
|
|
13
|
+
*/
|
|
14
|
+
export const EXCLUDED_NOTE_PATTERNS = [
|
|
15
|
+
/^TODO:/i,
|
|
16
|
+
/^FIXME:/i,
|
|
17
|
+
/^HACK:/i,
|
|
18
|
+
/^XXX:/i,
|
|
19
|
+
/^NOTE:/i,
|
|
20
|
+
/^BUG:/i,
|
|
21
|
+
/^WARN(ING)?:/i,
|
|
22
|
+
/^DEPRECATED:/i,
|
|
23
|
+
/^REVIEW:/i,
|
|
24
|
+
];
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Speaker Notes Extraction
|
|
27
|
+
// ============================================================================
|
|
28
|
+
const isExcludedComment = (comment) => EXCLUDED_NOTE_PATTERNS.some((pattern) => pattern.test(comment));
|
|
29
|
+
/**
|
|
30
|
+
* Extract speaker notes from HTML comments in a slide
|
|
31
|
+
* Excludes directive-like comments and common code comments (TODO, FIXME, etc.)
|
|
32
|
+
*/
|
|
33
|
+
export function extractNotesFromSlide(slideContent) {
|
|
34
|
+
const commentRegex = /<!--\s*([\s\S]*?)\s*-->/g;
|
|
35
|
+
return [...slideContent.matchAll(commentRegex)]
|
|
36
|
+
.map((m) => m[1].trim())
|
|
37
|
+
.filter((comment) => comment.length > 0)
|
|
38
|
+
.filter((comment) => !isExcludedComment(comment))
|
|
39
|
+
.join("\n");
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Extract markdown content from a slide (removes HTML comments)
|
|
43
|
+
*/
|
|
44
|
+
export function extractMarkdownFromSlide(slideContent) {
|
|
45
|
+
const slideWithoutNotes = slideContent.replace(/<!--\s*[\s\S]*?\s*-->/g, "");
|
|
46
|
+
return slideWithoutNotes
|
|
47
|
+
.split("\n")
|
|
48
|
+
.map((line) => line.trim())
|
|
49
|
+
.filter((line) => line.length > 0);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=markdown-utils-common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-utils-common.js","sourceRoot":"","sources":["../../src/convert/markdown-utils-common.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,SAAS;IACT,UAAU;IACV,SAAS;IACT,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,eAAe;IACf,eAAe;IACf,WAAW;CACZ,CAAC;AAEF,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAW,EAAE,CACrD,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAElE;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB;IACxD,MAAM,YAAY,GAAG,0BAA0B,CAAC;IAChD,OAAO,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACvB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;SAChD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,YAAoB;IAC3D,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IAC7E,OAAO,iBAAiB;SACrB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Converter Utilities
|
|
3
|
+
*
|
|
4
|
+
* Types, constants, and helper functions for markdown conversion.
|
|
5
|
+
*/
|
|
6
|
+
import { type MulmoBeat } from "mulmocast";
|
|
7
|
+
import type { SupportedLang } from "../utils/lang.js";
|
|
8
|
+
import type { SeparatorMode } from "./markdown-plugins/index.js";
|
|
9
|
+
export { EXCLUDED_NOTE_PATTERNS, extractNotesFromSlide, extractMarkdownFromSlide, } from "./markdown-utils-common.js";
|
|
10
|
+
export interface Slide {
|
|
11
|
+
markdown: string;
|
|
12
|
+
beat: Partial<MulmoBeat> | null;
|
|
13
|
+
note: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ConvertMarkdownOptions {
|
|
16
|
+
inputPath: string;
|
|
17
|
+
outputDir?: string;
|
|
18
|
+
lang?: SupportedLang;
|
|
19
|
+
generateText?: boolean;
|
|
20
|
+
separator?: SeparatorMode;
|
|
21
|
+
mermaid?: boolean;
|
|
22
|
+
directive?: boolean;
|
|
23
|
+
layout?: boolean;
|
|
24
|
+
style?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ConvertMarkdownResult {
|
|
27
|
+
mulmoScriptPath: string;
|
|
28
|
+
slideCount: number;
|
|
29
|
+
}
|
|
30
|
+
export declare const SEPARATOR_CHOICES: readonly ["horizontal-rule", "heading", "heading-1", "heading-2", "heading-3", "blank-lines", "comment", "page-break"];
|
|
31
|
+
export declare function readMarkdownFile(inputPath: string): string;
|
|
32
|
+
export declare function setupOutputDirectory(basename: string, customOutputDir?: string): string;
|
|
33
|
+
export declare function writeMulmoScript(outputFolder: string, data: unknown): string;
|
|
34
|
+
//# sourceMappingURL=markdown-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-utils.d.ts","sourceRoot":"","sources":["../../src/convert/markdown-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAMpC,MAAM,WAAW,KAAK;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,eAAO,MAAM,iBAAiB,wHASpB,CAAC;AAMX,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAY1D;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAQvF;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAW5E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Converter Utilities
|
|
3
|
+
*
|
|
4
|
+
* Types, constants, and helper functions for markdown conversion.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from "fs";
|
|
7
|
+
import * as path from "path";
|
|
8
|
+
import { mulmoScriptSchema } from "mulmocast";
|
|
9
|
+
// Re-export browser-safe utilities
|
|
10
|
+
export { EXCLUDED_NOTE_PATTERNS, extractNotesFromSlide, extractMarkdownFromSlide, } from "./markdown-utils-common.js";
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Constants
|
|
13
|
+
// ============================================================================
|
|
14
|
+
export const SEPARATOR_CHOICES = [
|
|
15
|
+
"horizontal-rule",
|
|
16
|
+
"heading",
|
|
17
|
+
"heading-1",
|
|
18
|
+
"heading-2",
|
|
19
|
+
"heading-3",
|
|
20
|
+
"blank-lines",
|
|
21
|
+
"comment",
|
|
22
|
+
"page-break",
|
|
23
|
+
];
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// File I/O
|
|
26
|
+
// ============================================================================
|
|
27
|
+
export function readMarkdownFile(inputPath) {
|
|
28
|
+
const resolvedPath = path.resolve(inputPath);
|
|
29
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
30
|
+
throw new Error(`File not found: ${resolvedPath}`);
|
|
31
|
+
}
|
|
32
|
+
if (!resolvedPath.endsWith(".md")) {
|
|
33
|
+
throw new Error("Input file must be a .md (Markdown) file");
|
|
34
|
+
}
|
|
35
|
+
return fs.readFileSync(resolvedPath, "utf-8");
|
|
36
|
+
}
|
|
37
|
+
export function setupOutputDirectory(basename, customOutputDir) {
|
|
38
|
+
const outputFolder = customOutputDir || path.join(process.cwd(), "scripts", basename);
|
|
39
|
+
if (!fs.existsSync(outputFolder)) {
|
|
40
|
+
fs.mkdirSync(outputFolder, { recursive: true });
|
|
41
|
+
}
|
|
42
|
+
return outputFolder;
|
|
43
|
+
}
|
|
44
|
+
export function writeMulmoScript(outputFolder, data) {
|
|
45
|
+
const result = mulmoScriptSchema.safeParse(data);
|
|
46
|
+
if (!result.success) {
|
|
47
|
+
console.error("MulmoScript validation failed:");
|
|
48
|
+
console.error(result.error.format());
|
|
49
|
+
throw new Error("Invalid MulmoScript generated");
|
|
50
|
+
}
|
|
51
|
+
const scriptPath = path.join(outputFolder, "mulmo_script.json");
|
|
52
|
+
fs.writeFileSync(scriptPath, JSON.stringify(result.data, null, 2), "utf-8");
|
|
53
|
+
return scriptPath;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=markdown-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-utils.js","sourceRoot":"","sources":["../../src/convert/markdown-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAkB,MAAM,WAAW,CAAC;AAI9D,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AA6BpC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,iBAAiB;IACjB,SAAS;IACT,WAAW;IACX,WAAW;IACX,WAAW;IACX,aAAa;IACb,SAAS;IACT,YAAY;CACJ,CAAC;AAEX,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,eAAwB;IAC7E,MAAM,YAAY,GAAG,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEtF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,IAAa;IAClE,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IAChE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Markdown to MulmoScript converter
|
|
4
|
+
*
|
|
5
|
+
* Converts plain markdown files to MulmoScript format.
|
|
6
|
+
* Supports multiple separator modes and plugin system.
|
|
7
|
+
*/
|
|
8
|
+
import { type ConvertMarkdownOptions, type ConvertMarkdownResult, extractNotesFromSlide, extractMarkdownFromSlide } from "./markdown-utils.js";
|
|
9
|
+
export type { ConvertMarkdownOptions, ConvertMarkdownResult };
|
|
10
|
+
export { extractNotesFromSlide, extractMarkdownFromSlide };
|
|
11
|
+
/**
|
|
12
|
+
* Convert markdown file to MulmoScript
|
|
13
|
+
*/
|
|
14
|
+
export declare function convertMarkdown(options: ConvertMarkdownOptions): Promise<ConvertMarkdownResult>;
|
|
15
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/convert/markdown.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAQH,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAE1B,qBAAqB,EACrB,wBAAwB,EAIzB,MAAM,qBAAqB,CAAC;AAI7B,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,CAAC;AAE3D;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA2EhC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Markdown to MulmoScript converter
|
|
4
|
+
*
|
|
5
|
+
* Converts plain markdown files to MulmoScript format.
|
|
6
|
+
* Supports multiple separator modes and plugin system.
|
|
7
|
+
*/
|
|
8
|
+
import * as path from "path";
|
|
9
|
+
import yargs from "yargs";
|
|
10
|
+
import { hideBin } from "yargs/helpers";
|
|
11
|
+
import { resolveLang, langOption } from "../utils/lang.js";
|
|
12
|
+
import { generateTextFromMarkdown } from "../utils/llm.js";
|
|
13
|
+
import { splitIntoSlides, processMarkdown } from "./markdown-plugins/index.js";
|
|
14
|
+
import { SEPARATOR_CHOICES, extractNotesFromSlide, extractMarkdownFromSlide, readMarkdownFile, setupOutputDirectory, writeMulmoScript, } from "./markdown-utils.js";
|
|
15
|
+
import { slidesToMulmoScript } from "./markdown-transform.js";
|
|
16
|
+
export { extractNotesFromSlide, extractMarkdownFromSlide };
|
|
17
|
+
/**
|
|
18
|
+
* Convert markdown file to MulmoScript
|
|
19
|
+
*/
|
|
20
|
+
export async function convertMarkdown(options) {
|
|
21
|
+
const inputPath = path.resolve(options.inputPath);
|
|
22
|
+
const separator = options.separator ?? "horizontal-rule";
|
|
23
|
+
console.log("Starting Markdown to MulmoScript conversion...\n");
|
|
24
|
+
console.log(`Input file: ${inputPath}`);
|
|
25
|
+
console.log(`Separator: ${typeof separator === "string" ? separator : "custom pattern"}`);
|
|
26
|
+
// Setup
|
|
27
|
+
const basename = path.basename(inputPath, ".md");
|
|
28
|
+
const outputFolder = setupOutputDirectory(basename, options.outputDir);
|
|
29
|
+
console.log(`Output directory: ${outputFolder}`);
|
|
30
|
+
// Read and split into slides
|
|
31
|
+
const content = readMarkdownFile(inputPath);
|
|
32
|
+
const rawSlides = splitIntoSlides(content, separator);
|
|
33
|
+
console.log(`Found ${rawSlides.length} slides`);
|
|
34
|
+
// Log enabled plugins
|
|
35
|
+
const enabledPlugins = [
|
|
36
|
+
options.mermaid && "mermaid",
|
|
37
|
+
options.directive && "directive",
|
|
38
|
+
options.layout && "layout",
|
|
39
|
+
].filter(Boolean);
|
|
40
|
+
if (enabledPlugins.length > 0) {
|
|
41
|
+
console.log(`Applying plugins: ${enabledPlugins.join(", ")}`);
|
|
42
|
+
}
|
|
43
|
+
// Process slides: apply plugins and extract notes
|
|
44
|
+
const slides = processMarkdown(rawSlides, {
|
|
45
|
+
mermaid: options.mermaid,
|
|
46
|
+
directive: options.directive,
|
|
47
|
+
layout: options.layout,
|
|
48
|
+
}).map(({ markdown, beat }) => ({
|
|
49
|
+
markdown,
|
|
50
|
+
beat,
|
|
51
|
+
note: extractNotesFromSlide(markdown),
|
|
52
|
+
}));
|
|
53
|
+
// Resolve language
|
|
54
|
+
const lang = resolveLang(options.lang, slides.map((slide) => slide.note));
|
|
55
|
+
// Generate narration text with LLM if requested
|
|
56
|
+
if (options.generateText) {
|
|
57
|
+
console.log("Generating narration text with LLM...");
|
|
58
|
+
const slideData = slides.map((slide, index) => ({
|
|
59
|
+
index,
|
|
60
|
+
markdown: extractMarkdownFromSlide(slide.markdown),
|
|
61
|
+
existingText: slide.note,
|
|
62
|
+
}));
|
|
63
|
+
const generatedTexts = await generateTextFromMarkdown({
|
|
64
|
+
slides: slideData,
|
|
65
|
+
lang,
|
|
66
|
+
title: basename,
|
|
67
|
+
});
|
|
68
|
+
generatedTexts.forEach((generated) => {
|
|
69
|
+
slides[generated.index].note = generated.text;
|
|
70
|
+
});
|
|
71
|
+
console.log(`Generated text for ${generatedTexts.length} slides`);
|
|
72
|
+
}
|
|
73
|
+
// Generate and write MulmoScript
|
|
74
|
+
console.log("Generating MulmoScript JSON...");
|
|
75
|
+
const mulmoScript = slidesToMulmoScript(slides, lang, options.style);
|
|
76
|
+
const mulmoScriptPath = writeMulmoScript(outputFolder, mulmoScript);
|
|
77
|
+
console.log(`✓ Created ${mulmoScriptPath}`);
|
|
78
|
+
console.log(`\n✓ Successfully converted ${slides.length} slides to MulmoScript`);
|
|
79
|
+
return { mulmoScriptPath, slideCount: slides.length };
|
|
80
|
+
}
|
|
81
|
+
// ============================================================================
|
|
82
|
+
// CLI
|
|
83
|
+
// ============================================================================
|
|
84
|
+
async function main() {
|
|
85
|
+
const argv = await yargs(hideBin(process.argv))
|
|
86
|
+
.usage("Usage: $0 <markdown-file.md> [options]")
|
|
87
|
+
.command("$0 <file>", "Convert Markdown to MulmoScript", (yargs) => {
|
|
88
|
+
return yargs.positional("file", {
|
|
89
|
+
describe: "Markdown file to convert",
|
|
90
|
+
type: "string",
|
|
91
|
+
demandOption: true,
|
|
92
|
+
});
|
|
93
|
+
})
|
|
94
|
+
.options({
|
|
95
|
+
...langOption,
|
|
96
|
+
g: {
|
|
97
|
+
alias: "generate-text",
|
|
98
|
+
type: "boolean",
|
|
99
|
+
description: "Generate narration text using LLM",
|
|
100
|
+
default: false,
|
|
101
|
+
},
|
|
102
|
+
s: {
|
|
103
|
+
alias: "separator",
|
|
104
|
+
type: "string",
|
|
105
|
+
description: "Slide separator mode",
|
|
106
|
+
choices: SEPARATOR_CHOICES,
|
|
107
|
+
default: "horizontal-rule",
|
|
108
|
+
},
|
|
109
|
+
mermaid: {
|
|
110
|
+
type: "boolean",
|
|
111
|
+
description: "Convert mermaid code blocks to mermaid beat type",
|
|
112
|
+
default: false,
|
|
113
|
+
},
|
|
114
|
+
directive: {
|
|
115
|
+
type: "boolean",
|
|
116
|
+
description: "Remove Marp-style directives (<!-- _class: ... -->)",
|
|
117
|
+
default: false,
|
|
118
|
+
},
|
|
119
|
+
layout: {
|
|
120
|
+
type: "boolean",
|
|
121
|
+
description: "Auto-detect layout based on content (row-2, 2x2)",
|
|
122
|
+
default: false,
|
|
123
|
+
},
|
|
124
|
+
style: {
|
|
125
|
+
type: "string",
|
|
126
|
+
description: "Markdown slide style (e.g., corporate-blue, finance-green)",
|
|
127
|
+
},
|
|
128
|
+
})
|
|
129
|
+
.help()
|
|
130
|
+
.parse();
|
|
131
|
+
await convertMarkdown({
|
|
132
|
+
inputPath: argv.file,
|
|
133
|
+
lang: argv.l,
|
|
134
|
+
generateText: argv.g,
|
|
135
|
+
separator: argv.s,
|
|
136
|
+
mermaid: argv.mermaid,
|
|
137
|
+
directive: argv.directive,
|
|
138
|
+
layout: argv.layout,
|
|
139
|
+
style: argv.style,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const isDirectRun = process.argv[1]?.endsWith("markdown.ts") || process.argv[1]?.endsWith("markdown.js");
|
|
143
|
+
if (isDirectRun) {
|
|
144
|
+
main().catch((error) => {
|
|
145
|
+
console.error("\n✗ Error:", error instanceof Error ? error.message : String(error));
|
|
146
|
+
process.exit(1);
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/convert/markdown.ts"],"names":[],"mappings":"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"}
|
package/lib/convert/marp.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
|
-
import { type SupportedLang } from "../utils/lang";
|
|
2
|
+
import { type SupportedLang } from "../utils/lang.js";
|
|
3
|
+
import { extractNotesFromSlide, extractMarkdownFromSlide } from "./markdown-utils-common.js";
|
|
4
|
+
export { extractNotesFromSlide, extractMarkdownFromSlide };
|
|
3
5
|
export interface ConvertMarpOptions {
|
|
4
6
|
inputPath: string;
|
|
5
7
|
outputDir?: string;
|
|
@@ -14,9 +16,7 @@ export interface ConvertMarpResult {
|
|
|
14
16
|
slideCount: number;
|
|
15
17
|
}
|
|
16
18
|
export declare function parseSlides(content: string): string[];
|
|
17
|
-
export declare
|
|
18
|
-
export declare
|
|
19
|
-
export declare function extractMarkdownFromSlide(slideContent: string): string[];
|
|
20
|
-
export declare function extractMarkdownFromSlides(slides: string[]): string[][];
|
|
19
|
+
export declare const extractNotesFromSlides: (slides: string[]) => string[];
|
|
20
|
+
export declare const extractMarkdownFromSlides: (slides: string[]) => string[][];
|
|
21
21
|
export declare function convertMarp(options: ConvertMarpOptions): Promise<ConvertMarpResult>;
|
|
22
22
|
//# sourceMappingURL=marp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marp.d.ts","sourceRoot":"","sources":["../../src/convert/marp.ts"],"names":[],"mappings":";AAWA,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"marp.d.ts","sourceRoot":"","sources":["../../src/convert/marp.ts"],"names":[],"mappings":";AAWA,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG7F,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAUrD;AAED,eAAO,MAAM,sBAAsB,GAAI,QAAQ,MAAM,EAAE,KAAG,MAAM,EAC7B,CAAC;AAEpC,eAAO,MAAM,yBAAyB,GAAI,QAAQ,MAAM,EAAE,KAAG,MAAM,EAAE,EAC/B,CAAC;AAyMvC,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8FzF"}
|