Previous: , Up: Macros   [Contents][Index]


14.6 マクロのインデント

マクロ定義ではマクロ呼び出しをTABがどのようにインデントすべきか指定するために、declareフォーム(Defining Macrosを参照)を使うことができます。インデント指定は以下のように記述します:

(declare (indent indent-spec))

このlisp-indent-functionプロパティ内の結果はマクロの名前にセットされます。

以下は利用できるindent-specです:

nil

これはプロパティーを指定しない場合と同じ — 標準的なインデントパターンを使用する。

defun

この関数を‘def’構文 — 2番目の行がbodyの開始 — と同様に扱う。

整数: number

関数の最初のnumber個の引数は区別され、残りは式のbodyと判断される。その式の中の行は、最初の引数が区別されているかどうかにしたがってインデントされる。引数がbodyの一部なら、その行はこの式の先頭の開カッコ(open-parenthesis)よりもlisp-body-indentだけ多い列にインデントされる。引数が区別されていて1つ目か2つ目の引数なら、2倍余分にインデントされる。引数が区別されていて1つ目か2つ目以外の引数なら、その行は標準パターンによってインデントされる。

シンボル: symbol

symbolは関数名。この関数はこの式のインデントを計算するために呼び出される関数。この関数は2つの引数をとる:

pos

その行のインデントが開始される位置。

state

その行の開始まで解析したとき、parse-partial-sexp(インデントとネスト深さの計算のためのLispプリミティブ)によりリターンされる値。

これは数(その行のインデントの列数)、またはそのような数がcarであるようなリストをリターンすること。数とリストの違いは、数の場合は同じネスト深さの後続のすべての行はこの数と同じインデントとなる。リストなら、後続の行は異なるインデントを呼び出すかもしれない。これはC-M-qによりインデントが計算されるときに違いが生じる。値が数ならC-M-qはリストの終わりまでの後続の行のインデントを再計算する必要はない。