自作言語ポータルへ戻る
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-highlight、card-link、lint-rule、front-matterhook を持ちます。 - 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 として扱います。