marhup 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +419 -2
  2. package/dist/cli.js +659 -78
  3. package/dist/cli.js.map +1 -1
  4. package/dist/errors.d.ts +29 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/errors.js +62 -0
  7. package/dist/errors.js.map +1 -0
  8. package/dist/generator/code.d.ts +4 -3
  9. package/dist/generator/code.d.ts.map +1 -1
  10. package/dist/generator/code.js +7 -7
  11. package/dist/generator/code.js.map +1 -1
  12. package/dist/generator/gen-animations.d.ts +13 -0
  13. package/dist/generator/gen-animations.d.ts.map +1 -0
  14. package/dist/generator/gen-animations.js +77 -0
  15. package/dist/generator/gen-animations.js.map +1 -0
  16. package/dist/generator/image.d.ts +4 -3
  17. package/dist/generator/image.d.ts.map +1 -1
  18. package/dist/generator/image.js +67 -80
  19. package/dist/generator/image.js.map +1 -1
  20. package/dist/generator/index.d.ts +2 -0
  21. package/dist/generator/index.d.ts.map +1 -1
  22. package/dist/generator/index.js +9 -18
  23. package/dist/generator/index.js.map +1 -1
  24. package/dist/generator/list.d.ts +4 -3
  25. package/dist/generator/list.d.ts.map +1 -1
  26. package/dist/generator/list.js +15 -17
  27. package/dist/generator/list.js.map +1 -1
  28. package/dist/generator/mermaid.d.ts +9 -4
  29. package/dist/generator/mermaid.d.ts.map +1 -1
  30. package/dist/generator/mermaid.js +120 -85
  31. package/dist/generator/mermaid.js.map +1 -1
  32. package/dist/generator/pptx.d.ts +1 -1
  33. package/dist/generator/pptx.d.ts.map +1 -1
  34. package/dist/generator/pptx.js +232 -60
  35. package/dist/generator/pptx.js.map +1 -1
  36. package/dist/generator/presentation.d.ts +149 -0
  37. package/dist/generator/presentation.d.ts.map +1 -0
  38. package/dist/generator/presentation.js +163 -0
  39. package/dist/generator/presentation.js.map +1 -0
  40. package/dist/generator/table.d.ts +4 -3
  41. package/dist/generator/table.d.ts.map +1 -1
  42. package/dist/generator/table.js +12 -33
  43. package/dist/generator/table.js.map +1 -1
  44. package/dist/generator/text.d.ts +5 -4
  45. package/dist/generator/text.d.ts.map +1 -1
  46. package/dist/generator/text.js +34 -20
  47. package/dist/generator/text.js.map +1 -1
  48. package/dist/generator/video.d.ts +18 -0
  49. package/dist/generator/video.d.ts.map +1 -0
  50. package/dist/generator/video.js +83 -0
  51. package/dist/generator/video.js.map +1 -0
  52. package/dist/index.d.ts +8 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +144 -55
  55. package/dist/index.js.map +1 -1
  56. package/dist/layout/auto.d.ts +14 -2
  57. package/dist/layout/auto.d.ts.map +1 -1
  58. package/dist/layout/auto.js +129 -37
  59. package/dist/layout/auto.js.map +1 -1
  60. package/dist/layout/engine.d.ts +1 -1
  61. package/dist/layout/engine.d.ts.map +1 -1
  62. package/dist/layout/engine.js +10 -12
  63. package/dist/layout/engine.js.map +1 -1
  64. package/dist/layout/index.d.ts +1 -1
  65. package/dist/layout/index.d.ts.map +1 -1
  66. package/dist/layout/index.js +2 -10
  67. package/dist/layout/index.js.map +1 -1
  68. package/dist/layout/types.d.ts +1 -0
  69. package/dist/layout/types.d.ts.map +1 -1
  70. package/dist/layout/types.js +1 -2
  71. package/dist/layout/types.js.map +1 -1
  72. package/dist/mcp-handlers.d.ts.map +1 -1
  73. package/dist/mcp-handlers.js +15 -51
  74. package/dist/mcp-handlers.js.map +1 -1
  75. package/dist/mcp.js +10 -12
  76. package/dist/mcp.js.map +1 -1
  77. package/dist/parser/frontmatter.d.ts.map +1 -1
  78. package/dist/parser/frontmatter.js +95 -16
  79. package/dist/parser/frontmatter.js.map +1 -1
  80. package/dist/parser/grid.d.ts +5 -7
  81. package/dist/parser/grid.d.ts.map +1 -1
  82. package/dist/parser/grid.js +190 -19
  83. package/dist/parser/grid.js.map +1 -1
  84. package/dist/parser/index.js +3 -13
  85. package/dist/parser/index.js.map +1 -1
  86. package/dist/parser/markdown.d.ts +1 -1
  87. package/dist/parser/markdown.d.ts.map +1 -1
  88. package/dist/parser/markdown.js +247 -137
  89. package/dist/parser/markdown.js.map +1 -1
  90. package/dist/theme/default.d.ts.map +1 -1
  91. package/dist/theme/default.js +13 -8
  92. package/dist/theme/default.js.map +1 -1
  93. package/dist/theme/index.d.ts +11 -0
  94. package/dist/theme/index.d.ts.map +1 -1
  95. package/dist/theme/index.js +70 -7
  96. package/dist/theme/index.js.map +1 -1
  97. package/dist/types/index.d.ts +54 -2
  98. package/dist/types/index.d.ts.map +1 -1
  99. package/dist/types/index.js +4 -6
  100. package/dist/types/index.js.map +1 -1
  101. package/dist/types/plugin.d.ts +50 -0
  102. package/dist/types/plugin.d.ts.map +1 -0
  103. package/dist/types/plugin.js +5 -0
  104. package/dist/types/plugin.js.map +1 -0
  105. package/dist/utils/file-lock.d.ts +27 -0
  106. package/dist/utils/file-lock.d.ts.map +1 -0
  107. package/dist/utils/file-lock.js +118 -0
  108. package/dist/utils/file-lock.js.map +1 -0
  109. package/dist/utils/i18n.d.ts +5 -0
  110. package/dist/utils/i18n.d.ts.map +1 -0
  111. package/dist/utils/i18n.js +41 -0
  112. package/dist/utils/i18n.js.map +1 -0
  113. package/dist/utils/logger.d.ts +7 -0
  114. package/dist/utils/logger.d.ts.map +1 -0
  115. package/dist/utils/logger.js +43 -0
  116. package/dist/utils/logger.js.map +1 -0
  117. package/dist/utils/path-validation.d.ts +20 -0
  118. package/dist/utils/path-validation.d.ts.map +1 -0
  119. package/dist/utils/path-validation.js +39 -0
  120. package/dist/utils/path-validation.js.map +1 -0
  121. package/dist/utils/plugin-manager.d.ts +18 -0
  122. package/dist/utils/plugin-manager.d.ts.map +1 -0
  123. package/dist/utils/plugin-manager.js +108 -0
  124. package/dist/utils/plugin-manager.js.map +1 -0
  125. package/dist/utils/sanitizer.d.ts +14 -0
  126. package/dist/utils/sanitizer.d.ts.map +1 -0
  127. package/dist/utils/sanitizer.js +73 -0
  128. package/dist/utils/sanitizer.js.map +1 -0
  129. package/package.json +23 -8
package/README.md CHANGED
@@ -4,11 +4,69 @@ Markdownからグリッドベースのレイアウトで PowerPoint (PPTX) を
4
4
 
5
5
  ## 特徴
6
6
 
7
- - 📐 **グリッドベースレイアウト** - 12×9グリッドで直感的な位置指定
7
+ - 📐 **グリッドベースレイアウト** - 設定可能なグリッド(デフォルト12×9)で直感的な位置指定
8
8
  - 🎯 **シンプルな記法** - 位置指定は省略可能、自動レイアウト
9
9
  - 🎨 **スタイル指定** - クラスベースの柔軟なスタイリング
10
+ - 🎬 **アニメーション対応** - PowerPointアニメーションの指定が可能(`{animation=fadein}` など)
11
+ - 🎭 **スライド遷移** - スライド間の遷移効果を指定可能
10
12
  - 📝 **Markdown完全互換** - 標準Markdown記法をそのまま使用
11
13
  - 🧩 **Mermaid対応** - Mermaid記法の図を自動で画像化
14
+ - 🎥 **動画埋め込み対応** - PowerPointに動画を埋め込み可能
15
+ - 🔌 **プラグイン拡張** - カスタム機能の追加が可能
16
+
17
+ ## プラグイン
18
+
19
+ marhupはプラグインアーキテクチャをサポートしており、独自の要素タイプや機能を追加できます。
20
+
21
+ ### プラグインの使用
22
+
23
+ ```bash
24
+ # プラグインディレクトリを指定
25
+ marhup input.md -o output.pptx --plugin-dir ./plugins
26
+ ```
27
+
28
+ ### プラグインの作成
29
+
30
+ プラグインはJavaScriptまたはTypeScriptファイルとして作成します。以下はカスタム要素を追加する例:
31
+
32
+ ```javascript
33
+ // plugins/custom-box.js
34
+ import type { Plugin } from 'marhup';
35
+
36
+ const plugin = {
37
+ name: 'custom-box',
38
+ version: '1.0.0',
39
+ elementParsers: {
40
+ paragraph: (token, aliases) => {
41
+ const text = token.text || '';
42
+ const match = text.match(/^:::custombox\s+(.+?)\s*:::$/);
43
+ if (match) {
44
+ return {
45
+ type: 'custombox',
46
+ content: match[1],
47
+ };
48
+ }
49
+ return null;
50
+ },
51
+ },
52
+ elementGenerators: {
53
+ custombox: async (element, slide, context) => {
54
+ slide.addText(element.content, {
55
+ x: context.coords.x,
56
+ y: context.coords.y,
57
+ w: context.coords.w,
58
+ h: context.coords.h,
59
+ fill: { color: 'FFFF00' }, // Yellow background
60
+ });
61
+ return [];
62
+ },
63
+ },
64
+ };
65
+
66
+ export default plugin;
67
+ ```
68
+
69
+ 詳細なAPIドキュメントは[プラグイン開発ガイド](docs/plugins.md)を参照してください。
12
70
 
13
71
  ## インストール
14
72
 
@@ -29,6 +87,31 @@ marhup input.md -o output.pptx --theme corporate
29
87
  marhup input.md -o output.pptx --watch
30
88
  ```
31
89
 
90
+ ## ログ出力
91
+
92
+ marhupは詳細なログ出力を提供し、デバッグやトラブルシューティングを支援します:
93
+
94
+ ```bash
95
+ # デフォルト(infoレベル)
96
+ marhup input.md -o output.pptx
97
+
98
+ # 詳細ログ(debugレベル)
99
+ LOG_LEVEL=debug marhup input.md -o output.pptx
100
+
101
+ # 最小ログ(errorのみ)
102
+ LOG_LEVEL=error marhup input.md -o output.pptx
103
+
104
+ # ログをファイルに出力
105
+ LOG_FILE=marhup.log marhup input.md -o output.pptx
106
+ ```
107
+
108
+ ログレベル:
109
+ - `error`: エラーのみ
110
+ - `warn`: 警告以上
111
+ - `info`: 情報メッセージ(デフォルト)
112
+ - `debug`: デバッグ情報
113
+ - `trace`: 詳細トレース
114
+
32
115
  ## 記法ガイド
33
116
 
34
117
  ### スライドの区切り
@@ -64,11 +147,27 @@ aliases:
64
147
  ---
65
148
  ```
66
149
 
150
+ または、テーマをカスタマイズ:
151
+
152
+ ```markdown
153
+ ---
154
+ title: プレゼンテーション
155
+ theme:
156
+ fonts:
157
+ title: "Times New Roman"
158
+ body: "Georgia"
159
+ code: "Consolas"
160
+ colors:
161
+ primary: "#ff6b6b"
162
+ text: "#2c3e50"
163
+ ---
164
+ ```
165
+
67
166
  | プロパティ | 説明 | デフォルト |
68
167
  |-----------|------|-----------|
69
168
  | `title` | ドキュメントタイトル | なし |
