自作言語ポータルへ戻る

Markdown Dialect / Toolchain

Gloss

Ruby・Anno・Nest・Math・Lint の 5 つの拡張を持つ Markdown 方言と、そのための Rust / WASM / CLI toolchain です。 実装上は src-core の parser / HTML renderer を中心に、WASM 公開 API、CLI、plugin host、editor 系 crate が分かれており、 日本語文書、語学資料、数式を含む技術文書を同じ parser 系で扱う構成になっています。

この repo の核

  • src-core#![no_std] の parser / HTML renderer で、Event stream を生成し push_html() / push_html_with_ids() で HTML を出力します。
  • parser は Ruby・Anno・Nest・Math・Lint を持ち、front matter、card link、脚注、table、code block も Event と Warning に落とします。
  • HTML renderer は front matter の描画、MathML + TeX 埋め込み、block 単位の data-bid 付与まで扱います。
  • 単なる記法追加ではなく、CLI・WASM・plugin・editor から同じ parser 系を再利用する構成になっています。

構文として実装されているもの

  • Ruby は [base/reading]、Anno は {base/note1/note2/...} として parser に実装されています。
  • Nest は ---;;; による明示 close として実装され、section HTML を開閉します。
  • Math は inline / display の両方を扱い、HTML 側では MathML と TeX を併記します。
  • 入力拡張子は慣習的に .n.md を使い、CLI も .n.md -> .html を標準ケースとして扱います。

toolchain の構成

  • WASM: render_markdown()render_with_warnings()source_block_hashes() を公開しています。
  • CLI: スタンドアロン HTML を吐き、front matter と plugin 設定を反映した上で warning を stderr に出します。
  • Plugin host: Extism ベースで code-highlightcard-linklint-rulefront-matter hook を持ちます。
  • Editor / desktop 系: highlight、cursor、IME、undo、memory VFS、draw/event 型などの crate が分かれています。

ブラウザと静的生成の接続

  • WASM 側は block hash と data-bid を使う前提で、差分更新しやすい HTML を返します。
  • CLI 側は単体 HTML を出力するため、静的 site build の土台としてそのまま使えます。
  • 同じ parser / renderer 系を browser playground と build pipeline の両方で使えるのが強みです。
  • この site でも将来的に article 変換器として使う予定ですが、Gloss 自体は独立した publishing toolchain として扱います。