Next: , Previous: , Up: 構文テーブル   [Contents][Index]


36.4 構文プロパティ

ある言語の構文を指定するのに構文テーブルが十分に柔軟でないときは、 バッファー内に出現する特定の文字にたいしてテキストプロパティsyntax-tableを適用することにより構文テーブルをオーバーライドできます。テキストプロパティを適用する方法についてはテキストのプロパティを参照してください。

以下はテキストプロパティsyntax-tableの有効な値です:

syntax-table

プロパティの値が構文テーブルなら、根底となるテキスト文字の構文を決定するカレントバッファーの構文テーブルのかわりにそのテーブルが使用される。

(syntax-code . matching-char)

この形式のコンスセルは根底となるテキスト文字の構文クラスを直接指定するraw構文テーブル(構文テーブルの内部を参照)。

nil

このプロパティがnilなら、その文字の構文はカレント構文テーブルにより通常の方法で決定される。

Variable: parse-sexp-lookup-properties

これが非nilなら、forward-sexpのような構文をスキャンする関数はsyntax-tableテキストプロパティを考慮し、それ以外ならカレント構文テーブルだけを使用する。

Variable: syntax-propertize-function

この変数が非nilなら特定のテキスト範囲にたいしてsyntax-tableプロパティを適用する関数を格納すること。これはモードに適した方法でsyntax-tableプロパティを適用する関数をインストールするようにメジャーモードで使用されることを意図している。

この関数はsyntax-ppss (ある位置のパース状態を調べるを参照)、および構文フォント表示化(構文的なFont Lockを参照)の間にFont Lockモードにより呼び出される。これは作用すべきテキスト部分の開始startと終了endという2つの引数で呼び出される。startendで区切られたリージョン内でポイントを任意に移動でき、そのような移動にsave-excursion (エクスカーションを参照)を使う必要はない。endの前の任意の位置でsyntax-ppssを呼び出すこともできるが、Lispプログラムがどこかでsyntax-ppssを呼び出して、その後にそこより前の位置でバッファーを変更する場合には、もはや古くなってしまった情報をキャッシュからフラッシュするためにsyntax-ppss-flush-cacheを呼び出すのは、そのプログラムの責任である。

警告: この変数が非nilなら、Emacsはsyntax-tableテキストプロパティを任意に削除して、それらの再適用はsyntax-propertize-functionに依存する。つまりこの機能が使用される場合には、関数はメジャーモードが使用するすべてsyntax-tableテキストプロパティを適用しなければならない。特にCCモードはこれらのテキストプロパティの削除と適用に別の手段を使用するので、CCモードから派生したモードはこの変数を使用してはならない。

Variable: syntax-propertize-extend-region-functions

このアブノーマルフックはsyntax-propertize-function呼び出しに先立ち構文解析コードにより実行される。これはsyntax-propertize-functionに渡すために安全なバッファーの開始と終了の位置を見つける助けをする役割をもつ。たとえばメジャーモードは複数行の構文構成を識別して、境界が複数行の中間にならないようにこのフックに関数を追加できる。

このフック内の各関数は引数startendを受け取ること。これは2つのバッファー位置を調整するコンスセル(new-start . new-end)、調整が必要なければnilをリターンするべきである。フック関数はそれらすべてがnilをリターンするまで順番に繰り返し実行される。