TextMate 文法


@cosense-toolbox/textmate は、Cosense 記法を色分けする TextMate 文法を提供します。通常の .csn 向けと、コンポーネント行を認識する .csnx 向けの2種類があります。

インストール


Shell
npm install @cosense-toolbox/textmate

Shiki で使う


cosense と cosenseX は、Shiki の言語登録としてそのまま渡せます。

TypeScript
import { 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 文法ファイルを直接読むツールで使えます。

TypeScript
import grammar from "@cosense-toolbox/textmate/cosense.tmLanguage.json" with { type: "json" }

Zed は TextMate 文法ではなく LSP の semantic tokens を利用します。Zed で色を付ける場合は Language Server のガイドを参照してください。

対応範囲と注意点


TextMate 文法は正規表現で記法を認識するため、パーサーと同じ挙動をすべて表現できるわけではありません。たとえば Shiki は空行を文法に渡さないため、コードブロックやタイトルの判定に差が出ることがあります。

差分とスコープ名の一覧は TextMate パッケージの README をご覧ください。