Generate web slides from Comark

feat(core): load Shiki languages dynamically from the AST master

comark/plugins/highlight pre-registers nine languages and silently falls through to a plain-text fallback for anything else, which reads as a styling bug rather than an error. Switching from a hardcoded import list to a tree walk means each deck only loads what its fences actually reference, new languages cost zero code, and unused ones aren't dragged into the build. - highlight.ts: walk every <pre> in the parsed tree, normalize alias fence strings (py → python, ts → typescript, yml → yaml, ...), dynamically import only the canonical Shiki modules the deck names, then run comark's highlightCodeBlocks with that set and registerDefaults disabled. - Module cache lives across parses so the dev server pays each language's import cost exactly once per process. - Unknown languages still render via the plugin's plain-text path — the catch is silent and cached so failing imports aren't retried on every rebuild. - renderer.ts: drop the eleven hardcoded language imports and the highlightPlugin from the parse call; run highlightTree on the parsed tree instead. Mermaid plugin still runs during parse, so its rewritten <mermaid> elements never reach the highlight walk. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>


+152 -11
2 changed files