コンテンツにスキップ

Remark / mdast adapter

前提: JavaScript binding@illusions-lab/mdi-remark は unified user 向けの adapter で、独自 parser ではありません。Parser@illusions-lab/mdi の real Rust parse() と IR→mdast 変換で置き換えます。

unified/remark pipeline で MDI を使うときの入口です。MDI の意味を JavaScript で再解釈するのではなく、Rust が返した Document IR を標準 mdast と MDI 拡張 node に写します。したがって CLI や direct JavaScript API と構文の意味が分岐することはありません。

import { unified } from "unified";
import remarkMdi from "@illusions-lab/mdi-remark";
import remarkStringify from "remark-stringify";
const processor = unified().use(remarkMdi).use(remarkStringify);
const tree = processor.parse("{雪女|ゆき.おんな}が現れた。");

processor.parse() が返す tree は通常の mdast として、次の unified plugin に渡せます。remark-stringify を加えれば編集後の tree を text に戻せますが、下記の one-way の注意を確認してください。

Rust IRmdast
ruby, tcy, break, emmdiRuby, mdiTcy, mdiBreak, mdiEm
noBreak, warichu, kernmdiNoBreak, mdiWarichu, mdiKern
blank, pagebreakmdiBlank, mdiPagebreak
paragraph indent/bottomdata.mdiIndent / data.mdiBottom

普通の Markdown/GFM node はそのまま mdast shape になります。

front matter は tree.data.frontmatter に structured data(default mdi: "2.0"lang: "ja"、horizontal writing 等)として置かれます。malformed YAML は throw せず default に fallback します。front matter node を文字列として再解析する必要はありません。

.mdi → mdast parsing は実装済みで Rust-backed です。編集後 mdast の .mdi stringify も mdiToMarkdown() でできますが、Rust serialize_mdi の recommended-form normalization はまだ通りません。例えば 《《...》》 を自動で `` にする保証はありません。

  • 独自の MDI parser は持ちません。 Rust/CLI と結果が違えば adapter か core のバグです。
  • rendering はしません。 これは .mdimdast の橋渡しであり、HTML/PDF/EPUB/DOCX は各 renderer または CLI を使います。
  • Rust の normalization を補いません。 編集済み tree を stringify する場合、canonical な recommended form が必要なら Rust の serializeMdi() を別途使ってください。