Next: Motion and Syntax, Previous: Syntax Table Functions, Up: Syntax Tables [Contents][Index]
ある言語の構文を指定するのに構文テーブルが十分に柔軟でないときは、
バッファー内に出現する特定の文字にたいしてテキストプロパティsyntax-tableを適用することにより構文テーブルをオーバーライドできます。テキストプロパティを適用する方法についてはText Propertiesを参照してください。
以下はテキストプロパティsyntax-tableの有効な値です:
プロパティの値が構文テーブルなら、根底となるテキスト文字の構文を決定するカレントバッファーの構文テーブルのかわりにそのテーブルが使用される。
(syntax-code . matching-char)この形式のコンスセルは根底となるテキスト文字の構文クラスを直接指定するraw構文テーブル(Syntax Table Internalsを参照)。
nilこのプロパティがnilなら、その文字の構文はカレント構文テーブルにより通常の方法で決定される。
これが非nilなら、forward-sexpのような構文をスキャンする関数はsyntax-tableテキストプロパティを考慮し、それ以外ならカレント構文テーブルだけを使用する。
この変数が非nilなら特定のテキスト範囲にたいしてsyntax-tableプロパティを適用する関数を格納すること。これはモードに適した方法でsyntax-tableプロパティを適用する関数をインストールするようにメジャーモードで使用されることを意図している。
この関数はsyntax-ppss (Position Parseを参照)、および構文フォント表示化(Syntactic Font Lockを参照)の間にFont
Lockモードにより呼び出される。これは作用すべきテキスト部分の開始startと終了endという2つの引数で呼び出される。startとendで区切られたリージョン内でポイントを任意に移動でき、そのような移動にsave-excursion
(Excursionsを参照)を使う必要はない。endの前の任意の位置でsyntax-ppssを呼び出すこともできるが、Lispプログラムがどこかでsyntax-ppssを呼び出して、その後にそこより前の位置でバッファーを変更する場合には、もはや古くなってしまった情報をキャッシュからフラッシュするためにsyntax-ppss-flush-cacheを呼び出すのは、そのプログラムの責任である。
警告:
この変数が非nilなら、Emacsはsyntax-tableテキストプロパティを任意に削除して、それらの再適用はsyntax-propertize-functionに依存する。つまりこの機能が使用される場合には、関数はメジャーモードが使用するすべてのsyntax-tableテキストプロパティを適用しなければならない。特にCCモードはこれらのテキストプロパティの削除と適用に別の手段を使用するので、CCモードから派生したモードはこの変数を使用してはならない。
このアブノーマルフックはsyntax-propertize-function呼び出しに先立ち構文解析コードにより実行される。これはsyntax-propertize-functionに渡すために安全なバッファーの開始と終了の位置を見つける助けをする役割をもつ。たとえばメジャーモードは複数行の構文構成を識別して、境界が複数行の中間にならないようにこのフックに関数を追加できる。
このフック内の各関数は引数startとendを受け取ること。これは2つのバッファー位置を調整するコンスセル(new-start
.
new-end)、調整が必要なければnilをリターンするべきである。フック関数はそれらすべてがnilをリターンするまで順番に繰り返し実行される。