TextMate 文法
@cosense-toolbox/textmate は、Cosense 記法を色分けする TextMate 文法を提供します。通常の .csn 向けと、コンポーネント行を認識する .csnx 向けの2種類があります。インストール
Shellnpm install @cosense-toolbox/textmateShiki で使う
cosense と cosenseX は、Shiki の言語登録としてそのまま渡せます。
TypeScriptimport { createHighlighter } from "shiki"import { cosense, cosenseX } from "@cosense-toolbox/textmate"const highlighter = await createHighlighter({ themes: ["catppuccin-latte"], langs: [cosense, cosenseX],})const html = highlighter.codeToHtml("タイトル\n[* 強調]", { lang: "cosense", theme: "catppuccin-latte",})言語名は
cosense / cosense-x、短縮名は csn / csnx です。Astro では markdown.shikiConfig.langs に登録できます。文法ファイル
.tmLanguage.json も同梱しています。VS Code の contributes.grammars など、TextMate 文法ファイルを直接読むツールで使えます。
TypeScriptimport grammar from "@cosense-toolbox/textmate/cosense.tmLanguage.json" with { type: "json" }Zed は TextMate 文法ではなく LSP の semantic tokens を利用します。Zed で色を付ける場合は Language Server のガイドを参照してください。
対応範囲と注意点
TextMate 文法は正規表現で記法を認識するため、パーサーと同じ挙動をすべて表現できるわけではありません。たとえば Shiki は空行を文法に渡さないため、コードブロックやタイトルの判定に差が出ることがあります。
差分とスコープ名の一覧は TextMate パッケージの README をご覧ください。