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
package/README.md
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# marhup
|
|
2
|
+
|
|
3
|
+
Markdownからグリッドベースのレイアウトで PowerPoint (PPTX) を生成するCLIツール
|
|
4
|
+
|
|
5
|
+
## 特徴
|
|
6
|
+
|
|
7
|
+
- 📐 **グリッドベースレイアウト** - 12×9グリッドで直感的な位置指定
|
|
8
|
+
- 🎯 **シンプルな記法** - 位置指定は省略可能、自動レイアウト
|
|
9
|
+
- 🎨 **スタイル指定** - クラスベースの柔軟なスタイリング
|
|
10
|
+
- 📝 **Markdown完全互換** - 標準Markdown記法をそのまま使用
|
|
11
|
+
- 🧩 **Mermaid対応** - Mermaid記法の図を自動で画像化
|
|
12
|
+
|
|
13
|
+
## インストール
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g marhup
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## 基本的な使い方
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# 基本的な変換
|
|
23
|
+
marhup input.md -o output.pptx
|
|
24
|
+
|
|
25
|
+
# テーマを指定
|
|
26
|
+
marhup input.md -o output.pptx --theme corporate
|
|
27
|
+
|
|
28
|
+
# 監視モード(変更時に自動再生成)
|
|
29
|
+
marhup input.md -o output.pptx --watch
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 記法ガイド
|
|
33
|
+
|
|
34
|
+
### スライドの区切り
|
|
35
|
+
|
|
36
|
+
`---` でスライドを区切ります:
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
# スライド1
|
|
40
|
+
|
|
41
|
+
内容...
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
# スライド2
|
|
46
|
+
|
|
47
|
+
内容...
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Front Matter
|
|
51
|
+
|
|
52
|
+
各スライドの先頭でオプションを指定できます:
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
---
|
|
56
|
+
title: プレゼンテーション
|
|
57
|
+
grid: 12x9
|
|
58
|
+
theme: default
|
|
59
|
+
---
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
| プロパティ | 説明 | デフォルト |
|
|
63
|
+
|-----------|------|-----------|
|
|
64
|
+
| `title` | ドキュメントタイトル | なし |
|
|
65
|
+
| `grid` | グリッドサイズ(列x行) | `12x9` |
|
|
66
|
+
| `theme` | テーマ名 | `default` |
|
|
67
|
+
| `layout` | プリセットレイアウト | なし |
|
|
68
|
+
|
|
69
|
+
### グリッド位置指定
|
|
70
|
+
|
|
71
|
+
`[列, 行]` 形式で要素の位置を指定します:
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
# タイトル [1-12, 1]
|
|
75
|
+
|
|
76
|
+
[1-6, 2-8]
|
|
77
|
+
左側のコンテンツ
|
|
78
|
+
|
|
79
|
+
[7-12, 2-8]
|
|
80
|
+
右側のコンテンツ
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
#### 記法
|
|
84
|
+
|
|
85
|
+
| 記法 | 説明 | 例 |
|
|
86
|
+
|------|------|-----|
|
|
87
|
+
| `[列, 行]` | 1セル | `[1, 1]` |
|
|
88
|
+
| `[列1-列2, 行]` | 列の範囲 | `[1-6, 1]` |
|
|
89
|
+
| `[列, 行1-行2]` | 行の範囲 | `[1, 1-3]` |
|
|
90
|
+
| `[列1-列2, 行1-行2]` | 矩形範囲 | `[1-6, 2-8]` |
|
|
91
|
+
|
|
92
|
+
#### グリッドイメージ
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
1 2 3 4 5 6 7 8 9 10 11 12
|
|
96
|
+
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
|
97
|
+
1 │ [1-12, 1] │
|
|
98
|
+
├───┴───┴───┬───┴───┴───┴───┴───┴───┼───┴───┴───┤
|
|
99
|
+
2 │ │ │ │
|
|
100
|
+
3 │ [1-3, │ [4-9, 2-5] │ [10-12, │
|
|
101
|
+
4 │ 2-5] │ │ 2-5] │
|
|
102
|
+
5 │ │ │ │
|
|
103
|
+
├───────────┴───────────────────────┴───────────┤
|
|
104
|
+
6 │ │
|
|
105
|
+
7 │ [1-12, 6-9] │
|
|
106
|
+
8 │ │
|
|
107
|
+
9 │ │
|
|
108
|
+
└───────────────────────────────────────────────┘
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### スタイル指定
|
|
112
|
+
|
|
113
|
+
`{.クラス名}` 形式でスタイルを指定します:
|
|
114
|
+
|
|
115
|
+
```markdown
|
|
116
|
+
# タイトル [1-12, 1] {.center}
|
|
117
|
+
|
|
118
|
+
テキスト {.red .bold}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
#### 利用可能なクラス
|
|
122
|
+
|
|
123
|
+
| カテゴリ | クラス | 説明 |
|
|
124
|
+
|---------|--------|------|
|
|
125
|
+
| 配置 | `.center` | 中央揃え |
|
|
126
|
+
| | `.left` | 左揃え |
|
|
127
|
+
| | `.right` | 右揃え |
|
|
128
|
+
| 色 | `.red` | 赤色 |
|
|
129
|
+
| | `.blue` | 青色 |
|
|
130
|
+
| | `.green` | 緑色 |
|
|
131
|
+
| | `.gray` | グレー |
|
|
132
|
+
| サイズ | `.small` | 小さいフォント |
|
|
133
|
+
| | `.large` | 大きいフォント |
|
|
134
|
+
| 装飾 | `.bold` | 太字 |
|
|
135
|
+
| | `.highlight` | ハイライト背景 |
|
|
136
|
+
| | `.card` | カード風背景 |
|
|
137
|
+
| 特殊 | `.header` | ヘッダー領域 |
|
|
138
|
+
| | `.footer` | フッター領域 |
|
|
139
|
+
| | `.note` | 注釈スタイル |
|
|
140
|
+
|
|
141
|
+
### 省略時のデフォルト動作
|
|
142
|
+
|
|
143
|
+
位置やスタイルは省略可能です:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
# タイトル
|
|
147
|
+
|
|
148
|
+
本文テキスト
|
|
149
|
+
|
|
150
|
+
- 箇条書き1
|
|
151
|
+
- 箇条書き2
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
| 省略した場合 | デフォルト動作 |
|
|
155
|
+
|------------|---------------|
|
|
156
|
+
| `grid:` | `12x9` を使用 |
|
|
157
|
+
| `[位置]` | 上から順に自動配置、全幅 |
|
|
158
|
+
| `{スタイル}` | テーマのデフォルト |
|
|
159
|
+
|
|
160
|
+
## 完全なサンプル
|
|
161
|
+
|
|
162
|
+
### シンプルなスライド
|
|
163
|
+
|
|
164
|
+
```markdown
|
|
165
|
+
---
|
|
166
|
+
title: 月次報告
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
# 2026年1月 月次報告
|
|
170
|
+
|
|
171
|
+
営業部 山田太郎
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
# 今月の成果
|
|
176
|
+
|
|
177
|
+
- 新規顧客獲得: 15社
|
|
178
|
+
- 売上達成率: 120%
|
|
179
|
+
- 顧客満足度: 4.5/5.0
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### グリッドレイアウト使用
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
---
|
|
186
|
+
grid: 12x9
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
# 売上推移と分析 [1-12, 1]
|
|
190
|
+
|
|
191
|
+
[1-7, 2-8]
|
|
192
|
+

