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つの引数で呼び出される。これはendの前の任意の位置でsyntax-ppssを呼び出すことが許されている。しかしsyntax-ppss-flush-cacheを呼び出すべきではなく、そのためある位置でsyntax-ppssを呼び出して後からバッファー内の前の位置を変更することは許されていない。
このアブノーマルフックはsyntax-propertize-function呼び出しに先立ち構文解析コードにより実行される。これはsyntax-propertize-functionに渡すために安全なバッファーの開始と終了の位置を見つける助けをする役割をもつ。たとえばメジャーモードは複数行の構文構成を識別して、境界が複数行の中間にならないようにこのフックに関数を追加できる。
このフック内の各関数は引数startとendを受け取ること。これは2つのバッファー位置を調整するコンスセル(new-start
.
new-end)、調整が必要なければnilをリターンするべきである。フック関数はそれらすべてがnilをリターンするまで順番に繰り返し実行される。