70
169
  | `grid` | グリッドサイズ(列x行) | `12x9` |
71
- | `theme` | テーマ名 | `default` |
170
+ | `theme` | テーマ名またはテーマ設定オブジェクト | `default` |
72
171
  | `layout` | プリセットレイアウト | なし |
73
172
  | `aliases` | グリッド位置の別名定義 | なし |
74
173
  | `classes` | カスタムスタイルクラス | なし |
@@ -188,6 +287,323 @@ classes:
188
287
  | `[位置]` | 上から順に自動配置、全幅 |
189
288
  | `{スタイル}` | テーマのデフォルト |
190
289
 
290
+ ### アニメーション指定
291
+
292
+ `{animation=タイプ}` 形式でPowerPointアニメーションを指定できます:
293
+
294
+ ```markdown
295
+ # タイトル {animation=appear}
296
+
297
+ テキスト {animation=fade animation-delay=1}
298
+
299
+ ![画像](image.jpg) {animation=zoom animation-direction=left}
300
+
301
+ !v[動画](video.mp4) {animation=appear}
302
+ ```
303
+
304
+ #### アニメーションタイプ
305
+
306
+ | タイプ | 説明 |
307
+ |--------|------|
308
+ | `appear` | 出現 |
309
+ | `fade` | フェードイン/アウト |
310
+ | `fly` | 飛んで入る |
311
+ | `zoom` | ズーム |
312
+ | `wipe` | ワイプ |
313
+ | `split` | 分割 |
314
+ | `wheel` | 車輪 |
315
+ | `randomBars` | ランダムバー |
316
+ | `growShrink` | 拡大縮小 |
317
+ | `spin` | 回転 |
318
+ | `float` | 浮遊 |
319
+ | `shape` | シェイプ |
320
+ | `bounce` | バウンス |
321
+ | `pulse` | パルス |
322
+ | `teeter` | 揺れ |
323
+ | `blink` | 点滅 |
324
+ | `flicker` | ちらつき |
325
+ | `swivel` | 旋回 |
326
+ | `spring` | スプリング |
327
+
328
+ #### アニメーションオプション
329
+
330
+ | オプション | 説明 | 例 |
331
+ |-----------|------|-----|
332
+ | `animation-delay` | 遅延時間(秒) | `animation-delay=2` |
333
+ | `animation-duration` | 継続時間(秒) | `animation-duration=1.5` |
334
+ | `animation-direction` | 方向 | `animation-direction=left` |
335
+ | `animation-trigger` | トリガー | `animation-trigger=onClick` |
336
+ | `animation-repeat` | 繰り返し回数 | `animation-repeat=3` |
337
+ | `animation-speed` | 速度 | `animation-speed=fast` |
338
+
339
+ ### スライド遷移
340
+
341
+ スライドごとに遷移効果を指定できます:
342
+
343
+ ```markdown
344
+ ---
345
+ title: プレゼンテーション
346
+ ---
347
+
348
+ # スライド1
349
+
350
+ 通常のスライド
351
+
352
+ ---
353
+
354
+ # スライド2
355
+ transition:
356
+ type: fade
357
+ duration: 1
358
+ speed: medium
359
+
360
+ フェードイン効果のスライド
361
+
362
+ ---
363
+
364
+ # スライド3
365
+ transition:
366
+ type: push
367
+ direction: left
368
+ duration: 0.5
369
+
370
+ 左から押し出す効果のスライド
371
+ ```
372
+
373
+ #### 遷移タイプ
374
+
375
+ | タイプ | 説明 |
376
+ |--------|------|
377
+ | `none` | 遷移なし |
378
+ | `fade` | フェード |
379
+ | `push` | 押し出し |
380
+ | `wipe` | ワイプ |
381
+ | `split` | 分割 |
382
+ | `reveal` | 現れる |
383
+ | `randomBars` | ランダムバー |
384
+ | `shape` | シェイプ |
385
+ | `uncover` | アンカバー |
386
+ | `cover` | カバー |
387
+ | `flash` | フラッシュ |
388
+ | `checker` | チェッカー |
389
+ | `blinds` | ブラインド |
390
+ | `clock` | 時計 |
391
+ | `ripple` | リップル |
392
+ | `honeycomb` | ハニカム |
393
+ | `glitter` | グリッター |
394
+ | `sphere` | スフィア |
395
+ | `newsflash` | ニュースフラッシュ |
396
+ | `plus` | プラス |
397
+ | `diamond` | ダイヤモンド |
398
+ | `wedge` | ウェッジ |
399
+ | `wheel` | 車輪 |
400
+ | `circle` | 円 |
401
+ | `box` | ボックス |
402
+ | `zoom` | ズーム |
403
+ | `dissolve` | 溶解 |
404
+
405
+ #### 遷移オプション
406
+
407
+ | オプション | 説明 | 例 |
408
+ |-----------|------|-----|
409
+ | `type` | 遷移タイプ | `type: fade` |
410
+ | `duration` | 継続時間(秒) | `duration: 1` |
411
+ | `direction` | 方向 | `direction: left` |
412
+ | `speed` | 速度 | `speed: medium` |
413
+
414
+ ## 高度な機能
415
+
416
+ ### 高度なテーマカスタマイズ
417
+
418
+ marhupでは、Front Matterでテーマを詳細にカスタマイズできます。デフォルトテーマをベースに、色、フォント、フォントサイズ、グラデーションなどを上書きできます。
419
+
420
+ #### テーマ設定の構造
421
+
422
+ ```yaml
423
+ ---
424
+ theme:
425
+ colors:
426
+ primary: '#ff6b6b' # メインカラー
427
+ secondary: '#4ecdc4' # セカンダリカラー
428
+ accent: '#ffe66d' # アクセントカラー
429
+ background: '#ffffff' # 背景色
430
+ text: '#2c3e50' # テキスト色
431
+ fonts:
432
+ title: 'Times New Roman' # タイトルフォント
433
+ body: 'Georgia' # 本文フォント
434
+ code: 'Consolas' # コードフォント
435
+ fontSize:
436
+ h1: 44 # H1サイズ
437
+ h2: 32 # H2サイズ
438
+ h3: 28 # H3サイズ
439
+ body: 20 # 本文サイズ
440
+ small: 16 # 小サイズ
441
+ slideMaster:
442
+ backgroundColor: '#ffffff'
443
+ margin:
444
+ top: 0.5
445
+ bottom: 0.5
446
+ left: 0.5
447
+ right: 0.5
448
+ ---
449
+ ```
450
+
451
+ #### カラーテーマの例
452
+
453
+ ```markdown
454
+ ---
455
+ theme:
456
+ colors:
457
+ primary: '#e74c3c' # 赤系
458
+ secondary: '#95a5a6' # グレー
459
+ accent: '#f39c12' # オレンジ
460
+ background: '#ecf0f1' # ライトグレー
461
+ text: '#2c3e50' # ダーク
462
+ ---
463
+
464
+ # 企業プレゼンテーション [1-12, 1]
465
+
466
+ [1-6, 2-8]
467
+ ## 製品概要
468
+ {.primary} <!-- プライマリカラーのテキスト -->
469
+
470
+ [7-12, 2-8]
471
+ ## 特徴
472
+ - 高品質
473
+ - 信頼性
474
+ - 使いやすさ
475
+ ```
476
+
477
+ #### フォントテーマの例
478
+
479
+ ```markdown
480
+ ---
481
+ theme:
482
+ fonts:
483
+ title: 'Arial Black'
484
+ body: 'Arial'
485
+ code: 'Courier New'
486
+ fontSize:
487
+ h1: 48
488
+ h2: 36
489
+ body: 24
490
+ ---
491
+
492
+ # モダンスタイル [1-12, 1]
493
+
494
+ 本文はArialフォントで大きめに表示されます。
495
+ ```
496
+
497
+ ### 高度なアニメーション
498
+
499
+ アニメーションは要素ごとに細かく制御できます。複数のオプションを組み合わせることで、プロフェッショナルなプレゼンテーションを作成できます。
500
+
501
+ #### アニメーションのタイミング制御
502
+
503
+ ```markdown
504
+ # タイトル {animation=appear animation-delay=0}
505
+
506
+ ## サブタイトル {animation=fade animation-delay=0.5}
507
+
508
+ - 項目1 {animation=fly animation-direction=left animation-delay=1}
509
+ - 項目2 {animation=fly animation-direction=left animation-delay=1.2}
510
+ - 項目3 {animation=fly animation-direction=left animation-delay=1.4}
511
+
512
+ ![グラフ](chart.png) {animation=zoom animation-delay=2 animation-duration=1.5}
513
+ ```
514
+
515
+ #### トリガーと繰り返し
516
+
517
+ ```markdown
518
+ # クリックで開始 {animation=appear animation-trigger=onClick}
519
+
520
+ # 自動再生 {animation=spin animation-repeat=3 animation-speed=fast}
521
+
522
+ # 前の要素と同時 {animation=bounce animation-trigger=withPrevious}
523
+ ```
524
+
525
+ #### 複雑なアニメーションシーケンス
526
+
527
+ ```markdown
528
+ ---
529
+ grid: 12x9
530
+ ---
531
+
532
+ # ダッシュボード表示 [1-12, 1] {animation=appear}
533
+
534
+ [1-3, 2-4] {.card} {animation=fly animation-direction=left animation-delay=0.5}
535
+ ### KPI 1
536
+ **100%**
537
+
538
+ [4-6, 2-4] {.card} {animation=fly animation-direction=top animation-delay=1}
539
+ ### KPI 2
540
+ **85%**
541
+
542
+ [7-9, 2-4] {.card} {animation=zoom animation-delay=1.5}
543
+ ### KPI 3
544
+ **92%**
545
+
546
+ [10-12, 2-4] {.card} {animation=bounce animation-delay=2}
547
+ ### KPI 4
548
+ **78%**
549
+
550
+ [1-12, 5-9] {animation=fade animation-delay=2.5}
551
+ ![トレンドグラフ](./trend.png)
552
+ ```
553
+
554
+ #### アニメーションの方向指定
555
+
556
+ ```markdown
557
+ # 左から飛んでくる {animation=fly animation-direction=left}
558
+
559
+ # 右から {animation=fly animation-direction=right}
560
+
561
+ # 上から {animation=fly animation-direction=top}
562
+
563
+ # 対角線 {animation=fly animation-direction=topLeft}
564
+
565
+ # 回転方向 {animation=spin animation-direction=clockwise}
566
+ ```
567
+
568
+ ### カスタムスタイルクラスの活用
569
+
570
+ Front Matterで独自のスタイルクラスを定義し、再利用できます。
571
+
572
+ ```markdown
573
+ ---
574
+ classes:
575
+ highlight-box:
576
+ fill: { color: '#e3f2fd' }
577
+ line: { color: '#2196f3', width: 2 }
578
+ bold: true
579
+ fontSize: 24
580
+ warning:
581
+ color: '#f57c00'
582
+ fill: { color: '#fff3e0' }
583
+ bold: true
584
+ success:
585
+ color: '#388e3c'
586
+ fill: { color: '#e8f5e8' }
587
+ ---
588
+
589
+ # プロジェクトステータス [1-12, 1]
590
+
591
+ [1-4, 2-4] {.highlight-box}
592
+ ### 完了
593
+ - 設計
594
+ - 開発
595
+
596
+ [5-8, 2-4] {.warning}
597
+ ### 進行中
598
+ - テスト
599
+ - ドキュメント
600
+
601
+ [9-12, 2-4] {.success}
602
+ ### 予定
603
+ - リリース
604
+ - メンテナンス
605
+ ```
606
+
191
607
  ## 完全なサンプル
192
608
 
193
609
  ### シンプルなスライド
@@ -420,6 +836,7 @@ classes:
420
836
  | 段落 | ✅ |
421
837
  | 箇条書き (`-`, `*`, `1.`) | ✅ |
422
838
  | 画像 (`![](...)`) | ✅ |
839
+ | 動画 (`!v(...)`) | ✅ |
423
840
  | 表 | ✅ |
424
841
  | コードブロック | ✅ |
425
842
  | Mermaid図 (` ```mermaid `) | ✅ |