MCPcopy Index your code
hub / github.com/brack-lang/brack

github.com/brack-lang/brack @v0.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.2.0 ↗ · + Follow
347 symbols 766 edges 101 files 28 documented · 8%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🐦‍⬛ The Brack Markup Language

English | 日本語

Release Pre-Release CI

Discord Invite Budge X Following Budge

Brackは文法がとてもシンプルで、拡張性が非常に高いマークアップ言語です。 WebAssemblyバイナリを利用したプラグインシステムを備えていて、あなたが使い慣れたプログラミング言語[^1]を使って、自由にコマンドを追加できます。

[^1]: ただし、WebAssemblyにコンパイルでき、かつExtismのPDK(Plug-in Development Kit)が実装されている必要があります。2024年10月16日現在、ExtismのPDKが提供されているプログラミング言語はRust、JavaScript、Go、Haskell、AssemblyScript、C、Zig、.NETの8種類です。また、v0.2.0時点では、BrackのPDKはRustのみを提供しています。未サポートの言語でExtism、BrackのPDKを実装する貢献は大歓迎です。

このリポジトリはBrackのコンパイラと言語サーバ、プロジェクト管理ツール、ドキュメントが含まれています。 以下にBrackに関連するリポジトリをリストします。

文法

Brackには、インラインコマンドとブロックコマンド、マクロの3種類の文法があります。 これらをコマンド呼び出し構文と呼びます。

{sample.heading lipsum}

[sample.bold Lorem] ipsum dolor sit amet, consectetur
adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna
aliqua.<sample.footnote for work and great pain>

{sample.hr}

[sample.italic Ut] enim ad minim veniam,
quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in 
[sample.anchor reprehenderit, https://en.wiktionary.org/wiki/reprehenderit]
in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.

コマンド呼び出し構文が呼び出されると、名前と0個以上の引数を受け取って異なるデータに置換します。 プラグインを識別するためのモジュール名と、コマンドを識別するためのコマンド名によって識別されます。

{module.inline-command arg1, arg2, ..., argN}
[module.block-command]
<module.macro arg1, arg2>

Brackのコンパイラは特定の変換を実装していません。 つまり、プラグインを入れない状態ではすべてのコマンド呼び出しはエラーになります。 Brackの開発チームから提供される、各ターゲットに対応するstdプラグインやサードパーティ製のプラグインを使ったり、自分自身でプラグインを開発することで文章を変換できます。

例として、HTMLターゲットのプラグインであるstd.htmlを利用して、変換される文章を以下に示します。

{std.* Hello, World!}

Hello, this is the document written using [std.* Brack]
<std.^ A markup language whose transformation rules can be extended by WebAssembly>.

std.htmlは、上の文章を次のように変換します^not-guarantee

<h1>Hello, World!</h1>



    Hello, this is the document written using <b>Brack</b>
    <sup>
        <a href="#fn-12345">[1]</a>
    </sup>.








Footnotes


    <ol class="footnote_ordered_list">
        <li id="fn-12345">
            A markup language whose transformation rules can be extended by WebAssembly
        </li>
    </ol>



特徴

  • 最小限の文法と小さな学習コスト
    • これまで他のマークアップ言語を使っていたとしても、Brackを使い始めることは簡単です。
    • 言語サーバによってどのように文章が変換されるのかを知ることができるので、チートシートとエディタを往復する必要ありません。
  • WebAssemblyによってプラグインを実装できる
    • Markdownではbold(**text**)がHTMLにおけるbタグ(<b>text</b>)に変換されます。既存のマークアップ言語の多くはこのような構文規則を拡張することを前提に言語が設計されていません。
    • 構文拡張をサポートする言語の多くは処理系と同じ言語でプラグインを書く必要がありますが、BrackではコンパイラがWebAssemblyを呼び出すことで実現するため、そのような制約がありません。
    • また、Brackは構文ではなく、名前と型シグネチャで一意に定まるコマンドのみを拡張できるため、学習コストを引き上げず、使える文字の制限も増えません。これは軽量マークアップ言語においてとても重要です。
  • ターゲットフォーマットが制約されない
    • Markdownは処理系によりますが多くはHTMLに変換するために用いられますが、Brackは出力するターゲットフォーマットを制約しません。
    • v0.2.0時点では、HTMLやLaTeX、Pandoc Filterなど、テキストであればどのようなフォーマットにも変換できます。そのために式や文などのコンテナに対する特別なコマンド[^container-hook]も定義できます。
    • また、PDFや動画などのバイナリ形式を出力するための後処理機構のサポートも計画されています。
  • プロジェクト管理ツール、言語サーバを提供
    • brackコマンドには、プロジェクト管理ツールや言語サーバが含まれています。
    • 個別に管理する必要がなく、一度インストールすればすぐに使い始めることができます。

[^container-hook]: コンテナフック(Container Hooks)と呼びます。

インストール

Cargo(Rust言語のパッケージマネージャ)によるインストール

cargo install --git https://github.com/brack-lang/brack brack

Nixによるインストール

nix profile install github:brack-lang/brack

ビルド

Nixによるビルド(推奨)

Flakesを有効にしたNixを使ってもビルドできます。 GitHub Actions上で、Nixによるビルドとテストが行われているため、こちらを利用したビルドを推奨しています。

git clone https://github.com/brack-lang/brack.git
cd brack
nix build .

# あるいは
echo "nix flake" > .envrc
direnv allow

Cargoによるビルド

git clone https://github.com/brack-lang/brack.git
cd brack
cargo build --release

LICENSE

assetsdoc内のすべてのファイルは、CC-BY-4.0でライセンスされています。 残りのファイルは、Apache License 2.0 or MIT License でライセンスされています。

Extension points exported contracts — how you extend this code

Logger (Interface)
(no doc)
crates/brack-common/src/logger.rs

Core symbols most depended-on inside this repo

error
called by 40
crates/brack-language-server/src/logger.rs
add
called by 32
crates/brack-common/src/cst.rs
get_path
called by 28
src/logger.rs
tokenize
called by 26
crates/brack-tokenizer/src/dot.rs
children
called by 18
crates/brack-common/src/cst.rs
separate
called by 16
crates/brack-tokenizer/src/utils.rs
merge
called by 16
crates/brack-tokenizer/src/tokenizer.rs
dispatch
called by 15
crates/brack-tokenizer/src/dispatch.rs

Shape

Function 198
Method 100
Class 26
Enum 22
Interface 1

Languages

Rust100%

Modules by API surface

crates/brack-common/src/cst.rs33 symbols
src/logger.rs26 symbols
crates/brack-common/src/ast.rs24 symbols
src/cli.rs19 symbols
crates/brack-project/src/project.rs19 symbols
crates/brack-project/src/manifest.rs11 symbols
crates/brack-plugin/src/plugins.rs11 symbols
crates/brack-language-server/src/server.rs11 symbols
crates/brack-release/src/semver.rs10 symbols
crates/brack-tokenizer/src/tokenize.rs9 symbols
crates/brack-release/src/main.rs9 symbols
crates/brack-release/src/git.rs8 symbols

For agents

$ claude mcp add brack \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact