SMIEは構造的な操作とコードの構造的構造にもとづくその他さまざまな機能、特に自動インデントにたいするワンストップショップ(一カ所で必要な全ての買い物ができる店やそのような場所)であることを意図しています。メインのエントリーポイントはsmie-setup
で、これは通常はメジャーモードセットアップの間に呼び出される関数です。
SMIEの操作とインデントをセットアップする。grammarはsmie-prec2->grammar
により生成される文法テーブル(grammar
table)、rules-functionはsmie-rules-function
で使用されるインデントルールのセット、keywordsは追加の引数であり以下のキーワードを含むことができる:
:forward-token
fun: 使用する前方lexer(lexer=lexical analyzer:
字句解析プログラム)を指定する。
:backward-token
fun: 使用する後方lexerを指定する。
この関数を呼び出せばforward-sexp
、backward-sexp
、transpose-sexps
のようなコマンドが、すでに構文テーブルにより処理されている単なるカッコのペア以外の、構造的な要素を正しく扱うことができるようになります。たとえば与えられた文法が十分に明快ならば、transpose-sexps
はその言語の優先順位のルールを考慮して+
演算子の2つの引数を正しく入れ替えることができます。
smie-setup
の呼び出しはbegin...end
のような要素に適用するためにblink-matching-paren
を拡張してTABによるインデントを期待通り機能させるとともに、メジャーモードのキーマップ内でバインドできるいくつかのコマンドの提供を満足します。
このコマンドは、もっとも最近オープンされた(まだクローズされていない)ブロックをクローズする。
このコマンドはdown-list
と似ているが、begin...end
のようなカッコ以外のネストされたトークンにも注意を払う。