marhup 0.1.7
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 +377 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +99 -0
- package/dist/cli.js.map +1 -0
- package/dist/generator/code.d.ts +17 -0
- package/dist/generator/code.d.ts.map +1 -0
- package/dist/generator/code.js +36 -0
- package/dist/generator/code.js.map +1 -0
- package/dist/generator/image.d.ts +17 -0
- package/dist/generator/image.d.ts.map +1 -0
- package/dist/generator/image.js +186 -0
- package/dist/generator/image.js.map +1 -0
- package/dist/generator/index.d.ts +11 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +22 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/list.d.ts +17 -0
- package/dist/generator/list.d.ts.map +1 -0
- package/dist/generator/list.js +33 -0
- package/dist/generator/list.js.map +1 -0
- package/dist/generator/mermaid.d.ts +17 -0
- package/dist/generator/mermaid.d.ts.map +1 -0
- package/dist/generator/mermaid.js +192 -0
- package/dist/generator/mermaid.js.map +1 -0
- package/dist/generator/pptx.d.ts +9 -0
- package/dist/generator/pptx.d.ts.map +1 -0
- package/dist/generator/pptx.js +90 -0
- package/dist/generator/pptx.js.map +1 -0
- package/dist/generator/table.d.ts +17 -0
- package/dist/generator/table.d.ts.map +1 -0
- package/dist/generator/table.js +48 -0
- package/dist/generator/table.js.map +1 -0
- package/dist/generator/text.d.ts +21 -0
- package/dist/generator/text.d.ts.map +1 -0
- package/dist/generator/text.js +57 -0
- package/dist/generator/text.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/auto.d.ts +30 -0
- package/dist/layout/auto.d.ts.map +1 -0
- package/dist/layout/auto.js +155 -0
- package/dist/layout/auto.js.map +1 -0
- package/dist/layout/engine.d.ts +27 -0
- package/dist/layout/engine.d.ts.map +1 -0
- package/dist/layout/engine.js +59 -0
- package/dist/layout/engine.js.map +1 -0
- package/dist/layout/index.d.ts +7 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +14 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/types.d.ts +22 -0
- package/dist/layout/types.d.ts.map +1 -0
- package/dist/layout/types.js +6 -0
- package/dist/layout/types.js.map +1 -0
- package/dist/mcp-handlers.d.ts +33 -0
- package/dist/mcp-handlers.d.ts.map +1 -0
- package/dist/mcp-handlers.js +280 -0
- package/dist/mcp-handlers.js.map +1 -0
- package/dist/mcp.d.ts +7 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +44 -0
- package/dist/mcp.js.map +1 -0
- package/dist/parser/frontmatter.d.ts +19 -0
- package/dist/parser/frontmatter.d.ts.map +1 -0
- package/dist/parser/frontmatter.js +51 -0
- package/dist/parser/frontmatter.js.map +1 -0
- package/dist/parser/grid.d.ts +36 -0
- package/dist/parser/grid.d.ts.map +1 -0
- package/dist/parser/grid.js +92 -0
- package/dist/parser/grid.js.map +1 -0
- package/dist/parser/index.d.ts +7 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +17 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/markdown.d.ts +9 -0
- package/dist/parser/markdown.d.ts.map +1 -0
- package/dist/parser/markdown.js +296 -0
- package/dist/parser/markdown.js.map +1 -0
- package/dist/theme/default.d.ts +11 -0
- package/dist/theme/default.d.ts.map +1 -0
- package/dist/theme/default.js +76 -0
- package/dist/theme/default.js.map +1 -0
- package/dist/theme/index.d.ts +5 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +11 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* テーブル要素の生成
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addTableElement = addTableElement;
|
|
7
|
+
const index_1 = require("../theme/index");
|
|
8
|
+
/**
|
|
9
|
+
* テーブル要素を追加
|
|
10
|
+
*/
|
|
11
|
+
function addTableElement(slide, element, coords, _styleProps) {
|
|
12
|
+
const tableData = element.content;
|
|
13
|
+
// ヘッダー行
|
|
14
|
+
const headerRow = tableData.headers.map((header) => ({
|
|
15
|
+
text: header,
|
|
16
|
+
options: {
|
|
17
|
+
fill: { color: index_1.defaultTheme.colors.primary.replace('#', '') },
|
|
18
|
+
color: 'ffffff',
|
|
19
|
+
bold: true,
|
|
20
|
+
fontSize: index_1.defaultTheme.fontSize.body - 2,
|
|
21
|
+
fontFace: index_1.defaultTheme.fonts.body,
|
|
22
|
+
align: 'center',
|
|
23
|
+
valign: 'middle',
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
// データ行
|
|
27
|
+
const dataRows = tableData.rows.map((row, rowIndex) => row.map((cell) => ({
|
|
28
|
+
text: cell,
|
|
29
|
+
options: {
|
|
30
|
+
fill: { color: rowIndex % 2 === 0 ? 'ffffff' : 'f8fafc' },
|
|
31
|
+
color: index_1.defaultTheme.colors.text.replace('#', ''),
|
|
32
|
+
fontSize: index_1.defaultTheme.fontSize.body - 2,
|
|
33
|
+
fontFace: index_1.defaultTheme.fonts.body,
|
|
34
|
+
align: 'left',
|
|
35
|
+
valign: 'middle',
|
|
36
|
+
},
|
|
37
|
+
})));
|
|
38
|
+
const allRows = [headerRow, ...dataRows];
|
|
39
|
+
slide.addTable(allRows, {
|
|
40
|
+
x: coords.x,
|
|
41
|
+
y: coords.y,
|
|
42
|
+
w: coords.w,
|
|
43
|
+
h: coords.h,
|
|
44
|
+
border: { type: 'solid', color: 'e2e8f0', pt: 1 },
|
|
45
|
+
colW: Array(tableData.headers.length).fill(coords.w / tableData.headers.length),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/generator/table.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAiBH,0CA+CC;AA3DD,0CAA8C;AAS9C;;GAEG;AACH,SAAgB,eAAe,CAC7B,KAAsB,EACtB,OAAsB,EACtB,MAAmB,EACnB,WAAoC;IAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAoB,CAAC;IAE/C,QAAQ;IACR,MAAM,SAAS,GAA0B,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1E,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE;YACP,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAC7D,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,oBAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;YACxC,QAAQ,EAAE,oBAAY,CAAC,KAAK,CAAC,IAAI;YACjC,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,QAAQ;SACjB;KACF,CAAC,CAAC,CAAC;IAEJ,OAAO;IACP,MAAM,QAAQ,GAA4B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAC7E,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjB,IAAI,EAAE,IAAI;QACV,OAAO,EAAE;YACP,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;YACzD,KAAK,EAAE,oBAAY,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;YAChD,QAAQ,EAAE,oBAAY,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;YACxC,QAAQ,EAAE,oBAAY,CAAC,KAAK,CAAC,IAAI;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,QAAQ;SACjB;KACF,CAAC,CAAC,CACJ,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC;IAEzC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE;QACtB,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE;QACjD,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;KAChF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* テキスト要素の生成
|
|
3
|
+
*/
|
|
4
|
+
import type PptxGenJS from 'pptxgenjs';
|
|
5
|
+
import type { PlacedElement } from '../layout/index';
|
|
6
|
+
interface Coordinates {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
w: number;
|
|
10
|
+
h: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 見出し要素を追加
|
|
14
|
+
*/
|
|
15
|
+
export declare function addHeadingElement(slide: PptxGenJS.Slide, element: PlacedElement, coords: Coordinates, styleProps: Record<string, unknown>): void;
|
|
16
|
+
/**
|
|
17
|
+
* 段落要素を追加
|
|
18
|
+
*/
|
|
19
|
+
export declare function addTextElement(slide: PptxGenJS.Slide, element: PlacedElement, coords: Coordinates, styleProps: Record<string, unknown>): void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/generator/text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,UAAU,WAAW;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CA6BN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI,CAeN"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* テキスト要素の生成
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addHeadingElement = addHeadingElement;
|
|
7
|
+
exports.addTextElement = addTextElement;
|
|
8
|
+
const index_1 = require("../theme/index");
|
|
9
|
+
/**
|
|
10
|
+
* 見出し要素を追加
|
|
11
|
+
*/
|
|
12
|
+
function addHeadingElement(slide, element, coords, styleProps) {
|
|
13
|
+
const level = element.level || 1;
|
|
14
|
+
const content = element.content;
|
|
15
|
+
// レベルに応じたフォントサイズ
|
|
16
|
+
const fontSizeMap = {
|
|
17
|
+
1: index_1.defaultTheme.fontSize.h1,
|
|
18
|
+
2: index_1.defaultTheme.fontSize.h2,
|
|
19
|
+
3: index_1.defaultTheme.fontSize.h3,
|
|
20
|
+
4: 20,
|
|
21
|
+
5: 18,
|
|
22
|
+
6: 16,
|
|
23
|
+
};
|
|
24
|
+
const fontSize = fontSizeMap[level] || index_1.defaultTheme.fontSize.body;
|
|
25
|
+
slide.addText(content, {
|
|
26
|
+
x: coords.x,
|
|
27
|
+
y: coords.y,
|
|
28
|
+
w: coords.w,
|
|
29
|
+
h: coords.h,
|
|
30
|
+
fontSize,
|
|
31
|
+
bold: level <= 2,
|
|
32
|
+
color: index_1.defaultTheme.colors.text.replace('#', ''),
|
|
33
|
+
fontFace: index_1.defaultTheme.fonts.title,
|
|
34
|
+
align: level === 1 ? 'center' : 'left',
|
|
35
|
+
valign: 'middle',
|
|
36
|
+
...styleProps,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 段落要素を追加
|
|
41
|
+
*/
|
|
42
|
+
function addTextElement(slide, element, coords, styleProps) {
|
|
43
|
+
const content = element.content;
|
|
44
|
+
slide.addText(content, {
|
|
45
|
+
x: coords.x,
|
|
46
|
+
y: coords.y,
|
|
47
|
+
w: coords.w,
|
|
48
|
+
h: coords.h,
|
|
49
|
+
fontSize: index_1.defaultTheme.fontSize.body,
|
|
50
|
+
color: index_1.defaultTheme.colors.text.replace('#', ''),
|
|
51
|
+
fontFace: index_1.defaultTheme.fonts.body,
|
|
52
|
+
align: 'left',
|
|
53
|
+
valign: 'top',
|
|
54
|
+
...styleProps,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/generator/text.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAgBH,8CAkCC;AAKD,wCAoBC;AAvED,0CAA8C;AAS9C;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,KAAsB,EACtB,OAAsB,EACtB,MAAmB,EACnB,UAAmC;IAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAiB,CAAC;IAE1C,iBAAiB;IACjB,MAAM,WAAW,GAA2B;QAC1C,CAAC,EAAE,oBAAY,CAAC,QAAQ,CAAC,EAAE;QAC3B,CAAC,EAAE,oBAAY,CAAC,QAAQ,CAAC,EAAE;QAC3B,CAAC,EAAE,oBAAY,CAAC,QAAQ,CAAC,EAAE;QAC3B,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,EAAE;QACL,CAAC,EAAE,EAAE;KACN,CAAC;IAEF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,oBAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;IAElE,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QACrB,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,QAAQ;QACR,IAAI,EAAE,KAAK,IAAI,CAAC;QAChB,KAAK,EAAE,oBAAY,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QAChD,QAAQ,EAAE,oBAAY,CAAC,KAAK,CAAC,KAAK;QAClC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM;QACtC,MAAM,EAAE,QAAQ;QAChB,GAAG,UAAU;KACd,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAAsB,EACtB,OAAsB,EACtB,MAAmB,EACnB,UAAmC;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAiB,CAAC;IAE1C,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QACrB,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,QAAQ,EAAE,oBAAY,CAAC,QAAQ,CAAC,IAAI;QACpC,KAAK,EAAE,oBAAY,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QAChD,QAAQ,EAAE,oBAAY,CAAC,KAAK,CAAC,IAAI;QACjC,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK;QACb,GAAG,UAAU;KACd,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* marhup - Markdown to PowerPoint converter
|
|
3
|
+
* メインエクスポート
|
|
4
|
+
*/
|
|
5
|
+
import type { ConvertOptions, ParsedDocument } from './types/index';
|
|
6
|
+
/**
|
|
7
|
+
* MarkdownからPPTXを生成
|
|
8
|
+
*/
|
|
9
|
+
export declare function marhup(markdown: string, options: ConvertOptions): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* MarkdownファイルからPPTXを生成
|
|
12
|
+
*/
|
|
13
|
+
export declare function marhupFile(inputPath: string, options: ConvertOptions): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Markdownをパースして構造を返す(デバッグ用)
|
|
16
|
+
*/
|
|
17
|
+
export declare function parse(markdown: string): ParsedDocument;
|
|
18
|
+
export type { ConvertOptions, ParsedDocument, Slide, SlideElement, GridPosition, StyleOptions, ThemeConfig, } from './types/index.js';
|
|
19
|
+
export default marhup;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpE;;GAEG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAEtD;AAGD,YAAY,EACV,cAAc,EACd,cAAc,EACd,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,eAAe,MAAM,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* marhup - Markdown to PowerPoint converter
|
|
4
|
+
* メインエクスポート
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.marhup = marhup;
|
|
41
|
+
exports.marhupFile = marhupFile;
|
|
42
|
+
exports.parse = parse;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const index_1 = require("./parser/index");
|
|
46
|
+
const index_2 = require("./generator/index");
|
|
47
|
+
/**
|
|
48
|
+
* MarkdownからPPTXを生成
|
|
49
|
+
*/
|
|
50
|
+
async function marhup(markdown, options) {
|
|
51
|
+
// パース
|
|
52
|
+
const document = (0, index_1.parseMarkdown)(markdown);
|
|
53
|
+
// PPTX生成
|
|
54
|
+
await (0, index_2.generatePptx)(document, options.output, options.basePath);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* MarkdownファイルからPPTXを生成
|
|
58
|
+
*/
|
|
59
|
+
async function marhupFile(inputPath, options) {
|
|
60
|
+
const markdown = fs.readFileSync(inputPath, 'utf-8');
|
|
61
|
+
// 入力ファイルのディレクトリをベースパスとして設定
|
|
62
|
+
const basePath = options.basePath || path.dirname(path.resolve(inputPath));
|
|
63
|
+
await marhup(markdown, { ...options, basePath });
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Markdownをパースして構造を返す(デバッグ用)
|
|
67
|
+
*/
|
|
68
|
+
function parse(markdown) {
|
|
69
|
+
return (0, index_1.parseMarkdown)(markdown);
|
|
70
|
+
}
|
|
71
|
+
// デフォルトエクスポート
|
|
72
|
+
exports.default = marhup;
|
|
73
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWH,wBASC;AAKD,gCAQC;AAKD,sBAEC;AAtCD,uCAAyB;AACzB,2CAA6B;AAC7B,0CAA+C;AAC/C,6CAAiD;AAGjD;;GAEG;AACI,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,OAAuB;IAEvB,MAAM;IACN,MAAM,QAAQ,GAAG,IAAA,qBAAa,EAAC,QAAQ,CAAC,CAAC;IAEzC,SAAS;IACT,MAAM,IAAA,oBAAY,EAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAC9B,SAAiB,EACjB,OAAuB;IAEvB,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,QAAgB;IACpC,OAAO,IAAA,qBAAa,EAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAaD,cAAc;AACd,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 自動配置ロジック
|
|
3
|
+
*/
|
|
4
|
+
import type { SlideElement, GridConfig, GridPosition } from '../types/index.js';
|
|
5
|
+
import type { GridMap, PlacedElement } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* 空のグリッドマップを作成
|
|
8
|
+
*/
|
|
9
|
+
export declare function createEmptyGridMap(cols: number, rows: number): GridMap;
|
|
10
|
+
/**
|
|
11
|
+
* グリッドマップに要素を配置
|
|
12
|
+
*/
|
|
13
|
+
export declare function placeOnGrid(gridMap: GridMap, position: GridPosition, elementIndex: number): void;
|
|
14
|
+
/**
|
|
15
|
+
* 指定位置が空いているかチェック
|
|
16
|
+
*/
|
|
17
|
+
export declare function isAreaAvailable(gridMap: GridMap, position: GridPosition): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* 要素の高さを推定
|
|
20
|
+
*/
|
|
21
|
+
export declare function estimateElementHeight(element: SlideElement): number;
|
|
22
|
+
/**
|
|
23
|
+
* 利用可能な位置を検索
|
|
24
|
+
*/
|
|
25
|
+
export declare function findAvailablePosition(gridMap: GridMap, startRow: number, height: number, grid: GridConfig): GridPosition | null;
|
|
26
|
+
/**
|
|
27
|
+
* 要素を自動配置
|
|
28
|
+
*/
|
|
29
|
+
export declare function autoPlaceElements(elements: SlideElement[], grid: GridConfig): PlacedElement[];
|
|
30
|
+
//# sourceMappingURL=auto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../../src/layout/auto.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAazD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAItE;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,EACtB,YAAY,EAAE,MAAM,GACnB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAgBnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GACf,YAAY,GAAG,IAAI,CAuBrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,EAAE,EACxB,IAAI,EAAE,UAAU,GACf,aAAa,EAAE,CA2DjB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 自動配置ロジック
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createEmptyGridMap = createEmptyGridMap;
|
|
7
|
+
exports.placeOnGrid = placeOnGrid;
|
|
8
|
+
exports.isAreaAvailable = isAreaAvailable;
|
|
9
|
+
exports.estimateElementHeight = estimateElementHeight;
|
|
10
|
+
exports.findAvailablePosition = findAvailablePosition;
|
|
11
|
+
exports.autoPlaceElements = autoPlaceElements;
|
|
12
|
+
// 要素タイプごとのデフォルト高さ
|
|
13
|
+
const ELEMENT_HEIGHT = {
|
|
14
|
+
heading: 1,
|
|
15
|
+
paragraph: 2,
|
|
16
|
+
list: 3,
|
|
17
|
+
image: 4,
|
|
18
|
+
table: 3,
|
|
19
|
+
code: 3,
|
|
20
|
+
blockquote: 2,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* 空のグリッドマップを作成
|
|
24
|
+
*/
|
|
25
|
+
function createEmptyGridMap(cols, rows) {
|
|
26
|
+
return Array.from({ length: rows }, () => Array.from({ length: cols }, () => ({ occupied: false })));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* グリッドマップに要素を配置
|
|
30
|
+
*/
|
|
31
|
+
function placeOnGrid(gridMap, position, elementIndex) {
|
|
32
|
+
for (let row = position.rowStart - 1; row < position.rowEnd; row++) {
|
|
33
|
+
for (let col = position.colStart - 1; col < position.colEnd; col++) {
|
|
34
|
+
if (row >= 0 && row < gridMap.length && col >= 0 && col < gridMap[0].length) {
|
|
35
|
+
gridMap[row][col] = { occupied: true, elementIndex };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 指定位置が空いているかチェック
|
|
42
|
+
*/
|
|
43
|
+
function isAreaAvailable(gridMap, position) {
|
|
44
|
+
for (let row = position.rowStart - 1; row < position.rowEnd; row++) {
|
|
45
|
+
for (let col = position.colStart - 1; col < position.colEnd; col++) {
|
|
46
|
+
if (row < 0 || row >= gridMap.length || col < 0 || col >= gridMap[0].length) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
if (gridMap[row][col].occupied) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 要素の高さを推定
|
|
58
|
+
*/
|
|
59
|
+
function estimateElementHeight(element) {
|
|
60
|
+
const baseHeight = ELEMENT_HEIGHT[element.type] || 2;
|
|
61
|
+
// リストの場合、アイテム数に応じて調整
|
|
62
|
+
if (element.type === 'list' && Array.isArray(element.content)) {
|
|
63
|
+
const itemCount = element.content.length;
|
|
64
|
+
return Math.min(Math.ceil(itemCount / 2) + 1, 6);
|
|
65
|
+
}
|
|
66
|
+
// テーブルの場合、行数に応じて調整
|
|
67
|
+
if (element.type === 'table' && typeof element.content === 'object' && 'rows' in element.content) {
|
|
68
|
+
const rowCount = element.content.rows.length + 1; // ヘッダー含む
|
|
69
|
+
return Math.min(rowCount, 6);
|
|
70
|
+
}
|
|
71
|
+
return baseHeight;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 利用可能な位置を検索
|
|
75
|
+
*/
|
|
76
|
+
function findAvailablePosition(gridMap, startRow, height, grid) {
|
|
77
|
+
const { cols, rows } = grid;
|
|
78
|
+
// 指定行から下に向かって探索
|
|
79
|
+
for (let row = startRow; row <= rows - height + 1; row++) {
|
|
80
|
+
const position = {
|
|
81
|
+
colStart: 1,
|
|
82
|
+
colEnd: cols,
|
|
83
|
+
rowStart: row,
|
|
84
|
+
rowEnd: row + height - 1,
|
|
85
|
+
};
|
|
86
|
+
if (isAreaAvailable(gridMap, position)) {
|
|
87
|
+
return position;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// 見つからなければ、高さを縮めて再試行
|
|
91
|
+
if (height > 1) {
|
|
92
|
+
return findAvailablePosition(gridMap, startRow, height - 1, grid);
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 要素を自動配置
|
|
98
|
+
*/
|
|
99
|
+
function autoPlaceElements(elements, grid) {
|
|
100
|
+
const gridMap = createEmptyGridMap(grid.cols, grid.rows);
|
|
101
|
+
const placed = [];
|
|
102
|
+
let currentRow = 1;
|
|
103
|
+
// まず、明示的に位置指定された要素を配置
|
|
104
|
+
const explicitElements = elements.filter((e) => e.position);
|
|
105
|
+
const implicitElements = elements.filter((e) => !e.position);
|
|
106
|
+
for (let i = 0; i < explicitElements.length; i++) {
|
|
107
|
+
const element = explicitElements[i];
|
|
108
|
+
placeOnGrid(gridMap, element.position, placed.length);
|
|
109
|
+
placed.push({
|
|
110
|
+
type: element.type,
|
|
111
|
+
content: element.content,
|
|
112
|
+
level: element.level,
|
|
113
|
+
position: element.position,
|
|
114
|
+
style: element.style,
|
|
115
|
+
raw: element.raw,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// 次に、位置未指定の要素を自動配置
|
|
119
|
+
for (const element of implicitElements) {
|
|
120
|
+
const height = estimateElementHeight(element);
|
|
121
|
+
const position = findAvailablePosition(gridMap, currentRow, height, grid);
|
|
122
|
+
if (position) {
|
|
123
|
+
placeOnGrid(gridMap, position, placed.length);
|
|
124
|
+
placed.push({
|
|
125
|
+
type: element.type,
|
|
126
|
+
content: element.content,
|
|
127
|
+
level: element.level,
|
|
128
|
+
position,
|
|
129
|
+
style: element.style,
|
|
130
|
+
raw: element.raw,
|
|
131
|
+
});
|
|
132
|
+
currentRow = position.rowEnd + 1;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// 配置できない場合は最後に追加(はみ出す可能性あり)
|
|
136
|
+
console.warn('要素を配置できませんでした:', element.type);
|
|
137
|
+
placed.push({
|
|
138
|
+
type: element.type,
|
|
139
|
+
content: element.content,
|
|
140
|
+
level: element.level,
|
|
141
|
+
position: {
|
|
142
|
+
colStart: 1,
|
|
143
|
+
colEnd: grid.cols,
|
|
144
|
+
rowStart: currentRow,
|
|
145
|
+
rowEnd: currentRow + height - 1,
|
|
146
|
+
},
|
|
147
|
+
style: element.style,
|
|
148
|
+
raw: element.raw,
|
|
149
|
+
});
|
|
150
|
+
currentRow += height;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return placed;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=auto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto.js","sourceRoot":"","sources":["../../src/layout/auto.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAmBH,gDAIC;AAKD,kCAYC;AAKD,0CAeC;AAKD,sDAgBC;AAKD,sDA4BC;AAKD,8CA8DC;AAhLD,kBAAkB;AAClB,MAAM,cAAc,GAA2B;IAC7C,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,CAAC;IACZ,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,UAAU,EAAE,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAY,EAAE,IAAY;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CACvC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CACzB,OAAgB,EAChB,QAAsB,EACtB,YAAoB;IAEpB,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACnE,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACnE,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC5E,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAC7B,OAAgB,EAChB,QAAsB;IAEtB,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACnE,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YACnE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC5E,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,OAAqB;IACzD,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErD,qBAAqB;IACrB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,mBAAmB;IACnB,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACjG,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS;QAC3D,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CACnC,OAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,IAAgB;IAEhB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAE5B,gBAAgB;IAChB,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAiB;YAC7B,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,CAAC;SACzB,CAAC;QAEF,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,QAAwB,EACxB,IAAgB;IAEhB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,sBAAsB;IACtB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,QAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAS;YAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC;IACL,CAAC;IAED,mBAAmB;IACnB,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAE1E,IAAI,QAAQ,EAAE,CAAC;YACb,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ;gBACR,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE;oBACR,QAAQ,EAAE,CAAC;oBACX,MAAM,EAAE,IAAI,CAAC,IAAI;oBACjB,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,CAAC;iBAChC;gBACD,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,UAAU,IAAI,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* レイアウトエンジン
|
|
3
|
+
*/
|
|
4
|
+
import type { Slide, GridConfig, SlideFrontmatter } from '../types/index.js';
|
|
5
|
+
import type { LayoutResult } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* スライドのレイアウトを計算
|
|
8
|
+
*/
|
|
9
|
+
export declare function layoutSlide(slide: Slide, globalFrontmatter: SlideFrontmatter): LayoutResult;
|
|
10
|
+
/**
|
|
11
|
+
* グリッド位置をスライド上の座標に変換(インチ単位)
|
|
12
|
+
*/
|
|
13
|
+
export declare function gridToCoordinates(position: {
|
|
14
|
+
colStart: number;
|
|
15
|
+
colEnd: number;
|
|
16
|
+
rowStart: number;
|
|
17
|
+
rowEnd: number;
|
|
18
|
+
}, grid: GridConfig, slideSize: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
}, margin?: number): {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
w: number;
|
|
25
|
+
h: number;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/layout/engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AAK9D;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,gBAAgB,GAClC,YAAY,CAgBd;AA2BD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAChF,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,GAAE,MAAY,GACnB;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAahD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* レイアウトエンジン
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.layoutSlide = layoutSlide;
|
|
7
|
+
exports.gridToCoordinates = gridToCoordinates;
|
|
8
|
+
const frontmatter_js_1 = require("../parser/frontmatter.js");
|
|
9
|
+
const auto_js_1 = require("./auto.js");
|
|
10
|
+
// デフォルトグリッド
|
|
11
|
+
const _DEFAULT_GRID = { cols: 12, rows: 9 };
|
|
12
|
+
/**
|
|
13
|
+
* スライドのレイアウトを計算
|
|
14
|
+
*/
|
|
15
|
+
function layoutSlide(slide, globalFrontmatter) {
|
|
16
|
+
// グリッド設定を決定(スライド個別 > グローバル > デフォルト)
|
|
17
|
+
const gridStr = slide.frontmatter.grid || globalFrontmatter.grid || '12x9';
|
|
18
|
+
const grid = (0, frontmatter_js_1.parseGridString)(gridStr);
|
|
19
|
+
// 要素を配置
|
|
20
|
+
const elements = (0, auto_js_1.autoPlaceElements)(slide.elements, grid);
|
|
21
|
+
// グリッドマップを作成(デバッグ用)
|
|
22
|
+
const gridMap = createGridMapFromElements(elements, grid);
|
|
23
|
+
return {
|
|
24
|
+
elements,
|
|
25
|
+
gridMap,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 配置済み要素からグリッドマップを作成
|
|
30
|
+
*/
|
|
31
|
+
function createGridMapFromElements(elements, grid) {
|
|
32
|
+
const gridMap = Array.from({ length: grid.rows }, () => Array.from({ length: grid.cols }, () => ({ occupied: false, elementIndex: undefined })));
|
|
33
|
+
elements.forEach((element, index) => {
|
|
34
|
+
const { position } = element;
|
|
35
|
+
for (let row = position.rowStart - 1; row < position.rowEnd; row++) {
|
|
36
|
+
for (let col = position.colStart - 1; col < position.colEnd; col++) {
|
|
37
|
+
if (row >= 0 && row < grid.rows && col >= 0 && col < grid.cols) {
|
|
38
|
+
gridMap[row][col] = { occupied: true, elementIndex: index };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return gridMap;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* グリッド位置をスライド上の座標に変換(インチ単位)
|
|
47
|
+
*/
|
|
48
|
+
function gridToCoordinates(position, grid, slideSize, margin = 0.5) {
|
|
49
|
+
const contentWidth = slideSize.width - margin * 2;
|
|
50
|
+
const contentHeight = slideSize.height - margin * 2;
|
|
51
|
+
const cellWidth = contentWidth / grid.cols;
|
|
52
|
+
const cellHeight = contentHeight / grid.rows;
|
|
53
|
+
const x = margin + (position.colStart - 1) * cellWidth;
|
|
54
|
+
const y = margin + (position.rowStart - 1) * cellHeight;
|
|
55
|
+
const w = (position.colEnd - position.colStart + 1) * cellWidth;
|
|
56
|
+
const h = (position.rowEnd - position.rowStart + 1) * cellHeight;
|
|
57
|
+
return { x, y, w, h };
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/layout/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* レイアウトモジュール
|
|
3
|
+
*/
|
|
4
|
+
export { layoutSlide, gridToCoordinates } from './engine.js';
|
|
5
|
+
export { autoPlaceElements, estimateElementHeight, findAvailablePosition } from './auto.js';
|
|
6
|
+
export type { PlacedElement, GridMap, LayoutResult } from './types.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAC5F,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* レイアウトモジュール
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.findAvailablePosition = exports.estimateElementHeight = exports.autoPlaceElements = exports.gridToCoordinates = exports.layoutSlide = void 0;
|
|
7
|
+
var engine_js_1 = require("./engine.js");
|
|
8
|
+
Object.defineProperty(exports, "layoutSlide", { enumerable: true, get: function () { return engine_js_1.layoutSlide; } });
|
|
9
|
+
Object.defineProperty(exports, "gridToCoordinates", { enumerable: true, get: function () { return engine_js_1.gridToCoordinates; } });
|
|
10
|
+
var auto_js_1 = require("./auto.js");
|
|
11
|
+
Object.defineProperty(exports, "autoPlaceElements", { enumerable: true, get: function () { return auto_js_1.autoPlaceElements; } });
|
|
12
|
+
Object.defineProperty(exports, "estimateElementHeight", { enumerable: true, get: function () { return auto_js_1.estimateElementHeight; } });
|
|
13
|
+
Object.defineProperty(exports, "findAvailablePosition", { enumerable: true, get: function () { return auto_js_1.findAvailablePosition; } });
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yCAA6D;AAApD,wGAAA,WAAW,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AACvC,qCAA4F;AAAnF,4GAAA,iBAAiB,OAAA;AAAE,gHAAA,qBAAqB,OAAA;AAAE,gHAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* レイアウト関連の型定義
|
|
3
|
+
*/
|
|
4
|
+
import type { GridPosition, SlideElement, StyleOptions } from '../types/index.js';
|
|
5
|
+
export interface PlacedElement {
|
|
6
|
+
type: SlideElement['type'];
|
|
7
|
+
content: SlideElement['content'];
|
|
8
|
+
level?: number;
|
|
9
|
+
position: GridPosition;
|
|
10
|
+
style?: StyleOptions;
|
|
11
|
+
raw?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface GridCell {
|
|
14
|
+
occupied: boolean;
|
|
15
|
+
elementIndex?: number;
|
|
16
|
+
}
|
|
17
|
+
export type GridMap = GridCell[][];
|
|
18
|
+
export interface LayoutResult {
|
|
19
|
+
elements: PlacedElement[];
|
|
20
|
+
gridMap: GridMap;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGlF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAGD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,MAAM,OAAO,GAAG,QAAQ,EAAE,EAAE,CAAC;AAGnC,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP ツールハンドラー
|
|
3
|
+
* テスト可能な形でMCPツールのロジックを提供
|
|
4
|
+
*/
|
|
5
|
+
export interface ToolResult {
|
|
6
|
+
content: {
|
|
7
|
+
type: string;
|
|
8
|
+
text: string;
|
|
9
|
+
}[];
|
|
10
|
+
isError?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface ToolDefinition {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: string;
|
|
17
|
+
properties: Record<string, unknown>;
|
|
18
|
+
required: string[];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 利用可能なツール一覧を取得
|
|
23
|
+
*/
|
|
24
|
+
export declare function getToolDefinitions(): ToolDefinition[];
|
|
25
|
+
/**
|
|
26
|
+
* Markdownテキストから記法ガイドを生成
|
|
27
|
+
*/
|
|
28
|
+
export declare function getMarhupGuide(): string;
|
|
29
|
+
/**
|
|
30
|
+
* ツールを実行
|
|
31
|
+
*/
|
|
32
|
+
export declare function handleToolCall(name: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
33
|
+
//# sourceMappingURL=mcp-handlers.d.ts.map
|