ある言語の構文を指定するのに構文テーブルが十分に柔軟でないときは、
バッファー内に出現する特定の文字にたいしてテキストプロパティsyntax-table
を適用することにより構文テーブルをオーバーライドできます。テキストプロパティを適用する方法についてはテキストのプロパティを参照してください。
以下はテキストプロパティsyntax-table
の有効な値です:
プロパティの値が構文テーブルなら、根底となるテキスト文字の構文を決定するカレントバッファーの構文テーブルのかわりにそのテーブルが使用される。
(syntax-code . matching-char)
この形式のコンスセルは根底となるテキスト文字の構文クラスを直接指定するraw構文テーブル(構文テーブルの内部を参照)。
nil
このプロパティがnil
なら、その文字の構文はカレント構文テーブルにより通常の方法で決定される。
これが非nil
なら、forward-sexp
のような構文をスキャンする関数はsyntax-table
テキストプロパティを考慮し、それ以外ならカレント構文テーブルだけを使用する。
この変数が非nil
なら特定のテキスト範囲にたいしてsyntax-table
プロパティを適用する関数を格納すること。これはモードに適した方法でsyntax-table
プロパティを適用する関数をインストールするようにメジャーモードで使用されることを意図している。
この関数はsyntax-ppss
(ある位置のパース状態を調べるを参照)、および構文フォント表示化(構文的なFont Lockを参照)の間にFont
Lockモードにより呼び出される。これは作用すべきテキスト部分の開始startと終了endという2つの引数で呼び出される。startとendで区切られたリージョン内でポイントを任意に移動でき、そのような移動にsave-excursion
(エクスカーションを参照)を使う必要はない。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
をリターンするまで順番に繰り返し実行される。