|
|
193
|
+
|
|
194
|
+
[8-12, 2-4]
|
|
195
|
+
## 好調要因
|
|
196
|
+
- 新製品のヒット
|
|
197
|
+
- リピート率向上
|
|
198
|
+
|
|
199
|
+
[8-12, 5-8]
|
|
200
|
+
## 課題
|
|
201
|
+
- 原価率の上昇
|
|
202
|
+
- 人材不足
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### ダッシュボード風
|
|
206
|
+
|
|
207
|
+
```markdown
|
|
208
|
+
---
|
|
209
|
+
grid: 12x9
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
# KPIダッシュボード [1-12, 1]
|
|
213
|
+
|
|
214
|
+
[1-3, 2-4] {.card .blue}
|
|
215
|
+
### 売上
|
|
216
|
+
**¥128M**
|
|
217
|
+
前年比 +12%
|
|
218
|
+
|
|
219
|
+
[4-6, 2-4] {.card .green}
|
|
220
|
+
### 利益
|
|
221
|
+
**¥32M**
|
|
222
|
+
前年比 +8%
|
|
223
|
+
|
|
224
|
+
[7-9, 2-4] {.card .orange}
|
|
225
|
+
### 顧客数
|
|
226
|
+
**1,240社**
|
|
227
|
+
前年比 +15%
|
|
228
|
+
|
|
229
|
+
[10-12, 2-4] {.card}
|
|
230
|
+
### NPS
|
|
231
|
+
**72**
|
|
232
|
+
前年比 +5pt
|
|
233
|
+
|
|
234
|
+
[1-6, 5-9]
|
|
235
|
+

|
|
236
|
+
|
|
237
|
+
[7-12, 5-9]
|
|
238
|
+

|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Mermaid図を含むスライド
|
|
242
|
+
|
|
243
|
+
````markdown
|
|
244
|
+
---
|
|
245
|
+
grid: 12x9
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
# システム構成図 [1-12, 1]
|
|
249
|
+
|
|
250
|
+
[1-6, 2-8]
|
|
251
|
+
```mermaid
|
|
252
|
+
graph TD
|
|
253
|
+
A[ユーザー] --> B[Webサーバー]
|
|
254
|
+
B --> C[APIサーバー]
|
|
255
|
+
C --> D[(データベース)]
|
|
256
|
+
C --> E[キャッシュ]
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
[7-12, 2-5]
|
|
260
|
+
## アーキテクチャ
|
|
261
|
+
- Webサーバー: nginx
|
|
262
|
+
- API: Node.js
|
|
263
|
+
- DB: PostgreSQL
|
|
264
|
+
|
|
265
|
+
[7-12, 6-8]
|
|
266
|
+
### 特徴
|
|
267
|
+
- スケーラブル
|
|
268
|
+
- 高可用性
|
|
269
|
+
- セキュア
|
|
270
|
+
````
|
|
271
|
+
|
|
272
|
+
## CLIオプション
|
|
273
|
+
|
|
274
|
+
```
|
|
275
|
+
Usage: marhup [options] <input>
|
|
276
|
+
|
|
277
|
+
Markdownから PowerPoint を生成します
|
|
278
|
+
|
|
279
|
+
Arguments:
|
|
280
|
+
input 入力Markdownファイル
|
|
281
|
+
|
|
282
|
+
Options:
|
|
283
|
+
-o, --output <file> 出力ファイル名 (default: "output.pptx")
|
|
284
|
+
-t, --theme <name> テーマ名 (default: "default")
|
|
285
|
+
-w, --watch 監視モード
|
|
286
|
+
--grid <size> デフォルトグリッドサイズ (default: "12x9")
|
|
287
|
+
-v, --version バージョン表示
|
|
288
|
+
-h, --help ヘルプ表示
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## プログラムからの使用
|
|
292
|
+
|
|
293
|
+
```typescript
|
|
294
|
+
import { marhup } from 'marhup';
|
|
295
|
+
|
|
296
|
+
const markdown = `
|
|
297
|
+
# タイトル
|
|
298
|
+
|
|
299
|
+
内容...
|
|
300
|
+
`;
|
|
301
|
+
|
|
302
|
+
await marhup(markdown, {
|
|
303
|
+
output: 'output.pptx',
|
|
304
|
+
theme: 'default'
|
|
305
|
+
});
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## MCPサーバーとしての使用
|
|
309
|
+
|
|
310
|
+
marhupはModel Context Protocol (MCP) サーバーとして動作し、Claude Desktop等のAIアシスタントから直接呼び出すことができます。
|
|
311
|
+
|
|
312
|
+
### 提供されるツール
|
|
313
|
+
|
|
314
|
+
| ツール名 | 説明 |
|
|
315
|
+
|---------|------|
|
|
316
|
+
| `convert_markdown_to_pptx` | Markdownテキストから直接PPTXを生成 |
|
|
317
|
+
| `convert_file_to_pptx` | MarkdownファイルからPPTXを生成 |
|
|
318
|
+
| `get_marhup_guide` | marhup記法ガイドを取得 |
|
|
319
|
+
|
|
320
|
+
### Claude Desktopでの設定
|
|
321
|
+
|
|
322
|
+
`~/Library/Application Support/Claude/claude_desktop_config.json` に以下を追加:
|
|
323
|
+
|
|
324
|
+
```json
|
|
325
|
+
{
|
|
326
|
+
"mcpServers": {
|
|
327
|
+
"marhup": {
|
|
328
|
+
"command": "node",
|
|
329
|
+
"args": ["/path/to/marhup/dist/mcp.js"]
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
npmでグローバルインストールしている場合:
|
|
336
|
+
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"mcpServers": {
|
|
340
|
+
"marhup": {
|
|
341
|
+
"command": "marhup-mcp"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### 使用例
|
|
348
|
+
|
|
349
|
+
AIアシスタントに以下のように依頼できます:
|
|
350
|
+
|
|
351
|
+
- 「このMarkdownをPowerPointに変換して」
|
|
352
|
+
- 「プレゼン資料を作成して、/path/to/output.pptx に保存して」
|
|
353
|
+
- 「marhupの記法を教えて」
|
|
354
|
+
|
|
355
|
+
## 対応Markdown記法
|
|
356
|
+
|
|
357
|
+
| 記法 | 対応 |
|
|
358
|
+
|------|------|
|
|
359
|
+
| 見出し (`#`, `##`, ...) | ✅ |
|
|
360
|
+
| 段落 | ✅ |
|
|
361
|
+
| 箇条書き (`-`, `*`, `1.`) | ✅ |
|
|
362
|
+
| 画像 (``) | ✅ |
|
|
363
|
+
| 表 | ✅ |
|
|
364
|
+
| コードブロック | ✅ |
|
|
365
|
+
| Mermaid図 (` ```mermaid `) | ✅ |
|
|
366
|
+
| 太字・斜体 | ✅ |
|
|
367
|
+
| リンク | ✅ |
|
|
368
|
+
| 引用 | ✅ |
|
|
369
|
+
|
|
370
|
+
## ライセンス
|
|
371
|
+
|
|
372
|
+
MIT
|
|
373
|
+
|
|
374
|
+
## 関連リンク
|
|
375
|
+
|
|
376
|
+
- [pptxgenjs](https://github.com/gitbrent/PptxGenJS) - PPTX生成ライブラリ
|
|
377
|
+
- [Marp](https://marp.app/) - 類似ツール(参考)
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* marhup CLI
|
|
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
|
+
const commander_1 = require("commander");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const index_js_1 = require("./index.js");
|
|
44
|
+
const program = new commander_1.Command();
|
|
45
|
+
program
|
|
46
|
+
.name('marhup')
|
|
47
|
+
.description('Markdownからグリッドベースのレイアウトで PowerPoint (PPTX) を生成')
|
|
48
|
+
.version('0.1.0')
|
|
49
|
+
.argument('<input>', '入力Markdownファイル')
|
|
50
|
+
.option('-o, --output <file>', '出力ファイル名', 'output.pptx')
|
|
51
|
+
.option('-t, --theme <name>', 'テーマ名', 'default')
|
|
52
|
+
.option('-w, --watch', '監視モード', false)
|
|
53
|
+
.option('--grid <size>', 'デフォルトグリッドサイズ', '12x9')
|
|
54
|
+
.action(async (input, options) => {
|
|
55
|
+
try {
|
|
56
|
+
// 入力ファイルの存在確認
|
|
57
|
+
const inputPath = path.resolve(input);
|
|
58
|
+
if (!fs.existsSync(inputPath)) {
|
|
59
|
+
console.error(`エラー: ファイルが見つかりません: ${inputPath}`);
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
// 出力パス
|
|
63
|
+
const outputPath = path.resolve(options.output);
|
|
64
|
+
console.log(`📝 ${input} を変換中...`);
|
|
65
|
+
// 変換実行
|
|
66
|
+
await (0, index_js_1.marhupFile)(inputPath, {
|
|
67
|
+
output: outputPath,
|
|
68
|
+
theme: options.theme,
|
|
69
|
+
grid: options.grid,
|
|
70
|
+
});
|
|
71
|
+
console.log(`✅ 生成完了: ${outputPath}`);
|
|
72
|
+
// 監視モード
|
|
73
|
+
if (options.watch) {
|
|
74
|
+
console.log('\n👀 監視モード開始... (Ctrl+C で終了)');
|
|
75
|
+
fs.watch(inputPath, async (eventType) => {
|
|
76
|
+
if (eventType === 'change') {
|
|
77
|
+
console.log(`\n🔄 変更を検出: ${input}`);
|
|
78
|
+
try {
|
|
79
|
+
await (0, index_js_1.marhupFile)(inputPath, {
|
|
80
|
+
output: outputPath,
|
|
81
|
+
theme: options.theme,
|
|
82
|
+
grid: options.grid,
|
|
83
|
+
});
|
|
84
|
+
console.log(`✅ 再生成完了: ${outputPath}`);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('❌ 変換エラー:', error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error('❌ エラー:', error);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
program.parse();
|
|
99
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AACA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,yCAAwC;AAExC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC;KAChB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,qBAAqB,EAAE,SAAS,EAAE,aAAa,CAAC;KACvD,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,SAAS,CAAC;KAC/C,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC;KACrC,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,MAAM,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,OAK7B,EAAE,EAAE;IACH,IAAI,CAAC;QACH,cAAc;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEhD,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;QAEnC,OAAO;QACP,MAAM,IAAA,qBAAU,EAAC,SAAS,EAAE;YAC1B,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;QAErC,QAAQ;QACR,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAE5C,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;gBACtC,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;oBACpC,IAAI,CAAC;wBACH,MAAM,IAAA,qBAAU,EAAC,SAAS,EAAE;4BAC1B,MAAM,EAAE,UAAU;4BAClB,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,IAAI,EAAE,OAAO,CAAC,IAAI;yBACnB,CAAC,CAAC;wBACH,OAAO,CAAC,GAAG,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC;oBACxC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 addCodeElement(slide: PptxGenJS.Slide, element: PlacedElement, coords: Coordinates, styleProps: Record<string, unknown>): void;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/generator/code.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,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,CA0BN"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* コード要素の生成
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.addCodeElement = addCodeElement;
|
|
7
|
+
const index_1 = require("../theme/index");
|
|
8
|
+
/**
|
|
9
|
+
* コード要素を追加
|
|
10
|
+
*/
|
|
11
|
+
function addCodeElement(slide, element, coords, styleProps) {
|
|
12
|
+
const content = element.content;
|
|
13
|
+
// 背景
|
|
14
|
+
slide.addShape('rect', {
|
|
15
|
+
x: coords.x,
|
|
16
|
+
y: coords.y,
|
|
17
|
+
w: coords.w,
|
|
18
|
+
h: coords.h,
|
|
19
|
+
fill: { color: '1e293b' },
|
|
20
|
+
line: { color: '334155', width: 1 },
|
|
21
|
+
});
|
|
22
|
+
// コードテキスト
|
|
23
|
+
slide.addText(content, {
|
|
24
|
+
x: coords.x + 0.1,
|
|
25
|
+
y: coords.y + 0.1,
|
|
26
|
+
w: coords.w - 0.2,
|
|
27
|
+
h: coords.h - 0.2,
|
|
28
|
+
fontSize: 14,
|
|
29
|
+
color: 'e2e8f0',
|
|
30
|
+
fontFace: index_1.defaultTheme.fonts.code,
|
|
31
|
+
align: 'left',
|
|
32
|
+
valign: 'top',
|
|
33
|
+
...styleProps,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/generator/code.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAgBH,wCA+BC;AA3CD,0CAA8C;AAS9C;;GAEG;AACH,SAAgB,cAAc,CAC5B,KAAsB,EACtB,OAAsB,EACtB,MAAmB,EACnB,UAAmC;IAEnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAiB,CAAC;IAE1C,KAAK;IACL,KAAK,CAAC,QAAQ,CAAC,MAAM,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,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACzB,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE;KACpC,CAAC,CAAC;IAEH,UAAU;IACV,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE;QACrB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG;QACjB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG;QACjB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG;QACjB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG;QACjB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,oBAAY,CAAC,KAAK,CAAC,IAAI;QACjC,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,KAAK;QACb,GAAG,UAAU;KACd,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 addImageElement(slide: PptxGenJS.Slide, element: PlacedElement, coords: Coordinates, styleProps: Record<string, unknown>, basePath?: string): void;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/generator/image.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,SAAS,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKrD,UAAU,WAAW;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAyDD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,CAAC,KAAK,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,CAAC,EAAE,MAAM,GAChB,IAAI,CA+DN"}
|